sibujs 4.14.0 → 4.15.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.
Files changed (93) hide show
  1. package/dist/browser.cjs +297 -45
  2. package/dist/browser.js +6 -7
  3. package/dist/build.cjs +2189 -573
  4. package/dist/build.js +16 -15
  5. package/dist/cdn.dev.global.js +13 -12
  6. package/dist/cdn.full.dev.global.js +14 -13
  7. package/dist/cdn.full.global.js +12 -12
  8. package/dist/cdn.global.js +12 -12
  9. package/dist/{chunk-RVR5NPFL.js → chunk-2VKTFA7C.js} +1 -1
  10. package/dist/{chunk-7ILEHTVX.js → chunk-4AEFGRYW.js} +1 -1
  11. package/dist/{chunk-4TQDTWWN.js → chunk-6IV5ZRG6.js} +5 -7
  12. package/dist/{chunk-GVAMIU6K.js → chunk-75EAQH3U.js} +2 -2
  13. package/dist/{chunk-TLS4NVIB.js → chunk-7JO7DPSS.js} +4 -4
  14. package/dist/{chunk-SVULV7O4.js → chunk-AQH7WDSE.js} +6 -8
  15. package/dist/{chunk-S37PZD6I.js → chunk-BF3WBJJQ.js} +60 -10
  16. package/dist/{chunk-LJMX4SQ7.js → chunk-BG4BP44S.js} +3 -3
  17. package/dist/{chunk-N7A6FKWW.js → chunk-D44TAGCT.js} +2 -2
  18. package/dist/{chunk-CCKUNHVU.js → chunk-DAEXQJQA.js} +1 -1
  19. package/dist/chunk-DNCQDFJJ.js +22 -0
  20. package/dist/{chunk-BKZ5N6NK.js → chunk-DNCT2UXB.js} +4 -4
  21. package/dist/{chunk-BOYKGGVD.js → chunk-DRWOD7RZ.js} +4 -4
  22. package/dist/chunk-DS5V2PRE.js +64 -0
  23. package/dist/{chunk-VM2U5LEL.js → chunk-EHSJESRN.js} +595 -123
  24. package/dist/{chunk-MIRKTVH4.js → chunk-GFM5WWPU.js} +252 -5
  25. package/dist/{chunk-52XFPGSN.js → chunk-HTPOIAAL.js} +1 -1
  26. package/dist/{chunk-3HEX6QJQ.js → chunk-I2R5QALY.js} +2 -4
  27. package/dist/{chunk-4FJSAUKB.js → chunk-IUBV5WO5.js} +1 -1
  28. package/dist/{chunk-A454RAEK.js → chunk-KIDETDMU.js} +5 -7
  29. package/dist/{chunk-JTFQ7IL4.js → chunk-KPAXG5IR.js} +7 -9
  30. package/dist/{chunk-AE32RGWX.js → chunk-LGUXYHTZ.js} +3 -3
  31. package/dist/{chunk-Y4LUM2XS.js → chunk-LQWLPQOK.js} +6 -8
  32. package/dist/{chunk-CNPT6NKV.js → chunk-MINLMJUY.js} +48 -9
  33. package/dist/{chunk-BNXRWZZV.js → chunk-OURTGOJT.js} +8 -10
  34. package/dist/{chunk-F67F77IA.js → chunk-TQ24Y3IV.js} +2 -2
  35. package/dist/{chunk-2TTRW2TE.js → chunk-UM3M5PXS.js} +8 -8
  36. package/dist/{chunk-CJ7KS3DF.js → chunk-VSTX3XSX.js} +205 -15
  37. package/dist/{chunk-HQIAL7F2.js → chunk-XPDZ2LDR.js} +2 -2
  38. package/dist/{chunk-UUIKJJIK.js → chunk-Y7JM7GY2.js} +5 -7
  39. package/dist/{chunk-QS6GMWDD.js → chunk-YAFITBOK.js} +1269 -162
  40. package/dist/data.cjs +285 -33
  41. package/dist/data.js +6 -7
  42. package/dist/devtools.cjs +289 -39
  43. package/dist/devtools.js +5 -6
  44. package/dist/{dispose-EIHHHDC7.js → dispose-3WDBYJMH.js} +3 -1
  45. package/dist/ecosystem.cjs +345 -61
  46. package/dist/ecosystem.d.cts +1 -1
  47. package/dist/ecosystem.d.ts +1 -1
  48. package/dist/ecosystem.js +10 -10
  49. package/dist/extras.cjs +568 -248
  50. package/dist/extras.d.cts +1 -1
  51. package/dist/extras.d.ts +1 -1
  52. package/dist/extras.js +27 -27
  53. package/dist/index.cjs +2134 -515
  54. package/dist/index.d.cts +628 -211
  55. package/dist/index.d.ts +628 -211
  56. package/dist/index.js +22 -15
  57. package/dist/motion.cjs +286 -30
  58. package/dist/motion.js +4 -4
  59. package/dist/patterns.cjs +301 -43
  60. package/dist/patterns.js +6 -6
  61. package/dist/performance.cjs +286 -36
  62. package/dist/performance.js +9 -9
  63. package/dist/plugins.cjs +1237 -291
  64. package/dist/plugins.d.cts +3 -1
  65. package/dist/plugins.d.ts +3 -1
  66. package/dist/plugins.js +20 -19
  67. package/dist/{renderRoute-fxgsm2Ir.d.ts → renderRoute-B84MONaO.d.cts} +2 -2
  68. package/dist/{renderRoute-DP20XwMS.d.cts → renderRoute-_yxPuEQY.d.ts} +2 -2
  69. package/dist/{routeHead-CE9SV-cH.d.cts → routeHead-DLxlq15W.d.cts} +94 -0
  70. package/dist/{routeHead-DzVxPviY.d.ts → routeHead-w8nANZ3M.d.ts} +94 -0
  71. package/dist/{ssr-NECEU4X4.js → ssr-EF3IUHTE.js} +6 -6
  72. package/dist/ssr-dom.cjs +64 -9
  73. package/dist/ssr-dom.d.cts +2 -0
  74. package/dist/ssr-dom.d.ts +2 -0
  75. package/dist/ssr-dom.js +2 -1
  76. package/dist/ssr.cjs +850 -170
  77. package/dist/ssr.d.cts +5 -3
  78. package/dist/ssr.d.ts +5 -3
  79. package/dist/ssr.js +16 -15
  80. package/dist/{tagFactory-DkytnJws.d.cts → tagFactory-BfEh69VF.d.cts} +7 -0
  81. package/dist/{tagFactory-Bnd_Nph9.d.ts → tagFactory-pSYiLYyh.d.ts} +7 -0
  82. package/dist/testing.cjs +817 -132
  83. package/dist/testing.d.cts +4 -2
  84. package/dist/testing.d.ts +4 -2
  85. package/dist/testing.js +18 -17
  86. package/dist/track-core-0edROAF5.d.ts +187 -0
  87. package/dist/track-core-DN5fYLWi.d.cts +187 -0
  88. package/dist/ui.cjs +293 -43
  89. package/dist/ui.js +10 -12
  90. package/dist/widgets.cjs +285 -27
  91. package/dist/widgets.js +7 -7
  92. package/package.json +1 -1
  93. package/dist/chunk-7ZHH77QA.js +0 -9
