API
モジュール
NSH アプリは、使用するすべてを少数のモジュールからインポートします。これらはすべてネイティブです。リアクティブグラフ、レンダラー、各モジュールはランタイム内部で Rust により実装されており、バンドラーは import ... from "nsh/..." をコードとしてバンドルにコピーせず、インポートのまま保持します。バンドルに含まれるのは、あなた自身のコードだけです。
import { createAnimatedValue, mount, signal, windowSize } from "nsh";
import { Button } from "nsh/base";
import { TabBar } from "nsh/mobile";
#3 つのレイヤー
NSH の UI は、GPUI Kit と同様に 3 つのレイヤーで構成されています(gpui、gpui-base、gpui-component)。
| レイヤー | モジュール | アプリに提供するもの |
|---|---|---|
| プリミティブ | nsh、nsh/mobile、nsh/desktop | リアクティビティ、ホスト要素、レイアウト、リスト、キャンバス、アニメーション、ジェスチャー、デバイス情報、各プラットフォーム固有の API |
| ベースコンポーネント | nsh/base | 動作、状態、フォーカス、アクセシビリティを担う、スタイルのないコンポーネント。ボタン、Markdown と HTML のドキュメント、ナビゲーションスタック、ダイアログ、システムのダイアログを、すべてのプラットフォームで提供します |
| コンポーネントライブラリ | アプリ自身のもの、またはコミュニティのもの | 見た目を備えたボタン、カード、行、画面 |
アプリの見た目は、そのアプリ自身のものです。コンポーネントライブラリは第 3 のレイヤーにあたります。ホスト要素と nsh/base から作成し、style、Tailwind クラス、テーマでスタイルを付けたコンポーネント、独自の crate で提供する Rust コンポーネント、あるいは同じ基盤上でコミュニティが公開しているライブラリを使えます。
すべてを含むモジュールはありません。各 API はちょうど 1 か所に置かれています。モバイルプラットフォーム(iOS と Android)の API は nsh/mobile に、デスクトップ(macOS、Windows、Linux)の API は nsh/desktop にあります。どちらもすべてのプラットフォームでインポートできるため、1 つのバンドルがどこでも動作します(他のプラットフォームでは、これらの呼び出しはただちに戻ります。現在のプラットフォームは platform.os で確認できます)。
型はランタイムから生成されます。nsh init、nsh build、nsh dev、nsh test がアプリの隣に .nsh/types を書き出すため、TypeScript の宣言は、ビルドに使うランタイムと常に一致します(プロジェクト構成を参照)。
#すべてのモジュール
| モジュール | エクスポート | ページ |
|---|---|---|
nsh | signal、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/base | Button、Input。TextView。createNavStack、NavStack、NavPage、Dialog。AlertDialog | nsh/base |
nsh/mobile | isAvailable、TabBar(システムのタブバー、iOS と Android)、InputAccessoryView(iOS)、BackHandler(Android) | nsh/mobile |
nsh/desktop | isAvailable、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 リファレンス | class が受け付ける Tailwind のユーティリティとバリアント |
#ホスト要素
ホスト要素は、他のものと同様にインポートして使うコンポーネントです。View、Text、Scroll、Image、List、Canvas、WebView、Video、Overlay は nsh から、ベースコンポーネント(Button、Input、Dialog、NavStack、NavPage)は nsh/base から、InputAccessoryView は nsh/mobile からインポートします。グローバルなのは If と Each だけです。コンパイラが要素をその場で生成するため、インポートによる実行時のコストはありません。各 props は要素のページに記載されています。