haori 0.1.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.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +157 -0
  3. package/README.md +158 -0
  4. package/dist/haori.cjs.js +13 -0
  5. package/dist/haori.cjs.js.map +1 -0
  6. package/dist/haori.es.js +2929 -0
  7. package/dist/haori.es.js.map +1 -0
  8. package/dist/haori.iife.js +13 -0
  9. package/dist/haori.iife.js.map +1 -0
  10. package/dist/index.d.ts +824 -0
  11. package/dist/src/core.d.ts +144 -0
  12. package/dist/src/core.d.ts.map +1 -0
  13. package/dist/src/core.js +605 -0
  14. package/dist/src/core.js.map +1 -0
  15. package/dist/src/dev.d.ts +35 -0
  16. package/dist/src/dev.d.ts.map +1 -0
  17. package/dist/src/dev.js +44 -0
  18. package/dist/src/dev.js.map +1 -0
  19. package/dist/src/env.d.ts +25 -0
  20. package/dist/src/env.d.ts.map +1 -0
  21. package/dist/src/env.js +64 -0
  22. package/dist/src/env.js.map +1 -0
  23. package/dist/src/event.d.ts +144 -0
  24. package/dist/src/event.d.ts.map +1 -0
  25. package/dist/src/event.js +221 -0
  26. package/dist/src/event.js.map +1 -0
  27. package/dist/src/event_dispatcher.d.ts +50 -0
  28. package/dist/src/event_dispatcher.d.ts.map +1 -0
  29. package/dist/src/event_dispatcher.js +99 -0
  30. package/dist/src/event_dispatcher.js.map +1 -0
  31. package/dist/src/expression.d.ts +39 -0
  32. package/dist/src/expression.d.ts.map +1 -0
  33. package/dist/src/expression.js +148 -0
  34. package/dist/src/expression.js.map +1 -0
  35. package/dist/src/form.d.ts +113 -0
  36. package/dist/src/form.d.ts.map +1 -0
  37. package/dist/src/form.js +361 -0
  38. package/dist/src/form.js.map +1 -0
  39. package/dist/src/fragment.d.ts +427 -0
  40. package/dist/src/fragment.d.ts.map +1 -0
  41. package/dist/src/fragment.js +1168 -0
  42. package/dist/src/fragment.js.map +1 -0
  43. package/dist/src/haori.d.ts +54 -0
  44. package/dist/src/haori.d.ts.map +1 -0
  45. package/dist/src/haori.js +120 -0
  46. package/dist/src/haori.js.map +1 -0
  47. package/dist/src/import.d.ts +19 -0
  48. package/dist/src/import.d.ts.map +1 -0
  49. package/dist/src/import.js +64 -0
  50. package/dist/src/import.js.map +1 -0
  51. package/dist/src/index.d.ts +17 -0
  52. package/dist/src/index.d.ts.map +1 -0
  53. package/dist/src/index.js +21 -0
  54. package/dist/src/index.js.map +1 -0
  55. package/dist/src/log.d.ts +32 -0
  56. package/dist/src/log.d.ts.map +1 -0
  57. package/dist/src/log.js +43 -0
  58. package/dist/src/log.js.map +1 -0
  59. package/dist/src/observer.d.ts +17 -0
  60. package/dist/src/observer.d.ts.map +1 -0
  61. package/dist/src/observer.js +102 -0
  62. package/dist/src/observer.js.map +1 -0
  63. package/dist/src/procedure.d.ts +203 -0
  64. package/dist/src/procedure.d.ts.map +1 -0
  65. package/dist/src/procedure.js +1040 -0
  66. package/dist/src/procedure.js.map +1 -0
  67. package/dist/src/queue.d.ts +28 -0
  68. package/dist/src/queue.d.ts.map +1 -0
  69. package/dist/src/queue.js +150 -0
  70. package/dist/src/queue.js.map +1 -0
  71. package/dist/src/url.d.ts +14 -0
  72. package/dist/src/url.d.ts.map +1 -0
  73. package/dist/src/url.js +22 -0
  74. package/dist/src/url.js.map +1 -0
  75. package/dist/tests/click-attributes.test.d.ts +2 -0
  76. package/dist/tests/click-attributes.test.d.ts.map +1 -0
  77. package/dist/tests/click-attributes.test.js +95 -0
  78. package/dist/tests/click-attributes.test.js.map +1 -0
  79. package/dist/tests/core.test.d.ts +5 -0
  80. package/dist/tests/core.test.d.ts.map +1 -0
  81. package/dist/tests/core.test.js +158 -0
  82. package/dist/tests/core.test.js.map +1 -0
  83. package/dist/tests/data-each-browserlike.test.d.ts +2 -0
  84. package/dist/tests/data-each-browserlike.test.d.ts.map +1 -0
  85. package/dist/tests/data-each-browserlike.test.js +48 -0
  86. package/dist/tests/data-each-browserlike.test.js.map +1 -0
  87. package/dist/tests/data-each-fragment-debug.test.d.ts +2 -0
  88. package/dist/tests/data-each-fragment-debug.test.d.ts.map +1 -0
  89. package/dist/tests/data-each-fragment-debug.test.js +119 -0
  90. package/dist/tests/data-each-fragment-debug.test.js.map +1 -0
  91. package/dist/tests/data-each-table.test.d.ts +2 -0
  92. package/dist/tests/data-each-table.test.d.ts.map +1 -0
  93. package/dist/tests/data-each-table.test.js +63 -0
  94. package/dist/tests/data-each-table.test.js.map +1 -0
  95. package/dist/tests/dev.test.d.ts +2 -0
  96. package/dist/tests/dev.test.d.ts.map +1 -0
  97. package/dist/tests/dev.test.js +51 -0
  98. package/dist/tests/dev.test.js.map +1 -0
  99. package/dist/tests/each_arg.test.d.ts +2 -0
  100. package/dist/tests/each_arg.test.d.ts.map +1 -0
  101. package/dist/tests/each_arg.test.js +41 -0
  102. package/dist/tests/each_arg.test.js.map +1 -0
  103. package/dist/tests/env.test.d.ts +2 -0
  104. package/dist/tests/env.test.d.ts.map +1 -0
  105. package/dist/tests/env.test.js +96 -0
  106. package/dist/tests/env.test.js.map +1 -0
  107. package/dist/tests/event.test.d.ts +2 -0
  108. package/dist/tests/event.test.d.ts.map +1 -0
  109. package/dist/tests/event.test.js +287 -0
  110. package/dist/tests/event.test.js.map +1 -0
  111. package/dist/tests/expression.test.d.ts +2 -0
  112. package/dist/tests/expression.test.d.ts.map +1 -0
  113. package/dist/tests/expression.test.js +281 -0
  114. package/dist/tests/expression.test.js.map +1 -0
  115. package/dist/tests/fetch-and-procedure-scenarios.test.d.ts +2 -0
  116. package/dist/tests/fetch-and-procedure-scenarios.test.d.ts.map +1 -0
  117. package/dist/tests/fetch-and-procedure-scenarios.test.js +133 -0
  118. package/dist/tests/fetch-and-procedure-scenarios.test.js.map +1 -0
  119. package/dist/tests/form.test.d.ts +2 -0
  120. package/dist/tests/form.test.d.ts.map +1 -0
  121. package/dist/tests/form.test.js +607 -0
  122. package/dist/tests/form.test.js.map +1 -0
  123. package/dist/tests/fragment.test.d.ts +2 -0
  124. package/dist/tests/fragment.test.d.ts.map +1 -0
  125. package/dist/tests/fragment.test.js +164 -0
  126. package/dist/tests/fragment.test.js.map +1 -0
  127. package/dist/tests/import.test.d.ts +2 -0
  128. package/dist/tests/import.test.d.ts.map +1 -0
  129. package/dist/tests/import.test.js +148 -0
  130. package/dist/tests/import.test.js.map +1 -0
  131. package/dist/tests/log.test.d.ts +2 -0
  132. package/dist/tests/log.test.d.ts.map +1 -0
  133. package/dist/tests/log.test.js +58 -0
  134. package/dist/tests/log.test.js.map +1 -0
  135. package/dist/tests/procedure-action-operations.test.d.ts +2 -0
  136. package/dist/tests/procedure-action-operations.test.d.ts.map +1 -0
  137. package/dist/tests/procedure-action-operations.test.js +148 -0
  138. package/dist/tests/procedure-action-operations.test.js.map +1 -0
  139. package/dist/tests/procedure-fetch-options.test.d.ts +2 -0
  140. package/dist/tests/procedure-fetch-options.test.d.ts.map +1 -0
  141. package/dist/tests/procedure-fetch-options.test.js +131 -0
  142. package/dist/tests/procedure-fetch-options.test.js.map +1 -0
  143. package/dist/tests/procedure.test.d.ts +2 -0
  144. package/dist/tests/procedure.test.d.ts.map +1 -0
  145. package/dist/tests/procedure.test.js +136 -0
  146. package/dist/tests/procedure.test.js.map +1 -0
  147. package/dist/tests/procedure_events.test.d.ts +7 -0
  148. package/dist/tests/procedure_events.test.d.ts.map +1 -0
  149. package/dist/tests/procedure_events.test.js +96 -0
  150. package/dist/tests/procedure_events.test.js.map +1 -0
  151. package/dist/tests/reset_each.test.d.ts +2 -0
  152. package/dist/tests/reset_each.test.d.ts.map +1 -0
  153. package/dist/tests/reset_each.test.js +215 -0
  154. package/dist/tests/reset_each.test.js.map +1 -0
  155. package/dist/tests/row-move.test.d.ts +2 -0
  156. package/dist/tests/row-move.test.d.ts.map +1 -0
  157. package/dist/tests/row-move.test.js +197 -0
  158. package/dist/tests/row-move.test.js.map +1 -0
  159. package/dist/tests/row-operations.test.d.ts +2 -0
  160. package/dist/tests/row-operations.test.d.ts.map +1 -0
  161. package/dist/tests/row-operations.test.js +238 -0
  162. package/dist/tests/row-operations.test.js.map +1 -0
  163. package/dist/tests/url.test.d.ts +2 -0
  164. package/dist/tests/url.test.d.ts.map +1 -0
  165. package/dist/tests/url.test.js +150 -0
  166. package/dist/tests/url.test.js.map +1 -0
  167. package/dist/vite.config.d.ts +3 -0
  168. package/dist/vite.config.d.ts.map +1 -0
  169. package/dist/vite.config.js +28 -0
  170. package/dist/vite.config.js.map +1 -0
  171. package/dist/vitest.config.d.ts +3 -0
  172. package/dist/vitest.config.d.ts.map +1 -0
  173. package/dist/vitest.config.js +19 -0
  174. package/dist/vitest.config.js.map +1 -0
  175. package/package.json +68 -0
