sibujs 4.4.0 → 4.6.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 (112) hide show
  1. package/README.md +11 -0
  2. package/dist/browser.cjs +339 -130
  3. package/dist/browser.d.cts +61 -16
  4. package/dist/browser.d.ts +61 -16
  5. package/dist/browser.js +8 -6
  6. package/dist/build.cjs +273 -82
  7. package/dist/build.js +15 -16
  8. package/dist/cdn.dev.global.js +12 -12
  9. package/dist/cdn.full.dev.global.js +11 -11
  10. package/dist/cdn.full.global.js +10 -10
  11. package/dist/cdn.global.js +12 -12
  12. package/dist/{chunk-IXKSNWV5.js → chunk-2INLLLMZ.js} +1 -1
  13. package/dist/chunk-3ISI6ACU.js +44 -0
  14. package/dist/{chunk-VCTAEPSB.js → chunk-47M47FOM.js} +11 -3
  15. package/dist/chunk-5HZXGZ6T.js +24 -0
  16. package/dist/{chunk-KKLW7YWL.js → chunk-5MT6SJ3P.js} +275 -144
  17. package/dist/{chunk-3BTTCZ5J.js → chunk-5Q4R7HCL.js} +42 -4
  18. package/dist/{chunk-ADM46X22.js → chunk-7GQCWFOE.js} +157 -61
  19. package/dist/{chunk-4Z3SPQ67.js → chunk-7NCARGJW.js} +16 -8
  20. package/dist/{chunk-5DXA2J44.js → chunk-7XHATCIH.js} +5 -2
  21. package/dist/{chunk-LQFGQNMV.js → chunk-AIF3Z2T7.js} +302 -39
  22. package/dist/{chunk-UCALUKB5.js → chunk-BAAG6ZTI.js} +98 -29
  23. package/dist/{chunk-NVNJH22U.js → chunk-D33YTSX5.js} +2 -2
  24. package/dist/{chunk-M2F7TZHH.js → chunk-DKGBBKOF.js} +136 -80
  25. package/dist/{chunk-NIOYEGBQ.js → chunk-HURREPU2.js} +27 -13
  26. package/dist/{chunk-HFCOH2GN.js → chunk-HYXDKS4N.js} +153 -110
  27. package/dist/chunk-J6FW5TV6.js +233 -0
  28. package/dist/{chunk-36S2YPP4.js → chunk-JSXPZCET.js} +1 -1
  29. package/dist/chunk-NYNYSPK7.js +318 -0
  30. package/dist/{chunk-HQSEH5F6.js → chunk-ORMZXBKQ.js} +108 -45
  31. package/dist/{chunk-LYVUX7NT.js → chunk-OXUY2A6L.js} +287 -130
  32. package/dist/{chunk-6GSIXTWX.js → chunk-PK6FK2G2.js} +187 -66
  33. package/dist/{chunk-W2EQ7X2L.js → chunk-QE4TTDU3.js} +47 -9
  34. package/dist/{chunk-XLO7SLIX.js → chunk-SXXVZMKZ.js} +262 -70
  35. package/dist/{chunk-R25EFXXC.js → chunk-TUCPL2HB.js} +3 -3
  36. package/dist/{chunk-RR7M3FHM.js → chunk-UZQ6ALFS.js} +3 -3
  37. package/dist/{chunk-PNIRUQ4C.js → chunk-VVWPJ543.js} +6 -8
  38. package/dist/{chunk-7GIHSAWB.js → chunk-XC4MEKGA.js} +3 -3
  39. package/dist/{chunk-SKPTERHP.js → chunk-XRRZKZYX.js} +55 -31
  40. package/dist/{contracts-DBdg9J_a.d.cts → contracts-DRIuclVT.d.cts} +10 -2
  41. package/dist/{contracts-DBdg9J_a.d.ts → contracts-DRIuclVT.d.ts} +10 -2
  42. package/dist/{customElement-CNZxEB9G.d.ts → customElement-MmInOW1U.d.cts} +59 -10
  43. package/dist/{customElement-CNZxEB9G.d.cts → customElement-MmInOW1U.d.ts} +59 -10
  44. package/dist/data.cjs +293 -125
  45. package/dist/data.d.cts +47 -9
  46. package/dist/data.d.ts +47 -9
  47. package/dist/data.js +12 -9
  48. package/dist/devtools.cjs +121 -58
  49. package/dist/devtools.js +7 -8
  50. package/dist/dispose-GEIG2KOF.js +28 -0
  51. package/dist/ecosystem.cjs +391 -112
  52. package/dist/ecosystem.d.cts +31 -7
  53. package/dist/ecosystem.d.ts +31 -7
  54. package/dist/ecosystem.js +12 -12
  55. package/dist/extras.cjs +2250 -879
  56. package/dist/extras.d.cts +10 -9
  57. package/dist/extras.d.ts +10 -9
  58. package/dist/extras.js +39 -28
  59. package/dist/index.cjs +273 -82
  60. package/dist/index.d.cts +44 -154
  61. package/dist/index.d.ts +44 -154
  62. package/dist/index.js +24 -27
  63. package/dist/motion.cjs +137 -42
  64. package/dist/motion.js +5 -5
  65. package/dist/patterns.cjs +397 -48
  66. package/dist/patterns.d.cts +32 -9
  67. package/dist/patterns.d.ts +32 -9
  68. package/dist/patterns.js +8 -8
  69. package/dist/performance.cjs +338 -217
  70. package/dist/performance.d.cts +2 -2
  71. package/dist/performance.d.ts +2 -2
  72. package/dist/performance.js +8 -9
  73. package/dist/plugin-DVgSnTfK.d.cts +112 -0
  74. package/dist/plugin-DVgSnTfK.d.ts +112 -0
  75. package/dist/plugins.cjs +587 -203
  76. package/dist/plugins.d.cts +3 -3
  77. package/dist/plugins.d.ts +3 -3
  78. package/dist/plugins.js +35 -23
  79. package/dist/signal-EotCj4hS.d.cts +110 -0
  80. package/dist/signal-EotCj4hS.d.ts +110 -0
  81. package/dist/{ssr-BiPRdZ6n.d.cts → ssr-Bli9XRW5.d.cts} +5 -0
  82. package/dist/{ssr-BiPRdZ6n.d.ts → ssr-Bli9XRW5.d.ts} +5 -0
  83. package/dist/{ssr-Y7XOEPEN.js → ssr-XOTUASDO.js} +4 -5
  84. package/dist/ssr.cjs +214 -73
  85. package/dist/ssr.d.cts +9 -3
  86. package/dist/ssr.d.ts +9 -3
  87. package/dist/ssr.js +11 -12
  88. package/dist/{startup-BMpaiMhP.d.ts → startup-BLfSeL15.d.cts} +73 -22
  89. package/dist/{startup-BMpaiMhP.d.cts → startup-BLfSeL15.d.ts} +73 -22
  90. package/dist/tagFactory-DFstCLQV.d.cts +117 -0
  91. package/dist/tagFactory-DkaNVUNV.d.ts +117 -0
  92. package/dist/testing.cjs +2481 -2153
  93. package/dist/testing.d.cts +56 -5
  94. package/dist/testing.d.ts +56 -5
  95. package/dist/testing.js +580 -307
  96. package/dist/ui.cjs +798 -328
  97. package/dist/ui.d.cts +40 -7
  98. package/dist/ui.d.ts +40 -7
  99. package/dist/ui.js +151 -56
  100. package/dist/widgets.cjs +319 -285
  101. package/dist/widgets.js +9 -10
  102. package/package.json +2 -2
  103. package/dist/chunk-2WLZ6757.js +0 -149
  104. package/dist/chunk-7NBDXVHS.js +0 -60
  105. package/dist/chunk-CCSJMTRN.js +0 -15
  106. package/dist/chunk-QKRPLZ2V.js +0 -108
  107. package/dist/chunk-WWV3SJ3L.js +0 -131
  108. package/dist/dispose-46BOMMQJ.js +0 -19
  109. package/dist/plugin-D30wlGW5.d.cts +0 -71
  110. package/dist/plugin-D30wlGW5.d.ts +0 -71
  111. package/dist/tagFactory-Bzupt4Pj.d.cts +0 -55
  112. package/dist/tagFactory-Bzupt4Pj.d.ts +0 -55