@@ -3,7 +3,7 @@ import {
3
3
  currentDisposerCapture,
4
4
  endDisposerCapture,
5
5
  reportError
6
- } from "./chunk-S37PZD6I.js";
6
+ } from "./chunk-BF3WBJJQ.js";
7
7
  import {
8
8
  DEV,
9
9
  devWarn
@@ -172,6 +172,201 @@ function bindOwnerScope(fn) {
172
172
  return (...args) => runWithOwnerScope(scope, () => fn(...args));
173
173
  }
174
174
  var currentStructOwner = null;
175
+ var frozenOwners = 0;
176
+ var ACTIVE = 0;
177
+ var PAUSED = 1;
178
+ var ENDED = 2;
179
+ var NOOP = () => {
180
+ };
181
+ var skippedWhileHeld = /* @__PURE__ */ new Set();
182
+ var waiters = /* @__PURE__ */ new Set();
183
+ var heldRoots = /* @__PURE__ */ new Set();
184
+ function ownerState(tok) {
185
+ let state = ACTIVE;
186
+ for (let t = tok; t !== null; ) {
187
+ const o = t.sub;
188
+ if (o === null) return ENDED;
189
+ if (o._frozen === true) state = PAUSED;
190
+ t = o._owner ?? null;
191
+ }
192
+ return state;
193
+ }
194
+ var endWatchers = /* @__PURE__ */ new Set();
195
+ var stateWatchers = /* @__PURE__ */ new Set();
196
+ var stateCheckQueued = false;
197
+ function queueStateCheck() {
198
+ if (stateCheckQueued || stateWatchers.size === 0) return;
199
+ stateCheckQueued = true;
200
+ queueMicrotask(() => {
201
+ stateCheckQueued = false;
202
+ for (const watcher of [...stateWatchers]) {
203
+ if (!stateWatchers.has(watcher)) continue;
204
+ const state = watcher.check.state();
205
+ if (state === ENDED) stateWatchers.delete(watcher);
206
+ if (state === ENDED || state === watcher.last) continue;
207
+ watcher.last = state;
208
+ try {
209
+ watcher.listener(state);
210
+ } catch (err) {
211
+ reportError(err, { phase: "effect" });
212
+ }
213
+ }
214
+ });
215
+ }
216
+ var ALWAYS_ACTIVE = Object.assign(() => false, {
217
+ state: () => ACTIVE,
218
+ wait: (onActive) => {
219
+ onActive();
220
+ return NOOP;
221
+ },
222
+ onEnd: () => NOOP,
223
+ run: (fn) => fn(),
224
+ onChange: () => NOOP,
225
+ within: () => false
226
+ });
227
+ function captureFrozen() {
228
+ const tok = currentStructOwner;
229
+ if (tok === null) return ALWAYS_ACTIVE;
230
+ const state = () => ownerState(tok);
231
+ const check = Object.assign(() => state() !== ACTIVE, {
232
+ state,
233
+ wait: (onActive, onEnd) => {
234
+ const now = state();
235
+ if (now !== PAUSED) {
236
+ (now === ACTIVE ? onActive : onEnd)();
237
+ return NOOP;
238
+ }
239
+ const waiter = { check, onActive, onEnd };
240
+ waiters.add(waiter);
241
+ return () => {
242
+ waiters.delete(waiter);
243
+ };
244
+ },
245
+ onEnd: (onEnd) => {
246
+ if (state() === ENDED) {
247
+ onEnd();
248
+ return NOOP;
249
+ }
250
+ const watcher = { check, onActive: NOOP, onEnd };
251
+ endWatchers.add(watcher);
252
+ return () => {
253
+ endWatchers.delete(watcher);
254
+ };
255
+ },
256
+ run: (fn) => {
257
+ const prev = currentStructOwner;
258
+ currentStructOwner = tok.sub === null ? null : tok;
259
+ try {
260
+ return fn();
261
+ } finally {
262
+ currentStructOwner = prev;
263
+ }
264
+ },
265
+ onChange: (listener) => {
266
+ const last = state();
267
+ if (last === ENDED) return NOOP;
268
+ const watcher = { check, last, listener };
269
+ stateWatchers.add(watcher);
270
+ return () => {
271
+ stateWatchers.delete(watcher);
272
+ };
273
+ },
274
+ within: (owner) => {
275
+ const target = owner.run(() => currentStructOwner);
276
+ if (target === null) return false;
277
+ for (let t = tok; t !== null; ) {
278
+ if (t === target) return true;
279
+ const o = t.sub;
280
+ if (o === null) return false;
281
+ t = o._owner ?? null;
282
+ }
283
+ return false;
284
+ }
285
+ });
286
+ return check;
287
+ }
288
+ function holdSubtree(root) {
289
+ heldRoots.add(root);
290
+ return () => {
291
+ if (heldRoots.delete(root)) settleHeld();
292
+ };
293
+ }
294
+ function isHeld(sub) {
295
+ if (frozenOwners !== 0 && hasFrozenOwner(sub)) return true;
296
+ if (heldRoots.size !== 0) {
297
+ const node = sub._errorNode;
298
+ if (node != null) {
299
+ for (const root of heldRoots) if (root.contains(node)) return true;
300
+ }
301
+ }
302
+ return false;
303
+ }
304
+ function notifyEnded() {
305
+ for (const watcher of stateWatchers) if (watcher.check.state() === ENDED) stateWatchers.delete(watcher);
306
+ let ended = null;
307
+ for (const watcher of endWatchers) {
308
+ if (watcher.check.state() !== ENDED) continue;
309
+ endWatchers.delete(watcher);
310
+ (ended ?? (ended = [])).push(watcher);
311
+ }
312
+ if (ended === null) return;
313
+ for (const watcher of ended) {
314
+ try {
315
+ watcher.onEnd();
316
+ } catch (err) {
317
+ reportError(err, { phase: "cleanup" });
318
+ }
319
+ }
320
+ }
321
+ function dropReleasedSkipped() {
322
+ for (const sub of skippedWhileHeld) {
323
+ if (sub._disposed === true || sub.depsHead == null) skippedWhileHeld.delete(sub);
324
+ }
325
+ }
326
+ function settleHeld() {
327
+ for (const sub of skippedWhileHeld) {
328
+ if (sub._disposed === true) skippedWhileHeld.delete(sub);
329
+ else if (!isHeld(sub)) {
330
+ skippedWhileHeld.delete(sub);
331
+ if (!pendingSet.has(sub)) {
332
+ pendingSet.add(sub);
333
+ pendingQueue.push(sub);
334
+ }
335
+ }
336
+ }
337
+ if (frozenOwners === 0 && heldRoots.size === 0) skippedWhileHeld.clear();
338
+ let ready = null;
339
+ for (const waiter of waiters) {
340
+ if (waiter.check.state() === PAUSED) continue;
341
+ waiters.delete(waiter);
342
+ (ready ?? (ready = [])).push(waiter);
343
+ }
344
+ if (ready !== null) {
345
+ const settle = ready;
346
+ queueMicrotask(() => {
347
+ for (const waiter of settle) {
348
+ const state = waiter.check.state();
349
+ if (state === PAUSED) waiters.add(waiter);
350
+ else
351
+ try {
352
+ (state === ACTIVE ? waiter.onActive : waiter.onEnd)();
353
+ } catch (err) {
354
+ reportError(err, { phase: "effect" });
355
+ }
356
+ }
357
+ });
358
+ }
359
+ if (pendingQueue.length > 0) drainNotificationQueue();
360
+ }
361
+ function hasFrozenOwner(sub) {
362
+ for (let t = sub._owner ?? null; t !== null; ) {
363
+ const o = t.sub;
364
+ if (o === null) return false;
365
+ if (o._frozen === true) return true;
366
+ t = o._owner ?? null;
367
+ }
368
+ return false;
369
+ }
175
370
  var subscriberEpochCounter = 0;
176
371
  function retrack(effectFn, subscriber) {
177
372
  const prev = currentSubscriber;
@@ -279,6 +474,20 @@ function structuralBinding(commit, ownerNode) {
279
474
  } finally {
280
475
  currentStructOwner = prev;
281
476
  }
477
+ },
478
+ freeze: () => {
479
+ const s = sub;
480
+ if (s._disposed || s._frozen) return;
481
+ s._frozen = true;
482
+ frozenOwners++;
483
+ queueStateCheck();
484
+ },
485
+ thaw: () => {
486
+ if (!sub._frozen) return;
487
+ sub._frozen = false;
488
+ frozenOwners--;
489
+ queueStateCheck();
490
+ settleHeld();
282
491
  }
283
492
  };
