haori 0.4.6 → 0.4.7

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/haori.es.js CHANGED
@@ -1,23 +1,23 @@
1
- const O = class O {
1
+ const C = class C {
2
2
  /**
3
3
  * 開発モードの状態を取得します。
4
4
  *
5
5
  * @returns 開発モードならtrue、そうでなければfalse
6
6
  */
7
7
  static isEnabled() {
8
- return O.devMode;
8
+ return C.devMode;
9
9
  }
10
10
  /**
11
11
  * 開発モードを有効化します。
12
12
  */
13
13
  static enable() {
14
- O.devMode = !0;
14
+ C.devMode = !0;
15
15
  }
16
16
  /**
17
17
  * 開発モードを無効化します。
18
18
  */
19
19
  static disable() {
20
- O.devMode = !1;
20
+ C.devMode = !1;
21
21
  }
22
22
  /**
23
23
  * 開発モードを切り替えます。
@@ -25,11 +25,11 @@ const O = class O {
25
25
  * @param enabled trueで有効化、falseで無効化
26
26
  */
27
27
  static set(t) {
28
- O.devMode = t;
28
+ C.devMode = t;
29
29
  }
30
30
  };
31
- O.devMode = !1;
32
- let B = O;
31
+ C.devMode = !1;
32
+ let B = C;
33
33
  const z = "embedded";
34
34
  function rt(F) {
35
35
  return F === "embedded" || F === "demo";
@@ -95,8 +95,8 @@ const D = class D {
95
95
  }
96
96
  };
97
97
  D._prefix = "data-", D._runtime = z;
98
- let u = D;
99
- document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", u.detect) : u.detect();
98
+ let l = D;
99
+ document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", l.detect) : l.detect();
100
100
  class d {
101
101
  /**
102
102
  * 開発モードでのみコンソールに情報を出力します。
@@ -221,7 +221,7 @@ const _ = class _ {
221
221
  }
222
222
  };
223
223
  _.ASYNC_QUEUE = new st();
224
- let R = _;
224
+ let P = _;
225
225
  class X {
226
226
  /**
227
227
  * 実行モードを取得します。
@@ -229,7 +229,7 @@ class X {
229
229
  * @return 実行モード。
230
230
  */
231
231
  static get runtime() {
232
- return u.runtime;
232
+ return l.runtime;
233
233
  }
234
234
  /**
235
235
  * 実行モードを設定します。
@@ -238,7 +238,7 @@ class X {
238
238
  * @return 戻り値はありません。
239
239
  */
240
240
  static setRuntime(t) {
241
- u.setRuntime(t);
241
+ l.setRuntime(t);
242
242
  }
243
243
  /**
244
244
  * 通知ダイアログを表示します。
@@ -247,7 +247,7 @@ class X {
247
247
  * @returns 通知が閉じられると解決されるPromise
248
248
  */
249
249
  static dialog(t) {
250
- return R.enqueue(() => {
250
+ return P.enqueue(() => {
251
251
  window.alert(t);
252
252
  }, !0);
253
253
  }
@@ -275,7 +275,7 @@ class X {
275
275
  * @returns ユーザーがOKをクリックした場合はtrue、キャンセルした場合はfalseが解決されるPromise
276
276
  */
277
277
  static confirm(t) {
278
- return R.enqueue(() => window.confirm(t), !0);
278
+ return P.enqueue(() => window.confirm(t), !0);
279
279
  }
280
280
  /**
281
281
  * ダイアログを開きます。
@@ -283,7 +283,7 @@ class X {
283
283
  * @param element 開くダイアログのHTML要素
284
284
  */
285
285
  static openDialog(t) {
286
- return R.enqueue(() => {
286
+ return P.enqueue(() => {
287
287
  t instanceof HTMLDialogElement ? t.showModal() : d.error("[Haori]", "Element is not a dialog: ", t);
288
288
  }, !0);
289
289
  }
@@ -293,7 +293,7 @@ class X {
293
293
  * @param element 閉じるダイアログのHTML要素
294
294
  */
295
295
  static closeDialog(t) {
296
- return R.enqueue(() => {
296
+ return P.enqueue(() => {
297
297
  t instanceof HTMLDialogElement ? t.close() : d.error("[Haori]", "Element is not a dialog: ", t);
298
298
  }, !0);
299
299
  }
@@ -314,7 +314,7 @@ class X {
314
314
  * @param level メッセージのレベル(省略可能)
315
315
  */
316
316
  static addMessage(t, e, r) {
317
- return R.enqueue(() => {
317
+ return P.enqueue(() => {
318
318
  const i = t instanceof HTMLFormElement ? t : t.parentElement ?? t;
319
319
  i.setAttribute("data-message", e), r !== void 0 ? i.setAttribute("data-message-level", r) : i.removeAttribute("data-message-level");
320
320
  }, !0);
@@ -325,7 +325,7 @@ class X {
325
325
  * @param parent メッセージをクリアする親要素
326
326
  */
327
327
  static clearMessages(t) {
328
- return R.enqueue(() => {
328
+ return P.enqueue(() => {
329
329
  t.removeAttribute("data-message"), t.removeAttribute("data-message-level"), t.querySelectorAll("[data-message]").forEach((e) => {
330
330
  e.removeAttribute("data-message"), e.removeAttribute("data-message-level");
331
331
  });
@@ -361,11 +361,11 @@ class y {
361
361
  * @returns values と同じオブジェクト
362
362
  */
363
363
  static getPartValues(t, e) {
364
- const r = t.getAttribute("name"), i = t.getAttribute(`${u.prefix}form-object`), n = t.getAttribute(`${u.prefix}form-list`);
364
+ const r = t.getAttribute("name"), i = t.getAttribute(`${l.prefix}form-object`), n = t.getAttribute(`${l.prefix}form-list`);
365
365
  if (r) {
366
366
  n ? Array.isArray(e[String(r)]) ? e[String(r)].push(t.getValue()) : e[String(r)] = [t.getValue()] : e[String(r)] = t.getValue(), i && d.warn(
367
367
  "Haori",
368
- `Element cannot have both ${u.prefix}form-object and name attributes.`
368
+ `Element cannot have both ${l.prefix}form-object and name attributes.`
369
369
  );
370
370
  for (const s of t.getChildElementFragments())
371
371
  y.getPartValues(s, e);
@@ -375,7 +375,7 @@ class y {
375
375
  y.getPartValues(a, s);
376
376
  Object.keys(s).length > 0 && (e[String(i)] = s), n && d.warn(
377
377
  "Haori",
378
- `Element cannot have both ${u.prefix}form-list and ${u.prefix}form-object attributes.`
378
+ `Element cannot have both ${l.prefix}form-list and ${l.prefix}form-object attributes.`
379
379
  );
380
380
  } else if (n) {
381
381
  const s = [];
@@ -434,7 +434,7 @@ class y {
434
434
  * @returns Promise(DOMの更新が完了したら解決される)
435
435
  */
436
436
  static setPartValues(t, e, r = null, i = !1, n = !0) {
437
- const s = [], a = t.getAttribute("name"), o = t.getAttribute(`${u.prefix}form-object`), h = t.getAttribute(`${u.prefix}form-list`), m = t.getAttribute(`${u.prefix}form-detach`);
437
+ const s = [], a = t.getAttribute("name"), o = t.getAttribute(`${l.prefix}form-object`), h = t.getAttribute(`${l.prefix}form-list`), m = t.getAttribute(`${l.prefix}form-detach`);
438
438
  if (a) {
439
439
  if (!m || i) {
440
440
  const b = e[String(a)];
@@ -493,7 +493,7 @@ class y {
493
493
  y.clearValues(t), await Promise.all([
494
494
  y.clearMessages(t),
495
495
  y.clearEachClones(t)
496
- ]), await R.enqueue(() => {
496
+ ]), await P.enqueue(() => {
497
497
  const e = t.getTarget();
498
498
  if (e instanceof HTMLFormElement)
499
499
  e.reset();
@@ -504,7 +504,7 @@ class y {
504
504
  n.appendChild(e), n.reset(), r.insertBefore(e, i);
505
505
  }
506
506
  }
507
- }), await P.evaluateAll(t);
507
+ }), await R.evaluateAll(t);
508
508
  }
509
509
  /**
510
510
  * data-each によって生成された複製(テンプレート以外)を削除します。
@@ -514,9 +514,9 @@ class y {
514
514
  */
515
515
  static clearEachClones(t) {
516
516
  const e = [], r = (n) => {
517
- if (n.hasAttribute(`${u.prefix}each`))
517
+ if (n.hasAttribute(`${l.prefix}each`))
518
518
  for (const s of n.getChildElementFragments()) {
519
- const a = s.hasAttribute(`${u.prefix}each-before`), o = s.hasAttribute(`${u.prefix}each-after`);
519
+ const a = s.hasAttribute(`${l.prefix}each-before`), o = s.hasAttribute(`${l.prefix}each-after`);
520
520
  !a && !o && e.push(s.remove());
521
521
  }
522
522
  }, i = (n) => {
@@ -600,13 +600,13 @@ class y {
600
600
  */
601
601
  static findFragmentByKeyParts(t, e) {
602
602
  const r = [], i = e[0];
603
- if (e.length == 1 && t.getAttribute("name") === i && r.push(t), t.hasAttribute(`${u.prefix}form-object`))
604
- e.length > 1 && t.getAttribute(`${u.prefix}form-object`) === i && t.getChildElementFragments().forEach((s) => {
603
+ if (e.length == 1 && t.getAttribute("name") === i && r.push(t), t.hasAttribute(`${l.prefix}form-object`))
604
+ e.length > 1 && t.getAttribute(`${l.prefix}form-object`) === i && t.getChildElementFragments().forEach((s) => {
605
605
  r.push(...y.findFragmentByKeyParts(s, e.slice(1)));
606
606
  });
607
- else if (t.hasAttribute(`${u.prefix}form-list`)) {
607
+ else if (t.hasAttribute(`${l.prefix}form-list`)) {
608
608
  if (e.length > 1) {
609
- const n = t.getAttribute(`${u.prefix}form-list`), s = i.lastIndexOf("["), a = i.lastIndexOf("]");
609
+ const n = t.getAttribute(`${l.prefix}form-list`), s = i.lastIndexOf("["), a = i.lastIndexOf("]");
610
610
  if (s !== -1 && a !== -1 && s < a) {
611
611
  const o = i.substring(0, s);
612
612
  if (n === o) {
@@ -614,7 +614,7 @@ class y {
614
614
  if (isNaN(m))
615
615
  d.error("Haori", `Invalid index: ${i}`);
616
616
  else {
617
- const b = t.getChildElementFragments().filter((E) => E.hasAttribute(`${u.prefix}row`));
617
+ const b = t.getChildElementFragments().filter((E) => E.hasAttribute(`${l.prefix}row`));
618
618
  m < b.length && r.push(
619
619
  ...y.findFragmentByKeyParts(b[m], e.slice(1))
620
620
  );
@@ -1268,7 +1268,7 @@ const I = class I {
1268
1268
  e = new x(t);
1269
1269
  break;
1270
1270
  case Node.TEXT_NODE:
1271
- e = new H(t);
1271
+ e = new O(t);
1272
1272
  break;
1273
1273
  case Node.COMMENT_NODE:
1274
1274
  e = new Z(t);
@@ -1296,7 +1296,7 @@ const I = class I {
1296
1296
  return Promise.resolve();
1297
1297
  if (this.parent) {
1298
1298
  const t = this.parent, e = t.skipMutationNodes;
1299
- return R.enqueue(() => {
1299
+ return P.enqueue(() => {
1300
1300
  t.skipMutationNodes = !0, this.target.parentNode === t.getTarget() && t.getTarget().removeChild(this.target), this.mounted = !1;
1301
1301
  }).finally(() => {
1302
1302
  t.skipMutationNodes = e;
@@ -1304,7 +1304,7 @@ const I = class I {
1304
1304
  } else {
1305
1305
  const t = this.target.parentNode;
1306
1306
  if (t)
1307
- return R.enqueue(() => {
1307
+ return P.enqueue(() => {
1308
1308
  this.target.parentNode === t && t.removeChild(this.target), this.mounted = !1;
1309
1309
  });
1310
1310
  this.mounted = !1;
@@ -1321,7 +1321,7 @@ const I = class I {
1321
1321
  return Promise.resolve();
1322
1322
  if (this.parent) {
1323
1323
  const t = this.parent, e = t.skipMutationNodes;
1324
- return R.enqueue(() => {
1324
+ return P.enqueue(() => {
1325
1325
  t.skipMutationNodes = !0, this.target.parentNode !== t.getTarget() && t.getTarget().appendChild(this.target), this.mounted = !0;
1326
1326
  }).finally(() => {
1327
1327
  t.skipMutationNodes = e;
@@ -1380,8 +1380,8 @@ const I = class I {
1380
1380
  }
1381
1381
  };
1382
1382
  I.FRAGMENT_CACHE = /* @__PURE__ */ new WeakMap();
1383
- let T = I;
1384
- class x extends T {
1383
+ let w = I;
1384
+ class x extends w {
1385
1385
  /**
1386
1386
  * エレメントフラグメントのコンストラクタ。
1387
1387
  * アトリビュートや子フラグメントの作成も行います。
@@ -1411,7 +1411,7 @@ class x extends T {
1411
1411
  this.attributeMap.set(e, i);
1412
1412
  }
1413
1413
  }), t.childNodes.forEach((e) => {
1414
- const r = T.get(e);
1414
+ const r = w.get(e);
1415
1415
  r.setParent(this), this.children.push(r);
1416
1416
  });
1417
1417
  }
@@ -1470,7 +1470,15 @@ class x extends T {
1470
1470
  }), this.children.forEach((e) => {
1471
1471
  const r = e.clone();
1472
1472
  t.getTarget().appendChild(r.getTarget()), t.pushChild(r);
1473
- }), t.mounted = !1, t.bindingData = this.bindingData, t.clearBindingDataCache(), t.visible = this.visible, t.display = this.display, t.template = this.template, t;
1473
+ }), t.mounted = !1, t.bindingData = this.bindingData, t.clearBindingDataCache(), t.visible = !0, t.display = this.display, t.template = this.template, t.normalizeClonedVisibilityState(), t;
1474
+ }
1475
+ /**
1476
+ * clone 時に runtime の hidden 状態だけを落とします。
1477
+ */
1478
+ normalizeClonedVisibilityState() {
1479
+ (this.visible === !1 || this.getTarget().style.display === "none" || this.getTarget().hasAttribute(`${l.prefix}if-false`)) && (this.visible = !0, this.display = "", this.getTarget().style.display = "", this.getTarget().removeAttribute(`${l.prefix}if-false`)), this.children.forEach((t) => {
1480
+ t instanceof x && t.normalizeClonedVisibilityState();
1481
+ });
1474
1482
  }
1475
1483
  /**
1476
1484
  * フラグメントとノードを削除します。
@@ -1600,12 +1608,12 @@ class x extends T {
1600
1608
  if (r instanceof HTMLInputElement && (r.type === "checkbox" || r.type === "radio")) {
1601
1609
  const i = this.getAttribute("value"), n = r.type === "checkbox" && i === "true";
1602
1610
  let s;
1603
- return n ? s = t === !0 || t === "true" : i === "false" ? s = t === !1 : s = i === String(t), this.value = n ? s : s ? t : null, r.checked === s ? Promise.resolve() : (this.skipChangeValue = !0, R.enqueue(() => {
1611
+ return n ? s = t === !0 || t === "true" : i === "false" ? s = t === !1 : s = i === String(t), this.value = n ? s : s ? t : null, r.checked === s ? Promise.resolve() : (this.skipChangeValue = !0, P.enqueue(() => {
1604
1612
  r.checked = s, e && r.dispatchEvent(new Event("change", { bubbles: !0 }));
1605
1613
  }).finally(() => {
1606
1614
  this.skipChangeValue = !1;
1607
1615
  }));
1608
- } else return r instanceof HTMLInputElement || r instanceof HTMLTextAreaElement || r instanceof HTMLSelectElement ? (this.value = t, this.skipChangeValue = !0, R.enqueue(() => {
1616
+ } else return r instanceof HTMLInputElement || r instanceof HTMLTextAreaElement || r instanceof HTMLSelectElement ? (this.value = t, this.skipChangeValue = !0, P.enqueue(() => {
1609
1617
  r.value = t === null ? "" : String(t), e && ((r instanceof HTMLInputElement && this.INPUT_EVENT_TYPES.includes(r.type) || r instanceof HTMLTextAreaElement) && r.dispatchEvent(new Event("input", { bubbles: !0 })), r.dispatchEvent(new Event("change", { bubbles: !0 })));
1610
1618
  }).finally(() => {
1611
1619
  this.skipChangeValue = !1;
@@ -1685,7 +1693,7 @@ class x extends T {
1685
1693
  return Promise.resolve();
1686
1694
  this.attributeMap.delete(t), this.skipMutationAttributes = !0;
1687
1695
  const r = this.getTarget();
1688
- return R.enqueue(() => {
1696
+ return P.enqueue(() => {
1689
1697
  r.removeAttribute(t), e !== t && r.removeAttribute(e);
1690
1698
  }).finally(() => {
1691
1699
  this.skipMutationAttributes = !1;
@@ -1708,7 +1716,7 @@ class x extends T {
1708
1716
  const n = new U(t, r);
1709
1717
  this.attributeMap.set(t, n), this.skipMutationAttributes = !0;
1710
1718
  const s = this.getTarget(), a = n.isForceEvaluation() ? r : this.getAttribute(t);
1711
- return R.enqueue(() => {
1719
+ return P.enqueue(() => {
1712
1720
  if (s.getAttribute(t) !== r && s.setAttribute(t, r), a === null || a === !1)
1713
1721
  s.removeAttribute(e);
1714
1722
  else {
@@ -1730,7 +1738,7 @@ class x extends T {
1730
1738
  return Promise.resolve();
1731
1739
  this.attributeMap.delete(t), this.skipMutationAttributes = !0;
1732
1740
  const e = this.getTarget();
1733
- return R.enqueue(() => {
1741
+ return P.enqueue(() => {
1734
1742
  e.removeAttribute(t);
1735
1743
  }).finally(() => {
1736
1744
  this.skipMutationAttributes = !1;
@@ -1748,7 +1756,7 @@ class x extends T {
1748
1756
  if (e === void 0)
1749
1757
  return null;
1750
1758
  const r = e.evaluate(this.getBindingData());
1751
- return r.length === 1 ? r[0] : L.joinEvaluateResults(r);
1759
+ return r.length === 1 ? r[0] : $.joinEvaluateResults(r);
1752
1760
  }
1753
1761
  /**
1754
1762
  * 属性の生の値を取得します。
@@ -1791,7 +1799,7 @@ class x extends T {
1791
1799
  const i = e ? r.nextSibling : r;
1792
1800
  let n = e ? r.nextSibling : r;
1793
1801
  for (; n !== null; ) {
1794
- const s = T.get(n);
1802
+ const s = w.get(n);
1795
1803
  if (s !== null) {
1796
1804
  const a = this.children.indexOf(s);
1797
1805
  if (a !== -1)
@@ -1845,7 +1853,7 @@ class x extends T {
1845
1853
  }
1846
1854
  t.setParent(this), t.setMounted(this.mounted);
1847
1855
  const b = this.skipMutationNodes;
1848
- return this.skipMutationNodes = !0, R.enqueue(() => {
1856
+ return this.skipMutationNodes = !0, P.enqueue(() => {
1849
1857
  this.target.insertBefore(t.getTarget(), m);
1850
1858
  }).finally(() => {
1851
1859
  this.skipMutationNodes = b;
@@ -1919,7 +1927,7 @@ class x extends T {
1919
1927
  * @returns エレメントの非表示のPromise
1920
1928
  */
1921
1929
  hide() {
1922
- return this.visible = !1, this.display = this.getTarget().style.display, this.getTarget().style.display = "none", this.getTarget().setAttribute(`${u.prefix}if-false`, ""), Promise.resolve();
1930
+ return this.visible = !1, this.display = this.getTarget().style.display, this.getTarget().style.display = "none", this.getTarget().setAttribute(`${l.prefix}if-false`, ""), Promise.resolve();
1923
1931
  }
1924
1932
  /**
1925
1933
  * エレメントを表示します。
@@ -1927,7 +1935,7 @@ class x extends T {
1927
1935
  * @return エレメントの表示のPromise
1928
1936
  */
1929
1937
  show() {
1930
- return this.getTarget().style.display = this.display ?? "", this.getTarget().removeAttribute(`${u.prefix}if-false`), this.visible = !0, Promise.resolve();
1938
+ return this.getTarget().style.display = this.display ?? "", this.getTarget().removeAttribute(`${l.prefix}if-false`), this.visible = !0, Promise.resolve();
1931
1939
  }
1932
1940
  /**
1933
1941
  * 指定した属性名を持つ最も近い親要素を返します。
@@ -1943,7 +1951,7 @@ class x extends T {
1943
1951
  return e === null ? null : e.closestByAttribute(t);
1944
1952
  }
1945
1953
  }
1946
- class H extends T {
1954
+ class O extends w {
1947
1955
  /**
1948
1956
  * テキストフラグメントのコンストラクタ。
1949
1957
  * 対象テキストノードの内容を初期化します。
@@ -1951,7 +1959,7 @@ class H extends T {
1951
1959
  * @param target 対象テキストノード
1952
1960
  */
1953
1961
  constructor(t) {
1954
- super(t), this.skipMutation = !1, this.text = t.textContent || "", this.contents = new L(this.text);
1962
+ super(t), this.skipMutation = !1, this.text = t.textContent || "", this.contents = new $(this.text);
1955
1963
  }
1956
1964
  /**
1957
1965
  * フラグメントをクローンします。
@@ -1959,7 +1967,7 @@ class H extends T {
1959
1967
  * @returns クローンされたフラグメント
1960
1968
  */
1961
1969
  clone() {
1962
- const t = new H(this.target.cloneNode(!0));
1970
+ const t = new O(this.target.cloneNode(!0));
1963
1971
  return t.mounted = !1, t.text = this.text, t.contents = this.contents, t;
1964
1972
  }
1965
1973
  /**
@@ -1977,7 +1985,7 @@ class H extends T {
1977
1985
  * @returns 更新のPromise
1978
1986
  */
1979
1987
  setContent(t) {
1980
- return this.skipMutation || this.text === t ? Promise.resolve() : (this.text = t, this.contents = new L(t), this.evaluate());
1988
+ return this.skipMutation || this.text === t ? Promise.resolve() : (this.text = t, this.contents = new $(t), this.evaluate());
1981
1989
  }
1982
1990
  /**
1983
1991
  * フラグメントを評価します。
@@ -1987,10 +1995,10 @@ class H extends T {
1987
1995
  evaluate() {
1988
1996
  return this.contents.isRawEvaluate && this.parent === null ? Promise.reject(
1989
1997
  new Error("Parent fragment is required for raw evaluation")
1990
- ) : R.enqueue(() => {
1998
+ ) : P.enqueue(() => {
1991
1999
  this.skipMutation = !0, this.contents.isRawEvaluate ? this.parent.getTarget().innerHTML = this.contents.evaluate(
1992
2000
  this.parent.getBindingData()
1993
- )[0] : this.contents.isEvaluate ? this.target.textContent = L.joinEvaluateResults(
2001
+ )[0] : this.contents.isEvaluate ? this.target.textContent = $.joinEvaluateResults(
1994
2002
  this.contents.evaluate(this.parent.getBindingData())
1995
2003
  ) : this.target.textContent = this.text;
1996
2004
  }).finally(() => {
@@ -1998,7 +2006,7 @@ class H extends T {
1998
2006
  });
1999
2007
  }
2000
2008
  }
2001
- class Z extends T {
2009
+ class Z extends w {
2002
2010
  /**
2003
2011
  * コメントフラグメントのコンストラクタ。
2004
2012
  * 対象コメントノードの内容を初期化します。
@@ -2032,7 +2040,7 @@ class Z extends T {
2032
2040
  * @return 更新のPromise
2033
2041
  */
2034
2042
  setContent(t) {
2035
- return this.skipMutation || this.text === t ? Promise.resolve() : (this.text = t, R.enqueue(() => {
2043
+ return this.skipMutation || this.text === t ? Promise.resolve() : (this.text = t, P.enqueue(() => {
2036
2044
  this.skipMutation = !0, this.target.textContent = this.text;
2037
2045
  }).finally(() => {
2038
2046
  this.skipMutation = !1;
@@ -2123,8 +2131,8 @@ const K = class K {
2123
2131
  }
2124
2132
  };
2125
2133
  K.PLACEHOLDER_REGEX = /\{\{\{([\s\S]+?)\}\}\}|\{\{([\s\S]+?)\}\}/g;
2126
- let L = K;
2127
- const G = class G extends L {
2134
+ let $ = K;
2135
+ const G = class G extends $ {
2128
2136
  /**
2129
2137
  * コンストラクタ。
2130
2138
  *
@@ -2180,7 +2188,7 @@ G.FORCE_EVALUATION_ATTRIBUTES = [
2180
2188
  "hor-each"
2181
2189
  ];
2182
2190
  let U = G;
2183
- class w {
2191
+ class T {
2184
2192
  /**
2185
2193
  * カスタムイベントを発火します。
2186
2194
  *
@@ -2204,7 +2212,7 @@ class w {
2204
2212
  * @param version ライブラリバージョン
2205
2213
  */
2206
2214
  static ready(t) {
2207
- w.dispatch(document, "ready", { version: t });
2215
+ T.dispatch(document, "ready", { version: t });
2208
2216
  }
2209
2217
  /**
2210
2218
  * renderイベントを発火します。
@@ -2212,7 +2220,7 @@ class w {
2212
2220
  * @param target 評価対象要素
2213
2221
  */
2214
2222
  static render(t) {
2215
- w.dispatch(t, "render", { target: t });
2223
+ T.dispatch(t, "render", { target: t });
2216
2224
  }
2217
2225
  /**
2218
2226
  * importstartイベントを発火します。
@@ -2221,7 +2229,7 @@ class w {
2221
2229
  * @param url インポート対象URL
2222
2230
  */
2223
2231
  static importStart(t, e) {
2224
- w.dispatch(t, "importstart", {
2232
+ T.dispatch(t, "importstart", {
2225
2233
  url: e,
2226
2234
  startedAt: performance.now()
2227
2235
  });
@@ -2235,7 +2243,7 @@ class w {
2235
2243
  * @param startedAt 開始時刻
2236
2244
  */
2237
2245
  static importEnd(t, e, r, i) {
2238
- w.dispatch(t, "importend", {
2246
+ T.dispatch(t, "importend", {
2239
2247
  url: e,
2240
2248
  bytes: r,
2241
2249
  durationMs: performance.now() - i
@@ -2249,7 +2257,7 @@ class w {
2249
2257
  * @param error エラー内容
2250
2258
  */
2251
2259
  static importError(t, e, r) {
2252
- w.dispatch(t, "importerror", { url: e, error: r });
2260
+ T.dispatch(t, "importerror", { url: e, error: r });
2253
2261
  }
2254
2262
  /**
2255
2263
  * bindchangeイベントを発火します。
@@ -2265,7 +2273,7 @@ class w {
2265
2273
  const m = e?.[h], b = r[h];
2266
2274
  m !== b && n.push(h);
2267
2275
  }
2268
- w.dispatch(t, "bindchange", {
2276
+ T.dispatch(t, "bindchange", {
2269
2277
  previous: e || {},
2270
2278
  next: r,
2271
2279
  changedKeys: n,
@@ -2281,7 +2289,7 @@ class w {
2281
2289
  * @param order 現在の順序
2282
2290
  */
2283
2291
  static eachUpdate(t, e, r, i) {
2284
- w.dispatch(t, "eachupdate", {
2292
+ T.dispatch(t, "eachupdate", {
2285
2293
  added: e,
2286
2294
  removed: r,
2287
2295
  order: i,
@@ -2297,7 +2305,7 @@ class w {
2297
2305
  * @param item 行データ
2298
2306
  */
2299
2307
  static rowAdd(t, e, r, i) {
2300
- w.dispatch(t, "rowadd", { key: e, index: r, item: i });
2308
+ T.dispatch(t, "rowadd", { key: e, index: r, item: i });
2301
2309
  }
2302
2310
  /**
2303
2311
  * rowremoveイベントを発火します。
@@ -2307,7 +2315,7 @@ class w {
2307
2315
  * @param index インデックス
2308
2316
  */
2309
2317
  static rowRemove(t, e, r) {
2310
- w.dispatch(t, "rowremove", { key: e, index: r });
2318
+ T.dispatch(t, "rowremove", { key: e, index: r });
2311
2319
  }
2312
2320
  /**
2313
2321
  * rowmoveイベントを発火します。
@@ -2318,7 +2326,7 @@ class w {
2318
2326
  * @param to 移動後インデックス
2319
2327
  */
2320
2328
  static rowMove(t, e, r, i) {
2321
- w.dispatch(t, "rowmove", { key: e, from: r, to: i });
2329
+ T.dispatch(t, "rowmove", { key: e, from: r, to: i });
2322
2330
  }
2323
2331
  /**
2324
2332
  * showイベントを発火します。
@@ -2326,7 +2334,7 @@ class w {
2326
2334
  * @param target data-if要素
2327
2335
  */
2328
2336
  static show(t) {
2329
- w.dispatch(t, "show", { visible: !0 });
2337
+ T.dispatch(t, "show", { visible: !0 });
2330
2338
  }
2331
2339
  /**
2332
2340
  * hideイベントを発火します。
@@ -2334,7 +2342,7 @@ class w {
2334
2342
  * @param target data-if要素
2335
2343
  */
2336
2344
  static hide(t) {
2337
- w.dispatch(t, "hide", { visible: !1 });
2345
+ T.dispatch(t, "hide", { visible: !1 });
2338
2346
  }
2339
2347
  /**
2340
2348
  * fetchstartイベントを発火します。
@@ -2347,7 +2355,7 @@ class w {
2347
2355
  * @return 戻り値はありません。
2348
2356
  */
2349
2357
  static fetchStart(t, e, r, i, n) {
2350
- w.dispatch(t, "fetchstart", {
2358
+ T.dispatch(t, "fetchstart", {
2351
2359
  url: e,
2352
2360
  options: r || {},
2353
2361
  payload: i,
@@ -2364,7 +2372,7 @@ class w {
2364
2372
  * @param startedAt 開始時刻
2365
2373
  */
2366
2374
  static fetchEnd(t, e, r, i) {
2367
- w.dispatch(t, "fetchend", {
2375
+ T.dispatch(t, "fetchend", {
2368
2376
  url: e,
2369
2377
  status: r,
2370
2378
  durationMs: performance.now() - i
@@ -2380,7 +2388,7 @@ class w {
2380
2388
  * @param startedAt 開始時刻(存在する場合)
2381
2389
  */
2382
2390
  static fetchError(t, e, r, i, n) {
2383
- w.dispatch(t, "fetcherror", {
2391
+ T.dispatch(t, "fetcherror", {
2384
2392
  url: e,
2385
2393
  status: i,
2386
2394
  error: r,
@@ -2416,7 +2424,7 @@ function ht(F, t) {
2416
2424
  const e = new URL(F, window.location.href), r = new URLSearchParams(e.search);
2417
2425
  return ct(r, t), e.search = r.toString(), e.toString();
2418
2426
  }
2419
- const l = class l {
2427
+ const u = class u {
2420
2428
  /**
2421
2429
  * イベント属性名を正しく生成します。
2422
2430
  * 例: ("click", "fetch") => "data-click-fetch"
@@ -2425,7 +2433,7 @@ const l = class l {
2425
2433
  * 非イベント変種が "data-fetch-xxx" として存在するものについては、event が null の場合にそちらを返します。
2426
2434
  */
2427
2435
  static attrName(t, e, r = !1) {
2428
- return t ? `${u.prefix}${t}-${e}` : r ? `${u.prefix}fetch-${e}` : `${u.prefix}${e}`;
2436
+ return t ? `${l.prefix}${t}-${e}` : r ? `${l.prefix}fetch-${e}` : `${l.prefix}${e}`;
2429
2437
  }
2430
2438
  /**
2431
2439
  * data 属性のテンプレート式評価結果を URLSearchParams 向けに組み立てます。
@@ -2436,7 +2444,7 @@ const l = class l {
2436
2444
  */
2437
2445
  static resolveDataParamString(t, e) {
2438
2446
  return t.replace(
2439
- l.DATA_PLACEHOLDER_REGEX,
2447
+ u.DATA_PLACEHOLDER_REGEX,
2440
2448
  (r, i, n) => {
2441
2449
  const s = j.evaluate(
2442
2450
  i ?? n ?? "",
@@ -2493,7 +2501,7 @@ const l = class l {
2493
2501
  static stringifyJsonTemplateStringContent(t) {
2494
2502
  if (t == null || Number.isNaN(t))
2495
2503
  return "";
2496
- const e = typeof t == "object" ? l.stringifyJsonTemplateValue(t) : String(t);
2504
+ const e = typeof t == "object" ? u.stringifyJsonTemplateValue(t) : String(t);
2497
2505
  return JSON.stringify(e).slice(1, -1);
2498
2506
  }
2499
2507
  /**
@@ -2505,13 +2513,13 @@ const l = class l {
2505
2513
  */
2506
2514
  static resolveDataJsonString(t, e) {
2507
2515
  return t.replace(
2508
- l.DATA_PLACEHOLDER_REGEX,
2516
+ u.DATA_PLACEHOLDER_REGEX,
2509
2517
  (r, i, n, s) => {
2510
2518
  const a = j.evaluate(
2511
2519
  i ?? n ?? "",
2512
2520
  e
2513
2521
  );
2514
- return l.isJsonStringContext(t, s) ? l.stringifyJsonTemplateStringContent(a) : l.stringifyJsonTemplateValue(a);
2522
+ return u.isJsonStringContext(t, s) ? u.stringifyJsonTemplateStringContent(a) : u.stringifyJsonTemplateValue(a);
2515
2523
  }
2516
2524
  );
2517
2525
  }
@@ -2529,13 +2537,13 @@ const l = class l {
2529
2537
  if (typeof i != "string" || r === null)
2530
2538
  return null;
2531
2539
  const n = r.trim();
2532
- return l.SINGLE_PLACEHOLDER_REGEX.test(n) ? P.parseDataBind(i) : n.startsWith("{") || n.startsWith("[") ? P.parseDataBind(
2533
- l.resolveDataJsonString(
2540
+ return u.SINGLE_PLACEHOLDER_REGEX.test(n) ? R.parseDataBind(i) : n.startsWith("{") || n.startsWith("[") ? R.parseDataBind(
2541
+ u.resolveDataJsonString(
2534
2542
  r,
2535
2543
  t.getBindingData()
2536
2544
  )
2537
- ) : P.parseDataBind(
2538
- l.resolveDataParamString(r, t.getBindingData())
2545
+ ) : R.parseDataBind(
2546
+ u.resolveDataParamString(r, t.getBindingData())
2539
2547
  );
2540
2548
  }
2541
2549
  /**
@@ -2550,30 +2558,30 @@ const l = class l {
2550
2558
  targetFragment: t
2551
2559
  };
2552
2560
  if (e) {
2553
- if (t.hasAttribute(l.attrName(e, "validate")) && (r.valid = !0), t.hasAttribute(l.attrName(e, "confirm")) && (r.confirmMessage = t.getAttribute(
2554
- l.attrName(e, "confirm")
2561
+ if (t.hasAttribute(u.attrName(e, "validate")) && (r.valid = !0), t.hasAttribute(u.attrName(e, "confirm")) && (r.confirmMessage = t.getAttribute(
2562
+ u.attrName(e, "confirm")
2555
2563
  ).replace(/\\n/g, `
2556
- `)), t.hasAttribute(l.attrName(e, "data")) && (r.data = l.resolveDataAttribute(
2564
+ `)), t.hasAttribute(u.attrName(e, "data")) && (r.data = u.resolveDataAttribute(
2557
2565
  t,
2558
- l.attrName(e, "data")
2559
- )), t.hasAttribute(l.attrName(e, "form"))) {
2566
+ u.attrName(e, "data")
2567
+ )), t.hasAttribute(u.attrName(e, "form"))) {
2560
2568
  const c = t.getRawAttribute(
2561
- l.attrName(e, "form")
2569
+ u.attrName(e, "form")
2562
2570
  );
2563
2571
  if (c) {
2564
2572
  const f = document.body.querySelector(c);
2565
2573
  f !== null ? r.formFragment = y.getFormFragment(
2566
- T.get(f)
2574
+ w.get(f)
2567
2575
  ) : d.error(
2568
2576
  "Haori",
2569
- `Form element not found: ${c} (${l.attrName(e, "form")})`
2577
+ `Form element not found: ${c} (${u.attrName(e, "form")})`
2570
2578
  );
2571
2579
  } else
2572
2580
  r.formFragment = y.getFormFragment(t);
2573
2581
  } else e === "change" && (r.formFragment = y.getFormFragment(t));
2574
- if (t.hasAttribute(`${u.prefix}${e}-before-run`)) {
2582
+ if (t.hasAttribute(`${l.prefix}${e}-before-run`)) {
2575
2583
  const c = t.getRawAttribute(
2576
- `${u.prefix}${e}-before-run`
2584
+ `${l.prefix}${e}-before-run`
2577
2585
  );
2578
2586
  try {
2579
2587
  r.beforeCallback = new Function(
@@ -2589,34 +2597,34 @@ ${c}
2589
2597
  }
2590
2598
  }
2591
2599
  }
2592
- const i = l.attrName(e, "fetch"), n = t.hasAttribute(i);
2600
+ const i = u.attrName(e, "fetch"), n = t.hasAttribute(i);
2593
2601
  n && (r.fetchUrl = t.getAttribute(i));
2594
2602
  const s = {};
2595
2603
  if (e) {
2596
- const c = l.attrName(e, "fetch-method");
2604
+ const c = u.attrName(e, "fetch-method");
2597
2605
  t.hasAttribute(c) && (s.method = t.getAttribute(
2598
2606
  c
2599
2607
  ));
2600
2608
  } else {
2601
- const c = l.attrName(null, "method", !0);
2609
+ const c = u.attrName(null, "method", !0);
2602
2610
  t.hasAttribute(c) && (s.method = t.getAttribute(
2603
2611
  c
2604
2612
  ));
2605
2613
  }
2606
2614
  if (e) {
2607
- const c = l.attrName(e, "fetch-headers");
2615
+ const c = u.attrName(e, "fetch-headers");
2608
2616
  if (t.hasAttribute(c)) {
2609
2617
  const f = t.getRawAttribute(
2610
2618
  c
2611
2619
  );
2612
2620
  try {
2613
- s.headers = P.parseDataBind(f);
2621
+ s.headers = R.parseDataBind(f);
2614
2622
  } catch (g) {
2615
2623
  d.error("Haori", `Invalid fetch headers: ${g}`);
2616
2624
  }
2617
2625
  }
2618
2626
  } else {
2619
- const c = l.attrName(
2627
+ const c = u.attrName(
2620
2628
  null,
2621
2629
  "headers",
2622
2630
  !0
@@ -2626,14 +2634,14 @@ ${c}
2626
2634
  c
2627
2635
  );
2628
2636
  try {
2629
- s.headers = P.parseDataBind(f);
2637
+ s.headers = R.parseDataBind(f);
2630
2638
  } catch (g) {
2631
2639
  d.error("Haori", `Invalid fetch headers: ${g}`);
2632
2640
  }
2633
2641
  }
2634
2642
  }
2635
2643
  if (e) {
2636
- const c = l.attrName(
2644
+ const c = u.attrName(
2637
2645
  e,
2638
2646
  "fetch-content-type"
2639
2647
  );
@@ -2653,7 +2661,7 @@ ${c}
2653
2661
  "Content-Type": "application/x-www-form-urlencoded"
2654
2662
  });
2655
2663
  } else {
2656
- const c = l.attrName(
2664
+ const c = u.attrName(
2657
2665
  null,
2658
2666
  "content-type",
2659
2667
  !0
@@ -2675,13 +2683,13 @@ ${c}
2675
2683
  });
2676
2684
  }
2677
2685
  Object.keys(s).length > 0 && (r.fetchOptions = s);
2678
- const a = e ? l.attrName(e, "bind") : l.attrName(null, "bind", !0);
2686
+ const a = e ? u.attrName(e, "bind") : u.attrName(null, "bind", !0);
2679
2687
  if (t.hasAttribute(a)) {
2680
2688
  const c = t.getRawAttribute(a);
2681
2689
  if (c) {
2682
2690
  const f = document.body.querySelectorAll(c);
2683
2691
  f.length > 0 ? (r.bindFragments = [], f.forEach((g) => {
2684
- const A = T.get(g);
2692
+ const A = w.get(g);
2685
2693
  A && r.bindFragments.push(A);
2686
2694
  })) : d.error(
2687
2695
  "Haori",
@@ -2689,11 +2697,11 @@ ${c}
2689
2697
  );
2690
2698
  }
2691
2699
  }
2692
- const o = l.attrName(e, "bind-arg"), h = l.attrName(
2700
+ const o = u.attrName(e, "bind-arg"), h = u.attrName(
2693
2701
  null,
2694
2702
  "arg",
2695
2703
  !0
2696
- ), m = l.attrName(
2704
+ ), m = u.attrName(
2697
2705
  null,
2698
2706
  "bind-arg",
2699
2707
  !0
@@ -2701,17 +2709,17 @@ ${c}
2701
2709
  e ? t.hasAttribute(o) && (r.bindArg = t.getRawAttribute(o)) : t.hasAttribute(h) ? r.bindArg = t.getRawAttribute(
2702
2710
  h
2703
2711
  ) : t.hasAttribute(m) && (r.bindArg = t.getRawAttribute(m));
2704
- const b = e ? l.attrName(e, "bind-params") : l.attrName(null, "bind-params", !0);
2712
+ const b = e ? u.attrName(e, "bind-params") : u.attrName(null, "bind-params", !0);
2705
2713
  if (t.hasAttribute(b)) {
2706
2714
  const c = t.getRawAttribute(b);
2707
2715
  r.bindParams = c.split("&").map((f) => f.trim());
2708
2716
  }
2709
- const E = e ? l.attrName(e, "bind-append") : l.attrName(null, "bind-append", !0);
2717
+ const E = e ? u.attrName(e, "bind-append") : u.attrName(null, "bind-append", !0);
2710
2718
  if (t.hasAttribute(E)) {
2711
2719
  const c = t.getRawAttribute(E);
2712
2720
  r.bindAppendParams = c.split("&").map((f) => f.trim()).filter(Boolean);
2713
2721
  }
2714
- const S = e ? l.attrName(e, "copy-params") : null;
2722
+ const S = e ? u.attrName(e, "copy-params") : null;
2715
2723
  if (S && t.hasAttribute(S)) {
2716
2724
  const c = t.getRawAttribute(
2717
2725
  S
@@ -2719,30 +2727,30 @@ ${c}
2719
2727
  r.copyParams = c.split("&").map((f) => f.trim()).filter(Boolean);
2720
2728
  }
2721
2729
  if (e) {
2722
- if (t.hasAttribute(l.attrName(e, "adjust"))) {
2730
+ if (t.hasAttribute(u.attrName(e, "adjust"))) {
2723
2731
  const f = t.getRawAttribute(
2724
- l.attrName(e, "adjust")
2732
+ u.attrName(e, "adjust")
2725
2733
  );
2726
2734
  if (f) {
2727
2735
  const g = document.body.querySelectorAll(f);
2728
2736
  g.length > 0 ? (r.adjustFragments = [], g.forEach((A) => {
2729
- const v = T.get(A);
2737
+ const v = w.get(A);
2730
2738
  v && r.adjustFragments.push(v);
2731
2739
  })) : d.error(
2732
2740
  "Haori",
2733
- `Adjust element not found: ${f} (${l.attrName(e, "adjust")})`
2741
+ `Adjust element not found: ${f} (${u.attrName(e, "adjust")})`
2734
2742
  );
2735
2743
  }
2736
- if (t.hasAttribute(l.attrName(e, "adjust-value"))) {
2744
+ if (t.hasAttribute(u.attrName(e, "adjust-value"))) {
2737
2745
  const g = t.getRawAttribute(
2738
- l.attrName(e, "adjust-value")
2746
+ u.attrName(e, "adjust-value")
2739
2747
  ), A = Number(g);
2740
2748
  isNaN(A) || (r.adjustValue = A);
2741
2749
  }
2742
2750
  }
2743
- if (t.hasAttribute(l.attrName(e, "row-add")) && (r.rowAdd = !0), t.hasAttribute(l.attrName(e, "row-remove")) && (r.rowRemove = !0), t.hasAttribute(l.attrName(e, "row-prev")) && (r.rowMovePrev = !0), t.hasAttribute(l.attrName(e, "row-next")) && (r.rowMoveNext = !0), t.hasAttribute(`${u.prefix}${e}-after-run`)) {
2751
+ if (t.hasAttribute(u.attrName(e, "row-add")) && (r.rowAdd = !0), t.hasAttribute(u.attrName(e, "row-remove")) && (r.rowRemove = !0), t.hasAttribute(u.attrName(e, "row-prev")) && (r.rowMovePrev = !0), t.hasAttribute(u.attrName(e, "row-next")) && (r.rowMoveNext = !0), t.hasAttribute(`${l.prefix}${e}-after-run`)) {
2744
2752
  const f = t.getRawAttribute(
2745
- `${u.prefix}${e}-after-run`
2753
+ `${l.prefix}${e}-after-run`
2746
2754
  );
2747
2755
  try {
2748
2756
  r.afterCallback = new Function(
@@ -2756,38 +2764,38 @@ ${f}
2756
2764
  d.error("Haori", `Invalid after script: ${g}`);
2757
2765
  }
2758
2766
  }
2759
- if (t.hasAttribute(l.attrName(e, "dialog")) && (r.dialogMessage = t.getAttribute(
2760
- l.attrName(e, "dialog")
2767
+ if (t.hasAttribute(u.attrName(e, "dialog")) && (r.dialogMessage = t.getAttribute(
2768
+ u.attrName(e, "dialog")
2761
2769
  ).replace(/\\n/g, `
2762
- `)), t.hasAttribute(l.attrName(e, "toast"))) {
2770
+ `)), t.hasAttribute(u.attrName(e, "toast"))) {
2763
2771
  r.toastMessage = t.getAttribute(
2764
- l.attrName(e, "toast")
2772
+ u.attrName(e, "toast")
2765
2773
  );
2766
2774
  const f = t.getRawAttribute(
2767
- l.attrName(e, "toast-level")
2775
+ u.attrName(e, "toast-level")
2768
2776
  ), A = ["info", "warning", "error", "success"].includes(f);
2769
2777
  r.toastLevel = A ? f : null;
2770
2778
  }
2771
- if (t.hasAttribute(l.attrName(e, "redirect")) && (r.redirectUrl = t.getAttribute(
2772
- l.attrName(e, "redirect")
2773
- )), t.hasAttribute(l.attrName(e, "scroll-error")) && (r.scrollOnError = !0), t.hasAttribute(l.attrName(e, "scroll")) && (r.scrollTarget = t.getAttribute(
2774
- l.attrName(e, "scroll")
2775
- )), t.hasAttribute(l.attrName(e, "history")) && (r.historyUrl = t.getAttribute(
2776
- l.attrName(e, "history")
2777
- )), t.hasAttribute(l.attrName(e, "history-data")) && (r.historyData = l.resolveDataAttribute(
2779
+ if (t.hasAttribute(u.attrName(e, "redirect")) && (r.redirectUrl = t.getAttribute(
2780
+ u.attrName(e, "redirect")
2781
+ )), t.hasAttribute(u.attrName(e, "scroll-error")) && (r.scrollOnError = !0), t.hasAttribute(u.attrName(e, "scroll")) && (r.scrollTarget = t.getAttribute(
2782
+ u.attrName(e, "scroll")
2783
+ )), t.hasAttribute(u.attrName(e, "history")) && (r.historyUrl = t.getAttribute(
2784
+ u.attrName(e, "history")
2785
+ )), t.hasAttribute(u.attrName(e, "history-data")) && (r.historyData = u.resolveDataAttribute(
2778
2786
  t,
2779
- l.attrName(e, "history-data")
2780
- )), t.hasAttribute(l.attrName(e, "history-form"))) {
2787
+ u.attrName(e, "history-data")
2788
+ )), t.hasAttribute(u.attrName(e, "history-form"))) {
2781
2789
  const f = t.getRawAttribute(
2782
- l.attrName(e, "history-form")
2790
+ u.attrName(e, "history-form")
2783
2791
  );
2784
2792
  if (f) {
2785
2793
  const g = document.body.querySelector(f);
2786
2794
  g !== null ? r.historyFormFragment = y.getFormFragment(
2787
- T.get(g)
2795
+ w.get(g)
2788
2796
  ) : d.error(
2789
2797
  "Haori",
2790
- `Form element not found: ${f} (${l.attrName(e, "history-form")})`
2798
+ `Form element not found: ${f} (${u.attrName(e, "history-form")})`
2791
2799
  );
2792
2800
  } else
2793
2801
  r.historyFormFragment = y.getFormFragment(t);
@@ -2800,12 +2808,12 @@ ${f}
2800
2808
  "open",
2801
2809
  "close"
2802
2810
  ].forEach((f) => {
2803
- const g = l.attrName(e, f);
2811
+ const g = u.attrName(e, f);
2804
2812
  if (!t.hasAttribute(g))
2805
2813
  return;
2806
2814
  const A = t.getRawAttribute(g), v = [];
2807
2815
  if (A ? (document.body.querySelectorAll(A).forEach((J) => {
2808
- const tt = T.get(J);
2816
+ const tt = w.get(J);
2809
2817
  tt && v.push(tt);
2810
2818
  }), v.length === 0 && d.error("Haori", `Element not found: ${A} (${g})`)) : v.push(t), v.length > 0)
2811
2819
  switch (f) {
@@ -2830,20 +2838,20 @@ ${f}
2830
2838
  }
2831
2839
  });
2832
2840
  }
2833
- if (!e && (t.hasAttribute(l.attrName(null, "data", !0)) && (r.data = l.resolveDataAttribute(
2841
+ if (!e && (t.hasAttribute(u.attrName(null, "data", !0)) && (r.data = u.resolveDataAttribute(
2834
2842
  t,
2835
- l.attrName(null, "data", !0)
2836
- )), t.hasAttribute(l.attrName(null, "form", !0)))) {
2843
+ u.attrName(null, "data", !0)
2844
+ )), t.hasAttribute(u.attrName(null, "form", !0)))) {
2837
2845
  const c = t.getRawAttribute(
2838
- l.attrName(null, "form", !0)
2846
+ u.attrName(null, "form", !0)
2839
2847
  );
2840
2848
  if (c) {
2841
2849
  const f = document.body.querySelector(c);
2842
2850
  f !== null ? r.formFragment = y.getFormFragment(
2843
- T.get(f)
2851
+ w.get(f)
2844
2852
  ) : d.error(
2845
2853
  "Haori",
2846
- `Form element not found: ${c} (${l.attrName(null, "fetch-form", !0)})`
2854
+ `Form element not found: ${c} (${u.attrName(null, "fetch-form", !0)})`
2847
2855
  );
2848
2856
  } else
2849
2857
  r.formFragment = y.getFormFragment(t);
@@ -2869,7 +2877,7 @@ ${f}
2869
2877
  * @param arg2 イベント名
2870
2878
  */
2871
2879
  constructor(t, e = null) {
2872
- l.isElementFragment(t) ? this.options = l.buildOptions(t, e) : this.options = t;
2880
+ u.isElementFragment(t) ? this.options = u.buildOptions(t, e) : this.options = t;
2873
2881
  }
2874
2882
  /**
2875
2883
  * 一連の処理を実行します。オプションが空の場合は即座にresolveされます。
@@ -2918,7 +2926,7 @@ ${f}
2918
2926
  if (e) {
2919
2927
  const o = { ...r || {} }, h = new Headers(
2920
2928
  o.headers || void 0
2921
- ), m = (o.method || "GET").toUpperCase(), b = u.runtime === "demo" && !ut(m), E = b ? "GET" : m;
2929
+ ), m = (o.method || "GET").toUpperCase(), b = l.runtime === "demo" && !ut(m), E = b ? "GET" : m;
2922
2930
  if (o.method = E, E === "GET" || E === "HEAD" || E === "OPTIONS")
2923
2931
  n && (e = ht(e, i));
2924
2932
  else if (n) {
@@ -2940,7 +2948,7 @@ ${f}
2940
2948
  o.headers = h;
2941
2949
  let S;
2942
2950
  if (b && (S = e && new URL(e, window.location.href).search || void 0, h.delete("Content-Type"), d.info("Haori demo fetch normalization", {
2943
- runtime: u.runtime,
2951
+ runtime: l.runtime,
2944
2952
  requestedMethod: m,
2945
2953
  effectiveMethod: E,
2946
2954
  transportMode: "query-get",
@@ -2949,13 +2957,13 @@ ${f}
2949
2957
  queryString: S
2950
2958
  })), this.options.targetFragment && e) {
2951
2959
  const c = performance.now(), f = {
2952
- runtime: u.runtime,
2960
+ runtime: l.runtime,
2953
2961
  requestedMethod: m,
2954
2962
  effectiveMethod: E,
2955
2963
  transportMode: b ? "query-get" : "http",
2956
2964
  ...b ? { queryString: S } : {}
2957
2965
  };
2958
- return w.fetchStart(
2966
+ return T.fetchStart(
2959
2967
  this.options.targetFragment.getTarget(),
2960
2968
  e,
2961
2969
  o,
@@ -2966,7 +2974,7 @@ ${f}
2966
2974
  e || void 0,
2967
2975
  c
2968
2976
  )).catch((g) => {
2969
- throw e && w.fetchError(
2977
+ throw e && T.fetchError(
2970
2978
  this.options.targetFragment.getTarget(),
2971
2979
  e,
2972
2980
  g
@@ -2978,11 +2986,11 @@ ${f}
2978
2986
  if ((!this.options.bindFragments || this.options.bindFragments.length === 0) && this.options.formFragment && n) {
2979
2987
  const o = this.options.formFragment, h = o.getTarget();
2980
2988
  h.setAttribute(
2981
- `${u.prefix}bind`,
2989
+ `${l.prefix}bind`,
2982
2990
  JSON.stringify(i)
2983
2991
  );
2984
2992
  const m = o.getBindingData();
2985
- Object.assign(m, i), await P.setBindingData(h, m);
2993
+ Object.assign(m, i), await R.setBindingData(h, m);
2986
2994
  }
2987
2995
  const s = n ? i : {}, a = new Response(JSON.stringify(s), {
2988
2996
  headers: { "Content-Type": "application/json" }
@@ -2995,14 +3003,14 @@ ${f}
2995
3003
  async handleFetchResult(t, e, r) {
2996
3004
  const i = W();
2997
3005
  if (!t.ok)
2998
- return this.options.targetFragment && e && w.fetchError(
3006
+ return this.options.targetFragment && e && T.fetchError(
2999
3007
  this.options.targetFragment.getTarget(),
3000
3008
  e,
3001
3009
  new Error(`${t.status} ${t.statusText}`),
3002
3010
  t.status,
3003
3011
  r
3004
3012
  ), await this.handleFetchError(t), !1;
3005
- if (this.options.targetFragment && e && r && w.fetchEnd(
3013
+ if (this.options.targetFragment && e && r && T.fetchEnd(
3006
3014
  this.options.targetFragment.getTarget(),
3007
3015
  e,
3008
3016
  t.status,
@@ -3021,7 +3029,7 @@ ${f}
3021
3029
  ), await this.copy();
3022
3030
  const s = [];
3023
3031
  return this.options.refetchFragments && this.options.refetchFragments.length > 0 && this.options.refetchFragments.forEach((a) => {
3024
- s.push(new l(a, null).run());
3032
+ s.push(new u(a, null).run());
3025
3033
  }), this.options.clickFragments && this.options.clickFragments.length > 0 && this.options.clickFragments.forEach((a) => {
3026
3034
  const o = a.getTarget();
3027
3035
  typeof o.click == "function" ? o.click() : o.dispatchEvent(
@@ -3196,7 +3204,7 @@ ${f}
3196
3204
  );
3197
3205
  } else
3198
3206
  s[a] = r;
3199
- i.push(P.setBindingData(n.getTarget(), s));
3207
+ i.push(R.setBindingData(n.getTarget(), s));
3200
3208
  });
3201
3209
  else {
3202
3210
  if (typeof r == "string")
@@ -3209,7 +3217,7 @@ ${f}
3209
3217
  r
3210
3218
  );
3211
3219
  i.push(
3212
- P.setBindingData(
3220
+ R.setBindingData(
3213
3221
  n.getTarget(),
3214
3222
  s
3215
3223
  )
@@ -3244,7 +3252,7 @@ ${f}
3244
3252
  ...i.getBindingData(),
3245
3253
  ...e
3246
3254
  };
3247
- return P.setBindingData(i.getTarget(), n);
3255
+ return R.setBindingData(i.getTarget(), n);
3248
3256
  });
3249
3257
  return Promise.all(r).then(() => {
3250
3258
  });
@@ -3291,7 +3299,7 @@ ${f}
3291
3299
  if (!this.options.targetFragment)
3292
3300
  return d.error("Haori", "Target fragment is not specified for row operation."), null;
3293
3301
  const t = this.options.targetFragment.closestByAttribute(
3294
- `${u.prefix}row`
3302
+ `${l.prefix}row`
3295
3303
  );
3296
3304
  return t || (d.error("Haori", "Row fragment not found."), null);
3297
3305
  }
@@ -3309,7 +3317,7 @@ ${f}
3309
3317
  const e = [], r = t.clone();
3310
3318
  return e.push(
3311
3319
  t.getParent().insertAfter(r, t)
3312
- ), e.push(P.evaluateAll(r)), e.push(y.reset(r)), Promise.all(e).then(() => {
3320
+ ), e.push(R.evaluateAll(r)), e.push(y.reset(r)), Promise.all(e).then(() => {
3313
3321
  });
3314
3322
  }
3315
3323
  /**
@@ -3324,7 +3332,7 @@ ${f}
3324
3332
  if (!t)
3325
3333
  return Promise.reject(new Error("Row fragment not found."));
3326
3334
  const e = t.getParent();
3327
- return e && e.getChildElementFragments().filter((i) => !i.hasAttribute(`${u.prefix}each-before`) && !i.hasAttribute(`${u.prefix}each-after`)).length <= 1 ? Promise.resolve() : t.remove();
3335
+ return e && e.getChildElementFragments().filter((i) => !i.hasAttribute(`${l.prefix}each-before`) && !i.hasAttribute(`${l.prefix}each-after`)).length <= 1 ? Promise.resolve() : t.remove();
3328
3336
  }
3329
3337
  /**
3330
3338
  * 前の行へ移動します。
@@ -3361,8 +3369,8 @@ ${f}
3361
3369
  return r ? r.insertAfter(t, e) : Promise.resolve();
3362
3370
  }
3363
3371
  };
3364
- l.DATA_PLACEHOLDER_REGEX = /\{\{\{([\s\S]+?)\}\}\}|\{\{([\s\S]+?)\}\}/g, l.SINGLE_PLACEHOLDER_REGEX = /^(\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\})$/;
3365
- let V = l;
3372
+ u.DATA_PLACEHOLDER_REGEX = /\{\{\{([\s\S]+?)\}\}\}|\{\{([\s\S]+?)\}\}/g, u.SINGLE_PLACEHOLDER_REGEX = /^(\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\})$/;
3373
+ let V = u;
3366
3374
  class ft {
3367
3375
  /**
3368
3376
  * URLのクエリパラメータを取得します。
@@ -3423,7 +3431,7 @@ const p = class p {
3423
3431
  */
3424
3432
  static isDeferredAttributeName(t) {
3425
3433
  return p.DEFERRED_ATTRIBUTE_SUFFIXES.some(
3426
- (e) => t === `${u.prefix}${e}`
3434
+ (e) => t === `${l.prefix}${e}`
3427
3435
  );
3428
3436
  }
3429
3437
  /**
@@ -3434,7 +3442,7 @@ const p = class p {
3434
3442
  */
3435
3443
  static isEvaluateAllExcludedAttributeName(t) {
3436
3444
  return p.EVALUATE_ALL_EXCLUDED_ATTRIBUTE_SUFFIXES.some(
3437
- (e) => t === `${u.prefix}${e}`
3445
+ (e) => t === `${l.prefix}${e}`
3438
3446
  );
3439
3447
  }
3440
3448
  /**
@@ -3454,7 +3462,7 @@ const p = class p {
3454
3462
  * @returns 実際の属性名。data-attr-* でない場合は null
3455
3463
  */
3456
3464
  static getAliasedAttributeName(t) {
3457
- const e = `${u.prefix}${p.ATTRIBUTE_ALIAS_SUFFIX}`;
3465
+ const e = `${l.prefix}${p.ATTRIBUTE_ALIAS_SUFFIX}`;
3458
3466
  return !t.startsWith(e) || t.length <= e.length ? null : t.slice(e.length);
3459
3467
  }
3460
3468
  /**
@@ -3465,9 +3473,9 @@ const p = class p {
3465
3473
  * @returns data-attr-* の内部反映なら true
3466
3474
  */
3467
3475
  static isAliasedAttributeReflection(t, e) {
3468
- const r = T.get(t);
3476
+ const r = w.get(t);
3469
3477
  return r instanceof x ? r.hasAttribute(
3470
- `${u.prefix}${p.ATTRIBUTE_ALIAS_SUFFIX}${e}`
3478
+ `${l.prefix}${p.ATTRIBUTE_ALIAS_SUFFIX}${e}`
3471
3479
  ) : !1;
3472
3480
  }
3473
3481
  /**
@@ -3495,14 +3503,14 @@ const p = class p {
3495
3503
  * @returns Promise (スキャンが完了したときに解決される)
3496
3504
  */
3497
3505
  static scan(t) {
3498
- const e = T.get(t);
3506
+ const e = w.get(t);
3499
3507
  if (!e)
3500
3508
  return Promise.resolve();
3501
- t.parentNode && (T.get(t.parentNode)?.isMounted() || document.body.contains(t) ? e.setMounted(!0) : e.setMounted(!1));
3509
+ t.parentNode && (w.get(t.parentNode)?.isMounted() || document.body.contains(t) ? e.setMounted(!0) : e.setMounted(!1));
3502
3510
  let r = Promise.resolve();
3503
3511
  const i = /* @__PURE__ */ new Set();
3504
3512
  for (const n of p.PRIORITY_ATTRIBUTE_SUFFIXES) {
3505
- const s = u.prefix + n;
3513
+ const s = l.prefix + n;
3506
3514
  e.hasAttribute(s) && (r = r.then(
3507
3515
  () => p.setAttribute(
3508
3516
  e.getTarget(),
@@ -3520,7 +3528,7 @@ const p = class p {
3520
3528
  ));
3521
3529
  }
3522
3530
  for (const n of p.DEFERRED_ATTRIBUTE_SUFFIXES) {
3523
- const s = u.prefix + n;
3531
+ const s = l.prefix + n;
3524
3532
  e.hasAttribute(s) && (r = r.then(
3525
3533
  () => p.setAttribute(
3526
3534
  e.getTarget(),
@@ -3532,7 +3540,7 @@ const p = class p {
3532
3540
  return r.then(() => {
3533
3541
  const n = [];
3534
3542
  return e.getChildren().forEach((s) => {
3535
- s instanceof x ? n.push(p.scan(s.getTarget())) : s instanceof H && n.push(p.evaluateText(s));
3543
+ s instanceof x ? n.push(p.scan(s.getTarget())) : s instanceof O && n.push(p.evaluateText(s));
3536
3544
  }), Promise.all(n).then(() => {
3537
3545
  });
3538
3546
  }).then(() => {
@@ -3548,47 +3556,47 @@ const p = class p {
3548
3556
  * @returns Promise (DOM操作が完了したときに解決される)
3549
3557
  */
3550
3558
  static setAttribute(t, e, r) {
3551
- const i = T.get(t), n = p.getAliasedAttributeName(e);
3559
+ const i = w.get(t), n = p.getAliasedAttributeName(e);
3552
3560
  if (n !== null)
3553
3561
  return r === null ? i.removeAliasedAttribute(e, n) : i.setAliasedAttribute(e, n, r);
3554
3562
  const s = [];
3555
3563
  switch (e) {
3556
- case `${u.prefix}bind`: {
3564
+ case `${l.prefix}bind`: {
3557
3565
  r === null ? (i.clearBindingDataCache(), i.setBindingData({})) : i.setBindingData(p.parseDataBind(r));
3558
3566
  break;
3559
3567
  }
3560
- case `${u.prefix}if`:
3568
+ case `${l.prefix}if`:
3561
3569
  s.push(p.evaluateIf(i));
3562
3570
  break;
3563
- case `${u.prefix}each`:
3571
+ case `${l.prefix}each`:
3564
3572
  s.push(p.evaluateEach(i));
3565
3573
  break;
3566
- case `${u.prefix}fetch`:
3574
+ case `${l.prefix}fetch`:
3567
3575
  s.push(
3568
3576
  new V(i, null).run().then(() => {
3569
3577
  })
3570
3578
  );
3571
3579
  break;
3572
- case `${u.prefix}import`: {
3580
+ case `${l.prefix}import`: {
3573
3581
  if (typeof r == "string") {
3574
3582
  const a = i.getTarget(), o = performance.now();
3575
- w.importStart(a, r), s.push(
3583
+ a.setAttribute(`${l.prefix}importing`, ""), T.importStart(a, r), s.push(
3576
3584
  dt.load(r).then((h) => {
3577
3585
  const m = new TextEncoder().encode(h).length;
3578
- return R.enqueue(() => {
3586
+ return P.enqueue(() => {
3579
3587
  a.innerHTML = h;
3580
3588
  }).then(() => {
3581
- w.importEnd(a, r, m, o);
3589
+ a.removeAttribute(`${l.prefix}importing`), T.importEnd(a, r, m, o);
3582
3590
  });
3583
3591
  }).catch((h) => {
3584
- w.importError(a, r, h), d.error("[Haori]", "Failed to import HTML:", r, h);
3592
+ a.removeAttribute(`${l.prefix}importing`), T.importError(a, r, h), d.error("[Haori]", "Failed to import HTML:", r, h);
3585
3593
  })
3586
3594
  );
3587
3595
  }
3588
3596
  break;
3589
3597
  }
3590
- case `${u.prefix}url-param`: {
3591
- const a = i.getAttribute(`${u.prefix}url-arg`), o = ft.readParams();
3598
+ case `${l.prefix}url-param`: {
3599
+ const a = i.getAttribute(`${l.prefix}url-arg`), o = ft.readParams();
3592
3600
  if (a === null)
3593
3601
  s.push(p.setBindingData(t, o));
3594
3602
  else {
@@ -3610,17 +3618,17 @@ const p = class p {
3610
3618
  * @returns Promise (DOM操作が完了したときに解決される)
3611
3619
  */
3612
3620
  static setBindingData(t, e) {
3613
- const r = T.get(t), i = r.getRawBindingData();
3621
+ const r = w.get(t), i = r.getRawBindingData();
3614
3622
  r.setBindingData(e);
3615
3623
  let n = r.setAttribute(
3616
- `${u.prefix}bind`,
3624
+ `${l.prefix}bind`,
3617
3625
  JSON.stringify(e)
3618
3626
  );
3619
3627
  if (t.tagName === "FORM") {
3620
- const s = r.getAttribute(`${u.prefix}form-arg`), a = s && e[String(s)] && typeof e[String(s)] == "object" && !Array.isArray(e[String(s)]) ? e[String(s)] : s ? {} : e;
3628
+ const s = r.getAttribute(`${l.prefix}form-arg`), a = s && e[String(s)] && typeof e[String(s)] == "object" && !Array.isArray(e[String(s)]) ? e[String(s)] : s ? {} : e;
3621
3629
  n = n.then(() => y.syncValues(r, a));
3622
3630
  }
3623
- return n = n.then(() => p.evaluateAll(r)), w.bindChange(t, i, e, "manual"), n.then(() => {
3631
+ return n = n.then(() => p.evaluateAll(r)), T.bindChange(t, i, e, "manual"), n.then(() => {
3624
3632
  });
3625
3633
  }
3626
3634
  /**
@@ -3650,11 +3658,11 @@ const p = class p {
3650
3658
  * @param node 追加するノード
3651
3659
  */
3652
3660
  static addNode(t, e) {
3653
- const r = T.get(t);
3661
+ const r = w.get(t);
3654
3662
  if (r.isSkipMutationNodes())
3655
3663
  return;
3656
- const i = T.get(e.nextSibling), n = T.get(e);
3657
- n && (r.insertBefore(n, i), n instanceof x ? p.scan(n.getTarget()) : n instanceof H && p.evaluateText(n));
3664
+ const i = w.get(e.nextSibling), n = w.get(e);
3665
+ n && (r.insertBefore(n, i), n instanceof x ? p.scan(n.getTarget()) : n instanceof O && p.evaluateText(n));
3658
3666
  }
3659
3667
  /**
3660
3668
  * ノードを親要素から削除します。
@@ -3662,7 +3670,7 @@ const p = class p {
3662
3670
  * @param node 削除するノード
3663
3671
  */
3664
3672
  static removeNode(t) {
3665
- const e = T.get(t);
3673
+ const e = w.get(t);
3666
3674
  if (e) {
3667
3675
  const r = e.getParent();
3668
3676
  if (r && r.isSkipMutationNodes())
@@ -3677,7 +3685,7 @@ const p = class p {
3677
3685
  * @param text 新しいテキスト
3678
3686
  */
3679
3687
  static changeText(t, e) {
3680
- const r = T.get(t);
3688
+ const r = w.get(t);
3681
3689
  r && r.setContent(e);
3682
3690
  }
3683
3691
  /**
@@ -3689,14 +3697,14 @@ const p = class p {
3689
3697
  * @returns Promise (DOM操作が完了したときに解決される)
3690
3698
  */
3691
3699
  static changeValue(t, e) {
3692
- const r = T.get(t);
3700
+ const r = w.get(t);
3693
3701
  if (r.getValue() === e)
3694
3702
  return Promise.resolve();
3695
3703
  const i = [];
3696
3704
  i.push(r.setValue(e));
3697
3705
  const n = p.getFormFragment(r);
3698
3706
  if (n) {
3699
- const s = y.getValues(n), a = n.getAttribute(`${u.prefix}form-arg`);
3707
+ const s = y.getValues(n), a = n.getAttribute(`${l.prefix}form-arg`);
3700
3708
  let o;
3701
3709
  a ? (o = n.getRawBindingData(), o || (o = {}), o[String(a)] = s) : o = s, i.push(p.setBindingData(n.getTarget(), o));
3702
3710
  }
@@ -3723,14 +3731,14 @@ const p = class p {
3723
3731
  */
3724
3732
  static evaluateAll(t) {
3725
3733
  const e = [];
3726
- return e.push(p.reevaluateInterpolatedAttributes(t)), t.hasAttribute(`${u.prefix}if`) && e.push(p.evaluateIf(t)), t.hasAttribute(`${u.prefix}each`) ? Promise.all(e).then(() => p.evaluateEach(t)).then(() => {
3734
+ return e.push(p.reevaluateInterpolatedAttributes(t)), t.hasAttribute(`${l.prefix}if`) && e.push(p.evaluateIf(t)), t.hasAttribute(`${l.prefix}each`) ? Promise.all(e).then(() => p.evaluateEach(t)).then(() => {
3727
3735
  const r = [];
3728
3736
  return t.getChildren().forEach((i) => {
3729
- i instanceof x ? r.push(p.evaluateAll(i)) : i instanceof H && r.push(p.evaluateText(i));
3737
+ i instanceof x ? r.push(p.evaluateAll(i)) : i instanceof O && r.push(p.evaluateText(i));
3730
3738
  }), Promise.all(r).then(() => {
3731
3739
  });
3732
3740
  }) : (t.getChildren().forEach((r) => {
3733
- r instanceof x ? e.push(p.evaluateAll(r)) : r instanceof H && e.push(p.evaluateText(r));
3741
+ r instanceof x ? e.push(p.evaluateAll(r)) : r instanceof O && e.push(p.evaluateText(r));
3734
3742
  }), Promise.all(e).then(() => {
3735
3743
  }));
3736
3744
  }
@@ -3751,16 +3759,25 @@ const p = class p {
3751
3759
  * @return Promise (DOM操作が完了したときに解決される)
3752
3760
  */
3753
3761
  static evaluateIf(t) {
3754
- const e = [], r = t.getAttribute(`${u.prefix}if`);
3755
- return r === !1 || r === void 0 || r === null || Number.isNaN(r) ? t.isVisible() && e.push(
3756
- t.hide().then(() => {
3757
- w.hide(t.getTarget());
3758
- })
3759
- ) : t.isVisible() || (e.push(
3760
- t.show().then(() => {
3761
- w.show(t.getTarget());
3762
- })
3763
- ), e.push(p.evaluateAll(t))), Promise.all(e).then(() => {
3762
+ const e = [], r = t.getAttribute(`${l.prefix}if`);
3763
+ if (r === !1 || r === void 0 || r === null || Number.isNaN(r))
3764
+ e.push(
3765
+ t.hide().then(() => {
3766
+ T.hide(t.getTarget());
3767
+ })
3768
+ );
3769
+ else {
3770
+ const i = [];
3771
+ t.getChildren().forEach((n) => {
3772
+ n instanceof x ? i.push(p.evaluateAll(n)) : n instanceof O && i.push(p.evaluateText(n));
3773
+ }), e.push(
3774
+ t.show().then(() => {
3775
+ T.show(t.getTarget());
3776
+ })
3777
+ ), e.push(Promise.all(i).then(() => {
3778
+ }));
3779
+ }
3780
+ return Promise.all(e).then(() => {
3764
3781
  });
3765
3782
  }
3766
3783
  /**
@@ -3777,17 +3794,17 @@ const p = class p {
3777
3794
  let i = !1;
3778
3795
  t.getChildren().forEach((s) => {
3779
3796
  if (!i && s instanceof x) {
3780
- if (s.hasAttribute(`${u.prefix}each-before`) || s.hasAttribute(`${u.prefix}each-after`))
3797
+ if (s.hasAttribute(`${l.prefix}each-before`) || s.hasAttribute(`${l.prefix}each-after`))
3781
3798
  return;
3782
3799
  e = s.clone(), t.setTemplate(e), i = !0, t.removeChild(s);
3783
3800
  const a = s.getTarget();
3784
3801
  a.parentNode && a.parentNode.removeChild(a), s.setMounted(!1);
3785
3802
  }
3786
3803
  });
3787
- const n = t.getAttribute(`${u.prefix}each`);
3804
+ const n = t.getAttribute(`${l.prefix}each`);
3788
3805
  return Array.isArray(n) ? this.updateDiff(t, n) : (d.error("[Haori]", "Invalid each attribute:", n), Promise.reject(new Error("Invalid each attribute.")));
3789
3806
  }
3790
- const r = t.getAttribute(`${u.prefix}each`);
3807
+ const r = t.getAttribute(`${l.prefix}each`);
3791
3808
  return Array.isArray(r) ? this.updateDiff(t, r) : (d.error("[Haori]", "Invalid each attribute:", r), Promise.reject(new Error("Invalid each attribute.")));
3792
3809
  }
3793
3810
  /**
@@ -3800,9 +3817,9 @@ const p = class p {
3800
3817
  const r = t.getTemplate();
3801
3818
  if (r === null)
3802
3819
  return d.error("[Haori]", "Template is not set for each element."), Promise.resolve();
3803
- let i = t.getAttribute(`${u.prefix}each-index`);
3820
+ let i = t.getAttribute(`${l.prefix}each-index`);
3804
3821
  i && (i = String(i));
3805
- const n = t.getAttribute(`${u.prefix}each-key`), s = t.getAttribute(`${u.prefix}each-arg`), a = /* @__PURE__ */ new Map(), o = [];
3822
+ const n = t.getAttribute(`${l.prefix}each-key`), s = t.getAttribute(`${l.prefix}each-arg`), a = /* @__PURE__ */ new Map(), o = [];
3806
3823
  e.forEach((c, f) => {
3807
3824
  const g = p.createListKey(
3808
3825
  c,
@@ -3813,10 +3830,10 @@ const p = class p {
3813
3830
  });
3814
3831
  const h = [];
3815
3832
  let m = t.getChildren().filter((c) => c instanceof x).filter(
3816
- (c) => !c.hasAttribute(`${u.prefix}each-before`) && !c.hasAttribute(`${u.prefix}each-after`)
3833
+ (c) => !c.hasAttribute(`${l.prefix}each-before`) && !c.hasAttribute(`${l.prefix}each-after`)
3817
3834
  );
3818
3835
  m = m.filter((c) => o.indexOf(String(c.getListKey())) === -1 ? (h.push(c.remove()), !1) : !0);
3819
- const b = m.map((c) => c.getListKey()), E = t.getChildren().filter((c) => c instanceof x).filter((c) => c.hasAttribute(`${u.prefix}each-before`)).length;
3836
+ const b = m.map((c) => c.getListKey()), E = t.getChildren().filter((c) => c instanceof x).filter((c) => c.hasAttribute(`${l.prefix}each-before`)).length;
3820
3837
  let S = Promise.resolve();
3821
3838
  return o.forEach((c, f) => {
3822
3839
  const g = b.indexOf(c), { item: A, itemIndex: v } = a.get(c);
@@ -3830,7 +3847,7 @@ const p = class p {
3830
3847
  v,
3831
3848
  s ? String(s) : null,
3832
3849
  c
3833
- ).then(() => p.evaluateAll(k))
3850
+ ).then(() => p.evaluateAll(k)).then(() => p.scheduleEvaluateAll(k))
3834
3851
  );
3835
3852
  else {
3836
3853
  k = r.clone();
@@ -3847,7 +3864,7 @@ const p = class p {
3847
3864
  () => t.insertBefore(
3848
3865
  k,
3849
3866
  t.getChildren()[J] || null
3850
- ).then(() => p.evaluateAll(k))
3867
+ ).then(() => p.evaluateAll(k)).then(() => p.scheduleEvaluateAll(k))
3851
3868
  )
3852
3869
  );
3853
3870
  }
@@ -3861,7 +3878,7 @@ const p = class p {
3861
3878
  ), A = f.filter(
3862
3879
  (v) => !c.includes(v)
3863
3880
  );
3864
- w.eachUpdate(
3881
+ T.eachUpdate(
3865
3882
  t.getTarget(),
3866
3883
  g,
3867
3884
  A,
@@ -3913,9 +3930,19 @@ const p = class p {
3913
3930
  else
3914
3931
  return d.error(
3915
3932
  "[Haori]",
3916
- `Primitive value requires '${u.prefix}each-arg' attribute: ${e}`
3933
+ `Primitive value requires '${l.prefix}each-arg' attribute: ${e}`
3917
3934
  ), Promise.resolve();
3918
- return t.setListKey(s), t.setBindingData(a), t.setAttribute(`${u.prefix}row`, s);
3935
+ return t.setListKey(s), t.setBindingData(a), t.setAttribute(`${l.prefix}row`, s);
3936
+ }
3937
+ /**
3938
+ * フラグメントの再評価を次のイベントループで実行します。
3939
+ *
3940
+ * @param fragment 再評価対象のフラグメント
3941
+ */
3942
+ static scheduleEvaluateAll(t) {
3943
+ setTimeout(() => {
3944
+ p.evaluateAll(t);
3945
+ }, 100);
3919
3946
  }
3920
3947
  };
3921
3948
  p.ATTRIBUTE_ALIAS_SUFFIX = "attr-", p.PRIORITY_ATTRIBUTE_SUFFIXES = ["bind", "if", "each"], p.DEFERRED_ATTRIBUTE_SUFFIXES = ["fetch", "url-param"], p.EVALUATE_ALL_EXCLUDED_ATTRIBUTE_SUFFIXES = [
@@ -3926,7 +3953,7 @@ p.ATTRIBUTE_ALIAS_SUFFIX = "attr-", p.PRIORITY_ATTRIBUTE_SUFFIXES = ["bind", "if
3926
3953
  "import",
3927
3954
  "url-param"
3928
3955
  ], p.ATTRIBUTE_PLACEHOLDER_REGEX = /\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/;
3929
- let P = p;
3956
+ let R = p;
3930
3957
  const Y = class Y {
3931
3958
  /**
3932
3959
  * コンストラクタ。
@@ -3935,7 +3962,7 @@ const Y = class Y {
3935
3962
  */
3936
3963
  constructor(t = document) {
3937
3964
  this.onClick = (e) => this.delegate(e, "click"), this.onChange = (e) => this.delegate(e, "change"), this.onLoadCapture = (e) => this.delegate(e, "load"), this.onWindowLoad = () => {
3938
- const e = document.documentElement, r = T.get(e);
3965
+ const e = document.documentElement, r = w.get(e);
3939
3966
  r && new V(r, "load").run();
3940
3967
  }, this.onPopstate = (e) => {
3941
3968
  const r = e.state;
@@ -3965,7 +3992,7 @@ const Y = class Y {
3965
3992
  const r = this.getElementFromTarget(t.target);
3966
3993
  if (!r)
3967
3994
  return;
3968
- const i = T.get(r);
3995
+ const i = w.get(r);
3969
3996
  i && (e === "change" && i instanceof x && i.syncValue(), new V(i, e).run().catch((n) => {
3970
3997
  d.error("[Haori]", "Procedure execution error:", n);
3971
3998
  }));
@@ -3989,14 +4016,14 @@ const N = class N {
3989
4016
  }));
3990
4017
  }
3991
4018
  static syncElement(t) {
3992
- const e = N.registrations.get(t), r = T.get(t);
4019
+ const e = N.registrations.get(t), r = w.get(t);
3993
4020
  if (!r || !N.shouldObserve(r)) {
3994
4021
  e && (e.observer.disconnect(), N.registrations.delete(t));
3995
4022
  return;
3996
4023
  }
3997
4024
  if (typeof IntersectionObserver > "u")
3998
4025
  return;
3999
- const i = N.resolveRoot(r), n = N.resolveRootMargin(r), s = N.resolveThreshold(r), a = r.hasAttribute(`${u.prefix}intersect-once`);
4026
+ const i = N.resolveRoot(r), n = N.resolveRootMargin(r), s = N.resolveThreshold(r), a = r.hasAttribute(`${l.prefix}intersect-once`);
4000
4027
  if (e && e.observer.root === i && e.observer.rootMargin === n && N.sameThreshold(
4001
4028
  e.observer.thresholds,
4002
4029
  s
@@ -4053,14 +4080,14 @@ const N = class N {
4053
4080
  }
4054
4081
  static shouldObserve(t) {
4055
4082
  return t.getAttributeNames().some((e) => {
4056
- if (!e.startsWith(`${u.prefix}intersect-`))
4083
+ if (!e.startsWith(`${l.prefix}intersect-`))
4057
4084
  return !1;
4058
- const r = e.slice(`${u.prefix}intersect-`.length);
4085
+ const r = e.slice(`${l.prefix}intersect-`.length);
4059
4086
  return !N.CONFIG_KEYS.has(r);
4060
4087
  });
4061
4088
  }
4062
4089
  static resolveRoot(t) {
4063
- const e = `${u.prefix}intersect-root`;
4090
+ const e = `${l.prefix}intersect-root`;
4064
4091
  if (!t.hasAttribute(e))
4065
4092
  return null;
4066
4093
  const r = t.getAttribute(e);
@@ -4070,15 +4097,15 @@ const N = class N {
4070
4097
  return i instanceof HTMLElement ? i : (d.error("[Haori]", `Intersect root element not found: ${r}`), null);
4071
4098
  }
4072
4099
  static resolveRootMargin(t) {
4073
- const e = `${u.prefix}intersect-root-margin`, r = t.getAttribute(e);
4100
+ const e = `${l.prefix}intersect-root-margin`, r = t.getAttribute(e);
4074
4101
  return r === null || r === !1 || r === "" ? "0px" : String(r);
4075
4102
  }
4076
4103
  static resolveThreshold(t) {
4077
- const e = `${u.prefix}intersect-threshold`, r = t.getAttribute(e), i = typeof r == "number" ? r : Number.parseFloat(String(r ?? 0));
4104
+ const e = `${l.prefix}intersect-threshold`, r = t.getAttribute(e), i = typeof r == "number" ? r : Number.parseFloat(String(r ?? 0));
4078
4105
  return Number.isNaN(i) ? 0 : Math.min(1, Math.max(0, i));
4079
4106
  }
4080
4107
  static isDisabled(t) {
4081
- const e = `${u.prefix}intersect-disabled`, r = t.getAttribute(e);
4108
+ const e = `${l.prefix}intersect-disabled`, r = t.getAttribute(e);
4082
4109
  if (r === null || r === !1)
4083
4110
  return !1;
4084
4111
  if (typeof r == "boolean")
@@ -4097,21 +4124,21 @@ N.CONFIG_KEYS = /* @__PURE__ */ new Set([
4097
4124
  "disabled",
4098
4125
  "once"
4099
4126
  ]), N.registrations = /* @__PURE__ */ new Map();
4100
- let $ = N;
4101
- const C = class C {
4127
+ let L = N;
4128
+ const H = class H {
4102
4129
  /**
4103
4130
  * 初期化メソッド。
4104
4131
  * ドキュメントのheadとbodyを監視対象として設定します。
4105
4132
  */
4106
4133
  static async init() {
4107
- if (C._initialized)
4134
+ if (H._initialized)
4108
4135
  return;
4109
- C._initialized = !0;
4136
+ H._initialized = !0;
4110
4137
  const t = await Promise.allSettled([
4111
- P.scan(document.head),
4112
- P.scan(document.body)
4138
+ R.scan(document.head),
4139
+ R.scan(document.body)
4113
4140
  ]), [e, r] = t;
4114
- e.status !== "fulfilled" && d.error("[Haori]", "Failed to build head fragment:", e.reason), r.status !== "fulfilled" && d.error("[Haori]", "Failed to build body fragment:", r.reason), C.observe(document.head), C.observe(document.body), new Q().start(), $.syncTree(document.body);
4141
+ e.status !== "fulfilled" && d.error("[Haori]", "Failed to build head fragment:", e.reason), r.status !== "fulfilled" && d.error("[Haori]", "Failed to build body fragment:", r.reason), H.observe(document.head), H.observe(document.body), new Q().start(), L.syncTree(document.body);
4115
4142
  }
4116
4143
  /**
4117
4144
  * 指定された要素を監視します。
@@ -4131,16 +4158,16 @@ const C = class C {
4131
4158
  i.attributeName
4132
4159
  );
4133
4160
  const n = i.target;
4134
- if (i.attributeName && P.isAliasedAttributeReflection(
4161
+ if (i.attributeName && R.isAliasedAttributeReflection(
4135
4162
  n,
4136
4163
  i.attributeName
4137
4164
  ))
4138
4165
  break;
4139
- P.setAttribute(
4166
+ R.setAttribute(
4140
4167
  n,
4141
4168
  i.attributeName,
4142
4169
  n.getAttribute(i.attributeName)
4143
- ), $.syncElement(n);
4170
+ ), L.syncElement(n);
4144
4171
  break;
4145
4172
  }
4146
4173
  case "childList": {
@@ -4150,9 +4177,9 @@ const C = class C {
4150
4177
  Array.from(i.removedNodes).map((n) => n.nodeName),
4151
4178
  Array.from(i.addedNodes).map((n) => n.nodeName)
4152
4179
  ), Array.from(i.removedNodes).forEach((n) => {
4153
- $.cleanupTree(n), P.removeNode(n);
4180
+ L.cleanupTree(n), R.removeNode(n);
4154
4181
  }), Array.from(i.addedNodes).forEach((n) => {
4155
- n.parentElement instanceof HTMLElement && (P.addNode(n.parentElement, n), $.syncTree(n));
4182
+ n.parentElement instanceof HTMLElement && (R.addNode(n.parentElement, n), L.syncTree(n));
4156
4183
  });
4157
4184
  break;
4158
4185
  }
@@ -4162,7 +4189,7 @@ const C = class C {
4162
4189
  "Character data changed:",
4163
4190
  i.target,
4164
4191
  i.target.textContent
4165
- ), i.target instanceof Text || i.target instanceof Comment ? P.changeText(i.target, i.target.textContent) : d.warn(
4192
+ ), i.target instanceof Text || i.target instanceof Comment ? R.changeText(i.target, i.target.textContent) : d.warn(
4166
4193
  "[Haori]",
4167
4194
  "Unsupported character data type:",
4168
4195
  i.target
@@ -4184,18 +4211,18 @@ const C = class C {
4184
4211
  }), d.info("[Haori]", "Observer initialized for", t);
4185
4212
  }
4186
4213
  };
4187
- C._initialized = !1;
4188
- let q = C;
4214
+ H._initialized = !1;
4215
+ let q = H;
4189
4216
  document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", q.init) : q.init();
4190
- const pt = "0.4.6";
4217
+ const pt = "0.4.7";
4191
4218
  export {
4192
- P as Core,
4193
- u as Env,
4219
+ R as Core,
4220
+ l as Env,
4194
4221
  y as Form,
4195
- T as Fragment,
4222
+ w as Fragment,
4196
4223
  X as Haori,
4197
4224
  d as Log,
4198
- R as Queue,
4225
+ P as Queue,
4199
4226
  X as default,
4200
4227
  pt as version
4201
4228
  };