sibujs 1.5.0 → 2.0.0
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 +238 -69
- package/dist/browser.d.cts +5 -0
- package/dist/browser.d.ts +5 -0
- package/dist/browser.js +6 -6
- package/dist/build.cjs +916 -292
- package/dist/build.js +15 -13
- package/dist/cdn.global.js +17 -16
- package/dist/chunk-2RA7SHDA.js +65 -0
- package/dist/chunk-2UPRY23K.js +80 -0
- package/dist/chunk-3JHCYHWN.js +125 -0
- package/dist/{chunk-VAPYJN4X.js → chunk-3LR7GLWQ.js} +93 -23
- package/dist/{chunk-RJ46C3CS.js → chunk-3NSGB5JN.js} +71 -20
- package/dist/{chunk-XUEEGU5O.js → chunk-52YJLLRO.js} +16 -4
- package/dist/{chunk-XHK6BDAJ.js → chunk-54EDRCEF.js} +25 -8
- package/dist/chunk-7JDB7I65.js +1327 -0
- package/dist/{chunk-WZSPOOER.js → chunk-CC65Y57T.js} +8 -5
- package/dist/{chunk-23VV7YD3.js → chunk-DFPFITST.js} +25 -30
- package/dist/{chunk-BGN5ZMP4.js → chunk-GTBNNBJ6.js} +14 -2
- package/dist/chunk-HB24TBAF.js +121 -0
- package/dist/{chunk-CZUGLNJS.js → chunk-ITX6OO3F.js} +3 -3
- package/dist/{chunk-BGTHZHJ5.js → chunk-JA6667UN.js} +188 -44
- package/dist/{chunk-7GRNSCFT.js → chunk-JXMMDLBY.js} +306 -183
- package/dist/{chunk-3X2YG6YM.js → chunk-JYD2PWXH.js} +59 -28
- package/dist/{chunk-SFKNRVCU.js → chunk-KLRMB5ZS.js} +135 -79
- package/dist/{chunk-5X6PP2UK.js → chunk-LMLD24FC.js} +2 -2
- package/dist/{chunk-M4NLBH4I.js → chunk-LYTCUZ7H.js} +3 -2
- package/dist/{chunk-BMPL52BF.js → chunk-MIUAXB7K.js} +118 -66
- package/dist/{chunk-JCDUJN2F.js → chunk-ND2664SF.js} +486 -153
- package/dist/{chunk-VQDZK23A.js → chunk-O2MNQFLP.js} +181 -66
- package/dist/{chunk-NHUC2QWH.js → chunk-R73P76YZ.js} +1 -1
- package/dist/{chunk-2BYQDGN3.js → chunk-SAHNHTFC.js} +234 -63
- package/dist/chunk-UCS6AMJ7.js +79 -0
- package/dist/{chunk-K4G4ZQNR.js → chunk-VLPPXTYG.js} +84 -38
- package/dist/{chunk-OUZZEE4S.js → chunk-WOMYAHHI.js} +17 -11
- package/dist/{customElement-BL3Uo8dL.d.cts → customElement-CPfIrbvg.d.cts} +14 -10
- package/dist/{customElement-BL3Uo8dL.d.ts → customElement-CPfIrbvg.d.ts} +14 -10
- package/dist/data.cjs +410 -99
- package/dist/data.d.cts +20 -2
- package/dist/data.d.ts +20 -2
- package/dist/data.js +11 -9
- package/dist/devtools.cjs +513 -223
- package/dist/devtools.d.cts +1 -1
- package/dist/devtools.d.ts +1 -1
- package/dist/devtools.js +12 -6
- package/dist/ecosystem.cjs +475 -144
- package/dist/ecosystem.d.cts +9 -7
- package/dist/ecosystem.d.ts +9 -7
- package/dist/ecosystem.js +12 -11
- package/dist/extras.cjs +3355 -1541
- package/dist/extras.d.cts +9 -9
- package/dist/extras.d.ts +9 -9
- package/dist/extras.js +58 -45
- package/dist/index.cjs +920 -292
- package/dist/index.d.cts +71 -8
- package/dist/index.d.ts +71 -8
- package/dist/index.js +28 -16
- package/dist/{introspect-BumjnBKr.d.cts → introspect-BWNjNw64.d.cts} +22 -2
- package/dist/{introspect-CZrlcaYy.d.ts → introspect-cY2pg9pW.d.ts} +22 -2
- package/dist/motion.cjs +77 -34
- package/dist/motion.js +4 -4
- package/dist/patterns.cjs +335 -69
- package/dist/patterns.d.cts +11 -12
- package/dist/patterns.d.ts +11 -12
- package/dist/patterns.js +7 -7
- package/dist/performance.cjs +279 -108
- package/dist/performance.d.cts +23 -16
- package/dist/performance.d.ts +23 -16
- package/dist/performance.js +13 -8
- package/dist/plugin-D30wlGW5.d.cts +71 -0
- package/dist/plugin-D30wlGW5.d.ts +71 -0
- package/dist/plugins.cjs +635 -260
- package/dist/plugins.d.cts +10 -3
- package/dist/plugins.d.ts +10 -3
- package/dist/plugins.js +106 -38
- package/dist/{ssr-Do_SiVoL.d.cts → ssr-CrVNy6Pa.d.cts} +9 -15
- package/dist/{ssr-Do_SiVoL.d.ts → ssr-CrVNy6Pa.d.ts} +9 -15
- package/dist/{ssr-4PBXAOO3.js → ssr-FXD2PPMC.js} +4 -3
- package/dist/ssr.cjs +642 -222
- package/dist/ssr.d.cts +26 -6
- package/dist/ssr.d.ts +26 -6
- package/dist/ssr.js +12 -11
- package/dist/{tagFactory-DaJ0YWX6.d.cts → tagFactory-S17H2qxu.d.cts} +9 -1
- package/dist/{tagFactory-DaJ0YWX6.d.ts → tagFactory-S17H2qxu.d.ts} +9 -1
- package/dist/testing.cjs +252 -63
- package/dist/testing.d.cts +17 -4
- package/dist/testing.d.ts +17 -4
- package/dist/testing.js +100 -44
- package/dist/ui.cjs +463 -137
- package/dist/ui.d.cts +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.js +20 -17
- package/dist/widgets.cjs +977 -94
- package/dist/widgets.d.cts +104 -2
- package/dist/widgets.d.ts +104 -2
- package/dist/widgets.js +9 -7
- package/package.json +8 -2
- package/dist/chunk-32DY64NT.js +0 -282
- package/dist/chunk-3AIRKM3B.js +0 -1263
- package/dist/chunk-3ARAQO7B.js +0 -398
- package/dist/chunk-3CRQALYP.js +0 -877
- package/dist/chunk-4EI4AG32.js +0 -482
- package/dist/chunk-4MYMUBRS.js +0 -21
- package/dist/chunk-5ZYQ6KDD.js +0 -154
- package/dist/chunk-6BMPXPUW.js +0 -26
- package/dist/chunk-6HLLIF3K.js +0 -398
- package/dist/chunk-6LSNVCS2.js +0 -937
- package/dist/chunk-6SA3QQES.js +0 -61
- package/dist/chunk-77L6NL3X.js +0 -1097
- package/dist/chunk-7BF6TK55.js +0 -1097
- package/dist/chunk-7TQKR4PP.js +0 -294
- package/dist/chunk-7V26P53V.js +0 -712
- package/dist/chunk-AZ3ISID5.js +0 -298
- package/dist/chunk-B7SWRFUT.js +0 -332
- package/dist/chunk-BTU3TJDS.js +0 -365
- package/dist/chunk-BW3WT46K.js +0 -937
- package/dist/chunk-C6KFWOFV.js +0 -616
- package/dist/chunk-CHF5OHIA.js +0 -61
- package/dist/chunk-CHJ27IGK.js +0 -26
- package/dist/chunk-CMBFNA7L.js +0 -27
- package/dist/chunk-DAHRH4ON.js +0 -331
- package/dist/chunk-DKOHBI74.js +0 -924
- package/dist/chunk-DTCOOBMX.js +0 -725
- package/dist/chunk-EBGIRKQY.js +0 -616
- package/dist/chunk-EUZND3CB.js +0 -27
- package/dist/chunk-EVCZO745.js +0 -365
- package/dist/chunk-EWFVA3TJ.js +0 -282
- package/dist/chunk-F3FA4F32.js +0 -292
- package/dist/chunk-FGOEVHY3.js +0 -60
- package/dist/chunk-G3BOQPVO.js +0 -365
- package/dist/chunk-GCOK2LC3.js +0 -282
- package/dist/chunk-GJPXRJ45.js +0 -37
- package/dist/chunk-HGMJFBC7.js +0 -654
- package/dist/chunk-JAKHTMQU.js +0 -1000
- package/dist/chunk-JCI5M6U6.js +0 -956
- package/dist/chunk-K5ZUMYVS.js +0 -89
- package/dist/chunk-KQPDEVVS.js +0 -398
- package/dist/chunk-L6JRBDNS.js +0 -60
- package/dist/chunk-LA6KQEDU.js +0 -712
- package/dist/chunk-MB6QFH3I.js +0 -2776
- package/dist/chunk-MDVXJWFN.js +0 -304
- package/dist/chunk-MEZVEBPN.js +0 -2008
- package/dist/chunk-MK4ERFYL.js +0 -2249
- package/dist/chunk-MLKGABMK.js +0 -9
- package/dist/chunk-MQ5GOYPH.js +0 -2249
- package/dist/chunk-MYRV7VDM.js +0 -742
- package/dist/chunk-N6IZB6KJ.js +0 -567
- package/dist/chunk-NEKUBFPT.js +0 -60
- package/dist/chunk-NMRUZALC.js +0 -1097
- package/dist/chunk-NYVAC6P5.js +0 -37
- package/dist/chunk-NZIIMDWI.js +0 -84
- package/dist/chunk-OF7UZIVB.js +0 -725
- package/dist/chunk-P3XWXJZU.js +0 -282
- package/dist/chunk-P6W3STU4.js +0 -2249
- package/dist/chunk-PBHF5WKN.js +0 -616
- package/dist/chunk-PDZQY43A.js +0 -616
- package/dist/chunk-PTQJDMRT.js +0 -146
- package/dist/chunk-PZEGYCF5.js +0 -61
- package/dist/chunk-QBMDLBU2.js +0 -975
- package/dist/chunk-QWZG56ET.js +0 -2744
- package/dist/chunk-RQGQSLQK.js +0 -725
- package/dist/chunk-SDLZDHKP.js +0 -107
- package/dist/chunk-TDGZL5CU.js +0 -365
- package/dist/chunk-TNQWPPE6.js +0 -37
- package/dist/chunk-TSOKIX5Z.js +0 -654
- package/dist/chunk-UHNL42EF.js +0 -2730
- package/dist/chunk-UNXCEF6S.js +0 -21
- package/dist/chunk-V2XTI523.js +0 -347
- package/dist/chunk-VAU366PN.js +0 -2241
- package/dist/chunk-VMVDTCXB.js +0 -712
- package/dist/chunk-VQNQZCWJ.js +0 -61
- package/dist/chunk-VRW3FULF.js +0 -725
- package/dist/chunk-WADYRCO2.js +0 -304
- package/dist/chunk-WILQZRO4.js +0 -282
- package/dist/chunk-WR5D4EGH.js +0 -26
- package/dist/chunk-WUHJISPP.js +0 -298
- package/dist/chunk-XYU6TZOW.js +0 -182
- package/dist/chunk-Y6GP4QGG.js +0 -276
- package/dist/chunk-YECR7UIA.js +0 -347
- package/dist/chunk-YUTWTI4B.js +0 -654
- package/dist/chunk-Z65KYU7I.js +0 -26
- package/dist/chunk-Z6POF5YC.js +0 -975
- package/dist/chunk-ZBJP6WFL.js +0 -482
- package/dist/chunk-ZD6OAMTH.js +0 -277
- package/dist/chunk-ZWKZCBO6.js +0 -317
- package/dist/contracts-DDrwxvJ-.d.cts +0 -245
- package/dist/contracts-DDrwxvJ-.d.ts +0 -245
- package/dist/contracts-DOrhwbke.d.cts +0 -245
- package/dist/contracts-DOrhwbke.d.ts +0 -245
- package/dist/contracts-xo5ckdRP.d.cts +0 -240
- package/dist/contracts-xo5ckdRP.d.ts +0 -240
- package/dist/customElement-BKQfbSZQ.d.cts +0 -262
- package/dist/customElement-BKQfbSZQ.d.ts +0 -262
- package/dist/customElement-D2DJp_xn.d.cts +0 -313
- package/dist/customElement-D2DJp_xn.d.ts +0 -313
- package/dist/customElement-yz8uyk-0.d.cts +0 -308
- package/dist/customElement-yz8uyk-0.d.ts +0 -308
- package/dist/introspect-Cb0zgpi2.d.cts +0 -477
- package/dist/introspect-Y2xNXGSf.d.ts +0 -477
- package/dist/plugin-Bek4RhJY.d.cts +0 -43
- package/dist/plugin-Bek4RhJY.d.ts +0 -43
- package/dist/ssr-3RXHP5ES.js +0 -38
- package/dist/ssr-6GIMY5MX.js +0 -38
- package/dist/ssr-BA6sxxUd.d.cts +0 -135
- package/dist/ssr-BA6sxxUd.d.ts +0 -135
- package/dist/ssr-WKUPVSSK.js +0 -36
- package/dist/tagFactory-Dl8QCLga.d.cts +0 -23
- package/dist/tagFactory-Dl8QCLga.d.ts +0 -23
package/dist/browser.cjs
CHANGED
|
@@ -66,12 +66,12 @@ function isDev() {
|
|
|
66
66
|
var _isDev = isDev();
|
|
67
67
|
function devAssert(condition, message) {
|
|
68
68
|
if (_isDev && !condition) {
|
|
69
|
-
throw new Error(`[
|
|
69
|
+
throw new Error(`[SibuJS] ${message}`);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
function devWarn(message) {
|
|
73
73
|
if (_isDev) {
|
|
74
|
-
console.warn(`[
|
|
74
|
+
console.warn(`[SibuJS] ${message}`);
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -81,11 +81,11 @@ var subscriberStack = new Array(32);
|
|
|
81
81
|
var stackCapacity = 32;
|
|
82
82
|
var stackTop = -1;
|
|
83
83
|
var currentSubscriber = null;
|
|
84
|
-
var signalSubscribers = /* @__PURE__ */ new WeakMap();
|
|
85
84
|
var SUBS = "__s";
|
|
86
85
|
var notifyDepth = 0;
|
|
87
86
|
var pendingQueue = [];
|
|
88
87
|
var pendingSet = /* @__PURE__ */ new Set();
|
|
88
|
+
var propagateStack = [];
|
|
89
89
|
function safeInvoke(sub) {
|
|
90
90
|
try {
|
|
91
91
|
sub();
|
|
@@ -131,7 +131,6 @@ function recordDependency(signal2) {
|
|
|
131
131
|
let subs = signal2[SUBS];
|
|
132
132
|
if (!subs) {
|
|
133
133
|
subs = /* @__PURE__ */ new Set();
|
|
134
|
-
signalSubscribers.set(signal2, subs);
|
|
135
134
|
signal2[SUBS] = subs;
|
|
136
135
|
}
|
|
137
136
|
subs.add(currentSubscriber);
|
|
@@ -153,17 +152,17 @@ function queueSignalNotification(signal2) {
|
|
|
153
152
|
}
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
|
-
var
|
|
155
|
+
var maxDrainIterations = 1e5;
|
|
157
156
|
function drainNotificationQueue() {
|
|
158
157
|
if (notifyDepth > 0) return;
|
|
159
158
|
notifyDepth++;
|
|
160
159
|
try {
|
|
161
160
|
let i = 0;
|
|
162
161
|
while (i < pendingQueue.length) {
|
|
163
|
-
if (i >=
|
|
162
|
+
if (i >= maxDrainIterations) {
|
|
164
163
|
if (typeof console !== "undefined") {
|
|
165
164
|
console.error(
|
|
166
|
-
`[SibuJS] Notification queue exceeded ${
|
|
165
|
+
`[SibuJS] Notification queue exceeded ${maxDrainIterations} iterations \u2014 likely an effect that writes to a signal it reads. Breaking to prevent infinite loop.`
|
|
167
166
|
);
|
|
168
167
|
}
|
|
169
168
|
break;
|
|
@@ -172,47 +171,52 @@ function drainNotificationQueue() {
|
|
|
172
171
|
i++;
|
|
173
172
|
}
|
|
174
173
|
} finally {
|
|
175
|
-
pendingQueue.length = 0;
|
|
176
|
-
pendingSet.clear();
|
|
177
174
|
notifyDepth--;
|
|
175
|
+
if (notifyDepth === 0) {
|
|
176
|
+
pendingQueue.length = 0;
|
|
177
|
+
pendingSet.clear();
|
|
178
|
+
}
|
|
178
179
|
}
|
|
179
180
|
}
|
|
180
181
|
function propagateDirty(sub) {
|
|
181
182
|
sub();
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
const rootSig = sub._sig;
|
|
184
|
+
if (!rootSig) return;
|
|
185
|
+
const stack = propagateStack;
|
|
186
|
+
const baseLen = stack.length;
|
|
187
|
+
stack.push(rootSig);
|
|
188
|
+
while (stack.length > baseLen) {
|
|
189
|
+
const sig = stack.pop();
|
|
184
190
|
const first = sig.__f;
|
|
185
191
|
if (first) {
|
|
186
192
|
if (first._c) {
|
|
187
193
|
const nSig = first._sig;
|
|
188
|
-
nSig._d
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (!pendingSet.has(first)) {
|
|
194
|
+
if (!nSig._d) {
|
|
195
|
+
nSig._d = true;
|
|
196
|
+
stack.push(nSig);
|
|
197
|
+
}
|
|
198
|
+
} else if (!pendingSet.has(first)) {
|
|
193
199
|
pendingSet.add(first);
|
|
194
200
|
pendingQueue.push(first);
|
|
195
201
|
}
|
|
196
|
-
|
|
202
|
+
continue;
|
|
197
203
|
}
|
|
198
204
|
const subs = sig[SUBS];
|
|
199
|
-
if (!subs)
|
|
200
|
-
let nextSig;
|
|
205
|
+
if (!subs) continue;
|
|
201
206
|
for (const s of subs) {
|
|
202
207
|
if (s._c) {
|
|
203
|
-
s();
|
|
204
208
|
const nSig = s._sig;
|
|
205
|
-
if (nSig && !
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
+
if (nSig && !nSig._d) {
|
|
210
|
+
nSig._d = true;
|
|
211
|
+
stack.push(nSig);
|
|
212
|
+
} else if (!nSig) {
|
|
213
|
+
s();
|
|
209
214
|
}
|
|
210
215
|
} else if (!pendingSet.has(s)) {
|
|
211
216
|
pendingSet.add(s);
|
|
212
217
|
pendingQueue.push(s);
|
|
213
218
|
}
|
|
214
219
|
}
|
|
215
|
-
sig = nextSig;
|
|
216
220
|
}
|
|
217
221
|
}
|
|
218
222
|
function notifySubscribers(signal2) {
|
|
@@ -236,13 +240,23 @@ function notifySubscribers(signal2) {
|
|
|
236
240
|
}
|
|
237
241
|
let i = 0;
|
|
238
242
|
while (i < pendingQueue.length) {
|
|
243
|
+
if (i >= maxDrainIterations) {
|
|
244
|
+
if (typeof console !== "undefined") {
|
|
245
|
+
console.error(
|
|
246
|
+
`[SibuJS] Notification queue exceeded ${maxDrainIterations} iterations \u2014 likely an effect that writes to a signal it reads. Breaking to prevent infinite loop.`
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
239
251
|
safeInvoke(pendingQueue[i]);
|
|
240
252
|
i++;
|
|
241
253
|
}
|
|
242
254
|
} finally {
|
|
243
|
-
pendingQueue.length = 0;
|
|
244
|
-
pendingSet.clear();
|
|
245
255
|
notifyDepth--;
|
|
256
|
+
if (notifyDepth === 0) {
|
|
257
|
+
pendingQueue.length = 0;
|
|
258
|
+
pendingSet.clear();
|
|
259
|
+
}
|
|
246
260
|
}
|
|
247
261
|
return;
|
|
248
262
|
}
|
|
@@ -262,30 +276,48 @@ function notifySubscribers(signal2) {
|
|
|
262
276
|
notifyDepth++;
|
|
263
277
|
try {
|
|
264
278
|
let directCount = 0;
|
|
279
|
+
let hasComputedSub = false;
|
|
265
280
|
for (const sub of subs) {
|
|
281
|
+
if (sub._c) hasComputedSub = true;
|
|
266
282
|
pendingQueue[directCount++] = sub;
|
|
267
283
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
284
|
+
if (!hasComputedSub) {
|
|
285
|
+
for (let i2 = 0; i2 < directCount; i2++) {
|
|
286
|
+
safeInvoke(pendingQueue[i2]);
|
|
271
287
|
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
288
|
+
} else {
|
|
289
|
+
for (let i2 = 0; i2 < directCount; i2++) {
|
|
290
|
+
if (pendingQueue[i2]._c) {
|
|
291
|
+
propagateDirty(pendingQueue[i2]);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
for (let i2 = 0; i2 < directCount; i2++) {
|
|
295
|
+
const sub = pendingQueue[i2];
|
|
296
|
+
if (!sub._c && !pendingSet.has(sub)) {
|
|
297
|
+
pendingSet.add(sub);
|
|
298
|
+
safeInvoke(sub);
|
|
277
299
|
}
|
|
278
300
|
}
|
|
279
301
|
}
|
|
280
302
|
let i = directCount;
|
|
281
303
|
while (i < pendingQueue.length) {
|
|
304
|
+
if (i - directCount >= maxDrainIterations) {
|
|
305
|
+
if (typeof console !== "undefined") {
|
|
306
|
+
console.error(
|
|
307
|
+
`[SibuJS] Notification queue exceeded ${maxDrainIterations} iterations \u2014 likely an effect that writes to a signal it reads. Breaking to prevent infinite loop.`
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
282
312
|
safeInvoke(pendingQueue[i]);
|
|
283
313
|
i++;
|
|
284
314
|
}
|
|
285
315
|
} finally {
|
|
286
|
-
pendingQueue.length = 0;
|
|
287
|
-
pendingSet.clear();
|
|
288
316
|
notifyDepth--;
|
|
317
|
+
if (notifyDepth === 0) {
|
|
318
|
+
pendingQueue.length = 0;
|
|
319
|
+
pendingSet.clear();
|
|
320
|
+
}
|
|
289
321
|
}
|
|
290
322
|
}
|
|
291
323
|
function cleanup(subscriber) {
|
|
@@ -296,7 +328,9 @@ function cleanup(subscriber) {
|
|
|
296
328
|
if (subs) {
|
|
297
329
|
subs.delete(subscriber);
|
|
298
330
|
if (singleDep.__f === subscriber) {
|
|
299
|
-
singleDep.__f = void 0;
|
|
331
|
+
singleDep.__f = subs.size === 1 ? subs.values().next().value : void 0;
|
|
332
|
+
} else if (subs.size === 1 && singleDep.__f === void 0) {
|
|
333
|
+
singleDep.__f = subs.values().next().value;
|
|
300
334
|
}
|
|
301
335
|
}
|
|
302
336
|
sub._dep = void 0;
|
|
@@ -309,7 +343,9 @@ function cleanup(subscriber) {
|
|
|
309
343
|
if (subs) {
|
|
310
344
|
subs.delete(subscriber);
|
|
311
345
|
if (signal2.__f === subscriber) {
|
|
312
|
-
signal2.__f = void 0;
|
|
346
|
+
signal2.__f = subs.size === 1 ? subs.values().next().value : void 0;
|
|
347
|
+
} else if (subs.size === 1 && signal2.__f === void 0) {
|
|
348
|
+
signal2.__f = subs.values().next().value;
|
|
313
349
|
}
|
|
314
350
|
}
|
|
315
351
|
}
|
|
@@ -336,10 +372,13 @@ function enqueueBatchedSignal(signal2) {
|
|
|
336
372
|
return true;
|
|
337
373
|
}
|
|
338
374
|
function flushBatch() {
|
|
339
|
-
|
|
340
|
-
|
|
375
|
+
try {
|
|
376
|
+
for (const signal2 of pendingSignals) {
|
|
377
|
+
queueSignalNotification(signal2);
|
|
378
|
+
}
|
|
379
|
+
} finally {
|
|
380
|
+
pendingSignals.clear();
|
|
341
381
|
}
|
|
342
|
-
pendingSignals.clear();
|
|
343
382
|
drainNotificationQueue();
|
|
344
383
|
}
|
|
345
384
|
|
|
@@ -401,9 +440,28 @@ function media(query) {
|
|
|
401
440
|
}
|
|
402
441
|
|
|
403
442
|
// src/core/ssr-context.ts
|
|
404
|
-
var
|
|
443
|
+
var als = null;
|
|
444
|
+
try {
|
|
445
|
+
if (typeof process !== "undefined" && process.versions && process.versions.node) {
|
|
446
|
+
const req = Function("return typeof require==='function'?require:null")();
|
|
447
|
+
if (req) {
|
|
448
|
+
const mod = req("node:async_hooks");
|
|
449
|
+
als = new mod.AsyncLocalStorage();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
} catch {
|
|
453
|
+
als = null;
|
|
454
|
+
}
|
|
455
|
+
var fallbackStore = { ssr: false, suspenseIdCounter: 0 };
|
|
456
|
+
function getSSRStore() {
|
|
457
|
+
if (als) {
|
|
458
|
+
const s = als.getStore();
|
|
459
|
+
if (s) return s;
|
|
460
|
+
}
|
|
461
|
+
return fallbackStore;
|
|
462
|
+
}
|
|
405
463
|
function isSSR() {
|
|
406
|
-
return
|
|
464
|
+
return getSSRStore().ssr;
|
|
407
465
|
}
|
|
408
466
|
|
|
409
467
|
// src/core/signals/effect.ts
|
|
@@ -413,26 +471,86 @@ function effect(effectFn, options) {
|
|
|
413
471
|
if (isSSR()) return () => {
|
|
414
472
|
};
|
|
415
473
|
const onError = options?.onError;
|
|
474
|
+
let userCleanups = [];
|
|
475
|
+
const onCleanup = (fn) => {
|
|
476
|
+
userCleanups.push(fn);
|
|
477
|
+
};
|
|
478
|
+
const runUserCleanups = () => {
|
|
479
|
+
if (userCleanups.length === 0) return;
|
|
480
|
+
const list = userCleanups;
|
|
481
|
+
userCleanups = [];
|
|
482
|
+
for (let i = list.length - 1; i >= 0; i--) {
|
|
483
|
+
try {
|
|
484
|
+
list[i]();
|
|
485
|
+
} catch (err) {
|
|
486
|
+
if (typeof console !== "undefined") {
|
|
487
|
+
console.warn("[SibuJS effect] onCleanup threw:", err);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
const invokeBody = () => effectFn(onCleanup);
|
|
416
493
|
const wrappedFn = onError ? () => {
|
|
417
494
|
try {
|
|
418
|
-
|
|
495
|
+
invokeBody();
|
|
419
496
|
} catch (err) {
|
|
420
497
|
onError(err);
|
|
421
498
|
}
|
|
422
|
-
} :
|
|
499
|
+
} : invokeBody;
|
|
423
500
|
let cleanupHandle = () => {
|
|
424
501
|
};
|
|
502
|
+
let running = false;
|
|
425
503
|
const subscriber = () => {
|
|
426
|
-
|
|
427
|
-
|
|
504
|
+
if (running) {
|
|
505
|
+
if (_g2.__SIBU_DEV_WARN__ !== false && typeof console !== "undefined") {
|
|
506
|
+
console.warn(
|
|
507
|
+
"[SibuJS] effect re-entered itself while running \u2014 the triggering update will be ignored. Wrap mutual writes in `batch()` or split the effect to avoid this."
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
running = true;
|
|
513
|
+
try {
|
|
514
|
+
runUserCleanups();
|
|
515
|
+
cleanupHandle();
|
|
516
|
+
cleanupHandle = track(wrappedFn, subscriber);
|
|
517
|
+
} finally {
|
|
518
|
+
running = false;
|
|
519
|
+
}
|
|
428
520
|
};
|
|
429
|
-
|
|
521
|
+
running = true;
|
|
522
|
+
try {
|
|
523
|
+
cleanupHandle = track(wrappedFn, subscriber);
|
|
524
|
+
} finally {
|
|
525
|
+
running = false;
|
|
526
|
+
}
|
|
430
527
|
const hook = _g2.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
|
|
431
528
|
if (hook) hook.emit("effect:create", { effectFn });
|
|
529
|
+
let disposed = false;
|
|
432
530
|
return () => {
|
|
531
|
+
if (disposed) return;
|
|
532
|
+
disposed = true;
|
|
433
533
|
const h = _g2.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
|
|
434
|
-
if (h)
|
|
435
|
-
|
|
534
|
+
if (h) {
|
|
535
|
+
try {
|
|
536
|
+
h.emit("effect:destroy", { effectFn });
|
|
537
|
+
} catch {
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
try {
|
|
541
|
+
runUserCleanups();
|
|
542
|
+
} catch (err) {
|
|
543
|
+
if (typeof console !== "undefined") {
|
|
544
|
+
console.warn("[SibuJS effect] onCleanup threw during dispose:", err);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
try {
|
|
548
|
+
cleanupHandle();
|
|
549
|
+
} catch (err) {
|
|
550
|
+
if (typeof console !== "undefined") {
|
|
551
|
+
console.warn("[SibuJS effect] dispose threw:", err);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
436
554
|
};
|
|
437
555
|
}
|
|
438
556
|
|
|
@@ -810,7 +928,10 @@ function dropZone(element, options) {
|
|
|
810
928
|
const raw = e.dataTransfer.getData("application/json");
|
|
811
929
|
if (raw) {
|
|
812
930
|
try {
|
|
813
|
-
transferData = JSON.parse(
|
|
931
|
+
transferData = JSON.parse(
|
|
932
|
+
raw,
|
|
933
|
+
(k, v) => k === "__proto__" || k === "constructor" || k === "prototype" ? void 0 : v
|
|
934
|
+
);
|
|
814
935
|
} catch {
|
|
815
936
|
transferData = raw;
|
|
816
937
|
}
|
|
@@ -1190,13 +1311,21 @@ function wakeLock() {
|
|
|
1190
1311
|
}
|
|
1191
1312
|
const onVisibility = () => {
|
|
1192
1313
|
if (sentinel?.released && !document.hidden) {
|
|
1193
|
-
|
|
1314
|
+
request().catch((err) => {
|
|
1315
|
+
if (typeof console !== "undefined") {
|
|
1316
|
+
console.warn("[SibuJS wakeLock] re-acquire failed:", err);
|
|
1317
|
+
}
|
|
1318
|
+
});
|
|
1194
1319
|
}
|
|
1195
1320
|
};
|
|
1196
1321
|
document.addEventListener("visibilitychange", onVisibility);
|
|
1197
1322
|
function dispose() {
|
|
1198
1323
|
document.removeEventListener("visibilitychange", onVisibility);
|
|
1199
|
-
|
|
1324
|
+
release().catch((err) => {
|
|
1325
|
+
if (typeof console !== "undefined") {
|
|
1326
|
+
console.warn("[SibuJS wakeLock] release failed:", err);
|
|
1327
|
+
}
|
|
1328
|
+
});
|
|
1200
1329
|
}
|
|
1201
1330
|
return { active, request, release, dispose };
|
|
1202
1331
|
}
|
|
@@ -1392,11 +1521,21 @@ function speech() {
|
|
|
1392
1521
|
};
|
|
1393
1522
|
}
|
|
1394
1523
|
const synth = window.speechSynthesis;
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1524
|
+
let interval = null;
|
|
1525
|
+
function startPolling() {
|
|
1526
|
+
if (interval !== null) return;
|
|
1527
|
+
interval = setInterval(() => {
|
|
1528
|
+
setSpeaking(synth.speaking);
|
|
1529
|
+
setPaused(synth.paused);
|
|
1530
|
+
if (!synth.speaking && !synth.paused) {
|
|
1531
|
+
clearInterval(interval);
|
|
1532
|
+
interval = null;
|
|
1533
|
+
}
|
|
1534
|
+
}, 200);
|
|
1535
|
+
}
|
|
1536
|
+
let disposed = false;
|
|
1399
1537
|
function speak(text, options = {}) {
|
|
1538
|
+
if (disposed) return;
|
|
1400
1539
|
const u = new SpeechSynthesisUtterance(text);
|
|
1401
1540
|
if (options.lang) u.lang = options.lang;
|
|
1402
1541
|
if (options.rate != null) u.rate = options.rate;
|
|
@@ -1407,19 +1546,41 @@ function speech() {
|
|
|
1407
1546
|
const match = voices.find((v) => v.name === options.voice);
|
|
1408
1547
|
if (match) u.voice = match;
|
|
1409
1548
|
}
|
|
1410
|
-
u.addEventListener(
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1549
|
+
u.addEventListener(
|
|
1550
|
+
"start",
|
|
1551
|
+
() => {
|
|
1552
|
+
if (!disposed) setSpeaking(true);
|
|
1553
|
+
},
|
|
1554
|
+
{ once: true }
|
|
1555
|
+
);
|
|
1556
|
+
u.addEventListener(
|
|
1557
|
+
"end",
|
|
1558
|
+
() => {
|
|
1559
|
+
if (disposed) return;
|
|
1560
|
+
setSpeaking(false);
|
|
1561
|
+
setPaused(false);
|
|
1562
|
+
},
|
|
1563
|
+
{ once: true }
|
|
1564
|
+
);
|
|
1565
|
+
u.addEventListener(
|
|
1566
|
+
"error",
|
|
1567
|
+
() => {
|
|
1568
|
+
if (disposed) return;
|
|
1569
|
+
setSpeaking(false);
|
|
1570
|
+
setPaused(false);
|
|
1571
|
+
},
|
|
1572
|
+
{ once: true }
|
|
1573
|
+
);
|
|
1419
1574
|
synth.speak(u);
|
|
1575
|
+
setSpeaking(true);
|
|
1576
|
+
startPolling();
|
|
1420
1577
|
}
|
|
1421
1578
|
function dispose() {
|
|
1422
|
-
|
|
1579
|
+
disposed = true;
|
|
1580
|
+
if (interval !== null) {
|
|
1581
|
+
clearInterval(interval);
|
|
1582
|
+
interval = null;
|
|
1583
|
+
}
|
|
1423
1584
|
synth.cancel();
|
|
1424
1585
|
}
|
|
1425
1586
|
return {
|
|
@@ -1648,13 +1809,21 @@ function imageLoader(src) {
|
|
|
1648
1809
|
};
|
|
1649
1810
|
img.src = url;
|
|
1650
1811
|
}
|
|
1812
|
+
let srcEffectTeardown = null;
|
|
1651
1813
|
if (typeof src === "function") {
|
|
1652
|
-
|
|
1814
|
+
srcEffectTeardown = effect(() => {
|
|
1815
|
+
const url = src();
|
|
1816
|
+
start(url);
|
|
1817
|
+
});
|
|
1653
1818
|
} else {
|
|
1654
1819
|
start(src);
|
|
1655
1820
|
}
|
|
1656
1821
|
function dispose() {
|
|
1657
1822
|
disposed = true;
|
|
1823
|
+
if (srcEffectTeardown) {
|
|
1824
|
+
srcEffectTeardown();
|
|
1825
|
+
srcEffectTeardown = null;
|
|
1826
|
+
}
|
|
1658
1827
|
if (current) {
|
|
1659
1828
|
current.onload = null;
|
|
1660
1829
|
current.onerror = null;
|
package/dist/browser.d.cts
CHANGED
|
@@ -370,6 +370,11 @@ declare function urlState(): {
|
|
|
370
370
|
};
|
|
371
371
|
|
|
372
372
|
/**
|
|
373
|
+
* Note on trust model: `BroadcastChannel` only delivers messages between
|
|
374
|
+
* same-origin browsing contexts (tabs, iframes, workers). We therefore treat
|
|
375
|
+
* incoming payloads as same-origin-trusted and pass them through unmodified.
|
|
376
|
+
* Do not use this transport for cross-origin messaging.
|
|
377
|
+
*
|
|
373
378
|
* broadcast wraps the BroadcastChannel API as a reactive signal.
|
|
374
379
|
* Unlike the `storage` event (which only fires for localStorage writes and
|
|
375
380
|
* sends only the serialized value), a `BroadcastChannel` can send arbitrary
|
package/dist/browser.d.ts
CHANGED
|
@@ -370,6 +370,11 @@ declare function urlState(): {
|
|
|
370
370
|
};
|
|
371
371
|
|
|
372
372
|
/**
|
|
373
|
+
* Note on trust model: `BroadcastChannel` only delivers messages between
|
|
374
|
+
* same-origin browsing contexts (tabs, iframes, workers). We therefore treat
|
|
375
|
+
* incoming payloads as same-origin-trusted and pass them through unmodified.
|
|
376
|
+
* Do not use this transport for cross-origin messaging.
|
|
377
|
+
*
|
|
373
378
|
* broadcast wraps the BroadcastChannel API as a reactive signal.
|
|
374
379
|
* Unlike the `storage` event (which only fires for localStorage writes and
|
|
375
380
|
* sends only the serialized value), a `BroadcastChannel` can send arbitrary
|
package/dist/browser.js
CHANGED
|
@@ -35,12 +35,12 @@ import {
|
|
|
35
35
|
visibility,
|
|
36
36
|
wakeLock,
|
|
37
37
|
windowSize
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
38
|
+
} from "./chunk-3NSGB5JN.js";
|
|
39
|
+
import "./chunk-HB24TBAF.js";
|
|
40
|
+
import "./chunk-2RA7SHDA.js";
|
|
41
|
+
import "./chunk-CC65Y57T.js";
|
|
42
|
+
import "./chunk-VLPPXTYG.js";
|
|
43
|
+
import "./chunk-LMLD24FC.js";
|
|
44
44
|
export {
|
|
45
45
|
animationFrame,
|
|
46
46
|
battery,
|