what-core 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/reactive.js", "../src/h.js", "../src/components.js", "../src/helpers.js", "../src/dom.js", "../src/render.js", "../src/hooks.js", "../src/store.js", "../src/head.js", "../src/scheduler.js", "../src/animation.js", "../src/a11y.js", "../src/skeleton.js", "../src/data.js", "../src/form.js", "../src/errors.js", "../src/guardrails.js", "../src/agent-context.js"],
4
- "sourcesContent": ["// What Framework - Reactive Primitives\n// Signals + Effects: fine-grained reactivity without virtual DOM overhead\n//\n// Upgrades:\n// - Topological ordering: computed/effects sorted by _level to prevent diamond glitches\n// - Iterative computed evaluation: no recursion, handles 10K+ depth chains\n// - Ownership tree: createRoot children auto-dispose when parent disposes\n// - Performance: cached levels, lazy sort, fast-path notify, minimal allocation\n\n// Dev-mode flag \u2014 build tools can dead-code-eliminate when false\nexport const __DEV__ = typeof process !== 'undefined'\n ? process.env?.NODE_ENV !== 'production'\n : true;\n\n// DevTools hooks \u2014 set by what-devtools when installed.\n// These are no-ops in production (dead-code eliminated with __DEV__).\nexport let __devtools = null;\n\n/** @internal Install devtools hooks. Called by what-devtools. */\nexport function __setDevToolsHooks(hooks) {\n if (__DEV__) __devtools = hooks;\n}\n\nlet currentEffect = null;\nlet currentRoot = null;\nlet currentOwner = null; // Ownership tree: tracks current owner context\nlet insideComputed = false; // Track whether we're inside a computed() callback (dev-mode warning)\nlet batchDepth = 0;\nlet pendingEffects = [];\nlet pendingNeedSort = false; // Track whether pendingEffects actually needs sorting\n\n// WeakMap: subscriber Set \u2192 owning computed's inner effect (null/absent for signals)\n// Used for topological level computation.\nconst subSetOwner = new WeakMap();\n\n// --- Iterative Computed Evaluation State ---\n// Uses a throw/catch trampoline to convert recursive computed evaluation\n// to iterative. When a computed fn() reads another dirty computed, instead\n// of recursing, we throw a sentinel that gets caught by the outer loop.\nconst NEEDS_UPSTREAM = Symbol('needs_upstream');\nlet iterativeEvalStack = null; // array when inside evaluation loop, null otherwise\n\n// --- Signal ---\n// A reactive value. Reading inside an effect auto-tracks the dependency.\n// Writing triggers only the effects that depend on this signal.\n\nexport function signal(initial, debugName) {\n let value = initial;\n const subs = new Set();\n\n // Unified getter/setter: sig() reads, sig(newVal) writes\n function sig(...args) {\n if (args.length === 0) {\n // Read\n if (currentEffect) {\n subs.add(currentEffect);\n currentEffect.deps.push(subs);\n }\n return value;\n }\n // Write\n if (__DEV__ && insideComputed) {\n console.warn(\n '[what] Signal.set() called inside a computed function. ' +\n 'This may cause infinite loops. Use effect() instead.' +\n (debugName ? ` (signal: ${debugName})` : '')\n );\n }\n const nextVal = typeof args[0] === 'function' ? args[0](value) : args[0];\n if (Object.is(value, nextVal)) return;\n value = nextVal;\n if (__DEV__ && __devtools) __devtools.onSignalUpdate(sig);\n if (subs.size > 0) notify(subs);\n }\n\n sig.set = (next) => {\n if (__DEV__ && insideComputed) {\n console.warn(\n '[what] Signal.set() called inside a computed function. ' +\n 'This may cause infinite loops. Use effect() instead.' +\n (debugName ? ` (signal: ${debugName})` : '')\n );\n }\n const nextVal = typeof next === 'function' ? next(value) : next;\n if (Object.is(value, nextVal)) return;\n value = nextVal;\n if (__DEV__ && __devtools) __devtools.onSignalUpdate(sig);\n if (subs.size > 0) notify(subs);\n };\n\n sig.peek = () => value;\n\n sig.subscribe = (fn) => {\n return effect(() => fn(sig()));\n };\n\n sig._signal = true;\n if (__DEV__) {\n sig._subs = subs;\n if (debugName) sig._debugName = debugName;\n }\n\n // Notify devtools of signal creation\n if (__DEV__ && __devtools) __devtools.onSignalCreate(sig);\n\n return sig;\n}\n\n// --- Computed ---\n// Derived signal. Lazy: only recomputes when a dependency changes AND it's read.\n// Topological level: max(dependency levels) + 1, computed from source signals (level 0).\n\nexport function computed(fn) {\n let value, dirty = true;\n const subs = new Set();\n\n const inner = _createEffect(() => {\n const prevInsideComputed = insideComputed;\n if (__DEV__) insideComputed = true;\n try {\n value = fn();\n dirty = false;\n } finally {\n if (__DEV__) insideComputed = prevInsideComputed;\n }\n }, true);\n\n // Computed nodes start at level 1. Updated when graph structure changes.\n inner._level = 1;\n inner._computed = true;\n inner._computedSubs = subs;\n\n // Register this subscriber set as owned by this computed\n subSetOwner.set(subs, inner);\n\n // Store markDirty/isDirty closures on the inner effect for iterative eval\n inner._markDirty = () => { dirty = true; };\n inner._isDirty = () => dirty;\n\n function read() {\n if (currentEffect) {\n subs.add(currentEffect);\n currentEffect.deps.push(subs);\n }\n if (dirty) _evaluateComputed(inner);\n return value;\n }\n\n // When a dependency changes, mark dirty AND propagate to our subscribers.\n inner._onNotify = () => {\n dirty = true;\n if (subs.size > 0) notify(subs);\n };\n\n read._signal = true;\n read.peek = () => {\n if (dirty) _evaluateComputed(inner);\n return value;\n };\n\n return read;\n}\n\n// --- Iterative Computed Evaluation ---\n//\n// Problem: A chain of N dirty computeds causes O(N) recursive calls:\n// C_N.read() \u2192 eval \u2192 fn() \u2192 C_{N-1}.read() \u2192 eval \u2192 fn() \u2192 ... \u2192 C_1.read() \u2192 eval \u2192 fn()\n// This overflows the stack at ~3500 depth.\n//\n// Solution: Throw/catch trampoline. The outermost _evaluateComputed manages a\n// stack (array). When a computed's fn() reads another dirty computed during\n// evaluation, _evaluateComputed throws NEEDS_UPSTREAM. The outer loop catches\n// this, adds the upstream to the stack, and processes from the bottom up.\n// This converts O(N) call depth to O(1) per computed (just the outermost loop).\n\nfunction _evaluateComputed(computedEffect) {\n if (iterativeEvalStack !== null) {\n // We're inside the outermost evaluation loop, and a computed's fn()\n // is reading another dirty computed. Push it onto the stack and throw\n // to abort the current fn() so the outer loop can process it first.\n iterativeEvalStack.push(computedEffect);\n throw NEEDS_UPSTREAM;\n }\n\n // Outermost call \u2014 enter the iterative evaluation loop.\n // The stack grows as we discover dirty upstream computeds.\n const stack = [computedEffect];\n iterativeEvalStack = stack;\n\n try {\n while (stack.length > 0) {\n const current = stack[stack.length - 1];\n\n if (!current._isDirty || !current._isDirty()) {\n // Already clean \u2014 pop and continue\n stack.pop();\n continue;\n }\n\n // Pre-scan known deps: if any are dirty computeds, push them onto\n // the stack first (bottom-up). This avoids the O(N^2) worst case\n // where throw/catch restarts from the top on each dirty upstream.\n let pushedUpstream = false;\n const deps = current.deps;\n for (let i = 0; i < deps.length; i++) {\n const depOwner = subSetOwner.get(deps[i]);\n if (depOwner && depOwner._computed && depOwner._isDirty && depOwner._isDirty()) {\n stack.push(depOwner);\n pushedUpstream = true;\n }\n }\n if (pushedUpstream) {\n // Process dirty upstreams first before re-evaluating current\n continue;\n }\n\n // All known deps are clean \u2014 evaluate. throw/catch is fallback\n // for newly-discovered deps only.\n try {\n const prevDepsLen = current.deps.length;\n _runEffect(current);\n // Only recompute level when graph structure changes\n if (current.deps.length !== prevDepsLen) {\n _updateLevel(current);\n }\n stack.pop(); // Successfully evaluated\n } catch (err) {\n if (err === NEEDS_UPSTREAM) {\n // A dirty upstream was discovered and pushed onto the stack.\n // Re-mark this computed dirty since its fn() was aborted mid-execution.\n current._markDirty();\n // The upstream is now at stack[stack.length-1]. Loop continues.\n } else {\n throw err; // Re-throw real errors\n }\n }\n }\n } finally {\n iterativeEvalStack = null;\n }\n}\n\n// Update the topological level of a computed/effect based on its current dependencies.\nfunction _updateLevel(e) {\n let maxDepLevel = 0;\n const deps = e.deps;\n for (let i = 0; i < deps.length; i++) {\n const owner = subSetOwner.get(deps[i]);\n if (owner) {\n const depLevel = owner._level;\n if (depLevel > maxDepLevel) maxDepLevel = depLevel;\n }\n }\n e._level = maxDepLevel + 1;\n}\n\n// --- Effect ---\n// Runs a function, auto-tracking signal reads. Re-runs when deps change.\n// Returns a dispose function.\n\nexport function effect(fn, opts) {\n const e = _createEffect(fn);\n e._level = 1;\n // First run: skip cleanup (deps is empty), just run and track\n const prev = currentEffect;\n currentEffect = e;\n try {\n const result = e.fn();\n if (typeof result === 'function') e._cleanup = result;\n } finally {\n currentEffect = prev;\n }\n // Compute level after first run based on actual dependencies (cached).\n _updateLevel(e);\n // Mark as stable after first run \u2014 subsequent re-runs skip cleanup/re-subscribe\n if (opts?.stable) e._stable = true;\n const dispose = () => _disposeEffect(e);\n // Register with current root for automatic cleanup\n if (currentRoot) {\n currentRoot.disposals.push(dispose);\n }\n return dispose;\n}\n\n// --- Batch ---\n// Group multiple signal writes; effects run once at the end.\n\nexport function batch(fn) {\n batchDepth++;\n try {\n fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) flush();\n }\n}\n\n// --- Internals ---\n\nfunction _createEffect(fn, lazy) {\n // Minimal object shape \u2014 computed() adds extra properties after creation.\n // Keeping the base object small helps V8 optimize for the common (effect) case.\n const e = {\n fn,\n deps: [], // array of subscriber sets (cheaper than Set for typical 1-3 deps)\n lazy: lazy || false,\n _onNotify: null,\n disposed: false,\n _pending: false,\n _stable: false, // stable effects skip cleanup/re-subscribe on re-run\n _level: 0, // topological depth: signals=0, computed/effects=max(deps)+1\n _computed: false, // true for computed inner effects\n _computedSubs: null, // reference to the computed's subscriber set\n _isDirty: null, // function to check if computed is dirty (set by computed())\n _markDirty: null, // function to mark computed dirty (set by computed())\n };\n if (__DEV__ && __devtools) __devtools.onEffectCreate(e);\n return e;\n}\n\nfunction _runEffect(e) {\n if (e.disposed) return;\n\n // Stable effect fast path: deps don't change, skip cleanup/re-subscribe.\n if (e._stable) {\n if (e._cleanup) {\n try { e._cleanup(); } catch (err) {\n if (__DEV__) console.warn('[what] Error in effect cleanup:', err);\n }\n e._cleanup = null;\n }\n const prev = currentEffect;\n currentEffect = null; // Don't re-track deps (already subscribed)\n try {\n const result = e.fn();\n if (typeof result === 'function') e._cleanup = result;\n } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n if (__DEV__) console.warn('[what] Error in stable effect:', err);\n } finally {\n currentEffect = prev;\n }\n if (__DEV__ && __devtools?.onEffectRun) __devtools.onEffectRun(e);\n return;\n }\n\n cleanup(e);\n // Run effect cleanup from previous run\n if (e._cleanup) {\n try { e._cleanup(); } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect-cleanup', effect: e });\n if (__DEV__) console.warn('[what] Error in effect cleanup:', err);\n }\n e._cleanup = null;\n }\n const prev = currentEffect;\n currentEffect = e;\n try {\n const result = e.fn();\n // Capture cleanup function if returned\n if (typeof result === 'function') {\n e._cleanup = result;\n }\n } catch (err) {\n if (err === NEEDS_UPSTREAM) throw err; // Iterative eval sentinel \u2014 not a real error\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n throw err;\n } finally {\n currentEffect = prev;\n }\n if (__DEV__ && __devtools?.onEffectRun) __devtools.onEffectRun(e);\n}\n\nfunction _disposeEffect(e) {\n e.disposed = true;\n if (__DEV__ && __devtools) __devtools.onEffectDispose(e);\n cleanup(e);\n // Run cleanup on dispose\n if (e._cleanup) {\n try { e._cleanup(); } catch (err) {\n if (__DEV__) console.warn('[what] Error in effect cleanup on dispose:', err);\n }\n e._cleanup = null;\n }\n}\n\nfunction cleanup(e) {\n const deps = e.deps;\n for (let i = 0; i < deps.length; i++) deps[i].delete(e);\n deps.length = 0;\n}\n\n// --- Notification ---\n// Iterative notification to prevent stack overflow on deep computed chains.\n// Uses a reusable queue to avoid per-call array allocation.\n// When notify() encounters _onNotify callbacks (from computeds), those may\n// call notify() recursively. The queue drains iteratively in the outermost call.\n\nlet notifyDepth = 0; // Tracks recursive notify depth\nlet notifyQueue = null; // Reusable queue, allocated on first recursive call\nlet notifyQueueLen = 0; // Length of the queue\n\nfunction notify(subs) {\n // Fast path: no recursive notifications in progress \u2014 iterate directly.\n // This avoids array allocation for the common case (signal \u2192 effects).\n if (notifyDepth === 0) {\n notifyDepth = 1;\n try {\n for (const e of subs) {\n if (e.disposed) continue;\n if (e._onNotify) {\n // Computed subscriber: mark dirty and propagate.\n // _onNotify may call notify() recursively \u2014 tracked by notifyDepth.\n e._onNotify();\n } else if (batchDepth === 0 && e._stable) {\n // Inline execution for stable effects\n const prev = currentEffect;\n currentEffect = null;\n try {\n const result = e.fn();\n if (typeof result === 'function') {\n if (e._cleanup) try { e._cleanup(); } catch (err) {}\n e._cleanup = result;\n }\n } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n if (__DEV__) console.warn('[what] Error in stable effect:', err);\n } finally {\n currentEffect = prev;\n }\n } else if (!e._pending) {\n e._pending = true;\n const level = e._level;\n const len = pendingEffects.length;\n if (len > 0 && pendingEffects[len - 1]._level > level) {\n pendingNeedSort = true;\n }\n pendingEffects.push(e);\n }\n }\n // Drain any queued subscriber sets from recursive notify calls\n if (notifyQueueLen > 0) {\n let qi = 0;\n while (qi < notifyQueueLen) {\n const queuedSubs = notifyQueue[qi];\n notifyQueue[qi] = null; // Allow GC\n qi++;\n for (const e of queuedSubs) {\n if (e.disposed) continue;\n if (e._onNotify) {\n e._onNotify();\n } else if (batchDepth === 0 && e._stable) {\n const prev = currentEffect;\n currentEffect = null;\n try {\n const result = e.fn();\n if (typeof result === 'function') {\n if (e._cleanup) try { e._cleanup(); } catch (err) {}\n e._cleanup = result;\n }\n } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n if (__DEV__) console.warn('[what] Error in stable effect:', err);\n } finally {\n currentEffect = prev;\n }\n } else if (!e._pending) {\n e._pending = true;\n const level = e._level;\n const len = pendingEffects.length;\n if (len > 0 && pendingEffects[len - 1]._level > level) {\n pendingNeedSort = true;\n }\n pendingEffects.push(e);\n }\n }\n }\n notifyQueueLen = 0;\n }\n } finally {\n notifyDepth = 0;\n }\n if (batchDepth === 0 && pendingEffects.length > 0) scheduleMicrotask();\n } else {\n // Recursive call \u2014 queue the subscriber set for the outermost call to drain.\n if (notifyQueue === null) notifyQueue = [];\n if (notifyQueueLen >= notifyQueue.length) {\n notifyQueue.push(subs);\n } else {\n notifyQueue[notifyQueueLen] = subs;\n }\n notifyQueueLen++;\n }\n}\n\nlet microtaskScheduled = false;\nfunction scheduleMicrotask() {\n if (!microtaskScheduled) {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n flush();\n });\n }\n}\n\nfunction flush() {\n let iterations = 0;\n while (pendingEffects.length > 0 && iterations < 25) {\n const batch = pendingEffects;\n pendingEffects = [];\n\n // Topological sort: execute effects in level order (lowest first).\n // Fast paths:\n // 1. Single effect \u2014 no sort needed (most common case for microtask flush)\n // 2. Already sorted \u2014 skip sort (common when effects added in level order)\n // 3. Multiple effects at different levels \u2014 sort required\n if (batch.length > 1 && pendingNeedSort) {\n batch.sort((a, b) => a._level - b._level);\n }\n pendingNeedSort = false;\n\n for (let i = 0; i < batch.length; i++) {\n const e = batch[i];\n e._pending = false;\n if (!e.disposed && !e._onNotify) {\n const prevDepsLen = e.deps.length;\n _runEffect(e);\n // Update level only if deps changed (graph structure change)\n if (!e._computed && e.deps.length !== prevDepsLen) {\n _updateLevel(e);\n }\n }\n }\n iterations++;\n }\n if (iterations >= 25) {\n if (__DEV__) {\n const remaining = pendingEffects.slice(0, 3);\n const effectNames = remaining.map(e => e.fn?.name || e.fn?.toString().slice(0, 60) || '(anonymous)');\n console.warn(\n `[what] Possible infinite effect loop detected (25 iterations). ` +\n `Likely cause: an effect writes to a signal it also reads, creating a cycle. ` +\n `Use untrack() to read signals without subscribing. ` +\n `Looping effects: ${effectNames.join(', ')}`\n );\n } else {\n console.warn('[what] Possible infinite effect loop detected');\n }\n for (let i = 0; i < pendingEffects.length; i++) pendingEffects[i]._pending = false;\n pendingEffects.length = 0;\n }\n}\n\n// --- Memo ---\n// Eager computed that only propagates when the value actually changes.\n// Fix: Instead of calling notify(subs) inline (which bypasses topological sort\n// and causes diamond-dependency glitches), push memo subscribers into\n// pendingEffects and let them go through the sorted flush() path.\nexport function memo(fn) {\n let value;\n const subs = new Set();\n\n const e = _createEffect(() => {\n const next = fn();\n if (!Object.is(value, next)) {\n value = next;\n // Push subscribers into pendingEffects for topological flush\n // instead of inline notify() which can cause diamond glitches\n for (const sub of subs) {\n if (sub.disposed) continue;\n if (sub._onNotify) {\n // Computed subscriber: mark dirty and propagate\n sub._onNotify();\n } else if (!sub._pending) {\n sub._pending = true;\n const level = sub._level;\n const len = pendingEffects.length;\n if (len > 0 && pendingEffects[len - 1]._level > level) {\n pendingNeedSort = true;\n }\n pendingEffects.push(sub);\n }\n }\n }\n });\n\n e._level = 1;\n\n _runEffect(e);\n _updateLevel(e);\n\n // Register subscriber set owner for level tracking\n subSetOwner.set(subs, e);\n\n // Register with current root\n if (currentRoot) {\n currentRoot.disposals.push(() => _disposeEffect(e));\n }\n\n function read() {\n if (currentEffect) {\n subs.add(currentEffect);\n currentEffect.deps.push(subs);\n }\n return value;\n }\n\n read._signal = true;\n read.peek = () => value;\n return read;\n}\n\n// --- flushSync ---\n// Force all pending effects to run synchronously. Use sparingly.\nexport function flushSync() {\n microtaskScheduled = false;\n flush();\n}\n\n// --- Untrack ---\n// Read signals without subscribing\nexport function untrack(fn) {\n const prev = currentEffect;\n currentEffect = null;\n try {\n return fn();\n } finally {\n currentEffect = prev;\n }\n}\n\n// --- getOwner / runWithOwner ---\n// Expose ownership context for advanced use cases (e.g., async operations\n// that need to register disposals with the correct owner).\n\nexport function getOwner() {\n return currentOwner;\n}\n\nexport function runWithOwner(owner, fn) {\n const prev = currentOwner;\n const prevRoot = currentRoot;\n currentOwner = owner;\n currentRoot = owner;\n try {\n return fn();\n } finally {\n currentOwner = prev;\n currentRoot = prevRoot;\n }\n}\n\n// --- createRoot ---\n// Isolated reactive scope with ownership tree.\n// All effects created inside are tracked and disposed together.\n// Child createRoot scopes register with parent owner \u2014 disposing parent\n// automatically disposes all children (prevents orphaned subscriptions).\nexport function createRoot(fn) {\n const prevRoot = currentRoot;\n const prevOwner = currentOwner;\n const root = {\n disposals: [],\n owner: currentOwner, // parent owner for ownership tree\n children: [], // child roots (ownership tree)\n _disposed: false,\n };\n\n // Register this root as a child of the parent owner\n if (currentOwner) {\n currentOwner.children.push(root);\n }\n\n currentRoot = root;\n currentOwner = root;\n\n try {\n const dispose = () => {\n if (root._disposed) return;\n root._disposed = true;\n\n // Dispose children first (depth-first, reverse order)\n for (let i = root.children.length - 1; i >= 0; i--) {\n _disposeRoot(root.children[i]);\n }\n root.children.length = 0;\n\n // Dispose own effects (reverse order for LIFO cleanup)\n for (let i = root.disposals.length - 1; i >= 0; i--) {\n root.disposals[i]();\n }\n root.disposals.length = 0;\n\n // Remove from parent's children list\n if (root.owner) {\n const idx = root.owner.children.indexOf(root);\n if (idx >= 0) root.owner.children.splice(idx, 1);\n }\n };\n return fn(dispose);\n } finally {\n currentRoot = prevRoot;\n currentOwner = prevOwner;\n }\n}\n\n// Internal: dispose a root and all its children\nfunction _disposeRoot(root) {\n if (root._disposed) return;\n root._disposed = true;\n\n // Dispose children first\n for (let i = root.children.length - 1; i >= 0; i--) {\n _disposeRoot(root.children[i]);\n }\n root.children.length = 0;\n\n // Dispose own effects\n for (let i = root.disposals.length - 1; i >= 0; i--) {\n root.disposals[i]();\n }\n root.disposals.length = 0;\n}\n\n// --- onCleanup ---\n// Register a cleanup function with the current owner/root.\n// Runs when the owner is disposed.\nexport function onCleanup(fn) {\n if (currentRoot) {\n currentRoot.disposals.push(fn);\n }\n}\n", "// What Framework - Element Descriptors\n// Minimal element descriptor objects. No classes, no fibers, just plain objects.\n\n// h(tag, props, ...children) -> VNode\n// h(Component, props, ...children) -> VNode\n// VNode = { tag, props, children, key }\n\nconst EMPTY_OBJ = Object.create(null);\nconst EMPTY_ARR = [];\n\nexport function h(tag, props, ...children) {\n props = props || EMPTY_OBJ;\n const flat = flattenChildren(children);\n const key = props.key ?? null;\n\n // Strip key from props passed to component/element\n if (props.key !== undefined) {\n props = { ...props };\n delete props.key;\n }\n\n return { tag, props, children: flat, key, _vnode: true };\n}\n\n// Fragment \u2014 just returns children\nexport function Fragment({ children }) {\n return children;\n}\n\nfunction flattenChildren(children) {\n const out = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child == null || child === false || child === true) continue;\n if (Array.isArray(child)) {\n out.push(...flattenChildren(child));\n } else if (typeof child === 'object' && child._vnode) {\n out.push(child);\n } else if (typeof child === 'function') {\n // Reactive child \u2014 preserve function for fine-grained DOM updates\n out.push(child);\n } else {\n // Text node\n out.push(String(child));\n }\n }\n return out;\n}\n\n// JSX-like tagged template alternative (no build step needed)\n// html`<div class=\"foo\">${content}</div>`\n// Uses a simple parser, not full HTML \u2014 good enough for most cases.\n\nexport function html(strings, ...values) {\n const src = strings.reduce((acc, str, i) =>\n acc + str + (i < values.length ? `\\x00${i}\\x00` : ''), '');\n return parseTemplate(src, values);\n}\n\nfunction parseTemplate(src, values) {\n // Lightweight tagged template parser\n // Supports: <tag attr=\"val\">, <tag ...${spread}>, ${children}, self-closing\n src = src.trim();\n const nodes = [];\n let i = 0;\n\n while (i < src.length) {\n if (src[i] === '<') {\n const result = parseElement(src, i, values);\n if (result) {\n nodes.push(result.node);\n i = result.end;\n continue;\n }\n }\n // Text or interpolation\n const result = parseText(src, i, values);\n if (result.text) nodes.push(result.text);\n i = result.end;\n }\n\n return nodes.length === 1 ? nodes[0] : nodes;\n}\n\nfunction parseElement(src, start, values) {\n // Opening tag\n const openMatch = src.slice(start).match(/^<([a-zA-Z][a-zA-Z0-9-]*|[A-Z]\\w*)/);\n if (!openMatch) return null;\n\n const tag = openMatch[1];\n let i = start + openMatch[0].length;\n const props = {};\n\n // Parse attributes\n while (i < src.length) {\n // Skip whitespace\n while (i < src.length && /\\s/.test(src[i])) i++;\n\n // Self-closing or end of opening tag\n if (src.slice(i, i + 2) === '/>') {\n return { node: h(tag, Object.keys(props).length ? props : null), end: i + 2 };\n }\n if (src[i] === '>') {\n i++;\n break;\n }\n\n // Spread: ...${obj}\n if (src.slice(i, i + 3) === '...') {\n const placeholder = src.slice(i + 3).match(/^\\x00(\\d+)\\x00/);\n if (placeholder) {\n Object.assign(props, values[Number(placeholder[1])]);\n i += 3 + placeholder[0].length;\n continue;\n }\n }\n\n // Attribute: name=${val} or name=\"val\" or name\n const attrMatch = src.slice(i).match(/^([a-zA-Z_@:][a-zA-Z0-9_:.-]*)/);\n if (!attrMatch) break;\n\n const attrName = attrMatch[1];\n i += attrMatch[0].length;\n\n // Skip whitespace around =\n while (i < src.length && /\\s/.test(src[i])) i++;\n\n if (src[i] === '=') {\n i++;\n while (i < src.length && /\\s/.test(src[i])) i++;\n\n // Value is a placeholder\n const ph = src.slice(i).match(/^\\x00(\\d+)\\x00/);\n if (ph) {\n props[attrName] = values[Number(ph[1])];\n i += ph[0].length;\n } else if (src[i] === '\"' || src[i] === \"'\") {\n const q = src[i];\n i++;\n let val = '';\n while (i < src.length && src[i] !== q) {\n const tph = src.slice(i).match(/^\\x00(\\d+)\\x00/);\n if (tph) {\n val += String(values[Number(tph[1])]);\n i += tph[0].length;\n } else {\n val += src[i];\n i++;\n }\n }\n i++; // closing quote\n props[attrName] = val;\n }\n } else {\n props[attrName] = true;\n }\n }\n\n // Parse children until closing tag\n const children = [];\n const closeTag = `</${tag}>`;\n\n while (i < src.length) {\n if (src.slice(i, i + closeTag.length) === closeTag) {\n i += closeTag.length;\n break;\n }\n\n if (src[i] === '<') {\n const child = parseElement(src, i, values);\n if (child) {\n children.push(child.node);\n i = child.end;\n continue;\n }\n }\n\n const text = parseText(src, i, values);\n if (text.text != null) children.push(text.text);\n i = text.end;\n }\n\n return {\n node: h(tag, Object.keys(props).length ? props : null, ...children),\n end: i,\n };\n}\n\nfunction parseText(src, start, values) {\n let i = start;\n let text = '';\n\n while (i < src.length && src[i] !== '<') {\n const ph = src.slice(i).match(/^\\x00(\\d+)\\x00/);\n if (ph) {\n if (text.trim()) {\n return { text: text.trim(), end: i };\n }\n return { text: values[Number(ph[1])], end: i + ph[0].length };\n }\n text += src[i];\n i++;\n }\n\n return { text: text.trim() || null, end: i };\n}\n", "// What Framework - Component Utilities\n// memo, lazy, Suspense, ErrorBoundary\n\nimport { h } from './h.js';\nimport { signal, effect, untrack, __DEV__ } from './reactive.js';\n\n// Legacy errorBoundaryStack removed \u2014 tree-based resolution via _parentCtx._errorBoundary\n// is now the only mechanism. See reportError() below.\n\n// --- memo ---\n// In the run-once model, components execute exactly once and never re-render.\n// Signals update the DOM directly via fine-grained effects. Therefore, memo()\n// is a no-op identity wrapper \u2014 there is no re-render to skip.\n// Kept for API compatibility with React-style code.\n\nexport function memo(Component, _areEqual) {\n // No-op in run-once model \u2014 just return the component as-is\n const MemoWrapper = function MemoWrapper(props) {\n return Component(props);\n };\n MemoWrapper.displayName = `Memo(${Component.name || 'Anonymous'})`;\n return MemoWrapper;\n}\n\n// Injected by dom.js\nlet _getCurrentComponent = null;\nexport function _injectGetCurrentComponent(fn) { _getCurrentComponent = fn; }\n\nexport function shallowEqual(a, b) {\n if (a === b) return true;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.is(a[key], b[key])) return false;\n }\n return true;\n}\n\n// --- lazy ---\n// Code-split a component. Returns a wrapper that loads on first render.\n\nexport function lazy(loader) {\n let Component = null;\n let loadPromise = null;\n let loadError = null;\n const listeners = new Set();\n\n function LazyWrapper(props) {\n if (loadError) throw loadError;\n if (Component) return h(Component, props);\n\n if (!loadPromise) {\n loadPromise = loader()\n .then(mod => {\n Component = mod.default || mod;\n // Notify all waiting instances\n listeners.forEach(fn => fn());\n listeners.clear();\n })\n .catch(err => { loadError = err; });\n }\n\n // Throw promise for Suspense to catch\n throw loadPromise;\n }\n\n LazyWrapper.displayName = 'Lazy';\n LazyWrapper._lazy = true;\n LazyWrapper._onLoad = (fn) => {\n if (Component) fn();\n else listeners.add(fn);\n };\n return LazyWrapper;\n}\n\n// --- Suspense ---\n// Show fallback while children are loading (lazy components).\n// Works with lazy() and async components.\n\nexport function Suspense({ fallback, children }) {\n const loading = signal(false);\n const pendingPromises = new Set();\n\n // Suspense boundary marker\n const boundary = {\n _suspense: true,\n onSuspend(promise) {\n loading.set(true);\n pendingPromises.add(promise);\n promise.finally(() => {\n pendingPromises.delete(promise);\n if (pendingPromises.size === 0) {\n loading.set(false);\n }\n });\n },\n };\n\n return {\n tag: '__suspense',\n props: { boundary, fallback, loading },\n children: Array.isArray(children) ? children : [children],\n _vnode: true,\n };\n}\n\n// --- ErrorBoundary ---\n// Catch errors in children and show fallback.\n// Uses a signal to track error state so it works with reactive rendering.\n\nexport function ErrorBoundary({ fallback, children, onError }) {\n const errorState = signal(null);\n\n // Error handler that will be registered with the component tree\n const handleError = (error) => {\n errorState.set(error);\n if (onError) {\n try {\n onError(error);\n } catch (e) {\n console.error('Error in onError handler:', e);\n }\n }\n };\n\n // Reset function to recover from error\n const reset = () => errorState.set(null);\n\n return {\n tag: '__errorBoundary',\n props: { errorState, handleError, fallback, reset },\n children: Array.isArray(children) ? children : [children],\n _vnode: true,\n };\n}\n\n// Helper to report error to nearest boundary\n// Walks the component context tree (not a runtime stack) so async errors are caught\nexport function reportError(error, startCtx) {\n // Walk up the _parentCtx chain to find the nearest _errorBoundary\n let ctx = startCtx || _getCurrentComponent?.();\n while (ctx) {\n if (ctx._errorBoundary) {\n ctx._errorBoundary(error);\n return true;\n }\n ctx = ctx._parentCtx;\n }\n return false;\n}\n\n// _getCurrentComponent is already declared above and injected via _injectGetCurrentComponent\n\n// --- Show ---\n// Conditional rendering component. Cleaner than ternaries.\n\nexport function Show({ when, fallback = null, children }) {\n // when can be a signal or a value\n const condition = typeof when === 'function' ? when() : when;\n return condition ? children : fallback;\n}\n\n// --- For ---\n// Efficient list rendering with keyed reconciliation.\n\nexport function For({ each, fallback = null, children }) {\n const list = typeof each === 'function' ? each() : each;\n if (!list || list.length === 0) return fallback;\n\n // children should be a function (item, index) => vnode\n const renderFn = Array.isArray(children) ? children[0] : children;\n if (typeof renderFn !== 'function') {\n console.warn('[what] For: children must be a render function, e.g. <For each={items}>{(item) => ...}</For>');\n return fallback;\n }\n\n return list.map((item, index) => {\n const vnode = renderFn(item, index);\n // Auto-detect keys for efficient keyed reconciliation\n if (vnode && typeof vnode === 'object' && vnode.key == null) {\n if (item != null && typeof item === 'object') {\n // Use item.id or item.key if available\n if (item.id != null) vnode.key = item.id;\n else if (item.key != null) vnode.key = item.key;\n } else if (typeof item === 'string' || typeof item === 'number') {\n // Primitive items can be their own key\n vnode.key = item;\n }\n }\n return vnode;\n });\n}\n\n// --- Switch / Match ---\n// Multi-condition rendering (like switch statement).\n\nexport function Switch({ fallback = null, children }) {\n const kids = Array.isArray(children) ? children : [children];\n\n for (const child of kids) {\n if (child && child.tag === Match) {\n const condition = typeof child.props.when === 'function'\n ? child.props.when()\n : child.props.when;\n if (condition) {\n return child.children;\n }\n }\n }\n\n return fallback;\n}\n\nexport function Match({ when, children }) {\n // Match is just a marker component, Switch handles the logic\n return { tag: Match, props: { when }, children, _vnode: true };\n}\n\n// --- Island ---\n// Deferred hydration component for islands architecture.\n// Usage: h(Island, { component: Counter, mode: 'idle' })\n// The babel plugin compiles <Counter client:idle /> into this.\n\nexport function Island({ component: Component, mode, mediaQuery, ...props }) {\n const placeholder = h('div', { 'data-island': Component.name || 'Island', 'data-hydrate': mode });\n\n // We need to return a vnode that the reconciler can handle.\n // The actual hydration scheduling happens after mount via an effect.\n const wrapper = signal(null);\n const hydrated = signal(false);\n\n function doHydrate() {\n if (hydrated()) return;\n hydrated.set(true);\n // Render the actual component\n wrapper.set(h(Component, props));\n }\n\n // Schedule hydration based on mode\n function scheduleHydration(el) {\n switch (mode) {\n case 'load':\n queueMicrotask(doHydrate);\n break;\n\n case 'idle':\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(doHydrate);\n } else {\n setTimeout(doHydrate, 200);\n }\n break;\n\n case 'visible': {\n const observer = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting) {\n observer.disconnect();\n doHydrate();\n }\n });\n observer.observe(el);\n break;\n }\n\n case 'interaction': {\n const hydrate = () => {\n el.removeEventListener('click', hydrate);\n el.removeEventListener('focus', hydrate);\n el.removeEventListener('mouseenter', hydrate);\n doHydrate();\n };\n el.addEventListener('click', hydrate, { once: true });\n el.addEventListener('focus', hydrate, { once: true });\n el.addEventListener('mouseenter', hydrate, { once: true });\n break;\n }\n\n case 'media': {\n if (!mediaQuery) { doHydrate(); break; }\n const mq = window.matchMedia(mediaQuery);\n if (mq.matches) {\n queueMicrotask(doHydrate);\n } else {\n const checkMedia = () => {\n if (mq.matches) {\n mq.removeEventListener('change', checkMedia);\n doHydrate();\n }\n };\n mq.addEventListener('change', checkMedia);\n }\n break;\n }\n\n default:\n // Unknown mode, hydrate immediately\n queueMicrotask(doHydrate);\n }\n }\n\n // Use ref callback to get the DOM element and schedule hydration\n const refCallback = (el) => {\n if (el) scheduleHydration(el);\n };\n\n // Return: show placeholder until hydrated, then show the real component\n return h('div', { 'data-island': Component.name || 'Island', 'data-hydrate': mode, ref: refCallback },\n hydrated() ? wrapper() : null\n );\n}\n", "// What Framework - Helpers & Utilities\n// Commonly needed patterns, zero overhead.\n\nimport { signal, effect, __DEV__ } from './reactive.js';\n\n// --- each(list, fn) --- [DEPRECATED: use <For> component or .map() instead]\n// Keyed list rendering. Optimized for reconciliation.\nlet _eachWarned = false;\nexport function each(list, fn, keyFn) {\n if (!_eachWarned) {\n _eachWarned = true;\n console.warn('[what] each() is deprecated. Use the <For> component or Array.map() instead.');\n }\n if (!list || list.length === 0) return [];\n return list.map((item, index) => {\n const vnode = fn(item, index);\n if (keyFn && vnode && typeof vnode === 'object') {\n vnode.key = keyFn(item, index);\n }\n return vnode;\n });\n}\n\n// --- cls(...args) ---\n// Conditional class names. Like clsx but tiny.\n// cls('base', condition && 'active', { hidden: isHidden, bold: isBold })\nexport function cls(...args) {\n const classes = [];\n for (const arg of args) {\n if (!arg) continue;\n if (typeof arg === 'string') {\n classes.push(arg);\n } else if (typeof arg === 'object') {\n for (const [key, val] of Object.entries(arg)) {\n if (val) classes.push(key);\n }\n }\n }\n return classes.join(' ');\n}\n\n// --- style(obj) ---\n// Convert a style object to a CSS string for SSR.\nexport function style(obj) {\n if (typeof obj === 'string') return obj;\n return Object.entries(obj)\n .filter(([, v]) => v != null && v !== '')\n .map(([k, v]) => `${camelToKebab(k)}:${v}`)\n .join(';');\n}\n\nfunction camelToKebab(str) {\n return str.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n\n// --- debounce ---\n// Debounced signal updates.\nexport function debounce(fn, ms) {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), ms);\n };\n}\n\n// --- throttle ---\nexport function throttle(fn, ms) {\n let last = 0;\n return (...args) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n fn(...args);\n }\n };\n}\n\n// Component context ref \u2014 injected by dom.js to avoid circular imports\nlet _getCurrentComponentRef = null;\nexport function _setComponentRef(fn) { _getCurrentComponentRef = fn; }\n\n// --- useMediaQuery ---\n// Reactive media query. Returns a signal. Cleans up listener on component unmount.\nexport function useMediaQuery(query) {\n if (typeof window === 'undefined') return signal(false);\n const mq = window.matchMedia(query);\n const s = signal(mq.matches);\n const handler = (e) => s.set(e.matches);\n mq.addEventListener('change', handler);\n\n // Register cleanup if inside a component context\n const ctx = _getCurrentComponentRef?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => mq.removeEventListener('change', handler));\n }\n\n return s;\n}\n\n// --- useLocalStorage ---\n// Signal synced with localStorage. Cleans up listeners on component unmount.\nexport function useLocalStorage(key, initial) {\n let stored;\n try {\n const raw = localStorage.getItem(key);\n stored = raw !== null ? JSON.parse(raw) : initial;\n } catch {\n stored = initial;\n }\n\n const s = signal(stored);\n\n // Sync to localStorage on changes\n const dispose = effect(() => {\n try {\n localStorage.setItem(key, JSON.stringify(s()));\n } catch (e) {\n if (__DEV__) console.warn('[what] localStorage write failed (quota exceeded?):', e);\n }\n });\n\n // Listen for changes from other tabs\n let storageHandler = null;\n if (typeof window !== 'undefined') {\n storageHandler = (e) => {\n if (e.key === key && e.newValue !== null) {\n try { s.set(JSON.parse(e.newValue)); } catch (err) {\n if (__DEV__) console.warn('[what] localStorage parse failed:', err);\n }\n }\n };\n window.addEventListener('storage', storageHandler);\n }\n\n // Register cleanup if inside a component context\n const ctx = _getCurrentComponentRef?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n dispose();\n if (storageHandler) window.removeEventListener('storage', storageHandler);\n });\n }\n\n return s;\n}\n\n// --- portal ---\n// Render children into a different DOM container.\nexport function Portal({ target, children }) {\n // In SSR, just return null (portals are client-only)\n if (typeof document === 'undefined') return null;\n const container = typeof target === 'string'\n ? document.querySelector(target)\n : target;\n if (!container) return null;\n // The DOM reconciler will mount children here\n return { tag: '__portal', props: { container }, children: Array.isArray(children) ? children : [children], _vnode: true };\n}\n\n// --- useClickOutside ---\n// Detect clicks outside a ref'd element. Essential for dropdowns, modals, popovers.\nexport function useClickOutside(ref, handler) {\n if (typeof document === 'undefined') return;\n\n const listener = (e) => {\n const el = ref.current || ref;\n if (!el || el.contains(e.target)) return;\n handler(e);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n const ctx = _getCurrentComponentRef?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n });\n }\n}\n\n// --- Transition helper ---\n// Animate elements in/out. Returns props to spread on the element.\nexport function transition(name, active) {\n return {\n class: active ? `${name}-enter ${name}-enter-active` : `${name}-leave ${name}-leave-active`,\n };\n}\n", "// What Framework - Fine-Grained DOM Runtime\n// Components run ONCE. Signals create individual DOM effects.\n// No VDOM reconciler, no diffing \u2014 direct DOM manipulation driven by signals.\n\nimport { effect, batch, untrack, signal, __DEV__, __devtools } from './reactive.js';\nimport { reportError, _injectGetCurrentComponent, shallowEqual } from './components.js';\nimport { _setComponentRef } from './helpers.js';\n\n// SVG elements that need namespace\nconst SVG_ELEMENTS = new Set([\n 'svg', 'path', 'circle', 'rect', 'line', 'polyline', 'polygon', 'ellipse',\n 'g', 'defs', 'use', 'symbol', 'clipPath', 'mask', 'pattern', 'image',\n 'text', 'tspan', 'textPath', 'foreignObject', 'linearGradient', 'radialGradient', 'stop',\n 'marker', 'animate', 'animateTransform', 'animateMotion', 'set', 'filter',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix',\n 'feDiffuseLighting', 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feImage',\n 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'feSpecularLighting',\n 'feTile', 'feTurbulence',\n]);\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n// Track all mounted component contexts for disposal\nconst mountedComponents = new Set();\n\n// WeakMap: comment node \u2192 component context (for comment-node boundaries)\nconst _commentCtxMap = new WeakMap();\n\nfunction isDomNode(value) {\n if (!value || typeof value !== 'object') return false;\n if (typeof Node !== 'undefined' && value instanceof Node) return true;\n return typeof value.nodeType === 'number' && typeof value.nodeName === 'string';\n}\n\nfunction isVNode(value) {\n return !!value && typeof value === 'object' && (value._vnode === true || 'tag' in value);\n}\n\n// Dispose a component: run effect cleanups, hook cleanups, onCleanup callbacks\nfunction disposeComponent(ctx) {\n if (ctx.disposed) return;\n ctx.disposed = true;\n\n // Run cleanup callbacks\n if (ctx.cleanups) {\n for (const cleanup of ctx.cleanups) {\n try { cleanup(); } catch (e) { console.error('[what] cleanup error:', e); }\n }\n }\n\n // Run effect disposals\n if (ctx.effects) {\n for (const dispose of ctx.effects) {\n try { dispose(); } catch (e) { /* already disposed */ }\n }\n }\n\n // Run hook cleanups (useEffect return values)\n if (ctx.hooks) {\n for (const hook of ctx.hooks) {\n if (hook && typeof hook.cleanup === 'function') {\n try { hook.cleanup(); } catch (e) { console.error('[what] hook cleanup error:', e); }\n }\n }\n }\n\n // Run onCleanup callbacks\n if (ctx._cleanupCallbacks) {\n for (const fn of ctx._cleanupCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onCleanup error:', e); }\n }\n }\n\n if (__DEV__ && __devtools?.onComponentUnmount) __devtools.onComponentUnmount(ctx);\n mountedComponents.delete(ctx);\n}\n\n// Dispose all components and reactive effects attached to a DOM subtree\nexport function disposeTree(node) {\n if (!node) return;\n if (node._componentCtx) {\n disposeComponent(node._componentCtx);\n }\n // Check comment node WeakMap for component context\n const commentCtx = _commentCtxMap.get(node);\n if (commentCtx) {\n disposeComponent(commentCtx);\n }\n // Dispose reactive function child effects ({() => ...} wrappers)\n if (node._dispose) {\n try { node._dispose(); } catch (e) { /* already disposed */ }\n }\n // Dispose reactive prop effects (value: () => ..., class: () => ..., etc.)\n if (node._propEffects) {\n for (const key in node._propEffects) {\n try { node._propEffects[key](); } catch (e) { /* already disposed */ }\n }\n }\n if (node.childNodes) {\n for (const child of node.childNodes) {\n disposeTree(child);\n }\n }\n}\n\n// Mount a component tree into a DOM container\nexport function mount(vnode, container) {\n if (typeof container === 'string') {\n container = document.querySelector(container);\n }\n disposeTree(container); // Clean up any previous mount\n container.textContent = '';\n const node = createDOM(vnode, container);\n if (node) container.appendChild(node);\n return () => {\n disposeTree(container);\n container.textContent = '';\n };\n}\n\n// --- Create DOM from VNode ---\n\nexport function createDOM(vnode, parent, isSvg) {\n // Null/false/true \u2192 placeholder comment (preserves child indices for reconciliation)\n if (vnode == null || vnode === false || vnode === true) {\n return document.createComment('');\n }\n\n // Text\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n return document.createTextNode(String(vnode));\n }\n\n // DOM node passthrough (fine-grained components return real nodes)\n if (isDomNode(vnode)) {\n return vnode;\n }\n\n // Reactive function child \u2014 use comment markers (no wrapper element)\n // to avoid polluting the DOM and breaking CSS selectors like :first-child.\n if (typeof vnode === 'function') {\n const startMarker = document.createComment('fn');\n const endMarker = document.createComment('/fn');\n let currentNodes = [];\n // We need a parent to insert between markers. The caller (createElementFromVNode\n // or createComponent) will appendChild both markers and the content. We return\n // a document fragment containing start marker, then the effect will manage nodes\n // between start and end markers once they're in the real DOM.\n const frag = document.createDocumentFragment();\n frag.appendChild(startMarker);\n frag.appendChild(endMarker);\n\n const dispose = effect(() => {\n const val = vnode();\n const vnodes = (val == null || val === false || val === true)\n ? []\n : Array.isArray(val) ? val : [val];\n\n const realParent = endMarker.parentNode;\n if (!realParent) return; // not mounted yet \u2014 first run handled below\n\n // Remove old nodes between markers\n for (const old of currentNodes) {\n disposeTree(old);\n if (old.parentNode === realParent) realParent.removeChild(old);\n }\n currentNodes = [];\n\n // Add new nodes before endMarker\n for (const v of vnodes) {\n const node = createDOM(v, realParent, parent?._isSvg);\n if (node) {\n // If createDOM returned a DocumentFragment, track individual children\n // since fragment nodes get absorbed into the DOM on insertion.\n if (node.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */) {\n const children = Array.from(node.childNodes);\n realParent.insertBefore(node, endMarker);\n for (const child of children) currentNodes.push(child);\n } else {\n realParent.insertBefore(node, endMarker);\n currentNodes.push(node);\n }\n }\n }\n });\n\n startMarker._dispose = dispose;\n // Also store dispose on endMarker so disposeTree can find it from either marker\n endMarker._dispose = dispose;\n return frag;\n }\n\n // Array of vnodes\n if (Array.isArray(vnode)) {\n const frag = document.createDocumentFragment();\n for (const child of vnode) {\n const node = createDOM(child, parent, isSvg);\n if (node) frag.appendChild(node);\n }\n return frag;\n }\n\n // VNode with component tag \u2014 component runs ONCE\n if (isVNode(vnode) && typeof vnode.tag === 'function') {\n return createComponent(vnode, parent, isSvg);\n }\n\n // VNode with string tag \u2014 create element\n if (isVNode(vnode)) {\n return createElementFromVNode(vnode, parent, isSvg);\n }\n\n // Unknown \u2014 convert to text\n return document.createTextNode(String(vnode));\n}\n\n// --- Component Rendering ---\n// Components run ONCE. Props are passed as a signal for reactive access.\n\nconst componentStack = [];\n\nexport function getCurrentComponent() {\n return componentStack[componentStack.length - 1];\n}\n\n// Inject into components.js and helpers.js to avoid circular imports\n_injectGetCurrentComponent(getCurrentComponent);\n_setComponentRef(getCurrentComponent);\n\nexport function getComponentStack() {\n return componentStack;\n}\n\nfunction createComponent(vnode, parent, isSvg) {\n let { tag: Component, props, children } = vnode;\n\n // Class component detection\n if (typeof Component === 'function' &&\n (Component.prototype?.isReactComponent || Component.prototype?.render)) {\n const ClassComp = Component;\n Component = function ClassComponentBridge(props) {\n const instance = new ClassComp(props);\n return instance.render();\n };\n Component.displayName = ClassComp.displayName || ClassComp.name || 'ClassComponent';\n }\n\n // Handle special boundary components\n if (Component === '__errorBoundary' || vnode.tag === '__errorBoundary') {\n return createErrorBoundary(vnode, parent);\n }\n if (Component === '__suspense' || vnode.tag === '__suspense') {\n return createSuspenseBoundary(vnode, parent);\n }\n if (Component === '__portal' || vnode.tag === '__portal') {\n return createPortalDOM(vnode, parent);\n }\n\n // Component context for hooks\n const ctx = {\n hooks: [],\n hookIndex: 0,\n effects: [],\n cleanups: [],\n mounted: false,\n disposed: false,\n Component,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: (() => {\n let p = componentStack[componentStack.length - 1];\n while (p) {\n if (p._errorBoundary) return p._errorBoundary;\n p = p._parentCtx;\n }\n return null;\n })()\n };\n\n // Component boundaries: use comment nodes instead of <span style=\"display:contents\">\n // to avoid DOM pollution, CSS selector breakage, and a11y issues.\n const startComment = document.createComment('c:start');\n const endComment = document.createComment('c:end');\n _commentCtxMap.set(startComment, ctx);\n ctx._startComment = startComment;\n ctx._endComment = endComment;\n\n // Fragment to hold comment boundaries + component output\n const container = document.createDocumentFragment();\n container._componentCtx = ctx;\n ctx._wrapper = startComment; // Reference for context lookup\n\n // Track for disposal\n mountedComponents.add(ctx);\n if (__DEV__ && __devtools?.onComponentMount) __devtools.onComponentMount(ctx);\n\n // Props signal for reactive updates from parent\n const propsChildren = children.length === 0 ? undefined : children.length === 1 ? children[0] : children;\n const propsSignal = signal({ ...props, children: propsChildren });\n ctx._propsSignal = propsSignal;\n\n // Create a reactive props proxy: reading any prop inside an effect\n // will auto-track the dependency on the propsSignal. This makes prop\n // access reactive across re-renders without requiring the component\n // to be re-executed.\n const reactiveProps = new Proxy({}, {\n get(_, key) {\n // Access the signal to create a reactive dependency\n const current = propsSignal();\n return current[key];\n },\n has(_, key) {\n const current = propsSignal();\n return key in current;\n },\n ownKeys() {\n const current = propsSignal();\n return Reflect.ownKeys(current);\n },\n getOwnPropertyDescriptor(_, key) {\n const current = propsSignal();\n if (key in current) {\n return { value: current[key], writable: false, enumerable: true, configurable: true };\n }\n return undefined;\n },\n });\n\n // Component runs ONCE \u2014 not inside an effect\n componentStack.push(ctx);\n\n let result;\n try {\n result = Component(reactiveProps);\n } catch (error) {\n componentStack.pop();\n if (!reportError(error, ctx)) {\n console.error('[what] Uncaught error in component:', Component.name || 'Anonymous', error);\n throw error;\n }\n // Return fragment with just comment boundaries on error\n container.appendChild(startComment);\n container.appendChild(endComment);\n return container;\n }\n\n componentStack.pop();\n ctx.mounted = true;\n\n // Run onMount callbacks after DOM is ready\n if (ctx._mountCallbacks) {\n queueMicrotask(() => {\n if (ctx.disposed) return;\n for (const fn of ctx._mountCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onMount error:', e); }\n }\n });\n }\n\n // Build fragment: <!-- c:start --> [component output] <!-- c:end -->\n container.appendChild(startComment);\n const vnodes = Array.isArray(result) ? result : [result];\n for (const v of vnodes) {\n const node = createDOM(v, container, isSvg);\n if (node) container.appendChild(node);\n }\n container.appendChild(endComment);\n\n return container;\n}\n\n// Error boundary component handler\nfunction createErrorBoundary(vnode, parent) {\n const { errorState, handleError, fallback, reset } = vnode.props;\n const children = vnode.children;\n\n const wrapper = document.createElement('span');\n wrapper.style.display = 'contents';\n\n const boundaryCtx = {\n hooks: [], hookIndex: 0, effects: [], cleanups: [],\n mounted: false, disposed: false,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: handleError,\n };\n wrapper._componentCtx = boundaryCtx;\n\n const dispose = effect(() => {\n const error = errorState();\n\n componentStack.push(boundaryCtx);\n\n // Remove old content\n while (wrapper.firstChild) {\n disposeTree(wrapper.firstChild);\n wrapper.removeChild(wrapper.firstChild);\n }\n\n let vnodes;\n if (error) {\n vnodes = typeof fallback === 'function' ? [fallback({ error, reset })] : [fallback];\n } else {\n vnodes = children;\n }\n\n vnodes = Array.isArray(vnodes) ? vnodes : [vnodes];\n\n for (const v of vnodes) {\n const node = createDOM(v, wrapper);\n if (node) wrapper.appendChild(node);\n }\n\n componentStack.pop();\n });\n\n boundaryCtx.effects.push(dispose);\n return wrapper;\n}\n\n// Suspense boundary component handler\nfunction createSuspenseBoundary(vnode, parent) {\n const { boundary, fallback, loading } = vnode.props;\n const children = vnode.children;\n\n const wrapper = document.createElement('span');\n wrapper.style.display = 'contents';\n\n const boundaryCtx = {\n hooks: [], hookIndex: 0, effects: [], cleanups: [],\n mounted: false, disposed: false,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n };\n wrapper._componentCtx = boundaryCtx;\n\n const dispose = effect(() => {\n const isLoading = loading();\n const vnodes = isLoading ? [fallback] : children;\n const normalized = Array.isArray(vnodes) ? vnodes : [vnodes];\n\n componentStack.push(boundaryCtx);\n\n // Remove old content\n while (wrapper.firstChild) {\n disposeTree(wrapper.firstChild);\n wrapper.removeChild(wrapper.firstChild);\n }\n\n for (const v of normalized) {\n const node = createDOM(v, wrapper);\n if (node) wrapper.appendChild(node);\n }\n\n componentStack.pop();\n });\n\n boundaryCtx.effects.push(dispose);\n return wrapper;\n}\n\n// Portal component handler\nfunction createPortalDOM(vnode, parent) {\n const { container } = vnode.props;\n const children = vnode.children;\n\n if (!container) {\n console.warn('[what] Portal: target container not found');\n return document.createComment('portal:empty');\n }\n\n const portalCtx = {\n hooks: [], hookIndex: 0, effects: [], cleanups: [],\n mounted: false, disposed: false,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n };\n\n const placeholder = document.createComment('portal');\n placeholder._componentCtx = portalCtx;\n\n const portalNodes = [];\n for (const child of children) {\n const node = createDOM(child, container);\n if (node) {\n container.appendChild(node);\n portalNodes.push(node);\n }\n }\n\n portalCtx._cleanupCallbacks = [() => {\n for (const node of portalNodes) {\n disposeTree(node);\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n }];\n\n return placeholder;\n}\n\n// --- Create Element from VNode ---\n// For h()-based VNodes with string tags\n\nfunction createElementFromVNode(vnode, parent, isSvg) {\n const { tag, props, children } = vnode;\n\n const svgContext = isSvg || SVG_ELEMENTS.has(tag);\n const el = svgContext\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n\n // Apply props\n if (props) {\n applyProps(el, props, {}, svgContext);\n }\n\n // Append children\n for (const child of children) {\n const node = createDOM(child, el, svgContext && tag !== 'foreignObject');\n if (node) el.appendChild(node);\n }\n\n el._vnode = vnode;\n return el;\n}\n\n// --- Prop Application ---\n// Only applied once for fine-grained (no diffing). Reactive props use effects.\n\nfunction applyProps(el, newProps, oldProps, isSvg) {\n newProps = newProps || {};\n oldProps = oldProps || {};\n\n for (const key in newProps) {\n if (key === 'key' || key === 'children') continue;\n\n // Handle ref\n if (key === 'ref') {\n if (typeof newProps.ref === 'function') newProps.ref(el);\n else if (newProps.ref) newProps.ref.current = el;\n continue;\n }\n\n setProp(el, key, newProps[key], isSvg);\n }\n}\n\nfunction setProp(el, key, value, isSvg) {\n // Reactive function props \u2014 wrap in effect for fine-grained updates\n if (typeof value === 'function' && !(key.startsWith('on') && key.length > 2) && key !== 'ref') {\n if (!el._propEffects) el._propEffects = {};\n if (el._propEffects[key]) {\n try { el._propEffects[key](); } catch (e) { /* already disposed */ }\n }\n el._propEffects[key] = effect(() => {\n const resolved = value();\n setProp(el, key, resolved, isSvg);\n });\n return;\n }\n\n // Event handlers\n if (key.startsWith('on') && key.length > 2) {\n let eventName = key.slice(2);\n let useCapture = false;\n if (eventName.endsWith('Capture')) {\n eventName = eventName.slice(0, -7);\n useCapture = true;\n }\n const event = eventName.toLowerCase();\n const storageKey = useCapture ? event + '_capture' : event;\n const old = el._events?.[storageKey];\n if (old && old._original === value) return;\n if (old) el.removeEventListener(event, old, useCapture);\n if (value == null) return;\n if (!el._events) el._events = {};\n const wrappedHandler = (e) => {\n if (!e.nativeEvent) e.nativeEvent = e;\n return untrack(() => value(e));\n };\n wrappedHandler._original = value;\n el._events[storageKey] = wrappedHandler;\n const eventOpts = value._eventOpts;\n el.addEventListener(event, wrappedHandler, eventOpts || useCapture || undefined);\n return;\n }\n\n // className / class\n if (key === 'className' || key === 'class') {\n if (isSvg) {\n el.setAttribute('class', value || '');\n } else {\n el.className = value || '';\n }\n return;\n }\n\n // Style\n if (key === 'style') {\n if (typeof value === 'string') {\n el.style.cssText = value;\n el._prevStyle = null;\n } else if (typeof value === 'object') {\n const oldStyle = el._prevStyle || {};\n for (const prop in oldStyle) {\n if (!(prop in value)) el.style[prop] = '';\n }\n for (const prop in value) {\n el.style[prop] = value[prop] ?? '';\n }\n el._prevStyle = { ...value };\n }\n return;\n }\n\n // dangerouslySetInnerHTML\n if (key === 'dangerouslySetInnerHTML') {\n el.innerHTML = value?.__html ?? '';\n return;\n }\n\n // innerHTML \u2014 require { __html: ... } wrapper to prevent XSS\n if (key === 'innerHTML') {\n if (value == null) return; // null/undefined \u2014 do nothing\n if (value && typeof value === 'object' && '__html' in value) {\n el.innerHTML = value.__html ?? '';\n } else {\n if (__DEV__) {\n console.warn(\n '[what] innerHTML received a raw string. This is a security risk (XSS). ' +\n 'Use innerHTML={{ __html: trustedString }} or dangerouslySetInnerHTML={{ __html: trustedString }} instead.'\n );\n }\n // Refuse to set raw string innerHTML \u2014 prevent XSS\n return;\n }\n return;\n }\n\n // Boolean attributes\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n return;\n }\n\n // data-* and aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n el.setAttribute(key, value);\n return;\n }\n\n // SVG\n if (isSvg) {\n if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n return;\n }\n\n // Default: property if exists, otherwise attribute\n if (key in el) {\n el[key] = value;\n } else {\n el.setAttribute(key, value);\n }\n}\n", "// What Framework - Fine-Grained Rendering Primitives\n// Solid-style rendering: components run once, signals create individual DOM effects.\n// No VDOM diffing \u2014 direct DOM manipulation with surgical signal-driven updates.\n\nimport { effect, untrack, createRoot, signal, __DEV__ } from './reactive.js';\nimport { createDOM, disposeTree, getCurrentComponent, getComponentStack } from './dom.js';\n\nexport { effect, untrack };\n\n// --- _$createComponent(Component, props, children) ---\n// Internal compiler target for component instantiation. The compiler emits calls\n// to this function instead of h() \u2014 keeping h() out of compiled output entirely.\n// Merges children into props and delegates to createDOM which calls createComponent.\n\nexport function _$createComponent(Component, props, children) {\n if (children && children.length > 0) {\n const mergedChildren = children.length === 1 ? children[0] : children;\n props = props ? { ...props, children: mergedChildren } : { children: mergedChildren };\n }\n // Build a VNode-like object and pass to createDOM which handles component execution\n return createDOM({ tag: Component, props: props || {}, children: children || [], key: null, _vnode: true });\n}\n\n// --- URL Sanitization for DOM attributes ---\n// Rejects javascript:, data:, vbscript: protocols (case-insensitive, trimmed).\n\nconst URL_ATTRS = new Set(['href', 'src', 'action', 'formaction', 'formAction']);\n\nfunction isSafeUrl(url) {\n if (typeof url !== 'string') return true; // non-string values are not URL-injection risks\n const normalized = url.trim().replace(/[\\s\\x00-\\x1f]/g, '').toLowerCase();\n if (normalized.startsWith('javascript:')) return false;\n if (normalized.startsWith('data:')) return false;\n if (normalized.startsWith('vbscript:')) return false;\n return true;\n}\n\n// --- template(html) ---\n// Pre-parse HTML string into a <template> element. Returns a factory function\n// that clones the DOM tree via cloneNode(true) \u2014 2-5x faster than createElement chains.\n// INTERNAL: Used by the compiler. Not intended for direct use by application code.\n// Exported as both `template` (for compiler output) and `_template` (to signal internal use).\n\n// Table child elements that need special parent wrapping for innerHTML parsing.\n// Browsers auto-correct bare <tr>, <td>, etc. when orphaned \u2014 wrapping prevents silent drops.\nconst TABLE_WRAPPERS = {\n tr: { depth: 2, wrap: '<table><tbody>', unwrap: '</tbody></table>' },\n td: { depth: 3, wrap: '<table><tbody><tr>', unwrap: '</tr></tbody></table>' },\n th: { depth: 3, wrap: '<table><tbody><tr>', unwrap: '</tr></tbody></table>' },\n thead: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n tbody: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n tfoot: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n colgroup: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n col: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n caption: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n};\n\n// SVG element tags that must be created in an SVG namespace context.\nconst SVG_ELEMENTS = new Set([\n 'svg', 'path', 'circle', 'rect', 'line', 'polyline', 'polygon', 'ellipse',\n 'g', 'defs', 'use', 'text', 'tspan', 'foreignObject', 'clipPath', 'mask',\n 'pattern', 'linearGradient', 'radialGradient', 'stop', 'marker', 'symbol',\n 'image', 'animate', 'animateTransform', 'animateMotion', 'set',\n 'filter', 'feGaussianBlur', 'feOffset', 'feMerge', 'feMergeNode',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite',\n 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feFlood', 'feImage', 'feMorphology', 'feSpecularLighting',\n 'feTile', 'feTurbulence', 'feDistantLight', 'fePointLight', 'feSpotLight',\n]);\n\nfunction getLeadingTag(html) {\n const m = html.match(/^<([a-zA-Z][a-zA-Z0-9]*)/);\n return m ? m[1] : '';\n}\n\n// Internal implementation \u2014 no warnings. Used by compiler via _$template.\nfunction _$templateImpl(html) {\n const trimmed = html.trim();\n const tag = getLeadingTag(trimmed);\n\n // SVG namespace: parse inside an SVG container then extract\n if (SVG_ELEMENTS.has(tag)) {\n return svgTemplate(trimmed);\n }\n\n // Table element wrapping: parse inside proper table parent then extract\n const tableInfo = TABLE_WRAPPERS[tag];\n if (tableInfo) {\n const t = document.createElement('template');\n t.innerHTML = tableInfo.wrap + trimmed + tableInfo.unwrap;\n // Navigate down through the wrapper to reach the actual element\n return () => {\n let node = t.content.firstChild;\n for (let i = 0; i < tableInfo.depth; i++) {\n node = node.firstChild;\n }\n return node.cloneNode(true);\n };\n }\n\n const t = document.createElement('template');\n t.innerHTML = trimmed;\n return () => t.content.firstChild.cloneNode(true);\n}\n\n// Public export \u2014 warns in dev mode that this is a compiler internal.\n// Application code should use JSX, which the compiler transforms into _$template calls.\nlet _templateWarned = false;\nexport function template(html) {\n if (__DEV__ && !_templateWarned) {\n _templateWarned = true;\n console.warn(\n '[what] template() is a compiler internal. Use JSX instead. ' +\n 'Direct calls with user input can lead to XSS vulnerabilities.'\n );\n }\n return _$templateImpl(html);\n}\n\n// Compiler-internal alias \u2014 preferred name for compiled output (no warning)\nexport { _$templateImpl as _$template };\n\n// Legacy alias kept for backwards compat\nexport { template as _template };\n\n// --- svgTemplate(html) ---\n// Parse SVG content inside an SVG namespace container. Without this, innerHTML on a\n// <template> element creates HTML-namespace nodes, making SVG elements invisible.\n// If the HTML is a complete <svg> tag, it is parsed inside a temporary <div> so the\n// browser uses the correct SVG namespace. For inner SVG elements (path, circle, etc.),\n// they are wrapped in an <svg> container for parsing and then extracted.\n\nexport function svgTemplate(html) {\n const trimmed = html.trim();\n const tag = getLeadingTag(trimmed);\n\n if (tag === 'svg') {\n // Complete <svg> element \u2014 parse in a div (browsers handle the namespace)\n const t = document.createElement('template');\n t.innerHTML = trimmed;\n return () => t.content.firstChild.cloneNode(true);\n }\n\n // Inner SVG element (path, circle, g, etc.) \u2014 wrap in <svg> for namespace context\n const t = document.createElement('template');\n t.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\">${trimmed}</svg>`;\n return () => t.content.firstChild.firstChild.cloneNode(true);\n}\n\n// --- insert(parent, child, marker?) ---\n// Reactive child insertion. Handles all child types:\n// - string/number \u2192 text node\n// - function \u2192 effect that updates text node reactively\n// - DOM node \u2192 append directly\n// - array \u2192 insert each element\n\nexport function insert(parent, child, marker) {\n if (typeof child === 'function') {\n let current = null;\n effect(() => {\n current = reconcileInsert(parent, child(), current, marker || null);\n });\n return current;\n }\n\n return reconcileInsert(parent, child, null, marker || null);\n}\n\nfunction isDomNode(value) {\n if (!value || typeof value !== 'object') return false;\n if (typeof Node !== 'undefined' && value instanceof Node) return true;\n return typeof value.nodeType === 'number' && typeof value.nodeName === 'string';\n}\n\nfunction isVNode(value) {\n return !!value && typeof value === 'object' && (value._vnode === true || 'tag' in value);\n}\n\nfunction isSvgParent(parent) {\n return typeof SVGElement !== 'undefined'\n && parent instanceof SVGElement\n && parent.tagName.toLowerCase() !== 'foreignobject';\n}\n\nfunction asNodeArray(value) {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction valuesToNodes(value, parent, out) {\n if (value == null || typeof value === 'boolean') return out;\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n valuesToNodes(value[i], parent, out);\n }\n return out;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n out.push(document.createTextNode(String(value)));\n return out;\n }\n\n if (isDomNode(value)) {\n out.push(value);\n return out;\n }\n\n if (isVNode(value)) {\n out.push(createDOM(value, parent, isSvgParent(parent)));\n return out;\n }\n\n out.push(document.createTextNode(String(value)));\n return out;\n}\n\nfunction sameNodeArray(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction reconcileInsert(parent, value, current, marker) {\n const targetMarker = marker || null;\n\n if (value == null || typeof value === 'boolean') {\n const oldNodes = asNodeArray(current);\n for (let i = 0; i < oldNodes.length; i++) {\n const oldNode = oldNodes[i];\n if (oldNode.parentNode === parent) {\n disposeTree(oldNode);\n parent.removeChild(oldNode);\n }\n }\n return null;\n }\n\n if ((typeof value === 'string' || typeof value === 'number')\n && current && !Array.isArray(current) && current.nodeType === 3) {\n const text = String(value);\n if (current.textContent !== text) current.textContent = text;\n return current;\n }\n\n const newNodes = valuesToNodes(value, parent, []);\n const oldNodes = asNodeArray(current);\n\n if (sameNodeArray(oldNodes, newNodes)) {\n return current;\n }\n\n const keep = new Set(newNodes);\n for (let i = 0; i < oldNodes.length; i++) {\n const oldNode = oldNodes[i];\n if (!keep.has(oldNode) && oldNode.parentNode === parent) {\n disposeTree(oldNode);\n parent.removeChild(oldNode);\n }\n }\n\n let ref = targetMarker;\n for (let i = newNodes.length - 1; i >= 0; i--) {\n const node = newNodes[i];\n if (node.parentNode !== parent || node.nextSibling !== ref) {\n // Guard against stale ref from nested reconciliation\n if (ref && ref.parentNode !== parent) ref = null;\n if (ref) parent.insertBefore(node, ref);\n else parent.appendChild(node);\n }\n ref = node;\n }\n\n if (newNodes.length === 0) return null;\n return newNodes.length === 1 ? newNodes[0] : newNodes;\n}\n\n// --- mapArray(source, mapFn, options?) ---\n// Reactive list rendering with per-item scopes.\n// Unkeyed: tracks items by reference. Keyed: tracks by key function.\n// With key + raw: mapFn receives (item, index) \u2014 raw item value. Items identified by key for\n// efficient DOM reuse/moves. Use when items have per-field signals (no wrapper needed).\n// With key (no raw): mapFn receives (itemAccessor, index) \u2014 accessor is a signal getter.\n// When item reference changes but key persists, the signal updates in place.\n// Without key: mapFn receives (item, index) \u2014 raw item value. New reference = new row.\n\nexport function mapArray(source, mapFn, options) {\n const keyFn = options?.key;\n const raw = options?.raw || false;\n\n return (parent, marker) => {\n let items = [];\n let mappedNodes = [];\n let disposeFns = [];\n // Keyed mode state: key \u2192 { itemSignal }. Null for raw/unkeyed modes.\n let keyedState = keyFn && !raw ? new Map() : null;\n\n const endMarker = document.createComment('/list');\n parent.insertBefore(endMarker, marker || null);\n\n effect(() => {\n const newItems = source() || [];\n if (keyFn) {\n reconcileKeyed(parent, endMarker, items, newItems, mappedNodes, disposeFns, mapFn, keyFn, keyedState);\n } else {\n reconcileList(parent, endMarker, items, newItems, mappedNodes, disposeFns, mapFn);\n }\n items = newItems.slice();\n });\n\n return endMarker;\n };\n}\n\nfunction reconcileList(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns, mapFn) {\n const newLen = newItems.length;\n const oldLen = oldItems.length;\n\n if (newLen === 0) {\n // Fast path: clear all \u2014 remove only this list's nodes, not all parent content\n if (oldLen > 0) {\n for (let i = 0; i < oldLen; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode === parent) {\n disposeTree(mappedNodes[i]);\n parent.removeChild(mappedNodes[i]);\n }\n }\n mappedNodes.length = 0;\n disposeFns.length = 0;\n }\n return;\n }\n\n if (oldLen === 0) {\n // Fast path: all new\n const frag = document.createDocumentFragment();\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const node = createRoot(dispose => {\n disposeFns[i] = dispose;\n return mapFn(item, i);\n });\n mappedNodes[i] = node;\n frag.appendChild(node);\n }\n parent.insertBefore(frag, endMarker);\n return;\n }\n\n // --- Common prefix/suffix skip ---\n let start = 0;\n const minLen = Math.min(oldLen, newLen);\n while (start < minLen && oldItems[start] === newItems[start]) start++;\n\n // If everything matches and same length, nothing changed\n if (start === oldLen && start === newLen) return;\n\n let oldEnd = oldLen - 1;\n let newEnd = newLen - 1;\n while (oldEnd >= start && newEnd >= start && oldItems[oldEnd] === newItems[newEnd]) {\n oldEnd--;\n newEnd--;\n }\n\n // Copy prefix/suffix into output arrays\n const newMapped = new Array(newLen);\n const newDispose = new Array(newLen);\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n // Suffix items: same item, possibly different index offset\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n // Only reconcile the middle section: start..newEnd (new) vs start..oldEnd (old)\n const midNewLen = newEnd - start + 1;\n const midOldLen = oldEnd - start + 1;\n\n if (midNewLen === 0) {\n // Only removals in the middle\n for (let i = start; i <= oldEnd; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode) mappedNodes[i].parentNode.removeChild(mappedNodes[i]);\n }\n } else if (midOldLen === 0) {\n // Only insertions in the middle\n const marker = start < newLen && newMapped[newEnd + 1] ? newMapped[newEnd + 1] : endMarker;\n const frag = document.createDocumentFragment();\n for (let i = start; i <= newEnd; i++) {\n const item = newItems[i];\n const idx = i;\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(item, idx);\n });\n frag.appendChild(newMapped[i]);\n }\n parent.insertBefore(frag, marker);\n } else {\n // General case: reconcile middle section with LIS\n _reconcileMiddle(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns,\n mapFn, start, oldEnd, newEnd, newMapped, newDispose);\n }\n\n // Update arrays in place\n mappedNodes.length = newLen;\n disposeFns.length = newLen;\n for (let i = 0; i < newLen; i++) {\n mappedNodes[i] = newMapped[i];\n disposeFns[i] = newDispose[i];\n }\n}\n\nfunction _reconcileMiddle(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns,\n mapFn, start, oldEnd, newEnd, newMapped, newDispose) {\n // Build index map only for the middle section\n const oldIdxMap = new Map();\n for (let i = start; i <= oldEnd; i++) {\n oldIdxMap.set(oldItems[i], i);\n }\n\n // Match old items to new positions, collect old indices for LIS\n const midLen = newEnd - start + 1;\n const oldIndices = new Int32Array(midLen); // -1 = new item\n oldIndices.fill(-1);\n\n for (let i = start; i <= newEnd; i++) {\n const oldIdx = oldIdxMap.get(newItems[i]);\n if (oldIdx !== undefined) {\n oldIdxMap.delete(newItems[i]);\n newMapped[i] = mappedNodes[oldIdx];\n newDispose[i] = disposeFns[oldIdx];\n oldIndices[i - start] = oldIdx;\n }\n }\n\n // Dispose removed items\n for (const [, oldIdx] of oldIdxMap) {\n disposeFns[oldIdx]?.();\n if (mappedNodes[oldIdx]?.parentNode) mappedNodes[oldIdx].parentNode.removeChild(mappedNodes[oldIdx]);\n }\n\n // Compute LIS on old indices of reused items\n // Build the sequence of old indices for reused items only\n const reusedCount = midLen - _countNeg1(oldIndices, midLen);\n\n // Use a bitfield (via Uint8Array) to mark LIS positions \u2014 avoids Set overhead\n const inLIS = new Uint8Array(midLen);\n\n if (reusedCount > 1) {\n const seq = new Int32Array(reusedCount);\n const seqToMid = new Int32Array(reusedCount); // maps seq index \u2192 mid index\n let k = 0;\n for (let i = 0; i < midLen; i++) {\n if (oldIndices[i] !== -1) {\n seq[k] = oldIndices[i];\n seqToMid[k] = i;\n k++;\n }\n }\n const lisResult = _lis(seq, reusedCount);\n for (let i = 0; i < lisResult.length; i++) {\n inLIS[seqToMid[lisResult[i]]] = 1;\n }\n } else if (reusedCount === 1) {\n // Single reused item is trivially in LIS\n for (let i = 0; i < midLen; i++) {\n if (oldIndices[i] !== -1) { inLIS[i] = 1; break; }\n }\n }\n\n // Create new items\n for (let i = start; i <= newEnd; i++) {\n if (!newMapped[i]) {\n const item = newItems[i];\n const idx = i;\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(item, idx);\n });\n }\n }\n\n // Position: work backwards from the item after newEnd (suffix start or endMarker)\n let nextSibling = newEnd + 1 < newMapped.length && newMapped[newEnd + 1]\n ? newMapped[newEnd + 1] : endMarker;\n\n for (let i = newEnd; i >= start; i--) {\n const mi = i - start;\n if (oldIndices[mi] === -1 || !inLIS[mi]) {\n // New item or moved item \u2014 insert\n // Guard against stale nextSibling from nested reconciliation\n if (nextSibling && nextSibling.parentNode !== parent) nextSibling = endMarker;\n parent.insertBefore(newMapped[i], nextSibling);\n }\n nextSibling = newMapped[i];\n }\n}\n\nfunction _countNeg1(arr, len) {\n let c = 0;\n for (let i = 0; i < len; i++) if (arr[i] === -1) c++;\n return c;\n}\n\n// Longest Increasing Subsequence \u2014 returns indices into the input array.\n// O(n log n) using patience sorting. Uses typed arrays for performance.\nfunction _lis(arr, len) {\n if (len === 0) return [];\n if (len === 1) return [0];\n\n const tails = new Int32Array(len); // indices into arr\n const predecessors = new Int32Array(len);\n let tailLen = 1;\n tails[0] = 0;\n predecessors[0] = -1;\n\n for (let i = 1; i < len; i++) {\n if (arr[i] > arr[tails[tailLen - 1]]) {\n predecessors[i] = tails[tailLen - 1];\n tails[tailLen++] = i;\n } else {\n let lo = 0, hi = tailLen - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (arr[tails[mid]] < arr[i]) lo = mid + 1;\n else hi = mid;\n }\n tails[lo] = i;\n predecessors[i] = lo > 0 ? tails[lo - 1] : -1;\n }\n }\n\n const result = new Array(tailLen);\n let k = tails[tailLen - 1];\n for (let i = tailLen - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n return result;\n}\n\n// --- reconcileKeyed ---\n// Keyed reconciliation: tracks items by key function, not by reference.\n// When a key persists but its item reference changes, the item signal updates\n// in place \u2014 no DOM node destruction/creation. Only effects reading the\n// item accessor re-run (e.g., textContent update for changed label).\n\nfunction reconcileKeyed(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns, mapFn, keyFn, keyedState) {\n const newLen = newItems.length;\n const oldLen = oldItems.length;\n\n // --- Fast path: clear all ---\n if (newLen === 0) {\n if (oldLen > 0) {\n // Call dispose functions to run cleanup callbacks (onCleanup, effect cleanups).\n // Without this, cleanup callbacks leak.\n for (let i = 0; i < oldLen; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode === parent) {\n disposeTree(mappedNodes[i]);\n parent.removeChild(mappedNodes[i]);\n }\n }\n mappedNodes.length = 0;\n disposeFns.length = 0;\n if (keyedState) keyedState.clear();\n }\n return;\n }\n\n // --- Fast path: all new ---\n if (oldLen === 0) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const idx = i;\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item; // raw mode: pass item directly\n }\n const node = createRoot(dispose => {\n disposeFns[idx] = dispose;\n return mapFn(accessor, idx);\n });\n mappedNodes[i] = node;\n frag.appendChild(node);\n }\n parent.insertBefore(frag, endMarker);\n return;\n }\n\n // --- Common prefix: skip matching keys at the start ---\n let start = 0;\n const minLen = Math.min(oldLen, newLen);\n while (start < minLen) {\n // Fast path: same reference \u2192 same key, no update needed\n if (oldItems[start] === newItems[start]) { start++; continue; }\n const oldKey = keyFn(oldItems[start]);\n const newKey = keyFn(newItems[start]);\n if (oldKey !== newKey) break;\n // Key matches but reference changed \u2014 update signal (non-raw mode only)\n if (keyedState) keyedState.get(oldKey).itemSig.set(newItems[start]);\n start++;\n }\n\n // --- Common suffix: skip matching keys at the end ---\n let oldEnd = oldLen - 1;\n let newEnd = newLen - 1;\n while (oldEnd >= start && newEnd >= start) {\n if (oldItems[oldEnd] === newItems[newEnd]) { oldEnd--; newEnd--; continue; }\n const oldKey = keyFn(oldItems[oldEnd]);\n const newKey = keyFn(newItems[newEnd]);\n if (oldKey !== newKey) break;\n if (keyedState) keyedState.get(oldKey).itemSig.set(newItems[newEnd]);\n oldEnd--;\n newEnd--;\n }\n\n // If everything matched, nothing to do\n if (start > oldEnd && start > newEnd) {\n // Just copy existing mappings to output\n return;\n }\n\n // Copy prefix/suffix into output arrays\n const newMapped = new Array(newLen);\n const newDispose = new Array(newLen);\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n const midNewLen = newEnd - start + 1;\n const midOldLen = oldEnd - start + 1;\n\n // --- Only additions in middle ---\n if (midOldLen === 0) {\n const marker = newEnd + 1 < newLen && newMapped[newEnd + 1] ? newMapped[newEnd + 1] : endMarker;\n const frag = document.createDocumentFragment();\n for (let i = start; i <= newEnd; i++) {\n const item = newItems[i];\n const idx = i;\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item;\n }\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(accessor, idx);\n });\n frag.appendChild(newMapped[i]);\n }\n parent.insertBefore(frag, marker);\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n\n // --- Only removals in middle ---\n if (midNewLen === 0) {\n for (let i = start; i <= oldEnd; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode) parent.removeChild(mappedNodes[i]);\n if (keyedState) keyedState.delete(keyFn(oldItems[i]));\n }\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n\n // --- General case: reconcile middle section ---\n // Build old key \u2192 old index map for middle section only\n const oldKeyMap = new Map();\n for (let i = start; i <= oldEnd; i++) {\n oldKeyMap.set(keyFn(oldItems[i]), i);\n }\n\n const oldIndices = new Int32Array(midNewLen);\n oldIndices.fill(-1);\n\n // Match by key\n for (let i = start; i <= newEnd; i++) {\n const key = keyFn(newItems[i]);\n const oldIdx = oldKeyMap.get(key);\n if (oldIdx !== undefined) {\n oldKeyMap.delete(key);\n newMapped[i] = mappedNodes[oldIdx];\n newDispose[i] = disposeFns[oldIdx];\n oldIndices[i - start] = oldIdx;\n // Update item signal if reference changed (non-raw mode only)\n if (keyedState && newItems[i] !== oldItems[oldIdx]) {\n keyedState.get(key).itemSig.set(newItems[i]);\n }\n }\n }\n\n // Dispose removed items\n for (const [key, oldIdx] of oldKeyMap) {\n disposeFns[oldIdx]?.();\n if (mappedNodes[oldIdx]?.parentNode) parent.removeChild(mappedNodes[oldIdx]);\n if (keyedState) keyedState.delete(key);\n }\n\n // Create new items\n for (let i = start; i <= newEnd; i++) {\n if (!newMapped[i]) {\n const item = newItems[i];\n const idx = i;\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item;\n }\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(accessor, idx);\n });\n }\n }\n\n // Position using LIS\n // First check: are reused items already in order? (common for update-in-place)\n let reusedCount = 0;\n let alreadySorted = true;\n let lastOldIdx = -1;\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) {\n reusedCount++;\n if (oldIndices[i] <= lastOldIdx) alreadySorted = false;\n lastOldIdx = oldIndices[i];\n }\n }\n\n const inLIS = new Uint8Array(midNewLen);\n\n if (alreadySorted) {\n // All reused items are in order \u2014 mark all as in LIS (no moves needed)\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) inLIS[i] = 1;\n }\n } else if (reusedCount > 1) {\n const seq = new Int32Array(reusedCount);\n const seqToMid = new Int32Array(reusedCount);\n let k = 0;\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) {\n seq[k] = oldIndices[i];\n seqToMid[k] = i;\n k++;\n }\n }\n const lisResult = _lis(seq, reusedCount);\n for (let i = 0; i < lisResult.length; i++) {\n inLIS[seqToMid[lisResult[i]]] = 1;\n }\n } else if (reusedCount === 1) {\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) { inLIS[i] = 1; break; }\n }\n }\n\n // Position: work backwards, insert items not in LIS\n let nextSibling = newEnd + 1 < newMapped.length && newMapped[newEnd + 1]\n ? newMapped[newEnd + 1] : endMarker;\n\n for (let i = newEnd; i >= start; i--) {\n const mi = i - start;\n if (oldIndices[mi] === -1 || !inLIS[mi]) {\n // Guard against stale nextSibling from nested reconciliation\n if (nextSibling && nextSibling.parentNode !== parent) nextSibling = endMarker;\n parent.insertBefore(newMapped[i], nextSibling);\n }\n nextSibling = newMapped[i];\n }\n\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n}\n\nfunction _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen) {\n mappedNodes.length = newLen;\n disposeFns.length = newLen;\n for (let i = 0; i < newLen; i++) {\n mappedNodes[i] = newMapped[i];\n disposeFns[i] = newDispose[i];\n }\n}\n\n// --- spread(el, props) ---\n// Fine-grained prop effects. Function props create individual effects.\n// Event props use direct assignment.\n\nexport function spread(el, props) {\n for (const key in props) {\n const value = props[key];\n\n if (key.startsWith('on') && key.length > 2) {\n // Event handler \u2014 direct assignment. Use $$name for delegated events.\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value);\n continue;\n }\n\n if (typeof value === 'function' && !key.startsWith('on')) {\n // Reactive prop \u2014 create micro-effect\n if (key === 'class' || key === 'className') {\n effect(() => { el.className = value() || ''; });\n } else if (key === 'style' && typeof value() === 'object') {\n effect(() => {\n const styles = value();\n for (const prop in styles) {\n el.style[prop] = styles[prop] ?? '';\n }\n });\n } else {\n effect(() => { setProp(el, key, value()); });\n }\n } else {\n // Static prop\n setProp(el, key, value);\n }\n }\n}\n\nexport function setProp(el, key, value) {\n // Sanitize URL attributes \u2014 reject dangerous protocols\n if (URL_ATTRS.has(key) || URL_ATTRS.has(key.toLowerCase())) {\n if (!isSafeUrl(value)) {\n if (typeof console !== 'undefined') {\n console.warn(`[what] Blocked unsafe URL in \"${key}\" attribute: ${value}`);\n }\n return;\n }\n }\n\n if (key === 'class' || key === 'className') {\n el.className = value || '';\n } else if (key === 'dangerouslySetInnerHTML') {\n el.innerHTML = value?.__html ?? '';\n } else if (key === 'innerHTML') {\n if (value && typeof value === 'object' && '__html' in value) {\n el.innerHTML = value.__html ?? '';\n } else {\n // Plain string innerHTML is rejected for security \u2014 use { __html: string } form\n if (typeof console !== 'undefined' && value != null && value !== '') {\n console.warn(\n '[what] Plain string innerHTML is not allowed. Use { __html: \"...\" } or dangerouslySetInnerHTML={{ __html: \"...\" }} instead.'\n );\n }\n // Ignored \u2014 do not set innerHTML from plain string\n }\n } else if (key === 'style') {\n if (typeof value === 'string') {\n el.style.cssText = value;\n } else if (typeof value === 'object') {\n for (const prop in value) {\n el.style[prop] = value[prop] ?? '';\n }\n }\n } else if (key.startsWith('data-') || key.startsWith('aria-')) {\n el.setAttribute(key, value);\n } else if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else if (key in el) {\n el[key] = value;\n } else {\n el.setAttribute(key, value);\n }\n}\n\n// --- delegateEvents(eventNames) ---\n// Event delegation: common events handled at document level.\n// Handlers stored as el.$$click, el.$$input, etc.\n// Single listener per event type on document \u2014 reduces listener count from N to 1.\n\nconst delegatedEvents = new Set();\n\nexport function delegateEvents(eventNames) {\n for (const name of eventNames) {\n if (delegatedEvents.has(name)) continue;\n delegatedEvents.add(name);\n\n document.addEventListener(name, (e) => {\n let node = e.target;\n const key = '$$' + name;\n\n // Walk up the DOM tree looking for handlers\n while (node) {\n const handler = node[key];\n if (handler) {\n handler(e);\n if (e.cancelBubble) return;\n }\n node = node.parentNode;\n }\n });\n }\n}\n\n// --- addEventListener helper for non-delegated events ---\nexport function on(el, event, handler) {\n el.addEventListener(event, handler);\n return () => el.removeEventListener(event, handler);\n}\n\n// --- className helper for conditional classes ---\nexport function classList(el, classes) {\n effect(() => {\n for (const name in classes) {\n const value = typeof classes[name] === 'function' ? classes[name]() : classes[name];\n el.classList.toggle(name, !!value);\n }\n });\n}\n\n// =========================================================================\n// DOM Hydration\n// =========================================================================\n// Reuses server-rendered DOM instead of creating new nodes.\n// After hydration is complete, switches to normal rendering for updates.\n\nlet _isHydrating = false;\nlet _hydrationCursor = null;\n\nexport function isHydrating() {\n return _isHydrating;\n}\n\n/**\n * hydrate(vnode, container)\n * Walk existing DOM nodes in `container`, match them against the vnode tree,\n * attach reactive bindings, and skip cloneNode. Once done, switch to normal rendering.\n */\nexport function hydrate(vnode, container) {\n _isHydrating = true;\n _hydrationCursor = { parent: container, index: 0 };\n\n try {\n const result = hydrateNode(vnode, container);\n return result;\n } finally {\n _isHydrating = false;\n _hydrationCursor = null;\n }\n}\n\n/**\n * Claim the next DOM node from the hydration cursor.\n * Returns the existing DOM node or null if none available.\n */\nfunction claimNode(parent) {\n const children = parent.childNodes;\n while (_hydrationCursor.index < children.length) {\n const node = children[_hydrationCursor.index];\n // Skip hydration comment markers\n if (node.nodeType === 8) { // Comment node\n const text = node.textContent;\n if (text === '$' || text === '/$' || text === '[]' || text === '/[]') {\n _hydrationCursor.index++;\n continue;\n }\n }\n _hydrationCursor.index++;\n return node;\n }\n return null;\n}\n\nfunction isDevMode() {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n}\n\nfunction hydrateNode(vnode, parent) {\n if (vnode == null || typeof vnode === 'boolean') {\n return null;\n }\n\n // Text node\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n const existing = claimNode(parent);\n const text = String(vnode);\n\n if (existing && existing.nodeType === 3) {\n // Reuse text node \u2014 check for mismatch in dev\n if (isDevMode() && existing.textContent !== text) {\n console.warn(\n `[what] Hydration mismatch: expected text \"${text}\", got \"${existing.textContent}\"`\n );\n existing.textContent = text;\n }\n return existing;\n }\n\n // Mismatch: expected text node, got element or nothing\n if (isDevMode()) {\n console.warn(\n `[what] Hydration mismatch: expected text node \"${text}\", got ${existing ? existing.nodeName : 'nothing'}. Falling back to client render.`\n );\n }\n const textNode = document.createTextNode(text);\n if (existing) {\n parent.replaceChild(textNode, existing);\n } else {\n parent.appendChild(textNode);\n }\n return textNode;\n }\n\n // Reactive function child \u2014 attach effect to existing node\n if (typeof vnode === 'function') {\n // Unwrap to get the initial value for hydration\n const initialValue = vnode();\n let current = hydrateNode(initialValue, parent);\n\n // Set up reactive effect for future updates (normal rendering path)\n effect(() => {\n const value = vnode();\n // After hydration, this runs as normal insert\n if (!_isHydrating) {\n current = reconcileInsert(parent, value, current, null);\n }\n });\n return current;\n }\n\n // Array \u2014 hydrate each child\n if (Array.isArray(vnode)) {\n const nodes = [];\n for (const child of vnode) {\n const node = hydrateNode(child, parent);\n if (node) nodes.push(node);\n }\n return nodes.length === 1 ? nodes[0] : nodes;\n }\n\n // VNode \u2014 component or element\n if (typeof vnode === 'object' && vnode._vnode) {\n // Component \u2014 route through component context so hooks work during hydration\n if (typeof vnode.tag === 'function') {\n const componentStack = getComponentStack();\n const Component = vnode.tag;\n const props = vnode.props || {};\n const children = vnode.children || [];\n\n // Set up component context (mirrors createComponent in dom.js)\n const ctx = {\n hooks: [],\n hookIndex: 0,\n effects: [],\n cleanups: [],\n mounted: false,\n disposed: false,\n Component,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: null,\n };\n\n // Push context so hooks can access it\n componentStack.push(ctx);\n\n let result;\n try {\n const propsChildren = children.length === 0 ? undefined\n : children.length === 1 ? children[0] : children;\n result = Component({ ...props, children: propsChildren });\n } catch (error) {\n componentStack.pop();\n console.error('[what] Error in component during hydration:', Component.name || 'Anonymous', error);\n return null;\n }\n\n componentStack.pop();\n ctx.mounted = true;\n\n // Run onMount callbacks after hydration\n if (ctx._mountCallbacks) {\n queueMicrotask(() => {\n if (ctx.disposed) return;\n for (const fn of ctx._mountCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onMount error:', e); }\n }\n });\n }\n\n return hydrateNode(result, parent);\n }\n\n // Element \u2014 claim existing DOM element\n const existing = claimNode(parent);\n const expectedTag = vnode.tag.toUpperCase();\n\n if (existing && existing.nodeType === 1 && existing.nodeName === expectedTag) {\n // Match! Reuse this element. Apply props/bindings.\n hydrateElementProps(existing, vnode.props || {});\n\n // Hydrate children\n const savedCursor = _hydrationCursor;\n _hydrationCursor = { parent: existing, index: 0 };\n\n const rawInner = vnode.props?.dangerouslySetInnerHTML?.__html;\n if (rawInner == null) {\n for (const child of vnode.children) {\n hydrateNode(child, existing);\n }\n }\n\n _hydrationCursor = savedCursor;\n return existing;\n }\n\n // Mismatch \u2014 fall back to client render for this subtree\n if (isDevMode()) {\n console.warn(\n `[what] Hydration mismatch: expected <${vnode.tag}>, got ${existing ? existing.nodeName : 'nothing'}. Falling back to client render.`\n );\n }\n\n // Create the element from scratch\n const newEl = document.createElement(vnode.tag);\n for (const key in vnode.props || {}) {\n if (key === 'children' || key === 'key') continue;\n setProp(newEl, key, vnode.props[key]);\n }\n for (const child of vnode.children) {\n reconcileInsert(newEl, child, null, null);\n }\n if (existing) {\n parent.replaceChild(newEl, existing);\n } else {\n parent.appendChild(newEl);\n }\n return newEl;\n }\n\n // DOM node \u2014 use directly\n if (isDomNode(vnode)) {\n return vnode;\n }\n\n // Fallback \u2014 create text node\n const textNode = document.createTextNode(String(vnode));\n parent.appendChild(textNode);\n return textNode;\n}\n\n/**\n * Apply props to an existing hydrated element.\n * Attaches event handlers and reactive bindings without re-creating the element.\n */\nfunction hydrateElementProps(el, props) {\n for (const key in props) {\n if (key === 'children' || key === 'key' || key === 'ref') continue;\n if (key === 'dangerouslySetInnerHTML' || key === 'innerHTML') continue;\n\n const value = props[key];\n\n // Event handlers \u2014 always attach (they don't exist in SSR HTML)\n if (key.startsWith('on') && key.length > 2) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value);\n continue;\n }\n\n // Delegated events ($$click etc.)\n if (key.startsWith('$$')) {\n el[key] = value;\n continue;\n }\n\n // Reactive props \u2014 set up effects\n if (typeof value === 'function' && !key.startsWith('on')) {\n if (key === 'class' || key === 'className') {\n effect(() => { el.className = value() || ''; });\n } else if (key === 'style' && typeof value() === 'object') {\n effect(() => {\n const styles = value();\n for (const prop in styles) {\n el.style[prop] = styles[prop] ?? '';\n }\n });\n } else {\n effect(() => { setProp(el, key, value()); });\n }\n continue;\n }\n\n // Static props \u2014 skip attributes already set from SSR\n // Only attach non-serializable props or ones that may differ\n if (key === 'data-hk') continue;\n }\n}\n", "// What Framework - Hooks\n// React-familiar hooks backed by signals for run-once component model.\n// Components run ONCE. Hooks return signal accessors (functions) so the\n// fine-grained runtime handles reactive updates automatically via effects.\n\nimport { signal, computed, effect, batch, untrack, createRoot, __DEV__ } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\n\nfunction getCtx(hookName) {\n const ctx = getCurrentComponent();\n if (!ctx) {\n throw new Error(\n `[what] ${hookName || 'Hook'}() can only be called inside a component function. ` +\n `Did you call it outside of a component or in an async callback? ` +\n `If you need reactive state outside a component, use signal() directly.`\n );\n }\n return ctx;\n}\n\nfunction getHook(ctx) {\n const index = ctx.hookIndex++;\n return { index, exists: index < ctx.hooks.length };\n}\n\n// --- useState ---\n// Returns [signalAccessor, setter]. The accessor is a function \u2014 call it to read.\n// In JSX, {count} (where count is the signal function) auto-binds reactively\n// via insert()'s effect wrapper. For interpolation, use count() explicitly.\n// This matches Solid's API and works with the run-once component model.\n\nexport function useState(initial) {\n const ctx = getCtx('useState');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n const s = signal(typeof initial === 'function' ? initial() : initial);\n ctx.hooks[index] = s;\n }\n\n const s = ctx.hooks[index];\n return [s, s.set];\n}\n\n// --- useSignal ---\n// Returns the raw signal. More powerful: read with sig(), write with sig.set(v).\n// Avoids array destructuring overhead.\n\nexport function useSignal(initial) {\n const ctx = getCtx('useSignal');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = signal(typeof initial === 'function' ? initial() : initial);\n }\n\n return ctx.hooks[index];\n}\n\n// --- useComputed ---\n// Derived value. Only recomputes when signal deps change.\n\nexport function useComputed(fn) {\n const ctx = getCtx('useComputed');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = computed(fn);\n }\n\n return ctx.hooks[index];\n}\n\n// --- useEffect ---\n// Side effect that runs after mount. In the run-once model, deps-based\n// re-running only works if deps are signal accessors. The implementation:\n// - No deps (undefined): wrap in effect() that auto-tracks signals\n// - Empty deps []: run once on mount, cleanup on unmount\n// - Deps [a, b]: create effect() that reads each dep (calling signal functions\n// to establish tracking), then runs the callback when any dep changes\n\nexport function useEffect(fn, deps) {\n const ctx = getCtx('useEffect');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { cleanup: null, dispose: null };\n }\n\n // Dev-mode: warn when deps array contains non-function values that look like signals\n if (__DEV__ && Array.isArray(deps) && deps.length > 0) {\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (dep != null && typeof dep !== 'function') {\n console.warn(\n `[what] useEffect dep at index ${i} is not a function. ` +\n `Did you mean to pass a signal? Use count instead of count()`\n );\n }\n }\n }\n\n const hook = ctx.hooks[index];\n\n // Only set up once \u2014 component runs once\n if (hook.dispose) return;\n\n if (deps === undefined) {\n // No deps array: wrap in effect() that auto-tracks signal reads inside fn\n queueMicrotask(() => {\n if (ctx.disposed) return;\n hook.dispose = effect(() => {\n if (hook.cleanup) {\n try { hook.cleanup(); } catch (e) { /* cleanup error */ }\n hook.cleanup = null;\n }\n const result = fn();\n if (typeof result === 'function') hook.cleanup = result;\n });\n // Register disposal with component lifecycle\n ctx.effects = ctx.effects || [];\n ctx.effects.push(hook.dispose);\n });\n } else if (deps.length === 0) {\n // Empty deps []: run once on mount, cleanup on unmount\n queueMicrotask(() => {\n if (ctx.disposed) return;\n const result = fn();\n if (typeof result === 'function') hook.cleanup = result;\n });\n // Mark as set up so we don't re-run\n hook.dispose = true;\n } else {\n // Deps array with values: create a reactive effect that reads each dep.\n // If a dep is a signal function, calling it establishes tracking.\n // When any tracked signal changes, the effect re-runs the callback.\n queueMicrotask(() => {\n if (ctx.disposed) return;\n hook.dispose = effect(() => {\n // Read all deps to establish signal tracking\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (typeof dep === 'function' && dep._signal) {\n dep(); // Read signal to track it\n }\n }\n\n // Run cleanup from previous execution\n if (hook.cleanup) {\n try { hook.cleanup(); } catch (e) { /* cleanup error */ }\n hook.cleanup = null;\n }\n\n // Run the effect callback\n const result = untrack(() => fn());\n if (typeof result === 'function') hook.cleanup = result;\n });\n // Register disposal with component lifecycle\n ctx.effects = ctx.effects || [];\n ctx.effects.push(hook.dispose);\n });\n }\n}\n\n// --- useMemo ---\n// Memoized computed value. Uses computed() for automatic signal tracking.\n// The deps array is accepted for API compatibility but ignored internally \u2014\n// computed() auto-tracks signal dependencies.\n// Returns a computed signal function (call it to read the value).\n\nexport function useMemo(fn, deps) {\n const ctx = getCtx('useMemo');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { computed: computed(fn) };\n }\n\n return ctx.hooks[index].computed;\n}\n\n// --- useCallback ---\n// Memoized callback. In the run-once model, the component function only\n// executes once, so the callback reference is inherently stable.\n// Simply store and return the function on first call.\n\nexport function useCallback(fn, deps) {\n const ctx = getCtx('useCallback');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { callback: fn };\n }\n\n return ctx.hooks[index].callback;\n}\n\n// --- useRef ---\n// Mutable ref object. Does NOT trigger re-renders.\n// Works correctly in run-once model \u2014 the ref persists for the component lifetime.\n\nexport function useRef(initial) {\n const ctx = getCtx('useRef');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { current: initial };\n }\n\n return ctx.hooks[index];\n}\n\n// --- useContext ---\n// Read from the nearest Provider in the component tree, or the default value.\n// Uses _parentCtx chain (persistent tree) instead of componentStack (runtime stack)\n// so context works correctly in effects and event handlers.\n// Returns the signal itself (not its value) so that consumers get reactive updates.\n\nexport function useContext(context) {\n // Walk up the _parentCtx chain to find the nearest provider\n let ctx = getCurrentComponent();\n if (__DEV__ && !ctx) {\n console.warn(\n `[what] useContext(${context?.displayName || 'Context'}) called outside of component render. ` +\n 'useContext must be called during component rendering, not inside effects or event handlers. ' +\n 'Store the context value in a variable during render and use that variable in your callback.'\n );\n }\n while (ctx) {\n if (ctx._contextValues && ctx._contextValues.has(context)) {\n const val = ctx._contextValues.get(context);\n // If the stored value is a signal, read it to subscribe\n return (val && val._signal) ? val() : val;\n }\n ctx = ctx._parentCtx;\n }\n return context._defaultValue;\n}\n\n// --- createContext ---\n// Tree-scoped context: Provider sets value for its subtree only.\n// Multiple providers can coexist \u2014 each subtree sees its own value.\n// Context values are wrapped in signals so consumers re-render when values change.\n\nexport function createContext(defaultValue) {\n const context = {\n _defaultValue: defaultValue,\n Provider: ({ value, children }) => {\n const ctx = getCtx('Context.Provider');\n if (!ctx._contextValues) ctx._contextValues = new Map();\n if (!ctx._contextSignals) ctx._contextSignals = new Map();\n\n // Create or update the context signal\n if (!ctx._contextSignals.has(context)) {\n const s = signal(value);\n ctx._contextSignals.set(context, s);\n ctx._contextValues.set(context, s);\n } else {\n ctx._contextSignals.get(context).set(value);\n }\n return children;\n },\n // React-compatible Consumer: <Context.Consumer>{value => ...}</Context.Consumer>\n Consumer: ({ children }) => {\n const value = useContext(context);\n return typeof children === 'function' ? children(value) : children;\n },\n };\n return context;\n}\n\n// --- useReducer ---\n// State management with a reducer function.\n// Returns [signalAccessor, dispatch] \u2014 accessor is a signal function.\n\nexport function useReducer(reducer, initialState, init) {\n const ctx = getCtx('useReducer');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n const initial = init ? init(initialState) : initialState;\n const s = signal(initial);\n const dispatch = (action) => {\n s.set(prev => reducer(prev, action));\n };\n ctx.hooks[index] = { signal: s, dispatch };\n }\n\n const hook = ctx.hooks[index];\n return [hook.signal, hook.dispatch];\n}\n\n// --- onMount ---\n// Run callback once when component mounts. SolidJS-style lifecycle.\n\nexport function onMount(fn) {\n const ctx = getCtx('onMount');\n if (!ctx.mounted) {\n ctx._mountCallbacks = ctx._mountCallbacks || [];\n ctx._mountCallbacks.push(fn);\n }\n}\n\n// --- onCleanup ---\n// Register cleanup function to run when component unmounts.\n\nexport function onCleanup(fn) {\n const ctx = getCtx('onCleanup');\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(fn);\n}\n\n// --- createResource ---\n// Reactive data fetching primitive (SolidJS-style).\n// Returns [data, { loading, error, refetch, mutate }]\n\nexport function createResource(fetcher, options = {}) {\n const data = signal(options.initialValue ?? null);\n const loading = signal(!options.initialValue);\n const error = signal(null);\n\n let controller = null;\n\n const refetch = async (source) => {\n // Abort previous request\n if (controller) controller.abort();\n controller = new AbortController();\n const { signal: abortSignal } = controller;\n\n loading.set(true);\n error.set(null);\n\n try {\n const result = await fetcher(source, { signal: abortSignal });\n\n // Only update if not aborted\n if (!abortSignal.aborted) {\n batch(() => {\n data.set(result);\n loading.set(false);\n });\n }\n } catch (e) {\n if (!abortSignal.aborted) {\n batch(() => {\n error.set(e);\n loading.set(false);\n });\n }\n }\n };\n\n const mutate = (value) => {\n data.set(typeof value === 'function' ? value(data()) : value);\n };\n\n // Register cleanup with component lifecycle: abort on unmount\n const ctx = getCurrentComponent?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n if (controller) controller.abort();\n });\n }\n\n // Initial fetch if no initial value\n if (!options.initialValue) {\n refetch(options.source);\n }\n\n return [data, { loading, error, refetch, mutate }];\n}\n\n// --- Dep comparison (kept for potential external use) ---\n\nfunction depsChanged(oldDeps, newDeps) {\n if (oldDeps === undefined) return true;\n if (!oldDeps || !newDeps) return true;\n if (oldDeps.length !== newDeps.length) return true;\n for (let i = 0; i < oldDeps.length; i++) {\n if (!Object.is(oldDeps[i], newDeps[i])) return true;\n }\n return false;\n}\n", "// What Framework - Store\n// Lightweight global state management. Signal-based, type-safe, ergonomic.\n// Like Zustand meets signals \u2014 define a store, use it anywhere.\n\nimport { signal, computed, batch, __DEV__ } from './reactive.js';\n\n// --- storeComputed ---\n// Marker wrapper to explicitly tag a function as a computed in createStore.\n// Without this, createStore can't distinguish computed(state => ...) from action(item => ...).\n//\n// Usage:\n// const useCounter = createStore({\n// count: 0,\n// doubled: storeComputed(state => state.count * 2),\n// addItem(item) { /* this is an action */ },\n// });\n\nexport function derived(fn) {\n fn._storeComputed = true;\n return fn;\n}\n\n// Deprecated alias \u2014 use derived() instead\nlet _storeComputedWarned = false;\nexport function storeComputed(fn) {\n if (!_storeComputedWarned) {\n _storeComputedWarned = true;\n console.warn('[what] storeComputed() is deprecated. Use derived() instead.');\n }\n return derived(fn);\n}\n\n// --- createStore ---\n// Creates a reactive store with actions. Each key becomes a signal.\n//\n// Usage:\n// const useCounter = createStore({\n// count: 0,\n// doubled: storeComputed(state => state.count * 2), // computed\n// increment() { this.count++; }, // action\n// decrement() { this.count--; },\n// addItem(item) { this.items.push(item); }, // action (not confused with computed)\n// });\n//\n// function Counter() {\n// const { count, doubled, increment } = useCounter();\n// return h('div', null, count, ' / ', doubled, h('button', { onClick: increment }, '+'));\n// }\n\nexport function createStore(definition) {\n const signals = {};\n const computeds = {};\n const actions = {};\n const state = {};\n\n // Separate state, computeds, and actions\n // Use explicit _storeComputed marker instead of function.length heuristic\n for (const [key, value] of Object.entries(definition)) {\n if (typeof value === 'function' && value._storeComputed) {\n if (__DEV__ && value.length === 0) {\n console.warn(\n `[what] derived() for \"${key}\" should accept the state parameter, e.g. derived(state => ...).`\n );\n }\n // Computed: explicitly marked with storeComputed()\n computeds[key] = value;\n } else if (typeof value === 'function') {\n // Action: any other function\n actions[key] = value;\n } else {\n // State: initial value\n signals[key] = signal(value);\n }\n }\n\n // Build computed signals\n for (const [key, fn] of Object.entries(computeds)) {\n const proxy = new Proxy({}, {\n get(_, prop) {\n if (signals[prop]) return signals[prop]();\n if (computeds[prop]) return computeds[prop]();\n return undefined;\n },\n });\n computeds[key] = computed(() => fn(proxy));\n }\n\n // Build action functions bound to signals\n for (const [key, fn] of Object.entries(actions)) {\n actions[key] = (...args) => {\n batch(() => {\n const proxy = new Proxy({}, {\n get(_, prop) {\n if (signals[prop]) return signals[prop].peek();\n if (computeds[prop]) return computeds[prop].peek();\n if (actions[prop]) return actions[prop];\n return undefined;\n },\n set(_, prop, val) {\n if (signals[prop]) signals[prop].set(val);\n return true;\n },\n });\n fn.apply(proxy, args);\n });\n };\n }\n\n // Return a hook-like function\n return function useStore() {\n const result = {};\n for (const [key, s] of Object.entries(signals)) {\n Object.defineProperty(result, key, { get: () => s(), enumerable: true });\n }\n for (const [key, c] of Object.entries(computeds)) {\n Object.defineProperty(result, key, { get: () => c(), enumerable: true });\n }\n for (const [key, fn] of Object.entries(actions)) {\n result[key] = fn;\n }\n return result;\n };\n}\n\n// --- Simple atom --- [DEPRECATED: use signal() directly]\nlet _atomWarned = false;\nexport function atom(initial) {\n if (!_atomWarned) {\n _atomWarned = true;\n console.warn('[what] atom() is deprecated. Use signal() directly instead.');\n }\n return signal(initial);\n}\n", "// What Framework - Head Management\n// Declarative <head> updates from any component.\n// Supports title, meta, link, script tags. Auto-deduplicates by key.\n\nconst headState = {\n title: null,\n metas: new Map(),\n links: new Map(),\n};\n\n// --- Head component ---\n// Use in any component to set head tags. Last one wins for title/meta.\n\nexport function Head({ title, meta, link, children }) {\n if (typeof document === 'undefined') return null;\n\n if (title) {\n document.title = title;\n headState.title = title;\n }\n\n if (meta) {\n for (const attrs of (Array.isArray(meta) ? meta : [meta])) {\n const key = attrs.name || attrs.property || attrs.httpEquiv || JSON.stringify(attrs);\n setHeadTag('meta', key, attrs);\n }\n }\n\n if (link) {\n for (const attrs of (Array.isArray(link) ? link : [link])) {\n const key = attrs.rel + (attrs.href || '');\n setHeadTag('link', key, attrs);\n }\n }\n\n return children || null;\n}\n\nfunction setHeadTag(tag, key, attrs) {\n const existing = document.head.querySelector(`[data-what-head=\"${key}\"]`);\n if (existing) {\n updateElement(existing, attrs);\n return;\n }\n\n const el = document.createElement(tag);\n el.setAttribute('data-what-head', key);\n for (const [k, v] of Object.entries(attrs)) {\n el.setAttribute(k, v);\n }\n document.head.appendChild(el);\n}\n\nfunction updateElement(el, attrs) {\n for (const [k, v] of Object.entries(attrs)) {\n if (el.getAttribute(k) !== v) {\n el.setAttribute(k, v);\n }\n }\n}\n\n// --- Cleanup: remove head tags added by What ---\nexport function clearHead() {\n const tags = document.head.querySelectorAll('[data-what-head]');\n for (const tag of tags) tag.remove();\n headState.metas.clear();\n headState.links.clear();\n}\n", "// What Framework - DOM Scheduler\n// Batches DOM reads and writes to prevent layout thrashing.\n// Inspired by fastdom but integrated with our reactive system.\n\n// Queue phases: reads run first, then writes\nconst readQueue = [];\nconst writeQueue = [];\nlet scheduled = false;\n\n// --- Schedule a DOM read operation ---\n// Reads should be batched together and run before writes\n// to avoid forced synchronous layouts.\n//\n// Example:\n// scheduleRead(() => {\n// const height = element.offsetHeight; // Read\n// scheduleWrite(() => {\n// element.style.height = height + 'px'; // Write\n// });\n// });\n\nexport function scheduleRead(fn) {\n readQueue.push(fn);\n schedule();\n return () => {\n const idx = readQueue.indexOf(fn);\n if (idx !== -1) readQueue.splice(idx, 1);\n };\n}\n\n// --- Schedule a DOM write operation ---\n// Writes are batched and run after all reads complete.\n\nexport function scheduleWrite(fn) {\n writeQueue.push(fn);\n schedule();\n return () => {\n const idx = writeQueue.indexOf(fn);\n if (idx !== -1) writeQueue.splice(idx, 1);\n };\n}\n\n// --- Flush all queued operations immediately ---\n// Useful when you need synchronous DOM access.\n\nexport function flushScheduler() {\n // Run all reads first\n while (readQueue.length > 0) {\n const fn = readQueue.shift();\n try { fn(); } catch (e) { console.error('[what] Scheduler read error:', e); }\n }\n\n // Then all writes\n while (writeQueue.length > 0) {\n const fn = writeQueue.shift();\n try { fn(); } catch (e) { console.error('[what] Scheduler write error:', e); }\n }\n\n scheduled = false;\n}\n\n// --- Internal scheduling ---\n\nfunction schedule() {\n if (scheduled) return;\n scheduled = true;\n requestAnimationFrame(flushScheduler);\n}\n\n// --- Measure helper ---\n// Read a layout property without causing thrashing.\n// Returns a promise that resolves with the value.\n\nexport function measure(fn) {\n return new Promise(resolve => {\n scheduleRead(() => {\n resolve(fn());\n });\n });\n}\n\n// --- Mutate helper ---\n// Write to DOM without causing thrashing.\n// Returns a promise that resolves when the write is done.\n\nexport function mutate(fn) {\n return new Promise(resolve => {\n scheduleWrite(() => {\n fn();\n resolve();\n });\n });\n}\n\n// --- useScheduledEffect ---\n// Effect that automatically batches DOM operations.\n\nimport { effect } from './reactive.js';\n\nexport function useScheduledEffect(readFn, writeFn) {\n const effectKey = Symbol('scheduledEffect');\n return effect(() => {\n // Use raf() to debounce: only the latest callback runs per frame,\n // avoiding creating new closures on every signal change.\n raf(effectKey, () => {\n scheduleRead(() => {\n const data = readFn();\n if (writeFn) {\n scheduleWrite(() => writeFn(data));\n }\n });\n });\n });\n}\n\n// --- Animation frame helper ---\n// Like requestAnimationFrame but returns a cancellable promise.\n\nexport function nextFrame() {\n let cancel;\n const promise = new Promise((resolve, reject) => {\n const id = requestAnimationFrame(resolve);\n cancel = () => {\n cancelAnimationFrame(id);\n reject(new Error('Cancelled'));\n };\n });\n promise.cancel = cancel;\n return promise;\n}\n\n// --- Debounced RAF ---\n// Only runs the latest callback once per frame.\n\nconst debouncedCallbacks = new Map();\n\nexport function raf(key, fn) {\n if (debouncedCallbacks.has(key)) {\n // Replace callback, don't schedule new frame\n debouncedCallbacks.set(key, fn);\n } else {\n debouncedCallbacks.set(key, fn);\n requestAnimationFrame(() => {\n const callback = debouncedCallbacks.get(key);\n debouncedCallbacks.delete(key);\n if (callback) callback();\n });\n }\n}\n\n// --- Resize Observer helper ---\n// Batched resize observations.\n\nconst resizeObservers = new WeakMap();\nlet sharedResizeObserver = null;\n\nexport function onResize(element, callback) {\n if (typeof ResizeObserver === 'undefined') {\n // Fallback: just call once\n callback(element.getBoundingClientRect());\n return () => {};\n }\n\n if (!sharedResizeObserver) {\n sharedResizeObserver = new ResizeObserver(entries => {\n scheduleRead(() => {\n for (const entry of entries) {\n const cb = resizeObservers.get(entry.target);\n if (cb) {\n cb(entry.contentRect);\n }\n }\n });\n });\n }\n\n resizeObservers.set(element, callback);\n sharedResizeObserver.observe(element);\n\n return () => {\n resizeObservers.delete(element);\n sharedResizeObserver.unobserve(element);\n };\n}\n\n// --- Intersection Observer helper ---\n// Batched intersection observations.\n\nexport function onIntersect(element, callback, options = {}) {\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: assume visible\n callback({ isIntersecting: true, intersectionRatio: 1 });\n return () => {};\n }\n\n const observer = new IntersectionObserver(entries => {\n scheduleRead(() => {\n for (const entry of entries) {\n callback(entry);\n }\n });\n }, options);\n\n observer.observe(element);\n\n return () => observer.disconnect();\n}\n\n// --- Smooth scrolling with scheduler ---\n\nexport function smoothScrollTo(element, options = {}) {\n const { duration = 300, easing = t => t * (2 - t) } = options;\n\n return new Promise(resolve => {\n let startY;\n let targetY;\n let startTime;\n\n scheduleRead(() => {\n startY = window.scrollY;\n const rect = element.getBoundingClientRect();\n targetY = startY + rect.top;\n startTime = performance.now();\n tick();\n });\n\n function tick() {\n scheduleRead(() => {\n const elapsed = performance.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentY = startY + (targetY - startY) * easedProgress;\n\n scheduleWrite(() => {\n window.scrollTo(0, currentY);\n\n if (progress < 1) {\n requestAnimationFrame(tick);\n } else {\n resolve();\n }\n });\n });\n }\n });\n}\n", "// What Framework - Animation Primitives\n// Springs, tweens, gestures, and transition helpers\n\nimport { signal, effect, untrack, batch } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\nimport { scheduleRead, scheduleWrite } from './scheduler.js';\n\n// Create an effect scoped to the current component's lifecycle\nfunction scopedEffect(fn) {\n const ctx = getCurrentComponent?.();\n const dispose = effect(fn);\n if (ctx) ctx.effects.push(dispose);\n return dispose;\n}\n\n// --- Spring Animation ---\n// Physics-based animation with natural feel\n\nexport function spring(initialValue, options = {}) {\n const {\n stiffness = 100,\n damping = 10,\n mass = 1,\n precision = 0.01,\n } = options;\n\n const current = signal(initialValue);\n const target = signal(initialValue);\n const velocity = signal(0);\n const isAnimating = signal(false);\n\n let rafId = null;\n let lastTime = null;\n\n function tick(time) {\n if (lastTime === null) {\n lastTime = time;\n rafId = requestAnimationFrame(tick);\n return;\n }\n\n const dt = Math.min((time - lastTime) / 1000, 0.064); // Cap at ~15fps minimum\n lastTime = time;\n\n const currentVal = current.peek();\n const targetVal = target.peek();\n const vel = velocity.peek();\n\n // Spring physics\n const displacement = currentVal - targetVal;\n const springForce = -stiffness * displacement;\n const dampingForce = -damping * vel;\n const acceleration = (springForce + dampingForce) / mass;\n\n const newVelocity = vel + acceleration * dt;\n const newValue = currentVal + newVelocity * dt;\n\n batch(() => {\n velocity.set(newVelocity);\n current.set(newValue);\n });\n\n // Check if settled\n if (Math.abs(newVelocity) < precision && Math.abs(displacement) < precision) {\n batch(() => {\n current.set(targetVal);\n velocity.set(0);\n isAnimating.set(false);\n });\n rafId = null;\n lastTime = null;\n return;\n }\n\n rafId = requestAnimationFrame(tick);\n }\n\n function set(newTarget) {\n target.set(newTarget);\n // Use rafId check instead of isAnimating signal \u2014 signal may not have flushed\n // after a synchronous stop() call, causing duplicate animation frames\n if (rafId === null) {\n isAnimating.set(true);\n lastTime = null;\n rafId = requestAnimationFrame(tick);\n }\n }\n\n function stop() {\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n isAnimating.set(false);\n lastTime = null;\n }\n\n function snap(value) {\n stop();\n batch(() => {\n current.set(value);\n target.set(value);\n velocity.set(0);\n });\n }\n\n // Register stop() as cleanup if inside a component\n const ctx = getCurrentComponent?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(stop);\n }\n\n return {\n current: () => current(),\n target: () => target(),\n velocity: () => velocity(),\n isAnimating: () => isAnimating(),\n set,\n stop,\n snap,\n subscribe: current.subscribe,\n };\n}\n\n// --- Tween Animation ---\n// Easing-based animation\n\nexport function tween(from, to, options = {}) {\n const {\n duration = 300,\n easing = (t) => t * (2 - t), // easeOutQuad\n onUpdate,\n onComplete,\n } = options;\n\n const progress = signal(0);\n const value = signal(from);\n const isAnimating = signal(true);\n\n let startTime = null;\n let rafId = null;\n\n function tick(time) {\n if (startTime === null) startTime = time;\n\n const elapsed = time - startTime;\n const t = Math.min(elapsed / duration, 1);\n const easedT = easing(t);\n const currentValue = from + (to - from) * easedT;\n\n batch(() => {\n progress.set(t);\n value.set(currentValue);\n });\n\n if (onUpdate) onUpdate(currentValue, t);\n\n if (t < 1) {\n rafId = requestAnimationFrame(tick);\n } else {\n isAnimating.set(false);\n if (onComplete) onComplete();\n }\n }\n\n rafId = requestAnimationFrame(tick);\n\n return {\n progress: () => progress(),\n value: () => value(),\n isAnimating: () => isAnimating(),\n cancel: () => {\n if (rafId) cancelAnimationFrame(rafId);\n isAnimating.set(false);\n },\n subscribe: value.subscribe,\n };\n}\n\n// --- Easing Functions ---\n\nexport const easings = {\n linear: (t) => t,\n easeInQuad: (t) => t * t,\n easeOutQuad: (t) => t * (2 - t),\n easeInOutQuad: (t) => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,\n easeInCubic: (t) => t * t * t,\n easeOutCubic: (t) => (--t) * t * t + 1,\n easeInOutCubic: (t) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInElastic: (t) => t === 0 ? 0 : t === 1 ? 1 : -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * ((2 * Math.PI) / 3)),\n easeOutElastic: (t) => t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * ((2 * Math.PI) / 3)) + 1,\n easeOutBounce: (t) => {\n const n1 = 7.5625;\n const d1 = 2.75;\n if (t < 1 / d1) return n1 * t * t;\n if (t < 2 / d1) return n1 * (t -= 1.5 / d1) * t + 0.75;\n if (t < 2.5 / d1) return n1 * (t -= 2.25 / d1) * t + 0.9375;\n return n1 * (t -= 2.625 / d1) * t + 0.984375;\n },\n};\n\n// --- useTransition Hook ---\n// Animate between states\n\nexport function useTransition(options = {}) {\n const { duration = 300, easing = easings.easeOutQuad } = options;\n\n const isTransitioning = signal(false);\n const progress = signal(0);\n\n async function start(callback) {\n isTransitioning.set(true);\n progress.set(0);\n\n return new Promise((resolve) => {\n const startTime = performance.now();\n\n function tick(time) {\n const elapsed = time - startTime;\n const t = Math.min(elapsed / duration, 1);\n progress.set(easing(t));\n\n if (t < 1) {\n requestAnimationFrame(tick);\n } else {\n isTransitioning.set(false);\n if (callback) callback();\n resolve();\n }\n }\n\n requestAnimationFrame(tick);\n });\n }\n\n return {\n isTransitioning: () => isTransitioning(),\n progress: () => progress(),\n start,\n };\n}\n\n// --- Gesture Handlers ---\n\nexport function useGesture(element, handlers = {}) {\n const {\n onDrag,\n onDragStart,\n onDragEnd,\n onPinch,\n onSwipe,\n onTap,\n onLongPress,\n preventDefault = false, // Set to true to allow e.preventDefault() in touch handlers\n } = handlers;\n\n const state = {\n isDragging: signal(false),\n startX: 0,\n startY: 0,\n currentX: signal(0),\n currentY: signal(0),\n deltaX: signal(0),\n deltaY: signal(0),\n velocity: signal({ x: 0, y: 0 }),\n };\n\n let lastTime = 0;\n let lastX = 0;\n let lastY = 0;\n let longPressTimer = null;\n\n function handleStart(e) {\n const touch = e.touches ? e.touches[0] : e;\n state.startX = touch.clientX;\n state.startY = touch.clientY;\n lastX = touch.clientX;\n lastY = touch.clientY;\n lastTime = performance.now();\n\n state.isDragging.set(true);\n if (onDragStart) onDragStart({ x: state.startX, y: state.startY });\n\n // Long press detection\n if (onLongPress) {\n longPressTimer = setTimeout(() => {\n if (state.isDragging.peek()) {\n onLongPress({ x: lastX, y: lastY });\n }\n }, 500);\n }\n }\n\n function handleMove(e) {\n if (!state.isDragging.peek()) return;\n\n const touch = e.touches ? e.touches[0] : e;\n const x = touch.clientX;\n const y = touch.clientY;\n const now = performance.now();\n const dt = now - lastTime;\n\n batch(() => {\n state.currentX.set(x);\n state.currentY.set(y);\n state.deltaX.set(x - state.startX);\n state.deltaY.set(y - state.startY);\n\n if (dt > 0) {\n state.velocity.set({\n x: (x - lastX) / dt * 1000,\n y: (y - lastY) / dt * 1000,\n });\n }\n });\n\n lastX = x;\n lastY = y;\n lastTime = now;\n\n if (longPressTimer) {\n // Cancel long press if moved too much\n const distance = Math.sqrt(state.deltaX.peek() ** 2 + state.deltaY.peek() ** 2);\n if (distance > 10) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n }\n\n if (onDrag) {\n onDrag({\n x,\n y,\n deltaX: state.deltaX.peek(),\n deltaY: state.deltaY.peek(),\n velocity: state.velocity.peek(),\n });\n }\n }\n\n function handleEnd(e) {\n if (!state.isDragging.peek()) return;\n\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n\n const deltaX = state.deltaX.peek();\n const deltaY = state.deltaY.peek();\n const velocity = state.velocity.peek();\n const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2);\n\n // Tap detection\n if (distance < 10 && onTap) {\n onTap({ x: state.startX, y: state.startY });\n }\n\n // Swipe detection\n if (onSwipe && (Math.abs(velocity.x) > 500 || Math.abs(velocity.y) > 500)) {\n const direction = Math.abs(velocity.x) > Math.abs(velocity.y)\n ? (velocity.x > 0 ? 'right' : 'left')\n : (velocity.y > 0 ? 'down' : 'up');\n onSwipe({ direction, velocity });\n }\n\n if (onDragEnd) {\n onDragEnd({\n deltaX,\n deltaY,\n velocity,\n });\n }\n\n state.isDragging.set(false);\n }\n\n // Pinch handling (touch only)\n let initialPinchDistance = null;\n\n function handlePinchMove(e) {\n if (!onPinch || e.touches.length !== 2) return;\n\n const touch1 = e.touches[0];\n const touch2 = e.touches[1];\n const distance = Math.sqrt(\n (touch2.clientX - touch1.clientX) ** 2 +\n (touch2.clientY - touch1.clientY) ** 2\n );\n\n if (initialPinchDistance === null) {\n initialPinchDistance = distance;\n }\n\n const scale = distance / initialPinchDistance;\n const centerX = (touch1.clientX + touch2.clientX) / 2;\n const centerY = (touch1.clientY + touch2.clientY) / 2;\n\n onPinch({ scale, centerX, centerY });\n }\n\n function handlePinchEnd() {\n initialPinchDistance = null;\n }\n\n // Attach listeners\n if (typeof element === 'function') {\n // Ref function\n scopedEffect(() => {\n const el = untrack(element);\n if (!el) return;\n return attachListeners(el);\n });\n } else if (element?.current !== undefined) {\n // Ref object\n scopedEffect(() => {\n const el = element.current;\n if (!el) return;\n return attachListeners(el);\n });\n } else if (element) {\n attachListeners(element);\n }\n\n function attachListeners(el) {\n el.addEventListener('mousedown', handleStart);\n el.addEventListener('touchstart', handleStart, { passive: !preventDefault });\n window.addEventListener('mousemove', handleMove);\n window.addEventListener('touchmove', handlePinchMove);\n window.addEventListener('touchmove', handleMove);\n window.addEventListener('mouseup', handleEnd);\n window.addEventListener('touchend', handleEnd);\n window.addEventListener('touchend', handlePinchEnd);\n\n return () => {\n el.removeEventListener('mousedown', handleStart);\n el.removeEventListener('touchstart', handleStart);\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('touchmove', handlePinchMove);\n window.removeEventListener('touchmove', handleMove);\n window.removeEventListener('mouseup', handleEnd);\n window.removeEventListener('touchend', handleEnd);\n window.removeEventListener('touchend', handlePinchEnd);\n };\n }\n\n return state;\n}\n\n// --- useAnimatedValue Hook ---\n// Like React Native's Animated.Value\n\nexport function useAnimatedValue(initialValue) {\n const value = signal(initialValue);\n const animations = [];\n\n return {\n value: () => value(),\n setValue: (v) => value.set(v),\n\n // Spring to target\n spring(toValue, config = {}) {\n const s = spring(value.peek(), config);\n s.set(toValue);\n\n const dispose = effect(() => {\n value.set(s.current());\n });\n\n return {\n stop: () => { s.stop(); dispose(); },\n };\n },\n\n // Tween to target\n timing(toValue, config = {}) {\n const t = tween(value.peek(), toValue, {\n ...config,\n onUpdate: (v) => value.set(v),\n });\n\n return {\n stop: () => t.cancel(),\n };\n },\n\n // Interpolate value\n interpolate(inputRange, outputRange) {\n return () => {\n const v = value();\n // Find segment\n for (let i = 0; i < inputRange.length - 1; i++) {\n if (v >= inputRange[i] && v <= inputRange[i + 1]) {\n const t = (v - inputRange[i]) / (inputRange[i + 1] - inputRange[i]);\n return outputRange[i] + (outputRange[i + 1] - outputRange[i]) * t;\n }\n }\n // Clamp\n if (v <= inputRange[0]) return outputRange[0];\n return outputRange[outputRange.length - 1];\n };\n },\n\n subscribe: value.subscribe,\n };\n}\n\n// --- CSS Transition Classes ---\n\nexport function createTransitionClasses(name) {\n return {\n enter: `${name}-enter`,\n enterActive: `${name}-enter-active`,\n enterDone: `${name}-enter-done`,\n exit: `${name}-exit`,\n exitActive: `${name}-exit-active`,\n exitDone: `${name}-exit-done`,\n };\n}\n\n// Apply CSS transition\nexport async function cssTransition(element, name, type = 'enter', duration = 300) {\n const classes = createTransitionClasses(name);\n\n return new Promise((resolve) => {\n scheduleWrite(() => {\n // Initial state\n element.classList.add(classes[type]);\n\n // Force reflow\n scheduleRead(() => {\n element.offsetHeight;\n\n scheduleWrite(() => {\n // Active state\n element.classList.add(classes[`${type}Active`]);\n\n setTimeout(() => {\n scheduleWrite(() => {\n element.classList.remove(classes[type], classes[`${type}Active`]);\n element.classList.add(classes[`${type}Done`]);\n resolve();\n });\n }, duration);\n });\n });\n });\n });\n}\n", "// What Framework - Accessibility Utilities\n// Focus management, ARIA helpers, screen reader announcements\n\nimport { signal, effect } from './reactive.js';\nimport { h } from './h.js';\nimport { getCurrentComponent } from './dom.js';\n\n// --- Focus Management ---\n\n// Track currently focused element\nconst focusedElement = signal(null);\n\nif (typeof document !== 'undefined') {\n document.addEventListener('focusin', (e) => {\n focusedElement.set(e.target);\n });\n}\n\nexport function useFocus() {\n return {\n current: () => focusedElement(),\n focus: (element) => element?.focus(),\n blur: () => document.activeElement?.blur(),\n };\n}\n\n// Capture/restore focus around transient UI (dialogs, popovers, drawers).\n// Parent components can call capture() before opening and restore() on close.\nexport function useFocusRestore() {\n const previousFocusRef = { current: null };\n\n function capture(target) {\n if (typeof document === 'undefined') return;\n previousFocusRef.current = target || document.activeElement || null;\n }\n\n function restore(fallbackTarget) {\n const target = previousFocusRef.current || fallbackTarget;\n if (target && typeof target.focus === 'function') {\n target.focus();\n }\n }\n\n return {\n capture,\n restore,\n previous: () => previousFocusRef.current,\n };\n}\n\n// --- Focus Trap ---\n// Keep focus within a container (for modals, dialogs, etc.)\n\nexport function useFocusTrap(containerRef) {\n let previousFocus = null;\n\n function activate() {\n if (typeof document === 'undefined') return;\n\n previousFocus = document.activeElement;\n const container = containerRef.current || containerRef;\n\n if (!container || typeof container.querySelectorAll !== 'function') return;\n\n // Find all focusable elements\n const focusables = getFocusableElements(container);\n if (focusables.length === 0) return;\n\n // Focus first element\n focusables[0].focus();\n\n // Handle Tab key\n function handleKeydown(e) {\n if (e.key !== 'Tab') return;\n\n const focusables = getFocusableElements(container);\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (e.shiftKey) {\n // Shift+Tab: if on first, go to last\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: if on last, go to first\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener('keydown', handleKeydown);\n\n return () => {\n container.removeEventListener('keydown', handleKeydown);\n };\n }\n\n function deactivate() {\n if (previousFocus && typeof previousFocus.focus === 'function') {\n previousFocus.focus();\n }\n }\n\n return { activate, deactivate };\n}\n\nfunction getFocusableElements(container) {\n const selector = [\n 'button:not([disabled])',\n 'a[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n return Array.from(container.querySelectorAll(selector)).filter(el => {\n return el.offsetParent !== null; // Visible\n });\n}\n\n// --- Focus Scope ---\n// Component wrapper that traps focus\n\nexport function FocusTrap({ children, active = true }) {\n const containerRef = { current: null };\n const refVersion = signal(0);\n const trap = useFocusTrap(containerRef);\n let trapCleanup = null;\n\n const setRef = (el) => {\n containerRef.current = el;\n refVersion.set(v => v + 1);\n };\n\n // Scope the effect to the component lifecycle so it disposes on unmount\n const dispose = effect(() => {\n // Re-run activation after the ref element is attached/updated.\n refVersion();\n\n if (trapCleanup) {\n trapCleanup();\n trapCleanup = null;\n trap.deactivate();\n }\n\n if (active && containerRef.current) {\n trapCleanup = trap.activate();\n return () => {\n trapCleanup?.();\n trapCleanup = null;\n trap.deactivate();\n };\n }\n });\n\n // Register cleanup on component context\n const ctx = getCurrentComponent?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n dispose();\n trapCleanup?.();\n trapCleanup = null;\n trap.deactivate();\n });\n }\n\n return h('div', { ref: setRef }, children);\n}\n\n// --- Screen Reader Announcements ---\n\nlet announcer = null;\nlet announcerId = 0;\n\nfunction getAnnouncer() {\n if (typeof document === 'undefined') return null;\n\n if (!announcer) {\n announcer = document.createElement('div');\n announcer.id = 'what-announcer';\n announcer.setAttribute('aria-live', 'polite');\n announcer.setAttribute('aria-atomic', 'true');\n announcer.style.cssText = `\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n `;\n document.body.appendChild(announcer);\n }\n return announcer;\n}\n\nexport function announce(message, options = {}) {\n const { priority = 'polite', timeout = 1000 } = options;\n const announcer = getAnnouncer();\n if (!announcer) return;\n\n announcer.setAttribute('aria-live', priority);\n\n // Clear and re-announce (required for some screen readers)\n const id = ++announcerId;\n announcer.textContent = '';\n\n requestAnimationFrame(() => {\n if (announcerId === id) {\n announcer.textContent = message;\n }\n });\n\n // Clear after timeout\n setTimeout(() => {\n if (announcerId === id) {\n announcer.textContent = '';\n }\n }, timeout);\n}\n\nexport function announceAssertive(message) {\n return announce(message, { priority: 'assertive' });\n}\n\n// --- Skip Link ---\n// Accessible skip navigation\n\nexport function SkipLink({ href = '#main', children = 'Skip to content' }) {\n return h('a', {\n href,\n class: 'what-skip-link',\n onClick: (e) => {\n e.preventDefault();\n const target = document.querySelector(href);\n if (target) {\n target.focus();\n target.scrollIntoView();\n }\n },\n style: {\n position: 'absolute',\n top: '-40px',\n left: '0',\n padding: '8px',\n background: '#000',\n color: '#fff',\n textDecoration: 'none',\n zIndex: '10000',\n },\n onFocus: (e) => {\n e.target.style.top = '0';\n },\n onBlur: (e) => {\n e.target.style.top = '-40px';\n },\n }, children);\n}\n\n// --- ARIA Helpers ---\n\nexport function useAriaExpanded(initialExpanded = false) {\n const expanded = signal(initialExpanded);\n\n return {\n expanded: () => expanded(),\n toggle: () => expanded.set(!expanded.peek()),\n open: () => expanded.set(true),\n close: () => expanded.set(false),\n buttonProps: () => ({\n 'aria-expanded': expanded(),\n onClick: () => expanded.set(!expanded.peek()),\n }),\n panelProps: () => ({\n hidden: !expanded(),\n }),\n };\n}\n\nexport function useAriaSelected(initialSelected = null) {\n const selected = signal(initialSelected);\n\n return {\n selected: () => selected(),\n select: (value) => selected.set(value),\n isSelected: (value) => selected() === value,\n itemProps: (value) => ({\n 'aria-selected': selected() === value,\n onClick: () => selected.set(value),\n }),\n };\n}\n\nexport function useAriaChecked(initialChecked = false) {\n const checked = signal(initialChecked);\n\n return {\n checked: () => checked(),\n toggle: () => checked.set(!checked.peek()),\n set: (value) => checked.set(value),\n checkboxProps: () => ({\n role: 'checkbox',\n 'aria-checked': checked(),\n tabIndex: 0,\n onClick: () => checked.set(!checked.peek()),\n onKeyDown: (e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n checked.set(!checked.peek());\n }\n },\n }),\n };\n}\n\n// --- Roving Tab Index ---\n// For keyboard navigation in lists, toolbars, etc.\n\nexport function useRovingTabIndex(itemCountOrSignal) {\n // Accept either a static number or a signal/getter for dynamic lists\n const getCount = typeof itemCountOrSignal === 'function'\n ? itemCountOrSignal\n : () => itemCountOrSignal;\n const focusIndex = signal(0);\n\n function handleKeyDown(e) {\n const count = getCount();\n if (count <= 0) return;\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n focusIndex.set((focusIndex.peek() + 1) % count);\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n focusIndex.set((focusIndex.peek() - 1 + count) % count);\n break;\n case 'Home':\n e.preventDefault();\n focusIndex.set(0);\n break;\n case 'End':\n e.preventDefault();\n focusIndex.set(count - 1);\n break;\n }\n }\n\n return {\n focusIndex: () => focusIndex(),\n setFocusIndex: (i) => focusIndex.set(i),\n getItemProps: (index) => ({\n tabIndex: focusIndex() === index ? 0 : -1,\n onKeyDown: handleKeyDown,\n onFocus: () => focusIndex.set(index),\n }),\n containerProps: () => ({\n role: 'listbox',\n }),\n };\n}\n\n// --- Visually Hidden ---\n// Hide content visually but keep accessible to screen readers\n\nexport function VisuallyHidden({ children, as = 'span' }) {\n return h(as, {\n style: {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n },\n }, children);\n}\n\n// --- Live Region Component ---\n\nexport function LiveRegion({ children, priority = 'polite', atomic = true }) {\n return h('div', {\n 'aria-live': priority,\n 'aria-atomic': atomic,\n }, children);\n}\n\n// --- ID Generator ---\n// Generate unique IDs for ARIA attributes\n\nlet idCounter = 0;\n\nexport function useId(prefix = 'what') {\n const id = `${prefix}-${++idCounter}`;\n return () => id;\n}\n\nexport function useIds(count, prefix = 'what') {\n const ids = [];\n for (let i = 0; i < count; i++) {\n ids.push(`${prefix}-${++idCounter}`);\n }\n return ids;\n}\n\n// --- Describe ---\n// Associate description with an element\n\nexport function useDescribedBy(description) {\n const id = useId('desc');\n\n return {\n descriptionId: id,\n descriptionProps: () => ({\n id: id(),\n style: { display: 'none' },\n }),\n describedByProps: () => ({\n 'aria-describedby': id(),\n }),\n Description: () => h('div', {\n id: id(),\n style: { display: 'none' },\n }, description),\n };\n}\n\n// --- Labelledby ---\n\nexport function useLabelledBy(label) {\n const id = useId('label');\n\n return {\n labelId: id,\n labelProps: () => ({\n id: id(),\n }),\n labelledByProps: () => ({\n 'aria-labelledby': id(),\n }),\n };\n}\n\n// --- Keyboard Navigation Helpers ---\n\nexport const Keys = {\n Enter: 'Enter',\n Space: ' ',\n Escape: 'Escape',\n ArrowUp: 'ArrowUp',\n ArrowDown: 'ArrowDown',\n ArrowLeft: 'ArrowLeft',\n ArrowRight: 'ArrowRight',\n Home: 'Home',\n End: 'End',\n Tab: 'Tab',\n};\n\nexport function onKey(key, handler) {\n return (e) => {\n if (e.key === key) {\n handler(e);\n }\n };\n}\n\nexport function onKeys(keys, handler) {\n return (e) => {\n if (keys.includes(e.key)) {\n handler(e);\n }\n };\n}\n", "// What Framework - Skeleton Loaders\n// Loading placeholders for content, islands, and async data\n\nimport { h } from './h.js';\nimport { signal, effect } from './reactive.js';\n\n// --- Skeleton Base Styles ---\n\nconst skeletonStyles = `\n.what-skeleton {\n background: linear-gradient(\n 90deg,\n var(--skeleton-base, #e0e0e0) 0%,\n var(--skeleton-highlight, #f0f0f0) 50%,\n var(--skeleton-base, #e0e0e0) 100%\n );\n background-size: 200% 100%;\n animation: what-skeleton-shimmer 1.5s infinite ease-in-out;\n border-radius: var(--skeleton-radius, 4px);\n}\n\n@keyframes what-skeleton-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.what-skeleton-pulse {\n animation: what-skeleton-pulse 1.5s infinite ease-in-out;\n}\n\n@keyframes what-skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.what-skeleton-wave {\n position: relative;\n overflow: hidden;\n}\n\n.what-skeleton-wave::after {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n rgba(255, 255, 255, 0.4) 50%,\n transparent 100%\n );\n animation: what-skeleton-wave 1.5s infinite;\n}\n\n@keyframes what-skeleton-wave {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n}\n`;\n\n// Inject styles once\nlet stylesInjected = false;\n\nfunction injectStyles() {\n if (stylesInjected || typeof document === 'undefined') return;\n stylesInjected = true;\n\n const style = document.createElement('style');\n style.textContent = skeletonStyles;\n document.head.appendChild(style);\n}\n\n// --- Skeleton Component ---\n\nexport function Skeleton({\n width,\n height,\n variant = 'shimmer', // 'shimmer' | 'pulse' | 'wave'\n circle = false,\n class: className,\n style: customStyle,\n count = 1,\n}) {\n injectStyles();\n\n const baseClass = `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''} ${variant === 'wave' ? 'what-skeleton-wave' : ''}`;\n const finalClass = className ? `${baseClass} ${className}` : baseClass;\n\n const style = {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n borderRadius: circle ? '50%' : undefined,\n ...customStyle,\n };\n\n if (count === 1) {\n return h('div', { class: finalClass, style, 'aria-hidden': 'true' });\n }\n\n return Array.from({ length: count }, (_, i) =>\n h('div', {\n key: i,\n class: finalClass,\n style: { ...style, marginBottom: i < count - 1 ? '8px' : undefined },\n 'aria-hidden': 'true',\n })\n );\n}\n\n// --- Skeleton Text ---\n\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = '60%',\n lineHeight = 16,\n gap = 8,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', { class: 'what-skeleton-text', 'aria-hidden': 'true' },\n Array.from({ length: lines }, (_, i) =>\n h('div', {\n key: i,\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: {\n height: `${lineHeight}px`,\n width: i === lines - 1 ? lastLineWidth : '100%',\n marginBottom: i < lines - 1 ? `${gap}px` : undefined,\n },\n })\n )\n );\n}\n\n// --- Skeleton Avatar ---\n\nexport function SkeletonAvatar({\n size = 40,\n variant = 'shimmer',\n}) {\n return Skeleton({\n width: size,\n height: size,\n circle: true,\n variant,\n });\n}\n\n// --- Skeleton Card ---\n\nexport function SkeletonCard({\n imageHeight = 200,\n lines = 3,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', { class: 'what-skeleton-card', 'aria-hidden': 'true' },\n // Image placeholder\n h('div', {\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: `${imageHeight}px`, width: '100%', marginBottom: '16px' },\n }),\n // Title\n h('div', {\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: '24px', width: '70%', marginBottom: '12px' },\n }),\n // Text lines\n SkeletonText({ lines, variant })\n );\n}\n\n// --- Skeleton Table ---\n\nexport function SkeletonTable({\n rows = 5,\n columns = 4,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', { class: 'what-skeleton-table', 'aria-hidden': 'true' },\n // Header\n h('div', { style: { display: 'flex', gap: '16px', marginBottom: '16px' } },\n Array.from({ length: columns }, (_, i) =>\n h('div', {\n key: i,\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: '20px', flex: 1 },\n })\n )\n ),\n // Rows\n Array.from({ length: rows }, (_, rowIndex) =>\n h('div', {\n key: rowIndex,\n style: {\n display: 'flex',\n gap: '16px',\n marginBottom: rowIndex < rows - 1 ? '12px' : undefined,\n },\n },\n Array.from({ length: columns }, (_, colIndex) =>\n h('div', {\n key: colIndex,\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: '16px', flex: 1 },\n })\n )\n )\n )\n );\n}\n\n// --- Island Skeleton ---\n// Specific skeleton for island placeholders\n\nexport function IslandSkeleton({\n type = 'default', // 'default' | 'card' | 'text' | 'custom'\n height,\n children,\n}) {\n injectStyles();\n\n if (type === 'card') {\n return SkeletonCard({});\n }\n\n if (type === 'text') {\n return SkeletonText({});\n }\n\n if (children) {\n return children;\n }\n\n return h('div', {\n class: 'what-skeleton what-island-skeleton',\n style: {\n height: typeof height === 'number' ? `${height}px` : height || '100px',\n width: '100%',\n },\n 'aria-hidden': 'true',\n });\n}\n\n// --- useSkeleton Hook ---\n// Show skeleton while loading data\n\nexport function useSkeleton(asyncFn, deps = []) {\n const isLoading = signal(true);\n const data = signal(null);\n const error = signal(null);\n\n effect(() => {\n isLoading.set(true);\n error.set(null);\n\n Promise.resolve(asyncFn())\n .then(result => {\n data.set(result);\n isLoading.set(false);\n })\n .catch(err => {\n error.set(err);\n isLoading.set(false);\n });\n });\n\n return {\n isLoading: () => isLoading(),\n data: () => data(),\n error: () => error(),\n Skeleton: (props) => isLoading() ? Skeleton(props) : null,\n };\n}\n\n// --- Placeholder ---\n// Generic placeholder with optional shimmer\n\nexport function Placeholder({\n width = '100%',\n height = 100,\n label = 'Loading...',\n showLabel = false,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', {\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n 'aria-label': label,\n role: 'status',\n },\n showLabel && h('span', {\n style: {\n color: 'var(--skeleton-text, #999)',\n fontSize: '14px',\n },\n }, label)\n );\n}\n\n// --- Loading Dots ---\n\nexport function LoadingDots({ size = 8, color = '#666' }) {\n injectStyles();\n\n const dotStyle = {\n width: `${size}px`,\n height: `${size}px`,\n borderRadius: '50%',\n backgroundColor: color,\n animation: 'what-skeleton-pulse 1s infinite ease-in-out',\n };\n\n return h('div', {\n class: 'what-loading-dots',\n style: { display: 'flex', gap: `${size / 2}px` },\n 'aria-label': 'Loading',\n role: 'status',\n },\n h('div', { style: { ...dotStyle, animationDelay: '0s' } }),\n h('div', { style: { ...dotStyle, animationDelay: '0.2s' } }),\n h('div', { style: { ...dotStyle, animationDelay: '0.4s' } })\n );\n}\n\n// --- Spinner ---\n\nexport function Spinner({ size = 24, color = '#666', strokeWidth = 2 }) {\n return h('svg', {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n style: { animation: 'spin 1s linear infinite' },\n 'aria-label': 'Loading',\n role: 'status',\n },\n h('style', null, '@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }'),\n h('circle', {\n cx: 12,\n cy: 12,\n r: 10,\n stroke: color,\n strokeWidth,\n fill: 'none',\n strokeDasharray: '31.4 31.4',\n strokeLinecap: 'round',\n })\n );\n}\n", "// What Framework - Data Fetching\n// SWR-like data fetching with caching, revalidation, and optimistic updates\n\nimport { signal, effect, batch, computed, __DEV__ } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\n\n// --- Reactive Cache ---\n// Each cache key maps to shared signals so all components reading the same key\n// see updates when ANY component mutates/revalidates that key.\n// Shared per key: data signal, error signal, isValidating signal.\nconst cacheSignals = new Map(); // key -> signal(value)\nconst errorSignals = new Map(); // key -> signal(error)\nconst validatingSignals = new Map(); // key -> signal(boolean)\nconst cacheTimestamps = new Map(); // key -> last access time (for LRU)\nconst MAX_CACHE_SIZE = 200;\n\nfunction getCacheSignal(key) {\n cacheTimestamps.set(key, Date.now());\n if (!cacheSignals.has(key)) {\n cacheSignals.set(key, signal(null));\n // Evict oldest entries if cache exceeds limit\n if (cacheSignals.size > MAX_CACHE_SIZE) {\n evictOldest();\n }\n }\n return cacheSignals.get(key);\n}\n\nfunction getErrorSignal(key) {\n if (!errorSignals.has(key)) errorSignals.set(key, signal(null));\n return errorSignals.get(key);\n}\n\nfunction getValidatingSignal(key) {\n if (!validatingSignals.has(key)) validatingSignals.set(key, signal(false));\n return validatingSignals.get(key);\n}\n\nfunction evictOldest() {\n // Remove the 20% oldest entries\n const entries = [...cacheTimestamps.entries()].sort((a, b) => a[1] - b[1]);\n const toRemove = Math.floor(MAX_CACHE_SIZE * 0.2);\n for (let i = 0; i < toRemove && i < entries.length; i++) {\n const key = entries[i][0];\n // Don't evict keys with active subscribers\n if (revalidationSubscribers.has(key) && revalidationSubscribers.get(key).size > 0) continue;\n cacheSignals.delete(key);\n errorSignals.delete(key);\n validatingSignals.delete(key);\n cacheTimestamps.delete(key);\n lastFetchTimestamps.delete(key);\n }\n}\n\n// Subscribers for invalidation: key -> Set<revalidateFn>\n// When invalidateQueries is called, all subscribers re-fetch\nconst revalidationSubscribers = new Map();\n\nfunction subscribeToKey(key, revalidateFn) {\n if (!revalidationSubscribers.has(key)) revalidationSubscribers.set(key, new Set());\n revalidationSubscribers.get(key).add(revalidateFn);\n return () => {\n const subs = revalidationSubscribers.get(key);\n if (subs) {\n subs.delete(revalidateFn);\n if (subs.size === 0) revalidationSubscribers.delete(key);\n }\n };\n}\n\nconst inFlightRequests = new Map(); // key -> { promise, timestamp, refCount }\nconst lastFetchTimestamps = new Map(); // key -> timestamp of last completed fetch\n\n// Create an effect scoped to the current component's lifecycle.\n// When the component unmounts, the effect is automatically disposed.\nfunction scopedEffect(fn) {\n const ctx = getCurrentComponent?.();\n const dispose = effect(fn);\n if (ctx) ctx.effects.push(dispose);\n return dispose;\n}\n\n// --- useFetch Hook ---\n// Simple fetch with automatic JSON parsing and error handling\n\nexport function useFetch(url, options = {}) {\n const {\n method = 'GET',\n body,\n headers = {},\n transform = (data) => data,\n initialData = null,\n } = options;\n\n const data = signal(initialData);\n const error = signal(null);\n const isLoading = signal(true);\n let abortController = null;\n\n async function fetchData() {\n // Abort previous request\n if (abortController) abortController.abort();\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n isLoading.set(true);\n error.set(null);\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const json = await response.json();\n if (!abortSignal.aborted) {\n data.set(transform(json));\n }\n } catch (e) {\n if (!abortSignal.aborted) {\n error.set(e);\n }\n } finally {\n if (!abortSignal.aborted) {\n isLoading.set(false);\n }\n }\n }\n\n // Fetch on mount, abort on unmount\n scopedEffect(() => {\n fetchData();\n return () => {\n if (abortController) abortController.abort();\n };\n });\n\n return {\n data: () => data(),\n error: () => error(),\n isLoading: () => isLoading(),\n refetch: fetchData,\n mutate: (newData) => data.set(newData),\n };\n}\n\n// --- useSWR Hook ---\n// Stale-while-revalidate pattern with caching\n\nexport function useSWR(key, fetcher, options = {}) {\n const {\n revalidateOnFocus = true,\n revalidateOnReconnect = true,\n refreshInterval = 0,\n dedupingInterval = 2000,\n fallbackData,\n onSuccess,\n onError,\n suspense = false,\n } = options;\n\n // Support null/undefined/false key for conditional/dependent fetching\n // When key is falsy, don't fetch \u2014 return idle state\n if (key == null || key === false) {\n const data = signal(fallbackData || null);\n const error = signal(null);\n return {\n data: () => data(),\n error: () => error(),\n isLoading: () => false,\n isValidating: () => false,\n mutate: (newData) => data.set(typeof newData === 'function' ? newData(data()) : newData),\n revalidate: () => Promise.resolve(),\n };\n }\n\n // Shared reactive cache signals \u2014 all useSWR instances with the same key\n // read from these signals, so mutating from one component updates all others.\n const cacheS = getCacheSignal(key);\n const error = getErrorSignal(key);\n const isValidating = getValidatingSignal(key);\n const data = computed(() => cacheS() ?? fallbackData ?? null);\n const isLoading = computed(() => cacheS() == null && isValidating());\n\n let abortController = null;\n\n async function revalidate() {\n const now = Date.now();\n\n // Deduplication: if there's already a request in flight, reuse it\n if (inFlightRequests.has(key)) {\n const existing = inFlightRequests.get(key);\n if (now - existing.timestamp < dedupingInterval) {\n existing.refCount++;\n return existing.promise;\n }\n }\n\n // Also deduplicate against recently completed fetches\n const lastFetch = lastFetchTimestamps.get(key);\n if (lastFetch && now - lastFetch < dedupingInterval && cacheS.peek() != null) {\n return cacheS.peek();\n }\n\n // Abort previous request only if no other subscribers are using it\n if (abortController) {\n const existing = inFlightRequests.get(key);\n if (!existing || existing.refCount <= 1) {\n abortController.abort();\n }\n }\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n isValidating.set(true);\n\n const promise = fetcher(key, { signal: abortSignal });\n inFlightRequests.set(key, { promise, timestamp: now, refCount: 1 });\n\n try {\n const result = await promise;\n if (abortSignal.aborted) return;\n batch(() => {\n cacheS.set(result); // Updates ALL components reading this key\n error.set(null);\n });\n cacheTimestamps.set(key, Date.now());\n lastFetchTimestamps.set(key, Date.now());\n if (onSuccess) onSuccess(result, key);\n return result;\n } catch (e) {\n if (abortSignal.aborted) return;\n error.set(e);\n if (onError) onError(e, key);\n throw e;\n } finally {\n if (!abortSignal.aborted) isValidating.set(false);\n const flight = inFlightRequests.get(key);\n if (flight) {\n flight.refCount--;\n if (flight.refCount <= 0) inFlightRequests.delete(key);\n }\n }\n }\n\n // Subscribe to invalidation events for this key\n const unsubscribe = subscribeToKey(key, () => revalidate().catch(() => {}));\n\n // Initial fetch\n scopedEffect(() => {\n revalidate().catch(() => {});\n // Cleanup: abort and unsubscribe on unmount\n return () => {\n if (abortController) abortController.abort();\n unsubscribe();\n };\n });\n\n // Revalidate on focus\n if (revalidateOnFocus && typeof window !== 'undefined') {\n scopedEffect(() => {\n const handler = () => {\n if (document.visibilityState === 'visible') {\n revalidate().catch(() => {});\n }\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n });\n }\n\n // Revalidate on reconnect\n if (revalidateOnReconnect && typeof window !== 'undefined') {\n scopedEffect(() => {\n const handler = () => revalidate().catch(() => {});\n window.addEventListener('online', handler);\n return () => window.removeEventListener('online', handler);\n });\n }\n\n // Polling\n if (refreshInterval > 0) {\n scopedEffect(() => {\n const interval = setInterval(() => {\n revalidate().catch(() => {});\n }, refreshInterval);\n return () => clearInterval(interval);\n });\n }\n\n return {\n data: () => data(),\n error: () => error(),\n isLoading: () => isLoading(),\n isValidating: () => isValidating(),\n mutate: (newData, shouldRevalidate = true) => {\n const resolved = typeof newData === 'function' ? newData(cacheS.peek()) : newData;\n cacheS.set(resolved); // Updates ALL components reading this key\n cacheTimestamps.set(key, Date.now());\n if (shouldRevalidate) {\n revalidate().catch(() => {});\n }\n },\n revalidate,\n };\n}\n\n// --- useQuery Hook ---\n// TanStack Query-like API\n\nexport function useQuery(options) {\n const {\n queryKey,\n queryFn,\n enabled = true,\n staleTime = 0,\n cacheTime = 5 * 60 * 1000,\n refetchOnWindowFocus = true,\n refetchInterval = false,\n retry = 3,\n retryDelay = (attempt) => Math.min(1000 * 2 ** attempt, 30000),\n onSuccess,\n onError,\n onSettled,\n select,\n placeholderData,\n } = options;\n\n const key = Array.isArray(queryKey) ? queryKey.join(':') : queryKey;\n\n const cacheS = getCacheSignal(key);\n const data = computed(() => {\n const d = cacheS();\n return select && d !== null ? select(d) : d;\n });\n const error = getErrorSignal(key);\n const status = signal(cacheS.peek() != null ? 'success' : 'loading');\n const fetchStatus = signal('idle');\n\n let lastFetchTime = 0;\n let abortController = null;\n\n async function fetchQuery() {\n if (!enabled) return;\n\n // Check if data is still fresh\n const now = Date.now();\n if (cacheS.peek() != null && now - lastFetchTime < staleTime) {\n return cacheS.peek();\n }\n\n // Abort previous request\n if (abortController) abortController.abort();\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n fetchStatus.set('fetching');\n if (cacheS.peek() == null) {\n status.set('loading');\n }\n\n let attempts = 0;\n\n async function attemptFetch() {\n try {\n const result = await queryFn({ queryKey: Array.isArray(queryKey) ? queryKey : [queryKey], signal: abortSignal });\n if (abortSignal.aborted) return;\n batch(() => {\n cacheS.set(result); // Updates all components reading this key\n error.set(null);\n status.set('success');\n fetchStatus.set('idle');\n });\n lastFetchTime = Date.now();\n cacheTimestamps.set(key, Date.now());\n\n if (onSuccess) onSuccess(result);\n if (onSettled) onSettled(result, null);\n\n // Schedule cache cleanup (only if no active subscribers)\n setTimeout(() => {\n if (Date.now() - lastFetchTime >= cacheTime) {\n const subs = revalidationSubscribers.get(key);\n if (!subs || subs.size === 0) {\n cacheSignals.delete(key);\n errorSignals.delete(key);\n validatingSignals.delete(key);\n cacheTimestamps.delete(key);\n lastFetchTimestamps.delete(key);\n }\n }\n }, cacheTime);\n\n return result;\n } catch (e) {\n if (abortSignal.aborted) return;\n attempts++;\n if (attempts < retry) {\n // Abort-aware retry delay: cancel the wait if the component unmounts\n await new Promise((resolve, reject) => {\n const id = setTimeout(resolve, retryDelay(attempts));\n abortSignal.addEventListener('abort', () => {\n clearTimeout(id);\n reject(new DOMException('Aborted', 'AbortError'));\n }, { once: true });\n }).catch(e => { if (e.name === 'AbortError') return; throw e; });\n if (abortSignal.aborted) return;\n return attemptFetch();\n }\n\n batch(() => {\n error.set(e);\n status.set('error');\n fetchStatus.set('idle');\n });\n\n if (onError) onError(e);\n if (onSettled) onSettled(null, e);\n\n throw e;\n }\n }\n\n return attemptFetch();\n }\n\n // Subscribe to invalidation events for this key\n const unsubscribe = subscribeToKey(key, () => fetchQuery().catch(() => {}));\n\n // Initial fetch\n scopedEffect(() => {\n if (enabled) {\n fetchQuery().catch(() => {});\n }\n return () => {\n if (abortController) abortController.abort();\n unsubscribe();\n };\n });\n\n // Refetch on focus\n if (refetchOnWindowFocus && typeof window !== 'undefined') {\n scopedEffect(() => {\n const handler = () => {\n if (document.visibilityState === 'visible') {\n fetchQuery().catch(() => {});\n }\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n });\n }\n\n // Polling\n if (refetchInterval) {\n scopedEffect(() => {\n const interval = setInterval(() => {\n fetchQuery().catch(() => {});\n }, refetchInterval);\n return () => clearInterval(interval);\n });\n }\n\n return {\n data: () => data() ?? placeholderData,\n error: () => error(),\n status: () => status(),\n fetchStatus: () => fetchStatus(),\n isLoading: () => status() === 'loading',\n isError: () => status() === 'error',\n isSuccess: () => status() === 'success',\n isFetching: () => fetchStatus() === 'fetching',\n refetch: fetchQuery,\n };\n}\n\n// --- useInfiniteQuery Hook ---\n// For paginated/infinite scroll data\n\nexport function useInfiniteQuery(options) {\n const {\n queryKey,\n queryFn,\n getNextPageParam,\n getPreviousPageParam,\n initialPageParam,\n ...rest\n } = options;\n\n const pages = signal([]);\n const pageParams = signal([initialPageParam]);\n const hasNextPage = signal(true);\n const hasPreviousPage = signal(false);\n const isFetchingNextPage = signal(false);\n const isFetchingPreviousPage = signal(false);\n\n const key = Array.isArray(queryKey) ? queryKey.join(':') : queryKey;\n let abortController = null;\n\n let isRefetching = false;\n\n async function fetchPage(pageParam, direction = 'next') {\n // Abort previous page fetch\n if (abortController) abortController.abort();\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n const loading = direction === 'next' ? isFetchingNextPage : isFetchingPreviousPage;\n loading.set(true);\n\n try {\n const result = await queryFn({\n queryKey: Array.isArray(queryKey) ? queryKey : [queryKey],\n pageParam,\n signal: abortSignal,\n });\n\n if (abortSignal.aborted) return;\n\n batch(() => {\n if (isRefetching) {\n // Refetch: replace all pages with fresh first page (SWR pattern \u2014\n // old pages stayed visible during fetch, now swap atomically)\n pages.set([result]);\n pageParams.set([pageParam]);\n isRefetching = false;\n } else if (direction === 'next') {\n pages.set([...pages.peek(), result]);\n pageParams.set([...pageParams.peek(), pageParam]);\n } else {\n pages.set([result, ...pages.peek()]);\n pageParams.set([pageParam, ...pageParams.peek()]);\n }\n\n const nextParam = getNextPageParam?.(result, pages.peek());\n hasNextPage.set(nextParam !== undefined);\n\n if (getPreviousPageParam) {\n const prevParam = getPreviousPageParam(result, pages.peek());\n hasPreviousPage.set(prevParam !== undefined);\n }\n });\n\n return result;\n } finally {\n if (!abortSignal.aborted) loading.set(false);\n }\n }\n\n // Initial fetch, abort on unmount\n scopedEffect(() => {\n fetchPage(initialPageParam).catch(() => {});\n return () => {\n if (abortController) abortController.abort();\n };\n });\n\n return {\n data: () => ({ pages: pages(), pageParams: pageParams() }),\n hasNextPage: () => hasNextPage(),\n hasPreviousPage: () => hasPreviousPage(),\n isFetchingNextPage: () => isFetchingNextPage(),\n isFetchingPreviousPage: () => isFetchingPreviousPage(),\n fetchNextPage: async () => {\n const lastPage = pages.peek()[pages.peek().length - 1];\n const nextParam = getNextPageParam?.(lastPage, pages.peek());\n if (nextParam !== undefined) {\n return fetchPage(nextParam, 'next');\n }\n },\n fetchPreviousPage: async () => {\n const firstPage = pages.peek()[0];\n const prevParam = getPreviousPageParam?.(firstPage, pages.peek());\n if (prevParam !== undefined) {\n return fetchPage(prevParam, 'previous');\n }\n },\n refetch: async () => {\n // Keep old pages visible during refetch (SWR pattern).\n // The fetchPage callback swaps them atomically when data arrives.\n isRefetching = true;\n return fetchPage(initialPageParam);\n },\n };\n}\n\n// --- Cache Management ---\n\nexport function invalidateQueries(keyOrPredicate, options = {}) {\n const { hard = false } = options;\n const keysToInvalidate = [];\n if (typeof keyOrPredicate === 'function') {\n for (const [key] of cacheSignals) {\n if (keyOrPredicate(key)) keysToInvalidate.push(key);\n }\n } else {\n keysToInvalidate.push(keyOrPredicate);\n }\n\n for (const key of keysToInvalidate) {\n // Hard invalidation clears data immediately (shows loading state)\n // Soft invalidation (default) keeps stale data visible during re-fetch (SWR pattern)\n if (hard && cacheSignals.has(key)) cacheSignals.get(key).set(null);\n // Trigger all subscribers to re-fetch\n const subs = revalidationSubscribers.get(key);\n if (subs) {\n for (const revalidate of subs) revalidate();\n }\n }\n}\n\nexport function prefetchQuery(key, fetcher) {\n const cacheS = getCacheSignal(key);\n return fetcher(key).then(result => {\n cacheS.set(result);\n cacheTimestamps.set(key, Date.now());\n return result;\n });\n}\n\nexport function setQueryData(key, updater) {\n const cacheS = getCacheSignal(key);\n const current = cacheS.peek();\n cacheS.set(typeof updater === 'function' ? updater(current) : updater);\n cacheTimestamps.set(key, Date.now());\n}\n\nexport function getQueryData(key) {\n return cacheSignals.has(key) ? cacheSignals.get(key).peek() : undefined;\n}\n\nexport function clearCache() {\n cacheSignals.clear();\n errorSignals.clear();\n validatingSignals.clear();\n cacheTimestamps.clear();\n lastFetchTimestamps.clear();\n inFlightRequests.clear();\n}\n\n/**\n * Get a snapshot of all cache entries for devtools.\n * @internal\n */\nexport function __getCacheSnapshot() {\n const entries = [];\n for (const [key, sig] of cacheSignals) {\n entries.push({\n key,\n data: sig.peek(),\n error: errorSignals.has(key) ? errorSignals.get(key).peek() : null,\n isValidating: validatingSignals.has(key) ? validatingSignals.get(key).peek() : false,\n });\n }\n return entries;\n}\n", "// What Framework - Form Utilities\n// Controlled inputs, validation, and form state management\n\nimport { signal, computed, batch } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\nimport { h } from './h.js';\n\n// --- useForm Hook ---\n// Complete form state management with validation\n\nexport function useForm(options = {}) {\n // Hook-stable behavior inside components\n const ctx = getCurrentComponent?.();\n if (ctx) {\n const index = ctx.hookIndex++;\n if (!ctx.hooks[index]) {\n ctx.hooks[index] = createFormController(options);\n }\n return ctx.hooks[index];\n }\n\n // Standalone usage outside component scope\n return createFormController(options);\n}\n\nfunction createFormController(options = {}) {\n const {\n defaultValues = {},\n mode = 'onSubmit', // 'onSubmit' | 'onChange' | 'onBlur'\n reValidateMode = 'onChange',\n resolver,\n } = options;\n\n // Per-field signals for granular reactivity (avoids full-form re-renders on each keystroke)\n const fieldSignals = {};\n const errorSignals = {};\n const touchedSignals = {};\n const errorsState = signal({});\n\n function getFieldSignal(name) {\n if (!fieldSignals[name]) {\n fieldSignals[name] = signal(defaultValues[name] ?? '');\n }\n return fieldSignals[name];\n }\n\n function getErrorSignal(name) {\n if (!errorSignals[name]) {\n errorSignals[name] = signal(null);\n }\n return errorSignals[name];\n }\n\n function getTouchedSignal(name) {\n if (!touchedSignals[name]) {\n touchedSignals[name] = signal(false);\n }\n return touchedSignals[name];\n }\n\n // Aggregate signals for bulk operations\n const isDirty = signal(false);\n const isSubmitting = signal(false);\n const isSubmitted = signal(false);\n const isValidating = signal(false);\n const submitCount = signal(0);\n\n // Helper: get all current values as a plain object.\n // tracked=true subscribes to all known fields; tracked=false is snapshot-only.\n function getAllValues(tracked = false) {\n const result = { ...defaultValues };\n for (const [name, sig] of Object.entries(fieldSignals)) {\n result[name] = tracked ? sig() : sig.peek();\n }\n return result;\n }\n\n // Helper: get all current errors as a plain object.\n // tracked=true subscribes to all known field errors; tracked=false is snapshot-only.\n function getAllErrors(tracked = false) {\n return tracked ? errorsState() : errorsState.peek();\n }\n\n function setFieldError(name, error) {\n const nextError = error ?? null;\n getErrorSignal(name).set(nextError);\n errorsState.set((prev) => {\n const prevError = prev[name];\n if (prevError === nextError) return prev;\n if (nextError == null) {\n if (!Object.prototype.hasOwnProperty.call(prev, name)) return prev;\n const next = { ...prev };\n delete next[name];\n return next;\n }\n return { ...prev, [name]: nextError };\n });\n }\n\n function replaceAllErrors(nextErrors = {}) {\n const normalized = nextErrors || {};\n batch(() => {\n for (const [name, sig] of Object.entries(errorSignals)) {\n if (!Object.prototype.hasOwnProperty.call(normalized, name)) {\n sig.set(null);\n }\n }\n for (const [name, err] of Object.entries(normalized)) {\n getErrorSignal(name).set(err ?? null);\n }\n errorsState.set({ ...normalized });\n });\n }\n\n // Computed states\n const isValid = computed(() => Object.keys(getAllErrors(true)).length === 0);\n\n const dirtyFields = computed(() => {\n const dirty = {};\n for (const [name, sig] of Object.entries(fieldSignals)) {\n if (sig() !== (defaultValues[name] ?? '')) {\n dirty[name] = true;\n }\n }\n return dirty;\n });\n\n // Validation\n async function validate(fieldName) {\n if (!resolver) return true;\n\n isValidating.set(true);\n try {\n const result = await resolver(getAllValues(false));\n const nextErrors = result?.errors || {};\n\n if (fieldName) {\n const nextError = nextErrors[fieldName] ?? null;\n setFieldError(fieldName, nextError);\n return !nextError;\n } else {\n replaceAllErrors(nextErrors);\n return Object.keys(nextErrors).length === 0;\n }\n } finally {\n isValidating.set(false);\n }\n }\n\n // Register a field \u2014 only subscribes to THIS field's signal\n function register(name, options = {}) {\n const fieldSig = getFieldSignal(name);\n const isCheckbox = options.type === 'checkbox' || options.type === 'radio';\n\n const handler = (e) => {\n const value = (e.target.type === 'checkbox' || e.target.type === 'radio')\n ? e.target.checked\n : e.target.value;\n setValue(name, value);\n\n if (mode === 'onChange' || (isSubmitted.peek() && reValidateMode === 'onChange')) {\n validate(name);\n }\n };\n\n const result = {\n name,\n onBlur: () => {\n getTouchedSignal(name).set(true);\n\n if (mode === 'onBlur' || (isSubmitted.peek() && reValidateMode === 'onBlur')) {\n validate(name);\n }\n },\n onFocus: () => {},\n ref: options.ref,\n };\n\n if (isCheckbox) {\n // Checkbox/radio: use checked prop + onchange event\n Object.defineProperty(result, 'checked', {\n get() { return !!fieldSig(); },\n enumerable: true,\n });\n result.onchange = handler;\n } else {\n // Text/select/textarea: use value prop + oninput event\n Object.defineProperty(result, 'value', {\n get() { return fieldSig(); },\n enumerable: true,\n });\n result.oninput = handler;\n }\n\n return result;\n }\n\n // Set single field value \u2014 only triggers re-render for components reading this field\n function setValue(name, value, options = {}) {\n const { shouldValidate = false, shouldDirty = true } = options;\n\n getFieldSignal(name).set(value);\n if (shouldDirty) isDirty.set(true);\n\n if (shouldValidate) {\n validate(name);\n }\n }\n\n // Get single field value\n function getValue(name) {\n return getFieldSignal(name)();\n }\n\n // Set error for a field\n function setError(name, error) {\n setFieldError(name, error);\n }\n\n // Clear error for a field\n function clearError(name) {\n setFieldError(name, null);\n }\n\n // Clear all errors\n function clearErrors() {\n replaceAllErrors({});\n }\n\n // Reset form\n function reset(newValues = defaultValues) {\n batch(() => {\n for (const [name, sig] of Object.entries(fieldSignals)) {\n sig.set(newValues[name] ?? '');\n }\n for (const sig of Object.values(errorSignals)) {\n sig.set(null);\n }\n errorsState.set({});\n for (const sig of Object.values(touchedSignals)) {\n sig.set(false);\n }\n isDirty.set(false);\n isSubmitted.set(false);\n });\n }\n\n // Handle submit\n function handleSubmit(onValid, onInvalid) {\n return async (e) => {\n if (e) e.preventDefault();\n\n isSubmitting.set(true);\n isSubmitted.set(true);\n submitCount.set(submitCount.peek() + 1);\n\n const isFormValid = await validate();\n\n if (isFormValid) {\n await onValid(getAllValues());\n } else if (onInvalid) {\n onInvalid(getAllErrors(false));\n }\n\n isSubmitting.set(false);\n };\n }\n\n // Watch a field \u2014 returns a computed that subscribes only to this field\n function watch(name) {\n if (name) {\n return computed(() => getFieldSignal(name)());\n }\n // Watch all: return a computed that reads all field signals\n return computed(() => getAllValues(true));\n }\n\n return {\n register,\n handleSubmit,\n setValue,\n getValue,\n setError,\n clearError,\n clearErrors,\n reset,\n watch,\n validate,\n // Form state\n formState: {\n get values() { return getAllValues(true); },\n get errors() { return getAllErrors(true); },\n error: (name) => getErrorSignal(name)(),\n get touched() {\n const result = {};\n for (const [name, sig] of Object.entries(touchedSignals)) {\n if (sig()) result[name] = true;\n }\n return result;\n },\n isDirty: () => isDirty(),\n isValid,\n isValidating: () => isValidating(),\n isSubmitting: () => isSubmitting(),\n isSubmitted: () => isSubmitted(),\n submitCount: () => submitCount(),\n dirtyFields,\n },\n };\n}\n\n// --- Validation Resolvers ---\n\nexport function zodResolver(schema) {\n return async (values) => {\n try {\n const result = await schema.parseAsync(values);\n return { values: result, errors: {} };\n } catch (e) {\n const errors = {};\n for (const issue of e.errors || []) {\n const path = issue.path.join('.');\n if (!errors[path]) {\n errors[path] = { type: issue.code, message: issue.message };\n }\n }\n return { values: {}, errors };\n }\n };\n}\n\nexport function yupResolver(schema) {\n return async (values) => {\n try {\n const result = await schema.validate(values, { abortEarly: false });\n return { values: result, errors: {} };\n } catch (e) {\n const errors = {};\n for (const err of e.inner || []) {\n if (!errors[err.path]) {\n errors[err.path] = { type: err.type, message: err.message };\n }\n }\n return { values: {}, errors };\n }\n };\n}\n\n// Simple validation resolver\nexport function simpleResolver(rules) {\n return async (values) => {\n const errors = {};\n\n for (const [field, fieldRules] of Object.entries(rules)) {\n const value = values[field];\n\n for (const rule of fieldRules) {\n const error = rule(value, values);\n if (error) {\n errors[field] = { type: 'validation', message: error };\n break;\n }\n }\n }\n\n return { values, errors };\n };\n}\n\n// Built-in validation rules\nexport const rules = {\n required: (message = 'This field is required') => (value) => {\n if (value === undefined || value === null || value === '') {\n return message;\n }\n },\n\n minLength: (min, message) => (value) => {\n if (typeof value === 'string' && value.length < min) {\n return message || `Must be at least ${min} characters`;\n }\n },\n\n maxLength: (max, message) => (value) => {\n if (typeof value === 'string' && value.length > max) {\n return message || `Must be at most ${max} characters`;\n }\n },\n\n min: (min, message) => (value) => {\n if (typeof value === 'number' && value < min) {\n return message || `Must be at least ${min}`;\n }\n },\n\n max: (max, message) => (value) => {\n if (typeof value === 'number' && value > max) {\n return message || `Must be at most ${max}`;\n }\n },\n\n pattern: (regex, message = 'Invalid format') => (value) => {\n if (typeof value === 'string' && !regex.test(value)) {\n return message;\n }\n },\n\n email: (message = 'Invalid email address') => (value) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (typeof value === 'string' && !emailRegex.test(value)) {\n return message;\n }\n },\n\n url: (message = 'Invalid URL') => (value) => {\n try {\n if (typeof value === 'string' && value) {\n new URL(value);\n }\n } catch {\n return message;\n }\n },\n\n match: (field, message) => (value, values) => {\n if (value !== values[field]) {\n return message || `Must match ${field}`;\n }\n },\n\n custom: (validator) => validator,\n};\n\n// --- useField Hook ---\n// Individual field control\n\nexport function useField(name, options = {}) {\n const { validate: validateFn, defaultValue = '' } = options;\n\n const value = signal(defaultValue);\n const error = signal(null);\n const isTouched = signal(false);\n const isDirty = signal(false);\n\n async function validate() {\n if (!validateFn) return true;\n const result = await validateFn(value.peek());\n error.set(result || null);\n return !result;\n }\n\n return {\n name,\n value: () => value(),\n error: () => error(),\n isTouched: () => isTouched(),\n isDirty: () => isDirty(),\n setValue: (v) => {\n value.set(v);\n isDirty.set(true);\n },\n setError: (e) => error.set(e),\n validate,\n reset: () => {\n value.set(defaultValue);\n error.set(null);\n isTouched.set(false);\n isDirty.set(false);\n },\n inputProps: () => ({\n name,\n value: value(),\n onInput: (e) => {\n value.set(e.target.value);\n isDirty.set(true);\n },\n onBlur: () => {\n isTouched.set(true);\n validate();\n },\n }),\n };\n}\n\n// --- Controlled Input Components ---\n\nexport function Input(props) {\n const { register, error, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('input', {\n ...rest,\n ...registered,\n 'aria-invalid': error ? 'true' : undefined,\n });\n}\n\nexport function Textarea(props) {\n const { register, error, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('textarea', {\n ...rest,\n ...registered,\n 'aria-invalid': error ? 'true' : undefined,\n });\n}\n\nexport function Select(props) {\n const { register, error, children, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('select', {\n ...rest,\n ...registered,\n 'aria-invalid': error ? 'true' : undefined,\n }, children);\n}\n\nexport function Checkbox(props) {\n const { register, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('input', {\n type: 'checkbox',\n ...rest,\n ...registered,\n checked: registered.value,\n });\n}\n\nexport function Radio(props) {\n const { register, value: radioValue, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('input', {\n type: 'radio',\n value: radioValue,\n ...rest,\n checked: registered.value === radioValue,\n onChange: (e) => {\n if (e.target.checked && registered.onInput) {\n registered.onInput({ target: { value: radioValue } });\n }\n },\n });\n}\n\n// --- Form Error Display ---\n\nexport function ErrorMessage({ name, formState, errors, render }) {\n const error = formState && typeof formState.error === 'function'\n ? formState.error(name)\n : (\n (\n formState?.errors != null\n ? formState.errors\n : (typeof errors === 'function' ? errors() : errors)\n )?.[name] || null\n );\n if (!error) return null;\n\n if (render) {\n return render({ message: error.message, type: error.type });\n }\n\n return h('span', { class: 'what-error', role: 'alert' }, error.message);\n}\n", "// What Framework - Structured Error System\n// Agent-first error reporting with actionable codes, suggestions, and JSON output.\n// Every error tells an AI agent exactly what went wrong and how to fix it.\n\nimport { __DEV__ } from './reactive.js';\n\n// --- Error Codes ---\n// Each code maps to a specific, well-documented mistake pattern.\n\nexport const ERROR_CODES = {\n INFINITE_EFFECT: {\n code: 'ERR_INFINITE_EFFECT',\n severity: 'error',\n template: 'Effect \"{{effectName}}\" exceeded 25 flush iterations \u2014 likely an infinite loop.',\n suggestion: 'An effect is writing to a signal it also reads, creating a cycle. Use untrack() to read the signal without subscribing, or restructure so the write and read are in separate effects.',\n codeExample: `// Bad \u2014 reads and writes count, creating a cycle:\neffect(() => { count(count() + 1); });\n\n// Good \u2014 use untrack() so the read doesn't subscribe:\neffect(() => { count(untrack(count) + 1); });\n\n// Better \u2014 split into separate logic:\nconst doubled = computed(() => count() * 2);`,\n },\n\n MISSING_SIGNAL_READ: {\n code: 'ERR_MISSING_SIGNAL_READ',\n severity: 'warning',\n template: 'Signal \"{{signalName}}\" used without calling () \u2014 renders as \"[Function]\" instead of its value.',\n suggestion: 'Signals are functions. Call them to read: count() not count. In JSX: {count()} not {count}.',\n codeExample: `// Bad \u2014 signal reference, not value:\n<span>{count}</span> // renders \"[Function]\"\n\n// Good \u2014 call the signal:\n<span>{count()}</span> // renders the actual value`,\n },\n\n HYDRATION_MISMATCH: {\n code: 'ERR_HYDRATION_MISMATCH',\n severity: 'error',\n template: 'Hydration mismatch in component \"{{component}}\": server rendered \"{{serverHTML}}\" but client expects \"{{clientHTML}}\".',\n suggestion: 'Ensure server and client render identical initial HTML. Avoid reading browser-only APIs (window, localStorage) during the initial render. Use onMount() for client-only logic.',\n codeExample: `// Bad \u2014 different on server vs client:\nfunction App() {\n return <p>{window.innerWidth}</p>;\n}\n\n// Good \u2014 use onMount for client-only values:\nfunction App() {\n const width = signal(0);\n onMount(() => width(window.innerWidth));\n return <p>{width()}</p>;\n}`,\n },\n\n ORPHAN_EFFECT: {\n code: 'ERR_ORPHAN_EFFECT',\n severity: 'warning',\n template: 'Effect \"{{effectName}}\" was created outside a reactive root \u2014 it will never be cleaned up.',\n suggestion: 'Wrap effect creation in createRoot() or create effects inside component functions where they are automatically tracked.',\n codeExample: `// Bad \u2014 orphaned, leaks memory:\neffect(() => console.log(count()));\n\n// Good \u2014 inside a root with cleanup:\ncreateRoot(dispose => {\n effect(() => console.log(count()));\n // later: dispose() cleans up\n});`,\n },\n\n SIGNAL_WRITE_IN_RENDER: {\n code: 'ERR_SIGNAL_WRITE_IN_RENDER',\n severity: 'error',\n template: 'Signal \"{{signalName}}\" written during render of component \"{{component}}\". This triggers re-execution.',\n suggestion: 'Move signal writes into event handlers, effects, or onMount(). The component body should only read signals, not write them.',\n codeExample: `// Bad \u2014 write during render:\nfunction Counter() {\n count(count() + 1); // triggers infinite loop\n return <span>{count()}</span>;\n}\n\n// Good \u2014 write in event handler:\nfunction Counter() {\n return <button onclick={() => count(c => c + 1)}>{count()}</button>;\n}`,\n },\n\n MISSING_CLEANUP: {\n code: 'ERR_MISSING_CLEANUP',\n severity: 'warning',\n template: 'Effect sets up \"{{resource}}\" but does not return a cleanup function.',\n suggestion: 'Effects that add event listeners, set timers, or open connections should return a cleanup function to prevent memory leaks.',\n codeExample: `// Bad \u2014 no cleanup:\neffect(() => {\n window.addEventListener('resize', handler);\n});\n\n// Good \u2014 return cleanup:\neffect(() => {\n window.addEventListener('resize', handler);\n return () => window.removeEventListener('resize', handler);\n});`,\n },\n\n UNSAFE_INNERHTML: {\n code: 'ERR_UNSAFE_INNERHTML',\n severity: 'warning',\n template: 'innerHTML set on element without using the __html safety marker.',\n suggestion: 'Use the html tagged template literal or pass { __html: content } to mark innerHTML as intentional and reviewed.',\n codeExample: `// Bad \u2014 raw innerHTML (XSS risk):\n<div innerHTML={userInput} />\n\n// Good \u2014 explicit opt-in:\n<div innerHTML={{ __html: sanitizedContent }} />\n\n// Better \u2014 use the html template literal:\nhtml\\`<div>\\${sanitizedContent}</div>\\``,\n },\n\n MISSING_KEY: {\n code: 'ERR_MISSING_KEY',\n severity: 'warning',\n template: 'List rendered without key prop in component \"{{component}}\". Items may re-order incorrectly.',\n suggestion: 'Add a unique key prop to each item in a list. Use a stable identifier (like an ID), not the array index.',\n codeExample: `// Bad \u2014 no key:\n<For each={items()}>{item => <li>{item.name}</li>}</For>\n\n// Good \u2014 stable key:\n<For each={items()}>{item => <li key={item.id}>{item.name}</li>}</For>`,\n },\n};\n\n// --- WhatError ---\n// Structured error class with full context for agent consumption.\n\nexport class WhatError extends Error {\n constructor({ code, message, suggestion, file, line, component, signal, effect }) {\n super(message);\n this.name = 'WhatError';\n this.code = code;\n this.suggestion = suggestion;\n this.file = file;\n this.line = line;\n this.component = component;\n this.signal = signal;\n this.effect = effect;\n }\n\n toJSON() {\n return {\n code: this.code,\n message: this.message,\n suggestion: this.suggestion,\n file: this.file,\n line: this.line,\n component: this.component,\n signal: this.signal,\n effect: this.effect,\n };\n }\n}\n\n// --- Error Factory ---\n// Create WhatError instances from error codes with template interpolation.\n\nexport function createWhatError(errorCode, context = {}) {\n const def = typeof errorCode === 'string' ? ERROR_CODES[errorCode] : errorCode;\n if (!def) {\n return new WhatError({\n code: 'ERR_UNKNOWN',\n message: `Unknown error: ${errorCode}`,\n suggestion: 'Check the error code and try again.',\n });\n }\n\n // Interpolate template with context values\n let message = def.template;\n for (const [key, val] of Object.entries(context)) {\n message = message.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), String(val));\n }\n // Clean up any unreplaced placeholders\n message = message.replace(/\\{\\{[^}]+\\}\\}/g, '(unknown)');\n\n return new WhatError({\n code: def.code,\n message,\n suggestion: def.suggestion,\n file: context.file,\n line: context.line,\n component: context.component,\n signal: context.signal || context.signalName,\n effect: context.effect || context.effectName,\n });\n}\n\n// --- Error Collector ---\n// Dev-mode error accumulator for agent retrieval.\n\nlet collectedErrors = [];\nconst MAX_COLLECTED = 200;\n\nexport function collectError(whatError) {\n if (!__DEV__) return;\n collectedErrors.push({\n ...whatError.toJSON(),\n timestamp: Date.now(),\n });\n if (collectedErrors.length > MAX_COLLECTED) {\n collectedErrors = collectedErrors.slice(-MAX_COLLECTED);\n }\n}\n\nexport function getCollectedErrors(since) {\n if (since) return collectedErrors.filter(e => e.timestamp > since);\n return collectedErrors.slice();\n}\n\nexport function clearCollectedErrors() {\n collectedErrors = [];\n}\n\n// --- Error Classification ---\n// Classify a raw Error into a structured WhatError if possible.\n\nexport function classifyError(err, context = {}) {\n const msg = err?.message || String(err);\n\n // Infinite effect loop\n if (msg.includes('infinite effect loop') || msg.includes('25 iterations')) {\n return createWhatError('INFINITE_EFFECT', context);\n }\n\n // Hydration mismatch\n if (msg.includes('hydration') || msg.includes('Hydration')) {\n return createWhatError('HYDRATION_MISMATCH', context);\n }\n\n // Signal write in computed\n if (msg.includes('Signal.set() called inside a computed')) {\n return createWhatError('SIGNAL_WRITE_IN_RENDER', {\n ...context,\n signalName: msg.match(/signal: (\\w+)/)?.[1] || context.signalName,\n });\n }\n\n // Fallback \u2014 return a generic WhatError with the original message\n return new WhatError({\n code: 'ERR_RUNTIME',\n message: msg,\n suggestion: 'Check the stack trace and component context for more details.',\n ...context,\n });\n}\n", "// What Framework - Agent Guardrails\n// Dev-mode runtime checks that catch common mistakes BEFORE they become bugs.\n// Designed for AI agents: structured warnings with fix suggestions.\n\nimport { __DEV__ } from './reactive.js';\nimport { createWhatError, collectError } from './errors.js';\n\n// --- Guardrail Registry ---\n// Each guardrail can be enabled/disabled independently.\n\nconst guardrails = {\n signalReadDetection: true,\n effectCycleDetection: true,\n componentNaming: true,\n importValidation: true,\n};\n\nexport function configureGuardrails(overrides) {\n Object.assign(guardrails, overrides);\n}\n\nexport function getGuardrailConfig() {\n return { ...guardrails };\n}\n\n// --- Guardrail 1: Signal Read Detection ---\n// Detect when a signal function reference is used where its value was intended.\n// This catches the pattern: <span>{count}</span> (should be count())\n//\n// At runtime, we can detect this when a signal is coerced to string (via toString/valueOf)\n// and warn that it should be called.\n\nexport function installSignalReadGuardrail(signalFn, debugName) {\n if (!__DEV__ || !guardrails.signalReadDetection) return signalFn;\n\n // Override toString to catch template literal coercion\n const originalToString = signalFn.toString;\n signalFn.toString = function () {\n const err = createWhatError('MISSING_SIGNAL_READ', {\n signalName: debugName || '(unnamed)',\n });\n console.warn(`[what] ${err.message}\\n Suggestion: ${err.suggestion}`);\n collectError(err);\n // Still return the value so the app doesn't crash\n return String(signalFn());\n };\n\n // Override valueOf for numeric coercion contexts\n signalFn.valueOf = function () {\n const err = createWhatError('MISSING_SIGNAL_READ', {\n signalName: debugName || '(unnamed)',\n });\n console.warn(`[what] ${err.message}\\n Suggestion: ${err.suggestion}`);\n collectError(err);\n return signalFn();\n };\n\n return signalFn;\n}\n\n// --- Guardrail 2: Enhanced Effect Cycle Detection ---\n// Track which signals an effect reads AND writes.\n// If an effect writes to a signal it reads, warn about the specific cycle.\n\nconst effectWriteTracking = new WeakMap(); // effect -> Set of signal debug names\n\nexport function trackEffectSignalWrite(effectRef, signalDebugName) {\n if (!__DEV__ || !guardrails.effectCycleDetection) return;\n\n if (!effectWriteTracking.has(effectRef)) {\n effectWriteTracking.set(effectRef, new Set());\n }\n effectWriteTracking.get(effectRef).add(signalDebugName);\n}\n\nexport function checkEffectCycle(effectRef, readSignals) {\n if (!__DEV__ || !guardrails.effectCycleDetection) return null;\n\n const writes = effectWriteTracking.get(effectRef);\n if (!writes || writes.size === 0) return null;\n\n const overlapping = [];\n for (const sigName of readSignals) {\n if (writes.has(sigName)) {\n overlapping.push(sigName);\n }\n }\n\n if (overlapping.length > 0) {\n const err = createWhatError('INFINITE_EFFECT', {\n effectName: effectRef.fn?.name || '(anonymous)',\n signalName: overlapping.join(', '),\n });\n collectError(err);\n return err;\n }\n\n return null;\n}\n\n// --- Guardrail 3: Component Naming ---\n// Warn if a component function is not PascalCase.\n\nexport function checkComponentName(name) {\n if (!__DEV__ || !guardrails.componentNaming) return null;\n if (!name) return null;\n\n // PascalCase: starts with uppercase letter\n if (/^[A-Z]/.test(name)) return null;\n\n const suggestion = `Component \"${name}\" should use PascalCase (e.g., \"${capitalize(name)}\"). ` +\n 'PascalCase distinguishes components from HTML elements in JSX and is required by the What Framework compiler.';\n\n console.warn(`[what] ${suggestion}`);\n return { code: 'WARN_COMPONENT_NAMING', name, suggestion };\n}\n\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// --- Guardrail 4: Import Validation ---\n// Verify that all named imports from 'what-framework' are valid exports.\n\nconst VALID_EXPORTS = new Set([\n // Reactive primitives\n 'signal', 'computed', 'effect', 'signalMemo', 'batch', 'untrack', 'flushSync',\n 'createRoot', 'getOwner', 'runWithOwner', 'onRootCleanup', '__setDevToolsHooks',\n // Rendering\n 'template', '_template', 'svgTemplate', 'insert', 'mapArray', 'spread',\n 'setProp', 'delegateEvents', 'on', 'classList', 'hydrate', 'isHydrating',\n '_$createComponent',\n // JSX\n 'h', 'Fragment', 'html',\n // DOM\n 'mount',\n // Hooks\n 'useState', 'useSignal', 'useComputed', 'useEffect', 'useMemo', 'useCallback',\n 'useRef', 'useContext', 'useReducer', 'createContext', 'onMount', 'onCleanup',\n 'createResource',\n // Components\n 'memo', 'lazy', 'Suspense', 'ErrorBoundary', 'Show', 'For', 'Switch', 'Match', 'Island',\n // Store\n 'createStore', 'derived', 'storeComputed', 'atom',\n // Head\n 'Head', 'clearHead',\n // Utilities\n 'each', 'cls', 'style', 'debounce', 'throttle', 'useMediaQuery',\n 'useLocalStorage', 'useClickOutside', 'Portal', 'transition',\n // Scheduler\n 'scheduleRead', 'scheduleWrite', 'flushScheduler', 'measure', 'mutate',\n 'useScheduledEffect', 'nextFrame', 'raf', 'onResize', 'onIntersect', 'smoothScrollTo',\n // Animation\n 'spring', 'tween', 'easings', 'useTransition', 'useGesture', 'useAnimatedValue',\n 'createTransitionClasses', 'cssTransition',\n // Accessibility\n 'useFocus', 'useFocusRestore', 'useFocusTrap', 'FocusTrap', 'announce',\n 'announceAssertive', 'SkipLink', 'useAriaExpanded', 'useAriaSelected',\n 'useAriaChecked', 'useRovingTabIndex', 'VisuallyHidden', 'LiveRegion',\n 'useId', 'useIds', 'useDescribedBy', 'useLabelledBy', 'Keys', 'onKey', 'onKeys',\n // Skeleton\n 'Skeleton', 'SkeletonText', 'SkeletonAvatar', 'SkeletonCard', 'SkeletonTable',\n 'IslandSkeleton', 'useSkeleton', 'Placeholder', 'LoadingDots', 'Spinner',\n // Data fetching\n 'useFetch', 'useSWR', 'useQuery', 'useInfiniteQuery', 'invalidateQueries',\n 'prefetchQuery', 'setQueryData', 'getQueryData', 'clearCache', '__getCacheSnapshot',\n // Form\n 'useForm', 'useField', 'rules', 'simpleResolver', 'zodResolver', 'yupResolver',\n 'Input', 'Textarea', 'Select', 'Checkbox', 'Radio', 'ErrorMessage',\n]);\n\nexport function validateImports(importNames) {\n if (!__DEV__ || !guardrails.importValidation) return [];\n\n const invalid = [];\n for (const name of importNames) {\n if (!VALID_EXPORTS.has(name)) {\n invalid.push({\n name,\n message: `\"${name}\" is not a valid export from what-framework.`,\n suggestion: `Check the API reference. Did you mean: ${findClosest(name)}?`,\n });\n }\n }\n return invalid;\n}\n\n// Simple Levenshtein-based closest match\nfunction findClosest(input) {\n const lower = input.toLowerCase();\n let best = null;\n let bestDist = Infinity;\n\n for (const name of VALID_EXPORTS) {\n const dist = levenshtein(lower, name.toLowerCase());\n if (dist < bestDist) {\n bestDist = dist;\n best = name;\n }\n }\n\n return bestDist <= 3 ? best : '(no close match found)';\n}\n\nfunction levenshtein(a, b) {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix = [];\n for (let i = 0; i <= b.length; i++) matrix[i] = [i];\n for (let j = 0; j <= a.length; j++) matrix[0][j] = j;\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n const cost = b[i - 1] === a[j - 1] ? 0 : 1;\n matrix[i][j] = Math.min(\n matrix[i - 1][j] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j - 1] + cost,\n );\n }\n }\n return matrix[b.length][a.length];\n}\n", "// What Framework - Agent Context\n// Exposes a structured global for AI coding agents to discover and inspect the app.\n// Agents can read window.__WHAT_AGENT__ to understand the framework, its state, and health.\n\nimport { __DEV__ } from './reactive.js';\nimport { getCollectedErrors } from './errors.js';\n\n// --- Version ---\n// Read from package.json at build time; fallback to runtime constant.\nconst VERSION = '0.5.6';\n\n// --- Component Registry ---\n// Tracks mounted components for agent inspection.\nlet mountedComponents = [];\n\nexport function registerComponent(component) {\n if (!__DEV__) return;\n mountedComponents.push(component);\n}\n\nexport function unregisterComponent(component) {\n if (!__DEV__) return;\n const idx = mountedComponents.indexOf(component);\n if (idx >= 0) mountedComponents.splice(idx, 1);\n}\n\nexport function getMountedComponents() {\n return mountedComponents.slice();\n}\n\n// --- Signal Registry ---\n// Tracks active signals for agent inspection.\nlet activeSignals = [];\n\nexport function registerSignal(sig) {\n if (!__DEV__) return;\n activeSignals.push(sig);\n}\n\nexport function unregisterSignal(sig) {\n if (!__DEV__) return;\n const idx = activeSignals.indexOf(sig);\n if (idx >= 0) activeSignals.splice(idx, 1);\n}\n\nexport function getActiveSignals() {\n return activeSignals.slice();\n}\n\n// --- Health Check ---\n// Quick health assessment for agents.\n\nexport function getHealth() {\n const errors = getCollectedErrors();\n const recentErrors = errors.filter(e => Date.now() - e.timestamp < 60000);\n\n // Check for effect cycles\n const cycleErrors = errors.filter(e => e.code === 'ERR_INFINITE_EFFECT');\n const effectCycleRisk = cycleErrors.length > 0;\n\n // Check for orphan effects (effects outside roots)\n const orphanErrors = errors.filter(e => e.code === 'ERR_ORPHAN_EFFECT');\n\n // Check for signal leaks (signals without subscribers that keep accumulating)\n const signalLeaks = activeSignals.filter(s => {\n if (s._subs && s._subs.size === 0) return true;\n return false;\n }).length;\n\n // Memory pressure heuristic\n const totalSignals = activeSignals.length;\n const memoryPressure = totalSignals > 10000 ? 'high'\n : totalSignals > 1000 ? 'medium'\n : 'low';\n\n return {\n effectCycleRisk,\n orphanEffects: orphanErrors.length,\n signalLeaks,\n memoryPressure,\n recentErrorCount: recentErrors.length,\n totalSignals,\n totalComponents: mountedComponents.length,\n };\n}\n\n// --- Install Agent Context ---\n// Call this during app initialization (dev mode only) to expose the global.\n\nexport function installAgentContext() {\n if (!__DEV__) return;\n if (typeof globalThis === 'undefined') return;\n\n globalThis.__WHAT_AGENT__ = {\n framework: 'what-framework',\n version: VERSION,\n mode: 'development',\n features: ['signals', 'effects', 'computed', 'ssr', 'islands', 'router', 'stores', 'forms', 'animations', 'a11y'],\n\n // Live accessors \u2014 always return current state\n components: () => getMountedComponents().map(c => ({\n id: c.id,\n name: c.name || c.displayName || c.constructor?.name,\n })),\n\n signals: () => getActiveSignals().map((s, i) => ({\n id: i,\n name: s._debugName || `signal_${i}`,\n value: typeof s === 'function' ? s.peek?.() : undefined,\n subscriberCount: s._subs ? s._subs.size : 0,\n })),\n\n errors: () => getCollectedErrors(),\n\n health: () => getHealth(),\n\n // Metadata for agents\n api: {\n reactive: ['signal', 'computed', 'effect', 'batch', 'untrack', 'flushSync', 'createRoot', 'memo'],\n hooks: ['useState', 'useSignal', 'useComputed', 'useEffect', 'useMemo', 'useCallback', 'useRef', 'useContext', 'onMount', 'onCleanup'],\n components: ['Show', 'For', 'Switch', 'Match', 'Suspense', 'ErrorBoundary', 'lazy', 'Island'],\n data: ['useSWR', 'useQuery', 'useFetch', 'useInfiniteQuery'],\n store: ['createStore', 'derived', 'atom'],\n },\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// What Framework - Reactive Primitives\n// Signals + Effects: fine-grained reactivity without virtual DOM overhead\n//\n// Upgrades:\n// - Topological ordering: computed/effects sorted by _level to prevent diamond glitches\n// - Iterative computed evaluation: no recursion, handles 10K+ depth chains\n// - Ownership tree: createRoot children auto-dispose when parent disposes\n// - Performance: cached levels, lazy sort, fast-path notify, minimal allocation\n\n// Dev-mode flag \u2014 build tools can dead-code-eliminate when false\nexport const __DEV__ = typeof process !== 'undefined'\n ? process.env?.NODE_ENV !== 'production'\n : true;\n\n// DevTools hooks \u2014 set by what-devtools when installed.\n// These are no-ops in production (dead-code eliminated with __DEV__).\nexport let __devtools = null;\n\n/** @internal Install devtools hooks. Called by what-devtools. */\nexport function __setDevToolsHooks(hooks) {\n if (__DEV__) __devtools = hooks;\n}\n\nlet currentEffect = null;\nlet currentRoot = null;\nlet currentOwner = null; // Ownership tree: tracks current owner context\nlet insideComputed = false; // Track whether we're inside a computed() callback (dev-mode warning)\nlet batchDepth = 0;\nlet pendingEffects = [];\nlet pendingNeedSort = false; // Track whether pendingEffects actually needs sorting\n\n// WeakMap: subscriber Set \u2192 owning computed's inner effect (null/absent for signals)\n// Used for topological level computation.\nconst subSetOwner = new WeakMap();\n\n// --- Iterative Computed Evaluation State ---\n// Uses a throw/catch trampoline to convert recursive computed evaluation\n// to iterative. When a computed fn() reads another dirty computed, instead\n// of recursing, we throw a sentinel that gets caught by the outer loop.\nconst NEEDS_UPSTREAM = Symbol('needs_upstream');\nlet iterativeEvalStack = null; // array when inside evaluation loop, null otherwise\n\n// --- Signal ---\n// A reactive value. Reading inside an effect auto-tracks the dependency.\n// Writing triggers only the effects that depend on this signal.\n\nexport function signal(initial, debugName) {\n let value = initial;\n const subs = new Set();\n\n // Unified getter/setter: sig() reads, sig(newVal) writes\n function sig(...args) {\n if (args.length === 0) {\n // Read\n if (currentEffect) {\n subs.add(currentEffect);\n currentEffect.deps.push(subs);\n }\n return value;\n }\n // Write\n if (__DEV__ && insideComputed) {\n console.warn(\n '[what] Signal.set() called inside a computed function. ' +\n 'This may cause infinite loops. Use effect() instead.' +\n (debugName ? ` (signal: ${debugName})` : '')\n );\n }\n const nextVal = typeof args[0] === 'function' ? args[0](value) : args[0];\n if (Object.is(value, nextVal)) return;\n value = nextVal;\n if (__DEV__ && __devtools) __devtools.onSignalUpdate(sig);\n if (subs.size > 0) notify(subs);\n }\n\n sig.set = (next) => {\n if (__DEV__ && insideComputed) {\n console.warn(\n '[what] Signal.set() called inside a computed function. ' +\n 'This may cause infinite loops. Use effect() instead.' +\n (debugName ? ` (signal: ${debugName})` : '')\n );\n }\n const nextVal = typeof next === 'function' ? next(value) : next;\n if (Object.is(value, nextVal)) return;\n value = nextVal;\n if (__DEV__ && __devtools) __devtools.onSignalUpdate(sig);\n if (subs.size > 0) notify(subs);\n };\n\n sig.peek = () => value;\n\n sig.subscribe = (fn) => {\n return effect(() => fn(sig()));\n };\n\n sig._signal = true;\n if (__DEV__) {\n sig._subs = subs;\n if (debugName) sig._debugName = debugName;\n }\n\n // Notify devtools of signal creation\n if (__DEV__ && __devtools) __devtools.onSignalCreate(sig);\n\n return sig;\n}\n\n// --- Computed ---\n// Derived signal. Lazy: only recomputes when a dependency changes AND it's read.\n// Topological level: max(dependency levels) + 1, computed from source signals (level 0).\n\nexport function computed(fn) {\n let value, dirty = true;\n const subs = new Set();\n\n const inner = _createEffect(() => {\n const prevInsideComputed = insideComputed;\n if (__DEV__) insideComputed = true;\n try {\n value = fn();\n dirty = false;\n } finally {\n if (__DEV__) insideComputed = prevInsideComputed;\n }\n }, true);\n\n // Computed nodes start at level 1. Updated when graph structure changes.\n inner._level = 1;\n inner._computed = true;\n inner._computedSubs = subs;\n\n // Register this subscriber set as owned by this computed\n subSetOwner.set(subs, inner);\n\n // Store markDirty/isDirty closures on the inner effect for iterative eval\n inner._markDirty = () => { dirty = true; };\n inner._isDirty = () => dirty;\n\n function read() {\n if (currentEffect) {\n subs.add(currentEffect);\n currentEffect.deps.push(subs);\n }\n if (dirty) _evaluateComputed(inner);\n return value;\n }\n\n // When a dependency changes, mark dirty AND propagate to our subscribers.\n inner._onNotify = () => {\n dirty = true;\n if (subs.size > 0) notify(subs);\n };\n\n read._signal = true;\n read.peek = () => {\n if (dirty) _evaluateComputed(inner);\n return value;\n };\n\n return read;\n}\n\n// --- Iterative Computed Evaluation ---\n//\n// Problem: A chain of N dirty computeds causes O(N) recursive calls:\n// C_N.read() \u2192 eval \u2192 fn() \u2192 C_{N-1}.read() \u2192 eval \u2192 fn() \u2192 ... \u2192 C_1.read() \u2192 eval \u2192 fn()\n// This overflows the stack at ~3500 depth.\n//\n// Solution: Throw/catch trampoline. The outermost _evaluateComputed manages a\n// stack (array). When a computed's fn() reads another dirty computed during\n// evaluation, _evaluateComputed throws NEEDS_UPSTREAM. The outer loop catches\n// this, adds the upstream to the stack, and processes from the bottom up.\n// This converts O(N) call depth to O(1) per computed (just the outermost loop).\n\nfunction _evaluateComputed(computedEffect) {\n if (iterativeEvalStack !== null) {\n // We're inside the outermost evaluation loop, and a computed's fn()\n // is reading another dirty computed. Push it onto the stack and throw\n // to abort the current fn() so the outer loop can process it first.\n iterativeEvalStack.push(computedEffect);\n throw NEEDS_UPSTREAM;\n }\n\n // Outermost call \u2014 enter the iterative evaluation loop.\n // The stack grows as we discover dirty upstream computeds.\n const stack = [computedEffect];\n iterativeEvalStack = stack;\n\n try {\n while (stack.length > 0) {\n const current = stack[stack.length - 1];\n\n if (!current._isDirty || !current._isDirty()) {\n // Already clean \u2014 pop and continue\n stack.pop();\n continue;\n }\n\n // Pre-scan known deps: if any are dirty computeds, push them onto\n // the stack first (bottom-up). This avoids the O(N^2) worst case\n // where throw/catch restarts from the top on each dirty upstream.\n let pushedUpstream = false;\n const deps = current.deps;\n for (let i = 0; i < deps.length; i++) {\n const depOwner = subSetOwner.get(deps[i]);\n if (depOwner && depOwner._computed && depOwner._isDirty && depOwner._isDirty()) {\n stack.push(depOwner);\n pushedUpstream = true;\n }\n }\n if (pushedUpstream) {\n // Process dirty upstreams first before re-evaluating current\n continue;\n }\n\n // All known deps are clean \u2014 evaluate. throw/catch is fallback\n // for newly-discovered deps only.\n try {\n const prevDepsLen = current.deps.length;\n _runEffect(current);\n // Only recompute level when graph structure changes\n if (current.deps.length !== prevDepsLen) {\n _updateLevel(current);\n }\n stack.pop(); // Successfully evaluated\n } catch (err) {\n if (err === NEEDS_UPSTREAM) {\n // A dirty upstream was discovered and pushed onto the stack.\n // Re-mark this computed dirty since its fn() was aborted mid-execution.\n current._markDirty();\n // The upstream is now at stack[stack.length-1]. Loop continues.\n } else {\n throw err; // Re-throw real errors\n }\n }\n }\n } finally {\n iterativeEvalStack = null;\n }\n}\n\n// Update the topological level of a computed/effect based on its current dependencies.\nfunction _updateLevel(e) {\n let maxDepLevel = 0;\n const deps = e.deps;\n for (let i = 0; i < deps.length; i++) {\n const owner = subSetOwner.get(deps[i]);\n if (owner) {\n const depLevel = owner._level;\n if (depLevel > maxDepLevel) maxDepLevel = depLevel;\n }\n }\n e._level = maxDepLevel + 1;\n}\n\n// --- Effect ---\n// Runs a function, auto-tracking signal reads. Re-runs when deps change.\n// Returns a dispose function.\n\nexport function effect(fn, opts) {\n const e = _createEffect(fn);\n e._level = 1;\n // First run: skip cleanup (deps is empty), just run and track\n const prev = currentEffect;\n currentEffect = e;\n try {\n const result = e.fn();\n if (typeof result === 'function') e._cleanup = result;\n } finally {\n currentEffect = prev;\n }\n // Compute level after first run based on actual dependencies (cached).\n _updateLevel(e);\n // Mark as stable after first run \u2014 subsequent re-runs skip cleanup/re-subscribe\n if (opts?.stable) e._stable = true;\n const dispose = () => _disposeEffect(e);\n // Register with current root for automatic cleanup\n if (currentRoot) {\n currentRoot.disposals.push(dispose);\n }\n return dispose;\n}\n\n// --- Batch ---\n// Group multiple signal writes; effects run once at the end.\n\nexport function batch(fn) {\n batchDepth++;\n try {\n fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) flush();\n }\n}\n\n// --- Internals ---\n\nfunction _createEffect(fn, lazy) {\n // Minimal object shape \u2014 computed() adds extra properties after creation.\n // Keeping the base object small helps V8 optimize for the common (effect) case.\n const e = {\n fn,\n deps: [], // array of subscriber sets (cheaper than Set for typical 1-3 deps)\n lazy: lazy || false,\n _onNotify: null,\n disposed: false,\n _pending: false,\n _stable: false, // stable effects skip cleanup/re-subscribe on re-run\n _level: 0, // topological depth: signals=0, computed/effects=max(deps)+1\n _computed: false, // true for computed inner effects\n _computedSubs: null, // reference to the computed's subscriber set\n _isDirty: null, // function to check if computed is dirty (set by computed())\n _markDirty: null, // function to mark computed dirty (set by computed())\n };\n if (__DEV__ && __devtools) __devtools.onEffectCreate(e);\n return e;\n}\n\nfunction _runEffect(e) {\n if (e.disposed) return;\n\n // Stable effect fast path: deps don't change, skip cleanup/re-subscribe.\n if (e._stable) {\n if (e._cleanup) {\n try { e._cleanup(); } catch (err) {\n if (__DEV__) console.warn('[what] Error in effect cleanup:', err);\n }\n e._cleanup = null;\n }\n const prev = currentEffect;\n currentEffect = null; // Don't re-track deps (already subscribed)\n try {\n const result = e.fn();\n if (typeof result === 'function') e._cleanup = result;\n } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n if (__DEV__) console.warn('[what] Error in stable effect:', err);\n } finally {\n currentEffect = prev;\n }\n if (__DEV__ && __devtools?.onEffectRun) __devtools.onEffectRun(e);\n return;\n }\n\n cleanup(e);\n // Run effect cleanup from previous run\n if (e._cleanup) {\n try { e._cleanup(); } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect-cleanup', effect: e });\n if (__DEV__) console.warn('[what] Error in effect cleanup:', err);\n }\n e._cleanup = null;\n }\n const prev = currentEffect;\n currentEffect = e;\n try {\n const result = e.fn();\n // Capture cleanup function if returned\n if (typeof result === 'function') {\n e._cleanup = result;\n }\n } catch (err) {\n if (err === NEEDS_UPSTREAM) throw err; // Iterative eval sentinel \u2014 not a real error\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n throw err;\n } finally {\n currentEffect = prev;\n }\n if (__DEV__ && __devtools?.onEffectRun) __devtools.onEffectRun(e);\n}\n\nfunction _disposeEffect(e) {\n e.disposed = true;\n if (__DEV__ && __devtools) __devtools.onEffectDispose(e);\n cleanup(e);\n // Run cleanup on dispose\n if (e._cleanup) {\n try { e._cleanup(); } catch (err) {\n if (__DEV__) console.warn('[what] Error in effect cleanup on dispose:', err);\n }\n e._cleanup = null;\n }\n}\n\nfunction cleanup(e) {\n const deps = e.deps;\n for (let i = 0; i < deps.length; i++) deps[i].delete(e);\n deps.length = 0;\n}\n\n// --- Notification ---\n// Iterative notification to prevent stack overflow on deep computed chains.\n// Uses a reusable queue to avoid per-call array allocation.\n// When notify() encounters _onNotify callbacks (from computeds), those may\n// call notify() recursively. The queue drains iteratively in the outermost call.\n\nlet notifyDepth = 0; // Tracks recursive notify depth\nlet notifyQueue = null; // Reusable queue, allocated on first recursive call\nlet notifyQueueLen = 0; // Length of the queue\n\nfunction notify(subs) {\n // Fast path: no recursive notifications in progress \u2014 iterate directly.\n // This avoids array allocation for the common case (signal \u2192 effects).\n if (notifyDepth === 0) {\n notifyDepth = 1;\n try {\n for (const e of subs) {\n if (e.disposed) continue;\n if (e._onNotify) {\n // Computed subscriber: mark dirty and propagate.\n // _onNotify may call notify() recursively \u2014 tracked by notifyDepth.\n e._onNotify();\n } else if (batchDepth === 0 && e._stable) {\n // Inline execution for stable effects\n const prev = currentEffect;\n currentEffect = null;\n try {\n const result = e.fn();\n if (typeof result === 'function') {\n if (e._cleanup) try { e._cleanup(); } catch (err) {}\n e._cleanup = result;\n }\n } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n if (__DEV__) console.warn('[what] Error in stable effect:', err);\n } finally {\n currentEffect = prev;\n }\n } else if (!e._pending) {\n e._pending = true;\n const level = e._level;\n const len = pendingEffects.length;\n if (len > 0 && pendingEffects[len - 1]._level > level) {\n pendingNeedSort = true;\n }\n pendingEffects.push(e);\n }\n }\n // Drain any queued subscriber sets from recursive notify calls\n if (notifyQueueLen > 0) {\n let qi = 0;\n while (qi < notifyQueueLen) {\n const queuedSubs = notifyQueue[qi];\n notifyQueue[qi] = null; // Allow GC\n qi++;\n for (const e of queuedSubs) {\n if (e.disposed) continue;\n if (e._onNotify) {\n e._onNotify();\n } else if (batchDepth === 0 && e._stable) {\n const prev = currentEffect;\n currentEffect = null;\n try {\n const result = e.fn();\n if (typeof result === 'function') {\n if (e._cleanup) try { e._cleanup(); } catch (err) {}\n e._cleanup = result;\n }\n } catch (err) {\n if (__devtools?.onError) __devtools.onError(err, { type: 'effect', effect: e });\n if (__DEV__) console.warn('[what] Error in stable effect:', err);\n } finally {\n currentEffect = prev;\n }\n } else if (!e._pending) {\n e._pending = true;\n const level = e._level;\n const len = pendingEffects.length;\n if (len > 0 && pendingEffects[len - 1]._level > level) {\n pendingNeedSort = true;\n }\n pendingEffects.push(e);\n }\n }\n }\n notifyQueueLen = 0;\n }\n } finally {\n notifyDepth = 0;\n }\n if (batchDepth === 0 && pendingEffects.length > 0) scheduleMicrotask();\n } else {\n // Recursive call \u2014 queue the subscriber set for the outermost call to drain.\n if (notifyQueue === null) notifyQueue = [];\n if (notifyQueueLen >= notifyQueue.length) {\n notifyQueue.push(subs);\n } else {\n notifyQueue[notifyQueueLen] = subs;\n }\n notifyQueueLen++;\n }\n}\n\nlet microtaskScheduled = false;\nfunction scheduleMicrotask() {\n if (!microtaskScheduled) {\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n flush();\n });\n }\n}\n\nlet isFlushing = false;\n\nfunction flush() {\n // Re-entrancy guard: if flush() is called during an active flush (e.g., via\n // flushSync() inside a component render or effect), skip to prevent infinite\n // recursion. Pending effects will be picked up by the outer flush's while-loop.\n if (isFlushing) return;\n isFlushing = true;\n\n try {\n let iterations = 0;\n while (pendingEffects.length > 0 && iterations < 25) {\n const batch = pendingEffects;\n pendingEffects = [];\n\n // Topological sort: execute effects in level order (lowest first).\n // Fast paths:\n // 1. Single effect \u2014 no sort needed (most common case for microtask flush)\n // 2. Already sorted \u2014 skip sort (common when effects added in level order)\n // 3. Multiple effects at different levels \u2014 sort required\n if (batch.length > 1 && pendingNeedSort) {\n batch.sort((a, b) => a._level - b._level);\n }\n pendingNeedSort = false;\n\n for (let i = 0; i < batch.length; i++) {\n const e = batch[i];\n e._pending = false;\n if (!e.disposed && !e._onNotify) {\n const prevDepsLen = e.deps.length;\n _runEffect(e);\n // Update level only if deps changed (graph structure change)\n if (!e._computed && e.deps.length !== prevDepsLen) {\n _updateLevel(e);\n }\n }\n }\n iterations++;\n }\n if (iterations >= 25) {\n // Clear pending effects to prevent further damage\n for (let i = 0; i < pendingEffects.length; i++) pendingEffects[i]._pending = false;\n pendingEffects.length = 0;\n\n if (__DEV__) {\n const remaining = pendingEffects.slice(0, 3);\n const effectNames = remaining.map(e => e.fn?.name || e.fn?.toString().slice(0, 60) || '(anonymous)');\n console.warn(\n `[what] Possible infinite effect loop detected (25 iterations). ` +\n `Likely cause: an effect writes to a signal it also reads, creating a cycle. ` +\n `Use untrack() to read signals without subscribing. ` +\n `Looping effects: ${effectNames.join(', ')}`\n );\n } else {\n console.warn('[what] Possible infinite effect loop detected');\n }\n }\n } finally {\n isFlushing = false;\n }\n}\n\n// --- Memo ---\n// Eager computed that only propagates when the value actually changes.\n// Fix: Instead of calling notify(subs) inline (which bypasses topological sort\n// and causes diamond-dependency glitches), push memo subscribers into\n// pendingEffects and let them go through the sorted flush() path.\nexport function memo(fn) {\n let value;\n const subs = new Set();\n\n const e = _createEffect(() => {\n const next = fn();\n if (!Object.is(value, next)) {\n value = next;\n // Push subscribers into pendingEffects for topological flush\n // instead of inline notify() which can cause diamond glitches\n for (const sub of subs) {\n if (sub.disposed) continue;\n if (sub._onNotify) {\n // Computed subscriber: mark dirty and propagate\n sub._onNotify();\n } else if (!sub._pending) {\n sub._pending = true;\n const level = sub._level;\n const len = pendingEffects.length;\n if (len > 0 && pendingEffects[len - 1]._level > level) {\n pendingNeedSort = true;\n }\n pendingEffects.push(sub);\n }\n }\n }\n });\n\n e._level = 1;\n\n _runEffect(e);\n _updateLevel(e);\n\n // Register subscriber set owner for level tracking\n subSetOwner.set(subs, e);\n\n // Register with current root\n if (currentRoot) {\n currentRoot.disposals.push(() => _disposeEffect(e));\n }\n\n function read() {\n if (currentEffect) {\n subs.add(currentEffect);\n currentEffect.deps.push(subs);\n }\n return value;\n }\n\n read._signal = true;\n read.peek = () => value;\n return read;\n}\n\n// --- flushSync ---\n// Force all pending effects to run synchronously. Use sparingly.\n// Calling during render or effect execution is a no-op (prevents infinite loops).\nexport function flushSync() {\n if (isFlushing) {\n // Re-entrant call \u2014 silently skip (Solid approach).\n // This prevents infinite loops when flushSync() is called during component\n // render or effect execution. Pending effects will be picked up by the\n // outer flush's while-loop.\n if (__DEV__) {\n console.warn(\n '[what] flushSync() called during an active flush (e.g., inside a component render or effect). ' +\n 'This is a no-op to prevent infinite loops. Move flushSync() to an event handler or onMount callback.'\n );\n }\n return;\n }\n if (currentEffect) {\n // Called inside an effect/render \u2014 skip with warning\n if (__DEV__) {\n console.warn(\n '[what] flushSync() called during effect execution. ' +\n 'This is a no-op to prevent infinite loops. Move flushSync() to an event handler or onMount callback.'\n );\n }\n return;\n }\n microtaskScheduled = false;\n flush();\n}\n\n// --- Untrack ---\n// Read signals without subscribing\nexport function untrack(fn) {\n const prev = currentEffect;\n currentEffect = null;\n try {\n return fn();\n } finally {\n currentEffect = prev;\n }\n}\n\n// --- getOwner / runWithOwner ---\n// Expose ownership context for advanced use cases (e.g., async operations\n// that need to register disposals with the correct owner).\n\nexport function getOwner() {\n return currentOwner;\n}\n\nexport function runWithOwner(owner, fn) {\n const prev = currentOwner;\n const prevRoot = currentRoot;\n currentOwner = owner;\n currentRoot = owner;\n try {\n return fn();\n } finally {\n currentOwner = prev;\n currentRoot = prevRoot;\n }\n}\n\n// --- createRoot ---\n// Isolated reactive scope with ownership tree.\n// All effects created inside are tracked and disposed together.\n// Child createRoot scopes register with parent owner \u2014 disposing parent\n// automatically disposes all children (prevents orphaned subscriptions).\nexport function createRoot(fn) {\n const prevRoot = currentRoot;\n const prevOwner = currentOwner;\n const root = {\n disposals: [],\n owner: currentOwner, // parent owner for ownership tree\n children: [], // child roots (ownership tree)\n _disposed: false,\n };\n\n // Register this root as a child of the parent owner\n if (currentOwner) {\n currentOwner.children.push(root);\n }\n\n currentRoot = root;\n currentOwner = root;\n\n try {\n const dispose = () => {\n if (root._disposed) return;\n root._disposed = true;\n\n // Dispose children first (depth-first, reverse order)\n for (let i = root.children.length - 1; i >= 0; i--) {\n _disposeRoot(root.children[i]);\n }\n root.children.length = 0;\n\n // Dispose own effects (reverse order for LIFO cleanup)\n for (let i = root.disposals.length - 1; i >= 0; i--) {\n root.disposals[i]();\n }\n root.disposals.length = 0;\n\n // Remove from parent's children list\n if (root.owner) {\n const idx = root.owner.children.indexOf(root);\n if (idx >= 0) root.owner.children.splice(idx, 1);\n }\n };\n return fn(dispose);\n } finally {\n currentRoot = prevRoot;\n currentOwner = prevOwner;\n }\n}\n\n// Internal: dispose a root and all its children\nfunction _disposeRoot(root) {\n if (root._disposed) return;\n root._disposed = true;\n\n // Dispose children first\n for (let i = root.children.length - 1; i >= 0; i--) {\n _disposeRoot(root.children[i]);\n }\n root.children.length = 0;\n\n // Dispose own effects\n for (let i = root.disposals.length - 1; i >= 0; i--) {\n root.disposals[i]();\n }\n root.disposals.length = 0;\n}\n\n// --- onCleanup ---\n// Register a cleanup function with the current owner/root.\n// Runs when the owner is disposed.\nexport function onCleanup(fn) {\n if (currentRoot) {\n currentRoot.disposals.push(fn);\n }\n}\n", "// What Framework - Element Descriptors\n// Minimal element descriptor objects. No classes, no fibers, just plain objects.\n\n// h(tag, props, ...children) -> VNode\n// h(Component, props, ...children) -> VNode\n// VNode = { tag, props, children, key }\n\nconst EMPTY_OBJ = Object.create(null);\nconst EMPTY_ARR = [];\n\nexport function h(tag, props, ...children) {\n props = props || EMPTY_OBJ;\n const flat = flattenChildren(children);\n const key = props.key ?? null;\n\n // Strip key from props passed to component/element\n if (props.key !== undefined) {\n props = { ...props };\n delete props.key;\n }\n\n return { tag, props, children: flat, key, _vnode: true };\n}\n\n// Fragment \u2014 just returns children\nexport function Fragment({ children }) {\n return children;\n}\n\nfunction flattenChildren(children) {\n const out = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child == null || child === false || child === true) continue;\n if (Array.isArray(child)) {\n out.push(...flattenChildren(child));\n } else if (typeof child === 'object' && child._vnode) {\n out.push(child);\n } else if (typeof child === 'function') {\n // Reactive child \u2014 preserve function for fine-grained DOM updates\n out.push(child);\n } else {\n // Text node\n out.push(String(child));\n }\n }\n return out;\n}\n\n// JSX-like tagged template alternative (no build step needed)\n// html`<div class=\"foo\">${content}</div>`\n// Uses a simple parser, not full HTML \u2014 good enough for most cases.\n\nexport function html(strings, ...values) {\n const src = strings.reduce((acc, str, i) =>\n acc + str + (i < values.length ? `\\x00${i}\\x00` : ''), '');\n return parseTemplate(src, values);\n}\n\nfunction parseTemplate(src, values) {\n // Lightweight tagged template parser\n // Supports: <tag attr=\"val\">, <tag ...${spread}>, ${children}, self-closing\n src = src.trim();\n const nodes = [];\n let i = 0;\n\n while (i < src.length) {\n if (src[i] === '<') {\n const result = parseElement(src, i, values);\n if (result) {\n nodes.push(result.node);\n i = result.end;\n continue;\n }\n }\n // Text or interpolation\n const result = parseText(src, i, values);\n if (result.text) nodes.push(result.text);\n i = result.end;\n }\n\n return nodes.length === 1 ? nodes[0] : nodes;\n}\n\nfunction parseElement(src, start, values) {\n // Opening tag\n const openMatch = src.slice(start).match(/^<([a-zA-Z][a-zA-Z0-9-]*|[A-Z]\\w*)/);\n if (!openMatch) return null;\n\n const tag = openMatch[1];\n let i = start + openMatch[0].length;\n const props = {};\n\n // Parse attributes\n while (i < src.length) {\n // Skip whitespace\n while (i < src.length && /\\s/.test(src[i])) i++;\n\n // Self-closing or end of opening tag\n if (src.slice(i, i + 2) === '/>') {\n return { node: h(tag, Object.keys(props).length ? props : null), end: i + 2 };\n }\n if (src[i] === '>') {\n i++;\n break;\n }\n\n // Spread: ...${obj}\n if (src.slice(i, i + 3) === '...') {\n const placeholder = src.slice(i + 3).match(/^\\x00(\\d+)\\x00/);\n if (placeholder) {\n Object.assign(props, values[Number(placeholder[1])]);\n i += 3 + placeholder[0].length;\n continue;\n }\n }\n\n // Attribute: name=${val} or name=\"val\" or name\n const attrMatch = src.slice(i).match(/^([a-zA-Z_@:][a-zA-Z0-9_:.-]*)/);\n if (!attrMatch) break;\n\n const attrName = attrMatch[1];\n i += attrMatch[0].length;\n\n // Skip whitespace around =\n while (i < src.length && /\\s/.test(src[i])) i++;\n\n if (src[i] === '=') {\n i++;\n while (i < src.length && /\\s/.test(src[i])) i++;\n\n // Value is a placeholder\n const ph = src.slice(i).match(/^\\x00(\\d+)\\x00/);\n if (ph) {\n props[attrName] = values[Number(ph[1])];\n i += ph[0].length;\n } else if (src[i] === '\"' || src[i] === \"'\") {\n const q = src[i];\n i++;\n let val = '';\n while (i < src.length && src[i] !== q) {\n const tph = src.slice(i).match(/^\\x00(\\d+)\\x00/);\n if (tph) {\n val += String(values[Number(tph[1])]);\n i += tph[0].length;\n } else {\n val += src[i];\n i++;\n }\n }\n i++; // closing quote\n props[attrName] = val;\n }\n } else {\n props[attrName] = true;\n }\n }\n\n // Parse children until closing tag\n const children = [];\n const closeTag = `</${tag}>`;\n\n while (i < src.length) {\n if (src.slice(i, i + closeTag.length) === closeTag) {\n i += closeTag.length;\n break;\n }\n\n if (src[i] === '<') {\n const child = parseElement(src, i, values);\n if (child) {\n children.push(child.node);\n i = child.end;\n continue;\n }\n }\n\n const text = parseText(src, i, values);\n if (text.text != null) children.push(text.text);\n i = text.end;\n }\n\n return {\n node: h(tag, Object.keys(props).length ? props : null, ...children),\n end: i,\n };\n}\n\nfunction parseText(src, start, values) {\n let i = start;\n let text = '';\n\n while (i < src.length && src[i] !== '<') {\n const ph = src.slice(i).match(/^\\x00(\\d+)\\x00/);\n if (ph) {\n if (text.trim()) {\n return { text: text.trim(), end: i };\n }\n return { text: values[Number(ph[1])], end: i + ph[0].length };\n }\n text += src[i];\n i++;\n }\n\n return { text: text.trim() || null, end: i };\n}\n", "// What Framework - Component Utilities\n// memo, lazy, Suspense, ErrorBoundary\n\nimport { h } from './h.js';\nimport { signal, effect, untrack, __DEV__ } from './reactive.js';\n\n// Legacy errorBoundaryStack removed \u2014 tree-based resolution via _parentCtx._errorBoundary\n// is now the only mechanism. See reportError() below.\n\n// --- memo ---\n// In the run-once model, components execute exactly once and never re-render.\n// Signals update the DOM directly via fine-grained effects. Therefore, memo()\n// is a no-op identity wrapper \u2014 there is no re-render to skip.\n// Kept for API compatibility with React-style code.\n\nexport function memo(Component, _areEqual) {\n // No-op in run-once model \u2014 just return the component as-is\n const MemoWrapper = function MemoWrapper(props) {\n return Component(props);\n };\n MemoWrapper.displayName = `Memo(${Component.name || 'Anonymous'})`;\n return MemoWrapper;\n}\n\n// Injected by dom.js\nlet _getCurrentComponent = null;\nexport function _injectGetCurrentComponent(fn) { _getCurrentComponent = fn; }\n\nexport function shallowEqual(a, b) {\n if (a === b) return true;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.is(a[key], b[key])) return false;\n }\n return true;\n}\n\n// --- lazy ---\n// Code-split a component. Returns a wrapper that loads on first render.\n\nexport function lazy(loader) {\n let Component = null;\n let loadPromise = null;\n let loadError = null;\n const listeners = new Set();\n\n function LazyWrapper(props) {\n if (loadError) throw loadError;\n if (Component) return h(Component, props);\n\n if (!loadPromise) {\n loadPromise = loader()\n .then(mod => {\n Component = mod.default || mod;\n // Notify all waiting instances\n listeners.forEach(fn => fn());\n listeners.clear();\n })\n .catch(err => { loadError = err; });\n }\n\n // Throw promise for Suspense to catch\n throw loadPromise;\n }\n\n LazyWrapper.displayName = 'Lazy';\n LazyWrapper._lazy = true;\n LazyWrapper._onLoad = (fn) => {\n if (Component) fn();\n else listeners.add(fn);\n };\n return LazyWrapper;\n}\n\n// --- Suspense ---\n// Show fallback while children are loading (lazy components).\n// Works with lazy() and async components.\n\nexport function Suspense({ fallback, children }) {\n const loading = signal(false);\n const pendingPromises = new Set();\n\n // Suspense boundary marker\n const boundary = {\n _suspense: true,\n onSuspend(promise) {\n loading.set(true);\n pendingPromises.add(promise);\n promise.finally(() => {\n pendingPromises.delete(promise);\n if (pendingPromises.size === 0) {\n loading.set(false);\n }\n });\n },\n };\n\n return {\n tag: '__suspense',\n props: { boundary, fallback, loading },\n children: Array.isArray(children) ? children : [children],\n _vnode: true,\n };\n}\n\n// --- ErrorBoundary ---\n// Catch errors in children and show fallback.\n// Uses a signal to track error state so it works with reactive rendering.\n\nexport function ErrorBoundary({ fallback, children, onError }) {\n const errorState = signal(null);\n\n // Error handler that will be registered with the component tree\n const handleError = (error) => {\n errorState.set(error);\n if (onError) {\n try {\n onError(error);\n } catch (e) {\n console.error('Error in onError handler:', e);\n }\n }\n };\n\n // Reset function to recover from error\n const reset = () => errorState.set(null);\n\n return {\n tag: '__errorBoundary',\n props: { errorState, handleError, fallback, reset },\n children: Array.isArray(children) ? children : [children],\n _vnode: true,\n };\n}\n\n// Helper to report error to nearest boundary\n// Walks the component context tree (not a runtime stack) so async errors are caught\nexport function reportError(error, startCtx) {\n // Walk up the _parentCtx chain to find the nearest _errorBoundary\n let ctx = startCtx || _getCurrentComponent?.();\n while (ctx) {\n if (ctx._errorBoundary) {\n ctx._errorBoundary(error);\n return true;\n }\n ctx = ctx._parentCtx;\n }\n return false;\n}\n\n// _getCurrentComponent is already declared above and injected via _injectGetCurrentComponent\n\n// --- Show ---\n// Conditional rendering component. Cleaner than ternaries.\n\nexport function Show({ when, fallback = null, children }) {\n // when can be a signal or a value\n const condition = typeof when === 'function' ? when() : when;\n return condition ? children : fallback;\n}\n\n// --- For ---\n// Efficient list rendering with keyed reconciliation.\n\nexport function For({ each, fallback = null, children }) {\n const list = typeof each === 'function' ? each() : each;\n if (!list || list.length === 0) return fallback;\n\n // children should be a function (item, index) => vnode\n const renderFn = Array.isArray(children) ? children[0] : children;\n if (typeof renderFn !== 'function') {\n console.warn('[what] For: children must be a render function, e.g. <For each={items}>{(item) => ...}</For>');\n return fallback;\n }\n\n return list.map((item, index) => {\n const vnode = renderFn(item, index);\n // Auto-detect keys for efficient keyed reconciliation\n if (vnode && typeof vnode === 'object' && vnode.key == null) {\n if (item != null && typeof item === 'object') {\n // Use item.id or item.key if available\n if (item.id != null) vnode.key = item.id;\n else if (item.key != null) vnode.key = item.key;\n } else if (typeof item === 'string' || typeof item === 'number') {\n // Primitive items can be their own key\n vnode.key = item;\n }\n }\n return vnode;\n });\n}\n\n// --- Switch / Match ---\n// Multi-condition rendering (like switch statement).\n\nexport function Switch({ fallback = null, children }) {\n const kids = Array.isArray(children) ? children : [children];\n\n for (const child of kids) {\n if (child && child.tag === Match) {\n const condition = typeof child.props.when === 'function'\n ? child.props.when()\n : child.props.when;\n if (condition) {\n return child.children;\n }\n }\n }\n\n return fallback;\n}\n\nexport function Match({ when, children }) {\n // Match is just a marker component, Switch handles the logic\n return { tag: Match, props: { when }, children, _vnode: true };\n}\n\n// --- Island ---\n// Deferred hydration component for islands architecture.\n// Usage: h(Island, { component: Counter, mode: 'idle' })\n// The babel plugin compiles <Counter client:idle /> into this.\n\nexport function Island({ component: Component, mode, mediaQuery, ...props }) {\n const placeholder = h('div', { 'data-island': Component.name || 'Island', 'data-hydrate': mode });\n\n // We need to return a vnode that the reconciler can handle.\n // The actual hydration scheduling happens after mount via an effect.\n const wrapper = signal(null);\n const hydrated = signal(false);\n\n function doHydrate() {\n if (hydrated()) return;\n hydrated.set(true);\n // Render the actual component\n wrapper.set(h(Component, props));\n }\n\n // Schedule hydration based on mode\n function scheduleHydration(el) {\n switch (mode) {\n case 'load':\n queueMicrotask(doHydrate);\n break;\n\n case 'idle':\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(doHydrate);\n } else {\n setTimeout(doHydrate, 200);\n }\n break;\n\n case 'visible': {\n const observer = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting) {\n observer.disconnect();\n doHydrate();\n }\n });\n observer.observe(el);\n break;\n }\n\n case 'interaction': {\n const hydrate = () => {\n el.removeEventListener('click', hydrate);\n el.removeEventListener('focus', hydrate);\n el.removeEventListener('mouseenter', hydrate);\n doHydrate();\n };\n el.addEventListener('click', hydrate, { once: true });\n el.addEventListener('focus', hydrate, { once: true });\n el.addEventListener('mouseenter', hydrate, { once: true });\n break;\n }\n\n case 'media': {\n if (!mediaQuery) { doHydrate(); break; }\n const mq = window.matchMedia(mediaQuery);\n if (mq.matches) {\n queueMicrotask(doHydrate);\n } else {\n const checkMedia = () => {\n if (mq.matches) {\n mq.removeEventListener('change', checkMedia);\n doHydrate();\n }\n };\n mq.addEventListener('change', checkMedia);\n }\n break;\n }\n\n default:\n // Unknown mode, hydrate immediately\n queueMicrotask(doHydrate);\n }\n }\n\n // Use ref callback to get the DOM element and schedule hydration\n const refCallback = (el) => {\n if (el) scheduleHydration(el);\n };\n\n // Return: show placeholder until hydrated, then show the real component\n return h('div', { 'data-island': Component.name || 'Island', 'data-hydrate': mode, ref: refCallback },\n hydrated() ? wrapper() : null\n );\n}\n", "// What Framework - Helpers & Utilities\n// Commonly needed patterns, zero overhead.\n\nimport { signal, effect, __DEV__ } from './reactive.js';\n\n// --- each(list, fn) --- [DEPRECATED: use <For> component or .map() instead]\n// Keyed list rendering. Optimized for reconciliation.\nlet _eachWarned = false;\nexport function each(list, fn, keyFn) {\n if (!_eachWarned) {\n _eachWarned = true;\n console.warn('[what] each() is deprecated. Use the <For> component or Array.map() instead.');\n }\n if (!list || list.length === 0) return [];\n return list.map((item, index) => {\n const vnode = fn(item, index);\n if (keyFn && vnode && typeof vnode === 'object') {\n vnode.key = keyFn(item, index);\n }\n return vnode;\n });\n}\n\n// --- cls(...args) ---\n// Conditional class names. Like clsx but tiny.\n// cls('base', condition && 'active', { hidden: isHidden, bold: isBold })\nexport function cls(...args) {\n const classes = [];\n for (const arg of args) {\n if (!arg) continue;\n if (typeof arg === 'string') {\n classes.push(arg);\n } else if (typeof arg === 'object') {\n for (const [key, val] of Object.entries(arg)) {\n if (val) classes.push(key);\n }\n }\n }\n return classes.join(' ');\n}\n\n// --- style(obj) ---\n// Convert a style object to a CSS string for SSR.\nexport function style(obj) {\n if (typeof obj === 'string') return obj;\n return Object.entries(obj)\n .filter(([, v]) => v != null && v !== '')\n .map(([k, v]) => `${camelToKebab(k)}:${v}`)\n .join(';');\n}\n\nfunction camelToKebab(str) {\n return str.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n\n// --- debounce ---\n// Debounced signal updates.\nexport function debounce(fn, ms) {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), ms);\n };\n}\n\n// --- throttle ---\nexport function throttle(fn, ms) {\n let last = 0;\n return (...args) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n fn(...args);\n }\n };\n}\n\n// Component context ref \u2014 injected by dom.js to avoid circular imports\nlet _getCurrentComponentRef = null;\nexport function _setComponentRef(fn) { _getCurrentComponentRef = fn; }\n\n// --- useMediaQuery ---\n// Reactive media query. Returns a signal. Cleans up listener on component unmount.\nexport function useMediaQuery(query) {\n if (typeof window === 'undefined') return signal(false);\n const mq = window.matchMedia(query);\n const s = signal(mq.matches);\n const handler = (e) => s.set(e.matches);\n mq.addEventListener('change', handler);\n\n // Register cleanup if inside a component context\n const ctx = _getCurrentComponentRef?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => mq.removeEventListener('change', handler));\n }\n\n return s;\n}\n\n// --- useLocalStorage ---\n// Signal synced with localStorage. Cleans up listeners on component unmount.\nexport function useLocalStorage(key, initial) {\n let stored;\n try {\n const raw = localStorage.getItem(key);\n stored = raw !== null ? JSON.parse(raw) : initial;\n } catch {\n stored = initial;\n }\n\n const s = signal(stored);\n\n // Sync to localStorage on changes\n const dispose = effect(() => {\n try {\n localStorage.setItem(key, JSON.stringify(s()));\n } catch (e) {\n if (__DEV__) console.warn('[what] localStorage write failed (quota exceeded?):', e);\n }\n });\n\n // Listen for changes from other tabs\n let storageHandler = null;\n if (typeof window !== 'undefined') {\n storageHandler = (e) => {\n if (e.key === key && e.newValue !== null) {\n try { s.set(JSON.parse(e.newValue)); } catch (err) {\n if (__DEV__) console.warn('[what] localStorage parse failed:', err);\n }\n }\n };\n window.addEventListener('storage', storageHandler);\n }\n\n // Register cleanup if inside a component context\n const ctx = _getCurrentComponentRef?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n dispose();\n if (storageHandler) window.removeEventListener('storage', storageHandler);\n });\n }\n\n return s;\n}\n\n// --- portal ---\n// Render children into a different DOM container.\nexport function Portal({ target, children }) {\n // In SSR, just return null (portals are client-only)\n if (typeof document === 'undefined') return null;\n const container = typeof target === 'string'\n ? document.querySelector(target)\n : target;\n if (!container) return null;\n // The DOM reconciler will mount children here\n return { tag: '__portal', props: { container }, children: Array.isArray(children) ? children : [children], _vnode: true };\n}\n\n// --- useClickOutside ---\n// Detect clicks outside a ref'd element. Essential for dropdowns, modals, popovers.\nexport function useClickOutside(ref, handler) {\n if (typeof document === 'undefined') return;\n\n const listener = (e) => {\n const el = ref.current || ref;\n if (!el || el.contains(e.target)) return;\n handler(e);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n const ctx = _getCurrentComponentRef?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n });\n }\n}\n\n// --- Transition helper ---\n// Animate elements in/out. Returns props to spread on the element.\nexport function transition(name, active) {\n return {\n class: active ? `${name}-enter ${name}-enter-active` : `${name}-leave ${name}-leave-active`,\n };\n}\n", "// What Framework - Fine-Grained DOM Runtime\n// Components run ONCE. Signals create individual DOM effects.\n// No VDOM reconciler, no diffing \u2014 direct DOM manipulation driven by signals.\n\nimport { effect, batch, untrack, signal, __DEV__, __devtools } from './reactive.js';\nimport { reportError, _injectGetCurrentComponent, shallowEqual } from './components.js';\nimport { _setComponentRef } from './helpers.js';\n\n// SVG elements that need namespace\nconst SVG_ELEMENTS = new Set([\n 'svg', 'path', 'circle', 'rect', 'line', 'polyline', 'polygon', 'ellipse',\n 'g', 'defs', 'use', 'symbol', 'clipPath', 'mask', 'pattern', 'image',\n 'text', 'tspan', 'textPath', 'foreignObject', 'linearGradient', 'radialGradient', 'stop',\n 'marker', 'animate', 'animateTransform', 'animateMotion', 'set', 'filter',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix',\n 'feDiffuseLighting', 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feImage',\n 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'feSpecularLighting',\n 'feTile', 'feTurbulence',\n]);\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n// Track all mounted component contexts for disposal\nconst mountedComponents = new Set();\n\n// WeakMap: comment node \u2192 component context (for comment-node boundaries)\nconst _commentCtxMap = new WeakMap();\n\nfunction isDomNode(value) {\n if (!value || typeof value !== 'object') return false;\n if (typeof Node !== 'undefined' && value instanceof Node) return true;\n return typeof value.nodeType === 'number' && typeof value.nodeName === 'string';\n}\n\nfunction isVNode(value) {\n return !!value && typeof value === 'object' && (value._vnode === true || 'tag' in value);\n}\n\n// Dispose a component: run effect cleanups, hook cleanups, onCleanup callbacks\nfunction disposeComponent(ctx) {\n if (ctx.disposed) return;\n ctx.disposed = true;\n\n // Run cleanup callbacks\n if (ctx.cleanups) {\n for (const cleanup of ctx.cleanups) {\n try { cleanup(); } catch (e) { console.error('[what] cleanup error:', e); }\n }\n }\n\n // Run effect disposals\n if (ctx.effects) {\n for (const dispose of ctx.effects) {\n try { dispose(); } catch (e) { /* already disposed */ }\n }\n }\n\n // Run hook cleanups (useEffect return values)\n if (ctx.hooks) {\n for (const hook of ctx.hooks) {\n if (hook && typeof hook.cleanup === 'function') {\n try { hook.cleanup(); } catch (e) { console.error('[what] hook cleanup error:', e); }\n }\n }\n }\n\n // Run onCleanup callbacks\n if (ctx._cleanupCallbacks) {\n for (const fn of ctx._cleanupCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onCleanup error:', e); }\n }\n }\n\n if (__DEV__ && __devtools?.onComponentUnmount) __devtools.onComponentUnmount(ctx);\n mountedComponents.delete(ctx);\n}\n\n// Dispose all components and reactive effects attached to a DOM subtree\nexport function disposeTree(node) {\n if (!node) return;\n if (node._componentCtx) {\n disposeComponent(node._componentCtx);\n }\n // Check comment node WeakMap for component context\n const commentCtx = _commentCtxMap.get(node);\n if (commentCtx) {\n disposeComponent(commentCtx);\n }\n // Dispose reactive function child effects ({() => ...} wrappers)\n if (node._dispose) {\n try { node._dispose(); } catch (e) { /* already disposed */ }\n }\n // Dispose reactive prop effects (value: () => ..., class: () => ..., etc.)\n if (node._propEffects) {\n for (const key in node._propEffects) {\n try { node._propEffects[key](); } catch (e) { /* already disposed */ }\n }\n }\n if (node.childNodes) {\n for (const child of node.childNodes) {\n disposeTree(child);\n }\n }\n}\n\n// Mount a component tree into a DOM container\nexport function mount(vnode, container) {\n if (typeof container === 'string') {\n container = document.querySelector(container);\n }\n disposeTree(container); // Clean up any previous mount\n container.textContent = '';\n const node = createDOM(vnode, container);\n if (node) container.appendChild(node);\n return () => {\n disposeTree(container);\n container.textContent = '';\n };\n}\n\n// --- Create DOM from VNode ---\n\nexport function createDOM(vnode, parent, isSvg) {\n // Null/false/true \u2192 placeholder comment (preserves child indices for reconciliation)\n if (vnode == null || vnode === false || vnode === true) {\n return document.createComment('');\n }\n\n // Text\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n return document.createTextNode(String(vnode));\n }\n\n // DOM node passthrough (fine-grained components return real nodes)\n if (isDomNode(vnode)) {\n return vnode;\n }\n\n // Reactive function child \u2014 use comment markers (no wrapper element)\n // to avoid polluting the DOM and breaking CSS selectors like :first-child.\n if (typeof vnode === 'function') {\n const startMarker = document.createComment('fn');\n const endMarker = document.createComment('/fn');\n let currentNodes = [];\n // We need a parent to insert between markers. The caller (createElementFromVNode\n // or createComponent) will appendChild both markers and the content. We return\n // a document fragment containing start marker, then the effect will manage nodes\n // between start and end markers once they're in the real DOM.\n const frag = document.createDocumentFragment();\n frag.appendChild(startMarker);\n frag.appendChild(endMarker);\n\n const dispose = effect(() => {\n const val = vnode();\n const vnodes = (val == null || val === false || val === true)\n ? []\n : Array.isArray(val) ? val : [val];\n\n const realParent = endMarker.parentNode;\n if (!realParent) return; // not mounted yet \u2014 first run handled below\n\n // Remove old nodes between markers\n for (const old of currentNodes) {\n disposeTree(old);\n if (old.parentNode === realParent) realParent.removeChild(old);\n }\n currentNodes = [];\n\n // Add new nodes before endMarker\n for (const v of vnodes) {\n const node = createDOM(v, realParent, parent?._isSvg);\n if (node) {\n // If createDOM returned a DocumentFragment, track individual children\n // since fragment nodes get absorbed into the DOM on insertion.\n if (node.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */) {\n const children = Array.from(node.childNodes);\n realParent.insertBefore(node, endMarker);\n for (const child of children) currentNodes.push(child);\n } else {\n realParent.insertBefore(node, endMarker);\n currentNodes.push(node);\n }\n }\n }\n });\n\n startMarker._dispose = dispose;\n // Also store dispose on endMarker so disposeTree can find it from either marker\n endMarker._dispose = dispose;\n return frag;\n }\n\n // Array of vnodes\n if (Array.isArray(vnode)) {\n const frag = document.createDocumentFragment();\n for (const child of vnode) {\n const node = createDOM(child, parent, isSvg);\n if (node) frag.appendChild(node);\n }\n return frag;\n }\n\n // VNode with component tag \u2014 component runs ONCE\n if (isVNode(vnode) && typeof vnode.tag === 'function') {\n return createComponent(vnode, parent, isSvg);\n }\n\n // VNode with string tag \u2014 create element\n if (isVNode(vnode)) {\n return createElementFromVNode(vnode, parent, isSvg);\n }\n\n // Unknown \u2014 convert to text\n return document.createTextNode(String(vnode));\n}\n\n// --- Component Rendering ---\n// Components run ONCE. Props are passed as a signal for reactive access.\n\nconst componentStack = [];\n\nexport function getCurrentComponent() {\n return componentStack[componentStack.length - 1];\n}\n\n// Inject into components.js and helpers.js to avoid circular imports\n_injectGetCurrentComponent(getCurrentComponent);\n_setComponentRef(getCurrentComponent);\n\nexport function getComponentStack() {\n return componentStack;\n}\n\nfunction createComponent(vnode, parent, isSvg) {\n let { tag: Component, props, children } = vnode;\n\n // Class component detection\n if (typeof Component === 'function' &&\n (Component.prototype?.isReactComponent || Component.prototype?.render)) {\n const ClassComp = Component;\n Component = function ClassComponentBridge(props) {\n const instance = new ClassComp(props);\n return instance.render();\n };\n Component.displayName = ClassComp.displayName || ClassComp.name || 'ClassComponent';\n }\n\n // Handle special boundary components\n if (Component === '__errorBoundary' || vnode.tag === '__errorBoundary') {\n return createErrorBoundary(vnode, parent);\n }\n if (Component === '__suspense' || vnode.tag === '__suspense') {\n return createSuspenseBoundary(vnode, parent);\n }\n if (Component === '__portal' || vnode.tag === '__portal') {\n return createPortalDOM(vnode, parent);\n }\n\n // Component context for hooks\n const ctx = {\n hooks: [],\n hookIndex: 0,\n effects: [],\n cleanups: [],\n mounted: false,\n disposed: false,\n Component,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: (() => {\n let p = componentStack[componentStack.length - 1];\n while (p) {\n if (p._errorBoundary) return p._errorBoundary;\n p = p._parentCtx;\n }\n return null;\n })()\n };\n\n // Component boundaries: use comment nodes instead of <span style=\"display:contents\">\n // to avoid DOM pollution, CSS selector breakage, and a11y issues.\n const startComment = document.createComment('c:start');\n const endComment = document.createComment('c:end');\n _commentCtxMap.set(startComment, ctx);\n ctx._startComment = startComment;\n ctx._endComment = endComment;\n\n // Fragment to hold comment boundaries + component output\n const container = document.createDocumentFragment();\n container._componentCtx = ctx;\n ctx._wrapper = startComment; // Reference for context lookup\n\n // Track for disposal\n mountedComponents.add(ctx);\n if (__DEV__ && __devtools?.onComponentMount) __devtools.onComponentMount(ctx);\n\n // Props signal for reactive updates from parent\n const propsChildren = children.length === 0 ? undefined : children.length === 1 ? children[0] : children;\n const propsSignal = signal({ ...props, children: propsChildren });\n ctx._propsSignal = propsSignal;\n\n // Create a reactive props proxy: reading any prop inside an effect\n // will auto-track the dependency on the propsSignal. This makes prop\n // access reactive across re-renders without requiring the component\n // to be re-executed.\n const reactiveProps = new Proxy({}, {\n get(_, key) {\n // Access the signal to create a reactive dependency\n const current = propsSignal();\n return current[key];\n },\n has(_, key) {\n const current = propsSignal();\n return key in current;\n },\n ownKeys() {\n const current = propsSignal();\n return Reflect.ownKeys(current);\n },\n getOwnPropertyDescriptor(_, key) {\n const current = propsSignal();\n if (key in current) {\n return { value: current[key], writable: false, enumerable: true, configurable: true };\n }\n return undefined;\n },\n });\n\n // Component runs ONCE \u2014 not inside an effect\n componentStack.push(ctx);\n\n let result;\n try {\n result = Component(reactiveProps);\n } catch (error) {\n componentStack.pop();\n if (!reportError(error, ctx)) {\n console.error('[what] Uncaught error in component:', Component.name || 'Anonymous', error);\n throw error;\n }\n // Return fragment with just comment boundaries on error\n container.appendChild(startComment);\n container.appendChild(endComment);\n return container;\n }\n\n componentStack.pop();\n ctx.mounted = true;\n\n // Run onMount callbacks after DOM is ready\n if (ctx._mountCallbacks) {\n queueMicrotask(() => {\n if (ctx.disposed) return;\n for (const fn of ctx._mountCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onMount error:', e); }\n }\n });\n }\n\n // Build fragment: <!-- c:start --> [component output] <!-- c:end -->\n container.appendChild(startComment);\n const vnodes = Array.isArray(result) ? result : [result];\n for (const v of vnodes) {\n const node = createDOM(v, container, isSvg);\n if (node) container.appendChild(node);\n }\n container.appendChild(endComment);\n\n return container;\n}\n\n// Error boundary component handler\nfunction createErrorBoundary(vnode, parent) {\n const { errorState, handleError, fallback, reset } = vnode.props;\n const children = vnode.children;\n\n // Use comment node boundaries instead of <span style=\"display:contents\">\n // to avoid DOM pollution, CSS selector breakage, and a11y issues.\n const startComment = document.createComment('eb:start');\n const endComment = document.createComment('eb:end');\n\n const boundaryCtx = {\n hooks: [], hookIndex: 0, effects: [], cleanups: [],\n mounted: false, disposed: false,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: handleError,\n _startComment: startComment,\n _endComment: endComment,\n };\n _commentCtxMap.set(startComment, boundaryCtx);\n\n const container = document.createDocumentFragment();\n container._componentCtx = boundaryCtx;\n container.appendChild(startComment);\n container.appendChild(endComment);\n\n const dispose = effect(() => {\n const error = errorState();\n\n componentStack.push(boundaryCtx);\n\n // Remove old content between comment boundaries\n if (startComment.parentNode) {\n while (startComment.nextSibling && startComment.nextSibling !== endComment) {\n const old = startComment.nextSibling;\n disposeTree(old);\n old.parentNode.removeChild(old);\n }\n }\n\n let vnodes;\n if (error) {\n vnodes = typeof fallback === 'function' ? [fallback({ error, reset })] : [fallback];\n } else {\n vnodes = children;\n }\n\n vnodes = Array.isArray(vnodes) ? vnodes : [vnodes];\n\n for (const v of vnodes) {\n const node = createDOM(v, parent);\n if (node) {\n // Insert before endComment\n if (endComment.parentNode) {\n endComment.parentNode.insertBefore(node, endComment);\n } else {\n // Still in fragment before first mount\n container.insertBefore(node, endComment);\n }\n }\n }\n\n componentStack.pop();\n });\n\n boundaryCtx.effects.push(dispose);\n return container;\n}\n\n// Suspense boundary component handler\nfunction createSuspenseBoundary(vnode, parent) {\n const { boundary, fallback, loading } = vnode.props;\n const children = vnode.children;\n\n // Use comment node boundaries instead of <span style=\"display:contents\">\n // to avoid DOM pollution, CSS selector breakage, and a11y issues.\n const startComment = document.createComment('sb:start');\n const endComment = document.createComment('sb:end');\n\n const boundaryCtx = {\n hooks: [], hookIndex: 0, effects: [], cleanups: [],\n mounted: false, disposed: false,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _startComment: startComment,\n _endComment: endComment,\n };\n _commentCtxMap.set(startComment, boundaryCtx);\n\n const container = document.createDocumentFragment();\n container._componentCtx = boundaryCtx;\n container.appendChild(startComment);\n container.appendChild(endComment);\n\n const dispose = effect(() => {\n const isLoading = loading();\n const vnodes = isLoading ? [fallback] : children;\n const normalized = Array.isArray(vnodes) ? vnodes : [vnodes];\n\n componentStack.push(boundaryCtx);\n\n // Remove old content between comment boundaries\n if (startComment.parentNode) {\n while (startComment.nextSibling && startComment.nextSibling !== endComment) {\n const old = startComment.nextSibling;\n disposeTree(old);\n old.parentNode.removeChild(old);\n }\n }\n\n for (const v of normalized) {\n const node = createDOM(v, parent);\n if (node) {\n // Insert before endComment\n if (endComment.parentNode) {\n endComment.parentNode.insertBefore(node, endComment);\n } else {\n // Still in fragment before first mount\n container.insertBefore(node, endComment);\n }\n }\n }\n\n componentStack.pop();\n });\n\n boundaryCtx.effects.push(dispose);\n return container;\n}\n\n// Portal component handler\nfunction createPortalDOM(vnode, parent) {\n const { container } = vnode.props;\n const children = vnode.children;\n\n if (!container) {\n console.warn('[what] Portal: target container not found');\n return document.createComment('portal:empty');\n }\n\n const portalCtx = {\n hooks: [], hookIndex: 0, effects: [], cleanups: [],\n mounted: false, disposed: false,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n };\n\n const placeholder = document.createComment('portal');\n placeholder._componentCtx = portalCtx;\n\n const portalNodes = [];\n for (const child of children) {\n const node = createDOM(child, container);\n if (node) {\n container.appendChild(node);\n portalNodes.push(node);\n }\n }\n\n portalCtx._cleanupCallbacks = [() => {\n for (const node of portalNodes) {\n disposeTree(node);\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n }];\n\n return placeholder;\n}\n\n// --- Create Element from VNode ---\n// For h()-based VNodes with string tags\n\nfunction createElementFromVNode(vnode, parent, isSvg) {\n const { tag, props, children } = vnode;\n\n const svgContext = isSvg || SVG_ELEMENTS.has(tag);\n const el = svgContext\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n\n // Apply props\n if (props) {\n applyProps(el, props, {}, svgContext);\n }\n\n // Append children\n for (const child of children) {\n const node = createDOM(child, el, svgContext && tag !== 'foreignObject');\n if (node) el.appendChild(node);\n }\n\n el._vnode = vnode;\n return el;\n}\n\n// --- Prop Application ---\n// Only applied once for fine-grained (no diffing). Reactive props use effects.\n\nfunction applyProps(el, newProps, oldProps, isSvg) {\n newProps = newProps || {};\n oldProps = oldProps || {};\n\n for (const key in newProps) {\n if (key === 'key' || key === 'children') continue;\n\n // Handle ref\n if (key === 'ref') {\n if (typeof newProps.ref === 'function') newProps.ref(el);\n else if (newProps.ref) newProps.ref.current = el;\n continue;\n }\n\n setProp(el, key, newProps[key], isSvg);\n }\n}\n\nfunction setProp(el, key, value, isSvg) {\n // Reactive function props \u2014 wrap in effect for fine-grained updates\n if (typeof value === 'function' && !(key.startsWith('on') && key.length > 2) && key !== 'ref') {\n if (!el._propEffects) el._propEffects = {};\n if (el._propEffects[key]) {\n try { el._propEffects[key](); } catch (e) { /* already disposed */ }\n }\n el._propEffects[key] = effect(() => {\n const resolved = value();\n setProp(el, key, resolved, isSvg);\n });\n return;\n }\n\n // Event handlers\n if (key.startsWith('on') && key.length > 2) {\n let eventName = key.slice(2);\n let useCapture = false;\n if (eventName.endsWith('Capture')) {\n eventName = eventName.slice(0, -7);\n useCapture = true;\n }\n const event = eventName.toLowerCase();\n const storageKey = useCapture ? event + '_capture' : event;\n const old = el._events?.[storageKey];\n if (old && old._original === value) return;\n if (old) el.removeEventListener(event, old, useCapture);\n if (value == null) return;\n if (!el._events) el._events = {};\n const wrappedHandler = (e) => {\n if (!e.nativeEvent) e.nativeEvent = e;\n return untrack(() => value(e));\n };\n wrappedHandler._original = value;\n el._events[storageKey] = wrappedHandler;\n const eventOpts = value._eventOpts;\n el.addEventListener(event, wrappedHandler, eventOpts || useCapture || undefined);\n return;\n }\n\n // className / class\n if (key === 'className' || key === 'class') {\n if (isSvg) {\n el.setAttribute('class', value || '');\n } else {\n el.className = value || '';\n }\n return;\n }\n\n // Style\n if (key === 'style') {\n if (typeof value === 'string') {\n el.style.cssText = value;\n el._prevStyle = null;\n } else if (typeof value === 'object') {\n const oldStyle = el._prevStyle || {};\n for (const prop in oldStyle) {\n if (!(prop in value)) el.style[prop] = '';\n }\n for (const prop in value) {\n el.style[prop] = value[prop] ?? '';\n }\n el._prevStyle = { ...value };\n }\n return;\n }\n\n // dangerouslySetInnerHTML\n if (key === 'dangerouslySetInnerHTML') {\n el.innerHTML = value?.__html ?? '';\n return;\n }\n\n // innerHTML \u2014 require { __html: ... } wrapper to prevent XSS\n if (key === 'innerHTML') {\n if (value == null) return; // null/undefined \u2014 do nothing\n if (value && typeof value === 'object' && '__html' in value) {\n el.innerHTML = value.__html ?? '';\n } else {\n if (__DEV__) {\n console.warn(\n '[what] innerHTML received a raw string. This is a security risk (XSS). ' +\n 'Use innerHTML={{ __html: trustedString }} or dangerouslySetInnerHTML={{ __html: trustedString }} instead.'\n );\n }\n // Refuse to set raw string innerHTML \u2014 prevent XSS\n return;\n }\n return;\n }\n\n // Boolean attributes\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n return;\n }\n\n // data-* and aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n el.setAttribute(key, value);\n return;\n }\n\n // SVG\n if (isSvg) {\n if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n return;\n }\n\n // Default: property if exists, otherwise attribute\n if (key in el) {\n el[key] = value;\n } else {\n el.setAttribute(key, value);\n }\n}\n", "// What Framework - Fine-Grained Rendering Primitives\n// Solid-style rendering: components run once, signals create individual DOM effects.\n// No VDOM diffing \u2014 direct DOM manipulation with surgical signal-driven updates.\n\nimport { effect, untrack, createRoot, signal, __DEV__ } from './reactive.js';\nimport { createDOM, disposeTree, getCurrentComponent, getComponentStack } from './dom.js';\n\nexport { effect, untrack };\n\n// --- _$createComponent(Component, props, children) ---\n// Internal compiler target for component instantiation. The compiler emits calls\n// to this function instead of h() \u2014 keeping h() out of compiled output entirely.\n// Merges children into props and delegates to createDOM which calls createComponent.\n\nexport function _$createComponent(Component, props, children) {\n if (children && children.length > 0) {\n const mergedChildren = children.length === 1 ? children[0] : children;\n props = props ? { ...props, children: mergedChildren } : { children: mergedChildren };\n }\n // Build a VNode-like object and pass to createDOM which handles component execution\n return createDOM({ tag: Component, props: props || {}, children: children || [], key: null, _vnode: true });\n}\n\n// --- URL Sanitization for DOM attributes ---\n// Rejects javascript:, data:, vbscript: protocols (case-insensitive, trimmed).\n\nconst URL_ATTRS = new Set(['href', 'src', 'action', 'formaction', 'formAction']);\n\nfunction isSafeUrl(url) {\n if (typeof url !== 'string') return true; // non-string values are not URL-injection risks\n const normalized = url.trim().replace(/[\\s\\x00-\\x1f]/g, '').toLowerCase();\n if (normalized.startsWith('javascript:')) return false;\n if (normalized.startsWith('data:')) return false;\n if (normalized.startsWith('vbscript:')) return false;\n return true;\n}\n\n// --- template(html) ---\n// Pre-parse HTML string into a <template> element. Returns a factory function\n// that clones the DOM tree via cloneNode(true) \u2014 2-5x faster than createElement chains.\n// INTERNAL: Used by the compiler. Not intended for direct use by application code.\n// Exported as both `template` (for compiler output) and `_template` (to signal internal use).\n\n// Table child elements that need special parent wrapping for innerHTML parsing.\n// Browsers auto-correct bare <tr>, <td>, etc. when orphaned \u2014 wrapping prevents silent drops.\nconst TABLE_WRAPPERS = {\n tr: { depth: 2, wrap: '<table><tbody>', unwrap: '</tbody></table>' },\n td: { depth: 3, wrap: '<table><tbody><tr>', unwrap: '</tr></tbody></table>' },\n th: { depth: 3, wrap: '<table><tbody><tr>', unwrap: '</tr></tbody></table>' },\n thead: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n tbody: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n tfoot: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n colgroup: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n col: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n caption: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n};\n\n// SVG element tags that must be created in an SVG namespace context.\nconst SVG_ELEMENTS = new Set([\n 'svg', 'path', 'circle', 'rect', 'line', 'polyline', 'polygon', 'ellipse',\n 'g', 'defs', 'use', 'text', 'tspan', 'foreignObject', 'clipPath', 'mask',\n 'pattern', 'linearGradient', 'radialGradient', 'stop', 'marker', 'symbol',\n 'image', 'animate', 'animateTransform', 'animateMotion', 'set',\n 'filter', 'feGaussianBlur', 'feOffset', 'feMerge', 'feMergeNode',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite',\n 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feFlood', 'feImage', 'feMorphology', 'feSpecularLighting',\n 'feTile', 'feTurbulence', 'feDistantLight', 'fePointLight', 'feSpotLight',\n]);\n\nfunction getLeadingTag(html) {\n const m = html.match(/^<([a-zA-Z][a-zA-Z0-9]*)/);\n return m ? m[1] : '';\n}\n\n// Internal implementation \u2014 no warnings. Used by compiler via _$template.\nfunction _$templateImpl(html) {\n const trimmed = html.trim();\n const tag = getLeadingTag(trimmed);\n\n // SVG namespace: parse inside an SVG container then extract\n if (SVG_ELEMENTS.has(tag)) {\n return svgTemplate(trimmed);\n }\n\n // Table element wrapping: parse inside proper table parent then extract\n const tableInfo = TABLE_WRAPPERS[tag];\n if (tableInfo) {\n const t = document.createElement('template');\n t.innerHTML = tableInfo.wrap + trimmed + tableInfo.unwrap;\n // Navigate down through the wrapper to reach the actual element\n return () => {\n let node = t.content.firstChild;\n for (let i = 0; i < tableInfo.depth; i++) {\n node = node.firstChild;\n }\n return node.cloneNode(true);\n };\n }\n\n const t = document.createElement('template');\n t.innerHTML = trimmed;\n return () => t.content.firstChild.cloneNode(true);\n}\n\n// Public export \u2014 warns in dev mode that this is a compiler internal.\n// Application code should use JSX, which the compiler transforms into _$template calls.\nlet _templateWarned = false;\nexport function template(html) {\n if (__DEV__ && !_templateWarned) {\n _templateWarned = true;\n console.warn(\n '[what] template() is a compiler internal. Use JSX instead. ' +\n 'Direct calls with user input can lead to XSS vulnerabilities.'\n );\n }\n return _$templateImpl(html);\n}\n\n// Compiler-internal alias \u2014 preferred name for compiled output (no warning)\nexport { _$templateImpl as _$template };\n\n// Legacy alias kept for backwards compat\nexport { template as _template };\n\n// --- svgTemplate(html) ---\n// Parse SVG content inside an SVG namespace container. Without this, innerHTML on a\n// <template> element creates HTML-namespace nodes, making SVG elements invisible.\n// If the HTML is a complete <svg> tag, it is parsed inside a temporary <div> so the\n// browser uses the correct SVG namespace. For inner SVG elements (path, circle, etc.),\n// they are wrapped in an <svg> container for parsing and then extracted.\n\nexport function svgTemplate(html) {\n const trimmed = html.trim();\n const tag = getLeadingTag(trimmed);\n\n if (tag === 'svg') {\n // Complete <svg> element \u2014 parse in a div (browsers handle the namespace)\n const t = document.createElement('template');\n t.innerHTML = trimmed;\n return () => t.content.firstChild.cloneNode(true);\n }\n\n // Inner SVG element (path, circle, g, etc.) \u2014 wrap in <svg> for namespace context\n const t = document.createElement('template');\n t.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\">${trimmed}</svg>`;\n return () => t.content.firstChild.firstChild.cloneNode(true);\n}\n\n// --- insert(parent, child, marker?) ---\n// Reactive child insertion. Handles all child types:\n// - string/number \u2192 text node\n// - function \u2192 effect that updates text node reactively\n// - DOM node \u2192 append directly\n// - array \u2192 insert each element\n\nexport function insert(parent, child, marker) {\n if (typeof child === 'function') {\n let current = null;\n effect(() => {\n current = reconcileInsert(parent, child(), current, marker || null);\n });\n return current;\n }\n\n return reconcileInsert(parent, child, null, marker || null);\n}\n\nfunction isDomNode(value) {\n if (!value || typeof value !== 'object') return false;\n if (typeof Node !== 'undefined' && value instanceof Node) return true;\n return typeof value.nodeType === 'number' && typeof value.nodeName === 'string';\n}\n\nfunction isVNode(value) {\n return !!value && typeof value === 'object' && (value._vnode === true || 'tag' in value);\n}\n\nfunction isSvgParent(parent) {\n return typeof SVGElement !== 'undefined'\n && parent instanceof SVGElement\n && parent.tagName.toLowerCase() !== 'foreignobject';\n}\n\nfunction asNodeArray(value) {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction valuesToNodes(value, parent, out) {\n if (value == null || typeof value === 'boolean') return out;\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n valuesToNodes(value[i], parent, out);\n }\n return out;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n out.push(document.createTextNode(String(value)));\n return out;\n }\n\n if (isDomNode(value)) {\n out.push(value);\n return out;\n }\n\n if (isVNode(value)) {\n out.push(createDOM(value, parent, isSvgParent(parent)));\n return out;\n }\n\n out.push(document.createTextNode(String(value)));\n return out;\n}\n\nfunction sameNodeArray(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction reconcileInsert(parent, value, current, marker) {\n // Guard: parent must be a node that supports child operations.\n // This catches cases where a stale DOM reference (e.g., a comment node from\n // shifted childNodes indices) is mistakenly passed as the parent.\n if (!parent || typeof parent.insertBefore !== 'function') {\n if (__DEV__) {\n console.warn('[what] reconcileInsert called with invalid parent:', parent);\n }\n return current;\n }\n\n const targetMarker = marker || null;\n\n if (value == null || typeof value === 'boolean') {\n const oldNodes = asNodeArray(current);\n for (let i = 0; i < oldNodes.length; i++) {\n const oldNode = oldNodes[i];\n if (oldNode.parentNode === parent) {\n disposeTree(oldNode);\n parent.removeChild(oldNode);\n }\n }\n return null;\n }\n\n if ((typeof value === 'string' || typeof value === 'number')\n && current && !Array.isArray(current) && current.nodeType === 3) {\n const text = String(value);\n if (current.textContent !== text) current.textContent = text;\n return current;\n }\n\n const newNodes = valuesToNodes(value, parent, []);\n const oldNodes = asNodeArray(current);\n\n if (sameNodeArray(oldNodes, newNodes)) {\n return current;\n }\n\n const keep = new Set(newNodes);\n for (let i = 0; i < oldNodes.length; i++) {\n const oldNode = oldNodes[i];\n if (!keep.has(oldNode) && oldNode.parentNode === parent) {\n disposeTree(oldNode);\n parent.removeChild(oldNode);\n }\n }\n\n let ref = targetMarker;\n for (let i = newNodes.length - 1; i >= 0; i--) {\n const node = newNodes[i];\n if (node.parentNode !== parent || node.nextSibling !== ref) {\n // Guard against stale ref from nested reconciliation\n if (ref && ref.parentNode !== parent) ref = null;\n if (ref) parent.insertBefore(node, ref);\n else parent.appendChild(node);\n }\n ref = node;\n }\n\n if (newNodes.length === 0) return null;\n return newNodes.length === 1 ? newNodes[0] : newNodes;\n}\n\n// --- mapArray(source, mapFn, options?) ---\n// Reactive list rendering with per-item scopes.\n// Unkeyed: tracks items by reference. Keyed: tracks by key function.\n// With key + raw: mapFn receives (item, index) \u2014 raw item value. Items identified by key for\n// efficient DOM reuse/moves. Use when items have per-field signals (no wrapper needed).\n// With key (no raw): mapFn receives (itemAccessor, index) \u2014 accessor is a signal getter.\n// When item reference changes but key persists, the signal updates in place.\n// Without key: mapFn receives (item, index) \u2014 raw item value. New reference = new row.\n\nexport function mapArray(source, mapFn, options) {\n const keyFn = options?.key;\n const raw = options?.raw || false;\n\n return (parent, marker) => {\n let items = [];\n let mappedNodes = [];\n let disposeFns = [];\n // Keyed mode state: key \u2192 { itemSignal }. Null for raw/unkeyed modes.\n let keyedState = keyFn && !raw ? new Map() : null;\n\n const endMarker = document.createComment('/list');\n parent.insertBefore(endMarker, marker || null);\n\n effect(() => {\n const newItems = source() || [];\n if (keyFn) {\n reconcileKeyed(parent, endMarker, items, newItems, mappedNodes, disposeFns, mapFn, keyFn, keyedState);\n } else {\n reconcileList(parent, endMarker, items, newItems, mappedNodes, disposeFns, mapFn);\n }\n items = newItems.slice();\n });\n\n return endMarker;\n };\n}\n\nfunction reconcileList(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns, mapFn) {\n const newLen = newItems.length;\n const oldLen = oldItems.length;\n\n if (newLen === 0) {\n // Fast path: clear all \u2014 remove only this list's nodes, not all parent content\n if (oldLen > 0) {\n for (let i = 0; i < oldLen; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode === parent) {\n disposeTree(mappedNodes[i]);\n parent.removeChild(mappedNodes[i]);\n }\n }\n mappedNodes.length = 0;\n disposeFns.length = 0;\n }\n return;\n }\n\n if (oldLen === 0) {\n // Fast path: all new\n const frag = document.createDocumentFragment();\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const node = createRoot(dispose => {\n disposeFns[i] = dispose;\n return mapFn(item, i);\n });\n mappedNodes[i] = node;\n frag.appendChild(node);\n }\n parent.insertBefore(frag, endMarker);\n return;\n }\n\n // --- Common prefix/suffix skip ---\n let start = 0;\n const minLen = Math.min(oldLen, newLen);\n while (start < minLen && oldItems[start] === newItems[start]) start++;\n\n // If everything matches and same length, nothing changed\n if (start === oldLen && start === newLen) return;\n\n let oldEnd = oldLen - 1;\n let newEnd = newLen - 1;\n while (oldEnd >= start && newEnd >= start && oldItems[oldEnd] === newItems[newEnd]) {\n oldEnd--;\n newEnd--;\n }\n\n // Copy prefix/suffix into output arrays\n const newMapped = new Array(newLen);\n const newDispose = new Array(newLen);\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n // Suffix items: same item, possibly different index offset\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n // Only reconcile the middle section: start..newEnd (new) vs start..oldEnd (old)\n const midNewLen = newEnd - start + 1;\n const midOldLen = oldEnd - start + 1;\n\n if (midNewLen === 0) {\n // Only removals in the middle\n for (let i = start; i <= oldEnd; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode) mappedNodes[i].parentNode.removeChild(mappedNodes[i]);\n }\n } else if (midOldLen === 0) {\n // Only insertions in the middle\n const marker = start < newLen && newMapped[newEnd + 1] ? newMapped[newEnd + 1] : endMarker;\n const frag = document.createDocumentFragment();\n for (let i = start; i <= newEnd; i++) {\n const item = newItems[i];\n const idx = i;\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(item, idx);\n });\n frag.appendChild(newMapped[i]);\n }\n parent.insertBefore(frag, marker);\n } else {\n // General case: reconcile middle section with LIS\n _reconcileMiddle(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns,\n mapFn, start, oldEnd, newEnd, newMapped, newDispose);\n }\n\n // Update arrays in place\n mappedNodes.length = newLen;\n disposeFns.length = newLen;\n for (let i = 0; i < newLen; i++) {\n mappedNodes[i] = newMapped[i];\n disposeFns[i] = newDispose[i];\n }\n}\n\nfunction _reconcileMiddle(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns,\n mapFn, start, oldEnd, newEnd, newMapped, newDispose) {\n // Build index map only for the middle section\n const oldIdxMap = new Map();\n for (let i = start; i <= oldEnd; i++) {\n oldIdxMap.set(oldItems[i], i);\n }\n\n // Match old items to new positions, collect old indices for LIS\n const midLen = newEnd - start + 1;\n const oldIndices = new Int32Array(midLen); // -1 = new item\n oldIndices.fill(-1);\n\n for (let i = start; i <= newEnd; i++) {\n const oldIdx = oldIdxMap.get(newItems[i]);\n if (oldIdx !== undefined) {\n oldIdxMap.delete(newItems[i]);\n newMapped[i] = mappedNodes[oldIdx];\n newDispose[i] = disposeFns[oldIdx];\n oldIndices[i - start] = oldIdx;\n }\n }\n\n // Dispose removed items\n for (const [, oldIdx] of oldIdxMap) {\n disposeFns[oldIdx]?.();\n if (mappedNodes[oldIdx]?.parentNode) mappedNodes[oldIdx].parentNode.removeChild(mappedNodes[oldIdx]);\n }\n\n // Compute LIS on old indices of reused items\n // Build the sequence of old indices for reused items only\n const reusedCount = midLen - _countNeg1(oldIndices, midLen);\n\n // Use a bitfield (via Uint8Array) to mark LIS positions \u2014 avoids Set overhead\n const inLIS = new Uint8Array(midLen);\n\n if (reusedCount > 1) {\n const seq = new Int32Array(reusedCount);\n const seqToMid = new Int32Array(reusedCount); // maps seq index \u2192 mid index\n let k = 0;\n for (let i = 0; i < midLen; i++) {\n if (oldIndices[i] !== -1) {\n seq[k] = oldIndices[i];\n seqToMid[k] = i;\n k++;\n }\n }\n const lisResult = _lis(seq, reusedCount);\n for (let i = 0; i < lisResult.length; i++) {\n inLIS[seqToMid[lisResult[i]]] = 1;\n }\n } else if (reusedCount === 1) {\n // Single reused item is trivially in LIS\n for (let i = 0; i < midLen; i++) {\n if (oldIndices[i] !== -1) { inLIS[i] = 1; break; }\n }\n }\n\n // Create new items\n for (let i = start; i <= newEnd; i++) {\n if (!newMapped[i]) {\n const item = newItems[i];\n const idx = i;\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(item, idx);\n });\n }\n }\n\n // Position: work backwards from the item after newEnd (suffix start or endMarker)\n let nextSibling = newEnd + 1 < newMapped.length && newMapped[newEnd + 1]\n ? newMapped[newEnd + 1] : endMarker;\n\n for (let i = newEnd; i >= start; i--) {\n const mi = i - start;\n if (oldIndices[mi] === -1 || !inLIS[mi]) {\n // New item or moved item \u2014 insert\n // Guard against stale nextSibling from nested reconciliation\n if (nextSibling && nextSibling.parentNode !== parent) nextSibling = endMarker;\n parent.insertBefore(newMapped[i], nextSibling);\n }\n nextSibling = newMapped[i];\n }\n}\n\nfunction _countNeg1(arr, len) {\n let c = 0;\n for (let i = 0; i < len; i++) if (arr[i] === -1) c++;\n return c;\n}\n\n// Longest Increasing Subsequence \u2014 returns indices into the input array.\n// O(n log n) using patience sorting. Uses typed arrays for performance.\nfunction _lis(arr, len) {\n if (len === 0) return [];\n if (len === 1) return [0];\n\n const tails = new Int32Array(len); // indices into arr\n const predecessors = new Int32Array(len);\n let tailLen = 1;\n tails[0] = 0;\n predecessors[0] = -1;\n\n for (let i = 1; i < len; i++) {\n if (arr[i] > arr[tails[tailLen - 1]]) {\n predecessors[i] = tails[tailLen - 1];\n tails[tailLen++] = i;\n } else {\n let lo = 0, hi = tailLen - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (arr[tails[mid]] < arr[i]) lo = mid + 1;\n else hi = mid;\n }\n tails[lo] = i;\n predecessors[i] = lo > 0 ? tails[lo - 1] : -1;\n }\n }\n\n const result = new Array(tailLen);\n let k = tails[tailLen - 1];\n for (let i = tailLen - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n return result;\n}\n\n// --- reconcileKeyed ---\n// Keyed reconciliation: tracks items by key function, not by reference.\n// When a key persists but its item reference changes, the item signal updates\n// in place \u2014 no DOM node destruction/creation. Only effects reading the\n// item accessor re-run (e.g., textContent update for changed label).\n\nfunction reconcileKeyed(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns, mapFn, keyFn, keyedState) {\n const newLen = newItems.length;\n const oldLen = oldItems.length;\n\n // --- Fast path: clear all ---\n if (newLen === 0) {\n if (oldLen > 0) {\n // Call dispose functions to run cleanup callbacks (onCleanup, effect cleanups).\n // Without this, cleanup callbacks leak.\n for (let i = 0; i < oldLen; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode === parent) {\n disposeTree(mappedNodes[i]);\n parent.removeChild(mappedNodes[i]);\n }\n }\n mappedNodes.length = 0;\n disposeFns.length = 0;\n if (keyedState) keyedState.clear();\n }\n return;\n }\n\n // --- Fast path: all new ---\n if (oldLen === 0) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const idx = i;\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item; // raw mode: pass item directly\n }\n const node = createRoot(dispose => {\n disposeFns[idx] = dispose;\n return mapFn(accessor, idx);\n });\n mappedNodes[i] = node;\n frag.appendChild(node);\n }\n parent.insertBefore(frag, endMarker);\n return;\n }\n\n // --- Common prefix: skip matching keys at the start ---\n let start = 0;\n const minLen = Math.min(oldLen, newLen);\n while (start < minLen) {\n // Fast path: same reference \u2192 same key, no update needed\n if (oldItems[start] === newItems[start]) { start++; continue; }\n const oldKey = keyFn(oldItems[start]);\n const newKey = keyFn(newItems[start]);\n if (oldKey !== newKey) break;\n // Key matches but reference changed \u2014 update signal (non-raw mode only)\n if (keyedState) keyedState.get(oldKey).itemSig.set(newItems[start]);\n start++;\n }\n\n // --- Common suffix: skip matching keys at the end ---\n let oldEnd = oldLen - 1;\n let newEnd = newLen - 1;\n while (oldEnd >= start && newEnd >= start) {\n if (oldItems[oldEnd] === newItems[newEnd]) { oldEnd--; newEnd--; continue; }\n const oldKey = keyFn(oldItems[oldEnd]);\n const newKey = keyFn(newItems[newEnd]);\n if (oldKey !== newKey) break;\n if (keyedState) keyedState.get(oldKey).itemSig.set(newItems[newEnd]);\n oldEnd--;\n newEnd--;\n }\n\n // If everything matched, nothing to do\n if (start > oldEnd && start > newEnd) {\n // Just copy existing mappings to output\n return;\n }\n\n // Copy prefix/suffix into output arrays\n const newMapped = new Array(newLen);\n const newDispose = new Array(newLen);\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n const midNewLen = newEnd - start + 1;\n const midOldLen = oldEnd - start + 1;\n\n // --- Only additions in middle ---\n if (midOldLen === 0) {\n const marker = newEnd + 1 < newLen && newMapped[newEnd + 1] ? newMapped[newEnd + 1] : endMarker;\n const frag = document.createDocumentFragment();\n for (let i = start; i <= newEnd; i++) {\n const item = newItems[i];\n const idx = i;\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item;\n }\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(accessor, idx);\n });\n frag.appendChild(newMapped[i]);\n }\n parent.insertBefore(frag, marker);\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n\n // --- Only removals in middle ---\n if (midNewLen === 0) {\n for (let i = start; i <= oldEnd; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode) parent.removeChild(mappedNodes[i]);\n if (keyedState) keyedState.delete(keyFn(oldItems[i]));\n }\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n\n // --- General case: reconcile middle section ---\n // Build old key \u2192 old index map for middle section only\n const oldKeyMap = new Map();\n for (let i = start; i <= oldEnd; i++) {\n oldKeyMap.set(keyFn(oldItems[i]), i);\n }\n\n const oldIndices = new Int32Array(midNewLen);\n oldIndices.fill(-1);\n\n // Match by key\n for (let i = start; i <= newEnd; i++) {\n const key = keyFn(newItems[i]);\n const oldIdx = oldKeyMap.get(key);\n if (oldIdx !== undefined) {\n oldKeyMap.delete(key);\n newMapped[i] = mappedNodes[oldIdx];\n newDispose[i] = disposeFns[oldIdx];\n oldIndices[i - start] = oldIdx;\n // Update item signal if reference changed (non-raw mode only)\n if (keyedState && newItems[i] !== oldItems[oldIdx]) {\n keyedState.get(key).itemSig.set(newItems[i]);\n }\n }\n }\n\n // Dispose removed items\n for (const [key, oldIdx] of oldKeyMap) {\n disposeFns[oldIdx]?.();\n if (mappedNodes[oldIdx]?.parentNode) parent.removeChild(mappedNodes[oldIdx]);\n if (keyedState) keyedState.delete(key);\n }\n\n // Create new items\n for (let i = start; i <= newEnd; i++) {\n if (!newMapped[i]) {\n const item = newItems[i];\n const idx = i;\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item;\n }\n newMapped[i] = createRoot(dispose => {\n newDispose[idx] = dispose;\n return mapFn(accessor, idx);\n });\n }\n }\n\n // Position using LIS\n // First check: are reused items already in order? (common for update-in-place)\n let reusedCount = 0;\n let alreadySorted = true;\n let lastOldIdx = -1;\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) {\n reusedCount++;\n if (oldIndices[i] <= lastOldIdx) alreadySorted = false;\n lastOldIdx = oldIndices[i];\n }\n }\n\n const inLIS = new Uint8Array(midNewLen);\n\n if (alreadySorted) {\n // All reused items are in order \u2014 mark all as in LIS (no moves needed)\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) inLIS[i] = 1;\n }\n } else if (reusedCount > 1) {\n const seq = new Int32Array(reusedCount);\n const seqToMid = new Int32Array(reusedCount);\n let k = 0;\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) {\n seq[k] = oldIndices[i];\n seqToMid[k] = i;\n k++;\n }\n }\n const lisResult = _lis(seq, reusedCount);\n for (let i = 0; i < lisResult.length; i++) {\n inLIS[seqToMid[lisResult[i]]] = 1;\n }\n } else if (reusedCount === 1) {\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) { inLIS[i] = 1; break; }\n }\n }\n\n // Position: work backwards, insert items not in LIS\n let nextSibling = newEnd + 1 < newMapped.length && newMapped[newEnd + 1]\n ? newMapped[newEnd + 1] : endMarker;\n\n for (let i = newEnd; i >= start; i--) {\n const mi = i - start;\n if (oldIndices[mi] === -1 || !inLIS[mi]) {\n // Guard against stale nextSibling from nested reconciliation\n if (nextSibling && nextSibling.parentNode !== parent) nextSibling = endMarker;\n parent.insertBefore(newMapped[i], nextSibling);\n }\n nextSibling = newMapped[i];\n }\n\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n}\n\nfunction _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen) {\n mappedNodes.length = newLen;\n disposeFns.length = newLen;\n for (let i = 0; i < newLen; i++) {\n mappedNodes[i] = newMapped[i];\n disposeFns[i] = newDispose[i];\n }\n}\n\n// --- spread(el, props) ---\n// Fine-grained prop effects. Function props create individual effects.\n// Event props use direct assignment.\n\nexport function spread(el, props) {\n for (const key in props) {\n const value = props[key];\n\n if (key.startsWith('on') && key.length > 2) {\n // Event handler \u2014 direct assignment. Use $$name for delegated events.\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value);\n continue;\n }\n\n if (typeof value === 'function' && !key.startsWith('on')) {\n // Reactive prop \u2014 create micro-effect\n if (key === 'class' || key === 'className') {\n effect(() => { el.className = value() || ''; });\n } else if (key === 'style' && typeof value() === 'object') {\n effect(() => {\n const styles = value();\n for (const prop in styles) {\n el.style[prop] = styles[prop] ?? '';\n }\n });\n } else {\n effect(() => { setProp(el, key, value()); });\n }\n } else {\n // Static prop\n setProp(el, key, value);\n }\n }\n}\n\nexport function setProp(el, key, value) {\n // Ref handling \u2014 assign element to ref object/callback (defense in depth)\n if (key === 'ref') {\n if (typeof value === 'function') value(el);\n else if (value && typeof value === 'object') value.current = el;\n return;\n }\n\n // Key prop \u2014 no-op, WhatFW has no virtual DOM (defense in depth, issue #6)\n if (key === 'key') return;\n\n // Sanitize URL attributes \u2014 reject dangerous protocols\n if (URL_ATTRS.has(key) || URL_ATTRS.has(key.toLowerCase())) {\n if (!isSafeUrl(value)) {\n if (typeof console !== 'undefined') {\n console.warn(`[what] Blocked unsafe URL in \"${key}\" attribute: ${value}`);\n }\n return;\n }\n }\n\n if (key === 'class' || key === 'className') {\n el.className = value || '';\n } else if (key === 'dangerouslySetInnerHTML') {\n el.innerHTML = value?.__html ?? '';\n } else if (key === 'innerHTML') {\n if (value && typeof value === 'object' && '__html' in value) {\n el.innerHTML = value.__html ?? '';\n } else {\n // Plain string innerHTML is rejected for security \u2014 use { __html: string } form\n if (typeof console !== 'undefined' && value != null && value !== '') {\n console.warn(\n '[what] Plain string innerHTML is not allowed. Use { __html: \"...\" } or dangerouslySetInnerHTML={{ __html: \"...\" }} instead.'\n );\n }\n // Ignored \u2014 do not set innerHTML from plain string\n }\n } else if (key === 'style') {\n if (typeof value === 'string') {\n el.style.cssText = value;\n } else if (typeof value === 'object') {\n for (const prop in value) {\n el.style[prop] = value[prop] ?? '';\n }\n }\n } else if (key.startsWith('data-') || key.startsWith('aria-')) {\n el.setAttribute(key, value);\n } else if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else if (key in el) {\n el[key] = value;\n } else {\n el.setAttribute(key, value);\n }\n}\n\n// --- delegateEvents(eventNames) ---\n// Event delegation: common events handled at document level.\n// Handlers stored as el.$$click, el.$$input, etc.\n// Single listener per event type on document \u2014 reduces listener count from N to 1.\n\nconst delegatedEvents = new Set();\n\nexport function delegateEvents(eventNames) {\n for (const name of eventNames) {\n if (delegatedEvents.has(name)) continue;\n delegatedEvents.add(name);\n\n document.addEventListener(name, (e) => {\n let node = e.target;\n const key = '$$' + name;\n\n // Walk up the DOM tree looking for handlers\n while (node) {\n const handler = node[key];\n if (handler) {\n handler(e);\n if (e.cancelBubble) return;\n }\n node = node.parentNode;\n }\n });\n }\n}\n\n// --- addEventListener helper for non-delegated events ---\nexport function on(el, event, handler) {\n el.addEventListener(event, handler);\n return () => el.removeEventListener(event, handler);\n}\n\n// --- className helper for conditional classes ---\nexport function classList(el, classes) {\n effect(() => {\n for (const name in classes) {\n const value = typeof classes[name] === 'function' ? classes[name]() : classes[name];\n el.classList.toggle(name, !!value);\n }\n });\n}\n\n// =========================================================================\n// DOM Hydration\n// =========================================================================\n// Reuses server-rendered DOM instead of creating new nodes.\n// After hydration is complete, switches to normal rendering for updates.\n\nlet _isHydrating = false;\nlet _hydrationCursor = null;\n\nexport function isHydrating() {\n return _isHydrating;\n}\n\n/**\n * hydrate(vnode, container)\n * Walk existing DOM nodes in `container`, match them against the vnode tree,\n * attach reactive bindings, and skip cloneNode. Once done, switch to normal rendering.\n */\nexport function hydrate(vnode, container) {\n _isHydrating = true;\n _hydrationCursor = { parent: container, index: 0 };\n\n try {\n const result = hydrateNode(vnode, container);\n return result;\n } finally {\n _isHydrating = false;\n _hydrationCursor = null;\n }\n}\n\n/**\n * Claim the next DOM node from the hydration cursor.\n * Returns the existing DOM node or null if none available.\n */\nfunction claimNode(parent) {\n const children = parent.childNodes;\n while (_hydrationCursor.index < children.length) {\n const node = children[_hydrationCursor.index];\n // Skip hydration comment markers\n if (node.nodeType === 8) { // Comment node\n const text = node.textContent;\n if (text === '$' || text === '/$' || text === '[]' || text === '/[]') {\n _hydrationCursor.index++;\n continue;\n }\n }\n _hydrationCursor.index++;\n return node;\n }\n return null;\n}\n\nfunction isDevMode() {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n}\n\nfunction hydrateNode(vnode, parent) {\n if (vnode == null || typeof vnode === 'boolean') {\n return null;\n }\n\n // Text node\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n const existing = claimNode(parent);\n const text = String(vnode);\n\n if (existing && existing.nodeType === 3) {\n // Reuse text node \u2014 check for mismatch in dev\n if (isDevMode() && existing.textContent !== text) {\n console.warn(\n `[what] Hydration mismatch: expected text \"${text}\", got \"${existing.textContent}\"`\n );\n existing.textContent = text;\n }\n return existing;\n }\n\n // Mismatch: expected text node, got element or nothing\n if (isDevMode()) {\n console.warn(\n `[what] Hydration mismatch: expected text node \"${text}\", got ${existing ? existing.nodeName : 'nothing'}. Falling back to client render.`\n );\n }\n const textNode = document.createTextNode(text);\n if (existing) {\n parent.replaceChild(textNode, existing);\n } else {\n parent.appendChild(textNode);\n }\n return textNode;\n }\n\n // Reactive function child \u2014 attach effect to existing node\n if (typeof vnode === 'function') {\n // Unwrap to get the initial value for hydration\n const initialValue = vnode();\n let current = hydrateNode(initialValue, parent);\n\n // Set up reactive effect for future updates (normal rendering path)\n effect(() => {\n const value = vnode();\n // After hydration, this runs as normal insert\n if (!_isHydrating) {\n current = reconcileInsert(parent, value, current, null);\n }\n });\n return current;\n }\n\n // Array \u2014 hydrate each child\n if (Array.isArray(vnode)) {\n const nodes = [];\n for (const child of vnode) {\n const node = hydrateNode(child, parent);\n if (node) nodes.push(node);\n }\n return nodes.length === 1 ? nodes[0] : nodes;\n }\n\n // VNode \u2014 component or element\n if (typeof vnode === 'object' && vnode._vnode) {\n // Component \u2014 route through component context so hooks work during hydration\n if (typeof vnode.tag === 'function') {\n const componentStack = getComponentStack();\n const Component = vnode.tag;\n const props = vnode.props || {};\n const children = vnode.children || [];\n\n // Set up component context (mirrors createComponent in dom.js)\n const ctx = {\n hooks: [],\n hookIndex: 0,\n effects: [],\n cleanups: [],\n mounted: false,\n disposed: false,\n Component,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: null,\n };\n\n // Push context so hooks can access it\n componentStack.push(ctx);\n\n let result;\n try {\n const propsChildren = children.length === 0 ? undefined\n : children.length === 1 ? children[0] : children;\n result = Component({ ...props, children: propsChildren });\n } catch (error) {\n componentStack.pop();\n console.error('[what] Error in component during hydration:', Component.name || 'Anonymous', error);\n return null;\n }\n\n componentStack.pop();\n ctx.mounted = true;\n\n // Run onMount callbacks after hydration\n if (ctx._mountCallbacks) {\n queueMicrotask(() => {\n if (ctx.disposed) return;\n for (const fn of ctx._mountCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onMount error:', e); }\n }\n });\n }\n\n return hydrateNode(result, parent);\n }\n\n // Element \u2014 claim existing DOM element\n const existing = claimNode(parent);\n const expectedTag = vnode.tag.toUpperCase();\n\n if (existing && existing.nodeType === 1 && existing.nodeName === expectedTag) {\n // Match! Reuse this element. Apply props/bindings.\n hydrateElementProps(existing, vnode.props || {});\n\n // Hydrate children\n const savedCursor = _hydrationCursor;\n _hydrationCursor = { parent: existing, index: 0 };\n\n const rawInner = vnode.props?.dangerouslySetInnerHTML?.__html;\n if (rawInner == null) {\n for (const child of vnode.children) {\n hydrateNode(child, existing);\n }\n }\n\n _hydrationCursor = savedCursor;\n return existing;\n }\n\n // Mismatch \u2014 fall back to client render for this subtree\n if (isDevMode()) {\n console.warn(\n `[what] Hydration mismatch: expected <${vnode.tag}>, got ${existing ? existing.nodeName : 'nothing'}. Falling back to client render.`\n );\n }\n\n // Create the element from scratch\n const newEl = document.createElement(vnode.tag);\n for (const key in vnode.props || {}) {\n if (key === 'children' || key === 'key') continue;\n setProp(newEl, key, vnode.props[key]);\n }\n for (const child of vnode.children) {\n reconcileInsert(newEl, child, null, null);\n }\n if (existing) {\n parent.replaceChild(newEl, existing);\n } else {\n parent.appendChild(newEl);\n }\n return newEl;\n }\n\n // DOM node \u2014 use directly\n if (isDomNode(vnode)) {\n return vnode;\n }\n\n // Fallback \u2014 create text node\n const textNode = document.createTextNode(String(vnode));\n parent.appendChild(textNode);\n return textNode;\n}\n\n/**\n * Apply props to an existing hydrated element.\n * Attaches event handlers and reactive bindings without re-creating the element.\n */\nfunction hydrateElementProps(el, props) {\n for (const key in props) {\n if (key === 'children' || key === 'key' || key === 'ref') continue;\n if (key === 'dangerouslySetInnerHTML' || key === 'innerHTML') continue;\n\n const value = props[key];\n\n // Event handlers \u2014 always attach (they don't exist in SSR HTML)\n if (key.startsWith('on') && key.length > 2) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value);\n continue;\n }\n\n // Delegated events ($$click etc.)\n if (key.startsWith('$$')) {\n el[key] = value;\n continue;\n }\n\n // Reactive props \u2014 set up effects\n if (typeof value === 'function' && !key.startsWith('on')) {\n if (key === 'class' || key === 'className') {\n effect(() => { el.className = value() || ''; });\n } else if (key === 'style' && typeof value() === 'object') {\n effect(() => {\n const styles = value();\n for (const prop in styles) {\n el.style[prop] = styles[prop] ?? '';\n }\n });\n } else {\n effect(() => { setProp(el, key, value()); });\n }\n continue;\n }\n\n // Static props \u2014 skip attributes already set from SSR\n // Only attach non-serializable props or ones that may differ\n if (key === 'data-hk') continue;\n }\n}\n", "// What Framework - Hooks\n// React-familiar hooks backed by signals for run-once component model.\n// Components run ONCE. Hooks return signal accessors (functions) so the\n// fine-grained runtime handles reactive updates automatically via effects.\n\nimport { signal, computed, effect, batch, untrack, createRoot, __DEV__ } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\n\nfunction getCtx(hookName) {\n const ctx = getCurrentComponent();\n if (!ctx) {\n throw new Error(\n `[what] ${hookName || 'Hook'}() can only be called inside a component function. ` +\n `Did you call it outside of a component or in an async callback? ` +\n `If you need reactive state outside a component, use signal() directly.`\n );\n }\n return ctx;\n}\n\nfunction getHook(ctx) {\n const index = ctx.hookIndex++;\n return { index, exists: index < ctx.hooks.length };\n}\n\n// --- useState ---\n// Returns [signalAccessor, setter]. The accessor is a function \u2014 call it to read.\n// In JSX, {count} (where count is the signal function) auto-binds reactively\n// via insert()'s effect wrapper. For interpolation, use count() explicitly.\n// This matches Solid's API and works with the run-once component model.\n\nexport function useState(initial) {\n const ctx = getCtx('useState');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n const s = signal(typeof initial === 'function' ? initial() : initial);\n ctx.hooks[index] = s;\n }\n\n const s = ctx.hooks[index];\n return [s, s.set];\n}\n\n// --- useSignal ---\n// Returns the raw signal. More powerful: read with sig(), write with sig.set(v).\n// Avoids array destructuring overhead.\n\nexport function useSignal(initial) {\n const ctx = getCtx('useSignal');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = signal(typeof initial === 'function' ? initial() : initial);\n }\n\n return ctx.hooks[index];\n}\n\n// --- useComputed ---\n// Derived value. Only recomputes when signal deps change.\n\nexport function useComputed(fn) {\n const ctx = getCtx('useComputed');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = computed(fn);\n }\n\n return ctx.hooks[index];\n}\n\n// --- useEffect ---\n// Side effect that runs after mount. In the run-once model, deps-based\n// re-running only works if deps are signal accessors. The implementation:\n// - No deps (undefined): wrap in effect() that auto-tracks signals\n// - Empty deps []: run once on mount, cleanup on unmount\n// - Deps [a, b]: create effect() that reads each dep (calling signal functions\n// to establish tracking), then runs the callback when any dep changes\n\nexport function useEffect(fn, deps) {\n const ctx = getCtx('useEffect');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { cleanup: null, dispose: null };\n }\n\n // Dev-mode: warn when deps array contains non-function values that look like signals\n if (__DEV__ && Array.isArray(deps) && deps.length > 0) {\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (dep != null && typeof dep !== 'function') {\n console.warn(\n `[what] useEffect dep at index ${i} is not a function. ` +\n `Did you mean to pass a signal? Use count instead of count()`\n );\n }\n }\n }\n\n const hook = ctx.hooks[index];\n\n // Only set up once \u2014 component runs once\n if (hook.dispose) return;\n\n if (deps === undefined) {\n // No deps array: wrap in effect() that auto-tracks signal reads inside fn\n queueMicrotask(() => {\n if (ctx.disposed) return;\n hook.dispose = effect(() => {\n if (hook.cleanup) {\n try { hook.cleanup(); } catch (e) { /* cleanup error */ }\n hook.cleanup = null;\n }\n const result = fn();\n if (typeof result === 'function') hook.cleanup = result;\n });\n // Register disposal with component lifecycle\n ctx.effects = ctx.effects || [];\n ctx.effects.push(hook.dispose);\n });\n } else if (deps.length === 0) {\n // Empty deps []: run once on mount, cleanup on unmount\n queueMicrotask(() => {\n if (ctx.disposed) return;\n const result = fn();\n if (typeof result === 'function') hook.cleanup = result;\n });\n // Mark as set up so we don't re-run\n hook.dispose = true;\n } else {\n // Deps array with values: create a reactive effect that reads each dep.\n // If a dep is a signal function, calling it establishes tracking.\n // When any tracked signal changes, the effect re-runs the callback.\n queueMicrotask(() => {\n if (ctx.disposed) return;\n hook.dispose = effect(() => {\n // Read all deps to establish signal tracking\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (typeof dep === 'function' && dep._signal) {\n dep(); // Read signal to track it\n }\n }\n\n // Run cleanup from previous execution\n if (hook.cleanup) {\n try { hook.cleanup(); } catch (e) { /* cleanup error */ }\n hook.cleanup = null;\n }\n\n // Run the effect callback\n const result = untrack(() => fn());\n if (typeof result === 'function') hook.cleanup = result;\n });\n // Register disposal with component lifecycle\n ctx.effects = ctx.effects || [];\n ctx.effects.push(hook.dispose);\n });\n }\n}\n\n// --- useMemo ---\n// Memoized computed value. Uses computed() for automatic signal tracking.\n// The deps array is accepted for API compatibility but ignored internally \u2014\n// computed() auto-tracks signal dependencies.\n// Returns a computed signal function (call it to read the value).\n\nexport function useMemo(fn, deps) {\n const ctx = getCtx('useMemo');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { computed: computed(fn) };\n }\n\n return ctx.hooks[index].computed;\n}\n\n// --- useCallback ---\n// Memoized callback. In the run-once model, the component function only\n// executes once, so the callback reference is inherently stable.\n// Simply store and return the function on first call.\n\nexport function useCallback(fn, deps) {\n const ctx = getCtx('useCallback');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { callback: fn };\n }\n\n return ctx.hooks[index].callback;\n}\n\n// --- useRef ---\n// Mutable ref object. Does NOT trigger re-renders.\n// Works correctly in run-once model \u2014 the ref persists for the component lifetime.\n\nexport function useRef(initial) {\n const ctx = getCtx('useRef');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n ctx.hooks[index] = { current: initial };\n }\n\n return ctx.hooks[index];\n}\n\n// --- useContext ---\n// Read from the nearest Provider in the component tree, or the default value.\n// Uses _parentCtx chain (persistent tree) instead of componentStack (runtime stack)\n// so context works correctly in effects and event handlers.\n// Returns the signal itself (not its value) so that consumers get reactive updates.\n\nexport function useContext(context) {\n // Walk up the _parentCtx chain to find the nearest provider\n let ctx = getCurrentComponent();\n if (__DEV__ && !ctx) {\n console.warn(\n `[what] useContext(${context?.displayName || 'Context'}) called outside of component render. ` +\n 'useContext must be called during component rendering, not inside effects or event handlers. ' +\n 'Store the context value in a variable during render and use that variable in your callback.'\n );\n }\n while (ctx) {\n if (ctx._contextValues && ctx._contextValues.has(context)) {\n const val = ctx._contextValues.get(context);\n // If the stored value is a signal, read it to subscribe\n return (val && val._signal) ? val() : val;\n }\n ctx = ctx._parentCtx;\n }\n return context._defaultValue;\n}\n\n// --- createContext ---\n// Tree-scoped context: Provider sets value for its subtree only.\n// Multiple providers can coexist \u2014 each subtree sees its own value.\n// Context values are wrapped in signals so consumers re-render when values change.\n\nexport function createContext(defaultValue) {\n const context = {\n _defaultValue: defaultValue,\n Provider: ({ value, children }) => {\n const ctx = getCtx('Context.Provider');\n if (!ctx._contextValues) ctx._contextValues = new Map();\n if (!ctx._contextSignals) ctx._contextSignals = new Map();\n\n // Create or update the context signal\n if (!ctx._contextSignals.has(context)) {\n const s = signal(value);\n ctx._contextSignals.set(context, s);\n ctx._contextValues.set(context, s);\n } else {\n ctx._contextSignals.get(context).set(value);\n }\n return children;\n },\n // React-compatible Consumer: <Context.Consumer>{value => ...}</Context.Consumer>\n Consumer: ({ children }) => {\n const value = useContext(context);\n return typeof children === 'function' ? children(value) : children;\n },\n };\n return context;\n}\n\n// --- useReducer ---\n// State management with a reducer function.\n// Returns [signalAccessor, dispatch] \u2014 accessor is a signal function.\n\nexport function useReducer(reducer, initialState, init) {\n const ctx = getCtx('useReducer');\n const { index, exists } = getHook(ctx);\n\n if (!exists) {\n const initial = init ? init(initialState) : initialState;\n const s = signal(initial);\n const dispatch = (action) => {\n s.set(prev => reducer(prev, action));\n };\n ctx.hooks[index] = { signal: s, dispatch };\n }\n\n const hook = ctx.hooks[index];\n return [hook.signal, hook.dispatch];\n}\n\n// --- onMount ---\n// Run callback once when component mounts. SolidJS-style lifecycle.\n\nexport function onMount(fn) {\n const ctx = getCtx('onMount');\n if (!ctx.mounted) {\n ctx._mountCallbacks = ctx._mountCallbacks || [];\n ctx._mountCallbacks.push(fn);\n }\n}\n\n// --- onCleanup ---\n// Register cleanup function to run when component unmounts.\n\nexport function onCleanup(fn) {\n const ctx = getCtx('onCleanup');\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(fn);\n}\n\n// --- createResource ---\n// Reactive data fetching primitive (SolidJS-style).\n// Returns [data, { loading, error, refetch, mutate }]\n\nexport function createResource(fetcher, options = {}) {\n const data = signal(options.initialValue ?? null);\n const loading = signal(!options.initialValue);\n const error = signal(null);\n\n let controller = null;\n\n const refetch = async (source) => {\n // Abort previous request\n if (controller) controller.abort();\n controller = new AbortController();\n const { signal: abortSignal } = controller;\n\n loading.set(true);\n error.set(null);\n\n try {\n const result = await fetcher(source, { signal: abortSignal });\n\n // Only update if not aborted\n if (!abortSignal.aborted) {\n batch(() => {\n data.set(result);\n loading.set(false);\n });\n }\n } catch (e) {\n if (!abortSignal.aborted) {\n batch(() => {\n error.set(e);\n loading.set(false);\n });\n }\n }\n };\n\n const mutate = (value) => {\n data.set(typeof value === 'function' ? value(data()) : value);\n };\n\n // Register cleanup with component lifecycle: abort on unmount\n const ctx = getCurrentComponent?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n if (controller) controller.abort();\n });\n }\n\n // Initial fetch if no initial value\n if (!options.initialValue) {\n refetch(options.source);\n }\n\n return [data, { loading, error, refetch, mutate }];\n}\n\n// --- Dep comparison (kept for potential external use) ---\n\nfunction depsChanged(oldDeps, newDeps) {\n if (oldDeps === undefined) return true;\n if (!oldDeps || !newDeps) return true;\n if (oldDeps.length !== newDeps.length) return true;\n for (let i = 0; i < oldDeps.length; i++) {\n if (!Object.is(oldDeps[i], newDeps[i])) return true;\n }\n return false;\n}\n", "// What Framework - Store\n// Lightweight global state management. Signal-based, type-safe, ergonomic.\n// Like Zustand meets signals \u2014 define a store, use it anywhere.\n\nimport { signal, computed, batch, __DEV__ } from './reactive.js';\n\n// --- storeComputed ---\n// Marker wrapper to explicitly tag a function as a computed in createStore.\n// Without this, createStore can't distinguish computed(state => ...) from action(item => ...).\n//\n// Usage:\n// const useCounter = createStore({\n// count: 0,\n// doubled: storeComputed(state => state.count * 2),\n// addItem(item) { /* this is an action */ },\n// });\n\nexport function derived(fn) {\n fn._storeComputed = true;\n return fn;\n}\n\n// Deprecated alias \u2014 use derived() instead\nlet _storeComputedWarned = false;\nexport function storeComputed(fn) {\n if (!_storeComputedWarned) {\n _storeComputedWarned = true;\n console.warn('[what] storeComputed() is deprecated. Use derived() instead.');\n }\n return derived(fn);\n}\n\n// --- createStore ---\n// Creates a reactive store with actions. Each key becomes a signal.\n//\n// Usage:\n// const useCounter = createStore({\n// count: 0,\n// doubled: storeComputed(state => state.count * 2), // computed\n// increment() { this.count++; }, // action\n// decrement() { this.count--; },\n// addItem(item) { this.items.push(item); }, // action (not confused with computed)\n// });\n//\n// function Counter() {\n// const { count, doubled, increment } = useCounter();\n// return h('div', null, count, ' / ', doubled, h('button', { onClick: increment }, '+'));\n// }\n\nexport function createStore(definition) {\n const signals = {};\n const computeds = {};\n const actions = {};\n const state = {};\n\n // Separate state, computeds, and actions\n // Use explicit _storeComputed marker instead of function.length heuristic\n for (const [key, value] of Object.entries(definition)) {\n if (typeof value === 'function' && value._storeComputed) {\n if (__DEV__ && value.length === 0) {\n console.warn(\n `[what] derived() for \"${key}\" should accept the state parameter, e.g. derived(state => ...).`\n );\n }\n // Computed: explicitly marked with storeComputed()\n computeds[key] = value;\n } else if (typeof value === 'function') {\n // Action: any other function\n actions[key] = value;\n } else {\n // State: initial value\n signals[key] = signal(value);\n }\n }\n\n // Build computed signals\n for (const [key, fn] of Object.entries(computeds)) {\n const proxy = new Proxy({}, {\n get(_, prop) {\n if (signals[prop]) return signals[prop]();\n if (computeds[prop]) return computeds[prop]();\n return undefined;\n },\n });\n computeds[key] = computed(() => fn(proxy));\n }\n\n // Build action functions bound to signals\n for (const [key, fn] of Object.entries(actions)) {\n actions[key] = (...args) => {\n batch(() => {\n const proxy = new Proxy({}, {\n get(_, prop) {\n if (signals[prop]) return signals[prop].peek();\n if (computeds[prop]) return computeds[prop].peek();\n if (actions[prop]) return actions[prop];\n return undefined;\n },\n set(_, prop, val) {\n if (signals[prop]) signals[prop].set(val);\n return true;\n },\n });\n fn.apply(proxy, args);\n });\n };\n }\n\n // Return a hook-like function\n return function useStore() {\n const result = {};\n for (const [key, s] of Object.entries(signals)) {\n Object.defineProperty(result, key, { get: () => s(), enumerable: true });\n }\n for (const [key, c] of Object.entries(computeds)) {\n Object.defineProperty(result, key, { get: () => c(), enumerable: true });\n }\n for (const [key, fn] of Object.entries(actions)) {\n result[key] = fn;\n }\n return result;\n };\n}\n\n// --- Simple atom --- [DEPRECATED: use signal() directly]\nlet _atomWarned = false;\nexport function atom(initial) {\n if (!_atomWarned) {\n _atomWarned = true;\n console.warn('[what] atom() is deprecated. Use signal() directly instead.');\n }\n return signal(initial);\n}\n", "// What Framework - Head Management\n// Declarative <head> updates from any component.\n// Supports title, meta, link, script tags. Auto-deduplicates by key.\n\nconst headState = {\n title: null,\n metas: new Map(),\n links: new Map(),\n};\n\n// --- Head component ---\n// Use in any component to set head tags. Last one wins for title/meta.\n\nexport function Head({ title, meta, link, children }) {\n if (typeof document === 'undefined') return null;\n\n if (title) {\n document.title = title;\n headState.title = title;\n }\n\n if (meta) {\n for (const attrs of (Array.isArray(meta) ? meta : [meta])) {\n const key = attrs.name || attrs.property || attrs.httpEquiv || JSON.stringify(attrs);\n setHeadTag('meta', key, attrs);\n }\n }\n\n if (link) {\n for (const attrs of (Array.isArray(link) ? link : [link])) {\n const key = attrs.rel + (attrs.href || '');\n setHeadTag('link', key, attrs);\n }\n }\n\n return children || null;\n}\n\nfunction setHeadTag(tag, key, attrs) {\n const existing = document.head.querySelector(`[data-what-head=\"${key}\"]`);\n if (existing) {\n updateElement(existing, attrs);\n return;\n }\n\n const el = document.createElement(tag);\n el.setAttribute('data-what-head', key);\n for (const [k, v] of Object.entries(attrs)) {\n el.setAttribute(k, v);\n }\n document.head.appendChild(el);\n}\n\nfunction updateElement(el, attrs) {\n for (const [k, v] of Object.entries(attrs)) {\n if (el.getAttribute(k) !== v) {\n el.setAttribute(k, v);\n }\n }\n}\n\n// --- Cleanup: remove head tags added by What ---\nexport function clearHead() {\n const tags = document.head.querySelectorAll('[data-what-head]');\n for (const tag of tags) tag.remove();\n headState.metas.clear();\n headState.links.clear();\n}\n", "// What Framework - DOM Scheduler\n// Batches DOM reads and writes to prevent layout thrashing.\n// Inspired by fastdom but integrated with our reactive system.\n\n// Queue phases: reads run first, then writes\nconst readQueue = [];\nconst writeQueue = [];\nlet scheduled = false;\n\n// --- Schedule a DOM read operation ---\n// Reads should be batched together and run before writes\n// to avoid forced synchronous layouts.\n//\n// Example:\n// scheduleRead(() => {\n// const height = element.offsetHeight; // Read\n// scheduleWrite(() => {\n// element.style.height = height + 'px'; // Write\n// });\n// });\n\nexport function scheduleRead(fn) {\n readQueue.push(fn);\n schedule();\n return () => {\n const idx = readQueue.indexOf(fn);\n if (idx !== -1) readQueue.splice(idx, 1);\n };\n}\n\n// --- Schedule a DOM write operation ---\n// Writes are batched and run after all reads complete.\n\nexport function scheduleWrite(fn) {\n writeQueue.push(fn);\n schedule();\n return () => {\n const idx = writeQueue.indexOf(fn);\n if (idx !== -1) writeQueue.splice(idx, 1);\n };\n}\n\n// --- Flush all queued operations immediately ---\n// Useful when you need synchronous DOM access.\n\nexport function flushScheduler() {\n // Run all reads first\n while (readQueue.length > 0) {\n const fn = readQueue.shift();\n try { fn(); } catch (e) { console.error('[what] Scheduler read error:', e); }\n }\n\n // Then all writes\n while (writeQueue.length > 0) {\n const fn = writeQueue.shift();\n try { fn(); } catch (e) { console.error('[what] Scheduler write error:', e); }\n }\n\n scheduled = false;\n}\n\n// --- Internal scheduling ---\n\nfunction schedule() {\n if (scheduled) return;\n scheduled = true;\n requestAnimationFrame(flushScheduler);\n}\n\n// --- Measure helper ---\n// Read a layout property without causing thrashing.\n// Returns a promise that resolves with the value.\n\nexport function measure(fn) {\n return new Promise(resolve => {\n scheduleRead(() => {\n resolve(fn());\n });\n });\n}\n\n// --- Mutate helper ---\n// Write to DOM without causing thrashing.\n// Returns a promise that resolves when the write is done.\n\nexport function mutate(fn) {\n return new Promise(resolve => {\n scheduleWrite(() => {\n fn();\n resolve();\n });\n });\n}\n\n// --- useScheduledEffect ---\n// Effect that automatically batches DOM operations.\n\nimport { effect } from './reactive.js';\n\nexport function useScheduledEffect(readFn, writeFn) {\n const effectKey = Symbol('scheduledEffect');\n return effect(() => {\n // Use raf() to debounce: only the latest callback runs per frame,\n // avoiding creating new closures on every signal change.\n raf(effectKey, () => {\n scheduleRead(() => {\n const data = readFn();\n if (writeFn) {\n scheduleWrite(() => writeFn(data));\n }\n });\n });\n });\n}\n\n// --- Animation frame helper ---\n// Like requestAnimationFrame but returns a cancellable promise.\n\nexport function nextFrame() {\n let cancel;\n const promise = new Promise((resolve, reject) => {\n const id = requestAnimationFrame(resolve);\n cancel = () => {\n cancelAnimationFrame(id);\n reject(new Error('Cancelled'));\n };\n });\n promise.cancel = cancel;\n return promise;\n}\n\n// --- Debounced RAF ---\n// Only runs the latest callback once per frame.\n\nconst debouncedCallbacks = new Map();\n\nexport function raf(key, fn) {\n if (debouncedCallbacks.has(key)) {\n // Replace callback, don't schedule new frame\n debouncedCallbacks.set(key, fn);\n } else {\n debouncedCallbacks.set(key, fn);\n requestAnimationFrame(() => {\n const callback = debouncedCallbacks.get(key);\n debouncedCallbacks.delete(key);\n if (callback) callback();\n });\n }\n}\n\n// --- Resize Observer helper ---\n// Batched resize observations.\n\nconst resizeObservers = new WeakMap();\nlet sharedResizeObserver = null;\n\nexport function onResize(element, callback) {\n if (typeof ResizeObserver === 'undefined') {\n // Fallback: just call once\n callback(element.getBoundingClientRect());\n return () => {};\n }\n\n if (!sharedResizeObserver) {\n sharedResizeObserver = new ResizeObserver(entries => {\n scheduleRead(() => {\n for (const entry of entries) {\n const cb = resizeObservers.get(entry.target);\n if (cb) {\n cb(entry.contentRect);\n }\n }\n });\n });\n }\n\n resizeObservers.set(element, callback);\n sharedResizeObserver.observe(element);\n\n return () => {\n resizeObservers.delete(element);\n sharedResizeObserver.unobserve(element);\n };\n}\n\n// --- Intersection Observer helper ---\n// Batched intersection observations.\n\nexport function onIntersect(element, callback, options = {}) {\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: assume visible\n callback({ isIntersecting: true, intersectionRatio: 1 });\n return () => {};\n }\n\n const observer = new IntersectionObserver(entries => {\n scheduleRead(() => {\n for (const entry of entries) {\n callback(entry);\n }\n });\n }, options);\n\n observer.observe(element);\n\n return () => observer.disconnect();\n}\n\n// --- Smooth scrolling with scheduler ---\n\nexport function smoothScrollTo(element, options = {}) {\n const { duration = 300, easing = t => t * (2 - t) } = options;\n\n return new Promise(resolve => {\n let startY;\n let targetY;\n let startTime;\n\n scheduleRead(() => {\n startY = window.scrollY;\n const rect = element.getBoundingClientRect();\n targetY = startY + rect.top;\n startTime = performance.now();\n tick();\n });\n\n function tick() {\n scheduleRead(() => {\n const elapsed = performance.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentY = startY + (targetY - startY) * easedProgress;\n\n scheduleWrite(() => {\n window.scrollTo(0, currentY);\n\n if (progress < 1) {\n requestAnimationFrame(tick);\n } else {\n resolve();\n }\n });\n });\n }\n });\n}\n", "// What Framework - Animation Primitives\n// Springs, tweens, gestures, and transition helpers\n\nimport { signal, effect, untrack, batch } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\nimport { scheduleRead, scheduleWrite } from './scheduler.js';\n\n// Create an effect scoped to the current component's lifecycle\nfunction scopedEffect(fn) {\n const ctx = getCurrentComponent?.();\n const dispose = effect(fn);\n if (ctx) ctx.effects.push(dispose);\n return dispose;\n}\n\n// --- Spring Animation ---\n// Physics-based animation with natural feel\n\nexport function spring(initialValue, options = {}) {\n const {\n stiffness = 100,\n damping = 10,\n mass = 1,\n precision = 0.01,\n } = options;\n\n const current = signal(initialValue);\n const target = signal(initialValue);\n const velocity = signal(0);\n const isAnimating = signal(false);\n\n let rafId = null;\n let lastTime = null;\n\n function tick(time) {\n if (lastTime === null) {\n lastTime = time;\n rafId = requestAnimationFrame(tick);\n return;\n }\n\n const dt = Math.min((time - lastTime) / 1000, 0.064); // Cap at ~15fps minimum\n lastTime = time;\n\n const currentVal = current.peek();\n const targetVal = target.peek();\n const vel = velocity.peek();\n\n // Spring physics\n const displacement = currentVal - targetVal;\n const springForce = -stiffness * displacement;\n const dampingForce = -damping * vel;\n const acceleration = (springForce + dampingForce) / mass;\n\n const newVelocity = vel + acceleration * dt;\n const newValue = currentVal + newVelocity * dt;\n\n batch(() => {\n velocity.set(newVelocity);\n current.set(newValue);\n });\n\n // Check if settled\n if (Math.abs(newVelocity) < precision && Math.abs(displacement) < precision) {\n batch(() => {\n current.set(targetVal);\n velocity.set(0);\n isAnimating.set(false);\n });\n rafId = null;\n lastTime = null;\n return;\n }\n\n rafId = requestAnimationFrame(tick);\n }\n\n function set(newTarget) {\n target.set(newTarget);\n // Use rafId check instead of isAnimating signal \u2014 signal may not have flushed\n // after a synchronous stop() call, causing duplicate animation frames\n if (rafId === null) {\n isAnimating.set(true);\n lastTime = null;\n rafId = requestAnimationFrame(tick);\n }\n }\n\n function stop() {\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n isAnimating.set(false);\n lastTime = null;\n }\n\n function snap(value) {\n stop();\n batch(() => {\n current.set(value);\n target.set(value);\n velocity.set(0);\n });\n }\n\n // Register stop() as cleanup if inside a component\n const ctx = getCurrentComponent?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(stop);\n }\n\n return {\n current: () => current(),\n target: () => target(),\n velocity: () => velocity(),\n isAnimating: () => isAnimating(),\n set,\n stop,\n snap,\n subscribe: current.subscribe,\n };\n}\n\n// --- Tween Animation ---\n// Easing-based animation\n\nexport function tween(from, to, options = {}) {\n const {\n duration = 300,\n easing = (t) => t * (2 - t), // easeOutQuad\n onUpdate,\n onComplete,\n } = options;\n\n const progress = signal(0);\n const value = signal(from);\n const isAnimating = signal(true);\n\n let startTime = null;\n let rafId = null;\n\n function tick(time) {\n if (startTime === null) startTime = time;\n\n const elapsed = time - startTime;\n const t = Math.min(elapsed / duration, 1);\n const easedT = easing(t);\n const currentValue = from + (to - from) * easedT;\n\n batch(() => {\n progress.set(t);\n value.set(currentValue);\n });\n\n if (onUpdate) onUpdate(currentValue, t);\n\n if (t < 1) {\n rafId = requestAnimationFrame(tick);\n } else {\n isAnimating.set(false);\n if (onComplete) onComplete();\n }\n }\n\n rafId = requestAnimationFrame(tick);\n\n return {\n progress: () => progress(),\n value: () => value(),\n isAnimating: () => isAnimating(),\n cancel: () => {\n if (rafId) cancelAnimationFrame(rafId);\n isAnimating.set(false);\n },\n subscribe: value.subscribe,\n };\n}\n\n// --- Easing Functions ---\n\nexport const easings = {\n linear: (t) => t,\n easeInQuad: (t) => t * t,\n easeOutQuad: (t) => t * (2 - t),\n easeInOutQuad: (t) => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,\n easeInCubic: (t) => t * t * t,\n easeOutCubic: (t) => (--t) * t * t + 1,\n easeInOutCubic: (t) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInElastic: (t) => t === 0 ? 0 : t === 1 ? 1 : -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * ((2 * Math.PI) / 3)),\n easeOutElastic: (t) => t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * ((2 * Math.PI) / 3)) + 1,\n easeOutBounce: (t) => {\n const n1 = 7.5625;\n const d1 = 2.75;\n if (t < 1 / d1) return n1 * t * t;\n if (t < 2 / d1) return n1 * (t -= 1.5 / d1) * t + 0.75;\n if (t < 2.5 / d1) return n1 * (t -= 2.25 / d1) * t + 0.9375;\n return n1 * (t -= 2.625 / d1) * t + 0.984375;\n },\n};\n\n// --- useTransition Hook ---\n// Animate between states\n\nexport function useTransition(options = {}) {\n const { duration = 300, easing = easings.easeOutQuad } = options;\n\n const isTransitioning = signal(false);\n const progress = signal(0);\n\n async function start(callback) {\n isTransitioning.set(true);\n progress.set(0);\n\n return new Promise((resolve) => {\n const startTime = performance.now();\n\n function tick(time) {\n const elapsed = time - startTime;\n const t = Math.min(elapsed / duration, 1);\n progress.set(easing(t));\n\n if (t < 1) {\n requestAnimationFrame(tick);\n } else {\n isTransitioning.set(false);\n if (callback) callback();\n resolve();\n }\n }\n\n requestAnimationFrame(tick);\n });\n }\n\n return {\n isTransitioning: () => isTransitioning(),\n progress: () => progress(),\n start,\n };\n}\n\n// --- Gesture Handlers ---\n\nexport function useGesture(element, handlers = {}) {\n const {\n onDrag,\n onDragStart,\n onDragEnd,\n onPinch,\n onSwipe,\n onTap,\n onLongPress,\n preventDefault = false, // Set to true to allow e.preventDefault() in touch handlers\n } = handlers;\n\n const state = {\n isDragging: signal(false),\n startX: 0,\n startY: 0,\n currentX: signal(0),\n currentY: signal(0),\n deltaX: signal(0),\n deltaY: signal(0),\n velocity: signal({ x: 0, y: 0 }),\n };\n\n let lastTime = 0;\n let lastX = 0;\n let lastY = 0;\n let longPressTimer = null;\n\n function handleStart(e) {\n const touch = e.touches ? e.touches[0] : e;\n state.startX = touch.clientX;\n state.startY = touch.clientY;\n lastX = touch.clientX;\n lastY = touch.clientY;\n lastTime = performance.now();\n\n state.isDragging.set(true);\n if (onDragStart) onDragStart({ x: state.startX, y: state.startY });\n\n // Long press detection\n if (onLongPress) {\n longPressTimer = setTimeout(() => {\n if (state.isDragging.peek()) {\n onLongPress({ x: lastX, y: lastY });\n }\n }, 500);\n }\n }\n\n function handleMove(e) {\n if (!state.isDragging.peek()) return;\n\n const touch = e.touches ? e.touches[0] : e;\n const x = touch.clientX;\n const y = touch.clientY;\n const now = performance.now();\n const dt = now - lastTime;\n\n batch(() => {\n state.currentX.set(x);\n state.currentY.set(y);\n state.deltaX.set(x - state.startX);\n state.deltaY.set(y - state.startY);\n\n if (dt > 0) {\n state.velocity.set({\n x: (x - lastX) / dt * 1000,\n y: (y - lastY) / dt * 1000,\n });\n }\n });\n\n lastX = x;\n lastY = y;\n lastTime = now;\n\n if (longPressTimer) {\n // Cancel long press if moved too much\n const distance = Math.sqrt(state.deltaX.peek() ** 2 + state.deltaY.peek() ** 2);\n if (distance > 10) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n }\n\n if (onDrag) {\n onDrag({\n x,\n y,\n deltaX: state.deltaX.peek(),\n deltaY: state.deltaY.peek(),\n velocity: state.velocity.peek(),\n });\n }\n }\n\n function handleEnd(e) {\n if (!state.isDragging.peek()) return;\n\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n\n const deltaX = state.deltaX.peek();\n const deltaY = state.deltaY.peek();\n const velocity = state.velocity.peek();\n const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2);\n\n // Tap detection\n if (distance < 10 && onTap) {\n onTap({ x: state.startX, y: state.startY });\n }\n\n // Swipe detection\n if (onSwipe && (Math.abs(velocity.x) > 500 || Math.abs(velocity.y) > 500)) {\n const direction = Math.abs(velocity.x) > Math.abs(velocity.y)\n ? (velocity.x > 0 ? 'right' : 'left')\n : (velocity.y > 0 ? 'down' : 'up');\n onSwipe({ direction, velocity });\n }\n\n if (onDragEnd) {\n onDragEnd({\n deltaX,\n deltaY,\n velocity,\n });\n }\n\n state.isDragging.set(false);\n }\n\n // Pinch handling (touch only)\n let initialPinchDistance = null;\n\n function handlePinchMove(e) {\n if (!onPinch || e.touches.length !== 2) return;\n\n const touch1 = e.touches[0];\n const touch2 = e.touches[1];\n const distance = Math.sqrt(\n (touch2.clientX - touch1.clientX) ** 2 +\n (touch2.clientY - touch1.clientY) ** 2\n );\n\n if (initialPinchDistance === null) {\n initialPinchDistance = distance;\n }\n\n const scale = distance / initialPinchDistance;\n const centerX = (touch1.clientX + touch2.clientX) / 2;\n const centerY = (touch1.clientY + touch2.clientY) / 2;\n\n onPinch({ scale, centerX, centerY });\n }\n\n function handlePinchEnd() {\n initialPinchDistance = null;\n }\n\n // Attach listeners\n if (typeof element === 'function') {\n // Ref function\n scopedEffect(() => {\n const el = untrack(element);\n if (!el) return;\n return attachListeners(el);\n });\n } else if (element?.current !== undefined) {\n // Ref object\n scopedEffect(() => {\n const el = element.current;\n if (!el) return;\n return attachListeners(el);\n });\n } else if (element) {\n attachListeners(element);\n }\n\n function attachListeners(el) {\n el.addEventListener('mousedown', handleStart);\n el.addEventListener('touchstart', handleStart, { passive: !preventDefault });\n window.addEventListener('mousemove', handleMove);\n window.addEventListener('touchmove', handlePinchMove);\n window.addEventListener('touchmove', handleMove);\n window.addEventListener('mouseup', handleEnd);\n window.addEventListener('touchend', handleEnd);\n window.addEventListener('touchend', handlePinchEnd);\n\n return () => {\n el.removeEventListener('mousedown', handleStart);\n el.removeEventListener('touchstart', handleStart);\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('touchmove', handlePinchMove);\n window.removeEventListener('touchmove', handleMove);\n window.removeEventListener('mouseup', handleEnd);\n window.removeEventListener('touchend', handleEnd);\n window.removeEventListener('touchend', handlePinchEnd);\n };\n }\n\n return state;\n}\n\n// --- useAnimatedValue Hook ---\n// Like React Native's Animated.Value\n\nexport function useAnimatedValue(initialValue) {\n const value = signal(initialValue);\n const animations = [];\n\n return {\n value: () => value(),\n setValue: (v) => value.set(v),\n\n // Spring to target\n spring(toValue, config = {}) {\n const s = spring(value.peek(), config);\n s.set(toValue);\n\n const dispose = effect(() => {\n value.set(s.current());\n });\n\n return {\n stop: () => { s.stop(); dispose(); },\n };\n },\n\n // Tween to target\n timing(toValue, config = {}) {\n const t = tween(value.peek(), toValue, {\n ...config,\n onUpdate: (v) => value.set(v),\n });\n\n return {\n stop: () => t.cancel(),\n };\n },\n\n // Interpolate value\n interpolate(inputRange, outputRange) {\n return () => {\n const v = value();\n // Find segment\n for (let i = 0; i < inputRange.length - 1; i++) {\n if (v >= inputRange[i] && v <= inputRange[i + 1]) {\n const t = (v - inputRange[i]) / (inputRange[i + 1] - inputRange[i]);\n return outputRange[i] + (outputRange[i + 1] - outputRange[i]) * t;\n }\n }\n // Clamp\n if (v <= inputRange[0]) return outputRange[0];\n return outputRange[outputRange.length - 1];\n };\n },\n\n subscribe: value.subscribe,\n };\n}\n\n// --- CSS Transition Classes ---\n\nexport function createTransitionClasses(name) {\n return {\n enter: `${name}-enter`,\n enterActive: `${name}-enter-active`,\n enterDone: `${name}-enter-done`,\n exit: `${name}-exit`,\n exitActive: `${name}-exit-active`,\n exitDone: `${name}-exit-done`,\n };\n}\n\n// Apply CSS transition\nexport async function cssTransition(element, name, type = 'enter', duration = 300) {\n const classes = createTransitionClasses(name);\n\n return new Promise((resolve) => {\n scheduleWrite(() => {\n // Initial state\n element.classList.add(classes[type]);\n\n // Force reflow\n scheduleRead(() => {\n element.offsetHeight;\n\n scheduleWrite(() => {\n // Active state\n element.classList.add(classes[`${type}Active`]);\n\n setTimeout(() => {\n scheduleWrite(() => {\n element.classList.remove(classes[type], classes[`${type}Active`]);\n element.classList.add(classes[`${type}Done`]);\n resolve();\n });\n }, duration);\n });\n });\n });\n });\n}\n", "// What Framework - Accessibility Utilities\n// Focus management, ARIA helpers, screen reader announcements\n\nimport { signal, effect } from './reactive.js';\nimport { h } from './h.js';\nimport { getCurrentComponent } from './dom.js';\n\n// --- Focus Management ---\n\n// Track currently focused element\nconst focusedElement = signal(null);\n\nif (typeof document !== 'undefined') {\n document.addEventListener('focusin', (e) => {\n focusedElement.set(e.target);\n });\n}\n\nexport function useFocus() {\n return {\n current: () => focusedElement(),\n focus: (element) => element?.focus(),\n blur: () => document.activeElement?.blur(),\n };\n}\n\n// Capture/restore focus around transient UI (dialogs, popovers, drawers).\n// Parent components can call capture() before opening and restore() on close.\nexport function useFocusRestore() {\n const previousFocusRef = { current: null };\n\n function capture(target) {\n if (typeof document === 'undefined') return;\n previousFocusRef.current = target || document.activeElement || null;\n }\n\n function restore(fallbackTarget) {\n const target = previousFocusRef.current || fallbackTarget;\n if (target && typeof target.focus === 'function') {\n target.focus();\n }\n }\n\n return {\n capture,\n restore,\n previous: () => previousFocusRef.current,\n };\n}\n\n// --- Focus Trap ---\n// Keep focus within a container (for modals, dialogs, etc.)\n\nexport function useFocusTrap(containerRef) {\n let previousFocus = null;\n\n function activate() {\n if (typeof document === 'undefined') return;\n\n previousFocus = document.activeElement;\n const container = containerRef.current || containerRef;\n\n if (!container || typeof container.querySelectorAll !== 'function') return;\n\n // Find all focusable elements\n const focusables = getFocusableElements(container);\n if (focusables.length === 0) return;\n\n // Focus first element\n focusables[0].focus();\n\n // Handle Tab key\n function handleKeydown(e) {\n if (e.key !== 'Tab') return;\n\n const focusables = getFocusableElements(container);\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (e.shiftKey) {\n // Shift+Tab: if on first, go to last\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: if on last, go to first\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener('keydown', handleKeydown);\n\n return () => {\n container.removeEventListener('keydown', handleKeydown);\n };\n }\n\n function deactivate() {\n if (previousFocus && typeof previousFocus.focus === 'function') {\n previousFocus.focus();\n }\n }\n\n return { activate, deactivate };\n}\n\nfunction getFocusableElements(container) {\n const selector = [\n 'button:not([disabled])',\n 'a[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n return Array.from(container.querySelectorAll(selector)).filter(el => {\n return el.offsetParent !== null; // Visible\n });\n}\n\n// --- Focus Scope ---\n// Component wrapper that traps focus\n\nexport function FocusTrap({ children, active = true }) {\n const containerRef = { current: null };\n const refVersion = signal(0);\n const trap = useFocusTrap(containerRef);\n let trapCleanup = null;\n\n const setRef = (el) => {\n containerRef.current = el;\n refVersion.set(v => v + 1);\n };\n\n // Scope the effect to the component lifecycle so it disposes on unmount\n const dispose = effect(() => {\n // Re-run activation after the ref element is attached/updated.\n refVersion();\n\n if (trapCleanup) {\n trapCleanup();\n trapCleanup = null;\n trap.deactivate();\n }\n\n if (active && containerRef.current) {\n trapCleanup = trap.activate();\n return () => {\n trapCleanup?.();\n trapCleanup = null;\n trap.deactivate();\n };\n }\n });\n\n // Register cleanup on component context\n const ctx = getCurrentComponent?.();\n if (ctx) {\n ctx._cleanupCallbacks = ctx._cleanupCallbacks || [];\n ctx._cleanupCallbacks.push(() => {\n dispose();\n trapCleanup?.();\n trapCleanup = null;\n trap.deactivate();\n });\n }\n\n return h('div', { ref: setRef }, children);\n}\n\n// --- Screen Reader Announcements ---\n\nlet announcer = null;\nlet announcerId = 0;\n\nfunction getAnnouncer() {\n if (typeof document === 'undefined') return null;\n\n if (!announcer) {\n announcer = document.createElement('div');\n announcer.id = 'what-announcer';\n announcer.setAttribute('aria-live', 'polite');\n announcer.setAttribute('aria-atomic', 'true');\n announcer.style.cssText = `\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n `;\n document.body.appendChild(announcer);\n }\n return announcer;\n}\n\nexport function announce(message, options = {}) {\n const { priority = 'polite', timeout = 1000 } = options;\n const announcer = getAnnouncer();\n if (!announcer) return;\n\n announcer.setAttribute('aria-live', priority);\n\n // Clear and re-announce (required for some screen readers)\n const id = ++announcerId;\n announcer.textContent = '';\n\n requestAnimationFrame(() => {\n if (announcerId === id) {\n announcer.textContent = message;\n }\n });\n\n // Clear after timeout\n setTimeout(() => {\n if (announcerId === id) {\n announcer.textContent = '';\n }\n }, timeout);\n}\n\nexport function announceAssertive(message) {\n return announce(message, { priority: 'assertive' });\n}\n\n// --- Skip Link ---\n// Accessible skip navigation\n\nexport function SkipLink({ href = '#main', children = 'Skip to content' }) {\n return h('a', {\n href,\n class: 'what-skip-link',\n onClick: (e) => {\n e.preventDefault();\n const target = document.querySelector(href);\n if (target) {\n target.focus();\n target.scrollIntoView();\n }\n },\n style: {\n position: 'absolute',\n top: '-40px',\n left: '0',\n padding: '8px',\n background: '#000',\n color: '#fff',\n textDecoration: 'none',\n zIndex: '10000',\n },\n onFocus: (e) => {\n e.target.style.top = '0';\n },\n onBlur: (e) => {\n e.target.style.top = '-40px';\n },\n }, children);\n}\n\n// --- ARIA Helpers ---\n\nexport function useAriaExpanded(initialExpanded = false) {\n const expanded = signal(initialExpanded);\n\n return {\n expanded: () => expanded(),\n toggle: () => expanded.set(!expanded.peek()),\n open: () => expanded.set(true),\n close: () => expanded.set(false),\n buttonProps: () => ({\n 'aria-expanded': expanded(),\n onClick: () => expanded.set(!expanded.peek()),\n }),\n panelProps: () => ({\n hidden: !expanded(),\n }),\n };\n}\n\nexport function useAriaSelected(initialSelected = null) {\n const selected = signal(initialSelected);\n\n return {\n selected: () => selected(),\n select: (value) => selected.set(value),\n isSelected: (value) => selected() === value,\n itemProps: (value) => ({\n 'aria-selected': selected() === value,\n onClick: () => selected.set(value),\n }),\n };\n}\n\nexport function useAriaChecked(initialChecked = false) {\n const checked = signal(initialChecked);\n\n return {\n checked: () => checked(),\n toggle: () => checked.set(!checked.peek()),\n set: (value) => checked.set(value),\n checkboxProps: () => ({\n role: 'checkbox',\n 'aria-checked': checked(),\n tabIndex: 0,\n onClick: () => checked.set(!checked.peek()),\n onKeyDown: (e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n checked.set(!checked.peek());\n }\n },\n }),\n };\n}\n\n// --- Roving Tab Index ---\n// For keyboard navigation in lists, toolbars, etc.\n\nexport function useRovingTabIndex(itemCountOrSignal) {\n // Accept either a static number or a signal/getter for dynamic lists\n const getCount = typeof itemCountOrSignal === 'function'\n ? itemCountOrSignal\n : () => itemCountOrSignal;\n const focusIndex = signal(0);\n\n function handleKeyDown(e) {\n const count = getCount();\n if (count <= 0) return;\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault();\n focusIndex.set((focusIndex.peek() + 1) % count);\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault();\n focusIndex.set((focusIndex.peek() - 1 + count) % count);\n break;\n case 'Home':\n e.preventDefault();\n focusIndex.set(0);\n break;\n case 'End':\n e.preventDefault();\n focusIndex.set(count - 1);\n break;\n }\n }\n\n return {\n focusIndex: () => focusIndex(),\n setFocusIndex: (i) => focusIndex.set(i),\n getItemProps: (index) => ({\n tabIndex: focusIndex() === index ? 0 : -1,\n onKeyDown: handleKeyDown,\n onFocus: () => focusIndex.set(index),\n }),\n containerProps: () => ({\n role: 'listbox',\n }),\n };\n}\n\n// --- Visually Hidden ---\n// Hide content visually but keep accessible to screen readers\n\nexport function VisuallyHidden({ children, as = 'span' }) {\n return h(as, {\n style: {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n },\n }, children);\n}\n\n// --- Live Region Component ---\n\nexport function LiveRegion({ children, priority = 'polite', atomic = true }) {\n return h('div', {\n 'aria-live': priority,\n 'aria-atomic': atomic,\n }, children);\n}\n\n// --- ID Generator ---\n// Generate unique IDs for ARIA attributes\n\nlet idCounter = 0;\n\nexport function useId(prefix = 'what') {\n const id = `${prefix}-${++idCounter}`;\n return () => id;\n}\n\nexport function useIds(count, prefix = 'what') {\n const ids = [];\n for (let i = 0; i < count; i++) {\n ids.push(`${prefix}-${++idCounter}`);\n }\n return ids;\n}\n\n// --- Describe ---\n// Associate description with an element\n\nexport function useDescribedBy(description) {\n const id = useId('desc');\n\n return {\n descriptionId: id,\n descriptionProps: () => ({\n id: id(),\n style: { display: 'none' },\n }),\n describedByProps: () => ({\n 'aria-describedby': id(),\n }),\n Description: () => h('div', {\n id: id(),\n style: { display: 'none' },\n }, description),\n };\n}\n\n// --- Labelledby ---\n\nexport function useLabelledBy(label) {\n const id = useId('label');\n\n return {\n labelId: id,\n labelProps: () => ({\n id: id(),\n }),\n labelledByProps: () => ({\n 'aria-labelledby': id(),\n }),\n };\n}\n\n// --- Keyboard Navigation Helpers ---\n\nexport const Keys = {\n Enter: 'Enter',\n Space: ' ',\n Escape: 'Escape',\n ArrowUp: 'ArrowUp',\n ArrowDown: 'ArrowDown',\n ArrowLeft: 'ArrowLeft',\n ArrowRight: 'ArrowRight',\n Home: 'Home',\n End: 'End',\n Tab: 'Tab',\n};\n\nexport function onKey(key, handler) {\n return (e) => {\n if (e.key === key) {\n handler(e);\n }\n };\n}\n\nexport function onKeys(keys, handler) {\n return (e) => {\n if (keys.includes(e.key)) {\n handler(e);\n }\n };\n}\n", "// What Framework - Skeleton Loaders\n// Loading placeholders for content, islands, and async data\n\nimport { h } from './h.js';\nimport { signal, effect } from './reactive.js';\n\n// --- Skeleton Base Styles ---\n\nconst skeletonStyles = `\n.what-skeleton {\n background: linear-gradient(\n 90deg,\n var(--skeleton-base, #e0e0e0) 0%,\n var(--skeleton-highlight, #f0f0f0) 50%,\n var(--skeleton-base, #e0e0e0) 100%\n );\n background-size: 200% 100%;\n animation: what-skeleton-shimmer 1.5s infinite ease-in-out;\n border-radius: var(--skeleton-radius, 4px);\n}\n\n@keyframes what-skeleton-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.what-skeleton-pulse {\n animation: what-skeleton-pulse 1.5s infinite ease-in-out;\n}\n\n@keyframes what-skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.what-skeleton-wave {\n position: relative;\n overflow: hidden;\n}\n\n.what-skeleton-wave::after {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n rgba(255, 255, 255, 0.4) 50%,\n transparent 100%\n );\n animation: what-skeleton-wave 1.5s infinite;\n}\n\n@keyframes what-skeleton-wave {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n}\n`;\n\n// Inject styles once\nlet stylesInjected = false;\n\nfunction injectStyles() {\n if (stylesInjected || typeof document === 'undefined') return;\n stylesInjected = true;\n\n const style = document.createElement('style');\n style.textContent = skeletonStyles;\n document.head.appendChild(style);\n}\n\n// --- Skeleton Component ---\n\nexport function Skeleton({\n width,\n height,\n variant = 'shimmer', // 'shimmer' | 'pulse' | 'wave'\n circle = false,\n class: className,\n style: customStyle,\n count = 1,\n}) {\n injectStyles();\n\n const baseClass = `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''} ${variant === 'wave' ? 'what-skeleton-wave' : ''}`;\n const finalClass = className ? `${baseClass} ${className}` : baseClass;\n\n const style = {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n borderRadius: circle ? '50%' : undefined,\n ...customStyle,\n };\n\n if (count === 1) {\n return h('div', { class: finalClass, style, 'aria-hidden': 'true' });\n }\n\n return Array.from({ length: count }, (_, i) =>\n h('div', {\n key: i,\n class: finalClass,\n style: { ...style, marginBottom: i < count - 1 ? '8px' : undefined },\n 'aria-hidden': 'true',\n })\n );\n}\n\n// --- Skeleton Text ---\n\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = '60%',\n lineHeight = 16,\n gap = 8,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', { class: 'what-skeleton-text', 'aria-hidden': 'true' },\n Array.from({ length: lines }, (_, i) =>\n h('div', {\n key: i,\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: {\n height: `${lineHeight}px`,\n width: i === lines - 1 ? lastLineWidth : '100%',\n marginBottom: i < lines - 1 ? `${gap}px` : undefined,\n },\n })\n )\n );\n}\n\n// --- Skeleton Avatar ---\n\nexport function SkeletonAvatar({\n size = 40,\n variant = 'shimmer',\n}) {\n return Skeleton({\n width: size,\n height: size,\n circle: true,\n variant,\n });\n}\n\n// --- Skeleton Card ---\n\nexport function SkeletonCard({\n imageHeight = 200,\n lines = 3,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', { class: 'what-skeleton-card', 'aria-hidden': 'true' },\n // Image placeholder\n h('div', {\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: `${imageHeight}px`, width: '100%', marginBottom: '16px' },\n }),\n // Title\n h('div', {\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: '24px', width: '70%', marginBottom: '12px' },\n }),\n // Text lines\n SkeletonText({ lines, variant })\n );\n}\n\n// --- Skeleton Table ---\n\nexport function SkeletonTable({\n rows = 5,\n columns = 4,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', { class: 'what-skeleton-table', 'aria-hidden': 'true' },\n // Header\n h('div', { style: { display: 'flex', gap: '16px', marginBottom: '16px' } },\n Array.from({ length: columns }, (_, i) =>\n h('div', {\n key: i,\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: '20px', flex: 1 },\n })\n )\n ),\n // Rows\n Array.from({ length: rows }, (_, rowIndex) =>\n h('div', {\n key: rowIndex,\n style: {\n display: 'flex',\n gap: '16px',\n marginBottom: rowIndex < rows - 1 ? '12px' : undefined,\n },\n },\n Array.from({ length: columns }, (_, colIndex) =>\n h('div', {\n key: colIndex,\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: { height: '16px', flex: 1 },\n })\n )\n )\n )\n );\n}\n\n// --- Island Skeleton ---\n// Specific skeleton for island placeholders\n\nexport function IslandSkeleton({\n type = 'default', // 'default' | 'card' | 'text' | 'custom'\n height,\n children,\n}) {\n injectStyles();\n\n if (type === 'card') {\n return SkeletonCard({});\n }\n\n if (type === 'text') {\n return SkeletonText({});\n }\n\n if (children) {\n return children;\n }\n\n return h('div', {\n class: 'what-skeleton what-island-skeleton',\n style: {\n height: typeof height === 'number' ? `${height}px` : height || '100px',\n width: '100%',\n },\n 'aria-hidden': 'true',\n });\n}\n\n// --- useSkeleton Hook ---\n// Show skeleton while loading data\n\nexport function useSkeleton(asyncFn, deps = []) {\n const isLoading = signal(true);\n const data = signal(null);\n const error = signal(null);\n\n effect(() => {\n isLoading.set(true);\n error.set(null);\n\n Promise.resolve(asyncFn())\n .then(result => {\n data.set(result);\n isLoading.set(false);\n })\n .catch(err => {\n error.set(err);\n isLoading.set(false);\n });\n });\n\n return {\n isLoading: () => isLoading(),\n data: () => data(),\n error: () => error(),\n Skeleton: (props) => isLoading() ? Skeleton(props) : null,\n };\n}\n\n// --- Placeholder ---\n// Generic placeholder with optional shimmer\n\nexport function Placeholder({\n width = '100%',\n height = 100,\n label = 'Loading...',\n showLabel = false,\n variant = 'shimmer',\n}) {\n injectStyles();\n\n return h('div', {\n class: `what-skeleton ${variant === 'pulse' ? 'what-skeleton-pulse' : ''}`,\n style: {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n 'aria-label': label,\n role: 'status',\n },\n showLabel && h('span', {\n style: {\n color: 'var(--skeleton-text, #999)',\n fontSize: '14px',\n },\n }, label)\n );\n}\n\n// --- Loading Dots ---\n\nexport function LoadingDots({ size = 8, color = '#666' }) {\n injectStyles();\n\n const dotStyle = {\n width: `${size}px`,\n height: `${size}px`,\n borderRadius: '50%',\n backgroundColor: color,\n animation: 'what-skeleton-pulse 1s infinite ease-in-out',\n };\n\n return h('div', {\n class: 'what-loading-dots',\n style: { display: 'flex', gap: `${size / 2}px` },\n 'aria-label': 'Loading',\n role: 'status',\n },\n h('div', { style: { ...dotStyle, animationDelay: '0s' } }),\n h('div', { style: { ...dotStyle, animationDelay: '0.2s' } }),\n h('div', { style: { ...dotStyle, animationDelay: '0.4s' } })\n );\n}\n\n// --- Spinner ---\n\nexport function Spinner({ size = 24, color = '#666', strokeWidth = 2 }) {\n return h('svg', {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n style: { animation: 'spin 1s linear infinite' },\n 'aria-label': 'Loading',\n role: 'status',\n },\n h('style', null, '@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }'),\n h('circle', {\n cx: 12,\n cy: 12,\n r: 10,\n stroke: color,\n strokeWidth,\n fill: 'none',\n strokeDasharray: '31.4 31.4',\n strokeLinecap: 'round',\n })\n );\n}\n", "// What Framework - Data Fetching\n// SWR-like data fetching with caching, revalidation, and optimistic updates\n\nimport { signal, effect, batch, computed, __DEV__ } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\n\n// --- Reactive Cache ---\n// Each cache key maps to shared signals so all components reading the same key\n// see updates when ANY component mutates/revalidates that key.\n// Shared per key: data signal, error signal, isValidating signal.\nconst cacheSignals = new Map(); // key -> signal(value)\nconst errorSignals = new Map(); // key -> signal(error)\nconst validatingSignals = new Map(); // key -> signal(boolean)\nconst cacheTimestamps = new Map(); // key -> last access time (for LRU)\nconst MAX_CACHE_SIZE = 200;\n\nfunction getCacheSignal(key) {\n cacheTimestamps.set(key, Date.now());\n if (!cacheSignals.has(key)) {\n cacheSignals.set(key, signal(null));\n // Evict oldest entries if cache exceeds limit\n if (cacheSignals.size > MAX_CACHE_SIZE) {\n evictOldest();\n }\n }\n return cacheSignals.get(key);\n}\n\nfunction getErrorSignal(key) {\n if (!errorSignals.has(key)) errorSignals.set(key, signal(null));\n return errorSignals.get(key);\n}\n\nfunction getValidatingSignal(key) {\n if (!validatingSignals.has(key)) validatingSignals.set(key, signal(false));\n return validatingSignals.get(key);\n}\n\nfunction evictOldest() {\n // Remove the 20% oldest entries\n const entries = [...cacheTimestamps.entries()].sort((a, b) => a[1] - b[1]);\n const toRemove = Math.floor(MAX_CACHE_SIZE * 0.2);\n for (let i = 0; i < toRemove && i < entries.length; i++) {\n const key = entries[i][0];\n // Don't evict keys with active subscribers\n if (revalidationSubscribers.has(key) && revalidationSubscribers.get(key).size > 0) continue;\n cacheSignals.delete(key);\n errorSignals.delete(key);\n validatingSignals.delete(key);\n cacheTimestamps.delete(key);\n lastFetchTimestamps.delete(key);\n }\n}\n\n// Subscribers for invalidation: key -> Set<revalidateFn>\n// When invalidateQueries is called, all subscribers re-fetch\nconst revalidationSubscribers = new Map();\n\nfunction subscribeToKey(key, revalidateFn) {\n if (!revalidationSubscribers.has(key)) revalidationSubscribers.set(key, new Set());\n revalidationSubscribers.get(key).add(revalidateFn);\n return () => {\n const subs = revalidationSubscribers.get(key);\n if (subs) {\n subs.delete(revalidateFn);\n if (subs.size === 0) revalidationSubscribers.delete(key);\n }\n };\n}\n\nconst inFlightRequests = new Map(); // key -> { promise, timestamp, refCount }\nconst lastFetchTimestamps = new Map(); // key -> timestamp of last completed fetch\n\n// Create an effect scoped to the current component's lifecycle.\n// When the component unmounts, the effect is automatically disposed.\nfunction scopedEffect(fn) {\n const ctx = getCurrentComponent?.();\n const dispose = effect(fn);\n if (ctx) ctx.effects.push(dispose);\n return dispose;\n}\n\n// --- useFetch Hook ---\n// Simple fetch with automatic JSON parsing and error handling\n\nexport function useFetch(url, options = {}) {\n const {\n method = 'GET',\n body,\n headers = {},\n transform = (data) => data,\n initialData = null,\n } = options;\n\n const data = signal(initialData);\n const error = signal(null);\n const isLoading = signal(true);\n let abortController = null;\n\n async function fetchData() {\n // Abort previous request\n if (abortController) abortController.abort();\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n isLoading.set(true);\n error.set(null);\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const json = await response.json();\n if (!abortSignal.aborted) {\n data.set(transform(json));\n }\n } catch (e) {\n if (!abortSignal.aborted) {\n error.set(e);\n }\n } finally {\n if (!abortSignal.aborted) {\n isLoading.set(false);\n }\n }\n }\n\n // Fetch on mount, abort on unmount\n scopedEffect(() => {\n fetchData();\n return () => {\n if (abortController) abortController.abort();\n };\n });\n\n return {\n data: () => data(),\n error: () => error(),\n isLoading: () => isLoading(),\n refetch: fetchData,\n mutate: (newData) => data.set(newData),\n };\n}\n\n// --- useSWR Hook ---\n// Stale-while-revalidate pattern with caching\n\nexport function useSWR(key, fetcher, options = {}) {\n const {\n revalidateOnFocus = true,\n revalidateOnReconnect = true,\n refreshInterval = 0,\n dedupingInterval = 2000,\n fallbackData,\n onSuccess,\n onError,\n suspense = false,\n } = options;\n\n // Support null/undefined/false key for conditional/dependent fetching\n // When key is falsy, don't fetch \u2014 return idle state\n if (key == null || key === false) {\n const data = signal(fallbackData || null);\n const error = signal(null);\n return {\n data: () => data(),\n error: () => error(),\n isLoading: () => false,\n isValidating: () => false,\n mutate: (newData) => data.set(typeof newData === 'function' ? newData(data()) : newData),\n revalidate: () => Promise.resolve(),\n };\n }\n\n // Shared reactive cache signals \u2014 all useSWR instances with the same key\n // read from these signals, so mutating from one component updates all others.\n const cacheS = getCacheSignal(key);\n const error = getErrorSignal(key);\n const isValidating = getValidatingSignal(key);\n const data = computed(() => cacheS() ?? fallbackData ?? null);\n const isLoading = computed(() => cacheS() == null && isValidating());\n\n let abortController = null;\n\n async function revalidate() {\n const now = Date.now();\n\n // Deduplication: if there's already a request in flight, reuse it\n if (inFlightRequests.has(key)) {\n const existing = inFlightRequests.get(key);\n if (now - existing.timestamp < dedupingInterval) {\n existing.refCount++;\n return existing.promise;\n }\n }\n\n // Also deduplicate against recently completed fetches\n const lastFetch = lastFetchTimestamps.get(key);\n if (lastFetch && now - lastFetch < dedupingInterval && cacheS.peek() != null) {\n return cacheS.peek();\n }\n\n // Abort previous request only if no other subscribers are using it\n if (abortController) {\n const existing = inFlightRequests.get(key);\n if (!existing || existing.refCount <= 1) {\n abortController.abort();\n }\n }\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n isValidating.set(true);\n\n const promise = fetcher(key, { signal: abortSignal });\n inFlightRequests.set(key, { promise, timestamp: now, refCount: 1 });\n\n try {\n const result = await promise;\n if (abortSignal.aborted) return;\n batch(() => {\n cacheS.set(result); // Updates ALL components reading this key\n error.set(null);\n });\n cacheTimestamps.set(key, Date.now());\n lastFetchTimestamps.set(key, Date.now());\n if (onSuccess) onSuccess(result, key);\n return result;\n } catch (e) {\n if (abortSignal.aborted) return;\n error.set(e);\n if (onError) onError(e, key);\n throw e;\n } finally {\n if (!abortSignal.aborted) isValidating.set(false);\n const flight = inFlightRequests.get(key);\n if (flight) {\n flight.refCount--;\n if (flight.refCount <= 0) inFlightRequests.delete(key);\n }\n }\n }\n\n // Subscribe to invalidation events for this key\n const unsubscribe = subscribeToKey(key, () => revalidate().catch(() => {}));\n\n // Initial fetch\n scopedEffect(() => {\n revalidate().catch(() => {});\n // Cleanup: abort and unsubscribe on unmount\n return () => {\n if (abortController) abortController.abort();\n unsubscribe();\n };\n });\n\n // Revalidate on focus\n if (revalidateOnFocus && typeof window !== 'undefined') {\n scopedEffect(() => {\n const handler = () => {\n if (document.visibilityState === 'visible') {\n revalidate().catch(() => {});\n }\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n });\n }\n\n // Revalidate on reconnect\n if (revalidateOnReconnect && typeof window !== 'undefined') {\n scopedEffect(() => {\n const handler = () => revalidate().catch(() => {});\n window.addEventListener('online', handler);\n return () => window.removeEventListener('online', handler);\n });\n }\n\n // Polling\n if (refreshInterval > 0) {\n scopedEffect(() => {\n const interval = setInterval(() => {\n revalidate().catch(() => {});\n }, refreshInterval);\n return () => clearInterval(interval);\n });\n }\n\n return {\n data: () => data(),\n error: () => error(),\n isLoading: () => isLoading(),\n isValidating: () => isValidating(),\n mutate: (newData, shouldRevalidate = true) => {\n const resolved = typeof newData === 'function' ? newData(cacheS.peek()) : newData;\n cacheS.set(resolved); // Updates ALL components reading this key\n cacheTimestamps.set(key, Date.now());\n if (shouldRevalidate) {\n revalidate().catch(() => {});\n }\n },\n revalidate,\n };\n}\n\n// --- useQuery Hook ---\n// TanStack Query-like API\n\nexport function useQuery(options) {\n const {\n queryKey,\n queryFn,\n enabled = true,\n staleTime = 0,\n cacheTime = 5 * 60 * 1000,\n refetchOnWindowFocus = true,\n refetchInterval = false,\n retry = 3,\n retryDelay = (attempt) => Math.min(1000 * 2 ** attempt, 30000),\n onSuccess,\n onError,\n onSettled,\n select,\n placeholderData,\n } = options;\n\n const key = Array.isArray(queryKey) ? queryKey.join(':') : queryKey;\n\n const cacheS = getCacheSignal(key);\n const data = computed(() => {\n const d = cacheS();\n return select && d !== null ? select(d) : d;\n });\n const error = getErrorSignal(key);\n const status = signal(cacheS.peek() != null ? 'success' : 'loading');\n const fetchStatus = signal('idle');\n\n let lastFetchTime = 0;\n let abortController = null;\n\n async function fetchQuery() {\n if (!enabled) return;\n\n // Check if data is still fresh\n const now = Date.now();\n if (cacheS.peek() != null && now - lastFetchTime < staleTime) {\n return cacheS.peek();\n }\n\n // Abort previous request\n if (abortController) abortController.abort();\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n fetchStatus.set('fetching');\n if (cacheS.peek() == null) {\n status.set('loading');\n }\n\n let attempts = 0;\n\n async function attemptFetch() {\n try {\n const result = await queryFn({ queryKey: Array.isArray(queryKey) ? queryKey : [queryKey], signal: abortSignal });\n if (abortSignal.aborted) return;\n batch(() => {\n cacheS.set(result); // Updates all components reading this key\n error.set(null);\n status.set('success');\n fetchStatus.set('idle');\n });\n lastFetchTime = Date.now();\n cacheTimestamps.set(key, Date.now());\n\n if (onSuccess) onSuccess(result);\n if (onSettled) onSettled(result, null);\n\n // Schedule cache cleanup (only if no active subscribers)\n setTimeout(() => {\n if (Date.now() - lastFetchTime >= cacheTime) {\n const subs = revalidationSubscribers.get(key);\n if (!subs || subs.size === 0) {\n cacheSignals.delete(key);\n errorSignals.delete(key);\n validatingSignals.delete(key);\n cacheTimestamps.delete(key);\n lastFetchTimestamps.delete(key);\n }\n }\n }, cacheTime);\n\n return result;\n } catch (e) {\n if (abortSignal.aborted) return;\n attempts++;\n if (attempts < retry) {\n // Abort-aware retry delay: cancel the wait if the component unmounts\n await new Promise((resolve, reject) => {\n const id = setTimeout(resolve, retryDelay(attempts));\n abortSignal.addEventListener('abort', () => {\n clearTimeout(id);\n reject(new DOMException('Aborted', 'AbortError'));\n }, { once: true });\n }).catch(e => { if (e.name === 'AbortError') return; throw e; });\n if (abortSignal.aborted) return;\n return attemptFetch();\n }\n\n batch(() => {\n error.set(e);\n status.set('error');\n fetchStatus.set('idle');\n });\n\n if (onError) onError(e);\n if (onSettled) onSettled(null, e);\n\n throw e;\n }\n }\n\n return attemptFetch();\n }\n\n // Subscribe to invalidation events for this key\n const unsubscribe = subscribeToKey(key, () => fetchQuery().catch(() => {}));\n\n // Initial fetch\n scopedEffect(() => {\n if (enabled) {\n fetchQuery().catch(() => {});\n }\n return () => {\n if (abortController) abortController.abort();\n unsubscribe();\n };\n });\n\n // Refetch on focus\n if (refetchOnWindowFocus && typeof window !== 'undefined') {\n scopedEffect(() => {\n const handler = () => {\n if (document.visibilityState === 'visible') {\n fetchQuery().catch(() => {});\n }\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n });\n }\n\n // Polling\n if (refetchInterval) {\n scopedEffect(() => {\n const interval = setInterval(() => {\n fetchQuery().catch(() => {});\n }, refetchInterval);\n return () => clearInterval(interval);\n });\n }\n\n return {\n data: () => data() ?? placeholderData,\n error: () => error(),\n status: () => status(),\n fetchStatus: () => fetchStatus(),\n isLoading: () => status() === 'loading',\n isError: () => status() === 'error',\n isSuccess: () => status() === 'success',\n isFetching: () => fetchStatus() === 'fetching',\n refetch: fetchQuery,\n };\n}\n\n// --- useInfiniteQuery Hook ---\n// For paginated/infinite scroll data\n\nexport function useInfiniteQuery(options) {\n const {\n queryKey,\n queryFn,\n getNextPageParam,\n getPreviousPageParam,\n initialPageParam,\n ...rest\n } = options;\n\n const pages = signal([]);\n const pageParams = signal([initialPageParam]);\n const hasNextPage = signal(true);\n const hasPreviousPage = signal(false);\n const isFetchingNextPage = signal(false);\n const isFetchingPreviousPage = signal(false);\n\n const key = Array.isArray(queryKey) ? queryKey.join(':') : queryKey;\n let abortController = null;\n\n let isRefetching = false;\n\n async function fetchPage(pageParam, direction = 'next') {\n // Abort previous page fetch\n if (abortController) abortController.abort();\n abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n const loading = direction === 'next' ? isFetchingNextPage : isFetchingPreviousPage;\n loading.set(true);\n\n try {\n const result = await queryFn({\n queryKey: Array.isArray(queryKey) ? queryKey : [queryKey],\n pageParam,\n signal: abortSignal,\n });\n\n if (abortSignal.aborted) return;\n\n batch(() => {\n if (isRefetching) {\n // Refetch: replace all pages with fresh first page (SWR pattern \u2014\n // old pages stayed visible during fetch, now swap atomically)\n pages.set([result]);\n pageParams.set([pageParam]);\n isRefetching = false;\n } else if (direction === 'next') {\n pages.set([...pages.peek(), result]);\n pageParams.set([...pageParams.peek(), pageParam]);\n } else {\n pages.set([result, ...pages.peek()]);\n pageParams.set([pageParam, ...pageParams.peek()]);\n }\n\n const nextParam = getNextPageParam?.(result, pages.peek());\n hasNextPage.set(nextParam !== undefined);\n\n if (getPreviousPageParam) {\n const prevParam = getPreviousPageParam(result, pages.peek());\n hasPreviousPage.set(prevParam !== undefined);\n }\n });\n\n return result;\n } finally {\n if (!abortSignal.aborted) loading.set(false);\n }\n }\n\n // Initial fetch, abort on unmount\n scopedEffect(() => {\n fetchPage(initialPageParam).catch(() => {});\n return () => {\n if (abortController) abortController.abort();\n };\n });\n\n return {\n data: () => ({ pages: pages(), pageParams: pageParams() }),\n hasNextPage: () => hasNextPage(),\n hasPreviousPage: () => hasPreviousPage(),\n isFetchingNextPage: () => isFetchingNextPage(),\n isFetchingPreviousPage: () => isFetchingPreviousPage(),\n fetchNextPage: async () => {\n const lastPage = pages.peek()[pages.peek().length - 1];\n const nextParam = getNextPageParam?.(lastPage, pages.peek());\n if (nextParam !== undefined) {\n return fetchPage(nextParam, 'next');\n }\n },\n fetchPreviousPage: async () => {\n const firstPage = pages.peek()[0];\n const prevParam = getPreviousPageParam?.(firstPage, pages.peek());\n if (prevParam !== undefined) {\n return fetchPage(prevParam, 'previous');\n }\n },\n refetch: async () => {\n // Keep old pages visible during refetch (SWR pattern).\n // The fetchPage callback swaps them atomically when data arrives.\n isRefetching = true;\n return fetchPage(initialPageParam);\n },\n };\n}\n\n// --- Cache Management ---\n\nexport function invalidateQueries(keyOrPredicate, options = {}) {\n const { hard = false } = options;\n const keysToInvalidate = [];\n if (typeof keyOrPredicate === 'function') {\n for (const [key] of cacheSignals) {\n if (keyOrPredicate(key)) keysToInvalidate.push(key);\n }\n } else {\n keysToInvalidate.push(keyOrPredicate);\n }\n\n for (const key of keysToInvalidate) {\n // Hard invalidation clears data immediately (shows loading state)\n // Soft invalidation (default) keeps stale data visible during re-fetch (SWR pattern)\n if (hard && cacheSignals.has(key)) cacheSignals.get(key).set(null);\n // Trigger all subscribers to re-fetch\n const subs = revalidationSubscribers.get(key);\n if (subs) {\n for (const revalidate of subs) revalidate();\n }\n }\n}\n\nexport function prefetchQuery(key, fetcher) {\n const cacheS = getCacheSignal(key);\n return fetcher(key).then(result => {\n cacheS.set(result);\n cacheTimestamps.set(key, Date.now());\n return result;\n });\n}\n\nexport function setQueryData(key, updater) {\n const cacheS = getCacheSignal(key);\n const current = cacheS.peek();\n cacheS.set(typeof updater === 'function' ? updater(current) : updater);\n cacheTimestamps.set(key, Date.now());\n}\n\nexport function getQueryData(key) {\n return cacheSignals.has(key) ? cacheSignals.get(key).peek() : undefined;\n}\n\nexport function clearCache() {\n cacheSignals.clear();\n errorSignals.clear();\n validatingSignals.clear();\n cacheTimestamps.clear();\n lastFetchTimestamps.clear();\n inFlightRequests.clear();\n}\n\n/**\n * Get a snapshot of all cache entries for devtools.\n * @internal\n */\nexport function __getCacheSnapshot() {\n const entries = [];\n for (const [key, sig] of cacheSignals) {\n entries.push({\n key,\n data: sig.peek(),\n error: errorSignals.has(key) ? errorSignals.get(key).peek() : null,\n isValidating: validatingSignals.has(key) ? validatingSignals.get(key).peek() : false,\n });\n }\n return entries;\n}\n", "// What Framework - Form Utilities\n// Controlled inputs, validation, and form state management\n\nimport { signal, computed, batch } from './reactive.js';\nimport { getCurrentComponent } from './dom.js';\nimport { h } from './h.js';\n\n// --- useForm Hook ---\n// Complete form state management with validation\n\nexport function useForm(options = {}) {\n // Hook-stable behavior inside components\n const ctx = getCurrentComponent?.();\n if (ctx) {\n const index = ctx.hookIndex++;\n if (!ctx.hooks[index]) {\n ctx.hooks[index] = createFormController(options);\n }\n return ctx.hooks[index];\n }\n\n // Standalone usage outside component scope\n return createFormController(options);\n}\n\nfunction createFormController(options = {}) {\n const {\n defaultValues = {},\n mode = 'onSubmit', // 'onSubmit' | 'onChange' | 'onBlur'\n reValidateMode = 'onChange',\n resolver,\n } = options;\n\n // Per-field signals for granular reactivity (avoids full-form re-renders on each keystroke)\n const fieldSignals = {};\n const errorSignals = {};\n const touchedSignals = {};\n const errorsState = signal({});\n\n function getFieldSignal(name) {\n if (!fieldSignals[name]) {\n fieldSignals[name] = signal(defaultValues[name] ?? '');\n }\n return fieldSignals[name];\n }\n\n function getErrorSignal(name) {\n if (!errorSignals[name]) {\n errorSignals[name] = signal(null);\n }\n return errorSignals[name];\n }\n\n function getTouchedSignal(name) {\n if (!touchedSignals[name]) {\n touchedSignals[name] = signal(false);\n }\n return touchedSignals[name];\n }\n\n // Aggregate signals for bulk operations\n const isDirty = signal(false);\n const isSubmitting = signal(false);\n const isSubmitted = signal(false);\n const isValidating = signal(false);\n const submitCount = signal(0);\n\n // Helper: get all current values as a plain object.\n // tracked=true subscribes to all known fields; tracked=false is snapshot-only.\n function getAllValues(tracked = false) {\n const result = { ...defaultValues };\n for (const [name, sig] of Object.entries(fieldSignals)) {\n result[name] = tracked ? sig() : sig.peek();\n }\n return result;\n }\n\n // Helper: get all current errors as a plain object.\n // tracked=true subscribes to all known field errors; tracked=false is snapshot-only.\n function getAllErrors(tracked = false) {\n return tracked ? errorsState() : errorsState.peek();\n }\n\n function setFieldError(name, error) {\n const nextError = error ?? null;\n getErrorSignal(name).set(nextError);\n errorsState.set((prev) => {\n const prevError = prev[name];\n if (prevError === nextError) return prev;\n if (nextError == null) {\n if (!Object.prototype.hasOwnProperty.call(prev, name)) return prev;\n const next = { ...prev };\n delete next[name];\n return next;\n }\n return { ...prev, [name]: nextError };\n });\n }\n\n function replaceAllErrors(nextErrors = {}) {\n const normalized = nextErrors || {};\n batch(() => {\n for (const [name, sig] of Object.entries(errorSignals)) {\n if (!Object.prototype.hasOwnProperty.call(normalized, name)) {\n sig.set(null);\n }\n }\n for (const [name, err] of Object.entries(normalized)) {\n getErrorSignal(name).set(err ?? null);\n }\n errorsState.set({ ...normalized });\n });\n }\n\n // Computed states\n const isValid = computed(() => Object.keys(getAllErrors(true)).length === 0);\n\n const dirtyFields = computed(() => {\n const dirty = {};\n for (const [name, sig] of Object.entries(fieldSignals)) {\n if (sig() !== (defaultValues[name] ?? '')) {\n dirty[name] = true;\n }\n }\n return dirty;\n });\n\n // Validation\n async function validate(fieldName) {\n if (!resolver) return true;\n\n isValidating.set(true);\n try {\n const result = await resolver(getAllValues(false));\n const nextErrors = result?.errors || {};\n\n if (fieldName) {\n const nextError = nextErrors[fieldName] ?? null;\n setFieldError(fieldName, nextError);\n return !nextError;\n } else {\n replaceAllErrors(nextErrors);\n return Object.keys(nextErrors).length === 0;\n }\n } finally {\n isValidating.set(false);\n }\n }\n\n // Register a field \u2014 only subscribes to THIS field's signal\n function register(name, options = {}) {\n const fieldSig = getFieldSignal(name);\n const isCheckbox = options.type === 'checkbox' || options.type === 'radio';\n\n const handler = (e) => {\n const value = (e.target.type === 'checkbox' || e.target.type === 'radio')\n ? e.target.checked\n : e.target.value;\n setValue(name, value);\n\n if (mode === 'onChange' || (isSubmitted.peek() && reValidateMode === 'onChange')) {\n validate(name);\n }\n };\n\n const result = {\n name,\n onBlur: () => {\n getTouchedSignal(name).set(true);\n\n if (mode === 'onBlur' || (isSubmitted.peek() && reValidateMode === 'onBlur')) {\n validate(name);\n }\n },\n onFocus: () => {},\n ref: options.ref,\n };\n\n if (isCheckbox) {\n // Checkbox/radio: use checked prop + onchange event\n Object.defineProperty(result, 'checked', {\n get() { return !!fieldSig(); },\n enumerable: true,\n });\n result.onchange = handler;\n } else {\n // Text/select/textarea: use value prop + oninput event\n Object.defineProperty(result, 'value', {\n get() { return fieldSig(); },\n enumerable: true,\n });\n result.oninput = handler;\n }\n\n return result;\n }\n\n // Set single field value \u2014 only triggers re-render for components reading this field\n function setValue(name, value, options = {}) {\n const { shouldValidate = false, shouldDirty = true } = options;\n\n getFieldSignal(name).set(value);\n if (shouldDirty) isDirty.set(true);\n\n if (shouldValidate) {\n validate(name);\n }\n }\n\n // Get single field value\n function getValue(name) {\n return getFieldSignal(name)();\n }\n\n // Set error for a field\n function setError(name, error) {\n setFieldError(name, error);\n }\n\n // Clear error for a field\n function clearError(name) {\n setFieldError(name, null);\n }\n\n // Clear all errors\n function clearErrors() {\n replaceAllErrors({});\n }\n\n // Reset form\n function reset(newValues = defaultValues) {\n batch(() => {\n for (const [name, sig] of Object.entries(fieldSignals)) {\n sig.set(newValues[name] ?? '');\n }\n for (const sig of Object.values(errorSignals)) {\n sig.set(null);\n }\n errorsState.set({});\n for (const sig of Object.values(touchedSignals)) {\n sig.set(false);\n }\n isDirty.set(false);\n isSubmitted.set(false);\n });\n }\n\n // Handle submit\n function handleSubmit(onValid, onInvalid) {\n return async (e) => {\n if (e) e.preventDefault();\n\n isSubmitting.set(true);\n isSubmitted.set(true);\n submitCount.set(submitCount.peek() + 1);\n\n const isFormValid = await validate();\n\n if (isFormValid) {\n await onValid(getAllValues());\n } else if (onInvalid) {\n onInvalid(getAllErrors(false));\n }\n\n isSubmitting.set(false);\n };\n }\n\n // Watch a field \u2014 returns a computed that subscribes only to this field\n function watch(name) {\n if (name) {\n return computed(() => getFieldSignal(name)());\n }\n // Watch all: return a computed that reads all field signals\n return computed(() => getAllValues(true));\n }\n\n return {\n register,\n handleSubmit,\n setValue,\n getValue,\n setError,\n clearError,\n clearErrors,\n reset,\n watch,\n validate,\n // Form state\n formState: {\n get values() { return getAllValues(true); },\n get errors() { return getAllErrors(true); },\n error: (name) => getErrorSignal(name)(),\n get touched() {\n const result = {};\n for (const [name, sig] of Object.entries(touchedSignals)) {\n if (sig()) result[name] = true;\n }\n return result;\n },\n isDirty: () => isDirty(),\n isValid,\n isValidating: () => isValidating(),\n isSubmitting: () => isSubmitting(),\n isSubmitted: () => isSubmitted(),\n submitCount: () => submitCount(),\n dirtyFields,\n },\n };\n}\n\n// --- Validation Resolvers ---\n\nexport function zodResolver(schema) {\n return async (values) => {\n try {\n const result = await schema.parseAsync(values);\n return { values: result, errors: {} };\n } catch (e) {\n const errors = {};\n for (const issue of e.errors || []) {\n const path = issue.path.join('.');\n if (!errors[path]) {\n errors[path] = { type: issue.code, message: issue.message };\n }\n }\n return { values: {}, errors };\n }\n };\n}\n\nexport function yupResolver(schema) {\n return async (values) => {\n try {\n const result = await schema.validate(values, { abortEarly: false });\n return { values: result, errors: {} };\n } catch (e) {\n const errors = {};\n for (const err of e.inner || []) {\n if (!errors[err.path]) {\n errors[err.path] = { type: err.type, message: err.message };\n }\n }\n return { values: {}, errors };\n }\n };\n}\n\n// Simple validation resolver\nexport function simpleResolver(rules) {\n return async (values) => {\n const errors = {};\n\n for (const [field, fieldRules] of Object.entries(rules)) {\n const value = values[field];\n\n for (const rule of fieldRules) {\n const error = rule(value, values);\n if (error) {\n errors[field] = { type: 'validation', message: error };\n break;\n }\n }\n }\n\n return { values, errors };\n };\n}\n\n// Built-in validation rules\nexport const rules = {\n required: (message = 'This field is required') => (value) => {\n if (value === undefined || value === null || value === '') {\n return message;\n }\n },\n\n minLength: (min, message) => (value) => {\n if (typeof value === 'string' && value.length < min) {\n return message || `Must be at least ${min} characters`;\n }\n },\n\n maxLength: (max, message) => (value) => {\n if (typeof value === 'string' && value.length > max) {\n return message || `Must be at most ${max} characters`;\n }\n },\n\n min: (min, message) => (value) => {\n if (typeof value === 'number' && value < min) {\n return message || `Must be at least ${min}`;\n }\n },\n\n max: (max, message) => (value) => {\n if (typeof value === 'number' && value > max) {\n return message || `Must be at most ${max}`;\n }\n },\n\n pattern: (regex, message = 'Invalid format') => (value) => {\n if (typeof value === 'string' && !regex.test(value)) {\n return message;\n }\n },\n\n email: (message = 'Invalid email address') => (value) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (typeof value === 'string' && !emailRegex.test(value)) {\n return message;\n }\n },\n\n url: (message = 'Invalid URL') => (value) => {\n try {\n if (typeof value === 'string' && value) {\n new URL(value);\n }\n } catch {\n return message;\n }\n },\n\n match: (field, message) => (value, values) => {\n if (value !== values[field]) {\n return message || `Must match ${field}`;\n }\n },\n\n custom: (validator) => validator,\n};\n\n// --- useField Hook ---\n// Individual field control\n\nexport function useField(name, options = {}) {\n const { validate: validateFn, defaultValue = '' } = options;\n\n const value = signal(defaultValue);\n const error = signal(null);\n const isTouched = signal(false);\n const isDirty = signal(false);\n\n async function validate() {\n if (!validateFn) return true;\n const result = await validateFn(value.peek());\n error.set(result || null);\n return !result;\n }\n\n return {\n name,\n value: () => value(),\n error: () => error(),\n isTouched: () => isTouched(),\n isDirty: () => isDirty(),\n setValue: (v) => {\n value.set(v);\n isDirty.set(true);\n },\n setError: (e) => error.set(e),\n validate,\n reset: () => {\n value.set(defaultValue);\n error.set(null);\n isTouched.set(false);\n isDirty.set(false);\n },\n inputProps: () => ({\n name,\n value: value(),\n onInput: (e) => {\n value.set(e.target.value);\n isDirty.set(true);\n },\n onBlur: () => {\n isTouched.set(true);\n validate();\n },\n }),\n };\n}\n\n// --- Controlled Input Components ---\n\nexport function Input(props) {\n const { register, error, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('input', {\n ...rest,\n ...registered,\n 'aria-invalid': error ? 'true' : undefined,\n });\n}\n\nexport function Textarea(props) {\n const { register, error, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('textarea', {\n ...rest,\n ...registered,\n 'aria-invalid': error ? 'true' : undefined,\n });\n}\n\nexport function Select(props) {\n const { register, error, children, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('select', {\n ...rest,\n ...registered,\n 'aria-invalid': error ? 'true' : undefined,\n }, children);\n}\n\nexport function Checkbox(props) {\n const { register, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('input', {\n type: 'checkbox',\n ...rest,\n ...registered,\n checked: registered.value,\n });\n}\n\nexport function Radio(props) {\n const { register, value: radioValue, ...rest } = props;\n const registered = register ? register(props.name) : {};\n\n return h('input', {\n type: 'radio',\n value: radioValue,\n ...rest,\n checked: registered.value === radioValue,\n onChange: (e) => {\n if (e.target.checked && registered.onInput) {\n registered.onInput({ target: { value: radioValue } });\n }\n },\n });\n}\n\n// --- Form Error Display ---\n\nexport function ErrorMessage({ name, formState, errors, render }) {\n const error = formState && typeof formState.error === 'function'\n ? formState.error(name)\n : (\n (\n formState?.errors != null\n ? formState.errors\n : (typeof errors === 'function' ? errors() : errors)\n )?.[name] || null\n );\n if (!error) return null;\n\n if (render) {\n return render({ message: error.message, type: error.type });\n }\n\n return h('span', { class: 'what-error', role: 'alert' }, error.message);\n}\n", "// What Framework - Structured Error System\n// Agent-first error reporting with actionable codes, suggestions, and JSON output.\n// Every error tells an AI agent exactly what went wrong and how to fix it.\n\nimport { __DEV__ } from './reactive.js';\n\n// --- Error Codes ---\n// Each code maps to a specific, well-documented mistake pattern.\n\nexport const ERROR_CODES = {\n INFINITE_EFFECT: {\n code: 'ERR_INFINITE_EFFECT',\n severity: 'error',\n template: 'Effect \"{{effectName}}\" exceeded 25 flush iterations \u2014 likely an infinite loop.',\n suggestion: 'An effect is writing to a signal it also reads, creating a cycle. Use untrack() to read the signal without subscribing, or restructure so the write and read are in separate effects.',\n codeExample: `// Bad \u2014 reads and writes count, creating a cycle:\neffect(() => { count(count() + 1); });\n\n// Good \u2014 use untrack() so the read doesn't subscribe:\neffect(() => { count(untrack(count) + 1); });\n\n// Better \u2014 split into separate logic:\nconst doubled = computed(() => count() * 2);`,\n },\n\n MISSING_SIGNAL_READ: {\n code: 'ERR_MISSING_SIGNAL_READ',\n severity: 'warning',\n template: 'Signal \"{{signalName}}\" used without calling () \u2014 renders as \"[Function]\" instead of its value.',\n suggestion: 'Signals are functions. Call them to read: count() not count. In JSX: {count()} not {count}.',\n codeExample: `// Bad \u2014 signal reference, not value:\n<span>{count}</span> // renders \"[Function]\"\n\n// Good \u2014 call the signal:\n<span>{count()}</span> // renders the actual value`,\n },\n\n HYDRATION_MISMATCH: {\n code: 'ERR_HYDRATION_MISMATCH',\n severity: 'error',\n template: 'Hydration mismatch in component \"{{component}}\": server rendered \"{{serverHTML}}\" but client expects \"{{clientHTML}}\".',\n suggestion: 'Ensure server and client render identical initial HTML. Avoid reading browser-only APIs (window, localStorage) during the initial render. Use onMount() for client-only logic.',\n codeExample: `// Bad \u2014 different on server vs client:\nfunction App() {\n return <p>{window.innerWidth}</p>;\n}\n\n// Good \u2014 use onMount for client-only values:\nfunction App() {\n const width = signal(0);\n onMount(() => width(window.innerWidth));\n return <p>{width()}</p>;\n}`,\n },\n\n ORPHAN_EFFECT: {\n code: 'ERR_ORPHAN_EFFECT',\n severity: 'warning',\n template: 'Effect \"{{effectName}}\" was created outside a reactive root \u2014 it will never be cleaned up.',\n suggestion: 'Wrap effect creation in createRoot() or create effects inside component functions where they are automatically tracked.',\n codeExample: `// Bad \u2014 orphaned, leaks memory:\neffect(() => console.log(count()));\n\n// Good \u2014 inside a root with cleanup:\ncreateRoot(dispose => {\n effect(() => console.log(count()));\n // later: dispose() cleans up\n});`,\n },\n\n SIGNAL_WRITE_IN_RENDER: {\n code: 'ERR_SIGNAL_WRITE_IN_RENDER',\n severity: 'error',\n template: 'Signal \"{{signalName}}\" written during render of component \"{{component}}\". This triggers re-execution.',\n suggestion: 'Move signal writes into event handlers, effects, or onMount(). The component body should only read signals, not write them.',\n codeExample: `// Bad \u2014 write during render:\nfunction Counter() {\n count(count() + 1); // triggers infinite loop\n return <span>{count()}</span>;\n}\n\n// Good \u2014 write in event handler:\nfunction Counter() {\n return <button onclick={() => count(c => c + 1)}>{count()}</button>;\n}`,\n },\n\n MISSING_CLEANUP: {\n code: 'ERR_MISSING_CLEANUP',\n severity: 'warning',\n template: 'Effect sets up \"{{resource}}\" but does not return a cleanup function.',\n suggestion: 'Effects that add event listeners, set timers, or open connections should return a cleanup function to prevent memory leaks.',\n codeExample: `// Bad \u2014 no cleanup:\neffect(() => {\n window.addEventListener('resize', handler);\n});\n\n// Good \u2014 return cleanup:\neffect(() => {\n window.addEventListener('resize', handler);\n return () => window.removeEventListener('resize', handler);\n});`,\n },\n\n UNSAFE_INNERHTML: {\n code: 'ERR_UNSAFE_INNERHTML',\n severity: 'warning',\n template: 'innerHTML set on element without using the __html safety marker.',\n suggestion: 'Use the html tagged template literal or pass { __html: content } to mark innerHTML as intentional and reviewed.',\n codeExample: `// Bad \u2014 raw innerHTML (XSS risk):\n<div innerHTML={userInput} />\n\n// Good \u2014 explicit opt-in:\n<div innerHTML={{ __html: sanitizedContent }} />\n\n// Better \u2014 use the html template literal:\nhtml\\`<div>\\${sanitizedContent}</div>\\``,\n },\n\n MISSING_KEY: {\n code: 'ERR_MISSING_KEY',\n severity: 'warning',\n template: 'List rendered without key prop in component \"{{component}}\". Items may re-order incorrectly.',\n suggestion: 'Add a unique key prop to each item in a list. Use a stable identifier (like an ID), not the array index.',\n codeExample: `// Bad \u2014 no key:\n<For each={items()}>{item => <li>{item.name}</li>}</For>\n\n// Good \u2014 stable key:\n<For each={items()}>{item => <li key={item.id}>{item.name}</li>}</For>`,\n },\n};\n\n// --- WhatError ---\n// Structured error class with full context for agent consumption.\n\nexport class WhatError extends Error {\n constructor({ code, message, suggestion, file, line, component, signal, effect }) {\n super(message);\n this.name = 'WhatError';\n this.code = code;\n this.suggestion = suggestion;\n this.file = file;\n this.line = line;\n this.component = component;\n this.signal = signal;\n this.effect = effect;\n }\n\n toJSON() {\n return {\n code: this.code,\n message: this.message,\n suggestion: this.suggestion,\n file: this.file,\n line: this.line,\n component: this.component,\n signal: this.signal,\n effect: this.effect,\n };\n }\n}\n\n// --- Error Factory ---\n// Create WhatError instances from error codes with template interpolation.\n\nexport function createWhatError(errorCode, context = {}) {\n const def = typeof errorCode === 'string' ? ERROR_CODES[errorCode] : errorCode;\n if (!def) {\n return new WhatError({\n code: 'ERR_UNKNOWN',\n message: `Unknown error: ${errorCode}`,\n suggestion: 'Check the error code and try again.',\n });\n }\n\n // Interpolate template with context values\n let message = def.template;\n for (const [key, val] of Object.entries(context)) {\n message = message.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), String(val));\n }\n // Clean up any unreplaced placeholders\n message = message.replace(/\\{\\{[^}]+\\}\\}/g, '(unknown)');\n\n return new WhatError({\n code: def.code,\n message,\n suggestion: def.suggestion,\n file: context.file,\n line: context.line,\n component: context.component,\n signal: context.signal || context.signalName,\n effect: context.effect || context.effectName,\n });\n}\n\n// --- Error Collector ---\n// Dev-mode error accumulator for agent retrieval.\n\nlet collectedErrors = [];\nconst MAX_COLLECTED = 200;\n\nexport function collectError(whatError) {\n if (!__DEV__) return;\n collectedErrors.push({\n ...whatError.toJSON(),\n timestamp: Date.now(),\n });\n if (collectedErrors.length > MAX_COLLECTED) {\n collectedErrors = collectedErrors.slice(-MAX_COLLECTED);\n }\n}\n\nexport function getCollectedErrors(since) {\n if (since) return collectedErrors.filter(e => e.timestamp > since);\n return collectedErrors.slice();\n}\n\nexport function clearCollectedErrors() {\n collectedErrors = [];\n}\n\n// --- Error Classification ---\n// Classify a raw Error into a structured WhatError if possible.\n\nexport function classifyError(err, context = {}) {\n const msg = err?.message || String(err);\n\n // Infinite effect loop\n if (msg.includes('infinite effect loop') || msg.includes('25 iterations')) {\n return createWhatError('INFINITE_EFFECT', context);\n }\n\n // Hydration mismatch\n if (msg.includes('hydration') || msg.includes('Hydration')) {\n return createWhatError('HYDRATION_MISMATCH', context);\n }\n\n // Signal write in computed\n if (msg.includes('Signal.set() called inside a computed')) {\n return createWhatError('SIGNAL_WRITE_IN_RENDER', {\n ...context,\n signalName: msg.match(/signal: (\\w+)/)?.[1] || context.signalName,\n });\n }\n\n // Fallback \u2014 return a generic WhatError with the original message\n return new WhatError({\n code: 'ERR_RUNTIME',\n message: msg,\n suggestion: 'Check the stack trace and component context for more details.',\n ...context,\n });\n}\n", "// What Framework - Agent Guardrails\n// Dev-mode runtime checks that catch common mistakes BEFORE they become bugs.\n// Designed for AI agents: structured warnings with fix suggestions.\n\nimport { __DEV__ } from './reactive.js';\nimport { createWhatError, collectError } from './errors.js';\n\n// --- Guardrail Registry ---\n// Each guardrail can be enabled/disabled independently.\n\nconst guardrails = {\n signalReadDetection: true,\n effectCycleDetection: true,\n componentNaming: true,\n importValidation: true,\n};\n\nexport function configureGuardrails(overrides) {\n Object.assign(guardrails, overrides);\n}\n\nexport function getGuardrailConfig() {\n return { ...guardrails };\n}\n\n// --- Guardrail 1: Signal Read Detection ---\n// Detect when a signal function reference is used where its value was intended.\n// This catches the pattern: <span>{count}</span> (should be count())\n//\n// At runtime, we can detect this when a signal is coerced to string (via toString/valueOf)\n// and warn that it should be called.\n\nexport function installSignalReadGuardrail(signalFn, debugName) {\n if (!__DEV__ || !guardrails.signalReadDetection) return signalFn;\n\n // Override toString to catch template literal coercion\n const originalToString = signalFn.toString;\n signalFn.toString = function () {\n const err = createWhatError('MISSING_SIGNAL_READ', {\n signalName: debugName || '(unnamed)',\n });\n console.warn(`[what] ${err.message}\\n Suggestion: ${err.suggestion}`);\n collectError(err);\n // Still return the value so the app doesn't crash\n return String(signalFn());\n };\n\n // Override valueOf for numeric coercion contexts\n signalFn.valueOf = function () {\n const err = createWhatError('MISSING_SIGNAL_READ', {\n signalName: debugName || '(unnamed)',\n });\n console.warn(`[what] ${err.message}\\n Suggestion: ${err.suggestion}`);\n collectError(err);\n return signalFn();\n };\n\n return signalFn;\n}\n\n// --- Guardrail 2: Enhanced Effect Cycle Detection ---\n// Track which signals an effect reads AND writes.\n// If an effect writes to a signal it reads, warn about the specific cycle.\n\nconst effectWriteTracking = new WeakMap(); // effect -> Set of signal debug names\n\nexport function trackEffectSignalWrite(effectRef, signalDebugName) {\n if (!__DEV__ || !guardrails.effectCycleDetection) return;\n\n if (!effectWriteTracking.has(effectRef)) {\n effectWriteTracking.set(effectRef, new Set());\n }\n effectWriteTracking.get(effectRef).add(signalDebugName);\n}\n\nexport function checkEffectCycle(effectRef, readSignals) {\n if (!__DEV__ || !guardrails.effectCycleDetection) return null;\n\n const writes = effectWriteTracking.get(effectRef);\n if (!writes || writes.size === 0) return null;\n\n const overlapping = [];\n for (const sigName of readSignals) {\n if (writes.has(sigName)) {\n overlapping.push(sigName);\n }\n }\n\n if (overlapping.length > 0) {\n const err = createWhatError('INFINITE_EFFECT', {\n effectName: effectRef.fn?.name || '(anonymous)',\n signalName: overlapping.join(', '),\n });\n collectError(err);\n return err;\n }\n\n return null;\n}\n\n// --- Guardrail 3: Component Naming ---\n// Warn if a component function is not PascalCase.\n\nexport function checkComponentName(name) {\n if (!__DEV__ || !guardrails.componentNaming) return null;\n if (!name) return null;\n\n // PascalCase: starts with uppercase letter\n if (/^[A-Z]/.test(name)) return null;\n\n const suggestion = `Component \"${name}\" should use PascalCase (e.g., \"${capitalize(name)}\"). ` +\n 'PascalCase distinguishes components from HTML elements in JSX and is required by the What Framework compiler.';\n\n console.warn(`[what] ${suggestion}`);\n return { code: 'WARN_COMPONENT_NAMING', name, suggestion };\n}\n\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// --- Guardrail 4: Import Validation ---\n// Verify that all named imports from 'what-framework' are valid exports.\n\nconst VALID_EXPORTS = new Set([\n // Reactive primitives\n 'signal', 'computed', 'effect', 'signalMemo', 'batch', 'untrack', 'flushSync',\n 'createRoot', 'getOwner', 'runWithOwner', 'onRootCleanup', '__setDevToolsHooks',\n // Rendering\n 'template', '_template', 'svgTemplate', 'insert', 'mapArray', 'spread',\n 'setProp', 'delegateEvents', 'on', 'classList', 'hydrate', 'isHydrating',\n '_$createComponent',\n // JSX\n 'h', 'Fragment', 'html',\n // DOM\n 'mount',\n // Hooks\n 'useState', 'useSignal', 'useComputed', 'useEffect', 'useMemo', 'useCallback',\n 'useRef', 'useContext', 'useReducer', 'createContext', 'onMount', 'onCleanup',\n 'createResource',\n // Components\n 'memo', 'lazy', 'Suspense', 'ErrorBoundary', 'Show', 'For', 'Switch', 'Match', 'Island',\n // Store\n 'createStore', 'derived', 'storeComputed', 'atom',\n // Head\n 'Head', 'clearHead',\n // Utilities\n 'each', 'cls', 'style', 'debounce', 'throttle', 'useMediaQuery',\n 'useLocalStorage', 'useClickOutside', 'Portal', 'transition',\n // Scheduler\n 'scheduleRead', 'scheduleWrite', 'flushScheduler', 'measure', 'mutate',\n 'useScheduledEffect', 'nextFrame', 'raf', 'onResize', 'onIntersect', 'smoothScrollTo',\n // Animation\n 'spring', 'tween', 'easings', 'useTransition', 'useGesture', 'useAnimatedValue',\n 'createTransitionClasses', 'cssTransition',\n // Accessibility\n 'useFocus', 'useFocusRestore', 'useFocusTrap', 'FocusTrap', 'announce',\n 'announceAssertive', 'SkipLink', 'useAriaExpanded', 'useAriaSelected',\n 'useAriaChecked', 'useRovingTabIndex', 'VisuallyHidden', 'LiveRegion',\n 'useId', 'useIds', 'useDescribedBy', 'useLabelledBy', 'Keys', 'onKey', 'onKeys',\n // Skeleton\n 'Skeleton', 'SkeletonText', 'SkeletonAvatar', 'SkeletonCard', 'SkeletonTable',\n 'IslandSkeleton', 'useSkeleton', 'Placeholder', 'LoadingDots', 'Spinner',\n // Data fetching\n 'useFetch', 'useSWR', 'useQuery', 'useInfiniteQuery', 'invalidateQueries',\n 'prefetchQuery', 'setQueryData', 'getQueryData', 'clearCache', '__getCacheSnapshot',\n // Form\n 'useForm', 'useField', 'rules', 'simpleResolver', 'zodResolver', 'yupResolver',\n 'Input', 'Textarea', 'Select', 'Checkbox', 'Radio', 'ErrorMessage',\n]);\n\nexport function validateImports(importNames) {\n if (!__DEV__ || !guardrails.importValidation) return [];\n\n const invalid = [];\n for (const name of importNames) {\n if (!VALID_EXPORTS.has(name)) {\n invalid.push({\n name,\n message: `\"${name}\" is not a valid export from what-framework.`,\n suggestion: `Check the API reference. Did you mean: ${findClosest(name)}?`,\n });\n }\n }\n return invalid;\n}\n\n// Simple Levenshtein-based closest match\nfunction findClosest(input) {\n const lower = input.toLowerCase();\n let best = null;\n let bestDist = Infinity;\n\n for (const name of VALID_EXPORTS) {\n const dist = levenshtein(lower, name.toLowerCase());\n if (dist < bestDist) {\n bestDist = dist;\n best = name;\n }\n }\n\n return bestDist <= 3 ? best : '(no close match found)';\n}\n\nfunction levenshtein(a, b) {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix = [];\n for (let i = 0; i <= b.length; i++) matrix[i] = [i];\n for (let j = 0; j <= a.length; j++) matrix[0][j] = j;\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n const cost = b[i - 1] === a[j - 1] ? 0 : 1;\n matrix[i][j] = Math.min(\n matrix[i - 1][j] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j - 1] + cost,\n );\n }\n }\n return matrix[b.length][a.length];\n}\n", "// What Framework - Agent Context\n// Exposes a structured global for AI coding agents to discover and inspect the app.\n// Agents can read window.__WHAT_AGENT__ to understand the framework, its state, and health.\n\nimport { __DEV__ } from './reactive.js';\nimport { getCollectedErrors } from './errors.js';\n\n// --- Version ---\n// Read from package.json at build time; fallback to runtime constant.\nconst VERSION = '0.6.0';\n\n// --- Component Registry ---\n// Tracks mounted components for agent inspection.\nlet mountedComponents = [];\n\nexport function registerComponent(component) {\n if (!__DEV__) return;\n mountedComponents.push(component);\n}\n\nexport function unregisterComponent(component) {\n if (!__DEV__) return;\n const idx = mountedComponents.indexOf(component);\n if (idx >= 0) mountedComponents.splice(idx, 1);\n}\n\nexport function getMountedComponents() {\n return mountedComponents.slice();\n}\n\n// --- Signal Registry ---\n// Tracks active signals for agent inspection.\nlet activeSignals = [];\n\nexport function registerSignal(sig) {\n if (!__DEV__) return;\n activeSignals.push(sig);\n}\n\nexport function unregisterSignal(sig) {\n if (!__DEV__) return;\n const idx = activeSignals.indexOf(sig);\n if (idx >= 0) activeSignals.splice(idx, 1);\n}\n\nexport function getActiveSignals() {\n return activeSignals.slice();\n}\n\n// --- Health Check ---\n// Quick health assessment for agents.\n\nexport function getHealth() {\n const errors = getCollectedErrors();\n const recentErrors = errors.filter(e => Date.now() - e.timestamp < 60000);\n\n // Check for effect cycles\n const cycleErrors = errors.filter(e => e.code === 'ERR_INFINITE_EFFECT');\n const effectCycleRisk = cycleErrors.length > 0;\n\n // Check for orphan effects (effects outside roots)\n const orphanErrors = errors.filter(e => e.code === 'ERR_ORPHAN_EFFECT');\n\n // Check for signal leaks (signals without subscribers that keep accumulating)\n const signalLeaks = activeSignals.filter(s => {\n if (s._subs && s._subs.size === 0) return true;\n return false;\n }).length;\n\n // Memory pressure heuristic\n const totalSignals = activeSignals.length;\n const memoryPressure = totalSignals > 10000 ? 'high'\n : totalSignals > 1000 ? 'medium'\n : 'low';\n\n return {\n effectCycleRisk,\n orphanEffects: orphanErrors.length,\n signalLeaks,\n memoryPressure,\n recentErrorCount: recentErrors.length,\n totalSignals,\n totalComponents: mountedComponents.length,\n };\n}\n\n// --- Install Agent Context ---\n// Call this during app initialization (dev mode only) to expose the global.\n\nexport function installAgentContext() {\n if (!__DEV__) return;\n if (typeof globalThis === 'undefined') return;\n\n globalThis.__WHAT_AGENT__ = {\n framework: 'what-framework',\n version: VERSION,\n mode: 'development',\n features: ['signals', 'effects', 'computed', 'ssr', 'islands', 'router', 'stores', 'forms', 'animations', 'a11y'],\n\n // Live accessors \u2014 always return current state\n components: () => getMountedComponents().map(c => ({\n id: c.id,\n name: c.name || c.displayName || c.constructor?.name,\n })),\n\n signals: () => getActiveSignals().map((s, i) => ({\n id: i,\n name: s._debugName || `signal_${i}`,\n value: typeof s === 'function' ? s.peek?.() : undefined,\n subscriberCount: s._subs ? s._subs.size : 0,\n })),\n\n errors: () => getCollectedErrors(),\n\n health: () => getHealth(),\n\n // Metadata for agents\n api: {\n reactive: ['signal', 'computed', 'effect', 'batch', 'untrack', 'flushSync', 'createRoot', 'memo'],\n hooks: ['useState', 'useSignal', 'useComputed', 'useEffect', 'useMemo', 'useCallback', 'useRef', 'useContext', 'onMount', 'onCleanup'],\n components: ['Show', 'For', 'Switch', 'Match', 'Suspense', 'ErrorBoundary', 'lazy', 'Island'],\n data: ['useSWR', 'useQuery', 'useFetch', 'useInfiniteQuery'],\n store: ['createStore', 'derived', 'atom'],\n },\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["lazy", "prev", "batch", "result", "memo", "MemoWrapper", "each", "hydrate", "cleanup", "props", "SVG_ELEMENTS", "html", "t", "html", "t", "isDomNode", "isVNode", "oldNodes", "setProp", "textNode", "componentStack", "s", "onCleanup", "mutate", "focusables", "announcer", "style", "_", "scopedEffect", "data", "error", "e", "errorSignals", "getErrorSignal", "options", "rules", "signal", "effect", "mountedComponents"]
7
7
  }