@getforma/core 0.6.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 +93 -8
  2. package/dist/chunk-3U57L2TY.cjs +38 -0
  3. package/dist/chunk-3U57L2TY.cjs.map +1 -0
  4. package/dist/{chunk-TKGUHASG.js → chunk-N522P3G6.js} +20 -12
  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-YSKF3VRA.cjs → chunk-YMIMKO4W.cjs} +51 -20
  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 +112 -115
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +30 -21
  21. package/dist/index.d.ts +30 -21
  22. package/dist/index.js +25 -50
  23. package/dist/index.js.map +1 -1
  24. package/dist/runtime-hardened.cjs +106 -27
  25. package/dist/runtime-hardened.cjs.map +1 -1
  26. package/dist/runtime-hardened.js +107 -28
  27. package/dist/runtime-hardened.js.map +1 -1
  28. package/dist/runtime.cjs +128 -50
  29. package/dist/runtime.cjs.map +1 -1
  30. package/dist/runtime.js +102 -24
  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 +19 -2
  35. package/dist/ssr/index.cjs.map +1 -1
  36. package/dist/ssr/index.js +19 -2
  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-DPSAVBCP.js +0 -26
  46. package/dist/chunk-DPSAVBCP.js.map +0 -1
  47. package/dist/chunk-KH3F5NRU.cjs +0 -29
  48. package/dist/chunk-KH3F5NRU.cjs.map +0 -1
  49. package/dist/chunk-TKGUHASG.js.map +0 -1
  50. package/dist/chunk-YSKF3VRA.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.js CHANGED
@@ -1,5 +1,5 @@
1
- import { internalEffect, reconcileList, batch } from './chunk-TKGUHASG.js';
2
- import { createSignal, createComputed } from './chunk-DPSAVBCP.js';
1
+ import { internalEffect, reconcileList, batch } from './chunk-N522P3G6.js';
2
+ import { createSignal, createComputed } from './chunk-OZCHIVAZ.js';
3
3
 
4
4
  // src/dom/reconcile.ts
5
5
  function getBindTargets(el) {
@@ -1538,14 +1538,6 @@ function parseExpressionUncached(expr, scope) {
1538
1538
  return () => left() ?? right();
1539
1539
  }
1540
1540
  }
1541
- const andMatch = expr.match(RE_AND);
1542
- if (andMatch) {
1543
- const left = parseExpression(andMatch[1].trim(), scope);
1544
- const right = parseExpression(andMatch[2].trim(), scope);
1545
- if (left && right) {
1546
- return () => left() && right();
1547
- }
1548
- }
1549
1541
  const orMatch = expr.match(RE_OR);
1550
1542
  if (orMatch) {
1551
1543
  const left = parseExpression(orMatch[1].trim(), scope);
@@ -1554,6 +1546,14 @@ function parseExpressionUncached(expr, scope) {
1554
1546
  return () => left() || right();
1555
1547
  }
1556
1548
  }
1549
+ const andMatch = expr.match(RE_AND);
1550
+ if (andMatch) {
1551
+ const left = parseExpression(andMatch[1].trim(), scope);
1552
+ const right = parseExpression(andMatch[2].trim(), scope);
1553
+ if (left && right) {
1554
+ return () => left() && right();
1555
+ }
1556
+ }
1557
1557
  const compMatch = expr.match(RE_COMPARISON);
1558
1558
  if (compMatch) {
1559
1559
  const left = parseExpression(compMatch[1].trim(), scope);
@@ -1583,6 +1583,19 @@ function parseExpressionUncached(expr, scope) {
1583
1583
  };
1584
1584
  }
1585
1585
  }
1586
+ const addMatch = expr.match(RE_ADD);
1587
+ if (addMatch) {
1588
+ const left = parseExpression(addMatch[1].trim(), scope);
1589
+ const right = parseExpression(addMatch[3].trim(), scope);
1590
+ if (left && right) {
1591
+ const op = addMatch[2];
1592
+ return () => {
1593
+ const l = left(), r = right();
1594
+ if (op === "+") return l + r;
1595
+ return l - r;
1596
+ };
1597
+ }
1598
+ }
1586
1599
  const mulMatch = expr.match(RE_MUL);
