{"version":3,"sources":["../../../src/engine/AreHTML.interpreter.ts"],"names":[],"mappings":"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","file":"AreHTML.interpreter.mjs","sourcesContent":["import { A_Caller, A_Inject } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame/core\"\nimport { A_Logger } from \"@adaas/a-utils/a-logger\";\nimport {\n    AreSyntax, AreStore,\n    AreEvent,\n    AreInstructionDefaultNames,\n    AreInterpreterError,\n    AreInterpreter\n} from \"@adaas/are\";\nimport { AreHTMLInstructions } from \"@adaas/are-html/instructions/AreHTML.instructions.constants\";\nimport { AddAttributeInstruction } from \"@adaas/are-html/instructions/AddAttribute.instruction\";\nimport { AddCommentInstruction } from \"@adaas/are-html/instructions/AddComment.instruction\";\nimport { AddElementInstruction } from \"@adaas/are-html/instructions/AddElement.instruction\";\nimport { AddListenerInstruction } from \"@adaas/are-html/instructions/AddListener.instruction\";\nimport { AddTextInstruction } from \"@adaas/are-html/instructions/AddText.instruction\";\nimport { AddStyleInstruction } from \"@adaas/are-html/instructions/AddStyle.instruction\";\nimport { AddStaticHTMLInstruction } from \"@adaas/are-html/instructions/AddStaticHTML.instruction\";\nimport { HideElementInstruction } from \"@adaas/are-html/instructions/HideElement.instruction\";\nimport { AreDirectiveContext } from \"@adaas/are-html/directive/AreDirective.context\";\nimport { AreHTMLNode } from \"../lib/AreHTMLNode/AreHTMLNode\";\nimport { AreHTMLEngineContext } from \"./AreHTML.context\";\nimport {\n    isBooleanAttribute,\n    isIDLFormProperty,\n    normalizeClassValue,\n    normalizeStyleValue,\n    parseEventName,\n    toDOMString,\n    SVG_NAMESPACE,\n    SVG_ATTRIBUTE_NS,\n} from \"./AreHTML.constants\";\n\n\n@A_Frame.Define({\n    namespace: 'a-are-html',\n    description: 'DOM interpreter for the HTML rendering pipeline. Extends AreInterpreter to apply and revert each ARE instruction type directly against the browser DOM — creating and removing elements, setting and removing attributes and event listeners, managing inline styles, and inserting text and comment nodes. Driven by the scene diff computed per render cycle.'\n})\nexport class AreHTMLInterpreter extends AreInterpreter {\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── CreateElement — Apply / Revert ───────────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n    @A_Frame.Define({\n        description: 'Create an HTML element based on the provided declaration instruction. Handles both root-level mounting and child element creation based on the structural parent hierarchy.'\n    })\n    @AreInterpreter.Apply(AreInstructionDefaultNames.Default)\n    @AreInterpreter.Apply(AreHTMLInstructions.AddElement)\n    addElement(\n        @A_Inject(A_Caller) declaration: AddElementInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ) {\n        try {\n            const node = declaration.owner as AreHTMLNode;\n\n            let currentNode: AreHTMLNode | undefined = node;\n            let parent: AreHTMLNode | undefined = node.parent as AreHTMLNode | undefined;\n\n            while (parent) {\n                if (context.getNodeElement(parent)) {\n                    break;\n                }\n                currentNode = parent;\n                parent = parent.parent as AreHTMLNode | undefined;\n            }\n\n\n            // Determine the element tag — components render as a wrapper div\n            const tag = node.tag;\n\n            const isSVG = tag === 'svg' || this.isInSVGContext(node);\n\n            if (parent) {\n\n                const mountPoint = context.getNodeElement(parent)\n\n                if (!mountPoint) {\n                    throw new AreInterpreterError({\n                        title: 'Mount Point Not Found',\n                        description: `Could not find a mount point for the node with id \"${node.id}\". Ensure that the parent node is rendered before its children, or that a valid root element with the corresponding id exists in the DOM.`\n                    });\n                }\n\n                const element = isSVG\n                    ? context.container.createElementNS(SVG_NAMESPACE, tag)\n                    : context.container.createElement(tag);\n\n                // Index the element synchronously so descendants can resolve this\n                // node as their mount point during the same (still off-document) pass.\n                context.setInstructionElement(declaration, element);\n\n                const attach = mountPoint.nodeType === Node.ELEMENT_NODE\n                    // parent is a real element — just append\n                    ? () => mountPoint.appendChild(element)\n                    // parent is an anchor (comment/text node) — insert before it\n                    // so content always appears before the anchor marker\n                    : () => { mountPoint.parentNode?.insertBefore(element, mountPoint); };\n\n                // When batching, only the mutation that touches the *live* document\n                // needs deferring; appends into an already-detached subtree are free\n                // and run immediately so the offline tree keeps taking shape.\n                if (context.isBatching && mountPoint.isConnected) {\n                    context.deferAttach(attach);\n                } else {\n                    attach();\n                }\n\n            } else {\n                const mountPoint = context.container.getElementById(node.id);\n                if (!mountPoint) {\n                    throw new AreInterpreterError({\n                        title: 'Mount Point Not Found',\n                        description: `Could not find a mount point for the node with id \"${node.id}\". Ensure that the parent node is rendered before its children, or that a valid root element with the corresponding id exists in the DOM.`\n                    });\n                }\n\n                const element = isSVG\n                    ? context.container.createElementNS(SVG_NAMESPACE, tag)\n                    : context.container.createElement(tag);\n\n                context.setInstructionElement(declaration, element);\n\n                const attach = () => { mountPoint.parentNode?.replaceChild(element, mountPoint); };\n\n                // The placeholder lives in the live DOM — defer the swap so the\n                // whole subtree built into `element` lands in one mutation.\n                if (context.isBatching && mountPoint.isConnected) {\n                    context.deferAttach(attach);\n                } else {\n                    attach();\n                }\n            }\n\n            // Register the element in the context index\n\n            logger?.debug('green', `Element ${node.aseid.toString()} added to Context:`);\n\n        } catch (error) {\n            logger?.error(error);\n            throw error;\n        }\n    }\n\n\n    @A_Frame.Define({\n        description: 'Remove an HTML element that was created by a CreateElement declaration. Cleans up the DOM and the context index.'\n    })\n    @AreInterpreter.Revert(AreInstructionDefaultNames.Default)\n    @AreInterpreter.Revert(AreHTMLInstructions.AddElement)\n    removeElement(\n        @A_Inject(A_Caller) declaration: AddElementInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ) {\n        const element = context.getElementByInstruction(declaration);\n\n        // Skip the live-DOM detach when the element is already off-document: an\n        // ancestor removed earlier in the same unmount took this whole subtree\n        // with it, and a detached subtree is garbage-collected as a unit. The\n        // per-node removeChild would be wasted work. The index bookkeeping below\n        // must still run to drop the strong references that would pin it in memory.\n        if (element && element.parentNode && element.isConnected) {\n            element.parentNode.removeChild(element);\n        }\n\n        context.removeInstructionElement(declaration);\n    }\n\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── AddAttribute — Apply / Revert ────────────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n    @A_Frame.Define({\n        description: 'Add an attribute to an HTML element based on the provided mutation instruction.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.AddAttribute)\n    @AreInterpreter.Update(AreHTMLInstructions.AddAttribute)\n    addAttribute(\n        @A_Inject(A_Caller) mutation: AddAttributeInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(AreStore) store: AreStore,\n        @A_Inject(AreSyntax) syntax: AreSyntax,\n        @A_Inject(AreDirectiveContext) directiveContext?: AreDirectiveContext,\n\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ): void {\n        const element = context.getElementByInstruction(mutation.parent!);\n\n\n        if (!element) {\n            throw new AreInterpreterError({\n                title: 'Element Not Found',\n                description: `Could not find a DOM element associated with the instruction ASEID \"${mutation.parent}\". Ensure that the parent instruction is properly rendered and associated with a DOM element before applying attribute mutations.`\n            });\n        }\n        const { name, content, evaluate } = mutation.payload;\n\n        const rawValue = evaluate ? syntax.evaluate(content, store, {\n            ...(directiveContext?.scope || {})\n        }) : content;\n\n        const el = element as HTMLElement;\n        const lowerName = name.toLowerCase();\n\n        // ── 0. Namespace-prefixed attributes (xlink:href, xml:space, xmlns:*) ──\n        const colonIdx = name.indexOf(':');\n        if (colonIdx > 0) {\n            const ns = SVG_ATTRIBUTE_NS[name.slice(0, colonIdx)];\n            if (ns) {\n                (el as Element).setAttributeNS(ns, name, toDOMString(rawValue));\n                mutation.cache = toDOMString(rawValue);\n                return;\n            }\n        }\n\n        // ── 1. Boolean attributes ────────────────────────────────────────────\n        if (isBooleanAttribute(lowerName)) {\n            if (rawValue) {\n                el.setAttribute(lowerName, '');\n                // also reflect IDL property where supported (disabled, hidden, …)\n                try { (el as any)[lowerName] = true; } catch { /* ignore */ }\n            } else {\n                el.removeAttribute(lowerName);\n                try { (el as any)[lowerName] = false; } catch { /* ignore */ }\n            }\n            mutation.cache = rawValue ? 'true' : '';\n            return;\n        }\n\n        // ── 2. Form-control IDL properties (value/checked/selected) ─────────\n        if (isIDLFormProperty(el.tagName, name)) {\n            const propName = name === 'value' ? 'value'\n                : name === 'checked' ? 'checked'\n                    : name === 'selected' ? 'selected'\n                        : name === 'indeterminate' ? 'indeterminate'\n                            : name;\n            try {\n                if (propName === 'checked' || propName === 'selected' || propName === 'indeterminate') {\n                    (el as any)[propName] = !!rawValue;\n                } else {\n                    (el as any)[propName] = toDOMString(rawValue);\n                }\n            } catch { /* ignore */ }\n            // also keep the attribute in sync for SSR/CSS selectors\n            if (propName !== 'value') {\n                if (rawValue) el.setAttribute(name, ''); else el.removeAttribute(name);\n            } else {\n                el.setAttribute(name, toDOMString(rawValue));\n            }\n            mutation.cache = toDOMString(rawValue);\n            return;\n        }\n\n        // ── 3. Class binding — supports object/array/string and merges ──────\n        if (lowerName === 'class') {\n            const newValue = normalizeClassValue(rawValue);\n\n            if (mutation.cache === undefined) {\n                const existingValue = el.getAttribute('class');\n                const merged = existingValue ? `${existingValue} ${newValue}`.trim() : newValue;\n                if (merged) el.setAttribute('class', merged); else el.removeAttribute('class');\n            } else {\n                const existingValue = el.getAttribute('class');\n                const existingParts = existingValue ? existingValue.split(/\\s+/).filter(Boolean) : [];\n                const oldParts = new Set((mutation.cache as string).split(/\\s+/).filter(Boolean));\n                const newParts = newValue ? newValue.split(/\\s+/).filter(Boolean) : [];\n\n                const merged = [...existingParts.filter(p => !oldParts.has(p)), ...newParts].join(' ');\n                if (merged) el.setAttribute('class', merged); else el.removeAttribute('class');\n            }\n            mutation.cache = newValue;\n            return;\n        }\n\n        // ── 4. Style binding — supports object/array/string ─────────────────\n        if (lowerName === 'style') {\n            const newValue = normalizeStyleValue(rawValue);\n            if (newValue) el.setAttribute('style', newValue); else el.removeAttribute('style');\n            mutation.cache = newValue;\n            return;\n        }\n\n        // ── 5. Default: replace attribute (no whitespace merge) ─────────────\n        const stringValue = toDOMString(rawValue);\n        if (stringValue === '' && evaluate && (rawValue === false || rawValue === null || rawValue === undefined)) {\n            el.removeAttribute(name);\n        } else {\n            el.setAttribute(name, stringValue);\n        }\n        mutation.cache = stringValue;\n\n\n    }\n\n    @A_Frame.Define({\n        description: 'Remove an attribute from an HTML element based on the provided mutation instruction.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.AddAttribute)\n    removeAttribute(\n        @A_Inject(A_Caller) mutation: AddAttributeInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ): void {\n        try {\n            const element = context.getElementByInstruction(mutation.parent!);\n\n            if (!element) return;\n\n            const { name } = mutation.payload;\n\n            // No point stripping attributes off an element that is already\n            // detached from the live document (it is about to be discarded with\n            // its whole subtree). Only touch attributes while the element is live.\n            if (name && element.nodeType === Node.ELEMENT_NODE && element.isConnected) {\n                const colonIdx = name.indexOf(':');\n                if (colonIdx > 0) {\n                    const ns = SVG_ATTRIBUTE_NS[name.slice(0, colonIdx)];\n                    if (ns) {\n                        (element as Element).removeAttributeNS(ns, name.slice(colonIdx + 1));\n                    } else {\n                        (element as HTMLElement).removeAttribute(name);\n                    }\n                } else {\n                    (element as HTMLElement).removeAttribute(name);\n                }\n            }\n        } catch (error) {\n            console.log('Error removing attribute:', error);\n        }\n\n    }\n\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── HideElement — Apply / Revert ─────────────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n    // Drives the `$show` directive. Apply hides the element by forcing its inline\n    // `display:none` (which beats stylesheet rules and, unlike rewriting the whole\n    // `style` attribute, does NOT clobber other inline styles or `:style`\n    // bindings). The element stays mounted — its subtree, listeners and scene\n    // state are preserved — so toggling visibility is far cheaper than $if's\n    // mount/unmount cycle. Revert restores the element's previous inline display.\n    @A_Frame.Define({\n        description: 'Hide an element by setting inline display:none, caching its previous inline display value for restoration on revert.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.HideElement)\n    hideElement(\n        @A_Inject(A_Caller) mutation: HideElementInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ): void {\n        const element = context.getElementByInstruction(mutation.parent!);\n\n        if (!element || element.nodeType !== Node.ELEMENT_NODE) return;\n\n        const el = element as HTMLElement;\n\n        // Remember the element's own inline display so it can be restored exactly.\n        mutation.cache = el.style.display;\n        el.style.display = 'none';\n    }\n\n    @A_Frame.Define({\n        description: 'Restore an element hidden by a HideElement instruction back to its previous inline display value.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.HideElement)\n    showElement(\n        @A_Inject(A_Caller) mutation: HideElementInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ): void {\n        const element = context.getElementByInstruction(mutation.parent!);\n\n        if (!element || element.nodeType !== Node.ELEMENT_NODE) return;\n\n        // A detached element is being discarded with its subtree — restoring its\n        // inline display would be pointless work. Only restore while it is live.\n        if (!element.isConnected) return;\n\n        const el = element as HTMLElement;\n\n        // Restore the cached inline display. An explicit payload display, when\n        // provided, takes precedence; otherwise fall back to the cached value\n        // (empty string clears the inline rule and reverts to the CSS default).\n        el.style.display = mutation.payload?.display ?? mutation.cache ?? '';\n    }\n\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── addEventListener — Apply / Revert ────────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n\n    @A_Frame.Define({\n        description: 'Add an event listener to an HTML element based on the provided mutation instruction.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.AddListener)\n    addEventListener(\n        @A_Inject(A_Caller) mutation: AddListenerInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(AreStore) store: AreStore,\n        @A_Inject(AreSyntax) syntax: AreSyntax,\n        @A_Inject(AreDirectiveContext) directiveContext?: AreDirectiveContext,\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ) {\n\n        const element = context.getElementByInstruction(mutation.parent);\n\n        if (!element) {\n            throw new AreInterpreterError({\n                title: 'Element Not Found',\n                description: `Could not find a DOM element associated with the instruction ASEID \"${mutation.parent}\". Ensure that the parent instruction is properly rendered and associated with a DOM element before adding event listeners.`\n            });\n        }\n\n        /**\n         * e.g. @click=\"handleClick\"\n         * e.g. @click=\"handleClick($event, element)\"\n         * e.g. @click.stop.prevent=\"handleClick\"\n         * e.g. @keydown.enter=\"submit\"\n         * e.g. @click=\"(e)=> user.name ? handleClick(e) : null\"\n         */\n\n        const { event: eventName, modifiers } = parseEventName(mutation.payload.name);\n\n        const listenerOptions: AddEventListenerOptions = {};\n        if (modifiers.has('capture')) listenerOptions.capture = true;\n        if (modifiers.has('once')) listenerOptions.once = true;\n        if (modifiers.has('passive')) listenerOptions.passive = true;\n\n        const handlers = syntax.extractEmitHandlers(mutation.payload.handler);\n\n        // Holds the live DOM event so handler invocations (with or without\n        // template arguments) always have access to it.\n        let liveEvent: Event | null = null;\n\n        const handlerScope: Record<string, any> = {};\n\n        // Resolve the node the emitted event should be dispatched FROM. A `@event`\n        // binding authored on a plain element (`<button @click>`) is owned by that\n        // element, whose enclosing component is the template author — the onEmit\n        // walk resolves it correctly when we emit from the element itself.\n        //\n        // A `@event` binding authored directly on a CHILD-COMPONENT tag\n        // (`<a-input @submit=\"$onSubmit\">`) is written in the PARENT's template, so\n        // its handler must run in the PARENT component, not the child instance. We\n        // emit from the parent side of the component boundary (`owner.parent`) so the\n        // onEmit walk resolves the nearest enclosing component above the child — this\n        // is what enables child→parent event propagation: the child emits a bubbling\n        // DOM event, the parent's bound handler receives it.\n        const emitter =\n            mutation.owner.component && mutation.owner.parent\n                ? mutation.owner.parent\n                : mutation.owner;\n\n        for (const handler of handlers) {\n            const handlerFn = (...args: any[]) => {\n                const event = new AreEvent(handler);\n                // If user passed only template args (e.g. $h('x')), append the DOM\n                // event as the last arg. If they passed nothing, args[0] is the DOM event.\n                const effectiveArgs = args.length === 0 && liveEvent\n                    ? [liveEvent]\n                    : liveEvent\n                        ? [...args, liveEvent]\n                        : args;\n                event.set('args', effectiveArgs);\n                event.set('element', element);\n                event.set('instruction', mutation);\n                // Expose the raw DOM event under the conventional 'native' key so that\n                // event handlers can do: event.get('native')?.target as HTMLInputElement\n                if (liveEvent) event.set('native', liveEvent as any);\n                emitter.emit(event);\n            };\n            handlerScope[`$${handler}`] = handlerFn;\n        }\n\n        const callback = (e: Event) => {\n            try {\n                liveEvent = e;\n\n                if (modifiers.has('self') && e.target !== element) return;\n                if (modifiers.has('stop')) e.stopPropagation();\n                if (modifiers.has('prevent')) e.preventDefault();\n\n                // key-name modifiers for keyboard events: @keydown.enter / .esc / .tab / .space / .up / .down / .left / .right / .delete\n                if (e instanceof KeyboardEvent && modifiers.size > 0) {\n                    const key = (e.key || '').toLowerCase();\n                    const KEY_ALIASES: Record<string, string[]> = {\n                        enter: ['enter'],\n                        esc: ['escape'],\n                        escape: ['escape'],\n                        tab: ['tab'],\n                        space: [' ', 'spacebar'],\n                        up: ['arrowup'],\n                        down: ['arrowdown'],\n                        left: ['arrowleft'],\n                        right: ['arrowright'],\n                        delete: ['delete', 'backspace'],\n                    };\n\n                    // System modifiers (ctrl/alt/shift/meta) and key-name modifiers\n                    // combine with AND semantics, matching Vue: `@keydown.ctrl.enter`\n                    // fires ONLY when Enter is pressed WHILE Ctrl is held — not on\n                    // Ctrl alone, nor on Enter alone. So ALL system modifiers present\n                    // in the binding must be active, AND (if any key-name modifiers\n                    // were given) at least one of them must match the pressed key.\n                    const SYSTEM_KEYS = ['ctrl', 'alt', 'shift', 'meta'] as const;\n                    const systemMods = [...modifiers].filter(m =>\n                        (SYSTEM_KEYS as readonly string[]).includes(m));\n                    const nameMods = [...modifiers].filter(m => m in KEY_ALIASES);\n\n                    if (systemMods.length > 0 || nameMods.length > 0) {\n                        const systemOk = systemMods.every(m => {\n                            if (m === 'ctrl') return e.ctrlKey;\n                            if (m === 'alt') return e.altKey;\n                            if (m === 'shift') return e.shiftKey;\n                            return e.metaKey; // meta\n                        });\n\n                        const nameOk = nameMods.length === 0\n                            || nameMods.some(m => KEY_ALIASES[m].includes(key));\n\n                        if (!(systemOk && nameOk)) return;\n                    }\n                }\n\n                context.startPerformance('event:' + eventName);\n\n                const result = syntax.evaluate(mutation.payload.handler, store, {\n                    ...handlerScope,\n                    $event: e,\n                    ...(directiveContext?.scope || {})\n                });\n                if (typeof result === 'function') result(e);\n\n                context.endPerformance('event:' + eventName);\n            } catch (err) {\n                logger?.error(err);\n            } finally {\n                liveEvent = null;\n            }\n        };\n\n        const useOptions = listenerOptions.capture || listenerOptions.once || listenerOptions.passive;\n        if (useOptions) {\n            element.addEventListener(eventName, callback, listenerOptions);\n        } else {\n            element.addEventListener(eventName, callback);\n        }\n        // Track on both the context (for diagnostics) and the mutation itself\n        // so the revert path can detach the exact same callback.\n        (mutation.payload as any)._callback = callback;\n        context.addListener(element, mutation.payload.name, callback);\n    }\n\n\n    @A_Frame.Define({\n        description: 'Remove an event listener from an HTML element based on the provided mutation instruction.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.AddListener)\n    removeEventListener(\n        @A_Inject(A_Caller) mutation: AddListenerInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ) {\n        const element = context.getElementByInstruction(mutation.parent);\n\n        if (!element) return;\n\n        const { name } = mutation.payload;\n        const { event: eventName } = parseEventName(name);\n\n        const listener = (mutation.payload as any)._callback as EventListenerOrEventListenerObject | undefined;\n\n        if (listener) {\n            // Detaching a listener from an element that is already off-document is\n            // unnecessary — the element and its listeners are collected together.\n            // Still clear the context bookkeeping so no strong reference lingers.\n            if (element.isConnected) {\n                element.removeEventListener(eventName, listener);\n            }\n            context.removeListener(element, name, listener);\n            (mutation.payload as any)._callback = undefined;\n        }\n    }\n\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── AddText — Apply / Revert ─────────────────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n\n    @A_Frame.Define({\n        description: 'Add text content to an HTML element based on the provided declaration instruction.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.AddText)\n    @AreInterpreter.Update(AreHTMLInstructions.AddText)\n    addText(\n        @A_Inject(A_Caller) declaration: AddTextInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(AreStore) store: AreStore,\n        @A_Inject(AreSyntax) syntax: AreSyntax,\n        @A_Inject(AreDirectiveContext) directiveContext?: AreDirectiveContext,\n\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ) {\n        const node = declaration.owner.parent;\n        const { content, evaluate } = declaration.payload;\n\n        const rawValue = evaluate ? syntax.evaluate(content, store, {\n            ...(directiveContext?.scope || {})\n        }) : content;\n\n        const value = toDOMString(rawValue);\n\n\n        if (!node) {\n            const textNode = context.container.createTextNode(value);\n            context.container.body.appendChild(textNode);\n            context.setInstructionElement(declaration, textNode);\n\n        } else {\n            const element = context.getNodeElement(node);\n\n            if (!element) {\n                throw new AreInterpreterError({\n                    title: 'Element Not Found',\n                    description: `Could not find a DOM element associated with the instruction ASEID \"${declaration.owner.parent.aseid}\". Ensure that the parent instruction is properly rendered and associated with a DOM element before applying attribute mutations.`\n                });\n\n            }\n\n            const existingNode = context.getElementByInstruction(declaration);\n\n            if (existingNode) {\n                existingNode.textContent = value;\n            } else {\n                const textNode = context.container.createTextNode(value);\n                element.appendChild(textNode);\n\n                context.setInstructionElement(declaration, textNode);\n            }\n        }\n\n\n\n        logger?.debug('green', `Text ${node?.aseid.toString()} added to Context:`);\n\n    }\n\n\n    @A_Frame.Define({\n        description: 'Remove text content from an HTML element based on the provided declaration instruction.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.AddText)\n    removeText(\n        @A_Inject(A_Caller) declaration: AddTextInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ) {\n        const element = context.getElementByInstruction(declaration);\n\n        if (!element) return;\n\n        // Off-document text nodes vanish with their detached parent subtree, so\n        // skip the removeChild and just release the index reference.\n        if (element.isConnected) {\n            element.parentNode?.removeChild(element);\n        }\n        context.removeInstructionElement(declaration);\n    }\n\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── AddStaticHTML — Apply / Update / Revert ──────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n    // Materialises a fully static subtree (a \"static island\") onto its host\n    // element in a single pass. The tokenizer captured the inner markup verbatim\n    // instead of exploding it into per-element/per-text AreNodes, so here we hand\n    // the markup to the browser parser ONCE (via a cached <template>) and clone\n    // the pre-parsed fragment in. This collapses N DOM mutations into one and\n    // decodes HTML entities (e.g. &nbsp;) natively.\n    @A_Frame.Define({\n        description: 'Inject a static island\\'s inner markup onto its host element in one pass via a cached, browser-parsed <template> clone. Decodes HTML entities natively.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.AddStaticHTML)\n    @AreInterpreter.Update(AreHTMLInstructions.AddStaticHTML)\n    addStaticHTML(\n        @A_Inject(A_Caller) mutation: AddStaticHTMLInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ) {\n        const element = context.getElementByInstruction(mutation.parent!);\n\n        if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n            throw new AreInterpreterError({\n                title: 'Element Not Found',\n                description: `Could not find a DOM element associated with the instruction ASEID \"${mutation.parent}\". Ensure the host element is rendered before materialising its static island.`\n            });\n        }\n\n        const el = element as HTMLElement;\n        const { html } = mutation.payload;\n\n        // Clear any previously injected content (Update path) before re-injecting.\n        el.textContent = '';\n\n        // Parse once (in the host tag's context) and clone the cached fragment.\n        const fragment = context.getStaticFragment(el.tagName.toLowerCase(), html);\n        el.appendChild(fragment.cloneNode(true));\n\n        logger?.debug('green', `Static island materialised onto <${(mutation.owner.parent ?? mutation.owner)?.aseid?.toString?.()}>`);\n    }\n\n\n    @A_Frame.Define({\n        description: 'Clear a static island\\'s injected markup from its host element on revert.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.AddStaticHTML)\n    removeStaticHTML(\n        @A_Inject(A_Caller) mutation: AddStaticHTMLInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ) {\n        const element = context.getElementByInstruction(mutation.parent!);\n\n        if (element && element.nodeType === Node.ELEMENT_NODE && element.isConnected) {\n            (element as HTMLElement).textContent = '';\n        }\n    }\n\n\n\n    @A_Frame.Define({\n        description: 'Add a comment node to the DOM based on the provided declaration instruction.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.AddComment)\n    @AreInterpreter.Update(AreHTMLInstructions.AddComment)\n    addComment(\n        @A_Inject(A_Caller) declaration: AddCommentInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(AreStore) store: AreStore,\n        @A_Inject(AreSyntax) syntax: AreSyntax,\n        @A_Inject(AreDirectiveContext) directiveContext?: AreDirectiveContext,\n\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ) {\n        const node = declaration.owner.parent;\n        const { content, evaluate } = declaration.payload;\n\n        const rawValue = evaluate ? syntax.evaluate(content, store, {\n            ...(directiveContext?.scope || {})\n        }) : content;\n\n        const value = toDOMString(rawValue);\n\n\n        if (!node) {\n            const commentNode = context.container.createComment(value);\n            context.container.body.appendChild(commentNode);\n            context.setInstructionElement(declaration, commentNode);\n\n        } else {\n            const element = context.getNodeElement(node);\n\n            if (!element) {\n                throw new AreInterpreterError({\n                    title: 'Element Not Found',\n                    description: `Could not find a DOM element associated with the instruction ASEID \"${declaration.owner.parent.aseid}\". Ensure that the parent instruction is properly rendered and associated with a DOM element before applying attribute mutations.`\n                });\n            }\n\n            const existingNode = context.getElementByInstruction(declaration);\n\n            if (existingNode) {\n                existingNode.textContent = value;\n            } else {\n                const commentNode = context.container.createComment(value);\n                element.appendChild(commentNode);\n\n                context.setInstructionElement(declaration, commentNode);\n            }\n        }\n\n\n\n        logger?.debug('green', `Comment ${node?.aseid.toString()} added to Context:`);\n    }\n\n\n    @A_Frame.Define({\n        description: 'Remove a comment node from the DOM based on the provided declaration instruction.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.AddComment)\n    removeComment(\n        @A_Inject(A_Caller) declaration: AddCommentInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ) {\n        const element = context.getElementByInstruction(declaration);\n\n        if (!element) return;\n\n        // Off-document comment anchors are discarded with their detached parent\n        // subtree; skip the removeChild and just release the index reference.\n        if (element.isConnected) {\n            element.parentNode?.removeChild(element);\n        }\n        context.removeInstructionElement(declaration);\n    }\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── AddStyle — Apply / Update / Revert ───────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n\n    @A_Frame.Define({\n        description: 'Inject a <style> element into the document <head> carrying the component CSS. Keyed by instruction ASEID so multiple components with styles do not collide. Subsequent Update calls refresh the textContent in-place.'\n    })\n    @AreInterpreter.Apply(AreHTMLInstructions.AddStyle)\n    @AreInterpreter.Update(AreHTMLInstructions.AddStyle)\n    addStyle(\n        @A_Inject(A_Caller) mutation: AddStyleInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n        @A_Inject(A_Logger) logger?: A_Logger,\n    ): void {\n        try {\n\n\n            const { styles } = mutation.payload;\n            const styleId = `are-style-${String(mutation.aseid)}`;\n\n            const existing = context.getElementByInstruction(mutation) as HTMLStyleElement | undefined;\n            if (existing) {\n                existing.textContent = styles;\n            } else {\n                const styleEl = context.container.createElement('style') as HTMLStyleElement;\n                styleEl.setAttribute('data-are-id', styleId);\n                styleEl.textContent = styles;\n                (context.container.head ?? context.container.body).appendChild(styleEl);\n\n                context.setInstructionElement(mutation, styleEl);\n                logger?.debug('green', `Style injected for ${String(mutation.aseid)}`);\n            }\n        } catch (error) {\n            logger?.error(error);\n        }\n\n    }\n\n    @A_Frame.Define({\n        description: 'Remove the <style> element that was injected by addStyle, cleaning up the document head.'\n    })\n    @AreInterpreter.Revert(AreHTMLInstructions.AddStyle)\n    removeStyle(\n        @A_Inject(A_Caller) mutation: AddStyleInstruction,\n        @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n    ): void {\n        const styleEl = context.getElementByInstruction(mutation);\n        if (styleEl?.parentNode) {\n            styleEl.parentNode.removeChild(styleEl);\n        }\n        context.removeInstructionElement(mutation);\n    }\n\n    // ─────────────────────────────────────────────────────────────────────────────\n    // ── SVG helpers ───────────────────────────────────────────────────────────────\n    // ─────────────────────────────────────────────────────────────────────────────\n\n    /**\n     * Returns true when any ancestor of the given node has the tag `svg`,\n     * meaning the node lives inside an SVG subtree and its DOM element must be\n     * created via createElementNS(SVG_NAMESPACE, tag).\n     */\n    private isInSVGContext(node: AreHTMLNode): boolean {\n        let current: AreHTMLNode | undefined = node.parent as AreHTMLNode | undefined;\n        while (current) {\n            if (current.tag === 'svg') return true;\n            // <foreignObject> resets the namespace back to HTML\n            if (current.tag === 'foreignobject') return false;\n            current = current.parent as AreHTMLNode | undefined;\n        }\n        return false;\n    }\n}"]}