284
493
  }
@@ -307,20 +516,34 @@ function createBinding(commit, ownerNode, structural) {
307
516
  subscriber._errorNode = ownerNode;
308
517
  subscriber._tok = null;
309
518
  subscriber._owner = null;
519
+ subscriber._frozen = false;
310
520
  if (structural) subscriber._tok = { sub: subscriber };
311
521
  try {
312
522
  run();
313
523
  } catch (err) {
314
524
  subscriber._disposed = true;
315
525
  subscriber._errorNode = void 0;
316
- if (subscriber._tok != null) subscriber._tok.sub = null;
526
+ if (subscriber._tok != null) {
527
+ subscriber._tok.sub = null;
528
+ if (endWatchers.size !== 0 || stateWatchers.size !== 0) notifyEnded();
529
+ }
317
530
  cleanup(subscriber);
318
531
  throw err;
319
532
  }
320
533
  subscriber._dispose = () => {
321
534
  subscriber._disposed = true;
535
+ const wasFrozen = subscriber._frozen === true;
536
+ if (wasFrozen) {
537
+ subscriber._frozen = false;
538
+ frozenOwners--;
539
+ }
322
540
  subscriber._errorNode = void 0;
323
- if (subscriber._tok != null) subscriber._tok.sub = null;
541
+ if (subscriber._tok != null) {
542
+ subscriber._tok.sub = null;
543
+ if (endWatchers.size !== 0 || stateWatchers.size !== 0) notifyEnded();
544
+ if (skippedWhileHeld.size !== 0) dropReleasedSkipped();
545
+ if (wasFrozen || waiters.size !== 0) settleHeld();
546
+ }
324
547
  cleanup(subscriber);
325
548
  };
326
549
  return subscriber;
@@ -430,6 +653,10 @@ function runPendingOwners(sub) {
430
653
  }
431
654
  }
