API
Módulos
Una app NSH importa todo lo que usa desde un pequeño conjunto de módulos. Todos son nativos: el grafo reactivo, el renderizador y cada módulo están implementados en Rust dentro del runtime, y el bundler mantiene import ... from "nsh/..." como imports en lugar de copiar código en tu bundle. Tu bundle solo contiene tu propio código.
import { createAnimatedValue, mount, signal, windowSize } from "nsh";
import { Button } from "nsh/base";
import { TabBar } from "nsh/mobile";
#Tres capas
La UI de NSH se construye en tres capas, igual que la de GPUI Kit (gpui, gpui-base, gpui-component):
| Capa | Módulos | Qué ofrece a una app |
|---|---|---|
| Primitivos | nsh, nsh/mobile, nsh/desktop |
Reactividad, los elementos host, layout, listas, canvas, animación, gestos, información del dispositivo y las APIs propias de cada plataforma |
| Componentes base | nsh/base |
Componentes sin estilo que gestionan comportamiento, estado, foco y accesibilidad: un botón, documentos Markdown y HTML, pilas de navegación y diálogos, y los diálogos del sistema, en todas las plataformas |
| Biblioteca de componentes | la de tu app, o una de la comunidad | Botones, tarjetas, filas y pantallas con una apariencia propia |
La apariencia de una app es responsabilidad de la propia app. Su biblioteca de componentes es la tercera capa: componentes que escribe a partir de los elementos host y nsh/base, con estilos de style, clases de Tailwind y su tema, componentes Rust que distribuye en su propio crate, o una biblioteca que la comunidad publica sobre la misma base.
No existe un módulo que lo agrupe todo: cada API vive en un único lugar. Las APIs de las plataformas móviles viven en nsh/mobile (iOS y Android) y las de los escritorios en nsh/desktop (macOS, Windows, Linux); ambos pueden importarse en todas las plataformas, de modo que un solo bundle funciona en todas partes (en las demás plataformas sus llamadas retornan de inmediato, y platform.os te indica en qué plataforma estás).
Los tipos se generan a partir del runtime: nsh init, nsh build, nsh dev y nsh test escriben .nsh/types junto a tu app, de modo que las declaraciones de TypeScript siempre coinciden con el runtime con el que compilas (consulta Estructura del proyecto).
#Todos los módulos
| Módulo | Exporta | Página |
|---|---|---|
nsh |
signal, computed, effect, batch, untracked, cleanup, context, split, mount, ErrorBoundary; los primitivos View, Text, Scroll, List, Image (con Image.getSize, Image.prefetch), Canvas (con Path2D, CanvasRenderingContext2D, CanvasGradient), WebView, Video; safeArea, safeAreaInsets; Keyboard, keyboardFrame; animación (createAnimatedValue, AnimatedValue, AnimatedNode, Animated, Easing, LayoutAnimation); el entorno (windowSize, colorScheme, setColorScheme, fontScale, pixelRatio, locale, platform, openUrl); PanResponder; Clipboard; Picker; Storage; host (available, call, on, además de los SDK nativos params y post); keymap (atajos de teclado: mod+k, ctrl+shift+p, …); nativeComponent, nativeModule (componentes y funciones que registra la app anfitriona); accesibilidad (announce, setAccessibilityFocus, screenReaderEnabled, reduceMotion); los tipos de elementos, estilos, eventos y JSX (ViewRef, InputRef, …, ViewStyle, …) |
nsh |
nsh/base |
Button, Input; TextView; createNavStack, NavStack, NavPage, Dialog; AlertDialog |
nsh/base |
nsh/mobile |
isAvailable, TabBar (la barra de pestañas del sistema, iOS y Android), InputAccessoryView (iOS), BackHandler (Android) |
nsh/mobile |
nsh/desktop |
isAvailable, Window (título, barra de título, maximizar, pantalla completa), titleBar, Menu (menú de la aplicación, menús contextuales) |
nsh/desktop |
| Módulos estándar | buffer, console, crypto, fs/promises, net, os, path, process, url, websocket, zlib |
Módulos estándar |
| Globales | fetch, URL, TextEncoder, Blob, FormData, AbortController, Intl, temporizadores, console, requestAnimationFrame, … (sin import) |
APIs globales |
Páginas de referencia que no son módulos:
| Página | Contenido |
|---|---|
| Referencia de estilos | Cada clave de estilo, su tipo y su significado |
| Referencia de Tailwind | Las utilidades y variantes de Tailwind que acepta class |
#Elementos host
Los elementos host son componentes que se importan como todo lo demás: View, Text, Scroll, Image, List, Canvas, WebView, Video y Overlay desde nsh, los componentes base (Button, Input, Dialog, NavStack, NavPage) desde nsh/base, InputAccessoryView desde nsh/mobile. Solo If y Each son globales. El compilador crea los elementos en el sitio, por lo que los imports no cuestan nada en tiempo de ejecución. Sus props están documentadas en Elementos.