@adaas/are-html 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/browser/index.d.mts +19 -4
  2. package/dist/browser/index.mjs +114 -7
  3. package/dist/browser/index.mjs.map +1 -1
  4. package/dist/node/{AreBinding.attribute-C6JasbJL.d.ts → AreBinding.attribute-Bm5LlOyE.d.ts} +7 -0
  5. package/dist/node/{AreBinding.attribute-C6qrxN8K.d.mts → AreBinding.attribute-doUvtOjc.d.mts} +7 -0
  6. package/dist/node/attributes/AreBinding.attribute.d.mts +1 -1
  7. package/dist/node/attributes/AreBinding.attribute.d.ts +1 -1
  8. package/dist/node/attributes/AreDirective.attribute.d.mts +1 -1
  9. package/dist/node/attributes/AreDirective.attribute.d.ts +1 -1
  10. package/dist/node/attributes/AreEvent.attribute.d.mts +1 -1
  11. package/dist/node/attributes/AreEvent.attribute.d.ts +1 -1
  12. package/dist/node/attributes/AreStatic.attribute.d.mts +1 -1
  13. package/dist/node/attributes/AreStatic.attribute.d.ts +1 -1
  14. package/dist/node/directives/AreDirectiveFor.directive.d.mts +1 -1
  15. package/dist/node/directives/AreDirectiveFor.directive.d.ts +1 -1
  16. package/dist/node/directives/AreDirectiveIf.directive.d.mts +1 -1
  17. package/dist/node/directives/AreDirectiveIf.directive.d.ts +1 -1
  18. package/dist/node/engine/AreHTML.compiler.d.mts +8 -1
  19. package/dist/node/engine/AreHTML.compiler.d.ts +8 -1
  20. package/dist/node/engine/AreHTML.compiler.js +17 -0
  21. package/dist/node/engine/AreHTML.compiler.js.map +1 -1
  22. package/dist/node/engine/AreHTML.compiler.mjs +17 -0
  23. package/dist/node/engine/AreHTML.compiler.mjs.map +1 -1
  24. package/dist/node/engine/AreHTML.context.js +2 -2
  25. package/dist/node/engine/AreHTML.context.js.map +1 -1
  26. package/dist/node/engine/AreHTML.context.mjs +3 -3
  27. package/dist/node/engine/AreHTML.context.mjs.map +1 -1
  28. package/dist/node/engine/AreHTML.interpreter.d.mts +3 -0
  29. package/dist/node/engine/AreHTML.interpreter.d.ts +3 -0
  30. package/dist/node/engine/AreHTML.interpreter.js +44 -0
  31. package/dist/node/engine/AreHTML.interpreter.js.map +1 -1
  32. package/dist/node/engine/AreHTML.interpreter.mjs +44 -0
  33. package/dist/node/engine/AreHTML.interpreter.mjs.map +1 -1
  34. package/dist/node/engine/AreHTML.lifecycle.d.mts +2 -1
  35. package/dist/node/engine/AreHTML.lifecycle.d.ts +2 -1
  36. package/dist/node/engine/AreHTML.lifecycle.js +13 -1
  37. package/dist/node/engine/AreHTML.lifecycle.js.map +1 -1
  38. package/dist/node/engine/AreHTML.lifecycle.mjs +13 -1
  39. package/dist/node/engine/AreHTML.lifecycle.mjs.map +1 -1
  40. package/dist/node/engine/AreHTML.tokenizer.d.mts +1 -1
  41. package/dist/node/engine/AreHTML.tokenizer.d.ts +1 -1
  42. package/dist/node/engine/AreHTML.transformer.d.mts +1 -1
  43. package/dist/node/engine/AreHTML.transformer.d.ts +1 -1
  44. package/dist/node/index.d.mts +1 -1
  45. package/dist/node/index.d.ts +1 -1
  46. package/dist/node/instructions/AreHTML.instructions.types.d.mts +2 -4
  47. package/dist/node/instructions/AreHTML.instructions.types.d.ts +2 -4
  48. package/dist/node/lib/AreDirective/AreDirective.component.d.mts +1 -1
  49. package/dist/node/lib/AreDirective/AreDirective.component.d.ts +1 -1
  50. package/dist/node/lib/AreDirective/AreDirective.types.d.mts +1 -1
  51. package/dist/node/lib/AreDirective/AreDirective.types.d.ts +1 -1
  52. package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.mts +1 -1
  53. package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.ts +1 -1
  54. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.mts +1 -1
  55. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.ts +1 -1
  56. package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.mts +1 -1
  57. package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.ts +1 -1
  58. package/dist/node/lib/AreHTMLNode/AreHTMLNode.js +14 -0
  59. package/dist/node/lib/AreHTMLNode/AreHTMLNode.js.map +1 -1
  60. package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs +14 -0
  61. package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs.map +1 -1
  62. package/dist/node/lib/AreRoot/AreRoot.component.js +26 -3
  63. package/dist/node/lib/AreRoot/AreRoot.component.js.map +1 -1
  64. package/dist/node/lib/AreRoot/AreRoot.component.mjs +26 -3
  65. package/dist/node/lib/AreRoot/AreRoot.component.mjs.map +1 -1
  66. package/dist/node/nodes/AreComment.d.mts +1 -1
  67. package/dist/node/nodes/AreComment.d.ts +1 -1
  68. package/dist/node/nodes/AreComponent.d.mts +1 -1
  69. package/dist/node/nodes/AreComponent.d.ts +1 -1
  70. package/dist/node/nodes/AreInterpolation.d.mts +1 -1
  71. package/dist/node/nodes/AreInterpolation.d.ts +1 -1
  72. package/dist/node/nodes/AreRoot.d.mts +1 -1
  73. package/dist/node/nodes/AreRoot.d.ts +1 -1
  74. package/dist/node/nodes/AreText.d.mts +1 -1
  75. package/dist/node/nodes/AreText.d.ts +1 -1
  76. package/examples/component-styles/concept.ts +41 -0
  77. package/examples/component-styles/containers/UI.container.ts +122 -0
  78. package/examples/component-styles/dist/index.html +25 -0
  79. package/examples/{jumpstart/dist/mor90p6y-0plg7g.js → component-styles/dist/mpq29j47-owas2v.js} +8326 -5942
  80. package/examples/component-styles/public/index.html +25 -0
  81. package/examples/component-styles/src/components/AppPage.component.ts +74 -0
  82. package/examples/component-styles/src/components/TheAlert.component.ts +81 -0
  83. package/examples/component-styles/src/components/TheButton.component.ts +71 -0
  84. package/examples/component-styles/src/components/TheCard.component.ts +64 -0
  85. package/examples/component-styles/src/concept.ts +70 -0
  86. package/examples/dashboard/dist/index.html +1 -1
  87. package/examples/dashboard/dist/{mpmt0gys-1r9rcu.js → mppzjw80-9gwa4h.js} +1223 -863
  88. package/examples/jumpstart/dist/index.html +1 -1
  89. package/examples/jumpstart/dist/{mor90p7p-1898bz.js → mppwx932-xbmb0x.js} +4215 -1984
  90. package/examples/signal-routing/concept.ts +41 -0
  91. package/examples/signal-routing/containers/UI.container.ts +126 -0
  92. package/examples/signal-routing/dist/index.html +18 -0
  93. package/examples/signal-routing/dist/mpq6u1wz-2pkqe2.js +14002 -0
  94. package/examples/signal-routing/public/index.html +18 -0
  95. package/examples/signal-routing/src/components/AboutPage.component.ts +74 -0
  96. package/examples/signal-routing/src/components/AppShell.component.ts +42 -0
  97. package/examples/signal-routing/src/components/HomePage.component.ts +76 -0
  98. package/examples/signal-routing/src/components/NavBar.component.ts +104 -0
  99. package/examples/signal-routing/src/components/SettingsPage.component.ts +98 -0
  100. package/examples/signal-routing/src/concept.ts +114 -0
  101. package/package.json +7 -5
  102. package/src/engine/AreHTML.compiler.ts +24 -7
  103. package/src/engine/AreHTML.context.ts +6 -4
  104. package/src/engine/AreHTML.interpreter.ts +54 -0
  105. package/src/engine/AreHTML.lifecycle.ts +16 -12
  106. package/src/instructions/AreHTML.instructions.types.ts +2 -4
  107. package/src/lib/AreHTMLNode/AreHTMLNode.ts +15 -0
  108. package/src/lib/AreRoot/AreRoot.component.ts +47 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/engine/AreHTML.context.ts"],"names":[],"mappings":"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","file":"AreHTML.context.mjs","sourcesContent":["import { AreContext, AreInstruction, AreNode } from \"@adaas/are\";\nimport { AreHTMLContextConstructor } from \"./AreHTML.types\";\nimport { A_Frame } from \"@adaas/a-frame/core\";\n\n\n@A_Frame.Define({\n namespace: 'a-are-html',\n description: 'Runtime index for the HTML rendering engine. Maps each AreNode and instruction ASEID to its corresponding DOM element so that apply and revert handlers on interpreter instructions can look up their DOM node in O(1). Tracks root-element mounts and maintains the group-level index used by structural directives.'\n})\nexport class AreHTMLEngineContext extends AreContext {\n\n /**\n * Index structure mapping:\n * \n * Node -> Group ID -> Element\n * -----------------------------------------------------------------------------------\n * | - Attribute | group: string | Node\n * | - Directive (e.g. for) | | Node\n */\n\n protected index = {\n /**\n * 1 AreNode = 1 Dom Node\n * \n * uses ASEID\n */\n nodeToHostElements: new Map<string, Node>(),\n /**\n * 1 Group Instruction = MANY Dom Nodes (e.g. for loop)\n * \n * uses ASEID\n */\n groupToElements: new Map<string, Set<Node>>(),\n /**\n * 1 Dom Node = 1 Instruction \n * \n * uses ASEID\n */\n elementToInstruction: new WeakMap<Node, string>(),\n /**\n * 1 Instruction = 1 Dom Node (for CreateElement instructions, for example)\n * \n * uses ASEID\n */\n instructionToElement: new Map<string, Node>(),\n /**\n * Event listeners attached to elements, used for proper cleanup when reverting instructions. Maps a DOM element to a map of event names and their corresponding listeners, allowing the engine to track which listeners are attached to which elements and remove them when necessary (e.g., when an instruction is reverted).\n */\n elementListeners: new WeakMap<Node, Map<string, Set<EventListenerOrEventListenerObject>>>()\n }\n\n /**\n * The root container for the HTML engine, which can be either a Document or a ShadowRoot. This is where the engine will mount the generated DOM elements. The context uses this container to manage the relationship between AreNodes, instructions, and their corresponding DOM elements, allowing for efficient updates and cleanups as the application state changes.\n */\n protected _container: Document;\n\n\n constructor(props: Partial<AreHTMLContextConstructor>) {\n super(props.container?.body.innerHTML || props.source || '');\n this._container = props.container!;\n }\n\n get container(): Document {\n return this._container;\n }\n\n\n /**\n * Retrieves the DOM element associated with a given AreNode. This method looks up the node's ASEID in the nodeToHostElements map to find the corresponding DOM element. If the node is not found, it returns undefined. This allows the engine to efficiently access and manipulate the DOM elements that correspond to specific nodes in the AreNode tree, enabling dynamic updates and interactions based on the application state.\n * \n * @param nodeASEID \n */\n getNodeElement(nodeASEID: string): Node | undefined\n getNodeElement(node: AreNode): Node | undefined\n getNodeElement(node: AreNode | string): Node | undefined {\n if (typeof node === 'string') {\n return this.index.nodeToHostElements.get(node);\n } else {\n return this.index.nodeToHostElements.get(node.aseid.toString());\n }\n }\n\n /**\n * Associates a DOM element with a given instruction and its owner node. This method updates the context's index to map the instruction's ASEID to the provided DOM element, and also maps the element back to the instruction's ASEID for reverse lookup. If the instruction has an owner node, it also maps the node's ASEID to the element. Additionally, if the instruction belongs to a group, it adds the element to the set of elements associated with that group. This indexing allows the engine to efficiently manage and update DOM elements based on instructions and their corresponding nodes, enabling dynamic rendering and interaction in response to application state changes.\n * \n * @param instruction \n * @param element \n */\n setInstructionElement(instruction: AreInstruction, element: Node): void {\n const node = instruction.owner;\n\n this.index.instructionToElement.set(instruction.aseid.toString(), element);\n this.index.elementToInstruction.set(element, instruction.aseid.toString());\n\n if (node) {\n this.index.nodeToHostElements.set(node.aseid.toString(), element);\n }\n\n if (instruction.group) {\n const groupId = instruction.group;\n if (!this.index.groupToElements.has(groupId)) {\n this.index.groupToElements.set(groupId, new Set());\n }\n this.index.groupToElements.get(groupId)!.add(element);\n }\n }\n\n\n /**\n * Retrieves the DOM element associated with a given instruction. This method looks up the instruction's ASEID in the instructionToElement map to find the corresponding DOM element. If the instruction is not found, it returns undefined. This allows the engine to efficiently access and manipulate the DOM elements that correspond to specific instructions, enabling dynamic updates and interactions based on the application state.\n * \n * @param instructionASEID \n */\n getElementByInstruction(instructionASEID: string): Node | undefined\n getElementByInstruction(instruction: AreInstruction): Node | undefined\n getElementByInstruction(instruction: AreInstruction | string): Node | undefined {\n if (typeof instruction === 'string') {\n return this.index.instructionToElement.get(instruction);\n } else {\n return this.index.instructionToElement.get(instruction.aseid.toString());\n }\n }\n\n\n /**\n * Removes the association between a given instruction and its corresponding DOM element. This method looks up the instruction's ASEID to find the associated DOM element, and if found, it deletes the mapping from both instructionToElement and elementToInstruction. If the instruction has an owner node, it also removes the mapping from nodeToHostElements. Additionally, if the instruction belongs to a group, it removes the element from the set of elements associated with that group, and if the group has no more elements, it deletes the group from the index. This cleanup is essential for maintaining an accurate and efficient mapping of instructions to DOM elements, especially when instructions are reverted or when nodes are removed from the DOM.\n * \n * @param instruction \n */\n removeInstructionElement(instruction: AreInstruction): void {\n const element = this.index.instructionToElement.get(instruction.aseid.toString());\n if (element) {\n this.index.instructionToElement.delete(instruction.aseid.toString());\n this.index.elementToInstruction.delete(element);\n\n const node = instruction.owner;\n if (node) {\n this.index.nodeToHostElements.delete(node.aseid.toString());\n }\n\n if (instruction.group) {\n const groupId = instruction.group;\n const groupElements = this.index.groupToElements.get(groupId);\n if (groupElements) {\n groupElements.delete(element);\n if (groupElements.size === 0) {\n this.index.groupToElements.delete(groupId);\n }\n }\n }\n }\n }\n\n /**\n * Retrieves the set of DOM elements associated with a given group. This method looks up the group name or instruction's ASEID in the groupToElements map to find the corresponding set of DOM elements. If the group is not found, it returns undefined. This allows the engine to efficiently access and manipulate all DOM elements that belong to a specific group (e.g., all elements generated by a particular loop instruction), enabling dynamic updates and interactions based on the application state.\n * \n * @param groupName \n */\n getElementsByGroup(groupName: string): Set<Node> | undefined\n getElementsByGroup(instruction: AreInstruction): Set<Node> | undefined\n getElementsByGroup(instruction: AreInstruction | string): Set<Node> | undefined {\n if (typeof instruction === 'string') {\n return this.index.groupToElements.get(instruction);\n } else {\n return this.index.groupToElements.get(instruction.aseid.toString());\n }\n }\n\n /**\n * Adds an event listener to a specific DOM element and keeps track of it in the context's index for proper cleanup later. This method takes a DOM element, an event name, and a listener function or object, and stores this information in the elementListeners map. This allows the engine to efficiently manage event listeners attached to dynamically created elements, ensuring that they can be removed when the associated instructions are reverted or when nodes are removed from the DOM, preventing memory leaks and unintended behavior.\n * \n * @param element \n * @param eventName \n * @param listener \n */\n addListener(element: Node, eventName: string, listener: EventListenerOrEventListenerObject): void {\n if (!this.index.elementListeners.has(element)) {\n this.index.elementListeners.set(element, new Map());\n }\n const byEvent = this.index.elementListeners.get(element)!;\n if (!byEvent.has(eventName)) {\n byEvent.set(eventName, new Set());\n }\n byEvent.get(eventName)!.add(listener);\n }\n /**\n * Retrieves the event listener associated with a specific DOM element and event name from the context's index. This method looks up the element in the elementListeners map and then retrieves the listener for the specified event name. If no listener is found for the given element and event, it returns undefined. This allows the engine to efficiently access and manage event listeners that have been attached to dynamically created elements, enabling proper cleanup when instructions are reverted or when nodes are removed from the DOM.\n * \n * @param element \n * @param eventName \n * @returns \n */\n getListener(element: Node, eventName: string): EventListenerOrEventListenerObject | undefined {\n const set = this.index.elementListeners.get(element)?.get(eventName);\n if (!set || set.size === 0) return undefined;\n // Return the first listener for backwards compatibility.\n return set.values().next().value;\n }\n\n /**\n * Returns all listeners registered for a given element + event name.\n */\n getListeners(element: Node, eventName: string): Set<EventListenerOrEventListenerObject> | undefined {\n return this.index.elementListeners.get(element)?.get(eventName);\n }\n /**\n * Removes an event listener from a specific DOM element and updates the context's index accordingly. This method looks up the element in the elementListeners map and deletes the listener for the specified event name. This is typically called when an instruction is reverted or when a node is removed from the DOM, ensuring that any attached event listeners are properly cleaned up to prevent memory leaks and unintended behavior.\n * \n * @param element \n * @param eventName \n */\n removeListener(element: Node, eventName: string, listener?: EventListenerOrEventListenerObject): void {\n const byEvent = this.index.elementListeners.get(element);\n if (!byEvent) return;\n if (listener) {\n const set = byEvent.get(eventName);\n if (set) {\n set.delete(listener);\n if (set.size === 0) byEvent.delete(eventName);\n }\n } else {\n byEvent.delete(eventName);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/engine/AreHTML.context.ts"],"names":[],"mappings":"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","file":"AreHTML.context.mjs","sourcesContent":["import { AreContext, AreDeclaration, AreInstruction, AreNode } from \"@adaas/are\";\nimport { AreHTMLContextConstructor } from \"./AreHTML.types\";\nimport { A_Frame } from \"@adaas/a-frame/core\";\n\n\n@A_Frame.Define({\n namespace: 'a-are-html',\n description: 'Runtime index for the HTML rendering engine. Maps each AreNode and instruction ASEID to its corresponding DOM element so that apply and revert handlers on interpreter instructions can look up their DOM node in O(1). Tracks root-element mounts and maintains the group-level index used by structural directives.'\n})\nexport class AreHTMLEngineContext extends AreContext {\n\n /**\n * Index structure mapping:\n * \n * Node -> Group ID -> Element\n * -----------------------------------------------------------------------------------\n * | - Attribute | group: string | Node\n * | - Directive (e.g. for) | | Node\n */\n\n protected index = {\n /**\n * 1 AreNode = 1 Dom Node\n * \n * uses ASEID\n */\n nodeToHostElements: new Map<string, Node>(),\n /**\n * 1 Group Instruction = MANY Dom Nodes (e.g. for loop)\n * \n * uses ASEID\n */\n groupToElements: new Map<string, Set<Node>>(),\n /**\n * 1 Dom Node = 1 Instruction \n * \n * uses ASEID\n */\n elementToInstruction: new WeakMap<Node, string>(),\n /**\n * 1 Instruction = 1 Dom Node (for CreateElement instructions, for example)\n * \n * uses ASEID\n */\n instructionToElement: new Map<string, Node>(),\n /**\n * Event listeners attached to elements, used for proper cleanup when reverting instructions. Maps a DOM element to a map of event names and their corresponding listeners, allowing the engine to track which listeners are attached to which elements and remove them when necessary (e.g., when an instruction is reverted).\n */\n elementListeners: new WeakMap<Node, Map<string, Set<EventListenerOrEventListenerObject>>>()\n }\n\n /**\n * The root container for the HTML engine, which can be either a Document or a ShadowRoot. This is where the engine will mount the generated DOM elements. The context uses this container to manage the relationship between AreNodes, instructions, and their corresponding DOM elements, allowing for efficient updates and cleanups as the application state changes.\n */\n protected _container: Document;\n\n\n constructor(props: Partial<AreHTMLContextConstructor>) {\n super(props.container?.body.innerHTML || props.source || '');\n this._container = props.container!;\n }\n\n get container(): Document {\n return this._container;\n }\n\n\n /**\n * Retrieves the DOM element associated with a given AreNode. This method looks up the node's ASEID in the nodeToHostElements map to find the corresponding DOM element. If the node is not found, it returns undefined. This allows the engine to efficiently access and manipulate the DOM elements that correspond to specific nodes in the AreNode tree, enabling dynamic updates and interactions based on the application state.\n * \n * @param nodeASEID \n */\n getNodeElement(nodeASEID: string): Node | undefined\n getNodeElement(node: AreNode): Node | undefined\n getNodeElement(node: AreNode | string): Node | undefined {\n if (typeof node === 'string') {\n return this.index.nodeToHostElements.get(node);\n } else {\n return this.index.nodeToHostElements.get(node.aseid.toString());\n }\n }\n\n /**\n * Associates a DOM element with a given instruction and its owner node. This method updates the context's index to map the instruction's ASEID to the provided DOM element, and also maps the element back to the instruction's ASEID for reverse lookup. If the instruction has an owner node, it also maps the node's ASEID to the element. Additionally, if the instruction belongs to a group, it adds the element to the set of elements associated with that group. This indexing allows the engine to efficiently manage and update DOM elements based on instructions and their corresponding nodes, enabling dynamic rendering and interaction in response to application state changes.\n * \n * @param instruction \n * @param element \n */\n setInstructionElement(instruction: AreInstruction, element: Node): void {\n const node = instruction.owner;\n\n this.index.instructionToElement.set(instruction.aseid.toString(), element);\n this.index.elementToInstruction.set(element, instruction.aseid.toString());\n\n // Only update the host-element pointer for declaration instructions.\n // Mutations (attributes, styles, event listeners, …) produce auxiliary DOM\n // that must never overwrite the owning node's primary element in the index.\n if (node && instruction instanceof AreDeclaration) {\n this.index.nodeToHostElements.set(node.aseid.toString(), element);\n }\n\n if (instruction.group) {\n const groupId = instruction.group;\n if (!this.index.groupToElements.has(groupId)) {\n this.index.groupToElements.set(groupId, new Set());\n }\n this.index.groupToElements.get(groupId)!.add(element);\n }\n }\n\n /**\n * Retrieves the DOM element associated with a given instruction. This method looks up the instruction's ASEID in the instructionToElement map to find the corresponding DOM element. If the instruction is not found, it returns undefined. This allows the engine to efficiently access and manipulate the DOM elements that correspond to specific instructions, enabling dynamic updates and interactions based on the application state.\n * \n * @param instructionASEID \n */\n getElementByInstruction(instructionASEID: string): Node | undefined\n getElementByInstruction(instruction: AreInstruction): Node | undefined\n getElementByInstruction(instruction: AreInstruction | string): Node | undefined {\n if (typeof instruction === 'string') {\n return this.index.instructionToElement.get(instruction);\n } else {\n return this.index.instructionToElement.get(instruction.aseid.toString());\n }\n }\n\n\n /**\n * Removes the association between a given instruction and its corresponding DOM element. This method looks up the instruction's ASEID to find the associated DOM element, and if found, it deletes the mapping from both instructionToElement and elementToInstruction. If the instruction has an owner node, it also removes the mapping from nodeToHostElements. Additionally, if the instruction belongs to a group, it removes the element from the set of elements associated with that group, and if the group has no more elements, it deletes the group from the index. This cleanup is essential for maintaining an accurate and efficient mapping of instructions to DOM elements, especially when instructions are reverted or when nodes are removed from the DOM.\n * \n * @param instruction \n */\n removeInstructionElement(instruction: AreInstruction): void {\n const element = this.index.instructionToElement.get(instruction.aseid.toString());\n if (element) {\n this.index.instructionToElement.delete(instruction.aseid.toString());\n this.index.elementToInstruction.delete(element);\n\n const node = instruction.owner;\n if (node && instruction instanceof AreDeclaration) {\n this.index.nodeToHostElements.delete(node.aseid.toString());\n }\n\n if (instruction.group) {\n const groupId = instruction.group;\n const groupElements = this.index.groupToElements.get(groupId);\n if (groupElements) {\n groupElements.delete(element);\n if (groupElements.size === 0) {\n this.index.groupToElements.delete(groupId);\n }\n }\n }\n }\n }\n\n /**\n * Retrieves the set of DOM elements associated with a given group. This method looks up the group name or instruction's ASEID in the groupToElements map to find the corresponding set of DOM elements. If the group is not found, it returns undefined. This allows the engine to efficiently access and manipulate all DOM elements that belong to a specific group (e.g., all elements generated by a particular loop instruction), enabling dynamic updates and interactions based on the application state.\n * \n * @param groupName \n */\n getElementsByGroup(groupName: string): Set<Node> | undefined\n getElementsByGroup(instruction: AreInstruction): Set<Node> | undefined\n getElementsByGroup(instruction: AreInstruction | string): Set<Node> | undefined {\n if (typeof instruction === 'string') {\n return this.index.groupToElements.get(instruction);\n } else {\n return this.index.groupToElements.get(instruction.aseid.toString());\n }\n }\n\n /**\n * Adds an event listener to a specific DOM element and keeps track of it in the context's index for proper cleanup later. This method takes a DOM element, an event name, and a listener function or object, and stores this information in the elementListeners map. This allows the engine to efficiently manage event listeners attached to dynamically created elements, ensuring that they can be removed when the associated instructions are reverted or when nodes are removed from the DOM, preventing memory leaks and unintended behavior.\n * \n * @param element \n * @param eventName \n * @param listener \n */\n addListener(element: Node, eventName: string, listener: EventListenerOrEventListenerObject): void {\n if (!this.index.elementListeners.has(element)) {\n this.index.elementListeners.set(element, new Map());\n }\n const byEvent = this.index.elementListeners.get(element)!;\n if (!byEvent.has(eventName)) {\n byEvent.set(eventName, new Set());\n }\n byEvent.get(eventName)!.add(listener);\n }\n /**\n * Retrieves the event listener associated with a specific DOM element and event name from the context's index. This method looks up the element in the elementListeners map and then retrieves the listener for the specified event name. If no listener is found for the given element and event, it returns undefined. This allows the engine to efficiently access and manage event listeners that have been attached to dynamically created elements, enabling proper cleanup when instructions are reverted or when nodes are removed from the DOM.\n * \n * @param element \n * @param eventName \n * @returns \n */\n getListener(element: Node, eventName: string): EventListenerOrEventListenerObject | undefined {\n const set = this.index.elementListeners.get(element)?.get(eventName);\n if (!set || set.size === 0) return undefined;\n // Return the first listener for backwards compatibility.\n return set.values().next().value;\n }\n\n /**\n * Returns all listeners registered for a given element + event name.\n */\n getListeners(element: Node, eventName: string): Set<EventListenerOrEventListenerObject> | undefined {\n return this.index.elementListeners.get(element)?.get(eventName);\n }\n /**\n * Removes an event listener from a specific DOM element and updates the context's index accordingly. This method looks up the element in the elementListeners map and deletes the listener for the specified event name. This is typically called when an instruction is reverted or when a node is removed from the DOM, ensuring that any attached event listeners are properly cleaned up to prevent memory leaks and unintended behavior.\n * \n * @param element \n * @param eventName \n */\n removeListener(element: Node, eventName: string, listener?: EventListenerOrEventListenerObject): void {\n const byEvent = this.index.elementListeners.get(element);\n if (!byEvent) return;\n if (listener) {\n const set = byEvent.get(eventName);\n if (set) {\n set.delete(listener);\n if (set.size === 0) byEvent.delete(eventName);\n }\n } else {\n byEvent.delete(eventName);\n }\n }\n}\n"]}
