@fictjs/runtime 0.1.0 → 0.2.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 (46) hide show
  1. package/dist/advanced.cjs +8 -8
  2. package/dist/advanced.d.cts +3 -3
  3. package/dist/advanced.d.ts +3 -3
  4. package/dist/advanced.js +3 -3
  5. package/dist/{chunk-Q4EN6BXV.cjs → chunk-527QSKFM.cjs} +16 -16
  6. package/dist/{chunk-Q4EN6BXV.cjs.map → chunk-527QSKFM.cjs.map} +1 -1
  7. package/dist/{chunk-BWZFJXUI.js → chunk-5KXEEQUO.js} +84 -10
  8. package/dist/chunk-5KXEEQUO.js.map +1 -0
  9. package/dist/{chunk-YQ4IB7NC.cjs → chunk-BSUMPMKX.cjs} +7 -7
  10. package/dist/{chunk-YQ4IB7NC.cjs.map → chunk-BSUMPMKX.cjs.map} +1 -1
  11. package/dist/{chunk-V62XZLDU.js → chunk-FG3M7EBL.js} +2 -2
  12. package/dist/{chunk-7WAGAQLT.cjs → chunk-J74L7UYP.cjs} +84 -10
  13. package/dist/chunk-J74L7UYP.cjs.map +1 -0
  14. package/dist/{chunk-CF3OHML2.js → chunk-QV5GOCR5.js} +2 -2
  15. package/dist/{context-B7UYnfzM.d.ts → context-4woHo7-L.d.ts} +1 -1
  16. package/dist/{context-UXySaqI_.d.cts → context-9gFXOdJl.d.cts} +1 -1
  17. package/dist/{effect-Auji1rz9.d.cts → effect-ClARNUCc.d.cts} +23 -2
  18. package/dist/{effect-Auji1rz9.d.ts → effect-ClARNUCc.d.ts} +23 -2
  19. package/dist/index.cjs +51 -54
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +4 -4
  22. package/dist/index.d.ts +4 -4
  23. package/dist/index.dev.js +66 -19
  24. package/dist/index.dev.js.map +1 -1
  25. package/dist/index.js +10 -13
  26. package/dist/index.js.map +1 -1
  27. package/dist/internal.cjs +34 -34
  28. package/dist/internal.d.cts +4 -4
  29. package/dist/internal.d.ts +4 -4
  30. package/dist/internal.js +2 -2
  31. package/dist/jsx-runtime.d.cts +671 -0
  32. package/dist/jsx-runtime.d.ts +671 -0
  33. package/dist/{props-BfmSLuyp.d.cts → props-CBwuh35e.d.cts} +4 -4
  34. package/dist/{props-BBi8Tkks.d.ts → props-DAyeRPwH.d.ts} +4 -4
  35. package/dist/{scope-S6eAzBJZ.d.ts → scope-DvgMquEy.d.ts} +1 -1
  36. package/dist/{scope-DKYzWfTn.d.cts → scope-xmdo6lVU.d.cts} +1 -1
  37. package/package.json +1 -1
  38. package/src/binding.ts +58 -5
  39. package/src/effect.ts +9 -2
  40. package/src/lifecycle.ts +13 -3
  41. package/src/signal.ts +43 -4
  42. package/src/suspense.ts +17 -13
  43. package/dist/chunk-7WAGAQLT.cjs.map +0 -1
  44. package/dist/chunk-BWZFJXUI.js.map +0 -1
  45. /package/dist/{chunk-V62XZLDU.js.map → chunk-FG3M7EBL.js.map} +0 -0
  46. /package/dist/{chunk-CF3OHML2.js.map → chunk-QV5GOCR5.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-V62XZLDU.js";
5
+ } from "./chunk-FG3M7EBL.js";
6
6
  import {
7
7
  Fragment,
8
8
  batch2 as batch,
@@ -34,7 +34,7 @@ import {
34
34
  untrack2 as untrack,
35
35
  useDeferredValue,
36
36
  useTransition
37
- } from "./chunk-BWZFJXUI.js";
37
+ } from "./chunk-5KXEEQUO.js";
38
38
 
39
39
  // src/ref.ts