432
655
  function runQueued(sub) {
656
+ if ((frozenOwners !== 0 || heldRoots.size !== 0) && isHeld(sub)) {
657
+ skippedWhileHeld.add(sub);
658
+ return;
659
+ }
433
660
  if (quarantined.size > 0 && quarantined.has(sub)) return;
434
661
  if (sub._hasComputedDep === true && !depsChanged(sub)) return;
435
662
  if (tickRepeat(sub)) {
@@ -577,7 +804,7 @@ function forEachSubscriber(signal, visit) {
577
804
  }
578
805
 
579
806
  // src/reactivity/track.ts
580
- var _runtimeVersion = true ? "4.14.0" : "dev";
807
+ var _runtimeVersion = true ? "4.15.0" : "dev";
581
808
  var REGISTRY_KEY = /* @__PURE__ */ Symbol.for("sibujs.reactive.v1");
582
809
  function resolveReactiveApi() {
583
810
  const g = globalThis;
@@ -613,6 +840,8 @@ function resolveReactiveApi() {
613
840
  runWithOwnerScope,
614
841
  bindOwnerScope,
615
842
  structuralBinding,
843
+ captureFrozen,
844
+ holdSubtree,
616
845
  version: _runtimeVersion
617
846
  };
618
847
  g[REGISTRY_KEY] = local;
@@ -640,6 +869,22 @@ var getOwnerScope2 = API.getOwnerScope ?? getOwnerScope;
640
869
  var runWithOwnerScope2 = API.runWithOwnerScope ?? runWithOwnerScope;
641
870
  var bindOwnerScope2 = API.bindOwnerScope ?? bindOwnerScope;
642
871
  var structuralBinding2 = API.structuralBinding ?? ((commit, ownerNode) => ({ stop: API.reactiveBinding(commit, ownerNode), run: (fn) => fn() }));
872
+ var captureFrozen2 = API.captureFrozen ?? (() => Object.assign(() => false, {
873
+ state: () => 0,
874
+ wait: (onActive) => {
875
+ onActive();
876
+ return () => {
877
+ };
878
+ },
879
+ onEnd: () => () => {
880
+ },
881
+ run: (fn) => fn(),
882
+ onChange: () => () => {
883
+ },
884
+ within: () => false
885
+ }));
886
+ var holdSubtree2 = API.holdSubtree ?? (() => () => {
887
+ });
643
888
 
644
889
  export {
645
890
  suspendTracking2 as suspendTracking,
@@ -661,5 +906,7 @@ export {
661
906
  getOwnerScope2 as getOwnerScope,
662
907
  runWithOwnerScope2 as runWithOwnerScope,
663
908
  bindOwnerScope2 as bindOwnerScope,
664
- structuralBinding2 as structuralBinding
909
+ structuralBinding2 as structuralBinding,
910
+ captureFrozen2 as captureFrozen,
911
+ holdSubtree2 as holdSubtree
665
912
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  globalSingleton
3
- } from "./chunk-7ZHH77QA.js";
3
+ } from "./chunk-BF3WBJJQ.js";
4
4
 
5
5
  // src/utils/singletonResource.ts
6
6
  function singletonResource(io) {
@@ -1,12 +1,10 @@
1
- import {
2
- globalSingleton
3
- } from "./chunk-7ZHH77QA.js";
4
1
  import {
5
2
  adoptThenable
6
3
  } from "./chunk-5HZXGZ6T.js";
7
4
  import {
5
+ globalSingleton,
8
6
  reportError
9
- } from "./chunk-S37PZD6I.js";
7
+ } from "./chunk-BF3WBJJQ.js";
10
8
  import {
11
9
  DEV,
12
10
  devWarn
@@ -3,7 +3,7 @@ import {
3
3
  notifySubscribers,
4
4
  queueSignalNotification,
5
5
  recordDependency
6
- } from "./chunk-MIRKTVH4.js";
6
+ } from "./chunk-GFM5WWPU.js";
7
7
  import {
8
8
  DEV
9
9
  } from "./chunk-NT3ZYB5S.js";
@@ -1,25 +1,23 @@
1
1
  import {
2
2
  acquireTitle
3
- } from "./chunk-52XFPGSN.js";
3
+ } from "./chunk-HTPOIAAL.js";
4
4
  import {
5
5
  isUnsafeKey
6
6
  } from "./chunk-62BDYGAG.js";
7
- import {
8
- globalSingleton
9
- } from "./chunk-7ZHH77QA.js";
10
7
  import {
11
8
  effect
12
- } from "./chunk-AE32RGWX.js";
9
+ } from "./chunk-LGUXYHTZ.js";
13
10
  import {
14
11
  sanitizeUrl
15
12
  } from "./chunk-B3HOT4TK.js";
16
13
  import {
17
14
  batch,
18
15
  signal
19
- } from "./chunk-4FJSAUKB.js";
16
+ } from "./chunk-IUBV5WO5.js";
20
17
  import {
18
+ globalSingleton,
21
19
  reportError
22
- } from "./chunk-S37PZD6I.js";
20
+ } from "./chunk-BF3WBJJQ.js";
23
21
 
