Эта страница переведена машинным способом и может содержать ошибки. Читать оригинал на английском

API

Модули

Приложение NSH импортирует всё, что использует, из небольшого набора модулей. Все они нативные: реактивный граф, рендерер и каждый модуль реализованы на Rust внутри рантайма, а бандлер оставляет import ... from "nsh/..." как импорты и не копирует код в ваш бандл. Ваш бандл содержит только ваш собственный код.

import { createAnimatedValue, mount, signal, windowSize } from "nsh";
import { Button } from "nsh/base";
import { TabBar } from "nsh/mobile";

#Три слоя

UI в NSH строится из трёх слоёв, как и в GPUI Kit (gpui, gpui-base, gpui-component):

СлойМодулиЧто получает приложение
Примитивыnsh, nsh/mobile, nsh/desktopРеактивность, host-элементы, раскладка, списки, canvas, анимация, жесты, информация об устройстве и собственные API платформ
Базовые компонентыnsh/baseКомпоненты без стилей, которые отвечают за поведение, состояние, фокус и доступность: кнопка, документы Markdown и HTML, стеки навигации, диалоги и системные диалоги на каждой платформе
Библиотека компонентовваша собственная или из сообществаКнопки, карточки, строки и экраны с внешним видом

Внешний вид приложения определяет само приложение. Его библиотека компонентов — это третий слой: компоненты, которые приложение пишет из host-элементов и nsh/base и стилизует с помощью style, классов Tailwind и своей темы, компоненты на Rust, которые оно поставляет в собственном крейте, или библиотека, опубликованная сообществом на той же основе.

Универсального модуля «всё в одном» нет: каждый API находится ровно в одном месте. API мобильных платформ находятся в nsh/mobile (iOS и Android), а API десктопов — в nsh/desktop (macOS, Windows, Linux). Оба модуля можно импортировать на любой платформе, поэтому один бандл работает везде (на других платформах их вызовы сразу возвращаются, а platform.os сообщает, на какой платформе вы работаете).

Типы генерируются из рантайма: nsh init, nsh build, nsh dev и nsh test записывают .nsh/types рядом с вашим приложением, поэтому объявления TypeScript всегда соответствуют рантайму, с которым вы собираете проект (см. Структура проекта).

#Все модули

МодульЭкспортыСтраница
nshsignal, computed, effect, batch, untracked, cleanup, context, split, mount, ErrorBoundary; примитивы View, Text, Scroll, List, Image (вместе с Image.getSize, Image.prefetch), Canvas (вместе с Path2D, CanvasRenderingContext2D, CanvasGradient), WebView, Video; safeArea, safeAreaInsets; Keyboard, keyboardFrame; анимация (createAnimatedValue, AnimatedValue, AnimatedNode, Animated, Easing, LayoutAnimation); окружение (windowSize, colorScheme, setColorScheme, fontScale, pixelRatio, locale, platform, openUrl); PanResponder; Clipboard; Picker; Storage; host (available, call, on, а также нативные SDK params и post); keymap (сочетания клавиш: mod+k, ctrl+shift+p, …); nativeComponent, nativeModule (компоненты и функции, которые регистрирует встраивающее приложение); доступность (announce, setAccessibilityFocus, screenReaderEnabled, reduceMotion); типы элементов, стилей, событий и JSX (ViewRef, InputRef, …, ViewStyle, …)nsh
nsh/baseButton, Input; TextView; createNavStack, NavStack, NavPage, Dialog; AlertDialognsh/base
nsh/mobileisAvailable, TabBar (системная панель вкладок, iOS и Android), InputAccessoryView (iOS), BackHandler (Android)nsh/mobile
nsh/desktopisAvailable, Window (заголовок, строка заголовка, разворачивание, полноэкранный режим), titleBar, Menu (меню приложения, контекстные меню)nsh/desktop
Стандартные модулиbuffer, console, crypto, fs/promises, net, os, path, process, url, websocket, zlibСтандартные модули
Глобальныеfetch, URL, TextEncoder, Blob, FormData, AbortController, Intl, таймеры, console, requestAnimationFrame, … (импорт не нужен)Глобальные API

Справочные страницы, которые не являются модулями:

СтраницаЧто описывает
Справочник по стилямКаждый ключ стиля, его тип и значение
Справочник по TailwindУтилиты и варианты Tailwind, которые принимает class

#Host-элементы

Host-элементы — это компоненты, которые импортируются так же, как и всё остальное: View, Text, Scroll, Image, List, Canvas, WebView, Video и Overlay из nsh, базовые компоненты (Button, Input, Dialog, NavStack, NavPage) из nsh/base, InputAccessoryView из nsh/mobile. Глобальными являются только If и Each. Компилятор создаёт элементы на месте, поэтому импорты ничего не стоят во время выполнения. Их свойства описаны в разделе Элементы.