haori 0.47.3 → 0.47.4
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 +1 -1
- package/README.md +1 -1
- package/dist/haori.cjs.js +12 -12
- package/dist/haori.es.js +854 -699
- package/dist/haori.iife.js +13 -13
- package/dist/index.d.ts +119 -10
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2977,16 +2977,34 @@ export declare class Form {
|
|
|
2977
2977
|
*/
|
|
2978
2978
|
static resolveSyncValues(form: ElementFragment, data: Record<string, unknown>): Record<string, unknown>;
|
|
2979
2979
|
/**
|
|
2980
|
-
*
|
|
2980
|
+
* キーを所有する祖先を、値の型を問わず解決します。
|
|
2981
2981
|
*
|
|
2982
2982
|
* 対象はフォームより外側の要素の**生バインドデータ**(`data-bind` で宣言・更新
|
|
2983
2983
|
* された値)だけです。`data-derive` の派生データと `data-each` の行データは対象外
|
|
2984
2984
|
* とします。どちらも描画のたびに作り直される仮想スコープで、行単位の書き戻しは
|
|
2985
2985
|
* `data-form-list` が担うため、ここで扱うと反映が行生成と競合します。
|
|
2986
2986
|
*
|
|
2987
|
-
*
|
|
2988
|
-
*
|
|
2989
|
-
*
|
|
2987
|
+
* 最も近い所有者だけを見ます。所有者が `data-each` の行である場合は、より外側は
|
|
2988
|
+
* 探しません(近い方が権威というシャドーの規則に従うため)。
|
|
2989
|
+
*
|
|
2990
|
+
* 値の型を問わないのは、収集キーの土台を解決する用途があるためです
|
|
2991
|
+
* (仕様「祖先が所有する値の反映(`data-form-arg` なし)」の「土台に使う値の型は
|
|
2992
|
+
* 問いません」)。`data-form-list` の収集キーは配列になるので、レコード限定に
|
|
2993
|
+
* すると土台が解決できません。`data-form-arg` のキーはレコードに限るため、
|
|
2994
|
+
* そちらは `resolveAncestorArgOwner()` が絞り込みます。
|
|
2995
|
+
*
|
|
2996
|
+
* @param form フォームのElementFragment
|
|
2997
|
+
* @param key キー名
|
|
2998
|
+
* @returns 所有する祖先フラグメントとその値。見つからない場合は null
|
|
2999
|
+
*/
|
|
3000
|
+
private static resolveAncestorKeyOwner;
|
|
3001
|
+
/**
|
|
3002
|
+
* `data-form-arg` のキーを所有する祖先を解決します。
|
|
3003
|
+
*
|
|
3004
|
+
* `data-form-arg` はフォームの入力欄が**そのキーの配下**に対応することを宣言する
|
|
3005
|
+
* ため、値はレコードに限ります。レコードでない値を所有している場合は所有者なしと
|
|
3006
|
+
* して扱い、開発モードで警告します。黙って退くと収集値がそのままそのキーへ入り、
|
|
3007
|
+
* 配列を宣言していた場合は**型がオブジェクトへ変わります**(一覧を描く式が壊れる)。
|
|
2990
3008
|
*
|
|
2991
3009
|
* @param form フォームのElementFragment
|
|
2992
3010
|
* @param key `data-form-arg` で指定されたキー名
|
|
@@ -2996,6 +3014,32 @@ export declare class Form {
|
|
|
2996
3014
|
owner: ElementFragment;
|
|
2997
3015
|
value: Record<string, unknown>;
|
|
2998
3016
|
} | null;
|
|
3017
|
+
/**
|
|
3018
|
+
* 収集キーの土台を祖先から解決する関数を返します。
|
|
3019
|
+
*
|
|
3020
|
+
* `data-form-arg` を宣言しないフォームでも、収集キーを祖先が所有する構成では
|
|
3021
|
+
* その値が土台になります(仕様「祖先が所有する値の反映(`data-form-arg` なし)」の
|
|
3022
|
+
* 「コミット時は**収集したキーごとに、最も近い所有者の値を土台に収集値を
|
|
3023
|
+
* 重ねます**」)。`Form.mergeCollectedValues()` へ渡して使います。
|
|
3024
|
+
*
|
|
3025
|
+
* @param form フォームのElementFragment
|
|
3026
|
+
* @returns キーを受け取り、祖先が所有する値を返す関数(所有者が無ければ undefined)
|
|
3027
|
+
*/
|
|
3028
|
+
static ancestorBaseResolver(form: ElementFragment): (key: string) => unknown;
|
|
3029
|
+
/**
|
|
3030
|
+
* `data-form-arg` のキーをレコード以外で所有している構成を、開発モードで知らせます。
|
|
3031
|
+
*
|
|
3032
|
+
* @param form フォームのElementFragment
|
|
3033
|
+
* @param key `data-form-arg` で指定されたキー名
|
|
3034
|
+
* @param value 祖先が所有している値
|
|
3035
|
+
*/
|
|
3036
|
+
private static warnArgOwnerIsNotRecord;
|
|
3037
|
+
/**
|
|
3038
|
+
* `data-form-arg` の所有者がレコードでないことを警告済みのキー。
|
|
3039
|
+
*
|
|
3040
|
+
* 同じ構成で毎回の収集ごとに警告しないよう、要素とキーの組で控えます。
|
|
3041
|
+
*/
|
|
3042
|
+
private static readonly warnedArgOwnerNotRecord;
|
|
2999
3043
|
/**
|
|
3000
3044
|
* 条件式(`data-validity` / `data-{event}-if`)の評価スコープを作ります。
|
|
3001
3045
|
*
|
|
@@ -3231,11 +3275,20 @@ export declare class Form {
|
|
|
3231
3275
|
* これらをバインドキーとして受け付けないため、載せても参照できず、`__proto__` に
|
|
3232
3276
|
* 至っては代入でオブジェクトのプロトタイプが差し替わってしまいます。
|
|
3233
3277
|
*
|
|
3278
|
+
* **土台に無いキーは `resolveBase` で解決します。** フォーム自身が収集キーを
|
|
3279
|
+
* 持たず祖先が持っている構成では、土台がここに無いためです(仕様「双方向
|
|
3280
|
+
* バインディングの自動更新」の「土台はフォーム自身のバインドデータに限りません」)。
|
|
3281
|
+
* 呼び出し側で土台を組み立ててから渡す形にしないのは、上のプロトタイプ汚染の
|
|
3282
|
+
* ガードを迂回させないためです(解決した値の代入もこのループの中で行います)。
|
|
3283
|
+
* 入れ子のレコードへ再帰する際は渡しません(解決するのはトップレベルの収集キー
|
|
3284
|
+
* だけで、入れ子のキーはバインドキーではないため)。
|
|
3285
|
+
*
|
|
3234
3286
|
* @param previous 直前のバインドデータ(無い場合は null)
|
|
3235
3287
|
* @param collected 収集値
|
|
3288
|
+
* @param resolveBase 土台に無いキーの土台を返す関数。省略時は解決しない
|
|
3236
3289
|
* @returns 収集値を重ねたバインドデータ
|
|
3237
3290
|
*/
|
|
3238
|
-
static mergeCollectedValues(previous: Record<string, unknown> | null, collected: Record<string, unknown
|
|
3291
|
+
static mergeCollectedValues(previous: Record<string, unknown> | null, collected: Record<string, unknown>, resolveBase?: ((key: string) => unknown) | null): Record<string, unknown>;
|
|
3239
3292
|
/**
|
|
3240
3293
|
* 収集値の 1 項目を、直前の値へ重ねます。
|
|
3241
3294
|
*
|
|
@@ -3353,10 +3406,20 @@ export declare class Form {
|
|
|
3353
3406
|
*/
|
|
3354
3407
|
private static overlayIdentifiedRows;
|
|
3355
3408
|
/**
|
|
3356
|
-
*
|
|
3409
|
+
* 祖先のバインドデータ更新を、配下のフォームへ反映します。
|
|
3410
|
+
*
|
|
3411
|
+
* `data-form-arg` を宣言したフォームへは入力欄まで流し込みます。対象は「当該キーを
|
|
3412
|
+
* 所有するのが更新された祖先自身」であるフォームだけです。間に同名キーを持つ要素が
|
|
3413
|
+
* あればそちらが権威なので対象外とします。
|
|
3357
3414
|
*
|
|
3358
|
-
*
|
|
3359
|
-
*
|
|
3415
|
+
* `data-form-arg` の無い収集単位(`<form>` と `data-form` コンテナ)には、双方向
|
|
3416
|
+
* コミットが作ったコピーの解除だけを行います(仕様「祖先が所有する値の反映
|
|
3417
|
+
* (`data-form-arg` なし)」の「祖先が当該キーを更新したときに解除するため、以降の
|
|
3418
|
+
* 更新が届かなくなることはありません」)。解除しないと、一度でも入力した収集単位は
|
|
3419
|
+
* 以降どの再取得も受け付けません。入力欄へ流し込まないのは、どのキーが対応するかを
|
|
3420
|
+
* 宣言していないためです(同節の「入力欄への流し込みは `data-form-arg` を宣言した
|
|
3421
|
+
* 場合だけです」)。行の入力欄は解除後の再評価で `data-each` の行単位の反映が
|
|
3422
|
+
* 拾います。
|
|
3360
3423
|
*
|
|
3361
3424
|
* 更新が始まった後に初期化されたフォームも対象外です。祖先の更新は初期化前の
|
|
3362
3425
|
* 状態を運んでいるため、流し込むとクリアしたはずの値が復活します。
|
|
@@ -3364,9 +3427,44 @@ export declare class Form {
|
|
|
3364
3427
|
* @param fragment 更新された祖先のフラグメント
|
|
3365
3428
|
* @param resetSequence 更新が始まった時点の初期化の通番
|
|
3366
3429
|
* @param origin 値の由来(通番と種別)。渡すと入力欄ごとに適用可否を判定します
|
|
3430
|
+
* @param previous 更新前の祖先の生バインドデータ。渡すと値が変わったキーだけ解除する
|
|
3431
|
+
* @returns 反映完了の Promise
|
|
3432
|
+
*/
|
|
3433
|
+
static syncAncestorArgForms(fragment: ElementFragment, resetSequence: number, origin?: ValueChangeOrigin | null, previous?: Record<string, unknown> | null): Promise<void>;
|
|
3434
|
+
/**
|
|
3435
|
+
* 配下の収集単位のうち、祖先のキーをコピーでシャドーしているものを列挙します。
|
|
3436
|
+
*
|
|
3437
|
+
* 収集単位は `<form>` と `data-form` コンテナの両方です(`Form.getFormFragment()`
|
|
3438
|
+
* が対象にする範囲と揃えます)。どちらも双方向コミットの書き込み先になるため、
|
|
3439
|
+
* どちらもコピーを作って祖先をシャドーしえます。仕様「祖先が所有するレコードの
|
|
3440
|
+
* 反映(`data-form-arg`)」が `data-form` を対象外とするのは**入力欄への流し込み**
|
|
3441
|
+
* についてで、シャドーの解除には当てはまりません。
|
|
3442
|
+
*
|
|
3443
|
+
* `data-form-arg` を宣言した `<form>` は除きます。そちらは `collectArgForms()` が
|
|
3444
|
+
* 扱い、`pushAncestorArgValue()` が入力欄への流し込みまで行います。
|
|
3445
|
+
*
|
|
3446
|
+
* 列挙するキーは、収集単位自身の生バインドデータが持ち、かつ**初期 `data-bind`
|
|
3447
|
+
* 宣言に無い**キーに限ります。宣言のあるキーは双方向コミットが作ったコピーでは
|
|
3448
|
+
* なく自身の宣言なので、祖先が同名のキーを更新しても落としてはなりません。
|
|
3449
|
+
*
|
|
3450
|
+
* @param root 走査の起点フラグメント(更新された祖先)
|
|
3451
|
+
* @returns 収集単位のフラグメントと、それが `root` のキーをシャドーしているキー名の
|
|
3452
|
+
* 一覧。シャドーしているキーが無い収集単位は含みません
|
|
3453
|
+
*/
|
|
3454
|
+
private static collectShadowingContainers;
|
|
3455
|
+
/**
|
|
3456
|
+
* 双方向コミットが作ったコピーを、フォーム自身のバインドデータから取り除きます。
|
|
3457
|
+
*
|
|
3458
|
+
* 取り除くと、フォーム内の式とフラグメントの継承は祖先の値を見るようになります。
|
|
3459
|
+
* 入力欄へは触りません(`data-each` の行は解除後の再評価で描き直され、行単位の
|
|
3460
|
+
* 反映が値を入れます)。
|
|
3461
|
+
*
|
|
3462
|
+
* @param form フォームのElementFragment
|
|
3463
|
+
* @param keys 取り除くキー名の一覧
|
|
3464
|
+
* @param origin 値の由来(通番と種別)。祖先の更新を起こした操作のものを引き継ぐ
|
|
3367
3465
|
* @returns 反映完了の Promise
|
|
3368
3466
|
*/
|
|
3369
|
-
static
|
|
3467
|
+
private static releaseOwnCopy;
|
|
3370
3468
|
/**
|
|
3371
3469
|
* 指定要素の配下にある `data-form-arg` 付きフォームを列挙します。
|
|
3372
3470
|
*
|
|
@@ -3567,6 +3665,17 @@ export declare class Form {
|
|
|
3567
3665
|
* @returns すべての初期化処理が完了するPromise
|
|
3568
3666
|
*/
|
|
3569
3667
|
static reset(fragment: ElementFragment, operationSequence?: number): Promise<void>;
|
|
3668
|
+
/**
|
|
3669
|
+
* 祖先が所有するキーを、リセットの書き込み対象から落とします。
|
|
3670
|
+
*
|
|
3671
|
+
* 落とすのは初期 `data-bind` 宣言に無いキーだけです。宣言のあるキーはフォーム
|
|
3672
|
+
* 自身が持つべき値で、祖先が同名のキーを持っていてもフォームの宣言が権威です。
|
|
3673
|
+
*
|
|
3674
|
+
* @param form フォームのElementFragment
|
|
3675
|
+
* @param initial 初期 `data-bind` 宣言(無い場合は null)
|
|
3676
|
+
* @param target リセットで書き込むバインドデータ(この場で書き換えます)
|
|
3677
|
+
*/
|
|
3678
|
+
private static deleteAncestorOwnedKeys;
|
|
3570
3679
|
/**
|
|
3571
3680
|
* data-bind 属性で宣言された初期バインドデータを取得します。
|
|
3572
3681
|
*
|
|
@@ -4403,7 +4512,7 @@ declare interface ValueChangeOrigin {
|
|
|
4403
4512
|
* リリース時に `package.json` と揃えて更新します(`tests/version.test.ts` が
|
|
4404
4513
|
* 一致を検査します)。
|
|
4405
4514
|
*/
|
|
4406
|
-
export declare const version = "0.47.
|
|
4515
|
+
export declare const version = "0.47.4";
|
|
4407
4516
|
|
|
4408
4517
|
/**
|
|
4409
4518
|
* すべてのレンダリングタスク(追従投入分を含む)の完了を待ちます。
|