24
22
  // src/browser/media.ts
25
23
  function media(query) {
@@ -3,20 +3,17 @@ import {
3
3
  } from "./chunk-N5TBYXHW.js";
4
4
  import {
5
5
  domBinding
6
- } from "./chunk-CCKUNHVU.js";
6
+ } from "./chunk-DAEXQJQA.js";
7
7
  import {
8
8
  bindAttribute,
9
9
  setSafeAttribute
10
- } from "./chunk-HQIAL7F2.js";
10
+ } from "./chunk-XPDZ2LDR.js";
11
11
  import {
12
12
  isBlockedElement
13
13
  } from "./chunk-RVWJGWCL.js";
14
14
  import {
15
15
  derived
16
- } from "./chunk-N7A6FKWW.js";
17
- import {
18
- globalSingleton
19
- } from "./chunk-7ZHH77QA.js";
16
+ } from "./chunk-D44TAGCT.js";
20
17
  import {
21
18
  isEventHandlerAttr,
22
19
  sanitizeStylesheetText
@@ -26,20 +23,21 @@ import {
26
23
  } from "./chunk-5HZXGZ6T.js";
27
24
  import {
28
25
  signal
29
- } from "./chunk-4FJSAUKB.js";
26
+ } from "./chunk-IUBV5WO5.js";
30
27
  import {
31
28
  reactiveBinding,
32
29
  track
33
- } from "./chunk-MIRKTVH4.js";
30
+ } from "./chunk-GFM5WWPU.js";
34
31
  import {
35
32
  dispose,
36
33
  disposeNodeOwn,
34
+ globalSingleton,
37
35
  registerDisposer,
38
36
  replaceChildrenSafely,
39
37
  reportError,
40
38
  unregisterDisposer,
41
39
  withDisposerRollback
42
- } from "./chunk-S37PZD6I.js";
40
+ } from "./chunk-BF3WBJJQ.js";
43
41
 
