haori 0.46.2 → 0.47.2

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/dist/index.d.ts CHANGED
@@ -550,6 +550,49 @@ export declare class Core {
550
550
  * @return 戻り値はありません。
551
551
  */
552
552
  private static logFalsyIfDiagnostics;
553
+ /**
554
+ * `data-each` コンテナの子のうち、行にならない固定要素かどうかを返します。
555
+ *
556
+ * 仕様「`data-each`」の `data-each-before` / `data-each-after`(「ループ前に表示
557
+ * する要素をマーク」「ループ後に表示する要素をマーク」)です。テンプレートの選定
558
+ * (`performEachUpdate`)でも同じ属性で除いています。
559
+ *
560
+ * @param fragment 判定する子フラグメント
561
+ * @returns 行にならない固定要素なら true
562
+ */
563
+ private static isEachFixedChild;
564
+ /**
565
+ * `data-each` コンテナが固定要素を持つかどうかを返します。
566
+ *
567
+ * 固定要素(`data-each-before` / `data-each-after`)はコンテナのスコープで評価する
568
+ * ため、配列が同値でも一覧の外のデータの更新で描画が変わります。行と行テンプレートは
569
+ * 行スコープで評価するため数えません。
570
+ *
571
+ * コンテナ直下のテキストノードは数えません。式を含むテキストは
572
+ * `hasNonEachDynamicElementState()` がすでに拾っており、ここで重ねても落ちるテストが
573
+ * 無いためです(`docs/ja/testing.md` の規則 3)。
574
+ *
575
+ * @param fragment `data-each` コンテナのフラグメント
576
+ * @returns 固定要素があれば true
577
+ */
578
+ private static hasEachFixedChildren;
579
+ /**
580
+ * `data-each` コンテナの固定要素とテキストノードを再評価します。
581
+ *
582
+ * 行と行テンプレートは `data-each` が管理するため `evaluateAll` は each コンテナの
583
+ * 子へ降りません。しかし固定要素(`data-each-before` / `data-each-after`)と
584
+ * コンテナ直下のテキストノードは行ではなく、仕様「`data-each`」の「固定要素と
585
+ * コンテナ直下のテキストノードは、行と違いコンテナのスコープで、バインドデータの
586
+ * 更新のたびに再評価します」に従ってコンテナのスコープで再評価します。
587
+ *
588
+ * これが無いと、ガイドが案内している「空のリストの場合のメッセージ」
589
+ * (`data-each-after` に `data-if="items.length === 0"` を書く形)が、配列が
590
+ * 変わっても初期の判定のまま固定されます。
591
+ *
592
+ * @param fragment `data-each` コンテナのフラグメント
593
+ * @returns 再評価完了の Promise
594
+ */
595
+ private static evaluateEachFixedChildren;
553
596
  /**
554
597
  * if要素を評価します。
555
598
  * 値が falsy(false・null・undefined・NaN・0・空文字列)の場合は非表示にし、
@@ -1194,6 +1237,19 @@ declare class ElementFragment extends Fragment {
1194
1237
  * @returns クローンされたフラグメント
1195
1238
  */
1196
1239
  clone(): ElementFragment;
1240
+ /**
1241
+ * `data-if` の非表示化が DOM へ書いた追随結果を落とします。
1242
+ *
1243
+ * 仕様「data-if の動作」の「判定の基準は内部状態であり、`style.display` や
1244
+ * `data-if-false` は追随結果として扱う」に従います。内部状態を持たない要素
1245
+ * (フラグメントを作る時点の要素、複製した要素)に追随結果が残っていると、
1246
+ * 内部状態は「表示」なのに DOM は非表示という食い違いになり、`show()` は内部状態を
1247
+ * 基準に何もしないため**表示に戻れません**。
1248
+ *
1249
+ * @param target 対象エレメント
1250
+ * @returns 戻り値はありません。
1251
+ */
1252
+ private static dropIfVisibilityArtifacts;
1197
1253
  /**
1198
1254
  * clone 時に runtime の hidden 状態だけを落とします。
1199
1255
  */
@@ -3052,6 +3108,12 @@ export declare class Form {
3052
3108
  private static readonly COLLECTED_EXCLUDED_KEYS;
3053
3109
  /** 出現順への退避を知らせた理由(同じ理由を繰り返さないため) */
3054
3110
  private static readonly warnedPositionalRowFallbacks;
3111
+ /**
3112
+ * キーの無い派生一覧の収集を知らせた `data-each` の式。
3113
+ *
3114
+ * 収集は入力のたびに走るため、同じ宣言を繰り返し報告しないようにします。
3115
+ */
3116
+ private static readonly warnedDerivedRowsWithoutKey;
3055
3117
  /**
3056
3118
  * 収集した行配列に、行の識別情報を結び付けます。
3057
3119
  *
@@ -3089,6 +3151,21 @@ export declare class Form {
3089
3151
  * @param reason 退いた理由
3090
3152
  */
3091
3153
  private static warnPositionalRowFallback;
3154
+ /**
3155
+ * 派生一覧を `data-each-key` なしで収集する宣言を、開発モードで知らせます。
3156
+ *
3157
+ * `data-each-key` が無いとリストキーはインデックス由来(`__index_N`)になるため、
3158
+ * 行と配列要素の対応は出現順と同じになります。絞り込んだ一覧
3159
+ * (`data-each="rules.filter(...)"`)を `data-form-list="rules"` で収集する構成では
3160
+ * 画面の並びが配列の並びと一致しないため、画面の 2 行目の値が配列の 2 番目の要素
3161
+ * (絞り込みで除かれた要素)へ書き込まれます。収集値は画面のとおりに見えるので
3162
+ * 気づけません(仕様「行の対応付けと `data-each-key`」の「`data-each-key` なし」)。
3163
+ *
3164
+ * 素の経路(`rules` / `dialog.rules`)は配列そのものを描くため対象外です。
3165
+ *
3166
+ * @param container `data-form-list` を持つコンテナのフラグメント
3167
+ */
3168
+ private static warnDerivedRowsWithoutKey;
3092
3169
  /**
3093
3170
  * 収集値を、直前のバインドデータへ重ねます。
3094
3171
  *
@@ -3223,6 +3300,14 @@ export declare class Form {
3223
3300
  * 配列に無いリストキーの行は、配列から消えた行が画面に残っているものとして落とし
3224
3301
  * ます。行の増減は配列を先に更新するため、配列に無い行は常に古い画面です。
3225
3302
  *
3303
+ * 逆に、**収集した行に対応しない配列要素は元の位置に元の値のまま残します**(仕様
3304
+ * 「行の対応付けと `data-each-key`」の「収集した行に対応しない配列要素」)。収集は
3305
+ * 集められた行だけを集めるため、収集した行だけで組み立て直すと、絞り込んだ一覧
3306
+ * (`data-each="rules.filter(...)"`)を `data-form-list="rules"` で収集する構成で、
3307
+ * 絞り込みで除かれた要素が丸ごと失われます(行そのものを `data-if` で隠した場合も
3308
+ * 同様です)。並びも土台の配列に従うため、配列を先に入れ替えて画面を描き直す前に
3309
+ * 収集が走っても(`row-prev` の直後など)並びが巻き戻りません。
3310
+ *
3226
3311
  * @param previous 直前の配列(配列要素が権威)
3227
3312
  * @param collected 収集した行配列
3228
3313
  * @returns 重ね合わせた配列。対応付けができない場合は null(出現順へ退く)
@@ -4279,7 +4364,7 @@ declare interface ValueChangeOrigin {
4279
4364
  * リリース時に `package.json` と揃えて更新します(`tests/version.test.ts` が
4280
4365
  * 一致を検査します)。
4281
4366
  */
4282
- export declare const version = "0.46.2";
4367
+ export declare const version = "0.47.2";
4283
4368
 
4284
4369
  /**
4285
4370
  * すべてのレンダリングタスク(追従投入分を含む)の完了を待ちます。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "haori",
3
- "version": "0.46.2",
3
+ "version": "0.47.2",
4
4
  "description": "A lightweight HTML-first UI engine powered by declarative data bindings and expressions.",
5
5
  "scripts": {
6
6
  "dev": "vite",