@getforma/core 0.3.1 → 0.8.1

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 (52) hide show
  1. package/README.md +279 -20
  2. package/dist/chunk-3U57L2TY.cjs +38 -0
  3. package/dist/chunk-3U57L2TY.cjs.map +1 -0
  4. package/dist/{chunk-5H52PKGF.js → chunk-N522P3G6.js} +37 -19
  5. package/dist/chunk-N522P3G6.js.map +1 -0
  6. package/dist/chunk-OZCHIVAZ.js +35 -0
  7. package/dist/chunk-OZCHIVAZ.js.map +1 -0
  8. package/dist/{chunk-TSQ7AKFT.cjs → chunk-YMIMKO4W.cjs} +66 -25
  9. package/dist/chunk-YMIMKO4W.cjs.map +1 -0
  10. package/dist/forma-runtime-csp.js +1 -1
  11. package/dist/forma-runtime.js +1 -1
  12. package/dist/formajs-runtime-hardened.global.js +1 -1
  13. package/dist/formajs-runtime-hardened.global.js.map +1 -1
  14. package/dist/formajs-runtime.global.js +1 -1
  15. package/dist/formajs-runtime.global.js.map +1 -1
  16. package/dist/formajs.global.js +1 -1
  17. package/dist/formajs.global.js.map +1 -1
  18. package/dist/index.cjs +142 -118
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +70 -29
  21. package/dist/index.d.ts +70 -29
  22. package/dist/index.js +64 -60
  23. package/dist/index.js.map +1 -1
  24. package/dist/runtime-hardened.cjs +166 -39
  25. package/dist/runtime-hardened.cjs.map +1 -1
  26. package/dist/runtime-hardened.js +167 -40
  27. package/dist/runtime-hardened.js.map +1 -1
  28. package/dist/runtime.cjs +184 -57
  29. package/dist/runtime.cjs.map +1 -1
  30. package/dist/runtime.js +162 -35
  31. package/dist/runtime.js.map +1 -1
  32. package/dist/signal-B4_wQJHs.d.cts +53 -0
  33. package/dist/signal-B4_wQJHs.d.ts +53 -0
  34. package/dist/ssr/index.cjs +37 -12
  35. package/dist/ssr/index.cjs.map +1 -1
  36. package/dist/ssr/index.js +37 -12
  37. package/dist/ssr/index.js.map +1 -1
  38. package/dist/tc39-compat.cjs +4 -12
  39. package/dist/tc39-compat.cjs.map +1 -1
  40. package/dist/tc39-compat.d.cts +1 -1
  41. package/dist/tc39-compat.d.ts +1 -1
  42. package/dist/tc39-compat.js +3 -11
  43. package/dist/tc39-compat.js.map +1 -1
  44. package/package.json +2 -2
  45. package/dist/chunk-5H52PKGF.js.map +0 -1
  46. package/dist/chunk-FPSLC62A.cjs +0 -31
  47. package/dist/chunk-FPSLC62A.cjs.map +0 -1
  48. package/dist/chunk-KX5WRZH7.js +0 -27
  49. package/dist/chunk-KX5WRZH7.js.map +0 -1
  50. package/dist/chunk-TSQ7AKFT.cjs.map +0 -1
  51. package/dist/signal-CfLDwMyg.d.cts +0 -29
  52. package/dist/signal-CfLDwMyg.d.ts +0 -29
package/dist/runtime.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkTSQ7AKFT_cjs = require('./chunk-TSQ7AKFT.cjs');
4
- var chunkFPSLC62A_cjs = require('./chunk-FPSLC62A.cjs');
3
+ var chunkYMIMKO4W_cjs = require('./chunk-YMIMKO4W.cjs');
4
+ var chunk3U57L2TY_cjs = require('./chunk-3U57L2TY.cjs');
5
5
 
6
6
  // src/dom/reconcile.ts