44
42
  // src/ui/form.ts
45
43
  function required(message = "This field is required") {
@@ -3,17 +3,17 @@ import {
3
3
  } from "./chunk-UYTYNCMZ.js";
4
4
  import {
5
5
  emitDevtools
6
- } from "./chunk-4FJSAUKB.js";
6
+ } from "./chunk-IUBV5WO5.js";
7
7
  import {
8
8
  cleanup,
9
9
  getOwnerScope,
10
10
  retrack,
11
11
  runWithOwnerScope,
12
12
  untracked
13
- } from "./chunk-MIRKTVH4.js";
13
+ } from "./chunk-GFM5WWPU.js";
14
14
  import {
15
15
  reportError
16
- } from "./chunk-S37PZD6I.js";
16
+ } from "./chunk-BF3WBJJQ.js";
17
17
  import {
18
18
  devAssert
19
19
  } from "./chunk-NT3ZYB5S.js";
@@ -1,23 +1,21 @@
1
- import {
2
- globalSingleton
3
- } from "./chunk-7ZHH77QA.js";
4
1
  import {
5
2
  effect
6
- } from "./chunk-AE32RGWX.js";
3
+ } from "./chunk-LGUXYHTZ.js";
7
4
  import {
8
5
  stripHtml
9
6
  } from "./chunk-B3HOT4TK.js";
