what-core 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/{chunk-RI7T5VFD.min.js → chunk-D5YDPQ57.min.js} +1 -2
  2. package/dist/chunk-O3SKPRTY.min.js +0 -1
  3. package/dist/chunk-W33M3HL5.min.js +1 -0
  4. package/dist/index.min.js +2 -3
  5. package/dist/jsx-dev-runtime.min.js +0 -1
  6. package/dist/jsx-runtime.min.js +0 -1
  7. package/dist/render.min.js +1 -2
  8. package/dist/testing.min.js +1 -2
  9. package/package.json +2 -2
  10. package/src/agent-context.js +1 -1
  11. package/src/reactive.js +20 -4
  12. package/dist/a11y.js +0 -440
  13. package/dist/animation.js +0 -548
  14. package/dist/chunk-2IZMPODD.min.js +0 -2
  15. package/dist/chunk-2IZMPODD.min.js.map +0 -7
  16. package/dist/chunk-2P7OVL2L.js +0 -1386
  17. package/dist/chunk-2P7OVL2L.js.map +0 -7
  18. package/dist/chunk-5EQUBJWQ.js +0 -1365
  19. package/dist/chunk-5EQUBJWQ.js.map +0 -7
  20. package/dist/chunk-6DAIK77K.min.js +0 -2
  21. package/dist/chunk-6DAIK77K.min.js.map +0 -7
  22. package/dist/chunk-AW3BAPIK.js +0 -1685
  23. package/dist/chunk-AW3BAPIK.js.map +0 -7
  24. package/dist/chunk-AZP2EOGX.js +0 -188
  25. package/dist/chunk-AZP2EOGX.js.map +0 -7
  26. package/dist/chunk-CCINITLW.js +0 -1692
  27. package/dist/chunk-CCINITLW.js.map +0 -7
  28. package/dist/chunk-F2HUXI22.js +0 -1675
  29. package/dist/chunk-F2HUXI22.js.map +0 -7
  30. package/dist/chunk-GZRA4IAJ.js +0 -1699
  31. package/dist/chunk-GZRA4IAJ.js.map +0 -7
  32. package/dist/chunk-H3GA34JK.js +0 -1384
  33. package/dist/chunk-H3GA34JK.js.map +0 -7
  34. package/dist/chunk-KBM6CWG4.min.js +0 -2
  35. package/dist/chunk-KBM6CWG4.min.js.map +0 -7
  36. package/dist/chunk-KL7TNUIU.min.js +0 -2
  37. package/dist/chunk-KL7TNUIU.min.js.map +0 -7
  38. package/dist/chunk-L6XOF7P4.min.js +0 -2
  39. package/dist/chunk-L6XOF7P4.min.js.map +0 -7
  40. package/dist/chunk-M7UEET5O.js +0 -1323
  41. package/dist/chunk-M7UEET5O.js.map +0 -7
  42. package/dist/chunk-MH7L756Y.min.js +0 -2
  43. package/dist/chunk-MH7L756Y.min.js.map +0 -7
  44. package/dist/chunk-O3SKPRTY.min.js.map +0 -7
  45. package/dist/chunk-RI7T5VFD.min.js.map +0 -7
  46. package/dist/chunk-RN6QIBWL.min.js +0 -2
  47. package/dist/chunk-RN6QIBWL.min.js.map +0 -7
  48. package/dist/chunk-VKCFJ4OT.min.js +0 -2
  49. package/dist/chunk-VKCFJ4OT.min.js.map +0 -7
  50. package/dist/chunk-VMTTYB4L.min.js +0 -2
  51. package/dist/chunk-VMTTYB4L.min.js.map +0 -7
  52. package/dist/chunk-VP4WLF5A.js +0 -1323
  53. package/dist/chunk-VP4WLF5A.js.map +0 -7
  54. package/dist/chunk-YA3W4XKH.js +0 -1323
  55. package/dist/chunk-YA3W4XKH.js.map +0 -7
  56. package/dist/compiler.js +0 -1799
  57. package/dist/compiler.js.map +0 -7
  58. package/dist/compiler.min.js +0 -2
  59. package/dist/compiler.min.js.map +0 -7
  60. package/dist/components.js +0 -229
  61. package/dist/data.js +0 -638
  62. package/dist/devtools.js +0 -10
  63. package/dist/devtools.js.map +0 -7
  64. package/dist/devtools.min.js +0 -2
  65. package/dist/devtools.min.js.map +0 -7
  66. package/dist/dom.js +0 -439
  67. package/dist/form.js +0 -509
  68. package/dist/h.js +0 -152
  69. package/dist/head.js +0 -51
  70. package/dist/helpers.js +0 -140
  71. package/dist/hooks.js +0 -210
  72. package/dist/index.js +0 -3576
  73. package/dist/index.js.map +0 -7
  74. package/dist/index.min.js.map +0 -7
  75. package/dist/jsx-dev-runtime.js +0 -23
  76. package/dist/jsx-dev-runtime.js.map +0 -7
  77. package/dist/jsx-dev-runtime.min.js.map +0 -7
  78. package/dist/jsx-runtime.js +0 -21
  79. package/dist/jsx-runtime.js.map +0 -7
  80. package/dist/jsx-runtime.min.js.map +0 -7
  81. package/dist/reactive.js +0 -432
  82. package/dist/render.js +0 -53
  83. package/dist/render.js.map +0 -7
  84. package/dist/render.min.js.map +0 -7
  85. package/dist/scheduler.js +0 -246
  86. package/dist/skeleton.js +0 -363
  87. package/dist/store.js +0 -83
  88. package/dist/testing.js +0 -439
  89. package/dist/testing.js.map +0 -7
  90. package/dist/testing.min.js.map +0 -7
  91. package/dist/what.js +0 -117
