NUCLO / 12

言語

実践的なサンプル。ライブデモ。

サンプルを選ぶと全画面で開き、ライブプレビューとソースが並んで表示されます。

コンポーネント

4

静的・動的パラメーター、子要素、同一性で照合されるリスト、ネストしたデータを扱うプレーンな関数。各プレビューはマウント回数を数えます。

API

13

構成要素ごとに 1 つの小さなデモ。ドキュメントに埋め込まれているものと同じです。

09

タグビルダー

ビルダーは属性、静的な子要素、動的なテキストを受け取ります。Rename は状態を変更してから update() を呼び出します。

API
10

コンポーネント

コンポーネントはプレーンな関数です。Counter() の各呼び出しは自分のカウントを持ちます。

API
11

属性

属性の値は関数にできます。2 つ目のボタンは busy を反転して update() を呼び出し、Save の disabled と aria-busy がそれに従います。

API
12

イベント

onInput と onKeyDown はプレーンな属性です。入力してから Escape を押すとクリアされます。

API
13

ライフサイクル

onMount がインターバルを開始し、そのクリーンアップを返します。アンマウントでクリーンアップが実行されるので、タイマーが再びマウントされるまでカウントは止まります。

API
14

明示的な更新

count++ は変数を変えるだけです。テキストは次の update() で追いつきます。ボタンからでも、このページの他の何かからでも。

API
15

動的な値

名前を編集してください。静的なテキストは要素が構築されたときに固定されました。動的なテキストは update() ごとに再実行されます。forceUpdate() はツリーを作り直すので、静的なテキストも追いつきます。

API
16

update()

すべての update() はすべての動的な値を実行します。データが変わっていなくてもです。このページの他のデモもカウントを増やします。

API
17

scope()

両方のボタンは項目を追加してユーザーをリネームします。update('cart') はスコープ内のパネルだけを更新します。

API
18

when()

最初に真になった条件が勝ちます。どれも真でなければ .else() が描画されます。新しいブランチはゼロから構築されます。

API
19

list()

行は同一性で照合されます。行にチェックを入れてから Reverse: 同じ <li> がチェックボックスごと移動します。

API
20

region() と into()

積み重ねられたメインリージョンとサイドリージョンを持つレイアウトを、その外側から埋めます。Home に入力し、ダイアログを開いて閉じてください: テキストは残ります。Article は 1 つの into() で両方のリージョンを埋めます。

API
21

forceUpdate()

update() は動的な lang 行だけを更新します。forceUpdate() は App を再び呼び出し、同じ <h1> をパッチします。明示的な形式はページ全体ではなくこのツリーだけを作り直します。

API

SVG

27

SVG タグビルダーで作るチャート、アニメーション、ツール、ゲーム。プレーンなデータ、ポインターイベント、update() で駆動します。

28

棒グラフ

配列から rect を作ります。その y と height はデータの関数なので、update() がバーを動かします。

SVG
29

折れ線グラフ

d が点から組み立てられるパスに、グラデーションの面と点ごとの circle を添えます。

SVG
30

ドーナツチャート

スライスごとに 1 つの circle。stroke-dasharray がリングの分け前を、stroke-dashoffset が開始位置を与えます。

SVG
31

SVG アニメーション

ビルダーとしての SMIL: animateSvg が太陽を脈動させ、animateTransformSvg が惑星を周回させます。動的な dur が速度を設定します。

SVG
32

ゲージ

stroke-dashoffset で満たされる円弧と、CSS transform で回る針。どちらも 1 つの数値の関数です。

SVG
33

レーダーチャート

5 つの軸に 5 つの値。形は d がデータから計算される 1 つのパスなので、update() がそれを変形させます。

SVG
34

ヒートマップ

fill-opacity がレベルに従う rect のグリッド。セルをクリックすると値が上がり、titleSvg の子要素がツールチップになります。

SVG
35

ホバーツールチップ

SVG 要素のポインターイベント。onPointerEnter がアクティブな点を選び、ツールチップのグループがそこへスライドします。

SVG
36

カーブエディター

