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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
devWarn,
|
|
3
3
|
isDev
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LMLD24FC.js";
|
|
5
5
|
|
|
6
6
|
// src/reactivity/track.ts
|
|
7
7
|
var _isDev = isDev();
|
|
@@ -9,11 +9,11 @@ var subscriberStack = new Array(32);
|
|
|
9
9
|
var stackCapacity = 32;
|
|
10
10
|
var stackTop = -1;
|
|
11
11
|
var currentSubscriber = null;
|
|
12
|
-
var signalSubscribers = /* @__PURE__ */ new WeakMap();
|
|
13
12
|
var SUBS = "__s";
|
|
14
13
|
var notifyDepth = 0;
|
|
15
14
|
var pendingQueue = [];
|
|
16
15
|
var pendingSet = /* @__PURE__ */ new Set();
|
|
16
|
+
var propagateStack = [];
|
|
17
17
|
function safeInvoke(sub) {
|
|
18
18
|
try {
|
|
19
19
|
sub();
|
|
@@ -23,6 +23,15 @@ function safeInvoke(sub) {
|
|
|
23
23
|
}
|
|
24
24
|
var suspendDepth = 0;
|
|
25
25
|
var trackingSuspended = false;
|
|
26
|
+
function retrack(effectFn, subscriber) {
|
|
27
|
+
const prev = currentSubscriber;
|
|
28
|
+
currentSubscriber = subscriber;
|
|
29
|
+
try {
|
|
30
|
+
effectFn();
|
|
31
|
+
} finally {
|
|
32
|
+
currentSubscriber = prev;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
26
35
|
function track(effectFn, subscriber) {
|
|
27
36
|
if (!subscriber) subscriber = effectFn;
|
|
28
37
|
cleanup(subscriber);
|
|
@@ -90,7 +99,6 @@ function recordDependency(signal) {
|
|
|
90
99
|
let subs = signal[SUBS];
|
|
91
100
|
if (!subs) {
|
|
92
101
|
subs = /* @__PURE__ */ new Set();
|
|
93
|
-
signalSubscribers.set(signal, subs);
|
|
94
102
|
signal[SUBS] = subs;
|
|
95
103
|
}
|
|
96
104
|
subs.add(currentSubscriber);
|
|
@@ -112,17 +120,17 @@ function queueSignalNotification(signal) {
|
|
|
112
120
|
}
|
|
113
121
|
}
|
|
114
122
|
}
|
|
115
|
-
var
|
|
123
|
+
var maxDrainIterations = 1e5;
|
|
116
124
|
function drainNotificationQueue() {
|
|
117
125
|
if (notifyDepth > 0) return;
|
|
118
126
|
notifyDepth++;
|
|
119
127
|
try {
|
|
120
128
|
let i = 0;
|
|
121
129
|
while (i < pendingQueue.length) {
|
|
122
|
-
if (i >=
|
|
130
|
+
if (i >= maxDrainIterations) {
|
|
123
131
|
if (typeof console !== "undefined") {
|
|
124
132
|
console.error(
|
|
125
|
-
`[SibuJS] Notification queue exceeded ${
|
|
133
|
+
`[SibuJS] Notification queue exceeded ${maxDrainIterations} iterations \u2014 likely an effect that writes to a signal it reads. Breaking to prevent infinite loop.`
|
|
126
134
|
);
|
|
127
135
|
}
|
|
128
136
|
break;
|
|
@@ -131,47 +139,52 @@ function drainNotificationQueue() {
|
|
|
131
139
|
i++;
|
|
132
140
|
}
|
|
133
141
|
} finally {
|
|
134
|
-
pendingQueue.length = 0;
|
|
135
|
-
pendingSet.clear();
|
|
136
142
|
notifyDepth--;
|
|
143
|
+
if (notifyDepth === 0) {
|
|
144
|
+
pendingQueue.length = 0;
|
|
145
|
+
pendingSet.clear();
|
|
146
|
+
}
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
149
|
function propagateDirty(sub) {
|
|
140
150
|
sub();
|
|
141
|
-
|
|
142
|
-
|
|
151
|
+
const rootSig = sub._sig;
|
|
152
|
+
if (!rootSig) return;
|
|
153
|
+
const stack = propagateStack;
|
|
154
|
+
const baseLen = stack.length;
|
|
155
|
+
stack.push(rootSig);
|
|
156
|
+
while (stack.length > baseLen) {
|
|
157
|
+
const sig = stack.pop();
|
|
143
158
|
const first = sig.__f;
|
|
144
159
|
if (first) {
|
|
145
160
|
if (first._c) {
|
|
146
161
|
const nSig = first._sig;
|
|
147
|
-
nSig._d
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (!pendingSet.has(first)) {
|
|
162
|
+
if (!nSig._d) {
|
|
163
|
+
nSig._d = true;
|
|
164
|
+
stack.push(nSig);
|
|
165
|
+
}
|
|
166
|
+
} else if (!pendingSet.has(first)) {
|
|
152
167
|
pendingSet.add(first);
|
|
153
168
|
pendingQueue.push(first);
|
|
154
169
|
}
|
|
155
|
-
|
|
170
|
+
continue;
|
|
156
171
|
}
|
|
157
172
|
const subs = sig[SUBS];
|
|
158
|
-
if (!subs)
|
|
159
|
-
let nextSig;
|
|
173
|
+
if (!subs) continue;
|
|
160
174
|
for (const s of subs) {
|
|
161
175
|
if (s._c) {
|
|
162
|
-
s();
|
|
163
176
|
const nSig = s._sig;
|
|
164
|
-
if (nSig && !
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
177
|
+
if (nSig && !nSig._d) {
|
|
178
|
+
nSig._d = true;
|
|
179
|
+
stack.push(nSig);
|
|
180
|
+
} else if (!nSig) {
|
|
181
|
+
s();
|
|
168
182
|
}
|
|
169
183
|
} else if (!pendingSet.has(s)) {
|
|
170
184
|
pendingSet.add(s);
|
|
171
185
|
pendingQueue.push(s);
|
|
172
186
|
}
|
|
173
187
|
}
|
|
174
|
-
sig = nextSig;
|
|
175
188
|
}
|
|
176
189
|
}
|
|
177
190
|
function notifySubscribers(signal) {
|
|
@@ -195,13 +208,23 @@ function notifySubscribers(signal) {
|
|
|
195
208
|
}
|
|
196
209
|
let i = 0;
|
|
197
210
|
while (i < pendingQueue.length) {
|
|
211
|
+
if (i >= maxDrainIterations) {
|
|
212
|
+
if (typeof console !== "undefined") {
|
|
213
|
+
console.error(
|
|
214
|
+
`[SibuJS] Notification queue exceeded ${maxDrainIterations} iterations \u2014 likely an effect that writes to a signal it reads. Breaking to prevent infinite loop.`
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
198
219
|
safeInvoke(pendingQueue[i]);
|
|
199
220
|
i++;
|
|
200
221
|
}
|
|
201
222
|
} finally {
|
|
202
|
-
pendingQueue.length = 0;
|
|
203
|
-
pendingSet.clear();
|
|
204
223
|
notifyDepth--;
|
|
224
|
+
if (notifyDepth === 0) {
|
|
225
|
+
pendingQueue.length = 0;
|
|
226
|
+
pendingSet.clear();
|
|
227
|
+
}
|
|
205
228
|
}
|
|
206
229
|
return;
|
|
207
230
|
}
|
|
@@ -221,30 +244,48 @@ function notifySubscribers(signal) {
|
|
|
221
244
|
notifyDepth++;
|
|
222
245
|
try {
|
|
223
246
|
let directCount = 0;
|
|
247
|
+
let hasComputedSub = false;
|
|
224
248
|
for (const sub of subs) {
|
|
249
|
+
if (sub._c) hasComputedSub = true;
|
|
225
250
|
pendingQueue[directCount++] = sub;
|
|
226
251
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
252
|
+
if (!hasComputedSub) {
|
|
253
|
+
for (let i2 = 0; i2 < directCount; i2++) {
|
|
254
|
+
safeInvoke(pendingQueue[i2]);
|
|
230
255
|
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
256
|
+
} else {
|
|
257
|
+
for (let i2 = 0; i2 < directCount; i2++) {
|
|
258
|
+
if (pendingQueue[i2]._c) {
|
|
259
|
+
propagateDirty(pendingQueue[i2]);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
for (let i2 = 0; i2 < directCount; i2++) {
|
|
263
|
+
const sub = pendingQueue[i2];
|
|
264
|
+
if (!sub._c && !pendingSet.has(sub)) {
|
|
265
|
+
pendingSet.add(sub);
|
|
266
|
+
safeInvoke(sub);
|
|
236
267
|
}
|
|
237
268
|
}
|
|
238
269
|
}
|
|
239
270
|
let i = directCount;
|
|
240
271
|
while (i < pendingQueue.length) {
|
|
272
|
+
if (i - directCount >= maxDrainIterations) {
|
|
273
|
+
if (typeof console !== "undefined") {
|
|
274
|
+
console.error(
|
|
275
|
+
`[SibuJS] Notification queue exceeded ${maxDrainIterations} iterations \u2014 likely an effect that writes to a signal it reads. Breaking to prevent infinite loop.`
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
241
280
|
safeInvoke(pendingQueue[i]);
|
|
242
281
|
i++;
|
|
243
282
|
}
|
|
244
283
|
} finally {
|
|
245
|
-
pendingQueue.length = 0;
|
|
246
|
-
pendingSet.clear();
|
|
247
284
|
notifyDepth--;
|
|
285
|
+
if (notifyDepth === 0) {
|
|
286
|
+
pendingQueue.length = 0;
|
|
287
|
+
pendingSet.clear();
|
|
288
|
+
}
|
|
248
289
|
}
|
|
249
290
|
}
|
|
250
291
|
function cleanup(subscriber) {
|
|
@@ -255,7 +296,9 @@ function cleanup(subscriber) {
|
|
|
255
296
|
if (subs) {
|
|
256
297
|
subs.delete(subscriber);
|
|
257
298
|
if (singleDep.__f === subscriber) {
|
|
258
|
-
singleDep.__f = void 0;
|
|
299
|
+
singleDep.__f = subs.size === 1 ? subs.values().next().value : void 0;
|
|
300
|
+
} else if (subs.size === 1 && singleDep.__f === void 0) {
|
|
301
|
+
singleDep.__f = subs.values().next().value;
|
|
259
302
|
}
|
|
260
303
|
}
|
|
261
304
|
sub._dep = void 0;
|
|
@@ -268,7 +311,9 @@ function cleanup(subscriber) {
|
|
|
268
311
|
if (subs) {
|
|
269
312
|
subs.delete(subscriber);
|
|
270
313
|
if (signal.__f === subscriber) {
|
|
271
|
-
signal.__f = void 0;
|
|
314
|
+
signal.__f = subs.size === 1 ? subs.values().next().value : void 0;
|
|
315
|
+
} else if (subs.size === 1 && signal.__f === void 0) {
|
|
316
|
+
signal.__f = subs.values().next().value;
|
|
272
317
|
}
|
|
273
318
|
}
|
|
274
319
|
}
|
|
@@ -277,6 +322,7 @@ function cleanup(subscriber) {
|
|
|
277
322
|
|
|
278
323
|
export {
|
|
279
324
|
trackingSuspended,
|
|
325
|
+
retrack,
|
|
280
326
|
track,
|
|
281
327
|
untracked,
|
|
282
328
|
recordDependency,
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createPlugin
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3JHCYHWN.js";
|
|
4
4
|
import {
|
|
5
5
|
tagFactory
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KLRMB5ZS.js";
|
|
7
7
|
import {
|
|
8
8
|
derived
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-54EDRCEF.js";
|
|
10
10
|
import {
|
|
11
11
|
effect
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HB24TBAF.js";
|
|
13
13
|
import {
|
|
14
14
|
batch,
|
|
15
15
|
signal
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-CC65Y57T.js";
|
|
17
17
|
|
|
18
18
|
// src/ecosystem/adapters/mobx.ts
|
|
19
19
|
function mobXAdapter(options) {
|
|
@@ -21,7 +21,7 @@ function mobXAdapter(options) {
|
|
|
21
21
|
const { autorun } = options;
|
|
22
22
|
const disposers = [];
|
|
23
23
|
function fromMobX(expression) {
|
|
24
|
-
const [getValue, setValue] = signal(
|
|
24
|
+
const [getValue, setValue] = signal(void 0);
|
|
25
25
|
const disposer = autorun(() => {
|
|
26
26
|
const newValue = expression();
|
|
27
27
|
batch(() => {
|
|
@@ -29,7 +29,13 @@ function mobXAdapter(options) {
|
|
|
29
29
|
});
|
|
30
30
|
});
|
|
31
31
|
disposers.push(disposer);
|
|
32
|
-
|
|
32
|
+
const getter = (() => getValue());
|
|
33
|
+
getter.dispose = () => {
|
|
34
|
+
const i = disposers.indexOf(disposer);
|
|
35
|
+
if (i >= 0) disposers.splice(i, 1);
|
|
36
|
+
disposer();
|
|
37
|
+
};
|
|
38
|
+
return getter;
|
|
33
39
|
}
|
|
34
40
|
function toMobX(sibuGetter, callback) {
|
|
35
41
|
return effect(() => {
|
|
@@ -57,12 +63,12 @@ function reduxAdapter(options) {
|
|
|
57
63
|
setState(store.getState());
|
|
58
64
|
});
|
|
59
65
|
});
|
|
60
|
-
function
|
|
66
|
+
function select(selector) {
|
|
61
67
|
return derived(() => selector(getState()));
|
|
62
68
|
}
|
|
63
69
|
const api = {
|
|
64
70
|
getState,
|
|
65
|
-
|
|
71
|
+
select,
|
|
66
72
|
dispatch: store.dispatch.bind(store),
|
|
67
73
|
destroy: unsubscribe
|
|
68
74
|
};
|
|
@@ -80,12 +86,12 @@ function zustandAdapter(options) {
|
|
|
80
86
|
setSibuState(state);
|
|
81
87
|
});
|
|
82
88
|
});
|
|
83
|
-
function
|
|
89
|
+
function select(selector) {
|
|
84
90
|
return derived(() => selector(getState()));
|
|
85
91
|
}
|
|
86
92
|
const api = {
|
|
87
93
|
getState,
|
|
88
|
-
|
|
94
|
+
select,
|
|
89
95
|
setState: store.setState.bind(store),
|
|
90
96
|
destroy() {
|
|
91
97
|
unsubscribe();
|
|
@@ -114,7 +114,7 @@ interface MaskOptions {
|
|
|
114
114
|
declare function inputMask(options: MaskOptions): {
|
|
115
115
|
value: () => string;
|
|
116
116
|
rawValue: () => string;
|
|
117
|
-
bind: (input: HTMLInputElement) => void;
|
|
117
|
+
bind: (input: HTMLInputElement) => () => void;
|
|
118
118
|
};
|
|
119
119
|
/** Phone number mask: (999) 999-9999 */
|
|
120
120
|
declare function phoneMask(): MaskOptions;
|
|
@@ -140,7 +140,7 @@ declare function focus(): {
|
|
|
140
140
|
isFocused: () => boolean;
|
|
141
141
|
focus: () => void;
|
|
142
142
|
blur: () => void;
|
|
143
|
-
bind: (element: HTMLElement) => void;
|
|
143
|
+
bind: (element: HTMLElement) => () => void;
|
|
144
144
|
};
|
|
145
145
|
/**
|
|
146
146
|
* FocusTrap traps focus within a container element.
|
|
@@ -152,7 +152,12 @@ declare function FocusTrap(nodes: HTMLElement, options?: {
|
|
|
152
152
|
}): HTMLElement;
|
|
153
153
|
/**
|
|
154
154
|
* hotkey registers a keyboard shortcut handler.
|
|
155
|
-
*
|
|
155
|
+
*
|
|
156
|
+
* Returns a `dispose()` cleanup function — call it from the owning
|
|
157
|
+
* component's unmount path to remove the `keydown` listener from
|
|
158
|
+
* `document`. The returned function is idempotent only via the
|
|
159
|
+
* browser's default `removeEventListener` semantics, so callers
|
|
160
|
+
* should invoke it exactly once.
|
|
156
161
|
*
|
|
157
162
|
* Supports two calling styles:
|
|
158
163
|
* - String combo: hotkey("ctrl+shift+z", handler)
|
|
@@ -165,9 +170,6 @@ declare function hotkey(combo: string, handler: (e: KeyboardEvent) => void, opti
|
|
|
165
170
|
meta?: boolean;
|
|
166
171
|
preventDefault?: boolean;
|
|
167
172
|
}): () => void;
|
|
168
|
-
/**
|
|
169
|
-
* announce creates a screen reader announcement using ARIA live regions.
|
|
170
|
-
*/
|
|
171
173
|
declare function announce(message: string, priority?: "polite" | "assertive"): void;
|
|
172
174
|
|
|
173
175
|
/**
|
|
@@ -214,11 +216,13 @@ declare function bindBoolAttr(el: HTMLElement, attr: string, getter: boolean | (
|
|
|
214
216
|
declare function bindData(el: HTMLElement, key: string, getter: string | (() => string)): () => void;
|
|
215
217
|
|
|
216
218
|
/**
|
|
217
|
-
*
|
|
219
|
+
* Test-only helper to reset the module-level stack between specs. Client-only:
|
|
220
|
+
* in SSR dialog() is never meaningfully invoked. In production the stack is
|
|
221
|
+
* bounded by open dialog count and cleaned via removeFromStack/dispose.
|
|
218
222
|
*
|
|
219
|
-
*
|
|
220
|
-
* keydown listener is removed even if the dialog is still open.
|
|
223
|
+
* @internal
|
|
221
224
|
*/
|
|
225
|
+
declare function __resetDialogStack(): void;
|
|
222
226
|
declare function dialog(): {
|
|
223
227
|
open: () => void;
|
|
224
228
|
close: () => void;
|
|
@@ -315,4 +319,4 @@ declare function defineElement(name: string, component: (props: Record<string, u
|
|
|
315
319
|
*/
|
|
316
320
|
declare function svgElement(tag: string, props?: Record<string, unknown>, ...nodes: (SVGElement | string)[]): SVGElement;
|
|
317
321
|
|
|
318
|
-
export { lazyLoad as A, type BoundFieldProps as B, type CustomElementOptions as C, matchesPattern as D, max as E, type FieldConfig as F, maxLength as G, min as H, type IntersectionResult as I, minLength as J, pagination as K, phoneMask as L, type MaskOptions as M, removeScopedStyle as N, required as O, scopedStyle as P, ssnMask as Q, svgElement as R, timeMask as S, type Toast as T, toast as U, type ValidatorFn as V, withScopedStyle as W, zipMask as X, FocusTrap as a, type FormConfig as b, type FormField as c, type FormReturn as d, type ToastInstance as e, VirtualList as f, type VirtualListProps as g, announce as h, aria as i, bindAttrs as j, bindBoolAttr as k, bindData as l, bindField as m, creditCardMask as n, custom as o, dateMask as p, defineElement as q, dialog as r, email as s, eventBus as t, focus as u, form as v, hotkey as w, infiniteScroll as x, inputMask as y, intersection as z };
|
|
322
|
+
export { lazyLoad as A, type BoundFieldProps as B, type CustomElementOptions as C, matchesPattern as D, max as E, type FieldConfig as F, maxLength as G, min as H, type IntersectionResult as I, minLength as J, pagination as K, phoneMask as L, type MaskOptions as M, removeScopedStyle as N, required as O, scopedStyle as P, ssnMask as Q, svgElement as R, timeMask as S, type Toast as T, toast as U, type ValidatorFn as V, withScopedStyle as W, zipMask as X, __resetDialogStack as _, FocusTrap as a, type FormConfig as b, type FormField as c, type FormReturn as d, type ToastInstance as e, VirtualList as f, type VirtualListProps as g, announce as h, aria as i, bindAttrs as j, bindBoolAttr as k, bindData as l, bindField as m, creditCardMask as n, custom as o, dateMask as p, defineElement as q, dialog as r, email as s, eventBus as t, focus as u, form as v, hotkey as w, infiniteScroll as x, inputMask as y, intersection as z };
|
|
@@ -114,7 +114,7 @@ interface MaskOptions {
|
|
|
114
114
|
declare function inputMask(options: MaskOptions): {
|
|
115
115
|
value: () => string;
|
|
116
116
|
rawValue: () => string;
|
|
117
|
-
bind: (input: HTMLInputElement) => void;
|
|
117
|
+
bind: (input: HTMLInputElement) => () => void;
|
|
118
118
|
};
|
|
119
119
|
/** Phone number mask: (999) 999-9999 */
|
|
120
120
|
declare function phoneMask(): MaskOptions;
|
|
@@ -140,7 +140,7 @@ declare function focus(): {
|
|
|
140
140
|
isFocused: () => boolean;
|
|
141
141
|
focus: () => void;
|
|
142
142
|
blur: () => void;
|
|
143
|
-
bind: (element: HTMLElement) => void;
|
|
143
|
+
bind: (element: HTMLElement) => () => void;
|
|
144
144
|
};
|
|
145
145
|
/**
|
|
146
146
|
* FocusTrap traps focus within a container element.
|
|
@@ -152,7 +152,12 @@ declare function FocusTrap(nodes: HTMLElement, options?: {
|
|
|
152
152
|
}): HTMLElement;
|
|
153
153
|
/**
|
|
154
154
|
* hotkey registers a keyboard shortcut handler.
|
|
155
|
-
*
|
|
155
|
+
*
|
|
156
|
+
* Returns a `dispose()` cleanup function — call it from the owning
|
|
157
|
+
* component's unmount path to remove the `keydown` listener from
|
|
158
|
+
* `document`. The returned function is idempotent only via the
|
|
159
|
+
* browser's default `removeEventListener` semantics, so callers
|
|
160
|
+
* should invoke it exactly once.
|
|
156
161
|
*
|
|
157
162
|
* Supports two calling styles:
|
|
158
163
|
* - String combo: hotkey("ctrl+shift+z", handler)
|
|
@@ -165,9 +170,6 @@ declare function hotkey(combo: string, handler: (e: KeyboardEvent) => void, opti
|
|
|
165
170
|
meta?: boolean;
|
|
166
171
|
preventDefault?: boolean;
|
|
167
172
|
}): () => void;
|
|
168
|
-
/**
|
|
169
|
-
* announce creates a screen reader announcement using ARIA live regions.
|
|
170
|
-
*/
|
|
171
173
|
declare function announce(message: string, priority?: "polite" | "assertive"): void;
|
|
172
174
|
|
|
173
175
|
/**
|
|
@@ -214,11 +216,13 @@ declare function bindBoolAttr(el: HTMLElement, attr: string, getter: boolean | (
|
|
|
214
216
|
declare function bindData(el: HTMLElement, key: string, getter: string | (() => string)): () => void;
|
|
215
217
|
|
|
216
218
|
/**
|
|
217
|
-
*
|
|
219
|
+
* Test-only helper to reset the module-level stack between specs. Client-only:
|
|
220
|
+
* in SSR dialog() is never meaningfully invoked. In production the stack is
|
|
221
|
+
* bounded by open dialog count and cleaned via removeFromStack/dispose.
|
|
218
222
|
*
|
|
219
|
-
*
|
|
220
|
-
* keydown listener is removed even if the dialog is still open.
|
|
223
|
+
* @internal
|
|
221
224
|
*/
|
|
225
|
+
declare function __resetDialogStack(): void;
|
|
222
226
|
declare function dialog(): {
|
|
223
227
|
open: () => void;
|
|
224
228
|
close: () => void;
|
|
@@ -315,4 +319,4 @@ declare function defineElement(name: string, component: (props: Record<string, u
|
|
|
315
319
|
*/
|
|
316
320
|
declare function svgElement(tag: string, props?: Record<string, unknown>, ...nodes: (SVGElement | string)[]): SVGElement;
|
|
317
321
|
|
|
318
|
-
export { lazyLoad as A, type BoundFieldProps as B, type CustomElementOptions as C, matchesPattern as D, max as E, type FieldConfig as F, maxLength as G, min as H, type IntersectionResult as I, minLength as J, pagination as K, phoneMask as L, type MaskOptions as M, removeScopedStyle as N, required as O, scopedStyle as P, ssnMask as Q, svgElement as R, timeMask as S, type Toast as T, toast as U, type ValidatorFn as V, withScopedStyle as W, zipMask as X, FocusTrap as a, type FormConfig as b, type FormField as c, type FormReturn as d, type ToastInstance as e, VirtualList as f, type VirtualListProps as g, announce as h, aria as i, bindAttrs as j, bindBoolAttr as k, bindData as l, bindField as m, creditCardMask as n, custom as o, dateMask as p, defineElement as q, dialog as r, email as s, eventBus as t, focus as u, form as v, hotkey as w, infiniteScroll as x, inputMask as y, intersection as z };
|
|
322
|
+
export { lazyLoad as A, type BoundFieldProps as B, type CustomElementOptions as C, matchesPattern as D, max as E, type FieldConfig as F, maxLength as G, min as H, type IntersectionResult as I, minLength as J, pagination as K, phoneMask as L, type MaskOptions as M, removeScopedStyle as N, required as O, scopedStyle as P, ssnMask as Q, svgElement as R, timeMask as S, type Toast as T, toast as U, type ValidatorFn as V, withScopedStyle as W, zipMask as X, __resetDialogStack as _, FocusTrap as a, type FormConfig as b, type FormField as c, type FormReturn as d, type ToastInstance as e, VirtualList as f, type VirtualListProps as g, announce as h, aria as i, bindAttrs as j, bindBoolAttr as k, bindData as l, bindField as m, creditCardMask as n, custom as o, dateMask as p, defineElement as q, dialog as r, email as s, eventBus as t, focus as u, form as v, hotkey as w, infiniteScroll as x, inputMask as y, intersection as z };
|