@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.
- package/README.md +279 -20
- package/dist/chunk-3U57L2TY.cjs +38 -0
- package/dist/chunk-3U57L2TY.cjs.map +1 -0
- package/dist/{chunk-5H52PKGF.js → chunk-N522P3G6.js} +37 -19
- package/dist/chunk-N522P3G6.js.map +1 -0
- package/dist/chunk-OZCHIVAZ.js +35 -0
- package/dist/chunk-OZCHIVAZ.js.map +1 -0
- package/dist/{chunk-TSQ7AKFT.cjs → chunk-YMIMKO4W.cjs} +66 -25
- package/dist/chunk-YMIMKO4W.cjs.map +1 -0
- package/dist/forma-runtime-csp.js +1 -1
- package/dist/forma-runtime.js +1 -1
- package/dist/formajs-runtime-hardened.global.js +1 -1
- package/dist/formajs-runtime-hardened.global.js.map +1 -1
- package/dist/formajs-runtime.global.js +1 -1
- package/dist/formajs-runtime.global.js.map +1 -1
- package/dist/formajs.global.js +1 -1
- package/dist/formajs.global.js.map +1 -1
- package/dist/index.cjs +142 -118
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +70 -29
- package/dist/index.d.ts +70 -29
- package/dist/index.js +64 -60
- package/dist/index.js.map +1 -1
- package/dist/runtime-hardened.cjs +166 -39
- package/dist/runtime-hardened.cjs.map +1 -1
- package/dist/runtime-hardened.js +167 -40
- package/dist/runtime-hardened.js.map +1 -1
- package/dist/runtime.cjs +184 -57
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +162 -35
- package/dist/runtime.js.map +1 -1
- package/dist/signal-B4_wQJHs.d.cts +53 -0
- package/dist/signal-B4_wQJHs.d.ts +53 -0
- package/dist/ssr/index.cjs +37 -12
- package/dist/ssr/index.cjs.map +1 -1
- package/dist/ssr/index.js +37 -12
- package/dist/ssr/index.js.map +1 -1
- package/dist/tc39-compat.cjs +4 -12
- package/dist/tc39-compat.cjs.map +1 -1
- package/dist/tc39-compat.d.cts +1 -1
- package/dist/tc39-compat.d.ts +1 -1
- package/dist/tc39-compat.js +3 -11
- package/dist/tc39-compat.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-5H52PKGF.js.map +0 -1
- package/dist/chunk-FPSLC62A.cjs +0 -31
- package/dist/chunk-FPSLC62A.cjs.map +0 -1
- package/dist/chunk-KX5WRZH7.js +0 -27
- package/dist/chunk-KX5WRZH7.js.map +0 -1
- package/dist/chunk-TSQ7AKFT.cjs.map +0 -1
- package/dist/signal-CfLDwMyg.d.cts +0 -29
- 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
|
|
4
|
-
var
|
|
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\
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1849
|
-
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
2746
|
+
batch: chunkYMIMKO4W_cjs.batch
|
|
2620
2747
|
});
|
|
2621
2748
|
}
|
|
2622
2749
|
return _reconciler;
|