sibujs 3.2.2 → 3.3.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/dist/browser.cjs +217 -27
- package/dist/browser.js +5 -5
- package/dist/build.cjs +236 -105
- package/dist/build.js +14 -14
- package/dist/cdn.global.js +7 -7
- package/dist/{chunk-5N74TKLD.js → chunk-37BUKSLH.js} +1 -1
- package/dist/{chunk-BGNLPNGV.js → chunk-4UUMSLSL.js} +4 -4
- package/dist/{chunk-2UPRY23K.js → chunk-5VGSK6D2.js} +1 -1
- package/dist/{chunk-OYLPZO4N.js → chunk-6LTFHJQG.js} +4 -4
- package/dist/{chunk-VOCE4NNK.js → chunk-AMIKDMLP.js} +5 -5
- package/dist/{chunk-LMLD24FC.js → chunk-COY6PUD2.js} +7 -1
- package/dist/{chunk-YFDGQWDA.js → chunk-F7FXQ3QS.js} +1 -1
- package/dist/{chunk-V2MTG5FT.js → chunk-IKLYI3RF.js} +33 -16
- package/dist/{chunk-HMJFCBRR.js → chunk-L3GAGWCC.js} +10 -1
- package/dist/{chunk-X67UYC74.js → chunk-LU2MQXQQ.js} +14 -24
- package/dist/{chunk-4JCAUOLN.js → chunk-M5KBNOSJ.js} +22 -12
- package/dist/{chunk-FDY42FIU.js → chunk-MHBCEJQO.js} +2 -2
- package/dist/{chunk-RLUJL2MV.js → chunk-NHKQKKZU.js} +6 -7
- package/dist/{chunk-HXMS4SNP.js → chunk-R3QEDXFS.js} +2 -2
- package/dist/{chunk-NPIEEKPT.js → chunk-RYMOSG5B.js} +6 -6
- package/dist/{chunk-H6PCHJZQ.js → chunk-SLMFA3ZZ.js} +11 -3
- package/dist/{chunk-Z2FWAE4B.js → chunk-TEFZT5PJ.js} +84 -16
- package/dist/{chunk-7XDYVJLE.js → chunk-ULLTNDRA.js} +6 -6
- package/dist/{chunk-GOUM4JCT.js → chunk-VOVVTOEA.js} +2 -2
- package/dist/{chunk-FOI23UJL.js → chunk-WL7BIR6O.js} +1 -1
- package/dist/{chunk-JYXOEYI4.js → chunk-WW6DAGGR.js} +5 -5
- package/dist/{chunk-C427DVQF.js → chunk-WZG2SZOT.js} +22 -5
- package/dist/{chunk-NFYWLRUO.js → chunk-XH2RTYEQ.js} +3 -3
- package/dist/{chunk-2C4E3HBM.js → chunk-Z37APKBV.js} +5 -5
- package/dist/{chunk-RDRSWYNP.js → chunk-ZUVLC7TM.js} +1 -1
- package/dist/data.cjs +168 -24
- package/dist/data.js +8 -8
- package/dist/devtools.cjs +252 -32
- package/dist/devtools.js +7 -7
- package/dist/ecosystem.cjs +205 -64
- package/dist/ecosystem.js +10 -10
- package/dist/extras.cjs +245 -112
- package/dist/extras.js +24 -24
- package/dist/index.cjs +236 -105
- package/dist/index.d.cts +72 -8
- package/dist/index.d.ts +72 -8
- package/dist/index.js +14 -14
- package/dist/motion.cjs +336 -14
- package/dist/motion.js +4 -4
- package/dist/patterns.cjs +168 -24
- package/dist/patterns.js +6 -6
- package/dist/performance.cjs +305 -32
- package/dist/performance.js +8 -8
- package/dist/plugins.cjs +268 -69
- package/dist/plugins.js +12 -12
- package/dist/{ssr-2QDQ27EV.js → ssr-6D67RAVB.js} +3 -3
- package/dist/ssr.cjs +205 -63
- package/dist/ssr.js +11 -11
- package/dist/testing.cjs +415 -12
- package/dist/testing.js +16 -10
- package/dist/ui.cjs +248 -36
- package/dist/ui.js +9 -9
- package/dist/widgets.cjs +176 -26
- package/dist/widgets.js +8 -8
- package/package.json +1 -1
package/dist/build.cjs
CHANGED
|
@@ -1207,7 +1207,7 @@ __export(index_exports, {
|
|
|
1207
1207
|
registerComponent: () => registerComponent,
|
|
1208
1208
|
registerDisposer: () => registerDisposer,
|
|
1209
1209
|
resolveComponent: () => resolveComponent,
|
|
1210
|
-
retrack: () =>
|
|
1210
|
+
retrack: () => retrack2,
|
|
1211
1211
|
rp: () => rp,
|
|
1212
1212
|
rt: () => rt,
|
|
1213
1213
|
ruby: () => ruby,
|
|
@@ -1218,7 +1218,7 @@ __export(index_exports, {
|
|
|
1218
1218
|
section: () => section,
|
|
1219
1219
|
select: () => select,
|
|
1220
1220
|
setGlobalErrorHandler: () => setGlobalErrorHandler,
|
|
1221
|
-
setMaxDrainIterations: () =>
|
|
1221
|
+
setMaxDrainIterations: () => setMaxDrainIterations2,
|
|
1222
1222
|
show: () => show,
|
|
1223
1223
|
signal: () => signal,
|
|
1224
1224
|
slot: () => slot,
|
|
@@ -1250,7 +1250,7 @@ __export(index_exports, {
|
|
|
1250
1250
|
time: () => time,
|
|
1251
1251
|
title: () => title,
|
|
1252
1252
|
tr: () => tr,
|
|
1253
|
-
track: () =>
|
|
1253
|
+
track: () => track3,
|
|
1254
1254
|
transition: () => transition,
|
|
1255
1255
|
trapFocus: () => trapFocus,
|
|
1256
1256
|
trustHTML: () => trustHTML,
|
|
@@ -1258,7 +1258,7 @@ __export(index_exports, {
|
|
|
1258
1258
|
u: () => u,
|
|
1259
1259
|
ul: () => ul,
|
|
1260
1260
|
unregisterComponent: () => unregisterComponent,
|
|
1261
|
-
untracked: () =>
|
|
1261
|
+
untracked: () => untracked2,
|
|
1262
1262
|
use: () => use,
|
|
1263
1263
|
var_: () => var_,
|
|
1264
1264
|
video: () => video,
|
|
@@ -1270,7 +1270,13 @@ __export(index_exports, {
|
|
|
1270
1270
|
|
|
1271
1271
|
// src/core/dev.ts
|
|
1272
1272
|
function isDev() {
|
|
1273
|
-
return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ :
|
|
1273
|
+
return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : (
|
|
1274
|
+
// The bare `__SIBU_DEV__` is a bundler define that only exists in
|
|
1275
|
+
// production builds; under the test runner it is always undefined, so
|
|
1276
|
+
// this branch is unreachable here.
|
|
1277
|
+
/* v8 ignore next 2 */
|
|
1278
|
+
typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production"
|
|
1279
|
+
);
|
|
1274
1280
|
}
|
|
1275
1281
|
var _isDev = isDev();
|
|
1276
1282
|
function devAssert(condition, message) {
|
|
@@ -1327,7 +1333,9 @@ function sanitizeSrcset(value) {
|
|
|
1327
1333
|
}
|
|
1328
1334
|
return out.join(", ");
|
|
1329
1335
|
}
|
|
1336
|
+
var CSS_DANGER_GATE = /[(:@\\]/;
|
|
1330
1337
|
function sanitizeCSSValue(value) {
|
|
1338
|
+
if (!CSS_DANGER_GATE.test(value)) return value;
|
|
1331
1339
|
const decoded = value.replace(/\\([0-9a-fA-F]{1,6})\s?/g, (_m, hex) => {
|
|
1332
1340
|
const code2 = Number.parseInt(hex, 16);
|
|
1333
1341
|
if (!Number.isFinite(code2) || code2 < 0 || code2 > 1114111) return "";
|
|
@@ -1360,8 +1368,14 @@ var URL_ATTRIBUTES = /* @__PURE__ */ new Set([
|
|
|
1360
1368
|
function isUrlAttribute(attr) {
|
|
1361
1369
|
return URL_ATTRIBUTES.has(attr.toLowerCase());
|
|
1362
1370
|
}
|
|
1371
|
+
function sanitizeAttributeString(attr, value) {
|
|
1372
|
+
const lower = attr.toLowerCase();
|
|
1373
|
+
if (lower === "srcset") return sanitizeSrcset(value);
|
|
1374
|
+
if (URL_ATTRIBUTES.has(lower)) return sanitizeUrl(value);
|
|
1375
|
+
return value;
|
|
1376
|
+
}
|
|
1363
1377
|
|
|
1364
|
-
// src/reactivity/track.ts
|
|
1378
|
+
// src/reactivity/track-core.ts
|
|
1365
1379
|
var _isDev2 = isDev();
|
|
1366
1380
|
var POOL_MAX = 4096;
|
|
1367
1381
|
var nodePool = [];
|
|
@@ -1475,6 +1489,9 @@ function resumeTracking() {
|
|
|
1475
1489
|
trackingSuspended = false;
|
|
1476
1490
|
}
|
|
1477
1491
|
}
|
|
1492
|
+
function isTrackingSuspended() {
|
|
1493
|
+
return trackingSuspended;
|
|
1494
|
+
}
|
|
1478
1495
|
function untracked(fn) {
|
|
1479
1496
|
suspendTracking();
|
|
1480
1497
|
try {
|
|
@@ -1592,6 +1609,11 @@ function cleanup(subscriber) {
|
|
|
1592
1609
|
var maxSubscriberRepeats = 50;
|
|
1593
1610
|
var maxDrainIterations = 1e6;
|
|
1594
1611
|
var drainEpoch = 0;
|
|
1612
|
+
function setMaxSubscriberRepeats(n) {
|
|
1613
|
+
const prev = maxSubscriberRepeats;
|
|
1614
|
+
if (Number.isFinite(n) && n > 0) maxSubscriberRepeats = Math.floor(n);
|
|
1615
|
+
return prev;
|
|
1616
|
+
}
|
|
1595
1617
|
function setMaxDrainIterations(n) {
|
|
1596
1618
|
const prev = maxDrainIterations;
|
|
1597
1619
|
if (Number.isFinite(n) && n > 0) maxDrainIterations = Math.floor(n);
|
|
@@ -1745,15 +1767,94 @@ function notifySubscribers(signal2) {
|
|
|
1745
1767
|
}
|
|
1746
1768
|
}
|
|
1747
1769
|
}
|
|
1770
|
+
function getSubscriberCount(signal2) {
|
|
1771
|
+
return signal2.__sc ?? 0;
|
|
1772
|
+
}
|
|
1773
|
+
function getSubscriberDeps(subscriber) {
|
|
1774
|
+
const sub2 = subscriber;
|
|
1775
|
+
const out = [];
|
|
1776
|
+
let node = sub2.depsHead ?? null;
|
|
1777
|
+
while (node) {
|
|
1778
|
+
if (node.sig) out.push(node.sig);
|
|
1779
|
+
node = node.subNext;
|
|
1780
|
+
}
|
|
1781
|
+
return out;
|
|
1782
|
+
}
|
|
1783
|
+
function forEachSubscriber(signal2, visit) {
|
|
1784
|
+
let node = signal2.subsHead ?? null;
|
|
1785
|
+
while (node) {
|
|
1786
|
+
const s2 = node.sub;
|
|
1787
|
+
if (s2) visit(s2);
|
|
1788
|
+
node = node.sigNext;
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1748
1791
|
|
|
1749
|
-
// src/reactivity/
|
|
1792
|
+
// src/reactivity/track.ts
|
|
1750
1793
|
var _isDev3 = isDev();
|
|
1794
|
+
var _runtimeVersion = typeof __SIBU_VERSION__ !== "undefined" ? __SIBU_VERSION__ : "dev";
|
|
1795
|
+
var REGISTRY_KEY = /* @__PURE__ */ Symbol.for("sibujs.reactive.v1");
|
|
1796
|
+
function resolveReactiveApi() {
|
|
1797
|
+
const g2 = globalThis;
|
|
1798
|
+
const existing = g2[REGISTRY_KEY];
|
|
1799
|
+
if (existing) {
|
|
1800
|
+
if (_isDev3 && !existing.__dupWarned) {
|
|
1801
|
+
existing.__dupWarned = true;
|
|
1802
|
+
devWarn(
|
|
1803
|
+
`Multiple instances of the reactive runtime detected on this page (active: ${existing.version}, duplicate: ${_runtimeVersion}). Reactivity still works \u2014 all copies share the first one \u2014 but de-duplicate sibujs in your bundler (e.g. Vite optimizeDeps.exclude: ['sibujs'] or resolve.dedupe: ['sibujs']).`
|
|
1804
|
+
);
|
|
1805
|
+
}
|
|
1806
|
+
return existing;
|
|
1807
|
+
}
|
|
1808
|
+
const local = {
|
|
1809
|
+
suspendTracking,
|
|
1810
|
+
resumeTracking,
|
|
1811
|
+
isTrackingSuspended,
|
|
1812
|
+
untracked,
|
|
1813
|
+
retrack,
|
|
1814
|
+
track,
|
|
1815
|
+
reactiveBinding,
|
|
1816
|
+
recordDependency,
|
|
1817
|
+
cleanup,
|
|
1818
|
+
setMaxSubscriberRepeats,
|
|
1819
|
+
setMaxDrainIterations,
|
|
1820
|
+
drainNotificationQueue,
|
|
1821
|
+
queueSignalNotification,
|
|
1822
|
+
notifySubscribers,
|
|
1823
|
+
getSubscriberCount,
|
|
1824
|
+
getSubscriberDeps,
|
|
1825
|
+
forEachSubscriber,
|
|
1826
|
+
version: _runtimeVersion
|
|
1827
|
+
};
|
|
1828
|
+
g2[REGISTRY_KEY] = local;
|
|
1829
|
+
return local;
|
|
1830
|
+
}
|
|
1831
|
+
var API = resolveReactiveApi();
|
|
1832
|
+
var suspendTracking2 = API.suspendTracking;
|
|
1833
|
+
var resumeTracking2 = API.resumeTracking;
|
|
1834
|
+
var isTrackingSuspended2 = API.isTrackingSuspended;
|
|
1835
|
+
var untracked2 = API.untracked;
|
|
1836
|
+
var retrack2 = API.retrack;
|
|
1837
|
+
var track2 = API.track;
|
|
1838
|
+
var reactiveBinding2 = API.reactiveBinding;
|
|
1839
|
+
var recordDependency2 = API.recordDependency;
|
|
1840
|
+
var cleanup2 = API.cleanup;
|
|
1841
|
+
var setMaxSubscriberRepeats2 = API.setMaxSubscriberRepeats;
|
|
1842
|
+
var setMaxDrainIterations2 = API.setMaxDrainIterations;
|
|
1843
|
+
var drainNotificationQueue2 = API.drainNotificationQueue;
|
|
1844
|
+
var queueSignalNotification2 = API.queueSignalNotification;
|
|
1845
|
+
var notifySubscribers2 = API.notifySubscribers;
|
|
1846
|
+
var getSubscriberCount2 = API.getSubscriberCount;
|
|
1847
|
+
var getSubscriberDeps2 = API.getSubscriberDeps;
|
|
1848
|
+
var forEachSubscriber2 = API.forEachSubscriber;
|
|
1849
|
+
|
|
1850
|
+
// src/reactivity/bindAttribute.ts
|
|
1851
|
+
var _isDev4 = isDev();
|
|
1751
1852
|
function setProp(el, key, val) {
|
|
1752
1853
|
el[key] = val;
|
|
1753
1854
|
}
|
|
1754
1855
|
function bindAttribute(el, attr, getter) {
|
|
1755
1856
|
if (isEventHandlerAttr(attr)) {
|
|
1756
|
-
if (
|
|
1857
|
+
if (_isDev4)
|
|
1757
1858
|
devWarn(
|
|
1758
1859
|
`bindAttribute: refusing to bind event-handler attribute "${attr}". Use on:{ ${attr.slice(2)}: fn } instead.`
|
|
1759
1860
|
);
|
|
@@ -1765,7 +1866,7 @@ function bindAttribute(el, attr, getter) {
|
|
|
1765
1866
|
try {
|
|
1766
1867
|
value = getter();
|
|
1767
1868
|
} catch (err) {
|
|
1768
|
-
if (
|
|
1869
|
+
if (_isDev4)
|
|
1769
1870
|
devWarn(`bindAttribute: getter for "${attr}" threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
1770
1871
|
return;
|
|
1771
1872
|
}
|
|
@@ -1783,10 +1884,10 @@ function bindAttribute(el, attr, getter) {
|
|
|
1783
1884
|
if ((attr === "value" || attr === "checked") && attr in el) {
|
|
1784
1885
|
setProp(el, attr, attr === "checked" ? Boolean(value) : str);
|
|
1785
1886
|
} else {
|
|
1786
|
-
el.setAttribute(attr,
|
|
1887
|
+
el.setAttribute(attr, sanitizeAttributeString(attr, str));
|
|
1787
1888
|
}
|
|
1788
1889
|
}
|
|
1789
|
-
return
|
|
1890
|
+
return reactiveBinding2(commit);
|
|
1790
1891
|
}
|
|
1791
1892
|
function bindDynamic(el, nameGetter, valueGetter) {
|
|
1792
1893
|
let prevName = null;
|
|
@@ -1795,14 +1896,14 @@ function bindDynamic(el, nameGetter, valueGetter) {
|
|
|
1795
1896
|
try {
|
|
1796
1897
|
name = typeof nameGetter === "function" ? nameGetter() : nameGetter;
|
|
1797
1898
|
} catch (err) {
|
|
1798
|
-
if (
|
|
1899
|
+
if (_isDev4) devWarn(`bindDynamic: name getter threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
1799
1900
|
return;
|
|
1800
1901
|
}
|
|
1801
1902
|
let value;
|
|
1802
1903
|
try {
|
|
1803
1904
|
value = typeof valueGetter === "function" ? valueGetter() : valueGetter;
|
|
1804
1905
|
} catch (err) {
|
|
1805
|
-
if (
|
|
1906
|
+
if (_isDev4) devWarn(`bindDynamic: value getter threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
1806
1907
|
return;
|
|
1807
1908
|
}
|
|
1808
1909
|
if (isEventHandlerAttr(name)) return;
|
|
@@ -1813,11 +1914,11 @@ function bindDynamic(el, nameGetter, valueGetter) {
|
|
|
1813
1914
|
if ((name === "value" || name === "checked") && name in el) {
|
|
1814
1915
|
setProp(el, name, name === "checked" ? Boolean(value) : str);
|
|
1815
1916
|
} else {
|
|
1816
|
-
el.setAttribute(name,
|
|
1917
|
+
el.setAttribute(name, sanitizeAttributeString(name, str));
|
|
1817
1918
|
}
|
|
1818
1919
|
prevName = name;
|
|
1819
1920
|
}
|
|
1820
|
-
const teardown =
|
|
1921
|
+
const teardown = reactiveBinding2(commit);
|
|
1821
1922
|
return () => {
|
|
1822
1923
|
teardown();
|
|
1823
1924
|
if (prevName !== null) {
|
|
@@ -1828,7 +1929,7 @@ function bindDynamic(el, nameGetter, valueGetter) {
|
|
|
1828
1929
|
|
|
1829
1930
|
// src/core/rendering/dispose.ts
|
|
1830
1931
|
var elementDisposers = /* @__PURE__ */ new WeakMap();
|
|
1831
|
-
var
|
|
1932
|
+
var _isDev5 = isDev();
|
|
1832
1933
|
var activeBindingCount = 0;
|
|
1833
1934
|
function registerDisposer(node, teardown) {
|
|
1834
1935
|
let disposers = elementDisposers.get(node);
|
|
@@ -1837,7 +1938,7 @@ function registerDisposer(node, teardown) {
|
|
|
1837
1938
|
elementDisposers.set(node, disposers);
|
|
1838
1939
|
}
|
|
1839
1940
|
disposers.push(teardown);
|
|
1840
|
-
if (
|
|
1941
|
+
if (_isDev5) activeBindingCount++;
|
|
1841
1942
|
}
|
|
1842
1943
|
function dispose(node) {
|
|
1843
1944
|
const stack = [node];
|
|
@@ -1856,12 +1957,12 @@ function dispose(node) {
|
|
|
1856
1957
|
if (disposers) {
|
|
1857
1958
|
const snapshot = disposers.slice();
|
|
1858
1959
|
elementDisposers.delete(current);
|
|
1859
|
-
if (
|
|
1960
|
+
if (_isDev5) activeBindingCount -= snapshot.length;
|
|
1860
1961
|
for (const d of snapshot) {
|
|
1861
1962
|
try {
|
|
1862
1963
|
d();
|
|
1863
1964
|
} catch (err) {
|
|
1864
|
-
if (
|
|
1965
|
+
if (_isDev5 && typeof console !== "undefined") {
|
|
1865
1966
|
console.warn("[SibuJS] Disposer threw during cleanup:", err);
|
|
1866
1967
|
}
|
|
1867
1968
|
}
|
|
@@ -1872,12 +1973,12 @@ function dispose(node) {
|
|
|
1872
1973
|
if (!added || added.length === 0) break;
|
|
1873
1974
|
const moreSnapshot = added.slice();
|
|
1874
1975
|
elementDisposers.delete(current);
|
|
1875
|
-
if (
|
|
1976
|
+
if (_isDev5) activeBindingCount -= moreSnapshot.length;
|
|
1876
1977
|
for (const d of moreSnapshot) {
|
|
1877
1978
|
try {
|
|
1878
1979
|
d();
|
|
1879
1980
|
} catch (err) {
|
|
1880
|
-
if (
|
|
1981
|
+
if (_isDev5 && typeof console !== "undefined") {
|
|
1881
1982
|
console.warn("[SibuJS] Disposer threw during cleanup:", err);
|
|
1882
1983
|
}
|
|
1883
1984
|
}
|
|
@@ -1887,7 +1988,7 @@ function dispose(node) {
|
|
|
1887
1988
|
}
|
|
1888
1989
|
}
|
|
1889
1990
|
function checkLeaks(warnThreshold = 0) {
|
|
1890
|
-
if (!
|
|
1991
|
+
if (!_isDev5) return 0;
|
|
1891
1992
|
if (warnThreshold > 0 && activeBindingCount > warnThreshold) {
|
|
1892
1993
|
devWarn(
|
|
1893
1994
|
`checkLeaks: ${activeBindingCount} active DOM bindings detected. Expected \u2264${warnThreshold}. This may indicate a component was removed from the DOM without calling dispose().`
|
|
@@ -1897,7 +1998,7 @@ function checkLeaks(warnThreshold = 0) {
|
|
|
1897
1998
|
}
|
|
1898
1999
|
|
|
1899
2000
|
// src/reactivity/bindChildNode.ts
|
|
1900
|
-
var
|
|
2001
|
+
var _isDev6 = isDev();
|
|
1901
2002
|
function bindChildNode(placeholder, getter) {
|
|
1902
2003
|
let lastNodes = [];
|
|
1903
2004
|
function commit() {
|
|
@@ -1905,7 +2006,7 @@ function bindChildNode(placeholder, getter) {
|
|
|
1905
2006
|
try {
|
|
1906
2007
|
result = getter();
|
|
1907
2008
|
} catch (err) {
|
|
1908
|
-
if (
|
|
2009
|
+
if (_isDev6) devWarn(`bindChildNode: getter threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
1909
2010
|
return;
|
|
1910
2011
|
}
|
|
1911
2012
|
if (result == null || typeof result === "boolean") {
|
|
@@ -1931,7 +2032,7 @@ function bindChildNode(placeholder, getter) {
|
|
|
1931
2032
|
if (item == null || typeof item === "boolean") continue;
|
|
1932
2033
|
const node = item instanceof Node ? item : document.createTextNode(String(item));
|
|
1933
2034
|
if (seen.has(node)) {
|
|
1934
|
-
if (
|
|
2035
|
+
if (_isDev6)
|
|
1935
2036
|
devWarn("bindChildNode: duplicate node reference in array \u2014 only the first occurrence is rendered.");
|
|
1936
2037
|
continue;
|
|
1937
2038
|
}
|
|
@@ -1966,18 +2067,15 @@ function bindChildNode(placeholder, getter) {
|
|
|
1966
2067
|
}
|
|
1967
2068
|
lastNodes = newNodes;
|
|
1968
2069
|
}
|
|
1969
|
-
return
|
|
2070
|
+
return reactiveBinding2(commit);
|
|
1970
2071
|
}
|
|
1971
2072
|
|
|
1972
2073
|
// src/core/rendering/tagFactory.ts
|
|
1973
2074
|
var SVG_NS = "http://www.w3.org/2000/svg";
|
|
1974
|
-
var
|
|
2075
|
+
var _isDev7 = isDev();
|
|
1975
2076
|
var BLOCKED_TAGS = /* @__PURE__ */ new Set(["script", "iframe", "object", "embed", "frame", "frameset"]);
|
|
1976
|
-
function
|
|
1977
|
-
|
|
1978
|
-
if (BLOCKED_TAGS.has(lower)) {
|
|
1979
|
-
throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
|
|
1980
|
-
}
|
|
2077
|
+
function isBlockedTag(tag) {
|
|
2078
|
+
return BLOCKED_TAGS.has(tag.toLowerCase());
|
|
1981
2079
|
}
|
|
1982
2080
|
var CLOBBER_RISKY_IDS = /* @__PURE__ */ new Set([
|
|
1983
2081
|
"config",
|
|
@@ -2017,7 +2115,7 @@ function toKebab(prop) {
|
|
|
2017
2115
|
}
|
|
2018
2116
|
function applyStyle(el, style2) {
|
|
2019
2117
|
if (typeof style2 === "function") {
|
|
2020
|
-
const teardown =
|
|
2118
|
+
const teardown = track2(() => {
|
|
2021
2119
|
el.setAttribute("style", style2());
|
|
2022
2120
|
});
|
|
2023
2121
|
registerDisposer(el, teardown);
|
|
@@ -2033,7 +2131,7 @@ function applyStyle(el, style2) {
|
|
|
2033
2131
|
const name = toKebab(prop);
|
|
2034
2132
|
if (typeof val === "function") {
|
|
2035
2133
|
const getter = val;
|
|
2036
|
-
const teardown =
|
|
2134
|
+
const teardown = track2(() => {
|
|
2037
2135
|
htmlEl.style.setProperty(name, sanitizeCSSValue(String(getter())));
|
|
2038
2136
|
});
|
|
2039
2137
|
registerDisposer(el, teardown);
|
|
@@ -2048,7 +2146,7 @@ function applyClass(el, cls) {
|
|
|
2048
2146
|
return;
|
|
2049
2147
|
}
|
|
2050
2148
|
if (typeof cls === "function") {
|
|
2051
|
-
const teardown =
|
|
2149
|
+
const teardown = track2(() => {
|
|
2052
2150
|
el.setAttribute("class", cls());
|
|
2053
2151
|
});
|
|
2054
2152
|
registerDisposer(el, teardown);
|
|
@@ -2075,7 +2173,7 @@ function applyClass(el, cls) {
|
|
|
2075
2173
|
}
|
|
2076
2174
|
el.setAttribute("class", r);
|
|
2077
2175
|
};
|
|
2078
|
-
const teardown =
|
|
2176
|
+
const teardown = track2(update);
|
|
2079
2177
|
registerDisposer(el, teardown);
|
|
2080
2178
|
} else {
|
|
2081
2179
|
el.setAttribute("class", result);
|
|
@@ -2132,8 +2230,11 @@ function appendChildren(el, nodes) {
|
|
|
2132
2230
|
}
|
|
2133
2231
|
}
|
|
2134
2232
|
var tagFactory = (tag, ns) => {
|
|
2233
|
+
const blocked = isBlockedTag(tag);
|
|
2135
2234
|
return (first, second) => {
|
|
2136
|
-
|
|
2235
|
+
if (blocked) {
|
|
2236
|
+
throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
|
|
2237
|
+
}
|
|
2137
2238
|
const el = ns ? document.createElementNS(ns, tag) : document.createElement(tag);
|
|
2138
2239
|
if (first === void 0) return el;
|
|
2139
2240
|
if (typeof first === "string") {
|
|
@@ -2142,7 +2243,7 @@ var tagFactory = (tag, ns) => {
|
|
|
2142
2243
|
appendChildren(el, second);
|
|
2143
2244
|
return el;
|
|
2144
2245
|
}
|
|
2145
|
-
if (
|
|
2246
|
+
if (_isDev7 && looksLikeClassList(first)) {
|
|
2146
2247
|
devWarn(
|
|
2147
2248
|
`tagFactory: lone string "${first}" looks like a class list but is being rendered as TEXT. For a class, use ${tag}({ class: "${first}" }) \u2014 or ${tag}("${first}", children) to set the class AND add children.`
|
|
2148
2249
|
);
|
|
@@ -2163,7 +2264,7 @@ var tagFactory = (tag, ns) => {
|
|
|
2163
2264
|
if (pClass != null) applyClass(el, pClass);
|
|
2164
2265
|
const pId = props.id;
|
|
2165
2266
|
if (pId != null) {
|
|
2166
|
-
if (
|
|
2267
|
+
if (_isDev7 && typeof pId === "string" && CLOBBER_RISKY_IDS.has(pId.toLowerCase())) {
|
|
2167
2268
|
devWarn(
|
|
2168
2269
|
`tagFactory: element id="${pId}" matches a common global and may cause DOM clobbering. Avoid setting ids from untrusted input.`
|
|
2169
2270
|
);
|
|
@@ -2178,7 +2279,7 @@ var tagFactory = (tag, ns) => {
|
|
|
2178
2279
|
const handler = pOn[ev];
|
|
2179
2280
|
if (typeof handler === "function") {
|
|
2180
2281
|
el.addEventListener(ev, handler);
|
|
2181
|
-
} else if (
|
|
2282
|
+
} else if (_isDev7) {
|
|
2182
2283
|
devWarn(
|
|
2183
2284
|
`tagFactory: on.${ev} handler is not a function (got ${typeof handler}). Event listener was not attached.`
|
|
2184
2285
|
);
|
|
@@ -2203,7 +2304,6 @@ var tagFactory = (tag, ns) => {
|
|
|
2203
2304
|
default: {
|
|
2204
2305
|
const value = props[key];
|
|
2205
2306
|
if (value == null) continue;
|
|
2206
|
-
const lkey = key.toLowerCase();
|
|
2207
2307
|
if (isEventHandlerAttr(key)) continue;
|
|
2208
2308
|
if (typeof value === "function") {
|
|
2209
2309
|
registerDisposer(el, bindAttribute(el, key, value));
|
|
@@ -2216,14 +2316,7 @@ var tagFactory = (tag, ns) => {
|
|
|
2216
2316
|
el.removeAttribute(key);
|
|
2217
2317
|
}
|
|
2218
2318
|
} else {
|
|
2219
|
-
|
|
2220
|
-
if (lkey === "srcset") {
|
|
2221
|
-
el.setAttribute(key, sanitizeSrcset(str));
|
|
2222
|
-
} else if (isUrlAttribute(lkey)) {
|
|
2223
|
-
el.setAttribute(key, sanitizeUrl(str));
|
|
2224
|
-
} else {
|
|
2225
|
-
el.setAttribute(key, str);
|
|
2226
|
-
}
|
|
2319
|
+
el.setAttribute(key, sanitizeAttributeString(key, String(value)));
|
|
2227
2320
|
}
|
|
2228
2321
|
}
|
|
2229
2322
|
}
|
|
@@ -2299,7 +2392,7 @@ var area = tagFactory("area");
|
|
|
2299
2392
|
var audio = tagFactory("audio");
|
|
2300
2393
|
var img = tagFactory("img");
|
|
2301
2394
|
var map = tagFactory("map");
|
|
2302
|
-
var
|
|
2395
|
+
var track3 = tagFactory("track");
|
|
2303
2396
|
var video = tagFactory("video");
|
|
2304
2397
|
var embed = tagFactory("embed");
|
|
2305
2398
|
var iframe = tagFactory("iframe");
|
|
@@ -2375,7 +2468,7 @@ var marquee = tagFactory("marquee");
|
|
|
2375
2468
|
var customElement = (tagName) => tagFactory(tagName);
|
|
2376
2469
|
|
|
2377
2470
|
// src/core/rendering/htm.ts
|
|
2378
|
-
var
|
|
2471
|
+
var _isDev8 = isDev();
|
|
2379
2472
|
var RAW_TEXT_TAGS = /* @__PURE__ */ new Set(["script", "style"]);
|
|
2380
2473
|
var VOID_ELEMENTS3 = /* @__PURE__ */ new Set([
|
|
2381
2474
|
"area",
|
|
@@ -2671,7 +2764,7 @@ function executeElement(tmpl, values) {
|
|
|
2671
2764
|
const fn = values[attr.idx];
|
|
2672
2765
|
if (typeof fn === "function") {
|
|
2673
2766
|
el.addEventListener(attr.name, fn);
|
|
2674
|
-
} else if (
|
|
2767
|
+
} else if (_isDev8) {
|
|
2675
2768
|
devWarn(
|
|
2676
2769
|
`html: on:${attr.name} handler is not a function (got ${typeof fn}). Event listener was not attached.`
|
|
2677
2770
|
);
|
|
@@ -2799,7 +2892,7 @@ function mount(component, container) {
|
|
|
2799
2892
|
}
|
|
2800
2893
|
|
|
2801
2894
|
// src/core/rendering/each.ts
|
|
2802
|
-
var
|
|
2895
|
+
var _isDev9 = isDev();
|
|
2803
2896
|
function resolveNodeChild(child) {
|
|
2804
2897
|
if (typeof child === "function") {
|
|
2805
2898
|
return resolveNodeChild(child());
|
|
@@ -2884,7 +2977,7 @@ function each(getArray, render, options) {
|
|
|
2884
2977
|
workMap.clear();
|
|
2885
2978
|
keyIndexMap.clear();
|
|
2886
2979
|
for (let i2 = 0; i2 < newLen; i2++) {
|
|
2887
|
-
if (
|
|
2980
|
+
if (_isDev9 && keyIndexMap.has(newKeys[i2])) {
|
|
2888
2981
|
devWarn(
|
|
2889
2982
|
`each: duplicate key "${String(newKeys[i2])}" at index ${i2} (first seen at ${keyIndexMap.get(newKeys[i2])}). Keys must be unique \u2014 duplicates cause rows to be dropped or mis-ordered.`
|
|
2890
2983
|
);
|
|
@@ -2899,12 +2992,12 @@ function each(getArray, render, options) {
|
|
|
2899
2992
|
node = existing;
|
|
2900
2993
|
} else {
|
|
2901
2994
|
const itemKey = key;
|
|
2902
|
-
const itemGetter = () =>
|
|
2995
|
+
const itemGetter = () => untracked2(() => getArray()[keyIndexMap.get(itemKey)]);
|
|
2903
2996
|
const indexGetter = () => keyIndexMap.get(itemKey);
|
|
2904
2997
|
try {
|
|
2905
2998
|
node = resolveNodeChild(render(itemGetter, indexGetter));
|
|
2906
2999
|
} catch (err) {
|
|
2907
|
-
if (
|
|
3000
|
+
if (_isDev9) {
|
|
2908
3001
|
devWarn(
|
|
2909
3002
|
`each: render threw for item at index ${i2} (key="${newKeys[i2]}"): ${err instanceof Error ? err.message : String(err)}`
|
|
2910
3003
|
);
|
|
@@ -2918,7 +3011,7 @@ function each(getArray, render, options) {
|
|
|
2918
3011
|
target.dispatchEvent(
|
|
2919
3012
|
new CustomEvent("sibu:error-propagate", { bubbles: true, detail: { error: errorObj } })
|
|
2920
3013
|
);
|
|
2921
|
-
} else if (
|
|
3014
|
+
} else if (_isDev9) {
|
|
2922
3015
|
devWarn(`each: error not surfaced \u2014 anchor detached: ${errorObj.message}`);
|
|
2923
3016
|
}
|
|
2924
3017
|
} catch {
|
|
@@ -2992,7 +3085,7 @@ function each(getArray, render, options) {
|
|
|
2992
3085
|
workMap = tmp;
|
|
2993
3086
|
initialized = true;
|
|
2994
3087
|
};
|
|
2995
|
-
const untrack =
|
|
3088
|
+
const untrack = track2(update);
|
|
2996
3089
|
registerDisposer(anchor, untrack);
|
|
2997
3090
|
if (!initialized) {
|
|
2998
3091
|
queueMicrotask(() => {
|
|
@@ -3105,7 +3198,7 @@ function DynamicComponent(is) {
|
|
|
3105
3198
|
}
|
|
3106
3199
|
container.replaceChildren(el);
|
|
3107
3200
|
}
|
|
3108
|
-
const untrack =
|
|
3201
|
+
const untrack = track2(render);
|
|
3109
3202
|
registerDisposer(container, untrack);
|
|
3110
3203
|
return container;
|
|
3111
3204
|
}
|
|
@@ -3120,7 +3213,7 @@ function show(condition, element) {
|
|
|
3120
3213
|
const update = () => {
|
|
3121
3214
|
element.style.display = condition() ? "" : "none";
|
|
3122
3215
|
};
|
|
3123
|
-
registerDisposer(element,
|
|
3216
|
+
registerDisposer(element, track2(update));
|
|
3124
3217
|
return element;
|
|
3125
3218
|
}
|
|
3126
3219
|
function when(condition, thenBranch, elseBranch) {
|
|
@@ -3147,7 +3240,7 @@ function when(condition, thenBranch, elseBranch) {
|
|
|
3147
3240
|
}
|
|
3148
3241
|
initialized = true;
|
|
3149
3242
|
};
|
|
3150
|
-
registerDisposer(anchor,
|
|
3243
|
+
registerDisposer(anchor, track2(update));
|
|
3151
3244
|
if (!initialized) {
|
|
3152
3245
|
queueMicrotask(() => {
|
|
3153
3246
|
if (!initialized && anchor.parentNode) update();
|
|
@@ -3182,7 +3275,7 @@ function match(value, cases, fallback) {
|
|
|
3182
3275
|
}
|
|
3183
3276
|
initialized = true;
|
|
3184
3277
|
};
|
|
3185
|
-
registerDisposer(anchor,
|
|
3278
|
+
registerDisposer(anchor, track2(update));
|
|
3186
3279
|
if (!initialized) {
|
|
3187
3280
|
queueMicrotask(() => {
|
|
3188
3281
|
if (!initialized && anchor.parentNode) update();
|
|
@@ -3251,7 +3344,7 @@ function KeepAlive(activeKey, cases, options) {
|
|
|
3251
3344
|
currentNode = node;
|
|
3252
3345
|
initialized = true;
|
|
3253
3346
|
};
|
|
3254
|
-
const untrack =
|
|
3347
|
+
const untrack = track2(update);
|
|
3255
3348
|
if (!initialized) {
|
|
3256
3349
|
queueMicrotask(() => {
|
|
3257
3350
|
if (!initialized && anchor.parentNode) update();
|
|
@@ -3273,9 +3366,9 @@ function KeepAlive(activeKey, cases, options) {
|
|
|
3273
3366
|
|
|
3274
3367
|
// src/core/rendering/action.ts
|
|
3275
3368
|
function action(element, actionFn, param2) {
|
|
3276
|
-
const
|
|
3277
|
-
if (typeof
|
|
3278
|
-
registerDisposer(element,
|
|
3369
|
+
const cleanup3 = actionFn(element, param2);
|
|
3370
|
+
if (typeof cleanup3 === "function") {
|
|
3371
|
+
registerDisposer(element, cleanup3);
|
|
3279
3372
|
}
|
|
3280
3373
|
}
|
|
3281
3374
|
var clickOutside = (element, callback) => {
|
|
@@ -3409,7 +3502,7 @@ function __resetIdCounter() {
|
|
|
3409
3502
|
// src/reactivity/batch.ts
|
|
3410
3503
|
var batchDepth = 0;
|
|
3411
3504
|
var pendingSignals = /* @__PURE__ */ new Set();
|
|
3412
|
-
function
|
|
3505
|
+
function batchImpl(fn) {
|
|
3413
3506
|
batchDepth++;
|
|
3414
3507
|
try {
|
|
3415
3508
|
return fn();
|
|
@@ -3420,28 +3513,45 @@ function batch(fn) {
|
|
|
3420
3513
|
}
|
|
3421
3514
|
}
|
|
3422
3515
|
}
|
|
3423
|
-
function
|
|
3516
|
+
function enqueueBatchedSignalImpl(signal2) {
|
|
3424
3517
|
if (batchDepth === 0) return false;
|
|
3425
3518
|
pendingSignals.add(signal2);
|
|
3426
3519
|
return true;
|
|
3427
3520
|
}
|
|
3428
|
-
function
|
|
3521
|
+
function isBatchingImpl() {
|
|
3429
3522
|
return batchDepth > 0;
|
|
3430
3523
|
}
|
|
3431
3524
|
function flushBatch() {
|
|
3432
3525
|
try {
|
|
3433
3526
|
for (const signal2 of pendingSignals) {
|
|
3434
|
-
|
|
3527
|
+
queueSignalNotification2(signal2);
|
|
3435
3528
|
}
|
|
3436
3529
|
} finally {
|
|
3437
3530
|
pendingSignals.clear();
|
|
3438
3531
|
}
|
|
3439
|
-
|
|
3532
|
+
drainNotificationQueue2();
|
|
3440
3533
|
}
|
|
3534
|
+
var BATCH_REGISTRY_KEY = /* @__PURE__ */ Symbol.for("sibujs.reactive.batch.v1");
|
|
3535
|
+
function resolveBatchApi() {
|
|
3536
|
+
const g2 = globalThis;
|
|
3537
|
+
const existing = g2[BATCH_REGISTRY_KEY];
|
|
3538
|
+
if (existing) return existing;
|
|
3539
|
+
const local = {
|
|
3540
|
+
batch: batchImpl,
|
|
3541
|
+
enqueueBatchedSignal: enqueueBatchedSignalImpl,
|
|
3542
|
+
isBatching: isBatchingImpl
|
|
3543
|
+
};
|
|
3544
|
+
g2[BATCH_REGISTRY_KEY] = local;
|
|
3545
|
+
return local;
|
|
3546
|
+
}
|
|
3547
|
+
var API2 = resolveBatchApi();
|
|
3548
|
+
var batch = API2.batch;
|
|
3549
|
+
var enqueueBatchedSignal = API2.enqueueBatchedSignal;
|
|
3550
|
+
var isBatching = API2.isBatching;
|
|
3441
3551
|
|
|
3442
3552
|
// src/core/signals/signal.ts
|
|
3443
3553
|
var _g = globalThis;
|
|
3444
|
-
var
|
|
3554
|
+
var _isDev10 = isDev();
|
|
3445
3555
|
function signal(initial, options) {
|
|
3446
3556
|
const state = {
|
|
3447
3557
|
value: initial,
|
|
@@ -3452,11 +3562,11 @@ function signal(initial, options) {
|
|
|
3452
3562
|
__activeNode: null,
|
|
3453
3563
|
__name: void 0
|
|
3454
3564
|
};
|
|
3455
|
-
const debugName =
|
|
3565
|
+
const debugName = _isDev10 ? options?.name : void 0;
|
|
3456
3566
|
const equalsFn = options?.equals;
|
|
3457
3567
|
if (debugName) state.__name = debugName;
|
|
3458
3568
|
function get() {
|
|
3459
|
-
|
|
3569
|
+
recordDependency2(state);
|
|
3460
3570
|
return state.value;
|
|
3461
3571
|
}
|
|
3462
3572
|
get.__signal = state;
|
|
@@ -3469,15 +3579,15 @@ function signal(initial, options) {
|
|
|
3469
3579
|
if (equalsFn(prev, newValue)) return;
|
|
3470
3580
|
state.value = newValue;
|
|
3471
3581
|
state.__v++;
|
|
3472
|
-
if (
|
|
3582
|
+
if (_isDev10) {
|
|
3473
3583
|
const hook = _g.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
|
|
3474
3584
|
if (hook) hook.emit("signal:update", { signal: state, name: debugName, oldValue: prev, newValue });
|
|
3475
3585
|
}
|
|
3476
3586
|
if (!enqueueBatchedSignal(state)) {
|
|
3477
|
-
|
|
3587
|
+
notifySubscribers2(state);
|
|
3478
3588
|
}
|
|
3479
3589
|
};
|
|
3480
|
-
} else if (
|
|
3590
|
+
} else if (_isDev10) {
|
|
3481
3591
|
set = (next) => {
|
|
3482
3592
|
const prev = state.value;
|
|
3483
3593
|
const newValue = typeof next === "function" ? next(prev) : next;
|
|
@@ -3487,7 +3597,7 @@ function signal(initial, options) {
|
|
|
3487
3597
|
const hook = _g.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
|
|
3488
3598
|
if (hook) hook.emit("signal:update", { signal: state, name: debugName, oldValue: prev, newValue });
|
|
3489
3599
|
if (!enqueueBatchedSignal(state)) {
|
|
3490
|
-
|
|
3600
|
+
notifySubscribers2(state);
|
|
3491
3601
|
}
|
|
3492
3602
|
};
|
|
3493
3603
|
} else {
|
|
@@ -3498,11 +3608,11 @@ function signal(initial, options) {
|
|
|
3498
3608
|
state.value = newValue;
|
|
3499
3609
|
state.__v++;
|
|
3500
3610
|
if (!enqueueBatchedSignal(state)) {
|
|
3501
|
-
|
|
3611
|
+
notifySubscribers2(state);
|
|
3502
3612
|
}
|
|
3503
3613
|
};
|
|
3504
3614
|
}
|
|
3505
|
-
if (
|
|
3615
|
+
if (_isDev10) {
|
|
3506
3616
|
const hook = _g.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
|
|
3507
3617
|
if (hook) hook.emit("signal:create", { signal: state, name: debugName, getter: get, initial });
|
|
3508
3618
|
}
|
|
@@ -3591,11 +3701,11 @@ function on(deps, handler) {
|
|
|
3591
3701
|
if (first) {
|
|
3592
3702
|
first = false;
|
|
3593
3703
|
prev = value;
|
|
3594
|
-
|
|
3704
|
+
untracked2(() => handler(value, void 0));
|
|
3595
3705
|
} else {
|
|
3596
3706
|
const p2 = prev;
|
|
3597
3707
|
prev = value;
|
|
3598
|
-
|
|
3708
|
+
untracked2(() => handler(value, p2));
|
|
3599
3709
|
}
|
|
3600
3710
|
};
|
|
3601
3711
|
}
|
|
@@ -3617,7 +3727,7 @@ function drainReruns(ctx) {
|
|
|
3617
3727
|
do {
|
|
3618
3728
|
ctx.rerunPending = false;
|
|
3619
3729
|
if (ctx.userCleanups.length > 0) flushUserCleanups(ctx);
|
|
3620
|
-
|
|
3730
|
+
retrack2(ctx.bodyFn, ctx.subscriber);
|
|
3621
3731
|
} while (ctx.rerunPending && ++reruns <= MAX_RERUNS);
|
|
3622
3732
|
if (ctx.rerunPending) {
|
|
3623
3733
|
ctx.rerunPending = false;
|
|
@@ -3646,7 +3756,7 @@ function disposeEffect(ctx) {
|
|
|
3646
3756
|
}
|
|
3647
3757
|
}
|
|
3648
3758
|
try {
|
|
3649
|
-
|
|
3759
|
+
cleanup2(ctx.subscriber);
|
|
3650
3760
|
} catch (err) {
|
|
3651
3761
|
if (typeof console !== "undefined") {
|
|
3652
3762
|
console.warn("[SibuJS effect] dispose threw:", err);
|
|
@@ -3691,7 +3801,7 @@ function effect(effectFn, options) {
|
|
|
3691
3801
|
try {
|
|
3692
3802
|
ctx.rerunPending = false;
|
|
3693
3803
|
if (ctx.userCleanups.length > 0) flushUserCleanups(ctx);
|
|
3694
|
-
|
|
3804
|
+
retrack2(ctx.bodyFn, sub2);
|
|
3695
3805
|
if (ctx.rerunPending) drainReruns(ctx);
|
|
3696
3806
|
} finally {
|
|
3697
3807
|
ctx.running = false;
|
|
@@ -3707,7 +3817,7 @@ function effect(effectFn, options) {
|
|
|
3707
3817
|
ctx.subscriber = sub2;
|
|
3708
3818
|
ctx.running = true;
|
|
3709
3819
|
try {
|
|
3710
|
-
|
|
3820
|
+
retrack2(ctx.bodyFn, ctx.subscriber);
|
|
3711
3821
|
if (ctx.rerunPending) drainReruns(ctx);
|
|
3712
3822
|
} finally {
|
|
3713
3823
|
ctx.running = false;
|
|
@@ -3740,7 +3850,7 @@ function derived(getter, options) {
|
|
|
3740
3850
|
cs._d = false;
|
|
3741
3851
|
cs._init = true;
|
|
3742
3852
|
};
|
|
3743
|
-
|
|
3853
|
+
track2(() => {
|
|
3744
3854
|
let threw = true;
|
|
3745
3855
|
try {
|
|
3746
3856
|
cs._v = getter();
|
|
@@ -3759,12 +3869,12 @@ function derived(getter, options) {
|
|
|
3759
3869
|
`[SibuJS] Circular dependency detected in derived${debugName ? ` "${debugName}"` : ""}. A derived signal cannot read itself (directly or through a chain).`
|
|
3760
3870
|
);
|
|
3761
3871
|
}
|
|
3762
|
-
if (
|
|
3872
|
+
if (isTrackingSuspended2()) {
|
|
3763
3873
|
if (cs._d) {
|
|
3764
3874
|
const prev = cs._v;
|
|
3765
3875
|
evaluating = true;
|
|
3766
3876
|
try {
|
|
3767
|
-
|
|
3877
|
+
retrack2(recompute, markDirty);
|
|
3768
3878
|
if (!Object.is(prev, cs._v)) cs.__v++;
|
|
3769
3879
|
} finally {
|
|
3770
3880
|
evaluating = false;
|
|
@@ -3772,12 +3882,12 @@ function derived(getter, options) {
|
|
|
3772
3882
|
}
|
|
3773
3883
|
return cs._v;
|
|
3774
3884
|
}
|
|
3775
|
-
|
|
3885
|
+
recordDependency2(cs);
|
|
3776
3886
|
if (cs._d) {
|
|
3777
3887
|
const oldValue = cs._v;
|
|
3778
3888
|
evaluating = true;
|
|
3779
3889
|
try {
|
|
3780
|
-
|
|
3890
|
+
retrack2(recompute, markDirty);
|
|
3781
3891
|
if (!Object.is(oldValue, cs._v)) cs.__v++;
|
|
3782
3892
|
} finally {
|
|
3783
3893
|
evaluating = false;
|
|
@@ -3813,11 +3923,17 @@ function watch(getter, callback) {
|
|
|
3813
3923
|
return;
|
|
3814
3924
|
}
|
|
3815
3925
|
if (!Object.is(newValue, oldValue)) {
|
|
3816
|
-
|
|
3926
|
+
const prev = oldValue;
|
|
3817
3927
|
oldValue = newValue;
|
|
3928
|
+
suspendTracking2();
|
|
3929
|
+
try {
|
|
3930
|
+
callback(newValue, prev);
|
|
3931
|
+
} finally {
|
|
3932
|
+
resumeTracking2();
|
|
3933
|
+
}
|
|
3818
3934
|
}
|
|
3819
3935
|
};
|
|
3820
|
-
const teardown =
|
|
3936
|
+
const teardown = track2(subscriber);
|
|
3821
3937
|
return teardown;
|
|
3822
3938
|
}
|
|
3823
3939
|
|
|
@@ -3880,7 +3996,12 @@ function store(initialState) {
|
|
|
3880
3996
|
first = false;
|
|
3881
3997
|
return;
|
|
3882
3998
|
}
|
|
3883
|
-
|
|
3999
|
+
suspendTracking2();
|
|
4000
|
+
try {
|
|
4001
|
+
callback(snapshot);
|
|
4002
|
+
} finally {
|
|
4003
|
+
resumeTracking2();
|
|
4004
|
+
}
|
|
3884
4005
|
});
|
|
3885
4006
|
};
|
|
3886
4007
|
const subscribeKey = (key, callback) => {
|
|
@@ -3896,7 +4017,12 @@ function store(initialState) {
|
|
|
3896
4017
|
if (!Object.is(current, prev)) {
|
|
3897
4018
|
const oldPrev = prev;
|
|
3898
4019
|
prev = current;
|
|
3899
|
-
|
|
4020
|
+
suspendTracking2();
|
|
4021
|
+
try {
|
|
4022
|
+
callback(current, oldPrev);
|
|
4023
|
+
} finally {
|
|
4024
|
+
resumeTracking2();
|
|
4025
|
+
}
|
|
3900
4026
|
}
|
|
3901
4027
|
});
|
|
3902
4028
|
};
|
|
@@ -3997,11 +4123,11 @@ function reactiveArray(initial = []) {
|
|
|
3997
4123
|
function notify() {
|
|
3998
4124
|
snapshot = null;
|
|
3999
4125
|
if (!enqueueBatchedSignal(signal2)) {
|
|
4000
|
-
|
|
4126
|
+
notifySubscribers2(signal2);
|
|
4001
4127
|
}
|
|
4002
4128
|
}
|
|
4003
4129
|
function get() {
|
|
4004
|
-
|
|
4130
|
+
recordDependency2(signal2);
|
|
4005
4131
|
if (snapshot === null) {
|
|
4006
4132
|
const copy = data2.slice();
|
|
4007
4133
|
snapshot = Object.freeze(copy);
|
|
@@ -4257,9 +4383,9 @@ function safeCall(cb, hookName) {
|
|
|
4257
4383
|
}
|
|
4258
4384
|
}
|
|
4259
4385
|
function runMountCallback(callback, hookName, element) {
|
|
4260
|
-
const
|
|
4261
|
-
if (typeof
|
|
4262
|
-
registerDisposer(element,
|
|
4386
|
+
const cleanup3 = safeCall(callback, hookName);
|
|
4387
|
+
if (typeof cleanup3 === "function" && element) {
|
|
4388
|
+
registerDisposer(element, cleanup3);
|
|
4263
4389
|
}
|
|
4264
4390
|
}
|
|
4265
4391
|
var mountWatchers = /* @__PURE__ */ new WeakMap();
|
|
@@ -4575,7 +4701,7 @@ function defer(getter) {
|
|
|
4575
4701
|
}
|
|
4576
4702
|
});
|
|
4577
4703
|
};
|
|
4578
|
-
const teardown =
|
|
4704
|
+
const teardown = track2(() => {
|
|
4579
4705
|
latest = getter();
|
|
4580
4706
|
schedule();
|
|
4581
4707
|
});
|
|
@@ -4727,14 +4853,14 @@ function Suspense({ nodes, fallback }) {
|
|
|
4727
4853
|
}
|
|
4728
4854
|
|
|
4729
4855
|
// src/platform/ssr.ts
|
|
4730
|
-
var
|
|
4856
|
+
var _isDev11 = isDev();
|
|
4731
4857
|
function trustHTML(html3) {
|
|
4732
4858
|
return html3;
|
|
4733
4859
|
}
|
|
4734
4860
|
var DEFAULT_MAX_SSR_BYTES = 1024 * 1024;
|
|
4735
4861
|
|
|
4736
4862
|
// src/components/ErrorDisplay.ts
|
|
4737
|
-
var
|
|
4863
|
+
var _isDev12 = isDev();
|
|
4738
4864
|
var STYLES = `
|
|
4739
4865
|
.sibu-error-display {
|
|
4740
4866
|
border: 1px solid var(--sibu-err-border, #e5484d);
|
|
@@ -5045,7 +5171,7 @@ function ErrorDisplay(props) {
|
|
|
5045
5171
|
injectStyles();
|
|
5046
5172
|
const severity = props.severity ?? "error";
|
|
5047
5173
|
const normalized = normalizeError(props.error);
|
|
5048
|
-
const showDetails = props.alwaysShowDetails ??
|
|
5174
|
+
const showDetails = props.alwaysShowDetails ?? _isDev12;
|
|
5049
5175
|
const headline = props.title ?? normalized.message;
|
|
5050
5176
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace("T", " ").slice(0, 19);
|
|
5051
5177
|
const [copyLabel, setCopyLabel] = signal("Copy");
|
|
@@ -5446,7 +5572,12 @@ function ErrorBoundary(optionsOrChildren, maybeChildren) {
|
|
|
5446
5572
|
} else if (collected.length > 1) {
|
|
5447
5573
|
const Agg = globalThis.AggregateError;
|
|
5448
5574
|
handleError(
|
|
5449
|
-
Agg ? new Agg(collected, `${collected.length} pre-mount errors caught by ErrorBoundary`) :
|
|
5575
|
+
Agg ? new Agg(collected, `${collected.length} pre-mount errors caught by ErrorBoundary`) : (
|
|
5576
|
+
// AggregateError is ES2021 and present in every supported runtime
|
|
5577
|
+
// (matches the browserslist targets), so this fallback is defensive.
|
|
5578
|
+
/* v8 ignore next */
|
|
5579
|
+
new Error(collected.map((e) => e.message).join("; "))
|
|
5580
|
+
)
|
|
5450
5581
|
);
|
|
5451
5582
|
}
|
|
5452
5583
|
return void 0;
|