@fictjs/runtime 0.5.1 → 0.5.2

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 (48) hide show
  1. package/dist/advanced.cjs +9 -9
  2. package/dist/advanced.js +4 -4
  3. package/dist/{chunk-AR6NSCZM.js → chunk-4NUHM77Z.js} +3 -3
  4. package/dist/{chunk-RY5CY4CI.js → chunk-D2IWOO4X.js} +2 -2
  5. package/dist/{chunk-LFMXNQZC.cjs → chunk-KNGHYGK4.cjs} +17 -17
  6. package/dist/{chunk-LFMXNQZC.cjs.map → chunk-KNGHYGK4.cjs.map} +1 -1
  7. package/dist/{chunk-7BO6P2KP.js → chunk-LRFMCJY3.js} +84 -1
  8. package/dist/chunk-LRFMCJY3.js.map +1 -0
  9. package/dist/{chunk-4ZPZM5IG.cjs → chunk-QB2UD62G.cjs} +8 -8
  10. package/dist/{chunk-4ZPZM5IG.cjs.map → chunk-QB2UD62G.cjs.map} +1 -1
  11. package/dist/{chunk-5OYBRKE4.js → chunk-SLFAEVKJ.js} +3 -3
  12. package/dist/{chunk-WJHXPF7M.cjs → chunk-Z6M3HKLG.cjs} +156 -156
  13. package/dist/{chunk-WJHXPF7M.cjs.map → chunk-Z6M3HKLG.cjs.map} +1 -1
  14. package/dist/{chunk-6RCEIWZL.cjs → chunk-ZR435MDC.cjs} +85 -2
  15. package/dist/chunk-ZR435MDC.cjs.map +1 -0
  16. package/dist/index.cjs +95 -45
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.dev.js +87 -7
  19. package/dist/index.dev.js.map +1 -1
  20. package/dist/index.js +60 -10
  21. package/dist/index.js.map +1 -1
  22. package/dist/internal.cjs +51 -41
  23. package/dist/internal.cjs.map +1 -1
  24. package/dist/internal.d.cts +11 -2
  25. package/dist/internal.d.ts +11 -2
  26. package/dist/internal.js +13 -3
  27. package/dist/internal.js.map +1 -1
  28. package/dist/jsx-dev-runtime.d.cts +671 -0
  29. package/dist/jsx-dev-runtime.d.ts +671 -0
  30. package/dist/loader.cjs +60 -8
  31. package/dist/loader.cjs.map +1 -1
  32. package/dist/loader.d.cts +1 -1
  33. package/dist/loader.d.ts +1 -1
  34. package/dist/loader.js +53 -1
  35. package/dist/loader.js.map +1 -1
  36. package/dist/{resume-Dx8_l72o.d.ts → resume-CqeQ3v_q.d.ts} +5 -1
  37. package/dist/{resume-BrAkmSTY.d.cts → resume-i-A3EFox.d.cts} +5 -1
  38. package/package.json +1 -1
  39. package/src/internal.ts +4 -0
  40. package/src/loader.ts +58 -0
  41. package/src/resume.ts +55 -0
  42. package/src/ssr-stream.ts +38 -0
  43. package/src/suspense.ts +62 -7
  44. package/dist/chunk-6RCEIWZL.cjs.map +0 -1
  45. package/dist/chunk-7BO6P2KP.js.map +0 -1
  46. /package/dist/{chunk-AR6NSCZM.js.map → chunk-4NUHM77Z.js.map} +0 -0
  47. /package/dist/{chunk-RY5CY4CI.js.map → chunk-D2IWOO4X.js.map} +0 -0
  48. /package/dist/{chunk-5OYBRKE4.js.map → chunk-SLFAEVKJ.js.map} +0 -0
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  createContext,
3
3
  hasContext,
4
4
  useContext
5
- } from "./chunk-5OYBRKE4.js";
5
+ } from "./chunk-SLFAEVKJ.js";
6
6
  import {
7
7
  Fragment,
8
8
  batch,
@@ -19,8 +19,11 @@ import {
19
19
  untrack,
20
20
  useDeferredValue,
21
21
  useTransition
22
- } from "./chunk-RY5CY4CI.js";
22
+ } from "./chunk-D2IWOO4X.js";
23
23
  import {
24
+ __fictGetSSRStreamHooks,
25
+ __fictPopSSRBoundary,
26
+ __fictPushSSRBoundary,
24
27
  createEffect,
25
28
  createMemo,
26
29
  createRoot,
@@ -37,7 +40,7 @@ import {
37
40
  registerErrorHandler,
38
41
  registerSuspenseHandler,
39
42
  signal
40
- } from "./chunk-7BO6P2KP.js";
43
+ } from "./chunk-LRFMCJY3.js";
41
44
 
42
45
  // src/ref.ts