1587
1600
  if (mulMatch) {
1588
1601
  const left = parseExpression(mulMatch[1].trim(), scope);
@@ -1602,19 +1615,6 @@ function parseExpressionUncached(expr, scope) {
1602
1615
  };
1603
1616
  }
1604
1617
  }
1605
- const addMatch = expr.match(RE_ADD);
1606
- if (addMatch) {
1607
- const left = parseExpression(addMatch[1].trim(), scope);
1608
- const right = parseExpression(addMatch[3].trim(), scope);
1609
- if (left && right) {
1610
- const op = addMatch[2];
1611
- return () => {
1612
- const l = left(), r = right();
1613
- if (op === "+") return l + r;
1614
- return l - r;
1615
- };
1616
- }
1617
- }
1618
1618
  const tmplMatch = expr.match(RE_TEMPLATE_LIT);
1619
1619
  if (tmplMatch) {
1620
1620
  const raw = tmplMatch[1];
@@ -1911,9 +1911,87 @@ function initScope(stateEl) {
1911
1911
  getters["$refetch"] = () => $refetch;
1912
1912
  return { getters, setters };
1913
1913
  }
1914
+ var SAFE_EL_PROPS = /* @__PURE__ */ new Set([
1915
+ // Identity & attributes
1916
+ "id",
1917
+ "className",
1918
+ "tagName",
1919
+ "nodeName",
1920
+ "getAttribute",
1921
+ "setAttribute",
1922
+ "removeAttribute",
1923
+ "hasAttribute",
1924
+ "toggleAttribute",
1925
+ "dataset",
1926
+ "classList",
1927
+ // Content
1928
+ "textContent",
1929
+ "innerText",
1930
+ // Form elements
1931
+ "value",
1932
+ "checked",
1933
+ "disabled",
1934
+ "selected",
1935
+ "type",
1936
+ "name",
1937
+ "placeholder",
1938
+ "readOnly",
1939
+ "required",
1940
+ "min",
1941
+ "max",
1942
+ "step",
1943
+ "pattern",
1944
+ // Dimensions & position
1945
+ "getBoundingClientRect",
1946
+ "offsetWidth",
1947
+ "offsetHeight",
1948
+ "offsetTop",
1949
+ "offsetLeft",
1950
+ "clientWidth",
1951
+ "clientHeight",
1952
+ "scrollWidth",
1953
+ "scrollHeight",
1954
+ "scrollTop",
1955
+ "scrollLeft",
1956
+ // Style
1957
+ "style",
1958
+ "hidden",
1959
+ // Focus & interaction
1960
+ "focus",
1961
+ "blur",
1962
+ "click",
1963
+ "scrollIntoView",
1964
+ "scrollTo",
1965
+ // Traversal (safe — returns elements, not window/document)
1966
+ "closest",
1967
+ "matches",
1968
+ "querySelector",
1969
+ "querySelectorAll",
1970
+ "children",
1971
+ "childElementCount",
1972
+ "firstElementChild",
1973
+ "lastElementChild",
1974
+ "nextElementSibling",
1975
+ "previousElementSibling"
1976
+ ]);
1977
+ function createSafeElProxy(el) {
1978
+ return new Proxy(el, {
1979
+ get(target, prop) {
1980
+ if (typeof prop === "symbol") return Reflect.get(target, prop);
1981
+ if (!SAFE_EL_PROPS.has(prop)) return void 0;
1982
+ const val = Reflect.get(target, prop);
1983
+ return typeof val === "function" ? val.bind(target) : val;
1984
+ },
1985
+ set(target, prop, value) {
1986
+ if (typeof prop === "symbol") return false;
1987
+ if (!SAFE_EL_PROPS.has(prop)) return false;
1988
+ return Reflect.set(target, prop, value);
1989
+ }
1990
+ });
1991
+ }
1914
1992
  function bindElement(el, scope, disposers) {
1915
1993
  const elMagics = {
1916
- $el: el,
1994
+ $el: createSafeElProxy(el),
1917
1995
  $dispatch: (name, detail) => {
1918
1996
  el.dispatchEvent(new CustomEvent(name, {
1919
1997
  bubbles: true,