7
7
  function getBindTargets(el) {
@@ -578,12 +578,11 @@ var RE_TOGGLE = /^(\w+)\s*=\s*!(\w+)$/;
578
578
  var RE_ASSIGN = /^(\w+)\s*=\s*(.+)$/;
579
579
  var RE_COMPOUND = /^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/;
580
580
  var RE_IF_PREFIX = /^if\b/;
581
- var RE_UNQUOTED_KEYS = /(\w+)\s*:/g;
582
581
  var RE_COMPUTED = /^(\w+)\s*=\s*(.+)$/;
583
582
  var RE_FETCH = /^(.+?)(?:→|->)\s*(\S+)(.*)$/;
584
583
  var RE_FETCH_METHOD = /^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i;
585
584
  var RE_STRIP_ITEM_BRACES = /^\{item\.?|\}$/g;
586
- var RE_EVENT_REF = /\bevent\b|\$event\b/;
585
+ var RE_EVENT_REF = /\bevent\s*[.([]|\$event\b/;
587
586
  var RE_REFETCH_CALL = /^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/;
588
587
  var TRANSITION_STATE_SYM = /* @__PURE__ */ Symbol.for("forma-transition-state");
589
588
  var EXPRESSION_CACHE_MAX = 2048;
@@ -598,6 +597,14 @@ function cacheExpression(key, factory) {
598
597
  var scopeExpressionCache = /* @__PURE__ */ new WeakMap();
599
598
  var scopeHandlerCache = /* @__PURE__ */ new WeakMap();
600
599
  var compiledTemplateCache = /* @__PURE__ */ new Map();
600
+ var COMPILED_TEMPLATE_CACHE_MAX = 2048;
601
+ function cacheCompiledTemplate(key, template) {
602
+ if (compiledTemplateCache.size >= COMPILED_TEMPLATE_CACHE_MAX) {
603
+ const first = compiledTemplateCache.keys().next().value;
604
+ if (first !== void 0) compiledTemplateCache.delete(first);
605
+ }
606
+ compiledTemplateCache.set(key, template);
607
+ }
601
608
  var UNSAFE_METHOD_NAMES = /* @__PURE__ */ new Set([
602
609
  "constructor",
603
610
  "__proto__",
@@ -606,7 +613,8 @@ var UNSAFE_METHOD_NAMES = /* @__PURE__ */ new Set([
606
613
  "__defineSetter__",
607
614
  "__lookupGetter__",
608
615
  "__lookupSetter__",
609
- "eval"
616
+ "eval",
617
+ "Function"
610
618
  ]);
611
619
  var BLOCKED_METHOD_REGEXES = (() => {
612
620
  const result = [];
@@ -630,8 +638,36 @@ function findBlockedMethod(expr) {
630
638
  if (dotRe.test(cleaned)) return name;
631
639
  if (bracketRe.test(cleaned)) return name;
632
640
  }
641
+ if (cleaned.includes("[")) {
642
+ const bracketContents = extractBracketContents(cleaned);
643
+ for (const content of bracketContents) {
644
+ if (!content.includes("+")) continue;
645
+ const fragments = content.match(/['"`]([^'"`]*?)['"`]/g);
646
+ if (!fragments) continue;
647
+ const joined = fragments.map((f) => f.slice(1, -1)).join("");
648
+ if (UNSAFE_METHOD_NAMES.has(joined)) return joined;
649
+ }
650
+ }
633
651
  return null;
634
652
  }
653
+ function extractBracketContents(expr) {
654
+ const results = [];
655
+ let depth = 0;
656
+ let start = -1;
657
+ for (let i = 0; i < expr.length; i++) {
658
+ if (expr[i] === "[") {
659
+ if (depth === 0) start = i + 1;
660
+ depth++;
661
+ } else if (expr[i] === "]") {
662
+ depth--;
663
+ if (depth === 0 && start >= 0) {
664
+ results.push(expr.slice(start, i));
665
+ start = -1;
666
+ }
667
+ }
668
+ }
669
+ return results;
670
+ }
635
671
  var TEXT_BINDING_SYM = /* @__PURE__ */ Symbol.for("forma-text-binding-cache");
636
672
  function toTextValue(value) {
637
673
  if (value == null) return "";
@@ -931,7 +967,7 @@ function parseIfHandler(expr, scope) {
931
967
  }
932
968
  if (rest.length > 0) return null;
933
969
  return (e) => {
934
- chunkTSQ7AKFT_cjs.batch(() => {
970
+ chunkYMIMKO4W_cjs.batch(() => {
935
971
  if (condExpr()) thenHandler(e);
936
972
  else elseHandler?.(e);
937
973
  });
@@ -967,7 +1003,7 @@ function compileTemplate(text) {
967
1003
  dynamics,
968
1004
  hasItemRef: dynamics.length > 0
969
1005
  };
970
- compiledTemplateCache.set(text, result);
1006
+ cacheCompiledTemplate(text, result);
971
1007
  return result;
972
1008
  }
973
1009
  var templateTexts = /* @__PURE__ */ new WeakMap();
@@ -1504,14 +1540,6 @@ function parseExpressionUncached(expr, scope) {
1504
1540
  return () => left() ?? right();
1505
1541
  }
1506
1542
  }
1507
- const andMatch = expr.match(RE_AND);
1508
- if (andMatch) {
1509
- const left = parseExpression(andMatch[1].trim(), scope);
1510
- const right = parseExpression(andMatch[2].trim(), scope);
1511
- if (left && right) {
1512
- return () => left() && right();
1513
- }
1514
- }
1515
1543
  const orMatch = expr.match(RE_OR);
1516
1544
  if (orMatch) {
1517
1545
  const left = parseExpression(orMatch[1].trim(), scope);
@@ -1520,6 +1548,14 @@ function parseExpressionUncached(expr, scope) {
1520
1548
  return () => left() || right();
1521
1549
  }
1522
1550
  }
1551
+ const andMatch = expr.match(RE_AND);
1552
+ if (andMatch) {
1553
+ const left = parseExpression(andMatch[1].trim(), scope);
1554
+ const right = parseExpression(andMatch[2].trim(), scope);
1555
+ if (left && right) {
1556
+ return () => left() && right();
1557
+ }
1558
+ }
1523
1559
  const compMatch = expr.match(RE_COMPARISON);
1524
1560
  if (compMatch) {
1525
1561
  const left = parseExpression(compMatch[1].trim(), scope);
@@ -1549,6 +1585,19 @@ function parseExpressionUncached(expr, scope) {
1549
1585
  };
1550
1586
  }
1551
1587
  }
1588
+ const addMatch = expr.match(RE_ADD);
1589
+ if (addMatch) {
1590
+ const left = parseExpression(addMatch[1].trim(), scope);
1591
+ const right = parseExpression(addMatch[3].trim(), scope);
1592
+ if (left && right) {
1593
+ const op = addMatch[2];
1594
+ return () => {
1595
+ const l = left(), r = right();
1596
+ if (op === "+") return l + r;
1597
+ return l - r;
1598
+ };
1599
+ }
1600
+ }
1552
1601
  const mulMatch = expr.match(RE_MUL);
1553
1602
  if (mulMatch) {
1554
1603
  const left = parseExpression(mulMatch[1].trim(), scope);
@@ -1568,19 +1617,6 @@ function parseExpressionUncached(expr, scope) {
1568
1617
  };
1569
1618
  }
1570
1619
  }
1571
- const addMatch = expr.match(RE_ADD);
1572
- if (addMatch) {
1573
- const left = parseExpression(addMatch[1].trim(), scope);
1574
- const right = parseExpression(addMatch[3].trim(), scope);
1575
- if (left && right) {
1576
- const op = addMatch[2];
1577
- return () => {
1578
- const l = left(), r = right();
1579
- if (op === "+") return l + r;
1580
- return l - r;
1581
- };
1582
- }
1583
- }
1584
1620
  const tmplMatch = expr.match(RE_TEMPLATE_LIT);
1585
1621
  if (tmplMatch) {
1586
1622
  const raw = tmplMatch[1];
@@ -1655,6 +1691,7 @@ function buildEvaluator(expr, scope) {
1655
1691
  return key in scope.getters;
1656
1692
  },
1657
1693
  get(_, key) {
1694
+ if (UNSAFE_METHOD_NAMES.has(key)) return void 0;
1658
1695
  const g = scope.getters[key];
1659
1696
  return g ? g() : void 0;
1660
1697
  }
@@ -1679,7 +1716,7 @@ function parseHandler(expr, scope) {
1679
1716
  const handlers = stmts.map((s) => parseHandler(s, scope));
1680
1717
  if (handlers.every((h) => h !== null)) {
1681
1718
  return (e) => {
1682
- chunkTSQ7AKFT_cjs.batch(() => {
1719
+ chunkYMIMKO4W_cjs.batch(() => {
1683
1720
  for (const h of handlers) h(e);
1684
1721
  });
1685
1722
  };
@@ -1692,7 +1729,7 @@ function parseHandler(expr, scope) {
1692
1729
  const name = incrMatch[1];
1693
1730
  const op = incrMatch[2];
1694
1731
  return () => {
1695
- chunkTSQ7AKFT_cjs.batch(() => {
1732
+ chunkYMIMKO4W_cjs.batch(() => {
1696
1733
  const val = scope.getters[name]?.() ?? 0;
1697
1734
  scope.setters[name]?.(op === "++" ? val + 1 : val - 1);
1698
1735
  });
@@ -1703,7 +1740,7 @@ function parseHandler(expr, scope) {
1703
1740
  const op = preIncrMatch[1];
1704
1741
  const name = preIncrMatch[2];
1705
1742
  return () => {
1706
- chunkTSQ7AKFT_cjs.batch(() => {
1743
+ chunkYMIMKO4W_cjs.batch(() => {
1707
1744
  const val = scope.getters[name]?.() ?? 0;
1708
1745
  scope.setters[name]?.(op === "++" ? val + 1 : val - 1);
1709
1746
  });
@@ -1713,7 +1750,7 @@ function parseHandler(expr, scope) {
1713
1750
  if (toggleMatch && toggleMatch[1] === toggleMatch[2]) {
1714
1751
  const name = toggleMatch[1];
1715
1752
  return () => {
1716
- chunkTSQ7AKFT_cjs.batch(() => {
1753
+ chunkYMIMKO4W_cjs.batch(() => {
1717
1754
  scope.setters[name]?.(!scope.getters[name]?.());
1718
1755
  });
1719
1756
  };
@@ -1725,7 +1762,7 @@ function parseHandler(expr, scope) {
1725
1762
  if (valExpr) {
1726
1763
  if (_debug) dbg(`parseHandler: assignment "${name} = ..." \u2014 setter exists:`, !!scope.setters[name], ", getter exists:", !!scope.getters[name]);
1727
1764
  return () => {
1728
- chunkTSQ7AKFT_cjs.batch(() => {
1765
+ chunkYMIMKO4W_cjs.batch(() => {
1729
1766
  const val = valExpr();
1730
1767
  if (_debug) dbg(`SETTER: ${name} = ${val} (was: ${scope.getters[name]?.()})`);
1731
1768
  scope.setters[name]?.(val);
@@ -1740,7 +1777,7 @@ function parseHandler(expr, scope) {
1740
1777
  const valExpr = parseExpression(compoundMatch[3].trim(), scope);
1741
1778
  if (valExpr) {
1742
1779
  return () => {
1743
- chunkTSQ7AKFT_cjs.batch(() => {
1780
+ chunkYMIMKO4W_cjs.batch(() => {
1744
1781
  const current = scope.getters[name]?.() ?? 0;
1745
1782
  const val = valExpr();
1746
1783
  switch (op) {
@@ -1810,6 +1847,7 @@ function buildHandler(expr, scope) {
1810
1847
  return key in scope.getters || key in scope.setters;
1811
1848
  },
1812
1849
  get(_, key) {
1850
+ if (UNSAFE_METHOD_NAMES.has(key)) return void 0;
1813
1851
  const g = scope.getters[key];
1814
1852
  return g ? g() : void 0;
1815
1853
  },
@@ -1820,7 +1858,7 @@ function buildHandler(expr, scope) {
1820
1858
  }
1821
1859
  });
1822
1860
  const unsafeHandler = (e) => {
1823
- chunkTSQ7AKFT_cjs.batch(() => fn(proxy, e, e));
1861
+ chunkYMIMKO4W_cjs.batch(() => fn(proxy, e, e));
1824
1862
  };
1825
1863
  const result = {
1826
1864
  handler: unsafeHandler,
@@ -1845,11 +1883,10 @@ function parseState(raw) {
1845
1883
  try {
1846
1884
  parsed = JSON.parse(raw);
1847
1885
  } catch {
1848
- try {
1849
- parsed = JSON.parse(raw.replace(RE_UNQUOTED_KEYS, '"$1":'));
1850
- } catch {
1851
- return {};
1886
+ if (_debug) {
1887
+ dbg("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:", raw.slice(0, 200));
1852
1888
  }
1889
+ return {};
1853
1890
  }
1854
1891
  for (const key of FORBIDDEN_STATE_KEYS) {
1855
1892
  if (key in parsed) delete parsed[key];
@@ -1869,14 +1906,104 @@ function initScope(stateEl) {
1869
1906
  const getters = {};
1870
1907
  const setters = {};
1871
1908
  for (const [key, initial] of Object.entries(state)) {
1872
- const [get, set] = chunkFPSLC62A_cjs.createValueSignal(initial);
1909
+ const [get, set] = chunk3U57L2TY_cjs.createSignal(initial);
1873
1910
  getters[key] = get;
1874
1911
  setters[key] = set;
1875
1912
  }
1876
1913
  getters["$refetch"] = () => $refetch;
1877
1914
  return { getters, setters };
1878
1915
  }
1916
+ var SAFE_EL_PROPS = /* @__PURE__ */ new Set([
1917
+ // Identity & attributes
1918
+ "id",
1919
+ "className",
1920
+ "tagName",
1921
+ "nodeName",
1922
+ "getAttribute",
1923
+ "setAttribute",
1924
+ "removeAttribute",
1925
+ "hasAttribute",
1926
+ "toggleAttribute",
1927
+ "dataset",
1928
+ "classList",
1929
+ // Content
1930
+ "textContent",
1931
+ "innerText",
1932
+ // Form elements
1933
+ "value",
1934
+ "checked",
1935
+ "disabled",
1936
+ "selected",
1937
+ "type",
1938
+ "name",
1939
+ "placeholder",
1940
+ "readOnly",
1941
+ "required",
1942
+ "min",
1943
+ "max",
1944
+ "step",
1945
+ "pattern",
1946
+ // Dimensions & position
1947
+ "getBoundingClientRect",
1948
+ "offsetWidth",
1949
+ "offsetHeight",
1950
+ "offsetTop",
1951
+ "offsetLeft",
1952
+ "clientWidth",
1953
+ "clientHeight",
1954
+ "scrollWidth",
1955
+ "scrollHeight",
1956
+ "scrollTop",
1957
+ "scrollLeft",
1958
+ // Style
1959
+ "style",
1960
+ "hidden",
1961
+ // Focus & interaction
1962
+ "focus",
1963
+ "blur",
1964
+ "click",
1965
+ "scrollIntoView",
1966
+ "scrollTo",
1967
+ // Traversal (safe — returns elements, not window/document)
1968
+ "closest",
1969
+ "matches",
1970
+ "querySelector",
1971
+ "querySelectorAll",
1972
+ "children",
1973
+ "childElementCount",
1974
+ "firstElementChild",
1975
+ "lastElementChild",
1976
+ "nextElementSibling",
1977
+ "previousElementSibling"
1978
+ ]);
1979
+ function createSafeElProxy(el) {
1980
+ return new Proxy(el, {
1981
+ get(target, prop) {
1982
+ if (typeof prop === "symbol") return Reflect.get(target, prop);
1983
+ if (!SAFE_EL_PROPS.has(prop)) return void 0;
1984
+ const val = Reflect.get(target, prop);
1985
+ return typeof val === "function" ? val.bind(target) : val;
1986
+ },
1987
+ set(target, prop, value) {
1988
+ if (typeof prop === "symbol") return false;
1989
+ if (!SAFE_EL_PROPS.has(prop)) return false;
1990
+ return Reflect.set(target, prop, value);
1991
+ }
1992
+ });
1993
+ }
1879
1994
  function bindElement(el, scope, disposers) {
1995
+ const elMagics = {
1996
+ $el: createSafeElProxy(el),
1997
+ $dispatch: (name, detail) => {
1998
+ el.dispatchEvent(new CustomEvent(name, {
1999
+ bubbles: true,
2000
+ composed: true,
2001
+ // crosses Shadow DOM boundaries (important for <forma-stage>)
2002
+ detail
2003
+ }));
2004
+ }
2005
+ };
2006
+ scope = createChildScope(scope, elMagics);
1880
2007
  const known = getDirectives(el);
1881
2008
  const computedAttr = !known || known.has("data-computed") ? el.getAttribute("data-computed") : null;
1882
2009
  if (computedAttr) {
@@ -1891,7 +2018,7 @@ function bindElement(el, scope, disposers) {
1891
2018
  const prevGetter = scope.getters[name];
1892
2019
  delete scope.getters[name];
1893
2020
  const evaluate = buildEvaluator(`{${expr}}`, scope);
1894
- const getter = chunkFPSLC62A_cjs.createComputed(evaluate);
2021
+ const getter = chunk3U57L2TY_cjs.createComputed(evaluate);
1895
2022
  scope.getters[name] = getter;
1896
2023
  if (!prevGetter) {
1897
2024
  delete scope.setters[name];
@@ -1902,7 +2029,7 @@ function bindElement(el, scope, disposers) {
1902
2029
  const textExpr = !known || known.has("data-text") ? el.getAttribute("data-text") : null;
1903
2030
  if (textExpr) {
1904
2031
  const evaluate = buildEvaluator(textExpr, scope);
1905
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2032
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
1906
2033
  setElementTextFast(el, toTextValue(evaluate()));
1907
2034
  });
1908
2035
  disposers.push(dispose);
@@ -1917,7 +2044,7 @@ function bindElement(el, scope, disposers) {
1917
2044
  dbg(`bindElement: data-show="${showExpr}" on <${tag}${cls}>`);
1918
2045
  }
1919
2046
  let initialized = false;
1920
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2047
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
1921
2048
  const visible = !!evaluate();
1922
2049
  if (_debug) dbg(`data-show effect: "${showExpr}" \u2192 ${visible}`);
1923
2050
  applyShowVisibility(el, visible, transition, !initialized);
@@ -1936,7 +2063,7 @@ function bindElement(el, scope, disposers) {
1936
2063
  const parent = el.parentNode;
1937
2064
  let inserted = true;
1938
2065
  let initialized = false;
1939
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2066
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
1940
2067
  const show = !!evaluate();
1941
2068
  if (show && !inserted) {
1942
2069
  clearTransitionState(el);
@@ -1975,7 +2102,7 @@ function bindElement(el, scope, disposers) {
1975
2102
  const setter = scope.setters[prop];
1976
2103
  if (getter && setter) {
1977
2104
  const input = el;
1978
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2105
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
1979
2106
  const val = getter();
1980
2107
  if (input.type === "checkbox") {
1981
2108
  input.checked = !!val;
@@ -2039,14 +2166,14 @@ function bindElement(el, scope, disposers) {
2039
2166
  } else if (name.startsWith("data-class:")) {
2040
2167
  const cls = name.slice(11);
2041
2168
  const evaluate = buildEvaluator(attr.value, scope);
2042
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2169
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
2043
2170
  el.classList.toggle(cls, !!evaluate());
2044
2171
  });
2045
2172
  disposers.push(dispose);
2046
2173
  } else if (name.startsWith("data-bind:")) {
2047
2174
  const attrName = name.slice(10);
2048
2175
  const evaluate = buildEvaluator(attr.value, scope);
2049
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2176
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
2050
2177
  const val = evaluate();
2051
2178
  if (val == null || val === false) {
2052
2179
  el.removeAttribute(attrName);
@@ -2069,7 +2196,7 @@ function bindElement(el, scope, disposers) {
2069
2196
  if (saved !== null) setter(JSON.parse(saved));
2070
2197
  } catch {
2071
2198
  }
2072
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2199
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
2073
2200
  try {
2074
2201
  localStorage.setItem(key, JSON.stringify(getter()));
2075
2202
  } catch {
@@ -2156,7 +2283,7 @@ function bindElement(el, scope, disposers) {
2156
2283
  });
2157
2284
  }
2158
2285
  } : void 0;
2159
- const dispose = chunkTSQ7AKFT_cjs.internalEffect(() => {
2286
+ const dispose = chunkYMIMKO4W_cjs.internalEffect(() => {
2160
2287
  const rawItems = evaluate();
2161
2288
  if (!Array.isArray(rawItems)) {
2162
2289
  for (const n of oldNodes) {
@@ -2177,7 +2304,7 @@ function bindElement(el, scope, disposers) {
2177
2304
  }
2178
2305
  const prevNodes = new Set(oldNodes);
2179
2306
  if (keyProp) {
2180
- const result = chunkTSQ7AKFT_cjs.reconcileList(
2307
+ const result = chunkYMIMKO4W_cjs.reconcileList(
2181
2308
  el,
2182
2309
  oldItems,
2183
2310
  rawItems,
@@ -2207,7 +2334,7 @@ function bindElement(el, scope, disposers) {
2207
2334
  } else {
2208
2335
  const wrapped = rawItems.map((item, i) => ({ __idx: i, __item: item }));
2209
2336
  const oldWrapped = oldItems;
2210
- const result = chunkTSQ7AKFT_cjs.reconcileList(
2337
+ const result = chunkYMIMKO4W_cjs.reconcileList(
2211
2338
  el,
2212
2339
  oldWrapped,
2213
2340
  wrapped,
@@ -2256,16 +2383,16 @@ function bindElement(el, scope, disposers) {
2256
2383
  else if (k === "error") errorTarget = v;
2257
2384
  else if (k === "poll") interval = parseInt(v ?? "0", 10);
2258
2385
  }
2259
- const [getTarget, setTarget] = chunkFPSLC62A_cjs.createValueSignal(null);
2386
+ const [getTarget, setTarget] = chunk3U57L2TY_cjs.createSignal(null);
2260
2387
  scope.getters[target] = getTarget;
2261
2388
  scope.setters[target] = setTarget;
2262
2389
  if (loadingTarget) {
2263
- const [gl, sl] = chunkFPSLC62A_cjs.createValueSignal(false);
2390
+ const [gl, sl] = chunk3U57L2TY_cjs.createSignal(false);
2264
2391
  scope.getters[loadingTarget] = gl;
2265
2392
  scope.setters[loadingTarget] = sl;
2266
2393
  }
2267
2394
  if (errorTarget) {
2268
- const [ge, se] = chunkFPSLC62A_cjs.createValueSignal(null);
2395
+ const [ge, se] = chunk3U57L2TY_cjs.createSignal(null);
2269
2396
  scope.getters[errorTarget] = ge;
2270
2397
  scope.setters[errorTarget] = se;
2271
2398
  }
@@ -2577,7 +2704,7 @@ function getScopes() {
2577
2704
  function setScopeValue(element, key, value) {
2578
2705
  const scope = element.__formaScope;
2579
2706
  if (!scope?.setters[key]) return;
2580
- chunkTSQ7AKFT_cjs.batch(() => {
2707
+ chunkYMIMKO4W_cjs.batch(() => {
2581
2708
  scope.setters[key](value);
2582
2709
  });
2583
2710
  }
@@ -2586,7 +2713,7 @@ function resetScope(element) {
2586
2713
  const initialJSON = element.__formaInitialState;
2587
2714
  if (!scope || !initialJSON) return;
2588
2715
  const initial = parseState(initialJSON);
2589
- chunkTSQ7AKFT_cjs.batch(() => {
2716
+ chunkYMIMKO4W_cjs.batch(() => {
2590
2717
  for (const [key, val] of Object.entries(initial)) {
2591
2718
  scope.setters[key]?.(val);
2592
2719
  }
@@ -2616,7 +2743,7 @@ function getReconciler() {
2616
2743
  }
2617
2744
  }
2618
2745
  },
2619
- batch: chunkTSQ7AKFT_cjs.batch
2746
+ batch: chunkYMIMKO4W_cjs.batch
2620
2747
  });
2621
2748
  }
2622
2749
  return _reconciler;