3 次ベジェのハンドルをドラッグします。onPointerDown が点を選び、svg 上の onPointerMove がそれを動かし、パスが追従します。

SVG
37

時計

針は transform が時刻の関数である line です。onMount が刻みを開始し、クリーンアップを返します。

SVG
38

アイコントグル

CSS トランジションでバツ印に変形するメニューアイコンと、クリックで始まる SMIL アニメーションで弾むハート。

SVG
39

ライブストリーム

2 つの系列がタイマーで左へ流れます。1 ティックと同じ長さの CSS トランジションがスライドを滑らかにし、ホバーすると任意のサンプルを読めます。

SVG
40

ローソク足チャート

40 のスロットがそれぞれ自分のローソク足を読みます。時間足を変え、移動平均を切り替え、ホバーして数値を見るか、ライブのローソク足が刻むのを眺めてください。

SVG
41

バーチャートレース

10 本のバーは DOM から離れません。順位が translateY を設定するので、値が変わるとトランジションが各バーをその行へスライドさせます。

SVG
42

積み上げ面グラフ

4 つのバンドが積み上げ、ストリーム、パーセントのレイアウト間で変形します。系列を隠してもそのバンドの厚さがゼロになるだけなので、すべてのパスが形を保ちます。

SVG
43

ツリーマップ

ドリルダウンできる squarified レイアウト。指標を切り替えるとすべてのセルが新しい枠へスライドし、グループをクリックするとその子に入れ替わります。

SVG
44

ライブヒストグラム

4 つの分布からサンプルが流れ込みます。ビンは変更ごとに数え直され、フィットした釣鐘曲線が平均に追従し、スライダーがビンの数を設定します。

SVG
45

お絵かきパッド

ポインターイベントが polyline を描きます。list() がストロークごとに 1 つを描画し、描き途中のストロークは update() ごとに伸びます。

SVG
46

ロータリーノブ

カスタムスライダー: ポインターの角度が値を設定し、矢印キーが値を刻み、pathLength="100" が値をダッシュに変えます。

SVG
47

カラーホイール

角度で色相を、距離で彩度を選びます。90 個のくさび形、放射グラデーション、暗い円盤でホイールを作ります。

SVG
48

スピログラフ

リングの内側を車輪が転がり、ペンがその軌跡を描きます。各フレームは 1 本のダッシュを伸ばし、自分の scope() だけを更新します。

SVG
49

跳ねるボール

requestAnimationFrame ループの中の重力、壁、衝突。引いて放すとボールを打ち出します。

SVG
50

ねばねばブロブ

ぼかしとカラーマトリックスのフィルターがブロブを溶け合わせます。circle の軌跡がポインターに追従します。

SVG
51

力学グラフ

ノードは反発し、リンクは引き寄せ、レイアウトは静止するまで冷えていきます。ノードをドラッグするか、クリックして子を生やしてください。

SVG
52

ブラシとズーム

概要図で範囲をブラシすると上のチャートがズームします。ブラシに追従する clipPath が選択範囲に色を付けます。

SVG
53

三目並べ

コンピューターと対戦します。when() が各マークを追加し、ダッシュの CSS アニメーションがそれを描き込みます。

SVG
54

円形テキスト

バッジの文字を入力してください。textPath がテキストを円に沿って曲げ、textLength がちょうど 1 周に収めます。

SVG

ルーティング

6

ルートテーブル、マッチング、アクティブなルート、レイヤー、ローダー。nuclo-router は別パッケージです: npm install nuclo nuclo-router。

55

ルーティングされたアプリ

フレーム内で動く、独自のルーターを持つ本物のアプリ: ルートテーブル、1 つの outlet()、プレーンなリンク、保留状態、404。あちこちクリックしてから Back を使ってください。

ルーティング+ nuclo-router
56

ネストしたルート

Docs は子ルートを持つレイアウトです。トピックはその outlet() に描画され、./topic リンクはレイアウトのルートを基準に解決されます。ノートに入力してからトピックを切り替えてください: レイアウトは作り直されません。

ルーティング+ nuclo-router
57

ルートローダー

