@getforma/core 0.6.1 → 0.8.2

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 +125 -15
  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
@@ -1,17 +1,18 @@
1
- import { signal, computed, effect, startBatch, endBatch, pauseTracking, resumeTracking } from 'alien-signals';
1
+ import { signal, computed, effect, startBatch, endBatch, setActiveSub } from 'alien-signals';
2
2
 
3
3
  // src/reactive/signal.ts
4
- function applySignalSet(s, v) {
4
+ function applySignalSet(s, v, equals) {
5
5
  if (typeof v !== "function") {
6
6
  s(v);
7
7
  return;
8
8
  }
9
- pauseTracking();
9
+ const prevSub = setActiveSub(void 0);
10
10
  const prev = s();
11
- resumeTracking();
12
- s(v(prev));
11
+ setActiveSub(prevSub);
12
+ const next = v(prev);
13
+ s(next);
13
14
  }
14
- function createSignal(initialValue) {
15
+ function createSignal(initialValue, options) {
15
16
  const s = signal(initialValue);
16
17
  const getter = s;
17
18
  const setter = (v) => applySignalSet(s, v);
@@ -1811,14 +1812,6 @@ function parseExpressionUncached(expr, scope) {
1811
1812
  return () => left() ?? right();
1812
1813
  }
1813
1814
  }
1814
- const andMatch = expr.match(RE_AND);
1815
- if (andMatch) {
1816
- const left = parseExpression(andMatch[1].trim(), scope);
1817
- const right = parseExpression(andMatch[2].trim(), scope);
1818
- if (left && right) {
1819
- return () => left() && right();
1820
- }
1821
- }
1822
1815
  const orMatch = expr.match(RE_OR);
1823
1816
  if (orMatch) {
1824
1817
  const left = parseExpression(orMatch[1].trim(), scope);
@@ -1827,6 +1820,14 @@ function parseExpressionUncached(expr, scope) {
1827
1820
  return () => left() || right();
1828
1821
  }
1829
1822
  }
1823
+ const andMatch = expr.match(RE_AND);
1824
+ if (andMatch) {
1825
+ const left = parseExpression(andMatch[1].trim(), scope);
1826
+ const right = parseExpression(andMatch[2].trim(), scope);
1827
+ if (left && right) {
1828
+ return () => left() && right();
1829
+ }
1830
+ }
1830
1831
  const compMatch = expr.match(RE_COMPARISON);
1831
1832
  if (compMatch) {
1832
1833
  const left = parseExpression(compMatch[1].trim(), scope);
@@ -1856,6 +1857,19 @@ function parseExpressionUncached(expr, scope) {
1856
1857
  };
1857
1858
  }
1858
1859
  }
1860
+ const addMatch = expr.match(RE_ADD);
1861
+ if (addMatch) {
1862
+ const left = parseExpression(addMatch[1].trim(), scope);
1863
+ const right = parseExpression(addMatch[3].trim(), scope);
1864
+ if (left && right) {
1865
+ const op = addMatch[2];
1866
+ return () => {
1867
+ const l = left(), r = right();
1868
+ if (op === "+") return l + r;
1869
+ return l - r;
1870
+ };
1871
+ }
1872
+ }
1859
1873
  const mulMatch = expr.match(RE_MUL);
1860
1874
  if (mulMatch) {
1861
1875
  const left = parseExpression(mulMatch[1].trim(), scope);
@@ -1875,19 +1889,6 @@ function parseExpressionUncached(expr, scope) {
1875
1889
  };
1876
1890
  }
1877
1891
  }
1878
- const addMatch = expr.match(RE_ADD);
1879
- if (addMatch) {
1880
- const left = parseExpression(addMatch[1].trim(), scope);
1881
- const right = parseExpression(addMatch[3].trim(), scope);
1882
- if (left && right) {
1883
- const op = addMatch[2];
1884
- return () => {
1885
- const l = left(), r = right();
1886
- if (op === "+") return l + r;
1887
- return l - r;
1888
- };
1889
- }
1890
- }
1891
1892
  const tmplMatch = expr.match(RE_TEMPLATE_LIT);
1892
1893
  if (tmplMatch) {
1893
1894
  const raw = tmplMatch[1];
@@ -2184,9 +2185,87 @@ function initScope(stateEl) {
2184
2185
  getters["$refetch"] = () => $refetch;
2185
2186
  return { getters, setters };
2186
2187
  }
2188
+ var SAFE_EL_PROPS = /* @__PURE__ */ new Set([
2189
+ // Identity & attributes
2190
+ "id",
2191
+ "className",
2192
+ "tagName",
2193
+ "nodeName",
2194
+ "getAttribute",
2195
+ "setAttribute",
2196
+ "removeAttribute",
2197
+ "hasAttribute",
2198
+ "toggleAttribute",
2199
+ "dataset",
2200
+ "classList",
2201
+ // Content
2202
+ "textContent",
2203
+ "innerText",
2204
+ // Form elements
2205
+ "value",
2206
+ "checked",
2207
+ "disabled",
2208
+ "selected",
2209
+ "type",
2210
+ "name",
2211
+ "placeholder",
2212
+ "readOnly",
2213
+ "required",
2214
+ "min",
2215
+ "max",
2216
+ "step",
2217
+ "pattern",
2218
+ // Dimensions & position
2219
+ "getBoundingClientRect",
2220
+ "offsetWidth",
2221
+ "offsetHeight",
2222
+ "offsetTop",
2223
+ "offsetLeft",
2224
+ "clientWidth",
2225
+ "clientHeight",
2226
+ "scrollWidth",
2227
+ "scrollHeight",
2228
+ "scrollTop",
2229
+ "scrollLeft",
2230
+ // Style
2231
+ "style",
2232
+ "hidden",
2233
+ // Focus & interaction
2234
+ "focus",
2235
+ "blur",
2236
+ "click",
2237
+ "scrollIntoView",
2238
+ "scrollTo",
2239
+ // Traversal (safe — returns elements, not window/document)
2240
+ "closest",
2241
+ "matches",
2242
+ "querySelector",
2243
+ "querySelectorAll",
2244
+ "children",
2245
+ "childElementCount",
2246
+ "firstElementChild",
2247
+ "lastElementChild",
2248
+ "nextElementSibling",
2249
+ "previousElementSibling"
2250
+ ]);
2251
+ function createSafeElProxy(el) {
2252
+ return new Proxy(el, {
2253
+ get(target, prop) {
2254
+ if (typeof prop === "symbol") return Reflect.get(target, prop);
2255
+ if (!SAFE_EL_PROPS.has(prop)) return void 0;
2256
+ const val = Reflect.get(target, prop);
2257
+ return typeof val === "function" ? val.bind(target) : val;
2258
+ },
2259
+ set(target, prop, value2) {
2260
+ if (typeof prop === "symbol") return false;
2261
+ if (!SAFE_EL_PROPS.has(prop)) return false;
2262
+ return Reflect.set(target, prop, value2);
2263
+ }
2264
+ });
2265
+ }
2187
2266
  function bindElement(el, scope, disposers) {
2188
2267
  const elMagics = {
2189
- $el: el,
2268
+ $el: createSafeElProxy(el),
2190
2269
  $dispatch: (name, detail) => {
2191
2270
  el.dispatchEvent(new CustomEvent(name, {
2192
2271
  bubbles: true,