haori 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +15 -2
- package/README.md +15 -2
- package/dist/haori.cjs.js +11 -11
- package/dist/haori.cjs.js.map +1 -1
- package/dist/haori.es.js +760 -564
- package/dist/haori.es.js.map +1 -1
- package/dist/haori.iife.js +11 -11
- package/dist/haori.iife.js.map +1 -1
- package/dist/index.d.ts +118 -5
- package/dist/package.json +1 -1
- package/dist/src/core.d.ts +80 -1
- package/dist/src/core.d.ts.map +1 -1
- package/dist/src/core.js +184 -10
- package/dist/src/core.js.map +1 -1
- package/dist/src/event.d.ts +12 -0
- package/dist/src/event.d.ts.map +1 -1
- package/dist/src/event.js +14 -0
- package/dist/src/event.js.map +1 -1
- package/dist/src/form.d.ts +8 -3
- package/dist/src/form.d.ts.map +1 -1
- package/dist/src/form.js +11 -4
- package/dist/src/form.js.map +1 -1
- package/dist/src/haori.d.ts +12 -0
- package/dist/src/haori.d.ts.map +1 -1
- package/dist/src/haori.js +14 -0
- package/dist/src/haori.js.map +1 -1
- package/dist/src/index.d.ts +10 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/procedure.d.ts +5 -0
- package/dist/src/procedure.d.ts.map +1 -1
- package/dist/src/procedure.js +31 -5
- package/dist/src/procedure.js.map +1 -1
- package/dist/src/queue.d.ts +7 -0
- package/dist/src/queue.d.ts.map +1 -1
- package/dist/src/queue.js +52 -0
- package/dist/src/queue.js.map +1 -1
- package/dist/tests/bindcomplete-and-scope.test.d.ts +2 -0
- package/dist/tests/bindcomplete-and-scope.test.d.ts.map +1 -0
- package/dist/tests/bindcomplete-and-scope.test.js +115 -0
- package/dist/tests/bindcomplete-and-scope.test.js.map +1 -0
- package/dist/tests/click-no-disabled.test.d.ts +2 -0
- package/dist/tests/click-no-disabled.test.d.ts.map +1 -0
- package/dist/tests/click-no-disabled.test.js +67 -0
- package/dist/tests/click-no-disabled.test.js.map +1 -0
- package/dist/tests/data-bind-arg-reeval.test.d.ts +2 -0
- package/dist/tests/data-bind-arg-reeval.test.d.ts.map +1 -0
- package/dist/tests/data-bind-arg-reeval.test.js +119 -0
- package/dist/tests/data-bind-arg-reeval.test.js.map +1 -0
- package/dist/tests/data-bind-merge.test.d.ts +2 -0
- package/dist/tests/data-bind-merge.test.d.ts.map +1 -0
- package/dist/tests/data-bind-merge.test.js +86 -0
- package/dist/tests/data-bind-merge.test.js.map +1 -0
- package/dist/tests/data-form-container.test.d.ts +2 -0
- package/dist/tests/data-form-container.test.d.ts.map +1 -0
- package/dist/tests/data-form-container.test.js +87 -0
- package/dist/tests/data-form-container.test.js.map +1 -0
- package/dist/tests/data-if-falsy.test.d.ts +2 -0
- package/dist/tests/data-if-falsy.test.d.ts.map +1 -0
- package/dist/tests/data-if-falsy.test.js +73 -0
- package/dist/tests/data-if-falsy.test.js.map +1 -0
- package/dist/tests/data-load-on-show.test.d.ts +2 -0
- package/dist/tests/data-load-on-show.test.d.ts.map +1 -0
- package/dist/tests/data-load-on-show.test.js +98 -0
- package/dist/tests/data-load-on-show.test.js.map +1 -0
- package/dist/tests/each-update-event.test.d.ts +2 -0
- package/dist/tests/each-update-event.test.d.ts.map +1 -0
- package/dist/tests/each-update-event.test.js +83 -0
- package/dist/tests/each-update-event.test.js.map +1 -0
- package/dist/tests/render-wait.test.d.ts +2 -0
- package/dist/tests/render-wait.test.d.ts.map +1 -0
- package/dist/tests/render-wait.test.js +68 -0
- package/dist/tests/render-wait.test.js.map +1 -0
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Haori.js は、HTML 属性を中心にして動的な UI を実現する軽量なライブラリです。JavaScript をほとんど書かずに、データバインディング、条件分岐、繰り返し処理、フォームの双方向バインディング、サーバー通信などを HTML 属性で宣言できます。
|
|
4
4
|
|
|
5
|
-
バージョン: 0.
|
|
5
|
+
バージョン: 0.8.0
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -24,12 +24,14 @@ Haori.js は、HTML 属性を中心にして動的な UI を実現する軽量
|
|
|
24
24
|
- 内部状態を正とし、表示状態は DOM へ非同期で追随する
|
|
25
25
|
- 主な特徴:
|
|
26
26
|
- データバインディング(`data-bind`)
|
|
27
|
-
- 条件表示(`data-if
|
|
27
|
+
- 条件表示(`data-if`、JavaScript の falsy 準拠: `false`・`null`・`undefined`・`NaN`・`0`・`''` は非表示)
|
|
28
28
|
- 繰り返し表示(`data-each`)
|
|
29
29
|
- フォーム双方向バインディング(`name` 属性による自動バインド)
|
|
30
30
|
- `value="true"` を付けたチェックボックスの boolean 対応(チェック時 `true`、未チェック時 `false`)
|
|
31
|
+
- イベント駆動アクション(`data-click-*`・`data-change-*`・`data-load-*`・`data-intersect-*`)
|
|
31
32
|
- サーバー通信(`data-fetch`)
|
|
32
33
|
- HTML インポート(`data-import`)
|
|
34
|
+
- ライフサイクルイベント(`haori:eachupdate`・`haori:bindcomplete`・`haori:show` / `haori:hide` など)
|
|
33
35
|
- ゼロ依存(ブラウザネイティブのみ)
|
|
34
36
|
|
|
35
37
|
必要に応じて `data-runtime` と `Env.runtime` を使い、組込利用とデモ表示で挙動を切り替えられます。
|
|
@@ -102,6 +104,17 @@ Haori.mount(document.body, {items: [{name: 'りんご'}, {name: 'みかん'}]});
|
|
|
102
104
|
追加のバインディング補助:
|
|
103
105
|
|
|
104
106
|
- `data-derive` / `data-derive-name` — 要素上で派生値を定義し、その要素の子孫にだけ公開します。親子プルダウンのような用途で使えます。設計の整理は `docs/ja/data-derive-confirmation-draft.md` を参照してください。
|
|
107
|
+
- `data-*-bind-merge`(例: `data-click-bind-merge`・`data-fetch-bind-merge`)— 結果をバインド先要素へ反映する際、`data-bind` を全置換せず、既存の値を保持したまま浅くマージします(新しいデータに無いキーは保持)。`selectedId={{items[0].id}}` のような計算値を既存 state に追記したい場合に有用です。
|
|
108
|
+
|
|
109
|
+
イベント駆動アクション:
|
|
110
|
+
|
|
111
|
+
- `data-click-*`・`data-change-*`・`data-load-*`・`data-intersect-*` は、それぞれクリック・フォーム変更・要素ロード・ビューポート交差を契機に処理(fetch、bind、copy、ダイアログ操作など)を宣言します。`data-load-*` は `data-if` 要素が非表示→表示へ遷移した(`haori:show`)タイミングでも発火するため、ネイティブの `load` が発生しない `<button>` などでも利用できます。
|
|
112
|
+
|
|
113
|
+
ライフサイクルイベント:
|
|
114
|
+
|
|
115
|
+
- `haori:eachupdate` — `data-each` のリスト差分完了時に `data-each` 要素で発火します。発火時点で追加・削除・並べ替えされた全行が DOM に反映され、各行の内容(`{{...}}`)も描画済みのため、描画完了の検知に利用できます(`detail`: `added`・`removed`・`order`・`total`)。
|
|
116
|
+
- `haori:bindcomplete` — `data-*-bind` / `data-*-bind-arg` によるバインドと、対象要素配下の再評価が完了した後に対象要素で発火します(`detail.bindArg`)。
|
|
117
|
+
- `haori:show` / `haori:hide` — `data-if` 要素の表示・非表示時に発火します。
|
|
105
118
|
|
|
106
119
|
テンプレート式では、プロパティアクセス、動的インデックスを含むブラケットアクセス、optional chaining、三項演算子、配列 `map` / `filter` のアロー関数、spread を伴う呼び出しなどの安全な構文を利用できます。一方で、グローバルオブジェクト、`eval` や `arguments`、`constructor`、`__proto__`、`prototype`、`Reflect` などの脱出経路は使用できません。
|
|
107
120
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Haori.js is a lightweight, HTML-first UI library that enables dynamic user interfaces primarily through HTML attributes. It lets you declare data bindings, conditional rendering, list rendering, form two-way binding, server fetches, and HTML imports without writing much JavaScript.
|
|
4
4
|
|
|
5
|
-
Version: 0.
|
|
5
|
+
Version: 0.8.0
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -24,12 +24,14 @@ Contents
|
|
|
24
24
|
- Keep internal state authoritative; let the rendered DOM follow asynchronously
|
|
25
25
|
- Key features:
|
|
26
26
|
- Data binding via `data-bind`
|
|
27
|
-
- Conditional rendering via `data-if`
|
|
27
|
+
- Conditional rendering via `data-if` (JavaScript falsy semantics: `false`, `null`, `undefined`, `NaN`, `0`, and `''` are hidden)
|
|
28
28
|
- List rendering via `data-each`
|
|
29
29
|
- Two-way form binding (automatic binding based on `name` attributes)
|
|
30
30
|
- Boolean checkbox support with `value="true"` (`true` when checked, `false` when unchecked)
|
|
31
|
+
- Event-driven actions via `data-click-*`, `data-change-*`, `data-load-*`, `data-intersect-*`
|
|
31
32
|
- Server fetches via `data-fetch`
|
|
32
33
|
- HTML imports via `data-import`
|
|
34
|
+
- Lifecycle events such as `haori:eachupdate`, `haori:bindcomplete`, `haori:show` / `haori:hide`
|
|
33
35
|
- Zero runtime dependencies (uses browser-native APIs)
|
|
34
36
|
|
|
35
37
|
Runtime mode can be distinguished with `data-runtime` and `Env.runtime` when you need different behavior for embedded use and browser demos.
|
|
@@ -102,6 +104,17 @@ Haori.mount(document.body, {items: [{name: 'apple'}, {name: 'orange'}]});
|
|
|
102
104
|
Additional binding helpers:
|
|
103
105
|
|
|
104
106
|
- `data-derive` / `data-derive-name` — define a derived value on an element and expose it to descendants only. This is useful for cases such as parent-child selects; see `docs/ja/data-derive-confirmation-draft.md` for the design background.
|
|
107
|
+
- `data-*-bind-merge` (e.g. `data-click-bind-merge`, `data-fetch-bind-merge`) — when binding a result to a target element, shallow-merge it into the target's existing `data-bind` (keys not present in the new data are preserved) instead of replacing the whole binding. Useful for patching a single computed key (such as `selectedId={{items[0].id}}`) into existing state.
|
|
108
|
+
|
|
109
|
+
Event-driven actions:
|
|
110
|
+
|
|
111
|
+
- `data-click-*`, `data-change-*`, `data-load-*`, `data-intersect-*` declare actions (fetch, bind, copy, dialog control, etc.) triggered by click, form change, element load, and viewport intersection respectively. `data-load-*` also fires when a `data-if` element transitions from hidden to shown (the `haori:show` timing), so it works on elements like `<button>` that never receive a native `load` event.
|
|
112
|
+
|
|
113
|
+
Lifecycle events:
|
|
114
|
+
|
|
115
|
+
- `haori:eachupdate` — fired on the `data-each` element after a list diff completes; all added/removed/reordered rows are in the DOM and their content (`{{...}}`) is rendered by the time it fires, so it can be used to detect render completion (`detail`: `added`, `removed`, `order`, `total`).
|
|
116
|
+
- `haori:bindcomplete` — fired on the target element after a `data-*-bind` / `data-*-bind-arg` bind and the subsequent re-evaluation of its subtree complete (`detail.bindArg`).
|
|
117
|
+
- `haori:show` / `haori:hide` — fired when a `data-if` element becomes shown or hidden.
|
|
105
118
|
|
|
106
119
|
Template expressions support safe JavaScript-like syntax such as property access, bracket access with dynamic indexes, optional chaining, ternary expressions, and method chains including array `map`/`filter` with arrow functions and spread calls. Access to global objects, `eval` or `arguments`, and prototype escape paths such as `constructor`, `__proto__`, `prototype`, or `Reflect` is blocked.
|
|
107
120
|
|