@@ -0,0 +1,361 @@
1
+ /**
2
+ * @fileoverview フォーム双方向バインディング
3
+ *
4
+ * フォームと入力要素の双方向バインディングを実現します。
5
+ */
6
+ import Core from './core';
7
+ import Env from './env';
8
+ import Haori from './haori';
9
+ import Log from './log';
10
+ import Queue from './queue';
11
+ /**
12
+ * Formクラスは、フォームの双方向バインディングを提供します。
13
+ * 入力要素の値をフォームにバインドし、フォームのバインド値を入力要素に反映します。
14
+ */
15
+ export default class Form {
16
+ /**
17
+ * フォーム内にある入力エレメントの値をオブジェクトとして取得します。
18
+ * data-form-object属性があると、そのエレメント内の値はオブジェクトとして処理されます。
19
+ * 入力エレメントにdata-form-list属性があると、そのエレメントの値はリストとして処理されます。
20
+ * 入力エレメント以外にdata-form-list属性があると、そのエレメントの値はオブジェクトのリストとして処理されます。
21
+ *
22
+ * @param form フォームのElementFragment
23
+ */
24
+ static getValues(form) {
25
+ const values = {};
26
+ return Form.getPartValues(form, values);
27
+ }
28
+ /**
29
+ * フォーム内の各入力エレメントから値を取得し、オブジェクトとして返します。
30
+ * 入力エレメントのname属性、data-form-object属性、data-form-list属性に基づいて値を整理します。
31
+ *
32
+ * @param fragment 対象のElementFragment
33
+ * @param values オブジェクトに追加する値のオブジェクト
34
+ * @returns values と同じオブジェクト
35
+ */
36
+ static getPartValues(fragment, values) {
37
+ const name = fragment.getAttribute('name');
38
+ const objectName = fragment.getAttribute(`${Env.prefix}form-object`);
39
+ const listName = fragment.getAttribute(`${Env.prefix}form-list`);
40
+ if (name) {
41
+ if (listName) {
42
+ if (Array.isArray(values[String(name)])) {
43
+ values[String(name)].push(fragment.getValue());
44
+ }
45
+ else {
46
+ values[String(name)] = [fragment.getValue()];
47
+ }
48
+ }
49
+ else {
50
+ values[String(name)] = fragment.getValue();
51
+ }
52
+ if (objectName) {
53
+ Log.warn('Haori', `Element cannot have both ${Env.prefix}form-object` +
54
+ ' and name attributes.');
55
+ }
56
+ for (const child of fragment.getChildElementFragments()) {
57
+ Form.getPartValues(child, values);
58
+ }
59
+ }
60
+ else if (objectName) {
61
+ const childValues = {};
62
+ for (const child of fragment.getChildElementFragments()) {
63
+ Form.getPartValues(child, childValues);
64
+ }
65
+ if (Object.keys(childValues).length > 0) {
66
+ values[String(objectName)] = childValues;
67
+ }
68
+ if (listName) {
69
+ Log.warn('Haori', `Element cannot have both ${Env.prefix}form-list` +
70
+ ` and ${Env.prefix}form-object attributes.`);
71
+ }
72
+ }
73
+ else if (listName) {
74
+ const childList = [];
75
+ for (const child of fragment.getChildElementFragments()) {
76
+ const childValues = {};
77
+ Form.getPartValues(child, childValues);
78
+ if (Object.keys(childValues).length > 0) {
79
+ childList.push(childValues);
80
+ }
81
+ }
82
+ if (childList.length > 0) {
83
+ values[String(listName)] = childList;
84
+ }
85
+ }
86
+ else {
87
+ for (const child of fragment.getChildElementFragments()) {
88
+ Form.getPartValues(child, values);
89
+ }
90
+ }
91
+ return values;
92
+ }
93
+ /**
94
+ * フォーム内にある入力エレメントに値を設定します。
95
+ * フォームのdata-bind属性に値が反映されます。
96
+ *
97
+ * @param form フォームのElementFragment
98
+ * @param values フォームに設定する値のオブジェクト
99
+ * @param force data-form-detach属性があるエレメントにも値を反映するかどうか
100
+ * @returns Promise(DOMの更新が完了したら解決される)
101
+ */
102
+ static setValues(form, values, force = false) {
103
+ return Form.setPartValues(form, values, null, force);
104
+ }
105
+ /**
106
+ * フラグメント内にある各入力エレメントに値を設定します。
107
+ *
108
+ * @param fragment 対象フラグメント
109
+ * @param values フラグメントに設定する値のオブジェクト
110
+ * @param index 配列の場合のインデックス
111
+ * @param force data-form-detach属性があるエレメントにも値を反映するかどうか
112
+ * @returns Promise(DOMの更新が完了したら解決される)
113
+ */
114
+ static setPartValues(fragment, values, index = null, force = false) {
115
+ const promises = [];
116
+ const name = fragment.getAttribute('name');
117
+ const objectName = fragment.getAttribute(`${Env.prefix}form-object`);
118
+ const listName = fragment.getAttribute(`${Env.prefix}form-list`);
119
+ const detach = fragment.getAttribute(`${Env.prefix}form-detach`);
120
+ if (name) {
121
+ if (!detach || force) {
122
+ const value = values[String(name)];
123
+ if (listName && Array.isArray(value) && index !== null) {
124
+ promises.push(fragment.setValue(value[index]));
125
+ }
126
+ else if (typeof value === 'string' ||
127
+ typeof value === 'number' ||
128
+ typeof value === 'boolean' ||
129
+ value === null) {
130
+ promises.push(fragment.setValue(value));
131
+ }
132
+ else {
133
+ promises.push(fragment.setValue(String(value)));
134
+ }
135
+ }
136
+ }
137
+ else if (objectName) {
138
+ const childValues = values[String(objectName)];
139
+ if (childValues && typeof childValues === 'object') {
140
+ for (const child of fragment.getChildElementFragments()) {
141
+ promises.push(Form.setPartValues(child, childValues, null, force));
142
+ }
143
+ }
144
+ }
145
+ else if (listName) {
146
+ const childList = values[String(listName)];
147
+ if (Array.isArray(childList)) {
148
+ const children = fragment.getChildElementFragments();
149
+ for (let i = 0; i < children.length; i++) {
150
+ const child = children[i];
151
+ if (childList.length > i) {
152
+ promises.push(Form.setPartValues(child, childList[i], i, force));
153
+ }
154
+ else {
155
+ promises.push(Form.setPartValues(child, {}, i, force));
156
+ }
157
+ }
158
+ }
159
+ }
160
+ else {
161
+ for (const child of fragment.getChildElementFragments()) {
162
+ promises.push(Form.setPartValues(child, values, null, force));
163
+ }
164
+ }
165
+ return Promise.all(promises).then(() => undefined);
166
+ }
167
+ /**
168
+ * 対象フラグメントとその子孫要素の値を初期化します。
169
+ * 値の初期化とメッセージのクリアを行います。
170
+ *
171
+ * @param fragment 対象フラグメント
172
+ * @returns すべての初期化処理が完了するPromise
173
+ */
174
+ static async reset(fragment) {
175
+ // 値をクリア
176
+ Form.clearValues(fragment);
177
+ // メッセージをクリアし、data-eachの複製を削除
178
+ await Promise.all([
179
+ Form.clearMessages(fragment),
180
+ Form.clearEachClones(fragment),
181
+ ]);
182
+ // フォーム要素をリセット
183
+ await Queue.enqueue(() => {
184
+ const element = fragment.getTarget();
185
+ if (element instanceof HTMLFormElement) {
186
+ element.reset();
187
+ }
188
+ else {
189
+ const parent = element.parentElement;
190
+ if (parent) {
191
+ const next = element.nextElementSibling;
192
+ const form = document.createElement('form');
193
+ form.appendChild(element);
194
+ form.reset();
195
+ parent.insertBefore(element, next);
196
+ }
197
+ }
198
+ });
199
+ // 再評価
200
+ await Core.evaluateAll(fragment);
201
+ }
202
+ /**
203
+ * data-each によって生成された複製(テンプレート以外)を削除します。
204
+ * 既存のテンプレートは保持し、その後の再評価で必要に応じて再生成されます。
205
+ * 対象エレメント自体がdata-eachを持つ場合はその子の複製を削除しますが、
206
+ * 対象エレメント自体は削除しません。
207
+ */
208
+ static clearEachClones(fragment) {
209
+ const tasks = [];
210
+ const removeClones = (f) => {
211
+ if (f.hasAttribute(`${Env.prefix}each`)) {
212
+ for (const child of f.getChildElementFragments()) {
213
+ const isBefore = child.hasAttribute(`${Env.prefix}each-before`);
214
+ const isAfter = child.hasAttribute(`${Env.prefix}each-after`);
215
+ if (!isBefore && !isAfter) {
216
+ tasks.push(child.remove());
217
+ }
218
+ }
219
+ }
220
+ };
221
+ const processChildren = (f) => {
222
+ removeClones(f);
223
+ for (const child of f.getChildElementFragments()) {
224
+ processChildren(child);
225
+ }
226
+ };
227
+ // 対象フラグメント自体のクローンを削除し、子エレメント以下を再帰処理
228
+ removeClones(fragment);
229
+ for (const child of fragment.getChildElementFragments()) {
230
+ processChildren(child);
231
+ }
232
+ return Promise.all(tasks).then(() => undefined);
233
+ }
234
+ /**
235
+ * 再帰的に値を初期化します。
236
+ *
237
+ * @param fragment 対象フラグメント
238
+ */
239
+ static clearValues(fragment) {
240
+ fragment.clearValue();
241
+ for (const child of fragment.getChildElementFragments()) {
242
+ Form.clearValues(child);
243
+ }
244
+ }
245
+ /**
246
+ * フラグメントとその子要素のメッセージをクリアします。
247
+ *
248
+ * @param fragment 対象フラグメント
249
+ * @returns Promise(メッセージのクリアが完了したら解決される)
250
+ */
251
+ static clearMessages(fragment) {
252
+ return Haori.clearMessages(fragment.getTarget());
253
+ }
254
+ /**
255
+ * キーに一致するフラグメントにエラーメッセージを追加します。
256
+ * キーに一致するフラグメントが見つからない場合は、指定されたフラグメントにメッセージを追加します。
257
+ *
258
+ * @param fragment 対象フラグメント
259
+ * @param key キー(ドット区切りの文字列)
260
+ * @param message 追加するエラーメッセージ]
261
+ * @return Promise(メッセージの追加が完了したら解決される)
262
+ */
263
+ static addErrorMessage(fragment, key, message) {
264
+ const promises = [];
265
+ const targetFragments = Form.findFragmentsByKey(fragment, key);
266
+ targetFragments.forEach(targetFragment => {
267
+ promises.push(Haori.addErrorMessage(targetFragment.getTarget(), message));
268
+ });
269
+ if (targetFragments.length === 0) {
270
+ promises.push(Haori.addErrorMessage(fragment.getTarget(), message));
271
+ }
272
+ return Promise.all(promises).then(() => undefined);
273
+ }
274
+ /**
275
+ * 指定されたキーに一致するフラグメントを検索します。
276
+ *
277
+ * @param fragment 対象フラグメント
278
+ * @param key キー(ドット区切りの文字列)
279
+ * @returns 一致するフラグメントの配列
280
+ */
281
+ static findFragmentsByKey(fragment, key) {
282
+ return Form.findFragmentByKeyParts(fragment, key.split('.'));
283
+ }
284
+ /**
285
+ * 指定されたキーに一致するフラグメントを検索します。
286
+ * data-form-list属性で指定された場合はdata-row属性を持つ子要素の位置と添字が一致するものを対象とします。
287
+ *
288
+ * @param fragment 対象フラグメント
289
+ * @param parts キーのパーツ
290
+ * @returns 一致するフラグメントの配列
291
+ */
292
+ static findFragmentByKeyParts(fragment, parts) {
293
+ const results = [];
294
+ const key = parts[0];
295
+ if (parts.length == 1) {
296
+ const name = fragment.getAttribute('name');
297
+ if (name === key) {
298
+ results.push(fragment);
299
+ }
300
+ }
301
+ if (fragment.hasAttribute(`${Env.prefix}form-object`)) {
302
+ if (parts.length > 1) {
303
+ const objectName = fragment.getAttribute(`${Env.prefix}form-object`);
304
+ if (objectName === key) {
305
+ fragment.getChildElementFragments().forEach(child => {
306
+ results.push(...Form.findFragmentByKeyParts(child, parts.slice(1)));
307
+ });
308
+ }
309
+ }
310
+ }
311
+ else if (fragment.hasAttribute(`${Env.prefix}form-list`)) {
312
+ if (parts.length > 1) {
313
+ const listName = fragment.getAttribute(`${Env.prefix}form-list`);
314
+ const firstPoint = key.lastIndexOf('[');
315
+ const lastPoint = key.lastIndexOf(']');
316
+ if (firstPoint !== -1 && lastPoint !== -1 && firstPoint < lastPoint) {
317
+ const rawKey = key.substring(0, firstPoint);
318
+ if (listName === rawKey) {
319
+ const indexString = key.substring(firstPoint + 1, lastPoint);
320
+ const index = Number(indexString);
321
+ if (isNaN(index)) {
322
+ Log.error('Haori', `Invalid index: ${key}`);
323
+ }
324
+ else {
325
+ const rows = fragment
326
+ .getChildElementFragments()
327
+ .filter(child => child.hasAttribute(`${Env.prefix}row`));
328
+ if (index < rows.length) {
329
+ results.push(...Form.findFragmentByKeyParts(rows[index], parts.slice(1)));
330
+ }
331
+ }
332
+ }
333
+ }
334
+ }
335
+ }
336
+ else {
337
+ fragment.getChildElementFragments().forEach(child => {
338
+ results.push(...Form.findFragmentByKeyParts(child, parts));
339
+ });
340
+ }
341
+ return results;
342
+ }
343
+ /**
344
+ * 対象のフラグメントがフォームフラグメントであればそれを返し、
345
+ * そうでなければ先祖要素をたどってフォームフラグメントを探します。
346
+ *
347
+ * @param fragment
348
+ */
349
+ static getFormFragment(fragment) {
350
+ const element = fragment.getTarget();
351
+ if (element instanceof HTMLFormElement) {
352
+ return fragment;
353
+ }
354
+ const parent = fragment.getParent();
355
+ if (parent) {
356
+ return this.getFormFragment(parent);
357
+ }
358
+ return null;
359
+ }
360
+ }
361
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}