投稿ページは、ページが構築される前に実行される load() をエクスポートします。待っている間の router.pending と、壊れた投稿で throw したときの Retry 付きエラー状態を見てください。

ルーティング+ nuclo-router
58

レイヤー

注文フォームは顧客ページをレイヤーとしてプッシュし、その結果を await します。フォームは再描画されないのでメモは残ります。Save がプッシュを解決し、Cancel か Back が閉じます。

ルーティング+ nuclo-router
59

複数のルーターと読み込み

2 つのルーター、2 つのスピナー。ショップのレイアウトとそのセクションの両方が load() を持ち、1 つの router.pending の下で並行して実行されます。サイドバーには作成されたが開始されていない独自のルーターがあり、その読み込みフラグは onNavigate から更新されます。

ルーティング+ nuclo-router
60

パターンマッチング

静的、:param、*rest のパターンと、2 つの親の下にマウントされたセクションテーブル。パスを入力して、何も読み込まずに解決する match() を見てください。

ルーティング+ nuclo-router

アプリ

15

より大きなプログラムを全画面で、実際のソースをタブの裏に: ウィンドウ付きのデスクトップ、データグリッド、チャット、ゲーム、エディター、そして自分の状態を自分で持つライブラリ。

61

ページビルダー

ページに直接書き、グリップをドラッグしてブロックを並び替えたりレイアウトに移したり、/ を押して挿入し、右クリックでアクションを出します。グリッドとフレックスのレイアウトをスタイリングし、編集を取り消し、スマートフォンサイズでプレビューし、HTML をエクスポートします。

アプリ
62

アルゴリズムステッパー

エンジンはプレーンな JavaScript です: 配列を変更し、ステップごとに yield するジェネレーター。プレイヤーは next() と update() を呼び出し、バーは同じオブジェクトに対する list() なので、スワップで 2 つの要素が移動します。

アプリ
63

カンバンボード

チームのボード: タスクを追加し、人に割り当て、ダイアログで編集し、人や検索で絞り込み、列の間でドラッグし、削除を取り消します。列とカードは同じオブジェクトのプレーンな配列で、すべての移動は splice() です。行は同一性で照合されるので、カードのドラッグ、並び替え、割り当て、編集はその要素を再利用します。画面上のマウント回数がそれを証明します。

アプリ
64

three.js インスペクター

自分の状態を自分で持つライブラリ。パネルは位置、色、フラグを three.js のオブジェクトから直接読み取り、編集をそこへ書き戻します。レンダーループは 1 フレームに 1 回 update() を呼び出します。何もミラーリングされません。

アプリ
65

無限スクロール

終わりのないフィード: 高速な偽の fetch() が各ページをその場で生成し、1 つのプレーンな配列に入れます。DOM にあるのはビューポート近くの行だけ: list() が 2 つのスペーサーの間に posts.slice(start, end) を描画するので、10 万件の投稿でもページは軽いままです。本当の末尾にあるセンチネルが、見える前に次のページを要求します。

アプリ
66

デスクトップ

ファイル、ノート、ターミナル、電卓、タイマー、カンバンボード、ファイナンス、カレンダーを備えた動作するデスクトップ。フォルダーを作成・整理し、ノートを編集し、ブラウザに保存される 1 つの共有シミュレートディスク上でシェルコマンドを使います。電卓にはキーボードから直接入力でき、ターミナルはどこをクリックしても入力行にフォーカスし、ボードでは列の間でカードをドラッグでき、ファイナンスのスプレッドシートで台帳を付けるとチャートが動きます(台帳は IndexedDB に保存されます)。ウィンドウは移動、リサイズ、アプリの切り替えの間も状態を保ち、動作中のタイマーは into() でタスクバーのトレイを埋めます。

アプリ
67

ノードグラフ