43
46
  function createRef() {
@@ -151,6 +154,7 @@ function createSuspenseToken() {
151
154
  }
152
155
  var isThenable = (value) => typeof value === "object" && value !== null && typeof value.then === "function";
153
156
  function Suspense(props) {
157
+ const streamHooks = __fictGetSSRStreamHooks();
154
158
  const pending = signal(0);
155
159
  let resolvedOnce = false;
156
160
  let epoch = 0;
@@ -171,7 +175,12 @@ function Suspense(props) {
171
175
  const root = createRootContext(hostRoot);
172
176
  const prev = pushRoot(root);
173
177
  let nodes = [];
178
+ let boundaryPushed = false;
174
179
  try {
180
+ if (streamBoundaryId) {
181
+ __fictPushSSRBoundary(streamBoundaryId);
182
+ boundaryPushed = true;
183
+ }
175
184
  const output = createElement(view);
176
185
  nodes = toNodeArray(output);
177
186
  const suspendedAttempt = root.suspended || nodes.length > 0 && nodes.every((node) => node instanceof Comment && node.data === "fict:suspend");
@@ -180,9 +189,9 @@ function Suspense(props) {
180
189
  destroyRoot(root);
181
190
  return;
182
191
  }
183
- const parentNode = marker.parentNode;
192
+ const parentNode = endMarker.parentNode;
184
193
  if (parentNode) {
185
- insertNodesBefore(parentNode, nodes, marker);
194
+ insertNodesBefore(parentNode, nodes, endMarker);
186
195
  }
187
196
  } catch (err) {
188
197
  popRoot(prev);
@@ -191,6 +200,10 @@ function Suspense(props) {
191
200
  throw err;
192
201
  }
193
202
  return;
203
+ } finally {
204
+ if (boundaryPushed) {
205
+ __fictPopSSRBoundary(streamBoundaryId ?? void 0);
206
+ }
194
207
  }
195
208
  popRoot(prev);
196
209
  flushOnMount(root);
@@ -201,10 +214,21 @@ function Suspense(props) {
201
214
  activeNodes = nodes;
202
215
  };
203
216
  const fragment = document.createDocumentFragment();
204
- const marker = document.createComment("fict:suspense");
205
- fragment.appendChild(marker);
217
+ const startMarker = document.createComment("fict:suspense-start");
218
+ const endMarker = document.createComment("fict:suspense-end");
219
+ fragment.appendChild(startMarker);
220
+ fragment.appendChild(endMarker);
206
221
  let cleanup;
207
222
  let activeNodes = [];
223
+ let streamBoundaryId = null;
224
+ let streamPending = false;
225
+ if (streamHooks?.registerBoundary) {
226
+ streamBoundaryId = streamHooks.registerBoundary(startMarker, endMarker) ?? null;
227
+ if (streamBoundaryId) {
228
+ startMarker.data = `fict:suspense-start:${streamBoundaryId}`;
229
+ endMarker.data = `fict:suspense-end:${streamBoundaryId}`;
230
+ }
231
+ }
208
232
  const onResolveMaybe = () => {
209
233
  if (!resolvedOnce) {
210
234
  resolvedOnce = true;
@@ -213,6 +237,10 @@ function Suspense(props) {
213
237
  };
214
238
  registerSuspenseHandler((token) => {
215
239
  const tokenEpoch = epoch;
240
+ if (!streamPending && streamBoundaryId && streamHooks?.boundaryPending) {
241
+ streamPending = true;
242
+ streamHooks.boundaryPending(streamBoundaryId);
243
+ }
216
244
  pending(pending() + 1);
217
245
  renderView(toFallback());
218
246
  const thenable = token.then ? token : isThenable(token) ? token : null;
@@ -226,6 +254,10 @@ function Suspense(props) {
226
254
  pending(newPending);
227
255
  if (newPending === 0) {
228
256
  renderView(props.children ?? null);
257
+ if (streamPending && streamBoundaryId && streamHooks?.boundaryResolved) {
258
+ streamPending = false;
259
+ streamHooks.boundaryResolved(streamBoundaryId);
260
+ }
229
261
  onResolveMaybe();
230
262
  }
231
263
  },
@@ -235,9 +267,23 @@ function Suspense(props) {
235
267
  }
236
268
  const newPending = Math.max(0, pending() - 1);
237
269
  pending(newPending);
238
- props.onReject?.(err);
239
- if (!handleError(err, { source: "render" }, hostRoot)) {
240
- throw err;
270
+ let rejectionError = err;
271
+ try {
272
+ props.onReject?.(err);
273
+ } catch (callbackError) {
274
+ rejectionError = callbackError;
275
+ }
276
+ const handled = handleError(rejectionError, { source: "render" }, hostRoot);
277
+ if (!handled) {
278
+ if (streamHooks?.onError) {
279
+ streamHooks.onError(rejectionError, streamBoundaryId ?? void 0);
280
+ return;
281
+ }
282
+ throw rejectionError;
283
+ }
284
+ if (newPending === 0 && streamPending && streamBoundaryId && streamHooks?.boundaryResolved) {
285
+ streamPending = false;
286
+ streamHooks.boundaryResolved(streamBoundaryId);
241
287
  }
242
288
  }
243
289
  );
@@ -257,6 +303,10 @@ function Suspense(props) {
257
303
  epoch++;
258
304
  pending(0);
259
305
  renderView(props.children ?? null);
306
+ if (streamPending && streamBoundaryId && streamHooks?.boundaryResolved) {
307
+ streamPending = false;
308
+ streamHooks.boundaryResolved(streamBoundaryId);
309
+ }
260
310
  }
261
311
  });
262
312
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ref.ts","../src/error-boundary.ts","../src/suspense.ts"],"sourcesContent":["import type { RefObject } from './types'\n\n/**\n * Create a ref object for DOM element references.\n *\n * @returns A ref object with a `current` property initialized to `null`\n *\n * @example\n * ```tsx\n * import { createRef } from 'fict'\n *\n * function Component() {\n * const inputRef = createRef<HTMLInputElement>()\n *\n * $effect(() => {\n * inputRef.current?.focus()\n * })\n *\n * return <input ref={inputRef} />\n * }\n * ```\n */\nexport function createRef<T extends Element = HTMLElement>(): RefObject<T> {\n return { current: null }\n}\n","import { createElement } from './dom'\nimport { createEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n getCurrentRoot,\n pushRoot,\n popRoot,\n registerErrorHandler,\n} from './lifecycle'\nimport { insertNodesBefore, removeNodes, toNodeArray } from './node-ops'\nimport type { BaseProps, FictNode } from './types'\n\ninterface ErrorBoundaryProps extends BaseProps {\n fallback: FictNode | ((err: unknown, reset?: () => void) => FictNode)\n onError?: (err: unknown) => void\n resetKeys?: unknown | (() => unknown)\n}\n\nexport function ErrorBoundary(props: ErrorBoundaryProps): FictNode {\n const fragment = document.createDocumentFragment()\n const marker = document.createComment('fict:error-boundary')\n fragment.appendChild(marker)\n\n const hostRoot = getCurrentRoot()\n\n let cleanup: (() => void) | undefined\n let activeNodes: Node[] = []\n let renderingFallback = false\n\n let reset = () => {}\n const toView = (err: unknown | null): FictNode | null => {\n if (err != null) {\n return typeof props.fallback === 'function'\n ? (props.fallback as (e: unknown, reset?: () => void) => FictNode)(err, reset)\n : props.fallback\n }\n return props.children ?? null\n }\n\n const renderValue = (value: FictNode | null) => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n if (activeNodes.length) {\n removeNodes(activeNodes)\n activeNodes = []\n }\n\n if (value == null || value === false) {\n return\n }\n\n const root = createRootContext(hostRoot)\n const prev = pushRoot(root)\n let nodes: Node[] = []\n try {\n const output = createElement(value)\n nodes = toNodeArray(output)\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n } catch (err) {\n popRoot(prev)\n destroyRoot(root)\n // Fall back immediately on render errors, avoid infinite recursion\n if (renderingFallback) {\n throw err\n }\n // nested errors. If fallback rendering also throws, we should NOT reset\n // the flag until we're sure no more recursion is happening.\n renderingFallback = true\n try {\n renderValue(toView(err))\n // Only reset if successful - if renderValue threw, we want to keep\n // renderingFallback = true to prevent infinite recursion\n renderingFallback = false\n props.onError?.(err)\n } catch (fallbackErr) {\n // Fallback rendering failed - keep renderingFallback = true\n // to prevent further attempts, then rethrow\n // If fallback fails, report both errors\n props.onError?.(err)\n throw fallbackErr\n }\n return\n }\n popRoot(prev)\n flushOnMount(root)\n\n cleanup = () => {\n destroyRoot(root)\n removeNodes(nodes)\n }\n activeNodes = nodes\n }\n\n reset = () => {\n renderingFallback = false\n renderValue(toView(null))\n }\n\n renderValue(props.children ?? null)\n\n registerErrorHandler(err => {\n renderValue(toView(err))\n props.onError?.(err)\n return true\n })\n\n if (props.resetKeys !== undefined) {\n const isGetter =\n typeof props.resetKeys === 'function' && (props.resetKeys as () => unknown).length === 0\n const getter = isGetter ? (props.resetKeys as () => unknown) : undefined\n let prev = isGetter ? getter!() : props.resetKeys\n createEffect(() => {\n const next = getter ? getter() : props.resetKeys\n if (prev !== next) {\n prev = next\n renderValue(toView(null))\n }\n })\n }\n\n return fragment\n}\n","import { createElement } from './dom'\nimport { createEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n getCurrentRoot,\n handleError,\n pushRoot,\n popRoot,\n registerSuspenseHandler,\n} from './lifecycle'\nimport { insertNodesBefore, removeNodes, toNodeArray } from './node-ops'\nimport { createSignal } from './signal'\nimport type { BaseProps, FictNode, SuspenseToken } from './types'\n\nexport interface SuspenseProps extends BaseProps {\n fallback: FictNode | ((err?: unknown) => FictNode)\n onResolve?: () => void\n onReject?: (err: unknown) => void\n resetKeys?: unknown | (() => unknown)\n}\n\nexport interface SuspenseHandle {\n token: SuspenseToken\n resolve: () => void\n reject: (err: unknown) => void\n}\n\nexport function createSuspenseToken(): SuspenseHandle {\n let resolve!: () => void\n let reject!: (err: unknown) => void\n const promise = new Promise<void>((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n token: {\n then: promise.then.bind(promise),\n },\n resolve,\n reject,\n }\n}\n\nconst isThenable = (value: unknown): value is PromiseLike<unknown> =>\n typeof value === 'object' &&\n value !== null &&\n typeof (value as PromiseLike<unknown>).then === 'function'\n\nexport function Suspense(props: SuspenseProps): FictNode {\n const pending = createSignal(0)\n let resolvedOnce = false\n let epoch = 0\n const hostRoot = getCurrentRoot()\n\n const toFallback = (err?: unknown) =>\n typeof props.fallback === 'function'\n ? (props.fallback as (e?: unknown) => FictNode)(err)\n : props.fallback\n\n const renderView = (view: FictNode | null) => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n if (activeNodes.length) {\n removeNodes(activeNodes)\n activeNodes = []\n }\n\n if (view == null || view === false) {\n return\n }\n\n const root = createRootContext(hostRoot)\n const prev = pushRoot(root)\n let nodes: Node[] = []\n try {\n const output = createElement(view)\n nodes = toNodeArray(output)\n // Suspended view: child threw a suspense token and was handled upstream.\n // Avoid replacing existing fallback content; tear down this attempt.\n const suspendedAttempt =\n root.suspended ||\n (nodes.length > 0 &&\n nodes.every(node => node instanceof Comment && (node as Comment).data === 'fict:suspend'))\n if (suspendedAttempt) {\n popRoot(prev)\n destroyRoot(root)\n return\n }\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n } catch (err) {\n popRoot(prev)\n destroyRoot(root)\n if (!handleError(err, { source: 'render' }, hostRoot)) {\n throw err\n }\n return\n }\n popRoot(prev)\n flushOnMount(root)\n\n cleanup = () => {\n destroyRoot(root)\n removeNodes(nodes)\n }\n activeNodes = nodes\n }\n\n const fragment = document.createDocumentFragment()\n const marker = document.createComment('fict:suspense')\n fragment.appendChild(marker)\n let cleanup: (() => void) | undefined\n let activeNodes: Node[] = []\n\n const onResolveMaybe = () => {\n if (!resolvedOnce) {\n resolvedOnce = true\n props.onResolve?.()\n }\n }\n\n registerSuspenseHandler(token => {\n const tokenEpoch = epoch\n pending(pending() + 1)\n // Directly render fallback instead of using switchView to avoid\n // triggering the effect which would cause duplicate renders\n renderView(toFallback())\n\n const thenable = (token as SuspenseToken).then\n ? (token as SuspenseToken)\n : isThenable(token)\n ? token\n : null\n\n if (thenable) {\n thenable.then(\n () => {\n // This prevents stale token resolutions from affecting state after\n // a reset. The order is important: check epoch first, then update state.\n if (epoch !== tokenEpoch) {\n // Token is stale (from before a reset), ignore it completely\n return\n }\n // Use Math.max as a defensive measure - pending should never go below 0,\n // but this protects against edge cases where a token might resolve twice\n // or after the component has been reset.\n const newPending = Math.max(0, pending() - 1)\n pending(newPending)\n if (newPending === 0) {\n // Directly render children instead of using switchView\n renderView(props.children ?? null)\n onResolveMaybe()\n }\n },\n err => {\n // Same epoch check - ignore stale tokens\n if (epoch !== tokenEpoch) {\n return\n }\n const newPending = Math.max(0, pending() - 1)\n pending(newPending)\n props.onReject?.(err)\n if (!handleError(err, { source: 'render' }, hostRoot)) {\n throw err\n }\n },\n )\n return true\n }\n\n return false\n })\n\n // Initial render - render children directly\n // Note: This will be called synchronously during component creation.\n // If children suspend, the handler above will be called and switch to fallback.\n renderView(props.children ?? null)\n\n if (props.resetKeys !== undefined) {\n const isGetter =\n typeof props.resetKeys === 'function' && (props.resetKeys as () => unknown).length === 0\n const getter = isGetter ? (props.resetKeys as () => unknown) : undefined\n let prev = isGetter ? getter!() : props.resetKeys\n createEffect(() => {\n const next = getter ? getter() : props.resetKeys\n if (prev !== next) {\n prev = next\n epoch++\n pending(0)\n // Directly render children instead of using switchView\n renderView(props.children ?? null)\n }\n })\n }\n\n return fragment\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBO,SAAS,YAA2D;AACzE,SAAO,EAAE,SAAS,KAAK;AACzB;;;ACJO,SAAS,cAAc,OAAqC;AACjE,QAAM,WAAW,SAAS,uBAAuB;AACjD,QAAM,SAAS,SAAS,cAAc,qBAAqB;AAC3D,WAAS,YAAY,MAAM;AAE3B,QAAM,WAAW,eAAe;AAEhC,MAAI;AACJ,MAAI,cAAsB,CAAC;AAC3B,MAAI,oBAAoB;AAExB,MAAI,QAAQ,MAAM;AAAA,EAAC;AACnB,QAAM,SAAS,CAAC,QAAyC;AACvD,QAAI,OAAO,MAAM;AACf,aAAO,OAAO,MAAM,aAAa,aAC5B,MAAM,SAA0D,KAAK,KAAK,IAC3E,MAAM;AAAA,IACZ;AACA,WAAO,MAAM,YAAY;AAAA,EAC3B;AAEA,QAAM,cAAc,CAAC,UAA2B;AAC9C,QAAI,SAAS;AACX,cAAQ;AACR,gBAAU;AAAA,IACZ;AACA,QAAI,YAAY,QAAQ;AACtB,kBAAY,WAAW;AACvB,oBAAc,CAAC;AAAA,IACjB;AAEA,QAAI,SAAS,QAAQ,UAAU,OAAO;AACpC;AAAA,IACF;AAEA,UAAM,OAAO,kBAAkB,QAAQ;AACvC,UAAM,OAAO,SAAS,IAAI;AAC1B,QAAI,QAAgB,CAAC;AACrB,QAAI;AACF,YAAM,SAAS,cAAc,KAAK;AAClC,cAAQ,YAAY,MAAM;AAC1B,YAAM,aAAa,OAAO;AAC1B,UAAI,YAAY;AACd,0BAAkB,YAAY,OAAO,MAAM;AAAA,MAC7C;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,IAAI;AACZ,kBAAY,IAAI;AAEhB,UAAI,mBAAmB;AACrB,cAAM;AAAA,MACR;AAGA,0BAAoB;AACpB,UAAI;AACF,oBAAY,OAAO,GAAG,CAAC;AAGvB,4BAAoB;AACpB,cAAM,UAAU,GAAG;AAAA,MACrB,SAAS,aAAa;AAIpB,cAAM,UAAU,GAAG;AACnB,cAAM;AAAA,MACR;AACA;AAAA,IACF;AACA,YAAQ,IAAI;AACZ,iBAAa,IAAI;AAEjB,cAAU,MAAM;AACd,kBAAY,IAAI;AAChB,kBAAY,KAAK;AAAA,IACnB;AACA,kBAAc;AAAA,EAChB;AAEA,UAAQ,MAAM;AACZ,wBAAoB;AACpB,gBAAY,OAAO,IAAI,CAAC;AAAA,EAC1B;AAEA,cAAY,MAAM,YAAY,IAAI;AAElC,uBAAqB,SAAO;AAC1B,gBAAY,OAAO,GAAG,CAAC;AACvB,UAAM,UAAU,GAAG;AACnB,WAAO;AAAA,EACT,CAAC;AAED,MAAI,MAAM,cAAc,QAAW;AACjC,UAAM,WACJ,OAAO,MAAM,cAAc,cAAe,MAAM,UAA4B,WAAW;AACzF,UAAM,SAAS,WAAY,MAAM,YAA8B;AAC/D,QAAI,OAAO,WAAW,OAAQ,IAAI,MAAM;AACxC,iBAAa,MAAM;AACjB,YAAM,OAAO,SAAS,OAAO,IAAI,MAAM;AACvC,UAAI,SAAS,MAAM;AACjB,eAAO;AACP,oBAAY,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACnGO,SAAS,sBAAsC;AACpD,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAc,CAAC,KAAK,QAAQ;AAC9C,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM,QAAQ,KAAK,KAAK,OAAO;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,aAAa,CAAC,UAClB,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAA+B,SAAS;AAE3C,SAAS,SAAS,OAAgC;AACvD,QAAM,UAAU,OAAa,CAAC;AAC9B,MAAI,eAAe;AACnB,MAAI,QAAQ;AACZ,QAAM,WAAW,eAAe;AAEhC,QAAM,aAAa,CAAC,QAClB,OAAO,MAAM,aAAa,aACrB,MAAM,SAAuC,GAAG,IACjD,MAAM;AAEZ,QAAM,aAAa,CAAC,SAA0B;AAC5C,QAAI,SAAS;AACX,cAAQ;AACR,gBAAU;AAAA,IACZ;AACA,QAAI,YAAY,QAAQ;AACtB,kBAAY,WAAW;AACvB,oBAAc,CAAC;AAAA,IACjB;AAEA,QAAI,QAAQ,QAAQ,SAAS,OAAO;AAClC;AAAA,IACF;AAEA,UAAM,OAAO,kBAAkB,QAAQ;AACvC,UAAM,OAAO,SAAS,IAAI;AAC1B,QAAI,QAAgB,CAAC;AACrB,QAAI;AACF,YAAM,SAAS,cAAc,IAAI;AACjC,cAAQ,YAAY,MAAM;AAG1B,YAAM,mBACJ,KAAK,aACJ,MAAM,SAAS,KACd,MAAM,MAAM,UAAQ,gBAAgB,WAAY,KAAiB,SAAS,cAAc;AAC5F,UAAI,kBAAkB;AACpB,gBAAQ,IAAI;AACZ,oBAAY,IAAI;AAChB;AAAA,MACF;AACA,YAAM,aAAa,OAAO;AAC1B,UAAI,YAAY;AACd,0BAAkB,YAAY,OAAO,MAAM;AAAA,MAC7C;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,IAAI;AACZ,kBAAY,IAAI;AAChB,UAAI,CAAC,YAAY,KAAK,EAAE,QAAQ,SAAS,GAAG,QAAQ,GAAG;AACrD,cAAM;AAAA,MACR;AACA;AAAA,IACF;AACA,YAAQ,IAAI;AACZ,iBAAa,IAAI;AAEjB,cAAU,MAAM;AACd,kBAAY,IAAI;AAChB,kBAAY,KAAK;AAAA,IACnB;AACA,kBAAc;AAAA,EAChB;AAEA,QAAM,WAAW,SAAS,uBAAuB;AACjD,QAAM,SAAS,SAAS,cAAc,eAAe;AACrD,WAAS,YAAY,MAAM;AAC3B,MAAI;AACJ,MAAI,cAAsB,CAAC;AAE3B,QAAM,iBAAiB,MAAM;AAC3B,QAAI,CAAC,cAAc;AACjB,qBAAe;AACf,YAAM,YAAY;AAAA,IACpB;AAAA,EACF;AAEA,0BAAwB,WAAS;AAC/B,UAAM,aAAa;AACnB,YAAQ,QAAQ,IAAI,CAAC;AAGrB,eAAW,WAAW,CAAC;AAEvB,UAAM,WAAY,MAAwB,OACrC,QACD,WAAW,KAAK,IACd,QACA;AAEN,QAAI,UAAU;AACZ,eAAS;AAAA,QACP,MAAM;AAGJ,cAAI,UAAU,YAAY;AAExB;AAAA,UACF;AAIA,gBAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC;AAC5C,kBAAQ,UAAU;AAClB,cAAI,eAAe,GAAG;AAEpB,uBAAW,MAAM,YAAY,IAAI;AACjC,2BAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA,SAAO;AAEL,cAAI,UAAU,YAAY;AACxB;AAAA,UACF;AACA,gBAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC;AAC5C,kBAAQ,UAAU;AAClB,gBAAM,WAAW,GAAG;AACpB,cAAI,CAAC,YAAY,KAAK,EAAE,QAAQ,SAAS,GAAG,QAAQ,GAAG;AACrD,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,CAAC;AAKD,aAAW,MAAM,YAAY,IAAI;AAEjC,MAAI,MAAM,cAAc,QAAW;AACjC,UAAM,WACJ,OAAO,MAAM,cAAc,cAAe,MAAM,UAA4B,WAAW;AACzF,UAAM,SAAS,WAAY,MAAM,YAA8B;AAC/D,QAAI,OAAO,WAAW,OAAQ,IAAI,MAAM;AACxC,iBAAa,MAAM;AACjB,YAAM,OAAO,SAAS,OAAO,IAAI,MAAM;AACvC,UAAI,SAAS,MAAM;AACjB,eAAO;AACP;AACA,gBAAQ,CAAC;AAET,mBAAW,MAAM,YAAY,IAAI;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/ref.ts","../src/error-boundary.ts","../src/suspense.ts"],"sourcesContent":["import type { RefObject } from './types'\n\n/**\n * Create a ref object for DOM element references.\n *\n * @returns A ref object with a `current` property initialized to `null`\n *\n * @example\n * ```tsx\n * import { createRef } from 'fict'\n *\n * function Component() {\n * const inputRef = createRef<HTMLInputElement>()\n *\n * $effect(() => {\n * inputRef.current?.focus()\n * })\n *\n * return <input ref={inputRef} />\n * }\n * ```\n */\nexport function createRef<T extends Element = HTMLElement>(): RefObject<T> {\n return { current: null }\n}\n","import { createElement } from './dom'\nimport { createEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n getCurrentRoot,\n pushRoot,\n popRoot,\n registerErrorHandler,\n} from './lifecycle'\nimport { insertNodesBefore, removeNodes, toNodeArray } from './node-ops'\nimport type { BaseProps, FictNode } from './types'\n\ninterface ErrorBoundaryProps extends BaseProps {\n fallback: FictNode | ((err: unknown, reset?: () => void) => FictNode)\n onError?: (err: unknown) => void\n resetKeys?: unknown | (() => unknown)\n}\n\nexport function ErrorBoundary(props: ErrorBoundaryProps): FictNode {\n const fragment = document.createDocumentFragment()\n const marker = document.createComment('fict:error-boundary')\n fragment.appendChild(marker)\n\n const hostRoot = getCurrentRoot()\n\n let cleanup: (() => void) | undefined\n let activeNodes: Node[] = []\n let renderingFallback = false\n\n let reset = () => {}\n const toView = (err: unknown | null): FictNode | null => {\n if (err != null) {\n return typeof props.fallback === 'function'\n ? (props.fallback as (e: unknown, reset?: () => void) => FictNode)(err, reset)\n : props.fallback\n }\n return props.children ?? null\n }\n\n const renderValue = (value: FictNode | null) => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n if (activeNodes.length) {\n removeNodes(activeNodes)\n activeNodes = []\n }\n\n if (value == null || value === false) {\n return\n }\n\n const root = createRootContext(hostRoot)\n const prev = pushRoot(root)\n let nodes: Node[] = []\n try {\n const output = createElement(value)\n nodes = toNodeArray(output)\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n } catch (err) {\n popRoot(prev)\n destroyRoot(root)\n // Fall back immediately on render errors, avoid infinite recursion\n if (renderingFallback) {\n throw err\n }\n // nested errors. If fallback rendering also throws, we should NOT reset\n // the flag until we're sure no more recursion is happening.\n renderingFallback = true\n try {\n renderValue(toView(err))\n // Only reset if successful - if renderValue threw, we want to keep\n // renderingFallback = true to prevent infinite recursion\n renderingFallback = false\n props.onError?.(err)\n } catch (fallbackErr) {\n // Fallback rendering failed - keep renderingFallback = true\n // to prevent further attempts, then rethrow\n // If fallback fails, report both errors\n props.onError?.(err)\n throw fallbackErr\n }\n return\n }\n popRoot(prev)\n flushOnMount(root)\n\n cleanup = () => {\n destroyRoot(root)\n removeNodes(nodes)\n }\n activeNodes = nodes\n }\n\n reset = () => {\n renderingFallback = false\n renderValue(toView(null))\n }\n\n renderValue(props.children ?? null)\n\n registerErrorHandler(err => {\n renderValue(toView(err))\n props.onError?.(err)\n return true\n })\n\n if (props.resetKeys !== undefined) {\n const isGetter =\n typeof props.resetKeys === 'function' && (props.resetKeys as () => unknown).length === 0\n const getter = isGetter ? (props.resetKeys as () => unknown) : undefined\n let prev = isGetter ? getter!() : props.resetKeys\n createEffect(() => {\n const next = getter ? getter() : props.resetKeys\n if (prev !== next) {\n prev = next\n renderValue(toView(null))\n }\n })\n }\n\n return fragment\n}\n","import { createElement } from './dom'\nimport { createEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n getCurrentRoot,\n handleError,\n pushRoot,\n popRoot,\n registerSuspenseHandler,\n} from './lifecycle'\nimport { insertNodesBefore, removeNodes, toNodeArray } from './node-ops'\nimport { createSignal } from './signal'\nimport { __fictGetSSRStreamHooks, __fictPopSSRBoundary, __fictPushSSRBoundary } from './ssr-stream'\nimport type { BaseProps, FictNode, SuspenseToken } from './types'\n\nexport interface SuspenseProps extends BaseProps {\n fallback: FictNode | ((err?: unknown) => FictNode)\n onResolve?: () => void\n onReject?: (err: unknown) => void\n resetKeys?: unknown | (() => unknown)\n}\n\nexport interface SuspenseHandle {\n token: SuspenseToken\n resolve: () => void\n reject: (err: unknown) => void\n}\n\nexport function createSuspenseToken(): SuspenseHandle {\n let resolve!: () => void\n let reject!: (err: unknown) => void\n const promise = new Promise<void>((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n token: {\n then: promise.then.bind(promise),\n },\n resolve,\n reject,\n }\n}\n\nconst isThenable = (value: unknown): value is PromiseLike<unknown> =>\n typeof value === 'object' &&\n value !== null &&\n typeof (value as PromiseLike<unknown>).then === 'function'\n\nexport function Suspense(props: SuspenseProps): FictNode {\n const streamHooks = __fictGetSSRStreamHooks()\n const pending = createSignal(0)\n let resolvedOnce = false\n let epoch = 0\n const hostRoot = getCurrentRoot()\n\n const toFallback = (err?: unknown) =>\n typeof props.fallback === 'function'\n ? (props.fallback as (e?: unknown) => FictNode)(err)\n : props.fallback\n\n const renderView = (view: FictNode | null) => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n if (activeNodes.length) {\n removeNodes(activeNodes)\n activeNodes = []\n }\n\n if (view == null || view === false) {\n return\n }\n\n const root = createRootContext(hostRoot)\n const prev = pushRoot(root)\n let nodes: Node[] = []\n let boundaryPushed = false\n try {\n if (streamBoundaryId) {\n __fictPushSSRBoundary(streamBoundaryId)\n boundaryPushed = true\n }\n const output = createElement(view)\n nodes = toNodeArray(output)\n // Suspended view: child threw a suspense token and was handled upstream.\n // Avoid replacing existing fallback content; tear down this attempt.\n const suspendedAttempt =\n root.suspended ||\n (nodes.length > 0 &&\n nodes.every(node => node instanceof Comment && (node as Comment).data === 'fict:suspend'))\n if (suspendedAttempt) {\n popRoot(prev)\n destroyRoot(root)\n return\n }\n const parentNode = endMarker.parentNode as (ParentNode & Node) | null\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, endMarker)\n }\n } catch (err) {\n popRoot(prev)\n destroyRoot(root)\n if (!handleError(err, { source: 'render' }, hostRoot)) {\n throw err\n }\n return\n } finally {\n if (boundaryPushed) {\n __fictPopSSRBoundary(streamBoundaryId ?? undefined)\n }\n }\n popRoot(prev)\n flushOnMount(root)\n\n cleanup = () => {\n destroyRoot(root)\n removeNodes(nodes)\n }\n activeNodes = nodes\n }\n\n const fragment = document.createDocumentFragment()\n const startMarker = document.createComment('fict:suspense-start')\n const endMarker = document.createComment('fict:suspense-end')\n fragment.appendChild(startMarker)\n fragment.appendChild(endMarker)\n let cleanup: (() => void) | undefined\n let activeNodes: Node[] = []\n let streamBoundaryId: string | null = null\n let streamPending = false\n\n if (streamHooks?.registerBoundary) {\n streamBoundaryId = streamHooks.registerBoundary(startMarker, endMarker) ?? null\n if (streamBoundaryId) {\n startMarker.data = `fict:suspense-start:${streamBoundaryId}`\n endMarker.data = `fict:suspense-end:${streamBoundaryId}`\n }\n }\n\n const onResolveMaybe = () => {\n if (!resolvedOnce) {\n resolvedOnce = true\n props.onResolve?.()\n }\n }\n\n registerSuspenseHandler(token => {\n const tokenEpoch = epoch\n if (!streamPending && streamBoundaryId && streamHooks?.boundaryPending) {\n streamPending = true\n streamHooks.boundaryPending(streamBoundaryId)\n }\n pending(pending() + 1)\n // Directly render fallback instead of using switchView to avoid\n // triggering the effect which would cause duplicate renders\n renderView(toFallback())\n\n const thenable = (token as SuspenseToken).then\n ? (token as SuspenseToken)\n : isThenable(token)\n ? token\n : null\n\n if (thenable) {\n thenable.then(\n () => {\n // This prevents stale token resolutions from affecting state after\n // a reset. The order is important: check epoch first, then update state.\n if (epoch !== tokenEpoch) {\n // Token is stale (from before a reset), ignore it completely\n return\n }\n // Use Math.max as a defensive measure - pending should never go below 0,\n // but this protects against edge cases where a token might resolve twice\n // or after the component has been reset.\n const newPending = Math.max(0, pending() - 1)\n pending(newPending)\n if (newPending === 0) {\n // Directly render children instead of using switchView\n renderView(props.children ?? null)\n if (streamPending && streamBoundaryId && streamHooks?.boundaryResolved) {\n streamPending = false\n streamHooks.boundaryResolved(streamBoundaryId)\n }\n onResolveMaybe()\n }\n },\n err => {\n // Same epoch check - ignore stale tokens\n if (epoch !== tokenEpoch) {\n return\n }\n const newPending = Math.max(0, pending() - 1)\n pending(newPending)\n let rejectionError = err\n try {\n props.onReject?.(err)\n } catch (callbackError) {\n rejectionError = callbackError\n }\n\n const handled = handleError(rejectionError, { source: 'render' }, hostRoot)\n if (!handled) {\n if (streamHooks?.onError) {\n streamHooks.onError(rejectionError, streamBoundaryId ?? undefined)\n return\n }\n throw rejectionError\n }\n if (\n newPending === 0 &&\n streamPending &&\n streamBoundaryId &&\n streamHooks?.boundaryResolved\n ) {\n streamPending = false\n streamHooks.boundaryResolved(streamBoundaryId)\n }\n },\n )\n return true\n }\n\n return false\n })\n\n // Initial render - render children directly\n // Note: This will be called synchronously during component creation.\n // If children suspend, the handler above will be called and switch to fallback.\n renderView(props.children ?? null)\n\n if (props.resetKeys !== undefined) {\n const isGetter =\n typeof props.resetKeys === 'function' && (props.resetKeys as () => unknown).length === 0\n const getter = isGetter ? (props.resetKeys as () => unknown) : undefined\n let prev = isGetter ? getter!() : props.resetKeys\n createEffect(() => {\n const next = getter ? getter() : props.resetKeys\n if (prev !== next) {\n prev = next\n epoch++\n pending(0)\n // Directly render children instead of using switchView\n renderView(props.children ?? null)\n if (streamPending && streamBoundaryId && streamHooks?.boundaryResolved) {\n streamPending = false\n streamHooks.boundaryResolved(streamBoundaryId)\n }\n }\n })\n }\n\n return fragment\n}\n"],"mappings":"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","names":[]}
package/dist/internal.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunk4ZPZM5IGcjs = require('./chunk-4ZPZM5IG.cjs');
3
+ var _chunkQB2UD62Gcjs = require('./chunk-QB2UD62G.cjs');
4
4
 
5
5
 
6
6
 
@@ -41,7 +41,7 @@ var _chunk4ZPZM5IGcjs = require('./chunk-4ZPZM5IG.cjs');
41
41
 
42
42
 
43
43
 
44
- var _chunkWJHXPF7Mcjs = require('./chunk-WJHXPF7M.cjs');
44
+ var _chunkZ6M3HKLGcjs = require('./chunk-Z6M3HKLG.cjs');
45
45
 
46
46
 
47
47
 
@@ -102,7 +102,12 @@ var _chunkWJHXPF7Mcjs = require('./chunk-WJHXPF7M.cjs');
102
102
 
103
103
 
104
104
 
105
- var _chunk6RCEIWZLcjs = require('./chunk-6RCEIWZL.cjs');
105
+
106
+
107
+
108
+
109
+
110
+ var _chunkZR435MDCcjs = require('./chunk-ZR435MDC.cjs');
106
111
 
107
112
  // src/reconcile.ts
108
113
  function reconcileArrays(parentNode, a, b) {
@@ -232,7 +237,7 @@ var MAX_SAFE_VERSION = 9007199254740991;
232
237
  function createVersionedSignalAccessor(initialValue) {
233
238
  let current = initialValue;
234
239
  let version = 0;
235
- const track = _chunk6RCEIWZLcjs.signal.call(void 0, version);
240
+ const track = _chunkZR435MDCcjs.signal.call(void 0, version);
236
241
  function accessor(value) {
237
242
  if (arguments.length === 0) {
238
243
  track();
@@ -249,7 +254,7 @@ function createKeyedListContainer(startOverride, endOverride) {
249
254
  const endMarker = _nullishCoalesce(endOverride, () => ( document.createComment("fict:list:end")));
250
255
  const dispose = () => {
251
256
  for (const block of container.blocks.values()) {
252
- _chunk6RCEIWZLcjs.destroyRoot.call(void 0, block.root);
257
+ _chunkZR435MDCcjs.destroyRoot.call(void 0, block.root);
253
258
  }
254
259
  container.blocks.clear();
255
260
  container.nextBlocks.clear();
@@ -288,32 +293,32 @@ function createKeyedListContainer(startOverride, endOverride) {
288
293
  }
289
294
  function createKeyedBlock(key, item, index, render2, needsIndex = true, hostRoot) {
290
295
  const itemSig = createVersionedSignalAccessor(item);
291
- const indexSig = needsIndex ? _chunk6RCEIWZLcjs.signal.call(void 0, index) : ((next) => {
296
+ const indexSig = needsIndex ? _chunkZR435MDCcjs.signal.call(void 0, index) : ((next) => {
292
297
  if (arguments.length === 0) return index;
293
298
  index = next;
294
299
  return index;
295
300
  });
296
- const root = _chunk6RCEIWZLcjs.createRootContext.call(void 0, hostRoot);
297
- const prevRoot = _chunk6RCEIWZLcjs.pushRoot.call(void 0, root);
301
+ const root = _chunkZR435MDCcjs.createRootContext.call(void 0, hostRoot);
302
+ const prevRoot = _chunkZR435MDCcjs.pushRoot.call(void 0, root);
298
303
  let nodes = [];
299
304
  let scopeDispose;
300
- const prevSub = _chunk6RCEIWZLcjs.setActiveSub.call(void 0, void 0);
305
+ const prevSub = _chunkZR435MDCcjs.setActiveSub.call(void 0, void 0);
301
306
  try {
302
- scopeDispose = _chunk6RCEIWZLcjs.effectScope.call(void 0, () => {
307
+ scopeDispose = _chunkZR435MDCcjs.effectScope.call(void 0, () => {
303
308
  const rendered = render2(itemSig, indexSig, key);
304
309
  if (rendered instanceof Node || Array.isArray(rendered) && rendered.every((n) => n instanceof Node)) {
305
- nodes = _chunkWJHXPF7Mcjs.toNodeArray.call(void 0, rendered);
310
+ nodes = _chunkZ6M3HKLGcjs.toNodeArray.call(void 0, rendered);
306
311
  } else {
307
- const element = _chunkWJHXPF7Mcjs.createElement.call(void 0, rendered);
308
- nodes = _chunkWJHXPF7Mcjs.toNodeArray.call(void 0, element);
312
+ const element = _chunkZ6M3HKLGcjs.createElement.call(void 0, rendered);
313
+ nodes = _chunkZ6M3HKLGcjs.toNodeArray.call(void 0, element);
309
314
  }
310
315
  });
311
316
  if (scopeDispose) {
312
317
  root.cleanups.push(scopeDispose);
313
318
  }
314
319
  } finally {
315
- _chunk6RCEIWZLcjs.setActiveSub.call(void 0, prevSub);
316
- _chunk6RCEIWZLcjs.popRoot.call(void 0, prevRoot);
320
+ _chunkZR435MDCcjs.setActiveSub.call(void 0, prevSub);
321
+ _chunkZR435MDCcjs.popRoot.call(void 0, prevRoot);
317
322
  }
318
323
  return {
319
324
  key,
@@ -426,7 +431,7 @@ function createKeyedList(getItems, keyFn, renderItem, needsIndex, startMarker, e
426
431
  }
427
432
  function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, startOverride, endOverride) {
428
433
  const container = createKeyedListContainer(startOverride, endOverride);
429
- const hostRoot = _chunk6RCEIWZLcjs.getCurrentRoot.call(void 0, );
434
+ const hostRoot = _chunkZR435MDCcjs.getCurrentRoot.call(void 0, );
430
435
  const useProvided = !!(startOverride && endOverride);
431
436
  const fragment = useProvided ? container.startMarker : document.createDocumentFragment();
432
437
  if (!useProvided) {
@@ -438,7 +443,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
438
443
  let connectObserver = null;
439
444
  let effectStarted = false;
440
445
  let startScheduled = false;
441
- let initialHydrating = _chunk6RCEIWZLcjs.__fictIsHydrating.call(void 0, );
446
+ let initialHydrating = _chunkZR435MDCcjs.__fictIsHydrating.call(void 0, );
442
447
  const collectBetween = () => {
443
448
  const nodes = [];
444
449
  let cursor = container.startMarker.nextSibling;
@@ -466,17 +471,17 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
466
471
  };
467
472
  const performDiff = () => {
468
473
  if (disposed) return;
469
- const isSSR = _chunk6RCEIWZLcjs.__fictIsSSR.call(void 0, );
474
+ const isSSR = _chunkZR435MDCcjs.__fictIsSSR.call(void 0, );
470
475
  const parent = isSSR ? container.startMarker.parentNode : getConnectedParent();
471
476
  if (!parent) return;
472
- _chunkWJHXPF7Mcjs.batch.call(void 0, () => {
477
+ _chunkZ6M3HKLGcjs.batch.call(void 0, () => {
473
478
  const oldBlocks = container.blocks;
474
479
  const newBlocks = container.nextBlocks;
475
480
  const prevOrderedBlocks = container.orderedBlocks;
476
481
  const nextOrderedBlocks = container.nextOrderedBlocks;
477
482
  const orderedIndexByKey = container.orderedIndexByKey;
478
483
  const newItems = getItems();
479
- if (initialHydrating && _chunkWJHXPF7Mcjs.isHydratingActive.call(void 0, )) {
484
+ if (initialHydrating && _chunkZ6M3HKLGcjs.isHydratingActive.call(void 0, )) {
480
485
  initialHydrating = false;
481
486
  newBlocks.clear();
482
487
  nextOrderedBlocks.length = 0;
@@ -489,7 +494,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
489
494
  return;
490
495
  }
491
496
  const createdBlocks2 = [];
492
- _chunkWJHXPF7Mcjs.withHydrationRange.call(void 0,
497
+ _chunkZ6M3HKLGcjs.withHydrationRange.call(void 0,
493
498
  container.startMarker.nextSibling,
494
499
  container.endMarker,
495
500
  _nullishCoalesce(parent.ownerDocument, () => ( document)),
@@ -505,8 +510,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
505
510
  }
506
511
  const existing = newBlocks.get(key);
507
512
  if (existing) {
508
- _chunk6RCEIWZLcjs.destroyRoot.call(void 0, existing.root);
509
- _chunkWJHXPF7Mcjs.removeNodes.call(void 0, existing.nodes);
513
+ _chunkZR435MDCcjs.destroyRoot.call(void 0, existing.root);
514
+ _chunkZ6M3HKLGcjs.removeNodes.call(void 0, existing.nodes);
510
515
  }
511
516
  }
512
517
  const block = createKeyedBlock(key, item, index, renderItem, needsIndex, hostRoot);
@@ -527,7 +532,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
527
532
  container.nextNodes.length = 0;
528
533
  for (const block of createdBlocks2) {
529
534
  if (newBlocks.get(block.key) === block) {
530
- _chunk6RCEIWZLcjs.flushOnMount.call(void 0, block.root);
535
+ _chunkZR435MDCcjs.flushOnMount.call(void 0, block.root);
531
536
  }
532
537
  }
533
538
  return;
@@ -535,7 +540,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
535
540
  if (newItems.length === 0) {
536
541
  if (oldBlocks.size > 0) {
537
542
  for (const block of oldBlocks.values()) {
538
- _chunk6RCEIWZLcjs.destroyRoot.call(void 0, block.root);
543
+ _chunkZR435MDCcjs.destroyRoot.call(void 0, block.root);
539
544
  }
540
545
  const range = document.createRange();
541
546
  range.setStartAfter(container.startMarker);
@@ -616,8 +621,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
616
621
  `[fict] Duplicate key "${String(key)}" detected in list rendering. Each item should have a unique key. The previous item with this key will be replaced.`
617
622
  );
618
623
  }
619
- _chunk6RCEIWZLcjs.destroyRoot.call(void 0, existingBlock.root);
620
- _chunkWJHXPF7Mcjs.removeNodes.call(void 0, existingBlock.nodes);
624
+ _chunkZR435MDCcjs.destroyRoot.call(void 0, existingBlock.root);
625
+ _chunkZ6M3HKLGcjs.removeNodes.call(void 0, existingBlock.nodes);
621
626
  }
622
627
  block = createKeyedBlock(key, item, index, renderItem, needsIndex, hostRoot);
623
628
  createdBlocks.push(block);
@@ -630,8 +635,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
630
635
  hasDuplicateKey = true;
631
636
  const prior = nextOrderedBlocks[position];
632
637
  if (prior && prior !== resolvedBlock) {
633
- _chunk6RCEIWZLcjs.destroyRoot.call(void 0, prior.root);
634
- _chunkWJHXPF7Mcjs.removeNodes.call(void 0, prior.nodes);
638
+ _chunkZR435MDCcjs.destroyRoot.call(void 0, prior.root);
639
+ _chunkZ6M3HKLGcjs.removeNodes.call(void 0, prior.nodes);
635
640
  }
636
641
  nextOrderedBlocks[position] = resolvedBlock;
637
642
  } else {
@@ -669,7 +674,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
669
674
  }
670
675
  }
671
676
  if (appendedNodes.length > 0) {
672
- _chunkWJHXPF7Mcjs.insertNodesBefore.call(void 0, parent, appendedNodes, container.endMarker);
677
+ _chunkZ6M3HKLGcjs.insertNodesBefore.call(void 0, parent, appendedNodes, container.endMarker);
673
678
  const currentNodes = container.currentNodes;
674
679
  currentNodes.pop();
675
680
  for (let i = 0; i < appendedNodes.length; i++) {
@@ -683,15 +688,15 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
683
688
  container.nextOrderedBlocks = prevOrderedBlocks;
684
689
  for (const block of createdBlocks) {
685
690
  if (newBlocks.get(block.key) === block) {
686
- _chunk6RCEIWZLcjs.flushOnMount.call(void 0, block.root);
691
+ _chunkZR435MDCcjs.flushOnMount.call(void 0, block.root);
687
692
  }
688
693
  }
689
694
  return;
690
695
  }
691
696
  if (oldBlocks.size > 0) {
692
697
  for (const block of oldBlocks.values()) {
693
- _chunk6RCEIWZLcjs.destroyRoot.call(void 0, block.root);
694
- _chunkWJHXPF7Mcjs.removeNodes.call(void 0, block.nodes);
698
+ _chunkZR435MDCcjs.destroyRoot.call(void 0, block.root);
699
+ _chunkZ6M3HKLGcjs.removeNodes.call(void 0, block.nodes);
695
700
  }
696
701
  oldBlocks.clear();
697
702
  }
@@ -750,7 +755,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
750
755
  container.nextOrderedBlocks = prevOrderedBlocks;
751
756
  for (const block of createdBlocks) {
752
757
  if (newBlocks.get(block.key) === block) {
753
- _chunk6RCEIWZLcjs.flushOnMount.call(void 0, block.root);
758
+ _chunkZR435MDCcjs.flushOnMount.call(void 0, block.root);
754
759
  }
755
760
  }
756
761
  });
@@ -761,19 +766,19 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
761
766
  };
762
767
  const ensureEffectStarted = () => {
763
768
  if (disposed || effectStarted) return effectStarted;
764
- const isSSR = _chunk6RCEIWZLcjs.__fictIsSSR.call(void 0, );
769
+ const isSSR = _chunkZR435MDCcjs.__fictIsSSR.call(void 0, );
765
770
  const parent = isSSR ? container.startMarker.parentNode : getConnectedParent();
766
771
  if (!parent) return false;
767
772
  const start = () => {
768
- effectDispose = _chunk6RCEIWZLcjs.createRenderEffect.call(void 0, performDiff);
773
+ effectDispose = _chunkZR435MDCcjs.createRenderEffect.call(void 0, performDiff);
769
774
  effectStarted = true;
770
775
  };
771
776
  if (hostRoot) {
772
- const prev = _chunk6RCEIWZLcjs.pushRoot.call(void 0, hostRoot);
777
+ const prev = _chunkZR435MDCcjs.pushRoot.call(void 0, hostRoot);
773
778
  try {
774
779
  start();
775
780
  } finally {
776
- _chunk6RCEIWZLcjs.popRoot.call(void 0, prev);
781
+ _chunkZR435MDCcjs.popRoot.call(void 0, prev);
777
782
  }
778
783
  } else {
779
784
  start();
@@ -789,7 +794,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
789
794
  if (getConnectedParent()) {
790
795
  disconnectObserver();
791
796
  if (ensureEffectStarted()) {
792
- _chunk6RCEIWZLcjs.flush.call(void 0, );
797
+ _chunkZR435MDCcjs.flush.call(void 0, );
793
798
  }
794
799
  }
795
800
  });
@@ -826,7 +831,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
826
831
  if (disposed) return;
827
832
  scheduleStart();
828
833
  if (ensureEffectStarted()) {
829
- _chunk6RCEIWZLcjs.flush.call(void 0, );
834
+ _chunkZR435MDCcjs.flush.call(void 0, );
830
835
  } else {
831
836
  waitForConnection();
832
837
  }
@@ -931,5 +936,10 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, sta
931
936
 
932
937
 
933
938
 
934
- exports.Aliases = _chunk6RCEIWZLcjs.Aliases; exports.BooleanAttributes = _chunk6RCEIWZLcjs.BooleanAttributes; exports.ChildProperties = _chunk6RCEIWZLcjs.ChildProperties; exports.DelegatedEvents = _chunk6RCEIWZLcjs.DelegatedEvents; exports.Fragment = _chunkWJHXPF7Mcjs.Fragment; exports.Properties = _chunk6RCEIWZLcjs.Properties; exports.SVGElements = _chunk6RCEIWZLcjs.SVGElements; exports.SVGNamespace = _chunk6RCEIWZLcjs.SVGNamespace; exports.UnitlessStyles = _chunk6RCEIWZLcjs.UnitlessStyles; exports.__fictDisableResumable = _chunk6RCEIWZLcjs.__fictDisableResumable; exports.__fictDisableSSR = _chunk6RCEIWZLcjs.__fictDisableSSR; exports.__fictEnableResumable = _chunk6RCEIWZLcjs.__fictEnableResumable; exports.__fictEnableSSR = _chunk6RCEIWZLcjs.__fictEnableSSR; exports.__fictEnsureScope = _chunk6RCEIWZLcjs.__fictEnsureScope; exports.__fictEnterHydration = _chunk6RCEIWZLcjs.__fictEnterHydration; exports.__fictExitHydration = _chunk6RCEIWZLcjs.__fictExitHydration; exports.__fictGetResume = _chunk6RCEIWZLcjs.__fictGetResume; exports.__fictGetSSRScope = _chunk6RCEIWZLcjs.__fictGetSSRScope; exports.__fictGetScopeProps = _chunk6RCEIWZLcjs.__fictGetScopeProps; exports.__fictGetScopeRegistry = _chunk6RCEIWZLcjs.__fictGetScopeRegistry; exports.__fictIsHydrating = _chunk6RCEIWZLcjs.__fictIsHydrating; exports.__fictIsResumable = _chunk6RCEIWZLcjs.__fictIsResumable; exports.__fictIsSSR = _chunk6RCEIWZLcjs.__fictIsSSR; exports.__fictPopContext = _chunk6RCEIWZLcjs.__fictPopContext; exports.__fictPrepareContext = _chunk6RCEIWZLcjs.__fictPrepareContext; exports.__fictProp = _chunkWJHXPF7Mcjs.__fictProp; exports.__fictPropsRest = _chunkWJHXPF7Mcjs.__fictPropsRest; exports.__fictPushContext = _chunk6RCEIWZLcjs.__fictPushContext; exports.__fictQrl = _chunk6RCEIWZLcjs.__fictQrl; exports.__fictRegisterResume = _chunk6RCEIWZLcjs.__fictRegisterResume; exports.__fictRegisterScope = _chunk6RCEIWZLcjs.__fictRegisterScope; exports.__fictRender = _chunk6RCEIWZLcjs.__fictRender; exports.__fictResetContext = _chunk6RCEIWZLcjs.__fictResetContext; exports.__fictSerializeSSRState = _chunk6RCEIWZLcjs.__fictSerializeSSRState; exports.__fictSetSSRState = _chunk6RCEIWZLcjs.__fictSetSSRState; exports.__fictUseContext = _chunk6RCEIWZLcjs.__fictUseContext; exports.__fictUseEffect = _chunk6RCEIWZLcjs.__fictUseEffect; exports.__fictUseLexicalScope = _chunk6RCEIWZLcjs.__fictUseLexicalScope; exports.__fictUseMemo = _chunk6RCEIWZLcjs.__fictUseMemo; exports.__fictUseSignal = _chunk6RCEIWZLcjs.__fictUseSignal; exports.__resetReactiveState = _chunk6RCEIWZLcjs.__resetReactiveState; exports.addEventListener = _chunkWJHXPF7Mcjs.addEventListener; exports.assign = _chunkWJHXPF7Mcjs.assign; exports.bindAttribute = _chunkWJHXPF7Mcjs.bindAttribute; exports.bindClass = _chunkWJHXPF7Mcjs.bindClass; exports.bindEvent = _chunkWJHXPF7Mcjs.bindEvent; exports.bindProperty = _chunkWJHXPF7Mcjs.bindProperty; exports.bindRef = _chunkWJHXPF7Mcjs.bindRef; exports.bindStyle = _chunkWJHXPF7Mcjs.bindStyle; exports.bindText = _chunkWJHXPF7Mcjs.bindText; exports.callEventHandler = _chunkWJHXPF7Mcjs.callEventHandler; exports.classList = _chunkWJHXPF7Mcjs.classList; exports.clearDelegatedEvents = _chunkWJHXPF7Mcjs.clearDelegatedEvents; exports.createConditional = _chunkWJHXPF7Mcjs.createConditional; exports.createEffect = _chunk6RCEIWZLcjs.createEffect; exports.createElement = _chunkWJHXPF7Mcjs.createElement; exports.createKeyedList = createKeyedList; exports.createMemo = _chunk6RCEIWZLcjs.createMemo; exports.createPortal = _chunkWJHXPF7Mcjs.createPortal; exports.createPropsProxy = _chunkWJHXPF7Mcjs.createPropsProxy; exports.createRenderEffect = _chunk6RCEIWZLcjs.createRenderEffect; exports.createSelector = _chunk6RCEIWZLcjs.createSelector; exports.createSignal = _chunk6RCEIWZLcjs.signal; exports.createStore = _chunk6RCEIWZLcjs.createStore; exports.delegateEvents = _chunkWJHXPF7Mcjs.delegateEvents; exports.deserializeValue = _chunk6RCEIWZLcjs.deserializeValue; exports.getPropAlias = _chunk6RCEIWZLcjs.getPropAlias; exports.getSlotEnd = _chunkWJHXPF7Mcjs.getSlotEnd; exports.hydrateComponent = _chunkWJHXPF7Mcjs.hydrateComponent; exports.insert = _chunkWJHXPF7Mcjs.insert; exports.insertBetween = _chunkWJHXPF7Mcjs.insertBetween; exports.insertNodesBefore = _chunkWJHXPF7Mcjs.insertNodesBefore; exports.isNodeBetweenMarkers = isNodeBetweenMarkers; exports.isReactive = _chunkWJHXPF7Mcjs.isReactive; exports.isStoreProxy = _chunk6RCEIWZLcjs.isStoreProxy; exports.keyed = _chunkWJHXPF7Mcjs.keyed; exports.mergeProps = _chunkWJHXPF7Mcjs.mergeProps; exports.moveNodesBefore = moveNodesBefore; exports.onDestroy = _chunk6RCEIWZLcjs.onDestroy; exports.prop = _chunkWJHXPF7Mcjs.prop; exports.reconcileArrays = reconcileArrays; exports.removeNodes = _chunkWJHXPF7Mcjs.removeNodes; exports.render = _chunkWJHXPF7Mcjs.render; exports.resolvePath = _chunkWJHXPF7Mcjs.resolvePath; exports.runInScope = _chunk4ZPZM5IGcjs.runInScope; exports.serializeValue = _chunk6RCEIWZLcjs.serializeValue; exports.spread = _chunkWJHXPF7Mcjs.spread; exports.template = _chunkWJHXPF7Mcjs.template; exports.toNodeArray = _chunkWJHXPF7Mcjs.toNodeArray; exports.unwrap = _chunkWJHXPF7Mcjs.unwrap; exports.unwrapStore = _chunk6RCEIWZLcjs.unwrapStore;
939
+
940
+
941
+
942
+
943
+
944
+ exports.Aliases = _chunkZR435MDCcjs.Aliases; exports.BooleanAttributes = _chunkZR435MDCcjs.BooleanAttributes; exports.ChildProperties = _chunkZR435MDCcjs.ChildProperties; exports.DelegatedEvents = _chunkZR435MDCcjs.DelegatedEvents; exports.Fragment = _chunkZ6M3HKLGcjs.Fragment; exports.Properties = _chunkZR435MDCcjs.Properties; exports.SVGElements = _chunkZR435MDCcjs.SVGElements; exports.SVGNamespace = _chunkZR435MDCcjs.SVGNamespace; exports.UnitlessStyles = _chunkZR435MDCcjs.UnitlessStyles; exports.__fictDisableResumable = _chunkZR435MDCcjs.__fictDisableResumable; exports.__fictDisableSSR = _chunkZR435MDCcjs.__fictDisableSSR; exports.__fictEnableResumable = _chunkZR435MDCcjs.__fictEnableResumable; exports.__fictEnableSSR = _chunkZR435MDCcjs.__fictEnableSSR; exports.__fictEnsureScope = _chunkZR435MDCcjs.__fictEnsureScope; exports.__fictEnterHydration = _chunkZR435MDCcjs.__fictEnterHydration; exports.__fictExitHydration = _chunkZR435MDCcjs.__fictExitHydration; exports.__fictGetResume = _chunkZR435MDCcjs.__fictGetResume; exports.__fictGetSSRScope = _chunkZR435MDCcjs.__fictGetSSRScope; exports.__fictGetSSRStreamHooks = _chunkZR435MDCcjs.__fictGetSSRStreamHooks; exports.__fictGetScopeProps = _chunkZR435MDCcjs.__fictGetScopeProps; exports.__fictGetScopeRegistry = _chunkZR435MDCcjs.__fictGetScopeRegistry; exports.__fictGetScopesForBoundary = _chunkZR435MDCcjs.__fictGetScopesForBoundary; exports.__fictIsHydrating = _chunkZR435MDCcjs.__fictIsHydrating; exports.__fictIsResumable = _chunkZR435MDCcjs.__fictIsResumable; exports.__fictIsSSR = _chunkZR435MDCcjs.__fictIsSSR; exports.__fictMergeSSRState = _chunkZR435MDCcjs.__fictMergeSSRState; exports.__fictPopContext = _chunkZR435MDCcjs.__fictPopContext; exports.__fictPrepareContext = _chunkZR435MDCcjs.__fictPrepareContext; exports.__fictProp = _chunkZ6M3HKLGcjs.__fictProp; exports.__fictPropsRest = _chunkZ6M3HKLGcjs.__fictPropsRest; exports.__fictPushContext = _chunkZR435MDCcjs.__fictPushContext; exports.__fictQrl = _chunkZR435MDCcjs.__fictQrl; exports.__fictRegisterResume = _chunkZR435MDCcjs.__fictRegisterResume; exports.__fictRegisterScope = _chunkZR435MDCcjs.__fictRegisterScope; exports.__fictRender = _chunkZR435MDCcjs.__fictRender; exports.__fictResetContext = _chunkZR435MDCcjs.__fictResetContext; exports.__fictSerializeSSRState = _chunkZR435MDCcjs.__fictSerializeSSRState; exports.__fictSerializeSSRStateForScopes = _chunkZR435MDCcjs.__fictSerializeSSRStateForScopes; exports.__fictSetSSRState = _chunkZR435MDCcjs.__fictSetSSRState; exports.__fictSetSSRStreamHooks = _chunkZR435MDCcjs.__fictSetSSRStreamHooks; exports.__fictUseContext = _chunkZR435MDCcjs.__fictUseContext; exports.__fictUseEffect = _chunkZR435MDCcjs.__fictUseEffect; exports.__fictUseLexicalScope = _chunkZR435MDCcjs.__fictUseLexicalScope; exports.__fictUseMemo = _chunkZR435MDCcjs.__fictUseMemo; exports.__fictUseSignal = _chunkZR435MDCcjs.__fictUseSignal; exports.__resetReactiveState = _chunkZR435MDCcjs.__resetReactiveState; exports.addEventListener = _chunkZ6M3HKLGcjs.addEventListener; exports.assign = _chunkZ6M3HKLGcjs.assign; exports.bindAttribute = _chunkZ6M3HKLGcjs.bindAttribute; exports.bindClass = _chunkZ6M3HKLGcjs.bindClass; exports.bindEvent = _chunkZ6M3HKLGcjs.bindEvent; exports.bindProperty = _chunkZ6M3HKLGcjs.bindProperty; exports.bindRef = _chunkZ6M3HKLGcjs.bindRef; exports.bindStyle = _chunkZ6M3HKLGcjs.bindStyle; exports.bindText = _chunkZ6M3HKLGcjs.bindText; exports.callEventHandler = _chunkZ6M3HKLGcjs.callEventHandler; exports.classList = _chunkZ6M3HKLGcjs.classList; exports.clearDelegatedEvents = _chunkZ6M3HKLGcjs.clearDelegatedEvents; exports.createConditional = _chunkZ6M3HKLGcjs.createConditional; exports.createEffect = _chunkZR435MDCcjs.createEffect; exports.createElement = _chunkZ6M3HKLGcjs.createElement; exports.createKeyedList = createKeyedList; exports.createMemo = _chunkZR435MDCcjs.createMemo; exports.createPortal = _chunkZ6M3HKLGcjs.createPortal; exports.createPropsProxy = _chunkZ6M3HKLGcjs.createPropsProxy; exports.createRenderEffect = _chunkZR435MDCcjs.createRenderEffect; exports.createSelector = _chunkZR435MDCcjs.createSelector; exports.createSignal = _chunkZR435MDCcjs.signal; exports.createStore = _chunkZR435MDCcjs.createStore; exports.delegateEvents = _chunkZ6M3HKLGcjs.delegateEvents; exports.deserializeValue = _chunkZR435MDCcjs.deserializeValue; exports.getPropAlias = _chunkZR435MDCcjs.getPropAlias; exports.getSlotEnd = _chunkZ6M3HKLGcjs.getSlotEnd; exports.hydrateComponent = _chunkZ6M3HKLGcjs.hydrateComponent; exports.insert = _chunkZ6M3HKLGcjs.insert; exports.insertBetween = _chunkZ6M3HKLGcjs.insertBetween; exports.insertNodesBefore = _chunkZ6M3HKLGcjs.insertNodesBefore; exports.isNodeBetweenMarkers = isNodeBetweenMarkers; exports.isReactive = _chunkZ6M3HKLGcjs.isReactive; exports.isStoreProxy = _chunkZR435MDCcjs.isStoreProxy; exports.keyed = _chunkZ6M3HKLGcjs.keyed; exports.mergeProps = _chunkZ6M3HKLGcjs.mergeProps; exports.moveNodesBefore = moveNodesBefore; exports.onDestroy = _chunkZR435MDCcjs.onDestroy; exports.prop = _chunkZ6M3HKLGcjs.prop; exports.reconcileArrays = reconcileArrays; exports.removeNodes = _chunkZ6M3HKLGcjs.removeNodes; exports.render = _chunkZ6M3HKLGcjs.render; exports.resolvePath = _chunkZ6M3HKLGcjs.resolvePath; exports.runInScope = _chunkQB2UD62Gcjs.runInScope; exports.serializeValue = _chunkZR435MDCcjs.serializeValue; exports.spread = _chunkZ6M3HKLGcjs.spread; exports.template = _chunkZ6M3HKLGcjs.template; exports.toNodeArray = _chunkZ6M3HKLGcjs.toNodeArray; exports.unwrap = _chunkZ6M3HKLGcjs.unwrap; exports.unwrapStore = _chunkZR435MDCcjs.unwrapStore;
935
945
  //# sourceMappingURL=internal.cjs.map