@@ -5,6 +5,7 @@ import { AddCommentInstruction } from '../instructions/AddComment.instruction.mj
5
5
  import { AddElementInstruction } from '../instructions/AddElement.instruction.mjs';
6
6
  import { AddListenerInstruction } from '../instructions/AddListener.instruction.mjs';
7
7
  import { AddTextInstruction } from '../instructions/AddText.instruction.mjs';
8
+ import { AddStyleInstruction } from '../instructions/AddStyle.instruction.mjs';
8
9
  import { AreDirectiveContext } from '../lib/AreDirective/AreDirective.context.mjs';
9
10
  import { AreHTMLEngineContext } from './AreHTML.context.mjs';
10
11
  import '../instructions/AreHTML.instructions.types.mjs';
@@ -23,6 +24,8 @@ declare class AreHTMLInterpreter extends AreInterpreter {
23
24
  removeText(declaration: AddTextInstruction, context: AreHTMLEngineContext): void;
24
25
  addComment(declaration: AddCommentInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
25
26
  removeComment(declaration: AddCommentInstruction, context: AreHTMLEngineContext): void;
27
+ addStyle(mutation: AddStyleInstruction, context: AreHTMLEngineContext, logger?: A_Logger): void;
28
+ removeStyle(mutation: AddStyleInstruction, context: AreHTMLEngineContext): void;
26
29
  /**
27
30
  * Returns true when any ancestor of the given node has the tag `svg`,
28
31
  * meaning the node lives inside an SVG subtree and its DOM element must be
@@ -5,6 +5,7 @@ import { AddCommentInstruction } from '../instructions/AddComment.instruction.js
5
5
  import { AddElementInstruction } from '../instructions/AddElement.instruction.js';
6
6
  import { AddListenerInstruction } from '../instructions/AddListener.instruction.js';
7
7
  import { AddTextInstruction } from '../instructions/AddText.instruction.js';
8
+ import { AddStyleInstruction } from '../instructions/AddStyle.instruction.js';
8
9
  import { AreDirectiveContext } from '../lib/AreDirective/AreDirective.context.js';
9
10
  import { AreHTMLEngineContext } from './AreHTML.context.js';
10
11
  import '../instructions/AreHTML.instructions.types.js';
@@ -23,6 +24,8 @@ declare class AreHTMLInterpreter extends AreInterpreter {
23
24
  removeText(declaration: AddTextInstruction, context: AreHTMLEngineContext): void;
24
25
  addComment(declaration: AddCommentInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
25
26
  removeComment(declaration: AddCommentInstruction, context: AreHTMLEngineContext): void;
27
+ addStyle(mutation: AddStyleInstruction, context: AreHTMLEngineContext, logger?: A_Logger): void;
28
+ removeStyle(mutation: AddStyleInstruction, context: AreHTMLEngineContext): void;
26
29
  /**
27
30
  * Returns true when any ancestor of the given node has the tag `svg`,
28
31
  * meaning the node lives inside an SVG subtree and its DOM element must be
@@ -358,6 +358,32 @@ exports.AreHTMLInterpreter = class AreHTMLInterpreter extends are.AreInterpreter
358
358
  element.parentNode?.removeChild(element);
359
359
  context.removeInstructionElement(declaration);
360
360
  }
361
+ addStyle(mutation, context, logger) {
362
+ try {
363
+ const { styles } = mutation.payload;
364
+ const styleId = `are-style-${String(mutation.aseid)}`;
365
+ const existing = context.getElementByInstruction(mutation);
366
+ if (existing) {
367
+ existing.textContent = styles;
368
+ } else {
369
+ const styleEl = context.container.createElement("style");
370
+ styleEl.setAttribute("data-are-id", styleId);
371
+ styleEl.textContent = styles;
372
+ (context.container.head ?? context.container.body).appendChild(styleEl);
373
+ context.setInstructionElement(mutation, styleEl);
374
+ logger?.debug("green", `Style injected for ${String(mutation.aseid)}`);
375
+ }
376
+ } catch (error) {
377
+ logger?.error(error);
378
+ }
379
+ }
380
+ removeStyle(mutation, context) {
381
+ const styleEl = context.getElementByInstruction(mutation);
382
+ if (styleEl?.parentNode) {
383
+ styleEl.parentNode.removeChild(styleEl);
384
+ }
385
+ context.removeInstructionElement(mutation);
386
+ }
361
387
  // ─────────────────────────────────────────────────────────────────────────────
362
388
  // ── SVG helpers ───────────────────────────────────────────────────────────────
363
389
  // ─────────────────────────────────────────────────────────────────────────────
@@ -478,6 +504,24 @@ __decorateClass([
478
504
  __decorateParam(0, aConcept.A_Inject(aConcept.A_Caller)),
479
505
  __decorateParam(1, aConcept.A_Inject(AreHTML_context.AreHTMLEngineContext))
480
506
  ], exports.AreHTMLInterpreter.prototype, "removeComment", 1);
507
+ __decorateClass([
508
+ core.A_Frame.Define({
509
+ 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."
510
+ }),
511
+ are.AreInterpreter.Apply(AreHTML_instructions_constants.AreHTMLInstructions.AddStyle),
512
+ are.AreInterpreter.Update(AreHTML_instructions_constants.AreHTMLInstructions.AddStyle),
513
+ __decorateParam(0, aConcept.A_Inject(aConcept.A_Caller)),
514
+ __decorateParam(1, aConcept.A_Inject(AreHTML_context.AreHTMLEngineContext)),
515
+ __decorateParam(2, aConcept.A_Inject(aLogger.A_Logger))
516
+ ], exports.AreHTMLInterpreter.prototype, "addStyle", 1);
517
+ __decorateClass([
518
+ core.A_Frame.Define({
519
+ description: "Remove the <style> element that was injected by addStyle, cleaning up the document head."
520
+ }),
521
+ are.AreInterpreter.Revert(AreHTML_instructions_constants.AreHTMLInstructions.AddStyle),
522
+ __decorateParam(0, aConcept.A_Inject(aConcept.A_Caller)),
523
+ __decorateParam(1, aConcept.A_Inject(AreHTML_context.AreHTMLEngineContext))
524
+ ], exports.AreHTMLInterpreter.prototype, "removeStyle", 1);
481
525
  exports.AreHTMLInterpreter = __decorateClass([
482
526
  core.A_Frame.Define({
483
527
  namespace: "a-are-html",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/engine/AreHTML.interpreter.ts"],"names":["AreHTMLInterpreter","AreInterpreter","AreInterpreterError","SVG_NAMESPACE","SVG_ATTRIBUTE_NS","toDOMString","isBooleanAttribute","isIDLFormProperty","normalizeClassValue","normalizeStyleValue","parseEventName","AreEvent","A_Frame","AreInstructionDefaultNames","AreHTMLInstructions","A_Caller","AreHTMLEngineContext","A_Logger","AreStore","AreSyntax","AreDirectiveContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmCaA,0BAAA,GAAN,iCAAiCC,kBAAA,CAAe;AAAA,EASnD,UAAA,CACwB,WAAA,EACY,OAAA,EACZ,MAAA,EACtB;AACE,IAAA,IAAI;AACA,MAAA,MAAM,OAAO,WAAA,CAAY,KAAA;AAEzB,MAAA,IAAI,WAAA,GAAuC,IAAA;AAC3C,MAAA,IAAI,SAAkC,IAAA,CAAK,MAAA;AAE3C,MAAA,OAAO,MAAA,EAAQ;AACX,QAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA,EAAG;AAChC,UAAA;AAAA,QACJ;AACA,QAAA,WAAA,GAAc,MAAA;AACd,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,MACpB;AAIA,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAEjB,MAAA,MAAM,KAAA,GAAQ,GAAA,KAAQ,KAAA,IAAS,IAAA,CAAK,eAAe,IAAI,CAAA;AAEvD,MAAA,IAAI,MAAA,EAAQ;AAER,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA;AAEhD,QAAA,IAAI,CAAC,UAAA,EAAY;AACb,UAAA,MAAM,IAAIC,uBAAA,CAAoB;AAAA,YAC1B,KAAA,EAAO,uBAAA;AAAA,YACP,WAAA,EAAa,CAAA,mDAAA,EAAsD,IAAA,CAAK,EAAE,CAAA,yIAAA;AAAA,WAC7E,CAAA;AAAA,QACL;AAEA,QAAA,MAAM,OAAA,GAAU,KAAA,GACV,OAAA,CAAQ,SAAA,CAAU,eAAA,CAAgBC,+BAAA,EAAe,GAAG,CAAA,GACpD,OAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,GAAG,CAAA;AAEzC,QAAA,IAAI,UAAA,CAAW,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AAE3C,UAAA,UAAA,CAAW,YAAY,OAAO,CAAA;AAAA,QAClC,CAAA,MAAO;AAGH,UAAA,UAAA,CAAW,UAAA,EAAY,YAAA,CAAa,OAAA,EAAS,UAAU,CAAA;AAAA,QAC3D;AAEA,QAAA,OAAA,CAAQ,qBAAA,CAAsB,aAAa,OAAO,CAAA;AAAA,MAEtD,CAAA,MAAO;AACH,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,SAAA,CAAU,cAAA,CAAe,KAAK,EAAE,CAAA;AAC3D,QAAA,IAAI,CAAC,UAAA,EAAY;AACb,UAAA,MAAM,IAAID,uBAAA,CAAoB;AAAA,YAC1B,KAAA,EAAO,uBAAA;AAAA,YACP,WAAA,EAAa,CAAA,mDAAA,EAAsD,IAAA,CAAK,EAAE,CAAA,yIAAA;AAAA,WAC7E,CAAA;AAAA,QACL;AAEA,QAAA,MAAM,OAAA,GAAU,KAAA,GACV,OAAA,CAAQ,SAAA,CAAU,eAAA,CAAgBC,+BAAA,EAAe,GAAG,CAAA,GACpD,OAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,GAAG,CAAA;AAEzC,QAAA,UAAA,CAAW,UAAA,EAAY,YAAA,CAAa,OAAA,EAAS,UAAU,CAAA;AAEvD,QAAA,OAAA,CAAQ,qBAAA,CAAsB,aAAa,OAAO,CAAA;AAAA,MACtD;AAIA,MAAA,MAAA,EAAQ,MAAM,OAAA,EAAS,CAAA,QAAA,EAAW,KAAK,KAAA,CAAM,QAAA,EAAU,CAAA,kBAAA,CAAoB,CAAA;AAAA,IAE/E,SAAS,KAAA,EAAO;AACZ,MAAA,MAAA,EAAQ,MAAM,KAAK,CAAA;AACnB,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAQA,aAAA,CACwB,aACY,OAAA,EAClC;AACE,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,WAAW,CAAA;AAE3D,IAAA,IAAI,OAAA,IAAW,QAAQ,UAAA,EAAY;AAC/B,MAAA,OAAA,CAAQ,UAAA,CAAW,YAAY,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAA,CAAQ,yBAAyB,WAAW,CAAA;AAAA,EAChD;AAAA,EAWA,aACwB,QAAA,EACY,OAAA,EACZ,KAAA,EACC,MAAA,EACU,kBAEX,MAAA,EAChB;AACJ,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAA,CAAS,MAAO,CAAA;AAGhE,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,MAAM,IAAID,uBAAA,CAAoB;AAAA,QAC1B,KAAA,EAAO,mBAAA;AAAA,QACP,WAAA,EAAa,CAAA,oEAAA,EAAuE,QAAA,CAAS,MAAM,CAAA,iIAAA;AAAA,OACtG,CAAA;AAAA,IACL;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,KAAa,QAAA,CAAS,OAAA;AAE7C,IAAA,MAAM,QAAA,GAAW,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,SAAS,KAAA,EAAO;AAAA,MACxD,GAAI,gBAAA,EAAkB,KAAA,IAAS;AAAC,KACnC,CAAA,GAAI,OAAA;AAEL,IAAA,MAAM,EAAA,GAAK,OAAA;AACX,IAAA,MAAM,SAAA,GAAY,KAAK,WAAA,EAAY;AAGnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,WAAW,CAAA,EAAG;AACd,MAAA,MAAM,KAAKE,kCAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAC,CAAA;AACnD,MAAA,IAAI,EAAA,EAAI;AACJ,QAAC,GAAe,cAAA,CAAe,EAAA,EAAI,IAAA,EAAMC,6BAAA,CAAY,QAAQ,CAAC,CAAA;AAC9D,QAAA,QAAA,CAAS,KAAA,GAAQA,8BAAY,QAAQ,CAAA;AACrC,QAAA;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,IAAIC,oCAAA,CAAmB,SAAS,CAAA,EAAG;AAC/B,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,EAAA,CAAG,YAAA,CAAa,WAAW,EAAE,CAAA;AAE7B,QAAA,IAAI;AAAE,UAAC,EAAA,CAAW,SAAS,CAAA,GAAI,IAAA;AAAA,QAAM,CAAA,CAAA,MAAQ;AAAA,QAAe;AAAA,MAChE,CAAA,MAAO;AACH,QAAA,EAAA,CAAG,gBAAgB,SAAS,CAAA;AAC5B,QAAA,IAAI;AAAE,UAAC,EAAA,CAAW,SAAS,CAAA,GAAI,KAAA;AAAA,QAAO,CAAA,CAAA,MAAQ;AAAA,QAAe;AAAA,MACjE;AACA,MAAA,QAAA,CAAS,KAAA,GAAQ,WAAW,MAAA,GAAS,EAAA;AACrC,MAAA;AAAA,IACJ;AAGA,IAAA,IAAIC,mCAAA,CAAkB,EAAA,CAAG,OAAA,EAAS,IAAI,CAAA,EAAG;AACrC,MAAA,MAAM,QAAA,GAAW,IAAA,KAAS,OAAA,GAAU,OAAA,GAC9B,IAAA,KAAS,SAAA,GAAY,SAAA,GACjB,IAAA,KAAS,UAAA,GAAa,UAAA,GAClB,IAAA,KAAS,eAAA,GAAkB,eAAA,GACvB,IAAA;AAClB,MAAA,IAAI;AACA,QAAA,IAAI,QAAA,KAAa,SAAA,IAAa,QAAA,KAAa,UAAA,IAAc,aAAa,eAAA,EAAiB;AACnF,UAAC,EAAA,CAAW,QAAQ,CAAA,GAAI,CAAC,CAAC,QAAA;AAAA,QAC9B,CAAA,MAAO;AACH,UAAC,EAAA,CAAW,QAAQ,CAAA,GAAIF,6BAAA,CAAY,QAAQ,CAAA;AAAA,QAChD;AAAA,MACJ,CAAA,CAAA,MAAQ;AAAA,MAAe;AAEvB,MAAA,IAAI,aAAa,OAAA,EAAS;AACtB,QAAA,IAAI,QAAA,EAAU,EAAA,CAAG,YAAA,CAAa,IAAA,EAAM,EAAE,CAAA;AAAA,aAAQ,EAAA,CAAG,gBAAgB,IAAI,CAAA;AAAA,MACzE,CAAA,MAAO;AACH,QAAA,EAAA,CAAG,YAAA,CAAa,IAAA,EAAMA,6BAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,MAC/C;AACA,MAAA,QAAA,CAAS,KAAA,GAAQA,8BAAY,QAAQ,CAAA;AACrC,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,cAAc,OAAA,EAAS;AACvB,MAAA,MAAM,QAAA,GAAWG,sCAAoB,QAAQ,CAAA;AAE7C,MAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAC9B,QAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,YAAA,CAAa,OAAO,CAAA;AAC7C,QAAA,MAAM,MAAA,GAAS,gBAAgB,CAAA,EAAG,aAAa,IAAI,QAAQ,CAAA,CAAA,CAAG,MAAK,GAAI,QAAA;AACvE,QAAA,IAAI,MAAA,EAAQ,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAAA,aAAQ,EAAA,CAAG,gBAAgB,OAAO,CAAA;AAAA,MACjF,CAAA,MAAO;AACH,QAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,YAAA,CAAa,OAAO,CAAA;AAC7C,QAAA,MAAM,aAAA,GAAgB,gBAAgB,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,EAAC;AACpF,QAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAK,QAAA,CAAS,KAAA,CAAiB,MAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AAChF,QAAA,MAAM,QAAA,GAAW,WAAW,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,EAAC;AAErE,QAAA,MAAM,SAAS,CAAC,GAAG,aAAA,CAAc,MAAA,CAAO,OAAK,CAAC,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,GAAG,QAAQ,CAAA,CAAE,KAAK,GAAG,CAAA;AACrF,QAAA,IAAI,MAAA,EAAQ,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAAA,aAAQ,EAAA,CAAG,gBAAgB,OAAO,CAAA;AAAA,MACjF;AACA,MAAA,QAAA,CAAS,KAAA,GAAQ,QAAA;AACjB,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,cAAc,OAAA,EAAS;AACvB,MAAA,MAAM,QAAA,GAAWC,sCAAoB,QAAQ,CAAA;AAC7C,MAAA,IAAI,QAAA,EAAU,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,QAAQ,CAAA;AAAA,WAAQ,EAAA,CAAG,gBAAgB,OAAO,CAAA;AACjF,MAAA,QAAA,CAAS,KAAA,GAAQ,QAAA;AACjB,MAAA;AAAA,IACJ;AAGA,IAAA,MAAM,WAAA,GAAcJ,8BAAY,QAAQ,CAAA;AACxC,IAAA,IAAI,WAAA,KAAgB,MAAM,QAAA,KAAa,QAAA,KAAa,SAAS,QAAA,KAAa,IAAA,IAAQ,aAAa,MAAA,CAAA,EAAY;AACvG,MAAA,EAAA,CAAG,gBAAgB,IAAI,CAAA;AAAA,IAC3B,CAAA,MAAO;AACH,MAAA,EAAA,CAAG,YAAA,CAAa,MAAM,WAAW,CAAA;AAAA,IACrC;AACA,IAAA,QAAA,CAAS,KAAA,GAAQ,WAAA;AAAA,EAGrB;AAAA,EAMA,eAAA,CACwB,UACY,OAAA,EAC5B;AACJ,IAAA,IAAI;AACA,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAA,CAAS,MAAO,CAAA;AAEhE,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,QAAA,CAAS,OAAA;AAE1B,MAAA,IAAI,IAAA,IAAQ,OAAA,CAAQ,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AAChD,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACjC,QAAA,IAAI,WAAW,CAAA,EAAG;AACd,UAAA,MAAM,KAAKD,kCAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAC,CAAA;AACnD,UAAA,IAAI,EAAA,EAAI;AACJ,YAAC,QAAoB,iBAAA,CAAkB,EAAA,EAAI,KAAK,KAAA,CAAM,QAAA,GAAW,CAAC,CAAC,CAAA;AAAA,UACvE,CAAA,MAAO;AACH,YAAC,OAAA,CAAwB,gBAAgB,IAAI,CAAA;AAAA,UACjD;AAAA,QACJ,CAAA,MAAO;AACH,UAAC,OAAA,CAAwB,gBAAgB,IAAI,CAAA;AAAA,QACjD;AAAA,MACJ;AAAA,IACJ,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,6BAA6B,KAAK,CAAA;AAAA,IAClD;AAAA,EAEJ;AAAA,EAWA,iBACwB,QAAA,EACY,OAAA,EACZ,KAAA,EACC,MAAA,EACU,kBACX,MAAA,EACtB;AAEE,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAA,CAAS,MAAM,CAAA;AAE/D,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,MAAM,IAAIF,uBAAA,CAAoB;AAAA,QAC1B,KAAA,EAAO,mBAAA;AAAA,QACP,WAAA,EAAa,CAAA,oEAAA,EAAuE,QAAA,CAAS,MAAM,CAAA,2HAAA;AAAA,OACtG,CAAA;AAAA,IACL;AAUA,IAAA,MAAM,EAAE,OAAO,SAAA,EAAW,SAAA,KAAcQ,gCAAA,CAAe,QAAA,CAAS,QAAQ,IAAI,CAAA;AAE5E,IAAA,MAAM,kBAA2C,EAAC;AAClD,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,kBAAmB,OAAA,GAAU,IAAA;AACxD,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,kBAAmB,IAAA,GAAO,IAAA;AAClD,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,kBAAmB,OAAA,GAAU,IAAA;AAExD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAS,QAAQ,OAAO,CAAA;AAIpE,IAAA,IAAI,SAAA,GAA0B,IAAA;AAE9B,IAAA,MAAM,eAAoC,EAAC;AAE3C,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,SAAA,GAAY,IAAI,IAAA,KAAgB;AAClC,QAAA,MAAM,KAAA,GAAQ,IAAIC,YAAA,CAAS,OAAO,CAAA;AAGlC,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,SAAA,GACrC,CAAC,SAAS,CAAA,GACV,SAAA,GACI,CAAC,GAAG,IAAA,EAAM,SAAS,CAAA,GACnB,IAAA;AACV,QAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,aAAa,CAAA;AAC/B,QAAA,KAAA,CAAM,GAAA,CAAI,WAAW,OAAO,CAAA;AAC5B,QAAA,KAAA,CAAM,GAAA,CAAI,eAAe,QAAQ,CAAA;AAGjC,QAAA,IAAI,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,SAAgB,CAAA;AACnD,QAAA,QAAA,CAAS,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAC7B,CAAA;AACA,MAAA,YAAA,CAAa,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,GAAI,SAAA;AAAA,IAClC;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAa;AAC3B,MAAA,IAAI;AACA,QAAA,SAAA,GAAY,CAAA;AAEZ,QAAA,IAAI,UAAU,GAAA,CAAI,MAAM,CAAA,IAAK,CAAA,CAAE,WAAW,OAAA,EAAS;AACnD,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,IAAK,eAAA,EAAgB;AAC7C,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,IAAK,cAAA,EAAe;AAG/C,QAAA,IAAI,CAAA,YAAa,aAAA,IAAiB,SAAA,CAAU,IAAA,GAAO,CAAA,EAAG;AAClD,UAAA,MAAM,GAAA,GAAA,CAAO,CAAA,CAAE,GAAA,IAAO,EAAA,EAAI,WAAA,EAAY;AACtC,UAAA,MAAM,WAAA,GAAwC;AAAA,YAC1C,KAAA,EAAO,CAAC,OAAO,CAAA;AAAA,YACf,GAAA,EAAK,CAAC,QAAQ,CAAA;AAAA,YACd,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,YACjB,GAAA,EAAK,CAAC,KAAK,CAAA;AAAA,YACX,KAAA,EAAO,CAAC,GAAA,EAAK,UAAU,CAAA;AAAA,YACvB,EAAA,EAAI,CAAC,SAAS,CAAA;AAAA,YACd,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,YAClB,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,YAClB,KAAA,EAAO,CAAC,YAAY,CAAA;AAAA,YACpB,MAAA,EAAQ,CAAC,QAAA,EAAU,WAAW;AAAA,WAClC;AACA,UAAA,MAAM,UAAU,CAAC,GAAG,SAAS,CAAA,CAAE,OAAO,CAAA,CAAA,KAClC,CAAA,IAAK,WAAA,IACL,CAAA,KAAM,UAAU,CAAA,KAAM,KAAA,IAAS,CAAA,KAAM,OAAA,IAAW,MAAM,MAAM,CAAA;AAEhE,UAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpB,YAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK;AAC/B,cAAA,IAAI,CAAA,KAAM,MAAA,EAAQ,OAAO,CAAA,CAAE,OAAA;AAC3B,cAAA,IAAI,CAAA,KAAM,KAAA,EAAO,OAAO,CAAA,CAAE,MAAA;AAC1B,cAAA,IAAI,CAAA,KAAM,OAAA,EAAS,OAAO,CAAA,CAAE,QAAA;AAC5B,cAAA,IAAI,CAAA,KAAM,MAAA,EAAQ,OAAO,CAAA,CAAE,OAAA;AAC3B,cAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAC7B,cAAA,OAAO,OAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;AAAA,YAC1C,CAAC,CAAA;AACD,YAAA,IAAI,CAAC,QAAA,EAAU;AAAA,UACnB;AAAA,QACJ;AAEA,QAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAE7C,QAAA,MAAM,SAAS,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,SAAS,KAAA,EAAO;AAAA,UAC5D,GAAG,YAAA;AAAA,UACH,MAAA,EAAQ,CAAA;AAAA,UACR,GAAI,gBAAA,EAAkB,KAAA,IAAS;AAAC,SACnC,CAAA;AACD,QAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,MAAA,CAAO,CAAC,CAAA;AAE1C,QAAA,OAAA,CAAQ,cAAA,CAAe,WAAW,SAAS,CAAA;AAAA,MAC/C,SAAS,GAAA,EAAK;AACV,QAAA,MAAA,EAAQ,MAAM,GAAG,CAAA;AAAA,MACrB,CAAA,SAAE;AACE,QAAA,SAAA,GAAY,IAAA;AAAA,MAChB;AAAA,IACJ,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,OAAA,IAAW,eAAA,CAAgB,QAAQ,eAAA,CAAgB,OAAA;AACtF,IAAA,IAAI,UAAA,EAAY;AACZ,MAAA,OAAA,CAAQ,gBAAA,CAAiB,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAAA,IACjE,CAAA,MAAO;AACH,MAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAAA,IAChD;AAGA,IAAC,QAAA,CAAS,QAAgB,SAAA,GAAY,QAAA;AACtC,IAAA,OAAA,CAAQ,WAAA,CAAY,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAAA,EAChE;AAAA,EAOA,mBAAA,CACwB,UACY,OAAA,EAClC;AACE,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAA,CAAS,MAAM,CAAA;AAE/D,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,QAAA,CAAS,OAAA;AAC1B,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,iCAAe,IAAI,CAAA;AAEhD,IAAA,MAAM,QAAA,GAAY,SAAS,OAAA,CAAgB,SAAA;AAE3C,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,OAAA,CAAQ,mBAAA,CAAoB,WAAW,QAAQ,CAAA;AAC/C,MAAA,OAAA,CAAQ,cAAA,CAAe,OAAA,EAAS,IAAA,EAAM,QAAQ,CAAA;AAC9C,MAAC,QAAA,CAAS,QAAgB,SAAA,GAAY,MAAA;AAAA,IAC1C;AAAA,EACJ;AAAA,EAYA,QACwB,WAAA,EACY,OAAA,EACZ,KAAA,EACC,MAAA,EACU,kBAEX,MAAA,EACtB;AACE,IAAA,MAAM,IAAA,GAAO,YAAY,KAAA,CAAM,MAAA;AAC/B,IAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,WAAA,CAAY,OAAA;AAE1C,IAAA,MAAM,QAAA,GAAW,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,SAAS,KAAA,EAAO;AAAA,MACxD,GAAI,gBAAA,EAAkB,KAAA,IAAS;AAAC,KACnC,CAAA,GAAI,OAAA;AAEL,IAAA,MAAM,KAAA,GAAQL,8BAAY,QAAQ,CAAA;AAGlC,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,CAAU,cAAA,CAAe,KAAK,CAAA;AACvD,MAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAC3C,MAAA,OAAA,CAAQ,qBAAA,CAAsB,aAAa,QAAQ,CAAA;AAAA,IAEvD,CAAA,MAAO;AACH,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAE3C,MAAA,IAAI,CAAC,OAAA,EAAS;AACV,QAAA,MAAM,IAAIH,uBAAA,CAAoB;AAAA,UAC1B,KAAA,EAAO,mBAAA;AAAA,UACP,WAAA,EAAa,CAAA,oEAAA,EAAuE,WAAA,CAAY,KAAA,CAAM,OAAO,KAAK,CAAA,iIAAA;AAAA,SACrH,CAAA;AAAA,MAEL;AAEA,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,uBAAA,CAAwB,WAAW,CAAA;AAEhE,MAAA,IAAI,YAAA,EAAc;AACd,QAAA,YAAA,CAAa,WAAA,GAAc,KAAA;AAAA,MAC/B,CAAA,MAAO;AACH,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,CAAU,cAAA,CAAe,KAAK,CAAA;AACvD,QAAA,OAAA,CAAQ,YAAY,QAAQ,CAAA;AAE5B,QAAA,OAAA,CAAQ,qBAAA,CAAsB,aAAa,QAAQ,CAAA;AAAA,MACvD;AAAA,IACJ;AAIA,IAAA,MAAA,EAAQ,MAAM,OAAA,EAAS,CAAA,KAAA,EAAQ,MAAM,KAAA,CAAM,QAAA,EAAU,CAAA,kBAAA,CAAoB,CAAA;AAAA,EAE7E;AAAA,EAOA,UAAA,CACwB,aACY,OAAA,EAClC;AACE,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,WAAW,CAAA;AAE3D,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,OAAA,CAAQ,UAAA,EAAY,YAAY,OAAO,CAAA;AACvC,IAAA,OAAA,CAAQ,yBAAyB,WAAW,CAAA;AAAA,EAChD;AAAA,EASA,WACwB,WAAA,EACY,OAAA,EACZ,KAAA,EACC,MAAA,EACU,kBAEX,MAAA,EACtB;AACE,IAAA,MAAM,IAAA,GAAO,YAAY,KAAA,CAAM,MAAA;AAC/B,IAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,WAAA,CAAY,OAAA;AAE1C,IAAA,MAAM,QAAA,GAAW,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,SAAS,KAAA,EAAO;AAAA,MACxD,GAAI,gBAAA,EAAkB,KAAA,IAAS;AAAC,KACnC,CAAA,GAAI,OAAA;AAEL,IAAA,MAAM,KAAA,GAAQG,8BAAY,QAAQ,CAAA;AAGlC,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,KAAK,CAAA;AACzD,MAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA;AAC9C,MAAA,OAAA,CAAQ,qBAAA,CAAsB,aAAa,WAAW,CAAA;AAAA,IAE1D,CAAA,MAAO;AACH,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAE3C,MAAA,IAAI,CAAC,OAAA,EAAS;AACV,QAAA,MAAM,IAAIH,uBAAA,CAAoB;AAAA,UAC1B,KAAA,EAAO,mBAAA;AAAA,UACP,WAAA,EAAa,CAAA,oEAAA,EAAuE,WAAA,CAAY,KAAA,CAAM,OAAO,KAAK,CAAA,iIAAA;AAAA,SACrH,CAAA;AAAA,MACL;AAEA,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,uBAAA,CAAwB,WAAW,CAAA;AAEhE,MAAA,IAAI,YAAA,EAAc;AACd,QAAA,YAAA,CAAa,WAAA,GAAc,KAAA;AAAA,MAC/B,CAAA,MAAO;AACH,QAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,KAAK,CAAA;AACzD,QAAA,OAAA,CAAQ,YAAY,WAAW,CAAA;AAE/B,QAAA,OAAA,CAAQ,qBAAA,CAAsB,aAAa,WAAW,CAAA;AAAA,MAC1D;AAAA,IACJ;AAIA,IAAA,MAAA,EAAQ,MAAM,OAAA,EAAS,CAAA,QAAA,EAAW,MAAM,KAAA,CAAM,QAAA,EAAU,CAAA,kBAAA,CAAoB,CAAA;AAAA,EAChF;AAAA,EAOA,aAAA,CACwB,aACY,OAAA,EAClC;AACE,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,WAAW,CAAA;AAE3D,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,OAAA,CAAQ,UAAA,EAAY,YAAY,OAAO,CAAA;AACvC,IAAA,OAAA,CAAQ,yBAAyB,WAAW,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,eAAe,IAAA,EAA4B;AAC/C,IAAA,IAAI,UAAmC,IAAA,CAAK,MAAA;AAC5C,IAAA,OAAO,OAAA,EAAS;AACZ,MAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,KAAA,EAAO,OAAO,IAAA;AAElC,MAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,eAAA,EAAiB,OAAO,KAAA;AAC5C,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,IACtB;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AArlBI,eAAA,CAAA;AAAA,EALCU,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,KAAA,CAAMY,8BAAA,CAA2B,OAAO,CAAA;AAAA,EACvDZ,kBAAA,CAAe,KAAA,CAAMa,kDAAA,CAAoB,UAAU,CAAA;AAAA,EAE/C,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA,CAAA;AAAA,EAC7B,qCAASC,gBAAQ,CAAA;AAAA,CAAA,EAZbjB,0BAAA,CAST,SAAA,EAAA,YAAA,EAAA,CAAA,CAAA;AAqFA,eAAA,CAAA;AAAA,EALCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,MAAA,CAAOY,8BAAA,CAA2B,OAAO,CAAA;AAAA,EACxDZ,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,UAAU,CAAA;AAAA,EAEhD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA;AAAA,CAAA,EAhGzBhB,0BAAA,CA8FT,SAAA,EAAA,eAAA,EAAA,CAAA,CAAA;AAsBA,eAAA,CAAA;AAAA,EALCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,KAAA,CAAMa,kDAAA,CAAoB,YAAY,CAAA;AAAA,EACrDb,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,YAAY,CAAA;AAAA,EAElD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA,CAAA;AAAA,EAC7B,qCAASE,YAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,aAAS,CAAA,CAAA;AAAA,EAClB,qCAASC,wCAAmB,CAAA,CAAA;AAAA,EAE5B,qCAASH,gBAAQ,CAAA;AAAA,CAAA,EA3HbjB,0BAAA,CAoHT,SAAA,EAAA,cAAA,EAAA,CAAA,CAAA;AAyHA,eAAA,CAAA;AAAA,EAJCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,YAAY,CAAA;AAAA,EAElD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA;AAAA,CAAA,EA/OzBhB,0BAAA,CA6OT,SAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;AAuCA,eAAA,CAAA;AAAA,EAJCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,KAAA,CAAMa,kDAAA,CAAoB,WAAW,CAAA;AAAA,EAEhD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA,CAAA;AAAA,EAC7B,qCAASE,YAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,aAAS,CAAA,CAAA;AAAA,EAClB,qCAASC,wCAAmB,CAAA,CAAA;AAAA,EAC5B,qCAASH,gBAAQ,CAAA;AAAA,CAAA,EA1RbjB,0BAAA,CAoRT,SAAA,EAAA,kBAAA,EAAA,CAAA,CAAA;AAwIA,eAAA,CAAA;AAAA,EAJCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,WAAW,CAAA;AAAA,EAEjD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA;AAAA,CAAA,EA9ZzBhB,0BAAA,CA4ZT,SAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;AA8BA,eAAA,CAAA;AAAA,EALCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,KAAA,CAAMa,kDAAA,CAAoB,OAAO,CAAA;AAAA,EAChDb,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,OAAO,CAAA;AAAA,EAE7C,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA,CAAA;AAAA,EAC7B,qCAASE,YAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,aAAS,CAAA,CAAA;AAAA,EAClB,qCAASC,wCAAmB,CAAA,CAAA;AAAA,EAE5B,qCAASH,gBAAQ,CAAA;AAAA,CAAA,EAjcbjB,0BAAA,CA0bT,SAAA,EAAA,SAAA,EAAA,CAAA,CAAA;AA0DA,eAAA,CAAA;AAAA,EAJCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,OAAO,CAAA;AAAA,EAE7C,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA;AAAA,CAAA,EAtfzBhB,0BAAA,CAofT,SAAA,EAAA,YAAA,EAAA,CAAA,CAAA;AAmBA,eAAA,CAAA;AAAA,EALCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,KAAA,CAAMa,kDAAA,CAAoB,UAAU,CAAA;AAAA,EACnDb,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,UAAU,CAAA;AAAA,EAEhD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA,CAAA;AAAA,EAC7B,qCAASE,YAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,aAAS,CAAA,CAAA;AAAA,EAClB,qCAASC,wCAAmB,CAAA,CAAA;AAAA,EAE5B,qCAASH,gBAAQ,CAAA;AAAA,CAAA,EA9gBbjB,0BAAA,CAugBT,SAAA,EAAA,YAAA,EAAA,CAAA,CAAA;AAwDA,eAAA,CAAA;AAAA,EAJCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,UAAU,CAAA;AAAA,EAEhD,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA;AAAA,CAAA,EAjkBzBhB,0BAAA,CA+jBT,SAAA,EAAA,eAAA,EAAA,CAAA,CAAA;AA/jBSA,0BAAA,GAAN,eAAA,CAAA;AAAA,EAJNY,aAAQ,MAAA,CAAO;AAAA,IACZ,SAAA,EAAW,YAAA;AAAA,IACX,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACYZ,0BAAA,CAAA","file":"AreHTML.interpreter.js","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 { 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 if (mountPoint.nodeType === Node.ELEMENT_NODE) {\n // parent is a real element — just append\n mountPoint.appendChild(element);\n } else {\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\n context.setInstructionElement(declaration, element);\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 mountPoint.parentNode?.replaceChild(element, mountPoint);\n\n context.setInstructionElement(declaration, element);\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 if (element && element.parentNode) {\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 if (name && element.nodeType === Node.ELEMENT_NODE) {\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 // ── 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 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 mutation.owner.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 const keyMods = [...modifiers].filter(m =>\n m in KEY_ALIASES ||\n m === 'ctrl' || m === 'alt' || m === 'shift' || m === 'meta');\n\n if (keyMods.length > 0) {\n const keyMatch = keyMods.some(m => {\n if (m === 'ctrl') return e.ctrlKey;\n if (m === 'alt') return e.altKey;\n if (m === 'shift') return e.shiftKey;\n if (m === 'meta') return e.metaKey;\n const aliases = KEY_ALIASES[m];\n return aliases && aliases.includes(key);\n });\n if (!keyMatch) 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 element.removeEventListener(eventName, listener);\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 element.parentNode?.removeChild(element);\n context.removeInstructionElement(declaration);\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 element.parentNode?.removeChild(element);\n context.removeInstructionElement(declaration);\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}"]}
1
+ {"version":3,"sources":["../../../src/engine/AreHTML.interpreter.ts"],"names":["AreHTMLInterpreter","AreInterpreter","AreInterpreterError","SVG_NAMESPACE","SVG_ATTRIBUTE_NS","toDOMString","isBooleanAttribute","isIDLFormProperty","normalizeClassValue","normalizeStyleValue","parseEventName","AreEvent","A_Frame","AreInstructionDefaultNames","AreHTMLInstructions","A_Caller","AreHTMLEngineContext","A_Logger","AreStore","AreSyntax","AreDirectiveContext"],"mappings":"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","file":"AreHTML.interpreter.js","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 { 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 if (mountPoint.nodeType === Node.ELEMENT_NODE) {\n // parent is a real element — just append\n mountPoint.appendChild(element);\n } else {\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\n context.setInstructionElement(declaration, element);\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 mountPoint.parentNode?.replaceChild(element, mountPoint);\n\n context.setInstructionElement(declaration, element);\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 if (element && element.parentNode) {\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 if (name && element.nodeType === Node.ELEMENT_NODE) {\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 // ── 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 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 mutation.owner.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 const keyMods = [...modifiers].filter(m =>\n m in KEY_ALIASES ||\n m === 'ctrl' || m === 'alt' || m === 'shift' || m === 'meta');\n\n if (keyMods.length > 0) {\n const keyMatch = keyMods.some(m => {\n if (m === 'ctrl') return e.ctrlKey;\n if (m === 'alt') return e.altKey;\n if (m === 'shift') return e.shiftKey;\n if (m === 'meta') return e.metaKey;\n const aliases = KEY_ALIASES[m];\n return aliases && aliases.includes(key);\n });\n if (!keyMatch) 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 element.removeEventListener(eventName, listener);\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 element.parentNode?.removeChild(element);\n context.removeInstructionElement(declaration);\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 element.parentNode?.removeChild(element);\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}"]}
@@ -346,6 +346,32 @@ let AreHTMLInterpreter = class extends AreInterpreter {
346
346
  element.parentNode?.removeChild(element);
347
347
  context.removeInstructionElement(declaration);
348
348
  }
349
+ addStyle(mutation, context, logger) {
350
+ try {
351
+ const { styles } = mutation.payload;
352
+ const styleId = `are-style-${String(mutation.aseid)}`;
353
+ const existing = context.getElementByInstruction(mutation);
354
+ if (existing) {
355
+ existing.textContent = styles;
356
+ } else {
357
+ const styleEl = context.container.createElement("style");
358
+ styleEl.setAttribute("data-are-id", styleId);
359
+ styleEl.textContent = styles;
360
+ (context.container.head ?? context.container.body).appendChild(styleEl);
361
+ context.setInstructionElement(mutation, styleEl);
362
+ logger?.debug("green", `Style injected for ${String(mutation.aseid)}`);
363
+ }
364
+ } catch (error) {
365
+ logger?.error(error);
366
+ }
367
+ }
368
+ removeStyle(mutation, context) {
369
+ const styleEl = context.getElementByInstruction(mutation);
370
+ if (styleEl?.parentNode) {
371
+ styleEl.parentNode.removeChild(styleEl);
372
+ }
373
+ context.removeInstructionElement(mutation);
374
+ }
349
375
  // ─────────────────────────────────────────────────────────────────────────────
350
376
  // ── SVG helpers ───────────────────────────────────────────────────────────────
351
377
  // ─────────────────────────────────────────────────────────────────────────────
@@ -466,6 +492,24 @@ __decorateClass([
466
492
  __decorateParam(0, A_Inject(A_Caller)),
467
493
  __decorateParam(1, A_Inject(AreHTMLEngineContext))
468
494
  ], AreHTMLInterpreter.prototype, "removeComment", 1);
495
+ __decorateClass([
496
+ A_Frame.Define({
497
+ 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."
498
+ }),
499
+ AreInterpreter.Apply(AreHTMLInstructions.AddStyle),
500
+ AreInterpreter.Update(AreHTMLInstructions.AddStyle),
501
+ __decorateParam(0, A_Inject(A_Caller)),
502
+ __decorateParam(1, A_Inject(AreHTMLEngineContext)),
503
+ __decorateParam(2, A_Inject(A_Logger))
504
+ ], AreHTMLInterpreter.prototype, "addStyle", 1);
505
+ __decorateClass([
506
+ A_Frame.Define({
507
+ description: "Remove the <style> element that was injected by addStyle, cleaning up the document head."
508
+ }),
509
+ AreInterpreter.Revert(AreHTMLInstructions.AddStyle),
510
+ __decorateParam(0, A_Inject(A_Caller)),
511
+ __decorateParam(1, A_Inject(AreHTMLEngineContext))
512
+ ], AreHTMLInterpreter.prototype, "removeStyle", 1);
469
513
  AreHTMLInterpreter = __decorateClass([
470
514
  A_Frame.Define({
471
515
  namespace: "a-are-html",