数値、テキスト、スイッチを演算、比較、If ノードに配線すると、入力するたびにすべての値が更新されます。関数もグラフです: その Input と Output ノードがすべての Call のポートになり、Call は自分自身の関数を指定できるので、factorial と sum は If を出口として再帰します。エンジンはプレーンな JavaScript です: 各ノードは入力を求めて yield するジェネレーターで、1 つのループが自前のスタックからそれらを駆動するため、sum(50000) は JavaScript のコールスタックに触れずに約 0.1 秒で 5 万段の呼び出しをネストします。出口のない再帰を止めるのはステップ予算だけです。ドラッグは x と y を書き込み、キャンバスのスコープだけを更新します。実行回数は、移動でグラフが一度も実行されないことを示します。

アプリ
68

データグリッド

10,000 個のプレーンな行オブジェクトに対する作業テーブル。検索、フィルター、ソート、ページングは配列に対するプレーンな関数で、テーブル本体は現在のページに対する list() です。行は同一性で照合されるので、ソートはページに残る行を移動させ、編集された行はどこでも同じオブジェクトです。構築された行数がそれを証明します。

アプリ
69

チャット

3 つのチャンネルを持つチャット。各チャンネルは履歴、カーソル、入力中、下書き、スクロール位置を持つ 1 つのプレーンなオブジェクトなので、切り替えてもすべてのチャンネルがそのまま保たれ、update("chat-sidebar") は未読バッジだけを更新します。履歴は unshift() と、追加した高さ分だけ増える scrollTop で、上方向に無限に読み込まれます。あなたのメッセージはサーバーが受け取る前に表示され、send() は同じオブジェクトをパッチし、Retry、Edit、Delete、リアクションはその行を作り直しません。メッセージはコード、太字、リンク、@メンションを描画します。

アプリ
70

ライブダッシュボード

毎秒 20 回から毎秒 1 回まで、異なる頻度で更新されるカード。各カードは scope() で、そのタイマーがカードの id を付けて update() を呼び出すので、ティックはそのカードだけを評価します。すべての動的な値は画面上で数えられます: プレーンな update() に切り替えると、時計は 1 回変わるために毎秒およそ 100 回評価されます。

アプリ
71

ピクセルエディター

絵は 1024 個の色文字列からなる 1 つのプレーンな配列で、各セルはそこから色を読みます。ストロークは配列に書き込んで update() を呼び出し、終わるとエディターは slice() でコピーを保存します。Undo、Redo、そして履歴 list() の各ステップは古い配列を戻すだけ: ストアも、イミュータブルなデータもありません。

アプリ
72

スネーク

ゲームループは、プレーンなオブジェクトに対して step() を呼び出し、ティックごとに update() を一度呼び出すタイマーです。スネークはそのセルオブジェクトの list() で、各ティックで尾のオブジェクトが新しい頭になるため、1 つの要素が移動し、何も構築されません: 構築されたセグメント数はスネークが食べたときにだけ増えます。餌は keyframes() アニメーションで現れます。

アプリ
73

ステップシーケンサー

自分のクロックを自分で持つライブラリ。Web Audio は独自のタイムラインですべての音を先行予約し、パターンはグリッドが反転しスケジューラーが読むプレーンな 2 次元の真偽値配列なので、クリックは次の周回で聞こえます。再生ヘッドは可聴ステップが変わったときにだけ自分の scope() を更新します。音声は最初の Play で開始し、マウントのクリーンアップで閉じるので、サンプルを離れると音は止まります。

アプリ
74

ロケール切り替え

すべてのラベルは単一言語アプリと同じように書かれた静的な値なので、update() は二度と読み直しません: カートのクリックは数量と合計だけを更新します。言語の切り替えはこのツリーで forceUpdate() を呼び出し、コンポーネントを再実行して lang と dir を含む同じ要素をパッチします。金額、複数形、日付、リストは Intl から得られ、カートと入力済みのクーポンは切り替え後も残ります。

アプリ
75

テーマエディター

小さなコンポーネントライブラリ: createCss() がトークンに名前を付け、variants() がそれらからボタン、バッジ、カード、入力欄、アラート、スイッチを組み立てます。トークンは CSS 変数なので、すべてのクラスは一度だけコンパイルされます。各コントロールはプレーンなテーマオブジェクトに書き込んで update() を呼び出し、それが 1 つの style 要素のテキストを書き換えます。

アプリ