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