package/dist/index.js.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/server-context.js", "../src/hydration-data.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 - Render-scoped server context (SSR keystone).\n//\n// Holds per-render SSR state that must NOT leak across concurrent requests:\n// the head sink, the current page's loader data, and the resource cache.\n//\n// Concurrency model:\n// - renderToString() is SYNCHRONOUS. A module-global set at the start of the\n// render and cleared in a `finally` lives within one uninterrupted tick, so\n// no other request's render can observe it (same reasoning React's\n// server dispatcher uses). Use runWithServerContext() for that path.\n// - ASYNC paths (renderToStream, async loaders, async createResource) must\n// thread the ctx object explicitly through the call stack and NEVER read\n// this module global across an `await` \u2014 two requests can interleave there.\n//\n// getServerContext() returns null on the client and outside of any render, so\n// `typeof document === 'undefined'` guards keep behaving correctly.\n\nlet _current = null;\n\n/** @returns the active render context, or null on the client / outside a render. */\nexport function getServerContext() {\n return _current;\n}\n\n/**\n * Set the active context. Returns the PREVIOUS context so callers can restore it\n * manually (runWithServerContext does this for you).\n */\nexport function setServerContext(ctx) {\n const prev = _current;\n _current = ctx;\n return prev;\n}\n\n/**\n * Run `fn` with `ctx` as the active context, restoring the previous context\n * afterwards (even if `fn` throws). Returns whatever `fn` returns. Safe for the\n * synchronous render path; do not rely on it across `await` boundaries.\n */\nexport function runWithServerContext(ctx, fn) {\n const prev = _current;\n _current = ctx;\n try {\n return fn();\n } finally {\n _current = prev;\n }\n}\n", "// Client hydration payload reader. The server emits a single\n// <script id=\"__what_data\" type=\"application/json\">{loaderData,resources,islandStores}</script>\n// (via serializeState \u2014 XSS-safe, valid JSON). This module is the single source\n// of truth the client uses for useLoaderData() and createResource() seeding.\n\nlet _cache;\n\nexport function __readHydrationData() {\n if (_cache !== undefined) return _cache;\n if (typeof document === 'undefined') return (_cache = null);\n const el = document.getElementById('__what_data');\n if (!el) return (_cache = null);\n try {\n _cache = JSON.parse(el.textContent);\n } catch {\n _cache = null;\n }\n return _cache;\n}\n\n/** Test/HMR hook: drop the cached payload so the next read re-parses. */\nexport function __resetHydrationData() {\n _cache = undefined;\n}\n\nexport function getLoaderData() {\n const data = __readHydrationData();\n return data ? data.loaderData : undefined;\n}\n\nexport function getResource(key) {\n const data = __readHydrationData();\n return data && data.resources ? data.resources[key] : undefined;\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';\nimport { getServerContext } from './server-context.js';\nimport { getLoaderData as _getLoaderData, getResource as _getResource } from './hydration-data.js';\n\n// --- useLoaderData ---\n// Returns the current page's server loader data. Works during SSR (reads the\n// active render context) and during/after hydration on the client (reads the\n// consolidated #__what_data payload). Intentionally NOT a component-scoped hook\n// (no hook slot) so it is safe to call anywhere \u2014 components, effects, helpers.\nexport function useLoaderData() {\n if (typeof document === 'undefined') {\n const ctx = getServerContext();\n return ctx ? ctx.loaderData : undefined;\n }\n // Client: read from the consolidated hydration payload (cached, single parse).\n return _getLoaderData();\n}\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 // --- Server branch: run the fetcher, cache by key on the render context, and\n // suspend (throw the promise) so the nearest Suspense shows its fallback until\n // the data resolves. On re-render the cached value is returned synchronously.\n if (typeof document === 'undefined') {\n const ctx = getServerContext();\n if (ctx) {\n const key = options.key != null ? options.key : `__r${ctx.resourceCounter++}`;\n const cached = ctx.resources.get(key);\n if (cached && cached.status === 'ready') {\n const accessor = () => cached.value;\n return [accessor, { loading: () => false, error: () => null, refetch: () => {}, mutate: () => {} }];\n }\n if (cached && cached.status === 'error') {\n const accessor = () => undefined;\n return [accessor, { loading: () => false, error: () => cached.error, refetch: () => {}, mutate: () => {} }];\n }\n if (!cached) {\n const promise = Promise.resolve()\n .then(() => fetcher(options.source ?? true, {}))\n .then((v) => { ctx.resources.set(key, { status: 'ready', value: v }); })\n .catch((e) => { ctx.resources.set(key, { status: 'error', error: e }); });\n ctx.resources.set(key, { status: 'pending', promise });\n throw promise; // caught by the nearest Suspense boundary\n }\n // pending (shouldn't normally re-reach here within one pass)\n throw cached.promise;\n }\n // No active render context (bare synchronous renderToString): suspend so the\n // nearest Suspense boundary shows its fallback. There's no cache to resolve\n // into here \u2014 use renderToStringAsync / renderToStream for resolved data.\n if (options.initialValue != null) {\n const accessor = () => options.initialValue;\n return [accessor, { loading: () => false, error: () => null, refetch: () => {}, mutate: () => {} }];\n }\n throw Promise.resolve().then(() => fetcher(options.source ?? true, {}));\n }\n\n // --- Client branch: seed from the hydration payload so SSR'd resources don't\n // refetch on hydrate.\n let seeded = options.initialValue;\n if (seeded == null && options.key != null) {\n const fromPayload = _getResource(options.key);\n if (fromPayload !== undefined) seeded = fromPayload;\n }\n\n const data = signal(seeded ?? null);\n const loading = signal(seeded == null);\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 only if we have no value (initial or hydrated from payload)\n if (seeded == null) {\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 // Actions may return a value (e.g. `addItem(): newId`) \u2014 propagate it\n // through the batch() wrapper so callers can use the return value.\n for (const [key, fn] of Object.entries(actions)) {\n actions[key] = (...args) => {\n let result;\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 result = fn.apply(proxy, args);\n });\n return result;\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 tags. Auto-deduplicates by key.\n//\n// Isomorphic: on the client it mutates document.head directly (last-one-wins);\n// on the server it writes into the active render context's head sink (see\n// server-context.js), which renderToStringWithHead serializes into <head> HTML.\n// The server and client use IDENTICAL dedup keys so the rendered head matches\n// what the client would produce \u2014 no hydration mismatch.\n\nimport { getServerContext } from './server-context.js';\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') {\n // Server: collect into the active render context's sink (if a render is\n // collecting head). No active context => no-op (renderToString body-only).\n const ctx = getServerContext();\n if (ctx && ctx.head) writeToSink(ctx.head, { title, meta, link });\n return children ?? null;\n }\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\n// --- Server-side head collection ---\n\nfunction metaKey(attrs) {\n return attrs.name || attrs.property || attrs.httpEquiv || JSON.stringify(attrs);\n}\n\nfunction writeToSink(sink, { title, meta, link }) {\n if (title != null) sink.title = title;\n if (meta) {\n for (const attrs of (Array.isArray(meta) ? meta : [meta])) {\n sink.metas.set(metaKey(attrs), attrs);\n }\n }\n if (link) {\n for (const attrs of (Array.isArray(link) ? link : [link])) {\n sink.links.set(attrs.rel + (attrs.href || ''), attrs);\n }\n }\n}\n\n/** Create a fresh head sink for one render. */\nexport function beginHeadCollection() {\n return { title: null, metas: new Map(), links: new Map() };\n}\n\n/** Serialize a head sink into escaped <head> HTML (title + meta + link). */\nexport function endHeadCollection(sink) {\n if (!sink) return '';\n let out = '';\n if (sink.title != null) out += `<title>${escapeHtml(String(sink.title))}</title>`;\n for (const attrs of sink.metas.values()) out += renderHeadTag('meta', attrs);\n for (const attrs of sink.links.values()) out += renderHeadTag('link', attrs);\n return out;\n}\n\nfunction renderHeadTag(tag, attrs) {\n let s = `<${tag}`;\n for (const [k, v] of Object.entries(attrs)) {\n if (v == null || v === false) continue;\n const name = k === 'httpEquiv' ? 'http-equiv' : k;\n s += ` ${name}=\"${escapeHtml(String(v))}\"`;\n }\n return s + '>';\n}\n\nfunction escapeHtml(str) {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\n// --- Client DOM helpers ---\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 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 patterns like `Total: ${count}` or `count > 5` (should be count()).\n//\n// At runtime, we detect this when a signal is coerced to a string or number\n// (via toString/valueOf) and warn that it should be called.\n//\n// Wiring: what-devtools calls this for every signal it registers (dev only),\n// so any app with devtools installed gets the guardrail automatically.\n// It can also be called manually: installSignalReadGuardrail(sig, 'name').\n\nexport function installSignalReadGuardrail(signalFn, debugName) {\n if (!__DEV__ || !guardrails.signalReadDetection) return signalFn;\n\n // Override toString to catch template literal coercion\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// NOTE: an \"effect cycle detection\" guardrail (trackEffectSignalWrite /\n// checkEffectCycle) used to live here, exported but never called by anything\n// \u2014 it was removed in v0.11 rather than shipped as a dead API. Reviving it\n// requires hooks inside reactive.js: (1) a call on every signal WRITE while\n// an effect is the active listener (to attribute writes to effects), and\n// (2) a post-run callback with the effect's tracked read-set (to intersect\n// reads with writes). reactive.js already detects runaway cascades at flush\n// time (iteration cap), which covers the practical failure mode.\n\n// --- Guardrail 2: 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 3: 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 // Text insertion hook (for external text engines)\n '_setTextInsertHook',\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// Keep in sync with packages/core/package.json (checked by\n// core/test/guardrails.test.js so it can't silently go stale again).\nconst VERSION = '0.11.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
- "names": ["s", "onCleanup", "ctx", "mutate", "focusables", "announcer", "style", "_", "scopedEffect", "data", "error", "e", "errorSignals", "getErrorSignal", "options", "rules", "signal", "effect"]
7
- }