@getforma/core 1.0.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/chunk-263HW3KN.cjs +35 -0
- package/dist/chunk-263HW3KN.cjs.map +1 -0
- package/dist/chunk-2QQBKQIF.js +30 -0
- package/dist/chunk-2QQBKQIF.js.map +1 -0
- package/dist/{chunk-6FW5E54W.cjs → chunk-2Y5US35K.cjs} +127 -103
- package/dist/chunk-2Y5US35K.cjs.map +1 -0
- package/dist/{chunk-3G7ET4O5.js → chunk-INNOI6TG.js} +121 -94
- package/dist/chunk-INNOI6TG.js.map +1 -0
- package/dist/{chunk-T33QUD2Y.cjs → chunk-JRQNDXX7.cjs} +43 -43
- package/dist/{chunk-T33QUD2Y.cjs.map → chunk-JRQNDXX7.cjs.map} +1 -1
- package/dist/{chunk-AFRFF7XL.js → chunk-MIOMT2CB.js} +4 -4
- package/dist/{chunk-AFRFF7XL.js.map → chunk-MIOMT2CB.js.map} +1 -1
- package/dist/chunk-W7OUWVRA.cjs +106 -0
- package/dist/chunk-W7OUWVRA.cjs.map +1 -0
- package/dist/chunk-XLVBYXOU.js +100 -0
- package/dist/chunk-XLVBYXOU.js.map +1 -0
- package/dist/forma-runtime-csp.js +92 -6
- package/dist/forma-runtime.js +138 -12
- package/dist/formajs-runtime-hardened.global.js +92 -6
- package/dist/formajs-runtime-hardened.global.js.map +1 -1
- package/dist/formajs-runtime.global.js +138 -12
- package/dist/formajs-runtime.global.js.map +1 -1
- package/dist/formajs.global.js +192 -95
- package/dist/formajs.global.js.map +1 -1
- package/dist/http.cjs +11 -11
- package/dist/http.js +2 -2
- package/dist/index.cjs +66 -66
- package/dist/index.d.cts +11 -25
- package/dist/index.d.ts +11 -25
- package/dist/index.js +6 -6
- package/dist/{resource-DeEzxUz6.d.cts → resource-D6HfVgiA.d.cts} +7 -2
- package/dist/{resource-BHsgURy0.d.ts → resource-ljs2X5NM.d.ts} +7 -2
- package/dist/runtime-hardened.cjs +93 -5
- package/dist/runtime-hardened.cjs.map +1 -1
- package/dist/runtime-hardened.js +93 -5
- package/dist/runtime-hardened.js.map +1 -1
- package/dist/runtime.cjs +47 -31
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +21 -5
- package/dist/runtime.js.map +1 -1
- package/dist/server.cjs +7 -7
- package/dist/server.d.cts +2 -2
- package/dist/server.d.ts +2 -2
- package/dist/server.js +2 -2
- package/dist/{signal-C9v4akyJ.d.cts → signal-CRBJYQ6B.d.cts} +0 -8
- package/dist/{signal-C9v4akyJ.d.ts → signal-CRBJYQ6B.d.ts} +0 -8
- package/dist/ssr/index.cjs +23 -42
- package/dist/ssr/index.cjs.map +1 -1
- package/dist/ssr/index.js +23 -42
- package/dist/ssr/index.js.map +1 -1
- package/dist/tc39-compat.cjs +3 -6
- package/dist/tc39-compat.cjs.map +1 -1
- package/dist/tc39-compat.d.cts +1 -1
- package/dist/tc39-compat.d.ts +1 -1
- package/dist/tc39-compat.js +1 -4
- package/dist/tc39-compat.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-3G7ET4O5.js.map +0 -1
- package/dist/chunk-6FW5E54W.cjs.map +0 -1
- package/dist/chunk-HLM5BZZQ.js +0 -35
- package/dist/chunk-HLM5BZZQ.js.map +0 -1
- package/dist/chunk-QLPCVK7C.cjs +0 -38
- package/dist/chunk-QLPCVK7C.cjs.map +0 -1
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dom/reconcile.ts","../src/runtime.ts"],"names":["reconcile","disposeCloneBindings","el","createBoundClone","updateBoundClone","batch"],"mappings":"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","file":"runtime.js","sourcesContent":["/**\n * Forma Reconciler — DOM diffing and patching engine.\n *\n * Replaces morphdom with a purpose-built reconciler that understands\n * Forma's directive system (data-forma-state, data-list, data-if, etc.).\n *\n * Usage:\n * const rec = createReconciler({ mountScope, unmountScope, ... });\n * rec(container, htmlString);\n *\n * Scope modes for data-forma-state elements matched by data-forma-id:\n * PRESERVE — same data-module + same state shape → patch attrs, keep bindings\n * RESET — same data-module + different state shape → unmount, patch, remount\n * REPLACE — different data-module → remove old, insert new, mount fresh\n */\n\n// ── Types ─────────────────────────────────────────────────────────────\n\nexport interface ReconcilerConfig {\n mountScope: (el: Element) => void;\n unmountScope: (el: Element) => void;\n disconnectObserver: () => void;\n reconnectObserver: () => void;\n batch: (fn: () => void) => void;\n}\n\ntype ScopeMode = 'PRESERVE' | 'RESET' | 'REPLACE';\n\n// ── Attribute helpers ─────────────────────────────────────────────────\n\n/** Check if an element has data-bind:X targeting a specific attribute */\nfunction getBindTargets(el: Element): Set<string> {\n const targets = new Set<string>();\n const attrs = el.attributes;\n for (let i = 0; i < attrs.length; i++) {\n const name = attrs[i]!.name;\n if (name.startsWith('data-bind:')) {\n targets.add(name.slice(10));\n }\n }\n return targets;\n}\n\n/** Check if an element owns its subtree (data-list or data-if) */\nfunction ownsSubtree(el: Element): boolean {\n return el.hasAttribute('data-list') || el.hasAttribute('data-if');\n}\n\n// ── State shape comparison ────────────────────────────────────────────\n\nfunction getStateKeys(json: string): string[] {\n try {\n const obj = JSON.parse(json);\n return Object.keys(obj).sort();\n } catch {\n return [];\n }\n}\n\nfunction sameShape(keysA: string[], keysB: string[]): boolean {\n if (keysA.length !== keysB.length) return false;\n for (let i = 0; i < keysA.length; i++) {\n if (keysA[i] !== keysB[i]) return false;\n }\n return true;\n}\n\n// ── Scope mode determination ──────────────────────────────────────────\n\nfunction determineScopeMode(liveEl: Element, newEl: Element): ScopeMode {\n const liveModule = liveEl.getAttribute('data-module');\n const newModule = newEl.getAttribute('data-module');\n\n if (liveModule !== newModule) return 'REPLACE';\n\n // Compare state shape: use __formaInitialState (set at mount time) for the\n // live element, and the raw attribute for the new element.\n const liveInitialState = (liveEl as any).__formaInitialState as string | undefined;\n const liveStateJSON = liveInitialState ?? liveEl.getAttribute('data-forma-state') ?? '{}';\n const newStateJSON = newEl.getAttribute('data-forma-state') ?? '{}';\n\n const liveKeys = getStateKeys(liveStateJSON);\n const newKeys = getStateKeys(newStateJSON);\n\n if (sameShape(liveKeys, newKeys)) return 'PRESERVE';\n return 'RESET';\n}\n\n// ── HTML parsing ──────────────────────────────────────────────────────\n\n/** Reused template element — avoids creating a new one per reconcile call. */\nlet _parseTemplate: HTMLTemplateElement | null = null;\n\nfunction parseHTML(html: string): DocumentFragment {\n if (!_parseTemplate) _parseTemplate = document.createElement('template');\n _parseTemplate.innerHTML = html;\n // content is consumed (moved) by the caller, so template is empty after\n return _parseTemplate.content;\n}\n\n// ── Attribute patching ────────────────────────────────────────────────\n\nfunction patchAttributes(liveEl: Element, newEl: Element): void {\n const bindTargets = getBindTargets(liveEl);\n const hasDataShow = liveEl.hasAttribute('data-show');\n const hasDataModel = liveEl.hasAttribute('data-model');\n\n // Check for class directives without Array.from allocation\n let liveHasClassDirectives = false;\n const liveAttrs = liveEl.attributes;\n for (let i = 0; i < liveAttrs.length; i++) {\n if (liveAttrs[i]!.name.startsWith('data-class:')) {\n liveHasClassDirectives = true;\n break;\n }\n }\n\n // Set/update attributes from newEl\n const newAttrs = newEl.attributes;\n for (let i = 0; i < newAttrs.length; i++) {\n const attr = newAttrs[i]!;\n // Skip directive-owned attributes\n if (attr.name === 'style' && hasDataShow) continue;\n if (attr.name === 'class' && liveHasClassDirectives) continue;\n if ((attr.name === 'value' || attr.name === 'checked') && hasDataModel) continue;\n if (bindTargets.has(attr.name)) continue;\n\n const liveVal = liveEl.getAttribute(attr.name);\n if (liveVal !== attr.value) {\n liveEl.setAttribute(attr.name, attr.value);\n }\n }\n\n // Remove attributes that are no longer present in newEl\n // Iterate backwards since removeAttribute shifts indices\n for (let i = liveAttrs.length - 1; i >= 0; i--) {\n const attr = liveAttrs[i]!;\n if (!newEl.hasAttribute(attr.name)) {\n if (attr.name === 'style' && hasDataShow) continue;\n if (attr.name === 'class' && liveHasClassDirectives) continue;\n if ((attr.name === 'value' || attr.name === 'checked') && hasDataModel) continue;\n if (bindTargets.has(attr.name)) continue;\n\n liveEl.removeAttribute(attr.name);\n }\n }\n}\n\n// ── Text node patching ────────────────────────────────────────────────\n\nfunction patchTextNodes(liveEl: Element, newEl: Element): void {\n // data-text directive owns this element's text content — don't overwrite\n if (liveEl.hasAttribute('data-text')) return;\n\n const liveTexts: Text[] = [];\n const newTexts: { node: Text; index: number }[] = [];\n\n for (const child of Array.from(liveEl.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) liveTexts.push(child as Text);\n }\n for (let i = 0; i < newEl.childNodes.length; i++) {\n const child = newEl.childNodes[i];\n if (child.nodeType === Node.TEXT_NODE) newTexts.push({ node: child as Text, index: i });\n }\n\n // Fast path: same count, just patch content\n if (liveTexts.length === newTexts.length) {\n for (let i = 0; i < liveTexts.length; i++) {\n if (liveTexts[i].textContent !== newTexts[i].node.textContent) {\n liveTexts[i].textContent = newTexts[i].node.textContent;\n }\n }\n return;\n }\n\n // Count mismatch: reuse live text nodes in order, insert/remove as needed\n const usedLive = new Set<Text>();\n let liveIdx = 0;\n\n for (const { node: newText, index: newChildIdx } of newTexts) {\n if (liveIdx < liveTexts.length) {\n // Reuse existing text node\n const liveText = liveTexts[liveIdx]!;\n liveIdx++;\n usedLive.add(liveText);\n if (liveText.textContent !== newText.textContent) {\n liveText.textContent = newText.textContent;\n }\n } else {\n // Insert new text node at correct position\n const ref = findTextInsertionRef(liveEl, newEl, newChildIdx);\n liveEl.insertBefore(document.createTextNode(newText.textContent ?? ''), ref);\n }\n }\n\n // Remove unused live text nodes\n for (const lt of liveTexts) {\n if (!usedLive.has(lt) && lt.parentNode === liveEl) {\n liveEl.removeChild(lt);\n }\n }\n}\n\n/** Find the insertion reference node for a text node being inserted into liveEl. */\nfunction findTextInsertionRef(liveEl: Element, newEl: Element, newIdx: number): Node | null {\n for (let j = newIdx + 1; j < newEl.childNodes.length; j++) {\n const sibling = newEl.childNodes[j];\n if (sibling.nodeType === Node.ELEMENT_NODE) {\n const key = (sibling as Element).getAttribute('data-forma-id');\n if (key) {\n const match = liveEl.querySelector(`[data-forma-id=\"${CSS.escape(key)}\"]`);\n if (match && match.parentElement === liveEl) return match;\n }\n }\n }\n return null;\n}\n\n// ── Recursive element diffing ─────────────────────────────────────────\n\nfunction diffChildren(\n liveParent: Element,\n newParent: Element,\n config: ReconcilerConfig,\n): void {\n // Skip directive-owned subtrees\n if (ownsSubtree(liveParent)) return;\n\n // Patch text nodes at this level\n patchTextNodes(liveParent, newParent);\n\n // Collect child elements (ignore text nodes for structural diff)\n const liveChildren = Array.from(liveParent.children);\n const newChildren = Array.from(newParent.children);\n\n // Build keyed maps for data-forma-id elements\n const liveKeyed = new Map<string, Element>();\n const liveUnkeyed: Element[] = [];\n for (const child of liveChildren) {\n if (child.hasAttribute('data-forma-leaving')) continue;\n const key = child.getAttribute('data-forma-id');\n if (key) {\n liveKeyed.set(key, child);\n } else {\n liveUnkeyed.push(child);\n }\n }\n\n let unkeyedIdx = 0;\n\n // Walk new children in order\n const usedLiveElements = new Set<Element>();\n\n for (const newChild of newChildren) {\n const key = newChild.getAttribute('data-forma-id');\n let liveMatch: Element | undefined;\n\n if (key) {\n liveMatch = liveKeyed.get(key);\n } else {\n // Match unkeyed elements by position and tag\n while (unkeyedIdx < liveUnkeyed.length) {\n const candidate = liveUnkeyed[unkeyedIdx];\n unkeyedIdx++;\n if (candidate.tagName === newChild.tagName && !usedLiveElements.has(candidate)) {\n liveMatch = candidate;\n break;\n }\n }\n }\n\n if (liveMatch) {\n usedLiveElements.add(liveMatch);\n\n // Check if this is a data-forma-state scope element\n if (liveMatch.hasAttribute('data-forma-state') && newChild.hasAttribute('data-forma-state')) {\n const mode = determineScopeMode(liveMatch, newChild);\n\n switch (mode) {\n case 'PRESERVE':\n // Patch attributes only, keep reactive bindings alive\n patchAttributes(liveMatch, newChild);\n // Recurse into non-directive-owned children\n diffChildren(liveMatch, newChild, config);\n break;\n\n case 'RESET':\n // Unmount old scope, patch DOM, mount fresh\n config.unmountScope(liveMatch);\n patchAttributes(liveMatch, newChild);\n // Replace inner content\n replaceInnerContent(liveMatch, newChild);\n config.mountScope(liveMatch);\n break;\n\n case 'REPLACE': {\n // Full element swap\n config.unmountScope(liveMatch);\n const replacement = newChild.cloneNode(true) as Element;\n liveParent.replaceChild(replacement, liveMatch);\n config.mountScope(replacement);\n usedLiveElements.delete(liveMatch);\n liveMatch = replacement;\n usedLiveElements.add(replacement);\n break;\n }\n }\n } else {\n // Non-scope element: patch attrs and recurse\n patchAttributes(liveMatch, newChild);\n diffChildren(liveMatch, newChild, config);\n }\n\n // Ensure element is in the correct position\n // Find where it should be relative to previousSibling\n ensurePosition(liveParent, liveMatch, newChild, newChildren);\n } else {\n // New element — insert it\n const clone = newChild.cloneNode(true) as Element;\n // Find insertion point\n const insertionRef = findInsertionPoint(liveParent, newChild, newChildren);\n liveParent.insertBefore(clone, insertionRef);\n usedLiveElements.add(clone);\n\n // Mount any scopes in the new element\n if (clone.hasAttribute('data-forma-state')) {\n config.mountScope(clone);\n }\n const nestedScopes = clone.querySelectorAll('[data-forma-state]');\n for (const nested of Array.from(nestedScopes)) {\n config.mountScope(nested);\n }\n }\n }\n\n // Remove live children that are no longer in new children\n for (const child of liveChildren) {\n if (!usedLiveElements.has(child)) {\n // Guard: element may already be detached (e.g. after REPLACE)\n if (child.parentElement !== liveParent) continue;\n // Guard: element is mid-leave transition — its transition will remove it\n if (child.hasAttribute('data-forma-leaving')) continue;\n // Unmount any scopes\n if (child.hasAttribute('data-forma-state')) {\n config.unmountScope(child);\n }\n const nestedScopes = child.querySelectorAll('[data-forma-state]');\n for (const nested of Array.from(nestedScopes)) {\n config.unmountScope(nested);\n }\n liveParent.removeChild(child);\n }\n }\n}\n\n/** Replace inner content of live element with content from new element */\nfunction replaceInnerContent(liveEl: Element, newEl: Element): void {\n // Remove all children\n while (liveEl.firstChild) {\n liveEl.removeChild(liveEl.firstChild);\n }\n // Clone and append all children from new element\n for (const child of Array.from(newEl.childNodes)) {\n liveEl.appendChild(child.cloneNode(true));\n }\n}\n\n/** Ensure a live element is at the correct position */\nfunction ensurePosition(\n parent: Element,\n liveEl: Element,\n _newEl: Element,\n newChildren: Element[],\n): void {\n const newIdx = newChildren.indexOf(_newEl);\n const liveChildElements = Array.from(parent.children);\n const currentIdx = liveChildElements.indexOf(liveEl);\n\n if (currentIdx !== newIdx) {\n // Find the element that should come after this one\n const nextNewChild = newChildren[newIdx + 1];\n if (nextNewChild) {\n const nextKey = nextNewChild.getAttribute('data-forma-id');\n if (nextKey) {\n // Find this element in live DOM\n const nextLive = parent.querySelector(`[data-forma-id=\"${CSS.escape(nextKey)}\"]`);\n if (nextLive && nextLive.parentElement === parent) {\n parent.insertBefore(liveEl, nextLive);\n return;\n }\n }\n }\n // Append to end\n parent.appendChild(liveEl);\n }\n}\n\n/** Find the correct insertion point for a new element */\nfunction findInsertionPoint(\n parent: Element,\n newChild: Element,\n newChildren: Element[],\n): Node | null {\n const newIdx = newChildren.indexOf(newChild);\n\n // Look for the next sibling in the new children that exists in the live DOM\n for (let i = newIdx + 1; i < newChildren.length; i++) {\n const key = newChildren[i].getAttribute('data-forma-id');\n if (key) {\n const existing = parent.querySelector(`[data-forma-id=\"${CSS.escape(key)}\"]`);\n if (existing && existing.parentElement === parent) {\n return existing;\n }\n }\n }\n\n return null; // Append to end\n}\n\n// ── Factory ───────────────────────────────────────────────────────────\n\nexport function createReconciler(config: ReconcilerConfig) {\n /** Last HTML string that was successfully reconciled into this container.\n * Used to skip reconciliation when the HTML hasn't changed. */\n let _lastHtml = '';\n\n return function reconcile(container: Element, html: string): void {\n const trimmed = html.trim();\n if (!trimmed) return;\n\n // Fast path: skip reconciliation entirely when HTML is identical\n if (trimmed === _lastHtml && container.hasChildNodes()) return;\n _lastHtml = trimmed;\n\n // Disconnect observer to prevent double-mount during patching\n config.disconnectObserver();\n\n try {\n // ── Fast path: empty container ──\n if (!container.hasChildNodes() || container.children.length === 0) {\n container.innerHTML = trimmed;\n\n // Mount all data-forma-state scopes\n config.batch(() => {\n const scopes = container.querySelectorAll('[data-forma-state]');\n for (const scope of Array.from(scopes)) {\n config.mountScope(scope);\n }\n });\n\n return;\n }\n\n // ── Parse new HTML into a DocumentFragment ──\n const fragment = parseHTML(trimmed);\n const templateContainer = document.createElement('div');\n templateContainer.appendChild(fragment);\n\n // ── Full-replacement fast path ──\n // When there is zero data-forma-id overlap between live and new children,\n // skip the diff entirely — dispose all live scopes, innerHTML, mount fresh.\n // This handles module-switch scenarios cleanly and avoids issues with\n // corrupted HTML confusing the diff.\n const liveKeys = new Set<string>();\n for (const child of Array.from(container.children)) {\n if (child.hasAttribute('data-forma-leaving')) continue;\n const key = child.getAttribute('data-forma-id');\n if (key) liveKeys.add(key);\n }\n let hasOverlap = false;\n if (liveKeys.size > 0) {\n for (const child of Array.from(templateContainer.children)) {\n const key = child.getAttribute('data-forma-id');\n if (key && liveKeys.has(key)) { hasOverlap = true; break; }\n }\n }\n\n if (liveKeys.size > 0 && !hasOverlap) {\n // Full replacement: unmount all live scopes, replace content, mount new\n config.batch(() => {\n const liveScopes = container.querySelectorAll('[data-forma-state]');\n for (const scope of Array.from(liveScopes)) {\n config.unmountScope(scope);\n }\n container.innerHTML = trimmed;\n const newScopes = container.querySelectorAll('[data-forma-state]');\n for (const scope of Array.from(newScopes)) {\n config.mountScope(scope);\n }\n });\n return;\n }\n\n // ── Diff and patch ──\n config.batch(() => {\n diffChildren(container, templateContainer, config);\n });\n } finally {\n // Always reconnect observer, even if an error occurred\n config.reconnectObserver();\n }\n };\n}\n","/**\n * FormaJS HTML Runtime\n *\n * Declarative reactive UI via data-* attributes, powered by fine-grained\n * signals (alien-signals 3.x). Combined into a single, CSP-safe runtime\n * with zero build step required.\n *\n * Design inspirations:\n * Alpine.js — data-* directive model, progressive enhancement\n * SolidJS — fine-grained signals, [getter, setter] tuple, real DOM\n * Qwik — deferred hydration triggers (idle, interaction, visible)\n * Astro — islands architecture, independent interactive regions\n * Hotwire — server-driven UI, reconciler with scope modes\n * Lit — root element access during hydration, (el, props) pattern\n *\n * ┌─────────────────────────────────────────────────────────────────────┐\n * │ Yes, this file is ~3,300 lines. It's a monolith on purpose. │\n * │ │\n * │ The HTML Runtime is a self-contained unit: expression parser, │\n * │ handler compiler, transition system, DOM scanner, and observer │\n * │ all share mutable state (debug flags, caches, eval mode). Keeping │\n * │ them in one file avoids circular imports, simplifies the build │\n * │ (single IIFE for CDN), and means `grep` always finds what you │\n * │ need. The sections are clearly marked — use the map below. │\n * │ │\n * │ Will it be split someday? Maybe. But today it works, it's tested │\n * │ (811 tests), and it ships at 15KB gzipped. If you're reading this │\n * │ and judging the line count — fair. But read the code first. :) │\n * └─────────────────────────────────────────────────────────────────────┘\n *\n * This file is the HTML Runtime — a subpath of @getforma/core:\n * import '@getforma/core/runtime' (ESM)\n * <script src=\"...runtime.global.js\"> (CDN)\n *\n * It is separate from the main @getforma/core entry point, which exports\n * signals, h(), mount, stores, etc. The main entry has zero network code.\n * HTTP/storage/server are at @getforma/core/http, /storage, /server.\n *\n * Usage (CDN):\n * <script src=\"https://unpkg.com/@getforma/core@1.0.1/dist/formajs-runtime.global.js\"></script>\n * <div data-forma-state='{\"count\": 0}'>\n * <p data-text=\"{count}\"></p>\n * <button data-on:click=\"{count++}\">+1</button>\n * </div>\n *\n * Build outputs from this source file:\n * dist/runtime.js ESM (import '@getforma/core/runtime')\n * dist/runtime.cjs CommonJS (require)\n * dist/formajs-runtime.global.js IIFE for <script> tags (auto-inits)\n * dist/runtime-hardened.js ESM, unsafe-eval locked off (zero new Function)\n * dist/formajs-runtime-hardened.global.js IIFE, unsafe-eval locked off (zero new Function)\n *\n * ── FILE MAP ──────────────────────────────────────────────────────────\n *\n * Line ~31-71 Core types & scope (Getter, Setter, Scope, createChildScope)\n * Line ~73-253 Configuration & diagnostics (debug, CSP modes, containment)\n * Line ~254-344 Performance utilities (yieldToMain, containment hints)\n * Line ~346-534 Regexes, caches, security blocklist (findBlockedMethod)\n * Line ~536-923 Parsing utilities (splitCallArgs, readBalancedSegment, if-handler)\n * Line ~925-1049 Template compilation (data-list templates)\n * Line ~1051-1396 CSS Transitions (parse, run, enter/leave phases)\n * Line ~1398-1809 CSP-safe expression parser (chained access, operators, literals)\n * Line ~1811-2091 Evaluator & handler builder (CSP path + new Function fallback)\n * Line ~2093-2184 State initialization & safe $el proxy\n * Line ~2186-2682 bindElement() — the central directive processor\n * Line ~2684-2952 MutationObserver, directive map, mountScope/unmountScope\n * Line ~2954-3064 Init/destroy, mount/unmount, public API setters\n * Line ~3066-3188 DevTools API, reconciler bridge, exports\n *\n * ── SUPPORTED DIRECTIVES ──────────────────────────────────────────────\n *\n * State & Reactivity:\n * data-forma-state='{\"key\": val}' Declare reactive state (valid JSON)\n * data-computed=\"name = expr\" Derived value (lazy, cached)\n * data-persist=\"{prop}\" Sync state to localStorage\n *\n * Content Binding:\n * data-text=\"{expr}\" Bind text content\n * data-show=\"{expr}\" Toggle visibility (display: none)\n * data-if=\"{expr}\" Conditional render (remove/insert DOM)\n * data-model=\"{prop}\" Two-way input binding\n * data-list=\"{expr}\" List rendering (keyed reconciliation)\n *\n * Attributes & Classes:\n * data-on:event=\"{expr}\" Event handler (e.g. data-on:click)\n * data-class:name=\"{expr}\" Conditional CSS class\n * data-bind:attr=\"{expr}\" Dynamic attribute binding\n *\n * Transitions (for data-show and data-if):\n * data-transition:enter=\"classes\" Classes during enter phase\n * data-transition:enter-from=\"classes\" Classes at enter start\n * data-transition:enter-to=\"classes\" Classes at enter end\n * data-transition:leave=\"classes\" Classes during leave phase\n * data-transition:leave-from=\"classes\" Classes at leave start\n * data-transition:leave-to=\"classes\" Classes at leave end\n *\n * Refs:\n * data-ref=\"name\" Register element for $refs.name access\n *\n * Data Fetching:\n * data-fetch=\"GET /url → prop\" Fetch data into state\n * data-fetch=\"POST /url → prop\" POST with state as body\n * data-fetch-id=\"name\" Register for $refetch('name')\n *\n * Configuration (on <script> tag):\n * data-forma-unsafe-eval=\"true\" Enable new Function() fallback\n * data-forma-diagnostics=\"true\" Enable expression diagnostics\n * data-forma-auto-containment=\"true\" Enable CSS containment hints\n *\n * ── MAGIC VARIABLES ──────────────────────────────────────────────────\n *\n * Available in all expressions and handlers:\n * $el The current DOM element (safe proxy — see createSafeElProxy)\n * $dispatch Fire a CustomEvent: $dispatch('name', detail?)\n * Events bubble and cross Shadow DOM (composed: true)\n * $event The DOM event object (in data-on:* handlers only)\n * event Alias for $event (also in data-on:* handlers)\n * $refs Named element references: $refs.myInput (via data-ref=\"myInput\")\n * $refetch Re-trigger a data-fetch: $refetch('fetch-id')\n */\nimport { createSignal, internalEffect, createComputed, batch } from './reactive';\nimport { reconcileList, type ListTransitionHooks } from './dom/list';\nimport { createReconciler } from './dom/reconcile';\n\ntype Getter = () => unknown;\ntype Setter = (v: unknown) => void;\n\ninterface Scope {\n getters: Record<string, Getter>;\n setters: Record<string, Setter>;\n}\n\n// ── $refetch registry ──\n// Maps data-fetch-id values to their doFetch() functions so handlers can\n// trigger imperative refetches via $refetch('id').\nconst _refetchRegistry = new Map<string, () => void>();\n\nfunction $refetch(id: string): void {\n const fn = _refetchRegistry.get(id);\n if (fn) {\n fn();\n } else if (_debug) {\n dbg(`$refetch: no data-fetch with id \"${id}\" found`);\n }\n}\n\nfunction createChildScope(parent: Scope, locals: Record<string, unknown>): Scope {\n const localGetters: Record<string, Getter> = Object.create(null);\n for (const key of Object.keys(locals)) {\n localGetters[key] = () => locals[key];\n }\n\n return {\n getters: new Proxy(parent.getters, {\n get(target, prop: string) {\n if (prop in localGetters) return localGetters[prop];\n return target[prop];\n },\n has(target, prop: string) {\n return prop in localGetters || prop in target;\n },\n }),\n setters: parent.setters,\n };\n}\n\n// ── Debug logger — enable via FormaRuntime.debug = true or window.__FORMA_DEBUG = true ──\nlet _debug = false;\ntype UnsafeEvalMode = 'mutable' | 'locked-off' | 'locked-on';\nlet _unsafeEvalMode: UnsafeEvalMode = 'mutable';\nlet _allowUnsafeEval = false;\nlet _diagnosticsEnabled = true;\nfunction dbg(...args: unknown[]): void {\n if (_debug || (typeof window !== 'undefined' && (window as any).__FORMA_DEBUG)) {\n console.log('[FormaJS]', ...args);\n }\n}\n\ninterface RuntimeConfig {\n allowUnsafeEval?: boolean;\n unsafeEvalMode?: UnsafeEvalMode;\n lockUnsafeEval?: boolean;\n diagnostics?: boolean;\n autoContainment?: boolean;\n}\n\ninterface RuntimeDiagnostic {\n kind: 'handler-unsupported' | 'expression-unsupported';\n expr: string;\n reason: string;\n count: number;\n firstSeenAt: number;\n lastSeenAt: number;\n}\n\nconst diagnostics = new Map<string, RuntimeDiagnostic>();\n\nfunction parseBooleanFlag(raw: string | null | undefined): boolean | undefined {\n if (raw == null) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (normalized === '1' || normalized === 'true' || normalized === 'on' || normalized === 'yes') return true;\n if (normalized === '0' || normalized === 'false' || normalized === 'off' || normalized === 'no') return false;\n return undefined;\n}\n\nfunction parseUnsafeEvalMode(raw: string | null | undefined): UnsafeEvalMode | undefined {\n if (raw == null) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (normalized === 'mutable') return 'mutable';\n if (normalized === 'locked-off' || normalized === 'off' || normalized === 'disabled') {\n return 'locked-off';\n }\n if (normalized === 'locked-on' || normalized === 'on' || normalized === 'enabled') {\n return 'locked-on';\n }\n return undefined;\n}\n\nfunction readRuntimeConfig(): RuntimeConfig {\n const config: RuntimeConfig = {};\n\n if (typeof window !== 'undefined') {\n const globalConfig = (window as any).__FORMA_RUNTIME_CONFIG as RuntimeConfig | undefined;\n if (globalConfig) {\n if (typeof globalConfig.allowUnsafeEval === 'boolean') {\n config.allowUnsafeEval = globalConfig.allowUnsafeEval;\n }\n if (typeof globalConfig.unsafeEvalMode === 'string') {\n const parsed = parseUnsafeEvalMode(globalConfig.unsafeEvalMode);\n if (parsed) config.unsafeEvalMode = parsed;\n }\n if (typeof globalConfig.lockUnsafeEval === 'boolean') {\n config.lockUnsafeEval = globalConfig.lockUnsafeEval;\n }\n if (typeof globalConfig.diagnostics === 'boolean') {\n config.diagnostics = globalConfig.diagnostics;\n }\n if (typeof globalConfig.autoContainment === 'boolean') {\n config.autoContainment = globalConfig.autoContainment;\n }\n }\n }\n\n if (typeof document !== 'undefined') {\n const script = document.currentScript as HTMLScriptElement | null;\n if (script) {\n const unsafeFromAttr = parseBooleanFlag(script.getAttribute('data-forma-unsafe-eval'));\n if (unsafeFromAttr !== undefined) {\n config.allowUnsafeEval = unsafeFromAttr;\n }\n const modeFromAttr = parseUnsafeEvalMode(\n script.getAttribute('data-forma-unsafe-eval-mode'),\n );\n if (modeFromAttr !== undefined) {\n config.unsafeEvalMode = modeFromAttr;\n }\n const lockFromAttr = parseBooleanFlag(script.getAttribute('data-forma-lock-unsafe-eval'));\n if (lockFromAttr !== undefined) {\n config.lockUnsafeEval = lockFromAttr;\n }\n const diagnosticsFromAttr = parseBooleanFlag(script.getAttribute('data-forma-diagnostics'));\n if (diagnosticsFromAttr !== undefined) {\n config.diagnostics = diagnosticsFromAttr;\n }\n const containmentFromAttr = parseBooleanFlag(script.getAttribute('data-forma-auto-containment'));\n if (containmentFromAttr !== undefined) {\n config.autoContainment = containmentFromAttr;\n }\n }\n }\n\n return config;\n}\n\nfunction reportDiagnostic(\n kind: RuntimeDiagnostic['kind'],\n expr: string,\n reason: string,\n): void {\n if (!_diagnosticsEnabled) return;\n\n const key = `${kind}|${reason}|${expr}`;\n const now = Date.now();\n const existing = diagnostics.get(key);\n\n if (existing) {\n existing.count += 1;\n existing.lastSeenAt = now;\n } else {\n diagnostics.set(key, {\n kind,\n expr,\n reason,\n count: 1,\n firstSeenAt: now,\n lastSeenAt: now,\n });\n console.warn(`[FormaJS] ${reason}: ${expr}`);\n }\n\n try {\n if (typeof window !== 'undefined') {\n const detail = {\n kind,\n expr,\n reason,\n count: diagnostics.get(key)?.count ?? 1,\n };\n window.dispatchEvent(new CustomEvent('formajs:diagnostic', { detail }));\n }\n } catch {\n // Ignore event dispatch failures\n }\n}\n\ndeclare const __FORMA_UNSAFE_EVAL_MODE__: string | undefined;\n\n/**\n * Compile-time flag: true when the build CAN use new Function().\n * In the hardened build, __FORMA_UNSAFE_EVAL_MODE__ is \"locked-off\" and\n * esbuild constant-folds this to `false`, allowing dead code elimination\n * of all new Function() paths. This ensures Socket.dev/Snyk static analysis\n * does not flag eval usage in the hardened build.\n */\nconst __EVAL_CAPABLE__ = typeof __FORMA_UNSAFE_EVAL_MODE__ !== 'string'\n || __FORMA_UNSAFE_EVAL_MODE__ !== 'locked-off';\n\nconst buildUnsafeEvalMode = parseUnsafeEvalMode(\n typeof __FORMA_UNSAFE_EVAL_MODE__ === 'string'\n ? __FORMA_UNSAFE_EVAL_MODE__\n : undefined,\n);\n\nif (buildUnsafeEvalMode) {\n _unsafeEvalMode = buildUnsafeEvalMode;\n if (_unsafeEvalMode === 'locked-off') _allowUnsafeEval = false;\n if (_unsafeEvalMode === 'locked-on') _allowUnsafeEval = true;\n if (_unsafeEvalMode === 'mutable') _allowUnsafeEval = true;\n}\n\nconst runtimeConfig = readRuntimeConfig();\nconst configUnsafeMode = runtimeConfig.lockUnsafeEval\n ? 'locked-off'\n : runtimeConfig.unsafeEvalMode;\nif (configUnsafeMode) {\n _unsafeEvalMode = configUnsafeMode;\n if (_unsafeEvalMode === 'locked-off') _allowUnsafeEval = false;\n if (_unsafeEvalMode === 'locked-on') _allowUnsafeEval = true;\n}\nif (\n _unsafeEvalMode === 'mutable'\n && typeof runtimeConfig.allowUnsafeEval === 'boolean'\n) {\n _allowUnsafeEval = runtimeConfig.allowUnsafeEval;\n}\nif (typeof runtimeConfig.diagnostics === 'boolean') {\n _diagnosticsEnabled = runtimeConfig.diagnostics;\n}\nconst _autoContainment = runtimeConfig.autoContainment === true;\n\ninterface SchedulerLike {\n yield?: () => Promise<unknown>;\n postTask?: (\n callback: () => void,\n options?: { priority?: 'user-blocking' | 'user-visible' | 'background' },\n ) => Promise<unknown>;\n}\n\nfunction getScheduler(): SchedulerLike | undefined {\n const candidate = (globalThis as any)?.scheduler as SchedulerLike | undefined;\n if (!candidate) return undefined;\n if (typeof candidate.yield === 'function' || typeof candidate.postTask === 'function') {\n return candidate;\n }\n return undefined;\n}\n\n/** Yield control to keep the main thread responsive during large batches. */\nasync function yieldToMain(): Promise<void> {\n const scheduler = getScheduler();\n if (scheduler?.yield) {\n await scheduler.yield();\n return;\n }\n if (scheduler?.postTask) {\n await scheduler.postTask(() => {}, { priority: 'background' });\n return;\n }\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n}\n\ninterface ContainmentHintsOptions {\n selector?: string;\n contain?: string;\n contentVisibility?: string;\n containIntrinsicSize?: string;\n skipIfAlreadySet?: boolean;\n}\n\n/** Apply CSS containment hints to opt-in containers for lower layout/paint cost. */\nfunction applyContainmentHints(\n root: ParentNode = document,\n options: ContainmentHintsOptions = {},\n): number {\n const selector = options.selector ?? '[data-forma-contain]';\n if (!selector) return 0;\n if (typeof (root as ParentNode).querySelectorAll !== 'function') return 0;\n\n const nodes = root.querySelectorAll(selector);\n let applied = 0;\n for (let i = 0; i < nodes.length; i++) {\n const el = nodes[i] as HTMLElement;\n if (!el?.style) continue;\n\n const contain = el.getAttribute('data-forma-contain') ?? options.contain ?? 'layout style paint';\n const contentVisibility = el.getAttribute('data-forma-content-visibility')\n ?? options.contentVisibility\n ?? 'auto';\n const containIntrinsicSize = el.getAttribute('data-forma-contain-intrinsic-size')\n ?? options.containIntrinsicSize\n ?? 'auto 800px';\n const skipExisting = options.skipIfAlreadySet === true;\n let changed = false;\n\n const containCurrent = el.style.getPropertyValue('contain');\n const contentVisCurrent = el.style.getPropertyValue('content-visibility');\n const containSizeCurrent = el.style.getPropertyValue('contain-intrinsic-size');\n\n if (contain !== 'off' && (!skipExisting || !containCurrent)) {\n el.style.setProperty('contain', contain);\n changed = true;\n }\n if (contentVisibility !== 'off' && (!skipExisting || !contentVisCurrent)) {\n el.style.setProperty('content-visibility', contentVisibility);\n changed = true;\n }\n if (containIntrinsicSize !== 'off' && (!skipExisting || !containSizeCurrent)) {\n el.style.setProperty('contain-intrinsic-size', containIntrinsicSize);\n changed = true;\n }\n\n if (changed) applied++;\n }\n\n if (_debug && applied > 0) {\n dbg('applyContainmentHints: applied to', applied, 'element(s)');\n }\n return applied;\n}\n\n// ── Pre-compiled regexes (avoid re-creation in hot paths) ──\n\nconst RE_STRING_SINGLE = /^'[^']*'$/;\nconst RE_STRING_DOUBLE = /^\"[^\"]*\"$/;\nconst RE_NUMBER = /^-?\\d+(\\.\\d+)?$/;\nconst RE_IDENTIFIER = /^[a-zA-Z_$]\\w*$/;\nconst RE_DOT_ACCESS = /^(\\w+)\\.(\\w+)$/;\nconst RE_DEEP_DOT = /^(\\w+)\\.(\\w+)\\.(\\w+)(?:\\.(\\w+))?$/;\nconst RE_BRACKET = /^(\\w+)\\[(\\d+|'[^']*'|\"[^\"]*\")\\]$/;\nconst RE_TERNARY = /^(.+?)\\s*\\?\\s*(.+?)\\s*:\\s*(.+)$/;\nconst RE_NULLISH = /^(.+?)\\s*\\?\\?\\s*(.+)$/;\nconst RE_AND = /^(.+?)\\s*&&\\s*(.+)$/;\nconst RE_OR = /^(.+?)\\s*\\|\\|\\s*(.+)$/;\nconst RE_COMPARISON = /^(.+?)\\s*(===|!==|==|!=|>=|<=|>|<)\\s*(.+)$/;\nconst RE_MUL = /^(.+?)\\s*([*/%])\\s*(.+)$/;\nconst RE_ADD = /^(.+?)\\s*([+-])\\s*(.+)$/;\nconst RE_TEMPLATE_LIT = /^`([^`]*)`$/;\nconst RE_TEMPLATE_INTERP = /\\$\\{([^}]+)\\}/g;\nconst RE_METHOD_CALL = /^(\\w+)\\.(\\w+)\\((.*)\\)$/;\nconst RE_GROUP_METHOD_CALL = /^\\((.+)\\)\\.(\\w+)\\((.*)\\)$/;\nconst RE_STRIP_BRACES = /^\\{|\\}$/g;\nconst RE_ITEM_TEMPLATE = /\\{item\\.?(\\w*)\\}/g;\nconst RE_DIGIT_ONLY = /^\\d+$/;\nconst RE_POST_INCR = /^(\\w+)(\\+\\+|--)$/;\nconst RE_PRE_INCR = /^(\\+\\+|--)(\\w+)$/;\nconst RE_TOGGLE = /^(\\w+)\\s*=\\s*!(\\w+)$/;\nconst RE_ASSIGN = /^(\\w+)\\s*=\\s*(.+)$/;\nconst RE_COMPOUND = /^(\\w+)\\s*(\\+=|-=|\\*=|\\/=)\\s*(.+)$/;\nconst RE_IF_PREFIX = /^if\\b/;\n// RE_UNQUOTED_KEYS removed in v0.5.0 — relaxed JSON parsing corrupted URLs\n// and string values containing colons. Use valid JSON in data-forma-state.\nconst RE_COMPUTED = /^(\\w+)\\s*=\\s*(.+)$/;\nconst RE_FETCH = /^(.+?)(?:→|->)\\s*(\\S+)(.*)$/;\nconst RE_FETCH_METHOD = /^(GET|POST|PUT|PATCH|DELETE)\\s+(.+)$/i;\nconst RE_STRIP_ITEM_BRACES = /^\\{item\\.?|\\}$/g;\n// Detect expressions referencing DOM event parameters — these can't be resolved\n// through scope getters and must fall through to the new Function handler path.\nconst RE_EVENT_REF = /\\bevent\\s*[.([]|\\$event\\b/;\nconst RE_REFETCH_CALL = /^\\$refetch\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)$/;\n\ninterface TransitionSpec {\n enter: string[];\n enterFrom: string[];\n enterTo: string[];\n leave: string[];\n leaveFrom: string[];\n leaveTo: string[];\n enterDurationMs?: number;\n leaveDurationMs?: number;\n}\n\ninterface ElementTransitionState {\n token: number;\n cancel: (() => void) | null;\n}\n\nconst TRANSITION_STATE_SYM = Symbol.for('forma-transition-state');\n\n// ── Expression factory cache ──\n// Maps expression string -> factory function that takes a scope and returns a getter.\n// This avoids re-parsing the same expression pattern across different scopes.\ntype ExpressionFactory = (scope: Scope) => (() => unknown) | null;\nconst EXPRESSION_CACHE_MAX = 2048;\nconst expressionCache = new Map<string, ExpressionFactory>();\nfunction cacheExpression(key: string, factory: ExpressionFactory): void {\n if (expressionCache.size >= EXPRESSION_CACHE_MAX) {\n // Evict oldest entry (first inserted)\n const first = expressionCache.keys().next().value;\n if (first !== undefined) expressionCache.delete(first);\n }\n expressionCache.set(key, factory);\n}\nlet scopeExpressionCache = new WeakMap<Scope, Map<string, () => unknown>>();\n\ninterface HandlerBuildResult {\n handler: (e: Event) => void;\n supported: boolean;\n}\n\nlet scopeHandlerCache = new WeakMap<Scope, Map<string, HandlerBuildResult>>();\n\n// ── Compiled template cache ──\n// Pre-splits template text into static/dynamic segments for fast re-evaluation.\ninterface CompiledTemplate {\n statics: string[];\n dynamics: string[]; // expression strings between {item.xxx}\n hasItemRef: boolean;\n}\n\nconst compiledTemplateCache = new Map<string, CompiledTemplate>();\nconst COMPILED_TEMPLATE_CACHE_MAX = 2048;\nfunction cacheCompiledTemplate(key: string, template: CompiledTemplate): void {\n if (compiledTemplateCache.size >= COMPILED_TEMPLATE_CACHE_MAX) {\n // Evict oldest entry (first inserted)\n const first = compiledTemplateCache.keys().next().value;\n if (first !== undefined) compiledTemplateCache.delete(first);\n }\n compiledTemplateCache.set(key, template);\n}\nconst UNSAFE_METHOD_NAMES = new Set([\n 'constructor', '__proto__', 'prototype',\n '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__',\n 'eval', 'Function',\n]);\n\n/**\n * Pre-compiled regexes for each blocked method name — avoids re-creating\n * RegExp objects on every call.\n */\nconst BLOCKED_METHOD_REGEXES: Array<{ name: string; dotRe: RegExp; bracketRe: RegExp }> = (() => {\n const result: Array<{ name: string; dotRe: RegExp; bracketRe: RegExp }> = [];\n for (const name of UNSAFE_METHOD_NAMES) {\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n result.push({\n name,\n // Match as property access (.name) or bare identifier at start\n dotRe: new RegExp(`(?:^|\\\\.)${escaped}(?:\\\\s*\\\\(|\\\\s*$|[^\\\\w$])`, 'm'),\n // Match bracket access with single quotes, double quotes, or backticks\n bracketRe: new RegExp(`\\\\[\\\\s*(?:'${escaped}'|\"${escaped}\"|` + '`' + escaped + '`' + `)\\\\s*\\\\]`),\n });\n }\n return result;\n})();\n\n/**\n * Scan an expression string for any UNSAFE_METHOD_NAMES usage.\n * Uses word-boundary matching to avoid false positives on substrings\n * (e.g. \"constructorValue\" should not match \"constructor\").\n *\n * Before scanning:\n * 1. Strips JS block comments and line comments\n * 2. Normalizes whitespace around dots (e.g. \"x . constructor\" → \"x.constructor\")\n * 3. Checks bracket access with static string literals and backtick templates\n * 4. Detects string concatenation inside brackets that could produce a blocked name\n *\n * Returns the matched blocked name, or null if clean.\n */\nfunction findBlockedMethod(expr: string): string | null {\n // Strip block comments (/* ... */)\n let cleaned = expr.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n // Strip line comments (// ... to end of line)\n cleaned = cleaned.replace(/\\/\\/[^\\n]*/g, '');\n // Normalize whitespace around dots: \"x . constructor\" → \"x.constructor\"\n cleaned = cleaned.replace(/\\s*\\.\\s*/g, '.');\n\n for (const { name, dotRe, bracketRe } of BLOCKED_METHOD_REGEXES) {\n if (dotRe.test(cleaned)) return name;\n if (bracketRe.test(cleaned)) return name;\n }\n\n // Layer 2: detect string concatenation inside brackets that could produce\n // a blocked name. Extract all bracket contents and check if concatenated\n // string fragments could form a blocked name.\n // e.g. x['constr' + 'uctor'] → extract 'constr' and 'uctor' → 'constructor'\n if (cleaned.includes('[')) {\n const bracketContents = extractBracketContents(cleaned);\n for (const content of bracketContents) {\n // Only check contents with concatenation operators\n if (!content.includes('+')) continue;\n // Extract all string literal fragments and join them\n const fragments = content.match(/['\"`]([^'\"`]*?)['\"`]/g);\n if (!fragments) continue;\n const joined = fragments.map(f => f.slice(1, -1)).join('');\n if (UNSAFE_METHOD_NAMES.has(joined)) return joined;\n }\n }\n\n return null;\n}\n\n/** Extract the contents of all bracket access expressions (between [ and ]). */\nfunction extractBracketContents(expr: string): string[] {\n const results: string[] = [];\n let depth = 0;\n let start = -1;\n for (let i = 0; i < expr.length; i++) {\n if (expr[i] === '[') {\n if (depth === 0) start = i + 1;\n depth++;\n } else if (expr[i] === ']') {\n depth--;\n if (depth === 0 && start >= 0) {\n results.push(expr.slice(start, i));\n start = -1;\n }\n }\n }\n return results;\n}\n\nconst TEXT_BINDING_SYM = Symbol.for('forma-text-binding-cache');\n\ninterface TextBindingCache {\n initialized: boolean;\n last: string;\n node: Text | null;\n}\n\nfunction toTextValue(value: unknown): string {\n if (value == null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'symbol') return value.toString();\n return String(value);\n}\n\nfunction setElementTextFast(el: Element, next: string): void {\n let cache = (el as any)[TEXT_BINDING_SYM] as TextBindingCache | undefined;\n if (!cache) {\n cache = { initialized: false, last: '', node: null };\n (el as any)[TEXT_BINDING_SYM] = cache;\n }\n\n if (cache.initialized && cache.last === next) return;\n\n // Reuse direct text-node writes when this element is a single text child.\n let node = cache.node;\n if (!node || node.parentNode !== el || el.childNodes.length !== 1 || el.firstChild !== node) {\n if (el.childNodes.length === 1 && el.firstChild?.nodeType === Node.TEXT_NODE) {\n node = el.firstChild as Text;\n cache.node = node;\n } else {\n el.textContent = next;\n const first = el.firstChild;\n cache.node = (first && first.nodeType === Node.TEXT_NODE && el.childNodes.length === 1)\n ? (first as Text)\n : null;\n cache.last = next;\n cache.initialized = true;\n return;\n }\n }\n\n node.data = next;\n cache.last = next;\n cache.initialized = true;\n}\n\nfunction splitCallArgs(raw: string): string[] {\n const out: string[] = [];\n if (raw.trim() === '') return out;\n\n let depth = 0;\n let inSingle = false;\n let inDouble = false;\n let escaped = false;\n let start = 0;\n\n for (let i = 0; i < raw.length; i++) {\n const ch = raw[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n\n if (ch === '(') {\n depth++;\n continue;\n }\n if (ch === ')') {\n if (depth > 0) depth--;\n continue;\n }\n\n if (ch === ',' && depth === 0) {\n out.push(raw.slice(start, i).trim());\n start = i + 1;\n }\n }\n\n out.push(raw.slice(start).trim());\n return out.filter(Boolean);\n}\n\nfunction readBalancedSegment(\n input: string,\n start: number,\n open: string,\n close: string,\n): { inner: string; end: number } | null {\n if (input[start] !== open) return null;\n\n let depth = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n let escaped = false;\n\n for (let i = start; i < input.length; i++) {\n const ch = input[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\' && (inSingle || inDouble || inTemplate)) {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n if (inTemplate) {\n if (ch === '`') inTemplate = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n continue;\n }\n\n if (ch === open) {\n depth++;\n continue;\n }\n if (ch === close) {\n depth--;\n if (depth === 0) {\n return {\n inner: input.slice(start + 1, i),\n end: i,\n };\n }\n }\n }\n\n return null;\n}\n\nfunction splitTopLevelStatements(raw: string): string[] {\n const input = raw.trim();\n if (!input) return [];\n\n const out: string[] = [];\n let depthParen = 0;\n let depthBrace = 0;\n let depthBracket = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n let escaped = false;\n let start = 0;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\' && (inSingle || inDouble || inTemplate)) {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n if (inTemplate) {\n if (ch === '`') inTemplate = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n continue;\n }\n\n if (ch === '(') depthParen++;\n else if (ch === ')' && depthParen > 0) depthParen--;\n else if (ch === '{') depthBrace++;\n else if (ch === '}' && depthBrace > 0) depthBrace--;\n else if (ch === '[') depthBracket++;\n else if (ch === ']' && depthBracket > 0) depthBracket--;\n\n if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {\n const stmt = input.slice(start, i).trim();\n if (stmt) out.push(stmt);\n start = i + 1;\n }\n }\n\n const tail = input.slice(start).trim();\n if (tail) out.push(tail);\n return out;\n}\n\nfunction consumeStatement(raw: string): { body: string; rest: string } | null {\n const input = raw.trim();\n if (!input) return null;\n\n if (input.startsWith('{')) {\n const block = readBalancedSegment(input, 0, '{', '}');\n if (!block) return null;\n const body = block.inner.trim();\n let rest = input.slice(block.end + 1).trim();\n if (rest.startsWith(';')) rest = rest.slice(1).trim();\n return { body, rest };\n }\n\n let depthParen = 0;\n let depthBrace = 0;\n let depthBracket = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n let escaped = false;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\' && (inSingle || inDouble || inTemplate)) {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n if (inTemplate) {\n if (ch === '`') inTemplate = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n continue;\n }\n\n if (ch === '(') depthParen++;\n else if (ch === ')' && depthParen > 0) depthParen--;\n else if (ch === '{') depthBrace++;\n else if (ch === '}' && depthBrace > 0) depthBrace--;\n else if (ch === '[') depthBracket++;\n else if (ch === ']' && depthBracket > 0) depthBracket--;\n\n if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {\n return {\n body: input.slice(0, i).trim(),\n rest: input.slice(i + 1).trim(),\n };\n }\n }\n\n return {\n body: input,\n rest: '',\n };\n}\n\nfunction parseIfHandler(expr: string, scope: Scope): ((e: Event) => void) | null {\n const input = expr.trim();\n if (!RE_IF_PREFIX.test(input)) return null;\n\n // If the expression references DOM event parameters (`event`, `$event`),\n // bail out — these aren't in scope getters and must use new Function.\n if (RE_EVENT_REF.test(input)) return null;\n\n let idx = 2;\n while (idx < input.length && /\\s/.test(input[idx]!)) idx++;\n if (input[idx] !== '(') return null;\n\n const condSegment = readBalancedSegment(input, idx, '(', ')');\n if (!condSegment) return null;\n\n const condExpr = parseExpression(condSegment.inner.trim(), scope);\n if (!condExpr) return null;\n\n let rest = input.slice(condSegment.end + 1).trim();\n const thenStmt = consumeStatement(rest);\n if (!thenStmt || !thenStmt.body) return null;\n\n const thenHandler = parseHandler(thenStmt.body, scope);\n if (!thenHandler) return null;\n\n rest = thenStmt.rest.trim();\n let elseHandler: ((e: Event) => void) | null = null;\n if (rest.startsWith('else')) {\n rest = rest.slice('else'.length).trim();\n const elseStmt = consumeStatement(rest);\n if (!elseStmt || !elseStmt.body) return null;\n elseHandler = parseHandler(elseStmt.body, scope);\n if (!elseHandler) return null;\n rest = elseStmt.rest.trim();\n }\n\n if (rest.length > 0) return null;\n\n return (e: Event) => {\n batch(() => {\n if (condExpr()) thenHandler(e);\n else elseHandler?.(e);\n });\n };\n}\n\nfunction unwrapOuterParens(raw: string): string {\n let expr = raw.trim();\n while (expr.startsWith('(')) {\n const segment = readBalancedSegment(expr, 0, '(', ')');\n if (!segment || segment.end !== expr.length - 1) break;\n const inner = segment.inner.trim();\n if (!inner) break;\n expr = inner;\n }\n return expr;\n}\n\nfunction compileTemplate(text: string): CompiledTemplate {\n const cached = compiledTemplateCache.get(text);\n if (cached) return cached;\n\n const statics: string[] = [];\n const dynamics: string[] = [];\n let lastIndex = 0;\n // Use a fresh regex each time since it has the 'g' flag\n const re = /\\{item\\.?(\\w*)\\}/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n statics.push(text.slice(lastIndex, m.index));\n dynamics.push(m[1]!); // the key after \"item.\" (empty string means whole item)\n lastIndex = re.lastIndex;\n }\n statics.push(text.slice(lastIndex));\n\n const result: CompiledTemplate = {\n statics,\n dynamics,\n hasItemRef: dynamics.length > 0,\n };\n cacheCompiledTemplate(text, result);\n return result;\n}\n\n// ── Template text caching for data-list ──\n\n/** Maps text nodes to their compiled template (pre-split static/dynamic segments). */\nconst templateTexts = new WeakMap<Node, CompiledTemplate>();\n\n/**\n * Resolve template placeholders in a text string using pre-compiled template.\n * Concatenates static segments with evaluated dynamic segments.\n */\nfunction resolveTemplate(text: string, item: unknown): string {\n const compiled = compileTemplate(text);\n return evaluateCompiledTemplate(compiled, item);\n}\n\n/**\n * Evaluate a pre-compiled template against an item.\n * Only evaluates dynamic parts and concatenates with static segments.\n */\nfunction evaluateCompiledTemplate(compiled: CompiledTemplate, item: unknown): string {\n if (!compiled.hasItemRef) return compiled.statics[0]!;\n let result = compiled.statics[0]!;\n for (let i = 0; i < compiled.dynamics.length; i++) {\n const key = compiled.dynamics[i]!;\n if (!key) {\n result += typeof item === 'object' ? JSON.stringify(item) : String(item ?? '');\n } else {\n result += String((item as Record<string, unknown>)?.[key] ?? '');\n }\n result += compiled.statics[i + 1] ?? '';\n }\n return result;\n}\n\n/**\n * Clone a template element and apply item data to all text node placeholders.\n * Stores the original template text in a WeakMap so updates can re-apply without re-cloning.\n */\nfunction cloneWithTemplateData(template: Element, item: unknown): Element {\n const clone = template.cloneNode(true) as Element;\n const walker = document.createTreeWalker(clone, NodeFilter.SHOW_TEXT);\n while (walker.nextNode()) {\n const node = walker.currentNode;\n const text = node.textContent ?? '';\n if (text.includes('{item')) {\n const compiled = compileTemplate(text);\n templateTexts.set(node, compiled); // Store compiled template\n node.textContent = evaluateCompiledTemplate(compiled, item);\n }\n }\n // Also process attributes (e.g. data-key, href, src, etc.)\n cloneAttributeTemplates(clone, item);\n return clone;\n}\n\n/**\n * Update an existing cloned element's text nodes with new item data.\n * Uses the cached original template patterns from the WeakMap.\n */\nfunction updateTemplateData(el: Element, item: unknown): void {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);\n while (walker.nextNode()) {\n const node = walker.currentNode;\n const compiled = templateTexts.get(node);\n if (compiled) {\n node.textContent = evaluateCompiledTemplate(compiled, item);\n }\n }\n}\n\n/** WeakMap for caching compiled attribute templates */\nconst templateAttrs = new WeakMap<Element, Array<{ attr: string; compiled: CompiledTemplate }>>();\n\n/**\n * Process attribute templates on a cloned element and its descendants.\n * Pre-compiles patterns and resolves them with item data.\n */\n/** Directive attribute names/prefixes that bindElement processes — these must NOT be\n * template-interpolated by cloneAttributeTemplates because their values will be\n * evaluated by the reactive binding system using the child scope. */\nconst DIRECTIVE_ATTR_PREFIXES = [\n 'data-list', 'data-show', 'data-text', 'data-if', 'data-model',\n 'data-on:', 'data-class:', 'data-bind:', 'data-computed', 'data-persist', 'data-fetch',\n 'data-transition', 'data-transition:',\n];\nfunction isDirectiveAttr(name: string): boolean {\n for (const prefix of DIRECTIVE_ATTR_PREFIXES) {\n if (name === prefix || name.startsWith(prefix)) return true;\n }\n return false;\n}\n\nfunction splitClassTokens(raw: string | null): string[] {\n if (!raw) return [];\n return raw\n .trim()\n .split(/\\s+/)\n .map((t) => t.trim())\n .filter(Boolean);\n}\n\nfunction parseDurationTokenMs(token: string): number | null {\n const t = token.trim().toLowerCase();\n if (t.endsWith('ms')) {\n const n = Number(t.slice(0, -2));\n return Number.isFinite(n) && n >= 0 ? n : null;\n }\n if (t.endsWith('s')) {\n const n = Number(t.slice(0, -1));\n return Number.isFinite(n) && n >= 0 ? n * 1000 : null;\n }\n return null;\n}\n\nfunction parseClassTokensAndDuration(raw: string | null): { classes: string[]; durationMs?: number } {\n const classes: string[] = [];\n let durationMs: number | undefined;\n for (const token of splitClassTokens(raw)) {\n const parsed = parseDurationTokenMs(token);\n if (parsed != null) {\n durationMs = parsed;\n } else {\n classes.push(token);\n }\n }\n return { classes, durationMs };\n}\n\nfunction uniqueTokens(tokens: string[]): string[] {\n return Array.from(new Set(tokens.filter(Boolean)));\n}\n\nfunction parseCssTimeListMs(raw: string): number[] {\n if (!raw) return [];\n return raw\n .split(',')\n .map((part) => parseDurationTokenMs(part.trim()))\n .filter((ms): ms is number => ms != null);\n}\n\nfunction maxCombinedTimingsMs(durations: number[], delays: number[]): number {\n if (durations.length === 0 && delays.length === 0) return 0;\n if (durations.length === 0) return Math.max(...delays, 0);\n if (delays.length === 0) return Math.max(...durations, 0);\n\n const len = Math.max(durations.length, delays.length);\n let max = 0;\n for (let i = 0; i < len; i++) {\n const d = durations[i % durations.length] ?? 0;\n const delay = delays[i % delays.length] ?? 0;\n if (d + delay > max) max = d + delay;\n }\n return max;\n}\n\nfunction resolveTransitionDurationMs(el: HTMLElement, explicitMs?: number): number {\n if (typeof explicitMs === 'number') return explicitMs;\n const cs = window.getComputedStyle(el);\n const trans = maxCombinedTimingsMs(\n parseCssTimeListMs(cs.transitionDuration),\n parseCssTimeListMs(cs.transitionDelay),\n );\n const anim = maxCombinedTimingsMs(\n parseCssTimeListMs(cs.animationDuration),\n parseCssTimeListMs(cs.animationDelay),\n );\n return Math.max(trans, anim);\n}\n\nfunction getTransitionState(el: HTMLElement): ElementTransitionState {\n const existing = (el as any)[TRANSITION_STATE_SYM] as ElementTransitionState | undefined;\n if (existing) return existing;\n const created: ElementTransitionState = { token: 0, cancel: null };\n (el as any)[TRANSITION_STATE_SYM] = created;\n return created;\n}\n\nfunction clearTransitionState(el: HTMLElement): void {\n const state = (el as any)[TRANSITION_STATE_SYM] as ElementTransitionState | undefined;\n if (state?.cancel) {\n state.cancel();\n }\n delete (el as any)[TRANSITION_STATE_SYM];\n}\n\nfunction parseTransitionSpec(el: Element): TransitionSpec | null {\n const hasTransitionAttr = el.hasAttribute('data-transition')\n || Array.from(el.attributes).some((a) => a.name.startsWith('data-transition:'));\n if (!hasTransitionAttr) return null;\n\n const base = parseClassTokensAndDuration(el.getAttribute('data-transition')).classes;\n\n const enter = parseClassTokensAndDuration(el.getAttribute('data-transition:enter'));\n const leave = parseClassTokensAndDuration(el.getAttribute('data-transition:leave'));\n const enterFrom = splitClassTokens(\n el.getAttribute('data-transition:enter-from')\n ?? el.getAttribute('data-transition:enter-start'),\n );\n const enterTo = splitClassTokens(\n el.getAttribute('data-transition:enter-to')\n ?? el.getAttribute('data-transition:enter-end'),\n );\n const leaveFrom = splitClassTokens(\n el.getAttribute('data-transition:leave-from')\n ?? el.getAttribute('data-transition:leave-start'),\n );\n const leaveTo = splitClassTokens(\n el.getAttribute('data-transition:leave-to')\n ?? el.getAttribute('data-transition:leave-end'),\n );\n\n const durationBoth = parseDurationTokenMs(el.getAttribute('data-transition:duration') ?? '');\n const enterDuration = parseDurationTokenMs(el.getAttribute('data-transition:duration-enter') ?? '')\n ?? enter.durationMs\n ?? durationBoth\n ?? undefined;\n const leaveDuration = parseDurationTokenMs(el.getAttribute('data-transition:duration-leave') ?? '')\n ?? leave.durationMs\n ?? durationBoth\n ?? undefined;\n\n return {\n enter: uniqueTokens([...base, ...enter.classes]),\n enterFrom: uniqueTokens(enterFrom),\n enterTo: uniqueTokens(enterTo),\n leave: uniqueTokens([...base, ...leave.classes]),\n leaveFrom: uniqueTokens(leaveFrom),\n leaveTo: uniqueTokens(leaveTo),\n enterDurationMs: enterDuration,\n leaveDurationMs: leaveDuration,\n };\n}\n\nfunction removeClasses(el: Element, classes: string[]): void {\n for (const cls of classes) {\n el.classList.remove(cls);\n }\n}\n\nfunction addClasses(el: Element, classes: string[]): void {\n for (const cls of classes) {\n el.classList.add(cls);\n }\n}\n\nfunction runTransitionPhase(\n el: HTMLElement,\n phaseClasses: { base: string[]; from: string[]; to: string[]; durationMs?: number },\n onDone: () => void,\n): () => void {\n const cleanupClasses = uniqueTokens([\n ...phaseClasses.base,\n ...phaseClasses.from,\n ...phaseClasses.to,\n ]);\n\n let done = false;\n let timeoutId: number | null = null;\n let raf1: number | null = null;\n let raf2: number | null = null;\n\n const finish = () => {\n if (done) return;\n done = true;\n if (timeoutId != null) window.clearTimeout(timeoutId);\n if (raf1 != null) cancelAnimationFrame(raf1);\n if (raf2 != null) cancelAnimationFrame(raf2);\n removeClasses(el, cleanupClasses);\n onDone();\n };\n\n addClasses(el, phaseClasses.base);\n addClasses(el, phaseClasses.from);\n removeClasses(el, phaseClasses.to);\n\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => {\n if (done) return;\n removeClasses(el, phaseClasses.from);\n addClasses(el, phaseClasses.to);\n\n const ms = resolveTransitionDurationMs(el, phaseClasses.durationMs);\n if (ms <= 0) {\n finish();\n return;\n }\n timeoutId = window.setTimeout(finish, ms + 25);\n });\n });\n\n return finish;\n}\n\n/**\n * Insert an element into the DOM and optionally run an enter transition.\n * The element is functional immediately — the animation is purely visual.\n */\nfunction transitionInsert(\n el: HTMLElement,\n parent: Node,\n ref: Node | null,\n spec: TransitionSpec | null,\n): void {\n parent.insertBefore(el, ref);\n if (!spec) return;\n\n const state = getTransitionState(el);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n\n state.cancel = runTransitionPhase(\n el,\n {\n base: spec.enter,\n from: spec.enterFrom,\n to: spec.enterTo,\n durationMs: spec.enterDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token === token) current.cancel = null;\n },\n );\n}\n\n/**\n * Run a leave transition on an element, then call onDone when complete.\n * Sets data-forma-leaving immediately so the element is excluded from diffs.\n * If no transition spec, calls onDone synchronously.\n */\nfunction transitionRemove(\n el: HTMLElement,\n spec: TransitionSpec | null,\n onDone: () => void,\n): void {\n // Guard: if already leaving, don't start another leave\n if (el.hasAttribute('data-forma-leaving')) {\n onDone();\n return;\n }\n\n if (!spec) {\n onDone();\n return;\n }\n\n el.setAttribute('data-forma-leaving', '');\n\n const state = getTransitionState(el);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n\n state.cancel = runTransitionPhase(\n el,\n {\n base: spec.leave,\n from: spec.leaveFrom,\n to: spec.leaveTo,\n durationMs: spec.leaveDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token === token) current.cancel = null;\n el.removeAttribute('data-forma-leaving');\n onDone();\n },\n );\n}\n\nfunction applyShowVisibility(\n el: HTMLElement,\n visible: boolean,\n transition: TransitionSpec | null,\n initial: boolean,\n): void {\n if (!transition || initial) {\n el.style.display = visible ? '' : 'none';\n if (transition) {\n removeClasses(el, uniqueTokens([\n ...transition.enter, ...transition.enterFrom, ...transition.enterTo,\n ...transition.leave, ...transition.leaveFrom, ...transition.leaveTo,\n ]));\n }\n return;\n }\n\n const state = getTransitionState(el);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n state.cancel = null;\n\n if (visible) {\n el.style.display = '';\n state.cancel = runTransitionPhase(\n el,\n {\n base: transition.enter,\n from: transition.enterFrom,\n to: transition.enterTo,\n durationMs: transition.enterDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token === token) current.cancel = null;\n },\n );\n return;\n }\n\n state.cancel = runTransitionPhase(\n el,\n {\n base: transition.leave,\n from: transition.leaveFrom,\n to: transition.leaveTo,\n durationMs: transition.leaveDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token !== token) return;\n el.style.display = 'none';\n current.cancel = null;\n },\n );\n}\n\nfunction cloneAttributeTemplates(el: Element, item: unknown): void {\n const all = [el, ...Array.from(el.querySelectorAll('*'))];\n for (const node of all) {\n const entries: Array<{ attr: string; compiled: CompiledTemplate }> = [];\n for (const attr of Array.from(node.attributes)) {\n // Skip directive attributes — they'll be evaluated by bindElement with the child scope\n if (isDirectiveAttr(attr.name)) continue;\n if (attr.value.includes('{item')) {\n const compiled = compileTemplate(attr.value);\n entries.push({ attr: attr.name, compiled });\n node.setAttribute(attr.name, evaluateCompiledTemplate(compiled, item));\n }\n }\n if (entries.length > 0) {\n templateAttrs.set(node, entries);\n }\n }\n}\n\n// ── Chained access / optional chaining parser ──\n\n/**\n * Represents a single step in a property/method chain.\n * - type 'prop': property access (`.name` or `?.name`)\n * - type 'call': method call (`.method(args)` or `?.method(args)`)\n */\ninterface ChainStep {\n type: 'prop' | 'call';\n name: string;\n optional: boolean; // true for `?.`\n argFns?: Array<() => unknown>; // only for 'call' type\n}\n\n/**\n * Parse an expression that starts with an identifier and is followed by\n * zero or more chain steps: `.prop`, `?.prop`, `.method(args)`, `?.method(args)`.\n * Returns null if the expression doesn't match this pattern.\n *\n * Handles: \"user.name\", \"user?.name\", \"str.trim().toUpperCase()\",\n * \"obj?.method()\", \"items.filter(x).map(y)\", \"a.b.c.d\" (any depth).\n */\nfunction parseChainedAccess(expr: string, scope: Scope): (() => unknown) | null {\n // Must start with an identifier (or Math)\n let pos = 0;\n const identMatch = expr.match(/^[a-zA-Z_$]\\w*/);\n if (!identMatch) return null;\n\n const rootName = identMatch[0]!;\n pos = rootName.length;\n\n // Must have at least one chain step after the identifier\n if (pos >= expr.length) return null;\n // Next char must be '.' or '?' (for '?.')\n if (expr[pos] !== '.' && !(expr[pos] === '?' && expr[pos + 1] === '.')) return null;\n\n const steps: ChainStep[] = [];\n\n while (pos < expr.length) {\n let optional = false;\n\n // Check for `?.` (optional chaining) or `.` (regular access)\n if (expr[pos] === '?' && expr[pos + 1] === '.') {\n optional = true;\n pos += 2;\n } else if (expr[pos] === '.') {\n pos += 1;\n } else {\n // Not a chain continuation — unexpected character\n return null;\n }\n\n // Parse property/method name\n const nameMatch = expr.slice(pos).match(/^\\w+/);\n if (!nameMatch) return null;\n const name = nameMatch[0]!;\n pos += name.length;\n\n if (UNSAFE_METHOD_NAMES.has(name)) return () => undefined;\n\n // Check if this is a method call: followed by `(`\n if (pos < expr.length && expr[pos] === '(') {\n const balanced = readBalancedSegment(expr, pos, '(', ')');\n if (!balanced) return null;\n\n const argsRaw = balanced.inner.trim();\n const argFns: Array<() => unknown> = [];\n for (const arg of splitCallArgs(argsRaw)) {\n const parsed = parseExpression(arg, scope);\n if (!parsed) return null;\n argFns.push(parsed);\n }\n\n steps.push({ type: 'call', name, optional, argFns });\n pos = balanced.end + 1;\n } else {\n steps.push({ type: 'prop', name, optional });\n }\n }\n\n // If we didn't consume the entire expression, this isn't a simple chain\n if (pos !== expr.length) return null;\n\n // If there are no steps, fall back (just an identifier)\n if (steps.length === 0) return null;\n\n // Build the root expression getter\n const rootExpr = rootName === 'Math'\n ? (() => Math)\n : (() => scope.getters[rootName]?.());\n\n return () => {\n let val: any = rootExpr();\n for (const step of steps) {\n if (val == null) {\n if (step.optional) return undefined;\n // Non-optional access on null/undefined — use ?. semantics\n // (existing behavior used ?. for dot access)\n return undefined;\n }\n if (step.type === 'prop') {\n val = val[step.name];\n } else {\n const method = val[step.name];\n if (typeof method !== 'function') return undefined;\n const args = step.argFns!.map(fn => fn());\n val = method.apply(val, args);\n }\n }\n return val;\n };\n}\n\n// ── CSP-safe expression parser ──\n\n/**\n * Parse a simple expression into a closure that evaluates against the scope.\n * Handles common patterns without requiring `new Function()` or `eval`.\n * Returns null if the expression is too complex for the CSP-safe parser.\n */\nfunction parseExpression(expr: string, scope: Scope): (() => unknown) | null {\n // Check expression factory cache first\n const cachedFactory = expressionCache.get(expr);\n if (cachedFactory) return cachedFactory(scope);\n\n const result = parseExpressionUncached(expr, scope);\n\n // Cache factory functions for common simple patterns that can be re-bound to different scopes\n if (result !== null) {\n // Cache factories for simple patterns (identifier, dot access, etc.)\n // Complex patterns with sub-expressions are scope-dependent and harder to cache as factories,\n // but we can still cache the structural match result for them.\n // Keyword literals MUST be checked before RE_IDENTIFIER — \"true\", \"false\",\n // \"null\", \"undefined\" all match /^[a-zA-Z_$]\\w*$/ and would be incorrectly\n // cached as scope variable lookups (returning undefined).\n if (expr === 'true' || expr === 'false' || expr === 'null' || expr === 'undefined') {\n const val = expr === 'true' ? true : expr === 'false' ? false : expr === 'null' ? null : undefined;\n cacheExpression(expr, () => () => val);\n } else if (RE_IDENTIFIER.test(expr)) {\n cacheExpression(expr, (s) => () => s.getters[expr]?.());\n } else if (RE_STRING_SINGLE.test(expr) || RE_STRING_DOUBLE.test(expr)) {\n const val = expr.slice(1, -1);\n cacheExpression(expr, () => () => val);\n } else if (RE_NUMBER.test(expr)) {\n const val = Number(expr);\n cacheExpression(expr, () => () => val);\n } else {\n const dotMatch = expr.match(RE_DOT_ACCESS);\n if (dotMatch) {\n const p1 = dotMatch[1]!, p2 = dotMatch[2]!;\n cacheExpression(expr, (s) => () => {\n const obj = s.getters[p1]?.();\n return (obj as any)?.[p2];\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Core expression parser — called on cache miss.\n * Uses pre-compiled module-level regexes for all pattern matching.\n */\nfunction parseExpressionUncached(expr: string, scope: Scope): (() => unknown) | null {\n expr = expr.trim();\n\n // Parenthesized group: \"(a + b)\", \"((count))\"\n const unwrapped = unwrapOuterParens(expr);\n if (unwrapped !== expr) {\n return parseExpression(unwrapped, scope);\n }\n\n // Literals first (before identifier check, since \\w matches digits)\n\n // String literals\n if (RE_STRING_SINGLE.test(expr) || RE_STRING_DOUBLE.test(expr)) {\n const val = expr.slice(1, -1);\n return () => val;\n }\n\n // Number literals\n if (RE_NUMBER.test(expr)) {\n const val = Number(expr);\n return () => val;\n }\n\n // Boolean / null / undefined literals\n if (expr === 'true') return () => true;\n if (expr === 'false') return () => false;\n if (expr === 'null') return () => null;\n if (expr === 'undefined') return () => undefined;\n\n // Simple identifier: \"count\", \"name\" (must start with letter/underscore/$)\n if (RE_IDENTIFIER.test(expr)) {\n return () => scope.getters[expr]?.();\n }\n\n // Chained access / method calls / optional chaining:\n // \"user.name\", \"user?.name\", \"str.trim().toUpperCase()\", \"obj?.method()\", \"items.filter(x).map(y)\"\n // Also handles simple dot access, deep dot access, and single method calls.\n {\n const chainResult = parseChainedAccess(expr, scope);\n if (chainResult) return chainResult;\n }\n\n // Grouped method call: \"(expr).method(args)\" — base is a parenthesized expression\n const groupedCallMatch = expr.match(RE_GROUP_METHOD_CALL);\n if (groupedCallMatch) {\n const baseRaw = groupedCallMatch[1]!.trim();\n const methodName = groupedCallMatch[2]!;\n const argsRaw = groupedCallMatch[3]!.trim();\n\n if (UNSAFE_METHOD_NAMES.has(methodName)) return () => undefined;\n\n const baseExpr = parseExpression(baseRaw, scope);\n if (!baseExpr) return null;\n\n const argFns: Array<() => unknown> = [];\n for (const arg of splitCallArgs(argsRaw)) {\n const parsed = parseExpression(arg, scope);\n if (!parsed) return null;\n argFns.push(parsed);\n }\n\n return () => {\n const base = baseExpr() as any;\n const method = base?.[methodName];\n if (typeof method !== 'function') return undefined;\n const args = argFns.map(fn => fn());\n return method.apply(base, args);\n };\n }\n\n // Negation: \"!active\", \"!user.loggedIn\"\n if (expr.startsWith('!')) {\n const inner = parseExpression(expr.slice(1).trim(), scope);\n if (inner) return () => !inner();\n }\n\n // Bracket access: \"items[0]\", \"obj['key']\"\n const bracketMatch = expr.match(RE_BRACKET);\n if (bracketMatch) {\n const objExpr = parseExpression(bracketMatch[1]!, scope);\n let key: string | number;\n const rawKey = bracketMatch[2]!;\n if (RE_DIGIT_ONLY.test(rawKey)) {\n key = Number(rawKey);\n } else {\n key = rawKey.slice(1, -1);\n }\n if (objExpr) {\n return () => (objExpr() as any)?.[key];\n }\n }\n\n // Array literal: \"[1, 2, 3]\", \"[item.name, item.id]\", \"['a', 'b']\"\n if (expr.startsWith('[')) {\n const balanced = readBalancedSegment(expr, 0, '[', ']');\n if (balanced && balanced.end === expr.length - 1) {\n const inner = balanced.inner.trim();\n if (inner === '') {\n // Empty array: []\n return () => [];\n }\n const elements = splitCallArgs(inner);\n const elementFns: Array<() => unknown> = [];\n let allParsed = true;\n for (const el of elements) {\n const parsed = parseExpression(el.trim(), scope);\n if (!parsed) { allParsed = false; break; }\n elementFns.push(parsed);\n }\n if (allParsed) {\n return () => elementFns.map(fn => fn());\n }\n }\n }\n\n // Ternary: \"expr ? a : b\"\n const ternaryMatch = expr.match(RE_TERNARY);\n if (ternaryMatch) {\n const cond = parseExpression(ternaryMatch[1]!.trim(), scope);\n const then = parseExpression(ternaryMatch[2]!.trim(), scope);\n const els = parseExpression(ternaryMatch[3]!.trim(), scope);\n if (cond && then && els) {\n return () => cond() ? then() : els();\n }\n }\n\n // Nullish coalescing: \"value ?? 'default'\"\n const nullishMatch = expr.match(RE_NULLISH);\n if (nullishMatch) {\n const left = parseExpression(nullishMatch[1]!.trim(), scope);\n const right = parseExpression(nullishMatch[2]!.trim(), scope);\n if (left && right) {\n return () => left() ?? right();\n }\n }\n\n // Logical OR: \"a || b\" (lower precedence than AND — checked first)\n const orMatch = expr.match(RE_OR);\n if (orMatch) {\n const left = parseExpression(orMatch[1]!.trim(), scope);\n const right = parseExpression(orMatch[2]!.trim(), scope);\n if (left && right) {\n return () => left() || right();\n }\n }\n\n // Logical AND: \"a && b\" (higher precedence than OR — checked after)\n const andMatch = expr.match(RE_AND);\n if (andMatch) {\n const left = parseExpression(andMatch[1]!.trim(), scope);\n const right = parseExpression(andMatch[2]!.trim(), scope);\n if (left && right) {\n return () => left() && right();\n }\n }\n\n // Comparison operators: ===, !==, ==, !=, >=, <=, >, <\n const compMatch = expr.match(RE_COMPARISON);\n if (compMatch) {\n const left = parseExpression(compMatch[1]!.trim(), scope);\n const right = parseExpression(compMatch[3]!.trim(), scope);\n if (left && right) {\n const op = compMatch[2]!;\n return () => {\n const l = left(), r = right();\n switch (op) {\n case '===': return l === r;\n case '!==': return l !== r;\n case '==': return l == r;\n case '!=': return l != r;\n case '>': return (l as number) > (r as number);\n case '<': return (l as number) < (r as number);\n case '>=': return (l as number) >= (r as number);\n case '<=': return (l as number) <= (r as number);\n }\n };\n }\n }\n\n // Arithmetic: +, -, *, /, %\n // Addition/subtraction first (lower precedence — checked first), then * / %\n const addMatch = expr.match(RE_ADD);\n if (addMatch) {\n const left = parseExpression(addMatch[1]!.trim(), scope);\n const right = parseExpression(addMatch[3]!.trim(), scope);\n if (left && right) {\n const op = addMatch[2]!;\n return () => {\n const l = left(), r = right();\n if (op === '+') return (l as any) + (r as any);\n return (l as number) - (r as number);\n };\n }\n }\n\n // Multiplication / division / modulo (higher precedence — checked after addition)\n const mulMatch = expr.match(RE_MUL);\n if (mulMatch) {\n const left = parseExpression(mulMatch[1]!.trim(), scope);\n const right = parseExpression(mulMatch[3]!.trim(), scope);\n if (left && right) {\n const op = mulMatch[2]!;\n return () => {\n const l = left() as number, r = right() as number;\n switch (op) {\n case '*': return l * r;\n case '/': return l / r;\n case '%': return l % r;\n }\n };\n }\n }\n\n // Template literals: `Hello ${name}`\n const tmplMatch = expr.match(RE_TEMPLATE_LIT);\n if (tmplMatch) {\n const raw = tmplMatch[1]!;\n // Pre-split template literal into static/dynamic segments\n const staticParts: string[] = [];\n const dynamicFns: (() => unknown)[] = [];\n let lastIndex = 0;\n // Create a fresh regex since RE_TEMPLATE_INTERP has the 'g' flag\n const re = new RegExp(RE_TEMPLATE_INTERP.source, 'g');\n let m: RegExpExecArray | null;\n while ((m = re.exec(raw)) !== null) {\n staticParts.push(raw.slice(lastIndex, m.index));\n const inner = parseExpression(m[1]!.trim(), scope);\n if (!inner) return null; // Can't parse inner expression\n dynamicFns.push(inner);\n lastIndex = re.lastIndex;\n }\n staticParts.push(raw.slice(lastIndex));\n\n // Optimized evaluation: concatenate instead of map+join\n return () => {\n let result = staticParts[0]!;\n for (let i = 0; i < dynamicFns.length; i++) {\n result += String(dynamicFns[i]!() ?? '');\n result += staticParts[i + 1] ?? '';\n }\n return result;\n };\n }\n\n // Can't parse — return null for fallback\n return null;\n}\n\n// ── Expression evaluator ──\n\nfunction getScopeCache<T>(cache: WeakMap<Scope, Map<string, T>>, scope: Scope): Map<string, T> {\n let scoped = cache.get(scope);\n if (!scoped) {\n scoped = new Map<string, T>();\n cache.set(scope, scoped);\n }\n return scoped;\n}\n\n/** Build an actionable hint for expressions/handlers that failed CSP-safe parsing. */\nfunction cspExpressionHint(expr: string): string {\n if (expr.includes('...')) {\n return `Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).`;\n }\n // Note: optional chaining (?.) is now supported by the CSP-safe parser.\n if (expr.includes('=>')) {\n return `Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).`;\n }\n return `Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true).`;\n}\n\nfunction buildEvaluator(expr: string, scope: Scope): () => unknown {\n const cleaned = expr.replace(RE_STRIP_BRACES, '').trim();\n const cache = getScopeCache(scopeExpressionCache, scope);\n const cached = cache.get(cleaned);\n if (cached) return cached;\n\n // Try CSP-safe parsing first\n const cspFn = parseExpression(cleaned, scope);\n if (cspFn) {\n cache.set(cleaned, cspFn);\n return cspFn;\n }\n\n // Fallback to Function constructor (for complex expressions)\n // __EVAL_CAPABLE__ is a compile-time constant — in the hardened build,\n // esbuild constant-folds it to false and eliminates this entire block,\n // ensuring no `new Function` appears in the hardened dist.\n if (!__EVAL_CAPABLE__ || !_allowUnsafeEval) {\n dbg('buildEvaluator: blocked unsafe eval fallback for expression:', cleaned);\n reportDiagnostic('expression-unsupported', cleaned, cspExpressionHint(cleaned));\n const blocked = () => undefined;\n cache.set(cleaned, blocked);\n return blocked;\n }\n\n // Apply UNSAFE_METHOD_NAMES blocklist before new Function — prevents\n // prototype-pollution and eval injection via the unsafe eval path.\n const blockedMethod = findBlockedMethod(cleaned);\n if (blockedMethod) {\n const msg = `Blocked unsafe method \"${blockedMethod}\" in expression`;\n reportDiagnostic('expression-unsupported', cleaned, msg);\n throw new Error(`[FormaJS] ${msg}: ${cleaned}`);\n }\n\n try {\n const fn = new Function('__scope', `with(__scope) { return (${cleaned}); }`);\n // Cache proxy — scope.getters is a mutable object, so the proxy\n // always reflects current state without needing to be recreated.\n const proxy = new Proxy(Object.create(null) as Record<string, unknown>, {\n has(_, key: string) { return key in scope.getters; },\n get(_, key: string) {\n // Defense-in-depth: block dangerous property access even if\n // findBlockedMethod missed a bypass (e.g. computed bracket names)\n if (UNSAFE_METHOD_NAMES.has(key)) return undefined;\n const g = scope.getters[key];\n return g ? g() : undefined;\n },\n });\n const unsafe = () => fn(proxy);\n cache.set(cleaned, unsafe);\n return unsafe;\n } catch {\n reportDiagnostic('expression-unsupported', cleaned, 'Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.');\n const failed = () => undefined;\n cache.set(cleaned, failed);\n return failed;\n }\n}\n\n// ── CSP-safe handler parser ──\n\n/**\n * Parse common handler patterns without `new Function()`.\n * Returns null if the expression is too complex for the CSP-safe parser.\n */\nfunction parseHandler(expr: string, scope: Scope): ((e: Event) => void) | null {\n const normalized = expr.trim().replace(/;+$/g, '').trim();\n if (!normalized) return null;\n\n const ifHandler = parseIfHandler(normalized, scope);\n if (ifHandler) return ifHandler;\n\n const stmts = splitTopLevelStatements(normalized);\n if (stmts.length > 1) {\n const handlers = stmts.map(s => parseHandler(s, scope));\n if (handlers.every(h => h !== null)) {\n return (e: Event) => {\n batch(() => {\n for (const h of handlers) h!(e);\n });\n };\n }\n return null;\n }\n\n const single = stmts[0] ?? normalized;\n\n // count++ or count--\n const incrMatch = single.match(RE_POST_INCR);\n if (incrMatch) {\n const name = incrMatch[1]!;\n const op = incrMatch[2]!;\n return () => {\n batch(() => {\n const val = scope.getters[name]?.() as number ?? 0;\n scope.setters[name]?.(op === '++' ? val + 1 : val - 1);\n });\n };\n }\n\n // ++count or --count\n const preIncrMatch = single.match(RE_PRE_INCR);\n if (preIncrMatch) {\n const op = preIncrMatch[1]!;\n const name = preIncrMatch[2]!;\n return () => {\n batch(() => {\n const val = scope.getters[name]?.() as number ?? 0;\n scope.setters[name]?.(op === '++' ? val + 1 : val - 1);\n });\n };\n }\n\n // prop = !prop (toggle)\n const toggleMatch = single.match(RE_TOGGLE);\n if (toggleMatch && toggleMatch[1] === toggleMatch[2]) {\n const name = toggleMatch[1]!;\n return () => {\n batch(() => {\n scope.setters[name]?.(!scope.getters[name]?.());\n });\n };\n }\n\n // prop = expr (simple assignment)\n const assignMatch = single.match(RE_ASSIGN);\n if (assignMatch) {\n const name = assignMatch[1]!;\n const valExpr = parseExpression(assignMatch[2]!.trim(), scope);\n if (valExpr) {\n if (_debug) dbg(`parseHandler: assignment \"${name} = ...\" — setter exists:`, !!scope.setters[name], ', getter exists:', !!scope.getters[name]);\n return () => {\n batch(() => {\n const val = valExpr();\n if (_debug) dbg(`SETTER: ${name} = ${val} (was: ${scope.getters[name]?.()})`);\n scope.setters[name]?.(val);\n });\n };\n }\n }\n\n // prop += value, prop -= value, prop *= value, prop /= value\n const compoundMatch = single.match(RE_COMPOUND);\n if (compoundMatch) {\n const name = compoundMatch[1]!;\n const op = compoundMatch[2]!;\n const valExpr = parseExpression(compoundMatch[3]!.trim(), scope);\n if (valExpr) {\n return () => {\n batch(() => {\n const current = scope.getters[name]?.() as number ?? 0;\n const val = valExpr() as number;\n switch (op) {\n case '+=': scope.setters[name]?.(current + val); break;\n case '-=': scope.setters[name]?.(current - val); break;\n case '*=': scope.setters[name]?.(current * val); break;\n case '/=': scope.setters[name]?.(current / val); break;\n }\n });\n };\n }\n }\n\n // $refetch('id') — imperative data-fetch trigger (CSP-safe)\n const refetchMatch = single.match(RE_REFETCH_CALL);\n if (refetchMatch) {\n const fetchId = refetchMatch[1]!;\n return () => $refetch(fetchId);\n }\n\n return null;\n}\n\nfunction buildHandler(expr: string, scope: Scope): HandlerBuildResult {\n // Strip balanced outer braces (e.g., `{count++}` → `count++`) but NOT\n // unbalanced ones like `if (x) { a = b }` where the `}` is a code-block close.\n let cleaned = expr.trim();\n if (cleaned.startsWith('{')) {\n const seg = readBalancedSegment(cleaned, 0, '{', '}');\n if (seg && seg.end === cleaned.length - 1) {\n cleaned = seg.inner.trim();\n }\n }\n const cache = getScopeCache(scopeHandlerCache, scope);\n const cached = cache.get(cleaned);\n if (cached) return cached;\n\n // Try CSP-safe parsing first\n const cspFn = parseHandler(cleaned, scope);\n if (cspFn) {\n const result: HandlerBuildResult = { handler: cspFn, supported: true };\n cache.set(cleaned, result);\n return result;\n }\n\n // Fallback to Function constructor (for complex expressions)\n // __EVAL_CAPABLE__ gate ensures hardened build eliminates this entire block.\n if (!__EVAL_CAPABLE__ || !_allowUnsafeEval) {\n dbg('buildHandler: blocked unsafe eval fallback for expression:', cleaned);\n reportDiagnostic('handler-unsupported', cleaned, cspExpressionHint(cleaned));\n const result: HandlerBuildResult = {\n handler: () => {},\n supported: false,\n };\n cache.set(cleaned, result);\n return result;\n }\n\n // Apply UNSAFE_METHOD_NAMES blocklist before new Function — prevents\n // prototype-pollution and eval injection via the unsafe eval path.\n const blockedMethod = findBlockedMethod(cleaned);\n if (blockedMethod) {\n const msg = `Blocked unsafe method \"${blockedMethod}\" in handler`;\n reportDiagnostic('handler-unsupported', cleaned, msg);\n throw new Error(`[FormaJS] ${msg}: ${cleaned}`);\n }\n\n try {\n // Accept both `$event` and bare `event` — Claude sometimes generates either.\n const fn = new Function('__scope', '$event', 'event', `with(__scope) { ${cleaned} }`);\n // Cache proxy — scope.getters/setters are mutable objects, so the proxy\n // always reflects current state without needing to be recreated.\n const proxy = new Proxy(Object.create(null) as Record<string, unknown>, {\n has(_, key: string) {\n // Do NOT intercept '$event' or 'event' — let them fall through to\n // function parameters so $event.key, event.stopPropagation(), etc. work.\n if (key === '$event' || key === 'event') return false;\n return key in scope.getters || key in scope.setters;\n },\n get(_, key: string) {\n // Defense-in-depth: block dangerous property access\n if (UNSAFE_METHOD_NAMES.has(key)) return undefined;\n const g = scope.getters[key];\n return g ? g() : undefined;\n },\n set(_, key: string, value: unknown) {\n const s = scope.setters[key];\n if (s) s(value);\n return true;\n },\n });\n const unsafeHandler = (e: Event) => {\n batch(() => fn(proxy, e, e));\n };\n const result: HandlerBuildResult = {\n handler: unsafeHandler,\n supported: true,\n };\n cache.set(cleaned, result);\n return result;\n } catch {\n reportDiagnostic('handler-unsupported', cleaned, 'Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.');\n const result: HandlerBuildResult = {\n handler: () => {},\n supported: false,\n };\n cache.set(cleaned, result);\n return result;\n }\n}\n\n// ── State initialization ──\n\nconst FORBIDDEN_STATE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nfunction parseState(raw: string): Record<string, unknown> {\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw);\n } catch {\n if (_debug) {\n dbg('parseState: Invalid JSON in data-forma-state — use valid JSON with quoted keys. Got:', raw.slice(0, 200));\n }\n return {};\n }\n // Strip prototype-pollution keys\n for (const key of FORBIDDEN_STATE_KEYS) {\n if (key in parsed) delete parsed[key];\n }\n return parsed;\n}\n\n// ── DOM scanner ──\n\nfunction initScope(stateEl: Element): Scope {\n const raw = stateEl.getAttribute('data-forma-state') ?? '{}';\n const state = parseState(raw);\n const keys = Object.keys(state);\n if (_debug) {\n dbg('initScope: parsed', keys.length, 'keys:', keys.join(', '));\n if (keys.length === 0) {\n dbg('initScope: WARNING — empty state! Raw attribute:', raw.slice(0, 200));\n }\n }\n const getters: Record<string, Getter> = {};\n const setters: Record<string, Setter> = {};\n\n for (const [key, initial] of Object.entries(state)) {\n const [get, set] = createSignal(initial);\n getters[key] = get;\n setters[key] = set as Setter;\n }\n\n // Inject $refetch as a callable getter so handlers can use $refetch('id')\n getters['$refetch'] = () => $refetch;\n\n return { getters, setters };\n}\n\n// ── Safe $el proxy ──\n// Allowlist of properties exposed on the $el magic. Everything else\n// (ownerDocument, parentNode, innerHTML, …) returns undefined so that\n// attacker-authored expressions cannot escape to window/document.\n\nconst SAFE_EL_PROPS = new Set([\n // Identity & attributes\n 'id', 'className', 'tagName', 'nodeName',\n 'getAttribute', 'setAttribute', 'removeAttribute', 'hasAttribute', 'toggleAttribute',\n 'dataset', 'classList',\n // Content\n 'textContent', 'innerText',\n // Form elements\n 'value', 'checked', 'disabled', 'selected', 'type', 'name', 'placeholder',\n 'readOnly', 'required', 'min', 'max', 'step', 'pattern',\n // Dimensions & position\n 'getBoundingClientRect', 'offsetWidth', 'offsetHeight',\n 'offsetTop', 'offsetLeft', 'clientWidth', 'clientHeight',\n 'scrollWidth', 'scrollHeight', 'scrollTop', 'scrollLeft',\n // Style\n 'style', 'hidden',\n // Focus & interaction\n 'focus', 'blur', 'click', 'scrollIntoView', 'scrollTo',\n // Traversal (safe — returns elements, not window/document)\n 'closest', 'matches', 'querySelector', 'querySelectorAll',\n 'children', 'childElementCount', 'firstElementChild', 'lastElementChild',\n 'nextElementSibling', 'previousElementSibling',\n]);\n\nfunction createSafeElProxy(el: Element): Element {\n return new Proxy(el, {\n get(target, prop) {\n if (typeof prop === 'symbol') return Reflect.get(target, prop);\n if (!SAFE_EL_PROPS.has(prop)) return undefined;\n const val = Reflect.get(target, prop);\n return typeof val === 'function' ? val.bind(target) : val;\n },\n set(target, prop, value) {\n if (typeof prop === 'symbol') return false;\n if (!SAFE_EL_PROPS.has(prop)) return false;\n return Reflect.set(target, prop, value);\n },\n });\n}\n\nfunction bindElement(el: Element, scope: Scope, disposers: (() => void)[]): void {\n // Inject per-element magics: $el and $dispatch\n // Each element gets its own child scope so $el resolves to the correct element.\n const elMagics: Record<string, unknown> = {\n $el: createSafeElProxy(el),\n $dispatch: (name: string, detail?: unknown) => {\n el.dispatchEvent(new CustomEvent(name, {\n bubbles: true,\n composed: true, // crosses Shadow DOM boundaries (important for <forma-stage>)\n detail,\n }));\n },\n };\n scope = createChildScope(scope, elMagics);\n\n // When the server provides a directive map, we know exactly which directives\n // this element has. Skip getAttribute calls for directives it doesn't have.\n // `known` is null when no map is available (fallback: check everything).\n const known = getDirectives(el);\n\n // data-computed=\"name = expr\" or \"a = expr1; b = expr2\"\n const computedAttr = (!known || known.has('data-computed')) ? el.getAttribute('data-computed') : null;\n if (computedAttr) {\n // Split multi-statement computed: \"a = expr1; b = expr2; c = expr3\"\n // Uses lookahead to split at \"; identifier =\" boundaries without\n // breaking arrow functions (=>) or comparisons (===, ==).\n const parts = computedAttr.split(/;\\s*(?=\\w+\\s*=[^=])/);\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const match = trimmed.match(RE_COMPUTED);\n if (match) {\n const name = match[1]!;\n const expr = match[2]!;\n // Remove the computed name from getters before building evaluator\n // to prevent self-referential cycle (computed reading itself)\n const prevGetter = scope.getters[name];\n delete scope.getters[name];\n const evaluate = buildEvaluator(`{${expr}}`, scope);\n const getter = createComputed(evaluate);\n scope.getters[name] = getter;\n // Keep the original setter so manual overrides still work\n if (!prevGetter) {\n // If there was no initial state entry, remove the setter too\n delete scope.setters[name];\n }\n }\n }\n }\n\n // data-text=\"{expr}\"\n const textExpr = (!known || known.has('data-text')) ? el.getAttribute('data-text') : null;\n if (textExpr) {\n const evaluate = buildEvaluator(textExpr, scope);\n const dispose = internalEffect(() => {\n setElementTextFast(el, toTextValue(evaluate()));\n });\n disposers.push(dispose);\n }\n\n // data-show=\"{expr}\"\n const showExpr = (!known || known.has('data-show')) ? el.getAttribute('data-show') : null;\n if (showExpr) {\n const evaluate = buildEvaluator(showExpr, scope);\n const transition = parseTransitionSpec(el);\n if (_debug) {\n const tag = el.tagName.toLowerCase();\n const cls = el.className ? `.${String(el.className).split(' ')[0]}` : '';\n dbg(`bindElement: data-show=\"${showExpr}\" on <${tag}${cls}>`);\n }\n let initialized = false;\n const dispose = internalEffect(() => {\n const visible = !!evaluate();\n if (_debug) dbg(`data-show effect: \"${showExpr}\" → ${visible}`);\n applyShowVisibility(el as HTMLElement, visible, transition, !initialized);\n initialized = true;\n });\n disposers.push(dispose);\n if (transition) {\n disposers.push(() => clearTransitionState(el as HTMLElement));\n }\n }\n\n // data-if=\"{expr}\" — conditional DOM insertion/removal with optional transitions\n const ifExpr = (!known || known.has('data-if')) ? el.getAttribute('data-if') : null;\n if (ifExpr) {\n const evaluate = buildEvaluator(ifExpr, scope);\n const transition = parseTransitionSpec(el);\n const placeholder = document.createComment('forma-if');\n const parent = el.parentNode;\n let inserted = true;\n let initialized = false;\n\n const dispose = internalEffect(() => {\n const show = !!evaluate();\n\n if (show && !inserted) {\n // Cancel any in-flight leave\n clearTransitionState(el as HTMLElement);\n el.removeAttribute('data-forma-leaving');\n if (initialized && transition) {\n transitionInsert(el as HTMLElement, parent!, placeholder, transition);\n } else {\n parent?.insertBefore(el, placeholder);\n }\n inserted = true;\n } else if (!show && inserted) {\n if (initialized && transition) {\n transitionRemove(el as HTMLElement, transition, () => {\n if (el.parentNode) {\n parent?.insertBefore(placeholder, el);\n el.remove();\n }\n });\n } else {\n parent?.insertBefore(placeholder, el);\n el.remove();\n }\n inserted = false;\n }\n initialized = true;\n });\n\n disposers.push(dispose);\n if (transition) {\n disposers.push(() => clearTransitionState(el as HTMLElement));\n }\n }\n\n // data-model=\"{prop}\"\n const modelExpr = (!known || known.has('data-model')) ? el.getAttribute('data-model') : null;\n if (modelExpr) {\n const prop = modelExpr.replace(RE_STRIP_BRACES, '').trim();\n const getter = scope.getters[prop];\n const setter = scope.setters[prop];\n if (getter && setter) {\n const input = el as HTMLInputElement;\n const dispose = internalEffect(() => {\n const val = getter();\n if (input.type === 'checkbox') {\n input.checked = !!val;\n } else {\n input.value = String(val ?? '');\n }\n });\n disposers.push(dispose);\n const event = input.type === 'checkbox' ? 'change' : 'input';\n const onModelInput = () => {\n if (input.type === 'checkbox') {\n setter(input.checked);\n } else if (input.type === 'number' || input.type === 'range') {\n setter(Number(input.value));\n } else {\n setter(input.value);\n }\n };\n input.addEventListener(event, onModelInput);\n disposers.push(() => {\n input.removeEventListener(event, onModelInput);\n });\n }\n }\n\n // Single-pass over attributes for data-on:*, data-class:*, data-bind:*\n // When directive map is available, skip the loop entirely if none of these are present.\n const hasColonDirectives = !known || hasAnyPrefix(known, 'data-on:', 'data-class:', 'data-bind:');\n const attrs = el.attributes;\n if (hasColonDirectives) for (let i = 0; i < attrs.length; i++) {\n const attr = attrs[i]!;\n const name = attr.name;\n\n if (name.startsWith('data-on:')) {\n const event = name.slice(8); // 'data-on:'.length === 8\n const built = buildHandler(attr.value, scope);\n const handler = built.handler;\n if (_debug) {\n const tag = el.tagName.toLowerCase();\n const id = el.id ? `#${el.id}` : '';\n const cls = el.className ? `.${String(el.className).split(' ')[0]}` : '';\n dbg(`bindElement: data-on:${event}=\"${attr.value}\" on <${tag}${id}${cls}>`);\n }\n if (!built.supported) {\n el.setAttribute('data-forma-handler-error', 'unsupported');\n } else if (el.hasAttribute('data-forma-handler-error')) {\n el.removeAttribute('data-forma-handler-error');\n }\n if (_debug) {\n const attrVal = attr.value;\n const tracedHandler = (e: Event) => {\n dbg(`HANDLER FIRED: data-on:${event}=\"${attrVal}\"`, 'isTrusted:', e.isTrusted);\n handler(e);\n };\n el.addEventListener(event, tracedHandler);\n disposers.push(() => { el.removeEventListener(event, tracedHandler); });\n } else {\n el.addEventListener(event, handler);\n disposers.push(() => { el.removeEventListener(event, handler); });\n }\n } else if (name.startsWith('data-class:')) {\n const cls = name.slice(11); // 'data-class:'.length === 11\n const evaluate = buildEvaluator(attr.value, scope);\n const dispose = internalEffect(() => {\n el.classList.toggle(cls, !!evaluate());\n });\n disposers.push(dispose);\n } else if (name.startsWith('data-bind:')) {\n const attrName = name.slice(10); // 'data-bind:'.length === 10\n const evaluate = buildEvaluator(attr.value, scope);\n const dispose = internalEffect(() => {\n const val = evaluate();\n if (val == null || val === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, String(val));\n }\n });\n disposers.push(dispose);\n }\n }\n\n // data-persist=\"{prop}\"\n const persistExpr = (!known || known.has('data-persist')) ? el.getAttribute('data-persist') : null;\n if (persistExpr) {\n const prop = persistExpr.replace(RE_STRIP_BRACES, '').trim();\n const getter = scope.getters[prop];\n const setter = scope.setters[prop];\n if (getter && setter) {\n const key = 'forma:' + prop;\n try {\n const saved = localStorage.getItem(key);\n if (saved !== null) setter(JSON.parse(saved));\n } catch { /* ignore parse errors */ }\n const dispose = internalEffect(() => {\n try { localStorage.setItem(key, JSON.stringify(getter())); } catch { /* quota */ }\n });\n disposers.push(dispose);\n }\n }\n\n // data-list=\"{expr}\" — keyed reconciliation with LIS\n const listExpr = (!known || known.has('data-list')) ? el.getAttribute('data-list') : null;\n if (listExpr) {\n const evaluate = buildEvaluator(listExpr, scope);\n const templateEl = el.children[0] as Element | undefined;\n if (templateEl) {\n const template = templateEl.cloneNode(true) as Element;\n // Remove original template from DOM\n el.removeChild(templateEl);\n\n // Detect key attribute: data-key=\"{item.id}\" -> extracts \"id\"\n const keyAttr = template.getAttribute('data-key');\n const keyProp = keyAttr\n ? keyAttr.replace(RE_STRIP_ITEM_BRACES, '').trim()\n : null;\n\n // Parse transition spec from the list container element\n const listTransition = parseTransitionSpec(el);\n\n let oldItems: unknown[] = [];\n let oldNodes: Node[] = [];\n\n // For index-based keying (no data-key), we wrap items in objects\n // that carry their index so the keyFn can extract it without a\n // second argument. For property-based keying, items pass through raw.\n interface IndexWrapped { __idx: number; __item: unknown }\n\n /** Dispose all bindings stored on a clone element */\n function disposeCloneBindings(node: Node): void {\n const el = node as any;\n if (Array.isArray(el.__formaDisposers)) {\n for (const d of el.__formaDisposers) {\n try { d(); } catch { /* ensure all disposers run */ }\n }\n delete el.__formaDisposers;\n }\n }\n\n /** Clone template, bind directives via child scope */\n function createBoundClone(item: unknown, index: number): Element {\n const clone = cloneWithTemplateData(template, item);\n const childScope = createChildScope(scope, { item, index });\n const itemDisposers: (() => void)[] = [];\n bindElement(clone, childScope, itemDisposers);\n for (const desc of Array.from(clone.querySelectorAll('*'))) {\n bindElement(desc, childScope, itemDisposers);\n }\n (clone as any).__formaDisposers = itemDisposers;\n return clone;\n }\n\n /** Dispose old bindings and rebind with fresh data */\n function updateBoundClone(node: Node, item: unknown, index: number): void {\n disposeCloneBindings(node);\n updateTemplateData(node as Element, item);\n const childScope = createChildScope(scope, { item, index });\n const itemDisposers: (() => void)[] = [];\n bindElement(node as Element, childScope, itemDisposers);\n for (const desc of Array.from((node as Element).querySelectorAll('*'))) {\n bindElement(desc, childScope, itemDisposers);\n }\n (node as any).__formaDisposers = itemDisposers;\n }\n\n // Build transition hooks for reconcileList (only when transition attrs present)\n const listHooks: ListTransitionHooks | undefined = listTransition ? {\n onInsert: (node: Node) => {\n const htmlEl = node as HTMLElement;\n if (!htmlEl.setAttribute) return; // text node guard\n const state = getTransitionState(htmlEl);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n state.cancel = runTransitionPhase(\n htmlEl,\n {\n base: listTransition.enter,\n from: listTransition.enterFrom,\n to: listTransition.enterTo,\n durationMs: listTransition.enterDurationMs,\n },\n () => {\n const current = getTransitionState(htmlEl);\n if (current.token === token) current.cancel = null;\n },\n );\n },\n onBeforeRemove: (node: Node, done: () => void) => {\n const htmlEl = node as HTMLElement;\n if (!htmlEl.setAttribute) { done(); return; } // text node guard\n disposeCloneBindings(node);\n transitionRemove(htmlEl, listTransition, () => {\n done();\n });\n },\n } : undefined;\n\n const dispose = internalEffect(() => {\n const rawItems = evaluate();\n if (!Array.isArray(rawItems)) {\n // Remove all — dispose bindings first\n for (const n of oldNodes) {\n disposeCloneBindings(n);\n el.removeChild(n);\n }\n oldItems = [];\n oldNodes = [];\n return;\n }\n\n // Cancel any in-flight leave animations before reconciliation\n if (listTransition) {\n const leavingNodes = el.querySelectorAll('[data-forma-leaving]');\n for (const ln of Array.from(leavingNodes)) {\n clearTransitionState(ln as HTMLElement);\n ln.removeAttribute('data-forma-leaving');\n if (ln.parentNode) ln.parentNode.removeChild(ln);\n }\n }\n\n // Snapshot old nodes before reconciliation to detect removals\n const prevNodes = new Set(oldNodes);\n\n if (keyProp) {\n // ── Property-based keying ──\n const result = reconcileList(\n el,\n oldItems,\n rawItems,\n oldNodes,\n (item: unknown) => String((item as Record<string, unknown>)?.[keyProp] ?? ''),\n (item: unknown) => {\n const idx = rawItems.indexOf(item);\n return createBoundClone(item, idx);\n },\n (node: Node, item: unknown) => {\n const idx = rawItems.indexOf(item);\n updateBoundClone(node, item, idx);\n },\n undefined, // beforeNode\n listHooks,\n );\n // Dispose bindings on nodes that were removed by reconcileList\n const nextNodes = new Set(result.nodes);\n for (const n of prevNodes) {\n if (!nextNodes.has(n)) {\n // Skip nodes mid-leave — onBeforeRemove already disposed them\n if ((n as Element).hasAttribute?.('data-forma-leaving')) continue;\n disposeCloneBindings(n);\n }\n }\n oldItems = result.items;\n oldNodes = result.nodes;\n } else {\n // ── Index-based keying ──\n // Wrap items so each carries its index as the key.\n const wrapped: IndexWrapped[] = rawItems.map((item, i) => ({ __idx: i, __item: item }));\n const oldWrapped = oldItems as IndexWrapped[];\n\n const result = reconcileList<IndexWrapped>(\n el,\n oldWrapped,\n wrapped,\n oldNodes,\n (w: IndexWrapped) => w.__idx,\n (w: IndexWrapped) => createBoundClone(w.__item, w.__idx),\n (node: Node, w: IndexWrapped) => updateBoundClone(node, w.__item, w.__idx),\n undefined, // beforeNode\n listHooks,\n );\n // Dispose bindings on nodes that were removed by reconcileList\n const nextNodes = new Set(result.nodes);\n for (const n of prevNodes) {\n if (!nextNodes.has(n)) {\n // Skip nodes mid-leave — onBeforeRemove already disposed them\n if ((n as Element).hasAttribute?.('data-forma-leaving')) continue;\n disposeCloneBindings(n);\n }\n }\n oldItems = result.items;\n oldNodes = result.nodes;\n }\n });\n disposers.push(dispose);\n }\n }\n\n // data-fetch=\"[METHOD] url → prop [|loading:prop] [|error:prop] [|poll:ms]\"\n const fetchExpr = (!known || known.has('data-fetch')) ? el.getAttribute('data-fetch') : null;\n if (fetchExpr) {\n const arrowMatch = fetchExpr.match(RE_FETCH);\n if (arrowMatch) {\n const urlPart = arrowMatch[1]!.trim();\n const target = arrowMatch[2]!.trim();\n const modifiers = arrowMatch[3]?.trim() ?? '';\n\n let method = 'GET';\n let url = urlPart;\n const methodMatch = urlPart.match(RE_FETCH_METHOD);\n if (methodMatch) {\n method = methodMatch[1]!.toUpperCase();\n url = methodMatch[2]!.trim();\n }\n\n let loadingTarget: string | undefined;\n let errorTarget: string | undefined;\n let interval: number | undefined;\n for (const mod of modifiers.split('|').filter(Boolean)) {\n const [k, v] = mod.split(':').map(s => s.trim());\n if (k === 'loading') loadingTarget = v;\n else if (k === 'error') errorTarget = v;\n else if (k === 'poll') interval = parseInt(v ?? '0', 10);\n }\n\n // Create signals for target, loading, and error\n const [getTarget, setTarget] = createSignal<unknown>(null);\n scope.getters[target] = getTarget;\n scope.setters[target] = setTarget as Setter;\n if (loadingTarget) {\n const [gl, sl] = createSignal(false);\n scope.getters[loadingTarget] = gl;\n scope.setters[loadingTarget] = sl as Setter;\n }\n if (errorTarget) {\n const [ge, se] = createSignal<unknown>(null);\n scope.getters[errorTarget] = ge;\n scope.setters[errorTarget] = se as Setter;\n }\n\n const doFetch = () => {\n if (loadingTarget) scope.setters[loadingTarget]!(true);\n fetch(url, { method })\n .then(r => r.json())\n .then(data => {\n setTarget(data);\n if (loadingTarget) scope.setters[loadingTarget]!(false);\n })\n .catch(err => {\n if (errorTarget) scope.setters[errorTarget]!(err.message);\n if (loadingTarget) scope.setters[loadingTarget]!(false);\n });\n };\n\n // Register in $refetch registry if data-fetch-id is present\n const fetchId = el.getAttribute('data-fetch-id');\n if (fetchId) {\n _refetchRegistry.set(fetchId, doFetch);\n disposers.push(() => _refetchRegistry.delete(fetchId));\n }\n\n doFetch();\n if (interval && interval > 0) {\n const id = setInterval(doFetch, interval);\n disposers.push(() => clearInterval(id));\n }\n }\n }\n}\n\n// ── Scope mounting / unmounting (single data-forma-state element) ──\n\n/**\n * Mount a single `data-forma-state` element — creates signals, binds\n * all descendants, stores disposers on the element for cleanup.\n * Idempotent: skips elements that are already mounted.\n */\n/** CSS selector matching elements with at least one Forma directive.\n * Avoids scanning every descendant — only visits directive-bearing elements. */\nconst DIRECTIVE_SELECTOR = [\n '[data-text]', '[data-show]', '[data-if]', '[data-model]',\n '[data-computed]', '[data-persist]', '[data-list]', '[data-fetch]',\n '[data-bind\\\\:*]', '[data-class\\\\:*]', '[data-on\\\\:*]',\n // Catch-all for colon-prefixed data attrs that the escaped selectors miss in some engines\n '[data-transition]',\n].join(',');\n\n/** Fast check: does this element have any Forma directive attribute? */\nfunction hasDirective(el: Element): boolean {\n const attrs = el.attributes;\n for (let i = 0; i < attrs.length; i++) {\n const name = attrs[i]!.name;\n if (name.startsWith('data-text') || name.startsWith('data-show') ||\n name.startsWith('data-if') || name.startsWith('data-model') ||\n name.startsWith('data-computed') || name.startsWith('data-persist') ||\n name.startsWith('data-list') || name.startsWith('data-fetch') ||\n name.startsWith('data-on:') || name.startsWith('data-class:') ||\n name.startsWith('data-bind:') || name.startsWith('data-transition')) {\n return true;\n }\n }\n return false;\n}\n\n// ── Pre-compiled Directive Map ──\n//\n// When the server sends a directive_map sidecar (data-forma-id → directive names),\n// the runtime uses it in two ways:\n//\n// 1. mountScope(): targeted CSS selector queries only directive-bearing elements\n// instead of querySelectorAll('*') + attribute scan on every descendant.\n//\n// 2. bindElement(): skips getAttribute calls for directives the element doesn't\n// have, avoiding unnecessary work for elements with only 1-2 directives.\n\n/** Full map: data-forma-id → Set of directive attribute names. */\nlet _directiveMap: Map<string, Set<string>> | null = null;\n\n/**\n * Load a pre-compiled directive map from the server.\n * Keys are data-forma-id values, values are arrays of directive attribute names.\n */\nfunction setDirectiveMap(map: Record<string, string[]> | null): void {\n if (!map || Object.keys(map).length === 0) {\n _directiveMap = null;\n return;\n }\n _directiveMap = new Map();\n for (const id in map) {\n _directiveMap.set(id, new Set(map[id]!));\n }\n}\n\n/**\n * Build a CSS selector that targets only elements with known directives.\n * Returns null when the map has too many entries (selector would be huge)\n * or when no map is available.\n */\nfunction buildDirectiveSelector(): string | null {\n if (!_directiveMap || _directiveMap.size === 0) return null;\n // Cap at 200 IDs to avoid pathologically long selectors.\n // Above that, querySelectorAll('*') + Set check is likely faster.\n if (_directiveMap.size > 200) return null;\n const parts: string[] = [];\n for (const id of _directiveMap.keys()) {\n parts.push(`[data-forma-id=\"${id}\"]`);\n }\n return parts.join(',');\n}\n\n/** Get the directive set for an element, or null if unknown. */\nfunction getDirectives(el: Element): Set<string> | null {\n if (!_directiveMap) return null;\n const id = el.getAttribute('data-forma-id');\n if (!id) return null;\n return _directiveMap.get(id) ?? null;\n}\n\n/** Check if any entry in a Set starts with one of the given prefixes. */\nfunction hasAnyPrefix(set: Set<string>, ...prefixes: string[]): boolean {\n for (const entry of set) {\n for (const prefix of prefixes) {\n if (entry.startsWith(prefix)) return true;\n }\n }\n return false;\n}\n\nfunction mountScope(root: Element): void {\n // Idempotency guard — never double-bind\n if ((root as any).__formaDisposers) {\n if (_debug) dbg('mountScope: SKIPPED (already mounted)');\n return;\n }\n\n const scope = initScope(root);\n const disposers: (() => void)[] = [];\n\n // Build $refs — a lazy proxy that resolves data-ref=\"name\" to elements.\n // Scanned once at mount time; the proxy resolves lazily on access.\n const refsMap = new Map<string, Element>();\n const refEls = root.querySelectorAll('[data-ref]');\n for (let i = 0; i < refEls.length; i++) {\n const el = refEls[i]!;\n const name = el.getAttribute('data-ref');\n if (name) refsMap.set(name, el);\n }\n // Also check the root itself\n const rootRefName = root.getAttribute('data-ref');\n if (rootRefName) refsMap.set(rootRefName, root);\n\n scope.getters['$refs'] = () => new Proxy({} as Record<string, Element>, {\n get(_, name: string) {\n return refsMap.get(name) ?? undefined;\n },\n has(_, name: string) {\n return refsMap.has(name);\n },\n });\n\n // Bind the root itself\n bindElement(root, scope, disposers);\n\n // Bind only directive-bearing descendants (skip inert elements).\n // When the server provides a directive map, we build a targeted CSS selector\n // that queries only elements with known directives — no querySelectorAll('*').\n let boundCount = 0;\n const selector = buildDirectiveSelector();\n if (selector) {\n // Fast path: query only elements the server told us have directives\n const targets = root.querySelectorAll(selector);\n for (let i = 0; i < targets.length; i++) {\n bindElement(targets[i]!, scope, disposers);\n boundCount++;\n }\n } else {\n // Fallback: scan all descendants and check attributes\n const descendants = root.querySelectorAll('*');\n for (let i = 0; i < descendants.length; i++) {\n const el = descendants[i]!;\n if (hasDirective(el)) {\n bindElement(el, scope, disposers);\n boundCount++;\n }\n }\n }\n\n // Store disposers on the root element for cleanup\n (root as any).__formaDisposers = disposers;\n // Expose scope for devtools (State Inspector panel)\n (root as any).__formaScope = scope;\n (root as any).__formaInitialState = root.getAttribute('data-forma-state') ?? '{}';\n if (_debug) dbg('mountScope: DONE —', boundCount, 'elements bound,', disposers.length, 'disposers', selector ? '(targeted)' : '(full scan)');\n}\n\n/**\n * Unmount a single `data-forma-state` element — disposes all effects,\n * intervals, and event listeners. Safe to call on already-unmounted elements.\n */\nfunction unmountScope(root: Element): void {\n const disposers = (root as any).__formaDisposers as (() => void)[] | undefined;\n if (disposers) {\n for (const d of disposers) {\n try { d(); } catch { /* ensure all disposers run */ }\n }\n delete (root as any).__formaDisposers;\n delete (root as any).__formaScope;\n delete (root as any).__formaInitialState;\n }\n}\n\n// ── MutationObserver — auto-discovery of new data-forma-state elements ──\n//\n// Cost: O(addedNodes) per mutation batch. Never re-scans the whole document.\n// The observer only fires for childList mutations (nodes added/removed) and\n// attribute mutations on the `data-forma-state` attribute specifically.\n\nlet _observer: MutationObserver | null = null;\nconst ELEMENT_NODE = 1;\nconst MUTATION_CHUNK_SIZE = 40;\nlet _pendingMutations: MutationRecord[] = [];\nlet _drainingMutations = false;\n\nfunction processMutation(mutation: MutationRecord): void {\n // ── Removed nodes: clean up disposers to prevent memory leaks ──\n for (let i = 0; i < mutation.removedNodes.length; i++) {\n const node = mutation.removedNodes[i]!;\n if (node.nodeType !== ELEMENT_NODE) continue;\n const el = node as Element;\n if (el.hasAttribute('data-forma-state')) {\n if (_debug) dbg('MutationObserver: REMOVED scope');\n unmountScope(el);\n }\n const removed = el.querySelectorAll('[data-forma-state]');\n for (let j = 0; j < removed.length; j++) {\n unmountScope(removed[j]!);\n }\n }\n\n // ── Added nodes: auto-mount new scopes ──\n for (let i = 0; i < mutation.addedNodes.length; i++) {\n const node = mutation.addedNodes[i]!;\n if (node.nodeType !== ELEMENT_NODE) continue;\n const el = node as Element;\n if (el.closest('[data-forma-leaving]')) continue;\n if (el.hasAttribute('data-forma-state')) {\n if (_debug) dbg('MutationObserver: ADDED scope via mutation');\n mountScope(el);\n }\n const added = el.querySelectorAll('[data-forma-state]');\n if (_debug && added.length > 0) {\n dbg('MutationObserver: found', added.length, 'nested scope(s) in added subtree');\n }\n for (let j = 0; j < added.length; j++) {\n const desc = added[j]!;\n if (desc.closest('[data-forma-leaving]')) continue;\n mountScope(desc);\n }\n }\n\n // ── Attribute change: data-forma-state added/removed/changed ──\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-forma-state') {\n const target = mutation.target as Element;\n // Always unmount first (cleans up old bindings)\n unmountScope(target);\n // Re-mount if the attribute still exists (value may have changed)\n if (target.hasAttribute('data-forma-state')) {\n mountScope(target);\n }\n }\n}\n\nasync function drainMutationQueue(): Promise<void> {\n try {\n while (_pendingMutations.length > 0) {\n const batch = _pendingMutations.splice(0, MUTATION_CHUNK_SIZE);\n for (let i = 0; i < batch.length; i++) {\n processMutation(batch[i]!);\n }\n if (_pendingMutations.length > 0) {\n await yieldToMain();\n }\n }\n } finally {\n _drainingMutations = false;\n // Handle races where new mutations were queued after the while-check.\n if (_pendingMutations.length > 0 && !_drainingMutations) {\n _drainingMutations = true;\n void drainMutationQueue();\n }\n }\n}\n\nfunction handleMutations(mutations: MutationRecord[]): void {\n if (_debug) dbg('MutationObserver: queued', mutations.length, 'mutation(s)');\n _pendingMutations.push(...mutations);\n if (_drainingMutations) return;\n _drainingMutations = true;\n void drainMutationQueue();\n}\n\nfunction startObserver(): void {\n if (_observer) return;\n _observer = new MutationObserver(handleMutations);\n const target = document.body || document.documentElement;\n if (target) {\n _observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-forma-state'],\n });\n }\n}\n\nfunction stopObserver(): void {\n if (_observer) {\n _observer.disconnect();\n _observer = null;\n }\n}\n\n// ── Main init ──\n\nfunction initRuntime(): void {\n if (_autoContainment) {\n applyContainmentHints(document, { skipIfAlreadySet: true });\n }\n const stateRoots = document.querySelectorAll('[data-forma-state]');\n if (_debug) dbg('initRuntime: found', stateRoots.length, 'scope(s)');\n for (const root of Array.from(stateRoots)) {\n mountScope(root);\n }\n // Start auto-discovery after initial scan\n startObserver();\n if (_debug) dbg('initRuntime: MutationObserver started');\n}\n\n/** Dispose all FormaJS scopes — clears effects, intervals, event listeners, and stops the observer. */\nfunction destroyRuntime(): void {\n stopObserver();\n const stateRoots = document.querySelectorAll('[data-forma-state]');\n for (const root of Array.from(stateRoots)) {\n unmountScope(root);\n }\n}\n\n/**\n * Mount a specific element or subtree — scans for `data-forma-state`\n * elements and initializes their reactive bindings.\n *\n * Use this for manual control when injecting HTML dynamically.\n * With the MutationObserver active, this is usually not needed.\n *\n * @param el - The root element to scan (checks itself and all descendants).\n */\nfunction mount(el: Element): void {\n if (el.hasAttribute('data-forma-state')) {\n mountScope(el);\n }\n const descendants = el.querySelectorAll('[data-forma-state]');\n for (const desc of Array.from(descendants)) {\n mountScope(desc);\n }\n}\n\n/**\n * Unmount a specific element or subtree — disposes all reactive bindings\n * for `data-forma-state` elements within.\n *\n * @param el - The root element to clean up (checks itself and all descendants).\n */\nfunction unmount(el: Element): void {\n if (el.hasAttribute('data-forma-state')) {\n unmountScope(el);\n }\n const descendants = el.querySelectorAll('[data-forma-state]');\n for (const desc of Array.from(descendants)) {\n unmountScope(desc);\n }\n}\n\n// Auto-init in browser contexts on DOMContentLoaded (or immediately if already loaded).\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initRuntime);\n } else {\n initRuntime();\n }\n}\n\n/** Enable/disable debug logging. Also toggleable via window.__FORMA_DEBUG = true */\nfunction setDebug(on: boolean): void { _debug = on; }\n/** Set unsafe-eval mode. `locked-off` is hardened and non-toggleable via setUnsafeEval. */\nfunction setUnsafeEvalMode(mode: UnsafeEvalMode): void {\n if (_unsafeEvalMode === mode) return;\n _unsafeEvalMode = mode;\n if (mode === 'locked-off') _allowUnsafeEval = false;\n if (mode === 'locked-on') _allowUnsafeEval = true;\n if (mode === 'mutable') _allowUnsafeEval = true;\n // Rebuild caches whenever policy changes.\n scopeExpressionCache = new WeakMap<Scope, Map<string, () => unknown>>();\n scopeHandlerCache = new WeakMap<Scope, Map<string, HandlerBuildResult>>();\n}\n/** Enable/disable unsafe `new Function` fallback for complex expressions. */\nfunction setUnsafeEval(on: boolean): void {\n if (_unsafeEvalMode !== 'mutable') {\n dbg(\n `setUnsafeEval ignored (mode=${_unsafeEvalMode}); unsafe fallback is locked`,\n );\n return;\n }\n if (_allowUnsafeEval === on) return;\n _allowUnsafeEval = on;\n // Rebuild handlers/evaluators after mode change so cached blocked results\n // don't persist when toggling trusted mode at runtime.\n scopeExpressionCache = new WeakMap<Scope, Map<string, () => unknown>>();\n scopeHandlerCache = new WeakMap<Scope, Map<string, HandlerBuildResult>>();\n}\n/** Get current unsafe-eval policy mode. */\nfunction getUnsafeEvalMode(): UnsafeEvalMode { return _unsafeEvalMode; }\n/** Enable/disable runtime diagnostics for unsupported expressions/handlers. */\nfunction setDiagnostics(on: boolean): void { _diagnosticsEnabled = on; }\n\n/** Runtime diagnostics captured while parsing/binding templates. */\nfunction getDiagnostics(): RuntimeDiagnostic[] {\n return Array.from(diagnostics.values()).map(d => ({ ...d }));\n}\n\n/** Clear runtime diagnostics collected so far. */\nfunction clearDiagnostics(): void {\n diagnostics.clear();\n}\n\n// ── DevTools API — State Inspector ──\n\ninterface ScopeDescriptor {\n element: Element;\n id: string;\n values: Record<string, { value: unknown; type: string }>;\n initialJSON: string;\n}\n\n/**\n * DevTools: enumerate all active scopes and their current signal values.\n * Only called when the State Inspector panel is open — zero overhead otherwise.\n */\nfunction getScopes(): ScopeDescriptor[] {\n const roots = document.querySelectorAll('[data-forma-state]');\n const result: ScopeDescriptor[] = [];\n\n for (const root of Array.from(roots)) {\n if (root.closest('[data-forma-leaving]')) continue;\n const scope = (root as any).__formaScope as Scope | undefined;\n const initialJSON = (root as any).__formaInitialState as string | undefined;\n if (!scope) continue;\n\n const values: Record<string, { value: unknown; type: string }> = {};\n for (const key of Object.keys(scope.getters)) {\n const val = scope.getters[key]!();\n values[key] = { value: val, type: typeof val };\n }\n\n result.push({\n element: root,\n id: root.getAttribute('data-forma-id') || root.id || root.tagName.toLowerCase(),\n values,\n initialJSON: initialJSON ?? '{}',\n });\n }\n return result;\n}\n\n/**\n * DevTools: set a state value on a specific scope element.\n * Triggers normal reactive effects (data-show, data-text, etc.).\n */\nfunction setScopeValue(element: Element, key: string, value: unknown): void {\n const scope = (element as any).__formaScope as Scope | undefined;\n if (!scope?.setters[key]) return;\n batch(() => { scope.setters[key]!(value); });\n}\n\n/**\n * DevTools: reset all values on a scope to their initial JSON state.\n */\nfunction resetScope(element: Element): void {\n const scope = (element as any).__formaScope as Scope | undefined;\n const initialJSON = (element as any).__formaInitialState as string | undefined;\n if (!scope || !initialJSON) return;\n\n const initial = parseState(initialJSON);\n batch(() => {\n for (const [key, val] of Object.entries(initial)) {\n scope.setters[key]?.(val);\n }\n });\n}\n\n// ── Reconciler ──\n\nlet _reconciler: ((container: Element, html: string) => void) | null = null;\n\nfunction getReconciler() {\n if (!_reconciler) {\n _reconciler = createReconciler({\n mountScope,\n unmountScope,\n disconnectObserver() {\n if (_observer) {\n _observer.disconnect();\n }\n },\n reconnectObserver() {\n if (_observer) {\n const target = document.body || document.documentElement;\n if (target) {\n _observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-forma-state'],\n });\n }\n }\n },\n batch,\n });\n }\n return _reconciler;\n}\n\n/** Reconcile a container's DOM against a new HTML string. */\nfunction reconcile(container: Element, html: string): void {\n getReconciler()(container, html);\n}\n\nexport {\n initRuntime,\n destroyRuntime,\n mount,\n unmount,\n reconcile,\n setDebug,\n setUnsafeEvalMode,\n getUnsafeEvalMode,\n setUnsafeEval,\n yieldToMain,\n applyContainmentHints,\n setDirectiveMap,\n setDiagnostics,\n getDiagnostics,\n clearDiagnostics,\n getScopes,\n setScopeValue,\n resetScope,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/dom/reconcile.ts","../src/runtime.ts"],"names":["reconcile","disposeCloneBindings","el","createBoundClone","updateBoundClone","batch"],"mappings":"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","file":"runtime.js","sourcesContent":["/**\n * Forma Reconciler — DOM diffing and patching engine.\n *\n * Replaces morphdom with a purpose-built reconciler that understands\n * Forma's directive system (data-forma-state, data-list, data-if, etc.).\n *\n * Usage:\n * const rec = createReconciler({ mountScope, unmountScope, ... });\n * rec(container, htmlString);\n *\n * Scope modes for data-forma-state elements matched by data-forma-id:\n * PRESERVE — same data-module + same state shape → patch attrs, keep bindings\n * RESET — same data-module + different state shape → unmount, patch, remount\n * REPLACE — different data-module → remove old, insert new, mount fresh\n */\n\n// ── Types ─────────────────────────────────────────────────────────────\n\nexport interface ReconcilerConfig {\n mountScope: (el: Element) => void;\n unmountScope: (el: Element) => void;\n disconnectObserver: () => void;\n reconnectObserver: () => void;\n batch: (fn: () => void) => void;\n}\n\ntype ScopeMode = 'PRESERVE' | 'RESET' | 'REPLACE';\n\n// ── Attribute helpers ─────────────────────────────────────────────────\n\n/** Check if an element has data-bind:X targeting a specific attribute */\nfunction getBindTargets(el: Element): Set<string> {\n const targets = new Set<string>();\n const attrs = el.attributes;\n for (let i = 0; i < attrs.length; i++) {\n const name = attrs[i]!.name;\n if (name.startsWith('data-bind:')) {\n targets.add(name.slice(10));\n }\n }\n return targets;\n}\n\n/** Check if an element owns its subtree (data-list or data-if) */\nfunction ownsSubtree(el: Element): boolean {\n return el.hasAttribute('data-list') || el.hasAttribute('data-if');\n}\n\n// ── State shape comparison ────────────────────────────────────────────\n\nfunction getStateKeys(json: string): string[] {\n try {\n const obj = JSON.parse(json);\n return Object.keys(obj).sort();\n } catch {\n return [];\n }\n}\n\nfunction sameShape(keysA: string[], keysB: string[]): boolean {\n if (keysA.length !== keysB.length) return false;\n for (let i = 0; i < keysA.length; i++) {\n if (keysA[i] !== keysB[i]) return false;\n }\n return true;\n}\n\n// ── Scope mode determination ──────────────────────────────────────────\n\nfunction determineScopeMode(liveEl: Element, newEl: Element): ScopeMode {\n const liveModule = liveEl.getAttribute('data-module');\n const newModule = newEl.getAttribute('data-module');\n\n if (liveModule !== newModule) return 'REPLACE';\n\n // Compare state shape: use __formaInitialState (set at mount time) for the\n // live element, and the raw attribute for the new element.\n const liveInitialState = (liveEl as any).__formaInitialState as string | undefined;\n const liveStateJSON = liveInitialState ?? liveEl.getAttribute('data-forma-state') ?? '{}';\n const newStateJSON = newEl.getAttribute('data-forma-state') ?? '{}';\n\n const liveKeys = getStateKeys(liveStateJSON);\n const newKeys = getStateKeys(newStateJSON);\n\n if (sameShape(liveKeys, newKeys)) return 'PRESERVE';\n return 'RESET';\n}\n\n// ── HTML parsing ──────────────────────────────────────────────────────\n\n/** Reused template element — avoids creating a new one per reconcile call. */\nlet _parseTemplate: HTMLTemplateElement | null = null;\n\nfunction parseHTML(html: string): DocumentFragment {\n if (!_parseTemplate) _parseTemplate = document.createElement('template');\n _parseTemplate.innerHTML = html;\n // content is consumed (moved) by the caller, so template is empty after\n return _parseTemplate.content;\n}\n\n// ── Attribute patching ────────────────────────────────────────────────\n\nfunction patchAttributes(liveEl: Element, newEl: Element): void {\n const bindTargets = getBindTargets(liveEl);\n const hasDataShow = liveEl.hasAttribute('data-show');\n const hasDataModel = liveEl.hasAttribute('data-model');\n\n // Check for class directives without Array.from allocation\n let liveHasClassDirectives = false;\n const liveAttrs = liveEl.attributes;\n for (let i = 0; i < liveAttrs.length; i++) {\n if (liveAttrs[i]!.name.startsWith('data-class:')) {\n liveHasClassDirectives = true;\n break;\n }\n }\n\n // Set/update attributes from newEl\n const newAttrs = newEl.attributes;\n for (let i = 0; i < newAttrs.length; i++) {\n const attr = newAttrs[i]!;\n // Skip directive-owned attributes\n if (attr.name === 'style' && hasDataShow) continue;\n if (attr.name === 'class' && liveHasClassDirectives) continue;\n if ((attr.name === 'value' || attr.name === 'checked') && hasDataModel) continue;\n if (bindTargets.has(attr.name)) continue;\n\n const liveVal = liveEl.getAttribute(attr.name);\n if (liveVal !== attr.value) {\n liveEl.setAttribute(attr.name, attr.value);\n }\n }\n\n // Remove attributes that are no longer present in newEl\n // Iterate backwards since removeAttribute shifts indices\n for (let i = liveAttrs.length - 1; i >= 0; i--) {\n const attr = liveAttrs[i]!;\n if (!newEl.hasAttribute(attr.name)) {\n if (attr.name === 'style' && hasDataShow) continue;\n if (attr.name === 'class' && liveHasClassDirectives) continue;\n if ((attr.name === 'value' || attr.name === 'checked') && hasDataModel) continue;\n if (bindTargets.has(attr.name)) continue;\n\n liveEl.removeAttribute(attr.name);\n }\n }\n}\n\n// ── Text node patching ────────────────────────────────────────────────\n\nfunction patchTextNodes(liveEl: Element, newEl: Element): void {\n // data-text directive owns this element's text content — don't overwrite\n if (liveEl.hasAttribute('data-text')) return;\n\n const liveTexts: Text[] = [];\n const newTexts: { node: Text; index: number }[] = [];\n\n for (const child of Array.from(liveEl.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) liveTexts.push(child as Text);\n }\n for (let i = 0; i < newEl.childNodes.length; i++) {\n const child = newEl.childNodes[i];\n if (child.nodeType === Node.TEXT_NODE) newTexts.push({ node: child as Text, index: i });\n }\n\n // Fast path: same count, just patch content\n if (liveTexts.length === newTexts.length) {\n for (let i = 0; i < liveTexts.length; i++) {\n if (liveTexts[i].textContent !== newTexts[i].node.textContent) {\n liveTexts[i].textContent = newTexts[i].node.textContent;\n }\n }\n return;\n }\n\n // Count mismatch: reuse live text nodes in order, insert/remove as needed\n const usedLive = new Set<Text>();\n let liveIdx = 0;\n\n for (const { node: newText, index: newChildIdx } of newTexts) {\n if (liveIdx < liveTexts.length) {\n // Reuse existing text node\n const liveText = liveTexts[liveIdx]!;\n liveIdx++;\n usedLive.add(liveText);\n if (liveText.textContent !== newText.textContent) {\n liveText.textContent = newText.textContent;\n }\n } else {\n // Insert new text node at correct position\n const ref = findTextInsertionRef(liveEl, newEl, newChildIdx);\n liveEl.insertBefore(document.createTextNode(newText.textContent ?? ''), ref);\n }\n }\n\n // Remove unused live text nodes\n for (const lt of liveTexts) {\n if (!usedLive.has(lt) && lt.parentNode === liveEl) {\n liveEl.removeChild(lt);\n }\n }\n}\n\n/** Find the insertion reference node for a text node being inserted into liveEl. */\nfunction findTextInsertionRef(liveEl: Element, newEl: Element, newIdx: number): Node | null {\n for (let j = newIdx + 1; j < newEl.childNodes.length; j++) {\n const sibling = newEl.childNodes[j];\n if (sibling.nodeType === Node.ELEMENT_NODE) {\n const key = (sibling as Element).getAttribute('data-forma-id');\n if (key) {\n const match = liveEl.querySelector(`[data-forma-id=\"${CSS.escape(key)}\"]`);\n if (match && match.parentElement === liveEl) return match;\n }\n }\n }\n return null;\n}\n\n// ── Recursive element diffing ─────────────────────────────────────────\n\nfunction diffChildren(\n liveParent: Element,\n newParent: Element,\n config: ReconcilerConfig,\n): void {\n // Skip directive-owned subtrees\n if (ownsSubtree(liveParent)) return;\n\n // Patch text nodes at this level\n patchTextNodes(liveParent, newParent);\n\n // Collect child elements (ignore text nodes for structural diff)\n const liveChildren = Array.from(liveParent.children);\n const newChildren = Array.from(newParent.children);\n\n // Build keyed maps for data-forma-id elements\n const liveKeyed = new Map<string, Element>();\n const liveUnkeyed: Element[] = [];\n for (const child of liveChildren) {\n if (child.hasAttribute('data-forma-leaving')) continue;\n const key = child.getAttribute('data-forma-id');\n if (key) {\n liveKeyed.set(key, child);\n } else {\n liveUnkeyed.push(child);\n }\n }\n\n let unkeyedIdx = 0;\n\n // Walk new children in order\n const usedLiveElements = new Set<Element>();\n\n for (const newChild of newChildren) {\n const key = newChild.getAttribute('data-forma-id');\n let liveMatch: Element | undefined;\n\n if (key) {\n liveMatch = liveKeyed.get(key);\n } else {\n // Match unkeyed elements by position and tag\n while (unkeyedIdx < liveUnkeyed.length) {\n const candidate = liveUnkeyed[unkeyedIdx];\n unkeyedIdx++;\n if (candidate.tagName === newChild.tagName && !usedLiveElements.has(candidate)) {\n liveMatch = candidate;\n break;\n }\n }\n }\n\n if (liveMatch) {\n usedLiveElements.add(liveMatch);\n\n // Check if this is a data-forma-state scope element\n if (liveMatch.hasAttribute('data-forma-state') && newChild.hasAttribute('data-forma-state')) {\n const mode = determineScopeMode(liveMatch, newChild);\n\n switch (mode) {\n case 'PRESERVE':\n // Patch attributes only, keep reactive bindings alive\n patchAttributes(liveMatch, newChild);\n // Recurse into non-directive-owned children\n diffChildren(liveMatch, newChild, config);\n break;\n\n case 'RESET':\n // Unmount old scope, patch DOM, mount fresh\n config.unmountScope(liveMatch);\n patchAttributes(liveMatch, newChild);\n // Replace inner content\n replaceInnerContent(liveMatch, newChild);\n config.mountScope(liveMatch);\n break;\n\n case 'REPLACE': {\n // Full element swap\n config.unmountScope(liveMatch);\n const replacement = newChild.cloneNode(true) as Element;\n liveParent.replaceChild(replacement, liveMatch);\n config.mountScope(replacement);\n usedLiveElements.delete(liveMatch);\n liveMatch = replacement;\n usedLiveElements.add(replacement);\n break;\n }\n }\n } else {\n // Non-scope element: patch attrs and recurse\n patchAttributes(liveMatch, newChild);\n diffChildren(liveMatch, newChild, config);\n }\n\n // Ensure element is in the correct position\n // Find where it should be relative to previousSibling\n ensurePosition(liveParent, liveMatch, newChild, newChildren);\n } else {\n // New element — insert it\n const clone = newChild.cloneNode(true) as Element;\n // Find insertion point\n const insertionRef = findInsertionPoint(liveParent, newChild, newChildren);\n liveParent.insertBefore(clone, insertionRef);\n usedLiveElements.add(clone);\n\n // Mount any scopes in the new element\n if (clone.hasAttribute('data-forma-state')) {\n config.mountScope(clone);\n }\n const nestedScopes = clone.querySelectorAll('[data-forma-state]');\n for (const nested of Array.from(nestedScopes)) {\n config.mountScope(nested);\n }\n }\n }\n\n // Remove live children that are no longer in new children\n for (const child of liveChildren) {\n if (!usedLiveElements.has(child)) {\n // Guard: element may already be detached (e.g. after REPLACE)\n if (child.parentElement !== liveParent) continue;\n // Guard: element is mid-leave transition — its transition will remove it\n if (child.hasAttribute('data-forma-leaving')) continue;\n // Unmount any scopes\n if (child.hasAttribute('data-forma-state')) {\n config.unmountScope(child);\n }\n const nestedScopes = child.querySelectorAll('[data-forma-state]');\n for (const nested of Array.from(nestedScopes)) {\n config.unmountScope(nested);\n }\n liveParent.removeChild(child);\n }\n }\n}\n\n/** Replace inner content of live element with content from new element */\nfunction replaceInnerContent(liveEl: Element, newEl: Element): void {\n // Remove all children\n while (liveEl.firstChild) {\n liveEl.removeChild(liveEl.firstChild);\n }\n // Clone and append all children from new element\n for (const child of Array.from(newEl.childNodes)) {\n liveEl.appendChild(child.cloneNode(true));\n }\n}\n\n/** Ensure a live element is at the correct position */\nfunction ensurePosition(\n parent: Element,\n liveEl: Element,\n _newEl: Element,\n newChildren: Element[],\n): void {\n const newIdx = newChildren.indexOf(_newEl);\n const liveChildElements = Array.from(parent.children);\n const currentIdx = liveChildElements.indexOf(liveEl);\n\n if (currentIdx !== newIdx) {\n // Find the element that should come after this one\n const nextNewChild = newChildren[newIdx + 1];\n if (nextNewChild) {\n const nextKey = nextNewChild.getAttribute('data-forma-id');\n if (nextKey) {\n // Find this element in live DOM\n const nextLive = parent.querySelector(`[data-forma-id=\"${CSS.escape(nextKey)}\"]`);\n if (nextLive && nextLive.parentElement === parent) {\n parent.insertBefore(liveEl, nextLive);\n return;\n }\n }\n }\n // Append to end\n parent.appendChild(liveEl);\n }\n}\n\n/** Find the correct insertion point for a new element */\nfunction findInsertionPoint(\n parent: Element,\n newChild: Element,\n newChildren: Element[],\n): Node | null {\n const newIdx = newChildren.indexOf(newChild);\n\n // Look for the next sibling in the new children that exists in the live DOM\n for (let i = newIdx + 1; i < newChildren.length; i++) {\n const key = newChildren[i].getAttribute('data-forma-id');\n if (key) {\n const existing = parent.querySelector(`[data-forma-id=\"${CSS.escape(key)}\"]`);\n if (existing && existing.parentElement === parent) {\n return existing;\n }\n }\n }\n\n return null; // Append to end\n}\n\n// ── Factory ───────────────────────────────────────────────────────────\n\nexport function createReconciler(config: ReconcilerConfig) {\n /** Last HTML string that was successfully reconciled into this container.\n * Used to skip reconciliation when the HTML hasn't changed. */\n let _lastHtml = '';\n\n return function reconcile(container: Element, html: string): void {\n const trimmed = html.trim();\n if (!trimmed) return;\n\n // Fast path: skip reconciliation entirely when HTML is identical\n if (trimmed === _lastHtml && container.hasChildNodes()) return;\n _lastHtml = trimmed;\n\n // Disconnect observer to prevent double-mount during patching\n config.disconnectObserver();\n\n try {\n // ── Fast path: empty container ──\n if (!container.hasChildNodes() || container.children.length === 0) {\n container.innerHTML = trimmed;\n\n // Mount all data-forma-state scopes\n config.batch(() => {\n const scopes = container.querySelectorAll('[data-forma-state]');\n for (const scope of Array.from(scopes)) {\n config.mountScope(scope);\n }\n });\n\n return;\n }\n\n // ── Parse new HTML into a DocumentFragment ──\n const fragment = parseHTML(trimmed);\n const templateContainer = document.createElement('div');\n templateContainer.appendChild(fragment);\n\n // ── Full-replacement fast path ──\n // When there is zero data-forma-id overlap between live and new children,\n // skip the diff entirely — dispose all live scopes, innerHTML, mount fresh.\n // This handles module-switch scenarios cleanly and avoids issues with\n // corrupted HTML confusing the diff.\n const liveKeys = new Set<string>();\n for (const child of Array.from(container.children)) {\n if (child.hasAttribute('data-forma-leaving')) continue;\n const key = child.getAttribute('data-forma-id');\n if (key) liveKeys.add(key);\n }\n let hasOverlap = false;\n if (liveKeys.size > 0) {\n for (const child of Array.from(templateContainer.children)) {\n const key = child.getAttribute('data-forma-id');\n if (key && liveKeys.has(key)) { hasOverlap = true; break; }\n }\n }\n\n if (liveKeys.size > 0 && !hasOverlap) {\n // Full replacement: unmount all live scopes, replace content, mount new\n config.batch(() => {\n const liveScopes = container.querySelectorAll('[data-forma-state]');\n for (const scope of Array.from(liveScopes)) {\n config.unmountScope(scope);\n }\n container.innerHTML = trimmed;\n const newScopes = container.querySelectorAll('[data-forma-state]');\n for (const scope of Array.from(newScopes)) {\n config.mountScope(scope);\n }\n });\n return;\n }\n\n // ── Diff and patch ──\n config.batch(() => {\n diffChildren(container, templateContainer, config);\n });\n } finally {\n // Always reconnect observer, even if an error occurred\n config.reconnectObserver();\n }\n };\n}\n","/**\n * FormaJS HTML Runtime\n *\n * Declarative reactive UI via data-* attributes, powered by fine-grained\n * signals (alien-signals 3.x). Combined into a single, CSP-safe runtime\n * with zero build step required.\n *\n * Design inspirations:\n * Alpine.js — data-* directive model, progressive enhancement\n * SolidJS — fine-grained signals, [getter, setter] tuple, real DOM\n * Qwik — deferred hydration triggers (idle, interaction, visible)\n * Astro — islands architecture, independent interactive regions\n * Hotwire — server-driven UI, reconciler with scope modes\n * Lit — root element access during hydration, (el, props) pattern\n *\n * ┌─────────────────────────────────────────────────────────────────────┐\n * │ Yes, this file is ~3,300 lines. It's a monolith on purpose. │\n * │ │\n * │ The HTML Runtime is a self-contained unit: expression parser, │\n * │ handler compiler, transition system, DOM scanner, and observer │\n * │ all share mutable state (debug flags, caches, eval mode). Keeping │\n * │ them in one file avoids circular imports, simplifies the build │\n * │ (single IIFE for CDN), and means `grep` always finds what you │\n * │ need. The sections are clearly marked — use the map below. │\n * │ │\n * │ Will it be split someday? Maybe. But today it works, it's tested │\n * │ and the CDN runtime bundle ships at ~24KB gzipped. If you're │\n * │ judging the line count — fair. But read the code first. :) │\n * └─────────────────────────────────────────────────────────────────────┘\n *\n * This file is the HTML Runtime — a subpath of @getforma/core:\n * import '@getforma/core/runtime' (ESM)\n * <script src=\"...runtime.global.js\"> (CDN)\n *\n * It is separate from the main @getforma/core entry point, which exports\n * signals, h(), mount, stores, etc. The main entry has zero network code.\n * HTTP/storage/server are at @getforma/core/http, /storage, /server.\n *\n * Usage (CDN):\n * <script src=\"https://unpkg.com/@getforma/core@1.0.1/dist/formajs-runtime.global.js\"></script>\n * <div data-forma-state='{\"count\": 0}'>\n * <p data-text=\"{count}\"></p>\n * <button data-on:click=\"{count++}\">+1</button>\n * </div>\n *\n * Build outputs from this source file:\n * dist/runtime.js ESM (import '@getforma/core/runtime')\n * dist/runtime.cjs CommonJS (require)\n * dist/formajs-runtime.global.js IIFE for <script> tags (auto-inits)\n * dist/runtime-hardened.js ESM, unsafe-eval locked off (zero new Function)\n * dist/formajs-runtime-hardened.global.js IIFE, unsafe-eval locked off (zero new Function)\n *\n * ── FILE MAP ──────────────────────────────────────────────────────────\n *\n * Line ~31-71 Core types & scope (Getter, Setter, Scope, createChildScope)\n * Line ~73-253 Configuration & diagnostics (debug, CSP modes, containment)\n * Line ~254-344 Performance utilities (yieldToMain, containment hints)\n * Line ~346-534 Regexes, caches, security blocklist (findBlockedMethod)\n * Line ~536-923 Parsing utilities (splitCallArgs, readBalancedSegment, if-handler)\n * Line ~925-1049 Template compilation (data-list templates)\n * Line ~1051-1396 CSS Transitions (parse, run, enter/leave phases)\n * Line ~1398-1809 CSP-safe expression parser (chained access, operators, literals)\n * Line ~1811-2091 Evaluator & handler builder (CSP path + new Function fallback)\n * Line ~2093-2184 State initialization & safe $el proxy\n * Line ~2186-2682 bindElement() — the central directive processor\n * Line ~2684-2952 MutationObserver, directive map, mountScope/unmountScope\n * Line ~2954-3064 Init/destroy, mount/unmount, public API setters\n * Line ~3066-3188 DevTools API, reconciler bridge, exports\n *\n * ── SUPPORTED DIRECTIVES ──────────────────────────────────────────────\n *\n * State & Reactivity:\n * data-forma-state='{\"key\": val}' Declare reactive state (valid JSON)\n * data-computed=\"name = expr\" Derived value (lazy, cached)\n * data-persist=\"{prop}\" Sync state to localStorage\n *\n * Content Binding:\n * data-text=\"{expr}\" Bind text content\n * data-show=\"{expr}\" Toggle visibility (display: none)\n * data-if=\"{expr}\" Conditional render (remove/insert DOM)\n * data-model=\"{prop}\" Two-way input binding\n * data-list=\"{expr}\" List rendering (keyed reconciliation)\n *\n * Attributes & Classes:\n * data-on:event=\"{expr}\" Event handler (e.g. data-on:click)\n * data-class:name=\"{expr}\" Conditional CSS class\n * data-bind:attr=\"{expr}\" Dynamic attribute binding\n *\n * Transitions (for data-show and data-if):\n * data-transition:enter=\"classes\" Classes during enter phase\n * data-transition:enter-from=\"classes\" Classes at enter start\n * data-transition:enter-to=\"classes\" Classes at enter end\n * data-transition:leave=\"classes\" Classes during leave phase\n * data-transition:leave-from=\"classes\" Classes at leave start\n * data-transition:leave-to=\"classes\" Classes at leave end\n *\n * Refs:\n * data-ref=\"name\" Register element for $refs.name access\n *\n * Data Fetching:\n * data-fetch=\"GET /url → prop\" Fetch data into state\n * data-fetch=\"POST /url → prop\" POST with state as body\n * data-fetch-id=\"name\" Register for $refetch('name')\n *\n * Configuration (on <script> tag):\n * data-forma-unsafe-eval=\"true\" Enable new Function() fallback\n * data-forma-diagnostics=\"true\" Enable expression diagnostics\n * data-forma-auto-containment=\"true\" Enable CSS containment hints\n *\n * ── MAGIC VARIABLES ──────────────────────────────────────────────────\n *\n * Available in all expressions and handlers:\n * $el The current DOM element (safe proxy — see createSafeElProxy)\n * $dispatch Fire a CustomEvent: $dispatch('name', detail?)\n * Events bubble and cross Shadow DOM (composed: true)\n * $event The DOM event object (in data-on:* handlers only)\n * event Alias for $event (also in data-on:* handlers)\n * $refs Named element references: $refs.myInput (via data-ref=\"myInput\")\n * $refetch Re-trigger a data-fetch: $refetch('fetch-id')\n */\nimport { createSignal, internalEffect, createComputed, batch } from './reactive';\nimport { reconcileList, type ListTransitionHooks } from './dom/list';\nimport { createReconciler } from './dom/reconcile';\nimport { isDangerousUrl, isUrlAttr, isEventHandlerAttr } from './security/url-safety';\n\n/**\n * True if writing `value` to attribute `name` via setAttribute would create an\n * XSS sink: an `on*` inline event handler, or a URL attribute carrying a\n * script-executing scheme. Shared by data-bind:* and list-template binding.\n */\nfunction isUnsafeAttrBinding(name: string, value: string): boolean {\n if (isEventHandlerAttr(name)) return true;\n if (isUrlAttr(name) && isDangerousUrl(value)) return true;\n return false;\n}\n\ntype Getter = () => unknown;\ntype Setter = (v: unknown) => void;\n\ninterface Scope {\n getters: Record<string, Getter>;\n setters: Record<string, Setter>;\n}\n\n// ── $refetch registry ──\n// Maps data-fetch-id values to their doFetch() functions so handlers can\n// trigger imperative refetches via $refetch('id').\nconst _refetchRegistry = new Map<string, () => void>();\n\nfunction $refetch(id: string): void {\n const fn = _refetchRegistry.get(id);\n if (fn) {\n fn();\n } else if (_debug) {\n dbg(`$refetch: no data-fetch with id \"${id}\" found`);\n }\n}\n\nfunction createChildScope(parent: Scope, locals: Record<string, unknown>): Scope {\n const localGetters: Record<string, Getter> = Object.create(null);\n for (const key of Object.keys(locals)) {\n localGetters[key] = () => locals[key];\n }\n\n return {\n getters: new Proxy(parent.getters, {\n get(target, prop: string) {\n if (prop in localGetters) return localGetters[prop];\n return target[prop];\n },\n has(target, prop: string) {\n return prop in localGetters || prop in target;\n },\n }),\n setters: parent.setters,\n };\n}\n\n// ── Debug logger — enable via FormaRuntime.debug = true or window.__FORMA_DEBUG = true ──\nlet _debug = false;\ntype UnsafeEvalMode = 'mutable' | 'locked-off' | 'locked-on';\nlet _unsafeEvalMode: UnsafeEvalMode = 'mutable';\nlet _allowUnsafeEval = false;\nlet _diagnosticsEnabled = true;\nfunction dbg(...args: unknown[]): void {\n if (_debug || (typeof window !== 'undefined' && (window as any).__FORMA_DEBUG)) {\n console.log('[FormaJS]', ...args);\n }\n}\n\ninterface RuntimeConfig {\n allowUnsafeEval?: boolean;\n unsafeEvalMode?: UnsafeEvalMode;\n lockUnsafeEval?: boolean;\n diagnostics?: boolean;\n autoContainment?: boolean;\n}\n\ninterface RuntimeDiagnostic {\n kind: 'handler-unsupported' | 'expression-unsupported';\n expr: string;\n reason: string;\n count: number;\n firstSeenAt: number;\n lastSeenAt: number;\n}\n\nconst diagnostics = new Map<string, RuntimeDiagnostic>();\n\nfunction parseBooleanFlag(raw: string | null | undefined): boolean | undefined {\n if (raw == null) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (normalized === '1' || normalized === 'true' || normalized === 'on' || normalized === 'yes') return true;\n if (normalized === '0' || normalized === 'false' || normalized === 'off' || normalized === 'no') return false;\n return undefined;\n}\n\nfunction parseUnsafeEvalMode(raw: string | null | undefined): UnsafeEvalMode | undefined {\n if (raw == null) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (normalized === 'mutable') return 'mutable';\n if (normalized === 'locked-off' || normalized === 'off' || normalized === 'disabled') {\n return 'locked-off';\n }\n if (normalized === 'locked-on' || normalized === 'on' || normalized === 'enabled') {\n return 'locked-on';\n }\n return undefined;\n}\n\nfunction readRuntimeConfig(): RuntimeConfig {\n const config: RuntimeConfig = {};\n\n if (typeof window !== 'undefined') {\n const globalConfig = (window as any).__FORMA_RUNTIME_CONFIG as RuntimeConfig | undefined;\n if (globalConfig) {\n if (typeof globalConfig.allowUnsafeEval === 'boolean') {\n config.allowUnsafeEval = globalConfig.allowUnsafeEval;\n }\n if (typeof globalConfig.unsafeEvalMode === 'string') {\n const parsed = parseUnsafeEvalMode(globalConfig.unsafeEvalMode);\n if (parsed) config.unsafeEvalMode = parsed;\n }\n if (typeof globalConfig.lockUnsafeEval === 'boolean') {\n config.lockUnsafeEval = globalConfig.lockUnsafeEval;\n }\n if (typeof globalConfig.diagnostics === 'boolean') {\n config.diagnostics = globalConfig.diagnostics;\n }\n if (typeof globalConfig.autoContainment === 'boolean') {\n config.autoContainment = globalConfig.autoContainment;\n }\n }\n }\n\n if (typeof document !== 'undefined') {\n const script = document.currentScript as HTMLScriptElement | null;\n if (script) {\n const unsafeFromAttr = parseBooleanFlag(script.getAttribute('data-forma-unsafe-eval'));\n if (unsafeFromAttr !== undefined) {\n config.allowUnsafeEval = unsafeFromAttr;\n }\n const modeFromAttr = parseUnsafeEvalMode(\n script.getAttribute('data-forma-unsafe-eval-mode'),\n );\n if (modeFromAttr !== undefined) {\n config.unsafeEvalMode = modeFromAttr;\n }\n const lockFromAttr = parseBooleanFlag(script.getAttribute('data-forma-lock-unsafe-eval'));\n if (lockFromAttr !== undefined) {\n config.lockUnsafeEval = lockFromAttr;\n }\n const diagnosticsFromAttr = parseBooleanFlag(script.getAttribute('data-forma-diagnostics'));\n if (diagnosticsFromAttr !== undefined) {\n config.diagnostics = diagnosticsFromAttr;\n }\n const containmentFromAttr = parseBooleanFlag(script.getAttribute('data-forma-auto-containment'));\n if (containmentFromAttr !== undefined) {\n config.autoContainment = containmentFromAttr;\n }\n }\n }\n\n return config;\n}\n\nfunction reportDiagnostic(\n kind: RuntimeDiagnostic['kind'],\n expr: string,\n reason: string,\n): void {\n if (!_diagnosticsEnabled) return;\n\n const key = `${kind}|${reason}|${expr}`;\n const now = Date.now();\n const existing = diagnostics.get(key);\n\n if (existing) {\n existing.count += 1;\n existing.lastSeenAt = now;\n } else {\n diagnostics.set(key, {\n kind,\n expr,\n reason,\n count: 1,\n firstSeenAt: now,\n lastSeenAt: now,\n });\n console.warn(`[FormaJS] ${reason}: ${expr}`);\n }\n\n try {\n if (typeof window !== 'undefined') {\n const detail = {\n kind,\n expr,\n reason,\n count: diagnostics.get(key)?.count ?? 1,\n };\n window.dispatchEvent(new CustomEvent('formajs:diagnostic', { detail }));\n }\n } catch {\n // Ignore event dispatch failures\n }\n}\n\ndeclare const __FORMA_UNSAFE_EVAL_MODE__: string | undefined;\n\n/**\n * Compile-time flag: true when the build CAN use new Function().\n * In the hardened build, __FORMA_UNSAFE_EVAL_MODE__ is \"locked-off\" and\n * esbuild constant-folds this to `false`, allowing dead code elimination\n * of all new Function() paths. This ensures Socket.dev/Snyk static analysis\n * does not flag eval usage in the hardened build.\n */\nconst __EVAL_CAPABLE__ = typeof __FORMA_UNSAFE_EVAL_MODE__ !== 'string'\n || __FORMA_UNSAFE_EVAL_MODE__ !== 'locked-off';\n\nconst buildUnsafeEvalMode = parseUnsafeEvalMode(\n typeof __FORMA_UNSAFE_EVAL_MODE__ === 'string'\n ? __FORMA_UNSAFE_EVAL_MODE__\n : undefined,\n);\n\nif (buildUnsafeEvalMode) {\n _unsafeEvalMode = buildUnsafeEvalMode;\n if (_unsafeEvalMode === 'locked-off') _allowUnsafeEval = false;\n if (_unsafeEvalMode === 'locked-on') _allowUnsafeEval = true;\n if (_unsafeEvalMode === 'mutable') _allowUnsafeEval = true;\n}\n\nconst runtimeConfig = readRuntimeConfig();\nconst configUnsafeMode = runtimeConfig.lockUnsafeEval\n ? 'locked-off'\n : runtimeConfig.unsafeEvalMode;\nif (configUnsafeMode) {\n _unsafeEvalMode = configUnsafeMode;\n if (_unsafeEvalMode === 'locked-off') _allowUnsafeEval = false;\n if (_unsafeEvalMode === 'locked-on') _allowUnsafeEval = true;\n}\nif (\n _unsafeEvalMode === 'mutable'\n && typeof runtimeConfig.allowUnsafeEval === 'boolean'\n) {\n _allowUnsafeEval = runtimeConfig.allowUnsafeEval;\n}\nif (typeof runtimeConfig.diagnostics === 'boolean') {\n _diagnosticsEnabled = runtimeConfig.diagnostics;\n}\nconst _autoContainment = runtimeConfig.autoContainment === true;\n\ninterface SchedulerLike {\n yield?: () => Promise<unknown>;\n postTask?: (\n callback: () => void,\n options?: { priority?: 'user-blocking' | 'user-visible' | 'background' },\n ) => Promise<unknown>;\n}\n\nfunction getScheduler(): SchedulerLike | undefined {\n const candidate = (globalThis as any)?.scheduler as SchedulerLike | undefined;\n if (!candidate) return undefined;\n if (typeof candidate.yield === 'function' || typeof candidate.postTask === 'function') {\n return candidate;\n }\n return undefined;\n}\n\n/** Yield control to keep the main thread responsive during large batches. */\nasync function yieldToMain(): Promise<void> {\n const scheduler = getScheduler();\n if (scheduler?.yield) {\n await scheduler.yield();\n return;\n }\n if (scheduler?.postTask) {\n await scheduler.postTask(() => {}, { priority: 'background' });\n return;\n }\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n}\n\ninterface ContainmentHintsOptions {\n selector?: string;\n contain?: string;\n contentVisibility?: string;\n containIntrinsicSize?: string;\n skipIfAlreadySet?: boolean;\n}\n\n/** Apply CSS containment hints to opt-in containers for lower layout/paint cost. */\nfunction applyContainmentHints(\n root: ParentNode = document,\n options: ContainmentHintsOptions = {},\n): number {\n const selector = options.selector ?? '[data-forma-contain]';\n if (!selector) return 0;\n if (typeof (root as ParentNode).querySelectorAll !== 'function') return 0;\n\n const nodes = root.querySelectorAll(selector);\n let applied = 0;\n for (let i = 0; i < nodes.length; i++) {\n const el = nodes[i] as HTMLElement;\n if (!el?.style) continue;\n\n const contain = el.getAttribute('data-forma-contain') ?? options.contain ?? 'layout style paint';\n const contentVisibility = el.getAttribute('data-forma-content-visibility')\n ?? options.contentVisibility\n ?? 'auto';\n const containIntrinsicSize = el.getAttribute('data-forma-contain-intrinsic-size')\n ?? options.containIntrinsicSize\n ?? 'auto 800px';\n const skipExisting = options.skipIfAlreadySet === true;\n let changed = false;\n\n const containCurrent = el.style.getPropertyValue('contain');\n const contentVisCurrent = el.style.getPropertyValue('content-visibility');\n const containSizeCurrent = el.style.getPropertyValue('contain-intrinsic-size');\n\n if (contain !== 'off' && (!skipExisting || !containCurrent)) {\n el.style.setProperty('contain', contain);\n changed = true;\n }\n if (contentVisibility !== 'off' && (!skipExisting || !contentVisCurrent)) {\n el.style.setProperty('content-visibility', contentVisibility);\n changed = true;\n }\n if (containIntrinsicSize !== 'off' && (!skipExisting || !containSizeCurrent)) {\n el.style.setProperty('contain-intrinsic-size', containIntrinsicSize);\n changed = true;\n }\n\n if (changed) applied++;\n }\n\n if (_debug && applied > 0) {\n dbg('applyContainmentHints: applied to', applied, 'element(s)');\n }\n return applied;\n}\n\n// ── Pre-compiled regexes (avoid re-creation in hot paths) ──\n\nconst RE_STRING_SINGLE = /^'[^']*'$/;\nconst RE_STRING_DOUBLE = /^\"[^\"]*\"$/;\nconst RE_NUMBER = /^-?\\d+(\\.\\d+)?$/;\nconst RE_IDENTIFIER = /^[a-zA-Z_$]\\w*$/;\nconst RE_DOT_ACCESS = /^(\\w+)\\.(\\w+)$/;\nconst RE_DEEP_DOT = /^(\\w+)\\.(\\w+)\\.(\\w+)(?:\\.(\\w+))?$/;\nconst RE_BRACKET = /^(\\w+)\\[(\\d+|'[^']*'|\"[^\"]*\")\\]$/;\nconst RE_TERNARY = /^(.+?)\\s*\\?\\s*(.+?)\\s*:\\s*(.+)$/;\nconst RE_NULLISH = /^(.+?)\\s*\\?\\?\\s*(.+)$/;\nconst RE_AND = /^(.+?)\\s*&&\\s*(.+)$/;\nconst RE_OR = /^(.+?)\\s*\\|\\|\\s*(.+)$/;\nconst RE_COMPARISON = /^(.+?)\\s*(===|!==|==|!=|>=|<=|>|<)\\s*(.+)$/;\nconst RE_MUL = /^(.+?)\\s*([*/%])\\s*(.+)$/;\nconst RE_ADD = /^(.+?)\\s*([+-])\\s*(.+)$/;\nconst RE_TEMPLATE_LIT = /^`([^`]*)`$/;\nconst RE_TEMPLATE_INTERP = /\\$\\{([^}]+)\\}/g;\nconst RE_METHOD_CALL = /^(\\w+)\\.(\\w+)\\((.*)\\)$/;\nconst RE_GROUP_METHOD_CALL = /^\\((.+)\\)\\.(\\w+)\\((.*)\\)$/;\nconst RE_STRIP_BRACES = /^\\{|\\}$/g;\nconst RE_ITEM_TEMPLATE = /\\{item\\.?(\\w*)\\}/g;\nconst RE_DIGIT_ONLY = /^\\d+$/;\nconst RE_POST_INCR = /^(\\w+)(\\+\\+|--)$/;\nconst RE_PRE_INCR = /^(\\+\\+|--)(\\w+)$/;\nconst RE_TOGGLE = /^(\\w+)\\s*=\\s*!(\\w+)$/;\nconst RE_ASSIGN = /^(\\w+)\\s*=\\s*(.+)$/;\nconst RE_COMPOUND = /^(\\w+)\\s*(\\+=|-=|\\*=|\\/=)\\s*(.+)$/;\nconst RE_IF_PREFIX = /^if\\b/;\n// RE_UNQUOTED_KEYS removed in v0.5.0 — relaxed JSON parsing corrupted URLs\n// and string values containing colons. Use valid JSON in data-forma-state.\nconst RE_COMPUTED = /^(\\w+)\\s*=\\s*(.+)$/;\nconst RE_FETCH = /^(.+?)(?:→|->)\\s*(\\S+)(.*)$/;\nconst RE_FETCH_METHOD = /^(GET|POST|PUT|PATCH|DELETE)\\s+(.+)$/i;\nconst RE_STRIP_ITEM_BRACES = /^\\{item\\.?|\\}$/g;\n// Detect expressions referencing DOM event parameters — these can't be resolved\n// through scope getters and must fall through to the new Function handler path.\nconst RE_EVENT_REF = /\\bevent\\s*[.([]|\\$event\\b/;\nconst RE_REFETCH_CALL = /^\\$refetch\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)$/;\n\ninterface TransitionSpec {\n enter: string[];\n enterFrom: string[];\n enterTo: string[];\n leave: string[];\n leaveFrom: string[];\n leaveTo: string[];\n enterDurationMs?: number;\n leaveDurationMs?: number;\n}\n\ninterface ElementTransitionState {\n token: number;\n cancel: (() => void) | null;\n}\n\nconst TRANSITION_STATE_SYM = Symbol.for('forma-transition-state');\n\n// ── Expression factory cache ──\n// Maps expression string -> factory function that takes a scope and returns a getter.\n// This avoids re-parsing the same expression pattern across different scopes.\ntype ExpressionFactory = (scope: Scope) => (() => unknown) | null;\nconst EXPRESSION_CACHE_MAX = 2048;\nconst expressionCache = new Map<string, ExpressionFactory>();\nfunction cacheExpression(key: string, factory: ExpressionFactory): void {\n if (expressionCache.size >= EXPRESSION_CACHE_MAX) {\n // Evict oldest entry (first inserted)\n const first = expressionCache.keys().next().value;\n if (first !== undefined) expressionCache.delete(first);\n }\n expressionCache.set(key, factory);\n}\nlet scopeExpressionCache = new WeakMap<Scope, Map<string, () => unknown>>();\n\ninterface HandlerBuildResult {\n handler: (e: Event) => void;\n supported: boolean;\n}\n\nlet scopeHandlerCache = new WeakMap<Scope, Map<string, HandlerBuildResult>>();\n\n// ── Compiled template cache ──\n// Pre-splits template text into static/dynamic segments for fast re-evaluation.\ninterface CompiledTemplate {\n statics: string[];\n dynamics: string[]; // expression strings between {item.xxx}\n hasItemRef: boolean;\n}\n\nconst compiledTemplateCache = new Map<string, CompiledTemplate>();\nconst COMPILED_TEMPLATE_CACHE_MAX = 2048;\nfunction cacheCompiledTemplate(key: string, template: CompiledTemplate): void {\n if (compiledTemplateCache.size >= COMPILED_TEMPLATE_CACHE_MAX) {\n // Evict oldest entry (first inserted)\n const first = compiledTemplateCache.keys().next().value;\n if (first !== undefined) compiledTemplateCache.delete(first);\n }\n compiledTemplateCache.set(key, template);\n}\nconst UNSAFE_METHOD_NAMES = new Set([\n 'constructor', '__proto__', 'prototype',\n '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__',\n 'eval', 'Function',\n]);\n\n/**\n * Pre-compiled regexes for each blocked method name — avoids re-creating\n * RegExp objects on every call.\n */\nconst BLOCKED_METHOD_REGEXES: Array<{ name: string; dotRe: RegExp; bracketRe: RegExp }> = (() => {\n const result: Array<{ name: string; dotRe: RegExp; bracketRe: RegExp }> = [];\n for (const name of UNSAFE_METHOD_NAMES) {\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n result.push({\n name,\n // Match as property access (.name) or bare identifier at start\n dotRe: new RegExp(`(?:^|\\\\.)${escaped}(?:\\\\s*\\\\(|\\\\s*$|[^\\\\w$])`, 'm'),\n // Match bracket access with single quotes, double quotes, or backticks\n bracketRe: new RegExp(`\\\\[\\\\s*(?:'${escaped}'|\"${escaped}\"|` + '`' + escaped + '`' + `)\\\\s*\\\\]`),\n });\n }\n return result;\n})();\n\n/**\n * Scan an expression string for any UNSAFE_METHOD_NAMES usage.\n * Uses word-boundary matching to avoid false positives on substrings\n * (e.g. \"constructorValue\" should not match \"constructor\").\n *\n * Before scanning:\n * 1. Strips JS block comments and line comments\n * 2. Normalizes whitespace around dots (e.g. \"x . constructor\" → \"x.constructor\")\n * 3. Checks bracket access with static string literals and backtick templates\n * 4. Detects string concatenation inside brackets that could produce a blocked name\n *\n * Returns the matched blocked name, or null if clean.\n */\nfunction findBlockedMethod(expr: string): string | null {\n // Strip block comments (/* ... */)\n let cleaned = expr.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n // Strip line comments (// ... to end of line)\n cleaned = cleaned.replace(/\\/\\/[^\\n]*/g, '');\n // Normalize whitespace around dots: \"x . constructor\" → \"x.constructor\"\n cleaned = cleaned.replace(/\\s*\\.\\s*/g, '.');\n\n for (const { name, dotRe, bracketRe } of BLOCKED_METHOD_REGEXES) {\n if (dotRe.test(cleaned)) return name;\n if (bracketRe.test(cleaned)) return name;\n }\n\n // Layer 2: detect string concatenation inside brackets that could produce\n // a blocked name. Extract all bracket contents and check if concatenated\n // string fragments could form a blocked name.\n // e.g. x['constr' + 'uctor'] → extract 'constr' and 'uctor' → 'constructor'\n if (cleaned.includes('[')) {\n const bracketContents = extractBracketContents(cleaned);\n for (const content of bracketContents) {\n // Only check contents with concatenation operators\n if (!content.includes('+')) continue;\n // Extract all string literal fragments and join them\n const fragments = content.match(/['\"`]([^'\"`]*?)['\"`]/g);\n if (!fragments) continue;\n const joined = fragments.map(f => f.slice(1, -1)).join('');\n if (UNSAFE_METHOD_NAMES.has(joined)) return joined;\n }\n }\n\n return null;\n}\n\n/** Extract the contents of all bracket access expressions (between [ and ]). */\nfunction extractBracketContents(expr: string): string[] {\n const results: string[] = [];\n let depth = 0;\n let start = -1;\n for (let i = 0; i < expr.length; i++) {\n if (expr[i] === '[') {\n if (depth === 0) start = i + 1;\n depth++;\n } else if (expr[i] === ']') {\n depth--;\n if (depth === 0 && start >= 0) {\n results.push(expr.slice(start, i));\n start = -1;\n }\n }\n }\n return results;\n}\n\nconst TEXT_BINDING_SYM = Symbol.for('forma-text-binding-cache');\n\ninterface TextBindingCache {\n initialized: boolean;\n last: string;\n node: Text | null;\n}\n\nfunction toTextValue(value: unknown): string {\n if (value == null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'symbol') return value.toString();\n return String(value);\n}\n\nfunction setElementTextFast(el: Element, next: string): void {\n let cache = (el as any)[TEXT_BINDING_SYM] as TextBindingCache | undefined;\n if (!cache) {\n cache = { initialized: false, last: '', node: null };\n (el as any)[TEXT_BINDING_SYM] = cache;\n }\n\n if (cache.initialized && cache.last === next) return;\n\n // Reuse direct text-node writes when this element is a single text child.\n let node = cache.node;\n if (!node || node.parentNode !== el || el.childNodes.length !== 1 || el.firstChild !== node) {\n if (el.childNodes.length === 1 && el.firstChild?.nodeType === Node.TEXT_NODE) {\n node = el.firstChild as Text;\n cache.node = node;\n } else {\n el.textContent = next;\n const first = el.firstChild;\n cache.node = (first && first.nodeType === Node.TEXT_NODE && el.childNodes.length === 1)\n ? (first as Text)\n : null;\n cache.last = next;\n cache.initialized = true;\n return;\n }\n }\n\n node.data = next;\n cache.last = next;\n cache.initialized = true;\n}\n\nfunction splitCallArgs(raw: string): string[] {\n const out: string[] = [];\n if (raw.trim() === '') return out;\n\n let depth = 0;\n let inSingle = false;\n let inDouble = false;\n let escaped = false;\n let start = 0;\n\n for (let i = 0; i < raw.length; i++) {\n const ch = raw[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n\n if (ch === '(') {\n depth++;\n continue;\n }\n if (ch === ')') {\n if (depth > 0) depth--;\n continue;\n }\n\n if (ch === ',' && depth === 0) {\n out.push(raw.slice(start, i).trim());\n start = i + 1;\n }\n }\n\n out.push(raw.slice(start).trim());\n return out.filter(Boolean);\n}\n\nfunction readBalancedSegment(\n input: string,\n start: number,\n open: string,\n close: string,\n): { inner: string; end: number } | null {\n if (input[start] !== open) return null;\n\n let depth = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n let escaped = false;\n\n for (let i = start; i < input.length; i++) {\n const ch = input[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\' && (inSingle || inDouble || inTemplate)) {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n if (inTemplate) {\n if (ch === '`') inTemplate = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n continue;\n }\n\n if (ch === open) {\n depth++;\n continue;\n }\n if (ch === close) {\n depth--;\n if (depth === 0) {\n return {\n inner: input.slice(start + 1, i),\n end: i,\n };\n }\n }\n }\n\n return null;\n}\n\nfunction splitTopLevelStatements(raw: string): string[] {\n const input = raw.trim();\n if (!input) return [];\n\n const out: string[] = [];\n let depthParen = 0;\n let depthBrace = 0;\n let depthBracket = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n let escaped = false;\n let start = 0;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\' && (inSingle || inDouble || inTemplate)) {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n if (inTemplate) {\n if (ch === '`') inTemplate = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n continue;\n }\n\n if (ch === '(') depthParen++;\n else if (ch === ')' && depthParen > 0) depthParen--;\n else if (ch === '{') depthBrace++;\n else if (ch === '}' && depthBrace > 0) depthBrace--;\n else if (ch === '[') depthBracket++;\n else if (ch === ']' && depthBracket > 0) depthBracket--;\n\n if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {\n const stmt = input.slice(start, i).trim();\n if (stmt) out.push(stmt);\n start = i + 1;\n }\n }\n\n const tail = input.slice(start).trim();\n if (tail) out.push(tail);\n return out;\n}\n\nfunction consumeStatement(raw: string): { body: string; rest: string } | null {\n const input = raw.trim();\n if (!input) return null;\n\n if (input.startsWith('{')) {\n const block = readBalancedSegment(input, 0, '{', '}');\n if (!block) return null;\n const body = block.inner.trim();\n let rest = input.slice(block.end + 1).trim();\n if (rest.startsWith(';')) rest = rest.slice(1).trim();\n return { body, rest };\n }\n\n let depthParen = 0;\n let depthBrace = 0;\n let depthBracket = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n let escaped = false;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\' && (inSingle || inDouble || inTemplate)) {\n escaped = true;\n continue;\n }\n\n if (inSingle) {\n if (ch === '\\'') inSingle = false;\n continue;\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false;\n continue;\n }\n if (inTemplate) {\n if (ch === '`') inTemplate = false;\n continue;\n }\n\n if (ch === '\\'') {\n inSingle = true;\n continue;\n }\n if (ch === '\"') {\n inDouble = true;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n continue;\n }\n\n if (ch === '(') depthParen++;\n else if (ch === ')' && depthParen > 0) depthParen--;\n else if (ch === '{') depthBrace++;\n else if (ch === '}' && depthBrace > 0) depthBrace--;\n else if (ch === '[') depthBracket++;\n else if (ch === ']' && depthBracket > 0) depthBracket--;\n\n if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {\n return {\n body: input.slice(0, i).trim(),\n rest: input.slice(i + 1).trim(),\n };\n }\n }\n\n return {\n body: input,\n rest: '',\n };\n}\n\nfunction parseIfHandler(expr: string, scope: Scope): ((e: Event) => void) | null {\n const input = expr.trim();\n if (!RE_IF_PREFIX.test(input)) return null;\n\n // If the expression references DOM event parameters (`event`, `$event`),\n // bail out — these aren't in scope getters and must use new Function.\n if (RE_EVENT_REF.test(input)) return null;\n\n let idx = 2;\n while (idx < input.length && /\\s/.test(input[idx]!)) idx++;\n if (input[idx] !== '(') return null;\n\n const condSegment = readBalancedSegment(input, idx, '(', ')');\n if (!condSegment) return null;\n\n const condExpr = parseExpression(condSegment.inner.trim(), scope);\n if (!condExpr) return null;\n\n let rest = input.slice(condSegment.end + 1).trim();\n const thenStmt = consumeStatement(rest);\n if (!thenStmt || !thenStmt.body) return null;\n\n const thenHandler = parseHandler(thenStmt.body, scope);\n if (!thenHandler) return null;\n\n rest = thenStmt.rest.trim();\n let elseHandler: ((e: Event) => void) | null = null;\n if (rest.startsWith('else')) {\n rest = rest.slice('else'.length).trim();\n const elseStmt = consumeStatement(rest);\n if (!elseStmt || !elseStmt.body) return null;\n elseHandler = parseHandler(elseStmt.body, scope);\n if (!elseHandler) return null;\n rest = elseStmt.rest.trim();\n }\n\n if (rest.length > 0) return null;\n\n return (e: Event) => {\n batch(() => {\n if (condExpr()) thenHandler(e);\n else elseHandler?.(e);\n });\n };\n}\n\nfunction unwrapOuterParens(raw: string): string {\n let expr = raw.trim();\n while (expr.startsWith('(')) {\n const segment = readBalancedSegment(expr, 0, '(', ')');\n if (!segment || segment.end !== expr.length - 1) break;\n const inner = segment.inner.trim();\n if (!inner) break;\n expr = inner;\n }\n return expr;\n}\n\nfunction compileTemplate(text: string): CompiledTemplate {\n const cached = compiledTemplateCache.get(text);\n if (cached) return cached;\n\n const statics: string[] = [];\n const dynamics: string[] = [];\n let lastIndex = 0;\n // Use a fresh regex each time since it has the 'g' flag\n const re = /\\{item\\.?(\\w*)\\}/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n statics.push(text.slice(lastIndex, m.index));\n dynamics.push(m[1]!); // the key after \"item.\" (empty string means whole item)\n lastIndex = re.lastIndex;\n }\n statics.push(text.slice(lastIndex));\n\n const result: CompiledTemplate = {\n statics,\n dynamics,\n hasItemRef: dynamics.length > 0,\n };\n cacheCompiledTemplate(text, result);\n return result;\n}\n\n// ── Template text caching for data-list ──\n\n/** Maps text nodes to their compiled template (pre-split static/dynamic segments). */\nconst templateTexts = new WeakMap<Node, CompiledTemplate>();\n\n/**\n * Resolve template placeholders in a text string using pre-compiled template.\n * Concatenates static segments with evaluated dynamic segments.\n */\nfunction resolveTemplate(text: string, item: unknown): string {\n const compiled = compileTemplate(text);\n return evaluateCompiledTemplate(compiled, item);\n}\n\n/**\n * Evaluate a pre-compiled template against an item.\n * Only evaluates dynamic parts and concatenates with static segments.\n */\nfunction evaluateCompiledTemplate(compiled: CompiledTemplate, item: unknown): string {\n if (!compiled.hasItemRef) return compiled.statics[0]!;\n let result = compiled.statics[0]!;\n for (let i = 0; i < compiled.dynamics.length; i++) {\n const key = compiled.dynamics[i]!;\n if (!key) {\n result += typeof item === 'object' ? JSON.stringify(item) : String(item ?? '');\n } else {\n result += String((item as Record<string, unknown>)?.[key] ?? '');\n }\n result += compiled.statics[i + 1] ?? '';\n }\n return result;\n}\n\n/**\n * Clone a template element and apply item data to all text node placeholders.\n * Stores the original template text in a WeakMap so updates can re-apply without re-cloning.\n */\nfunction cloneWithTemplateData(template: Element, item: unknown): Element {\n const clone = template.cloneNode(true) as Element;\n const walker = document.createTreeWalker(clone, NodeFilter.SHOW_TEXT);\n while (walker.nextNode()) {\n const node = walker.currentNode;\n const text = node.textContent ?? '';\n if (text.includes('{item')) {\n const compiled = compileTemplate(text);\n templateTexts.set(node, compiled); // Store compiled template\n node.textContent = evaluateCompiledTemplate(compiled, item);\n }\n }\n // Also process attributes (e.g. data-key, href, src, etc.)\n cloneAttributeTemplates(clone, item);\n return clone;\n}\n\n/**\n * Update an existing cloned element's text nodes with new item data.\n * Uses the cached original template patterns from the WeakMap.\n */\nfunction updateTemplateData(el: Element, item: unknown): void {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);\n while (walker.nextNode()) {\n const node = walker.currentNode;\n const compiled = templateTexts.get(node);\n if (compiled) {\n node.textContent = evaluateCompiledTemplate(compiled, item);\n }\n }\n}\n\n/** WeakMap for caching compiled attribute templates */\nconst templateAttrs = new WeakMap<Element, Array<{ attr: string; compiled: CompiledTemplate }>>();\n\n/**\n * Process attribute templates on a cloned element and its descendants.\n * Pre-compiles patterns and resolves them with item data.\n */\n/** Directive attribute names/prefixes that bindElement processes — these must NOT be\n * template-interpolated by cloneAttributeTemplates because their values will be\n * evaluated by the reactive binding system using the child scope. */\nconst DIRECTIVE_ATTR_PREFIXES = [\n 'data-list', 'data-show', 'data-text', 'data-if', 'data-model',\n 'data-on:', 'data-class:', 'data-bind:', 'data-computed', 'data-persist', 'data-fetch',\n 'data-transition', 'data-transition:',\n];\nfunction isDirectiveAttr(name: string): boolean {\n for (const prefix of DIRECTIVE_ATTR_PREFIXES) {\n if (name === prefix || name.startsWith(prefix)) return true;\n }\n return false;\n}\n\nfunction splitClassTokens(raw: string | null): string[] {\n if (!raw) return [];\n return raw\n .trim()\n .split(/\\s+/)\n .map((t) => t.trim())\n .filter(Boolean);\n}\n\nfunction parseDurationTokenMs(token: string): number | null {\n const t = token.trim().toLowerCase();\n if (t.endsWith('ms')) {\n const n = Number(t.slice(0, -2));\n return Number.isFinite(n) && n >= 0 ? n : null;\n }\n if (t.endsWith('s')) {\n const n = Number(t.slice(0, -1));\n return Number.isFinite(n) && n >= 0 ? n * 1000 : null;\n }\n return null;\n}\n\nfunction parseClassTokensAndDuration(raw: string | null): { classes: string[]; durationMs?: number } {\n const classes: string[] = [];\n let durationMs: number | undefined;\n for (const token of splitClassTokens(raw)) {\n const parsed = parseDurationTokenMs(token);\n if (parsed != null) {\n durationMs = parsed;\n } else {\n classes.push(token);\n }\n }\n return { classes, durationMs };\n}\n\nfunction uniqueTokens(tokens: string[]): string[] {\n return Array.from(new Set(tokens.filter(Boolean)));\n}\n\nfunction parseCssTimeListMs(raw: string): number[] {\n if (!raw) return [];\n return raw\n .split(',')\n .map((part) => parseDurationTokenMs(part.trim()))\n .filter((ms): ms is number => ms != null);\n}\n\nfunction maxCombinedTimingsMs(durations: number[], delays: number[]): number {\n if (durations.length === 0 && delays.length === 0) return 0;\n if (durations.length === 0) return Math.max(...delays, 0);\n if (delays.length === 0) return Math.max(...durations, 0);\n\n const len = Math.max(durations.length, delays.length);\n let max = 0;\n for (let i = 0; i < len; i++) {\n const d = durations[i % durations.length] ?? 0;\n const delay = delays[i % delays.length] ?? 0;\n if (d + delay > max) max = d + delay;\n }\n return max;\n}\n\nfunction resolveTransitionDurationMs(el: HTMLElement, explicitMs?: number): number {\n if (typeof explicitMs === 'number') return explicitMs;\n const cs = window.getComputedStyle(el);\n const trans = maxCombinedTimingsMs(\n parseCssTimeListMs(cs.transitionDuration),\n parseCssTimeListMs(cs.transitionDelay),\n );\n const anim = maxCombinedTimingsMs(\n parseCssTimeListMs(cs.animationDuration),\n parseCssTimeListMs(cs.animationDelay),\n );\n return Math.max(trans, anim);\n}\n\nfunction getTransitionState(el: HTMLElement): ElementTransitionState {\n const existing = (el as any)[TRANSITION_STATE_SYM] as ElementTransitionState | undefined;\n if (existing) return existing;\n const created: ElementTransitionState = { token: 0, cancel: null };\n (el as any)[TRANSITION_STATE_SYM] = created;\n return created;\n}\n\nfunction clearTransitionState(el: HTMLElement): void {\n const state = (el as any)[TRANSITION_STATE_SYM] as ElementTransitionState | undefined;\n if (state?.cancel) {\n state.cancel();\n }\n delete (el as any)[TRANSITION_STATE_SYM];\n}\n\nfunction parseTransitionSpec(el: Element): TransitionSpec | null {\n const hasTransitionAttr = el.hasAttribute('data-transition')\n || Array.from(el.attributes).some((a) => a.name.startsWith('data-transition:'));\n if (!hasTransitionAttr) return null;\n\n const base = parseClassTokensAndDuration(el.getAttribute('data-transition')).classes;\n\n const enter = parseClassTokensAndDuration(el.getAttribute('data-transition:enter'));\n const leave = parseClassTokensAndDuration(el.getAttribute('data-transition:leave'));\n const enterFrom = splitClassTokens(\n el.getAttribute('data-transition:enter-from')\n ?? el.getAttribute('data-transition:enter-start'),\n );\n const enterTo = splitClassTokens(\n el.getAttribute('data-transition:enter-to')\n ?? el.getAttribute('data-transition:enter-end'),\n );\n const leaveFrom = splitClassTokens(\n el.getAttribute('data-transition:leave-from')\n ?? el.getAttribute('data-transition:leave-start'),\n );\n const leaveTo = splitClassTokens(\n el.getAttribute('data-transition:leave-to')\n ?? el.getAttribute('data-transition:leave-end'),\n );\n\n const durationBoth = parseDurationTokenMs(el.getAttribute('data-transition:duration') ?? '');\n const enterDuration = parseDurationTokenMs(el.getAttribute('data-transition:duration-enter') ?? '')\n ?? enter.durationMs\n ?? durationBoth\n ?? undefined;\n const leaveDuration = parseDurationTokenMs(el.getAttribute('data-transition:duration-leave') ?? '')\n ?? leave.durationMs\n ?? durationBoth\n ?? undefined;\n\n return {\n enter: uniqueTokens([...base, ...enter.classes]),\n enterFrom: uniqueTokens(enterFrom),\n enterTo: uniqueTokens(enterTo),\n leave: uniqueTokens([...base, ...leave.classes]),\n leaveFrom: uniqueTokens(leaveFrom),\n leaveTo: uniqueTokens(leaveTo),\n enterDurationMs: enterDuration,\n leaveDurationMs: leaveDuration,\n };\n}\n\nfunction removeClasses(el: Element, classes: string[]): void {\n for (const cls of classes) {\n el.classList.remove(cls);\n }\n}\n\nfunction addClasses(el: Element, classes: string[]): void {\n for (const cls of classes) {\n el.classList.add(cls);\n }\n}\n\nfunction runTransitionPhase(\n el: HTMLElement,\n phaseClasses: { base: string[]; from: string[]; to: string[]; durationMs?: number },\n onDone: () => void,\n): () => void {\n const cleanupClasses = uniqueTokens([\n ...phaseClasses.base,\n ...phaseClasses.from,\n ...phaseClasses.to,\n ]);\n\n let done = false;\n let timeoutId: number | null = null;\n let raf1: number | null = null;\n let raf2: number | null = null;\n\n const finish = () => {\n if (done) return;\n done = true;\n if (timeoutId != null) window.clearTimeout(timeoutId);\n if (raf1 != null) cancelAnimationFrame(raf1);\n if (raf2 != null) cancelAnimationFrame(raf2);\n removeClasses(el, cleanupClasses);\n onDone();\n };\n\n addClasses(el, phaseClasses.base);\n addClasses(el, phaseClasses.from);\n removeClasses(el, phaseClasses.to);\n\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => {\n if (done) return;\n removeClasses(el, phaseClasses.from);\n addClasses(el, phaseClasses.to);\n\n const ms = resolveTransitionDurationMs(el, phaseClasses.durationMs);\n if (ms <= 0) {\n finish();\n return;\n }\n timeoutId = window.setTimeout(finish, ms + 25);\n });\n });\n\n return finish;\n}\n\n/**\n * Insert an element into the DOM and optionally run an enter transition.\n * The element is functional immediately — the animation is purely visual.\n */\nfunction transitionInsert(\n el: HTMLElement,\n parent: Node,\n ref: Node | null,\n spec: TransitionSpec | null,\n): void {\n parent.insertBefore(el, ref);\n if (!spec) return;\n\n const state = getTransitionState(el);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n\n state.cancel = runTransitionPhase(\n el,\n {\n base: spec.enter,\n from: spec.enterFrom,\n to: spec.enterTo,\n durationMs: spec.enterDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token === token) current.cancel = null;\n },\n );\n}\n\n/**\n * Run a leave transition on an element, then call onDone when complete.\n * Sets data-forma-leaving immediately so the element is excluded from diffs.\n * If no transition spec, calls onDone synchronously.\n */\nfunction transitionRemove(\n el: HTMLElement,\n spec: TransitionSpec | null,\n onDone: () => void,\n): void {\n // Guard: if already leaving, don't start another leave\n if (el.hasAttribute('data-forma-leaving')) {\n onDone();\n return;\n }\n\n if (!spec) {\n onDone();\n return;\n }\n\n el.setAttribute('data-forma-leaving', '');\n\n const state = getTransitionState(el);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n\n state.cancel = runTransitionPhase(\n el,\n {\n base: spec.leave,\n from: spec.leaveFrom,\n to: spec.leaveTo,\n durationMs: spec.leaveDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token === token) current.cancel = null;\n el.removeAttribute('data-forma-leaving');\n onDone();\n },\n );\n}\n\nfunction applyShowVisibility(\n el: HTMLElement,\n visible: boolean,\n transition: TransitionSpec | null,\n initial: boolean,\n): void {\n if (!transition || initial) {\n el.style.display = visible ? '' : 'none';\n if (transition) {\n removeClasses(el, uniqueTokens([\n ...transition.enter, ...transition.enterFrom, ...transition.enterTo,\n ...transition.leave, ...transition.leaveFrom, ...transition.leaveTo,\n ]));\n }\n return;\n }\n\n const state = getTransitionState(el);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n state.cancel = null;\n\n if (visible) {\n el.style.display = '';\n state.cancel = runTransitionPhase(\n el,\n {\n base: transition.enter,\n from: transition.enterFrom,\n to: transition.enterTo,\n durationMs: transition.enterDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token === token) current.cancel = null;\n },\n );\n return;\n }\n\n state.cancel = runTransitionPhase(\n el,\n {\n base: transition.leave,\n from: transition.leaveFrom,\n to: transition.leaveTo,\n durationMs: transition.leaveDurationMs,\n },\n () => {\n const current = getTransitionState(el);\n if (current.token !== token) return;\n el.style.display = 'none';\n current.cancel = null;\n },\n );\n}\n\nfunction cloneAttributeTemplates(el: Element, item: unknown): void {\n const all = [el, ...Array.from(el.querySelectorAll('*'))];\n for (const node of all) {\n const entries: Array<{ attr: string; compiled: CompiledTemplate }> = [];\n for (const attr of Array.from(node.attributes)) {\n // Skip directive attributes — they'll be evaluated by bindElement with the child scope\n if (isDirectiveAttr(attr.name)) continue;\n if (attr.value.includes('{item')) {\n const compiled = compileTemplate(attr.value);\n entries.push({ attr: attr.name, compiled });\n const value = evaluateCompiledTemplate(compiled, item);\n if (isUnsafeAttrBinding(attr.name, value)) {\n node.removeAttribute(attr.name);\n } else {\n node.setAttribute(attr.name, value);\n }\n }\n }\n if (entries.length > 0) {\n templateAttrs.set(node, entries);\n }\n }\n}\n\n// ── Chained access / optional chaining parser ──\n\n/**\n * Represents a single step in a property/method chain.\n * - type 'prop': property access (`.name` or `?.name`)\n * - type 'call': method call (`.method(args)` or `?.method(args)`)\n */\ninterface ChainStep {\n type: 'prop' | 'call';\n name: string;\n optional: boolean; // true for `?.`\n argFns?: Array<() => unknown>; // only for 'call' type\n}\n\n/**\n * Parse an expression that starts with an identifier and is followed by\n * zero or more chain steps: `.prop`, `?.prop`, `.method(args)`, `?.method(args)`.\n * Returns null if the expression doesn't match this pattern.\n *\n * Handles: \"user.name\", \"user?.name\", \"str.trim().toUpperCase()\",\n * \"obj?.method()\", \"items.filter(x).map(y)\", \"a.b.c.d\" (any depth).\n */\nfunction parseChainedAccess(expr: string, scope: Scope): (() => unknown) | null {\n // Must start with an identifier (or Math)\n let pos = 0;\n const identMatch = expr.match(/^[a-zA-Z_$]\\w*/);\n if (!identMatch) return null;\n\n const rootName = identMatch[0]!;\n pos = rootName.length;\n\n // Must have at least one chain step after the identifier\n if (pos >= expr.length) return null;\n // Next char must be '.' or '?' (for '?.')\n if (expr[pos] !== '.' && !(expr[pos] === '?' && expr[pos + 1] === '.')) return null;\n\n const steps: ChainStep[] = [];\n\n while (pos < expr.length) {\n let optional = false;\n\n // Check for `?.` (optional chaining) or `.` (regular access)\n if (expr[pos] === '?' && expr[pos + 1] === '.') {\n optional = true;\n pos += 2;\n } else if (expr[pos] === '.') {\n pos += 1;\n } else {\n // Not a chain continuation — unexpected character\n return null;\n }\n\n // Parse property/method name\n const nameMatch = expr.slice(pos).match(/^\\w+/);\n if (!nameMatch) return null;\n const name = nameMatch[0]!;\n pos += name.length;\n\n if (UNSAFE_METHOD_NAMES.has(name)) return () => undefined;\n\n // Check if this is a method call: followed by `(`\n if (pos < expr.length && expr[pos] === '(') {\n const balanced = readBalancedSegment(expr, pos, '(', ')');\n if (!balanced) return null;\n\n const argsRaw = balanced.inner.trim();\n const argFns: Array<() => unknown> = [];\n for (const arg of splitCallArgs(argsRaw)) {\n const parsed = parseExpression(arg, scope);\n if (!parsed) return null;\n argFns.push(parsed);\n }\n\n steps.push({ type: 'call', name, optional, argFns });\n pos = balanced.end + 1;\n } else {\n steps.push({ type: 'prop', name, optional });\n }\n }\n\n // If we didn't consume the entire expression, this isn't a simple chain\n if (pos !== expr.length) return null;\n\n // If there are no steps, fall back (just an identifier)\n if (steps.length === 0) return null;\n\n // Build the root expression getter\n const rootExpr = rootName === 'Math'\n ? (() => Math)\n : (() => scope.getters[rootName]?.());\n\n return () => {\n let val: any = rootExpr();\n for (const step of steps) {\n if (val == null) {\n if (step.optional) return undefined;\n // Non-optional access on null/undefined — use ?. semantics\n // (existing behavior used ?. for dot access)\n return undefined;\n }\n if (step.type === 'prop') {\n val = val[step.name];\n } else {\n const method = val[step.name];\n if (typeof method !== 'function') return undefined;\n const args = step.argFns!.map(fn => fn());\n val = method.apply(val, args);\n }\n }\n return val;\n };\n}\n\n// ── CSP-safe expression parser ──\n\n/**\n * Parse a simple expression into a closure that evaluates against the scope.\n * Handles common patterns without requiring `new Function()` or `eval`.\n * Returns null if the expression is too complex for the CSP-safe parser.\n */\nfunction parseExpression(expr: string, scope: Scope): (() => unknown) | null {\n // Check expression factory cache first\n const cachedFactory = expressionCache.get(expr);\n if (cachedFactory) return cachedFactory(scope);\n\n const result = parseExpressionUncached(expr, scope);\n\n // Cache factory functions for common simple patterns that can be re-bound to different scopes\n if (result !== null) {\n // Cache factories for simple patterns (identifier, dot access, etc.)\n // Complex patterns with sub-expressions are scope-dependent and harder to cache as factories,\n // but we can still cache the structural match result for them.\n // Keyword literals MUST be checked before RE_IDENTIFIER — \"true\", \"false\",\n // \"null\", \"undefined\" all match /^[a-zA-Z_$]\\w*$/ and would be incorrectly\n // cached as scope variable lookups (returning undefined).\n if (expr === 'true' || expr === 'false' || expr === 'null' || expr === 'undefined') {\n const val = expr === 'true' ? true : expr === 'false' ? false : expr === 'null' ? null : undefined;\n cacheExpression(expr, () => () => val);\n } else if (RE_IDENTIFIER.test(expr)) {\n cacheExpression(expr, (s) => () => s.getters[expr]?.());\n } else if (RE_STRING_SINGLE.test(expr) || RE_STRING_DOUBLE.test(expr)) {\n const val = expr.slice(1, -1);\n cacheExpression(expr, () => () => val);\n } else if (RE_NUMBER.test(expr)) {\n const val = Number(expr);\n cacheExpression(expr, () => () => val);\n } else {\n const dotMatch = expr.match(RE_DOT_ACCESS);\n if (dotMatch) {\n const p1 = dotMatch[1]!, p2 = dotMatch[2]!;\n cacheExpression(expr, (s) => () => {\n const obj = s.getters[p1]?.();\n return (obj as any)?.[p2];\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Core expression parser — called on cache miss.\n * Uses pre-compiled module-level regexes for all pattern matching.\n */\nfunction parseExpressionUncached(expr: string, scope: Scope): (() => unknown) | null {\n expr = expr.trim();\n\n // Parenthesized group: \"(a + b)\", \"((count))\"\n const unwrapped = unwrapOuterParens(expr);\n if (unwrapped !== expr) {\n return parseExpression(unwrapped, scope);\n }\n\n // Literals first (before identifier check, since \\w matches digits)\n\n // String literals\n if (RE_STRING_SINGLE.test(expr) || RE_STRING_DOUBLE.test(expr)) {\n const val = expr.slice(1, -1);\n return () => val;\n }\n\n // Number literals\n if (RE_NUMBER.test(expr)) {\n const val = Number(expr);\n return () => val;\n }\n\n // Boolean / null / undefined literals\n if (expr === 'true') return () => true;\n if (expr === 'false') return () => false;\n if (expr === 'null') return () => null;\n if (expr === 'undefined') return () => undefined;\n\n // Simple identifier: \"count\", \"name\" (must start with letter/underscore/$)\n if (RE_IDENTIFIER.test(expr)) {\n return () => scope.getters[expr]?.();\n }\n\n // Chained access / method calls / optional chaining:\n // \"user.name\", \"user?.name\", \"str.trim().toUpperCase()\", \"obj?.method()\", \"items.filter(x).map(y)\"\n // Also handles simple dot access, deep dot access, and single method calls.\n {\n const chainResult = parseChainedAccess(expr, scope);\n if (chainResult) return chainResult;\n }\n\n // Grouped method call: \"(expr).method(args)\" — base is a parenthesized expression\n const groupedCallMatch = expr.match(RE_GROUP_METHOD_CALL);\n if (groupedCallMatch) {\n const baseRaw = groupedCallMatch[1]!.trim();\n const methodName = groupedCallMatch[2]!;\n const argsRaw = groupedCallMatch[3]!.trim();\n\n if (UNSAFE_METHOD_NAMES.has(methodName)) return () => undefined;\n\n const baseExpr = parseExpression(baseRaw, scope);\n if (!baseExpr) return null;\n\n const argFns: Array<() => unknown> = [];\n for (const arg of splitCallArgs(argsRaw)) {\n const parsed = parseExpression(arg, scope);\n if (!parsed) return null;\n argFns.push(parsed);\n }\n\n return () => {\n const base = baseExpr() as any;\n const method = base?.[methodName];\n if (typeof method !== 'function') return undefined;\n const args = argFns.map(fn => fn());\n return method.apply(base, args);\n };\n }\n\n // Negation: \"!active\", \"!user.loggedIn\"\n if (expr.startsWith('!')) {\n const inner = parseExpression(expr.slice(1).trim(), scope);\n if (inner) return () => !inner();\n }\n\n // Bracket access: \"items[0]\", \"obj['key']\"\n const bracketMatch = expr.match(RE_BRACKET);\n if (bracketMatch) {\n const objExpr = parseExpression(bracketMatch[1]!, scope);\n let key: string | number;\n const rawKey = bracketMatch[2]!;\n if (RE_DIGIT_ONLY.test(rawKey)) {\n key = Number(rawKey);\n } else {\n key = rawKey.slice(1, -1);\n }\n if (objExpr) {\n return () => (objExpr() as any)?.[key];\n }\n }\n\n // Array literal: \"[1, 2, 3]\", \"[item.name, item.id]\", \"['a', 'b']\"\n if (expr.startsWith('[')) {\n const balanced = readBalancedSegment(expr, 0, '[', ']');\n if (balanced && balanced.end === expr.length - 1) {\n const inner = balanced.inner.trim();\n if (inner === '') {\n // Empty array: []\n return () => [];\n }\n const elements = splitCallArgs(inner);\n const elementFns: Array<() => unknown> = [];\n let allParsed = true;\n for (const el of elements) {\n const parsed = parseExpression(el.trim(), scope);\n if (!parsed) { allParsed = false; break; }\n elementFns.push(parsed);\n }\n if (allParsed) {\n return () => elementFns.map(fn => fn());\n }\n }\n }\n\n // Ternary: \"expr ? a : b\"\n const ternaryMatch = expr.match(RE_TERNARY);\n if (ternaryMatch) {\n const cond = parseExpression(ternaryMatch[1]!.trim(), scope);\n const then = parseExpression(ternaryMatch[2]!.trim(), scope);\n const els = parseExpression(ternaryMatch[3]!.trim(), scope);\n if (cond && then && els) {\n return () => cond() ? then() : els();\n }\n }\n\n // Nullish coalescing: \"value ?? 'default'\"\n const nullishMatch = expr.match(RE_NULLISH);\n if (nullishMatch) {\n const left = parseExpression(nullishMatch[1]!.trim(), scope);\n const right = parseExpression(nullishMatch[2]!.trim(), scope);\n if (left && right) {\n return () => left() ?? right();\n }\n }\n\n // Logical OR: \"a || b\" (lower precedence than AND — checked first)\n const orMatch = expr.match(RE_OR);\n if (orMatch) {\n const left = parseExpression(orMatch[1]!.trim(), scope);\n const right = parseExpression(orMatch[2]!.trim(), scope);\n if (left && right) {\n return () => left() || right();\n }\n }\n\n // Logical AND: \"a && b\" (higher precedence than OR — checked after)\n const andMatch = expr.match(RE_AND);\n if (andMatch) {\n const left = parseExpression(andMatch[1]!.trim(), scope);\n const right = parseExpression(andMatch[2]!.trim(), scope);\n if (left && right) {\n return () => left() && right();\n }\n }\n\n // Comparison operators: ===, !==, ==, !=, >=, <=, >, <\n const compMatch = expr.match(RE_COMPARISON);\n if (compMatch) {\n const left = parseExpression(compMatch[1]!.trim(), scope);\n const right = parseExpression(compMatch[3]!.trim(), scope);\n if (left && right) {\n const op = compMatch[2]!;\n return () => {\n const l = left(), r = right();\n switch (op) {\n case '===': return l === r;\n case '!==': return l !== r;\n case '==': return l == r;\n case '!=': return l != r;\n case '>': return (l as number) > (r as number);\n case '<': return (l as number) < (r as number);\n case '>=': return (l as number) >= (r as number);\n case '<=': return (l as number) <= (r as number);\n }\n };\n }\n }\n\n // Arithmetic: +, -, *, /, %\n // Addition/subtraction first (lower precedence — checked first), then * / %\n const addMatch = expr.match(RE_ADD);\n if (addMatch) {\n const left = parseExpression(addMatch[1]!.trim(), scope);\n const right = parseExpression(addMatch[3]!.trim(), scope);\n if (left && right) {\n const op = addMatch[2]!;\n return () => {\n const l = left(), r = right();\n if (op === '+') return (l as any) + (r as any);\n return (l as number) - (r as number);\n };\n }\n }\n\n // Multiplication / division / modulo (higher precedence — checked after addition)\n const mulMatch = expr.match(RE_MUL);\n if (mulMatch) {\n const left = parseExpression(mulMatch[1]!.trim(), scope);\n const right = parseExpression(mulMatch[3]!.trim(), scope);\n if (left && right) {\n const op = mulMatch[2]!;\n return () => {\n const l = left() as number, r = right() as number;\n switch (op) {\n case '*': return l * r;\n case '/': return l / r;\n case '%': return l % r;\n }\n };\n }\n }\n\n // Template literals: `Hello ${name}`\n const tmplMatch = expr.match(RE_TEMPLATE_LIT);\n if (tmplMatch) {\n const raw = tmplMatch[1]!;\n // Pre-split template literal into static/dynamic segments\n const staticParts: string[] = [];\n const dynamicFns: (() => unknown)[] = [];\n let lastIndex = 0;\n // Create a fresh regex since RE_TEMPLATE_INTERP has the 'g' flag\n const re = new RegExp(RE_TEMPLATE_INTERP.source, 'g');\n let m: RegExpExecArray | null;\n while ((m = re.exec(raw)) !== null) {\n staticParts.push(raw.slice(lastIndex, m.index));\n const inner = parseExpression(m[1]!.trim(), scope);\n if (!inner) return null; // Can't parse inner expression\n dynamicFns.push(inner);\n lastIndex = re.lastIndex;\n }\n staticParts.push(raw.slice(lastIndex));\n\n // Optimized evaluation: concatenate instead of map+join\n return () => {\n let result = staticParts[0]!;\n for (let i = 0; i < dynamicFns.length; i++) {\n result += String(dynamicFns[i]!() ?? '');\n result += staticParts[i + 1] ?? '';\n }\n return result;\n };\n }\n\n // Can't parse — return null for fallback\n return null;\n}\n\n// ── Expression evaluator ──\n\nfunction getScopeCache<T>(cache: WeakMap<Scope, Map<string, T>>, scope: Scope): Map<string, T> {\n let scoped = cache.get(scope);\n if (!scoped) {\n scoped = new Map<string, T>();\n cache.set(scope, scoped);\n }\n return scoped;\n}\n\n/** Build an actionable hint for expressions/handlers that failed CSP-safe parsing. */\nfunction cspExpressionHint(expr: string): string {\n if (expr.includes('...')) {\n return `Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).`;\n }\n // Note: optional chaining (?.) is now supported by the CSP-safe parser.\n if (expr.includes('=>')) {\n return `Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).`;\n }\n return `Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true).`;\n}\n\nfunction buildEvaluator(expr: string, scope: Scope): () => unknown {\n const cleaned = expr.replace(RE_STRIP_BRACES, '').trim();\n const cache = getScopeCache(scopeExpressionCache, scope);\n const cached = cache.get(cleaned);\n if (cached) return cached;\n\n // Try CSP-safe parsing first\n const cspFn = parseExpression(cleaned, scope);\n if (cspFn) {\n cache.set(cleaned, cspFn);\n return cspFn;\n }\n\n // Fallback to Function constructor (for complex expressions)\n // __EVAL_CAPABLE__ is a compile-time constant — in the hardened build,\n // esbuild constant-folds it to false and eliminates this entire block,\n // ensuring no `new Function` appears in the hardened dist.\n if (!__EVAL_CAPABLE__ || !_allowUnsafeEval) {\n dbg('buildEvaluator: blocked unsafe eval fallback for expression:', cleaned);\n reportDiagnostic('expression-unsupported', cleaned, cspExpressionHint(cleaned));\n const blocked = () => undefined;\n cache.set(cleaned, blocked);\n return blocked;\n }\n\n // Apply UNSAFE_METHOD_NAMES blocklist before new Function — prevents\n // prototype-pollution and eval injection via the unsafe eval path.\n const blockedMethod = findBlockedMethod(cleaned);\n if (blockedMethod) {\n const msg = `Blocked unsafe method \"${blockedMethod}\" in expression`;\n reportDiagnostic('expression-unsupported', cleaned, msg);\n throw new Error(`[FormaJS] ${msg}: ${cleaned}`);\n }\n\n try {\n const fn = new Function('__scope', `with(__scope) { return (${cleaned}); }`);\n // Cache proxy — scope.getters is a mutable object, so the proxy\n // always reflects current state without needing to be recreated.\n const proxy = new Proxy(Object.create(null) as Record<string, unknown>, {\n has(_, key: string) { return key in scope.getters; },\n get(_, key: string) {\n // Defense-in-depth: block dangerous property access even if\n // findBlockedMethod missed a bypass (e.g. computed bracket names)\n if (UNSAFE_METHOD_NAMES.has(key)) return undefined;\n const g = scope.getters[key];\n return g ? g() : undefined;\n },\n });\n const unsafe = () => fn(proxy);\n cache.set(cleaned, unsafe);\n return unsafe;\n } catch {\n reportDiagnostic('expression-unsupported', cleaned, 'Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.');\n const failed = () => undefined;\n cache.set(cleaned, failed);\n return failed;\n }\n}\n\n// ── CSP-safe handler parser ──\n\n/**\n * Parse common handler patterns without `new Function()`.\n * Returns null if the expression is too complex for the CSP-safe parser.\n */\nfunction parseHandler(expr: string, scope: Scope): ((e: Event) => void) | null {\n const normalized = expr.trim().replace(/;+$/g, '').trim();\n if (!normalized) return null;\n\n const ifHandler = parseIfHandler(normalized, scope);\n if (ifHandler) return ifHandler;\n\n const stmts = splitTopLevelStatements(normalized);\n if (stmts.length > 1) {\n const handlers = stmts.map(s => parseHandler(s, scope));\n if (handlers.every(h => h !== null)) {\n return (e: Event) => {\n batch(() => {\n for (const h of handlers) h!(e);\n });\n };\n }\n return null;\n }\n\n const single = stmts[0] ?? normalized;\n\n // count++ or count--\n const incrMatch = single.match(RE_POST_INCR);\n if (incrMatch) {\n const name = incrMatch[1]!;\n const op = incrMatch[2]!;\n return () => {\n batch(() => {\n const val = scope.getters[name]?.() as number ?? 0;\n scope.setters[name]?.(op === '++' ? val + 1 : val - 1);\n });\n };\n }\n\n // ++count or --count\n const preIncrMatch = single.match(RE_PRE_INCR);\n if (preIncrMatch) {\n const op = preIncrMatch[1]!;\n const name = preIncrMatch[2]!;\n return () => {\n batch(() => {\n const val = scope.getters[name]?.() as number ?? 0;\n scope.setters[name]?.(op === '++' ? val + 1 : val - 1);\n });\n };\n }\n\n // prop = !prop (toggle)\n const toggleMatch = single.match(RE_TOGGLE);\n if (toggleMatch && toggleMatch[1] === toggleMatch[2]) {\n const name = toggleMatch[1]!;\n return () => {\n batch(() => {\n scope.setters[name]?.(!scope.getters[name]?.());\n });\n };\n }\n\n // prop = expr (simple assignment)\n const assignMatch = single.match(RE_ASSIGN);\n if (assignMatch) {\n const name = assignMatch[1]!;\n const valExpr = parseExpression(assignMatch[2]!.trim(), scope);\n if (valExpr) {\n if (_debug) dbg(`parseHandler: assignment \"${name} = ...\" — setter exists:`, !!scope.setters[name], ', getter exists:', !!scope.getters[name]);\n return () => {\n batch(() => {\n const val = valExpr();\n if (_debug) dbg(`SETTER: ${name} = ${val} (was: ${scope.getters[name]?.()})`);\n scope.setters[name]?.(val);\n });\n };\n }\n }\n\n // prop += value, prop -= value, prop *= value, prop /= value\n const compoundMatch = single.match(RE_COMPOUND);\n if (compoundMatch) {\n const name = compoundMatch[1]!;\n const op = compoundMatch[2]!;\n const valExpr = parseExpression(compoundMatch[3]!.trim(), scope);\n if (valExpr) {\n return () => {\n batch(() => {\n const current = scope.getters[name]?.() as number ?? 0;\n const val = valExpr() as number;\n switch (op) {\n case '+=': scope.setters[name]?.(current + val); break;\n case '-=': scope.setters[name]?.(current - val); break;\n case '*=': scope.setters[name]?.(current * val); break;\n case '/=': scope.setters[name]?.(current / val); break;\n }\n });\n };\n }\n }\n\n // $refetch('id') — imperative data-fetch trigger (CSP-safe)\n const refetchMatch = single.match(RE_REFETCH_CALL);\n if (refetchMatch) {\n const fetchId = refetchMatch[1]!;\n return () => $refetch(fetchId);\n }\n\n return null;\n}\n\nfunction buildHandler(expr: string, scope: Scope): HandlerBuildResult {\n // Strip balanced outer braces (e.g., `{count++}` → `count++`) but NOT\n // unbalanced ones like `if (x) { a = b }` where the `}` is a code-block close.\n let cleaned = expr.trim();\n if (cleaned.startsWith('{')) {\n const seg = readBalancedSegment(cleaned, 0, '{', '}');\n if (seg && seg.end === cleaned.length - 1) {\n cleaned = seg.inner.trim();\n }\n }\n const cache = getScopeCache(scopeHandlerCache, scope);\n const cached = cache.get(cleaned);\n if (cached) return cached;\n\n // Try CSP-safe parsing first\n const cspFn = parseHandler(cleaned, scope);\n if (cspFn) {\n const result: HandlerBuildResult = { handler: cspFn, supported: true };\n cache.set(cleaned, result);\n return result;\n }\n\n // Fallback to Function constructor (for complex expressions)\n // __EVAL_CAPABLE__ gate ensures hardened build eliminates this entire block.\n if (!__EVAL_CAPABLE__ || !_allowUnsafeEval) {\n dbg('buildHandler: blocked unsafe eval fallback for expression:', cleaned);\n reportDiagnostic('handler-unsupported', cleaned, cspExpressionHint(cleaned));\n const result: HandlerBuildResult = {\n handler: () => {},\n supported: false,\n };\n cache.set(cleaned, result);\n return result;\n }\n\n // Apply UNSAFE_METHOD_NAMES blocklist before new Function — prevents\n // prototype-pollution and eval injection via the unsafe eval path.\n const blockedMethod = findBlockedMethod(cleaned);\n if (blockedMethod) {\n const msg = `Blocked unsafe method \"${blockedMethod}\" in handler`;\n reportDiagnostic('handler-unsupported', cleaned, msg);\n throw new Error(`[FormaJS] ${msg}: ${cleaned}`);\n }\n\n try {\n // Accept both `$event` and bare `event` — Claude sometimes generates either.\n const fn = new Function('__scope', '$event', 'event', `with(__scope) { ${cleaned} }`);\n // Cache proxy — scope.getters/setters are mutable objects, so the proxy\n // always reflects current state without needing to be recreated.\n const proxy = new Proxy(Object.create(null) as Record<string, unknown>, {\n has(_, key: string) {\n // Do NOT intercept '$event' or 'event' — let them fall through to\n // function parameters so $event.key, event.stopPropagation(), etc. work.\n if (key === '$event' || key === 'event') return false;\n return key in scope.getters || key in scope.setters;\n },\n get(_, key: string) {\n // Defense-in-depth: block dangerous property access\n if (UNSAFE_METHOD_NAMES.has(key)) return undefined;\n const g = scope.getters[key];\n return g ? g() : undefined;\n },\n set(_, key: string, value: unknown) {\n const s = scope.setters[key];\n if (s) s(value);\n return true;\n },\n });\n const unsafeHandler = (e: Event) => {\n batch(() => fn(proxy, e, e));\n };\n const result: HandlerBuildResult = {\n handler: unsafeHandler,\n supported: true,\n };\n cache.set(cleaned, result);\n return result;\n } catch {\n reportDiagnostic('handler-unsupported', cleaned, 'Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.');\n const result: HandlerBuildResult = {\n handler: () => {},\n supported: false,\n };\n cache.set(cleaned, result);\n return result;\n }\n}\n\n// ── State initialization ──\n\nconst FORBIDDEN_STATE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nfunction parseState(raw: string): Record<string, unknown> {\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw);\n } catch {\n if (_debug) {\n dbg('parseState: Invalid JSON in data-forma-state — use valid JSON with quoted keys. Got:', raw.slice(0, 200));\n }\n return {};\n }\n // Strip prototype-pollution keys\n for (const key of FORBIDDEN_STATE_KEYS) {\n if (key in parsed) delete parsed[key];\n }\n return parsed;\n}\n\n// ── DOM scanner ──\n\nfunction initScope(stateEl: Element): Scope {\n const raw = stateEl.getAttribute('data-forma-state') ?? '{}';\n const state = parseState(raw);\n const keys = Object.keys(state);\n if (_debug) {\n dbg('initScope: parsed', keys.length, 'keys:', keys.join(', '));\n if (keys.length === 0) {\n dbg('initScope: WARNING — empty state! Raw attribute:', raw.slice(0, 200));\n }\n }\n const getters: Record<string, Getter> = {};\n const setters: Record<string, Setter> = {};\n\n for (const [key, initial] of Object.entries(state)) {\n const [get, set] = createSignal(initial);\n getters[key] = get;\n setters[key] = set as Setter;\n }\n\n // Inject $refetch as a callable getter so handlers can use $refetch('id')\n getters['$refetch'] = () => $refetch;\n\n return { getters, setters };\n}\n\n// ── Safe $el proxy ──\n// Allowlist of properties exposed on the $el magic. Everything else\n// (ownerDocument, parentNode, innerHTML, …) returns undefined so that\n// attacker-authored expressions cannot escape to window/document.\n\nconst SAFE_EL_PROPS = new Set([\n // Identity & attributes\n 'id', 'className', 'tagName', 'nodeName',\n 'getAttribute', 'setAttribute', 'removeAttribute', 'hasAttribute', 'toggleAttribute',\n 'dataset', 'classList',\n // Content\n 'textContent', 'innerText',\n // Form elements\n 'value', 'checked', 'disabled', 'selected', 'type', 'name', 'placeholder',\n 'readOnly', 'required', 'min', 'max', 'step', 'pattern',\n // Dimensions & position\n 'getBoundingClientRect', 'offsetWidth', 'offsetHeight',\n 'offsetTop', 'offsetLeft', 'clientWidth', 'clientHeight',\n 'scrollWidth', 'scrollHeight', 'scrollTop', 'scrollLeft',\n // Style\n 'style', 'hidden',\n // Focus & interaction\n 'focus', 'blur', 'click', 'scrollIntoView', 'scrollTo',\n // Traversal (safe — returns elements, not window/document)\n 'closest', 'matches', 'querySelector', 'querySelectorAll',\n 'children', 'childElementCount', 'firstElementChild', 'lastElementChild',\n 'nextElementSibling', 'previousElementSibling',\n]);\n\nfunction createSafeElProxy(el: Element): Element {\n return new Proxy(el, {\n get(target, prop) {\n if (typeof prop === 'symbol') return Reflect.get(target, prop);\n if (!SAFE_EL_PROPS.has(prop)) return undefined;\n const val = Reflect.get(target, prop);\n return typeof val === 'function' ? val.bind(target) : val;\n },\n set(target, prop, value) {\n if (typeof prop === 'symbol') return false;\n if (!SAFE_EL_PROPS.has(prop)) return false;\n return Reflect.set(target, prop, value);\n },\n });\n}\n\nfunction bindElement(el: Element, scope: Scope, disposers: (() => void)[]): void {\n // Inject per-element magics: $el and $dispatch\n // Each element gets its own child scope so $el resolves to the correct element.\n const elMagics: Record<string, unknown> = {\n $el: createSafeElProxy(el),\n $dispatch: (name: string, detail?: unknown) => {\n el.dispatchEvent(new CustomEvent(name, {\n bubbles: true,\n composed: true, // crosses Shadow DOM boundaries (important for <forma-stage>)\n detail,\n }));\n },\n };\n scope = createChildScope(scope, elMagics);\n\n // When the server provides a directive map, we know exactly which directives\n // this element has. Skip getAttribute calls for directives it doesn't have.\n // `known` is null when no map is available (fallback: check everything).\n const known = getDirectives(el);\n\n // data-computed=\"name = expr\" or \"a = expr1; b = expr2\"\n const computedAttr = (!known || known.has('data-computed')) ? el.getAttribute('data-computed') : null;\n if (computedAttr) {\n // Split multi-statement computed: \"a = expr1; b = expr2; c = expr3\"\n // Uses lookahead to split at \"; identifier =\" boundaries without\n // breaking arrow functions (=>) or comparisons (===, ==).\n const parts = computedAttr.split(/;\\s*(?=\\w+\\s*=[^=])/);\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const match = trimmed.match(RE_COMPUTED);\n if (match) {\n const name = match[1]!;\n const expr = match[2]!;\n // Remove the computed name from getters before building evaluator\n // to prevent self-referential cycle (computed reading itself)\n const prevGetter = scope.getters[name];\n delete scope.getters[name];\n const evaluate = buildEvaluator(`{${expr}}`, scope);\n const getter = createComputed(evaluate);\n scope.getters[name] = getter;\n // Keep the original setter so manual overrides still work\n if (!prevGetter) {\n // If there was no initial state entry, remove the setter too\n delete scope.setters[name];\n }\n }\n }\n }\n\n // data-text=\"{expr}\"\n const textExpr = (!known || known.has('data-text')) ? el.getAttribute('data-text') : null;\n if (textExpr) {\n const evaluate = buildEvaluator(textExpr, scope);\n const dispose = internalEffect(() => {\n setElementTextFast(el, toTextValue(evaluate()));\n });\n disposers.push(dispose);\n }\n\n // data-show=\"{expr}\"\n const showExpr = (!known || known.has('data-show')) ? el.getAttribute('data-show') : null;\n if (showExpr) {\n const evaluate = buildEvaluator(showExpr, scope);\n const transition = parseTransitionSpec(el);\n if (_debug) {\n const tag = el.tagName.toLowerCase();\n const cls = el.className ? `.${String(el.className).split(' ')[0]}` : '';\n dbg(`bindElement: data-show=\"${showExpr}\" on <${tag}${cls}>`);\n }\n let initialized = false;\n const dispose = internalEffect(() => {\n const visible = !!evaluate();\n if (_debug) dbg(`data-show effect: \"${showExpr}\" → ${visible}`);\n applyShowVisibility(el as HTMLElement, visible, transition, !initialized);\n initialized = true;\n });\n disposers.push(dispose);\n if (transition) {\n disposers.push(() => clearTransitionState(el as HTMLElement));\n }\n }\n\n // data-if=\"{expr}\" — conditional DOM insertion/removal with optional transitions\n const ifExpr = (!known || known.has('data-if')) ? el.getAttribute('data-if') : null;\n if (ifExpr) {\n const evaluate = buildEvaluator(ifExpr, scope);\n const transition = parseTransitionSpec(el);\n const placeholder = document.createComment('forma-if');\n const parent = el.parentNode;\n let inserted = true;\n let initialized = false;\n\n const dispose = internalEffect(() => {\n const show = !!evaluate();\n\n if (show && !inserted) {\n // Cancel any in-flight leave\n clearTransitionState(el as HTMLElement);\n el.removeAttribute('data-forma-leaving');\n if (initialized && transition) {\n transitionInsert(el as HTMLElement, parent!, placeholder, transition);\n } else {\n parent?.insertBefore(el, placeholder);\n }\n inserted = true;\n } else if (!show && inserted) {\n if (initialized && transition) {\n transitionRemove(el as HTMLElement, transition, () => {\n if (el.parentNode) {\n parent?.insertBefore(placeholder, el);\n el.remove();\n }\n });\n } else {\n parent?.insertBefore(placeholder, el);\n el.remove();\n }\n inserted = false;\n }\n initialized = true;\n });\n\n disposers.push(dispose);\n if (transition) {\n disposers.push(() => clearTransitionState(el as HTMLElement));\n }\n }\n\n // data-model=\"{prop}\"\n const modelExpr = (!known || known.has('data-model')) ? el.getAttribute('data-model') : null;\n if (modelExpr) {\n const prop = modelExpr.replace(RE_STRIP_BRACES, '').trim();\n const getter = scope.getters[prop];\n const setter = scope.setters[prop];\n if (getter && setter) {\n const input = el as HTMLInputElement;\n const dispose = internalEffect(() => {\n const val = getter();\n if (input.type === 'checkbox') {\n input.checked = !!val;\n } else {\n input.value = String(val ?? '');\n }\n });\n disposers.push(dispose);\n const event = input.type === 'checkbox' ? 'change' : 'input';\n const onModelInput = () => {\n if (input.type === 'checkbox') {\n setter(input.checked);\n } else if (input.type === 'number' || input.type === 'range') {\n setter(Number(input.value));\n } else {\n setter(input.value);\n }\n };\n input.addEventListener(event, onModelInput);\n disposers.push(() => {\n input.removeEventListener(event, onModelInput);\n });\n }\n }\n\n // Single-pass over attributes for data-on:*, data-class:*, data-bind:*\n // When directive map is available, skip the loop entirely if none of these are present.\n const hasColonDirectives = !known || hasAnyPrefix(known, 'data-on:', 'data-class:', 'data-bind:');\n const attrs = el.attributes;\n if (hasColonDirectives) for (let i = 0; i < attrs.length; i++) {\n const attr = attrs[i]!;\n const name = attr.name;\n\n if (name.startsWith('data-on:')) {\n const event = name.slice(8); // 'data-on:'.length === 8\n const built = buildHandler(attr.value, scope);\n const handler = built.handler;\n if (_debug) {\n const tag = el.tagName.toLowerCase();\n const id = el.id ? `#${el.id}` : '';\n const cls = el.className ? `.${String(el.className).split(' ')[0]}` : '';\n dbg(`bindElement: data-on:${event}=\"${attr.value}\" on <${tag}${id}${cls}>`);\n }\n if (!built.supported) {\n el.setAttribute('data-forma-handler-error', 'unsupported');\n } else if (el.hasAttribute('data-forma-handler-error')) {\n el.removeAttribute('data-forma-handler-error');\n }\n if (_debug) {\n const attrVal = attr.value;\n const tracedHandler = (e: Event) => {\n dbg(`HANDLER FIRED: data-on:${event}=\"${attrVal}\"`, 'isTrusted:', e.isTrusted);\n handler(e);\n };\n el.addEventListener(event, tracedHandler);\n disposers.push(() => { el.removeEventListener(event, tracedHandler); });\n } else {\n el.addEventListener(event, handler);\n disposers.push(() => { el.removeEventListener(event, handler); });\n }\n } else if (name.startsWith('data-class:')) {\n const cls = name.slice(11); // 'data-class:'.length === 11\n const evaluate = buildEvaluator(attr.value, scope);\n const dispose = internalEffect(() => {\n el.classList.toggle(cls, !!evaluate());\n });\n disposers.push(dispose);\n } else if (name.startsWith('data-bind:')) {\n const attrName = name.slice(10); // 'data-bind:'.length === 10\n const evaluate = buildEvaluator(attr.value, scope);\n const dispose = internalEffect(() => {\n const val = evaluate();\n if (val == null || val === false) {\n el.removeAttribute(attrName);\n } else {\n const str = String(val);\n // Drop event-handler and dangerous-URL bindings — a bound value from\n // state/data-fetch must not be able to inject javascript: URLs or\n // inline handlers. Applies to standard and hardened builds alike.\n if (isUnsafeAttrBinding(attrName, str)) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, str);\n }\n }\n });\n disposers.push(dispose);\n }\n }\n\n // data-persist=\"{prop}\"\n const persistExpr = (!known || known.has('data-persist')) ? el.getAttribute('data-persist') : null;\n if (persistExpr) {\n const prop = persistExpr.replace(RE_STRIP_BRACES, '').trim();\n const getter = scope.getters[prop];\n const setter = scope.setters[prop];\n if (getter && setter) {\n const key = 'forma:' + prop;\n try {\n const saved = localStorage.getItem(key);\n if (saved !== null) setter(JSON.parse(saved));\n } catch { /* ignore parse errors */ }\n const dispose = internalEffect(() => {\n try { localStorage.setItem(key, JSON.stringify(getter())); } catch { /* quota */ }\n });\n disposers.push(dispose);\n }\n }\n\n // data-list=\"{expr}\" — keyed reconciliation with LIS\n const listExpr = (!known || known.has('data-list')) ? el.getAttribute('data-list') : null;\n if (listExpr) {\n const evaluate = buildEvaluator(listExpr, scope);\n const templateEl = el.children[0] as Element | undefined;\n if (templateEl) {\n const template = templateEl.cloneNode(true) as Element;\n // Remove original template from DOM\n el.removeChild(templateEl);\n\n // Detect key attribute: data-key=\"{item.id}\" -> extracts \"id\"\n const keyAttr = template.getAttribute('data-key');\n const keyProp = keyAttr\n ? keyAttr.replace(RE_STRIP_ITEM_BRACES, '').trim()\n : null;\n\n // Parse transition spec from the list container element\n const listTransition = parseTransitionSpec(el);\n\n let oldItems: unknown[] = [];\n let oldNodes: Node[] = [];\n\n // For index-based keying (no data-key), we wrap items in objects\n // that carry their index so the keyFn can extract it without a\n // second argument. For property-based keying, items pass through raw.\n interface IndexWrapped { __idx: number; __item: unknown }\n\n /** Dispose all bindings stored on a clone element */\n function disposeCloneBindings(node: Node): void {\n const el = node as any;\n if (Array.isArray(el.__formaDisposers)) {\n for (const d of el.__formaDisposers) {\n try { d(); } catch { /* ensure all disposers run */ }\n }\n delete el.__formaDisposers;\n }\n }\n\n /** Clone template, bind directives via child scope */\n function createBoundClone(item: unknown, index: number): Element {\n const clone = cloneWithTemplateData(template, item);\n const childScope = createChildScope(scope, { item, index });\n const itemDisposers: (() => void)[] = [];\n bindElement(clone, childScope, itemDisposers);\n for (const desc of Array.from(clone.querySelectorAll('*'))) {\n bindElement(desc, childScope, itemDisposers);\n }\n (clone as any).__formaDisposers = itemDisposers;\n return clone;\n }\n\n /** Dispose old bindings and rebind with fresh data */\n function updateBoundClone(node: Node, item: unknown, index: number): void {\n disposeCloneBindings(node);\n updateTemplateData(node as Element, item);\n const childScope = createChildScope(scope, { item, index });\n const itemDisposers: (() => void)[] = [];\n bindElement(node as Element, childScope, itemDisposers);\n for (const desc of Array.from((node as Element).querySelectorAll('*'))) {\n bindElement(desc, childScope, itemDisposers);\n }\n (node as any).__formaDisposers = itemDisposers;\n }\n\n // Build transition hooks for reconcileList (only when transition attrs present)\n const listHooks: ListTransitionHooks | undefined = listTransition ? {\n onInsert: (node: Node) => {\n const htmlEl = node as HTMLElement;\n if (!htmlEl.setAttribute) return; // text node guard\n const state = getTransitionState(htmlEl);\n state.token += 1;\n const token = state.token;\n if (state.cancel) state.cancel();\n state.cancel = runTransitionPhase(\n htmlEl,\n {\n base: listTransition.enter,\n from: listTransition.enterFrom,\n to: listTransition.enterTo,\n durationMs: listTransition.enterDurationMs,\n },\n () => {\n const current = getTransitionState(htmlEl);\n if (current.token === token) current.cancel = null;\n },\n );\n },\n onBeforeRemove: (node: Node, done: () => void) => {\n const htmlEl = node as HTMLElement;\n if (!htmlEl.setAttribute) { done(); return; } // text node guard\n disposeCloneBindings(node);\n transitionRemove(htmlEl, listTransition, () => {\n done();\n });\n },\n } : undefined;\n\n const dispose = internalEffect(() => {\n const rawItems = evaluate();\n if (!Array.isArray(rawItems)) {\n // Remove all — dispose bindings first\n for (const n of oldNodes) {\n disposeCloneBindings(n);\n el.removeChild(n);\n }\n oldItems = [];\n oldNodes = [];\n return;\n }\n\n // Cancel any in-flight leave animations before reconciliation\n if (listTransition) {\n const leavingNodes = el.querySelectorAll('[data-forma-leaving]');\n for (const ln of Array.from(leavingNodes)) {\n clearTransitionState(ln as HTMLElement);\n ln.removeAttribute('data-forma-leaving');\n if (ln.parentNode) ln.parentNode.removeChild(ln);\n }\n }\n\n // Snapshot old nodes before reconciliation to detect removals\n const prevNodes = new Set(oldNodes);\n\n if (keyProp) {\n // ── Property-based keying ──\n const result = reconcileList(\n el,\n oldItems,\n rawItems,\n oldNodes,\n (item: unknown) => String((item as Record<string, unknown>)?.[keyProp] ?? ''),\n (item: unknown) => {\n const idx = rawItems.indexOf(item);\n return createBoundClone(item, idx);\n },\n (node: Node, item: unknown) => {\n const idx = rawItems.indexOf(item);\n updateBoundClone(node, item, idx);\n },\n undefined, // beforeNode\n listHooks,\n );\n // Dispose bindings on nodes that were removed by reconcileList\n const nextNodes = new Set(result.nodes);\n for (const n of prevNodes) {\n if (!nextNodes.has(n)) {\n // Skip nodes mid-leave — onBeforeRemove already disposed them\n if ((n as Element).hasAttribute?.('data-forma-leaving')) continue;\n disposeCloneBindings(n);\n }\n }\n oldItems = result.items;\n oldNodes = result.nodes;\n } else {\n // ── Index-based keying ──\n // Wrap items so each carries its index as the key.\n const wrapped: IndexWrapped[] = rawItems.map((item, i) => ({ __idx: i, __item: item }));\n const oldWrapped = oldItems as IndexWrapped[];\n\n const result = reconcileList<IndexWrapped>(\n el,\n oldWrapped,\n wrapped,\n oldNodes,\n (w: IndexWrapped) => w.__idx,\n (w: IndexWrapped) => createBoundClone(w.__item, w.__idx),\n (node: Node, w: IndexWrapped) => updateBoundClone(node, w.__item, w.__idx),\n undefined, // beforeNode\n listHooks,\n );\n // Dispose bindings on nodes that were removed by reconcileList\n const nextNodes = new Set(result.nodes);\n for (const n of prevNodes) {\n if (!nextNodes.has(n)) {\n // Skip nodes mid-leave — onBeforeRemove already disposed them\n if ((n as Element).hasAttribute?.('data-forma-leaving')) continue;\n disposeCloneBindings(n);\n }\n }\n oldItems = result.items;\n oldNodes = result.nodes;\n }\n });\n disposers.push(dispose);\n }\n }\n\n // data-fetch=\"[METHOD] url → prop [|loading:prop] [|error:prop] [|poll:ms]\"\n const fetchExpr = (!known || known.has('data-fetch')) ? el.getAttribute('data-fetch') : null;\n if (fetchExpr) {\n const arrowMatch = fetchExpr.match(RE_FETCH);\n if (arrowMatch) {\n const urlPart = arrowMatch[1]!.trim();\n const target = arrowMatch[2]!.trim();\n const modifiers = arrowMatch[3]?.trim() ?? '';\n\n let method = 'GET';\n let url = urlPart;\n const methodMatch = urlPart.match(RE_FETCH_METHOD);\n if (methodMatch) {\n method = methodMatch[1]!.toUpperCase();\n url = methodMatch[2]!.trim();\n }\n\n let loadingTarget: string | undefined;\n let errorTarget: string | undefined;\n let interval: number | undefined;\n for (const mod of modifiers.split('|').filter(Boolean)) {\n const [k, v] = mod.split(':').map(s => s.trim());\n if (k === 'loading') loadingTarget = v;\n else if (k === 'error') errorTarget = v;\n else if (k === 'poll') interval = parseInt(v ?? '0', 10);\n }\n\n // Create signals for target, loading, and error\n const [getTarget, setTarget] = createSignal<unknown>(null);\n scope.getters[target] = getTarget;\n scope.setters[target] = setTarget as Setter;\n if (loadingTarget) {\n const [gl, sl] = createSignal(false);\n scope.getters[loadingTarget] = gl;\n scope.setters[loadingTarget] = sl as Setter;\n }\n if (errorTarget) {\n const [ge, se] = createSignal<unknown>(null);\n scope.getters[errorTarget] = ge;\n scope.setters[errorTarget] = se as Setter;\n }\n\n const doFetch = () => {\n if (loadingTarget) scope.setters[loadingTarget]!(true);\n fetch(url, { method })\n .then(r => r.json())\n .then(data => {\n setTarget(data);\n if (loadingTarget) scope.setters[loadingTarget]!(false);\n })\n .catch(err => {\n if (errorTarget) scope.setters[errorTarget]!(err.message);\n if (loadingTarget) scope.setters[loadingTarget]!(false);\n });\n };\n\n // Register in $refetch registry if data-fetch-id is present\n const fetchId = el.getAttribute('data-fetch-id');\n if (fetchId) {\n _refetchRegistry.set(fetchId, doFetch);\n disposers.push(() => _refetchRegistry.delete(fetchId));\n }\n\n doFetch();\n if (interval && interval > 0) {\n const id = setInterval(doFetch, interval);\n disposers.push(() => clearInterval(id));\n }\n }\n }\n}\n\n// ── Scope mounting / unmounting (single data-forma-state element) ──\n\n/**\n * Mount a single `data-forma-state` element — creates signals, binds\n * all descendants, stores disposers on the element for cleanup.\n * Idempotent: skips elements that are already mounted.\n */\n/** CSS selector matching elements with at least one Forma directive.\n * Avoids scanning every descendant — only visits directive-bearing elements. */\nconst DIRECTIVE_SELECTOR = [\n '[data-text]', '[data-show]', '[data-if]', '[data-model]',\n '[data-computed]', '[data-persist]', '[data-list]', '[data-fetch]',\n '[data-bind\\\\:*]', '[data-class\\\\:*]', '[data-on\\\\:*]',\n // Catch-all for colon-prefixed data attrs that the escaped selectors miss in some engines\n '[data-transition]',\n].join(',');\n\n/** Fast check: does this element have any Forma directive attribute? */\nfunction hasDirective(el: Element): boolean {\n const attrs = el.attributes;\n for (let i = 0; i < attrs.length; i++) {\n const name = attrs[i]!.name;\n if (name.startsWith('data-text') || name.startsWith('data-show') ||\n name.startsWith('data-if') || name.startsWith('data-model') ||\n name.startsWith('data-computed') || name.startsWith('data-persist') ||\n name.startsWith('data-list') || name.startsWith('data-fetch') ||\n name.startsWith('data-on:') || name.startsWith('data-class:') ||\n name.startsWith('data-bind:') || name.startsWith('data-transition')) {\n return true;\n }\n }\n return false;\n}\n\n// ── Pre-compiled Directive Map ──\n//\n// When the server sends a directive_map sidecar (data-forma-id → directive names),\n// the runtime uses it in two ways:\n//\n// 1. mountScope(): targeted CSS selector queries only directive-bearing elements\n// instead of querySelectorAll('*') + attribute scan on every descendant.\n//\n// 2. bindElement(): skips getAttribute calls for directives the element doesn't\n// have, avoiding unnecessary work for elements with only 1-2 directives.\n\n/** Full map: data-forma-id → Set of directive attribute names. */\nlet _directiveMap: Map<string, Set<string>> | null = null;\n\n/**\n * Load a pre-compiled directive map from the server.\n * Keys are data-forma-id values, values are arrays of directive attribute names.\n */\nfunction setDirectiveMap(map: Record<string, string[]> | null): void {\n if (!map || Object.keys(map).length === 0) {\n _directiveMap = null;\n return;\n }\n _directiveMap = new Map();\n for (const id in map) {\n _directiveMap.set(id, new Set(map[id]!));\n }\n}\n\n/**\n * Build a CSS selector that targets only elements with known directives.\n * Returns null when the map has too many entries (selector would be huge)\n * or when no map is available.\n */\nfunction buildDirectiveSelector(): string | null {\n if (!_directiveMap || _directiveMap.size === 0) return null;\n // Cap at 200 IDs to avoid pathologically long selectors.\n // Above that, querySelectorAll('*') + Set check is likely faster.\n if (_directiveMap.size > 200) return null;\n const parts: string[] = [];\n for (const id of _directiveMap.keys()) {\n parts.push(`[data-forma-id=\"${id}\"]`);\n }\n return parts.join(',');\n}\n\n/** Get the directive set for an element, or null if unknown. */\nfunction getDirectives(el: Element): Set<string> | null {\n if (!_directiveMap) return null;\n const id = el.getAttribute('data-forma-id');\n if (!id) return null;\n return _directiveMap.get(id) ?? null;\n}\n\n/** Check if any entry in a Set starts with one of the given prefixes. */\nfunction hasAnyPrefix(set: Set<string>, ...prefixes: string[]): boolean {\n for (const entry of set) {\n for (const prefix of prefixes) {\n if (entry.startsWith(prefix)) return true;\n }\n }\n return false;\n}\n\nfunction mountScope(root: Element): void {\n // Idempotency guard — never double-bind\n if ((root as any).__formaDisposers) {\n if (_debug) dbg('mountScope: SKIPPED (already mounted)');\n return;\n }\n\n const scope = initScope(root);\n const disposers: (() => void)[] = [];\n\n // Build $refs — a lazy proxy that resolves data-ref=\"name\" to elements.\n // Scanned once at mount time; the proxy resolves lazily on access.\n const refsMap = new Map<string, Element>();\n const refEls = root.querySelectorAll('[data-ref]');\n for (let i = 0; i < refEls.length; i++) {\n const el = refEls[i]!;\n const name = el.getAttribute('data-ref');\n if (name) refsMap.set(name, el);\n }\n // Also check the root itself\n const rootRefName = root.getAttribute('data-ref');\n if (rootRefName) refsMap.set(rootRefName, root);\n\n scope.getters['$refs'] = () => new Proxy({} as Record<string, Element>, {\n get(_, name: string) {\n return refsMap.get(name) ?? undefined;\n },\n has(_, name: string) {\n return refsMap.has(name);\n },\n });\n\n // Bind the root itself\n bindElement(root, scope, disposers);\n\n // Bind only directive-bearing descendants (skip inert elements).\n // When the server provides a directive map, we build a targeted CSS selector\n // that queries only elements with known directives — no querySelectorAll('*').\n let boundCount = 0;\n const selector = buildDirectiveSelector();\n if (selector) {\n // Fast path: query only elements the server told us have directives\n const targets = root.querySelectorAll(selector);\n for (let i = 0; i < targets.length; i++) {\n bindElement(targets[i]!, scope, disposers);\n boundCount++;\n }\n } else {\n // Fallback: scan all descendants and check attributes\n const descendants = root.querySelectorAll('*');\n for (let i = 0; i < descendants.length; i++) {\n const el = descendants[i]!;\n if (hasDirective(el)) {\n bindElement(el, scope, disposers);\n boundCount++;\n }\n }\n }\n\n // Store disposers on the root element for cleanup\n (root as any).__formaDisposers = disposers;\n // Expose scope for devtools (State Inspector panel)\n (root as any).__formaScope = scope;\n (root as any).__formaInitialState = root.getAttribute('data-forma-state') ?? '{}';\n if (_debug) dbg('mountScope: DONE —', boundCount, 'elements bound,', disposers.length, 'disposers', selector ? '(targeted)' : '(full scan)');\n}\n\n/**\n * Unmount a single `data-forma-state` element — disposes all effects,\n * intervals, and event listeners. Safe to call on already-unmounted elements.\n */\nfunction unmountScope(root: Element): void {\n const disposers = (root as any).__formaDisposers as (() => void)[] | undefined;\n if (disposers) {\n for (const d of disposers) {\n try { d(); } catch { /* ensure all disposers run */ }\n }\n delete (root as any).__formaDisposers;\n delete (root as any).__formaScope;\n delete (root as any).__formaInitialState;\n }\n}\n\n// ── MutationObserver — auto-discovery of new data-forma-state elements ──\n//\n// Cost: O(addedNodes) per mutation batch. Never re-scans the whole document.\n// The observer only fires for childList mutations (nodes added/removed) and\n// attribute mutations on the `data-forma-state` attribute specifically.\n\nlet _observer: MutationObserver | null = null;\nconst ELEMENT_NODE = 1;\nconst MUTATION_CHUNK_SIZE = 40;\nlet _pendingMutations: MutationRecord[] = [];\nlet _drainingMutations = false;\n\nfunction processMutation(mutation: MutationRecord): void {\n // ── Removed nodes: clean up disposers to prevent memory leaks ──\n for (let i = 0; i < mutation.removedNodes.length; i++) {\n const node = mutation.removedNodes[i]!;\n if (node.nodeType !== ELEMENT_NODE) continue;\n const el = node as Element;\n if (el.hasAttribute('data-forma-state')) {\n if (_debug) dbg('MutationObserver: REMOVED scope');\n unmountScope(el);\n }\n const removed = el.querySelectorAll('[data-forma-state]');\n for (let j = 0; j < removed.length; j++) {\n unmountScope(removed[j]!);\n }\n }\n\n // ── Added nodes: auto-mount new scopes ──\n for (let i = 0; i < mutation.addedNodes.length; i++) {\n const node = mutation.addedNodes[i]!;\n if (node.nodeType !== ELEMENT_NODE) continue;\n const el = node as Element;\n if (el.closest('[data-forma-leaving]')) continue;\n if (el.hasAttribute('data-forma-state')) {\n if (_debug) dbg('MutationObserver: ADDED scope via mutation');\n mountScope(el);\n }\n const added = el.querySelectorAll('[data-forma-state]');\n if (_debug && added.length > 0) {\n dbg('MutationObserver: found', added.length, 'nested scope(s) in added subtree');\n }\n for (let j = 0; j < added.length; j++) {\n const desc = added[j]!;\n if (desc.closest('[data-forma-leaving]')) continue;\n mountScope(desc);\n }\n }\n\n // ── Attribute change: data-forma-state added/removed/changed ──\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-forma-state') {\n const target = mutation.target as Element;\n // Always unmount first (cleans up old bindings)\n unmountScope(target);\n // Re-mount if the attribute still exists (value may have changed)\n if (target.hasAttribute('data-forma-state')) {\n mountScope(target);\n }\n }\n}\n\nasync function drainMutationQueue(): Promise<void> {\n try {\n while (_pendingMutations.length > 0) {\n const batch = _pendingMutations.splice(0, MUTATION_CHUNK_SIZE);\n for (let i = 0; i < batch.length; i++) {\n processMutation(batch[i]!);\n }\n if (_pendingMutations.length > 0) {\n await yieldToMain();\n }\n }\n } finally {\n _drainingMutations = false;\n // Handle races where new mutations were queued after the while-check.\n if (_pendingMutations.length > 0 && !_drainingMutations) {\n _drainingMutations = true;\n void drainMutationQueue();\n }\n }\n}\n\nfunction handleMutations(mutations: MutationRecord[]): void {\n if (_debug) dbg('MutationObserver: queued', mutations.length, 'mutation(s)');\n _pendingMutations.push(...mutations);\n if (_drainingMutations) return;\n _drainingMutations = true;\n void drainMutationQueue();\n}\n\nfunction startObserver(): void {\n if (_observer) return;\n _observer = new MutationObserver(handleMutations);\n const target = document.body || document.documentElement;\n if (target) {\n _observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-forma-state'],\n });\n }\n}\n\nfunction stopObserver(): void {\n if (_observer) {\n _observer.disconnect();\n _observer = null;\n }\n}\n\n// ── Main init ──\n\nfunction initRuntime(): void {\n if (_autoContainment) {\n applyContainmentHints(document, { skipIfAlreadySet: true });\n }\n const stateRoots = document.querySelectorAll('[data-forma-state]');\n if (_debug) dbg('initRuntime: found', stateRoots.length, 'scope(s)');\n for (const root of Array.from(stateRoots)) {\n mountScope(root);\n }\n // Start auto-discovery after initial scan\n startObserver();\n if (_debug) dbg('initRuntime: MutationObserver started');\n}\n\n/** Dispose all FormaJS scopes — clears effects, intervals, event listeners, and stops the observer. */\nfunction destroyRuntime(): void {\n stopObserver();\n const stateRoots = document.querySelectorAll('[data-forma-state]');\n for (const root of Array.from(stateRoots)) {\n unmountScope(root);\n }\n}\n\n/**\n * Mount a specific element or subtree — scans for `data-forma-state`\n * elements and initializes their reactive bindings.\n *\n * Use this for manual control when injecting HTML dynamically.\n * With the MutationObserver active, this is usually not needed.\n *\n * @param el - The root element to scan (checks itself and all descendants).\n */\nfunction mount(el: Element): void {\n if (el.hasAttribute('data-forma-state')) {\n mountScope(el);\n }\n const descendants = el.querySelectorAll('[data-forma-state]');\n for (const desc of Array.from(descendants)) {\n mountScope(desc);\n }\n}\n\n/**\n * Unmount a specific element or subtree — disposes all reactive bindings\n * for `data-forma-state` elements within.\n *\n * @param el - The root element to clean up (checks itself and all descendants).\n */\nfunction unmount(el: Element): void {\n if (el.hasAttribute('data-forma-state')) {\n unmountScope(el);\n }\n const descendants = el.querySelectorAll('[data-forma-state]');\n for (const desc of Array.from(descendants)) {\n unmountScope(desc);\n }\n}\n\n// Auto-init in browser contexts on DOMContentLoaded (or immediately if already loaded).\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initRuntime);\n } else {\n initRuntime();\n }\n}\n\n/** Enable/disable debug logging. Also toggleable via window.__FORMA_DEBUG = true */\nfunction setDebug(on: boolean): void { _debug = on; }\n/** Set unsafe-eval mode. `locked-off` is hardened and non-toggleable via setUnsafeEval. */\nfunction setUnsafeEvalMode(mode: UnsafeEvalMode): void {\n if (_unsafeEvalMode === mode) return;\n _unsafeEvalMode = mode;\n if (mode === 'locked-off') _allowUnsafeEval = false;\n if (mode === 'locked-on') _allowUnsafeEval = true;\n if (mode === 'mutable') _allowUnsafeEval = true;\n // Rebuild caches whenever policy changes.\n scopeExpressionCache = new WeakMap<Scope, Map<string, () => unknown>>();\n scopeHandlerCache = new WeakMap<Scope, Map<string, HandlerBuildResult>>();\n}\n/** Enable/disable unsafe `new Function` fallback for complex expressions. */\nfunction setUnsafeEval(on: boolean): void {\n if (_unsafeEvalMode !== 'mutable') {\n dbg(\n `setUnsafeEval ignored (mode=${_unsafeEvalMode}); unsafe fallback is locked`,\n );\n return;\n }\n if (_allowUnsafeEval === on) return;\n _allowUnsafeEval = on;\n // Rebuild handlers/evaluators after mode change so cached blocked results\n // don't persist when toggling trusted mode at runtime.\n scopeExpressionCache = new WeakMap<Scope, Map<string, () => unknown>>();\n scopeHandlerCache = new WeakMap<Scope, Map<string, HandlerBuildResult>>();\n}\n/** Get current unsafe-eval policy mode. */\nfunction getUnsafeEvalMode(): UnsafeEvalMode { return _unsafeEvalMode; }\n/** Enable/disable runtime diagnostics for unsupported expressions/handlers. */\nfunction setDiagnostics(on: boolean): void { _diagnosticsEnabled = on; }\n\n/** Runtime diagnostics captured while parsing/binding templates. */\nfunction getDiagnostics(): RuntimeDiagnostic[] {\n return Array.from(diagnostics.values()).map(d => ({ ...d }));\n}\n\n/** Clear runtime diagnostics collected so far. */\nfunction clearDiagnostics(): void {\n diagnostics.clear();\n}\n\n// ── DevTools API — State Inspector ──\n\ninterface ScopeDescriptor {\n element: Element;\n id: string;\n values: Record<string, { value: unknown; type: string }>;\n initialJSON: string;\n}\n\n/**\n * DevTools: enumerate all active scopes and their current signal values.\n * Only called when the State Inspector panel is open — zero overhead otherwise.\n */\nfunction getScopes(): ScopeDescriptor[] {\n const roots = document.querySelectorAll('[data-forma-state]');\n const result: ScopeDescriptor[] = [];\n\n for (const root of Array.from(roots)) {\n if (root.closest('[data-forma-leaving]')) continue;\n const scope = (root as any).__formaScope as Scope | undefined;\n const initialJSON = (root as any).__formaInitialState as string | undefined;\n if (!scope) continue;\n\n const values: Record<string, { value: unknown; type: string }> = {};\n for (const key of Object.keys(scope.getters)) {\n const val = scope.getters[key]!();\n values[key] = { value: val, type: typeof val };\n }\n\n result.push({\n element: root,\n id: root.getAttribute('data-forma-id') || root.id || root.tagName.toLowerCase(),\n values,\n initialJSON: initialJSON ?? '{}',\n });\n }\n return result;\n}\n\n/**\n * DevTools: set a state value on a specific scope element.\n * Triggers normal reactive effects (data-show, data-text, etc.).\n */\nfunction setScopeValue(element: Element, key: string, value: unknown): void {\n const scope = (element as any).__formaScope as Scope | undefined;\n if (!scope?.setters[key]) return;\n batch(() => { scope.setters[key]!(value); });\n}\n\n/**\n * DevTools: reset all values on a scope to their initial JSON state.\n */\nfunction resetScope(element: Element): void {\n const scope = (element as any).__formaScope as Scope | undefined;\n const initialJSON = (element as any).__formaInitialState as string | undefined;\n if (!scope || !initialJSON) return;\n\n const initial = parseState(initialJSON);\n batch(() => {\n for (const [key, val] of Object.entries(initial)) {\n scope.setters[key]?.(val);\n }\n });\n}\n\n// ── Reconciler ──\n\nlet _reconciler: ((container: Element, html: string) => void) | null = null;\n\nfunction getReconciler() {\n if (!_reconciler) {\n _reconciler = createReconciler({\n mountScope,\n unmountScope,\n disconnectObserver() {\n if (_observer) {\n _observer.disconnect();\n }\n },\n reconnectObserver() {\n if (_observer) {\n const target = document.body || document.documentElement;\n if (target) {\n _observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-forma-state'],\n });\n }\n }\n },\n batch,\n });\n }\n return _reconciler;\n}\n\n/** Reconcile a container's DOM against a new HTML string. */\nfunction reconcile(container: Element, html: string): void {\n getReconciler()(container, html);\n}\n\nexport {\n initRuntime,\n destroyRuntime,\n mount,\n unmount,\n reconcile,\n setDebug,\n setUnsafeEvalMode,\n getUnsafeEvalMode,\n setUnsafeEval,\n yieldToMain,\n applyContainmentHints,\n setDirectiveMap,\n setDiagnostics,\n getDiagnostics,\n clearDiagnostics,\n getScopes,\n setScopeValue,\n resetScope,\n};\n"]}
|