40
40
  function createRef() {
@@ -153,10 +153,6 @@ function Suspense(props) {
153
153
  let epoch = 0;
154
154
  const hostRoot = getCurrentRoot();
155
155
  const toFallback = (err) => typeof props.fallback === "function" ? props.fallback(err) : props.fallback;
156
- const switchView = (view) => {
157
- currentView(view);
158
- renderView(view);
159
- };
160
156
  const renderView = (view) => {
161
157
  if (cleanup) {
162
158
  cleanup();
@@ -175,7 +171,7 @@ function Suspense(props) {
175
171
  try {
176
172
  const output = createElement(view);
177
173
  nodes = toNodeArray(output);
178
- const suspendedAttempt = nodes.length > 0 && nodes.every((node) => node instanceof Comment && node.data === "fict:suspend");
174
+ const suspendedAttempt = root.suspended || nodes.length > 0 && nodes.every((node) => node instanceof Comment && node.data === "fict:suspend");
179
175
  if (suspendedAttempt) {
180
176
  popRoot(prev);
181
177
  destroyRoot(root);
@@ -216,7 +212,8 @@ function Suspense(props) {
216
212
  registerSuspenseHandler((token) => {
217
213
  const tokenEpoch = epoch;
218
214
  pending(pending() + 1);
219
- switchView(toFallback());
215
+ currentView(toFallback());
216
+ renderView(toFallback());
220
217
  const thenable = token.then ? token : isThenable(token) ? token : null;
221
218
  if (thenable) {
222
219
  thenable.then(
@@ -227,7 +224,8 @@ function Suspense(props) {
227
224
  const newPending = Math.max(0, pending() - 1);
228
225
  pending(newPending);
229
226
  if (newPending === 0) {
230
- switchView(props.children ?? null);
227
+ currentView(props.children ?? null);
228
+ renderView(props.children ?? null);
231
229
  onResolveMaybe();
232
230
  }
233
231
  },
@@ -247,9 +245,7 @@ function Suspense(props) {
247
245
  }
248
246
  return false;
249
247
  });
250
- createEffect(() => {
251
- renderView(currentView());
252
- });
248
+ renderView(props.children ?? null);
253
249
  if (props.resetKeys !== void 0) {
254
250
  const isGetter = typeof props.resetKeys === "function" && props.resetKeys.length === 0;
255
251
  const getter = isGetter ? props.resetKeys : void 0;
@@ -260,7 +256,8 @@ function Suspense(props) {
260
256
  prev = next;
261
257
  epoch++;
262
258
  pending(0);
263
- switchView(props.children ?? null);
259
+ currentView(props.children ?? null);
260
+ renderView(props.children ?? null);
264
261
  }
265
262
  });
266
263
  }
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 { createSignal } from './signal'\nimport type { BaseProps, FictNode } from './types'\n\ninterface ErrorBoundaryProps extends BaseProps {\n fallback: FictNode | ((err: unknown) => 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 currentView = createSignal<FictNode | null>(props.children ?? null)\n const hostRoot = getCurrentRoot()\n\n let cleanup: (() => void) | undefined\n let activeNodes: Node[] = []\n let renderingFallback = false\n\n const toView = (err: unknown | null): FictNode | null => {\n if (err != null) {\n return typeof props.fallback === 'function'\n ? (props.fallback as (e: unknown) => FictNode)(err)\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 flushOnMount(root)\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 createEffect(() => {\n const value = currentView()\n renderValue(value)\n })\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 currentView = createSignal<FictNode | null>(props.children ?? null)\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 switchView = (view: FictNode | null) => {\n currentView(view)\n renderView(view)\n }\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 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 flushOnMount(root)\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 switchView(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 switchView(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 createEffect(() => {\n renderView(currentView())\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 epoch++\n pending(0)\n switchView(props.children ?? null)\n }\n })\n }\n\n return fragment\n}\n"],"mappings":"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","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 { createSignal } from './signal'\nimport type { BaseProps, FictNode } from './types'\n\ninterface ErrorBoundaryProps extends BaseProps {\n fallback: FictNode | ((err: unknown) => 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 currentView = createSignal<FictNode | null>(props.children ?? null)\n const hostRoot = getCurrentRoot()\n\n let cleanup: (() => void) | undefined\n let activeNodes: Node[] = []\n let renderingFallback = false\n\n const toView = (err: unknown | null): FictNode | null => {\n if (err != null) {\n return typeof props.fallback === 'function'\n ? (props.fallback as (e: unknown) => FictNode)(err)\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 flushOnMount(root)\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 createEffect(() => {\n const value = currentView()\n renderValue(value)\n })\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 currentView = createSignal<FictNode | null>(props.children ?? null)\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 flushOnMount(root)\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 currentView(toFallback())\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 currentView(props.children ?? null)\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 currentView(props.children ?? null)\n renderView(props.children ?? null)\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 _chunkYQ4IB7NCcjs = require('./chunk-YQ4IB7NC.cjs');
3
+ var _chunkBSUMPMKXcjs = require('./chunk-BSUMPMKX.cjs');
4
4
 
5
5
 
6
6
 
@@ -66,7 +66,7 @@ var _chunkYQ4IB7NCcjs = require('./chunk-YQ4IB7NC.cjs');
66
66
 
67
67
 
68
68
 
69
- var _chunk7WAGAQLTcjs = require('./chunk-7WAGAQLT.cjs');
69
+ var _chunkJ74L7UYPcjs = require('./chunk-J74L7UYP.cjs');
70
70
 
71
71
  // src/store.ts
72
72
  var PROXY = Symbol("fict:store-proxy");
@@ -76,7 +76,7 @@ function createStore(initialValue) {
76
76
  const unwrapped = unwrap2(initialValue);
77
77
  const wrapped = wrap(unwrapped);
78
78
  function setStore(fn) {
79
- _chunk7WAGAQLTcjs.batch.call(void 0, () => {
79
+ _chunkJ74L7UYPcjs.batch.call(void 0, () => {
80
80
  const result = fn(wrapped);
81
81
  if (result !== void 0) {
82
82
  reconcile(wrapped, result);
@@ -157,7 +157,7 @@ function track(target, prop2) {
157
157
  let s = signals.get(prop2);
158
158
  if (!s) {
159
159
  const initial = prop2 === ITERATE_KEY ? Reflect.ownKeys(target).length : getLastValue(target, prop2);
160
- s = _chunk7WAGAQLTcjs.signal.call(void 0, initial);
160
+ s = _chunkJ74L7UYPcjs.signal.call(void 0, initial);
161
161
  signals.set(prop2, s);
162
162
  }
163
163
  s();
@@ -329,7 +329,7 @@ var MAX_SAFE_VERSION = 9007199254740991;
329
329
  function createVersionedSignalAccessor(initialValue) {
330
330
  let current = initialValue;
331
331
  let version = 0;
332
- const track2 = _chunk7WAGAQLTcjs.signal.call(void 0, version);
332
+ const track2 = _chunkJ74L7UYPcjs.signal.call(void 0, version);
333
333
  function accessor(value) {
334
334
  if (arguments.length === 0) {
335
335
  track2();
@@ -346,7 +346,7 @@ function createKeyedListContainer() {
346
346
  const endMarker = document.createComment("fict:list:end");
347
347
  const dispose = () => {
348
348
  for (const block of container.blocks.values()) {
349
- _chunk7WAGAQLTcjs.destroyRoot.call(void 0, block.root);
349
+ _chunkJ74L7UYPcjs.destroyRoot.call(void 0, block.root);
350
350
  }
351
351
  container.blocks.clear();
352
352
  container.nextBlocks.clear();
@@ -385,32 +385,32 @@ function createKeyedListContainer() {
385
385
  }
386
386
  function createKeyedBlock(key, item, index, render, needsIndex = true, hostRoot) {
387
387
  const itemSig = createVersionedSignalAccessor(item);
388
- const indexSig = needsIndex ? _chunk7WAGAQLTcjs.signal.call(void 0, index) : ((next) => {
388
+ const indexSig = needsIndex ? _chunkJ74L7UYPcjs.signal.call(void 0, index) : ((next) => {
389
389
  if (arguments.length === 0) return index;
390
390
  index = next;
391
391
  return index;
392
392
  });
393
- const root = _chunk7WAGAQLTcjs.createRootContext.call(void 0, hostRoot);
394
- const prevRoot = _chunk7WAGAQLTcjs.pushRoot.call(void 0, root);
393
+ const root = _chunkJ74L7UYPcjs.createRootContext.call(void 0, hostRoot);
394
+ const prevRoot = _chunkJ74L7UYPcjs.pushRoot.call(void 0, root);
395
395
  let nodes = [];
396
396
  let scopeDispose;
397
- const prevSub = _chunk7WAGAQLTcjs.setActiveSub.call(void 0, void 0);
397
+ const prevSub = _chunkJ74L7UYPcjs.setActiveSub.call(void 0, void 0);
398
398
  try {
399
- scopeDispose = _chunk7WAGAQLTcjs.effectScope.call(void 0, () => {
399
+ scopeDispose = _chunkJ74L7UYPcjs.effectScope.call(void 0, () => {
400
400
  const rendered = render(itemSig, indexSig, key);
401
401
  if (rendered instanceof Node || Array.isArray(rendered) && rendered.every((n) => n instanceof Node)) {
402
- nodes = _chunk7WAGAQLTcjs.toNodeArray.call(void 0, rendered);
402
+ nodes = _chunkJ74L7UYPcjs.toNodeArray.call(void 0, rendered);
403
403
  } else {
404
- const element = _chunk7WAGAQLTcjs.createElement.call(void 0, rendered);
405
- nodes = _chunk7WAGAQLTcjs.toNodeArray.call(void 0, element);
404
+ const element = _chunkJ74L7UYPcjs.createElement.call(void 0, rendered);
405
+ nodes = _chunkJ74L7UYPcjs.toNodeArray.call(void 0, element);
406
406
  }
407
407
  });
408
408
  if (scopeDispose) {
409
409
  root.cleanups.push(scopeDispose);
410
410
  }
411
411
  } finally {
412
- _chunk7WAGAQLTcjs.setActiveSub.call(void 0, prevSub);
413
- _chunk7WAGAQLTcjs.popRoot.call(void 0, prevRoot);
412
+ _chunkJ74L7UYPcjs.setActiveSub.call(void 0, prevSub);
413
+ _chunkJ74L7UYPcjs.popRoot.call(void 0, prevRoot);
414
414
  }
415
415
  return {
416
416
  key,
@@ -516,7 +516,7 @@ function createKeyedList(getItems, keyFn, renderItem, needsIndex) {
516
516
  }
517
517
  function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
518
518
  const container = createKeyedListContainer();
519
- const hostRoot = _chunk7WAGAQLTcjs.getCurrentRoot.call(void 0, );
519
+ const hostRoot = _chunkJ74L7UYPcjs.getCurrentRoot.call(void 0, );
520
520
  const fragment = document.createDocumentFragment();
521
521
  fragment.append(container.startMarker, container.endMarker);
522
522
  let disposed = false;
@@ -538,7 +538,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
538
538
  if (disposed) return;
539
539
  const parent = getConnectedParent();
540
540
  if (!parent) return;
541
- _chunk7WAGAQLTcjs.batch2.call(void 0, () => {
541
+ _chunkJ74L7UYPcjs.batch2.call(void 0, () => {
542
542
  const oldBlocks = container.blocks;
543
543
  const newBlocks = container.nextBlocks;
544
544
  const prevOrderedBlocks = container.orderedBlocks;
@@ -548,7 +548,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
548
548
  if (newItems.length === 0) {
549
549
  if (oldBlocks.size > 0) {
550
550
  for (const block of oldBlocks.values()) {
551
- _chunk7WAGAQLTcjs.destroyRoot.call(void 0, block.root);
551
+ _chunkJ74L7UYPcjs.destroyRoot.call(void 0, block.root);
552
552
  }
553
553
  const range = document.createRange();
554
554
  range.setStartAfter(container.startMarker);
@@ -629,8 +629,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
629
629
  `[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.`
630
630
  );
631
631
  }
632
- _chunk7WAGAQLTcjs.destroyRoot.call(void 0, existingBlock.root);
633
- _chunk7WAGAQLTcjs.removeNodes.call(void 0, existingBlock.nodes);
632
+ _chunkJ74L7UYPcjs.destroyRoot.call(void 0, existingBlock.root);
633
+ _chunkJ74L7UYPcjs.removeNodes.call(void 0, existingBlock.nodes);
634
634
  }
635
635
  block = createKeyedBlock(key, item, index, renderItem, needsIndex, hostRoot);
636
636
  createdBlocks.push(block);
@@ -643,8 +643,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
643
643
  hasDuplicateKey = true;
644
644
  const prior = nextOrderedBlocks[position];
645
645
  if (prior && prior !== resolvedBlock) {
646
- _chunk7WAGAQLTcjs.destroyRoot.call(void 0, prior.root);
647
- _chunk7WAGAQLTcjs.removeNodes.call(void 0, prior.nodes);
646
+ _chunkJ74L7UYPcjs.destroyRoot.call(void 0, prior.root);
647
+ _chunkJ74L7UYPcjs.removeNodes.call(void 0, prior.nodes);
648
648
  }
649
649
  nextOrderedBlocks[position] = resolvedBlock;
650
650
  } else {
@@ -682,7 +682,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
682
682
  }
683
683
  }
684
684
  if (appendedNodes.length > 0) {
685
- _chunk7WAGAQLTcjs.insertNodesBefore.call(void 0, parent, appendedNodes, container.endMarker);
685
+ _chunkJ74L7UYPcjs.insertNodesBefore.call(void 0, parent, appendedNodes, container.endMarker);
686
686
  const currentNodes = container.currentNodes;
687
687
  currentNodes.pop();
688
688
  for (let i = 0; i < appendedNodes.length; i++) {
@@ -696,15 +696,15 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
696
696
  container.nextOrderedBlocks = prevOrderedBlocks;
697
697
  for (const block of createdBlocks) {
698
698
  if (newBlocks.get(block.key) === block) {
699
- _chunk7WAGAQLTcjs.flushOnMount.call(void 0, block.root);
699
+ _chunkJ74L7UYPcjs.flushOnMount.call(void 0, block.root);
700
700
  }
701
701
  }
702
702
  return;
703
703
  }
704
704
  if (oldBlocks.size > 0) {
705
705
  for (const block of oldBlocks.values()) {
706
- _chunk7WAGAQLTcjs.destroyRoot.call(void 0, block.root);
707
- _chunk7WAGAQLTcjs.removeNodes.call(void 0, block.nodes);
706
+ _chunkJ74L7UYPcjs.destroyRoot.call(void 0, block.root);
707
+ _chunkJ74L7UYPcjs.removeNodes.call(void 0, block.nodes);
708
708
  }
709
709
  oldBlocks.clear();
710
710
  }
@@ -763,7 +763,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
763
763
  container.nextOrderedBlocks = prevOrderedBlocks;
764
764
  for (const block of createdBlocks) {
765
765
  if (newBlocks.get(block.key) === block) {
766
- _chunk7WAGAQLTcjs.flushOnMount.call(void 0, block.root);
766
+ _chunkJ74L7UYPcjs.flushOnMount.call(void 0, block.root);
767
767
  }
768
768
  }
769
769
  });
@@ -777,15 +777,15 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
777
777
  const parent = getConnectedParent();
778
778
  if (!parent) return false;
779
779
  const start = () => {
780
- effectDispose = _chunk7WAGAQLTcjs.createRenderEffect.call(void 0, performDiff);
780
+ effectDispose = _chunkJ74L7UYPcjs.createRenderEffect.call(void 0, performDiff);
781
781
  effectStarted = true;
782
782
  };
783
783
  if (hostRoot) {
784
- const prev = _chunk7WAGAQLTcjs.pushRoot.call(void 0, hostRoot);
784
+ const prev = _chunkJ74L7UYPcjs.pushRoot.call(void 0, hostRoot);
785
785
  try {
786
786
  start();
787
787
  } finally {
788
- _chunk7WAGAQLTcjs.popRoot.call(void 0, prev);
788
+ _chunkJ74L7UYPcjs.popRoot.call(void 0, prev);
789
789
  }
790
790
  } else {
791
791
  start();
@@ -799,7 +799,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
799
799
  if (getConnectedParent()) {
800
800
  disconnectObserver();
801
801
  if (ensureEffectStarted()) {
802
- _chunk7WAGAQLTcjs.flush.call(void 0, );
802
+ _chunkJ74L7UYPcjs.flush.call(void 0, );
803
803
  }
804
804
  }
805
805
  });
@@ -833,7 +833,7 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
833
833
  if (disposed) return;
834
834
  scheduleStart();
835
835
  if (ensureEffectStarted()) {
836
- _chunk7WAGAQLTcjs.flush.call(void 0, );
836
+ _chunkJ74L7UYPcjs.flush.call(void 0, );
837
837
  } else {
838
838
  waitForConnection();
839
839
  }
@@ -906,5 +906,5 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
906
906
 
907
907
 
908
908
 
909
- exports.Aliases = _chunk7WAGAQLTcjs.Aliases; exports.BooleanAttributes = _chunk7WAGAQLTcjs.BooleanAttributes; exports.ChildProperties = _chunk7WAGAQLTcjs.ChildProperties; exports.DelegatedEvents = _chunk7WAGAQLTcjs.DelegatedEvents; exports.Fragment = _chunk7WAGAQLTcjs.Fragment; exports.Properties = _chunk7WAGAQLTcjs.Properties; exports.SVGElements = _chunk7WAGAQLTcjs.SVGElements; exports.SVGNamespace = _chunk7WAGAQLTcjs.SVGNamespace; exports.UnitlessStyles = _chunk7WAGAQLTcjs.UnitlessStyles; exports.__fictPopContext = _chunk7WAGAQLTcjs.__fictPopContext; exports.__fictProp = _chunk7WAGAQLTcjs.__fictProp; exports.__fictPropsRest = _chunk7WAGAQLTcjs.__fictPropsRest; exports.__fictPushContext = _chunk7WAGAQLTcjs.__fictPushContext; exports.__fictRender = _chunk7WAGAQLTcjs.__fictRender; exports.__fictResetContext = _chunk7WAGAQLTcjs.__fictResetContext; exports.__fictUseContext = _chunk7WAGAQLTcjs.__fictUseContext; exports.__fictUseEffect = _chunk7WAGAQLTcjs.__fictUseEffect; exports.__fictUseMemo = _chunk7WAGAQLTcjs.__fictUseMemo; exports.__fictUseSignal = _chunk7WAGAQLTcjs.__fictUseSignal; exports.addEventListener = _chunk7WAGAQLTcjs.addEventListener; exports.assign = _chunk7WAGAQLTcjs.assign; exports.bindAttribute = _chunk7WAGAQLTcjs.bindAttribute; exports.bindClass = _chunk7WAGAQLTcjs.bindClass; exports.bindEvent = _chunk7WAGAQLTcjs.bindEvent; exports.bindProperty = _chunk7WAGAQLTcjs.bindProperty; exports.bindRef = _chunk7WAGAQLTcjs.bindRef; exports.bindStyle = _chunk7WAGAQLTcjs.bindStyle; exports.bindText = _chunk7WAGAQLTcjs.bindText; exports.callEventHandler = _chunk7WAGAQLTcjs.callEventHandler; exports.classList = _chunk7WAGAQLTcjs.classList; exports.clearDelegatedEvents = _chunk7WAGAQLTcjs.clearDelegatedEvents; exports.createConditional = _chunk7WAGAQLTcjs.createConditional; exports.createEffect = _chunk7WAGAQLTcjs.createEffect; exports.createElement = _chunk7WAGAQLTcjs.createElement; exports.createKeyedList = createKeyedList; exports.createMemo = _chunk7WAGAQLTcjs.createMemo; exports.createPortal = _chunk7WAGAQLTcjs.createPortal; exports.createPropsProxy = _chunk7WAGAQLTcjs.createPropsProxy; exports.createRenderEffect = _chunk7WAGAQLTcjs.createRenderEffect; exports.createSelector = _chunk7WAGAQLTcjs.createSelector; exports.createSignal = _chunk7WAGAQLTcjs.signal; exports.createStore = createStore; exports.delegateEvents = _chunk7WAGAQLTcjs.delegateEvents; exports.getPropAlias = _chunk7WAGAQLTcjs.getPropAlias; exports.insert = _chunk7WAGAQLTcjs.insert; exports.insertNodesBefore = _chunk7WAGAQLTcjs.insertNodesBefore; exports.isNodeBetweenMarkers = isNodeBetweenMarkers; exports.isReactive = _chunk7WAGAQLTcjs.isReactive; exports.mergeProps = _chunk7WAGAQLTcjs.mergeProps; exports.moveNodesBefore = moveNodesBefore; exports.onDestroy = _chunk7WAGAQLTcjs.onDestroy; exports.prop = _chunk7WAGAQLTcjs.prop; exports.reconcileArrays = reconcileArrays; exports.removeNodes = _chunk7WAGAQLTcjs.removeNodes; exports.runInScope = _chunkYQ4IB7NCcjs.runInScope; exports.spread = _chunk7WAGAQLTcjs.spread; exports.template = _chunk7WAGAQLTcjs.template; exports.toNodeArray = _chunk7WAGAQLTcjs.toNodeArray; exports.unwrap = _chunk7WAGAQLTcjs.unwrap;
909
+ exports.Aliases = _chunkJ74L7UYPcjs.Aliases; exports.BooleanAttributes = _chunkJ74L7UYPcjs.BooleanAttributes; exports.ChildProperties = _chunkJ74L7UYPcjs.ChildProperties; exports.DelegatedEvents = _chunkJ74L7UYPcjs.DelegatedEvents; exports.Fragment = _chunkJ74L7UYPcjs.Fragment; exports.Properties = _chunkJ74L7UYPcjs.Properties; exports.SVGElements = _chunkJ74L7UYPcjs.SVGElements; exports.SVGNamespace = _chunkJ74L7UYPcjs.SVGNamespace; exports.UnitlessStyles = _chunkJ74L7UYPcjs.UnitlessStyles; exports.__fictPopContext = _chunkJ74L7UYPcjs.__fictPopContext; exports.__fictProp = _chunkJ74L7UYPcjs.__fictProp; exports.__fictPropsRest = _chunkJ74L7UYPcjs.__fictPropsRest; exports.__fictPushContext = _chunkJ74L7UYPcjs.__fictPushContext; exports.__fictRender = _chunkJ74L7UYPcjs.__fictRender; exports.__fictResetContext = _chunkJ74L7UYPcjs.__fictResetContext; exports.__fictUseContext = _chunkJ74L7UYPcjs.__fictUseContext; exports.__fictUseEffect = _chunkJ74L7UYPcjs.__fictUseEffect; exports.__fictUseMemo = _chunkJ74L7UYPcjs.__fictUseMemo; exports.__fictUseSignal = _chunkJ74L7UYPcjs.__fictUseSignal; exports.addEventListener = _chunkJ74L7UYPcjs.addEventListener; exports.assign = _chunkJ74L7UYPcjs.assign; exports.bindAttribute = _chunkJ74L7UYPcjs.bindAttribute; exports.bindClass = _chunkJ74L7UYPcjs.bindClass; exports.bindEvent = _chunkJ74L7UYPcjs.bindEvent; exports.bindProperty = _chunkJ74L7UYPcjs.bindProperty; exports.bindRef = _chunkJ74L7UYPcjs.bindRef; exports.bindStyle = _chunkJ74L7UYPcjs.bindStyle; exports.bindText = _chunkJ74L7UYPcjs.bindText; exports.callEventHandler = _chunkJ74L7UYPcjs.callEventHandler; exports.classList = _chunkJ74L7UYPcjs.classList; exports.clearDelegatedEvents = _chunkJ74L7UYPcjs.clearDelegatedEvents; exports.createConditional = _chunkJ74L7UYPcjs.createConditional; exports.createEffect = _chunkJ74L7UYPcjs.createEffect; exports.createElement = _chunkJ74L7UYPcjs.createElement; exports.createKeyedList = createKeyedList; exports.createMemo = _chunkJ74L7UYPcjs.createMemo; exports.createPortal = _chunkJ74L7UYPcjs.createPortal; exports.createPropsProxy = _chunkJ74L7UYPcjs.createPropsProxy; exports.createRenderEffect = _chunkJ74L7UYPcjs.createRenderEffect; exports.createSelector = _chunkJ74L7UYPcjs.createSelector; exports.createSignal = _chunkJ74L7UYPcjs.signal; exports.createStore = createStore; exports.delegateEvents = _chunkJ74L7UYPcjs.delegateEvents; exports.getPropAlias = _chunkJ74L7UYPcjs.getPropAlias; exports.insert = _chunkJ74L7UYPcjs.insert; exports.insertNodesBefore = _chunkJ74L7UYPcjs.insertNodesBefore; exports.isNodeBetweenMarkers = isNodeBetweenMarkers; exports.isReactive = _chunkJ74L7UYPcjs.isReactive; exports.mergeProps = _chunkJ74L7UYPcjs.mergeProps; exports.moveNodesBefore = moveNodesBefore; exports.onDestroy = _chunkJ74L7UYPcjs.onDestroy; exports.prop = _chunkJ74L7UYPcjs.prop; exports.reconcileArrays = reconcileArrays; exports.removeNodes = _chunkJ74L7UYPcjs.removeNodes; exports.runInScope = _chunkBSUMPMKXcjs.runInScope; exports.spread = _chunkJ74L7UYPcjs.spread; exports.template = _chunkJ74L7UYPcjs.template; exports.toNodeArray = _chunkJ74L7UYPcjs.toNodeArray; exports.unwrap = _chunkJ74L7UYPcjs.unwrap;
910
910
  //# sourceMappingURL=internal.cjs.map
@@ -1,7 +1,7 @@
1
- import { S as SignalAccessor, C as ComputedAccessor } from './scope-DKYzWfTn.cjs';
2
- export { a as createSelector, s as createSignal, r as runInScope } from './scope-DKYzWfTn.cjs';
3
- export { F as Fragment, _ as __fictProp, f as __fictPropsRest, e as createElement, c as createMemo, g as createPropsProxy, m as mergeProps, a as onDestroy, p as prop, t as template } from './props-BfmSLuyp.cjs';
4
- export { U as AttributeSetter, Q as BindingHandle, T as CreateElementFn, O as MaybeReactive, N as addEventListener, J as assign, t as bindAttribute, w as bindClass, x as bindEvent, z as bindProperty, A as bindRef, v as bindStyle, s as bindText, y as callEventHandler, K as classList, M as clearDelegatedEvents, H as createConditional, h as createEffect, j as createPortal, g as createRenderEffect, L as delegateEvents, G as insert, i as isReactive, I as spread, u as unwrap } from './effect-Auji1rz9.cjs';
1
+ import { S as SignalAccessor, C as ComputedAccessor } from './scope-xmdo6lVU.cjs';
2
+ export { a as createSelector, s as createSignal, r as runInScope } from './scope-xmdo6lVU.cjs';
3
+ export { F as Fragment, _ as __fictProp, f as __fictPropsRest, e as createElement, c as createMemo, g as createPropsProxy, m as mergeProps, a as onDestroy, p as prop, t as template } from './props-CBwuh35e.cjs';
4
+ export { U as AttributeSetter, Q as BindingHandle, T as CreateElementFn, O as MaybeReactive, N as addEventListener, J as assign, t as bindAttribute, w as bindClass, x as bindEvent, z as bindProperty, A as bindRef, v as bindStyle, s as bindText, y as callEventHandler, K as classList, M as clearDelegatedEvents, H as createConditional, h as createEffect, j as createPortal, g as createRenderEffect, L as delegateEvents, G as insert, i as isReactive, I as spread, u as unwrap } from './effect-ClARNUCc.cjs';
5
5
 
6
6
  type Store<T> = T;
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { S as SignalAccessor, C as ComputedAccessor } from './scope-S6eAzBJZ.js';
2
- export { a as createSelector, s as createSignal, r as runInScope } from './scope-S6eAzBJZ.js';
3
- export { F as Fragment, _ as __fictProp, f as __fictPropsRest, e as createElement, c as createMemo, g as createPropsProxy, m as mergeProps, a as onDestroy, p as prop, t as template } from './props-BBi8Tkks.js';
4
- export { U as AttributeSetter, Q as BindingHandle, T as CreateElementFn, O as MaybeReactive, N as addEventListener, J as assign, t as bindAttribute, w as bindClass, x as bindEvent, z as bindProperty, A as bindRef, v as bindStyle, s as bindText, y as callEventHandler, K as classList, M as clearDelegatedEvents, H as createConditional, h as createEffect, j as createPortal, g as createRenderEffect, L as delegateEvents, G as insert, i as isReactive, I as spread, u as unwrap } from './effect-Auji1rz9.js';
1
+ import { S as SignalAccessor, C as ComputedAccessor } from './scope-DvgMquEy.js';
2
+ export { a as createSelector, s as createSignal, r as runInScope } from './scope-DvgMquEy.js';
3
+ export { F as Fragment, _ as __fictProp, f as __fictPropsRest, e as createElement, c as createMemo, g as createPropsProxy, m as mergeProps, a as onDestroy, p as prop, t as template } from './props-DAyeRPwH.js';
4
+ export { U as AttributeSetter, Q as BindingHandle, T as CreateElementFn, O as MaybeReactive, N as addEventListener, J as assign, t as bindAttribute, w as bindClass, x as bindEvent, z as bindProperty, A as bindRef, v as bindStyle, s as bindText, y as callEventHandler, K as classList, M as clearDelegatedEvents, H as createConditional, h as createEffect, j as createPortal, g as createRenderEffect, L as delegateEvents, G as insert, i as isReactive, I as spread, u as unwrap } from './effect-ClARNUCc.js';
5
5
 
6
6
  type Store<T> = T;
7
7
  /**
package/dist/internal.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runInScope
3
- } from "./chunk-CF3OHML2.js";
3
+ } from "./chunk-QV5GOCR5.js";
4
4
  import {
5
5
  Aliases,
6
6
  BooleanAttributes,
@@ -66,7 +66,7 @@ import {
66
66
  template,
67
67
  toNodeArray,
68
68
  unwrap
69
- } from "./chunk-BWZFJXUI.js";
69
+ } from "./chunk-5KXEEQUO.js";
70
70
 
71
71
  // src/store.ts
72
72
  var PROXY = Symbol("fict:store-proxy");