package/dist/index.d.cts CHANGED
@@ -1,6 +1,8 @@
1
- import { N as NodeChild, a as NodeChildren, T as TagProps } from './tagFactory-Bzupt4Pj.cjs';
2
- export { D as Dispose, S as SVG_NS, t as tagFactory } from './tagFactory-Bzupt4Pj.cjs';
3
- export { T as TrustedHTML, t as trustHTML } from './ssr-BiPRdZ6n.cjs';
1
+ import { N as NodeChild, a as NodeChildren, T as TagProps, D as DerivedAccessor } from './tagFactory-DFstCLQV.cjs';
2
+ export { b as Dispose, S as SVG_NS, d as derived, t as tagFactory } from './tagFactory-DFstCLQV.cjs';
3
+ import { A as Accessor } from './signal-EotCj4hS.cjs';
4
+ export { D as DisposableAccessor, E as ExternalSource, S as SignalOptions, e as external, s as signal } from './signal-EotCj4hS.cjs';
5
+ export { T as TrustedHTML, t as trustHTML } from './ssr-Bli9XRW5.cjs';
4
6
  import { R as ReactiveSignal } from './signal-BnWpq6WB.cjs';
5
7
 
6
8
  interface ErrorBoundaryOptions {
@@ -416,6 +418,11 @@ declare function context<T>(defaultValue: T): Context<T>;
416
418
  *
417
419
  * Each call returns a fresh incrementing id. Optionally accepts a prefix.
418
420
  *
421
+ * Inside an SSR request (`runInSSRContext`) the counter belongs to that request,
422
+ * so every request's ids start from 1 — independent of earlier or concurrent
423
+ * requests, and identical to a fresh client's sequence for hydration. Outside a
424
+ * request the shared client counter is used.
425
+ *
419
426
  * IDs are plain strings (not reactive) — call once per component instance
420
427
  * and reuse the returned value for both sides of the association.
421
428
  *
@@ -558,7 +565,7 @@ declare function registerDisposer(node: Node, teardown: () => void): void;
558
565
  * The teardown is assumed to have already run (or to be deliberately abandoned);
559
566
  * this only releases the reference.
560
567
  */
561
- declare function unregisterDisposer(node: Node, teardown: () => void): void;
568
+ declare function unregisterDisposer(node: Node, teardown: () => void): boolean;
562
569
  /**
563
570
  * Run all registered teardowns for a node and its descendants,
564
571
  * cleaning up reactive subscriptions to prevent memory leaks.
@@ -667,12 +674,22 @@ declare function DynamicComponent(is: () => string | Component$1): HTMLElement;
667
674
  * assigns that row a new item or position.
668
675
  *
669
676
  * Identity is not value freshness: a row keeps its DOM node when its key is
670
- * unchanged, and still updates its contents when the item behind that key is
671
- * replaced.
672
- *
673
- * Reading `item()` subscribes to the ROW's cell, not to the whole-array signal,
674
- * so a row only re-renders when its own item/index actually changes — mutating
675
- * an unrelated row does not disturb it.
677
+ * unchanged, and its bindings still update when the item behind that key is
678
+ * replaced — provided they read the getter rather than a value captured when
679
+ * `render` ran.
680
+ *
681
+ * `render` runs untracked, whether the row appears in the first pass or in a
682
+ * later update: a signal read directly in its body — `item()` and `index()`
683
+ * included — is a one-time read that never subscribes anything and goes stale
684
+ * when the key later receives a replacement item or moves. Pass the getters
685
+ * down (`Row({ item, index })`) or read them inside bindings
686
+ * (`() => item().name`) and effects created by the row.
687
+ *
688
+ * A binding that reads `item()` subscribes to the ROW's cell, not to the
689
+ * whole-array signal. `render` never re-runs for an existing key; only the
690
+ * bindings and effects that read that row's `item()` / `index()` re-run, and
691
+ * only when its own item or position actually changes — mutating an unrelated
692
+ * row does not disturb it.
676
693
  *
677
694
  * @param getArray A reactive getter returning an array.
678
695
  * @param render A function that receives reactive item and index getters and returns a NodeChild.
@@ -1196,109 +1213,11 @@ type Slots = Record<string, SlotFn>;
1196
1213
  * @param slots The slot map, which may be undefined.
1197
1214
  * @param name Slot name; defaults to `"default"`.
1198
1215
  * @returns The slot factory, or `undefined` when the slot was not provided.
1216
+ * Only an OWN function-valued entry counts: an inherited member such as
1217
+ * `toString` or `constructor` is not a slot, so fallback content renders.
1199
1218
  */
1200
1219
  declare function getSlot(slots: Slots | undefined, name?: string): SlotFn | undefined;
1201
1220
 
1202
- declare const __accessor: unique symbol;
1203
- /**
1204
- * A reactive signal getter returned by signal(), derived(), and similar primitives.
1205
- *
1206
- * Pass an Accessor directly into reactive prop positions — never call it there:
1207
- * ```ts
1208
- * const [count, setCount] = signal(0);
1209
- *
1210
- * div(count) // ✓ reactive — Accessor passed directly
1211
- * div(() => count()) // ✓ reactive — explicit arrow wrapper
1212
- * div(count()) // ✗ static — evaluated once, not reactive
1213
- * ```
1214
- */
1215
- type Accessor<T> = (() => T) & {
1216
- readonly [__accessor]?: never;
1217
- };
1218
- type SetState<T> = (next: T | ((prev: T) => T)) => void;
1219
- type StateTuple<T> = [Accessor<T>, SetState<T>];
1220
- /** Options for signal */
1221
- interface SignalOptions<T = unknown> {
1222
- /** Debug name for devtools inspection. Only used in development. */
1223
- name?: string;
1224
- /** Custom equality function. Defaults to Object.is(). */
1225
- equals?: (prev: T, next: T) => boolean;
1226
- }
1227
- /**
1228
- * signal creates a reactive signal that holds a value of type T.
1229
- * Returns a tuple: [getter, setter].
1230
- *
1231
- * @param initial Initial value
1232
- * @param options Optional config: `{ name: "count" }` for devtools labeling
1233
- * @returns A `[getter, setter]` tuple. Calling the getter inside a reactive
1234
- * context subscribes to the signal; the setter accepts a value or an updater.
1235
- */
1236
- declare function signal<T>(initial: T, options?: SignalOptions<T>): StateTuple<T>;
1237
- /**
1238
- * A valueless reactive token standing in for state SibuJS does not own.
1239
- *
1240
- * See {@link external}.
1241
- */
1242
- interface ExternalSource {
1243
- /**
1244
- * Declare, from inside a reactive computation, that it reads the external
1245
- * state this source represents. Call it in the same places you would read a
1246
- * signal — the top of a binding getter, a `derived()` body, an `effect()`.
1247
- *
1248
- * Outside a tracking context it is a no-op, exactly like reading a signal.
1249
- */
1250
- track(): void;
1251
- /**
1252
- * Declare that the external state changed. Every consumer that called
1253
- * {@link ExternalSource.track} is invalidated.
1254
- *
1255
- * Participates in `batch()` like any signal write: inside a batch, consumers
1256
- * are notified once when the outermost batch flushes.
1257
- */
1258
- invalidate(): void;
1259
- }
1260
- /**
1261
- * Create a reactive source for state that lives outside SibuJS — a domain
1262
- * engine, a media element, a canvas scene, an editor document, a cache a
1263
- * socket writes into.
1264
- *
1265
- * The pattern is two lines: `track()` where you read, `invalidate()` after you
1266
- * mutate.
1267
- *
1268
- * ```ts
1269
- * import { Chess } from "chess.js";
1270
- * import { external } from "sibujs";
1271
- *
1272
- * const game = new Chess(); // owns the rules and the mutable state
1273
- * const moved = external(); // owns "something changed"
1274
- *
1275
- * ctx.text("@status", () => {
1276
- * moved.track(); // this binding reads the engine
1277
- * return game.isCheckmate() ? "Checkmate" : `${game.turn()} to move`;
1278
- * });
1279
- *
1280
- * game.move({ from: "e2", to: "e4" });
1281
- * moved.invalidate(); // every consumer above re-reads
1282
- * ```
1283
- *
1284
- * **One source is one invalidation domain.** Every consumer of a source
1285
- * re-runs on every `invalidate()`, so the granularity of your updates is
1286
- * exactly the granularity of your sources: one for a whole engine is the
1287
- * cheapest to write, several (`board`, `clock`, `history`) let an update touch
1288
- * only what it affects. See `docs/architecture/external-state.md` for the
1289
- * trade-offs and when subdividing is worth it.
1290
- *
1291
- * Ownership, disposal and error routing are the consumer's, not the source's:
1292
- * a disposed binding or effect is never invalidated, and a consumer that
1293
- * throws is reported through the normal runtime error pipeline with its own
1294
- * phase and node.
1295
- *
1296
- * @param options `name` labels the source in devtools (development only).
1297
- */
1298
- declare function external(options?: {
1299
- name?: string;
1300
- }): ExternalSource;
1301
-
1302
1221
  /**
1303
1222
  * Reactive array hook. Provides common array operations that
1304
1223
  * automatically trigger reactive updates.
@@ -1498,45 +1417,6 @@ declare function deepEqual(a: unknown, b: unknown, seen?: Map<object, Set<object
1498
1417
  */
1499
1418
  declare function deepSignal<T>(initial: T): [Accessor<T>, (next: T | ((prev: T) => T)) => void];
1500
1419
 
1501
- /**
1502
- * derived creates a derived reactive signal whose value updates when dependencies change.
1503
- *
1504
- * Uses lazy pull-based evaluation with a single dirty flag:
1505
- * - When a dependency changes, the computed is marked dirty (no re-evaluation).
1506
- * - Dirtiness propagates downstream via propagateDirty.
1507
- * - The getter only re-evaluates when actually read (pull-based).
1508
- * - On re-evaluation, dependencies are re-tracked via retrack() so that
1509
- * derived-of-derived chains propagate correctly without paying the full
1510
- * Set-delete + re-add cost of track()'s cleanup phase.
1511
- *
1512
- * STABILIZATION — why a dirty flag is enough:
1513
- *
1514
- * A dirty computed does NOT imply a changed value. Downstream effects are
1515
- * enqueued by `propagateDirty` at write time, before this computed has had a
1516
- * chance to recompute and compare. Rather than adding a three-color
1517
- * (CLEAN/CHECK/DIRTY) propagation pass — which an earlier revision measured as
1518
- * a regression on every benchmark, because the extra state has nothing to skip
1519
- * when values genuinely change — the engine settles the question lazily at
1520
- * DRAIN time: `cs._validate` recomputes a dirty computed and `cs.__v` is bumped
1521
- * ONLY when the new value differs under this computed's comparator. The
1522
- * scheduler compares that version against what each subscriber last observed
1523
- * and suppresses the run when nothing changed (see `depsChanged` in
1524
- * ../../reactivity/track-core.ts).
1525
- *
1526
- * That keeps the cheap boolean dirty flag AND makes `equals` actually stop
1527
- * propagation, with recomputation still fully lazy: `_validate` only ever runs
1528
- * when an effect is genuinely about to observe the value.
1529
- *
1530
- * @returns An accessor for the computed value. It recomputes lazily on read
1531
- * after any dependency changes.
1532
- */
1533
- declare function derived<T>(getter: () => T, options?: {
1534
- name?: string;
1535
- /** Custom equality — when the recomputed value equals the previous,
1536
- * downstream subscribers are not notified. Defaults to `Object.is`. */
1537
- equals?: (a: T, b: T) => boolean;
1538
- }): Accessor<T>;
1539
-
1540
1420
  /** Options for effect */
1541
1421
  interface EffectOptions {
1542
1422
  /** Error handler for exceptions thrown during effect execution. */
@@ -1668,7 +1548,9 @@ declare function watch<T>(getter: () => T, callback: (value: T, prev: T | undefi
1668
1548
  * dependency-tracked). The setter typically updates upstream signals,
1669
1549
  * and the derived value recomputes on the next read.
1670
1550
  *
1671
- * Returns a `[getter, setter]` tuple, matching the `signal()` API.
1551
+ * Returns a `[getter, setter]` tuple, matching the `signal()` API. The getter
1552
+ * is the underlying `derived()` accessor, so `getter.dispose()` releases its
1553
+ * upstream subscriptions when the writable is discarded before its sources.
1672
1554
  *
1673
1555
  * @param get Computed getter — reads reactive dependencies
1674
1556
  * @param set Setter — called with the new value, typically updates upstream signals
@@ -1695,11 +1577,11 @@ declare function watch<T>(getter: () => T, callback: (value: T, prev: T | undefi
1695
1577
  * fullName(); // "Jane Smith"
1696
1578
  * ```
1697
1579
  *
1698
- * @returns A store handle with `subscribe`, `set` and `update`.
1580
+ * @returns A `[getter, setter]` tuple; the getter carries `dispose()`.
1699
1581
  */
1700
1582
  declare function writable<T>(get: () => T, set: (value: T) => void, options?: {
1701
1583
  name?: string;
1702
- }): [Accessor<T>, (value: T) => void];
1584
+ }): [DerivedAccessor<T>, (value: T) => void];
1703
1585
 
1704
1586
  /**
1705
1587
  * SSR context for SibuJS.
@@ -1724,6 +1606,13 @@ declare function writable<T>(get: () => T, set: (value: T) => void, options?: {
1724
1606
  interface SSRStore {
1725
1607
  ssr: boolean;
1726
1608
  suspenseIdCounter: number;
1609
+ /**
1610
+ * `createId()` counter for this request. Request-scoped for the same reason
1611
+ * as `suspenseIdCounter`: a server render's ids must not depend on earlier or
1612
+ * concurrent requests, and must match a fresh client's sequence. Optional so
1613
+ * stores created elsewhere start it lazily at 0.
1614
+ */
1615
+ idCounter?: number;
1727
1616
  /**
1728
1617
  * Per-request data caches (e.g. the query cache). Lazily created and keyed
1729
1618
  * by subsystem so request-scoped data never bleeds between concurrent
@@ -2172,7 +2061,8 @@ interface TransitionState {
2172
2061
  * and avoids the complexity of an interruptible reconciler.
2173
2062
  *
2174
2063
  * Async callbacks are supported: `pending()` stays `true` until the
2175
- * returned promise resolves OR rejects.
2064
+ * returned promise resolves OR rejects. With overlapping `start()` calls it
2065
+ * stays `true` until every one of them has settled.
2176
2066
  *
2177
2067
  * @example
2178
2068
  * ```ts
@@ -2306,4 +2196,4 @@ declare const untracked: ReactiveApi["untracked"];
2306
2196
  declare const retrack: ReactiveApi["retrack"];
2307
2197
  declare const setMaxDrainIterations: ReactiveApi["setMaxDrainIterations"];
2308
2198
 
2309
- export { type Accessor, type ActionFn, type AnchorProps, type ArrayActions, type AsyncDerivedContext, type AsyncDerivedState, type AudioProps, type ButtonProps, type Context, DynamicComponent, type EachBindings, type EachEventBindings, type EffectBody, type EffectOptions, type EnhanceContext, type EnhanceSetup, ErrorBoundary, type ErrorBoundaryOptions, type ErrorBoundaryProps, ErrorDisplay, type ErrorDisplayProps, type ErrorSeverity, type ExternalSource, type FormProps, Fragment, type ImgProps, type InputProps, type InputType, type IslandLoader, type IslandRegistration, type IslandStrategy, KeepAlive, type KeepAliveOptions, type LabelProps, type LazyIslandLoader, Loading, type LoadingProps, type LongPressOptions, MAX_DRAIN_TEARDOWNS, type MediaProps, type MountIslandsOptions, NodeChild, NodeChildren, type OnCleanup, type OptionProps, Portal, type Ref, type RuntimeErrorContext, type RuntimeErrorHandler, type RuntimeErrorPhase, type SSRStore, type SelectProps, type SignalOptions, type SlotFn, type Slots, type StoreActions, Suspense, type SuspenseProps, TagProps, type TextareaProps, type TypedTagFunction, type VideoProps, __resetIdCounter, a, abbr, action, address, area, array, article, aside, asyncDerived, audio, autoResize, b, base, batch, bdi, bdo, bindDynamic, blockquote, body, br, button, canvas, caption, catchError, catchErrorAsync, center, checkLeaks, circle, cite, clickOutside, clipPath, code, col, colgroup, context, copyOnClick, createId, customElement, data, datalist, dd, deepEqual, deepSignal, defer, defs, del, derived, details, dfn, dialog, disableSSR, dispose, div, dl, dt, each, effect, ellipse, em, embed, enableSSR, enhance, enhanceAll, enqueueBatchedSignal, external, fieldset, figcaption, figure, font, footer, form, g, getAction, getRequestScopedCache, getRuntimeErrorHandler, getSSRStore, getSlot, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, isBatching, isSSR, kbd, label, lazy, lazyIsland, legend, li, line, linearGradient, link, longPress, main, map, mark, marker, marquee, mask, match, math, menu, meta, meter, mount, mountIslands, nav, nextTick, noscript, object, ol, on, onCleanup, onMount, onUnmount, optgroup, option, output, p, param, path, pattern, picture, polygon, polyline, portal, pre, progress, q, radialGradient, reactiveArray, rect, ref, registerAction, registerComponent, registerDisposer, registerIsland, replaceChildrenSafely, reportDrainRunaway, reportError, resolveComponent, retrack, rp, rt, ruby, runInSSRContext, s, samp, script, section, select, setGlobalErrorHandler, setMaxDrainIterations, setRuntimeErrorHandler, show, signal, slot, small, source, span, stop, store, strict, strictEffect, strong, style, sub, summary, sup, svg, symbol, table, takePendingError, tbody, td, template, text, textarea, tfoot, th, thead, time, title, tr, track$1 as track, transition, trapFocus, tspan, u, ul, unregisterComponent, unregisterDisposer, unregisterIsland, untracked, use, var_, video, watch, when, withSSR, writable };
2199
+ export { Accessor, type ActionFn, type AnchorProps, type ArrayActions, type AsyncDerivedContext, type AsyncDerivedState, type AudioProps, type ButtonProps, type Context, DerivedAccessor, DynamicComponent, type EachBindings, type EachEventBindings, type EffectBody, type EffectOptions, type EnhanceContext, type EnhanceSetup, ErrorBoundary, type ErrorBoundaryOptions, type ErrorBoundaryProps, ErrorDisplay, type ErrorDisplayProps, type ErrorSeverity, type FormProps, Fragment, type ImgProps, type InputProps, type InputType, type IslandLoader, type IslandRegistration, type IslandStrategy, KeepAlive, type KeepAliveOptions, type LabelProps, type LazyIslandLoader, Loading, type LoadingProps, type LongPressOptions, MAX_DRAIN_TEARDOWNS, type MediaProps, type MountIslandsOptions, NodeChild, NodeChildren, type OnCleanup, type OptionProps, Portal, type Ref, type RuntimeErrorContext, type RuntimeErrorHandler, type RuntimeErrorPhase, type SSRStore, type SelectProps, type SlotFn, type Slots, type StoreActions, Suspense, type SuspenseProps, TagProps, type TextareaProps, type TypedTagFunction, type VideoProps, __resetIdCounter, a, abbr, action, address, area, array, article, aside, asyncDerived, audio, autoResize, b, base, batch, bdi, bdo, bindDynamic, blockquote, body, br, button, canvas, caption, catchError, catchErrorAsync, center, checkLeaks, circle, cite, clickOutside, clipPath, code, col, colgroup, context, copyOnClick, createId, customElement, data, datalist, dd, deepEqual, deepSignal, defer, defs, del, details, dfn, dialog, disableSSR, dispose, div, dl, dt, each, effect, ellipse, em, embed, enableSSR, enhance, enhanceAll, enqueueBatchedSignal, fieldset, figcaption, figure, font, footer, form, g, getAction, getRequestScopedCache, getRuntimeErrorHandler, getSSRStore, getSlot, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, isBatching, isSSR, kbd, label, lazy, lazyIsland, legend, li, line, linearGradient, link, longPress, main, map, mark, marker, marquee, mask, match, math, menu, meta, meter, mount, mountIslands, nav, nextTick, noscript, object, ol, on, onCleanup, onMount, onUnmount, optgroup, option, output, p, param, path, pattern, picture, polygon, polyline, portal, pre, progress, q, radialGradient, reactiveArray, rect, ref, registerAction, registerComponent, registerDisposer, registerIsland, replaceChildrenSafely, reportDrainRunaway, reportError, resolveComponent, retrack, rp, rt, ruby, runInSSRContext, s, samp, script, section, select, setGlobalErrorHandler, setMaxDrainIterations, setRuntimeErrorHandler, show, slot, small, source, span, stop, store, strict, strictEffect, strong, style, sub, summary, sup, svg, symbol, table, takePendingError, tbody, td, template, text, textarea, tfoot, th, thead, time, title, tr, track$1 as track, transition, trapFocus, tspan, u, ul, unregisterComponent, unregisterDisposer, unregisterIsland, untracked, use, var_, video, watch, when, withSSR, writable };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- import { N as NodeChild, a as NodeChildren, T as TagProps } from './tagFactory-Bzupt4Pj.js';
2
- export { D as Dispose, S as SVG_NS, t as tagFactory } from './tagFactory-Bzupt4Pj.js';
3
- export { T as TrustedHTML, t as trustHTML } from './ssr-BiPRdZ6n.js';
1
+ import { N as NodeChild, a as NodeChildren, T as TagProps, D as DerivedAccessor } from './tagFactory-DkaNVUNV.js';
2
+ export { b as Dispose, S as SVG_NS, d as derived, t as tagFactory } from './tagFactory-DkaNVUNV.js';
3
+ import { A as Accessor } from './signal-EotCj4hS.js';
4
+ export { D as DisposableAccessor, E as ExternalSource, S as SignalOptions, e as external, s as signal } from './signal-EotCj4hS.js';
5
+ export { T as TrustedHTML, t as trustHTML } from './ssr-Bli9XRW5.js';
4
6
  import { R as ReactiveSignal } from './signal-BnWpq6WB.js';
5
7
 
6
8
  interface ErrorBoundaryOptions {
@@ -416,6 +418,11 @@ declare function context<T>(defaultValue: T): Context<T>;
416
418
  *
417
419
  * Each call returns a fresh incrementing id. Optionally accepts a prefix.
418
420
  *
421
+ * Inside an SSR request (`runInSSRContext`) the counter belongs to that request,
422
+ * so every request's ids start from 1 — independent of earlier or concurrent
423
+ * requests, and identical to a fresh client's sequence for hydration. Outside a
424
+ * request the shared client counter is used.
425
+ *
419
426
  * IDs are plain strings (not reactive) — call once per component instance
420
427
  * and reuse the returned value for both sides of the association.
421
428
  *
@@ -558,7 +565,7 @@ declare function registerDisposer(node: Node, teardown: () => void): void;
558
565
  * The teardown is assumed to have already run (or to be deliberately abandoned);
559
566
  * this only releases the reference.
560
567
  */
561
- declare function unregisterDisposer(node: Node, teardown: () => void): void;
568
+ declare function unregisterDisposer(node: Node, teardown: () => void): boolean;
562
569
  /**
563
570
  * Run all registered teardowns for a node and its descendants,
564
571
  * cleaning up reactive subscriptions to prevent memory leaks.
@@ -667,12 +674,22 @@ declare function DynamicComponent(is: () => string | Component$1): HTMLElement;
667
674
  * assigns that row a new item or position.
668
675
  *
669
676
  * Identity is not value freshness: a row keeps its DOM node when its key is
670
- * unchanged, and still updates its contents when the item behind that key is
671
- * replaced.
672
- *
673
- * Reading `item()` subscribes to the ROW's cell, not to the whole-array signal,
674
- * so a row only re-renders when its own item/index actually changes — mutating
675
- * an unrelated row does not disturb it.
677
+ * unchanged, and its bindings still update when the item behind that key is
678
+ * replaced — provided they read the getter rather than a value captured when
679
+ * `render` ran.
680
+ *
681
+ * `render` runs untracked, whether the row appears in the first pass or in a
682
+ * later update: a signal read directly in its body — `item()` and `index()`
683
+ * included — is a one-time read that never subscribes anything and goes stale
684
+ * when the key later receives a replacement item or moves. Pass the getters
685
+ * down (`Row({ item, index })`) or read them inside bindings
686
+ * (`() => item().name`) and effects created by the row.
687
+ *
688
+ * A binding that reads `item()` subscribes to the ROW's cell, not to the
689
+ * whole-array signal. `render` never re-runs for an existing key; only the
690
+ * bindings and effects that read that row's `item()` / `index()` re-run, and
691
+ * only when its own item or position actually changes — mutating an unrelated
692
+ * row does not disturb it.
676
693
  *
677
694
  * @param getArray A reactive getter returning an array.
678
695
  * @param render A function that receives reactive item and index getters and returns a NodeChild.
@@ -1196,109 +1213,11 @@ type Slots = Record<string, SlotFn>;
1196
1213
  * @param slots The slot map, which may be undefined.
1197
1214
  * @param name Slot name; defaults to `"default"`.
1198
1215
  * @returns The slot factory, or `undefined` when the slot was not provided.
1216
+ * Only an OWN function-valued entry counts: an inherited member such as
1217
+ * `toString` or `constructor` is not a slot, so fallback content renders.
1199
1218
  */
1200
1219
  declare function getSlot(slots: Slots | undefined, name?: string): SlotFn | undefined;
1201
1220
 
1202
- declare const __accessor: unique symbol;
1203
- /**
1204
- * A reactive signal getter returned by signal(), derived(), and similar primitives.
1205
- *
1206
- * Pass an Accessor directly into reactive prop positions — never call it there:
1207
- * ```ts
1208
- * const [count, setCount] = signal(0);
1209
- *
1210
- * div(count) // ✓ reactive — Accessor passed directly
1211
- * div(() => count()) // ✓ reactive — explicit arrow wrapper
1212
- * div(count()) // ✗ static — evaluated once, not reactive
1213
- * ```
1214
- */
1215
- type Accessor<T> = (() => T) & {
1216
- readonly [__accessor]?: never;
1217
- };
1218
- type SetState<T> = (next: T | ((prev: T) => T)) => void;
1219
- type StateTuple<T> = [Accessor<T>, SetState<T>];
1220
- /** Options for signal */
1221
- interface SignalOptions<T = unknown> {
1222
- /** Debug name for devtools inspection. Only used in development. */
1223
- name?: string;
1224
- /** Custom equality function. Defaults to Object.is(). */
1225
- equals?: (prev: T, next: T) => boolean;
1226
- }
1227
- /**
1228
- * signal creates a reactive signal that holds a value of type T.
1229
- * Returns a tuple: [getter, setter].
1230
- *
1231
- * @param initial Initial value
1232
- * @param options Optional config: `{ name: "count" }` for devtools labeling
1233
- * @returns A `[getter, setter]` tuple. Calling the getter inside a reactive
1234
- * context subscribes to the signal; the setter accepts a value or an updater.
1235
- */
1236
- declare function signal<T>(initial: T, options?: SignalOptions<T>): StateTuple<T>;
1237
- /**
1238
- * A valueless reactive token standing in for state SibuJS does not own.
1239
- *
1240
- * See {@link external}.
1241
- */
1242
- interface ExternalSource {
1243
- /**
1244
- * Declare, from inside a reactive computation, that it reads the external
1245
- * state this source represents. Call it in the same places you would read a
1246
- * signal — the top of a binding getter, a `derived()` body, an `effect()`.
1247
- *
1248
- * Outside a tracking context it is a no-op, exactly like reading a signal.
1249
- */
1250
- track(): void;
1251
- /**
1252
- * Declare that the external state changed. Every consumer that called
1253
- * {@link ExternalSource.track} is invalidated.
1254
- *
1255
- * Participates in `batch()` like any signal write: inside a batch, consumers
1256
- * are notified once when the outermost batch flushes.
1257
- */
1258
- invalidate(): void;
1259
- }
1260
- /**
1261
- * Create a reactive source for state that lives outside SibuJS — a domain
1262
- * engine, a media element, a canvas scene, an editor document, a cache a
1263
- * socket writes into.
1264
- *
1265
- * The pattern is two lines: `track()` where you read, `invalidate()` after you
1266
- * mutate.
1267
- *
1268
- * ```ts
1269
- * import { Chess } from "chess.js";
1270
- * import { external } from "sibujs";
1271
- *
1272
- * const game = new Chess(); // owns the rules and the mutable state
1273
- * const moved = external(); // owns "something changed"
1274
- *
1275
- * ctx.text("@status", () => {
1276
- * moved.track(); // this binding reads the engine
1277
- * return game.isCheckmate() ? "Checkmate" : `${game.turn()} to move`;
1278
- * });
1279
- *
1280
- * game.move({ from: "e2", to: "e4" });
1281
- * moved.invalidate(); // every consumer above re-reads
1282
- * ```
1283
- *
1284
- * **One source is one invalidation domain.** Every consumer of a source
1285
- * re-runs on every `invalidate()`, so the granularity of your updates is
1286
- * exactly the granularity of your sources: one for a whole engine is the
1287
- * cheapest to write, several (`board`, `clock`, `history`) let an update touch
1288
- * only what it affects. See `docs/architecture/external-state.md` for the
1289
- * trade-offs and when subdividing is worth it.
1290
- *
1291
- * Ownership, disposal and error routing are the consumer's, not the source's:
1292
- * a disposed binding or effect is never invalidated, and a consumer that
1293
- * throws is reported through the normal runtime error pipeline with its own
1294
- * phase and node.
1295
- *
1296
- * @param options `name` labels the source in devtools (development only).
1297
- */
1298
- declare function external(options?: {
1299
- name?: string;
1300
- }): ExternalSource;
1301
-
1302
1221
  /**
1303
1222
  * Reactive array hook. Provides common array operations that
1304
1223
  * automatically trigger reactive updates.
@@ -1498,45 +1417,6 @@ declare function deepEqual(a: unknown, b: unknown, seen?: Map<object, Set<object
1498
1417
  */
1499
1418
  declare function deepSignal<T>(initial: T): [Accessor<T>, (next: T | ((prev: T) => T)) => void];
1500
1419
 
1501
- /**
1502
- * derived creates a derived reactive signal whose value updates when dependencies change.
1503
- *
1504
- * Uses lazy pull-based evaluation with a single dirty flag:
1505
- * - When a dependency changes, the computed is marked dirty (no re-evaluation).
1506
- * - Dirtiness propagates downstream via propagateDirty.
1507
- * - The getter only re-evaluates when actually read (pull-based).
1508
- * - On re-evaluation, dependencies are re-tracked via retrack() so that
1509
- * derived-of-derived chains propagate correctly without paying the full
1510
- * Set-delete + re-add cost of track()'s cleanup phase.
1511
- *
1512
- * STABILIZATION — why a dirty flag is enough:
1513
- *
1514
- * A dirty computed does NOT imply a changed value. Downstream effects are
1515
- * enqueued by `propagateDirty` at write time, before this computed has had a
1516
- * chance to recompute and compare. Rather than adding a three-color
1517
- * (CLEAN/CHECK/DIRTY) propagation pass — which an earlier revision measured as
1518
- * a regression on every benchmark, because the extra state has nothing to skip
1519
- * when values genuinely change — the engine settles the question lazily at
1520
- * DRAIN time: `cs._validate` recomputes a dirty computed and `cs.__v` is bumped
1521
- * ONLY when the new value differs under this computed's comparator. The
1522
- * scheduler compares that version against what each subscriber last observed
1523
- * and suppresses the run when nothing changed (see `depsChanged` in
1524
- * ../../reactivity/track-core.ts).
1525
- *
1526
- * That keeps the cheap boolean dirty flag AND makes `equals` actually stop
1527
- * propagation, with recomputation still fully lazy: `_validate` only ever runs
1528
- * when an effect is genuinely about to observe the value.
1529
- *
1530
- * @returns An accessor for the computed value. It recomputes lazily on read
1531
- * after any dependency changes.
1532
- */
1533
- declare function derived<T>(getter: () => T, options?: {
1534
- name?: string;
1535
- /** Custom equality — when the recomputed value equals the previous,
1536
- * downstream subscribers are not notified. Defaults to `Object.is`. */
1537
- equals?: (a: T, b: T) => boolean;
1538
- }): Accessor<T>;
1539
-
1540
1420
  /** Options for effect */
1541
1421
  interface EffectOptions {
1542
1422
  /** Error handler for exceptions thrown during effect execution. */
@@ -1668,7 +1548,9 @@ declare function watch<T>(getter: () => T, callback: (value: T, prev: T | undefi
1668
1548
  * dependency-tracked). The setter typically updates upstream signals,
1669
1549
  * and the derived value recomputes on the next read.
1670
1550
  *
1671
- * Returns a `[getter, setter]` tuple, matching the `signal()` API.
1551
+ * Returns a `[getter, setter]` tuple, matching the `signal()` API. The getter
1552
+ * is the underlying `derived()` accessor, so `getter.dispose()` releases its
1553
+ * upstream subscriptions when the writable is discarded before its sources.
1672
1554
  *
1673
1555
  * @param get Computed getter — reads reactive dependencies
1674
1556
  * @param set Setter — called with the new value, typically updates upstream signals
@@ -1695,11 +1577,11 @@ declare function watch<T>(getter: () => T, callback: (value: T, prev: T | undefi
1695
1577
  * fullName(); // "Jane Smith"
1696
1578
  * ```
1697
1579
  *
1698
- * @returns A store handle with `subscribe`, `set` and `update`.
1580
+ * @returns A `[getter, setter]` tuple; the getter carries `dispose()`.
1699
1581
  */
1700
1582
  declare function writable<T>(get: () => T, set: (value: T) => void, options?: {
1701
1583
  name?: string;
1702
- }): [Accessor<T>, (value: T) => void];
1584
+ }): [DerivedAccessor<T>, (value: T) => void];
1703
1585
 
1704
1586
  /**
1705
1587
  * SSR context for SibuJS.
@@ -1724,6 +1606,13 @@ declare function writable<T>(get: () => T, set: (value: T) => void, options?: {
1724
1606
  interface SSRStore {
1725
1607
  ssr: boolean;
1726
1608
  suspenseIdCounter: number;
1609
+ /**
1610
+ * `createId()` counter for this request. Request-scoped for the same reason
1611
+ * as `suspenseIdCounter`: a server render's ids must not depend on earlier or
1612
+ * concurrent requests, and must match a fresh client's sequence. Optional so
1613
+ * stores created elsewhere start it lazily at 0.
1614
+ */
1615
+ idCounter?: number;
1727
1616
  /**
1728
1617
  * Per-request data caches (e.g. the query cache). Lazily created and keyed
1729
1618
  * by subsystem so request-scoped data never bleeds between concurrent
@@ -2172,7 +2061,8 @@ interface TransitionState {
2172
2061
  * and avoids the complexity of an interruptible reconciler.
2173
2062
  *
2174
2063
  * Async callbacks are supported: `pending()` stays `true` until the
2175
- * returned promise resolves OR rejects.
2064
+ * returned promise resolves OR rejects. With overlapping `start()` calls it
2065
+ * stays `true` until every one of them has settled.
2176
2066
  *
2177
2067
  * @example
2178
2068
  * ```ts
@@ -2306,4 +2196,4 @@ declare const untracked: ReactiveApi["untracked"];
2306
2196
  declare const retrack: ReactiveApi["retrack"];
2307
2197
  declare const setMaxDrainIterations: ReactiveApi["setMaxDrainIterations"];
2308
2198
 
2309
- export { type Accessor, type ActionFn, type AnchorProps, type ArrayActions, type AsyncDerivedContext, type AsyncDerivedState, type AudioProps, type ButtonProps, type Context, DynamicComponent, type EachBindings, type EachEventBindings, type EffectBody, type EffectOptions, type EnhanceContext, type EnhanceSetup, ErrorBoundary, type ErrorBoundaryOptions, type ErrorBoundaryProps, ErrorDisplay, type ErrorDisplayProps, type ErrorSeverity, type ExternalSource, type FormProps, Fragment, type ImgProps, type InputProps, type InputType, type IslandLoader, type IslandRegistration, type IslandStrategy, KeepAlive, type KeepAliveOptions, type LabelProps, type LazyIslandLoader, Loading, type LoadingProps, type LongPressOptions, MAX_DRAIN_TEARDOWNS, type MediaProps, type MountIslandsOptions, NodeChild, NodeChildren, type OnCleanup, type OptionProps, Portal, type Ref, type RuntimeErrorContext, type RuntimeErrorHandler, type RuntimeErrorPhase, type SSRStore, type SelectProps, type SignalOptions, type SlotFn, type Slots, type StoreActions, Suspense, type SuspenseProps, TagProps, type TextareaProps, type TypedTagFunction, type VideoProps, __resetIdCounter, a, abbr, action, address, area, array, article, aside, asyncDerived, audio, autoResize, b, base, batch, bdi, bdo, bindDynamic, blockquote, body, br, button, canvas, caption, catchError, catchErrorAsync, center, checkLeaks, circle, cite, clickOutside, clipPath, code, col, colgroup, context, copyOnClick, createId, customElement, data, datalist, dd, deepEqual, deepSignal, defer, defs, del, derived, details, dfn, dialog, disableSSR, dispose, div, dl, dt, each, effect, ellipse, em, embed, enableSSR, enhance, enhanceAll, enqueueBatchedSignal, external, fieldset, figcaption, figure, font, footer, form, g, getAction, getRequestScopedCache, getRuntimeErrorHandler, getSSRStore, getSlot, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, isBatching, isSSR, kbd, label, lazy, lazyIsland, legend, li, line, linearGradient, link, longPress, main, map, mark, marker, marquee, mask, match, math, menu, meta, meter, mount, mountIslands, nav, nextTick, noscript, object, ol, on, onCleanup, onMount, onUnmount, optgroup, option, output, p, param, path, pattern, picture, polygon, polyline, portal, pre, progress, q, radialGradient, reactiveArray, rect, ref, registerAction, registerComponent, registerDisposer, registerIsland, replaceChildrenSafely, reportDrainRunaway, reportError, resolveComponent, retrack, rp, rt, ruby, runInSSRContext, s, samp, script, section, select, setGlobalErrorHandler, setMaxDrainIterations, setRuntimeErrorHandler, show, signal, slot, small, source, span, stop, store, strict, strictEffect, strong, style, sub, summary, sup, svg, symbol, table, takePendingError, tbody, td, template, text, textarea, tfoot, th, thead, time, title, tr, track$1 as track, transition, trapFocus, tspan, u, ul, unregisterComponent, unregisterDisposer, unregisterIsland, untracked, use, var_, video, watch, when, withSSR, writable };
2199
+ export { Accessor, type ActionFn, type AnchorProps, type ArrayActions, type AsyncDerivedContext, type AsyncDerivedState, type AudioProps, type ButtonProps, type Context, DerivedAccessor, DynamicComponent, type EachBindings, type EachEventBindings, type EffectBody, type EffectOptions, type EnhanceContext, type EnhanceSetup, ErrorBoundary, type ErrorBoundaryOptions, type ErrorBoundaryProps, ErrorDisplay, type ErrorDisplayProps, type ErrorSeverity, type FormProps, Fragment, type ImgProps, type InputProps, type InputType, type IslandLoader, type IslandRegistration, type IslandStrategy, KeepAlive, type KeepAliveOptions, type LabelProps, type LazyIslandLoader, Loading, type LoadingProps, type LongPressOptions, MAX_DRAIN_TEARDOWNS, type MediaProps, type MountIslandsOptions, NodeChild, NodeChildren, type OnCleanup, type OptionProps, Portal, type Ref, type RuntimeErrorContext, type RuntimeErrorHandler, type RuntimeErrorPhase, type SSRStore, type SelectProps, type SlotFn, type Slots, type StoreActions, Suspense, type SuspenseProps, TagProps, type TextareaProps, type TypedTagFunction, type VideoProps, __resetIdCounter, a, abbr, action, address, area, array, article, aside, asyncDerived, audio, autoResize, b, base, batch, bdi, bdo, bindDynamic, blockquote, body, br, button, canvas, caption, catchError, catchErrorAsync, center, checkLeaks, circle, cite, clickOutside, clipPath, code, col, colgroup, context, copyOnClick, createId, customElement, data, datalist, dd, deepEqual, deepSignal, defer, defs, del, details, dfn, dialog, disableSSR, dispose, div, dl, dt, each, effect, ellipse, em, embed, enableSSR, enhance, enhanceAll, enqueueBatchedSignal, fieldset, figcaption, figure, font, footer, form, g, getAction, getRequestScopedCache, getRuntimeErrorHandler, getSSRStore, getSlot, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, isBatching, isSSR, kbd, label, lazy, lazyIsland, legend, li, line, linearGradient, link, longPress, main, map, mark, marker, marquee, mask, match, math, menu, meta, meter, mount, mountIslands, nav, nextTick, noscript, object, ol, on, onCleanup, onMount, onUnmount, optgroup, option, output, p, param, path, pattern, picture, polygon, polyline, portal, pre, progress, q, radialGradient, reactiveArray, rect, ref, registerAction, registerComponent, registerDisposer, registerIsland, replaceChildrenSafely, reportDrainRunaway, reportError, resolveComponent, retrack, rp, rt, ruby, runInSSRContext, s, samp, script, section, select, setGlobalErrorHandler, setMaxDrainIterations, setRuntimeErrorHandler, show, slot, small, source, span, stop, store, strict, strictEffect, strong, style, sub, summary, sup, svg, symbol, table, takePendingError, tbody, td, template, text, textarea, tfoot, th, thead, time, title, tr, track$1 as track, transition, trapFocus, tspan, u, ul, unregisterComponent, unregisterDisposer, unregisterIsland, untracked, use, var_, video, watch, when, withSSR, writable };