haori 0.43.0 → 0.44.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 +3 -1
- package/README.md +3 -1
- package/dist/haori.cjs.js +20 -20
- package/dist/haori.es.js +1657 -1446
- package/dist/haori.iife.js +18 -18
- package/dist/index.d.ts +172 -11
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -950,6 +950,10 @@ declare class ElementFragment extends Fragment {
|
|
|
950
950
|
* 真とする」)。
|
|
951
951
|
*/
|
|
952
952
|
private static readonly NUMBER_INPUT_PATTERN;
|
|
953
|
+
/** `data-value-type` で宣言できる収集値の型(仕様「`data-value-type`」) */
|
|
954
|
+
private static readonly VALUE_TYPE_NAMES;
|
|
955
|
+
/** `data-value-type` の宣言について警告済みのキー(同じ宣言で繰り返さない) */
|
|
956
|
+
private static readonly loggedValueTypeDeclarations;
|
|
953
957
|
/** HTML 真偽属性名のセット */
|
|
954
958
|
private static readonly BOOLEAN_ATTRIBUTES;
|
|
955
959
|
/** inputイベントを発生させるタイプ */
|
|
@@ -1604,6 +1608,15 @@ declare class ElementFragment extends Fragment {
|
|
|
1604
1608
|
* `<select>` の候補が揃ってから載せ直す)。二度目を弾くと供給された値が画面に
|
|
1605
1609
|
* 載りません。
|
|
1606
1610
|
*
|
|
1611
|
+
* **双方向コミットが運ぶ値は、この入力欄が自身の編集より後に初期化されていれば
|
|
1612
|
+
* 適用しません。** コミット(`change` / `input`)はフォーム全体の収集値を運びますが、
|
|
1613
|
+
* その値を読んだのは編集の時点です。`change` はフォーカスを外した時点で発火する
|
|
1614
|
+
* ため、読んだ後・書き戻す前に初期化が挟まることがあります。呼び出しの時点だけで
|
|
1615
|
+
* 比べると「初期化より後に始まった更新」と見なされ、クリアした値が復活します
|
|
1616
|
+
* (仕様「`data-{event}-reset`」の「進行中のバインドデータ更新は書き戻しません」)。
|
|
1617
|
+
* 初期化より後に行われた編集(`userEditSequence` の方が新しい欄)は対象外なので、
|
|
1618
|
+
* クリアの途中に打った文字はそのまま残ります。
|
|
1619
|
+
*
|
|
1607
1620
|
* @param origin 適用しようとしている値の由来
|
|
1608
1621
|
* @returns 適用してよい場合は true
|
|
1609
1622
|
*/
|
|
@@ -1667,6 +1680,29 @@ declare class ElementFragment extends Fragment {
|
|
|
1667
1680
|
* @returns 発番した編集の通番
|
|
1668
1681
|
*/
|
|
1669
1682
|
markUserEdit(): number;
|
|
1683
|
+
/**
|
|
1684
|
+
* 直前の `change` による編集の記録で使った通番。
|
|
1685
|
+
*
|
|
1686
|
+
* その後に打鍵(`input`)があったかどうかを `markUserEditOnChange()` で判定します。
|
|
1687
|
+
*/
|
|
1688
|
+
private lastChangeSequence;
|
|
1689
|
+
/**
|
|
1690
|
+
* `change` によるユーザー編集を記録します。
|
|
1691
|
+
*
|
|
1692
|
+
* **`change` の発火そのものは編集の時点になりません。** 編集の時点は値が変わった
|
|
1693
|
+
* 時点で、打鍵なら `input` が記録しています(仕様「ユーザー編集と宣言バインドの
|
|
1694
|
+
* 権威」の「印は打鍵ごと(`input`)に付きます」)。`change` はフォーカスを外した
|
|
1695
|
+
* 時点でしか発火しないため、そこで打ち直すと、打鍵の後・`change` の前に要求された
|
|
1696
|
+
* 供給(`data-{event}-reset` など)よりも新しい編集に見え、その供給が「要求より後の
|
|
1697
|
+
* 編集」として棄却されてしまいます(仕様「反映待ちの間に起きた変化」)。
|
|
1698
|
+
*
|
|
1699
|
+
* したがって直前の `change` より後に打鍵があれば、**その打鍵の時点**を編集の時点
|
|
1700
|
+
* とします。打鍵が無い場合(外部ライブラリが `<select>` の値を差し替えたときなど)
|
|
1701
|
+
* は、値が変わったことをここで初めて知るため、この時点を編集として記録します。
|
|
1702
|
+
*
|
|
1703
|
+
* @returns この編集の通番
|
|
1704
|
+
*/
|
|
1705
|
+
markUserEditOnChange(): number;
|
|
1670
1706
|
/**
|
|
1671
1707
|
* この入力欄を最後にユーザーが編集したときの通し番号を返します。
|
|
1672
1708
|
*
|
|
@@ -1735,19 +1771,82 @@ declare class ElementFragment extends Fragment {
|
|
|
1735
1771
|
*/
|
|
1736
1772
|
clearValue(): void;
|
|
1737
1773
|
/**
|
|
1738
|
-
*
|
|
1774
|
+
* 入力要素の種別と `data-value-type` の宣言に応じて値を正規化します。
|
|
1739
1775
|
*
|
|
1740
1776
|
* `type="number"` の input では、文字列の入力値・バインド値を数値へ変換します
|
|
1741
1777
|
* (DTO が数値型を期待する場合に文字列で送られるのを防ぐため)。数値として採用
|
|
1742
1778
|
* するのは、ブラウザが `<input type="number">` の値として受け付ける文字列だけで
|
|
1743
1779
|
* す(`NUMBER_INPUT_PATTERN`)。空文字・`null`・受け付けない文字列・有限でない数値
|
|
1744
|
-
* は `null`
|
|
1780
|
+
* は `null` を返します。
|
|
1781
|
+
*
|
|
1782
|
+
* `data-value-type` を宣言した入力欄では、宣言した型へ正規化します(仕様
|
|
1783
|
+
* 「`data-value-type`」)。宣言は `type` より優先するため、`type="number"` へ
|
|
1784
|
+
* `string` を宣言した場合は文字列になります。それ以外の要素では値をそのまま
|
|
1785
|
+
* 返します。
|
|
1745
1786
|
*
|
|
1746
1787
|
* @param element 対象の入力要素
|
|
1747
1788
|
* @param value 正規化する値
|
|
1748
|
-
* @returns
|
|
1789
|
+
* @returns 正規化後の値(宣言または `type="number"` に従う)
|
|
1749
1790
|
*/
|
|
1750
1791
|
private normalizeValueForElement;
|
|
1792
|
+
/**
|
|
1793
|
+
* 値を数値へ正規化します。
|
|
1794
|
+
*
|
|
1795
|
+
* 数値として採用するのは、ブラウザが `<input type="number">` の値として受け付ける
|
|
1796
|
+
* 文字列だけです(`NUMBER_INPUT_PATTERN`)。空文字・`null`・受け付けない文字列・
|
|
1797
|
+
* 有限でない数値は `null` になります(仕様「収集は DOM を真とする」)。
|
|
1798
|
+
*
|
|
1799
|
+
* @param value 正規化する値
|
|
1800
|
+
* @returns 数値。数値として採用できない場合は null
|
|
1801
|
+
*/
|
|
1802
|
+
private static normalizeNumberValue;
|
|
1803
|
+
/**
|
|
1804
|
+
* 値を真偽値へ正規化します。
|
|
1805
|
+
*
|
|
1806
|
+
* `"true"` / `"false"` を大文字小文字の区別なく判定します。空文字・`null`・それ以外
|
|
1807
|
+
* の文字列(`"1"` / `"on"` など)は `null` です。未入力を `false` として送らない
|
|
1808
|
+
* ため、また画面に出ていない値を送らないためで、真偽値がそのまま渡された場合は
|
|
1809
|
+
* その値を使います(仕様「`data-value-type`」)。
|
|
1810
|
+
*
|
|
1811
|
+
* @param value 正規化する値
|
|
1812
|
+
* @returns 真偽値。判定できない場合は null
|
|
1813
|
+
*/
|
|
1814
|
+
private static normalizeBooleanValue;
|
|
1815
|
+
/**
|
|
1816
|
+
* 入力欄に宣言された収集値の型(`data-value-type`)を解決します。
|
|
1817
|
+
*
|
|
1818
|
+
* 宣言は静的なものとして扱い、DOM の属性から直接読みます。宣言できるのは
|
|
1819
|
+
* `boolean` / `number` / `string` で、対象は値を持つ入力(`<input>` のうち
|
|
1820
|
+
* `checkbox` / `radio` / `file` を除くもの、`<textarea>`、単一選択の `<select>`)
|
|
1821
|
+
* です。対象外の要素や未知の型は宣言が無いものとして扱い、開発モードで警告します
|
|
1822
|
+
* (仕様「`data-value-type`」)。
|
|
1823
|
+
*
|
|
1824
|
+
* @param element 対象の要素
|
|
1825
|
+
* @returns 宣言された型。宣言が無い場合と無視する場合は null
|
|
1826
|
+
*/
|
|
1827
|
+
private static resolveDeclaredValueType;
|
|
1828
|
+
/**
|
|
1829
|
+
* `data-value-type` の宣言を受け付ける要素かどうかを判定します。
|
|
1830
|
+
*
|
|
1831
|
+
* チェック状態を収集する `checkbox` / `radio`、ファイルを収集する `file`、値を配列
|
|
1832
|
+
* で収集する複数選択の `<select>` は、宣言した型へ正規化する対象になりません
|
|
1833
|
+
* (仕様「`data-value-type`」)。
|
|
1834
|
+
*
|
|
1835
|
+
* @param element 対象の要素
|
|
1836
|
+
* @returns 受け付ける場合は true
|
|
1837
|
+
*/
|
|
1838
|
+
private static acceptsDeclaredValueType;
|
|
1839
|
+
/**
|
|
1840
|
+
* `data-value-type` の宣言を無視したことを開発モードで警告します。
|
|
1841
|
+
*
|
|
1842
|
+
* 値の読み取りごとに解決するため、同じ宣言では一度だけ報告します。
|
|
1843
|
+
*
|
|
1844
|
+
* @param element 宣言した要素
|
|
1845
|
+
* @param declared 宣言された値
|
|
1846
|
+
* @param reason 無視した理由
|
|
1847
|
+
* @returns 戻り値はありません。
|
|
1848
|
+
*/
|
|
1849
|
+
private static warnValueTypeDeclaration;
|
|
1751
1850
|
/**
|
|
1752
1851
|
* `value` の宣言バインド(テンプレート式・`data-attr-value`)で DOM プロパティと
|
|
1753
1852
|
* 内部値を同期する対象要素かどうかを判定します。
|
|
@@ -2432,6 +2531,31 @@ export declare class Form {
|
|
|
2432
2531
|
* @returns 宣言バインドで値または状態が決まる場合 true
|
|
2433
2532
|
*/
|
|
2434
2533
|
private static isDeclarativeStateBound;
|
|
2534
|
+
/**
|
|
2535
|
+
* 対象の部分木にある入力欄を、ネイティブのフォームリセットと同じ既定値へ戻します。
|
|
2536
|
+
*
|
|
2537
|
+
* `<form>` でない要素を初期化する場合に使います。`form.reset()` は「フォームに属する
|
|
2538
|
+
* 入力欄」しか戻せないため、以前は対象の要素を一時的な `<form>` へ移して呼び出して
|
|
2539
|
+
* いましたが、**要素を DOM から外すとフラグメントと実行時のバインドデータが破棄され**、
|
|
2540
|
+
* 同じ操作の後段の書き込みが空のバインドデータを土台にしてしまいます
|
|
2541
|
+
* (`data-fetch-bind` で寄せたキーが消える。仕様「`data-{event}-reset`」)。
|
|
2542
|
+
* そこで DOM の構造は変えず、HTML 仕様のリセットアルゴリズムと同じ既定値
|
|
2543
|
+
* (`defaultValue` / `defaultChecked` / `defaultSelected`)へ戻します。
|
|
2544
|
+
*
|
|
2545
|
+
* @param root 対象の要素(自身と配下すべてが対象)
|
|
2546
|
+
* @return 戻り値はありません。
|
|
2547
|
+
*/
|
|
2548
|
+
private static restoreDefaultValues;
|
|
2549
|
+
/**
|
|
2550
|
+
* `<select>` の選択状態を既定の選択(`defaultSelected`)へ戻します。
|
|
2551
|
+
*
|
|
2552
|
+
* 既定の選択が無い単一選択では、ブラウザのリセットと同じく先頭の選択できる
|
|
2553
|
+
* `<option>` を選びます(HTML 仕様のリセットアルゴリズム)。
|
|
2554
|
+
*
|
|
2555
|
+
* @param select 対象の select エレメント
|
|
2556
|
+
* @return 戻り値はありません。
|
|
2557
|
+
*/
|
|
2558
|
+
private static restoreDefaultSelection;
|
|
2435
2559
|
/**
|
|
2436
2560
|
* 宣言バインドで値・状態が決まる入力について、DOM 側の値を空へ揃えます。
|
|
2437
2561
|
*
|
|
@@ -2504,15 +2628,41 @@ export declare class Form {
|
|
|
2504
2628
|
* 決まり、収集値からは同じ規則で経路を組み立てられません。行の編集は応答の反映側
|
|
2505
2629
|
* (`Procedure` の `reconcileRowUserEdits()`)で保護します。
|
|
2506
2630
|
*
|
|
2631
|
+
* 経路には**その編集が起きた時点**の通番を持たせます。コミットの通番で主張すると、
|
|
2632
|
+
* 編集の後・コミットの前に要求された供給(`data-{event}-reset` など)が「編集の方が
|
|
2633
|
+
* 新しい」と判定されて棄却されます(`ValueChangeOrigin.editedPaths`)。
|
|
2634
|
+
*
|
|
2635
|
+
* 走査は「編集の通番の種類数」だけ繰り返します(=編集された欄の数が上限)。経路の
|
|
2636
|
+
* 組み立ては収集値の形に合わせる必要があり、収集は基準の通番で絞り込めるためこの形
|
|
2637
|
+
* にしています。呼び出しは `change` / `input` の確定ごとで、走査 1 回はフォーム配下の
|
|
2638
|
+
* 走査に相当します。
|
|
2639
|
+
*
|
|
2507
2640
|
* @param form 対象のフォームフラグメント
|
|
2641
|
+
* @param updateSequence この更新(双方向コミット)の通番。編集そのものではなく
|
|
2642
|
+
* 「この更新が引き起こした」経路(非表示分岐で除外されたキー)に使います
|
|
2508
2643
|
* @param prefix 経路の接頭辞(`data-form-arg` のキーなど。無い場合は空文字)
|
|
2509
2644
|
* @param collected この更新が運ぶ収集値。除外されたキーの判定に使います。
|
|
2510
2645
|
* **重ね合わせへ渡すものと同じオブジェクトを渡してください**(明示的に与えた
|
|
2511
2646
|
* 値が収集値へ重なっている場合、そのキーは除外の対象外になります)。省略時は
|
|
2512
2647
|
* ここで収集し直します
|
|
2513
|
-
* @returns
|
|
2648
|
+
* @returns 編集された経路と、その編集が起きた時点の通番
|
|
2649
|
+
*/
|
|
2650
|
+
static collectEditedPaths(form: ElementFragment, updateSequence: number, prefix?: string, collected?: Record<string, unknown> | null): ReadonlyMap<string, number>;
|
|
2651
|
+
/**
|
|
2652
|
+
* 部分木の入力欄が持つユーザー編集の通番を、大きい順の重複なしで返します。
|
|
2653
|
+
*
|
|
2654
|
+
* @param fragment 対象フラグメント(配下も辿る)
|
|
2655
|
+
* @returns 編集の通番の配列(降順)
|
|
2514
2656
|
*/
|
|
2515
|
-
static
|
|
2657
|
+
private static collectUserEditSequences;
|
|
2658
|
+
/**
|
|
2659
|
+
* 部分木をたどってユーザー編集の通番を集めます。
|
|
2660
|
+
*
|
|
2661
|
+
* @param fragment 対象フラグメント
|
|
2662
|
+
* @param sequences 集める先
|
|
2663
|
+
* @returns 戻り値はありません。
|
|
2664
|
+
*/
|
|
2665
|
+
private static walkUserEditSequences;
|
|
2516
2666
|
/**
|
|
2517
2667
|
* 収集値をたどって、除外されたキーの経路を集めます。
|
|
2518
2668
|
*
|
|
@@ -3859,12 +4009,14 @@ declare interface SetBindingDataOptions {
|
|
|
3859
4009
|
*/
|
|
3860
4010
|
readonly sequence?: number;
|
|
3861
4011
|
/**
|
|
3862
|
-
*
|
|
4012
|
+
* この更新のうち、利用者が実際に編集したバインドデータの経路と、その編集が起きた
|
|
4013
|
+
* 時点の通番。
|
|
3863
4014
|
*
|
|
3864
4015
|
* フォーム全体の収集値を運ぶ双方向コミットが、未編集の欄まで編集の権威を得ない
|
|
3865
|
-
* ようにするために渡します(`Form.collectEditedPaths()
|
|
4016
|
+
* ようにするために渡します(`Form.collectEditedPaths()`)。経路ごとに通番を持つ
|
|
4017
|
+
* 理由は `ValueChangeOrigin.editedPaths` を参照してください。
|
|
3866
4018
|
*/
|
|
3867
|
-
readonly editedPaths?:
|
|
4019
|
+
readonly editedPaths?: ReadonlyMap<string, number>;
|
|
3868
4020
|
/**
|
|
3869
4021
|
* 供給でユーザー編集の印を解除するか(既定は供給なら解除する)。
|
|
3870
4022
|
*
|
|
@@ -3967,13 +4119,22 @@ declare interface ValueChangeOrigin {
|
|
|
3967
4119
|
/** 変化の種別 */
|
|
3968
4120
|
readonly kind: ValueChangeKind;
|
|
3969
4121
|
/**
|
|
3970
|
-
*
|
|
4122
|
+
* この更新のうち、**実際に利用者が編集した**バインドデータの経路と、**その編集が
|
|
4123
|
+
* 起きた時点**の通番。
|
|
3971
4124
|
*
|
|
3972
4125
|
* `change` / `input` の双方向コミットはフォーム全体の収集値を運ぶため、更新全体を
|
|
3973
4126
|
* 「編集」として扱うと未編集の欄まで編集の権威を得てしまいます。編集された経路だけ
|
|
3974
4127
|
* をここで示し、残りは `kind` の種別として判定します。
|
|
4128
|
+
*
|
|
4129
|
+
* 経路ごとに通番を持つのは、**コミットが起きた時点ではなく編集が起きた時点**で
|
|
4130
|
+
* 判定するためです。`change` はフォーカスを外した時点で発火するため、編集より
|
|
4131
|
+
* ずっと後になります。コミットの通番で主張すると、編集の後・コミットの前に要求
|
|
4132
|
+
* された供給(`data-{event}-reset` など)が「編集の方が新しい」と判定されて棄却
|
|
4133
|
+
* され、供給が無かったことになります(仕様「ユーザー編集と宣言バインドの権威」の
|
|
4134
|
+
* 「供給は、その供給を起こした操作が起きた時点までの編集を解除し、それより後の
|
|
4135
|
+
* 編集は残します」)。
|
|
3975
4136
|
*/
|
|
3976
|
-
readonly editedPaths?:
|
|
4137
|
+
readonly editedPaths?: ReadonlyMap<string, number>;
|
|
3977
4138
|
}
|
|
3978
4139
|
|
|
3979
4140
|
/**
|
|
@@ -3982,7 +4143,7 @@ declare interface ValueChangeOrigin {
|
|
|
3982
4143
|
* リリース時に `package.json` と揃えて更新します(`tests/version.test.ts` が
|
|
3983
4144
|
* 一致を検査します)。
|
|
3984
4145
|
*/
|
|
3985
|
-
export declare const version = "0.
|
|
4146
|
+
export declare const version = "0.44.0";
|
|
3986
4147
|
|
|
3987
4148
|
/**
|
|
3988
4149
|
* すべてのレンダリングタスク(追従投入分を含む)の完了を待ちます。
|