@fictjs/runtime 0.0.3 → 0.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/devtools.ts","../src/cycle-guard.ts","../src/lifecycle.ts","../src/signal.ts","../src/store.ts","../src/memo.ts","../src/effect.ts","../src/hooks.ts","../src/versioned-signal.ts","../src/props.ts","../src/ref.ts","../src/transition.ts","../src/scheduler.ts","../src/jsx.ts","../src/constants.ts","../src/node-ops.ts","../src/binding.ts","../src/dom.ts","../src/error-boundary.ts","../src/suspense.ts","../src/reconcile.ts","../src/list-helpers.ts"],"names":["link","effect","value","ctx","options","batch","untrack","unwrap","currentRoot","wrapped","applyRef","cleanup","render","toPropertyName","el","track","existingBlock"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface FictDevtoolsHook {\n registerSignal: (id: number, value: unknown) => void\n updateSignal: (id: number, value: unknown) => void\n registerEffect: (id: number) => void\n effectRun: (id: number) => void\n cycleDetected?: (payload: { reason: string; detail?: Record<string, unknown> }) => void\n}\n\nfunction getGlobalHook(): FictDevtoolsHook | undefined {\n if (typeof globalThis === 'undefined') return undefined\n return (globalThis as typeof globalThis & { __FICT_DEVTOOLS_HOOK__?: FictDevtoolsHook })\n .__FICT_DEVTOOLS_HOOK__\n}\n\nexport function getDevtoolsHook(): FictDevtoolsHook | undefined {\n return getGlobalHook()\n}\n","import { getDevtoolsHook } from './devtools'\n\nexport interface CycleProtectionOptions {\n maxFlushCyclesPerMicrotask?: number\n maxEffectRunsPerFlush?: number\n windowSize?: number\n highUsageRatio?: number\n maxRootReentrantDepth?: number\n enableWindowWarning?: boolean\n devMode?: boolean\n}\n\ninterface CycleWindowEntry {\n used: number\n budget: number\n}\n\nconst defaultOptions = {\n maxFlushCyclesPerMicrotask: 10_000,\n maxEffectRunsPerFlush: 20_000,\n windowSize: 5,\n highUsageRatio: 0.8,\n maxRootReentrantDepth: 10,\n enableWindowWarning: true,\n devMode: false,\n}\n\nlet options: Required<CycleProtectionOptions> = {\n ...defaultOptions,\n} as Required<CycleProtectionOptions>\n\nlet effectRunsThisFlush = 0\nlet windowUsage: CycleWindowEntry[] = []\nlet rootDepth = new WeakMap<object, number>()\nlet flushWarned = false\nlet rootWarned = false\nlet windowWarned = false\n\nexport function setCycleProtectionOptions(opts: CycleProtectionOptions): void {\n options = { ...options, ...opts }\n}\n\nexport function resetCycleProtectionStateForTests(): void {\n options = { ...defaultOptions } as Required<CycleProtectionOptions>\n effectRunsThisFlush = 0\n windowUsage = []\n rootDepth = new WeakMap<object, number>()\n flushWarned = false\n rootWarned = false\n windowWarned = false\n}\n\nexport function beginFlushGuard(): void {\n effectRunsThisFlush = 0\n flushWarned = false\n windowWarned = false\n}\n\nexport function beforeEffectRunGuard(): boolean {\n const next = ++effectRunsThisFlush\n if (next > options.maxFlushCyclesPerMicrotask || next > options.maxEffectRunsPerFlush) {\n const message = `[fict] cycle protection triggered: flush-budget-exceeded`\n if (options.devMode) {\n throw new Error(message)\n }\n if (!flushWarned) {\n flushWarned = true\n console.warn(message, { effectRuns: next })\n }\n return false\n }\n return true\n}\n\nexport function endFlushGuard(): void {\n recordWindowUsage(effectRunsThisFlush, options.maxFlushCyclesPerMicrotask)\n effectRunsThisFlush = 0\n}\n\nexport function enterRootGuard(root: object): boolean {\n const depth = (rootDepth.get(root) ?? 0) + 1\n if (depth > options.maxRootReentrantDepth) {\n const message = `[fict] cycle protection triggered: root-reentry`\n if (options.devMode) {\n throw new Error(message)\n }\n if (!rootWarned) {\n rootWarned = true\n console.warn(message, { depth })\n }\n return false\n }\n rootDepth.set(root, depth)\n return true\n}\n\nexport function exitRootGuard(root: object): void {\n const depth = rootDepth.get(root)\n if (depth === undefined) return\n if (depth <= 1) {\n rootDepth.delete(root)\n } else {\n rootDepth.set(root, depth - 1)\n }\n}\n\nfunction recordWindowUsage(used: number, budget: number): void {\n if (!options.enableWindowWarning) return\n const entry = { used, budget }\n windowUsage.push(entry)\n if (windowUsage.length > options.windowSize) {\n windowUsage.shift()\n }\n if (windowWarned) return\n if (\n windowUsage.length >= options.windowSize &&\n windowUsage.every(item => item.budget > 0 && item.used / item.budget >= options.highUsageRatio)\n ) {\n windowWarned = true\n reportCycle('high-usage-window', {\n windowSize: options.windowSize,\n ratio: options.highUsageRatio,\n })\n }\n}\n\nfunction reportCycle(\n reason: string,\n detail: Record<string, unknown> | undefined = undefined,\n): void {\n const hook = getDevtoolsHook()\n hook?.cycleDetected?.(detail ? { reason, detail } : { reason })\n console.warn(`[fict] cycle protection triggered: ${reason}`, detail ?? '')\n}\n","import { enterRootGuard, exitRootGuard } from './cycle-guard'\nimport type { Cleanup, ErrorInfo, SuspenseToken } from './types'\n\ntype LifecycleFn = () => void | Cleanup\n\nexport interface RootContext {\n parent?: RootContext | undefined\n onMountCallbacks?: LifecycleFn[]\n cleanups: Cleanup[]\n destroyCallbacks: Cleanup[]\n errorHandlers?: ErrorHandler[]\n suspenseHandlers?: SuspenseHandler[]\n}\n\ntype ErrorHandler = (err: unknown, info?: ErrorInfo) => boolean | void\ntype SuspenseHandler = (token: SuspenseToken | PromiseLike<unknown>) => boolean | void\n\nlet currentRoot: RootContext | undefined\nlet currentEffectCleanups: Cleanup[] | undefined\nconst globalErrorHandlers = new WeakMap<RootContext, ErrorHandler[]>()\nconst globalSuspenseHandlers = new WeakMap<RootContext, SuspenseHandler[]>()\n\nexport function createRootContext(parent: RootContext | undefined = currentRoot): RootContext {\n return { parent, cleanups: [], destroyCallbacks: [] }\n}\n\nexport function pushRoot(root: RootContext): RootContext | undefined {\n if (!enterRootGuard(root)) {\n return currentRoot\n }\n const prev = currentRoot\n currentRoot = root\n return prev\n}\n\nexport function getCurrentRoot(): RootContext | undefined {\n return currentRoot\n}\n\nexport function popRoot(prev: RootContext | undefined): void {\n if (currentRoot) {\n exitRootGuard(currentRoot)\n }\n currentRoot = prev\n}\n\nexport function onMount(fn: LifecycleFn): void {\n if (currentRoot) {\n ;(currentRoot.onMountCallbacks ||= []).push(fn)\n return\n }\n runLifecycle(fn)\n}\n\nexport function onDestroy(fn: LifecycleFn): void {\n if (currentRoot) {\n currentRoot.destroyCallbacks.push(() => runLifecycle(fn))\n return\n }\n runLifecycle(fn)\n}\n\nexport function onCleanup(fn: Cleanup): void {\n registerEffectCleanup(fn)\n}\n\nexport function flushOnMount(root: RootContext): void {\n const cbs = root.onMountCallbacks\n if (!cbs || cbs.length === 0) return\n for (let i = 0; i < cbs.length; i++) {\n const cleanup = cbs[i]!()\n if (typeof cleanup === 'function') {\n root.cleanups.push(cleanup)\n }\n }\n cbs.length = 0\n}\n\nexport function registerRootCleanup(fn: Cleanup): void {\n if (currentRoot) {\n currentRoot.cleanups.push(fn)\n }\n}\n\nexport function clearRoot(root: RootContext): void {\n runCleanupList(root.cleanups)\n if (root.onMountCallbacks) {\n root.onMountCallbacks.length = 0\n }\n}\n\nexport function destroyRoot(root: RootContext): void {\n clearRoot(root)\n runCleanupList(root.destroyCallbacks)\n if (root.errorHandlers) {\n root.errorHandlers.length = 0\n }\n if (globalErrorHandlers.has(root)) {\n globalErrorHandlers.delete(root)\n }\n if (root.suspenseHandlers) {\n root.suspenseHandlers.length = 0\n }\n if (globalSuspenseHandlers.has(root)) {\n globalSuspenseHandlers.delete(root)\n }\n}\n\nexport function createRoot<T>(fn: () => T): { dispose: () => void; value: T } {\n const root = createRootContext()\n const prev = pushRoot(root)\n let value: T\n try {\n value = fn()\n } finally {\n popRoot(prev)\n }\n flushOnMount(root)\n return {\n dispose: () => destroyRoot(root),\n value,\n }\n}\n\nexport function withEffectCleanups<T>(bucket: Cleanup[], fn: () => T): T {\n const prev = currentEffectCleanups\n currentEffectCleanups = bucket\n try {\n return fn()\n } finally {\n currentEffectCleanups = prev\n }\n}\n\nexport function registerEffectCleanup(fn: Cleanup): void {\n if (currentEffectCleanups) {\n currentEffectCleanups.push(fn)\n } else {\n registerRootCleanup(fn)\n }\n}\n\nexport function runCleanupList(list: Cleanup[]): void {\n let error: unknown\n for (let i = list.length - 1; i >= 0; i--) {\n try {\n const cleanup = list[i]\n if (cleanup) cleanup()\n } catch (err) {\n if (error === undefined) {\n error = err\n }\n }\n }\n list.length = 0\n if (error !== undefined) {\n if (!handleError(error, { source: 'cleanup' })) {\n throw error\n }\n }\n}\n\nfunction runLifecycle(fn: LifecycleFn): void {\n const cleanup = fn()\n if (typeof cleanup === 'function') {\n cleanup()\n }\n}\n\nexport function registerErrorHandler(fn: ErrorHandler): void {\n if (!currentRoot) {\n throw new Error('registerErrorHandler must be called within a root')\n }\n if (!currentRoot.errorHandlers) {\n currentRoot.errorHandlers = []\n }\n currentRoot.errorHandlers.push(fn)\n const existing = globalErrorHandlers.get(currentRoot)\n if (existing) {\n existing.push(fn)\n } else {\n globalErrorHandlers.set(currentRoot, [fn])\n }\n}\n\nexport function registerSuspenseHandler(fn: SuspenseHandler): void {\n if (!currentRoot) {\n throw new Error('registerSuspenseHandler must be called within a root')\n }\n if (!currentRoot.suspenseHandlers) {\n currentRoot.suspenseHandlers = []\n }\n currentRoot.suspenseHandlers.push(fn)\n const existing = globalSuspenseHandlers.get(currentRoot)\n if (existing) {\n existing.push(fn)\n } else {\n globalSuspenseHandlers.set(currentRoot, [fn])\n }\n}\n\nexport function handleError(err: unknown, info?: ErrorInfo, startRoot?: RootContext): boolean {\n let root: RootContext | undefined = startRoot ?? currentRoot\n let error = err\n while (root) {\n const handlers = root.errorHandlers\n if (handlers && handlers.length) {\n for (let i = handlers.length - 1; i >= 0; i--) {\n const handler = handlers[i]!\n try {\n const handled = handler(error, info)\n if (handled !== false) {\n return true\n }\n } catch (nextErr) {\n error = nextErr\n }\n }\n }\n root = root.parent\n }\n const globalForRoot = startRoot\n ? globalErrorHandlers.get(startRoot)\n : currentRoot\n ? globalErrorHandlers.get(currentRoot)\n : undefined\n if (globalForRoot && globalForRoot.length) {\n for (let i = globalForRoot.length - 1; i >= 0; i--) {\n const handler = globalForRoot[i]!\n try {\n const handled = handler(error, info)\n if (handled !== false) {\n return true\n }\n } catch (nextErr) {\n error = nextErr\n }\n }\n }\n throw error\n}\n\nexport function handleSuspend(\n token: SuspenseToken | PromiseLike<unknown>,\n startRoot?: RootContext,\n): boolean {\n let root: RootContext | undefined = startRoot ?? currentRoot\n while (root) {\n const handlers = root.suspenseHandlers\n if (handlers && handlers.length) {\n for (let i = handlers.length - 1; i >= 0; i--) {\n const handler = handlers[i]!\n const handled = handler(token)\n if (handled !== false) return true\n }\n }\n root = root.parent\n }\n const globalForRoot =\n startRoot && globalSuspenseHandlers.get(startRoot)\n ? globalSuspenseHandlers.get(startRoot)\n : currentRoot\n ? globalSuspenseHandlers.get(currentRoot)\n : undefined\n if (globalForRoot && globalForRoot.length) {\n for (let i = globalForRoot.length - 1; i >= 0; i--) {\n const handler = globalForRoot[i]!\n const handled = handler(token)\n if (handled !== false) return true\n }\n }\n return false\n}\n","import { beginFlushGuard, beforeEffectRunGuard, endFlushGuard } from './cycle-guard'\nimport { getDevtoolsHook } from './devtools'\nimport { registerRootCleanup } from './lifecycle'\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\n/**\n * Reactive node that can be either a signal, computed, effect, or effect scope\n */\nexport type ReactiveNode =\n | SignalNode<unknown>\n | ComputedNode<unknown>\n | EffectNode\n | EffectScopeNode\n | SubscriberNode\n\n/**\n * Link between a dependency and a subscriber in the reactive graph\n */\nexport interface Link {\n /** Version/cycle when this link was created */\n version: number\n /** The dependency being tracked */\n dep: ReactiveNode\n /** The subscriber tracking this dependency */\n sub: ReactiveNode\n /** Previous dependency link in the subscriber's dependency list */\n prevDep: Link | undefined\n /** Next dependency link in the subscriber's dependency list */\n nextDep: Link | undefined\n /** Previous subscriber link in the dependency's subscriber list */\n prevSub: Link | undefined\n /** Next subscriber link in the dependency's subscriber list */\n nextSub: Link | undefined\n}\n\n/**\n * Stack frame for traversing the reactive graph\n */\nexport interface StackFrame {\n /** The link value at this stack level */\n value: Link | undefined\n /** Previous stack frame */\n prev: StackFrame | undefined\n}\n\n/**\n * Base interface for all reactive nodes\n */\nexport interface BaseNode {\n /** First subscriber link */\n subs: Link | undefined\n /** Last subscriber link */\n subsTail: Link | undefined\n /** Reactive flags (Mutable, Watching, Running, etc.) */\n flags: number\n}\n\n/**\n * Signal node - mutable reactive value\n */\nexport interface SignalNode<T = unknown> extends BaseNode {\n /** Current committed value */\n currentValue: T\n /** Pending value to be committed */\n pendingValue: T\n /** Signals don't have dependencies */\n deps?: undefined\n depsTail?: undefined\n getter?: undefined\n}\n\n/**\n * Computed node - derived reactive value\n */\nexport interface ComputedNode<T = unknown> extends BaseNode {\n /** Current computed value */\n value: T\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n /** Getter function to compute the value */\n getter: (oldValue: T | undefined) => T\n}\n\n/**\n * Effect node - side effect that runs when dependencies change\n */\nexport interface EffectNode extends BaseNode {\n /** Effect function to execute */\n fn: () => void\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n}\n\n/**\n * Effect scope node - manages multiple effects\n */\nexport interface EffectScopeNode extends BaseNode {\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n}\n\n/**\n * Subscriber node used in trigger\n */\nexport interface SubscriberNode {\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n /** Reactive flags */\n flags: number\n subs?: undefined\n subsTail?: undefined\n}\n\n/**\n * Signal accessor - function to get/set signal value\n */\nexport interface SignalAccessor<T> {\n (): T\n (value: T): void\n}\n\n/**\n * Computed accessor - function to get computed value\n */\nexport type ComputedAccessor<T> = () => T\n\n/**\n * Effect disposer - function to dispose an effect\n */\nexport type EffectDisposer = () => void\n\n/**\n * Effect scope disposer - function to dispose an effect scope\n */\nexport type EffectScopeDisposer = () => void\n\n/**\n * Options for creating a custom reactive system\n */\nexport interface ReactiveSystemOptions {\n /** Update function for reactive nodes */\n update: (node: ReactiveNode) => boolean\n /** Notify function when a subscriber needs to be notified */\n notify: (sub: ReactiveNode) => void\n /** Callback when a dependency becomes unwatched */\n unwatched: (dep: ReactiveNode) => void\n}\n\n/**\n * Custom reactive system methods\n */\nexport interface ReactiveSystem {\n /** Link a dependency to a subscriber */\n link: typeof link\n /** Unlink a dependency from a subscriber */\n unlink: (lnk: Link, sub?: ReactiveNode) => Link | undefined\n /** Propagate changes through the reactive graph */\n propagate: (firstLink: Link) => void\n /** Check if a node is dirty */\n checkDirty: (firstLink: Link, sub: ReactiveNode) => boolean\n /** Shallow propagate changes */\n shallowPropagate: (firstLink: Link) => void\n}\n\n// ============================================================================\n// Flags\n// ============================================================================\nconst Mutable = 1\nconst Watching = 2\nconst Running = 4\nconst Recursed = 8\nconst Dirty = 16\nconst Pending = 32\n// Pre-computed combinations\nconst MutableDirty = 17\nconst MutablePending = 33\nconst MutableRunning = 5\nconst WatchingRunning = 6\n// Global state\nlet cycle = 0\nlet batchDepth = 0\nlet activeSub: ReactiveNode | undefined\nlet flushScheduled = false\n// Dual-priority queue for scheduler\nconst highPriorityQueue: EffectNode[] = []\nconst lowPriorityQueue: EffectNode[] = []\nlet isInTransition = false\nconst enqueueMicrotask =\n typeof queueMicrotask === 'function'\n ? queueMicrotask\n : (fn: () => void) => {\n Promise.resolve().then(fn)\n }\nexport const ReactiveFlags = {\n None: 0,\n Mutable,\n Watching,\n RecursedCheck: Running,\n Recursed,\n Dirty,\n Pending,\n}\n// ============================================================================\n// createReactiveSystem - Support for custom systems\n// ============================================================================\n/**\n * Create a custom reactive system with custom update, notify, and unwatched handlers\n * @param options - Reactive system options\n * @returns Custom reactive system methods\n */\nexport function createReactiveSystem({\n update,\n notify: notifyFn,\n unwatched: unwatchedFn,\n}: ReactiveSystemOptions): ReactiveSystem {\n function customPropagate(firstLink: Link): void {\n let link = firstLink\n let next = link.nextSub\n let stack: StackFrame | undefined\n\n top: for (;;) {\n const sub = link.sub\n let flags = sub.flags\n\n if (!(flags & 60)) {\n sub.flags = flags | Pending\n } else if (!(flags & 12)) {\n flags = 0\n } else if (!(flags & Running)) {\n sub.flags = (flags & ~Recursed) | Pending\n } else if (!(flags & 48)) {\n let vlink = sub.depsTail\n let valid = false\n while (vlink !== undefined) {\n if (vlink === link) {\n valid = true\n break\n }\n vlink = vlink.prevDep\n }\n if (valid) {\n sub.flags = flags | 40\n flags &= Mutable\n } else {\n flags = 0\n }\n } else {\n flags = 0\n }\n\n if (flags & Watching) notifyFn(sub)\n\n if (flags & Mutable) {\n const subSubs = sub.subs\n if (subSubs !== undefined) {\n const nextSub = subSubs.nextSub\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack }\n next = nextSub\n }\n link = subSubs\n continue\n }\n }\n\n if (next !== undefined) {\n link = next\n next = link.nextSub\n continue\n }\n\n while (stack !== undefined) {\n link = stack.value!\n stack = stack.prev\n if (link !== undefined) {\n next = link.nextSub\n continue top\n }\n }\n break\n }\n }\n function customCheckDirty(firstLink: Link, sub: ReactiveNode): boolean {\n let link = firstLink\n let stack: StackFrame | undefined\n let checkDepth = 0\n let dirty = false\n\n top: for (;;) {\n const dep = link.dep\n const depFlags = dep.flags\n\n if (sub.flags & Dirty) {\n dirty = true\n } else if ((depFlags & MutableDirty) === MutableDirty) {\n if (update(dep)) {\n const subs = dep.subs\n if (subs !== undefined && subs.nextSub !== undefined) {\n customShallowPropagate(subs)\n }\n dirty = true\n }\n } else if ((depFlags & MutablePending) === MutablePending) {\n if (link.nextSub !== undefined || link.prevSub !== undefined) {\n stack = { value: link, prev: stack }\n }\n link = dep.deps!\n sub = dep\n ++checkDepth\n continue\n }\n\n if (!dirty) {\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue\n }\n }\n\n while (checkDepth-- > 0) {\n const firstSub = sub.subs!\n const hasMultipleSubs = firstSub.nextSub !== undefined\n\n if (hasMultipleSubs) {\n link = stack!.value!\n stack = stack!.prev\n } else link = firstSub\n\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) customShallowPropagate(firstSub)\n sub = link.sub\n continue\n }\n dirty = false\n } else {\n sub.flags &= ~Pending\n }\n\n sub = link.sub\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue top\n }\n }\n\n return dirty\n }\n }\n function customShallowPropagate(firstLink: Link): void {\n let link: Link | undefined = firstLink\n do {\n const sub = link.sub\n const flags = sub.flags\n if ((flags & 48) === Pending) {\n sub.flags = flags | Dirty\n if ((flags & 6) === Watching) notifyFn(sub)\n }\n link = link.nextSub\n } while (link !== undefined)\n }\n function customUnlink(lnk: Link, sub: ReactiveNode = lnk.sub): Link | undefined {\n const dep = lnk.dep\n const prevDep = lnk.prevDep\n const nextDep = lnk.nextDep\n const nextSub = lnk.nextSub\n const prevSub = lnk.prevSub\n\n if (nextDep !== undefined) nextDep.prevDep = prevDep\n else sub.depsTail = prevDep\n if (prevDep !== undefined) prevDep.nextDep = nextDep\n else sub.deps = nextDep\n\n if (nextSub !== undefined) nextSub.prevSub = prevSub\n else dep.subsTail = prevSub\n if (prevSub !== undefined) prevSub.nextSub = nextSub\n else if ((dep.subs = nextSub) === undefined) unwatchedFn(dep)\n\n return nextDep\n }\n return {\n link,\n unlink: customUnlink,\n propagate: customPropagate,\n checkDirty: customCheckDirty,\n shallowPropagate: customShallowPropagate,\n }\n}\n// ============================================================================\n// Core functions\n// ============================================================================\n/**\n * Create a link between a dependency and a subscriber\n * @param dep - The dependency node\n * @param sub - The subscriber node\n * @param version - The cycle version\n */\nfunction link(dep: ReactiveNode, sub: ReactiveNode, version: number): void {\n const prevDep = sub.depsTail\n if (prevDep !== undefined && prevDep.dep === dep) return\n\n const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps\n if (nextDep !== undefined && nextDep.dep === dep) {\n nextDep.version = version\n sub.depsTail = nextDep\n return\n }\n\n const prevSub = dep.subsTail\n if (prevSub !== undefined && prevSub.version === version && prevSub.sub === sub) return\n\n const newLink = { version, dep, sub, prevDep, nextDep, prevSub, nextSub: undefined }\n sub.depsTail = newLink\n dep.subsTail = newLink\n\n if (nextDep !== undefined) nextDep.prevDep = newLink\n if (prevDep !== undefined) prevDep.nextDep = newLink\n else sub.deps = newLink\n if (prevSub !== undefined) prevSub.nextSub = newLink\n else dep.subs = newLink\n}\n/**\n * Remove a link between a dependency and a subscriber\n * @param lnk - The link to remove\n * @param sub - The subscriber node (defaults to lnk.sub)\n * @returns The next dependency link\n */\nfunction unlink(lnk: Link, sub: ReactiveNode = lnk.sub): Link | undefined {\n const dep = lnk.dep\n const prevDep = lnk.prevDep\n const nextDep = lnk.nextDep\n const nextSub = lnk.nextSub\n const prevSub = lnk.prevSub\n\n if (nextDep !== undefined) nextDep.prevDep = prevDep\n else sub.depsTail = prevDep\n if (prevDep !== undefined) prevDep.nextDep = nextDep\n else sub.deps = nextDep\n\n if (nextSub !== undefined) nextSub.prevSub = prevSub\n else dep.subsTail = prevSub\n if (prevSub !== undefined) prevSub.nextSub = nextSub\n else if ((dep.subs = nextSub) === undefined) unwatched(dep)\n\n return nextDep\n}\n/**\n * Handle when a dependency becomes unwatched\n * @param dep - The dependency node\n */\nfunction unwatched(dep: ReactiveNode): void {\n if (!(dep.flags & Mutable)) {\n disposeNode(dep)\n } else if ('getter' in dep && dep.getter !== undefined) {\n dep.depsTail = undefined\n dep.flags = MutableDirty\n purgeDeps(dep)\n }\n}\n/**\n * Propagate changes through the reactive graph\n * @param firstLink - The first link to propagate from\n */\nfunction propagate(firstLink: Link): void {\n let link = firstLink\n let next = link.nextSub\n let stack: StackFrame | undefined\n\n top: for (;;) {\n const sub = link.sub\n let flags = sub.flags\n\n if (!(flags & 60)) {\n sub.flags = flags | Pending\n } else if (!(flags & 12)) {\n flags = 0\n } else if (!(flags & Running)) {\n sub.flags = (flags & ~Recursed) | Pending\n } else if (!(flags & 48)) {\n let vlink = sub.depsTail\n let valid = false\n while (vlink !== undefined) {\n if (vlink === link) {\n valid = true\n break\n }\n vlink = vlink.prevDep\n }\n if (valid) {\n sub.flags = flags | 40\n flags &= Mutable\n } else {\n flags = 0\n }\n } else {\n flags = 0\n }\n\n if (flags & Watching) notify(sub)\n\n if (flags & Mutable) {\n const subSubs = sub.subs\n if (subSubs !== undefined) {\n const nextSub = subSubs.nextSub\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack }\n next = nextSub\n }\n link = subSubs\n continue\n }\n }\n\n if (next !== undefined) {\n link = next\n next = link.nextSub\n continue\n }\n\n while (stack !== undefined) {\n link = stack.value!\n stack = stack.prev\n if (link !== undefined) {\n next = link.nextSub\n continue top\n }\n }\n break\n }\n}\n/**\n * Check if a node is dirty by traversing its dependencies\n * @param firstLink - The first link to check\n * @param sub - The subscriber node\n * @returns True if the node is dirty\n */\nfunction checkDirty(firstLink: Link, sub: ReactiveNode): boolean {\n let link = firstLink\n let stack: StackFrame | undefined\n let checkDepth = 0\n let dirty = false\n\n top: for (;;) {\n const dep = link.dep\n const depFlags = dep.flags\n\n if (sub.flags & Dirty) {\n dirty = true\n } else if ((depFlags & MutableDirty) === MutableDirty) {\n if (update(dep)) {\n const subs = dep.subs\n if (subs !== undefined && subs.nextSub !== undefined) shallowPropagate(subs)\n dirty = true\n }\n } else if ((depFlags & MutablePending) === MutablePending) {\n if (link.nextSub !== undefined || link.prevSub !== undefined) {\n stack = { value: link, prev: stack }\n }\n link = dep.deps!\n sub = dep\n ++checkDepth\n continue\n }\n\n if (!dirty) {\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue\n }\n }\n\n while (checkDepth-- > 0) {\n const firstSub = sub.subs!\n const hasMultipleSubs = firstSub.nextSub !== undefined\n\n if (hasMultipleSubs) {\n link = stack!.value!\n stack = stack!.prev\n } else {\n link = firstSub\n }\n\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) shallowPropagate(firstSub)\n sub = link.sub\n continue\n }\n dirty = false\n } else {\n sub.flags &= ~Pending\n }\n\n sub = link.sub\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue top\n }\n }\n\n return dirty\n }\n}\n/**\n * Shallow propagate changes without traversing deeply\n * @param firstLink - The first link to propagate from\n */\nfunction shallowPropagate(firstLink: Link): void {\n let link: Link | undefined = firstLink\n do {\n const sub = link.sub\n const flags = sub.flags\n if ((flags & 48) === Pending) {\n sub.flags = flags | Dirty\n if ((flags & 6) === Watching) notify(sub)\n }\n link = link.nextSub\n } while (link !== undefined)\n}\n/**\n * Update a reactive node (signal or computed)\n * @param node - The node to update\n * @returns True if the value changed\n */\nfunction update(node: ReactiveNode): boolean {\n return 'getter' in node && node.getter !== undefined\n ? updateComputed(node as ComputedNode)\n : updateSignal(node as SignalNode)\n}\n/**\n * Notify an effect and add it to the queue\n * @param effect - The effect to notify\n */\nfunction notify(effect: ReactiveNode): void {\n effect.flags &= ~Watching\n const effects: EffectNode[] = []\n\n for (;;) {\n effects.push(effect as EffectNode)\n const nextLink = effect.subs\n if (nextLink === undefined) break\n effect = nextLink.sub\n if (effect === undefined || !(effect.flags & Watching)) break\n effect.flags &= ~Watching\n }\n\n // Route effects to appropriate queue based on transition context\n const targetQueue = isInTransition ? lowPriorityQueue : highPriorityQueue\n for (let i = effects.length - 1; i >= 0; i--) {\n targetQueue.push(effects[i]!)\n }\n}\n/**\n * Purge all dependencies from a subscriber\n * @param sub - The subscriber node\n */\nfunction purgeDeps(sub: ReactiveNode): void {\n const depsTail = sub.depsTail\n let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps\n while (dep !== undefined) dep = unlink(dep, sub)\n}\n/**\n * Dispose a reactive node\n * @param node - The node to dispose\n */\nfunction disposeNode(node: ReactiveNode): void {\n node.depsTail = undefined\n node.flags = 0\n purgeDeps(node)\n const sub = node.subs\n if (sub !== undefined) unlink(sub, node)\n}\n/**\n * Update a signal node\n * @param s - The signal node\n * @returns True if the value changed\n */\nfunction updateSignal(s: SignalNode): boolean {\n s.flags = Mutable\n const current = s.currentValue\n const pending = s.pendingValue\n if (current !== pending) {\n s.currentValue = pending\n return true\n }\n return false\n}\n/**\n * Update a computed node\n * @param c - The computed node\n * @returns True if the value changed\n */\nfunction updateComputed<T>(c: ComputedNode<T>): boolean {\n ++cycle\n const oldValue = c.value\n c.depsTail = undefined\n c.flags = MutableRunning\n const prevSub = activeSub\n activeSub = c\n\n try {\n const newValue = c.getter(oldValue)\n activeSub = prevSub\n c.flags &= ~Running\n purgeDeps(c)\n if (oldValue !== newValue) {\n c.value = newValue\n return true\n }\n return false\n } catch (e) {\n activeSub = prevSub\n c.flags &= ~Running\n throw e\n }\n}\n/**\n * Run an effect\n * @param e - The effect node\n */\nfunction runEffect(e: EffectNode): void {\n const flags = e.flags\n if (flags & Dirty || (flags & Pending && e.deps && checkDirty(e.deps, e))) {\n ++cycle\n effectRunDevtools(e)\n e.depsTail = undefined\n e.flags = WatchingRunning\n const prevSub = activeSub\n activeSub = e\n try {\n e.fn()\n activeSub = prevSub\n e.flags = Watching\n purgeDeps(e)\n } catch (err) {\n activeSub = prevSub\n e.flags = Watching\n throw err\n }\n } else {\n e.flags = Watching\n }\n}\n/**\n * Schedule a flush in a microtask to coalesce synchronous writes\n */\nexport function scheduleFlush(): void {\n const hasWork = highPriorityQueue.length > 0 || lowPriorityQueue.length > 0\n if (flushScheduled || !hasWork) return\n if (batchDepth > 0) return\n flushScheduled = true\n enqueueMicrotask(() => {\n flush()\n })\n}\n/**\n * Flush all queued effects with priority-based scheduling\n * High priority effects execute first; low priority can be interrupted\n */\nfunction flush(): void {\n beginFlushGuard()\n if (batchDepth > 0) {\n // If batching is active, defer until the batch completes\n scheduleFlush()\n endFlushGuard()\n return\n }\n const hasWork = highPriorityQueue.length > 0 || lowPriorityQueue.length > 0\n if (!hasWork) {\n flushScheduled = false\n endFlushGuard()\n return\n }\n flushScheduled = false\n\n // 1. Process all high-priority effects first\n let highIndex = 0\n while (highIndex < highPriorityQueue.length) {\n const e = highPriorityQueue[highIndex]!\n if (!beforeEffectRunGuard()) {\n if (highIndex > 0) {\n highPriorityQueue.copyWithin(0, highIndex)\n highPriorityQueue.length -= highIndex\n }\n endFlushGuard()\n return\n }\n highIndex++\n runEffect(e)\n }\n highPriorityQueue.length = 0\n\n // 2. Process low-priority effects, interruptible by high priority\n let lowIndex = 0\n while (lowIndex < lowPriorityQueue.length) {\n // Check if high priority work arrived during low priority execution\n if (highPriorityQueue.length > 0) {\n if (lowIndex > 0) {\n lowPriorityQueue.copyWithin(0, lowIndex)\n lowPriorityQueue.length -= lowIndex\n }\n scheduleFlush()\n endFlushGuard()\n return\n }\n const e = lowPriorityQueue[lowIndex]!\n if (!beforeEffectRunGuard()) {\n if (lowIndex > 0) {\n lowPriorityQueue.copyWithin(0, lowIndex)\n lowPriorityQueue.length -= lowIndex\n }\n endFlushGuard()\n return\n }\n lowIndex++\n runEffect(e)\n }\n lowPriorityQueue.length = 0\n\n endFlushGuard()\n}\n// ============================================================================\n// Signal - Inline optimized version\n// ============================================================================\n/**\n * Create a reactive signal\n * @param initialValue - The initial value\n * @returns A signal accessor function\n */\nexport function signal<T>(initialValue: T): SignalAccessor<T> {\n const s = {\n currentValue: initialValue,\n pendingValue: initialValue,\n subs: undefined,\n subsTail: undefined,\n flags: Mutable,\n __id: undefined as number | undefined,\n }\n registerSignalDevtools(initialValue, s)\n return signalOper.bind(s) as SignalAccessor<T>\n}\nfunction signalOper<T>(this: SignalNode<T>, value?: T): T | void {\n if (arguments.length > 0) {\n if (this.pendingValue !== value) {\n this.pendingValue = value as T\n this.flags = MutableDirty\n updateSignalDevtools(this, value)\n const subs = this.subs\n if (subs !== undefined) {\n propagate(subs)\n if (!batchDepth) scheduleFlush()\n }\n }\n return\n }\n\n const flags = this.flags\n if (flags & Dirty) {\n if (updateSignal(this)) {\n const subs = this.subs\n if (subs !== undefined) shallowPropagate(subs)\n }\n }\n\n let sub = activeSub\n while (sub !== undefined) {\n if (sub.flags & 3) {\n link(this, sub, cycle)\n break\n }\n const subSubs = sub.subs\n sub = subSubs !== undefined ? subSubs.sub : undefined\n }\n\n return this.currentValue\n}\n// ============================================================================\n// Computed\n// ============================================================================\n/**\n * Create a computed reactive value\n * @param getter - The getter function\n * @returns A computed accessor function\n */\nexport function computed<T>(getter: (oldValue?: T) => T): ComputedAccessor<T> {\n const c: ComputedNode<T> = {\n value: undefined as unknown as T,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 0,\n getter,\n }\n const bound = (computedOper as (this: ComputedNode<T>) => T).bind(c)\n return bound as ComputedAccessor<T>\n}\nfunction computedOper<T>(this: ComputedNode<T>): T {\n const flags = this.flags\n\n if (flags & Dirty) {\n if (updateComputed(this)) {\n const subs = this.subs\n if (subs !== undefined) shallowPropagate(subs)\n }\n } else if (flags & Pending) {\n if (this.deps && checkDirty(this.deps, this)) {\n if (updateComputed(this)) {\n const subs = this.subs\n if (subs !== undefined) shallowPropagate(subs)\n }\n } else {\n this.flags = flags & ~Pending\n }\n } else if (!flags) {\n this.flags = MutableRunning\n const prevSub = setActiveSub(this)\n try {\n this.value = this.getter(undefined)\n } finally {\n setActiveSub(prevSub)\n this.flags &= ~Running\n }\n }\n\n if (activeSub !== undefined) link(this, activeSub, cycle)\n return this.value\n}\n// ============================================================================\n// Effect\n// ============================================================================\n/**\n * Create a reactive effect\n * @param fn - The effect function\n * @returns An effect disposer function\n */\nexport function effect(fn: () => void): EffectDisposer {\n const e = {\n fn,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: WatchingRunning,\n __id: undefined as number | undefined,\n }\n\n registerEffectDevtools(e)\n\n const prevSub = activeSub\n if (prevSub !== undefined) link(e, prevSub, 0)\n activeSub = e\n\n try {\n effectRunDevtools(e)\n fn()\n } finally {\n activeSub = prevSub\n e.flags &= ~Running\n }\n\n return effectOper.bind(e) as EffectDisposer\n}\nfunction effectOper(this: EffectNode): void {\n disposeNode(this)\n}\n// ============================================================================\n// Effect Scope\n// ============================================================================\n/**\n * Create a reactive effect scope\n * @param fn - The scope function\n * @returns An effect scope disposer function\n */\nexport function effectScope(fn: () => void): EffectScopeDisposer {\n const e = { deps: undefined, depsTail: undefined, subs: undefined, subsTail: undefined, flags: 0 }\n\n const prevSub = activeSub\n if (prevSub !== undefined) link(e, prevSub, 0)\n activeSub = e\n\n try {\n fn()\n } finally {\n activeSub = prevSub\n }\n\n return effectScopeOper.bind(e) as EffectScopeDisposer\n}\nfunction effectScopeOper(this: EffectScopeNode): void {\n disposeNode(this)\n}\n// ============================================================================\n// Trigger\n// ============================================================================\n/**\n * Trigger a reactive computation without creating a persistent subscription\n * @param fn - The function to run\n */\nexport function trigger(fn: () => void): void {\n const sub: SubscriberNode = { deps: undefined, depsTail: undefined, flags: Watching }\n const prevSub = activeSub\n activeSub = sub as ReactiveNode\n\n try {\n fn()\n } finally {\n activeSub = prevSub\n let lnk = sub.deps\n while (lnk !== undefined) {\n const dep = lnk.dep\n lnk = unlink(lnk, sub)\n const subs = dep.subs\n if (subs !== undefined) {\n sub.flags = 0\n propagate(subs)\n shallowPropagate(subs)\n }\n }\n if (!batchDepth) scheduleFlush()\n }\n}\n// ============================================================================\n// Batch processing & Utility API\n// ============================================================================\n/**\n * Start a batch of updates\n */\nexport function startBatch(): void {\n ++batchDepth\n}\n/**\n * End a batch of updates and flush effects\n */\nexport function endBatch(): void {\n if (--batchDepth === 0) flush()\n}\n/**\n * Execute a function in a batch\n * @param fn - The function to execute\n * @returns The return value of the function\n */\nexport function batch<T>(fn: () => T): T {\n ++batchDepth\n try {\n return fn()\n } finally {\n if (--batchDepth === 0) flush()\n }\n}\n/**\n * Get the current active subscriber\n * @returns The active subscriber or undefined\n */\nexport function getActiveSub(): ReactiveNode | undefined {\n return activeSub\n}\n/**\n * Set the active subscriber\n * @param sub - The new active subscriber\n * @returns The previous active subscriber\n */\nexport function setActiveSub(sub: ReactiveNode | undefined): ReactiveNode | undefined {\n const prev = activeSub\n activeSub = sub\n return prev\n}\n/**\n * Get the current batch depth\n * @returns The current batch depth\n */\nexport function getBatchDepth(): number {\n return batchDepth\n}\n/**\n * Execute a function without tracking dependencies\n * @param fn - The function to execute\n * @returns The return value of the function\n */\nexport function untrack<T>(fn: () => T): T {\n const prev = activeSub\n activeSub = undefined\n try {\n return fn()\n } finally {\n activeSub = prev\n }\n}\n/**\n * Peek at a reactive value without tracking it as a dependency\n * @param accessor - The accessor function\n * @returns The value\n */\nexport function peek<T>(accessor: () => T): T {\n return untrack(accessor)\n}\n// Type detection - Fixed: using Function.name\n/**\n * Check if a function is a signal accessor\n * @param fn - The function to check\n * @returns True if the function is a signal accessor\n */\nexport function isSignal(fn: unknown): fn is SignalAccessor<unknown> {\n return typeof fn === 'function' && fn.name === 'bound signalOper'\n}\n/**\n * Check if a function is a computed accessor\n * @param fn - The function to check\n * @returns True if the function is a computed accessor\n */\nexport function isComputed(fn: unknown): fn is ComputedAccessor<unknown> {\n return typeof fn === 'function' && fn.name === 'bound computedOper'\n}\n/**\n * Check if a function is an effect disposer\n * @param fn - The function to check\n * @returns True if the function is an effect disposer\n */\nexport function isEffect(fn: unknown): fn is EffectDisposer {\n return typeof fn === 'function' && fn.name === 'bound effectOper'\n}\n/**\n * Check if a function is an effect scope disposer\n * @param fn - The function to check\n * @returns True if the function is an effect scope disposer\n */\nexport function isEffectScope(fn: unknown): fn is EffectScopeDisposer {\n return typeof fn === 'function' && fn.name === 'bound effectScopeOper'\n}\n// ============================================================================\n// Transition Context (for priority scheduling)\n// ============================================================================\n/**\n * Set the transition context\n * @param value - Whether we're inside a transition\n * @returns The previous transition context value\n */\nexport function setTransitionContext(value: boolean): boolean {\n const prev = isInTransition\n isInTransition = value\n return prev\n}\n/**\n * Get the current transition context\n * @returns True if currently inside a transition\n */\nexport function getTransitionContext(): boolean {\n return isInTransition\n}\n// Export aliases for API compatibility\nexport { signal as createSignal }\nexport type { SignalAccessor as Signal }\n\nexport { flush, link, unlink, propagate, checkDirty, shallowPropagate }\nexport default {\n signal,\n computed,\n effect,\n effectScope,\n trigger,\n batch,\n startBatch,\n endBatch,\n flush,\n untrack,\n peek,\n isSignal,\n isComputed,\n isEffect,\n isEffectScope,\n getActiveSub,\n setActiveSub,\n getBatchDepth,\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate,\n createReactiveSystem,\n ReactiveFlags,\n}\nexport const $state = signal as <T>(value: T) => T\n\nlet devtoolsSignalId = 0\nlet devtoolsEffectId = 0\n\ninterface DevtoolsIdentifiable {\n __id?: number\n}\n\nfunction registerSignalDevtools(value: unknown, node: SignalNode): number | undefined {\n const hook = getDevtoolsHook()\n if (!hook) return undefined\n const id = ++devtoolsSignalId\n hook.registerSignal(id, value)\n ;(node as SignalNode & DevtoolsIdentifiable).__id = id\n return id\n}\n\nfunction updateSignalDevtools(node: SignalNode, value: unknown): void {\n const hook = getDevtoolsHook()\n if (!hook) return\n const id = (node as SignalNode & DevtoolsIdentifiable).__id\n if (id) hook.updateSignal(id, value)\n}\n\nfunction registerEffectDevtools(node: EffectNode): number | undefined {\n const hook = getDevtoolsHook()\n if (!hook) return undefined\n const id = ++devtoolsEffectId\n hook.registerEffect(id)\n ;(node as EffectNode & DevtoolsIdentifiable).__id = id\n return id\n}\n\nfunction effectRunDevtools(node: EffectNode): void {\n const hook = getDevtoolsHook()\n if (!hook) return\n const id = (node as EffectNode & DevtoolsIdentifiable).__id\n if (id) hook.effectRun(id)\n}\n\n// ============================================================================\n// Selector\n// ============================================================================\n/**\n * Create a selector signal that efficiently updates only when the selected key matches.\n * Useful for large lists where only one item is selected.\n *\n * @param source - The source signal returning the current key\n * @param equalityFn - Optional equality function\n * @returns A selector function that takes a key and returns a boolean signal accessor\n */\nexport function createSelector<T>(\n source: () => T,\n equalityFn: (a: T, b: T) => boolean = (a, b) => a === b,\n): (key: T) => boolean {\n let current = source()\n const observers = new Map<T, SignalAccessor<boolean>>()\n\n effect(() => {\n const next = source()\n if (equalityFn(current, next)) return\n\n const prevSig = observers.get(current)\n if (prevSig) prevSig(false)\n\n const nextSig = observers.get(next)\n if (nextSig) nextSig(true)\n\n current = next\n })\n\n return (key: T) => {\n let sig = observers.get(key)\n if (!sig) {\n sig = signal(equalityFn(key, current))\n observers.set(key, sig)\n registerRootCleanup(() => observers.delete(key))\n }\n return sig()\n }\n}\n","import { signal, batch, type SignalAccessor } from './signal'\n\nconst PROXY = Symbol('fict:store-proxy')\nconst TARGET = Symbol('fict:store-target')\n\n// ============================================================================\n// Store (Deep Proxy)\n// ============================================================================\n\nexport type Store<T> = T\n\n/**\n * Create a Store: a reactive proxy that allows fine-grained access and mutation.\n *\n * @param initialValue - The initial state object\n * @returns [store, setStore]\n */\nexport function createStore<T extends object>(\n initialValue: T,\n): [Store<T>, (fn: (state: T) => void | T) => void] {\n const unwrapped = unwrap(initialValue)\n const wrapped = wrap(unwrapped)\n\n function setStore(fn: (state: T) => void | T) {\n batch(() => {\n const result = fn(wrapped)\n if (result !== undefined) {\n reconcile(wrapped, result)\n }\n })\n }\n\n return [wrapped, setStore]\n}\n\n// Map of target object -> Proxy\nconst proxyCache = new WeakMap<object, any>()\n// Map of target object -> Map<key, Signal>\nconst signalCache = new WeakMap<object, Map<string | symbol, SignalAccessor<any>>>()\n\nfunction wrap<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value\n if ((value as any)[PROXY]) return value\n\n if (proxyCache.has(value)) return proxyCache.get(value)\n\n const handler: ProxyHandler<any> = {\n get(target, prop, receiver) {\n if (prop === PROXY) return true\n if (prop === TARGET) return target\n\n const value = Reflect.get(target, prop, receiver)\n\n // Track property access\n track(target, prop)\n\n // Recursively wrap objects\n return wrap(value)\n },\n set(target, prop, value, receiver) {\n if (prop === PROXY || prop === TARGET) return false\n\n const oldValue = Reflect.get(target, prop, receiver)\n if (oldValue === value) return true\n\n const result = Reflect.set(target, prop, value, receiver)\n if (result) {\n trigger(target, prop)\n }\n return result\n },\n deleteProperty(target, prop) {\n const result = Reflect.deleteProperty(target, prop)\n if (result) {\n trigger(target, prop)\n }\n return result\n },\n }\n\n const proxy = new Proxy(value, handler)\n proxyCache.set(value, proxy)\n return proxy as T\n}\n\nfunction unwrap<T>(value: T): T {\n if (value && typeof value === 'object' && (value as any)[PROXY]) {\n return (value as any)[TARGET]\n }\n return value\n}\n\nfunction track(target: object, prop: string | symbol) {\n let signals = signalCache.get(target)\n if (!signals) {\n signals = new Map()\n signalCache.set(target, signals)\n }\n\n let s = signals.get(prop)\n if (!s) {\n s = signal(getLastValue(target, prop))\n signals.set(prop, s)\n }\n s() // subscribe\n}\n\nfunction trigger(target: object, prop: string | symbol) {\n const signals = signalCache.get(target)\n if (signals) {\n const s = signals.get(prop)\n if (s) {\n s(getLastValue(target, prop)) // notify with new value\n }\n }\n}\n\nfunction getLastValue(target: any, prop: string | symbol) {\n return target[prop]\n}\n\n/**\n * Reconcile a store path with a new value (shallow merge/diff)\n */\nfunction reconcile(target: any, value: any) {\n if (target === value) return\n if (value === null || typeof value !== 'object') return // Should replace?\n\n const realTarget = unwrap(target)\n const realValue = unwrap(value)\n\n const keys = new Set([...Object.keys(realTarget), ...Object.keys(realValue)])\n for (const key of keys) {\n if (realValue[key] === undefined && realTarget[key] !== undefined) {\n // deleted\n delete target[key] // Triggers proxy trap\n } else if (realTarget[key] !== realValue[key]) {\n target[key] = realValue[key] // Triggers proxy trap\n }\n }\n}\n\n// ============================================================================\n// Diffing Signal (for List Items)\n// ============================================================================\n\n/**\n * Creates a signal that returns a Stable Proxy.\n * Updates to the signal (via set) will diff the new value against the old value\n * and trigger property-specific updates.\n */\nexport function createDiffingSignal<T extends object>(initialValue: T) {\n let currentValue = unwrap(initialValue)\n const signals = new Map<string | symbol, SignalAccessor<any>>()\n\n // The stable proxy we return\n const proxy = new Proxy({} as T, {\n get(_, prop) {\n if (prop === PROXY) return true\n if (prop === TARGET) return currentValue\n\n // Subscribe to property\n let s = signals.get(prop)\n if (!s) {\n // Initialize signal with current property value\n s = signal((currentValue as any)[prop])\n signals.set(prop, s)\n }\n return s()\n },\n ownKeys() {\n return Reflect.ownKeys(currentValue)\n },\n })\n\n const read = () => proxy\n\n const write = (newValue: T) => {\n const next = unwrap(newValue)\n const prev = currentValue\n currentValue = next\n\n if (prev === next) {\n // Same ref update: re-evaluate all tracked signals\n // This is necessary for in-place mutations\n for (const [prop, s] of signals) {\n const newVal = (next as any)[prop]\n s(newVal)\n }\n return\n }\n\n // Diff logic\n // We only trigger signals for properties that exist in our cache (tracked)\n // and have changed.\n for (const [prop, s] of signals) {\n const oldVal = (prev as any)[prop]\n const newVal = (next as any)[prop]\n if (oldVal !== newVal) {\n s(newVal)\n }\n }\n\n // Note: If new properties appeared that weren't tracked, we don't care\n // because no one is listening.\n // If we assume shape stability (Keyed List), this is efficient.\n }\n\n return [read, write] as const\n}\n","import { computed } from './signal'\nimport type { Signal } from './signal'\n\nexport type Memo<T> = () => T\n\nexport function createMemo<T>(fn: () => T): Memo<T> {\n return computed(fn)\n}\n\nexport function fromSignal<T>(signal: Signal<T>): Memo<T> {\n return () => signal()\n}\n\nexport const $memo = createMemo\n","import {\n getCurrentRoot,\n handleError,\n registerRootCleanup,\n runCleanupList,\n withEffectCleanups,\n} from './lifecycle'\nimport { effect } from './signal'\nimport type { Cleanup } from './types'\n\nexport type Effect = () => void | Cleanup\n\nexport function createEffect(fn: Effect): () => void {\n let cleanups: Cleanup[] = []\n const rootForError = getCurrentRoot()\n\n const run = () => {\n runCleanupList(cleanups)\n const bucket: Cleanup[] = []\n withEffectCleanups(bucket, () => {\n try {\n const maybeCleanup = fn()\n if (typeof maybeCleanup === 'function') {\n bucket.push(maybeCleanup)\n }\n } catch (err) {\n if (handleError(err, { source: 'effect' }, rootForError)) {\n return\n }\n throw err\n }\n })\n cleanups = bucket\n }\n\n const disposeEffect = effect(run)\n const teardown = () => {\n runCleanupList(cleanups)\n disposeEffect()\n }\n\n registerRootCleanup(teardown)\n\n return teardown\n}\n\nexport const $effect = createEffect\n\nexport function createRenderEffect(fn: Effect): () => void {\n let cleanup: Cleanup | undefined\n const rootForError = getCurrentRoot()\n\n const run = () => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n try {\n const maybeCleanup = fn()\n if (typeof maybeCleanup === 'function') {\n cleanup = maybeCleanup\n }\n } catch (err) {\n if (handleError(err, { source: 'effect' }, rootForError)) {\n return\n }\n throw err\n }\n }\n\n const disposeEffect = effect(run)\n const teardown = () => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n disposeEffect()\n }\n\n registerRootCleanup(teardown)\n\n return teardown\n}\n","import { createEffect } from './effect'\nimport { createMemo } from './memo'\nimport { createSignal, type SignalAccessor, type ComputedAccessor } from './signal'\n\ninterface HookContext {\n slots: unknown[]\n cursor: number\n}\n\nconst ctxStack: HookContext[] = []\n\nexport function __fictUseContext(): HookContext {\n if (ctxStack.length === 0) {\n const ctx: HookContext = { slots: [], cursor: 0 }\n ctxStack.push(ctx)\n return ctx\n }\n const ctx = ctxStack[ctxStack.length - 1]!\n ctx.cursor = 0\n return ctx\n}\n\nexport function __fictPushContext(): HookContext {\n const ctx: HookContext = { slots: [], cursor: 0 }\n ctxStack.push(ctx)\n return ctx\n}\n\nexport function __fictPopContext(): void {\n ctxStack.pop()\n}\n\nexport function __fictResetContext(): void {\n ctxStack.length = 0\n}\n\nexport function __fictUseSignal<T>(ctx: HookContext, initial: T, slot?: number): SignalAccessor<T> {\n const index = slot ?? ctx.cursor++\n if (!ctx.slots[index]) {\n ctx.slots[index] = createSignal(initial)\n }\n return ctx.slots[index] as SignalAccessor<T>\n}\n\nexport function __fictUseMemo<T>(\n ctx: HookContext,\n fn: () => T,\n slot?: number,\n): ComputedAccessor<T> {\n const index = slot ?? ctx.cursor++\n if (!ctx.slots[index]) {\n ctx.slots[index] = createMemo(fn)\n }\n return ctx.slots[index] as ComputedAccessor<T>\n}\n\nexport function __fictUseEffect(ctx: HookContext, fn: () => void, slot?: number): void {\n const index = slot ?? ctx.cursor++\n if (!ctx.slots[index]) {\n ctx.slots[index] = createEffect(fn)\n }\n}\n\nexport function __fictRender<T>(ctx: HookContext, fn: () => T): T {\n ctxStack.push(ctx)\n ctx.cursor = 0\n try {\n return fn()\n } finally {\n ctxStack.pop()\n }\n}\n","import { createSignal } from './signal'\n\nexport interface VersionedSignalOptions<T> {\n equals?: (prev: T, next: T) => boolean\n}\n\nexport interface VersionedSignal<T> {\n /** Reactive read that tracks both the value and version counter */\n read: () => T\n /** Write a new value, forcing a version bump when value is equal */\n write: (next: T) => void\n /** Force a version bump without changing the value */\n force: () => void\n /** Read the current version without creating a dependency */\n peekVersion: () => number\n /** Read the current value without tracking */\n peekValue: () => T\n}\n\n/**\n * Create a signal wrapper that forces subscribers to update when the same reference is written.\n *\n * Useful for compiler-generated keyed list items where updates may reuse the same object reference.\n */\nexport function createVersionedSignal<T>(\n initialValue: T,\n options?: VersionedSignalOptions<T>,\n): VersionedSignal<T> {\n const equals = options?.equals ?? Object.is\n const value = createSignal(initialValue)\n const version = createSignal(0)\n\n const bumpVersion = () => {\n const next = version() + 1\n version(next)\n }\n\n return {\n read: () => {\n // Track both version and value to ensure equal writes notify subscribers\n version()\n return value()\n },\n write: (next: T) => {\n const prev = value()\n if (!equals(prev, next)) {\n value(next)\n return\n }\n bumpVersion()\n },\n force: () => {\n bumpVersion()\n },\n peekVersion: () => version(),\n peekValue: () => value(),\n }\n}\n","import { createMemo } from './memo'\n\nconst propGetters = new WeakSet<(...args: unknown[]) => unknown>()\nconst rawToProxy = new WeakMap<object, object>()\nconst proxyToRaw = new WeakMap<object, object>()\n\n/**\n * @internal\n * Marks a zero-arg getter so props proxy can lazily evaluate it.\n * Users normally never call this directly; the compiler injects it.\n */\nexport function __fictProp<T>(getter: () => T): () => T {\n if (typeof getter === 'function' && getter.length === 0) {\n propGetters.add(getter)\n }\n return getter\n}\n\nfunction isPropGetter(value: unknown): value is () => unknown {\n return typeof value === 'function' && propGetters.has(value as (...args: unknown[]) => unknown)\n}\n\nexport function createPropsProxy<T extends Record<string, unknown>>(props: T): T {\n if (!props || typeof props !== 'object') {\n return props\n }\n\n if (proxyToRaw.has(props)) {\n return props\n }\n\n const cached = rawToProxy.get(props)\n if (cached) {\n return cached as T\n }\n\n const proxy = new Proxy(props, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver)\n if (isPropGetter(value)) {\n return value()\n }\n return value\n },\n set(target, prop, value, receiver) {\n return Reflect.set(target, prop, value, receiver)\n },\n has(target, prop) {\n return prop in target\n },\n ownKeys(target) {\n return Reflect.ownKeys(target)\n },\n getOwnPropertyDescriptor(target, prop) {\n return Object.getOwnPropertyDescriptor(target, prop)\n },\n })\n\n rawToProxy.set(props, proxy)\n proxyToRaw.set(proxy, props)\n\n return proxy as T\n}\n\nexport function unwrapProps<T extends Record<string, unknown>>(props: T): T {\n if (!props || typeof props !== 'object') {\n return props\n }\n return (proxyToRaw.get(props) as T | undefined) ?? props\n}\n\n/**\n * Create a rest-like props object while preserving prop getters.\n * Excludes the specified keys from the returned object.\n */\nexport function __fictPropsRest<T extends Record<string, unknown>>(\n props: T,\n exclude: (string | number | symbol)[],\n): Record<string, unknown> {\n const raw = unwrapProps(props)\n const out: Record<string, unknown> = {}\n const excludeSet = new Set(exclude)\n\n for (const key of Reflect.ownKeys(raw)) {\n if (excludeSet.has(key)) continue\n out[key as string] = (raw as Record<string | symbol, unknown>)[key]\n }\n\n // Wrap in props proxy so getters remain lazy when accessed via rest\n return createPropsProxy(out)\n}\n\n/**\n * Merge multiple props-like objects while preserving lazy getters.\n * Later sources override earlier ones.\n *\n * Uses lazy lookup strategy - properties are only accessed when read,\n * avoiding upfront iteration of all keys.\n */\ntype MergeSource<T extends Record<string, unknown>> = T | (() => T)\n\nexport function mergeProps<T extends Record<string, unknown>>(\n ...sources: (MergeSource<T> | null | undefined)[]\n): Record<string, unknown> {\n // Filter out null/undefined sources upfront and store as concrete type\n const validSources: MergeSource<T>[] = sources.filter(\n (s): s is MergeSource<T> => s != null && (typeof s === 'object' || typeof s === 'function'),\n )\n\n if (validSources.length === 0) {\n return {}\n }\n\n if (validSources.length === 1 && typeof validSources[0] === 'object') {\n // Return source directly to preserve getter behavior (consistent with multi-source)\n return validSources[0]!\n }\n\n const resolveSource = (src: MergeSource<T>): T | undefined => {\n const value = typeof src === 'function' ? src() : src\n if (!value || typeof value !== 'object') return undefined\n return unwrapProps(value as T)\n }\n\n return new Proxy({} as Record<string, unknown>, {\n get(_, prop) {\n // Symbol properties (like Symbol.iterator) should return undefined\n if (typeof prop === 'symbol') {\n return undefined\n }\n // Search sources in reverse order (last wins)\n for (let i = validSources.length - 1; i >= 0; i--) {\n const src = validSources[i]!\n const raw = resolveSource(src)\n if (!raw || !(prop in raw)) continue\n\n const value = (raw as Record<string | symbol, unknown>)[prop]\n // Preserve prop getters - let child component's createPropsProxy unwrap lazily\n if (typeof src === 'function' && !isPropGetter(value)) {\n return __fictProp(() => {\n const latest = resolveSource(src)\n if (!latest || !(prop in latest)) return undefined\n return (latest as Record<string | symbol, unknown>)[prop]\n })\n }\n return value\n }\n return undefined\n },\n\n has(_, prop) {\n for (const src of validSources) {\n const raw = resolveSource(src)\n if (raw && prop in raw) {\n return true\n }\n }\n return false\n },\n\n ownKeys() {\n const keys = new Set<string | symbol>()\n for (const src of validSources) {\n const raw = resolveSource(src)\n if (raw) {\n for (const key of Reflect.ownKeys(raw)) {\n keys.add(key)\n }\n }\n }\n return Array.from(keys)\n },\n\n getOwnPropertyDescriptor(_, prop) {\n for (let i = validSources.length - 1; i >= 0; i--) {\n const raw = resolveSource(validSources[i]!)\n if (raw && prop in raw) {\n return {\n enumerable: true,\n configurable: true,\n get: () => {\n const value = (raw as Record<string | symbol, unknown>)[prop]\n // Preserve prop getters - let child component's createPropsProxy unwrap lazily\n return value\n },\n }\n }\n }\n return undefined\n },\n })\n}\n\nexport type PropGetter<T> = (() => T) & { __fictProp: true }\n/**\n * Memoize a prop getter to cache expensive computations.\n * Use when prop expressions involve heavy calculations.\n *\n * @example\n * ```tsx\n * // Without useProp - recomputes on every access\n * <Child data={expensiveComputation(list, filter)} />\n *\n * // With useProp - cached until dependencies change, auto-unwrapped by props proxy\n * const memoizedData = useProp(() => expensiveComputation(list, filter))\n * <Child data={memoizedData} />\n * ```\n */\nexport function useProp<T>(getter: () => T): PropGetter<T> {\n // Wrap in prop so component props proxy auto-unwraps when passed down.\n return __fictProp(createMemo(getter)) as PropGetter<T>\n}\n","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 HTMLElement = HTMLElement>(): RefObject<T> {\n return { current: null }\n}\n","import { createEffect } from './effect'\nimport { setTransitionContext, signal, scheduleFlush, untrack } from './signal'\n\n// ============================================================================\n// startTransition - Mark updates as low priority\n// ============================================================================\n\n/**\n * Execute a function with low-priority scheduling.\n * Updates triggered inside the callback will be processed after any high-priority updates.\n * This keeps the UI responsive during expensive operations.\n *\n * @param fn - The function to execute in transition context\n *\n * @example\n * ```tsx\n * const handleInput = (e) => {\n * query = e.target.value // High priority: immediate\n * startTransition(() => {\n * // Low priority: processed after high priority updates\n * filteredItems = allItems.filter(x => x.includes(query))\n * })\n * }\n * ```\n */\nexport function startTransition(fn: () => void): void {\n const prev = setTransitionContext(true)\n try {\n fn()\n } finally {\n setTransitionContext(prev)\n scheduleFlush()\n }\n}\n\n// ============================================================================\n// useTransition - Hook for managing transition state\n// ============================================================================\n\n/**\n * React-style useTransition hook.\n * Returns a pending signal and a startTransition function.\n *\n * @returns A tuple of [isPending accessor, startTransition function]\n *\n * @example\n * ```tsx\n * function SearchComponent() {\n * let query = $state('')\n * const [isPending, start] = useTransition()\n *\n * const handleChange = (e) => {\n * query = e.target.value\n * start(() => {\n * // Expensive filtering happens in low priority\n * filteredResults = expensiveFilter(allData, query)\n * })\n * }\n *\n * return (\n * <>\n * <input value={query} onInput={handleChange} />\n * {isPending() && <Spinner />}\n * <Results items={filteredResults} />\n * </>\n * )\n * }\n * ```\n */\nexport function useTransition(): [() => boolean, (fn: () => void) => void] {\n const pending = signal(false)\n\n const start = (fn: () => void) => {\n pending(true)\n startTransition(() => {\n try {\n fn()\n } finally {\n pending(false)\n }\n })\n }\n\n return [() => pending(), start]\n}\n\n// ============================================================================\n// useDeferredValue - Defer value updates to low priority\n// ============================================================================\n\n/**\n * Creates a deferred version of a value that updates with low priority.\n * The returned accessor will lag behind the source value during rapid updates,\n * allowing high-priority work to complete first.\n *\n * @param getValue - Accessor function that returns the source value\n * @returns Accessor function that returns the deferred value\n *\n * @example\n * ```tsx\n * function SearchResults({ query }) {\n * const deferredQuery = useDeferredValue(() => query)\n *\n * // deferredQuery lags behind query during rapid typing\n * const results = expensiveSearch(deferredQuery())\n *\n * return <ResultList items={results} />\n * }\n * ```\n */\nexport function useDeferredValue<T>(getValue: () => T): () => T {\n const deferredValue = signal(getValue())\n\n // Track source value changes and update deferred value in transition\n createEffect(() => {\n const newValue = getValue()\n // Use untrack to read current deferred value without creating a dependency\n // This prevents the effect from re-running when deferredValue changes\n const currentDeferred = untrack(() => deferredValue())\n if (currentDeferred !== newValue) {\n startTransition(() => {\n deferredValue(newValue)\n })\n }\n })\n\n return () => deferredValue()\n}\n","import { batch as baseBatch, untrack as baseUntrack } from './signal'\n\nexport function batch<T>(fn: () => T): T {\n return baseBatch(fn)\n}\n\nexport function untrack<T>(fn: () => T): T {\n return baseUntrack(fn)\n}\n\n// Transition APIs for priority scheduling\nexport { startTransition, useTransition, useDeferredValue } from './transition'\n","import type { FictNode } from './types'\n\nexport const Fragment = Symbol('Fragment')\n\nexport function jsx(\n type: string | typeof Fragment | ((props: Record<string, unknown>) => FictNode),\n props: Record<string, unknown>,\n key?: string,\n): FictNode {\n return { type, props, key }\n}\n\nexport const jsxs = jsx\nexport const jsxDEV = jsx\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace JSX {\n export type Element = FictNode\n\n export interface IntrinsicElements {\n // Document structure\n html: HTMLAttributes<HTMLHtmlElement>\n head: HTMLAttributes<HTMLHeadElement>\n body: HTMLAttributes<HTMLBodyElement>\n title: HTMLAttributes<HTMLTitleElement>\n meta: MetaHTMLAttributes<HTMLMetaElement>\n link: LinkHTMLAttributes<HTMLLinkElement>\n style: StyleHTMLAttributes<HTMLStyleElement>\n script: ScriptHTMLAttributes<HTMLScriptElement>\n noscript: HTMLAttributes<HTMLElement>\n\n // Layout & Semantic\n div: HTMLAttributes<HTMLDivElement>\n span: HTMLAttributes<HTMLSpanElement>\n main: HTMLAttributes<HTMLElement>\n header: HTMLAttributes<HTMLElement>\n footer: HTMLAttributes<HTMLElement>\n section: HTMLAttributes<HTMLElement>\n article: HTMLAttributes<HTMLElement>\n aside: HTMLAttributes<HTMLElement>\n nav: HTMLAttributes<HTMLElement>\n address: HTMLAttributes<HTMLElement>\n\n // Headings\n h1: HTMLAttributes<HTMLHeadingElement>\n h2: HTMLAttributes<HTMLHeadingElement>\n h3: HTMLAttributes<HTMLHeadingElement>\n h4: HTMLAttributes<HTMLHeadingElement>\n h5: HTMLAttributes<HTMLHeadingElement>\n h6: HTMLAttributes<HTMLHeadingElement>\n hgroup: HTMLAttributes<HTMLElement>\n\n // Text content\n p: HTMLAttributes<HTMLParagraphElement>\n blockquote: BlockquoteHTMLAttributes<HTMLQuoteElement>\n pre: HTMLAttributes<HTMLPreElement>\n figure: HTMLAttributes<HTMLElement>\n figcaption: HTMLAttributes<HTMLElement>\n hr: HTMLAttributes<HTMLHRElement>\n br: HTMLAttributes<HTMLBRElement>\n wbr: HTMLAttributes<HTMLElement>\n\n // Inline text semantics\n a: AnchorHTMLAttributes<HTMLAnchorElement>\n abbr: HTMLAttributes<HTMLElement>\n b: HTMLAttributes<HTMLElement>\n bdi: HTMLAttributes<HTMLElement>\n bdo: HTMLAttributes<HTMLElement>\n cite: HTMLAttributes<HTMLElement>\n code: HTMLAttributes<HTMLElement>\n data: DataHTMLAttributes<HTMLDataElement>\n dfn: HTMLAttributes<HTMLElement>\n em: HTMLAttributes<HTMLElement>\n i: HTMLAttributes<HTMLElement>\n kbd: HTMLAttributes<HTMLElement>\n mark: HTMLAttributes<HTMLElement>\n q: QuoteHTMLAttributes<HTMLQuoteElement>\n rp: HTMLAttributes<HTMLElement>\n rt: HTMLAttributes<HTMLElement>\n ruby: HTMLAttributes<HTMLElement>\n s: HTMLAttributes<HTMLElement>\n samp: HTMLAttributes<HTMLElement>\n small: HTMLAttributes<HTMLElement>\n strong: HTMLAttributes<HTMLElement>\n sub: HTMLAttributes<HTMLElement>\n sup: HTMLAttributes<HTMLElement>\n time: TimeHTMLAttributes<HTMLTimeElement>\n u: HTMLAttributes<HTMLElement>\n var: HTMLAttributes<HTMLElement>\n\n // Lists\n ul: HTMLAttributes<HTMLUListElement>\n ol: OlHTMLAttributes<HTMLOListElement>\n li: LiHTMLAttributes<HTMLLIElement>\n dl: HTMLAttributes<HTMLDListElement>\n dt: HTMLAttributes<HTMLElement>\n dd: HTMLAttributes<HTMLElement>\n menu: HTMLAttributes<HTMLMenuElement>\n\n // Tables\n table: TableHTMLAttributes<HTMLTableElement>\n caption: HTMLAttributes<HTMLTableCaptionElement>\n colgroup: ColgroupHTMLAttributes<HTMLTableColElement>\n col: ColHTMLAttributes<HTMLTableColElement>\n thead: HTMLAttributes<HTMLTableSectionElement>\n tbody: HTMLAttributes<HTMLTableSectionElement>\n tfoot: HTMLAttributes<HTMLTableSectionElement>\n tr: HTMLAttributes<HTMLTableRowElement>\n th: ThHTMLAttributes<HTMLTableCellElement>\n td: TdHTMLAttributes<HTMLTableCellElement>\n\n // Forms\n form: FormHTMLAttributes<HTMLFormElement>\n fieldset: FieldsetHTMLAttributes<HTMLFieldSetElement>\n legend: HTMLAttributes<HTMLLegendElement>\n label: LabelHTMLAttributes<HTMLLabelElement>\n input: InputHTMLAttributes<HTMLInputElement>\n button: ButtonHTMLAttributes<HTMLButtonElement>\n select: SelectHTMLAttributes<HTMLSelectElement>\n datalist: HTMLAttributes<HTMLDataListElement>\n optgroup: OptgroupHTMLAttributes<HTMLOptGroupElement>\n option: OptionHTMLAttributes<HTMLOptionElement>\n textarea: TextareaHTMLAttributes<HTMLTextAreaElement>\n output: OutputHTMLAttributes<HTMLOutputElement>\n progress: ProgressHTMLAttributes<HTMLProgressElement>\n meter: MeterHTMLAttributes<HTMLMeterElement>\n\n // Interactive\n details: DetailsHTMLAttributes<HTMLDetailsElement>\n summary: HTMLAttributes<HTMLElement>\n dialog: DialogHTMLAttributes<HTMLDialogElement>\n\n // Media\n img: ImgHTMLAttributes<HTMLImageElement>\n picture: HTMLAttributes<HTMLPictureElement>\n source: SourceHTMLAttributes<HTMLSourceElement>\n audio: AudioVideoHTMLAttributes<HTMLAudioElement>\n video: AudioVideoHTMLAttributes<HTMLVideoElement>\n track: TrackHTMLAttributes<HTMLTrackElement>\n map: MapHTMLAttributes<HTMLMapElement>\n area: AreaHTMLAttributes<HTMLAreaElement>\n\n // Embedded content\n iframe: IframeHTMLAttributes<HTMLIFrameElement>\n embed: EmbedHTMLAttributes<HTMLEmbedElement>\n object: ObjectHTMLAttributes<HTMLObjectElement>\n param: ParamHTMLAttributes<HTMLParamElement>\n canvas: CanvasHTMLAttributes<HTMLCanvasElement>\n\n // SVG (basic support)\n svg: SVGAttributes<SVGSVGElement>\n path: SVGAttributes<SVGPathElement>\n circle: SVGAttributes<SVGCircleElement>\n rect: SVGAttributes<SVGRectElement>\n line: SVGAttributes<SVGLineElement>\n polyline: SVGAttributes<SVGPolylineElement>\n polygon: SVGAttributes<SVGPolygonElement>\n ellipse: SVGAttributes<SVGEllipseElement>\n g: SVGAttributes<SVGGElement>\n defs: SVGAttributes<SVGDefsElement>\n use: SVGAttributes<SVGUseElement>\n text: SVGAttributes<SVGTextElement>\n tspan: SVGAttributes<SVGTSpanElement>\n\n // Web components / other\n template: HTMLAttributes<HTMLTemplateElement>\n slot: SlotHTMLAttributes<HTMLSlotElement>\n portal: HTMLAttributes<HTMLElement>\n }\n\n export interface ElementChildrenAttribute {\n children: unknown\n }\n}\n\n// ============================================================================\n// Base HTML Attributes\n// ============================================================================\n\ninterface HTMLAttributes<T> {\n // Children\n children?: FictNode | FictNode[]\n\n // JSX special attributes\n key?: string | number\n\n // Core attributes\n id?: string\n class?: string\n style?: string | Record<string, string | number>\n title?: string\n lang?: string\n dir?: 'ltr' | 'rtl' | 'auto'\n hidden?: boolean | 'hidden' | 'until-found'\n tabIndex?: number\n draggable?: boolean | 'true' | 'false'\n contentEditable?: boolean | 'true' | 'false' | 'inherit'\n spellCheck?: boolean | 'true' | 'false'\n translate?: 'yes' | 'no'\n inert?: boolean\n popover?: 'auto' | 'manual'\n\n // Experimental / newer\n autofocus?: boolean\n slot?: string\n accessKey?: string\n\n // Event handlers\n onClick?: (e: MouseEvent) => void\n onDblClick?: (e: MouseEvent) => void\n onMouseDown?: (e: MouseEvent) => void\n onMouseUp?: (e: MouseEvent) => void\n onMouseMove?: (e: MouseEvent) => void\n onMouseEnter?: (e: MouseEvent) => void\n onMouseLeave?: (e: MouseEvent) => void\n onMouseOver?: (e: MouseEvent) => void\n onMouseOut?: (e: MouseEvent) => void\n onContextMenu?: (e: MouseEvent) => void\n onInput?: (e: InputEvent) => void\n onChange?: (e: Event) => void\n onSubmit?: (e: SubmitEvent) => void\n onReset?: (e: Event) => void\n onKeyDown?: (e: KeyboardEvent) => void\n onKeyUp?: (e: KeyboardEvent) => void\n onKeyPress?: (e: KeyboardEvent) => void\n onFocus?: (e: FocusEvent) => void\n onBlur?: (e: FocusEvent) => void\n onScroll?: (e: Event) => void\n onWheel?: (e: WheelEvent) => void\n onLoad?: (e: Event) => void\n onError?: (e: Event) => void\n\n // Drag events\n onDrag?: (e: DragEvent) => void\n onDragStart?: (e: DragEvent) => void\n onDragEnd?: (e: DragEvent) => void\n onDragEnter?: (e: DragEvent) => void\n onDragLeave?: (e: DragEvent) => void\n onDragOver?: (e: DragEvent) => void\n onDrop?: (e: DragEvent) => void\n\n // Touch events\n onTouchStart?: (e: TouchEvent) => void\n onTouchMove?: (e: TouchEvent) => void\n onTouchEnd?: (e: TouchEvent) => void\n onTouchCancel?: (e: TouchEvent) => void\n\n // Animation events\n onAnimationStart?: (e: AnimationEvent) => void\n onAnimationEnd?: (e: AnimationEvent) => void\n onAnimationIteration?: (e: AnimationEvent) => void\n onTransitionEnd?: (e: TransitionEvent) => void\n\n // Pointer events\n onPointerDown?: (e: PointerEvent) => void\n onPointerUp?: (e: PointerEvent) => void\n onPointerMove?: (e: PointerEvent) => void\n onPointerEnter?: (e: PointerEvent) => void\n onPointerLeave?: (e: PointerEvent) => void\n onPointerOver?: (e: PointerEvent) => void\n onPointerOut?: (e: PointerEvent) => void\n onPointerCancel?: (e: PointerEvent) => void\n\n // Ref\n ref?: ((el: T | null) => void) | { current: T | null }\n\n // ARIA attributes (common ones)\n role?: string\n 'aria-hidden'?: boolean | 'true' | 'false'\n 'aria-label'?: string\n 'aria-labelledby'?: string\n 'aria-describedby'?: string\n 'aria-live'?: 'off' | 'polite' | 'assertive'\n 'aria-atomic'?: boolean | 'true' | 'false'\n 'aria-busy'?: boolean | 'true' | 'false'\n 'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time'\n 'aria-disabled'?: boolean | 'true' | 'false'\n 'aria-expanded'?: boolean | 'true' | 'false'\n 'aria-haspopup'?: boolean | 'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'\n 'aria-pressed'?: boolean | 'true' | 'false' | 'mixed'\n 'aria-selected'?: boolean | 'true' | 'false'\n 'aria-checked'?: boolean | 'true' | 'false' | 'mixed'\n 'aria-controls'?: string\n 'aria-owns'?: string\n 'aria-activedescendant'?: string\n 'aria-valuemin'?: number\n 'aria-valuemax'?: number\n 'aria-valuenow'?: number\n 'aria-valuetext'?: string\n 'aria-orientation'?: 'horizontal' | 'vertical'\n 'aria-readonly'?: boolean | 'true' | 'false'\n 'aria-required'?: boolean | 'true' | 'false'\n 'aria-invalid'?: boolean | 'true' | 'false' | 'grammar' | 'spelling'\n 'aria-errormessage'?: string\n 'aria-modal'?: boolean | 'true' | 'false'\n 'aria-placeholder'?: string\n 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other'\n 'aria-colcount'?: number\n 'aria-colindex'?: number\n 'aria-colspan'?: number\n 'aria-rowcount'?: number\n 'aria-rowindex'?: number\n 'aria-rowspan'?: number\n 'aria-setsize'?: number\n 'aria-posinset'?: number\n 'aria-level'?: number\n 'aria-multiselectable'?: boolean | 'true' | 'false'\n 'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both'\n 'aria-details'?: string\n 'aria-keyshortcuts'?: string\n 'aria-roledescription'?: string\n\n // Data attributes via index signature\n [key: `data-${string}`]: string | number | boolean | undefined\n}\n\n// ============================================================================\n// Specialized Attribute Interfaces\n// ============================================================================\n\ninterface AnchorHTMLAttributes<T> extends HTMLAttributes<T> {\n href?: string\n target?: '_self' | '_blank' | '_parent' | '_top' | string\n rel?: string\n download?: boolean | string\n hreflang?: string\n type?: string\n referrerPolicy?: ReferrerPolicy\n ping?: string\n}\n\ninterface ButtonHTMLAttributes<T> extends HTMLAttributes<T> {\n type?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n name?: string\n value?: string\n form?: string\n formAction?: string\n formEncType?: string\n formMethod?: string\n formNoValidate?: boolean\n formTarget?: string\n popovertarget?: string\n popovertargetaction?: 'show' | 'hide' | 'toggle'\n}\n\ninterface InputHTMLAttributes<T> extends HTMLAttributes<T> {\n type?: string\n value?: string | number | readonly string[]\n defaultValue?: string | number | readonly string[]\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n placeholder?: string\n name?: string\n form?: string\n required?: boolean\n readonly?: boolean\n multiple?: boolean\n min?: number | string\n max?: number | string\n minLength?: number\n maxLength?: number\n step?: number | string\n pattern?: string\n size?: number\n accept?: string\n capture?: boolean | 'user' | 'environment'\n list?: string\n autoComplete?: string\n autoCapitalize?: string\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n enterKeyHint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'\n height?: number | string\n width?: number | string\n alt?: string\n src?: string\n formAction?: string\n formEncType?: string\n formMethod?: string\n formNoValidate?: boolean\n formTarget?: string\n}\n\ninterface FormHTMLAttributes<T> extends HTMLAttributes<T> {\n action?: string\n method?: 'get' | 'post' | 'dialog'\n encType?: string\n target?: string\n name?: string\n noValidate?: boolean\n autoComplete?: 'on' | 'off'\n acceptCharset?: string\n}\n\ninterface ImgHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n alt?: string\n width?: number | string\n height?: number | string\n srcSet?: string\n sizes?: string\n loading?: 'eager' | 'lazy'\n decoding?: 'async' | 'auto' | 'sync'\n crossOrigin?: 'anonymous' | 'use-credentials'\n referrerPolicy?: ReferrerPolicy\n useMap?: string\n isMap?: boolean\n fetchPriority?: 'auto' | 'high' | 'low'\n}\n\ninterface TextareaHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string | number\n defaultValue?: string\n disabled?: boolean\n placeholder?: string\n name?: string\n form?: string\n required?: boolean\n readonly?: boolean\n rows?: number\n cols?: number\n minLength?: number\n maxLength?: number\n wrap?: 'hard' | 'soft' | 'off'\n autoComplete?: string\n}\n\ninterface SelectHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string | number | readonly string[]\n defaultValue?: string | number | readonly string[]\n disabled?: boolean\n name?: string\n form?: string\n required?: boolean\n multiple?: boolean\n size?: number\n autoComplete?: string\n}\n\ninterface OptionHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string | number\n disabled?: boolean\n selected?: boolean\n label?: string\n}\n\ninterface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> {\n disabled?: boolean\n label?: string\n}\n\ninterface LabelHTMLAttributes<T> extends HTMLAttributes<T> {\n for?: string\n htmlFor?: string\n form?: string\n}\n\ninterface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> {\n disabled?: boolean\n name?: string\n form?: string\n}\n\ninterface OutputHTMLAttributes<T> extends HTMLAttributes<T> {\n for?: string\n htmlFor?: string\n form?: string\n name?: string\n}\n\ninterface ProgressHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: number | string\n max?: number | string\n}\n\ninterface MeterHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: number | string\n min?: number | string\n max?: number | string\n low?: number | string\n high?: number | string\n optimum?: number | string\n}\n\n// Table elements\ninterface TableHTMLAttributes<T> extends HTMLAttributes<T> {\n cellPadding?: number | string\n cellSpacing?: number | string\n border?: number | string\n}\n\ninterface ThHTMLAttributes<T> extends HTMLAttributes<T> {\n colSpan?: number\n rowSpan?: number\n scope?: 'row' | 'col' | 'rowgroup' | 'colgroup'\n abbr?: string\n headers?: string\n}\n\ninterface TdHTMLAttributes<T> extends HTMLAttributes<T> {\n colSpan?: number\n rowSpan?: number\n headers?: string\n}\n\ninterface ColHTMLAttributes<T> extends HTMLAttributes<T> {\n span?: number\n}\n\ninterface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> {\n span?: number\n}\n\n// List elements\ninterface OlHTMLAttributes<T> extends HTMLAttributes<T> {\n start?: number\n reversed?: boolean\n type?: '1' | 'a' | 'A' | 'i' | 'I'\n}\n\ninterface LiHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: number\n}\n\n// Media elements\ninterface AudioVideoHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n controls?: boolean\n autoPlay?: boolean\n loop?: boolean\n muted?: boolean\n preload?: 'none' | 'metadata' | 'auto'\n crossOrigin?: 'anonymous' | 'use-credentials'\n poster?: string // video only\n width?: number | string // video only\n height?: number | string // video only\n playsInline?: boolean\n disableRemotePlayback?: boolean\n onPlay?: (e: Event) => void\n onPause?: (e: Event) => void\n onEnded?: (e: Event) => void\n onTimeUpdate?: (e: Event) => void\n onVolumeChange?: (e: Event) => void\n onSeeking?: (e: Event) => void\n onSeeked?: (e: Event) => void\n onLoadedData?: (e: Event) => void\n onLoadedMetadata?: (e: Event) => void\n onCanPlay?: (e: Event) => void\n onCanPlayThrough?: (e: Event) => void\n onWaiting?: (e: Event) => void\n onPlaying?: (e: Event) => void\n onProgress?: (e: Event) => void\n onDurationChange?: (e: Event) => void\n onRateChange?: (e: Event) => void\n onStalled?: (e: Event) => void\n onSuspend?: (e: Event) => void\n onEmptied?: (e: Event) => void\n}\n\ninterface SourceHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n srcSet?: string\n sizes?: string\n type?: string\n media?: string\n width?: number | string\n height?: number | string\n}\n\ninterface TrackHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n srcLang?: string\n label?: string\n kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata'\n default?: boolean\n}\n\n// Embedded content\ninterface IframeHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n srcDoc?: string\n name?: string\n width?: number | string\n height?: number | string\n allow?: string\n allowFullScreen?: boolean\n sandbox?: string\n loading?: 'eager' | 'lazy'\n referrerPolicy?: ReferrerPolicy\n}\n\ninterface EmbedHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n type?: string\n width?: number | string\n height?: number | string\n}\n\ninterface ObjectHTMLAttributes<T> extends HTMLAttributes<T> {\n data?: string\n type?: string\n name?: string\n width?: number | string\n height?: number | string\n form?: string\n useMap?: string\n}\n\ninterface ParamHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n value?: string\n}\n\ninterface CanvasHTMLAttributes<T> extends HTMLAttributes<T> {\n width?: number | string\n height?: number | string\n}\n\ninterface MapHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n}\n\ninterface AreaHTMLAttributes<T> extends HTMLAttributes<T> {\n alt?: string\n coords?: string\n href?: string\n hreflang?: string\n download?: boolean | string\n rel?: string\n shape?: 'rect' | 'circle' | 'poly' | 'default'\n target?: string\n referrerPolicy?: ReferrerPolicy\n ping?: string\n}\n\n// Interactive elements\ninterface DetailsHTMLAttributes<T> extends HTMLAttributes<T> {\n open?: boolean\n onToggle?: (e: Event) => void\n}\n\ninterface DialogHTMLAttributes<T> extends HTMLAttributes<T> {\n open?: boolean\n onClose?: (e: Event) => void\n onCancel?: (e: Event) => void\n}\n\n// Other elements\ninterface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> {\n cite?: string\n}\n\ninterface QuoteHTMLAttributes<T> extends HTMLAttributes<T> {\n cite?: string\n}\n\ninterface TimeHTMLAttributes<T> extends HTMLAttributes<T> {\n dateTime?: string\n}\n\ninterface DataHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string\n}\n\ninterface MetaHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n content?: string\n httpEquiv?: string\n charSet?: string\n property?: string\n}\n\ninterface LinkHTMLAttributes<T> extends HTMLAttributes<T> {\n href?: string\n rel?: string\n type?: string\n media?: string\n as?: string\n crossOrigin?: 'anonymous' | 'use-credentials'\n referrerPolicy?: ReferrerPolicy\n sizes?: string\n hreflang?: string\n integrity?: string\n fetchPriority?: 'auto' | 'high' | 'low'\n disabled?: boolean\n}\n\ninterface StyleHTMLAttributes<T> extends HTMLAttributes<T> {\n media?: string\n nonce?: string\n blocking?: string\n}\n\ninterface ScriptHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n type?: string\n async?: boolean\n defer?: boolean\n crossOrigin?: 'anonymous' | 'use-credentials'\n integrity?: string\n noModule?: boolean\n nonce?: string\n referrerPolicy?: ReferrerPolicy\n fetchPriority?: 'auto' | 'high' | 'low'\n blocking?: string\n}\n\ninterface SlotHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n onSlotchange?: (e: Event) => void\n}\n\n// SVG Attributes (basic support)\ninterface SVGAttributes<T> extends HTMLAttributes<T> {\n // Core SVG attributes\n viewBox?: string\n xmlns?: string\n xmlnsXlink?: string\n fill?: string\n stroke?: string\n strokeWidth?: string | number\n strokeLinecap?: 'butt' | 'round' | 'square'\n strokeLinejoin?: 'miter' | 'round' | 'bevel'\n strokeDasharray?: string\n strokeDashoffset?: string | number\n strokeOpacity?: string | number\n fillOpacity?: string | number\n opacity?: string | number\n transform?: string\n transformOrigin?: string\n clipPath?: string\n mask?: string\n filter?: string\n\n // Shape attributes\n d?: string\n cx?: string | number\n cy?: string | number\n r?: string | number\n rx?: string | number\n ry?: string | number\n x?: string | number\n y?: string | number\n x1?: string | number\n y1?: string | number\n x2?: string | number\n y2?: string | number\n width?: string | number\n height?: string | number\n points?: string\n pathLength?: string | number\n\n // Text attributes\n textAnchor?: 'start' | 'middle' | 'end'\n dominantBaseline?: string\n dx?: string | number\n dy?: string | number\n fontSize?: string | number\n fontFamily?: string\n fontWeight?: string | number\n\n // Use element\n href?: string\n xlinkHref?: string\n\n // Gradient/pattern\n gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n gradientTransform?: string\n spreadMethod?: 'pad' | 'reflect' | 'repeat'\n offset?: string | number\n stopColor?: string\n stopOpacity?: string | number\n\n // Clip/mask\n clipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n maskUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n maskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n\n // Other\n preserveAspectRatio?: string\n markerStart?: string\n markerMid?: string\n markerEnd?: string\n vectorEffect?: string\n}\n","/**\n * Fict DOM Constants\n *\n * Property constants and configurations for DOM attribute handling.\n * Borrowed from dom-expressions for comprehensive DOM support.\n */\n\n// ============================================================================\n// Boolean Attributes\n// ============================================================================\n\n/**\n * Complete list of boolean attributes (lowercase)\n * These attributes are set as empty strings when true, removed when false\n */\nconst booleans = [\n 'allowfullscreen',\n 'async',\n 'alpha', // HTMLInputElement\n 'autofocus', // HTMLElement prop\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'disabled',\n 'formnovalidate',\n 'hidden', // HTMLElement prop\n 'indeterminate',\n 'inert', // HTMLElement prop\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'seamless', // HTMLIframeElement - non-standard\n 'selected',\n // Experimental attributes\n 'adauctionheaders',\n 'browsingtopics',\n 'credentialless',\n 'defaultchecked',\n 'defaultmuted',\n 'defaultselected',\n 'defer',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'preservespitch',\n 'shadowrootclonable',\n 'shadowrootcustomelementregistry',\n 'shadowrootdelegatesfocus',\n 'shadowrootserializable',\n 'sharedstoragewritable',\n] as const\n\nexport const BooleanAttributes = new Set<string>(booleans)\n\n// ============================================================================\n// Properties Set\n// ============================================================================\n\n/**\n * Properties that should be set via DOM property (not attribute)\n * Includes camelCase versions of boolean attributes\n */\nexport const Properties = new Set<string>([\n // Core properties\n 'className',\n 'value',\n\n // CamelCase booleans\n 'readOnly',\n 'noValidate',\n 'formNoValidate',\n 'isMap',\n 'noModule',\n 'playsInline',\n\n // Experimental (camelCase)\n 'adAuctionHeaders',\n 'allowFullscreen',\n 'browsingTopics',\n 'defaultChecked',\n 'defaultMuted',\n 'defaultSelected',\n 'disablePictureInPicture',\n 'disableRemotePlayback',\n 'preservesPitch',\n 'shadowRootClonable',\n 'shadowRootCustomElementRegistry',\n 'shadowRootDelegatesFocus',\n 'shadowRootSerializable',\n 'sharedStorageWritable',\n\n // All lowercase booleans\n ...booleans,\n])\n\n// ============================================================================\n// Child Properties\n// ============================================================================\n\n/**\n * Properties that represent children/content\n */\nexport const ChildProperties = new Set<string>([\n 'innerHTML',\n 'textContent',\n 'innerText',\n 'children',\n])\n\n// ============================================================================\n// Property Aliases\n// ============================================================================\n\n/**\n * React compatibility aliases (className -> class)\n */\nexport const Aliases: Record<string, string> = {\n className: 'class',\n htmlFor: 'for',\n}\n\n/**\n * Element-specific property aliases\n * Maps lowercase attribute names to their camelCase property equivalents\n * Only for specific elements that have these properties\n */\nexport const PropAliases: Record<\n string,\n string | { $: string; [tagName: string]: string | number }\n> = {\n // Direct mapping\n class: 'className',\n\n // Element-specific mappings\n novalidate: {\n $: 'noValidate',\n FORM: 1,\n },\n formnovalidate: {\n $: 'formNoValidate',\n BUTTON: 1,\n INPUT: 1,\n },\n ismap: {\n $: 'isMap',\n IMG: 1,\n },\n nomodule: {\n $: 'noModule',\n SCRIPT: 1,\n },\n playsinline: {\n $: 'playsInline',\n VIDEO: 1,\n },\n readonly: {\n $: 'readOnly',\n INPUT: 1,\n TEXTAREA: 1,\n },\n\n // Experimental element-specific\n adauctionheaders: {\n $: 'adAuctionHeaders',\n IFRAME: 1,\n },\n allowfullscreen: {\n $: 'allowFullscreen',\n IFRAME: 1,\n },\n browsingtopics: {\n $: 'browsingTopics',\n IMG: 1,\n },\n defaultchecked: {\n $: 'defaultChecked',\n INPUT: 1,\n },\n defaultmuted: {\n $: 'defaultMuted',\n AUDIO: 1,\n VIDEO: 1,\n },\n defaultselected: {\n $: 'defaultSelected',\n OPTION: 1,\n },\n disablepictureinpicture: {\n $: 'disablePictureInPicture',\n VIDEO: 1,\n },\n disableremoteplayback: {\n $: 'disableRemotePlayback',\n AUDIO: 1,\n VIDEO: 1,\n },\n preservespitch: {\n $: 'preservesPitch',\n AUDIO: 1,\n VIDEO: 1,\n },\n shadowrootclonable: {\n $: 'shadowRootClonable',\n TEMPLATE: 1,\n },\n shadowrootdelegatesfocus: {\n $: 'shadowRootDelegatesFocus',\n TEMPLATE: 1,\n },\n shadowrootserializable: {\n $: 'shadowRootSerializable',\n TEMPLATE: 1,\n },\n sharedstoragewritable: {\n $: 'sharedStorageWritable',\n IFRAME: 1,\n IMG: 1,\n },\n}\n\n/**\n * Get the property alias for a given attribute and tag name\n */\nexport function getPropAlias(prop: string, tagName: string): string | undefined {\n const a = PropAliases[prop]\n if (typeof a === 'object') {\n return a[tagName] ? a['$'] : undefined\n }\n return a\n}\n\n// ============================================================================\n// Event Delegation\n// ============================================================================\n\n/**\n * Symbol for storing delegated events on the document\n */\nexport const $$EVENTS = '_$FICT_DELEGATE'\n\n/**\n * Events that should use event delegation for performance\n * These events bubble and are commonly used across many elements\n */\nexport const DelegatedEvents = new Set<string>([\n 'beforeinput',\n 'click',\n 'dblclick',\n 'contextmenu',\n 'focusin',\n 'focusout',\n 'input',\n 'keydown',\n 'keyup',\n 'mousedown',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'mouseup',\n 'pointerdown',\n 'pointermove',\n 'pointerout',\n 'pointerover',\n 'pointerup',\n 'touchend',\n 'touchmove',\n 'touchstart',\n])\n\n// ============================================================================\n// SVG Support\n// ============================================================================\n\n/**\n * SVG element names (excluding common ones that overlap with HTML)\n */\nexport const SVGElements = new Set<string>([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animate',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'circle',\n 'clipPath',\n 'color-profile',\n 'cursor',\n 'defs',\n 'desc',\n 'ellipse',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'filter',\n 'font',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignObject',\n 'g',\n 'glyph',\n 'glyphRef',\n 'hkern',\n 'image',\n 'line',\n 'linearGradient',\n 'marker',\n 'mask',\n 'metadata',\n 'missing-glyph',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'set',\n 'stop',\n 'svg',\n 'switch',\n 'symbol',\n 'text',\n 'textPath',\n 'tref',\n 'tspan',\n 'use',\n 'view',\n 'vkern',\n])\n\n/**\n * SVG attribute namespaces\n */\nexport const SVGNamespace: Record<string, string> = {\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n}\n\n// ============================================================================\n// Unitless CSS Properties\n// ============================================================================\n\n/**\n * CSS properties that don't need a unit (like 'px')\n */\nexport const UnitlessStyles = new Set<string>([\n 'animationIterationCount',\n 'animation-iteration-count',\n 'borderImageOutset',\n 'border-image-outset',\n 'borderImageSlice',\n 'border-image-slice',\n 'borderImageWidth',\n 'border-image-width',\n 'boxFlex',\n 'box-flex',\n 'boxFlexGroup',\n 'box-flex-group',\n 'boxOrdinalGroup',\n 'box-ordinal-group',\n 'columnCount',\n 'column-count',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flex-grow',\n 'flexPositive',\n 'flex-positive',\n 'flexShrink',\n 'flex-shrink',\n 'flexNegative',\n 'flex-negative',\n 'flexOrder',\n 'flex-order',\n 'gridRow',\n 'grid-row',\n 'gridRowEnd',\n 'grid-row-end',\n 'gridRowSpan',\n 'grid-row-span',\n 'gridRowStart',\n 'grid-row-start',\n 'gridColumn',\n 'grid-column',\n 'gridColumnEnd',\n 'grid-column-end',\n 'gridColumnSpan',\n 'grid-column-span',\n 'gridColumnStart',\n 'grid-column-start',\n 'fontWeight',\n 'font-weight',\n 'lineClamp',\n 'line-clamp',\n 'lineHeight',\n 'line-height',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'tab-size',\n 'widows',\n 'zIndex',\n 'z-index',\n 'zoom',\n 'fillOpacity',\n 'fill-opacity',\n 'floodOpacity',\n 'flood-opacity',\n 'stopOpacity',\n 'stop-opacity',\n 'strokeDasharray',\n 'stroke-dasharray',\n 'strokeDashoffset',\n 'stroke-dashoffset',\n 'strokeMiterlimit',\n 'stroke-miterlimit',\n 'strokeOpacity',\n 'stroke-opacity',\n 'strokeWidth',\n 'stroke-width',\n])\n","/**\n * Low-level DOM node helpers shared across runtime modules.\n * Keep this file dependency-free to avoid module cycles.\n */\n\n/**\n * Convert a value to a flat array of DOM nodes.\n * Defensively handles proxies and non-DOM values.\n */\nexport function toNodeArray(node: Node | Node[] | unknown): Node[] {\n try {\n if (Array.isArray(node)) {\n // Preserve original array reference when it's already a flat Node array\n let allNodes = true\n for (const item of node) {\n let isItemNode = false\n try {\n isItemNode = item instanceof Node\n } catch {\n isItemNode = false\n }\n if (!isItemNode) {\n allNodes = false\n break\n }\n }\n if (allNodes) {\n return node as Node[]\n }\n const result: Node[] = []\n for (const item of node) {\n result.push(...toNodeArray(item))\n }\n return result\n }\n if (node === null || node === undefined || node === false) {\n return []\n }\n } catch {\n return []\n }\n\n let isNode = false\n try {\n isNode = node instanceof Node\n } catch {\n // If safe check fails, treat as primitive string\n isNode = false\n }\n\n if (isNode) {\n try {\n if (node instanceof DocumentFragment) {\n return Array.from(node.childNodes)\n }\n } catch {\n // Ignore fragment check error\n }\n return [node as Node]\n }\n\n try {\n // Duck-type BindingHandle-like values\n if (typeof node === 'object' && node !== null && 'marker' in node) {\n return toNodeArray((node as { marker: unknown }).marker)\n }\n } catch {\n // Ignore property check error\n }\n\n // Primitive fallback\n try {\n return [document.createTextNode(String(node))]\n } catch {\n return [document.createTextNode('')]\n }\n}\n\n/**\n * Insert nodes before an anchor node, preserving order.\n * Uses DocumentFragment for batch insertion when inserting multiple nodes.\n */\nexport function insertNodesBefore(\n parent: ParentNode & Node,\n nodes: Node[],\n anchor: Node | null,\n): void {\n if (nodes.length === 0) return\n\n // Single node optimization - direct insertion\n if (nodes.length === 1) {\n const node = nodes[0]!\n if (node === undefined || node === null) return\n if (node.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(node)\n }\n try {\n parent.insertBefore(node, anchor)\n } catch (e: unknown) {\n if (parent.ownerDocument) {\n try {\n const clone = parent.ownerDocument.importNode(node, true)\n parent.insertBefore(clone, anchor)\n return\n } catch {\n // Clone fallback failed\n }\n }\n throw e\n }\n return\n }\n\n // Batch insertion using DocumentFragment for multiple nodes\n const doc = parent.ownerDocument\n if (doc) {\n const frag = doc.createDocumentFragment()\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!\n if (node === undefined || node === null) continue\n // Handle DocumentFragment - append children\n if (node.nodeType === 11) {\n const childrenArr = Array.from(node.childNodes)\n for (let j = 0; j < childrenArr.length; j++) {\n frag.appendChild(childrenArr[j]!)\n }\n } else {\n if (node.ownerDocument !== doc) {\n doc.adoptNode(node)\n }\n frag.appendChild(node)\n }\n }\n parent.insertBefore(frag, anchor)\n return\n }\n\n // Fallback for non-document contexts (rare)\n const insertSingle = (nodeToInsert: Node, anchorNode: Node | null): Node => {\n if (nodeToInsert.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(nodeToInsert)\n }\n try {\n parent.insertBefore(nodeToInsert, anchorNode)\n return nodeToInsert\n } catch (e: unknown) {\n if (parent.ownerDocument) {\n try {\n const clone = parent.ownerDocument.importNode(nodeToInsert, true)\n parent.insertBefore(clone, anchorNode)\n return clone\n } catch {\n // Clone fallback failed\n }\n }\n throw e\n }\n }\n\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i]!\n if (node === undefined || node === null) continue\n\n // Handle DocumentFragment - insert children in reverse order\n const isFrag = node.nodeType === 11\n if (isFrag) {\n const childrenArr = Array.from(node.childNodes)\n for (let j = childrenArr.length - 1; j >= 0; j--) {\n const child = childrenArr[j]!\n anchor = insertSingle(child, anchor)\n }\n } else {\n anchor = insertSingle(node, anchor)\n }\n }\n}\n\n/**\n * Remove an array of nodes from the DOM.\n */\nexport function removeNodes(nodes: Node[]): void {\n for (const node of nodes) {\n node.parentNode?.removeChild(node)\n }\n}\n","/**\n * Fict Reactive DOM Binding System\n *\n * This module provides the core mechanisms for reactive DOM updates.\n * It bridges the gap between Fict's reactive system (signals, effects)\n * and the DOM, enabling fine-grained updates without a virtual DOM.\n *\n * Design Philosophy:\n * - Values wrapped in functions `() => T` are treated as reactive\n * - Static values are applied once without tracking\n * - The compiler transforms JSX expressions to use these primitives\n */\n\nimport {\n $$EVENTS,\n DelegatedEvents,\n UnitlessStyles,\n Properties,\n ChildProperties,\n getPropAlias,\n SVGNamespace,\n Aliases,\n} from './constants'\nimport { createRenderEffect } from './effect'\nimport { Fragment } from './jsx'\nimport {\n clearRoot,\n createRootContext,\n destroyRoot,\n flushOnMount,\n getCurrentRoot,\n handleError,\n handleSuspend,\n pushRoot,\n popRoot,\n registerRootCleanup,\n type RootContext,\n} from './lifecycle'\nimport { toNodeArray, removeNodes, insertNodesBefore } from './node-ops'\nimport { computed, createSignal, untrack, type Signal } from './signal'\nimport type { Cleanup, FictNode } from './types'\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\n/** A reactive value that can be either static or a getter function */\nexport type MaybeReactive<T> = T | (() => T)\n\n/** Internal type for createElement function reference */\nexport type CreateElementFn = (node: FictNode) => Node\n\n/** Handle returned by conditional/list bindings for cleanup */\nexport interface BindingHandle {\n /** Marker node(s) used for positioning */\n marker: Comment | DocumentFragment\n /** Flush pending content - call after markers are inserted into DOM */\n flush?: () => void\n /** Dispose function to clean up the binding */\n dispose: Cleanup\n}\n\n/** Managed child node with its dispose function */\ninterface ManagedBlock<T = unknown> {\n nodes: Node[]\n root: RootContext\n value: Signal<T>\n index: Signal<number>\n version: Signal<number>\n start: Comment\n end: Comment\n valueProxy: T\n renderCurrent: () => FictNode\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a value is reactive (a getter function)\n * Note: Event handlers (functions that take arguments) are NOT reactive values\n */\nexport function isReactive(value: unknown): value is () => unknown {\n return typeof value === 'function' && value.length === 0\n}\n\n/**\n * Unwrap a potentially reactive value to get the actual value\n */\nexport function unwrap<T>(value: MaybeReactive<T>): T {\n return isReactive(value) ? (value as () => T)() : value\n}\n\nexport const PRIMITIVE_PROXY = Symbol('fict:primitive-proxy')\nconst PRIMITIVE_PROXY_RAW_VALUE = Symbol('fict:primitive-proxy:raw-value')\n\n/**\n * Unwrap a primitive proxy value to get the raw primitive value.\n * This is primarily useful for advanced scenarios where you need the actual\n * primitive type (e.g., for typeof checks or strict equality comparisons).\n *\n * @param value - A potentially proxied primitive value\n * @returns The raw primitive value\n *\n * @example\n * ```ts\n * createList(\n * () => [1, 2, 3],\n * (item) => {\n * const raw = unwrapPrimitive(item)\n * typeof raw === 'number' // true\n * raw === 1 // true (for first item)\n * },\n * item => item\n * )\n * ```\n */\nexport function unwrapPrimitive<T>(value: T): T {\n if (value && typeof value === 'object' && PRIMITIVE_PROXY in value) {\n // Use the internal raw value getter\n const getRawValue = (value as Record<PropertyKey, unknown>)[PRIMITIVE_PROXY_RAW_VALUE]\n if (typeof getRawValue === 'function') {\n return (getRawValue as () => T)()\n }\n }\n return value\n}\n\nfunction createValueProxy<T>(read: () => T): T {\n const getPrimitivePrototype = (value: unknown): Record<PropertyKey, unknown> | undefined => {\n switch (typeof value) {\n case 'string':\n return String.prototype as unknown as Record<PropertyKey, unknown>\n case 'number':\n return Number.prototype as unknown as Record<PropertyKey, unknown>\n case 'boolean':\n return Boolean.prototype as unknown as Record<PropertyKey, unknown>\n case 'bigint':\n return BigInt.prototype as unknown as Record<PropertyKey, unknown>\n case 'symbol':\n return Symbol.prototype as unknown as Record<PropertyKey, unknown>\n default:\n return undefined\n }\n }\n\n const target: Record<PropertyKey, unknown> = {}\n const handler: ProxyHandler<Record<PropertyKey, unknown>> = {\n get(_target, prop, receiver) {\n if (prop === PRIMITIVE_PROXY) {\n return true\n }\n if (prop === PRIMITIVE_PROXY_RAW_VALUE) {\n return () => read()\n }\n if (prop === Symbol.toPrimitive) {\n return (hint: 'string' | 'number' | 'default') => {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n const toPrimitive = (value as { [Symbol.toPrimitive]?: (hint: string) => unknown })[\n Symbol.toPrimitive\n ]\n if (typeof toPrimitive === 'function') {\n return toPrimitive.call(value, hint)\n }\n if (hint === 'string') return value.toString?.() ?? '[object Object]'\n if (hint === 'number') return value.valueOf?.() ?? value\n return value.valueOf?.() ?? value\n }\n return value\n }\n }\n if (prop === 'valueOf') {\n return () => {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return typeof (value as { valueOf?: () => unknown }).valueOf === 'function'\n ? (value as { valueOf: () => unknown }).valueOf()\n : value\n }\n return value\n }\n }\n if (prop === 'toString') {\n return () => String(read())\n }\n\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Reflect.get(value as object, prop, receiver === _target ? value : receiver)\n }\n\n const proto = getPrimitivePrototype(value)\n if (proto && prop in proto) {\n const descriptor = Reflect.get(proto, prop, value)\n return typeof descriptor === 'function' ? descriptor.bind(value) : descriptor\n }\n return undefined\n },\n set(_target, prop, newValue, receiver) {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Reflect.set(value as object, prop, newValue, receiver === _target ? value : receiver)\n }\n return false\n },\n has(_target, prop) {\n if (prop === PRIMITIVE_PROXY || prop === PRIMITIVE_PROXY_RAW_VALUE) {\n return true\n }\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return prop in (value as object)\n }\n const proto = getPrimitivePrototype(value)\n return proto ? prop in proto : false\n },\n ownKeys() {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Reflect.ownKeys(value as object)\n }\n const proto = getPrimitivePrototype(value)\n return proto ? Reflect.ownKeys(proto) : []\n },\n getOwnPropertyDescriptor(_target, prop) {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Object.getOwnPropertyDescriptor(value as object, prop)\n }\n const proto = getPrimitivePrototype(value)\n return proto ? Object.getOwnPropertyDescriptor(proto, prop) || undefined : undefined\n },\n }\n\n return new Proxy(target, handler) as T\n}\n\n// ============================================================================\n// Text Binding\n// ============================================================================\n\n/**\n * Create a text node that reactively updates when the value changes.\n *\n * @example\n * ```ts\n * // Static text\n * createTextBinding(\"Hello\")\n *\n * // Reactive text (compiler output)\n * createTextBinding(() => $count())\n * ```\n */\nexport function createTextBinding(value: MaybeReactive<unknown>): Text {\n const text = document.createTextNode('')\n\n if (isReactive(value)) {\n // Reactive: create effect to update text when value changes\n createRenderEffect(() => {\n const v = (value as () => unknown)()\n const fmt = formatTextValue(v)\n if (text.data !== fmt) {\n text.data = fmt\n }\n })\n } else {\n // Static: set once\n text.data = formatTextValue(value)\n }\n\n return text\n}\n\n/**\n * Bind a reactive value to an existing text node.\n * This is a convenience function for binding to existing DOM nodes.\n */\nexport function bindText(textNode: Text, getValue: () => unknown): Cleanup {\n return createRenderEffect(() => {\n const value = formatTextValue(getValue())\n if (textNode.data !== value) {\n textNode.data = value\n }\n })\n}\n\n/**\n * Format a value for text content\n */\nfunction formatTextValue(value: unknown): string {\n if (value == null || value === false) {\n return ''\n }\n return String(value)\n}\n\n// ============================================================================\n// Attribute Binding\n// ============================================================================\n\n/** Attribute setter function type */\nexport type AttributeSetter = (el: HTMLElement, key: string, value: unknown) => void\n\n/**\n * Create a reactive attribute binding on an element.\n *\n * @example\n * ```ts\n * // Static attribute\n * createAttributeBinding(button, 'disabled', false, setAttribute)\n *\n * // Reactive attribute (compiler output)\n * createAttributeBinding(button, 'disabled', () => !$isValid(), setAttribute)\n * ```\n */\nexport function createAttributeBinding(\n el: HTMLElement,\n key: string,\n value: MaybeReactive<unknown>,\n setter: AttributeSetter,\n): void {\n if (isReactive(value)) {\n // Reactive: create effect to update attribute when value changes\n createRenderEffect(() => {\n setter(el, key, (value as () => unknown)())\n })\n } else {\n // Static: set once\n setter(el, key, value)\n }\n}\n\n/**\n * Bind a reactive value to an element's attribute.\n */\nexport function bindAttribute(el: HTMLElement, key: string, getValue: () => unknown): Cleanup {\n let prevValue: unknown = undefined\n return createRenderEffect(() => {\n const value = getValue()\n if (value === prevValue) return\n prevValue = value\n\n if (value === undefined || value === null || value === false) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n el.setAttribute(key, String(value))\n }\n })\n}\n\n/**\n * Bind a reactive value to an element's property.\n */\nexport function bindProperty(el: HTMLElement, key: string, getValue: () => unknown): Cleanup {\n // Keep behavior aligned with the legacy createElement+applyProps path in `dom.ts`,\n // where certain keys must behave like DOM properties and nullish clears should\n // reset to sensible defaults (e.g. value -> '', checked -> false).\n const PROPERTY_BINDING_KEYS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'readOnly',\n 'multiple',\n 'muted',\n ])\n\n let prevValue: unknown = undefined\n return createRenderEffect(() => {\n const next = getValue()\n if (next === prevValue) return\n prevValue = next\n\n if (PROPERTY_BINDING_KEYS.has(key) && (next === undefined || next === null)) {\n const fallback = key === 'checked' || key === 'selected' ? false : ''\n ;(el as unknown as Record<string, unknown>)[key] = fallback\n return\n }\n ;(el as unknown as Record<string, unknown>)[key] = next\n })\n}\n\n// ============================================================================\n// Style Binding\n// ============================================================================\n\n/**\n * Apply styles to an element, supporting reactive style objects/strings.\n */\nexport function createStyleBinding(\n el: HTMLElement,\n value: MaybeReactive<string | Record<string, string | number> | null | undefined>,\n): void {\n if (isReactive(value)) {\n let prev: unknown\n createRenderEffect(() => {\n const next = (value as () => unknown)()\n applyStyle(el, next, prev)\n prev = next\n })\n } else {\n applyStyle(el, value, undefined)\n }\n}\n\n/**\n * Bind a reactive style value to an existing element.\n */\nexport function bindStyle(\n el: HTMLElement,\n getValue: () => string | Record<string, string | number> | null | undefined,\n): Cleanup {\n let prev: unknown\n return createRenderEffect(() => {\n const next = getValue()\n applyStyle(el, next, prev)\n prev = next\n })\n}\n\n/**\n * Apply a style value to an element\n */\nfunction applyStyle(el: HTMLElement, value: unknown, prev: unknown): void {\n if (typeof value === 'string') {\n el.style.cssText = value\n } else if (value && typeof value === 'object') {\n const styles = value as Record<string, string | number>\n\n // If we previously set styles via string, clear before applying object map\n if (typeof prev === 'string') {\n el.style.cssText = ''\n }\n\n // Remove styles that were present in prev but not in current\n if (prev && typeof prev === 'object') {\n const prevStyles = prev as Record<string, string | number>\n for (const key of Object.keys(prevStyles)) {\n if (!(key in styles)) {\n const cssProperty = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n el.style.removeProperty(cssProperty)\n }\n }\n }\n\n for (const [prop, v] of Object.entries(styles)) {\n if (v != null) {\n // Handle camelCase to kebab-case conversion\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase()\n const unitless = isUnitlessStyleProperty(prop) || isUnitlessStyleProperty(cssProperty)\n const valueStr = typeof v === 'number' && !unitless ? `${v}px` : String(v)\n el.style.setProperty(cssProperty, valueStr)\n } else {\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase()\n el.style.removeProperty(cssProperty) // Handle null/undefined values by removing\n }\n }\n } else {\n // If value is null/undefined, we might want to clear styles set by PREVIOUS binding?\n // But blindly clearing cssText is dangerous.\n // Ideally we remove keys from prev.\n if (prev && typeof prev === 'object') {\n const prevStyles = prev as Record<string, string | number>\n for (const key of Object.keys(prevStyles)) {\n const cssProperty = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n el.style.removeProperty(cssProperty)\n }\n } else if (typeof prev === 'string') {\n el.style.cssText = ''\n }\n }\n}\n\nfunction isUnitlessStyleProperty(prop: string): boolean {\n return UnitlessStyles.has(prop)\n}\n\n// ============================================================================\n// Class Binding\n// ============================================================================\n\n/**\n * Apply class to an element, supporting reactive class values.\n */\nexport function createClassBinding(\n el: HTMLElement,\n value: MaybeReactive<string | Record<string, boolean> | null | undefined>,\n): void {\n if (isReactive(value)) {\n let prev: Record<string, boolean> = {}\n createRenderEffect(() => {\n const next = (value as () => unknown)()\n prev = applyClass(el, next, prev)\n })\n } else {\n applyClass(el, value, {})\n }\n}\n\n/**\n * Bind a reactive class value to an existing element.\n */\nexport function bindClass(\n el: HTMLElement,\n getValue: () => string | Record<string, boolean> | null | undefined,\n): Cleanup {\n let prev: Record<string, boolean> = {}\n return createRenderEffect(() => {\n const next = getValue()\n prev = applyClass(el, next, prev)\n })\n}\n\n/**\n * Toggle a class key (supports space-separated class names)\n */\nfunction toggleClassKey(node: HTMLElement, key: string, value: boolean): void {\n const classNames = key.trim().split(/\\s+/)\n for (let i = 0, len = classNames.length; i < len; i++) {\n node.classList.toggle(classNames[i]!, value)\n }\n}\n\n/**\n * Apply a class value to an element using classList.toggle for efficient updates.\n * Returns the new prev state for tracking.\n */\nfunction applyClass(el: HTMLElement, value: unknown, prev: unknown): Record<string, boolean> {\n const prevState = (prev && typeof prev === 'object' ? prev : {}) as Record<string, boolean>\n\n // Handle string value - full replacement\n if (typeof value === 'string') {\n el.className = value\n // Clear prev state since we're doing full replacement\n return {}\n }\n\n // Handle object value - incremental updates\n if (value && typeof value === 'object') {\n const classes = value as Record<string, boolean>\n const classKeys = Object.keys(classes)\n const prevKeys = Object.keys(prevState)\n\n // Remove classes that were true but are now false or missing\n for (let i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i]!\n if (!key || key === 'undefined' || classes[key]) continue\n toggleClassKey(el, key, false)\n delete prevState[key]\n }\n\n // Add classes that are now true\n for (let i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i]!\n const classValue = !!classes[key]\n if (!key || key === 'undefined' || prevState[key] === classValue || !classValue) continue\n toggleClassKey(el, key, true)\n prevState[key] = classValue\n }\n\n return prevState\n }\n\n // Handle null/undefined - clear all tracked classes\n if (!value) {\n for (const key of Object.keys(prevState)) {\n if (key && key !== 'undefined') {\n toggleClassKey(el, key, false)\n }\n }\n return {}\n }\n\n return prevState\n}\n\n/**\n * Exported classList function for direct use (compatible with dom-expressions)\n */\nexport function classList(\n node: HTMLElement,\n value: Record<string, boolean> | null | undefined,\n prev: Record<string, boolean> = {},\n): Record<string, boolean> {\n return applyClass(node, value, prev)\n}\n\n// ============================================================================\n// Child/Insert Binding (Dynamic Children)\n// ============================================================================\n\n/** Managed child node with its dispose function */\ninterface ManagedBlock<T = unknown> {\n nodes: Node[]\n root: RootContext\n value: Signal<T>\n index: Signal<number>\n version: Signal<number>\n start: Comment\n end: Comment\n valueProxy: T\n renderCurrent: () => FictNode\n}\n\n/**\n * Insert reactive content into a parent element.\n * This is a simpler API than createChildBinding for basic cases.\n *\n * @param parent - The parent element to insert into\n * @param getValue - Function that returns the value to render\n * @param markerOrCreateElement - Optional marker node to insert before, or createElementFn\n * @param createElementFn - Optional function to create DOM elements (when marker is provided)\n */\nexport function insert(\n parent: HTMLElement | DocumentFragment,\n getValue: () => FictNode,\n markerOrCreateElement?: Node | CreateElementFn,\n createElementFn?: CreateElementFn,\n): Cleanup {\n let marker: Node\n let ownsMarker = false\n let createFn: CreateElementFn | undefined = createElementFn\n\n if (markerOrCreateElement instanceof Node) {\n marker = markerOrCreateElement\n createFn = createElementFn\n } else {\n marker = document.createComment('fict:insert')\n parent.appendChild(marker)\n createFn = markerOrCreateElement as CreateElementFn | undefined\n ownsMarker = true\n }\n\n let currentNodes: Node[] = []\n let currentText: Text | null = null\n let currentRoot: RootContext | null = null\n\n const clearCurrentNodes = () => {\n if (currentNodes.length > 0) {\n removeNodes(currentNodes)\n currentNodes = []\n }\n }\n\n const setTextNode = (textValue: string, shouldInsert: boolean, parentNode: ParentNode & Node) => {\n if (!currentText) {\n currentText = document.createTextNode(textValue)\n } else if (currentText.data !== textValue) {\n currentText.data = textValue\n }\n\n if (!shouldInsert) {\n clearCurrentNodes()\n return\n }\n\n if (currentNodes.length === 1 && currentNodes[0] === currentText) {\n return\n }\n\n clearCurrentNodes()\n insertNodesBefore(parentNode, [currentText], marker)\n currentNodes = [currentText]\n }\n\n const dispose = createRenderEffect(() => {\n const value = getValue()\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n const isPrimitive =\n value == null ||\n value === false ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n\n if (isPrimitive) {\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n if (!parentNode) {\n clearCurrentNodes()\n return\n }\n const textValue = value == null || value === false ? '' : String(value)\n const shouldInsert = value != null && value !== false\n setTextNode(textValue, shouldInsert, parentNode)\n return\n }\n\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n clearCurrentNodes()\n\n const root = createRootContext()\n const prev = pushRoot(root)\n let nodes: Node[] = []\n try {\n let newNode: Node | Node[]\n\n if (value instanceof Node) {\n newNode = value\n } else if (Array.isArray(value)) {\n if (value.every(v => v instanceof Node)) {\n newNode = value as Node[]\n } else {\n newNode = createFn ? createFn(value) : document.createTextNode(String(value))\n }\n } else {\n newNode = createFn ? createFn(value) : document.createTextNode(String(value))\n }\n\n nodes = toNodeArray(newNode)\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n } finally {\n popRoot(prev)\n flushOnMount(root)\n }\n\n currentRoot = root\n currentNodes = nodes\n })\n\n return () => {\n dispose()\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n clearCurrentNodes()\n if (ownsMarker) {\n marker.parentNode?.removeChild(marker)\n }\n }\n}\n\n/**\n * Create a reactive child binding that updates when the child value changes.\n * This is used for dynamic expressions like `{show && <Modal />}` or `{items.map(...)}`.\n *\n * @example\n * ```ts\n * // Reactive child (compiler output for {count})\n * createChildBinding(parent, () => $count(), createElement)\n *\n * // Reactive conditional (compiler output for {show && <Modal />})\n * createChildBinding(parent, () => $show() && jsx(Modal, {}), createElement)\n * ```\n */\nexport function createChildBinding(\n parent: HTMLElement | DocumentFragment,\n getValue: () => FictNode,\n createElementFn: CreateElementFn,\n): BindingHandle {\n const marker = document.createComment('fict:child')\n parent.appendChild(marker)\n\n const dispose = createRenderEffect(() => {\n const root = createRootContext()\n const prev = pushRoot(root)\n let nodes: Node[] = []\n let handledError = false\n try {\n const value = getValue()\n\n // Skip if value is null/undefined/false\n if (value == null || value === false) {\n return\n }\n\n const output = createElementFn(value)\n nodes = toNodeArray(output)\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n return () => {\n destroyRoot(root)\n removeNodes(nodes)\n }\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n throw err\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n }\n }\n })\n\n return {\n marker,\n dispose: () => {\n dispose()\n marker.parentNode?.removeChild(marker)\n },\n }\n}\n\n// ============================================================================\n// Event Delegation System\n// ============================================================================\n\n// Extend HTMLElement/Document type to support event delegation\ndeclare global {\n interface HTMLElement {\n _$host?: HTMLElement\n [key: `$$${string}`]: EventListener | [EventListener, unknown] | undefined\n [key: `$$${string}Data`]: unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface Document extends Record<string, unknown> {}\n}\n\n/**\n * Initialize event delegation for a set of event names.\n * Events will be handled at the document level and dispatched to the appropriate handlers.\n *\n * @param eventNames - Array of event names to delegate\n * @param doc - The document to attach handlers to (default: window.document)\n *\n * @example\n * ```ts\n * // Called automatically by the compiler for delegated events\n * delegateEvents(['click', 'input', 'keydown'])\n * ```\n */\nexport function delegateEvents(eventNames: string[], doc: Document = window.document): void {\n const e = (doc[$$EVENTS] as Set<string>) || (doc[$$EVENTS] = new Set<string>())\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i]!\n if (!e.has(name)) {\n e.add(name)\n doc.addEventListener(name, globalEventHandler)\n }\n }\n}\n\n/**\n * Clear all delegated event handlers from a document.\n *\n * @param doc - The document to clear handlers from (default: window.document)\n */\nexport function clearDelegatedEvents(doc: Document = window.document): void {\n const e = doc[$$EVENTS] as Set<string> | undefined\n if (e) {\n for (const name of e.keys()) {\n doc.removeEventListener(name, globalEventHandler)\n }\n delete doc[$$EVENTS]\n }\n}\n\n/**\n * Global event handler for delegated events.\n * Walks up the DOM tree to find and call handlers stored as $$eventName properties.\n */\nfunction globalEventHandler(e: Event): void {\n let node = e.target as HTMLElement | null\n const key = `$$${e.type}` as const\n const dataKey = `${key}Data` as `$$${string}Data`\n const oriTarget = e.target\n const oriCurrentTarget = e.currentTarget\n\n // Retarget helper for shadow DOM and portals\n const retarget = (value: EventTarget) =>\n Object.defineProperty(e, 'target', {\n configurable: true,\n value,\n })\n\n // Handler for each node in the bubble path\n const handleNode = (): boolean => {\n if (!node) return false\n const handler = node[key]\n if (handler && !(node as HTMLButtonElement).disabled) {\n const resolveData = (value: unknown): unknown => {\n if (typeof value === 'function') {\n try {\n const fn = value as (event?: Event) => unknown\n return fn.length > 0 ? fn(e) : fn()\n } catch {\n return (value as () => unknown)()\n }\n }\n return value\n }\n\n const rawData = (node as any)[dataKey] as unknown\n const hasData = rawData !== undefined\n const resolvedNodeData = hasData ? resolveData(rawData) : undefined\n if (typeof handler === 'function') {\n // Handler with optional data: handler(data, event?) or handler(event)\n if (hasData) {\n ;(handler as (data: unknown, e: Event) => void).call(node, resolvedNodeData, e)\n } else {\n ;(handler as EventListener).call(node, e)\n }\n } else if (Array.isArray(handler)) {\n const tupleData = resolveData(handler[1])\n ;(handler[0] as (data: unknown, e: Event) => void).call(node, tupleData, e)\n }\n if (e.cancelBubble) return false\n }\n // Handle shadow DOM host retargeting\n const shadowHost = (node as unknown as ShadowRoot).host\n if (\n shadowHost &&\n typeof shadowHost !== 'string' &&\n !(shadowHost as HTMLElement)._$host &&\n node.contains(e.target as Node)\n ) {\n retarget(shadowHost as EventTarget)\n }\n return true\n }\n\n // Walk up tree helper\n const walkUpTree = (): void => {\n while (handleNode() && node) {\n node = (node._$host ||\n node.parentNode ||\n (node as unknown as ShadowRoot).host) as HTMLElement | null\n }\n }\n\n // Simulate currentTarget\n Object.defineProperty(e, 'currentTarget', {\n configurable: true,\n get() {\n return node || document\n },\n })\n\n // Use composedPath for shadow DOM support\n if (e.composedPath) {\n const path = e.composedPath()\n retarget(path[0] as EventTarget)\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i] as HTMLElement\n if (!handleNode()) break\n // Handle portal event bubbling\n if (node._$host) {\n node = node._$host\n walkUpTree()\n break\n }\n // Don't bubble above root of event delegation\n if (node.parentNode === oriCurrentTarget) {\n break\n }\n }\n } else {\n // Fallback for browsers without composedPath\n walkUpTree()\n }\n\n // Reset target\n retarget(oriTarget as EventTarget)\n}\n\n/**\n * Add an event listener to an element.\n * If the event is in DelegatedEvents, it uses event delegation for better performance.\n *\n * @param node - The element to add the listener to\n * @param name - The event name (lowercase)\n * @param handler - The event handler or [handler, data] tuple\n * @param delegate - Whether to use delegation (auto-detected based on event name)\n */\nexport function addEventListener(\n node: HTMLElement,\n name: string,\n handler: EventListener | [EventListener, unknown] | null | undefined,\n delegate?: boolean,\n): void {\n if (handler == null) return\n\n if (delegate) {\n // Event delegation: store handler on element\n if (Array.isArray(handler)) {\n ;(node as unknown as Record<string, unknown>)[`$$${name}`] = handler[0]\n ;(node as unknown as Record<string, unknown>)[`$$${name}Data`] = handler[1]\n } else {\n ;(node as unknown as Record<string, unknown>)[`$$${name}`] = handler\n }\n } else if (Array.isArray(handler)) {\n // Non-delegated with data binding\n const handlerFn = handler[0] as (data: unknown, e: Event) => void\n node.addEventListener(name, (e: Event) => handlerFn.call(node, handler[1], e))\n } else {\n // Regular event listener\n node.addEventListener(name, handler as EventListener)\n }\n}\n\n// ============================================================================\n// Event Binding\n// ============================================================================\n\n/**\n * Bind an event listener to an element.\n * Uses event delegation for better performance when applicable.\n *\n * @example\n * ```ts\n * // Static event\n * bindEvent(button, 'click', handleClick)\n *\n * // Reactive event (compiler output)\n * bindEvent(button, 'click', () => $handler())\n *\n * // With modifiers\n * bindEvent(button, 'click', handler, { capture: true, passive: true, once: true })\n * ```\n */\nexport function bindEvent(\n el: HTMLElement,\n eventName: string,\n handler: EventListenerOrEventListenerObject | null | undefined,\n options?: boolean | AddEventListenerOptions,\n): Cleanup {\n if (handler == null) return () => {}\n const rootRef = getCurrentRoot()\n\n // Optimization: Global Event Delegation\n // If the event is delegatable and no special options (capture, passive) are used,\n // we attach the handler to the element property and rely on the global listener.\n if (DelegatedEvents.has(eventName) && !options) {\n const key = `$$${eventName}`\n\n // Ensure global delegation is active for this event\n delegateEvents([eventName])\n\n const createWrapped = (\n resolve: () => EventListenerOrEventListenerObject | null | undefined,\n ) => {\n const wrapped = function (this: any, ...args: any[]) {\n try {\n const fn = resolve()\n if (typeof fn === 'function') {\n return (fn as EventListener).apply(this, args as [Event])\n } else if (fn && typeof fn.handleEvent === 'function') {\n return fn.handleEvent.apply(fn, args as [Event])\n }\n } catch (err) {\n handleError(err, { source: 'event', eventName }, rootRef)\n }\n }\n return wrapped\n }\n\n const resolveHandler = isReactive(handler)\n ? (handler as () => EventListenerOrEventListenerObject | null | undefined)\n : () => handler\n\n // Cache a single wrapper that resolves the latest handler when invoked\n // @ts-expect-error - using dynamic property for delegation\n el[key] = createWrapped(resolveHandler)\n\n // Cleanup: remove property (no effect needed for static or reactive)\n return () => {\n // @ts-expect-error - using dynamic property for delegation\n el[key] = undefined\n }\n }\n\n // Fallback: Native addEventListener\n // Used for non-delegated events or when options are present\n const getHandler = isReactive(handler) ? (handler as () => unknown) : () => handler\n\n // Create wrapped handler that resolves reactive handlers\n const wrapped: EventListener = event => {\n try {\n const resolved = getHandler()\n if (typeof resolved === 'function') {\n ;(resolved as EventListener)(event)\n } else if (resolved && typeof (resolved as EventListenerObject).handleEvent === 'function') {\n ;(resolved as EventListenerObject).handleEvent(event)\n }\n } catch (err) {\n if (handleError(err, { source: 'event', eventName }, rootRef)) {\n return\n }\n throw err\n }\n }\n\n el.addEventListener(eventName, wrapped, options)\n const cleanup = () => el.removeEventListener(eventName, wrapped, options)\n registerRootCleanup(cleanup)\n return cleanup\n}\n\n// ============================================================================\n// Ref Binding\n// ============================================================================\n\n/**\n * Bind a ref to an element.\n * Supports both callback refs and ref objects.\n *\n * @param el - The element to bind the ref to\n * @param ref - Either a callback function, a ref object, or a reactive getter\n * @returns Cleanup function\n *\n * @example\n * ```ts\n * // Callback ref\n * bindRef(el, (element) => { store.input = element })\n *\n * // Ref object\n * const inputRef = createRef()\n * bindRef(el, inputRef)\n *\n * // Reactive ref (compiler output)\n * bindRef(el, () => props.ref)\n * ```\n */\nexport function bindRef(el: HTMLElement, ref: unknown): Cleanup {\n if (ref == null) return () => {}\n\n // Handle reactive refs (getters)\n const getRef = isReactive(ref) ? (ref as () => unknown) : () => ref\n\n const applyRef = (refValue: unknown) => {\n if (refValue == null) return\n\n if (typeof refValue === 'function') {\n // Callback ref: call with element\n ;(refValue as (el: HTMLElement) => void)(el)\n } else if (typeof refValue === 'object' && 'current' in refValue) {\n // Ref object: set current property\n ;(refValue as { current: HTMLElement | null }).current = el\n }\n }\n\n // Apply ref initially\n const initialRef = getRef()\n applyRef(initialRef)\n\n // For reactive refs, track changes\n if (isReactive(ref)) {\n const cleanup = createRenderEffect(() => {\n const currentRef = getRef()\n applyRef(currentRef)\n })\n registerRootCleanup(cleanup)\n\n // On cleanup, null out the ref\n const nullifyCleanup = () => {\n const currentRef = getRef()\n if (currentRef && typeof currentRef === 'object' && 'current' in currentRef) {\n ;(currentRef as { current: HTMLElement | null }).current = null\n }\n }\n registerRootCleanup(nullifyCleanup)\n\n return () => {\n cleanup()\n nullifyCleanup()\n }\n }\n\n // For static refs, register cleanup to null out on unmount\n const cleanup = () => {\n const refValue = getRef()\n if (refValue && typeof refValue === 'object' && 'current' in refValue) {\n ;(refValue as { current: HTMLElement | null }).current = null\n }\n }\n registerRootCleanup(cleanup)\n\n return cleanup\n}\n\n// ============================================================================\n// Spread Props\n// ============================================================================\n\n/**\n * Apply spread props to an element with reactive updates.\n * This handles dynamic spread like `<div {...props}>`.\n *\n * @param node - The element to apply props to\n * @param props - The props object (may have reactive getters)\n * @param isSVG - Whether this is an SVG element\n * @param skipChildren - Whether to skip children handling\n * @returns The previous props for tracking changes\n *\n * @example\n * ```ts\n * // Compiler output for <div {...props} />\n * spread(el, props, false, false)\n * ```\n */\nexport function spread(\n node: HTMLElement,\n props: Record<string, unknown> = {},\n isSVG = false,\n skipChildren = false,\n): Record<string, unknown> {\n const prevProps: Record<string, unknown> = {}\n\n // Handle children if not skipped\n if (!skipChildren && 'children' in props) {\n createRenderEffect(() => {\n prevProps.children = props.children\n })\n }\n\n // Handle ref\n createRenderEffect(() => {\n if (typeof props.ref === 'function') {\n ;(props.ref as (el: HTMLElement) => void)(node)\n }\n })\n\n // Handle all other props\n createRenderEffect(() => {\n assign(node, props, isSVG, true, prevProps, true)\n })\n\n return prevProps\n}\n\n/**\n * Assign props to a node, tracking previous values for efficient updates.\n * This is the core prop assignment logic used by spread.\n *\n * @param node - The element to assign props to\n * @param props - New props object\n * @param isSVG - Whether this is an SVG element\n * @param skipChildren - Whether to skip children handling\n * @param prevProps - Previous props for comparison\n * @param skipRef - Whether to skip ref handling\n */\nexport function assign(\n node: HTMLElement,\n props: Record<string, unknown>,\n isSVG = false,\n skipChildren = false,\n prevProps: Record<string, unknown> = {},\n skipRef = false,\n): void {\n props = props || {}\n\n // Remove props that are no longer present\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === 'children') continue\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props)\n }\n }\n\n // Set or update props\n for (const prop in props) {\n if (prop === 'children') {\n if (!skipChildren) {\n // Handle children insertion\n prevProps.children = props.children\n }\n continue\n }\n const value = props[prop]\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props)\n }\n}\n\n/**\n * Assign a single prop to a node.\n */\nfunction assignProp(\n node: HTMLElement,\n prop: string,\n value: unknown,\n prev: unknown,\n isSVG: boolean,\n skipRef: boolean,\n props: Record<string, unknown>,\n): unknown {\n // Style handling\n if (prop === 'style') {\n applyStyle(node, value, prev)\n return value\n }\n\n // classList handling\n if (prop === 'classList') {\n return applyClass(node, value, prev)\n }\n\n // Skip if value unchanged\n if (value === prev) return prev\n\n // Ref handling\n if (prop === 'ref') {\n if (!skipRef && typeof value === 'function') {\n ;(value as (el: HTMLElement) => void)(node)\n }\n return value\n }\n\n // Event handling: on:eventname\n if (prop.slice(0, 3) === 'on:') {\n const eventName = prop.slice(3)\n if (prev) node.removeEventListener(eventName, prev as EventListener)\n if (value) node.addEventListener(eventName, value as EventListener)\n return value\n }\n\n // Capture event handling: oncapture:eventname\n if (prop.slice(0, 10) === 'oncapture:') {\n const eventName = prop.slice(10)\n if (prev) node.removeEventListener(eventName, prev as EventListener, true)\n if (value) node.addEventListener(eventName, value as EventListener, true)\n return value\n }\n\n // Standard event handling: onClick, onInput, etc.\n if (prop.slice(0, 2) === 'on') {\n const eventName = prop.slice(2).toLowerCase()\n const shouldDelegate = DelegatedEvents.has(eventName)\n if (!shouldDelegate && prev) {\n const handler = Array.isArray(prev) ? prev[0] : prev\n node.removeEventListener(eventName, handler as EventListener)\n }\n if (shouldDelegate || value) {\n addEventListener(node, eventName, value as EventListener, shouldDelegate)\n if (shouldDelegate) delegateEvents([eventName])\n }\n return value\n }\n\n // Explicit attribute: attr:name\n if (prop.slice(0, 5) === 'attr:') {\n if (value == null) node.removeAttribute(prop.slice(5))\n else node.setAttribute(prop.slice(5), String(value))\n return value\n }\n\n // Explicit boolean attribute: bool:name\n if (prop.slice(0, 5) === 'bool:') {\n if (value) node.setAttribute(prop.slice(5), '')\n else node.removeAttribute(prop.slice(5))\n return value\n }\n\n // Explicit property: prop:name\n if (prop.slice(0, 5) === 'prop:') {\n ;(node as unknown as Record<string, unknown>)[prop.slice(5)] = value\n return value\n }\n\n // Class/className handling\n if (prop === 'class' || prop === 'className') {\n if (value == null) node.removeAttribute('class')\n else node.className = String(value)\n return value\n }\n\n // Check if custom element\n const isCE = node.nodeName.includes('-') || 'is' in props\n\n // Property handling (for non-SVG elements)\n if (!isSVG) {\n const propAlias = getPropAlias(prop, node.tagName)\n const isProperty = Properties.has(prop)\n const isChildProp = ChildProperties.has(prop)\n\n if (propAlias || isProperty || isChildProp || isCE) {\n const propName = propAlias || prop\n if (isCE && !isProperty && !isChildProp) {\n ;(node as unknown as Record<string, unknown>)[toPropertyName(propName)] = value\n } else {\n ;(node as unknown as Record<string, unknown>)[propName] = value\n }\n return value\n }\n }\n\n // SVG namespace handling\n if (isSVG && prop.indexOf(':') > -1) {\n const [prefix, name] = prop.split(':')\n const ns = SVGNamespace[prefix!]\n if (ns) {\n if (value == null) node.removeAttributeNS(ns, name!)\n else node.setAttributeNS(ns, name!, String(value))\n return value\n }\n }\n\n // Default: set as attribute\n const attrName = Aliases[prop] || prop\n if (value == null) node.removeAttribute(attrName)\n else node.setAttribute(attrName, String(value))\n return value\n}\n\n/**\n * Convert kebab-case to camelCase for property names\n */\nfunction toPropertyName(name: string): string {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase())\n}\n\n// ============================================================================\n// Conditional Rendering\n// ============================================================================\n\n/**\n * Create a conditional rendering binding.\n * Efficiently renders one of two branches based on a condition.\n *\n * This is an optimized version for `{condition ? <A /> : <B />}` patterns\n * where both branches are known statically.\n *\n * @example\n * ```ts\n * // Compiler output for {show ? <A /> : <B />}\n * createConditional(\n * () => $show(),\n * () => jsx(A, {}),\n * () => jsx(B, {}),\n * createElement\n * )\n * ```\n */\nexport function createConditional(\n condition: () => boolean,\n renderTrue: () => FictNode,\n createElementFn: CreateElementFn,\n renderFalse?: () => FictNode,\n): BindingHandle {\n const startMarker = document.createComment('fict:cond:start')\n const endMarker = document.createComment('fict:cond:end')\n const fragment = document.createDocumentFragment()\n fragment.append(startMarker, endMarker)\n\n let currentNodes: Node[] = []\n let currentRoot: RootContext | null = null\n let lastCondition: boolean | undefined = undefined\n let pendingRender = false\n\n // Use computed to memoize condition value - this prevents the effect from\n // re-running when condition dependencies change but the boolean result stays same.\n // This is critical because re-running the effect would purge child effect deps\n // (like bindText) even if we early-return, breaking fine-grained reactivity.\n const conditionMemo = computed(condition)\n\n const runConditional = () => {\n const cond = conditionMemo()\n const parent = startMarker.parentNode as (ParentNode & Node) | null\n if (!parent) {\n pendingRender = true\n return\n }\n pendingRender = false\n\n if (lastCondition === cond && currentNodes.length > 0) {\n return\n }\n if (lastCondition === cond && lastCondition === false && renderFalse === undefined) {\n return\n }\n lastCondition = cond\n\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n removeNodes(currentNodes)\n currentNodes = []\n\n const render = cond ? renderTrue : renderFalse\n if (!render) {\n return\n }\n\n const root = createRootContext()\n const prev = pushRoot(root)\n let handledError = false\n try {\n // Use untrack to prevent render function's signal accesses from being\n // tracked by createConditional's effect. This ensures that signals used\n // inside the render function (e.g., nested if conditions) don't cause\n // createConditional to re-run, which would purge child effect deps.\n const output = untrack(render)\n if (output == null || output === false) {\n return\n }\n const el = createElementFn(output)\n const nodes = toNodeArray(el)\n insertNodesBefore(parent, nodes, endMarker)\n currentNodes = nodes\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n throw err\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n currentRoot = root\n } else {\n currentRoot = null\n }\n }\n }\n\n const dispose = createRenderEffect(runConditional)\n\n return {\n marker: fragment,\n flush: () => {\n if (pendingRender) {\n runConditional()\n }\n },\n dispose: () => {\n dispose()\n if (currentRoot) {\n destroyRoot(currentRoot)\n }\n removeNodes(currentNodes)\n currentNodes = []\n startMarker.parentNode?.removeChild(startMarker)\n endMarker.parentNode?.removeChild(endMarker)\n },\n }\n}\n\n// ============================================================================\n// List Rendering\n// ============================================================================\n\n/** Key extractor function type */\nexport type KeyFn<T> = (item: T, index: number) => string | number\n\n/**\n * Create a reactive list rendering binding with optional keying.\n */\nexport function createList<T>(\n items: () => T[],\n renderItem: (item: T, index: number) => FictNode,\n createElementFn: CreateElementFn,\n getKey?: KeyFn<T>,\n): BindingHandle {\n const startMarker = document.createComment('fict:list:start')\n const endMarker = document.createComment('fict:list:end')\n const fragment = document.createDocumentFragment()\n fragment.append(startMarker, endMarker)\n\n const nodeMap = new Map<string | number, ManagedBlock<T>>()\n let pendingItems: T[] | null = null\n\n const runListUpdate = () => {\n const arr = items()\n const parent = startMarker.parentNode as (ParentNode & Node) | null\n if (!parent) {\n pendingItems = arr\n return\n }\n pendingItems = null\n\n const newNodeMap = new Map<string | number, ManagedBlock<T>>()\n const blocks: ManagedBlock<T>[] = []\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i]! as T\n const key = getKey ? getKey(item, i) : i\n const existing = nodeMap.get(key)\n\n let block: ManagedBlock<T>\n if (existing) {\n const previousValue = existing.value()\n if (!getKey && previousValue !== item) {\n destroyRoot(existing.root)\n removeBlockNodes(existing)\n block = mountBlock(item, i, renderItem, parent, endMarker, createElementFn)\n } else {\n const previousIndex = existing.index()\n existing.value(item)\n existing.index(i)\n\n if (previousValue === item) {\n bumpBlockVersion(existing)\n }\n\n const needsRerender = getKey ? true : previousValue !== item || previousIndex !== i\n block = needsRerender ? rerenderBlock(existing, createElementFn) : existing\n }\n } else {\n block = mountBlock(item, i, renderItem, parent, endMarker, createElementFn)\n }\n\n newNodeMap.set(key, block)\n blocks.push(block)\n }\n\n for (const [key, managed] of nodeMap) {\n if (!newNodeMap.has(key)) {\n destroyRoot(managed.root)\n removeBlockNodes(managed)\n }\n }\n\n let anchor: Node = endMarker\n for (let i = blocks.length - 1; i >= 0; i--) {\n const block = blocks[i]!\n insertNodesBefore(parent, block.nodes, anchor)\n if (block.nodes.length > 0) {\n anchor = block.nodes[0]!\n }\n }\n\n nodeMap.clear()\n for (const [k, v] of newNodeMap) {\n nodeMap.set(k, v)\n }\n }\n\n const dispose = createRenderEffect(runListUpdate)\n\n return {\n marker: fragment,\n flush: () => {\n if (pendingItems !== null) {\n runListUpdate()\n }\n },\n dispose: () => {\n dispose()\n for (const [, managed] of nodeMap) {\n destroyRoot(managed.root)\n removeBlockNodes(managed)\n }\n nodeMap.clear()\n startMarker.parentNode?.removeChild(startMarker)\n endMarker.parentNode?.removeChild(endMarker)\n },\n }\n}\n\n// ============================================================================\n// Show/Hide Helper\n// ==========================================================================\n\n/**\n * Create a show/hide binding that uses CSS display instead of DOM manipulation.\n * More efficient than conditional when the content is expensive to create.\n *\n * @example\n * ```ts\n * createShow(container, () => $visible())\n * ```\n */\nexport function createShow(el: HTMLElement, condition: () => boolean, displayValue?: string): void {\n const originalDisplay = displayValue ?? el.style.display\n createRenderEffect(() => {\n el.style.display = condition() ? originalDisplay : 'none'\n })\n}\n\n// ============================================================================\n// Portal\n// ============================================================================\n\n/**\n * Create a portal that renders content into a different DOM container.\n *\n * @example\n * ```ts\n * createPortal(\n * document.body,\n * () => jsx(Modal, { children: 'Hello' }),\n * createElement\n * )\n * ```\n */\nexport function createPortal(\n container: HTMLElement,\n render: () => FictNode,\n createElementFn: CreateElementFn,\n): BindingHandle {\n // Capture the parent root BEFORE any effects run\n // This is needed because createRenderEffect will push/pop its own root context\n const parentRoot = getCurrentRoot()\n\n const marker = document.createComment('fict:portal')\n container.appendChild(marker)\n\n let currentNodes: Node[] = []\n let currentRoot: RootContext | null = null\n\n const dispose = createRenderEffect(() => {\n // Clean up previous\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n if (currentNodes.length > 0) {\n removeNodes(currentNodes)\n currentNodes = []\n }\n\n // Create new content\n const root = createRootContext()\n const prev = pushRoot(root)\n let handledError = false\n try {\n const output = render()\n if (output != null && output !== false) {\n const el = createElementFn(output)\n const nodes = toNodeArray(el)\n if (marker.parentNode) {\n insertNodesBefore(marker.parentNode as ParentNode & Node, nodes, marker)\n }\n currentNodes = nodes\n }\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n destroyRoot(root)\n currentNodes = []\n return\n }\n if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n destroyRoot(root)\n currentNodes = []\n return\n }\n throw err\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n currentRoot = root\n } else {\n currentRoot = null\n }\n }\n })\n\n // The portal's dispose function must be named so we can register it for cleanup\n const portalDispose = () => {\n dispose()\n if (currentRoot) {\n destroyRoot(currentRoot)\n }\n if (currentNodes.length > 0) {\n removeNodes(currentNodes)\n }\n marker.parentNode?.removeChild(marker)\n }\n\n // Register the portal's cleanup with the parent component's root context\n // This ensures the portal is cleaned up when the parent unmounts\n // We use parentRoot (captured before createRenderEffect) to avoid registering\n // with the portal's internal root which would be destroyed separately\n if (parentRoot) {\n parentRoot.destroyCallbacks.push(portalDispose)\n }\n\n return {\n marker,\n dispose: portalDispose,\n }\n}\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nfunction mountBlock<T>(\n initialValue: T,\n initialIndex: number,\n renderItem: (item: T, index: number) => FictNode,\n parent: ParentNode & Node,\n anchor: Node,\n createElementFn: CreateElementFn,\n): ManagedBlock<T> {\n const start = document.createComment('fict:block:start')\n const end = document.createComment('fict:block:end')\n const valueSig = createSignal<T>(initialValue)\n const indexSig = createSignal<number>(initialIndex)\n const versionSig = createSignal(0)\n const valueProxy = createValueProxy(() => {\n versionSig()\n return valueSig()\n }) as T\n const renderCurrent = () => renderItem(valueProxy, indexSig())\n const root = createRootContext()\n const prev = pushRoot(root)\n const nodes: Node[] = [start]\n let handledError = false\n try {\n const output = renderCurrent()\n if (output != null && output !== false) {\n const el = createElementFn(output)\n const rendered = toNodeArray(el)\n nodes.push(...rendered)\n }\n nodes.push(end)\n insertNodesBefore(parent, nodes, anchor)\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n nodes.push(end)\n insertNodesBefore(parent, nodes, anchor)\n } else if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n nodes.push(end)\n insertNodesBefore(parent, nodes, anchor)\n } else {\n throw err\n }\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n } else {\n destroyRoot(root)\n }\n }\n return {\n nodes,\n root,\n value: valueSig,\n index: indexSig,\n version: versionSig,\n start,\n end,\n valueProxy,\n renderCurrent,\n }\n}\n\nfunction rerenderBlock<T>(\n block: ManagedBlock<T>,\n createElementFn: CreateElementFn,\n): ManagedBlock<T> {\n const currentContent = block.nodes.slice(1, Math.max(1, block.nodes.length - 1))\n const currentNode = currentContent.length === 1 ? currentContent[0] : null\n\n clearRoot(block.root)\n\n const prev = pushRoot(block.root)\n let nextOutput: FictNode\n let handledError = false\n try {\n nextOutput = block.renderCurrent()\n } catch (err) {\n if (handleSuspend(err as any, block.root)) {\n handledError = true\n popRoot(prev)\n destroyRoot(block.root)\n block.nodes = [block.start, block.end]\n return block\n }\n if (handleError(err, { source: 'renderChild' }, block.root)) {\n handledError = true\n popRoot(prev)\n destroyRoot(block.root)\n block.nodes = [block.start, block.end]\n return block\n }\n throw err\n } finally {\n if (!handledError) {\n popRoot(prev)\n }\n }\n\n if (isFragmentVNode(nextOutput) && currentContent.length > 0) {\n const patched = patchFragmentChildren(currentContent, nextOutput.props?.children)\n if (patched) {\n block.nodes = [block.start, ...currentContent, block.end]\n return block\n }\n }\n\n if (currentNode && patchNode(currentNode, nextOutput)) {\n block.nodes = [block.start, currentNode, block.end]\n return block\n }\n\n clearContent(block)\n\n if (nextOutput != null && nextOutput !== false) {\n const newNodes = toNodeArray(\n nextOutput instanceof Node ? nextOutput : (createElementFn(nextOutput) as Node),\n )\n insertNodesBefore(block.start.parentNode as ParentNode & Node, newNodes, block.end)\n block.nodes = [block.start, ...newNodes, block.end]\n } else {\n block.nodes = [block.start, block.end]\n }\n return block\n}\n\nfunction patchElement(el: Element, output: FictNode): boolean {\n if (\n output === null ||\n output === undefined ||\n output === false ||\n typeof output === 'string' ||\n typeof output === 'number'\n ) {\n el.textContent =\n output === null || output === undefined || output === false ? '' : String(output)\n return true\n }\n\n if (output instanceof Text) {\n el.textContent = output.data\n return true\n }\n\n if (output && typeof output === 'object' && !(output instanceof Node)) {\n const vnode = output as { type?: unknown; props?: Record<string, unknown> }\n if (typeof vnode.type === 'string' && vnode.type.toLowerCase() === el.tagName.toLowerCase()) {\n const children = vnode.props?.children\n const props = vnode.props ?? {}\n\n // Update props (except children and key)\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children' || key === 'key') continue\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null ||\n value === undefined\n ) {\n if (key === 'class' || key === 'className') {\n el.setAttribute('class', value === false || value === null ? '' : String(value))\n } else if (key === 'style' && typeof value === 'string') {\n ;(el as HTMLElement).style.cssText = value\n } else if (value === false || value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n el.setAttribute(key, String(value))\n }\n }\n }\n\n // Handle primitive children\n if (\n typeof children === 'string' ||\n typeof children === 'number' ||\n children === null ||\n children === undefined ||\n children === false\n ) {\n el.textContent =\n children === null || children === undefined || children === false ? '' : String(children)\n return true\n }\n\n // Handle single nested VNode child - recursively patch\n if (\n children &&\n typeof children === 'object' &&\n !Array.isArray(children) &&\n !(children instanceof Node)\n ) {\n const childVNode = children as { type?: unknown; props?: Record<string, unknown> }\n if (typeof childVNode.type === 'string') {\n // Find matching child element in the DOM\n const childEl = el.querySelector(childVNode.type)\n if (childEl && patchElement(childEl, children as FictNode)) {\n return true\n }\n }\n }\n\n return false\n }\n }\n\n if (output instanceof Node) {\n if (output.nodeType === Node.ELEMENT_NODE) {\n const nextEl = output as Element\n if (nextEl.tagName.toLowerCase() === el.tagName.toLowerCase()) {\n el.textContent = nextEl.textContent\n return true\n }\n } else if (output.nodeType === Node.TEXT_NODE) {\n el.textContent = (output as Text).data\n return true\n }\n }\n\n return false\n}\n\nfunction patchNode(currentNode: Node | null, nextOutput: FictNode): boolean {\n if (!currentNode) return false\n\n if (\n currentNode instanceof Text &&\n (nextOutput === null ||\n nextOutput === undefined ||\n nextOutput === false ||\n typeof nextOutput === 'string' ||\n typeof nextOutput === 'number' ||\n nextOutput instanceof Text)\n ) {\n const nextText =\n nextOutput instanceof Text\n ? nextOutput.data\n : nextOutput === null || nextOutput === undefined || nextOutput === false\n ? ''\n : String(nextOutput)\n currentNode.data = nextText\n return true\n }\n\n if (currentNode instanceof Element && patchElement(currentNode, nextOutput)) {\n return true\n }\n\n if (nextOutput instanceof Node && currentNode === nextOutput) {\n return true\n }\n\n return false\n}\n\nfunction isFragmentVNode(\n value: unknown,\n): value is { type: typeof Fragment; props?: { children?: FictNode | FictNode[] } } {\n return (\n value != null &&\n typeof value === 'object' &&\n !(value instanceof Node) &&\n (value as { type?: unknown }).type === Fragment\n )\n}\n\nfunction normalizeChildren(\n children: FictNode | FictNode[] | undefined,\n result: FictNode[] = [],\n): FictNode[] {\n if (children === undefined) {\n return result\n }\n if (Array.isArray(children)) {\n for (const child of children) {\n normalizeChildren(child, result)\n }\n return result\n }\n if (children === null || children === false) {\n return result\n }\n result.push(children)\n return result\n}\n\nfunction patchFragmentChildren(\n nodes: Node[],\n children: FictNode | FictNode[] | undefined,\n): boolean {\n const normalized = normalizeChildren(children)\n if (normalized.length !== nodes.length) {\n return false\n }\n for (let i = 0; i < normalized.length; i++) {\n if (!patchNode(nodes[i]!, normalized[i]!)) {\n return false\n }\n }\n return true\n}\n\nfunction clearContent<T>(block: ManagedBlock<T>): void {\n const nodes = block.nodes.slice(1, Math.max(1, block.nodes.length - 1))\n removeNodes(nodes)\n}\n\nfunction removeBlockNodes<T>(block: ManagedBlock<T>): void {\n let cursor: Node | null = block.start\n const end = block.end\n while (cursor) {\n const next: Node | null = cursor.nextSibling\n cursor.parentNode?.removeChild(cursor)\n if (cursor === end) break\n cursor = next\n }\n}\n\nfunction bumpBlockVersion<T>(block: ManagedBlock<T>): void {\n block.version(block.version() + 1)\n}\n\n// DOM utility functions are imported from './node-ops' to avoid duplication\n","/**\n * Fict DOM Rendering System\n *\n * This module provides DOM rendering capabilities with reactive bindings.\n * It transforms JSX virtual nodes into actual DOM elements, automatically\n * setting up reactive updates for dynamic values.\n *\n * Key Features:\n * - Reactive text content: `{count}` updates when count changes\n * - Reactive attributes: `disabled={!isValid}` updates reactively\n * - Reactive children: `{show && <Modal />}` handles conditionals\n * - List rendering: `{items.map(...)}` with efficient keyed updates\n */\n\nimport {\n createTextBinding,\n createAttributeBinding,\n createStyleBinding,\n createClassBinding,\n createChildBinding,\n bindEvent,\n isReactive,\n PRIMITIVE_PROXY,\n type MaybeReactive,\n type AttributeSetter,\n type BindingHandle,\n} from './binding'\nimport { Properties, ChildProperties, Aliases, getPropAlias, SVGNamespace } from './constants'\nimport { __fictPushContext, __fictPopContext } from './hooks'\nimport { Fragment } from './jsx'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n handleError,\n handleSuspend,\n pushRoot,\n popRoot,\n registerRootCleanup,\n getCurrentRoot,\n} from './lifecycle'\nimport { createPropsProxy, unwrapProps } from './props'\nimport { untrack } from './scheduler'\nimport type { DOMElement, FictNode, FictVNode, RefObject } from './types'\n\n// ============================================================================\n// Main Render Function\n// ============================================================================\n\n/**\n * Render a Fict view into a container element.\n *\n * @param view - A function that returns the view to render\n * @param container - The DOM container to render into\n * @returns A teardown function to unmount the view\n *\n * @example\n * ```ts\n * const unmount = render(() => <App />, document.getElementById('root')!)\n * // Later: unmount()\n * ```\n */\nexport function render(view: () => FictNode, container: HTMLElement): () => void {\n const root = createRootContext()\n const prev = pushRoot(root)\n let dom: DOMElement\n try {\n const output = view()\n // createElement must be called within the root context\n // so that child components register their onMount callbacks correctly\n dom = createElement(output)\n } finally {\n popRoot(prev)\n }\n\n container.replaceChildren(dom)\n container.setAttribute('data-fict-fine-grained', '1')\n\n flushOnMount(root)\n\n const teardown = () => {\n destroyRoot(root)\n container.innerHTML = ''\n }\n\n return teardown\n}\n\n// ============================================================================\n// Element Creation\n// ============================================================================\n\n/**\n * Create a DOM element from a Fict node.\n * This is the main entry point for converting virtual nodes to real DOM.\n *\n * Supports:\n * - Native DOM nodes (passed through)\n * - Null/undefined/false (empty text node)\n * - Arrays (DocumentFragment)\n * - Strings/numbers (text nodes)\n * - Booleans (empty text node)\n * - VNodes (components or HTML elements)\n * - Reactive values (functions returning any of the above)\n */\nexport function createElement(node: FictNode): DOMElement {\n // Already a DOM node - pass through\n if (node instanceof Node) {\n return node\n }\n\n // Null/undefined/false - empty placeholder\n if (node === null || node === undefined || node === false) {\n return document.createTextNode('')\n }\n\n // Primitive proxy produced by keyed list binding\n if (typeof node === 'object' && node !== null && !(node instanceof Node)) {\n // Handle BindingHandle (createList, createConditional, etc)\n if ('marker' in node) {\n return createElement((node as { marker: unknown }).marker as FictNode)\n }\n\n const nodeRecord = node as unknown as Record<PropertyKey, unknown>\n if (nodeRecord[PRIMITIVE_PROXY]) {\n const primitiveGetter = nodeRecord[Symbol.toPrimitive]\n const value =\n typeof primitiveGetter === 'function' ? primitiveGetter.call(node, 'default') : node\n return document.createTextNode(value == null || value === false ? '' : String(value))\n }\n }\n\n // Array - create fragment\n if (Array.isArray(node)) {\n const frag = document.createDocumentFragment()\n for (const child of node) {\n appendChildNode(frag, child)\n }\n return frag\n }\n\n // Primitive values - text node\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node))\n }\n\n if (typeof node === 'boolean') {\n return document.createTextNode('')\n }\n\n // VNode\n const vnode = node as FictVNode\n\n // Function component\n if (typeof vnode.type === 'function') {\n const rawProps = unwrapProps(vnode.props ?? {}) as Record<string, unknown>\n const baseProps =\n vnode.key === undefined\n ? rawProps\n : new Proxy(rawProps, {\n get(target, prop, receiver) {\n if (prop === 'key') return vnode.key\n return Reflect.get(target, prop, receiver)\n },\n has(target, prop) {\n if (prop === 'key') return true\n return prop in target\n },\n ownKeys(target) {\n const keys = new Set(Reflect.ownKeys(target))\n keys.add('key')\n return Array.from(keys)\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'key') {\n return { enumerable: true, configurable: true, value: vnode.key }\n }\n return Object.getOwnPropertyDescriptor(target, prop)\n },\n })\n\n const props = createPropsProxy(baseProps)\n try {\n // Create a fresh hook context for this component instance.\n // This preserves slot state across re-renders driven by __fictRender.\n __fictPushContext()\n const rendered = vnode.type(props)\n __fictPopContext()\n return createElement(rendered as FictNode)\n } catch (err) {\n __fictPopContext()\n if (handleSuspend(err as any)) {\n return document.createComment('fict:suspend')\n }\n handleError(err, { source: 'render', componentName: vnode.type.name })\n throw err\n }\n }\n\n // Fragment\n if (vnode.type === Fragment) {\n const frag = document.createDocumentFragment()\n const children = vnode.props?.children as FictNode | FictNode[] | undefined\n appendChildren(frag, children)\n return frag\n }\n\n // HTML Element\n const tagName = typeof vnode.type === 'string' ? vnode.type : 'div'\n const el = document.createElement(tagName)\n applyProps(el, vnode.props ?? {})\n return el\n}\n\n/**\n * Create a template cloning factory from an HTML string.\n * Used by the compiler for efficient DOM generation.\n *\n * @param html - The HTML string to create a template from\n * @param isImportNode - Use importNode for elements like img/iframe\n * @param isSVG - Whether the template is SVG content\n * @param isMathML - Whether the template is MathML content\n */\nexport function template(\n html: string,\n isImportNode?: boolean,\n isSVG?: boolean,\n isMathML?: boolean,\n): () => Node {\n let node: Node | null = null\n\n const create = (): Node => {\n const t = isMathML\n ? document.createElementNS('http://www.w3.org/1998/Math/MathML', 'template')\n : document.createElement('template')\n t.innerHTML = html\n\n if (isSVG) {\n // For SVG, get the nested content\n return (t as HTMLTemplateElement).content.firstChild!.firstChild!\n }\n if (isMathML) {\n return t.firstChild!\n }\n return (t as HTMLTemplateElement).content.firstChild!\n }\n\n // Create the cloning function\n const fn = isImportNode\n ? () => untrack(() => document.importNode(node || (node = create()), true))\n : () => (node || (node = create())).cloneNode(true)\n\n // Add cloneNode property for compatibility\n ;(fn as { cloneNode?: typeof fn }).cloneNode = fn\n\n return fn\n}\n\n// ============================================================================\n// Child Node Handling\n// ============================================================================\n\n// Use the comprehensive Properties set from constants for property binding\n// These properties must update via DOM property semantics rather than attributes\n\n/**\n * Check if a value is a runtime binding handle\n */\nfunction isBindingHandle(node: unknown): node is BindingHandle {\n return (\n node !== null &&\n typeof node === 'object' &&\n 'marker' in node &&\n 'dispose' in node &&\n typeof (node as BindingHandle).dispose === 'function'\n )\n}\n\n/**\n * Append a child node to a parent, handling all node types including reactive values.\n */\nfunction appendChildNode(parent: HTMLElement | DocumentFragment, child: FictNode): void {\n // Skip nullish values\n if (child === null || child === undefined || child === false) {\n return\n }\n\n // Handle BindingHandle (recursive)\n if (isBindingHandle(child)) {\n appendChildNode(parent, child.marker)\n // Flush pending nodes now that markers are in the DOM\n child.flush?.()\n return\n }\n\n // Handle getter function (recursive)\n if (typeof child === 'function' && (child as () => FictNode).length === 0) {\n const childGetter = child as () => FictNode\n createChildBinding(parent as HTMLElement | DocumentFragment, childGetter, createElement)\n return\n }\n\n // Static child - create element and append\n if (Array.isArray(child)) {\n for (const item of child) {\n appendChildNode(parent, item)\n }\n return\n }\n\n // Cast to Node for remaining logic\n let domNode: Node\n if (typeof child !== 'object' || child === null) {\n domNode = document.createTextNode(String(child ?? ''))\n } else {\n domNode = createElement(child as any) as Node\n }\n\n // Handle DocumentFragment manually to avoid JSDOM issues\n if (domNode.nodeType === 11) {\n const children = Array.from(domNode.childNodes)\n for (const node of children) {\n appendChildNode(parent, node)\n }\n return\n }\n\n if (domNode.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(domNode)\n }\n\n try {\n parent.appendChild(domNode)\n } catch (e: any) {\n if (parent.ownerDocument) {\n const clone = parent.ownerDocument.importNode(domNode, true)\n parent.appendChild(clone)\n return\n }\n throw e\n }\n}\n\n/**\n * Append multiple children, handling arrays and nested structures.\n */\nfunction appendChildren(\n parent: HTMLElement | DocumentFragment,\n children: FictNode | FictNode[] | undefined,\n): void {\n if (children === undefined) return\n\n if (Array.isArray(children)) {\n for (const child of children) {\n appendChildren(parent, child)\n }\n return\n }\n\n appendChildNode(parent, children)\n}\n\n// ============================================================================\n// Ref Handling\n// ============================================================================\n\n/**\n * Apply a ref to an element, supporting both callback and object refs.\n * Both types are automatically cleaned up on unmount.\n */\nfunction applyRef(el: HTMLElement, value: unknown): void {\n if (typeof value === 'function') {\n // Callback ref\n const refFn = value as (el: HTMLElement | null) => void\n refFn(el)\n\n // Match React behavior: call ref(null) on unmount\n if (getCurrentRoot()) {\n registerRootCleanup(() => {\n refFn(null)\n })\n }\n } else if (value && typeof value === 'object' && 'current' in value) {\n // Object ref\n const refObj = value as RefObject<HTMLElement>\n refObj.current = el\n\n // Auto-cleanup on unmount\n if (getCurrentRoot()) {\n registerRootCleanup(() => {\n refObj.current = null\n })\n }\n }\n}\n\n// ============================================================================\n// Props Handling\n// ============================================================================\n\n/**\n * Apply props to an HTML element, setting up reactive bindings as needed.\n * Uses comprehensive property constants for correct attribute/property handling.\n */\nfunction applyProps(el: HTMLElement, props: Record<string, unknown>, isSVG = false): void {\n props = unwrapProps(props)\n const tagName = el.tagName\n\n // Check if this is a custom element\n const isCE = tagName.includes('-') || 'is' in props\n\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children') continue\n\n // Ref handling\n if (key === 'ref') {\n applyRef(el, value)\n continue\n }\n\n // Event handling with delegation support\n if (isEventKey(key)) {\n bindEvent(\n el,\n eventNameFromProp(key),\n value as MaybeReactive<EventListenerOrEventListenerObject | null | undefined>,\n )\n continue\n }\n\n // Explicit on: namespace for non-delegated events\n if (key.slice(0, 3) === 'on:') {\n bindEvent(\n el,\n key.slice(3),\n value as MaybeReactive<EventListenerOrEventListenerObject | null | undefined>,\n false, // Non-delegated\n )\n continue\n }\n\n // Capture events\n if (key.slice(0, 10) === 'oncapture:') {\n bindEvent(\n el,\n key.slice(10),\n value as MaybeReactive<EventListenerOrEventListenerObject | null | undefined>,\n true, // Capture\n )\n continue\n }\n\n // Class/ClassName\n if (key === 'class' || key === 'className') {\n createClassBinding(el, value as MaybeReactive<string | Record<string, boolean> | null>)\n continue\n }\n\n // classList for object-style class binding\n if (key === 'classList') {\n createClassBinding(el, value as MaybeReactive<Record<string, boolean> | null>)\n continue\n }\n\n // Style\n if (key === 'style') {\n createStyleBinding(\n el,\n value as MaybeReactive<string | Record<string, string | number> | null>,\n )\n continue\n }\n\n // dangerouslySetInnerHTML\n if (key === 'dangerouslySetInnerHTML' && value && typeof value === 'object') {\n const htmlValue = (value as { __html?: string }).__html\n if (htmlValue !== undefined) {\n if (isReactive(htmlValue)) {\n createAttributeBinding(el, 'innerHTML', htmlValue as () => unknown, setInnerHTML)\n } else {\n el.innerHTML = htmlValue\n }\n }\n continue\n }\n\n // Child properties (innerHTML, textContent, etc.)\n if (ChildProperties.has(key)) {\n createAttributeBinding(el, key, value as MaybeReactive<unknown>, setProperty)\n continue\n }\n\n // Forced attribute via attr: prefix\n if (key.slice(0, 5) === 'attr:') {\n createAttributeBinding(el, key.slice(5), value as MaybeReactive<unknown>, setAttribute)\n continue\n }\n\n // Forced boolean attribute via bool: prefix\n if (key.slice(0, 5) === 'bool:') {\n createAttributeBinding(el, key.slice(5), value as MaybeReactive<unknown>, setBoolAttribute)\n continue\n }\n\n // Forced property via prop: prefix\n if (key.slice(0, 5) === 'prop:') {\n createAttributeBinding(el, key.slice(5), value as MaybeReactive<unknown>, setProperty)\n continue\n }\n\n // Check for property alias (element-specific mappings)\n const propAlias = !isSVG ? getPropAlias(key, tagName) : undefined\n\n // Handle properties and element-specific attributes\n if (propAlias || (!isSVG && Properties.has(key)) || (isCE && !isSVG)) {\n const propName = propAlias || key\n // Custom elements use toPropertyName conversion\n if (isCE && !Properties.has(key)) {\n createAttributeBinding(\n el,\n toPropertyName(propName),\n value as MaybeReactive<unknown>,\n setProperty,\n )\n } else {\n createAttributeBinding(el, propName, value as MaybeReactive<unknown>, setProperty)\n }\n continue\n }\n\n // SVG namespaced attributes (xlink:href, xml:lang, etc.)\n if (isSVG && key.indexOf(':') > -1) {\n const [prefix, name] = key.split(':')\n const ns = SVGNamespace[prefix!]\n if (ns) {\n createAttributeBinding(el, key, value as MaybeReactive<unknown>, (el, _key, val) =>\n setAttributeNS(el, ns, name!, val),\n )\n continue\n }\n }\n\n // Regular attributes (potentially reactive)\n // Apply alias mapping (className -> class, htmlFor -> for)\n const attrName = Aliases[key] || key\n createAttributeBinding(el, attrName, value as MaybeReactive<unknown>, setAttribute)\n }\n\n // Handle children\n const children = props.children as FictNode | FictNode[] | undefined\n appendChildren(el, children)\n}\n\n/**\n * Convert kebab-case to camelCase for custom element properties\n */\nfunction toPropertyName(name: string): string {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase())\n}\n\n// ============================================================================\n// Attribute Setters\n// ============================================================================\n\n/**\n * Set an attribute on an element, handling various value types.\n */\nconst setAttribute: AttributeSetter = (el: HTMLElement, key: string, value: unknown): void => {\n // Remove attribute for nullish/false values\n if (value === undefined || value === null || value === false) {\n el.removeAttribute(key)\n return\n }\n\n // Boolean true -> empty string attribute\n if (value === true) {\n el.setAttribute(key, '')\n return\n }\n\n // Primitive values\n const valueType = typeof value\n if (valueType === 'string' || valueType === 'number') {\n el.setAttribute(key, String(value))\n return\n }\n\n // DOM property (for cases like `value`, `checked`, etc.)\n if (key in el) {\n ;(el as unknown as Record<string, unknown>)[key] = value\n return\n }\n\n // Fallback: set as attribute\n el.setAttribute(key, String(value))\n}\n\n/**\n * Set a property on an element, ensuring nullish values clear sensibly.\n */\nconst setProperty: AttributeSetter = (el: HTMLElement, key: string, value: unknown): void => {\n if (value === undefined || value === null) {\n const fallback = key === 'checked' || key === 'selected' ? false : ''\n ;(el as unknown as Record<string, unknown>)[key] = fallback\n return\n }\n\n // Handle style object binding style={{ color: 'red' }}\n if (key === 'style' && typeof value === 'object' && value !== null) {\n for (const k in value as Record<string, string>) {\n const v = (value as Record<string, string>)[k]\n if (v !== undefined) {\n ;(el.style as unknown as Record<string, string>)[k] = String(v)\n }\n }\n return\n }\n\n ;(el as unknown as Record<string, unknown>)[key] = value as unknown\n}\n\n/**\n * Set innerHTML on an element (used for dangerouslySetInnerHTML)\n */\nconst setInnerHTML: AttributeSetter = (el: HTMLElement, _key: string, value: unknown): void => {\n el.innerHTML = value == null ? '' : String(value)\n}\n\n/**\n * Set a boolean attribute on an element (empty string when true, removed when false)\n */\nconst setBoolAttribute: AttributeSetter = (el: HTMLElement, key: string, value: unknown): void => {\n if (value) {\n el.setAttribute(key, '')\n } else {\n el.removeAttribute(key)\n }\n}\n\n/**\n * Set an attribute with a namespace (for SVG xlink:href, etc.)\n */\nfunction setAttributeNS(el: HTMLElement, namespace: string, name: string, value: unknown): void {\n if (value == null) {\n el.removeAttributeNS(namespace, name)\n } else {\n el.setAttributeNS(namespace, name, String(value))\n }\n}\n\n// ============================================================================\n// Event Handling Utilities\n// ============================================================================\n\n/**\n * Check if a prop key is an event handler (starts with \"on\")\n */\nfunction isEventKey(key: string): boolean {\n return key.startsWith('on') && key.length > 2 && key[2]!.toUpperCase() === key[2]\n}\n\n/**\n * Convert a React-style event prop to a DOM event name\n * e.g., \"onClick\" -> \"click\", \"onMouseDown\" -> \"mousedown\"\n */\nfunction eventNameFromProp(key: string): string {\n return key.slice(2).toLowerCase()\n}\n\n// ============================================================================\n// Exports for Advanced Usage\n// ============================================================================\n\nexport {\n createTextBinding,\n createChildBinding,\n createAttributeBinding,\n createStyleBinding,\n createClassBinding,\n isReactive,\n}\n\nexport type { BindingHandle, MaybeReactive }\n","import { createElement } from './dom'\nimport { createEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\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\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()\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 renderingFallback = true\n try {\n renderValue(toView(err))\n } finally {\n renderingFallback = false\n }\n props.onError?.(err)\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 handleError(err, { source: 'render' })\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 if (epoch !== tokenEpoch) return\n pending(Math.max(0, pending() - 1))\n if (pending() === 0) {\n switchView(props.children ?? null)\n onResolveMaybe()\n }\n },\n err => {\n if (epoch !== tokenEpoch) return\n pending(Math.max(0, pending() - 1))\n props.onReject?.(err)\n handleError(err, { source: 'render' }, hostRoot)\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","/**\n * Fict DOM Reconciliation\n *\n * Efficient array reconciliation algorithm based on udomdiff.\n * https://github.com/WebReflection/udomdiff\n *\n * This algorithm uses a 5-step strategy:\n * 1. Common prefix - skip matching nodes at start\n * 2. Common suffix - skip matching nodes at end\n * 3. Append - insert remaining new nodes\n * 4. Remove - remove remaining old nodes\n * 5. Swap/Map fallback - handle complex rearrangements\n *\n * Most real-world updates (95%+) use fast paths without building a Map.\n */\n\n/**\n * Reconcile two arrays of DOM nodes, efficiently updating the DOM.\n *\n * @param parentNode - The parent element containing the nodes\n * @param a - The old array of nodes (currently in DOM)\n * @param b - The new array of nodes (target state)\n *\n * @example\n * ```ts\n * const oldNodes = [node1, node2, node3]\n * const newNodes = [node1, node4, node3] // node2 replaced with node4\n * reconcileArrays(parent, oldNodes, newNodes)\n * ```\n */\nexport default function reconcileArrays(parentNode: ParentNode, a: Node[], b: Node[]): void {\n const bLength = b.length\n let aEnd = a.length\n let bEnd = bLength\n let aStart = 0\n let bStart = 0\n const after = aEnd > 0 ? a[aEnd - 1]!.nextSibling : null\n let map: Map<Node, number> | null = null\n\n while (aStart < aEnd || bStart < bEnd) {\n // 1. Common prefix - nodes match at start\n if (a[aStart] === b[bStart]) {\n aStart++\n bStart++\n continue\n }\n\n // 2. Common suffix - nodes match at end\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--\n bEnd--\n }\n\n // 3. Append - old array exhausted, insert remaining new nodes\n if (aEnd === aStart) {\n const node: Node | null =\n bEnd < bLength ? (bStart ? b[bStart - 1]!.nextSibling : (b[bEnd - bStart] ?? null)) : after\n\n const count = bEnd - bStart\n const doc = (parentNode as Node).ownerDocument\n if (count > 1 && doc) {\n const frag = doc.createDocumentFragment()\n for (let i = bStart; i < bEnd; i++) {\n frag.appendChild(b[i]!)\n }\n parentNode.insertBefore(frag, node)\n bStart = bEnd\n } else {\n while (bStart < bEnd) {\n parentNode.insertBefore(b[bStart++]!, node)\n }\n }\n }\n // 4. Remove - new array exhausted, remove remaining old nodes\n else if (bEnd === bStart) {\n while (aStart < aEnd) {\n const nodeToRemove = a[aStart]!\n if (!map || !map.has(nodeToRemove)) {\n nodeToRemove.parentNode?.removeChild(nodeToRemove)\n }\n aStart++\n }\n }\n // 5a. Swap backward - detect backward swap pattern\n else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd]!.nextSibling\n parentNode.insertBefore(b[bStart++]!, a[aStart++]!.nextSibling)\n parentNode.insertBefore(b[--bEnd]!, node)\n // Update reference in old array for potential future matches\n a[aEnd] = b[bEnd]!\n }\n // 5b. Map fallback - use Map for complex rearrangements\n else {\n // Build map on first use (lazy initialization)\n if (!map) {\n map = new Map()\n let i = bStart\n while (i < bEnd) {\n map.set(b[i]!, i++)\n }\n }\n\n const index = map.get(a[aStart]!)\n\n if (index != null) {\n if (bStart < index && index < bEnd) {\n // Check for longest increasing subsequence\n let i = aStart\n let sequence = 1\n let t: number | undefined\n\n while (++i < aEnd && i < bEnd) {\n t = map.get(a[i]!)\n if (t == null || t !== index + sequence) break\n sequence++\n }\n\n // Use optimal strategy based on sequence length\n if (sequence > index - bStart) {\n // Sequence is long enough - insert nodes before current\n const node = a[aStart]!\n while (bStart < index) {\n parentNode.insertBefore(b[bStart++]!, node)\n }\n } else {\n // Short sequence - replace\n parentNode.replaceChild(b[bStart++]!, a[aStart++]!)\n }\n } else {\n aStart++\n }\n } else {\n // Node not in new array - remove it\n const nodeToRemove = a[aStart++]!\n nodeToRemove.parentNode?.removeChild(nodeToRemove)\n }\n }\n }\n}\n\n/**\n * Simple reconciliation for keyed lists.\n * Uses the same algorithm but works with keyed blocks.\n *\n * @param parentNode - The parent element\n * @param oldNodes - Old nodes in DOM order\n * @param newNodes - New nodes in target order\n */\nexport function reconcileNodes(parentNode: ParentNode, oldNodes: Node[], newNodes: Node[]): void {\n reconcileArrays(parentNode, oldNodes, newNodes)\n}\n","/**\n * List Helpers for Compiler-Generated Fine-Grained Updates\n *\n * These helpers are used by the compiler to generate efficient keyed list rendering.\n * They provide low-level primitives for DOM node manipulation without rebuilding.\n */\n\nimport { createElement } from './dom'\nimport { createRenderEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n popRoot,\n pushRoot,\n type RootContext,\n} from './lifecycle'\nimport { insertNodesBefore, removeNodes, toNodeArray } from './node-ops'\nimport reconcileArrays from './reconcile'\nimport { batch } from './scheduler'\nimport { createSignal, setActiveSub, type Signal } from './signal'\nimport type { FictNode } from './types'\n\n// Re-export shared DOM helpers for compiler-generated code\nexport { insertNodesBefore, removeNodes, toNodeArray }\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * A keyed block represents a single item in a list with its associated DOM nodes and state\n */\nexport interface KeyedBlock<T = unknown> {\n /** Unique key for this block */\n key: string | number\n /** DOM nodes belonging to this block */\n nodes: Node[]\n /** Root context for lifecycle management */\n root: RootContext\n /** Signal containing the current item value */\n item: Signal<T>\n /** Signal containing the current index */\n index: Signal<number>\n /** Last raw item value assigned to this block */\n rawItem: T\n /** Last raw index value assigned to this block */\n rawIndex: number\n}\n\n/**\n * Container for managing keyed list blocks\n */\nexport interface KeyedListContainer<T = unknown> {\n /** Start marker comment node */\n startMarker: Comment\n /** End marker comment node */\n endMarker: Comment\n /** Map of key to block */\n blocks: Map<string | number, KeyedBlock<T>>\n /** Scratch map reused for the next render */\n nextBlocks: Map<string | number, KeyedBlock<T>>\n /** Current nodes in DOM order (including markers) */\n currentNodes: Node[]\n /** Next-frame node buffer to avoid reallocations */\n nextNodes: Node[]\n /** Ordered blocks in current DOM order */\n orderedBlocks: KeyedBlock<T>[]\n /** Next-frame ordered block buffer to avoid reallocations */\n nextOrderedBlocks: KeyedBlock<T>[]\n /** Track position of keys in the ordered buffer to handle duplicates */\n orderedIndexByKey: Map<string | number, number>\n /** Cleanup function */\n dispose: () => void\n}\n\n/**\n * Binding handle returned by createKeyedList for compiler-generated code\n */\nexport interface KeyedListBinding {\n /** Document fragment placeholder inserted by the compiler/runtime */\n marker: DocumentFragment\n /** Start marker comment node */\n startMarker: Comment\n /** End marker comment node */\n endMarker: Comment\n /** Flush pending items - call after markers are inserted into DOM */\n flush?: () => void\n /** Cleanup function */\n dispose: () => void\n}\n\ntype FineGrainedRenderItem<T> = (\n itemSig: Signal<T>,\n indexSig: Signal<number>,\n key: string | number,\n) => Node[]\n\n/**\n * A block identified by start/end comment markers.\n */\nexport interface MarkerBlock {\n start: Comment\n end: Comment\n root?: RootContext\n}\n\n// ============================================================================\n// DOM Manipulation Primitives\n// ============================================================================\n\n/**\n * Move nodes to a position before the anchor node.\n * This is optimized to avoid unnecessary DOM operations.\n *\n * @param parent - Parent node to move nodes within\n * @param nodes - Array of nodes to move\n * @param anchor - Node to insert before (or null for end)\n */\nexport function moveNodesBefore(parent: Node, nodes: Node[], anchor: Node | null): void {\n // Insert in reverse order to maintain correct sequence\n // This way each node becomes the new anchor for the next\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i]!\n if (!node || !(node instanceof Node)) {\n throw new Error('Invalid node in moveNodesBefore')\n }\n // Only move if not already in correct position\n if (node.nextSibling !== anchor) {\n if (node.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(node)\n }\n try {\n parent.insertBefore(node, anchor)\n } catch (e: any) {\n if (parent.ownerDocument) {\n try {\n const clone = parent.ownerDocument.importNode(node, true)\n parent.insertBefore(clone, anchor)\n // Note: Cloning during move breaks references in KeyedBlock.nodes\n // This is a worst-case fallback for tests.\n continue\n } catch {\n // Clone fallback failed\n }\n }\n throw e\n }\n }\n anchor = node\n }\n}\n\n/**\n * Remove an array of nodes from the DOM\n *\n * @param nodes - Array of nodes to remove\n */\n/**\n * Move an entire marker-delimited block (including markers) before the anchor.\n */\nexport function moveMarkerBlock(parent: Node, block: MarkerBlock, anchor: Node | null): void {\n const nodes = collectBlockNodes(block)\n if (nodes.length === 0) return\n moveNodesBefore(parent, nodes, anchor)\n}\n\n/**\n * Destroy a marker-delimited block, removing nodes and destroying the associated root.\n */\nexport function destroyMarkerBlock(block: MarkerBlock): void {\n if (block.root) {\n destroyRoot(block.root)\n }\n removeBlockRange(block)\n}\n\nfunction collectBlockNodes(block: MarkerBlock): Node[] {\n const nodes: Node[] = []\n let cursor: Node | null = block.start\n while (cursor) {\n nodes.push(cursor)\n if (cursor === block.end) {\n break\n }\n cursor = cursor.nextSibling\n }\n return nodes\n}\n\nfunction removeBlockRange(block: MarkerBlock): void {\n let cursor: Node | null = block.start\n while (cursor) {\n const next: Node | null = cursor.nextSibling\n cursor.parentNode?.removeChild(cursor)\n if (cursor === block.end) {\n break\n }\n cursor = next\n }\n}\n\nfunction createVersionedSignalAccessor<T>(initialValue: T): Signal<T> {\n let current = initialValue\n let version = 0\n const track = createSignal(version)\n\n function accessor(value?: T): T | void {\n if (arguments.length === 0) {\n track()\n return current\n }\n current = value as T\n version++\n track(version)\n }\n\n return accessor as Signal<T>\n}\n\n// ============================================================================\n// Keyed List Container\n// ============================================================================\n\n/**\n * Create a container for managing a keyed list.\n * This sets up the marker nodes and provides cleanup.\n *\n * @returns Container object with markers, blocks map, and dispose function\n */\nexport function createKeyedListContainer<T = unknown>(): KeyedListContainer<T> {\n const startMarker = document.createComment('fict:list:start')\n const endMarker = document.createComment('fict:list:end')\n\n const dispose = () => {\n // Clean up all blocks\n for (const block of container.blocks.values()) {\n destroyRoot(block.root)\n // Nodes are removed by parent disposal or specific cleanup if needed\n // But for list disposal, we just clear the container\n }\n container.blocks.clear()\n container.nextBlocks.clear()\n\n // Remove nodes (including markers)\n const range = document.createRange()\n range.setStartBefore(startMarker)\n range.setEndAfter(endMarker)\n range.deleteContents()\n\n // Clear cache\n container.currentNodes = []\n container.nextNodes = []\n container.nextBlocks.clear()\n container.orderedBlocks.length = 0\n container.nextOrderedBlocks.length = 0\n container.orderedIndexByKey.clear()\n }\n\n const container: KeyedListContainer<T> = {\n startMarker,\n endMarker,\n blocks: new Map<string | number, KeyedBlock<T>>(),\n nextBlocks: new Map<string | number, KeyedBlock<T>>(),\n currentNodes: [startMarker, endMarker],\n nextNodes: [],\n orderedBlocks: [],\n nextOrderedBlocks: [],\n orderedIndexByKey: new Map<string | number, number>(),\n dispose,\n }\n\n return container\n}\n\n// ============================================================================\n// Block Creation Helpers\n// ============================================================================\n\n/**\n * Create a new keyed block with the given render function\n *\n * @param key - Unique key for this block\n * @param item - Initial item value\n * @param index - Initial index\n * @param render - Function that creates the DOM nodes and sets up bindings\n * @returns New KeyedBlock\n */\nexport function createKeyedBlock<T>(\n key: string | number,\n item: T,\n index: number,\n render: (item: Signal<T>, index: Signal<number>, key: string | number) => Node[],\n needsIndex = true,\n): KeyedBlock<T> {\n // Use versioned signal for all item types; avoid diffing proxy overhead for objects\n const itemSig = createVersionedSignalAccessor(item)\n\n const indexSig = needsIndex\n ? createSignal<number>(index)\n : (((next?: number) => {\n if (arguments.length === 0) return index\n index = next as number\n return index\n }) as Signal<number>)\n const root = createRootContext()\n const prevRoot = pushRoot(root)\n\n // Isolate child effects from the outer effect (e.g., performDiff) by clearing activeSub.\n // This prevents child effects from being purged when the outer effect re-runs.\n const prevSub = setActiveSub(undefined)\n\n let nodes: Node[] = []\n try {\n const rendered = render(itemSig, indexSig, key)\n // If render returns real DOM nodes/arrays, preserve them to avoid\n // reparenting side-effects (tests may pre-insert them).\n if (\n rendered instanceof Node ||\n (Array.isArray(rendered) && rendered.every(n => n instanceof Node))\n ) {\n nodes = toNodeArray(rendered)\n } else {\n const element = createElement(rendered as unknown as FictNode)\n nodes = toNodeArray(element)\n }\n } finally {\n setActiveSub(prevSub)\n popRoot(prevRoot)\n flushOnMount(root)\n }\n\n return {\n key,\n nodes,\n root,\n item: itemSig,\n index: indexSig,\n rawItem: item,\n rawIndex: index,\n }\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\n/**\n * Find the first node after the start marker (for getting current anchor)\n */\nexport function getFirstNodeAfter(marker: Comment): Node | null {\n return marker.nextSibling\n}\n\n/**\n * Check if a node is between two markers\n */\nexport function isNodeBetweenMarkers(\n node: Node,\n startMarker: Comment,\n endMarker: Comment,\n): boolean {\n let current: Node | null = startMarker.nextSibling\n while (current && current !== endMarker) {\n if (current === node) return true\n current = current.nextSibling\n }\n return false\n}\n\n// ============================================================================\n// High-Level List Binding (for compiler-generated code)\n// ============================================================================\n\n/**\n * Create a keyed list binding with automatic diffing and DOM updates.\n * This is used by compiler-generated code for efficient list rendering.\n *\n * @param getItems - Function that returns the current array of items\n * @param keyFn - Function to extract unique key from each item\n * @param renderItem - Function that creates DOM nodes for each item\n * @returns Binding handle with markers and dispose function\n */\nexport function createKeyedList<T>(\n getItems: () => T[],\n keyFn: (item: T, index: number) => string | number,\n renderItem: FineGrainedRenderItem<T>,\n needsIndex?: boolean,\n): KeyedListBinding {\n const resolvedNeedsIndex =\n arguments.length >= 4 ? !!needsIndex : renderItem.length > 1 /* has index param */\n return createFineGrainedKeyedList(getItems, keyFn, renderItem, resolvedNeedsIndex)\n}\n\nfunction createFineGrainedKeyedList<T>(\n getItems: () => T[],\n keyFn: (item: T, index: number) => string | number,\n renderItem: FineGrainedRenderItem<T>,\n needsIndex: boolean,\n): KeyedListBinding {\n const container = createKeyedListContainer<T>()\n const fragment = document.createDocumentFragment()\n fragment.append(container.startMarker, container.endMarker)\n let pendingItems: T[] | null = null\n let disposed = false\n\n const performDiff = () => {\n if (disposed) return\n\n batch(() => {\n const newItems = pendingItems || getItems()\n pendingItems = null\n\n const oldBlocks = container.blocks\n const newBlocks = container.nextBlocks\n const prevOrderedBlocks = container.orderedBlocks\n const nextOrderedBlocks = container.nextOrderedBlocks\n const orderedIndexByKey = container.orderedIndexByKey\n newBlocks.clear()\n nextOrderedBlocks.length = 0\n orderedIndexByKey.clear()\n\n const endParent = container.endMarker.parentNode\n const startParent = container.startMarker.parentNode\n const parent =\n endParent && startParent && endParent === startParent && (endParent as Node).isConnected\n ? (endParent as ParentNode & Node)\n : null\n\n // If markers aren't mounted yet, store items and retry in microtask\n if (!parent) {\n pendingItems = newItems\n queueMicrotask(performDiff)\n return\n }\n\n if (newItems.length === 0) {\n if (oldBlocks.size > 0) {\n for (const block of oldBlocks.values()) {\n destroyRoot(block.root)\n removeNodes(block.nodes)\n }\n }\n oldBlocks.clear()\n newBlocks.clear()\n prevOrderedBlocks.length = 0\n nextOrderedBlocks.length = 0\n orderedIndexByKey.clear()\n container.currentNodes.length = 0\n container.currentNodes.push(container.startMarker, container.endMarker)\n container.nextNodes.length = 0\n return\n }\n\n const prevCount = prevOrderedBlocks.length\n let appendCandidate = prevCount > 0 && newItems.length >= prevCount\n const appendedBlocks: KeyedBlock<T>[] = []\n\n // Phase 1: Build new blocks map (reuse or create)\n newItems.forEach((item, index) => {\n const key = keyFn(item, index)\n const existed = oldBlocks.has(key)\n let block = oldBlocks.get(key)\n\n if (block) {\n if (block.rawItem !== item) {\n block.rawItem = item\n block.item(item)\n }\n if (needsIndex && block.rawIndex !== index) {\n block.rawIndex = index\n block.index(index)\n }\n }\n\n // If newBlocks already has this key (duplicate key case), clean up the previous block\n const existingBlock = newBlocks.get(key)\n if (existingBlock && existingBlock !== block) {\n destroyRoot(existingBlock.root)\n removeNodes(existingBlock.nodes)\n }\n\n if (block) {\n newBlocks.set(key, block)\n oldBlocks.delete(key)\n } else {\n const existingBlock = newBlocks.get(key)\n if (existingBlock) {\n destroyRoot(existingBlock.root)\n removeNodes(existingBlock.nodes)\n }\n\n // Create new block\n block = createKeyedBlock(key, item, index, renderItem, needsIndex)\n }\n\n const resolvedBlock = block!\n\n newBlocks.set(key, resolvedBlock)\n\n const position = orderedIndexByKey.get(key)\n if (position !== undefined) {\n appendCandidate = false\n }\n if (appendCandidate) {\n if (index < prevCount) {\n if (!prevOrderedBlocks[index] || prevOrderedBlocks[index]!.key !== key) {\n appendCandidate = false\n }\n } else if (existed) {\n appendCandidate = false\n }\n }\n if (position !== undefined) {\n const prior = nextOrderedBlocks[position]\n if (prior && prior !== resolvedBlock) {\n destroyRoot(prior.root)\n removeNodes(prior.nodes)\n }\n nextOrderedBlocks[position] = resolvedBlock\n } else {\n orderedIndexByKey.set(key, nextOrderedBlocks.length)\n nextOrderedBlocks.push(resolvedBlock)\n }\n\n if (appendCandidate && index >= prevCount) {\n appendedBlocks.push(resolvedBlock)\n }\n })\n\n const canAppend =\n appendCandidate &&\n prevCount > 0 &&\n newItems.length > prevCount &&\n oldBlocks.size === 0 &&\n appendedBlocks.length > 0\n if (canAppend) {\n const appendedNodes: Node[] = []\n for (const block of appendedBlocks) {\n for (let i = 0; i < block.nodes.length; i++) {\n appendedNodes.push(block.nodes[i]!)\n }\n }\n if (appendedNodes.length > 0) {\n insertNodesBefore(parent, appendedNodes, container.endMarker)\n const currentNodes = container.currentNodes\n currentNodes.pop()\n for (let i = 0; i < appendedNodes.length; i++) {\n currentNodes.push(appendedNodes[i]!)\n }\n currentNodes.push(container.endMarker)\n }\n\n container.blocks = newBlocks\n container.nextBlocks = oldBlocks\n container.orderedBlocks = nextOrderedBlocks\n container.nextOrderedBlocks = prevOrderedBlocks\n return\n }\n\n // Phase 2: Remove old blocks that are no longer in the list\n if (oldBlocks.size > 0) {\n for (const block of oldBlocks.values()) {\n destroyRoot(block.root)\n removeNodes(block.nodes)\n }\n oldBlocks.clear()\n }\n\n // Phase 3: Reconcile DOM with buffered node arrays\n if (newBlocks.size > 0 || container.currentNodes.length > 0) {\n const prevNodes = container.currentNodes\n const nextNodes = container.nextNodes\n nextNodes.length = 0\n nextNodes.push(container.startMarker)\n\n for (let i = 0; i < nextOrderedBlocks.length; i++) {\n const nodes = nextOrderedBlocks[i]!.nodes\n for (let j = 0; j < nodes.length; j++) {\n nextNodes.push(nodes[j]!)\n }\n }\n\n nextNodes.push(container.endMarker)\n\n reconcileArrays(parent, prevNodes, nextNodes)\n\n // Swap buffers to reuse arrays on next diff\n container.currentNodes = nextNodes\n container.nextNodes = prevNodes\n }\n\n // Swap block maps for reuse\n container.blocks = newBlocks\n container.nextBlocks = oldBlocks\n container.orderedBlocks = nextOrderedBlocks\n container.nextOrderedBlocks = prevOrderedBlocks\n })\n }\n\n const effectDispose = createRenderEffect(performDiff)\n\n return {\n marker: fragment,\n startMarker: container.startMarker,\n endMarker: container.endMarker,\n // Flush pending items - call after markers are inserted into DOM\n flush: () => {\n if (pendingItems !== null) {\n performDiff()\n }\n },\n dispose: () => {\n disposed = true\n effectDispose?.()\n container.dispose()\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/devtools.ts","../src/cycle-guard.ts","../src/lifecycle.ts","../src/signal.ts","../src/store.ts","../src/memo.ts","../src/effect.ts","../src/hooks.ts","../src/versioned-signal.ts","../src/props.ts","../src/ref.ts","../src/transition.ts","../src/scheduler.ts","../src/jsx.ts","../src/constants.ts","../src/node-ops.ts","../src/binding.ts","../src/dom.ts","../src/error-boundary.ts","../src/suspense.ts","../src/reconcile.ts","../src/list-helpers.ts"],"names":["link","effect","value","ctx","options","batch","untrack","unwrap","currentRoot","applyRef","cleanup","render","toPropertyName","el","track","existingBlock"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface FictDevtoolsHook {\n registerSignal: (id: number, value: unknown) => void\n updateSignal: (id: number, value: unknown) => void\n registerEffect: (id: number) => void\n effectRun: (id: number) => void\n cycleDetected?: (payload: { reason: string; detail?: Record<string, unknown> }) => void\n}\n\nfunction getGlobalHook(): FictDevtoolsHook | undefined {\n if (typeof globalThis === 'undefined') return undefined\n return (globalThis as typeof globalThis & { __FICT_DEVTOOLS_HOOK__?: FictDevtoolsHook })\n .__FICT_DEVTOOLS_HOOK__\n}\n\nexport function getDevtoolsHook(): FictDevtoolsHook | undefined {\n return getGlobalHook()\n}\n","import { getDevtoolsHook } from './devtools'\n\nexport interface CycleProtectionOptions {\n maxFlushCyclesPerMicrotask?: number\n maxEffectRunsPerFlush?: number\n windowSize?: number\n highUsageRatio?: number\n maxRootReentrantDepth?: number\n enableWindowWarning?: boolean\n devMode?: boolean\n}\n\ninterface CycleWindowEntry {\n used: number\n budget: number\n}\n\nconst defaultOptions = {\n maxFlushCyclesPerMicrotask: 10_000,\n maxEffectRunsPerFlush: 20_000,\n windowSize: 5,\n highUsageRatio: 0.8,\n maxRootReentrantDepth: 10,\n enableWindowWarning: true,\n devMode: false,\n}\n\nlet options: Required<CycleProtectionOptions> = {\n ...defaultOptions,\n} as Required<CycleProtectionOptions>\n\nlet effectRunsThisFlush = 0\nlet windowUsage: CycleWindowEntry[] = []\nlet rootDepth = new WeakMap<object, number>()\nlet flushWarned = false\nlet rootWarned = false\nlet windowWarned = false\n\nexport function setCycleProtectionOptions(opts: CycleProtectionOptions): void {\n options = { ...options, ...opts }\n}\n\nexport function resetCycleProtectionStateForTests(): void {\n options = { ...defaultOptions } as Required<CycleProtectionOptions>\n effectRunsThisFlush = 0\n windowUsage = []\n rootDepth = new WeakMap<object, number>()\n flushWarned = false\n rootWarned = false\n windowWarned = false\n}\n\nexport function beginFlushGuard(): void {\n effectRunsThisFlush = 0\n flushWarned = false\n windowWarned = false\n}\n\nexport function beforeEffectRunGuard(): boolean {\n const next = ++effectRunsThisFlush\n if (next > options.maxFlushCyclesPerMicrotask || next > options.maxEffectRunsPerFlush) {\n const message = `[fict] cycle protection triggered: flush-budget-exceeded`\n if (options.devMode) {\n throw new Error(message)\n }\n if (!flushWarned) {\n flushWarned = true\n console.warn(message, { effectRuns: next })\n }\n return false\n }\n return true\n}\n\nexport function endFlushGuard(): void {\n recordWindowUsage(effectRunsThisFlush, options.maxFlushCyclesPerMicrotask)\n effectRunsThisFlush = 0\n}\n\nexport function enterRootGuard(root: object): boolean {\n const depth = (rootDepth.get(root) ?? 0) + 1\n if (depth > options.maxRootReentrantDepth) {\n const message = `[fict] cycle protection triggered: root-reentry`\n if (options.devMode) {\n throw new Error(message)\n }\n if (!rootWarned) {\n rootWarned = true\n console.warn(message, { depth })\n }\n return false\n }\n rootDepth.set(root, depth)\n return true\n}\n\nexport function exitRootGuard(root: object): void {\n const depth = rootDepth.get(root)\n if (depth === undefined) return\n if (depth <= 1) {\n rootDepth.delete(root)\n } else {\n rootDepth.set(root, depth - 1)\n }\n}\n\nfunction recordWindowUsage(used: number, budget: number): void {\n if (!options.enableWindowWarning) return\n const entry = { used, budget }\n windowUsage.push(entry)\n if (windowUsage.length > options.windowSize) {\n windowUsage.shift()\n }\n if (windowWarned) return\n if (\n windowUsage.length >= options.windowSize &&\n windowUsage.every(item => item.budget > 0 && item.used / item.budget >= options.highUsageRatio)\n ) {\n windowWarned = true\n reportCycle('high-usage-window', {\n windowSize: options.windowSize,\n ratio: options.highUsageRatio,\n })\n }\n}\n\nfunction reportCycle(\n reason: string,\n detail: Record<string, unknown> | undefined = undefined,\n): void {\n const hook = getDevtoolsHook()\n hook?.cycleDetected?.(detail ? { reason, detail } : { reason })\n console.warn(`[fict] cycle protection triggered: ${reason}`, detail ?? '')\n}\n","import { enterRootGuard, exitRootGuard } from './cycle-guard'\nimport type { Cleanup, ErrorInfo, SuspenseToken } from './types'\n\ntype LifecycleFn = () => void | Cleanup\n\nexport interface RootContext {\n parent?: RootContext | undefined\n onMountCallbacks?: LifecycleFn[]\n cleanups: Cleanup[]\n destroyCallbacks: Cleanup[]\n errorHandlers?: ErrorHandler[]\n suspenseHandlers?: SuspenseHandler[]\n}\n\ntype ErrorHandler = (err: unknown, info?: ErrorInfo) => boolean | void\ntype SuspenseHandler = (token: SuspenseToken | PromiseLike<unknown>) => boolean | void\n\nlet currentRoot: RootContext | undefined\nlet currentEffectCleanups: Cleanup[] | undefined\nconst globalErrorHandlers = new WeakMap<RootContext, ErrorHandler[]>()\nconst globalSuspenseHandlers = new WeakMap<RootContext, SuspenseHandler[]>()\n\nexport function createRootContext(parent: RootContext | undefined = currentRoot): RootContext {\n return { parent, cleanups: [], destroyCallbacks: [] }\n}\n\nexport function pushRoot(root: RootContext): RootContext | undefined {\n if (!enterRootGuard(root)) {\n return currentRoot\n }\n const prev = currentRoot\n currentRoot = root\n return prev\n}\n\nexport function getCurrentRoot(): RootContext | undefined {\n return currentRoot\n}\n\nexport function popRoot(prev: RootContext | undefined): void {\n if (currentRoot) {\n exitRootGuard(currentRoot)\n }\n currentRoot = prev\n}\n\nexport function onMount(fn: LifecycleFn): void {\n if (currentRoot) {\n ;(currentRoot.onMountCallbacks ||= []).push(fn)\n return\n }\n runLifecycle(fn)\n}\n\nexport function onDestroy(fn: LifecycleFn): void {\n if (currentRoot) {\n currentRoot.destroyCallbacks.push(() => runLifecycle(fn))\n return\n }\n runLifecycle(fn)\n}\n\nexport function onCleanup(fn: Cleanup): void {\n registerEffectCleanup(fn)\n}\n\nexport function flushOnMount(root: RootContext): void {\n const cbs = root.onMountCallbacks\n if (!cbs || cbs.length === 0) return\n for (let i = 0; i < cbs.length; i++) {\n const cleanup = cbs[i]!()\n if (typeof cleanup === 'function') {\n root.cleanups.push(cleanup)\n }\n }\n cbs.length = 0\n}\n\nexport function registerRootCleanup(fn: Cleanup): void {\n if (currentRoot) {\n currentRoot.cleanups.push(fn)\n }\n}\n\nexport function clearRoot(root: RootContext): void {\n runCleanupList(root.cleanups)\n if (root.onMountCallbacks) {\n root.onMountCallbacks.length = 0\n }\n}\n\nexport function destroyRoot(root: RootContext): void {\n clearRoot(root)\n runCleanupList(root.destroyCallbacks)\n if (root.errorHandlers) {\n root.errorHandlers.length = 0\n }\n if (globalErrorHandlers.has(root)) {\n globalErrorHandlers.delete(root)\n }\n if (root.suspenseHandlers) {\n root.suspenseHandlers.length = 0\n }\n if (globalSuspenseHandlers.has(root)) {\n globalSuspenseHandlers.delete(root)\n }\n}\n\nexport function createRoot<T>(fn: () => T): { dispose: () => void; value: T } {\n const root = createRootContext()\n const prev = pushRoot(root)\n let value: T\n try {\n value = fn()\n } finally {\n popRoot(prev)\n }\n flushOnMount(root)\n return {\n dispose: () => destroyRoot(root),\n value,\n }\n}\n\nexport function withEffectCleanups<T>(bucket: Cleanup[], fn: () => T): T {\n const prev = currentEffectCleanups\n currentEffectCleanups = bucket\n try {\n return fn()\n } finally {\n currentEffectCleanups = prev\n }\n}\n\nexport function registerEffectCleanup(fn: Cleanup): void {\n if (currentEffectCleanups) {\n currentEffectCleanups.push(fn)\n } else {\n registerRootCleanup(fn)\n }\n}\n\nexport function runCleanupList(list: Cleanup[]): void {\n let error: unknown\n for (let i = list.length - 1; i >= 0; i--) {\n try {\n const cleanup = list[i]\n if (cleanup) cleanup()\n } catch (err) {\n if (error === undefined) {\n error = err\n }\n }\n }\n list.length = 0\n if (error !== undefined) {\n if (!handleError(error, { source: 'cleanup' })) {\n throw error\n }\n }\n}\n\nfunction runLifecycle(fn: LifecycleFn): void {\n const cleanup = fn()\n if (typeof cleanup === 'function') {\n cleanup()\n }\n}\n\nexport function registerErrorHandler(fn: ErrorHandler): void {\n if (!currentRoot) {\n throw new Error('registerErrorHandler must be called within a root')\n }\n if (!currentRoot.errorHandlers) {\n currentRoot.errorHandlers = []\n }\n currentRoot.errorHandlers.push(fn)\n const existing = globalErrorHandlers.get(currentRoot)\n if (existing) {\n existing.push(fn)\n } else {\n globalErrorHandlers.set(currentRoot, [fn])\n }\n}\n\nexport function registerSuspenseHandler(fn: SuspenseHandler): void {\n if (!currentRoot) {\n throw new Error('registerSuspenseHandler must be called within a root')\n }\n if (!currentRoot.suspenseHandlers) {\n currentRoot.suspenseHandlers = []\n }\n currentRoot.suspenseHandlers.push(fn)\n const existing = globalSuspenseHandlers.get(currentRoot)\n if (existing) {\n existing.push(fn)\n } else {\n globalSuspenseHandlers.set(currentRoot, [fn])\n }\n}\n\nexport function handleError(err: unknown, info?: ErrorInfo, startRoot?: RootContext): boolean {\n let root: RootContext | undefined = startRoot ?? currentRoot\n let error = err\n while (root) {\n const handlers = root.errorHandlers\n if (handlers && handlers.length) {\n for (let i = handlers.length - 1; i >= 0; i--) {\n const handler = handlers[i]!\n try {\n const handled = handler(error, info)\n if (handled !== false) {\n return true\n }\n } catch (nextErr) {\n error = nextErr\n }\n }\n }\n root = root.parent\n }\n const globalForRoot = startRoot\n ? globalErrorHandlers.get(startRoot)\n : currentRoot\n ? globalErrorHandlers.get(currentRoot)\n : undefined\n if (globalForRoot && globalForRoot.length) {\n for (let i = globalForRoot.length - 1; i >= 0; i--) {\n const handler = globalForRoot[i]!\n try {\n const handled = handler(error, info)\n if (handled !== false) {\n return true\n }\n } catch (nextErr) {\n error = nextErr\n }\n }\n }\n throw error\n}\n\nexport function handleSuspend(\n token: SuspenseToken | PromiseLike<unknown>,\n startRoot?: RootContext,\n): boolean {\n let root: RootContext | undefined = startRoot ?? currentRoot\n while (root) {\n const handlers = root.suspenseHandlers\n if (handlers && handlers.length) {\n for (let i = handlers.length - 1; i >= 0; i--) {\n const handler = handlers[i]!\n const handled = handler(token)\n if (handled !== false) return true\n }\n }\n root = root.parent\n }\n const globalForRoot =\n startRoot && globalSuspenseHandlers.get(startRoot)\n ? globalSuspenseHandlers.get(startRoot)\n : currentRoot\n ? globalSuspenseHandlers.get(currentRoot)\n : undefined\n if (globalForRoot && globalForRoot.length) {\n for (let i = globalForRoot.length - 1; i >= 0; i--) {\n const handler = globalForRoot[i]!\n const handled = handler(token)\n if (handled !== false) return true\n }\n }\n return false\n}\n","import { beginFlushGuard, beforeEffectRunGuard, endFlushGuard } from './cycle-guard'\nimport { getDevtoolsHook } from './devtools'\nimport { registerRootCleanup } from './lifecycle'\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\n/**\n * Reactive node that can be either a signal, computed, effect, or effect scope\n */\nexport type ReactiveNode =\n | SignalNode<unknown>\n | ComputedNode<unknown>\n | EffectNode\n | EffectScopeNode\n | SubscriberNode\n\n/**\n * Link between a dependency and a subscriber in the reactive graph\n */\nexport interface Link {\n /** Version/cycle when this link was created */\n version: number\n /** The dependency being tracked */\n dep: ReactiveNode\n /** The subscriber tracking this dependency */\n sub: ReactiveNode\n /** Previous dependency link in the subscriber's dependency list */\n prevDep: Link | undefined\n /** Next dependency link in the subscriber's dependency list */\n nextDep: Link | undefined\n /** Previous subscriber link in the dependency's subscriber list */\n prevSub: Link | undefined\n /** Next subscriber link in the dependency's subscriber list */\n nextSub: Link | undefined\n}\n\n/**\n * Stack frame for traversing the reactive graph\n */\nexport interface StackFrame {\n /** The link value at this stack level */\n value: Link | undefined\n /** Previous stack frame */\n prev: StackFrame | undefined\n}\n\n/**\n * Base interface for all reactive nodes\n */\nexport interface BaseNode {\n /** First subscriber link */\n subs: Link | undefined\n /** Last subscriber link */\n subsTail: Link | undefined\n /** Reactive flags (Mutable, Watching, Running, etc.) */\n flags: number\n}\n\n/**\n * Signal node - mutable reactive value\n */\nexport interface SignalNode<T = unknown> extends BaseNode {\n /** Current committed value */\n currentValue: T\n /** Pending value to be committed */\n pendingValue: T\n /** Signals don't have dependencies */\n deps?: undefined\n depsTail?: undefined\n getter?: undefined\n}\n\n/**\n * Computed node - derived reactive value\n */\nexport interface ComputedNode<T = unknown> extends BaseNode {\n /** Current computed value */\n value: T\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n /** Getter function to compute the value */\n getter: (oldValue: T | undefined) => T\n}\n\n/**\n * Effect node - side effect that runs when dependencies change\n */\nexport interface EffectNode extends BaseNode {\n /** Effect function to execute */\n fn: () => void\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n}\n\n/**\n * Effect scope node - manages multiple effects\n */\nexport interface EffectScopeNode extends BaseNode {\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n}\n\n/**\n * Subscriber node used in trigger\n */\nexport interface SubscriberNode {\n /** First dependency link */\n deps: Link | undefined\n /** Last dependency link */\n depsTail: Link | undefined\n /** Reactive flags */\n flags: number\n subs?: undefined\n subsTail?: undefined\n}\n\n/**\n * Signal accessor - function to get/set signal value\n */\nexport interface SignalAccessor<T> {\n (): T\n (value: T): void\n}\n\n/**\n * Computed accessor - function to get computed value\n */\nexport type ComputedAccessor<T> = () => T\n\n/**\n * Effect disposer - function to dispose an effect\n */\nexport type EffectDisposer = () => void\n\n/**\n * Effect scope disposer - function to dispose an effect scope\n */\nexport type EffectScopeDisposer = () => void\n\n/**\n * Options for creating a custom reactive system\n */\nexport interface ReactiveSystemOptions {\n /** Update function for reactive nodes */\n update: (node: ReactiveNode) => boolean\n /** Notify function when a subscriber needs to be notified */\n notify: (sub: ReactiveNode) => void\n /** Callback when a dependency becomes unwatched */\n unwatched: (dep: ReactiveNode) => void\n}\n\n/**\n * Custom reactive system methods\n */\nexport interface ReactiveSystem {\n /** Link a dependency to a subscriber */\n link: typeof link\n /** Unlink a dependency from a subscriber */\n unlink: (lnk: Link, sub?: ReactiveNode) => Link | undefined\n /** Propagate changes through the reactive graph */\n propagate: (firstLink: Link) => void\n /** Check if a node is dirty */\n checkDirty: (firstLink: Link, sub: ReactiveNode) => boolean\n /** Shallow propagate changes */\n shallowPropagate: (firstLink: Link) => void\n}\n\n// ============================================================================\n// Flags\n// ============================================================================\nconst Mutable = 1\nconst Watching = 2\nconst Running = 4\nconst Recursed = 8\nconst Dirty = 16\nconst Pending = 32\n// Pre-computed combinations\nconst MutableDirty = 17\nconst MutablePending = 33\nconst MutableRunning = 5\nconst WatchingRunning = 6\n// Global state\nlet cycle = 0\nlet batchDepth = 0\nlet activeSub: ReactiveNode | undefined\nlet flushScheduled = false\n// Dual-priority queue for scheduler\nconst highPriorityQueue: EffectNode[] = []\nconst lowPriorityQueue: EffectNode[] = []\nlet isInTransition = false\nconst enqueueMicrotask =\n typeof queueMicrotask === 'function'\n ? queueMicrotask\n : (fn: () => void) => {\n Promise.resolve().then(fn)\n }\nexport const ReactiveFlags = {\n None: 0,\n Mutable,\n Watching,\n RecursedCheck: Running,\n Recursed,\n Dirty,\n Pending,\n}\n// ============================================================================\n// createReactiveSystem - Support for custom systems\n// ============================================================================\n/**\n * Create a custom reactive system with custom update, notify, and unwatched handlers\n * @param options - Reactive system options\n * @returns Custom reactive system methods\n */\nexport function createReactiveSystem({\n update,\n notify: notifyFn,\n unwatched: unwatchedFn,\n}: ReactiveSystemOptions): ReactiveSystem {\n function customPropagate(firstLink: Link): void {\n let link = firstLink\n let next = link.nextSub\n let stack: StackFrame | undefined\n\n top: for (;;) {\n const sub = link.sub\n let flags = sub.flags\n\n if (!(flags & 60)) {\n sub.flags = flags | Pending\n } else if (!(flags & 12)) {\n flags = 0\n } else if (!(flags & Running)) {\n sub.flags = (flags & ~Recursed) | Pending\n } else if (!(flags & 48)) {\n let vlink = sub.depsTail\n let valid = false\n while (vlink !== undefined) {\n if (vlink === link) {\n valid = true\n break\n }\n vlink = vlink.prevDep\n }\n if (valid) {\n sub.flags = flags | 40\n flags &= Mutable\n } else {\n flags = 0\n }\n } else {\n flags = 0\n }\n\n if (flags & Watching) notifyFn(sub)\n\n if (flags & Mutable) {\n const subSubs = sub.subs\n if (subSubs !== undefined) {\n const nextSub = subSubs.nextSub\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack }\n next = nextSub\n }\n link = subSubs\n continue\n }\n }\n\n if (next !== undefined) {\n link = next\n next = link.nextSub\n continue\n }\n\n while (stack !== undefined) {\n link = stack.value!\n stack = stack.prev\n if (link !== undefined) {\n next = link.nextSub\n continue top\n }\n }\n break\n }\n }\n function customCheckDirty(firstLink: Link, sub: ReactiveNode): boolean {\n let link = firstLink\n let stack: StackFrame | undefined\n let checkDepth = 0\n let dirty = false\n\n top: for (;;) {\n const dep = link.dep\n const depFlags = dep.flags\n\n if (sub.flags & Dirty) {\n dirty = true\n } else if ((depFlags & MutableDirty) === MutableDirty) {\n if (update(dep)) {\n const subs = dep.subs\n if (subs !== undefined && subs.nextSub !== undefined) {\n customShallowPropagate(subs)\n }\n dirty = true\n }\n } else if ((depFlags & MutablePending) === MutablePending) {\n if (link.nextSub !== undefined || link.prevSub !== undefined) {\n stack = { value: link, prev: stack }\n }\n link = dep.deps!\n sub = dep\n ++checkDepth\n continue\n }\n\n if (!dirty) {\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue\n }\n }\n\n while (checkDepth-- > 0) {\n const firstSub = sub.subs!\n const hasMultipleSubs = firstSub.nextSub !== undefined\n\n if (hasMultipleSubs) {\n link = stack!.value!\n stack = stack!.prev\n } else link = firstSub\n\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) customShallowPropagate(firstSub)\n sub = link.sub\n continue\n }\n dirty = false\n } else {\n sub.flags &= ~Pending\n }\n\n sub = link.sub\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue top\n }\n }\n\n return dirty\n }\n }\n function customShallowPropagate(firstLink: Link): void {\n let link: Link | undefined = firstLink\n do {\n const sub = link.sub\n const flags = sub.flags\n if ((flags & 48) === Pending) {\n sub.flags = flags | Dirty\n if ((flags & 6) === Watching) notifyFn(sub)\n }\n link = link.nextSub\n } while (link !== undefined)\n }\n function customUnlink(lnk: Link, sub: ReactiveNode = lnk.sub): Link | undefined {\n const dep = lnk.dep\n const prevDep = lnk.prevDep\n const nextDep = lnk.nextDep\n const nextSub = lnk.nextSub\n const prevSub = lnk.prevSub\n\n if (nextDep !== undefined) nextDep.prevDep = prevDep\n else sub.depsTail = prevDep\n if (prevDep !== undefined) prevDep.nextDep = nextDep\n else sub.deps = nextDep\n\n if (nextSub !== undefined) nextSub.prevSub = prevSub\n else dep.subsTail = prevSub\n if (prevSub !== undefined) prevSub.nextSub = nextSub\n else if ((dep.subs = nextSub) === undefined) unwatchedFn(dep)\n\n return nextDep\n }\n return {\n link,\n unlink: customUnlink,\n propagate: customPropagate,\n checkDirty: customCheckDirty,\n shallowPropagate: customShallowPropagate,\n }\n}\n// ============================================================================\n// Core functions\n// ============================================================================\n/**\n * Create a link between a dependency and a subscriber\n * @param dep - The dependency node\n * @param sub - The subscriber node\n * @param version - The cycle version\n */\nfunction link(dep: ReactiveNode, sub: ReactiveNode, version: number): void {\n const prevDep = sub.depsTail\n if (prevDep !== undefined && prevDep.dep === dep) return\n\n const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps\n if (nextDep !== undefined && nextDep.dep === dep) {\n nextDep.version = version\n sub.depsTail = nextDep\n return\n }\n\n const prevSub = dep.subsTail\n if (prevSub !== undefined && prevSub.version === version && prevSub.sub === sub) return\n\n const newLink = { version, dep, sub, prevDep, nextDep, prevSub, nextSub: undefined }\n sub.depsTail = newLink\n dep.subsTail = newLink\n\n if (nextDep !== undefined) nextDep.prevDep = newLink\n if (prevDep !== undefined) prevDep.nextDep = newLink\n else sub.deps = newLink\n if (prevSub !== undefined) prevSub.nextSub = newLink\n else dep.subs = newLink\n}\n/**\n * Remove a link between a dependency and a subscriber\n * @param lnk - The link to remove\n * @param sub - The subscriber node (defaults to lnk.sub)\n * @returns The next dependency link\n */\nfunction unlink(lnk: Link, sub: ReactiveNode = lnk.sub): Link | undefined {\n const dep = lnk.dep\n const prevDep = lnk.prevDep\n const nextDep = lnk.nextDep\n const nextSub = lnk.nextSub\n const prevSub = lnk.prevSub\n\n if (nextDep !== undefined) nextDep.prevDep = prevDep\n else sub.depsTail = prevDep\n if (prevDep !== undefined) prevDep.nextDep = nextDep\n else sub.deps = nextDep\n\n if (nextSub !== undefined) nextSub.prevSub = prevSub\n else dep.subsTail = prevSub\n if (prevSub !== undefined) prevSub.nextSub = nextSub\n else if ((dep.subs = nextSub) === undefined) unwatched(dep)\n\n return nextDep\n}\n/**\n * Handle when a dependency becomes unwatched\n * @param dep - The dependency node\n */\nfunction unwatched(dep: ReactiveNode): void {\n if (!(dep.flags & Mutable)) {\n disposeNode(dep)\n } else if ('getter' in dep && dep.getter !== undefined) {\n dep.depsTail = undefined\n dep.flags = MutableDirty\n purgeDeps(dep)\n }\n}\n/**\n * Propagate changes through the reactive graph\n * @param firstLink - The first link to propagate from\n */\nfunction propagate(firstLink: Link): void {\n let link = firstLink\n let next = link.nextSub\n let stack: StackFrame | undefined\n\n top: for (;;) {\n const sub = link.sub\n let flags = sub.flags\n\n if (!(flags & 60)) {\n sub.flags = flags | Pending\n } else if (!(flags & 12)) {\n flags = 0\n } else if (!(flags & Running)) {\n sub.flags = (flags & ~Recursed) | Pending\n } else if (!(flags & 48)) {\n let vlink = sub.depsTail\n let valid = false\n while (vlink !== undefined) {\n if (vlink === link) {\n valid = true\n break\n }\n vlink = vlink.prevDep\n }\n if (valid) {\n sub.flags = flags | 40\n flags &= Mutable\n } else {\n flags = 0\n }\n } else {\n flags = 0\n }\n\n if (flags & Watching) notify(sub)\n\n if (flags & Mutable) {\n const subSubs = sub.subs\n if (subSubs !== undefined) {\n const nextSub = subSubs.nextSub\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack }\n next = nextSub\n }\n link = subSubs\n continue\n }\n }\n\n if (next !== undefined) {\n link = next\n next = link.nextSub\n continue\n }\n\n while (stack !== undefined) {\n link = stack.value!\n stack = stack.prev\n if (link !== undefined) {\n next = link.nextSub\n continue top\n }\n }\n break\n }\n}\n/**\n * Check if a node is dirty by traversing its dependencies\n * @param firstLink - The first link to check\n * @param sub - The subscriber node\n * @returns True if the node is dirty\n */\nfunction checkDirty(firstLink: Link, sub: ReactiveNode): boolean {\n let link = firstLink\n let stack: StackFrame | undefined\n let checkDepth = 0\n let dirty = false\n\n top: for (;;) {\n const dep = link.dep\n const depFlags = dep.flags\n\n if (sub.flags & Dirty) {\n dirty = true\n } else if ((depFlags & MutableDirty) === MutableDirty) {\n if (update(dep)) {\n const subs = dep.subs\n if (subs !== undefined && subs.nextSub !== undefined) shallowPropagate(subs)\n dirty = true\n }\n } else if ((depFlags & MutablePending) === MutablePending) {\n if (link.nextSub !== undefined || link.prevSub !== undefined) {\n stack = { value: link, prev: stack }\n }\n link = dep.deps!\n sub = dep\n ++checkDepth\n continue\n }\n\n if (!dirty) {\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue\n }\n }\n\n while (checkDepth-- > 0) {\n const firstSub = sub.subs!\n const hasMultipleSubs = firstSub.nextSub !== undefined\n\n if (hasMultipleSubs) {\n link = stack!.value!\n stack = stack!.prev\n } else {\n link = firstSub\n }\n\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) shallowPropagate(firstSub)\n sub = link.sub\n continue\n }\n dirty = false\n } else {\n sub.flags &= ~Pending\n }\n\n sub = link.sub\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue top\n }\n }\n\n return dirty\n }\n}\n/**\n * Shallow propagate changes without traversing deeply\n * @param firstLink - The first link to propagate from\n */\nfunction shallowPropagate(firstLink: Link): void {\n let link: Link | undefined = firstLink\n do {\n const sub = link.sub\n const flags = sub.flags\n if ((flags & 48) === Pending) {\n sub.flags = flags | Dirty\n if ((flags & 6) === Watching) notify(sub)\n }\n link = link.nextSub\n } while (link !== undefined)\n}\n/**\n * Update a reactive node (signal or computed)\n * @param node - The node to update\n * @returns True if the value changed\n */\nfunction update(node: ReactiveNode): boolean {\n return 'getter' in node && node.getter !== undefined\n ? updateComputed(node as ComputedNode)\n : updateSignal(node as SignalNode)\n}\n/**\n * Notify an effect and add it to the queue\n * @param effect - The effect to notify\n */\nfunction notify(effect: ReactiveNode): void {\n effect.flags &= ~Watching\n const effects: EffectNode[] = []\n\n for (;;) {\n effects.push(effect as EffectNode)\n const nextLink = effect.subs\n if (nextLink === undefined) break\n effect = nextLink.sub\n if (effect === undefined || !(effect.flags & Watching)) break\n effect.flags &= ~Watching\n }\n\n // Route effects to appropriate queue based on transition context\n const targetQueue = isInTransition ? lowPriorityQueue : highPriorityQueue\n for (let i = effects.length - 1; i >= 0; i--) {\n targetQueue.push(effects[i]!)\n }\n}\n/**\n * Purge all dependencies from a subscriber\n * @param sub - The subscriber node\n */\nfunction purgeDeps(sub: ReactiveNode): void {\n const depsTail = sub.depsTail\n let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps\n while (dep !== undefined) dep = unlink(dep, sub)\n}\n/**\n * Dispose a reactive node\n * @param node - The node to dispose\n */\nfunction disposeNode(node: ReactiveNode): void {\n node.depsTail = undefined\n node.flags = 0\n purgeDeps(node)\n const sub = node.subs\n if (sub !== undefined) unlink(sub, node)\n}\n/**\n * Update a signal node\n * @param s - The signal node\n * @returns True if the value changed\n */\nfunction updateSignal(s: SignalNode): boolean {\n s.flags = Mutable\n const current = s.currentValue\n const pending = s.pendingValue\n if (current !== pending) {\n s.currentValue = pending\n return true\n }\n return false\n}\n/**\n * Update a computed node\n * @param c - The computed node\n * @returns True if the value changed\n */\nfunction updateComputed<T>(c: ComputedNode<T>): boolean {\n ++cycle\n const oldValue = c.value\n c.depsTail = undefined\n c.flags = MutableRunning\n const prevSub = activeSub\n activeSub = c\n\n try {\n const newValue = c.getter(oldValue)\n activeSub = prevSub\n c.flags &= ~Running\n purgeDeps(c)\n if (oldValue !== newValue) {\n c.value = newValue\n return true\n }\n return false\n } catch (e) {\n activeSub = prevSub\n c.flags &= ~Running\n throw e\n }\n}\n/**\n * Run an effect\n * @param e - The effect node\n */\nfunction runEffect(e: EffectNode): void {\n const flags = e.flags\n if (flags & Dirty || (flags & Pending && e.deps && checkDirty(e.deps, e))) {\n ++cycle\n effectRunDevtools(e)\n e.depsTail = undefined\n e.flags = WatchingRunning\n const prevSub = activeSub\n activeSub = e\n try {\n e.fn()\n activeSub = prevSub\n e.flags = Watching\n purgeDeps(e)\n } catch (err) {\n activeSub = prevSub\n e.flags = Watching\n throw err\n }\n } else {\n e.flags = Watching\n }\n}\n/**\n * Schedule a flush in a microtask to coalesce synchronous writes\n */\nexport function scheduleFlush(): void {\n const hasWork = highPriorityQueue.length > 0 || lowPriorityQueue.length > 0\n if (flushScheduled || !hasWork) return\n if (batchDepth > 0) return\n flushScheduled = true\n enqueueMicrotask(() => {\n flush()\n })\n}\n/**\n * Flush all queued effects with priority-based scheduling\n * High priority effects execute first; low priority can be interrupted\n */\nfunction flush(): void {\n beginFlushGuard()\n if (batchDepth > 0) {\n // If batching is active, defer until the batch completes\n scheduleFlush()\n endFlushGuard()\n return\n }\n const hasWork = highPriorityQueue.length > 0 || lowPriorityQueue.length > 0\n if (!hasWork) {\n flushScheduled = false\n endFlushGuard()\n return\n }\n flushScheduled = false\n\n // 1. Process all high-priority effects first\n let highIndex = 0\n while (highIndex < highPriorityQueue.length) {\n const e = highPriorityQueue[highIndex]!\n if (!beforeEffectRunGuard()) {\n if (highIndex > 0) {\n highPriorityQueue.copyWithin(0, highIndex)\n highPriorityQueue.length -= highIndex\n }\n endFlushGuard()\n return\n }\n highIndex++\n runEffect(e)\n }\n highPriorityQueue.length = 0\n\n // 2. Process low-priority effects, interruptible by high priority\n let lowIndex = 0\n while (lowIndex < lowPriorityQueue.length) {\n // Check if high priority work arrived during low priority execution\n if (highPriorityQueue.length > 0) {\n if (lowIndex > 0) {\n lowPriorityQueue.copyWithin(0, lowIndex)\n lowPriorityQueue.length -= lowIndex\n }\n scheduleFlush()\n endFlushGuard()\n return\n }\n const e = lowPriorityQueue[lowIndex]!\n if (!beforeEffectRunGuard()) {\n if (lowIndex > 0) {\n lowPriorityQueue.copyWithin(0, lowIndex)\n lowPriorityQueue.length -= lowIndex\n }\n endFlushGuard()\n return\n }\n lowIndex++\n runEffect(e)\n }\n lowPriorityQueue.length = 0\n\n endFlushGuard()\n}\n// ============================================================================\n// Signal - Inline optimized version\n// ============================================================================\n/**\n * Create a reactive signal\n * @param initialValue - The initial value\n * @returns A signal accessor function\n */\nexport function signal<T>(initialValue: T): SignalAccessor<T> {\n const s = {\n currentValue: initialValue,\n pendingValue: initialValue,\n subs: undefined,\n subsTail: undefined,\n flags: Mutable,\n __id: undefined as number | undefined,\n }\n registerSignalDevtools(initialValue, s)\n return signalOper.bind(s) as SignalAccessor<T>\n}\nfunction signalOper<T>(this: SignalNode<T>, value?: T): T | void {\n if (arguments.length > 0) {\n if (this.pendingValue !== value) {\n this.pendingValue = value as T\n this.flags = MutableDirty\n updateSignalDevtools(this, value)\n const subs = this.subs\n if (subs !== undefined) {\n propagate(subs)\n if (!batchDepth) scheduleFlush()\n }\n }\n return\n }\n\n const flags = this.flags\n if (flags & Dirty) {\n if (updateSignal(this)) {\n const subs = this.subs\n if (subs !== undefined) shallowPropagate(subs)\n }\n }\n\n let sub = activeSub\n while (sub !== undefined) {\n if (sub.flags & 3) {\n link(this, sub, cycle)\n break\n }\n const subSubs = sub.subs\n sub = subSubs !== undefined ? subSubs.sub : undefined\n }\n\n return this.currentValue\n}\n// ============================================================================\n// Computed\n// ============================================================================\n/**\n * Create a computed reactive value\n * @param getter - The getter function\n * @returns A computed accessor function\n */\nexport function computed<T>(getter: (oldValue?: T) => T): ComputedAccessor<T> {\n const c: ComputedNode<T> = {\n value: undefined as unknown as T,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 0,\n getter,\n }\n const bound = (computedOper as (this: ComputedNode<T>) => T).bind(c)\n return bound as ComputedAccessor<T>\n}\nfunction computedOper<T>(this: ComputedNode<T>): T {\n const flags = this.flags\n\n if (flags & Dirty) {\n if (updateComputed(this)) {\n const subs = this.subs\n if (subs !== undefined) shallowPropagate(subs)\n }\n } else if (flags & Pending) {\n if (this.deps && checkDirty(this.deps, this)) {\n if (updateComputed(this)) {\n const subs = this.subs\n if (subs !== undefined) shallowPropagate(subs)\n }\n } else {\n this.flags = flags & ~Pending\n }\n } else if (!flags) {\n this.flags = MutableRunning\n const prevSub = setActiveSub(this)\n try {\n this.value = this.getter(undefined)\n } finally {\n setActiveSub(prevSub)\n this.flags &= ~Running\n }\n }\n\n if (activeSub !== undefined) link(this, activeSub, cycle)\n return this.value\n}\n// ============================================================================\n// Effect\n// ============================================================================\n/**\n * Create a reactive effect\n * @param fn - The effect function\n * @returns An effect disposer function\n */\nexport function effect(fn: () => void): EffectDisposer {\n const e = {\n fn,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: WatchingRunning,\n __id: undefined as number | undefined,\n }\n\n registerEffectDevtools(e)\n\n const prevSub = activeSub\n if (prevSub !== undefined) link(e, prevSub, 0)\n activeSub = e\n\n try {\n effectRunDevtools(e)\n fn()\n } finally {\n activeSub = prevSub\n e.flags &= ~Running\n }\n\n return effectOper.bind(e) as EffectDisposer\n}\nfunction effectOper(this: EffectNode): void {\n disposeNode(this)\n}\n// ============================================================================\n// Effect Scope\n// ============================================================================\n/**\n * Create a reactive effect scope\n * @param fn - The scope function\n * @returns An effect scope disposer function\n */\nexport function effectScope(fn: () => void): EffectScopeDisposer {\n const e = { deps: undefined, depsTail: undefined, subs: undefined, subsTail: undefined, flags: 0 }\n\n const prevSub = activeSub\n if (prevSub !== undefined) link(e, prevSub, 0)\n activeSub = e\n\n try {\n fn()\n } finally {\n activeSub = prevSub\n }\n\n return effectScopeOper.bind(e) as EffectScopeDisposer\n}\nfunction effectScopeOper(this: EffectScopeNode): void {\n disposeNode(this)\n}\n// ============================================================================\n// Trigger\n// ============================================================================\n/**\n * Trigger a reactive computation without creating a persistent subscription\n * @param fn - The function to run\n */\nexport function trigger(fn: () => void): void {\n const sub: SubscriberNode = { deps: undefined, depsTail: undefined, flags: Watching }\n const prevSub = activeSub\n activeSub = sub as ReactiveNode\n\n try {\n fn()\n } finally {\n activeSub = prevSub\n let lnk = sub.deps\n while (lnk !== undefined) {\n const dep = lnk.dep\n lnk = unlink(lnk, sub)\n const subs = dep.subs\n if (subs !== undefined) {\n sub.flags = 0\n propagate(subs)\n shallowPropagate(subs)\n }\n }\n if (!batchDepth) scheduleFlush()\n }\n}\n// ============================================================================\n// Batch processing & Utility API\n// ============================================================================\n/**\n * Start a batch of updates\n */\nexport function startBatch(): void {\n ++batchDepth\n}\n/**\n * End a batch of updates and flush effects\n */\nexport function endBatch(): void {\n if (--batchDepth === 0) flush()\n}\n/**\n * Execute a function in a batch\n * @param fn - The function to execute\n * @returns The return value of the function\n */\nexport function batch<T>(fn: () => T): T {\n ++batchDepth\n try {\n return fn()\n } finally {\n if (--batchDepth === 0) flush()\n }\n}\n/**\n * Get the current active subscriber\n * @returns The active subscriber or undefined\n */\nexport function getActiveSub(): ReactiveNode | undefined {\n return activeSub\n}\n/**\n * Set the active subscriber\n * @param sub - The new active subscriber\n * @returns The previous active subscriber\n */\nexport function setActiveSub(sub: ReactiveNode | undefined): ReactiveNode | undefined {\n const prev = activeSub\n activeSub = sub\n return prev\n}\n/**\n * Get the current batch depth\n * @returns The current batch depth\n */\nexport function getBatchDepth(): number {\n return batchDepth\n}\n/**\n * Execute a function without tracking dependencies\n * @param fn - The function to execute\n * @returns The return value of the function\n */\nexport function untrack<T>(fn: () => T): T {\n const prev = activeSub\n activeSub = undefined\n try {\n return fn()\n } finally {\n activeSub = prev\n }\n}\n/**\n * Peek at a reactive value without tracking it as a dependency\n * @param accessor - The accessor function\n * @returns The value\n */\nexport function peek<T>(accessor: () => T): T {\n return untrack(accessor)\n}\n// Type detection - Fixed: using Function.name\n/**\n * Check if a function is a signal accessor\n * @param fn - The function to check\n * @returns True if the function is a signal accessor\n */\nexport function isSignal(fn: unknown): fn is SignalAccessor<unknown> {\n return typeof fn === 'function' && fn.name === 'bound signalOper'\n}\n/**\n * Check if a function is a computed accessor\n * @param fn - The function to check\n * @returns True if the function is a computed accessor\n */\nexport function isComputed(fn: unknown): fn is ComputedAccessor<unknown> {\n return typeof fn === 'function' && fn.name === 'bound computedOper'\n}\n/**\n * Check if a function is an effect disposer\n * @param fn - The function to check\n * @returns True if the function is an effect disposer\n */\nexport function isEffect(fn: unknown): fn is EffectDisposer {\n return typeof fn === 'function' && fn.name === 'bound effectOper'\n}\n/**\n * Check if a function is an effect scope disposer\n * @param fn - The function to check\n * @returns True if the function is an effect scope disposer\n */\nexport function isEffectScope(fn: unknown): fn is EffectScopeDisposer {\n return typeof fn === 'function' && fn.name === 'bound effectScopeOper'\n}\n// ============================================================================\n// Transition Context (for priority scheduling)\n// ============================================================================\n/**\n * Set the transition context\n * @param value - Whether we're inside a transition\n * @returns The previous transition context value\n */\nexport function setTransitionContext(value: boolean): boolean {\n const prev = isInTransition\n isInTransition = value\n return prev\n}\n/**\n * Get the current transition context\n * @returns True if currently inside a transition\n */\nexport function getTransitionContext(): boolean {\n return isInTransition\n}\n// Export aliases for API compatibility\nexport { signal as createSignal }\nexport type { SignalAccessor as Signal }\n\nexport { flush, link, unlink, propagate, checkDirty, shallowPropagate }\nexport default {\n signal,\n computed,\n effect,\n effectScope,\n trigger,\n batch,\n startBatch,\n endBatch,\n flush,\n untrack,\n peek,\n isSignal,\n isComputed,\n isEffect,\n isEffectScope,\n getActiveSub,\n setActiveSub,\n getBatchDepth,\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate,\n createReactiveSystem,\n ReactiveFlags,\n}\nexport const $state = signal as <T>(value: T) => T\n\nlet devtoolsSignalId = 0\nlet devtoolsEffectId = 0\n\ninterface DevtoolsIdentifiable {\n __id?: number\n}\n\nfunction registerSignalDevtools(value: unknown, node: SignalNode): number | undefined {\n const hook = getDevtoolsHook()\n if (!hook) return undefined\n const id = ++devtoolsSignalId\n hook.registerSignal(id, value)\n ;(node as SignalNode & DevtoolsIdentifiable).__id = id\n return id\n}\n\nfunction updateSignalDevtools(node: SignalNode, value: unknown): void {\n const hook = getDevtoolsHook()\n if (!hook) return\n const id = (node as SignalNode & DevtoolsIdentifiable).__id\n if (id) hook.updateSignal(id, value)\n}\n\nfunction registerEffectDevtools(node: EffectNode): number | undefined {\n const hook = getDevtoolsHook()\n if (!hook) return undefined\n const id = ++devtoolsEffectId\n hook.registerEffect(id)\n ;(node as EffectNode & DevtoolsIdentifiable).__id = id\n return id\n}\n\nfunction effectRunDevtools(node: EffectNode): void {\n const hook = getDevtoolsHook()\n if (!hook) return\n const id = (node as EffectNode & DevtoolsIdentifiable).__id\n if (id) hook.effectRun(id)\n}\n\n// ============================================================================\n// Selector\n// ============================================================================\n/**\n * Create a selector signal that efficiently updates only when the selected key matches.\n * Useful for large lists where only one item is selected.\n *\n * @param source - The source signal returning the current key\n * @param equalityFn - Optional equality function\n * @returns A selector function that takes a key and returns a boolean signal accessor\n */\nexport function createSelector<T>(\n source: () => T,\n equalityFn: (a: T, b: T) => boolean = (a, b) => a === b,\n): (key: T) => boolean {\n let current = source()\n const observers = new Map<T, SignalAccessor<boolean>>()\n\n effect(() => {\n const next = source()\n if (equalityFn(current, next)) return\n\n const prevSig = observers.get(current)\n if (prevSig) prevSig(false)\n\n const nextSig = observers.get(next)\n if (nextSig) nextSig(true)\n\n current = next\n })\n\n return (key: T) => {\n let sig = observers.get(key)\n if (!sig) {\n sig = signal(equalityFn(key, current))\n observers.set(key, sig)\n registerRootCleanup(() => observers.delete(key))\n }\n return sig()\n }\n}\n","import { signal, batch, type SignalAccessor } from './signal'\n\nconst PROXY = Symbol('fict:store-proxy')\nconst TARGET = Symbol('fict:store-target')\n\n// ============================================================================\n// Store (Deep Proxy)\n// ============================================================================\n\nexport type Store<T> = T\n\n/**\n * Create a Store: a reactive proxy that allows fine-grained access and mutation.\n *\n * @param initialValue - The initial state object\n * @returns [store, setStore]\n */\nexport function createStore<T extends object>(\n initialValue: T,\n): [Store<T>, (fn: (state: T) => void | T) => void] {\n const unwrapped = unwrap(initialValue)\n const wrapped = wrap(unwrapped)\n\n function setStore(fn: (state: T) => void | T) {\n batch(() => {\n const result = fn(wrapped)\n if (result !== undefined) {\n reconcile(wrapped, result)\n }\n })\n }\n\n return [wrapped, setStore]\n}\n\n// Map of target object -> Proxy\nconst proxyCache = new WeakMap<object, any>()\n// Map of target object -> Map<key, Signal>\nconst signalCache = new WeakMap<object, Map<string | symbol, SignalAccessor<any>>>()\n\nfunction wrap<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value\n if ((value as any)[PROXY]) return value\n\n if (proxyCache.has(value)) return proxyCache.get(value)\n\n const handler: ProxyHandler<any> = {\n get(target, prop, receiver) {\n if (prop === PROXY) return true\n if (prop === TARGET) return target\n\n const value = Reflect.get(target, prop, receiver)\n\n // Track property access\n track(target, prop)\n\n // Recursively wrap objects\n return wrap(value)\n },\n set(target, prop, value, receiver) {\n if (prop === PROXY || prop === TARGET) return false\n\n const oldValue = Reflect.get(target, prop, receiver)\n if (oldValue === value) return true\n\n const result = Reflect.set(target, prop, value, receiver)\n if (result) {\n trigger(target, prop)\n }\n return result\n },\n deleteProperty(target, prop) {\n const result = Reflect.deleteProperty(target, prop)\n if (result) {\n trigger(target, prop)\n }\n return result\n },\n }\n\n const proxy = new Proxy(value, handler)\n proxyCache.set(value, proxy)\n return proxy as T\n}\n\nfunction unwrap<T>(value: T): T {\n if (value && typeof value === 'object' && (value as any)[PROXY]) {\n return (value as any)[TARGET]\n }\n return value\n}\n\nfunction track(target: object, prop: string | symbol) {\n let signals = signalCache.get(target)\n if (!signals) {\n signals = new Map()\n signalCache.set(target, signals)\n }\n\n let s = signals.get(prop)\n if (!s) {\n s = signal(getLastValue(target, prop))\n signals.set(prop, s)\n }\n s() // subscribe\n}\n\nfunction trigger(target: object, prop: string | symbol) {\n const signals = signalCache.get(target)\n if (signals) {\n const s = signals.get(prop)\n if (s) {\n s(getLastValue(target, prop)) // notify with new value\n }\n }\n}\n\nfunction getLastValue(target: any, prop: string | symbol) {\n return target[prop]\n}\n\n/**\n * Reconcile a store path with a new value (shallow merge/diff)\n */\nfunction reconcile(target: any, value: any) {\n if (target === value) return\n if (value === null || typeof value !== 'object') return // Should replace?\n\n const realTarget = unwrap(target)\n const realValue = unwrap(value)\n\n const keys = new Set([...Object.keys(realTarget), ...Object.keys(realValue)])\n for (const key of keys) {\n if (realValue[key] === undefined && realTarget[key] !== undefined) {\n // deleted\n delete target[key] // Triggers proxy trap\n } else if (realTarget[key] !== realValue[key]) {\n target[key] = realValue[key] // Triggers proxy trap\n }\n }\n}\n\n// ============================================================================\n// Diffing Signal (for List Items)\n// ============================================================================\n\n/**\n * Creates a signal that returns a Stable Proxy.\n * Updates to the signal (via set) will diff the new value against the old value\n * and trigger property-specific updates.\n */\nexport function createDiffingSignal<T extends object>(initialValue: T) {\n let currentValue = unwrap(initialValue)\n const signals = new Map<string | symbol, SignalAccessor<any>>()\n\n // The stable proxy we return\n const proxy = new Proxy({} as T, {\n get(_, prop) {\n if (prop === PROXY) return true\n if (prop === TARGET) return currentValue\n\n // Subscribe to property\n let s = signals.get(prop)\n if (!s) {\n // Initialize signal with current property value\n s = signal((currentValue as any)[prop])\n signals.set(prop, s)\n }\n return s()\n },\n ownKeys() {\n return Reflect.ownKeys(currentValue)\n },\n })\n\n const read = () => proxy\n\n const write = (newValue: T) => {\n const next = unwrap(newValue)\n const prev = currentValue\n currentValue = next\n\n if (prev === next) {\n // Same ref update: re-evaluate all tracked signals\n // This is necessary for in-place mutations\n for (const [prop, s] of signals) {\n const newVal = (next as any)[prop]\n s(newVal)\n }\n return\n }\n\n // Diff logic\n // We only trigger signals for properties that exist in our cache (tracked)\n // and have changed.\n for (const [prop, s] of signals) {\n const oldVal = (prev as any)[prop]\n const newVal = (next as any)[prop]\n if (oldVal !== newVal) {\n s(newVal)\n }\n }\n\n // Note: If new properties appeared that weren't tracked, we don't care\n // because no one is listening.\n // If we assume shape stability (Keyed List), this is efficient.\n }\n\n return [read, write] as const\n}\n","import { computed } from './signal'\nimport type { Signal } from './signal'\n\nexport type Memo<T> = () => T\n\nexport function createMemo<T>(fn: () => T): Memo<T> {\n return computed(fn)\n}\n\nexport function fromSignal<T>(signal: Signal<T>): Memo<T> {\n return () => signal()\n}\n\nexport const $memo = createMemo\n","import {\n getCurrentRoot,\n handleError,\n registerRootCleanup,\n runCleanupList,\n withEffectCleanups,\n} from './lifecycle'\nimport { effect } from './signal'\nimport type { Cleanup } from './types'\n\nexport type Effect = () => void | Cleanup\n\nexport function createEffect(fn: Effect): () => void {\n let cleanups: Cleanup[] = []\n const rootForError = getCurrentRoot()\n\n const run = () => {\n runCleanupList(cleanups)\n const bucket: Cleanup[] = []\n withEffectCleanups(bucket, () => {\n try {\n const maybeCleanup = fn()\n if (typeof maybeCleanup === 'function') {\n bucket.push(maybeCleanup)\n }\n } catch (err) {\n if (handleError(err, { source: 'effect' }, rootForError)) {\n return\n }\n throw err\n }\n })\n cleanups = bucket\n }\n\n const disposeEffect = effect(run)\n const teardown = () => {\n runCleanupList(cleanups)\n disposeEffect()\n }\n\n registerRootCleanup(teardown)\n\n return teardown\n}\n\nexport const $effect = createEffect\n\nexport function createRenderEffect(fn: Effect): () => void {\n let cleanup: Cleanup | undefined\n const rootForError = getCurrentRoot()\n\n const run = () => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n try {\n const maybeCleanup = fn()\n if (typeof maybeCleanup === 'function') {\n cleanup = maybeCleanup\n }\n } catch (err) {\n if (handleError(err, { source: 'effect' }, rootForError)) {\n return\n }\n throw err\n }\n }\n\n const disposeEffect = effect(run)\n const teardown = () => {\n if (cleanup) {\n cleanup()\n cleanup = undefined\n }\n disposeEffect()\n }\n\n registerRootCleanup(teardown)\n\n return teardown\n}\n","import { createEffect } from './effect'\nimport { createMemo } from './memo'\nimport { createSignal, type SignalAccessor, type ComputedAccessor } from './signal'\n\ninterface HookContext {\n slots: unknown[]\n cursor: number\n}\n\nconst ctxStack: HookContext[] = []\n\nexport function __fictUseContext(): HookContext {\n if (ctxStack.length === 0) {\n const ctx: HookContext = { slots: [], cursor: 0 }\n ctxStack.push(ctx)\n return ctx\n }\n const ctx = ctxStack[ctxStack.length - 1]!\n ctx.cursor = 0\n return ctx\n}\n\nexport function __fictPushContext(): HookContext {\n const ctx: HookContext = { slots: [], cursor: 0 }\n ctxStack.push(ctx)\n return ctx\n}\n\nexport function __fictPopContext(): void {\n ctxStack.pop()\n}\n\nexport function __fictResetContext(): void {\n ctxStack.length = 0\n}\n\nexport function __fictUseSignal<T>(ctx: HookContext, initial: T, slot?: number): SignalAccessor<T> {\n const index = slot ?? ctx.cursor++\n if (!ctx.slots[index]) {\n ctx.slots[index] = createSignal(initial)\n }\n return ctx.slots[index] as SignalAccessor<T>\n}\n\nexport function __fictUseMemo<T>(\n ctx: HookContext,\n fn: () => T,\n slot?: number,\n): ComputedAccessor<T> {\n const index = slot ?? ctx.cursor++\n if (!ctx.slots[index]) {\n ctx.slots[index] = createMemo(fn)\n }\n return ctx.slots[index] as ComputedAccessor<T>\n}\n\nexport function __fictUseEffect(ctx: HookContext, fn: () => void, slot?: number): void {\n const index = slot ?? ctx.cursor++\n if (!ctx.slots[index]) {\n ctx.slots[index] = createEffect(fn)\n }\n}\n\nexport function __fictRender<T>(ctx: HookContext, fn: () => T): T {\n ctxStack.push(ctx)\n ctx.cursor = 0\n try {\n return fn()\n } finally {\n ctxStack.pop()\n }\n}\n","import { createSignal } from './signal'\n\nexport interface VersionedSignalOptions<T> {\n equals?: (prev: T, next: T) => boolean\n}\n\nexport interface VersionedSignal<T> {\n /** Reactive read that tracks both the value and version counter */\n read: () => T\n /** Write a new value, forcing a version bump when value is equal */\n write: (next: T) => void\n /** Force a version bump without changing the value */\n force: () => void\n /** Read the current version without creating a dependency */\n peekVersion: () => number\n /** Read the current value without tracking */\n peekValue: () => T\n}\n\n/**\n * Create a signal wrapper that forces subscribers to update when the same reference is written.\n *\n * Useful for compiler-generated keyed list items where updates may reuse the same object reference.\n */\nexport function createVersionedSignal<T>(\n initialValue: T,\n options?: VersionedSignalOptions<T>,\n): VersionedSignal<T> {\n const equals = options?.equals ?? Object.is\n const value = createSignal(initialValue)\n const version = createSignal(0)\n\n const bumpVersion = () => {\n const next = version() + 1\n version(next)\n }\n\n return {\n read: () => {\n // Track both version and value to ensure equal writes notify subscribers\n version()\n return value()\n },\n write: (next: T) => {\n const prev = value()\n if (!equals(prev, next)) {\n value(next)\n return\n }\n bumpVersion()\n },\n force: () => {\n bumpVersion()\n },\n peekVersion: () => version(),\n peekValue: () => value(),\n }\n}\n","import { createMemo } from './memo'\n\nconst propGetters = new WeakSet<(...args: unknown[]) => unknown>()\nconst rawToProxy = new WeakMap<object, object>()\nconst proxyToRaw = new WeakMap<object, object>()\n\n/**\n * @internal\n * Marks a zero-arg getter so props proxy can lazily evaluate it.\n * Users normally never call this directly; the compiler injects it.\n */\nexport function __fictProp<T>(getter: () => T): () => T {\n if (typeof getter === 'function' && getter.length === 0) {\n propGetters.add(getter)\n }\n return getter\n}\n\nfunction isPropGetter(value: unknown): value is () => unknown {\n return typeof value === 'function' && propGetters.has(value as (...args: unknown[]) => unknown)\n}\n\nexport function createPropsProxy<T extends Record<string, unknown>>(props: T): T {\n if (!props || typeof props !== 'object') {\n return props\n }\n\n if (proxyToRaw.has(props)) {\n return props\n }\n\n const cached = rawToProxy.get(props)\n if (cached) {\n return cached as T\n }\n\n const proxy = new Proxy(props, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver)\n if (isPropGetter(value)) {\n return value()\n }\n return value\n },\n set(target, prop, value, receiver) {\n return Reflect.set(target, prop, value, receiver)\n },\n has(target, prop) {\n return prop in target\n },\n ownKeys(target) {\n return Reflect.ownKeys(target)\n },\n getOwnPropertyDescriptor(target, prop) {\n return Object.getOwnPropertyDescriptor(target, prop)\n },\n })\n\n rawToProxy.set(props, proxy)\n proxyToRaw.set(proxy, props)\n\n return proxy as T\n}\n\nexport function unwrapProps<T extends Record<string, unknown>>(props: T): T {\n if (!props || typeof props !== 'object') {\n return props\n }\n return (proxyToRaw.get(props) as T | undefined) ?? props\n}\n\n/**\n * Create a rest-like props object while preserving prop getters.\n * Excludes the specified keys from the returned object.\n */\nexport function __fictPropsRest<T extends Record<string, unknown>>(\n props: T,\n exclude: (string | number | symbol)[],\n): Record<string, unknown> {\n const raw = unwrapProps(props)\n const out: Record<string, unknown> = {}\n const excludeSet = new Set(exclude)\n\n for (const key of Reflect.ownKeys(raw)) {\n if (excludeSet.has(key)) continue\n out[key as string] = (raw as Record<string | symbol, unknown>)[key]\n }\n\n // Wrap in props proxy so getters remain lazy when accessed via rest\n return createPropsProxy(out)\n}\n\n/**\n * Merge multiple props-like objects while preserving lazy getters.\n * Later sources override earlier ones.\n *\n * Uses lazy lookup strategy - properties are only accessed when read,\n * avoiding upfront iteration of all keys.\n */\ntype MergeSource<T extends Record<string, unknown>> = T | (() => T)\n\nexport function mergeProps<T extends Record<string, unknown>>(\n ...sources: (MergeSource<T> | null | undefined)[]\n): Record<string, unknown> {\n // Filter out null/undefined sources upfront and store as concrete type\n const validSources: MergeSource<T>[] = sources.filter(\n (s): s is MergeSource<T> => s != null && (typeof s === 'object' || typeof s === 'function'),\n )\n\n if (validSources.length === 0) {\n return {}\n }\n\n if (validSources.length === 1 && typeof validSources[0] === 'object') {\n // Return source directly to preserve getter behavior (consistent with multi-source)\n return validSources[0]!\n }\n\n const resolveSource = (src: MergeSource<T>): T | undefined => {\n const value = typeof src === 'function' ? src() : src\n if (!value || typeof value !== 'object') return undefined\n return unwrapProps(value as T)\n }\n\n return new Proxy({} as Record<string, unknown>, {\n get(_, prop) {\n // Symbol properties (like Symbol.iterator) should return undefined\n if (typeof prop === 'symbol') {\n return undefined\n }\n // Search sources in reverse order (last wins)\n for (let i = validSources.length - 1; i >= 0; i--) {\n const src = validSources[i]!\n const raw = resolveSource(src)\n if (!raw || !(prop in raw)) continue\n\n const value = (raw as Record<string | symbol, unknown>)[prop]\n // Preserve prop getters - let child component's createPropsProxy unwrap lazily\n if (typeof src === 'function' && !isPropGetter(value)) {\n return __fictProp(() => {\n const latest = resolveSource(src)\n if (!latest || !(prop in latest)) return undefined\n return (latest as Record<string | symbol, unknown>)[prop]\n })\n }\n return value\n }\n return undefined\n },\n\n has(_, prop) {\n for (const src of validSources) {\n const raw = resolveSource(src)\n if (raw && prop in raw) {\n return true\n }\n }\n return false\n },\n\n ownKeys() {\n const keys = new Set<string | symbol>()\n for (const src of validSources) {\n const raw = resolveSource(src)\n if (raw) {\n for (const key of Reflect.ownKeys(raw)) {\n keys.add(key)\n }\n }\n }\n return Array.from(keys)\n },\n\n getOwnPropertyDescriptor(_, prop) {\n for (let i = validSources.length - 1; i >= 0; i--) {\n const raw = resolveSource(validSources[i]!)\n if (raw && prop in raw) {\n return {\n enumerable: true,\n configurable: true,\n get: () => {\n const value = (raw as Record<string | symbol, unknown>)[prop]\n // Preserve prop getters - let child component's createPropsProxy unwrap lazily\n return value\n },\n }\n }\n }\n return undefined\n },\n })\n}\n\nexport type PropGetter<T> = (() => T) & { __fictProp: true }\n/**\n * Memoize a prop getter to cache expensive computations.\n * Use when prop expressions involve heavy calculations.\n *\n * @example\n * ```tsx\n * // Without useProp - recomputes on every access\n * <Child data={expensiveComputation(list, filter)} />\n *\n * // With useProp - cached until dependencies change, auto-unwrapped by props proxy\n * const memoizedData = useProp(() => expensiveComputation(list, filter))\n * <Child data={memoizedData} />\n * ```\n */\nexport function useProp<T>(getter: () => T): PropGetter<T> {\n // Wrap in prop so component props proxy auto-unwraps when passed down.\n return __fictProp(createMemo(getter)) as PropGetter<T>\n}\n","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 HTMLElement = HTMLElement>(): RefObject<T> {\n return { current: null }\n}\n","import { createEffect } from './effect'\nimport { setTransitionContext, signal, scheduleFlush, untrack } from './signal'\n\n// ============================================================================\n// startTransition - Mark updates as low priority\n// ============================================================================\n\n/**\n * Execute a function with low-priority scheduling.\n * Updates triggered inside the callback will be processed after any high-priority updates.\n * This keeps the UI responsive during expensive operations.\n *\n * @param fn - The function to execute in transition context\n *\n * @example\n * ```tsx\n * const handleInput = (e) => {\n * query = e.target.value // High priority: immediate\n * startTransition(() => {\n * // Low priority: processed after high priority updates\n * filteredItems = allItems.filter(x => x.includes(query))\n * })\n * }\n * ```\n */\nexport function startTransition(fn: () => void): void {\n const prev = setTransitionContext(true)\n try {\n fn()\n } finally {\n setTransitionContext(prev)\n scheduleFlush()\n }\n}\n\n// ============================================================================\n// useTransition - Hook for managing transition state\n// ============================================================================\n\n/**\n * React-style useTransition hook.\n * Returns a pending signal and a startTransition function.\n *\n * @returns A tuple of [isPending accessor, startTransition function]\n *\n * @example\n * ```tsx\n * function SearchComponent() {\n * let query = $state('')\n * const [isPending, start] = useTransition()\n *\n * const handleChange = (e) => {\n * query = e.target.value\n * start(() => {\n * // Expensive filtering happens in low priority\n * filteredResults = expensiveFilter(allData, query)\n * })\n * }\n *\n * return (\n * <>\n * <input value={query} onInput={handleChange} />\n * {isPending() && <Spinner />}\n * <Results items={filteredResults} />\n * </>\n * )\n * }\n * ```\n */\nexport function useTransition(): [() => boolean, (fn: () => void) => void] {\n const pending = signal(false)\n\n const start = (fn: () => void) => {\n pending(true)\n startTransition(() => {\n try {\n fn()\n } finally {\n pending(false)\n }\n })\n }\n\n return [() => pending(), start]\n}\n\n// ============================================================================\n// useDeferredValue - Defer value updates to low priority\n// ============================================================================\n\n/**\n * Creates a deferred version of a value that updates with low priority.\n * The returned accessor will lag behind the source value during rapid updates,\n * allowing high-priority work to complete first.\n *\n * @param getValue - Accessor function that returns the source value\n * @returns Accessor function that returns the deferred value\n *\n * @example\n * ```tsx\n * function SearchResults({ query }) {\n * const deferredQuery = useDeferredValue(() => query)\n *\n * // deferredQuery lags behind query during rapid typing\n * const results = expensiveSearch(deferredQuery())\n *\n * return <ResultList items={results} />\n * }\n * ```\n */\nexport function useDeferredValue<T>(getValue: () => T): () => T {\n const deferredValue = signal(getValue())\n\n // Track source value changes and update deferred value in transition\n createEffect(() => {\n const newValue = getValue()\n // Use untrack to read current deferred value without creating a dependency\n // This prevents the effect from re-running when deferredValue changes\n const currentDeferred = untrack(() => deferredValue())\n if (currentDeferred !== newValue) {\n startTransition(() => {\n deferredValue(newValue)\n })\n }\n })\n\n return () => deferredValue()\n}\n","import { batch as baseBatch, untrack as baseUntrack } from './signal'\n\nexport function batch<T>(fn: () => T): T {\n return baseBatch(fn)\n}\n\nexport function untrack<T>(fn: () => T): T {\n return baseUntrack(fn)\n}\n\n// Transition APIs for priority scheduling\nexport { startTransition, useTransition, useDeferredValue } from './transition'\n","import type { FictNode } from './types'\n\nexport const Fragment = Symbol('Fragment')\n\nexport function jsx(\n type: string | typeof Fragment | ((props: Record<string, unknown>) => FictNode),\n props: Record<string, unknown>,\n key?: string,\n): FictNode {\n return { type, props, key }\n}\n\nexport const jsxs = jsx\nexport const jsxDEV = jsx\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace JSX {\n export type Element = FictNode\n\n export interface IntrinsicElements {\n // Document structure\n html: HTMLAttributes<HTMLHtmlElement>\n head: HTMLAttributes<HTMLHeadElement>\n body: HTMLAttributes<HTMLBodyElement>\n title: HTMLAttributes<HTMLTitleElement>\n meta: MetaHTMLAttributes<HTMLMetaElement>\n link: LinkHTMLAttributes<HTMLLinkElement>\n style: StyleHTMLAttributes<HTMLStyleElement>\n script: ScriptHTMLAttributes<HTMLScriptElement>\n noscript: HTMLAttributes<HTMLElement>\n\n // Layout & Semantic\n div: HTMLAttributes<HTMLDivElement>\n span: HTMLAttributes<HTMLSpanElement>\n main: HTMLAttributes<HTMLElement>\n header: HTMLAttributes<HTMLElement>\n footer: HTMLAttributes<HTMLElement>\n section: HTMLAttributes<HTMLElement>\n article: HTMLAttributes<HTMLElement>\n aside: HTMLAttributes<HTMLElement>\n nav: HTMLAttributes<HTMLElement>\n address: HTMLAttributes<HTMLElement>\n\n // Headings\n h1: HTMLAttributes<HTMLHeadingElement>\n h2: HTMLAttributes<HTMLHeadingElement>\n h3: HTMLAttributes<HTMLHeadingElement>\n h4: HTMLAttributes<HTMLHeadingElement>\n h5: HTMLAttributes<HTMLHeadingElement>\n h6: HTMLAttributes<HTMLHeadingElement>\n hgroup: HTMLAttributes<HTMLElement>\n\n // Text content\n p: HTMLAttributes<HTMLParagraphElement>\n blockquote: BlockquoteHTMLAttributes<HTMLQuoteElement>\n pre: HTMLAttributes<HTMLPreElement>\n figure: HTMLAttributes<HTMLElement>\n figcaption: HTMLAttributes<HTMLElement>\n hr: HTMLAttributes<HTMLHRElement>\n br: HTMLAttributes<HTMLBRElement>\n wbr: HTMLAttributes<HTMLElement>\n\n // Inline text semantics\n a: AnchorHTMLAttributes<HTMLAnchorElement>\n abbr: HTMLAttributes<HTMLElement>\n b: HTMLAttributes<HTMLElement>\n bdi: HTMLAttributes<HTMLElement>\n bdo: HTMLAttributes<HTMLElement>\n cite: HTMLAttributes<HTMLElement>\n code: HTMLAttributes<HTMLElement>\n data: DataHTMLAttributes<HTMLDataElement>\n dfn: HTMLAttributes<HTMLElement>\n em: HTMLAttributes<HTMLElement>\n i: HTMLAttributes<HTMLElement>\n kbd: HTMLAttributes<HTMLElement>\n mark: HTMLAttributes<HTMLElement>\n q: QuoteHTMLAttributes<HTMLQuoteElement>\n rp: HTMLAttributes<HTMLElement>\n rt: HTMLAttributes<HTMLElement>\n ruby: HTMLAttributes<HTMLElement>\n s: HTMLAttributes<HTMLElement>\n samp: HTMLAttributes<HTMLElement>\n small: HTMLAttributes<HTMLElement>\n strong: HTMLAttributes<HTMLElement>\n sub: HTMLAttributes<HTMLElement>\n sup: HTMLAttributes<HTMLElement>\n time: TimeHTMLAttributes<HTMLTimeElement>\n u: HTMLAttributes<HTMLElement>\n var: HTMLAttributes<HTMLElement>\n\n // Lists\n ul: HTMLAttributes<HTMLUListElement>\n ol: OlHTMLAttributes<HTMLOListElement>\n li: LiHTMLAttributes<HTMLLIElement>\n dl: HTMLAttributes<HTMLDListElement>\n dt: HTMLAttributes<HTMLElement>\n dd: HTMLAttributes<HTMLElement>\n menu: HTMLAttributes<HTMLMenuElement>\n\n // Tables\n table: TableHTMLAttributes<HTMLTableElement>\n caption: HTMLAttributes<HTMLTableCaptionElement>\n colgroup: ColgroupHTMLAttributes<HTMLTableColElement>\n col: ColHTMLAttributes<HTMLTableColElement>\n thead: HTMLAttributes<HTMLTableSectionElement>\n tbody: HTMLAttributes<HTMLTableSectionElement>\n tfoot: HTMLAttributes<HTMLTableSectionElement>\n tr: HTMLAttributes<HTMLTableRowElement>\n th: ThHTMLAttributes<HTMLTableCellElement>\n td: TdHTMLAttributes<HTMLTableCellElement>\n\n // Forms\n form: FormHTMLAttributes<HTMLFormElement>\n fieldset: FieldsetHTMLAttributes<HTMLFieldSetElement>\n legend: HTMLAttributes<HTMLLegendElement>\n label: LabelHTMLAttributes<HTMLLabelElement>\n input: InputHTMLAttributes<HTMLInputElement>\n button: ButtonHTMLAttributes<HTMLButtonElement>\n select: SelectHTMLAttributes<HTMLSelectElement>\n datalist: HTMLAttributes<HTMLDataListElement>\n optgroup: OptgroupHTMLAttributes<HTMLOptGroupElement>\n option: OptionHTMLAttributes<HTMLOptionElement>\n textarea: TextareaHTMLAttributes<HTMLTextAreaElement>\n output: OutputHTMLAttributes<HTMLOutputElement>\n progress: ProgressHTMLAttributes<HTMLProgressElement>\n meter: MeterHTMLAttributes<HTMLMeterElement>\n\n // Interactive\n details: DetailsHTMLAttributes<HTMLDetailsElement>\n summary: HTMLAttributes<HTMLElement>\n dialog: DialogHTMLAttributes<HTMLDialogElement>\n\n // Media\n img: ImgHTMLAttributes<HTMLImageElement>\n picture: HTMLAttributes<HTMLPictureElement>\n source: SourceHTMLAttributes<HTMLSourceElement>\n audio: AudioVideoHTMLAttributes<HTMLAudioElement>\n video: AudioVideoHTMLAttributes<HTMLVideoElement>\n track: TrackHTMLAttributes<HTMLTrackElement>\n map: MapHTMLAttributes<HTMLMapElement>\n area: AreaHTMLAttributes<HTMLAreaElement>\n\n // Embedded content\n iframe: IframeHTMLAttributes<HTMLIFrameElement>\n embed: EmbedHTMLAttributes<HTMLEmbedElement>\n object: ObjectHTMLAttributes<HTMLObjectElement>\n param: ParamHTMLAttributes<HTMLParamElement>\n canvas: CanvasHTMLAttributes<HTMLCanvasElement>\n\n // SVG (basic support)\n svg: SVGAttributes<SVGSVGElement>\n path: SVGAttributes<SVGPathElement>\n circle: SVGAttributes<SVGCircleElement>\n rect: SVGAttributes<SVGRectElement>\n line: SVGAttributes<SVGLineElement>\n polyline: SVGAttributes<SVGPolylineElement>\n polygon: SVGAttributes<SVGPolygonElement>\n ellipse: SVGAttributes<SVGEllipseElement>\n g: SVGAttributes<SVGGElement>\n defs: SVGAttributes<SVGDefsElement>\n use: SVGAttributes<SVGUseElement>\n text: SVGAttributes<SVGTextElement>\n tspan: SVGAttributes<SVGTSpanElement>\n\n // Web components / other\n template: HTMLAttributes<HTMLTemplateElement>\n slot: SlotHTMLAttributes<HTMLSlotElement>\n portal: HTMLAttributes<HTMLElement>\n }\n\n export interface ElementChildrenAttribute {\n children: unknown\n }\n}\n\n// ============================================================================\n// Base HTML Attributes\n// ============================================================================\n\ninterface HTMLAttributes<T> {\n // Children\n children?: FictNode | FictNode[]\n\n // JSX special attributes\n key?: string | number\n\n // Core attributes\n id?: string\n class?: string\n style?: string | Record<string, string | number>\n title?: string\n lang?: string\n dir?: 'ltr' | 'rtl' | 'auto'\n hidden?: boolean | 'hidden' | 'until-found'\n tabIndex?: number\n draggable?: boolean | 'true' | 'false'\n contentEditable?: boolean | 'true' | 'false' | 'inherit'\n spellCheck?: boolean | 'true' | 'false'\n translate?: 'yes' | 'no'\n inert?: boolean\n popover?: 'auto' | 'manual'\n\n // Experimental / newer\n autofocus?: boolean\n slot?: string\n accessKey?: string\n\n // Event handlers\n onClick?: (e: MouseEvent) => void\n onDblClick?: (e: MouseEvent) => void\n onMouseDown?: (e: MouseEvent) => void\n onMouseUp?: (e: MouseEvent) => void\n onMouseMove?: (e: MouseEvent) => void\n onMouseEnter?: (e: MouseEvent) => void\n onMouseLeave?: (e: MouseEvent) => void\n onMouseOver?: (e: MouseEvent) => void\n onMouseOut?: (e: MouseEvent) => void\n onContextMenu?: (e: MouseEvent) => void\n onInput?: (e: InputEvent) => void\n onChange?: (e: Event) => void\n onSubmit?: (e: SubmitEvent) => void\n onReset?: (e: Event) => void\n onKeyDown?: (e: KeyboardEvent) => void\n onKeyUp?: (e: KeyboardEvent) => void\n onKeyPress?: (e: KeyboardEvent) => void\n onFocus?: (e: FocusEvent) => void\n onBlur?: (e: FocusEvent) => void\n onScroll?: (e: Event) => void\n onWheel?: (e: WheelEvent) => void\n onLoad?: (e: Event) => void\n onError?: (e: Event) => void\n\n // Drag events\n onDrag?: (e: DragEvent) => void\n onDragStart?: (e: DragEvent) => void\n onDragEnd?: (e: DragEvent) => void\n onDragEnter?: (e: DragEvent) => void\n onDragLeave?: (e: DragEvent) => void\n onDragOver?: (e: DragEvent) => void\n onDrop?: (e: DragEvent) => void\n\n // Touch events\n onTouchStart?: (e: TouchEvent) => void\n onTouchMove?: (e: TouchEvent) => void\n onTouchEnd?: (e: TouchEvent) => void\n onTouchCancel?: (e: TouchEvent) => void\n\n // Animation events\n onAnimationStart?: (e: AnimationEvent) => void\n onAnimationEnd?: (e: AnimationEvent) => void\n onAnimationIteration?: (e: AnimationEvent) => void\n onTransitionEnd?: (e: TransitionEvent) => void\n\n // Pointer events\n onPointerDown?: (e: PointerEvent) => void\n onPointerUp?: (e: PointerEvent) => void\n onPointerMove?: (e: PointerEvent) => void\n onPointerEnter?: (e: PointerEvent) => void\n onPointerLeave?: (e: PointerEvent) => void\n onPointerOver?: (e: PointerEvent) => void\n onPointerOut?: (e: PointerEvent) => void\n onPointerCancel?: (e: PointerEvent) => void\n\n // Ref\n ref?: ((el: T | null) => void) | { current: T | null }\n\n // ARIA attributes (common ones)\n role?: string\n 'aria-hidden'?: boolean | 'true' | 'false'\n 'aria-label'?: string\n 'aria-labelledby'?: string\n 'aria-describedby'?: string\n 'aria-live'?: 'off' | 'polite' | 'assertive'\n 'aria-atomic'?: boolean | 'true' | 'false'\n 'aria-busy'?: boolean | 'true' | 'false'\n 'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time'\n 'aria-disabled'?: boolean | 'true' | 'false'\n 'aria-expanded'?: boolean | 'true' | 'false'\n 'aria-haspopup'?: boolean | 'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'\n 'aria-pressed'?: boolean | 'true' | 'false' | 'mixed'\n 'aria-selected'?: boolean | 'true' | 'false'\n 'aria-checked'?: boolean | 'true' | 'false' | 'mixed'\n 'aria-controls'?: string\n 'aria-owns'?: string\n 'aria-activedescendant'?: string\n 'aria-valuemin'?: number\n 'aria-valuemax'?: number\n 'aria-valuenow'?: number\n 'aria-valuetext'?: string\n 'aria-orientation'?: 'horizontal' | 'vertical'\n 'aria-readonly'?: boolean | 'true' | 'false'\n 'aria-required'?: boolean | 'true' | 'false'\n 'aria-invalid'?: boolean | 'true' | 'false' | 'grammar' | 'spelling'\n 'aria-errormessage'?: string\n 'aria-modal'?: boolean | 'true' | 'false'\n 'aria-placeholder'?: string\n 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other'\n 'aria-colcount'?: number\n 'aria-colindex'?: number\n 'aria-colspan'?: number\n 'aria-rowcount'?: number\n 'aria-rowindex'?: number\n 'aria-rowspan'?: number\n 'aria-setsize'?: number\n 'aria-posinset'?: number\n 'aria-level'?: number\n 'aria-multiselectable'?: boolean | 'true' | 'false'\n 'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both'\n 'aria-details'?: string\n 'aria-keyshortcuts'?: string\n 'aria-roledescription'?: string\n\n // Data attributes via index signature\n [key: `data-${string}`]: string | number | boolean | undefined\n}\n\n// ============================================================================\n// Specialized Attribute Interfaces\n// ============================================================================\n\ninterface AnchorHTMLAttributes<T> extends HTMLAttributes<T> {\n href?: string\n target?: '_self' | '_blank' | '_parent' | '_top' | string\n rel?: string\n download?: boolean | string\n hreflang?: string\n type?: string\n referrerPolicy?: ReferrerPolicy\n ping?: string\n}\n\ninterface ButtonHTMLAttributes<T> extends HTMLAttributes<T> {\n type?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n name?: string\n value?: string\n form?: string\n formAction?: string\n formEncType?: string\n formMethod?: string\n formNoValidate?: boolean\n formTarget?: string\n popovertarget?: string\n popovertargetaction?: 'show' | 'hide' | 'toggle'\n}\n\ninterface InputHTMLAttributes<T> extends HTMLAttributes<T> {\n type?: string\n value?: string | number | readonly string[]\n defaultValue?: string | number | readonly string[]\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n placeholder?: string\n name?: string\n form?: string\n required?: boolean\n readonly?: boolean\n multiple?: boolean\n min?: number | string\n max?: number | string\n minLength?: number\n maxLength?: number\n step?: number | string\n pattern?: string\n size?: number\n accept?: string\n capture?: boolean | 'user' | 'environment'\n list?: string\n autoComplete?: string\n autoCapitalize?: string\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n enterKeyHint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'\n height?: number | string\n width?: number | string\n alt?: string\n src?: string\n formAction?: string\n formEncType?: string\n formMethod?: string\n formNoValidate?: boolean\n formTarget?: string\n}\n\ninterface FormHTMLAttributes<T> extends HTMLAttributes<T> {\n action?: string\n method?: 'get' | 'post' | 'dialog'\n encType?: string\n target?: string\n name?: string\n noValidate?: boolean\n autoComplete?: 'on' | 'off'\n acceptCharset?: string\n}\n\ninterface ImgHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n alt?: string\n width?: number | string\n height?: number | string\n srcSet?: string\n sizes?: string\n loading?: 'eager' | 'lazy'\n decoding?: 'async' | 'auto' | 'sync'\n crossOrigin?: 'anonymous' | 'use-credentials'\n referrerPolicy?: ReferrerPolicy\n useMap?: string\n isMap?: boolean\n fetchPriority?: 'auto' | 'high' | 'low'\n}\n\ninterface TextareaHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string | number\n defaultValue?: string\n disabled?: boolean\n placeholder?: string\n name?: string\n form?: string\n required?: boolean\n readonly?: boolean\n rows?: number\n cols?: number\n minLength?: number\n maxLength?: number\n wrap?: 'hard' | 'soft' | 'off'\n autoComplete?: string\n}\n\ninterface SelectHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string | number | readonly string[]\n defaultValue?: string | number | readonly string[]\n disabled?: boolean\n name?: string\n form?: string\n required?: boolean\n multiple?: boolean\n size?: number\n autoComplete?: string\n}\n\ninterface OptionHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string | number\n disabled?: boolean\n selected?: boolean\n label?: string\n}\n\ninterface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> {\n disabled?: boolean\n label?: string\n}\n\ninterface LabelHTMLAttributes<T> extends HTMLAttributes<T> {\n for?: string\n htmlFor?: string\n form?: string\n}\n\ninterface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> {\n disabled?: boolean\n name?: string\n form?: string\n}\n\ninterface OutputHTMLAttributes<T> extends HTMLAttributes<T> {\n for?: string\n htmlFor?: string\n form?: string\n name?: string\n}\n\ninterface ProgressHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: number | string\n max?: number | string\n}\n\ninterface MeterHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: number | string\n min?: number | string\n max?: number | string\n low?: number | string\n high?: number | string\n optimum?: number | string\n}\n\n// Table elements\ninterface TableHTMLAttributes<T> extends HTMLAttributes<T> {\n cellPadding?: number | string\n cellSpacing?: number | string\n border?: number | string\n}\n\ninterface ThHTMLAttributes<T> extends HTMLAttributes<T> {\n colSpan?: number\n rowSpan?: number\n scope?: 'row' | 'col' | 'rowgroup' | 'colgroup'\n abbr?: string\n headers?: string\n}\n\ninterface TdHTMLAttributes<T> extends HTMLAttributes<T> {\n colSpan?: number\n rowSpan?: number\n headers?: string\n}\n\ninterface ColHTMLAttributes<T> extends HTMLAttributes<T> {\n span?: number\n}\n\ninterface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> {\n span?: number\n}\n\n// List elements\ninterface OlHTMLAttributes<T> extends HTMLAttributes<T> {\n start?: number\n reversed?: boolean\n type?: '1' | 'a' | 'A' | 'i' | 'I'\n}\n\ninterface LiHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: number\n}\n\n// Media elements\ninterface AudioVideoHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n controls?: boolean\n autoPlay?: boolean\n loop?: boolean\n muted?: boolean\n preload?: 'none' | 'metadata' | 'auto'\n crossOrigin?: 'anonymous' | 'use-credentials'\n poster?: string // video only\n width?: number | string // video only\n height?: number | string // video only\n playsInline?: boolean\n disableRemotePlayback?: boolean\n onPlay?: (e: Event) => void\n onPause?: (e: Event) => void\n onEnded?: (e: Event) => void\n onTimeUpdate?: (e: Event) => void\n onVolumeChange?: (e: Event) => void\n onSeeking?: (e: Event) => void\n onSeeked?: (e: Event) => void\n onLoadedData?: (e: Event) => void\n onLoadedMetadata?: (e: Event) => void\n onCanPlay?: (e: Event) => void\n onCanPlayThrough?: (e: Event) => void\n onWaiting?: (e: Event) => void\n onPlaying?: (e: Event) => void\n onProgress?: (e: Event) => void\n onDurationChange?: (e: Event) => void\n onRateChange?: (e: Event) => void\n onStalled?: (e: Event) => void\n onSuspend?: (e: Event) => void\n onEmptied?: (e: Event) => void\n}\n\ninterface SourceHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n srcSet?: string\n sizes?: string\n type?: string\n media?: string\n width?: number | string\n height?: number | string\n}\n\ninterface TrackHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n srcLang?: string\n label?: string\n kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata'\n default?: boolean\n}\n\n// Embedded content\ninterface IframeHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n srcDoc?: string\n name?: string\n width?: number | string\n height?: number | string\n allow?: string\n allowFullScreen?: boolean\n sandbox?: string\n loading?: 'eager' | 'lazy'\n referrerPolicy?: ReferrerPolicy\n}\n\ninterface EmbedHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n type?: string\n width?: number | string\n height?: number | string\n}\n\ninterface ObjectHTMLAttributes<T> extends HTMLAttributes<T> {\n data?: string\n type?: string\n name?: string\n width?: number | string\n height?: number | string\n form?: string\n useMap?: string\n}\n\ninterface ParamHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n value?: string\n}\n\ninterface CanvasHTMLAttributes<T> extends HTMLAttributes<T> {\n width?: number | string\n height?: number | string\n}\n\ninterface MapHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n}\n\ninterface AreaHTMLAttributes<T> extends HTMLAttributes<T> {\n alt?: string\n coords?: string\n href?: string\n hreflang?: string\n download?: boolean | string\n rel?: string\n shape?: 'rect' | 'circle' | 'poly' | 'default'\n target?: string\n referrerPolicy?: ReferrerPolicy\n ping?: string\n}\n\n// Interactive elements\ninterface DetailsHTMLAttributes<T> extends HTMLAttributes<T> {\n open?: boolean\n onToggle?: (e: Event) => void\n}\n\ninterface DialogHTMLAttributes<T> extends HTMLAttributes<T> {\n open?: boolean\n onClose?: (e: Event) => void\n onCancel?: (e: Event) => void\n}\n\n// Other elements\ninterface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> {\n cite?: string\n}\n\ninterface QuoteHTMLAttributes<T> extends HTMLAttributes<T> {\n cite?: string\n}\n\ninterface TimeHTMLAttributes<T> extends HTMLAttributes<T> {\n dateTime?: string\n}\n\ninterface DataHTMLAttributes<T> extends HTMLAttributes<T> {\n value?: string\n}\n\ninterface MetaHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n content?: string\n httpEquiv?: string\n charSet?: string\n property?: string\n}\n\ninterface LinkHTMLAttributes<T> extends HTMLAttributes<T> {\n href?: string\n rel?: string\n type?: string\n media?: string\n as?: string\n crossOrigin?: 'anonymous' | 'use-credentials'\n referrerPolicy?: ReferrerPolicy\n sizes?: string\n hreflang?: string\n integrity?: string\n fetchPriority?: 'auto' | 'high' | 'low'\n disabled?: boolean\n}\n\ninterface StyleHTMLAttributes<T> extends HTMLAttributes<T> {\n media?: string\n nonce?: string\n blocking?: string\n}\n\ninterface ScriptHTMLAttributes<T> extends HTMLAttributes<T> {\n src?: string\n type?: string\n async?: boolean\n defer?: boolean\n crossOrigin?: 'anonymous' | 'use-credentials'\n integrity?: string\n noModule?: boolean\n nonce?: string\n referrerPolicy?: ReferrerPolicy\n fetchPriority?: 'auto' | 'high' | 'low'\n blocking?: string\n}\n\ninterface SlotHTMLAttributes<T> extends HTMLAttributes<T> {\n name?: string\n onSlotchange?: (e: Event) => void\n}\n\n// SVG Attributes (basic support)\ninterface SVGAttributes<T> extends HTMLAttributes<T> {\n // Core SVG attributes\n viewBox?: string\n xmlns?: string\n xmlnsXlink?: string\n fill?: string\n stroke?: string\n strokeWidth?: string | number\n strokeLinecap?: 'butt' | 'round' | 'square'\n strokeLinejoin?: 'miter' | 'round' | 'bevel'\n strokeDasharray?: string\n strokeDashoffset?: string | number\n strokeOpacity?: string | number\n fillOpacity?: string | number\n opacity?: string | number\n transform?: string\n transformOrigin?: string\n clipPath?: string\n mask?: string\n filter?: string\n\n // Shape attributes\n d?: string\n cx?: string | number\n cy?: string | number\n r?: string | number\n rx?: string | number\n ry?: string | number\n x?: string | number\n y?: string | number\n x1?: string | number\n y1?: string | number\n x2?: string | number\n y2?: string | number\n width?: string | number\n height?: string | number\n points?: string\n pathLength?: string | number\n\n // Text attributes\n textAnchor?: 'start' | 'middle' | 'end'\n dominantBaseline?: string\n dx?: string | number\n dy?: string | number\n fontSize?: string | number\n fontFamily?: string\n fontWeight?: string | number\n\n // Use element\n href?: string\n xlinkHref?: string\n\n // Gradient/pattern\n gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n gradientTransform?: string\n spreadMethod?: 'pad' | 'reflect' | 'repeat'\n offset?: string | number\n stopColor?: string\n stopOpacity?: string | number\n\n // Clip/mask\n clipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n maskUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n maskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n\n // Other\n preserveAspectRatio?: string\n markerStart?: string\n markerMid?: string\n markerEnd?: string\n vectorEffect?: string\n}\n","/**\n * Fict DOM Constants\n *\n * Property constants and configurations for DOM attribute handling.\n * Borrowed from dom-expressions for comprehensive DOM support.\n */\n\n// ============================================================================\n// Boolean Attributes\n// ============================================================================\n\n/**\n * Complete list of boolean attributes (lowercase)\n * These attributes are set as empty strings when true, removed when false\n */\nconst booleans = [\n 'allowfullscreen',\n 'async',\n 'alpha', // HTMLInputElement\n 'autofocus', // HTMLElement prop\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'disabled',\n 'formnovalidate',\n 'hidden', // HTMLElement prop\n 'indeterminate',\n 'inert', // HTMLElement prop\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'seamless', // HTMLIframeElement - non-standard\n 'selected',\n // Experimental attributes\n 'adauctionheaders',\n 'browsingtopics',\n 'credentialless',\n 'defaultchecked',\n 'defaultmuted',\n 'defaultselected',\n 'defer',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'preservespitch',\n 'shadowrootclonable',\n 'shadowrootcustomelementregistry',\n 'shadowrootdelegatesfocus',\n 'shadowrootserializable',\n 'sharedstoragewritable',\n] as const\n\nexport const BooleanAttributes = new Set<string>(booleans)\n\n// ============================================================================\n// Properties Set\n// ============================================================================\n\n/**\n * Properties that should be set via DOM property (not attribute)\n * Includes camelCase versions of boolean attributes\n */\nexport const Properties = new Set<string>([\n // Core properties\n 'className',\n 'value',\n\n // CamelCase booleans\n 'readOnly',\n 'noValidate',\n 'formNoValidate',\n 'isMap',\n 'noModule',\n 'playsInline',\n\n // Experimental (camelCase)\n 'adAuctionHeaders',\n 'allowFullscreen',\n 'browsingTopics',\n 'defaultChecked',\n 'defaultMuted',\n 'defaultSelected',\n 'disablePictureInPicture',\n 'disableRemotePlayback',\n 'preservesPitch',\n 'shadowRootClonable',\n 'shadowRootCustomElementRegistry',\n 'shadowRootDelegatesFocus',\n 'shadowRootSerializable',\n 'sharedStorageWritable',\n\n // All lowercase booleans\n ...booleans,\n])\n\n// ============================================================================\n// Child Properties\n// ============================================================================\n\n/**\n * Properties that represent children/content\n */\nexport const ChildProperties = new Set<string>([\n 'innerHTML',\n 'textContent',\n 'innerText',\n 'children',\n])\n\n// ============================================================================\n// Property Aliases\n// ============================================================================\n\n/**\n * React compatibility aliases (className -> class)\n */\nexport const Aliases: Record<string, string> = {\n className: 'class',\n htmlFor: 'for',\n}\n\n/**\n * Element-specific property aliases\n * Maps lowercase attribute names to their camelCase property equivalents\n * Only for specific elements that have these properties\n */\nexport const PropAliases: Record<\n string,\n string | { $: string; [tagName: string]: string | number }\n> = {\n // Direct mapping\n class: 'className',\n\n // Element-specific mappings\n novalidate: {\n $: 'noValidate',\n FORM: 1,\n },\n formnovalidate: {\n $: 'formNoValidate',\n BUTTON: 1,\n INPUT: 1,\n },\n ismap: {\n $: 'isMap',\n IMG: 1,\n },\n nomodule: {\n $: 'noModule',\n SCRIPT: 1,\n },\n playsinline: {\n $: 'playsInline',\n VIDEO: 1,\n },\n readonly: {\n $: 'readOnly',\n INPUT: 1,\n TEXTAREA: 1,\n },\n\n // Experimental element-specific\n adauctionheaders: {\n $: 'adAuctionHeaders',\n IFRAME: 1,\n },\n allowfullscreen: {\n $: 'allowFullscreen',\n IFRAME: 1,\n },\n browsingtopics: {\n $: 'browsingTopics',\n IMG: 1,\n },\n defaultchecked: {\n $: 'defaultChecked',\n INPUT: 1,\n },\n defaultmuted: {\n $: 'defaultMuted',\n AUDIO: 1,\n VIDEO: 1,\n },\n defaultselected: {\n $: 'defaultSelected',\n OPTION: 1,\n },\n disablepictureinpicture: {\n $: 'disablePictureInPicture',\n VIDEO: 1,\n },\n disableremoteplayback: {\n $: 'disableRemotePlayback',\n AUDIO: 1,\n VIDEO: 1,\n },\n preservespitch: {\n $: 'preservesPitch',\n AUDIO: 1,\n VIDEO: 1,\n },\n shadowrootclonable: {\n $: 'shadowRootClonable',\n TEMPLATE: 1,\n },\n shadowrootdelegatesfocus: {\n $: 'shadowRootDelegatesFocus',\n TEMPLATE: 1,\n },\n shadowrootserializable: {\n $: 'shadowRootSerializable',\n TEMPLATE: 1,\n },\n sharedstoragewritable: {\n $: 'sharedStorageWritable',\n IFRAME: 1,\n IMG: 1,\n },\n}\n\n/**\n * Get the property alias for a given attribute and tag name\n */\nexport function getPropAlias(prop: string, tagName: string): string | undefined {\n const a = PropAliases[prop]\n if (typeof a === 'object') {\n return a[tagName] ? a['$'] : undefined\n }\n return a\n}\n\n// ============================================================================\n// Event Delegation\n// ============================================================================\n\n/**\n * Symbol for storing delegated events on the document\n */\nexport const $$EVENTS = '_$FICT_DELEGATE'\n\n/**\n * Events that should use event delegation for performance\n * These events bubble and are commonly used across many elements\n */\nexport const DelegatedEvents = new Set<string>([\n 'beforeinput',\n 'click',\n 'dblclick',\n 'contextmenu',\n 'focusin',\n 'focusout',\n 'input',\n 'keydown',\n 'keyup',\n 'mousedown',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'mouseup',\n 'pointerdown',\n 'pointermove',\n 'pointerout',\n 'pointerover',\n 'pointerup',\n 'touchend',\n 'touchmove',\n 'touchstart',\n])\n\n// ============================================================================\n// SVG Support\n// ============================================================================\n\n/**\n * SVG element names (excluding common ones that overlap with HTML)\n */\nexport const SVGElements = new Set<string>([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animate',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'circle',\n 'clipPath',\n 'color-profile',\n 'cursor',\n 'defs',\n 'desc',\n 'ellipse',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'filter',\n 'font',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignObject',\n 'g',\n 'glyph',\n 'glyphRef',\n 'hkern',\n 'image',\n 'line',\n 'linearGradient',\n 'marker',\n 'mask',\n 'metadata',\n 'missing-glyph',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'set',\n 'stop',\n 'svg',\n 'switch',\n 'symbol',\n 'text',\n 'textPath',\n 'tref',\n 'tspan',\n 'use',\n 'view',\n 'vkern',\n])\n\n/**\n * SVG attribute namespaces\n */\nexport const SVGNamespace: Record<string, string> = {\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n}\n\n// ============================================================================\n// Unitless CSS Properties\n// ============================================================================\n\n/**\n * CSS properties that don't need a unit (like 'px')\n */\nexport const UnitlessStyles = new Set<string>([\n 'animationIterationCount',\n 'animation-iteration-count',\n 'borderImageOutset',\n 'border-image-outset',\n 'borderImageSlice',\n 'border-image-slice',\n 'borderImageWidth',\n 'border-image-width',\n 'boxFlex',\n 'box-flex',\n 'boxFlexGroup',\n 'box-flex-group',\n 'boxOrdinalGroup',\n 'box-ordinal-group',\n 'columnCount',\n 'column-count',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flex-grow',\n 'flexPositive',\n 'flex-positive',\n 'flexShrink',\n 'flex-shrink',\n 'flexNegative',\n 'flex-negative',\n 'flexOrder',\n 'flex-order',\n 'gridRow',\n 'grid-row',\n 'gridRowEnd',\n 'grid-row-end',\n 'gridRowSpan',\n 'grid-row-span',\n 'gridRowStart',\n 'grid-row-start',\n 'gridColumn',\n 'grid-column',\n 'gridColumnEnd',\n 'grid-column-end',\n 'gridColumnSpan',\n 'grid-column-span',\n 'gridColumnStart',\n 'grid-column-start',\n 'fontWeight',\n 'font-weight',\n 'lineClamp',\n 'line-clamp',\n 'lineHeight',\n 'line-height',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'tab-size',\n 'widows',\n 'zIndex',\n 'z-index',\n 'zoom',\n 'fillOpacity',\n 'fill-opacity',\n 'floodOpacity',\n 'flood-opacity',\n 'stopOpacity',\n 'stop-opacity',\n 'strokeDasharray',\n 'stroke-dasharray',\n 'strokeDashoffset',\n 'stroke-dashoffset',\n 'strokeMiterlimit',\n 'stroke-miterlimit',\n 'strokeOpacity',\n 'stroke-opacity',\n 'strokeWidth',\n 'stroke-width',\n])\n","/**\n * Low-level DOM node helpers shared across runtime modules.\n * Keep this file dependency-free to avoid module cycles.\n */\n\n/**\n * Convert a value to a flat array of DOM nodes.\n * Defensively handles proxies and non-DOM values.\n */\nexport function toNodeArray(node: Node | Node[] | unknown): Node[] {\n try {\n if (Array.isArray(node)) {\n // Preserve original array reference when it's already a flat Node array\n let allNodes = true\n for (const item of node) {\n let isItemNode = false\n try {\n isItemNode = item instanceof Node\n } catch {\n isItemNode = false\n }\n if (!isItemNode) {\n allNodes = false\n break\n }\n }\n if (allNodes) {\n return node as Node[]\n }\n const result: Node[] = []\n for (const item of node) {\n result.push(...toNodeArray(item))\n }\n return result\n }\n if (node === null || node === undefined || node === false) {\n return []\n }\n } catch {\n return []\n }\n\n let isNode = false\n try {\n isNode = node instanceof Node\n } catch {\n // If safe check fails, treat as primitive string\n isNode = false\n }\n\n if (isNode) {\n try {\n if (node instanceof DocumentFragment) {\n return Array.from(node.childNodes)\n }\n } catch {\n // Ignore fragment check error\n }\n return [node as Node]\n }\n\n try {\n // Duck-type BindingHandle-like values\n if (typeof node === 'object' && node !== null && 'marker' in node) {\n return toNodeArray((node as { marker: unknown }).marker)\n }\n } catch {\n // Ignore property check error\n }\n\n // Primitive fallback\n try {\n return [document.createTextNode(String(node))]\n } catch {\n return [document.createTextNode('')]\n }\n}\n\n/**\n * Insert nodes before an anchor node, preserving order.\n * Uses DocumentFragment for batch insertion when inserting multiple nodes.\n */\nexport function insertNodesBefore(\n parent: ParentNode & Node,\n nodes: Node[],\n anchor: Node | null,\n): void {\n if (nodes.length === 0) return\n\n // Single node optimization - direct insertion\n if (nodes.length === 1) {\n const node = nodes[0]!\n if (node === undefined || node === null) return\n if (node.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(node)\n }\n try {\n parent.insertBefore(node, anchor)\n } catch (e: unknown) {\n if (parent.ownerDocument) {\n try {\n const clone = parent.ownerDocument.importNode(node, true)\n parent.insertBefore(clone, anchor)\n return\n } catch {\n // Clone fallback failed\n }\n }\n throw e\n }\n return\n }\n\n // Batch insertion using DocumentFragment for multiple nodes\n const doc = parent.ownerDocument\n if (doc) {\n const frag = doc.createDocumentFragment()\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!\n if (node === undefined || node === null) continue\n // Handle DocumentFragment - append children\n if (node.nodeType === 11) {\n const childrenArr = Array.from(node.childNodes)\n for (let j = 0; j < childrenArr.length; j++) {\n frag.appendChild(childrenArr[j]!)\n }\n } else {\n if (node.ownerDocument !== doc) {\n doc.adoptNode(node)\n }\n frag.appendChild(node)\n }\n }\n parent.insertBefore(frag, anchor)\n return\n }\n\n // Fallback for non-document contexts (rare)\n const insertSingle = (nodeToInsert: Node, anchorNode: Node | null): Node => {\n if (nodeToInsert.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(nodeToInsert)\n }\n try {\n parent.insertBefore(nodeToInsert, anchorNode)\n return nodeToInsert\n } catch (e: unknown) {\n if (parent.ownerDocument) {\n try {\n const clone = parent.ownerDocument.importNode(nodeToInsert, true)\n parent.insertBefore(clone, anchorNode)\n return clone\n } catch {\n // Clone fallback failed\n }\n }\n throw e\n }\n }\n\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i]!\n if (node === undefined || node === null) continue\n\n // Handle DocumentFragment - insert children in reverse order\n const isFrag = node.nodeType === 11\n if (isFrag) {\n const childrenArr = Array.from(node.childNodes)\n for (let j = childrenArr.length - 1; j >= 0; j--) {\n const child = childrenArr[j]!\n anchor = insertSingle(child, anchor)\n }\n } else {\n anchor = insertSingle(node, anchor)\n }\n }\n}\n\n/**\n * Remove an array of nodes from the DOM.\n */\nexport function removeNodes(nodes: Node[]): void {\n for (const node of nodes) {\n node.parentNode?.removeChild(node)\n }\n}\n","/**\n * Fict Reactive DOM Binding System\n *\n * This module provides the core mechanisms for reactive DOM updates.\n * It bridges the gap between Fict's reactive system (signals, effects)\n * and the DOM, enabling fine-grained updates without a virtual DOM.\n *\n * Design Philosophy:\n * - Values wrapped in functions `() => T` are treated as reactive\n * - Static values are applied once without tracking\n * - The compiler transforms JSX expressions to use these primitives\n */\n\nimport {\n $$EVENTS,\n DelegatedEvents,\n UnitlessStyles,\n Properties,\n ChildProperties,\n getPropAlias,\n SVGNamespace,\n Aliases,\n} from './constants'\nimport { createRenderEffect } from './effect'\nimport { Fragment } from './jsx'\nimport {\n clearRoot,\n createRootContext,\n destroyRoot,\n flushOnMount,\n getCurrentRoot,\n handleError,\n handleSuspend,\n pushRoot,\n popRoot,\n registerRootCleanup,\n type RootContext,\n} from './lifecycle'\nimport { toNodeArray, removeNodes, insertNodesBefore } from './node-ops'\nimport { computed, createSignal, untrack, type Signal } from './signal'\nimport type { Cleanup, FictNode } from './types'\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\n/** A reactive value that can be either static or a getter function */\nexport type MaybeReactive<T> = T | (() => T)\n\n/** Internal type for createElement function reference */\nexport type CreateElementFn = (node: FictNode) => Node\n\n/** Handle returned by conditional/list bindings for cleanup */\nexport interface BindingHandle {\n /** Marker node(s) used for positioning */\n marker: Comment | DocumentFragment\n /** Flush pending content - call after markers are inserted into DOM */\n flush?: () => void\n /** Dispose function to clean up the binding */\n dispose: Cleanup\n}\n\n/** Managed child node with its dispose function */\ninterface ManagedBlock<T = unknown> {\n nodes: Node[]\n root: RootContext\n value: Signal<T>\n index: Signal<number>\n version: Signal<number>\n start: Comment\n end: Comment\n valueProxy: T\n renderCurrent: () => FictNode\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a value is reactive (a getter function)\n * Note: Event handlers (functions that take arguments) are NOT reactive values\n */\nexport function isReactive(value: unknown): value is () => unknown {\n return typeof value === 'function' && value.length === 0\n}\n\n/**\n * Unwrap a potentially reactive value to get the actual value\n */\nexport function unwrap<T>(value: MaybeReactive<T>): T {\n return isReactive(value) ? (value as () => T)() : value\n}\n\n/**\n * Invoke an event handler or handler accessor in a safe way.\n * Supports handlers that return another handler and handlers that expect an\n * optional data payload followed by the event.\n */\nexport function callEventHandler(\n handler: EventListenerOrEventListenerObject | null | undefined,\n event: Event,\n node?: EventTarget | null,\n data?: unknown,\n): void {\n if (!handler) return\n\n const context = (node ?? event.currentTarget ?? undefined) as EventTarget | undefined\n const invoke = (fn: EventListenerOrEventListenerObject | null | undefined): void => {\n if (typeof fn === 'function') {\n const result =\n data === undefined\n ? (fn as EventListener).call(context, event)\n : (fn as (data: unknown, e: Event) => unknown).call(context, data, event)\n\n if (typeof result === 'function' && result !== fn) {\n if (data === undefined) {\n ;(result as EventListener).call(context, event)\n } else {\n ;(result as (data: unknown, e: Event) => unknown).call(context, data, event)\n }\n } else if (result && typeof (result as EventListenerObject).handleEvent === 'function') {\n ;(result as EventListenerObject).handleEvent.call(result as EventListenerObject, event)\n }\n } else if (fn && typeof fn.handleEvent === 'function') {\n fn.handleEvent.call(fn, event)\n }\n }\n\n invoke(handler)\n}\n\nexport const PRIMITIVE_PROXY = Symbol('fict:primitive-proxy')\nconst PRIMITIVE_PROXY_RAW_VALUE = Symbol('fict:primitive-proxy:raw-value')\n\n/**\n * Unwrap a primitive proxy value to get the raw primitive value.\n * This is primarily useful for advanced scenarios where you need the actual\n * primitive type (e.g., for typeof checks or strict equality comparisons).\n *\n * @param value - A potentially proxied primitive value\n * @returns The raw primitive value\n *\n * @example\n * ```ts\n * createList(\n * () => [1, 2, 3],\n * (item) => {\n * const raw = unwrapPrimitive(item)\n * typeof raw === 'number' // true\n * raw === 1 // true (for first item)\n * },\n * item => item\n * )\n * ```\n */\nexport function unwrapPrimitive<T>(value: T): T {\n if (value && typeof value === 'object' && PRIMITIVE_PROXY in value) {\n // Use the internal raw value getter\n const getRawValue = (value as Record<PropertyKey, unknown>)[PRIMITIVE_PROXY_RAW_VALUE]\n if (typeof getRawValue === 'function') {\n return (getRawValue as () => T)()\n }\n }\n return value\n}\n\nfunction createValueProxy<T>(read: () => T): T {\n const getPrimitivePrototype = (value: unknown): Record<PropertyKey, unknown> | undefined => {\n switch (typeof value) {\n case 'string':\n return String.prototype as unknown as Record<PropertyKey, unknown>\n case 'number':\n return Number.prototype as unknown as Record<PropertyKey, unknown>\n case 'boolean':\n return Boolean.prototype as unknown as Record<PropertyKey, unknown>\n case 'bigint':\n return BigInt.prototype as unknown as Record<PropertyKey, unknown>\n case 'symbol':\n return Symbol.prototype as unknown as Record<PropertyKey, unknown>\n default:\n return undefined\n }\n }\n\n const target: Record<PropertyKey, unknown> = {}\n const handler: ProxyHandler<Record<PropertyKey, unknown>> = {\n get(_target, prop, receiver) {\n if (prop === PRIMITIVE_PROXY) {\n return true\n }\n if (prop === PRIMITIVE_PROXY_RAW_VALUE) {\n return () => read()\n }\n if (prop === Symbol.toPrimitive) {\n return (hint: 'string' | 'number' | 'default') => {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n const toPrimitive = (value as { [Symbol.toPrimitive]?: (hint: string) => unknown })[\n Symbol.toPrimitive\n ]\n if (typeof toPrimitive === 'function') {\n return toPrimitive.call(value, hint)\n }\n if (hint === 'string') return value.toString?.() ?? '[object Object]'\n if (hint === 'number') return value.valueOf?.() ?? value\n return value.valueOf?.() ?? value\n }\n return value\n }\n }\n if (prop === 'valueOf') {\n return () => {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return typeof (value as { valueOf?: () => unknown }).valueOf === 'function'\n ? (value as { valueOf: () => unknown }).valueOf()\n : value\n }\n return value\n }\n }\n if (prop === 'toString') {\n return () => String(read())\n }\n\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Reflect.get(value as object, prop, receiver === _target ? value : receiver)\n }\n\n const proto = getPrimitivePrototype(value)\n if (proto && prop in proto) {\n const descriptor = Reflect.get(proto, prop, value)\n return typeof descriptor === 'function' ? descriptor.bind(value) : descriptor\n }\n return undefined\n },\n set(_target, prop, newValue, receiver) {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Reflect.set(value as object, prop, newValue, receiver === _target ? value : receiver)\n }\n return false\n },\n has(_target, prop) {\n if (prop === PRIMITIVE_PROXY || prop === PRIMITIVE_PROXY_RAW_VALUE) {\n return true\n }\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return prop in (value as object)\n }\n const proto = getPrimitivePrototype(value)\n return proto ? prop in proto : false\n },\n ownKeys() {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Reflect.ownKeys(value as object)\n }\n const proto = getPrimitivePrototype(value)\n return proto ? Reflect.ownKeys(proto) : []\n },\n getOwnPropertyDescriptor(_target, prop) {\n const value = read() as unknown\n if (value != null && (typeof value === 'object' || typeof value === 'function')) {\n return Object.getOwnPropertyDescriptor(value as object, prop)\n }\n const proto = getPrimitivePrototype(value)\n return proto ? Object.getOwnPropertyDescriptor(proto, prop) || undefined : undefined\n },\n }\n\n return new Proxy(target, handler) as T\n}\n\n// ============================================================================\n// Text Binding\n// ============================================================================\n\n/**\n * Create a text node that reactively updates when the value changes.\n *\n * @example\n * ```ts\n * // Static text\n * createTextBinding(\"Hello\")\n *\n * // Reactive text (compiler output)\n * createTextBinding(() => $count())\n * ```\n */\nexport function createTextBinding(value: MaybeReactive<unknown>): Text {\n const text = document.createTextNode('')\n\n if (isReactive(value)) {\n // Reactive: create effect to update text when value changes\n createRenderEffect(() => {\n const v = (value as () => unknown)()\n const fmt = formatTextValue(v)\n if (text.data !== fmt) {\n text.data = fmt\n }\n })\n } else {\n // Static: set once\n text.data = formatTextValue(value)\n }\n\n return text\n}\n\n/**\n * Bind a reactive value to an existing text node.\n * This is a convenience function for binding to existing DOM nodes.\n */\nexport function bindText(textNode: Text, getValue: () => unknown): Cleanup {\n return createRenderEffect(() => {\n const value = formatTextValue(getValue())\n if (textNode.data !== value) {\n textNode.data = value\n }\n })\n}\n\n/**\n * Format a value for text content\n */\nfunction formatTextValue(value: unknown): string {\n if (value == null || value === false) {\n return ''\n }\n return String(value)\n}\n\n// ============================================================================\n// Attribute Binding\n// ============================================================================\n\n/** Attribute setter function type */\nexport type AttributeSetter = (el: HTMLElement, key: string, value: unknown) => void\n\n/**\n * Create a reactive attribute binding on an element.\n *\n * @example\n * ```ts\n * // Static attribute\n * createAttributeBinding(button, 'disabled', false, setAttribute)\n *\n * // Reactive attribute (compiler output)\n * createAttributeBinding(button, 'disabled', () => !$isValid(), setAttribute)\n * ```\n */\nexport function createAttributeBinding(\n el: HTMLElement,\n key: string,\n value: MaybeReactive<unknown>,\n setter: AttributeSetter,\n): void {\n if (isReactive(value)) {\n // Reactive: create effect to update attribute when value changes\n createRenderEffect(() => {\n setter(el, key, (value as () => unknown)())\n })\n } else {\n // Static: set once\n setter(el, key, value)\n }\n}\n\n/**\n * Bind a reactive value to an element's attribute.\n */\nexport function bindAttribute(el: HTMLElement, key: string, getValue: () => unknown): Cleanup {\n let prevValue: unknown = undefined\n return createRenderEffect(() => {\n const value = getValue()\n if (value === prevValue) return\n prevValue = value\n\n if (value === undefined || value === null || value === false) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n el.setAttribute(key, String(value))\n }\n })\n}\n\n/**\n * Bind a reactive value to an element's property.\n */\nexport function bindProperty(el: HTMLElement, key: string, getValue: () => unknown): Cleanup {\n // Keep behavior aligned with the legacy createElement+applyProps path in `dom.ts`,\n // where certain keys must behave like DOM properties and nullish clears should\n // reset to sensible defaults (e.g. value -> '', checked -> false).\n const PROPERTY_BINDING_KEYS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'readOnly',\n 'multiple',\n 'muted',\n ])\n\n let prevValue: unknown = undefined\n return createRenderEffect(() => {\n const next = getValue()\n if (next === prevValue) return\n prevValue = next\n\n if (PROPERTY_BINDING_KEYS.has(key) && (next === undefined || next === null)) {\n const fallback = key === 'checked' || key === 'selected' ? false : ''\n ;(el as unknown as Record<string, unknown>)[key] = fallback\n return\n }\n ;(el as unknown as Record<string, unknown>)[key] = next\n })\n}\n\n// ============================================================================\n// Style Binding\n// ============================================================================\n\n/**\n * Apply styles to an element, supporting reactive style objects/strings.\n */\nexport function createStyleBinding(\n el: HTMLElement,\n value: MaybeReactive<string | Record<string, string | number> | null | undefined>,\n): void {\n if (isReactive(value)) {\n let prev: unknown\n createRenderEffect(() => {\n const next = (value as () => unknown)()\n applyStyle(el, next, prev)\n prev = next\n })\n } else {\n applyStyle(el, value, undefined)\n }\n}\n\n/**\n * Bind a reactive style value to an existing element.\n */\nexport function bindStyle(\n el: HTMLElement,\n getValue: () => string | Record<string, string | number> | null | undefined,\n): Cleanup {\n let prev: unknown\n return createRenderEffect(() => {\n const next = getValue()\n applyStyle(el, next, prev)\n prev = next\n })\n}\n\n/**\n * Apply a style value to an element\n */\nfunction applyStyle(el: HTMLElement, value: unknown, prev: unknown): void {\n if (typeof value === 'string') {\n el.style.cssText = value\n } else if (value && typeof value === 'object') {\n const styles = value as Record<string, string | number>\n\n // If we previously set styles via string, clear before applying object map\n if (typeof prev === 'string') {\n el.style.cssText = ''\n }\n\n // Remove styles that were present in prev but not in current\n if (prev && typeof prev === 'object') {\n const prevStyles = prev as Record<string, string | number>\n for (const key of Object.keys(prevStyles)) {\n if (!(key in styles)) {\n const cssProperty = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n el.style.removeProperty(cssProperty)\n }\n }\n }\n\n for (const [prop, v] of Object.entries(styles)) {\n if (v != null) {\n // Handle camelCase to kebab-case conversion\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase()\n const unitless = isUnitlessStyleProperty(prop) || isUnitlessStyleProperty(cssProperty)\n const valueStr = typeof v === 'number' && !unitless ? `${v}px` : String(v)\n el.style.setProperty(cssProperty, valueStr)\n } else {\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase()\n el.style.removeProperty(cssProperty) // Handle null/undefined values by removing\n }\n }\n } else {\n // If value is null/undefined, we might want to clear styles set by PREVIOUS binding?\n // But blindly clearing cssText is dangerous.\n // Ideally we remove keys from prev.\n if (prev && typeof prev === 'object') {\n const prevStyles = prev as Record<string, string | number>\n for (const key of Object.keys(prevStyles)) {\n const cssProperty = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n el.style.removeProperty(cssProperty)\n }\n } else if (typeof prev === 'string') {\n el.style.cssText = ''\n }\n }\n}\n\nfunction isUnitlessStyleProperty(prop: string): boolean {\n return UnitlessStyles.has(prop)\n}\n\n// ============================================================================\n// Class Binding\n// ============================================================================\n\n/**\n * Apply class to an element, supporting reactive class values.\n */\nexport function createClassBinding(\n el: HTMLElement,\n value: MaybeReactive<string | Record<string, boolean> | null | undefined>,\n): void {\n if (isReactive(value)) {\n let prev: Record<string, boolean> = {}\n createRenderEffect(() => {\n const next = (value as () => unknown)()\n prev = applyClass(el, next, prev)\n })\n } else {\n applyClass(el, value, {})\n }\n}\n\n/**\n * Bind a reactive class value to an existing element.\n */\nexport function bindClass(\n el: HTMLElement,\n getValue: () => string | Record<string, boolean> | null | undefined,\n): Cleanup {\n let prev: Record<string, boolean> = {}\n return createRenderEffect(() => {\n const next = getValue()\n prev = applyClass(el, next, prev)\n })\n}\n\n/**\n * Toggle a class key (supports space-separated class names)\n */\nfunction toggleClassKey(node: HTMLElement, key: string, value: boolean): void {\n const classNames = key.trim().split(/\\s+/)\n for (let i = 0, len = classNames.length; i < len; i++) {\n node.classList.toggle(classNames[i]!, value)\n }\n}\n\n/**\n * Apply a class value to an element using classList.toggle for efficient updates.\n * Returns the new prev state for tracking.\n */\nfunction applyClass(el: HTMLElement, value: unknown, prev: unknown): Record<string, boolean> {\n const prevState = (prev && typeof prev === 'object' ? prev : {}) as Record<string, boolean>\n\n // Handle string value - full replacement\n if (typeof value === 'string') {\n el.className = value\n // Clear prev state since we're doing full replacement\n return {}\n }\n\n // Handle object value - incremental updates\n if (value && typeof value === 'object') {\n const classes = value as Record<string, boolean>\n const classKeys = Object.keys(classes)\n const prevKeys = Object.keys(prevState)\n\n // Remove classes that were true but are now false or missing\n for (let i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i]!\n if (!key || key === 'undefined' || classes[key]) continue\n toggleClassKey(el, key, false)\n delete prevState[key]\n }\n\n // Add classes that are now true\n for (let i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i]!\n const classValue = !!classes[key]\n if (!key || key === 'undefined' || prevState[key] === classValue || !classValue) continue\n toggleClassKey(el, key, true)\n prevState[key] = classValue\n }\n\n return prevState\n }\n\n // Handle null/undefined - clear all tracked classes\n if (!value) {\n for (const key of Object.keys(prevState)) {\n if (key && key !== 'undefined') {\n toggleClassKey(el, key, false)\n }\n }\n return {}\n }\n\n return prevState\n}\n\n/**\n * Exported classList function for direct use (compatible with dom-expressions)\n */\nexport function classList(\n node: HTMLElement,\n value: Record<string, boolean> | null | undefined,\n prev: Record<string, boolean> = {},\n): Record<string, boolean> {\n return applyClass(node, value, prev)\n}\n\n// ============================================================================\n// Child/Insert Binding (Dynamic Children)\n// ============================================================================\n\n/** Managed child node with its dispose function */\ninterface ManagedBlock<T = unknown> {\n nodes: Node[]\n root: RootContext\n value: Signal<T>\n index: Signal<number>\n version: Signal<number>\n start: Comment\n end: Comment\n valueProxy: T\n renderCurrent: () => FictNode\n}\n\n/**\n * Insert reactive content into a parent element.\n * This is a simpler API than createChildBinding for basic cases.\n *\n * @param parent - The parent element to insert into\n * @param getValue - Function that returns the value to render\n * @param markerOrCreateElement - Optional marker node to insert before, or createElementFn\n * @param createElementFn - Optional function to create DOM elements (when marker is provided)\n */\nexport function insert(\n parent: HTMLElement | DocumentFragment,\n getValue: () => FictNode,\n markerOrCreateElement?: Node | CreateElementFn,\n createElementFn?: CreateElementFn,\n): Cleanup {\n let marker: Node\n let ownsMarker = false\n let createFn: CreateElementFn | undefined = createElementFn\n\n if (markerOrCreateElement instanceof Node) {\n marker = markerOrCreateElement\n createFn = createElementFn\n } else {\n marker = document.createComment('fict:insert')\n parent.appendChild(marker)\n createFn = markerOrCreateElement as CreateElementFn | undefined\n ownsMarker = true\n }\n\n let currentNodes: Node[] = []\n let currentText: Text | null = null\n let currentRoot: RootContext | null = null\n\n const clearCurrentNodes = () => {\n if (currentNodes.length > 0) {\n removeNodes(currentNodes)\n currentNodes = []\n }\n }\n\n const setTextNode = (textValue: string, shouldInsert: boolean, parentNode: ParentNode & Node) => {\n if (!currentText) {\n currentText = document.createTextNode(textValue)\n } else if (currentText.data !== textValue) {\n currentText.data = textValue\n }\n\n if (!shouldInsert) {\n clearCurrentNodes()\n return\n }\n\n if (currentNodes.length === 1 && currentNodes[0] === currentText) {\n return\n }\n\n clearCurrentNodes()\n insertNodesBefore(parentNode, [currentText], marker)\n currentNodes = [currentText]\n }\n\n const dispose = createRenderEffect(() => {\n const value = getValue()\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n const isPrimitive =\n value == null ||\n value === false ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n\n if (isPrimitive) {\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n if (!parentNode) {\n clearCurrentNodes()\n return\n }\n const textValue = value == null || value === false ? '' : String(value)\n const shouldInsert = value != null && value !== false\n setTextNode(textValue, shouldInsert, parentNode)\n return\n }\n\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n clearCurrentNodes()\n\n const root = createRootContext()\n const prev = pushRoot(root)\n let nodes: Node[] = []\n try {\n let newNode: Node | Node[]\n\n if (value instanceof Node) {\n newNode = value\n } else if (Array.isArray(value)) {\n if (value.every(v => v instanceof Node)) {\n newNode = value as Node[]\n } else {\n newNode = createFn ? createFn(value) : document.createTextNode(String(value))\n }\n } else {\n newNode = createFn ? createFn(value) : document.createTextNode(String(value))\n }\n\n nodes = toNodeArray(newNode)\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n } finally {\n popRoot(prev)\n flushOnMount(root)\n }\n\n currentRoot = root\n currentNodes = nodes\n })\n\n return () => {\n dispose()\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n clearCurrentNodes()\n if (ownsMarker) {\n marker.parentNode?.removeChild(marker)\n }\n }\n}\n\n/**\n * Create a reactive child binding that updates when the child value changes.\n * This is used for dynamic expressions like `{show && <Modal />}` or `{items.map(...)}`.\n *\n * @example\n * ```ts\n * // Reactive child (compiler output for {count})\n * createChildBinding(parent, () => $count(), createElement)\n *\n * // Reactive conditional (compiler output for {show && <Modal />})\n * createChildBinding(parent, () => $show() && jsx(Modal, {}), createElement)\n * ```\n */\nexport function createChildBinding(\n parent: HTMLElement | DocumentFragment,\n getValue: () => FictNode,\n createElementFn: CreateElementFn,\n): BindingHandle {\n const marker = document.createComment('fict:child')\n parent.appendChild(marker)\n\n const dispose = createRenderEffect(() => {\n const root = createRootContext()\n const prev = pushRoot(root)\n let nodes: Node[] = []\n let handledError = false\n try {\n const value = getValue()\n\n // Skip if value is null/undefined/false\n if (value == null || value === false) {\n return\n }\n\n const output = createElementFn(value)\n nodes = toNodeArray(output)\n const parentNode = marker.parentNode as (ParentNode & Node) | null\n if (parentNode) {\n insertNodesBefore(parentNode, nodes, marker)\n }\n return () => {\n destroyRoot(root)\n removeNodes(nodes)\n }\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n throw err\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n }\n }\n })\n\n return {\n marker,\n dispose: () => {\n dispose()\n marker.parentNode?.removeChild(marker)\n },\n }\n}\n\n// ============================================================================\n// Event Delegation System\n// ============================================================================\n\n// Extend HTMLElement/Document type to support event delegation\ndeclare global {\n interface HTMLElement {\n _$host?: HTMLElement\n [key: `$$${string}`]: EventListener | [EventListener, unknown] | undefined\n [key: `$$${string}Data`]: unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface Document extends Record<string, unknown> {}\n}\n\n/**\n * Initialize event delegation for a set of event names.\n * Events will be handled at the document level and dispatched to the appropriate handlers.\n *\n * @param eventNames - Array of event names to delegate\n * @param doc - The document to attach handlers to (default: window.document)\n *\n * @example\n * ```ts\n * // Called automatically by the compiler for delegated events\n * delegateEvents(['click', 'input', 'keydown'])\n * ```\n */\nexport function delegateEvents(eventNames: string[], doc: Document = window.document): void {\n const e = (doc[$$EVENTS] as Set<string>) || (doc[$$EVENTS] = new Set<string>())\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i]!\n if (!e.has(name)) {\n e.add(name)\n doc.addEventListener(name, globalEventHandler)\n }\n }\n}\n\n/**\n * Clear all delegated event handlers from a document.\n *\n * @param doc - The document to clear handlers from (default: window.document)\n */\nexport function clearDelegatedEvents(doc: Document = window.document): void {\n const e = doc[$$EVENTS] as Set<string> | undefined\n if (e) {\n for (const name of e.keys()) {\n doc.removeEventListener(name, globalEventHandler)\n }\n delete doc[$$EVENTS]\n }\n}\n\n/**\n * Global event handler for delegated events.\n * Walks up the DOM tree to find and call handlers stored as $$eventName properties.\n */\nfunction globalEventHandler(e: Event): void {\n let node = e.target as HTMLElement | null\n const key = `$$${e.type}` as const\n const dataKey = `${key}Data` as `$$${string}Data`\n const oriTarget = e.target\n const oriCurrentTarget = e.currentTarget\n\n // Retarget helper for shadow DOM and portals\n const retarget = (value: EventTarget) =>\n Object.defineProperty(e, 'target', {\n configurable: true,\n value,\n })\n\n // Handler for each node in the bubble path\n const handleNode = (): boolean => {\n if (!node) return false\n const handler = node[key]\n if (handler && !(node as HTMLButtonElement).disabled) {\n const resolveData = (value: unknown): unknown => {\n if (typeof value === 'function') {\n try {\n const fn = value as (event?: Event) => unknown\n return fn.length > 0 ? fn(e) : fn()\n } catch {\n return (value as () => unknown)()\n }\n }\n return value\n }\n\n const rawData = (node as any)[dataKey] as unknown\n const hasData = rawData !== undefined\n const resolvedNodeData = hasData ? resolveData(rawData) : undefined\n if (typeof handler === 'function') {\n callEventHandler(handler, e, node, hasData ? resolvedNodeData : undefined)\n } else if (Array.isArray(handler)) {\n const tupleData = resolveData(handler[1])\n callEventHandler(handler[0], e, node, tupleData)\n }\n if (e.cancelBubble) return false\n }\n // Handle shadow DOM host retargeting\n const shadowHost = (node as unknown as ShadowRoot).host\n if (\n shadowHost &&\n typeof shadowHost !== 'string' &&\n !(shadowHost as HTMLElement)._$host &&\n node.contains(e.target as Node)\n ) {\n retarget(shadowHost as EventTarget)\n }\n return true\n }\n\n // Walk up tree helper\n const walkUpTree = (): void => {\n while (handleNode() && node) {\n node = (node._$host ||\n node.parentNode ||\n (node as unknown as ShadowRoot).host) as HTMLElement | null\n }\n }\n\n // Simulate currentTarget\n Object.defineProperty(e, 'currentTarget', {\n configurable: true,\n get() {\n return node || document\n },\n })\n\n // Use composedPath for shadow DOM support\n if (e.composedPath) {\n const path = e.composedPath()\n retarget(path[0] as EventTarget)\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i] as HTMLElement\n if (!handleNode()) break\n // Handle portal event bubbling\n if (node._$host) {\n node = node._$host\n walkUpTree()\n break\n }\n // Don't bubble above root of event delegation\n if (node.parentNode === oriCurrentTarget) {\n break\n }\n }\n } else {\n // Fallback for browsers without composedPath\n walkUpTree()\n }\n\n // Reset target\n retarget(oriTarget as EventTarget)\n}\n\n/**\n * Add an event listener to an element.\n * If the event is in DelegatedEvents, it uses event delegation for better performance.\n *\n * @param node - The element to add the listener to\n * @param name - The event name (lowercase)\n * @param handler - The event handler or [handler, data] tuple\n * @param delegate - Whether to use delegation (auto-detected based on event name)\n */\nexport function addEventListener(\n node: HTMLElement,\n name: string,\n handler: EventListener | [EventListener, unknown] | null | undefined,\n delegate?: boolean,\n): void {\n if (handler == null) return\n\n if (delegate) {\n // Event delegation: store handler on element\n if (Array.isArray(handler)) {\n ;(node as unknown as Record<string, unknown>)[`$$${name}`] = handler[0]\n ;(node as unknown as Record<string, unknown>)[`$$${name}Data`] = handler[1]\n } else {\n ;(node as unknown as Record<string, unknown>)[`$$${name}`] = handler\n }\n } else if (Array.isArray(handler)) {\n // Non-delegated with data binding\n const handlerFn = handler[0] as (data: unknown, e: Event) => void\n node.addEventListener(name, (e: Event) => handlerFn.call(node, handler[1], e))\n } else {\n // Regular event listener\n node.addEventListener(name, handler as EventListener)\n }\n}\n\n// ============================================================================\n// Event Binding\n// ============================================================================\n\n/**\n * Bind an event listener to an element.\n * Uses event delegation for better performance when applicable.\n *\n * @example\n * ```ts\n * // Static event\n * bindEvent(button, 'click', handleClick)\n *\n * // Reactive event (compiler output)\n * bindEvent(button, 'click', () => $handler())\n *\n * // With modifiers\n * bindEvent(button, 'click', handler, { capture: true, passive: true, once: true })\n * ```\n */\nexport function bindEvent(\n el: HTMLElement,\n eventName: string,\n handler: EventListenerOrEventListenerObject | null | undefined,\n options?: boolean | AddEventListenerOptions,\n): Cleanup {\n if (handler == null) return () => {}\n const rootRef = getCurrentRoot()\n\n // Optimization: Global Event Delegation\n // If the event is delegatable and no special options (capture, passive) are used,\n // we attach the handler to the element property and rely on the global listener.\n if (DelegatedEvents.has(eventName) && !options) {\n const key = `$$${eventName}`\n\n // Ensure global delegation is active for this event\n delegateEvents([eventName])\n\n const resolveHandler = isReactive(handler)\n ? (handler as () => EventListenerOrEventListenerObject | null | undefined)\n : () => handler\n\n // Cache a single wrapper that resolves the latest handler when invoked\n // @ts-expect-error - using dynamic property for delegation\n el[key] = function (this: any, ...args: any[]) {\n try {\n const fn = resolveHandler()\n callEventHandler(fn as EventListenerOrEventListenerObject, args[0] as Event, el)\n } catch (err) {\n handleError(err, { source: 'event', eventName }, rootRef)\n }\n }\n\n // Cleanup: remove property (no effect needed for static or reactive)\n return () => {\n // @ts-expect-error - using dynamic property for delegation\n el[key] = undefined\n }\n }\n\n // Fallback: Native addEventListener\n // Used for non-delegated events or when options are present\n const getHandler = isReactive(handler) ? (handler as () => unknown) : () => handler\n\n // Create wrapped handler that resolves reactive handlers\n const wrapped: EventListener = event => {\n try {\n const resolved = getHandler()\n callEventHandler(resolved as EventListenerOrEventListenerObject, event, el)\n } catch (err) {\n if (handleError(err, { source: 'event', eventName }, rootRef)) {\n return\n }\n throw err\n }\n }\n\n el.addEventListener(eventName, wrapped, options)\n const cleanup = () => el.removeEventListener(eventName, wrapped, options)\n registerRootCleanup(cleanup)\n return cleanup\n}\n\n// ============================================================================\n// Ref Binding\n// ============================================================================\n\n/**\n * Bind a ref to an element.\n * Supports both callback refs and ref objects.\n *\n * @param el - The element to bind the ref to\n * @param ref - Either a callback function, a ref object, or a reactive getter\n * @returns Cleanup function\n *\n * @example\n * ```ts\n * // Callback ref\n * bindRef(el, (element) => { store.input = element })\n *\n * // Ref object\n * const inputRef = createRef()\n * bindRef(el, inputRef)\n *\n * // Reactive ref (compiler output)\n * bindRef(el, () => props.ref)\n * ```\n */\nexport function bindRef(el: HTMLElement, ref: unknown): Cleanup {\n if (ref == null) return () => {}\n\n // Handle reactive refs (getters)\n const getRef = isReactive(ref) ? (ref as () => unknown) : () => ref\n\n const applyRef = (refValue: unknown) => {\n if (refValue == null) return\n\n if (typeof refValue === 'function') {\n // Callback ref: call with element\n ;(refValue as (el: HTMLElement) => void)(el)\n } else if (typeof refValue === 'object' && 'current' in refValue) {\n // Ref object: set current property\n ;(refValue as { current: HTMLElement | null }).current = el\n }\n }\n\n // Apply ref initially\n const initialRef = getRef()\n applyRef(initialRef)\n\n // For reactive refs, track changes\n if (isReactive(ref)) {\n const cleanup = createRenderEffect(() => {\n const currentRef = getRef()\n applyRef(currentRef)\n })\n registerRootCleanup(cleanup)\n\n // On cleanup, null out the ref\n const nullifyCleanup = () => {\n const currentRef = getRef()\n if (currentRef && typeof currentRef === 'object' && 'current' in currentRef) {\n ;(currentRef as { current: HTMLElement | null }).current = null\n }\n }\n registerRootCleanup(nullifyCleanup)\n\n return () => {\n cleanup()\n nullifyCleanup()\n }\n }\n\n // For static refs, register cleanup to null out on unmount\n const cleanup = () => {\n const refValue = getRef()\n if (refValue && typeof refValue === 'object' && 'current' in refValue) {\n ;(refValue as { current: HTMLElement | null }).current = null\n }\n }\n registerRootCleanup(cleanup)\n\n return cleanup\n}\n\n// ============================================================================\n// Spread Props\n// ============================================================================\n\n/**\n * Apply spread props to an element with reactive updates.\n * This handles dynamic spread like `<div {...props}>`.\n *\n * @param node - The element to apply props to\n * @param props - The props object (may have reactive getters)\n * @param isSVG - Whether this is an SVG element\n * @param skipChildren - Whether to skip children handling\n * @returns The previous props for tracking changes\n *\n * @example\n * ```ts\n * // Compiler output for <div {...props} />\n * spread(el, props, false, false)\n * ```\n */\nexport function spread(\n node: HTMLElement,\n props: Record<string, unknown> = {},\n isSVG = false,\n skipChildren = false,\n): Record<string, unknown> {\n const prevProps: Record<string, unknown> = {}\n\n // Handle children if not skipped\n if (!skipChildren && 'children' in props) {\n createRenderEffect(() => {\n prevProps.children = props.children\n })\n }\n\n // Handle ref\n createRenderEffect(() => {\n if (typeof props.ref === 'function') {\n ;(props.ref as (el: HTMLElement) => void)(node)\n }\n })\n\n // Handle all other props\n createRenderEffect(() => {\n assign(node, props, isSVG, true, prevProps, true)\n })\n\n return prevProps\n}\n\n/**\n * Assign props to a node, tracking previous values for efficient updates.\n * This is the core prop assignment logic used by spread.\n *\n * @param node - The element to assign props to\n * @param props - New props object\n * @param isSVG - Whether this is an SVG element\n * @param skipChildren - Whether to skip children handling\n * @param prevProps - Previous props for comparison\n * @param skipRef - Whether to skip ref handling\n */\nexport function assign(\n node: HTMLElement,\n props: Record<string, unknown>,\n isSVG = false,\n skipChildren = false,\n prevProps: Record<string, unknown> = {},\n skipRef = false,\n): void {\n props = props || {}\n\n // Remove props that are no longer present\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === 'children') continue\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props)\n }\n }\n\n // Set or update props\n for (const prop in props) {\n if (prop === 'children') {\n if (!skipChildren) {\n // Handle children insertion\n prevProps.children = props.children\n }\n continue\n }\n const value = props[prop]\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props)\n }\n}\n\n/**\n * Assign a single prop to a node.\n */\nfunction assignProp(\n node: HTMLElement,\n prop: string,\n value: unknown,\n prev: unknown,\n isSVG: boolean,\n skipRef: boolean,\n props: Record<string, unknown>,\n): unknown {\n // Style handling\n if (prop === 'style') {\n applyStyle(node, value, prev)\n return value\n }\n\n // classList handling\n if (prop === 'classList') {\n return applyClass(node, value, prev)\n }\n\n // Skip if value unchanged\n if (value === prev) return prev\n\n // Ref handling\n if (prop === 'ref') {\n if (!skipRef && typeof value === 'function') {\n ;(value as (el: HTMLElement) => void)(node)\n }\n return value\n }\n\n // Event handling: on:eventname\n if (prop.slice(0, 3) === 'on:') {\n const eventName = prop.slice(3)\n if (prev) node.removeEventListener(eventName, prev as EventListener)\n if (value) node.addEventListener(eventName, value as EventListener)\n return value\n }\n\n // Capture event handling: oncapture:eventname\n if (prop.slice(0, 10) === 'oncapture:') {\n const eventName = prop.slice(10)\n if (prev) node.removeEventListener(eventName, prev as EventListener, true)\n if (value) node.addEventListener(eventName, value as EventListener, true)\n return value\n }\n\n // Standard event handling: onClick, onInput, etc.\n if (prop.slice(0, 2) === 'on') {\n const eventName = prop.slice(2).toLowerCase()\n const shouldDelegate = DelegatedEvents.has(eventName)\n if (!shouldDelegate && prev) {\n const handler = Array.isArray(prev) ? prev[0] : prev\n node.removeEventListener(eventName, handler as EventListener)\n }\n if (shouldDelegate || value) {\n addEventListener(node, eventName, value as EventListener, shouldDelegate)\n if (shouldDelegate) delegateEvents([eventName])\n }\n return value\n }\n\n // Explicit attribute: attr:name\n if (prop.slice(0, 5) === 'attr:') {\n if (value == null) node.removeAttribute(prop.slice(5))\n else node.setAttribute(prop.slice(5), String(value))\n return value\n }\n\n // Explicit boolean attribute: bool:name\n if (prop.slice(0, 5) === 'bool:') {\n if (value) node.setAttribute(prop.slice(5), '')\n else node.removeAttribute(prop.slice(5))\n return value\n }\n\n // Explicit property: prop:name\n if (prop.slice(0, 5) === 'prop:') {\n ;(node as unknown as Record<string, unknown>)[prop.slice(5)] = value\n return value\n }\n\n // Class/className handling\n if (prop === 'class' || prop === 'className') {\n if (value == null) node.removeAttribute('class')\n else node.className = String(value)\n return value\n }\n\n // Check if custom element\n const isCE = node.nodeName.includes('-') || 'is' in props\n\n // Property handling (for non-SVG elements)\n if (!isSVG) {\n const propAlias = getPropAlias(prop, node.tagName)\n const isProperty = Properties.has(prop)\n const isChildProp = ChildProperties.has(prop)\n\n if (propAlias || isProperty || isChildProp || isCE) {\n const propName = propAlias || prop\n if (isCE && !isProperty && !isChildProp) {\n ;(node as unknown as Record<string, unknown>)[toPropertyName(propName)] = value\n } else {\n ;(node as unknown as Record<string, unknown>)[propName] = value\n }\n return value\n }\n }\n\n // SVG namespace handling\n if (isSVG && prop.indexOf(':') > -1) {\n const [prefix, name] = prop.split(':')\n const ns = SVGNamespace[prefix!]\n if (ns) {\n if (value == null) node.removeAttributeNS(ns, name!)\n else node.setAttributeNS(ns, name!, String(value))\n return value\n }\n }\n\n // Default: set as attribute\n const attrName = Aliases[prop] || prop\n if (value == null) node.removeAttribute(attrName)\n else node.setAttribute(attrName, String(value))\n return value\n}\n\n/**\n * Convert kebab-case to camelCase for property names\n */\nfunction toPropertyName(name: string): string {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase())\n}\n\n// ============================================================================\n// Conditional Rendering\n// ============================================================================\n\n/**\n * Create a conditional rendering binding.\n * Efficiently renders one of two branches based on a condition.\n *\n * This is an optimized version for `{condition ? <A /> : <B />}` patterns\n * where both branches are known statically.\n *\n * @example\n * ```ts\n * // Compiler output for {show ? <A /> : <B />}\n * createConditional(\n * () => $show(),\n * () => jsx(A, {}),\n * () => jsx(B, {}),\n * createElement\n * )\n * ```\n */\nexport function createConditional(\n condition: () => boolean,\n renderTrue: () => FictNode,\n createElementFn: CreateElementFn,\n renderFalse?: () => FictNode,\n): BindingHandle {\n const startMarker = document.createComment('fict:cond:start')\n const endMarker = document.createComment('fict:cond:end')\n const fragment = document.createDocumentFragment()\n fragment.append(startMarker, endMarker)\n\n let currentNodes: Node[] = []\n let currentRoot: RootContext | null = null\n let lastCondition: boolean | undefined = undefined\n let pendingRender = false\n\n // Use computed to memoize condition value - this prevents the effect from\n // re-running when condition dependencies change but the boolean result stays same.\n // This is critical because re-running the effect would purge child effect deps\n // (like bindText) even if we early-return, breaking fine-grained reactivity.\n const conditionMemo = computed(condition)\n\n const runConditional = () => {\n const cond = conditionMemo()\n const parent = startMarker.parentNode as (ParentNode & Node) | null\n if (!parent) {\n pendingRender = true\n return\n }\n pendingRender = false\n\n if (lastCondition === cond && currentNodes.length > 0) {\n return\n }\n if (lastCondition === cond && lastCondition === false && renderFalse === undefined) {\n return\n }\n lastCondition = cond\n\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n removeNodes(currentNodes)\n currentNodes = []\n\n const render = cond ? renderTrue : renderFalse\n if (!render) {\n return\n }\n\n const root = createRootContext()\n const prev = pushRoot(root)\n let handledError = false\n try {\n // Use untrack to prevent render function's signal accesses from being\n // tracked by createConditional's effect. This ensures that signals used\n // inside the render function (e.g., nested if conditions) don't cause\n // createConditional to re-run, which would purge child effect deps.\n const output = untrack(render)\n if (output == null || output === false) {\n return\n }\n const el = createElementFn(output)\n const nodes = toNodeArray(el)\n insertNodesBefore(parent, nodes, endMarker)\n currentNodes = nodes\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n destroyRoot(root)\n return\n }\n throw err\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n currentRoot = root\n } else {\n currentRoot = null\n }\n }\n }\n\n const dispose = createRenderEffect(runConditional)\n\n return {\n marker: fragment,\n flush: () => {\n if (pendingRender) {\n runConditional()\n }\n },\n dispose: () => {\n dispose()\n if (currentRoot) {\n destroyRoot(currentRoot)\n }\n removeNodes(currentNodes)\n currentNodes = []\n startMarker.parentNode?.removeChild(startMarker)\n endMarker.parentNode?.removeChild(endMarker)\n },\n }\n}\n\n// ============================================================================\n// List Rendering\n// ============================================================================\n\n/** Key extractor function type */\nexport type KeyFn<T> = (item: T, index: number) => string | number\n\n/**\n * Create a reactive list rendering binding with optional keying.\n */\nexport function createList<T>(\n items: () => T[],\n renderItem: (item: T, index: number) => FictNode,\n createElementFn: CreateElementFn,\n getKey?: KeyFn<T>,\n): BindingHandle {\n const startMarker = document.createComment('fict:list:start')\n const endMarker = document.createComment('fict:list:end')\n const fragment = document.createDocumentFragment()\n fragment.append(startMarker, endMarker)\n\n const nodeMap = new Map<string | number, ManagedBlock<T>>()\n let pendingItems: T[] | null = null\n\n const runListUpdate = () => {\n const arr = items()\n const parent = startMarker.parentNode as (ParentNode & Node) | null\n if (!parent) {\n pendingItems = arr\n return\n }\n pendingItems = null\n\n const newNodeMap = new Map<string | number, ManagedBlock<T>>()\n const blocks: ManagedBlock<T>[] = []\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i]! as T\n const key = getKey ? getKey(item, i) : i\n const existing = nodeMap.get(key)\n\n let block: ManagedBlock<T>\n if (existing) {\n const previousValue = existing.value()\n if (!getKey && previousValue !== item) {\n destroyRoot(existing.root)\n removeBlockNodes(existing)\n block = mountBlock(item, i, renderItem, parent, endMarker, createElementFn)\n } else {\n const previousIndex = existing.index()\n existing.value(item)\n existing.index(i)\n\n if (previousValue === item) {\n bumpBlockVersion(existing)\n }\n\n const needsRerender = getKey ? true : previousValue !== item || previousIndex !== i\n block = needsRerender ? rerenderBlock(existing, createElementFn) : existing\n }\n } else {\n block = mountBlock(item, i, renderItem, parent, endMarker, createElementFn)\n }\n\n newNodeMap.set(key, block)\n blocks.push(block)\n }\n\n for (const [key, managed] of nodeMap) {\n if (!newNodeMap.has(key)) {\n destroyRoot(managed.root)\n removeBlockNodes(managed)\n }\n }\n\n let anchor: Node = endMarker\n for (let i = blocks.length - 1; i >= 0; i--) {\n const block = blocks[i]!\n insertNodesBefore(parent, block.nodes, anchor)\n if (block.nodes.length > 0) {\n anchor = block.nodes[0]!\n }\n }\n\n nodeMap.clear()\n for (const [k, v] of newNodeMap) {\n nodeMap.set(k, v)\n }\n }\n\n const dispose = createRenderEffect(runListUpdate)\n\n return {\n marker: fragment,\n flush: () => {\n if (pendingItems !== null) {\n runListUpdate()\n }\n },\n dispose: () => {\n dispose()\n for (const [, managed] of nodeMap) {\n destroyRoot(managed.root)\n removeBlockNodes(managed)\n }\n nodeMap.clear()\n startMarker.parentNode?.removeChild(startMarker)\n endMarker.parentNode?.removeChild(endMarker)\n },\n }\n}\n\n// ============================================================================\n// Show/Hide Helper\n// ==========================================================================\n\n/**\n * Create a show/hide binding that uses CSS display instead of DOM manipulation.\n * More efficient than conditional when the content is expensive to create.\n *\n * @example\n * ```ts\n * createShow(container, () => $visible())\n * ```\n */\nexport function createShow(el: HTMLElement, condition: () => boolean, displayValue?: string): void {\n const originalDisplay = displayValue ?? el.style.display\n createRenderEffect(() => {\n el.style.display = condition() ? originalDisplay : 'none'\n })\n}\n\n// ============================================================================\n// Portal\n// ============================================================================\n\n/**\n * Create a portal that renders content into a different DOM container.\n *\n * @example\n * ```ts\n * createPortal(\n * document.body,\n * () => jsx(Modal, { children: 'Hello' }),\n * createElement\n * )\n * ```\n */\nexport function createPortal(\n container: HTMLElement,\n render: () => FictNode,\n createElementFn: CreateElementFn,\n): BindingHandle {\n // Capture the parent root BEFORE any effects run\n // This is needed because createRenderEffect will push/pop its own root context\n const parentRoot = getCurrentRoot()\n\n const marker = document.createComment('fict:portal')\n container.appendChild(marker)\n\n let currentNodes: Node[] = []\n let currentRoot: RootContext | null = null\n\n const dispose = createRenderEffect(() => {\n // Clean up previous\n if (currentRoot) {\n destroyRoot(currentRoot)\n currentRoot = null\n }\n if (currentNodes.length > 0) {\n removeNodes(currentNodes)\n currentNodes = []\n }\n\n // Create new content\n const root = createRootContext()\n const prev = pushRoot(root)\n let handledError = false\n try {\n const output = render()\n if (output != null && output !== false) {\n const el = createElementFn(output)\n const nodes = toNodeArray(el)\n if (marker.parentNode) {\n insertNodesBefore(marker.parentNode as ParentNode & Node, nodes, marker)\n }\n currentNodes = nodes\n }\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n destroyRoot(root)\n currentNodes = []\n return\n }\n if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n destroyRoot(root)\n currentNodes = []\n return\n }\n throw err\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n currentRoot = root\n } else {\n currentRoot = null\n }\n }\n })\n\n // The portal's dispose function must be named so we can register it for cleanup\n const portalDispose = () => {\n dispose()\n if (currentRoot) {\n destroyRoot(currentRoot)\n }\n if (currentNodes.length > 0) {\n removeNodes(currentNodes)\n }\n marker.parentNode?.removeChild(marker)\n }\n\n // Register the portal's cleanup with the parent component's root context\n // This ensures the portal is cleaned up when the parent unmounts\n // We use parentRoot (captured before createRenderEffect) to avoid registering\n // with the portal's internal root which would be destroyed separately\n if (parentRoot) {\n parentRoot.destroyCallbacks.push(portalDispose)\n }\n\n return {\n marker,\n dispose: portalDispose,\n }\n}\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nfunction mountBlock<T>(\n initialValue: T,\n initialIndex: number,\n renderItem: (item: T, index: number) => FictNode,\n parent: ParentNode & Node,\n anchor: Node,\n createElementFn: CreateElementFn,\n): ManagedBlock<T> {\n const start = document.createComment('fict:block:start')\n const end = document.createComment('fict:block:end')\n const valueSig = createSignal<T>(initialValue)\n const indexSig = createSignal<number>(initialIndex)\n const versionSig = createSignal(0)\n const valueProxy = createValueProxy(() => {\n versionSig()\n return valueSig()\n }) as T\n const renderCurrent = () => renderItem(valueProxy, indexSig())\n const root = createRootContext()\n const prev = pushRoot(root)\n const nodes: Node[] = [start]\n let handledError = false\n try {\n const output = renderCurrent()\n if (output != null && output !== false) {\n const el = createElementFn(output)\n const rendered = toNodeArray(el)\n nodes.push(...rendered)\n }\n nodes.push(end)\n insertNodesBefore(parent, nodes, anchor)\n } catch (err) {\n if (handleSuspend(err as any, root)) {\n handledError = true\n nodes.push(end)\n insertNodesBefore(parent, nodes, anchor)\n } else if (handleError(err, { source: 'renderChild' }, root)) {\n handledError = true\n nodes.push(end)\n insertNodesBefore(parent, nodes, anchor)\n } else {\n throw err\n }\n } finally {\n popRoot(prev)\n if (!handledError) {\n flushOnMount(root)\n } else {\n destroyRoot(root)\n }\n }\n return {\n nodes,\n root,\n value: valueSig,\n index: indexSig,\n version: versionSig,\n start,\n end,\n valueProxy,\n renderCurrent,\n }\n}\n\nfunction rerenderBlock<T>(\n block: ManagedBlock<T>,\n createElementFn: CreateElementFn,\n): ManagedBlock<T> {\n const currentContent = block.nodes.slice(1, Math.max(1, block.nodes.length - 1))\n const currentNode = currentContent.length === 1 ? currentContent[0] : null\n\n clearRoot(block.root)\n\n const prev = pushRoot(block.root)\n let nextOutput: FictNode\n let handledError = false\n try {\n nextOutput = block.renderCurrent()\n } catch (err) {\n if (handleSuspend(err as any, block.root)) {\n handledError = true\n popRoot(prev)\n destroyRoot(block.root)\n block.nodes = [block.start, block.end]\n return block\n }\n if (handleError(err, { source: 'renderChild' }, block.root)) {\n handledError = true\n popRoot(prev)\n destroyRoot(block.root)\n block.nodes = [block.start, block.end]\n return block\n }\n throw err\n } finally {\n if (!handledError) {\n popRoot(prev)\n }\n }\n\n if (isFragmentVNode(nextOutput) && currentContent.length > 0) {\n const patched = patchFragmentChildren(currentContent, nextOutput.props?.children)\n if (patched) {\n block.nodes = [block.start, ...currentContent, block.end]\n return block\n }\n }\n\n if (currentNode && patchNode(currentNode, nextOutput)) {\n block.nodes = [block.start, currentNode, block.end]\n return block\n }\n\n clearContent(block)\n\n if (nextOutput != null && nextOutput !== false) {\n const newNodes = toNodeArray(\n nextOutput instanceof Node ? nextOutput : (createElementFn(nextOutput) as Node),\n )\n insertNodesBefore(block.start.parentNode as ParentNode & Node, newNodes, block.end)\n block.nodes = [block.start, ...newNodes, block.end]\n } else {\n block.nodes = [block.start, block.end]\n }\n return block\n}\n\nfunction patchElement(el: Element, output: FictNode): boolean {\n if (\n output === null ||\n output === undefined ||\n output === false ||\n typeof output === 'string' ||\n typeof output === 'number'\n ) {\n el.textContent =\n output === null || output === undefined || output === false ? '' : String(output)\n return true\n }\n\n if (output instanceof Text) {\n el.textContent = output.data\n return true\n }\n\n if (output && typeof output === 'object' && !(output instanceof Node)) {\n const vnode = output as { type?: unknown; props?: Record<string, unknown> }\n if (typeof vnode.type === 'string' && vnode.type.toLowerCase() === el.tagName.toLowerCase()) {\n const children = vnode.props?.children\n const props = vnode.props ?? {}\n\n // Update props (except children and key)\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children' || key === 'key') continue\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null ||\n value === undefined\n ) {\n if (key === 'class' || key === 'className') {\n el.setAttribute('class', value === false || value === null ? '' : String(value))\n } else if (key === 'style' && typeof value === 'string') {\n ;(el as HTMLElement).style.cssText = value\n } else if (value === false || value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n el.setAttribute(key, String(value))\n }\n }\n }\n\n // Handle primitive children\n if (\n typeof children === 'string' ||\n typeof children === 'number' ||\n children === null ||\n children === undefined ||\n children === false\n ) {\n el.textContent =\n children === null || children === undefined || children === false ? '' : String(children)\n return true\n }\n\n // Handle single nested VNode child - recursively patch\n if (\n children &&\n typeof children === 'object' &&\n !Array.isArray(children) &&\n !(children instanceof Node)\n ) {\n const childVNode = children as { type?: unknown; props?: Record<string, unknown> }\n if (typeof childVNode.type === 'string') {\n // Find matching child element in the DOM\n const childEl = el.querySelector(childVNode.type)\n if (childEl && patchElement(childEl, children as FictNode)) {\n return true\n }\n }\n }\n\n return false\n }\n }\n\n if (output instanceof Node) {\n if (output.nodeType === Node.ELEMENT_NODE) {\n const nextEl = output as Element\n if (nextEl.tagName.toLowerCase() === el.tagName.toLowerCase()) {\n el.textContent = nextEl.textContent\n return true\n }\n } else if (output.nodeType === Node.TEXT_NODE) {\n el.textContent = (output as Text).data\n return true\n }\n }\n\n return false\n}\n\nfunction patchNode(currentNode: Node | null, nextOutput: FictNode): boolean {\n if (!currentNode) return false\n\n if (\n currentNode instanceof Text &&\n (nextOutput === null ||\n nextOutput === undefined ||\n nextOutput === false ||\n typeof nextOutput === 'string' ||\n typeof nextOutput === 'number' ||\n nextOutput instanceof Text)\n ) {\n const nextText =\n nextOutput instanceof Text\n ? nextOutput.data\n : nextOutput === null || nextOutput === undefined || nextOutput === false\n ? ''\n : String(nextOutput)\n currentNode.data = nextText\n return true\n }\n\n if (currentNode instanceof Element && patchElement(currentNode, nextOutput)) {\n return true\n }\n\n if (nextOutput instanceof Node && currentNode === nextOutput) {\n return true\n }\n\n return false\n}\n\nfunction isFragmentVNode(\n value: unknown,\n): value is { type: typeof Fragment; props?: { children?: FictNode | FictNode[] } } {\n return (\n value != null &&\n typeof value === 'object' &&\n !(value instanceof Node) &&\n (value as { type?: unknown }).type === Fragment\n )\n}\n\nfunction normalizeChildren(\n children: FictNode | FictNode[] | undefined,\n result: FictNode[] = [],\n): FictNode[] {\n if (children === undefined) {\n return result\n }\n if (Array.isArray(children)) {\n for (const child of children) {\n normalizeChildren(child, result)\n }\n return result\n }\n if (children === null || children === false) {\n return result\n }\n result.push(children)\n return result\n}\n\nfunction patchFragmentChildren(\n nodes: Node[],\n children: FictNode | FictNode[] | undefined,\n): boolean {\n const normalized = normalizeChildren(children)\n if (normalized.length !== nodes.length) {\n return false\n }\n for (let i = 0; i < normalized.length; i++) {\n if (!patchNode(nodes[i]!, normalized[i]!)) {\n return false\n }\n }\n return true\n}\n\nfunction clearContent<T>(block: ManagedBlock<T>): void {\n const nodes = block.nodes.slice(1, Math.max(1, block.nodes.length - 1))\n removeNodes(nodes)\n}\n\nfunction removeBlockNodes<T>(block: ManagedBlock<T>): void {\n let cursor: Node | null = block.start\n const end = block.end\n while (cursor) {\n const next: Node | null = cursor.nextSibling\n cursor.parentNode?.removeChild(cursor)\n if (cursor === end) break\n cursor = next\n }\n}\n\nfunction bumpBlockVersion<T>(block: ManagedBlock<T>): void {\n block.version(block.version() + 1)\n}\n\n// DOM utility functions are imported from './node-ops' to avoid duplication\n","/**\n * Fict DOM Rendering System\n *\n * This module provides DOM rendering capabilities with reactive bindings.\n * It transforms JSX virtual nodes into actual DOM elements, automatically\n * setting up reactive updates for dynamic values.\n *\n * Key Features:\n * - Reactive text content: `{count}` updates when count changes\n * - Reactive attributes: `disabled={!isValid}` updates reactively\n * - Reactive children: `{show && <Modal />}` handles conditionals\n * - List rendering: `{items.map(...)}` with efficient keyed updates\n */\n\nimport {\n createTextBinding,\n createAttributeBinding,\n createStyleBinding,\n createClassBinding,\n createChildBinding,\n bindEvent,\n isReactive,\n PRIMITIVE_PROXY,\n type MaybeReactive,\n type AttributeSetter,\n type BindingHandle,\n} from './binding'\nimport { Properties, ChildProperties, Aliases, getPropAlias, SVGNamespace } from './constants'\nimport { __fictPushContext, __fictPopContext } from './hooks'\nimport { Fragment } from './jsx'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n handleError,\n handleSuspend,\n pushRoot,\n popRoot,\n registerRootCleanup,\n getCurrentRoot,\n} from './lifecycle'\nimport { createPropsProxy, unwrapProps } from './props'\nimport { untrack } from './scheduler'\nimport type { DOMElement, FictNode, FictVNode, RefObject } from './types'\n\n// ============================================================================\n// Main Render Function\n// ============================================================================\n\n/**\n * Render a Fict view into a container element.\n *\n * @param view - A function that returns the view to render\n * @param container - The DOM container to render into\n * @returns A teardown function to unmount the view\n *\n * @example\n * ```ts\n * const unmount = render(() => <App />, document.getElementById('root')!)\n * // Later: unmount()\n * ```\n */\nexport function render(view: () => FictNode, container: HTMLElement): () => void {\n const root = createRootContext()\n const prev = pushRoot(root)\n let dom: DOMElement\n try {\n const output = view()\n // createElement must be called within the root context\n // so that child components register their onMount callbacks correctly\n dom = createElement(output)\n } finally {\n popRoot(prev)\n }\n\n container.replaceChildren(dom)\n container.setAttribute('data-fict-fine-grained', '1')\n\n flushOnMount(root)\n\n const teardown = () => {\n destroyRoot(root)\n container.innerHTML = ''\n }\n\n return teardown\n}\n\n// ============================================================================\n// Element Creation\n// ============================================================================\n\n/**\n * Create a DOM element from a Fict node.\n * This is the main entry point for converting virtual nodes to real DOM.\n *\n * Supports:\n * - Native DOM nodes (passed through)\n * - Null/undefined/false (empty text node)\n * - Arrays (DocumentFragment)\n * - Strings/numbers (text nodes)\n * - Booleans (empty text node)\n * - VNodes (components or HTML elements)\n * - Reactive values (functions returning any of the above)\n */\nexport function createElement(node: FictNode): DOMElement {\n // Already a DOM node - pass through\n if (node instanceof Node) {\n return node\n }\n\n // Null/undefined/false - empty placeholder\n if (node === null || node === undefined || node === false) {\n return document.createTextNode('')\n }\n\n // Primitive proxy produced by keyed list binding\n if (typeof node === 'object' && node !== null && !(node instanceof Node)) {\n // Handle BindingHandle (createList, createConditional, etc)\n if ('marker' in node) {\n return createElement((node as { marker: unknown }).marker as FictNode)\n }\n\n const nodeRecord = node as unknown as Record<PropertyKey, unknown>\n if (nodeRecord[PRIMITIVE_PROXY]) {\n const primitiveGetter = nodeRecord[Symbol.toPrimitive]\n const value =\n typeof primitiveGetter === 'function' ? primitiveGetter.call(node, 'default') : node\n return document.createTextNode(value == null || value === false ? '' : String(value))\n }\n }\n\n // Array - create fragment\n if (Array.isArray(node)) {\n const frag = document.createDocumentFragment()\n for (const child of node) {\n appendChildNode(frag, child)\n }\n return frag\n }\n\n // Primitive values - text node\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node))\n }\n\n if (typeof node === 'boolean') {\n return document.createTextNode('')\n }\n\n // VNode\n const vnode = node as FictVNode\n\n // Function component\n if (typeof vnode.type === 'function') {\n const rawProps = unwrapProps(vnode.props ?? {}) as Record<string, unknown>\n const baseProps =\n vnode.key === undefined\n ? rawProps\n : new Proxy(rawProps, {\n get(target, prop, receiver) {\n if (prop === 'key') return vnode.key\n return Reflect.get(target, prop, receiver)\n },\n has(target, prop) {\n if (prop === 'key') return true\n return prop in target\n },\n ownKeys(target) {\n const keys = new Set(Reflect.ownKeys(target))\n keys.add('key')\n return Array.from(keys)\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'key') {\n return { enumerable: true, configurable: true, value: vnode.key }\n }\n return Object.getOwnPropertyDescriptor(target, prop)\n },\n })\n\n const props = createPropsProxy(baseProps)\n try {\n // Create a fresh hook context for this component instance.\n // This preserves slot state across re-renders driven by __fictRender.\n __fictPushContext()\n const rendered = vnode.type(props)\n __fictPopContext()\n return createElement(rendered as FictNode)\n } catch (err) {\n __fictPopContext()\n if (handleSuspend(err as any)) {\n return document.createComment('fict:suspend')\n }\n handleError(err, { source: 'render', componentName: vnode.type.name })\n throw err\n }\n }\n\n // Fragment\n if (vnode.type === Fragment) {\n const frag = document.createDocumentFragment()\n const children = vnode.props?.children as FictNode | FictNode[] | undefined\n appendChildren(frag, children)\n return frag\n }\n\n // HTML Element\n const tagName = typeof vnode.type === 'string' ? vnode.type : 'div'\n const el = document.createElement(tagName)\n applyProps(el, vnode.props ?? {})\n return el\n}\n\n/**\n * Create a template cloning factory from an HTML string.\n * Used by the compiler for efficient DOM generation.\n *\n * @param html - The HTML string to create a template from\n * @param isImportNode - Use importNode for elements like img/iframe\n * @param isSVG - Whether the template is SVG content\n * @param isMathML - Whether the template is MathML content\n */\nexport function template(\n html: string,\n isImportNode?: boolean,\n isSVG?: boolean,\n isMathML?: boolean,\n): () => Node {\n let node: Node | null = null\n\n const create = (): Node => {\n const t = isMathML\n ? document.createElementNS('http://www.w3.org/1998/Math/MathML', 'template')\n : document.createElement('template')\n t.innerHTML = html\n\n if (isSVG) {\n // For SVG, get the nested content\n return (t as HTMLTemplateElement).content.firstChild!.firstChild!\n }\n if (isMathML) {\n return t.firstChild!\n }\n return (t as HTMLTemplateElement).content.firstChild!\n }\n\n // Create the cloning function\n const fn = isImportNode\n ? () => untrack(() => document.importNode(node || (node = create()), true))\n : () => (node || (node = create())).cloneNode(true)\n\n // Add cloneNode property for compatibility\n ;(fn as { cloneNode?: typeof fn }).cloneNode = fn\n\n return fn\n}\n\n// ============================================================================\n// Child Node Handling\n// ============================================================================\n\n// Use the comprehensive Properties set from constants for property binding\n// These properties must update via DOM property semantics rather than attributes\n\n/**\n * Check if a value is a runtime binding handle\n */\nfunction isBindingHandle(node: unknown): node is BindingHandle {\n return (\n node !== null &&\n typeof node === 'object' &&\n 'marker' in node &&\n 'dispose' in node &&\n typeof (node as BindingHandle).dispose === 'function'\n )\n}\n\n/**\n * Append a child node to a parent, handling all node types including reactive values.\n */\nfunction appendChildNode(parent: HTMLElement | DocumentFragment, child: FictNode): void {\n // Skip nullish values\n if (child === null || child === undefined || child === false) {\n return\n }\n\n // Handle BindingHandle (recursive)\n if (isBindingHandle(child)) {\n appendChildNode(parent, child.marker)\n // Flush pending nodes now that markers are in the DOM\n child.flush?.()\n return\n }\n\n // Handle getter function (recursive)\n if (typeof child === 'function' && (child as () => FictNode).length === 0) {\n const childGetter = child as () => FictNode\n createChildBinding(parent as HTMLElement | DocumentFragment, childGetter, createElement)\n return\n }\n\n // Static child - create element and append\n if (Array.isArray(child)) {\n for (const item of child) {\n appendChildNode(parent, item)\n }\n return\n }\n\n // Cast to Node for remaining logic\n let domNode: Node\n if (typeof child !== 'object' || child === null) {\n domNode = document.createTextNode(String(child ?? ''))\n } else {\n domNode = createElement(child as any) as Node\n }\n\n // Handle DocumentFragment manually to avoid JSDOM issues\n if (domNode.nodeType === 11) {\n const children = Array.from(domNode.childNodes)\n for (const node of children) {\n appendChildNode(parent, node)\n }\n return\n }\n\n if (domNode.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(domNode)\n }\n\n try {\n parent.appendChild(domNode)\n } catch (e: any) {\n if (parent.ownerDocument) {\n const clone = parent.ownerDocument.importNode(domNode, true)\n parent.appendChild(clone)\n return\n }\n throw e\n }\n}\n\n/**\n * Append multiple children, handling arrays and nested structures.\n */\nfunction appendChildren(\n parent: HTMLElement | DocumentFragment,\n children: FictNode | FictNode[] | undefined,\n): void {\n if (children === undefined) return\n\n if (Array.isArray(children)) {\n for (const child of children) {\n appendChildren(parent, child)\n }\n return\n }\n\n appendChildNode(parent, children)\n}\n\n// ============================================================================\n// Ref Handling\n// ============================================================================\n\n/**\n * Apply a ref to an element, supporting both callback and object refs.\n * Both types are automatically cleaned up on unmount.\n */\nfunction applyRef(el: HTMLElement, value: unknown): void {\n if (typeof value === 'function') {\n // Callback ref\n const refFn = value as (el: HTMLElement | null) => void\n refFn(el)\n\n // Match React behavior: call ref(null) on unmount\n if (getCurrentRoot()) {\n registerRootCleanup(() => {\n refFn(null)\n })\n }\n } else if (value && typeof value === 'object' && 'current' in value) {\n // Object ref\n const refObj = value as RefObject<HTMLElement>\n refObj.current = el\n\n // Auto-cleanup on unmount\n if (getCurrentRoot()) {\n registerRootCleanup(() => {\n refObj.current = null\n })\n }\n }\n}\n\n// ============================================================================\n// Props Handling\n// ============================================================================\n\n/**\n * Apply props to an HTML element, setting up reactive bindings as needed.\n * Uses comprehensive property constants for correct attribute/property handling.\n */\nfunction applyProps(el: HTMLElement, props: Record<string, unknown>, isSVG = false): void {\n props = unwrapProps(props)\n const tagName = el.tagName\n\n // Check if this is a custom element\n const isCE = tagName.includes('-') || 'is' in props\n\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children') continue\n\n // Ref handling\n if (key === 'ref') {\n applyRef(el, value)\n continue\n }\n\n // Event handling with delegation support\n if (isEventKey(key)) {\n bindEvent(\n el,\n eventNameFromProp(key),\n value as MaybeReactive<EventListenerOrEventListenerObject | null | undefined>,\n )\n continue\n }\n\n // Explicit on: namespace for non-delegated events\n if (key.slice(0, 3) === 'on:') {\n bindEvent(\n el,\n key.slice(3),\n value as MaybeReactive<EventListenerOrEventListenerObject | null | undefined>,\n false, // Non-delegated\n )\n continue\n }\n\n // Capture events\n if (key.slice(0, 10) === 'oncapture:') {\n bindEvent(\n el,\n key.slice(10),\n value as MaybeReactive<EventListenerOrEventListenerObject | null | undefined>,\n true, // Capture\n )\n continue\n }\n\n // Class/ClassName\n if (key === 'class' || key === 'className') {\n createClassBinding(el, value as MaybeReactive<string | Record<string, boolean> | null>)\n continue\n }\n\n // classList for object-style class binding\n if (key === 'classList') {\n createClassBinding(el, value as MaybeReactive<Record<string, boolean> | null>)\n continue\n }\n\n // Style\n if (key === 'style') {\n createStyleBinding(\n el,\n value as MaybeReactive<string | Record<string, string | number> | null>,\n )\n continue\n }\n\n // dangerouslySetInnerHTML\n if (key === 'dangerouslySetInnerHTML' && value && typeof value === 'object') {\n const htmlValue = (value as { __html?: string }).__html\n if (htmlValue !== undefined) {\n if (isReactive(htmlValue)) {\n createAttributeBinding(el, 'innerHTML', htmlValue as () => unknown, setInnerHTML)\n } else {\n el.innerHTML = htmlValue\n }\n }\n continue\n }\n\n // Child properties (innerHTML, textContent, etc.)\n if (ChildProperties.has(key)) {\n createAttributeBinding(el, key, value as MaybeReactive<unknown>, setProperty)\n continue\n }\n\n // Forced attribute via attr: prefix\n if (key.slice(0, 5) === 'attr:') {\n createAttributeBinding(el, key.slice(5), value as MaybeReactive<unknown>, setAttribute)\n continue\n }\n\n // Forced boolean attribute via bool: prefix\n if (key.slice(0, 5) === 'bool:') {\n createAttributeBinding(el, key.slice(5), value as MaybeReactive<unknown>, setBoolAttribute)\n continue\n }\n\n // Forced property via prop: prefix\n if (key.slice(0, 5) === 'prop:') {\n createAttributeBinding(el, key.slice(5), value as MaybeReactive<unknown>, setProperty)\n continue\n }\n\n // Check for property alias (element-specific mappings)\n const propAlias = !isSVG ? getPropAlias(key, tagName) : undefined\n\n // Handle properties and element-specific attributes\n if (propAlias || (!isSVG && Properties.has(key)) || (isCE && !isSVG)) {\n const propName = propAlias || key\n // Custom elements use toPropertyName conversion\n if (isCE && !Properties.has(key)) {\n createAttributeBinding(\n el,\n toPropertyName(propName),\n value as MaybeReactive<unknown>,\n setProperty,\n )\n } else {\n createAttributeBinding(el, propName, value as MaybeReactive<unknown>, setProperty)\n }\n continue\n }\n\n // SVG namespaced attributes (xlink:href, xml:lang, etc.)\n if (isSVG && key.indexOf(':') > -1) {\n const [prefix, name] = key.split(':')\n const ns = SVGNamespace[prefix!]\n if (ns) {\n createAttributeBinding(el, key, value as MaybeReactive<unknown>, (el, _key, val) =>\n setAttributeNS(el, ns, name!, val),\n )\n continue\n }\n }\n\n // Regular attributes (potentially reactive)\n // Apply alias mapping (className -> class, htmlFor -> for)\n const attrName = Aliases[key] || key\n createAttributeBinding(el, attrName, value as MaybeReactive<unknown>, setAttribute)\n }\n\n // Handle children\n const children = props.children as FictNode | FictNode[] | undefined\n appendChildren(el, children)\n}\n\n/**\n * Convert kebab-case to camelCase for custom element properties\n */\nfunction toPropertyName(name: string): string {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase())\n}\n\n// ============================================================================\n// Attribute Setters\n// ============================================================================\n\n/**\n * Set an attribute on an element, handling various value types.\n */\nconst setAttribute: AttributeSetter = (el: HTMLElement, key: string, value: unknown): void => {\n // Remove attribute for nullish/false values\n if (value === undefined || value === null || value === false) {\n el.removeAttribute(key)\n return\n }\n\n // Boolean true -> empty string attribute\n if (value === true) {\n el.setAttribute(key, '')\n return\n }\n\n // Primitive values\n const valueType = typeof value\n if (valueType === 'string' || valueType === 'number') {\n el.setAttribute(key, String(value))\n return\n }\n\n // DOM property (for cases like `value`, `checked`, etc.)\n if (key in el) {\n ;(el as unknown as Record<string, unknown>)[key] = value\n return\n }\n\n // Fallback: set as attribute\n el.setAttribute(key, String(value))\n}\n\n/**\n * Set a property on an element, ensuring nullish values clear sensibly.\n */\nconst setProperty: AttributeSetter = (el: HTMLElement, key: string, value: unknown): void => {\n if (value === undefined || value === null) {\n const fallback = key === 'checked' || key === 'selected' ? false : ''\n ;(el as unknown as Record<string, unknown>)[key] = fallback\n return\n }\n\n // Handle style object binding style={{ color: 'red' }}\n if (key === 'style' && typeof value === 'object' && value !== null) {\n for (const k in value as Record<string, string>) {\n const v = (value as Record<string, string>)[k]\n if (v !== undefined) {\n ;(el.style as unknown as Record<string, string>)[k] = String(v)\n }\n }\n return\n }\n\n ;(el as unknown as Record<string, unknown>)[key] = value as unknown\n}\n\n/**\n * Set innerHTML on an element (used for dangerouslySetInnerHTML)\n */\nconst setInnerHTML: AttributeSetter = (el: HTMLElement, _key: string, value: unknown): void => {\n el.innerHTML = value == null ? '' : String(value)\n}\n\n/**\n * Set a boolean attribute on an element (empty string when true, removed when false)\n */\nconst setBoolAttribute: AttributeSetter = (el: HTMLElement, key: string, value: unknown): void => {\n if (value) {\n el.setAttribute(key, '')\n } else {\n el.removeAttribute(key)\n }\n}\n\n/**\n * Set an attribute with a namespace (for SVG xlink:href, etc.)\n */\nfunction setAttributeNS(el: HTMLElement, namespace: string, name: string, value: unknown): void {\n if (value == null) {\n el.removeAttributeNS(namespace, name)\n } else {\n el.setAttributeNS(namespace, name, String(value))\n }\n}\n\n// ============================================================================\n// Event Handling Utilities\n// ============================================================================\n\n/**\n * Check if a prop key is an event handler (starts with \"on\")\n */\nfunction isEventKey(key: string): boolean {\n return key.startsWith('on') && key.length > 2 && key[2]!.toUpperCase() === key[2]\n}\n\n/**\n * Convert a React-style event prop to a DOM event name\n * e.g., \"onClick\" -> \"click\", \"onMouseDown\" -> \"mousedown\"\n */\nfunction eventNameFromProp(key: string): string {\n return key.slice(2).toLowerCase()\n}\n\n// ============================================================================\n// Exports for Advanced Usage\n// ============================================================================\n\nexport {\n createTextBinding,\n createChildBinding,\n createAttributeBinding,\n createStyleBinding,\n createClassBinding,\n isReactive,\n}\n\nexport type { BindingHandle, MaybeReactive }\n","import { createElement } from './dom'\nimport { createEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\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\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()\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 renderingFallback = true\n try {\n renderValue(toView(err))\n } finally {\n renderingFallback = false\n }\n props.onError?.(err)\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 handleError(err, { source: 'render' })\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 if (epoch !== tokenEpoch) return\n pending(Math.max(0, pending() - 1))\n if (pending() === 0) {\n switchView(props.children ?? null)\n onResolveMaybe()\n }\n },\n err => {\n if (epoch !== tokenEpoch) return\n pending(Math.max(0, pending() - 1))\n props.onReject?.(err)\n handleError(err, { source: 'render' }, hostRoot)\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","/**\n * Fict DOM Reconciliation\n *\n * Efficient array reconciliation algorithm based on udomdiff.\n * https://github.com/WebReflection/udomdiff\n *\n * This algorithm uses a 5-step strategy:\n * 1. Common prefix - skip matching nodes at start\n * 2. Common suffix - skip matching nodes at end\n * 3. Append - insert remaining new nodes\n * 4. Remove - remove remaining old nodes\n * 5. Swap/Map fallback - handle complex rearrangements\n *\n * Most real-world updates (95%+) use fast paths without building a Map.\n */\n\n/**\n * Reconcile two arrays of DOM nodes, efficiently updating the DOM.\n *\n * @param parentNode - The parent element containing the nodes\n * @param a - The old array of nodes (currently in DOM)\n * @param b - The new array of nodes (target state)\n *\n * @example\n * ```ts\n * const oldNodes = [node1, node2, node3]\n * const newNodes = [node1, node4, node3] // node2 replaced with node4\n * reconcileArrays(parent, oldNodes, newNodes)\n * ```\n */\nexport default function reconcileArrays(parentNode: ParentNode, a: Node[], b: Node[]): void {\n const bLength = b.length\n let aEnd = a.length\n let bEnd = bLength\n let aStart = 0\n let bStart = 0\n const after = aEnd > 0 ? a[aEnd - 1]!.nextSibling : null\n let map: Map<Node, number> | null = null\n\n while (aStart < aEnd || bStart < bEnd) {\n // 1. Common prefix - nodes match at start\n if (a[aStart] === b[bStart]) {\n aStart++\n bStart++\n continue\n }\n\n // 2. Common suffix - nodes match at end\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--\n bEnd--\n }\n\n // 3. Append - old array exhausted, insert remaining new nodes\n if (aEnd === aStart) {\n const node: Node | null =\n bEnd < bLength ? (bStart ? b[bStart - 1]!.nextSibling : (b[bEnd - bStart] ?? null)) : after\n\n const count = bEnd - bStart\n const doc = (parentNode as Node).ownerDocument\n if (count > 1 && doc) {\n const frag = doc.createDocumentFragment()\n for (let i = bStart; i < bEnd; i++) {\n frag.appendChild(b[i]!)\n }\n parentNode.insertBefore(frag, node)\n bStart = bEnd\n } else {\n while (bStart < bEnd) {\n parentNode.insertBefore(b[bStart++]!, node)\n }\n }\n }\n // 4. Remove - new array exhausted, remove remaining old nodes\n else if (bEnd === bStart) {\n while (aStart < aEnd) {\n const nodeToRemove = a[aStart]!\n if (!map || !map.has(nodeToRemove)) {\n nodeToRemove.parentNode?.removeChild(nodeToRemove)\n }\n aStart++\n }\n }\n // 5a. Swap backward - detect backward swap pattern\n else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd]!.nextSibling\n parentNode.insertBefore(b[bStart++]!, a[aStart++]!.nextSibling)\n parentNode.insertBefore(b[--bEnd]!, node)\n // Update reference in old array for potential future matches\n a[aEnd] = b[bEnd]!\n }\n // 5b. Map fallback - use Map for complex rearrangements\n else {\n // Build map on first use (lazy initialization)\n if (!map) {\n map = new Map()\n let i = bStart\n while (i < bEnd) {\n map.set(b[i]!, i++)\n }\n }\n\n const index = map.get(a[aStart]!)\n\n if (index != null) {\n if (bStart < index && index < bEnd) {\n // Check for longest increasing subsequence\n let i = aStart\n let sequence = 1\n let t: number | undefined\n\n while (++i < aEnd && i < bEnd) {\n t = map.get(a[i]!)\n if (t == null || t !== index + sequence) break\n sequence++\n }\n\n // Use optimal strategy based on sequence length\n if (sequence > index - bStart) {\n // Sequence is long enough - insert nodes before current\n const node = a[aStart]!\n while (bStart < index) {\n parentNode.insertBefore(b[bStart++]!, node)\n }\n } else {\n // Short sequence - replace\n parentNode.replaceChild(b[bStart++]!, a[aStart++]!)\n }\n } else {\n aStart++\n }\n } else {\n // Node not in new array - remove it\n const nodeToRemove = a[aStart++]!\n nodeToRemove.parentNode?.removeChild(nodeToRemove)\n }\n }\n }\n}\n\n/**\n * Simple reconciliation for keyed lists.\n * Uses the same algorithm but works with keyed blocks.\n *\n * @param parentNode - The parent element\n * @param oldNodes - Old nodes in DOM order\n * @param newNodes - New nodes in target order\n */\nexport function reconcileNodes(parentNode: ParentNode, oldNodes: Node[], newNodes: Node[]): void {\n reconcileArrays(parentNode, oldNodes, newNodes)\n}\n","/**\n * List Helpers for Compiler-Generated Fine-Grained Updates\n *\n * These helpers are used by the compiler to generate efficient keyed list rendering.\n * They provide low-level primitives for DOM node manipulation without rebuilding.\n */\n\nimport { createElement } from './dom'\nimport { createRenderEffect } from './effect'\nimport {\n createRootContext,\n destroyRoot,\n flushOnMount,\n popRoot,\n pushRoot,\n type RootContext,\n} from './lifecycle'\nimport { insertNodesBefore, removeNodes, toNodeArray } from './node-ops'\nimport reconcileArrays from './reconcile'\nimport { batch } from './scheduler'\nimport { createSignal, setActiveSub, type Signal } from './signal'\nimport type { FictNode } from './types'\n\n// Re-export shared DOM helpers for compiler-generated code\nexport { insertNodesBefore, removeNodes, toNodeArray }\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * A keyed block represents a single item in a list with its associated DOM nodes and state\n */\nexport interface KeyedBlock<T = unknown> {\n /** Unique key for this block */\n key: string | number\n /** DOM nodes belonging to this block */\n nodes: Node[]\n /** Root context for lifecycle management */\n root: RootContext\n /** Signal containing the current item value */\n item: Signal<T>\n /** Signal containing the current index */\n index: Signal<number>\n /** Last raw item value assigned to this block */\n rawItem: T\n /** Last raw index value assigned to this block */\n rawIndex: number\n}\n\n/**\n * Container for managing keyed list blocks\n */\nexport interface KeyedListContainer<T = unknown> {\n /** Start marker comment node */\n startMarker: Comment\n /** End marker comment node */\n endMarker: Comment\n /** Map of key to block */\n blocks: Map<string | number, KeyedBlock<T>>\n /** Scratch map reused for the next render */\n nextBlocks: Map<string | number, KeyedBlock<T>>\n /** Current nodes in DOM order (including markers) */\n currentNodes: Node[]\n /** Next-frame node buffer to avoid reallocations */\n nextNodes: Node[]\n /** Ordered blocks in current DOM order */\n orderedBlocks: KeyedBlock<T>[]\n /** Next-frame ordered block buffer to avoid reallocations */\n nextOrderedBlocks: KeyedBlock<T>[]\n /** Track position of keys in the ordered buffer to handle duplicates */\n orderedIndexByKey: Map<string | number, number>\n /** Cleanup function */\n dispose: () => void\n}\n\n/**\n * Binding handle returned by createKeyedList for compiler-generated code\n */\nexport interface KeyedListBinding {\n /** Document fragment placeholder inserted by the compiler/runtime */\n marker: DocumentFragment\n /** Start marker comment node */\n startMarker: Comment\n /** End marker comment node */\n endMarker: Comment\n /** Flush pending items - call after markers are inserted into DOM */\n flush?: () => void\n /** Cleanup function */\n dispose: () => void\n}\n\ntype FineGrainedRenderItem<T> = (\n itemSig: Signal<T>,\n indexSig: Signal<number>,\n key: string | number,\n) => Node[]\n\n/**\n * A block identified by start/end comment markers.\n */\nexport interface MarkerBlock {\n start: Comment\n end: Comment\n root?: RootContext\n}\n\n// ============================================================================\n// DOM Manipulation Primitives\n// ============================================================================\n\n/**\n * Move nodes to a position before the anchor node.\n * This is optimized to avoid unnecessary DOM operations.\n *\n * @param parent - Parent node to move nodes within\n * @param nodes - Array of nodes to move\n * @param anchor - Node to insert before (or null for end)\n */\nexport function moveNodesBefore(parent: Node, nodes: Node[], anchor: Node | null): void {\n // Insert in reverse order to maintain correct sequence\n // This way each node becomes the new anchor for the next\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i]!\n if (!node || !(node instanceof Node)) {\n throw new Error('Invalid node in moveNodesBefore')\n }\n // Only move if not already in correct position\n if (node.nextSibling !== anchor) {\n if (node.ownerDocument !== parent.ownerDocument && parent.ownerDocument) {\n parent.ownerDocument.adoptNode(node)\n }\n try {\n parent.insertBefore(node, anchor)\n } catch (e: any) {\n if (parent.ownerDocument) {\n try {\n const clone = parent.ownerDocument.importNode(node, true)\n parent.insertBefore(clone, anchor)\n // Note: Cloning during move breaks references in KeyedBlock.nodes\n // This is a worst-case fallback for tests.\n continue\n } catch {\n // Clone fallback failed\n }\n }\n throw e\n }\n }\n anchor = node\n }\n}\n\n/**\n * Remove an array of nodes from the DOM\n *\n * @param nodes - Array of nodes to remove\n */\n/**\n * Move an entire marker-delimited block (including markers) before the anchor.\n */\nexport function moveMarkerBlock(parent: Node, block: MarkerBlock, anchor: Node | null): void {\n const nodes = collectBlockNodes(block)\n if (nodes.length === 0) return\n moveNodesBefore(parent, nodes, anchor)\n}\n\n/**\n * Destroy a marker-delimited block, removing nodes and destroying the associated root.\n */\nexport function destroyMarkerBlock(block: MarkerBlock): void {\n if (block.root) {\n destroyRoot(block.root)\n }\n removeBlockRange(block)\n}\n\nfunction collectBlockNodes(block: MarkerBlock): Node[] {\n const nodes: Node[] = []\n let cursor: Node | null = block.start\n while (cursor) {\n nodes.push(cursor)\n if (cursor === block.end) {\n break\n }\n cursor = cursor.nextSibling\n }\n return nodes\n}\n\nfunction removeBlockRange(block: MarkerBlock): void {\n let cursor: Node | null = block.start\n while (cursor) {\n const next: Node | null = cursor.nextSibling\n cursor.parentNode?.removeChild(cursor)\n if (cursor === block.end) {\n break\n }\n cursor = next\n }\n}\n\nfunction createVersionedSignalAccessor<T>(initialValue: T): Signal<T> {\n let current = initialValue\n let version = 0\n const track = createSignal(version)\n\n function accessor(value?: T): T | void {\n if (arguments.length === 0) {\n track()\n return current\n }\n current = value as T\n version++\n track(version)\n }\n\n return accessor as Signal<T>\n}\n\n// ============================================================================\n// Keyed List Container\n// ============================================================================\n\n/**\n * Create a container for managing a keyed list.\n * This sets up the marker nodes and provides cleanup.\n *\n * @returns Container object with markers, blocks map, and dispose function\n */\nexport function createKeyedListContainer<T = unknown>(): KeyedListContainer<T> {\n const startMarker = document.createComment('fict:list:start')\n const endMarker = document.createComment('fict:list:end')\n\n const dispose = () => {\n // Clean up all blocks\n for (const block of container.blocks.values()) {\n destroyRoot(block.root)\n // Nodes are removed by parent disposal or specific cleanup if needed\n // But for list disposal, we just clear the container\n }\n container.blocks.clear()\n container.nextBlocks.clear()\n\n // Remove nodes (including markers)\n const range = document.createRange()\n range.setStartBefore(startMarker)\n range.setEndAfter(endMarker)\n range.deleteContents()\n\n // Clear cache\n container.currentNodes = []\n container.nextNodes = []\n container.nextBlocks.clear()\n container.orderedBlocks.length = 0\n container.nextOrderedBlocks.length = 0\n container.orderedIndexByKey.clear()\n }\n\n const container: KeyedListContainer<T> = {\n startMarker,\n endMarker,\n blocks: new Map<string | number, KeyedBlock<T>>(),\n nextBlocks: new Map<string | number, KeyedBlock<T>>(),\n currentNodes: [startMarker, endMarker],\n nextNodes: [],\n orderedBlocks: [],\n nextOrderedBlocks: [],\n orderedIndexByKey: new Map<string | number, number>(),\n dispose,\n }\n\n return container\n}\n\n// ============================================================================\n// Block Creation Helpers\n// ============================================================================\n\n/**\n * Create a new keyed block with the given render function\n *\n * @param key - Unique key for this block\n * @param item - Initial item value\n * @param index - Initial index\n * @param render - Function that creates the DOM nodes and sets up bindings\n * @returns New KeyedBlock\n */\nexport function createKeyedBlock<T>(\n key: string | number,\n item: T,\n index: number,\n render: (item: Signal<T>, index: Signal<number>, key: string | number) => Node[],\n needsIndex = true,\n): KeyedBlock<T> {\n // Use versioned signal for all item types; avoid diffing proxy overhead for objects\n const itemSig = createVersionedSignalAccessor(item)\n\n const indexSig = needsIndex\n ? createSignal<number>(index)\n : (((next?: number) => {\n if (arguments.length === 0) return index\n index = next as number\n return index\n }) as Signal<number>)\n const root = createRootContext()\n const prevRoot = pushRoot(root)\n\n // Isolate child effects from the outer effect (e.g., performDiff) by clearing activeSub.\n // This prevents child effects from being purged when the outer effect re-runs.\n const prevSub = setActiveSub(undefined)\n\n let nodes: Node[] = []\n try {\n const rendered = render(itemSig, indexSig, key)\n // If render returns real DOM nodes/arrays, preserve them to avoid\n // reparenting side-effects (tests may pre-insert them).\n if (\n rendered instanceof Node ||\n (Array.isArray(rendered) && rendered.every(n => n instanceof Node))\n ) {\n nodes = toNodeArray(rendered)\n } else {\n const element = createElement(rendered as unknown as FictNode)\n nodes = toNodeArray(element)\n }\n } finally {\n setActiveSub(prevSub)\n popRoot(prevRoot)\n flushOnMount(root)\n }\n\n return {\n key,\n nodes,\n root,\n item: itemSig,\n index: indexSig,\n rawItem: item,\n rawIndex: index,\n }\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\n/**\n * Find the first node after the start marker (for getting current anchor)\n */\nexport function getFirstNodeAfter(marker: Comment): Node | null {\n return marker.nextSibling\n}\n\n/**\n * Check if a node is between two markers\n */\nexport function isNodeBetweenMarkers(\n node: Node,\n startMarker: Comment,\n endMarker: Comment,\n): boolean {\n let current: Node | null = startMarker.nextSibling\n while (current && current !== endMarker) {\n if (current === node) return true\n current = current.nextSibling\n }\n return false\n}\n\n// ============================================================================\n// High-Level List Binding (for compiler-generated code)\n// ============================================================================\n\n/**\n * Create a keyed list binding with automatic diffing and DOM updates.\n * This is used by compiler-generated code for efficient list rendering.\n *\n * @param getItems - Function that returns the current array of items\n * @param keyFn - Function to extract unique key from each item\n * @param renderItem - Function that creates DOM nodes for each item\n * @returns Binding handle with markers and dispose function\n */\nexport function createKeyedList<T>(\n getItems: () => T[],\n keyFn: (item: T, index: number) => string | number,\n renderItem: FineGrainedRenderItem<T>,\n needsIndex?: boolean,\n): KeyedListBinding {\n const resolvedNeedsIndex =\n arguments.length >= 4 ? !!needsIndex : renderItem.length > 1 /* has index param */\n return createFineGrainedKeyedList(getItems, keyFn, renderItem, resolvedNeedsIndex)\n}\n\nfunction createFineGrainedKeyedList<T>(\n getItems: () => T[],\n keyFn: (item: T, index: number) => string | number,\n renderItem: FineGrainedRenderItem<T>,\n needsIndex: boolean,\n): KeyedListBinding {\n const container = createKeyedListContainer<T>()\n const fragment = document.createDocumentFragment()\n fragment.append(container.startMarker, container.endMarker)\n let pendingItems: T[] | null = null\n let disposed = false\n\n const performDiff = () => {\n if (disposed) return\n\n batch(() => {\n const newItems = pendingItems || getItems()\n pendingItems = null\n\n const oldBlocks = container.blocks\n const newBlocks = container.nextBlocks\n const prevOrderedBlocks = container.orderedBlocks\n const nextOrderedBlocks = container.nextOrderedBlocks\n const orderedIndexByKey = container.orderedIndexByKey\n newBlocks.clear()\n nextOrderedBlocks.length = 0\n orderedIndexByKey.clear()\n\n const endParent = container.endMarker.parentNode\n const startParent = container.startMarker.parentNode\n const parent =\n endParent && startParent && endParent === startParent && (endParent as Node).isConnected\n ? (endParent as ParentNode & Node)\n : null\n\n // If markers aren't mounted yet, store items and retry in microtask\n if (!parent) {\n pendingItems = newItems\n queueMicrotask(performDiff)\n return\n }\n\n if (newItems.length === 0) {\n if (oldBlocks.size > 0) {\n for (const block of oldBlocks.values()) {\n destroyRoot(block.root)\n removeNodes(block.nodes)\n }\n }\n oldBlocks.clear()\n newBlocks.clear()\n prevOrderedBlocks.length = 0\n nextOrderedBlocks.length = 0\n orderedIndexByKey.clear()\n container.currentNodes.length = 0\n container.currentNodes.push(container.startMarker, container.endMarker)\n container.nextNodes.length = 0\n return\n }\n\n const prevCount = prevOrderedBlocks.length\n let appendCandidate = prevCount > 0 && newItems.length >= prevCount\n const appendedBlocks: KeyedBlock<T>[] = []\n\n // Phase 1: Build new blocks map (reuse or create)\n newItems.forEach((item, index) => {\n const key = keyFn(item, index)\n const existed = oldBlocks.has(key)\n let block = oldBlocks.get(key)\n\n if (block) {\n if (block.rawItem !== item) {\n block.rawItem = item\n block.item(item)\n }\n if (needsIndex && block.rawIndex !== index) {\n block.rawIndex = index\n block.index(index)\n }\n }\n\n // If newBlocks already has this key (duplicate key case), clean up the previous block\n const existingBlock = newBlocks.get(key)\n if (existingBlock && existingBlock !== block) {\n destroyRoot(existingBlock.root)\n removeNodes(existingBlock.nodes)\n }\n\n if (block) {\n newBlocks.set(key, block)\n oldBlocks.delete(key)\n } else {\n const existingBlock = newBlocks.get(key)\n if (existingBlock) {\n destroyRoot(existingBlock.root)\n removeNodes(existingBlock.nodes)\n }\n\n // Create new block\n block = createKeyedBlock(key, item, index, renderItem, needsIndex)\n }\n\n const resolvedBlock = block!\n\n newBlocks.set(key, resolvedBlock)\n\n const position = orderedIndexByKey.get(key)\n if (position !== undefined) {\n appendCandidate = false\n }\n if (appendCandidate) {\n if (index < prevCount) {\n if (!prevOrderedBlocks[index] || prevOrderedBlocks[index]!.key !== key) {\n appendCandidate = false\n }\n } else if (existed) {\n appendCandidate = false\n }\n }\n if (position !== undefined) {\n const prior = nextOrderedBlocks[position]\n if (prior && prior !== resolvedBlock) {\n destroyRoot(prior.root)\n removeNodes(prior.nodes)\n }\n nextOrderedBlocks[position] = resolvedBlock\n } else {\n orderedIndexByKey.set(key, nextOrderedBlocks.length)\n nextOrderedBlocks.push(resolvedBlock)\n }\n\n if (appendCandidate && index >= prevCount) {\n appendedBlocks.push(resolvedBlock)\n }\n })\n\n const canAppend =\n appendCandidate &&\n prevCount > 0 &&\n newItems.length > prevCount &&\n oldBlocks.size === 0 &&\n appendedBlocks.length > 0\n if (canAppend) {\n const appendedNodes: Node[] = []\n for (const block of appendedBlocks) {\n for (let i = 0; i < block.nodes.length; i++) {\n appendedNodes.push(block.nodes[i]!)\n }\n }\n if (appendedNodes.length > 0) {\n insertNodesBefore(parent, appendedNodes, container.endMarker)\n const currentNodes = container.currentNodes\n currentNodes.pop()\n for (let i = 0; i < appendedNodes.length; i++) {\n currentNodes.push(appendedNodes[i]!)\n }\n currentNodes.push(container.endMarker)\n }\n\n container.blocks = newBlocks\n container.nextBlocks = oldBlocks\n container.orderedBlocks = nextOrderedBlocks\n container.nextOrderedBlocks = prevOrderedBlocks\n return\n }\n\n // Phase 2: Remove old blocks that are no longer in the list\n if (oldBlocks.size > 0) {\n for (const block of oldBlocks.values()) {\n destroyRoot(block.root)\n removeNodes(block.nodes)\n }\n oldBlocks.clear()\n }\n\n // Phase 3: Reconcile DOM with buffered node arrays\n if (newBlocks.size > 0 || container.currentNodes.length > 0) {\n const prevNodes = container.currentNodes\n const nextNodes = container.nextNodes\n nextNodes.length = 0\n nextNodes.push(container.startMarker)\n\n for (let i = 0; i < nextOrderedBlocks.length; i++) {\n const nodes = nextOrderedBlocks[i]!.nodes\n for (let j = 0; j < nodes.length; j++) {\n nextNodes.push(nodes[j]!)\n }\n }\n\n nextNodes.push(container.endMarker)\n\n reconcileArrays(parent, prevNodes, nextNodes)\n\n // Swap buffers to reuse arrays on next diff\n container.currentNodes = nextNodes\n container.nextNodes = prevNodes\n }\n\n // Swap block maps for reuse\n container.blocks = newBlocks\n container.nextBlocks = oldBlocks\n container.orderedBlocks = nextOrderedBlocks\n container.nextOrderedBlocks = prevOrderedBlocks\n })\n }\n\n const effectDispose = createRenderEffect(performDiff)\n\n return {\n marker: fragment,\n startMarker: container.startMarker,\n endMarker: container.endMarker,\n // Flush pending items - call after markers are inserted into DOM\n flush: () => {\n if (pendingItems !== null) {\n performDiff()\n }\n },\n dispose: () => {\n disposed = true\n effectDispose?.()\n container.dispose()\n },\n }\n}\n"]}