10
7
  import {
11
8
  signal
12
- } from "./chunk-4FJSAUKB.js";
9
+ } from "./chunk-IUBV5WO5.js";
13
10
  import {
14
11
  forEachSubscriber,
15
12
  getSubscriberCount,
16
13
  getSubscriberDeps
17
- } from "./chunk-MIRKTVH4.js";
14
+ } from "./chunk-GFM5WWPU.js";
18
15
  import {
19
- dispose
20
- } from "./chunk-S37PZD6I.js";
16
+ dispose,
17
+ globalSingleton
18
+ } from "./chunk-BF3WBJJQ.js";
21
19
  import {
22
20
  isDev
23
21
  } from "./chunk-NT3ZYB5S.js";
@@ -1,3 +1,6 @@
1
+ import {
2
+ styleKeyToProperty
3
+ } from "./chunk-DNCQDFJJ.js";
1
4
  import {
2
5
  requestSlot
3
6
  } from "./chunk-UYTYNCMZ.js";
@@ -635,9 +638,15 @@ var ServerAttr = class {
635
638
  get nodeValue() {
636
639
  return this._value;
637
640
  }
641
+ set nodeValue(v) {
642
+ this.value = v;
643
+ }
638
644
  get textContent() {
639
645
  return this._value;
640
646
  }
647
+ set textContent(v) {
648
+ this.value = v;
649
+ }
641
650
  };
642
651
  var ServerNamedNodeMap = class extends Array {
643
652
  static get [Symbol.species]() {
@@ -674,12 +683,6 @@ function splitDeclarations(text) {
674
683
  out.push(text.slice(start));
675
684
  return out;
676
685
  }
677
- var CAMEL_EXCEPTIONS = { cssFloat: "float" };
678
- function toKebab(prop) {
679
- if (prop.startsWith("--")) return prop;
680
- if (Object.hasOwn(CAMEL_EXCEPTIONS, prop)) return CAMEL_EXCEPTIONS[prop];
681
- return prop.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).replace(/^(webkit|moz|ms)-/, "-$1-");
682
- }
683
686
  var ServerStyle = class {
684
687
  constructor(el) {
685
688
  this.el = el;
@@ -774,13 +777,13 @@ function styleProxy(style) {
774
777
  get(target, key, receiver) {
775
778
  if (typeof key === "string" && !(key in target)) {
776
779
  if (/^\d+$/.test(key)) return target.item(Number(key));
777
- return target.getPropertyValue(toKebab(key));
780
+ return target.getPropertyValue(styleKeyToProperty(key));
778
781
  }
779
782
  return Reflect.get(target, key, receiver);
780
783
  },
781
784
  set(target, key, value, receiver) {
782
785
  if (typeof key === "string" && !(key in target)) {
783
- target.setProperty(toKebab(key), value == null ? "" : String(value));
786
+ target.setProperty(styleKeyToProperty(key), value == null ? "" : String(value));
784
787
  return true;
785
788
  }
786
789
  return Reflect.set(target, key, value, receiver);
@@ -1185,6 +1188,10 @@ var ServerInputElement = class extends ServerHTMLElement {
1185
1188
  get defaultChecked() {
1186
1189
  return this.hasAttribute("checked");
1187
1190
  }
1191
+ /** Reflects to the `checked` attribute; `checked` follows it until written (dirty checkedness). */
1192
+ set defaultChecked(v) {
1193
+ this.toggleAttribute("checked", !!v);
1194
+ }
1188
1195
  get type() {
1189
1196
  return (this.getAttribute("type") ?? "text").toLowerCase();
1190
1197
  }
@@ -1242,8 +1249,10 @@ reflectDisabled(ServerTextAreaElement.prototype);
1242
1249
  var ServerOptionElement = class extends ServerHTMLElement {
1243
1250
  constructor() {
1244
1251
  super(...arguments);
1245
- /** @internal */
1252
+ /** Selectedness; `null` while it follows the `selected` attribute. @internal */
1246
1253
  this._selected = null;
1254
+ /** Set by a `selected` write: the attribute no longer decides selectedness. @internal */
1255
+ this._dirty = false;
1247
1256
  }
1248
1257
  get value() {
1249
1258
  return this.getAttribute("value") ?? this.text;
@@ -1260,18 +1269,48 @@ var ServerOptionElement = class extends ServerHTMLElement {
1260
1269
  get label() {
1261
1270
  return this.getAttribute("label") ?? this.text;
1262
1271
  }
1272
+ set label(v) {
1273
+ this.setAttribute("label", v);
1274
+ }
1263
1275
  get selected() {
1264
1276
  return this._selected ?? this.hasAttribute("selected");
1265
1277
  }
1266
1278
  set selected(v) {
1267
1279
  this._selected = !!v;
1280
+ this._dirty = true;
1281
+ const select = singleSelectOf(this);
1282
+ if (select && v) {
1283
+ for (const o of select.options) if (o !== this) o._selected = false;
1284
+ }
1268
1285
  }
1269
1286
  get defaultSelected() {
1270
1287
  return this.hasAttribute("selected");
1271
1288
  }
1289
+ /** Reflects to the `selected` attribute; `selected` follows it unless written. */
1290
+ set defaultSelected(v) {
1291
+ this.toggleAttribute("selected", !!v);
1292
+ if (this._dirty) return;
1293
+ this._selected = null;
1294
+ const select = singleSelectOf(this);
1295
+ if (!select) return;
1296
+ let last = null;
1297
+ for (const o of select.options) if (o.selected) last = o;
1298
+ for (const o of select.options) if (o !== last && o.selected) o._selected = false;
1299
+ }
1272
1300
  };
1301
+ function singleSelectOf(option) {
1302
+ let parent = option.parentNode;
1303
+ if (parent instanceof ServerElement && parent.localName === "optgroup") parent = parent.parentNode;
1304
+ return parent instanceof ServerSelectElement && !parent.hasAttribute("multiple") ? parent : null;
1305
+ }
1273
1306
  reflectDisabled(ServerOptionElement.prototype);
1274
1307
  var ServerSelectElement = class extends ServerHTMLElement {
1308
+ get multiple() {
1309
+ return this.hasAttribute("multiple");
1310
+ }
1311
+ set multiple(v) {
1312
+ this.toggleAttribute("multiple", !!v);
1313
+ }
1275
1314
  get options() {
1276
1315
  return this.querySelectorAll("option");
1277
1316
  }
@@ -2,11 +2,11 @@ import {
2
2
  acquireBase,
3
3
  acquireScrollRestorationMode,
4
4
  acquireTitle
5
- } from "./chunk-52XFPGSN.js";
5
+ } from "./chunk-HTPOIAAL.js";
6
6
  import {
7
7
  div,
8
8
  span
9
- } from "./chunk-7ILEHTVX.js";
9
+ } from "./chunk-4AEFGRYW.js";
10
10
  import {
11
11
  STATIC_VALUE_RESOLVER,
12
12
  planHeadElementEntry,
@@ -14,13 +14,10 @@ import {
14
14
  recordServerHead,
15
15
  serializeHeadEntry,
16
16
  serializePlannedHeadEntry
17
- } from "./chunk-BOYKGGVD.js";
18
- import {
19
- globalSingleton
20
- } from "./chunk-7ZHH77QA.js";
17
+ } from "./chunk-DRWOD7RZ.js";
21
18
  import {
22
19
  effect
23
- } from "./chunk-AE32RGWX.js";
20
+ } from "./chunk-LGUXYHTZ.js";
24
21
  import {
25
22
  sanitizeUrl
26
23
  } from "./chunk-B3HOT4TK.js";
@@ -30,15 +27,16 @@ import {
30
27
  import {
31
28
  batch,
32
29
  signal
33
- } from "./chunk-4FJSAUKB.js";
30
+ } from "./chunk-IUBV5WO5.js";
34
31
  import {
35
32
  bindOwnerScope
36
- } from "./chunk-MIRKTVH4.js";
33
+ } from "./chunk-GFM5WWPU.js";
37
34
  import {
35
+ globalSingleton,
38
36
  registerDisposer,
39
37
  replaceChildrenSafely,
40
38
  reportError
41
- } from "./chunk-S37PZD6I.js";
39
+ } from "./chunk-BF3WBJJQ.js";
42
40
 
43
41
  // src/platform/head.ts
44
42
  function escapeScriptJsonLocal(json) {
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-5HZXGZ6T.js";
4
4
  import {
5
5
  signal
6
- } from "./chunk-4FJSAUKB.js";
6
+ } from "./chunk-IUBV5WO5.js";
7
7
  import {
8
8
  registerDisposer,
9
9
  reportError
10
- } from "./chunk-S37PZD6I.js";
10
+ } from "./chunk-BF3WBJJQ.js";
11
11
 
12
12
  // src/ui/transition.ts
13
13
  function transition(element, options = {}) {