@adaas/are-html 0.0.20 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.conf/tsconfig.base.json +1 -0
- package/.conf/tsconfig.browser.json +1 -0
- package/.conf/tsconfig.node.json +1 -0
- package/dist/browser/index.d.mts +206 -7
- package/dist/browser/index.mjs +527 -65
- package/dist/browser/index.mjs.map +1 -1
- package/dist/node/directives/AreDirectiveFor.directive.d.mts +44 -1
- package/dist/node/directives/AreDirectiveFor.directive.d.ts +44 -1
- package/dist/node/directives/AreDirectiveFor.directive.js +102 -6
- package/dist/node/directives/AreDirectiveFor.directive.js.map +1 -1
- package/dist/node/directives/AreDirectiveFor.directive.mjs +102 -6
- package/dist/node/directives/AreDirectiveFor.directive.mjs.map +1 -1
- package/dist/node/directives/AreDirectiveShow.directive.d.mts +32 -0
- package/dist/node/directives/AreDirectiveShow.directive.d.ts +32 -0
- package/dist/node/directives/AreDirectiveShow.directive.js +81 -0
- package/dist/node/directives/AreDirectiveShow.directive.js.map +1 -0
- package/dist/node/directives/AreDirectiveShow.directive.mjs +71 -0
- package/dist/node/directives/AreDirectiveShow.directive.mjs.map +1 -0
- package/dist/node/engine/AreHTML.engine.d.mts +2 -1
- package/dist/node/engine/AreHTML.engine.d.ts +2 -1
- package/dist/node/engine/AreHTML.engine.js +8 -2
- package/dist/node/engine/AreHTML.engine.js.map +1 -1
- package/dist/node/engine/AreHTML.engine.mjs +8 -2
- package/dist/node/engine/AreHTML.engine.mjs.map +1 -1
- package/dist/node/engine/AreHTML.interpreter.d.mts +3 -0
- package/dist/node/engine/AreHTML.interpreter.d.ts +3 -0
- package/dist/node/engine/AreHTML.interpreter.js +29 -0
- package/dist/node/engine/AreHTML.interpreter.js.map +1 -1
- package/dist/node/engine/AreHTML.interpreter.mjs +29 -0
- package/dist/node/engine/AreHTML.interpreter.mjs.map +1 -1
- package/dist/node/engine/AreHTML.lifecycle.d.mts +8 -1
- package/dist/node/engine/AreHTML.lifecycle.d.ts +8 -1
- package/dist/node/engine/AreHTML.lifecycle.js +46 -3
- package/dist/node/engine/AreHTML.lifecycle.js.map +1 -1
- package/dist/node/engine/AreHTML.lifecycle.mjs +46 -3
- package/dist/node/engine/AreHTML.lifecycle.mjs.map +1 -1
- package/dist/node/helpers/AreScheduler.helper.d.mts +39 -0
- package/dist/node/helpers/AreScheduler.helper.d.ts +39 -0
- package/dist/node/helpers/AreScheduler.helper.js +40 -0
- package/dist/node/helpers/AreScheduler.helper.js.map +1 -0
- package/dist/node/helpers/AreScheduler.helper.mjs +40 -0
- package/dist/node/helpers/AreScheduler.helper.mjs.map +1 -0
- package/dist/node/index.d.mts +4 -1
- package/dist/node/index.d.ts +4 -1
- package/dist/node/index.js +21 -0
- package/dist/node/index.mjs +3 -0
- package/dist/node/instructions/AreHTML.instructions.constants.d.mts +1 -0
- package/dist/node/instructions/AreHTML.instructions.constants.d.ts +1 -0
- package/dist/node/instructions/AreHTML.instructions.constants.js +2 -1
- package/dist/node/instructions/AreHTML.instructions.constants.js.map +1 -1
- package/dist/node/instructions/AreHTML.instructions.constants.mjs +2 -1
- package/dist/node/instructions/AreHTML.instructions.constants.mjs.map +1 -1
- package/dist/node/instructions/AreHTML.instructions.types.d.mts +9 -1
- package/dist/node/instructions/AreHTML.instructions.types.d.ts +9 -1
- package/dist/node/instructions/HideElement.instruction.d.mts +13 -0
- package/dist/node/instructions/HideElement.instruction.d.ts +13 -0
- package/dist/node/instructions/HideElement.instruction.js +31 -0
- package/dist/node/instructions/HideElement.instruction.js.map +1 -0
- package/dist/node/instructions/HideElement.instruction.mjs +24 -0
- package/dist/node/instructions/HideElement.instruction.mjs.map +1 -0
- package/dist/node/lib/AreRoot/AreRoot.component.d.mts +57 -3
- package/dist/node/lib/AreRoot/AreRoot.component.d.ts +57 -3
- package/dist/node/lib/AreRoot/AreRoot.component.js +138 -49
- package/dist/node/lib/AreRoot/AreRoot.component.js.map +1 -1
- package/dist/node/lib/AreRoot/AreRoot.component.mjs +140 -51
- package/dist/node/lib/AreRoot/AreRoot.component.mjs.map +1 -1
- package/dist/node/lib/AreRoot/AreRootCache.context.d.mts +58 -0
- package/dist/node/lib/AreRoot/AreRootCache.context.d.ts +58 -0
- package/dist/node/lib/AreRoot/AreRootCache.context.js +106 -0
- package/dist/node/lib/AreRoot/AreRootCache.context.js.map +1 -0
- package/dist/node/lib/AreRoot/AreRootCache.context.mjs +99 -0
- package/dist/node/lib/AreRoot/AreRootCache.context.mjs.map +1 -0
- package/examples/dashboard/dist/index.html +1 -1
- package/examples/dashboard/dist/{mq19zxz4-mnlgmd.js → mqh9ryml-xat335.js} +1922 -1316
- package/examples/dashboard/src/concept.ts +3 -2
- package/examples/for-perf/concept.ts +45 -0
- package/examples/for-perf/containers/UI.container.ts +161 -0
- package/examples/for-perf/dist/index.html +270 -0
- package/examples/for-perf/dist/mqh9ryde-m243t8.js +15223 -0
- package/examples/for-perf/dist/mqh9ryfo-6a8d0o.js +15223 -0
- package/examples/for-perf/dist/mqh9ryfq-4pf5cv.js +15223 -0
- package/examples/for-perf/public/index.html +270 -0
- package/examples/for-perf/src/components/PerfApp.component.ts +37 -0
- package/examples/for-perf/src/components/PerfControls.component.ts +34 -0
- package/examples/for-perf/src/components/PerfGrid.component.ts +225 -0
- package/examples/for-perf/src/components/PerfHeader.component.ts +34 -0
- package/examples/for-perf/src/components/PerfStats.component.ts +43 -0
- package/examples/for-perf/src/concept.ts +94 -0
- package/examples/jumpstart/dist/index.html +1 -1
- package/examples/jumpstart/dist/{mq1a0fv0-ccgtz6.js → mq7mgf58-vbf07e.js} +895 -521
- package/examples/signal-routing/dist/index.html +1 -1
- package/examples/signal-routing/dist/{mq1bzrik-4lec86.js → mqh9ryc9-dkcbkx.js} +2024 -1300
- package/examples/signal-routing/src/components/SettingsPage.component.ts +39 -0
- package/examples/signal-routing/src/concept.ts +2 -0
- package/jest.config.ts +1 -0
- package/package.json +10 -9
- package/src/directives/AreDirectiveFor.directive.ts +185 -12
- package/src/directives/AreDirectiveShow.directive.ts +127 -0
- package/src/engine/AreHTML.engine.ts +11 -1
- package/src/engine/AreHTML.interpreter.ts +50 -0
- package/src/engine/AreHTML.lifecycle.ts +83 -6
- package/src/helpers/AreScheduler.helper.ts +61 -0
- package/src/index.ts +3 -0
- package/src/instructions/AreHTML.instructions.constants.ts +1 -0
- package/src/instructions/AreHTML.instructions.types.ts +9 -0
- package/src/instructions/HideElement.instruction.ts +29 -0
- package/src/lib/AreRoot/AreRoot.component.ts +205 -72
- package/src/lib/AreRoot/AreRootCache.context.ts +133 -0
- package/tsconfig.json +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/engine/AreHTML.engine.ts"],"names":["content","match"],"mappings":"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","file":"AreHTML.engine.mjs","sourcesContent":["import { A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame/core\"\nimport { A_ServiceFeatures } from \"@adaas/a-utils/a-service\";\nimport { AreEngine, AreSyntaxTokenMatch, AreSyntax, AreSignalsContext } from \"@adaas/are\";\nimport { AreHTMLInterpreter } from \"@adaas/are-html/interpreter\";\nimport { AreHTMLEngineContext } from \"./AreHTML.context\";\nimport { AreInterpolation } from \"@adaas/are-html/nodes/AreInterpolation\";\nimport { AreText } from \"@adaas/are-html/nodes/AreText\";\nimport { AreComment } from \"@adaas/are-html/nodes/AreComment\";\nimport { AreComponentNode } from \"@adaas/are-html/nodes/AreComponent\";\nimport { AreHTMLTokenizer } from \"@adaas/are-html/tokenizer\";\nimport { AreRootNode } from \"@adaas/are-html/nodes/AreRoot\";\nimport { AreHTMLLifecycle } from \"@adaas/are-html/lifecycle\";\nimport { AreHTMLTransformer } from \"@adaas/are-html/transformer\";\nimport { AreHTMLCompiler } from \"./AreHTML.compiler\";\nimport { isVoidElement } from \"./AreHTML.constants\";\n\n\n\n@A_Frame.Define({\n namespace: 'a-are-html',\n description: 'Concrete HTML rendering engine that assembles the full ARE pipeline for web environments. Bootstraps and wires AreHTMLTokenizer, AreHTMLTransformer, AreHTMLCompiler, AreHTMLInterpreter, and AreHTMLLifecycle; mounts root nodes from inline or fetched templates; and drives reactive re-renders via the AreSignals bus.'\n})\nexport class AreHTMLEngine extends AreEngine {\n\n\n\n get DefaultSyntax() {\n return new AreSyntax({\n trimWhitespace: true,\n strictMode: true,\n rules: [\n // HTML comments\n {\n opening: '<!--',\n closing: '-->',\n component: AreComment,\n priority: 10,\n nested: false,\n extract: (raw) => ({ content: raw.slice(4, -3).trim() }),\n },\n // interpolations\n {\n opening: '{{',\n closing: '}}',\n component: AreInterpolation,\n priority: 9,\n nested: false,\n extract: (_, match) => ({ key: match.content }),\n },\n // are-root — matched before generic elements, produces AreRootNode\n {\n matcher: this.rootElementMatcher.bind(this),\n component: AreRootNode,\n priority: 5,\n },\n // generic HTML elements\n {\n matcher: this.htmlElementMatcher.bind(this),\n component: AreComponentNode,\n priority: 4,\n },\n // plain text fallback\n {\n component: AreText,\n priority: 0,\n },\n ],\n })\n }\n\n\n /**\n * Inject AreHTMLSyntax into the container scope before loading\n * \n * @param container \n */\n @A_Feature.Extend({\n name: A_ServiceFeatures.onBeforeLoad,\n before: /.*/\n })\n async init(\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(AreSignalsContext) signalContext?: AreSignalsContext\n ) {\n this.package(scope, {\n context: new AreHTMLEngineContext({}),\n syntax: this.DefaultSyntax,\n compiler: AreHTMLCompiler,\n interpreter: AreHTMLInterpreter,\n tokenizer: AreHTMLTokenizer,\n lifecycle: AreHTMLLifecycle,\n transformer: AreHTMLTransformer,\n });\n\n if(!signalContext) {\n signalContext = new AreSignalsContext();\n scope.register(signalContext);\n }\n }\n\n\n protected rootElementMatcher(\n source: string,\n from: number,\n to: number,\n build: (raw: string, content: string, position: number, closing: string) => AreSyntaxTokenMatch\n ): AreSyntaxTokenMatch | null {\n\n // const rootTag = this.config.rootTag\n const rootTag = 'are-root';\n\n const tagStart = source.indexOf('<', from)\n if (tagStart === -1 || tagStart >= to) return null\n\n // only match if the tag name is exactly the configured root tag\n const tagNameMatch = source.slice(tagStart).match(/^<([a-zA-Z][a-zA-Z0-9-]*)/)\n if (!tagNameMatch || tagNameMatch[1].toLowerCase() !== rootTag) return null\n\n // delegate the actual matching to the shared HTML element logic\n return this.htmlElementMatcher(source, from, to, build)\n }\n\n protected htmlElementMatcher(\n source: string,\n from: number,\n to: number,\n build: (raw: string, content: string, position: number, closing: string) => AreSyntaxTokenMatch\n ): AreSyntaxTokenMatch | null {\n let index = from\n\n while (index < to) {\n const tagStart = source.indexOf('<', index)\n if (tagStart === -1 || tagStart >= to) return null\n\n // skip comments, closing tags, doctype, processing instructions\n if (source.startsWith('<!--', tagStart)) { index = tagStart + 1; continue }\n if (source[tagStart + 1] === '/') { index = tagStart + 1; continue }\n if (source[tagStart + 1] === '!' || source[tagStart + 1] === '?') { index = tagStart + 1; continue }\n\n const tagNameMatch = source.slice(tagStart).match(/^<([a-zA-Z][a-zA-Z0-9-]*)/)\n if (!tagNameMatch) { index = tagStart + 1; continue }\n\n const tagName = tagNameMatch[1]\n const openingTagEnd = AreHTMLEngine.findTagClose(source, tagStart)\n if (openingTagEnd === -1) return null\n\n // extract id attribute if present in the opening tag\n const openingTagStr = source.slice(tagStart, openingTagEnd + 1)\n const idMatch = openingTagStr.match(/\\bid=[\"']([^\"']*)[\"']/)\n const id = idMatch ? idMatch[1] : undefined\n\n // self-closing: <br/> or <input/>\n if (source[openingTagEnd - 1] === '/') {\n const raw = source.slice(tagStart, openingTagEnd + 1)\n const content = source.slice(tagStart + tagNameMatch[0].length, openingTagEnd - 1)\n const match = build(raw, content, tagStart, '/>')\n match.payload = { entity: tagName, selfClose: true, id }\n return match\n }\n\n // HTML5 void elements: <input>, <br>, <img>, etc. — treat as self-closing\n if (isVoidElement(tagName)) {\n const raw = source.slice(tagStart, openingTagEnd + 1)\n const content = source.slice(tagStart + tagNameMatch[0].length, openingTagEnd)\n const match = build(raw, content, tagStart, '>')\n match.payload = { entity: tagName, selfClose: true, id }\n return match\n }\n\n // find matching closing tag respecting nesting\n const closingTag = `</${tagName}>`\n let level = 0\n let searchIndex = openingTagEnd + 1\n let closingStart = -1\n\n while (searchIndex < to) {\n const nextOpen = source.indexOf(`<${tagName}`, searchIndex)\n const nextClose = source.indexOf(closingTag, searchIndex)\n if (nextClose === -1) break\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n const charAfter = source[nextOpen + tagName.length + 1]\n if (charAfter === ' ' || charAfter === '>' || charAfter === '/') {\n // Skip self-closing nested occurrences, e.g. <div/> inside <div>...</div>.\n const innerEnd = AreHTMLEngine.findTagClose(source, nextOpen)\n const isSelfClose = innerEnd !== -1 && source[innerEnd - 1] === '/'\n\n if (!isSelfClose) {\n level++\n }\n searchIndex = (innerEnd === -1 ? nextOpen + tagName.length + 1 : innerEnd + 1)\n continue\n }\n }\n\n if (level === 0) { closingStart = nextClose; break }\n level--\n searchIndex = nextClose + closingTag.length\n }\n\n if (closingStart === -1) return null\n\n const fullTag = source.slice(tagStart, closingStart + closingTag.length)\n const content = source.slice(openingTagEnd + 1, closingStart)\n const match = build(fullTag, content, tagStart, closingTag)\n match.payload = { entity: tagName, selfClose: false, id }\n return match\n }\n return null\n }\n\n /**\n * Find the index of the closing `>` of an opening tag, skipping over\n * `>` characters that appear inside quoted attribute values.\n */\n private static findTagClose(source: string, from: number): number {\n let inSingle = false\n let inDouble = false\n\n for (let i = from; i < source.length; i++) {\n const ch = source[i]\n if (ch === '\"' && !inSingle) inDouble = !inDouble\n else if (ch === \"'\" && !inDouble) inSingle = !inSingle\n else if (ch === '>' && !inSingle && !inDouble) return i\n }\n\n return -1\n }\n\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/engine/AreHTML.engine.ts"],"names":["content","match"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBO,IAAM,aAAA,GAAN,cAA4B,SAAA,CAAU;AAAA,EAIzC,IAAI,aAAA,GAAgB;AAChB,IAAA,OAAO,IAAI,SAAA,CAAU;AAAA,MACjB,cAAA,EAAgB,IAAA;AAAA,MAChB,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA;AAAA,QAEH;AAAA,UACI,OAAA,EAAS,MAAA;AAAA,UACT,OAAA,EAAS,KAAA;AAAA,UACT,SAAA,EAAW,UAAA;AAAA,UACX,QAAA,EAAU,EAAA;AAAA,UACV,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,EAAK,EAAE;AAAA,SAC1D;AAAA;AAAA,QAEA;AAAA,UACI,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,IAAA;AAAA,UACT,SAAA,EAAW,gBAAA;AAAA,UACX,QAAA,EAAU,CAAA;AAAA,UACV,MAAA,EAAQ,KAAA;AAAA,UACR,SAAS,CAAC,CAAA,EAAG,WAAW,EAAE,GAAA,EAAK,MAAM,OAAA,EAAQ;AAAA,SACjD;AAAA;AAAA,QAEA;AAAA,UACI,OAAA,EAAS,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAAA,UAC1C,SAAA,EAAW,WAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACd;AAAA;AAAA,QAEA;AAAA,UACI,OAAA,EAAS,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAAA,UAC1C,SAAA,EAAW,gBAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACd;AAAA;AAAA,QAEA;AAAA,UACI,SAAA,EAAW,OAAA;AAAA,UACX,QAAA,EAAU;AAAA;AACd;AACJ,KACH,CAAA;AAAA,EACL;AAAA,EAYA,MAAM,IAAA,CACiB,KAAA,EACU,aAAA,EACL,SAAA,EAC1B;AACE,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAO;AAAA,MAChB,OAAA,EAAS,IAAI,oBAAA,CAAqB,EAAE,CAAA;AAAA,MACpC,QAAQ,IAAA,CAAK,aAAA;AAAA,MACb,QAAA,EAAU,eAAA;AAAA,MACV,WAAA,EAAa,kBAAA;AAAA,MACb,SAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAW,gBAAA;AAAA,MACX,WAAA,EAAa;AAAA,KAChB,CAAA;AAED,IAAA,IAAG,CAAC,aAAA,EAAe;AACf,MAAA,aAAA,GAAgB,IAAI,iBAAA,EAAkB;AACtC,MAAA,KAAA,CAAM,SAAS,aAAa,CAAA;AAAA,IAChC;AAKA,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA,SAAA,GAAY,IAAI,YAAA,EAAa;AAC7B,MAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AAAA,IAC5B;AAAA,EACJ;AAAA,EAGU,kBAAA,CACN,MAAA,EACA,IAAA,EACA,EAAA,EACA,KAAA,EAC0B;AAG1B,IAAA,MAAM,OAAA,GAAU,UAAA;AAEhB,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAI,QAAA,KAAa,EAAA,IAAM,QAAA,IAAY,EAAA,EAAI,OAAO,IAAA;AAG9C,IAAA,MAAM,eAAe,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,MAAM,2BAA2B,CAAA;AAC7E,IAAA,IAAI,CAAC,gBAAgB,YAAA,CAAa,CAAC,EAAE,WAAA,EAAY,KAAM,SAAS,OAAO,IAAA;AAGvE,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,IAAA,EAAM,IAAI,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEU,kBAAA,CACN,MAAA,EACA,IAAA,EACA,EAAA,EACA,KAAA,EAC0B;AAC1B,IAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,IAAA,OAAO,QAAQ,EAAA,EAAI;AACf,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAC1C,MAAA,IAAI,QAAA,KAAa,EAAA,IAAM,QAAA,IAAY,EAAA,EAAI,OAAO,IAAA;AAG9C,MAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAAE,QAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AAAG,QAAA;AAAA,MAAS;AAC1E,MAAA,IAAI,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAM,GAAA,EAAK;AAAE,QAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AAAG,QAAA;AAAA,MAAS;AACnE,MAAA,IAAI,MAAA,CAAO,WAAW,CAAC,CAAA,KAAM,OAAO,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAM,GAAA,EAAK;AAAE,QAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AAAG,QAAA;AAAA,MAAS;AAEnG,MAAA,MAAM,eAAe,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,MAAM,2BAA2B,CAAA;AAC7E,MAAA,IAAI,CAAC,YAAA,EAAc;AAAE,QAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AAAG,QAAA;AAAA,MAAS;AAEpD,MAAA,MAAM,OAAA,GAAU,aAAa,CAAC,CAAA;AAC9B,MAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAA;AACjE,MAAA,IAAI,aAAA,KAAkB,IAAI,OAAO,IAAA;AAGjC,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAC9D,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,CAAM,uBAAuB,CAAA;AAC3D,MAAA,MAAM,EAAA,GAAK,OAAA,GAAU,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAGlC,MAAA,IAAI,MAAA,CAAO,aAAA,GAAgB,CAAC,CAAA,KAAM,GAAA,EAAK;AACnC,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,gBAAgB,CAAC,CAAA;AACpD,QAAA,MAAMA,QAAAA,GAAU,OAAO,KAAA,CAAM,QAAA,GAAW,aAAa,CAAC,CAAA,CAAE,MAAA,EAAQ,aAAA,GAAgB,CAAC,CAAA;AACjF,QAAA,MAAMC,MAAAA,GAAQ,KAAA,CAAM,GAAA,EAAKD,QAAAA,EAAS,UAAU,IAAI,CAAA;AAChD,QAAAC,OAAM,OAAA,GAAU,EAAE,QAAQ,OAAA,EAAS,SAAA,EAAW,MAAM,EAAA,EAAG;AACvD,QAAA,OAAOA,MAAAA;AAAA,MACX;AAGA,MAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AACxB,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,gBAAgB,CAAC,CAAA;AACpD,QAAA,MAAMD,QAAAA,GAAU,OAAO,KAAA,CAAM,QAAA,GAAW,aAAa,CAAC,CAAA,CAAE,QAAQ,aAAa,CAAA;AAC7E,QAAA,MAAMC,MAAAA,GAAQ,KAAA,CAAM,GAAA,EAAKD,QAAAA,EAAS,UAAU,GAAG,CAAA;AAC/C,QAAAC,OAAM,OAAA,GAAU,EAAE,QAAQ,OAAA,EAAS,SAAA,EAAW,MAAM,EAAA,EAAG;AACvD,QAAA,OAAOA,MAAAA;AAAA,MACX;AAGA,MAAA,MAAM,UAAA,GAAa,KAAK,OAAO,CAAA,CAAA,CAAA;AAC/B,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,cAAc,aAAA,GAAgB,CAAA;AAClC,MAAA,IAAI,YAAA,GAAe,EAAA;AAEnB,MAAA,OAAO,cAAc,EAAA,EAAI;AACrB,QAAA,MAAM,WAAW,MAAA,CAAO,OAAA,CAAQ,CAAA,CAAA,EAAI,OAAO,IAAI,WAAW,CAAA;AAC1D,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,UAAA,EAAY,WAAW,CAAA;AACxD,QAAA,IAAI,cAAc,EAAA,EAAI;AAEtB,QAAA,IAAI,QAAA,KAAa,EAAA,IAAM,QAAA,GAAW,SAAA,EAAW;AACzC,UAAA,MAAM,SAAA,GAAY,MAAA,CAAO,QAAA,GAAW,OAAA,CAAQ,SAAS,CAAC,CAAA;AACtD,UAAA,IAAI,SAAA,KAAc,GAAA,IAAO,SAAA,KAAc,GAAA,IAAO,cAAc,GAAA,EAAK;AAE7D,YAAA,MAAM,QAAA,GAAW,aAAA,CAAc,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAA;AAC5D,YAAA,MAAM,cAAc,QAAA,KAAa,EAAA,IAAM,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAM,GAAA;AAEhE,YAAA,IAAI,CAAC,WAAA,EAAa;AACd,cAAA,KAAA,EAAA;AAAA,YACJ;AACA,YAAA,WAAA,GAAe,aAAa,EAAA,GAAK,QAAA,GAAW,OAAA,CAAQ,MAAA,GAAS,IAAI,QAAA,GAAW,CAAA;AAC5E,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,IAAI,UAAU,CAAA,EAAG;AAAE,UAAA,YAAA,GAAe,SAAA;AAAW,UAAA;AAAA,QAAM;AACnD,QAAA,KAAA,EAAA;AACA,QAAA,WAAA,GAAc,YAAY,UAAA,CAAW,MAAA;AAAA,MACzC;AAEA,MAAA,IAAI,YAAA,KAAiB,IAAI,OAAO,IAAA;AAEhC,MAAA,MAAM,UAAU,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,YAAA,GAAe,WAAW,MAAM,CAAA;AACvE,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,aAAA,GAAgB,GAAG,YAAY,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,UAAU,UAAU,CAAA;AAC1D,MAAA,KAAA,CAAM,UAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,OAAO,EAAA,EAAG;AACxD,MAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,YAAA,CAAa,MAAA,EAAgB,IAAA,EAAsB;AAC9D,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,QAAA,GAAW,KAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,MAAA,IAAI,EAAA,KAAO,GAAA,IAAO,CAAC,QAAA,aAAqB,CAAC,QAAA;AAAA,WAAA,IAChC,EAAA,KAAO,GAAA,IAAO,CAAC,QAAA,aAAqB,CAAC,QAAA;AAAA,WAAA,IACrC,OAAO,GAAA,IAAO,CAAC,QAAA,IAAY,CAAC,UAAU,OAAO,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,EAAA;AAAA,EACX;AAEJ;AA9JU,eAAA,CAAA;AAAA,EAJL,UAAU,MAAA,CAAO;AAAA,IACd,MAAM,iBAAA,CAAkB,YAAA;AAAA,IACxB,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,4BAAS,OAAO,CAAA,CAAA;AAAA,EAChB,4BAAS,iBAAiB,CAAA,CAAA;AAAA,EAC1B,4BAAS,YAAY,CAAA;AAAA,CAAA,EA7DjB,aAAA,CA0DH,SAAA,EAAA,MAAA,EAAA,CAAA,CAAA;AA1DG,aAAA,GAAN,eAAA,CAAA;AAAA,EAJN,QAAQ,MAAA,CAAO;AAAA,IACZ,SAAA,EAAW,YAAA;AAAA,IACX,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACY,aAAA,CAAA","file":"AreHTML.engine.mjs","sourcesContent":["import { A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame/core\"\nimport { A_ServiceFeatures } from \"@adaas/a-utils/a-service\";\nimport { AreEngine, AreSyntaxTokenMatch, AreSyntax, AreSignalsContext } from \"@adaas/are\";\nimport { AreHTMLInterpreter } from \"@adaas/are-html/interpreter\";\nimport { AreHTMLEngineContext } from \"./AreHTML.context\";\nimport { AreInterpolation } from \"@adaas/are-html/nodes/AreInterpolation\";\nimport { AreText } from \"@adaas/are-html/nodes/AreText\";\nimport { AreComment } from \"@adaas/are-html/nodes/AreComment\";\nimport { AreComponentNode } from \"@adaas/are-html/nodes/AreComponent\";\nimport { AreHTMLTokenizer } from \"@adaas/are-html/tokenizer\";\nimport { AreRootNode } from \"@adaas/are-html/nodes/AreRoot\";\nimport { AreHTMLLifecycle } from \"@adaas/are-html/lifecycle\";\nimport { AreHTMLTransformer } from \"@adaas/are-html/transformer\";\nimport { AreHTMLCompiler } from \"./AreHTML.compiler\";\nimport { isVoidElement } from \"./AreHTML.constants\";\nimport { AreRootCache } from \"../lib/AreRoot/AreRootCache.context\";\n\n\n\n@A_Frame.Define({\n namespace: 'a-are-html',\n description: 'Concrete HTML rendering engine that assembles the full ARE pipeline for web environments. Bootstraps and wires AreHTMLTokenizer, AreHTMLTransformer, AreHTMLCompiler, AreHTMLInterpreter, and AreHTMLLifecycle; mounts root nodes from inline or fetched templates; and drives reactive re-renders via the AreSignals bus.'\n})\nexport class AreHTMLEngine extends AreEngine {\n\n\n\n get DefaultSyntax() {\n return new AreSyntax({\n trimWhitespace: true,\n strictMode: true,\n rules: [\n // HTML comments\n {\n opening: '<!--',\n closing: '-->',\n component: AreComment,\n priority: 10,\n nested: false,\n extract: (raw) => ({ content: raw.slice(4, -3).trim() }),\n },\n // interpolations\n {\n opening: '{{',\n closing: '}}',\n component: AreInterpolation,\n priority: 9,\n nested: false,\n extract: (_, match) => ({ key: match.content }),\n },\n // are-root — matched before generic elements, produces AreRootNode\n {\n matcher: this.rootElementMatcher.bind(this),\n component: AreRootNode,\n priority: 5,\n },\n // generic HTML elements\n {\n matcher: this.htmlElementMatcher.bind(this),\n component: AreComponentNode,\n priority: 4,\n },\n // plain text fallback\n {\n component: AreText,\n priority: 0,\n },\n ],\n })\n }\n\n\n /**\n * Inject AreHTMLSyntax into the container scope before loading\n * \n * @param container \n */\n @A_Feature.Extend({\n name: A_ServiceFeatures.onBeforeLoad,\n before: /.*/\n })\n async init(\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(AreSignalsContext) signalContext?: AreSignalsContext,\n @A_Inject(AreRootCache) rootCache?: AreRootCache\n ) {\n this.package(scope, {\n context: new AreHTMLEngineContext({}),\n syntax: this.DefaultSyntax,\n compiler: AreHTMLCompiler,\n interpreter: AreHTMLInterpreter,\n tokenizer: AreHTMLTokenizer,\n lifecycle: AreHTMLLifecycle,\n transformer: AreHTMLTransformer,\n });\n\n if(!signalContext) {\n signalContext = new AreSignalsContext();\n scope.register(signalContext);\n }\n\n // Default per-root subtree cache used by AreRoot for fast route-back\n // re-injection. Apps may register their own (e.g. with a custom limit)\n // before load to override this.\n if (!rootCache) {\n rootCache = new AreRootCache();\n scope.register(rootCache);\n }\n }\n\n\n protected rootElementMatcher(\n source: string,\n from: number,\n to: number,\n build: (raw: string, content: string, position: number, closing: string) => AreSyntaxTokenMatch\n ): AreSyntaxTokenMatch | null {\n\n // const rootTag = this.config.rootTag\n const rootTag = 'are-root';\n\n const tagStart = source.indexOf('<', from)\n if (tagStart === -1 || tagStart >= to) return null\n\n // only match if the tag name is exactly the configured root tag\n const tagNameMatch = source.slice(tagStart).match(/^<([a-zA-Z][a-zA-Z0-9-]*)/)\n if (!tagNameMatch || tagNameMatch[1].toLowerCase() !== rootTag) return null\n\n // delegate the actual matching to the shared HTML element logic\n return this.htmlElementMatcher(source, from, to, build)\n }\n\n protected htmlElementMatcher(\n source: string,\n from: number,\n to: number,\n build: (raw: string, content: string, position: number, closing: string) => AreSyntaxTokenMatch\n ): AreSyntaxTokenMatch | null {\n let index = from\n\n while (index < to) {\n const tagStart = source.indexOf('<', index)\n if (tagStart === -1 || tagStart >= to) return null\n\n // skip comments, closing tags, doctype, processing instructions\n if (source.startsWith('<!--', tagStart)) { index = tagStart + 1; continue }\n if (source[tagStart + 1] === '/') { index = tagStart + 1; continue }\n if (source[tagStart + 1] === '!' || source[tagStart + 1] === '?') { index = tagStart + 1; continue }\n\n const tagNameMatch = source.slice(tagStart).match(/^<([a-zA-Z][a-zA-Z0-9-]*)/)\n if (!tagNameMatch) { index = tagStart + 1; continue }\n\n const tagName = tagNameMatch[1]\n const openingTagEnd = AreHTMLEngine.findTagClose(source, tagStart)\n if (openingTagEnd === -1) return null\n\n // extract id attribute if present in the opening tag\n const openingTagStr = source.slice(tagStart, openingTagEnd + 1)\n const idMatch = openingTagStr.match(/\\bid=[\"']([^\"']*)[\"']/)\n const id = idMatch ? idMatch[1] : undefined\n\n // self-closing: <br/> or <input/>\n if (source[openingTagEnd - 1] === '/') {\n const raw = source.slice(tagStart, openingTagEnd + 1)\n const content = source.slice(tagStart + tagNameMatch[0].length, openingTagEnd - 1)\n const match = build(raw, content, tagStart, '/>')\n match.payload = { entity: tagName, selfClose: true, id }\n return match\n }\n\n // HTML5 void elements: <input>, <br>, <img>, etc. — treat as self-closing\n if (isVoidElement(tagName)) {\n const raw = source.slice(tagStart, openingTagEnd + 1)\n const content = source.slice(tagStart + tagNameMatch[0].length, openingTagEnd)\n const match = build(raw, content, tagStart, '>')\n match.payload = { entity: tagName, selfClose: true, id }\n return match\n }\n\n // find matching closing tag respecting nesting\n const closingTag = `</${tagName}>`\n let level = 0\n let searchIndex = openingTagEnd + 1\n let closingStart = -1\n\n while (searchIndex < to) {\n const nextOpen = source.indexOf(`<${tagName}`, searchIndex)\n const nextClose = source.indexOf(closingTag, searchIndex)\n if (nextClose === -1) break\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n const charAfter = source[nextOpen + tagName.length + 1]\n if (charAfter === ' ' || charAfter === '>' || charAfter === '/') {\n // Skip self-closing nested occurrences, e.g. <div/> inside <div>...</div>.\n const innerEnd = AreHTMLEngine.findTagClose(source, nextOpen)\n const isSelfClose = innerEnd !== -1 && source[innerEnd - 1] === '/'\n\n if (!isSelfClose) {\n level++\n }\n searchIndex = (innerEnd === -1 ? nextOpen + tagName.length + 1 : innerEnd + 1)\n continue\n }\n }\n\n if (level === 0) { closingStart = nextClose; break }\n level--\n searchIndex = nextClose + closingTag.length\n }\n\n if (closingStart === -1) return null\n\n const fullTag = source.slice(tagStart, closingStart + closingTag.length)\n const content = source.slice(openingTagEnd + 1, closingStart)\n const match = build(fullTag, content, tagStart, closingTag)\n match.payload = { entity: tagName, selfClose: false, id }\n return match\n }\n return null\n }\n\n /**\n * Find the index of the closing `>` of an opening tag, skipping over\n * `>` characters that appear inside quoted attribute values.\n */\n private static findTagClose(source: string, from: number): number {\n let inSingle = false\n let inDouble = false\n\n for (let i = from; i < source.length; i++) {\n const ch = source[i]\n if (ch === '\"' && !inSingle) inDouble = !inDouble\n else if (ch === \"'\" && !inDouble) inSingle = !inSingle\n else if (ch === '>' && !inSingle && !inDouble) return i\n }\n\n return -1\n }\n\n}"]}
|
|
@@ -6,6 +6,7 @@ import { AddElementInstruction } from '../instructions/AddElement.instruction.mj
|
|
|
6
6
|
import { AddListenerInstruction } from '../instructions/AddListener.instruction.mjs';
|
|
7
7
|
import { AddTextInstruction } from '../instructions/AddText.instruction.mjs';
|
|
8
8
|
import { AddStyleInstruction } from '../instructions/AddStyle.instruction.mjs';
|
|
9
|
+
import { HideElementInstruction } from '../instructions/HideElement.instruction.mjs';
|
|
9
10
|
import { AreDirectiveContext } from '../lib/AreDirective/AreDirective.context.mjs';
|
|
10
11
|
import { AreHTMLEngineContext } from './AreHTML.context.mjs';
|
|
11
12
|
import '../instructions/AreHTML.instructions.types.mjs';
|
|
@@ -18,6 +19,8 @@ declare class AreHTMLInterpreter extends AreInterpreter {
|
|
|
18
19
|
removeElement(declaration: AddElementInstruction, context: AreHTMLEngineContext): void;
|
|
19
20
|
addAttribute(mutation: AddAttributeInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
|
|
20
21
|
removeAttribute(mutation: AddAttributeInstruction, context: AreHTMLEngineContext): void;
|
|
22
|
+
hideElement(mutation: HideElementInstruction, context: AreHTMLEngineContext): void;
|
|
23
|
+
showElement(mutation: HideElementInstruction, context: AreHTMLEngineContext): void;
|
|
21
24
|
addEventListener(mutation: AddListenerInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
|
|
22
25
|
removeEventListener(mutation: AddListenerInstruction, context: AreHTMLEngineContext): void;
|
|
23
26
|
addText(declaration: AddTextInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
|
|
@@ -6,6 +6,7 @@ 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
8
|
import { AddStyleInstruction } from '../instructions/AddStyle.instruction.js';
|
|
9
|
+
import { HideElementInstruction } from '../instructions/HideElement.instruction.js';
|
|
9
10
|
import { AreDirectiveContext } from '../lib/AreDirective/AreDirective.context.js';
|
|
10
11
|
import { AreHTMLEngineContext } from './AreHTML.context.js';
|
|
11
12
|
import '../instructions/AreHTML.instructions.types.js';
|
|
@@ -18,6 +19,8 @@ declare class AreHTMLInterpreter extends AreInterpreter {
|
|
|
18
19
|
removeElement(declaration: AddElementInstruction, context: AreHTMLEngineContext): void;
|
|
19
20
|
addAttribute(mutation: AddAttributeInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
|
|
20
21
|
removeAttribute(mutation: AddAttributeInstruction, context: AreHTMLEngineContext): void;
|
|
22
|
+
hideElement(mutation: HideElementInstruction, context: AreHTMLEngineContext): void;
|
|
23
|
+
showElement(mutation: HideElementInstruction, context: AreHTMLEngineContext): void;
|
|
21
24
|
addEventListener(mutation: AddListenerInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
|
|
22
25
|
removeEventListener(mutation: AddListenerInstruction, context: AreHTMLEngineContext): void;
|
|
23
26
|
addText(declaration: AddTextInstruction, context: AreHTMLEngineContext, store: AreStore, syntax: AreSyntax, directiveContext?: AreDirectiveContext, logger?: A_Logger): void;
|
|
@@ -190,6 +190,19 @@ exports.AreHTMLInterpreter = class AreHTMLInterpreter extends are.AreInterpreter
|
|
|
190
190
|
console.log("Error removing attribute:", error);
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
+
hideElement(mutation, context) {
|
|
194
|
+
const element = context.getElementByInstruction(mutation.parent);
|
|
195
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) return;
|
|
196
|
+
const el = element;
|
|
197
|
+
mutation.cache = el.style.display;
|
|
198
|
+
el.style.display = "none";
|
|
199
|
+
}
|
|
200
|
+
showElement(mutation, context) {
|
|
201
|
+
const element = context.getElementByInstruction(mutation.parent);
|
|
202
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) return;
|
|
203
|
+
const el = element;
|
|
204
|
+
el.style.display = mutation.payload?.display ?? mutation.cache ?? "";
|
|
205
|
+
}
|
|
193
206
|
addEventListener(mutation, context, store, syntax, directiveContext, logger) {
|
|
194
207
|
const element = context.getElementByInstruction(mutation.parent);
|
|
195
208
|
if (!element) {
|
|
@@ -442,6 +455,22 @@ __decorateClass([
|
|
|
442
455
|
__decorateParam(0, aConcept.A_Inject(aConcept.A_Caller)),
|
|
443
456
|
__decorateParam(1, aConcept.A_Inject(AreHTML_context.AreHTMLEngineContext))
|
|
444
457
|
], exports.AreHTMLInterpreter.prototype, "removeAttribute", 1);
|
|
458
|
+
__decorateClass([
|
|
459
|
+
core.A_Frame.Define({
|
|
460
|
+
description: "Hide an element by setting inline display:none, caching its previous inline display value for restoration on revert."
|
|
461
|
+
}),
|
|
462
|
+
are.AreInterpreter.Apply(AreHTML_instructions_constants.AreHTMLInstructions.HideElement),
|
|
463
|
+
__decorateParam(0, aConcept.A_Inject(aConcept.A_Caller)),
|
|
464
|
+
__decorateParam(1, aConcept.A_Inject(AreHTML_context.AreHTMLEngineContext))
|
|
465
|
+
], exports.AreHTMLInterpreter.prototype, "hideElement", 1);
|
|
466
|
+
__decorateClass([
|
|
467
|
+
core.A_Frame.Define({
|
|
468
|
+
description: "Restore an element hidden by a HideElement instruction back to its previous inline display value."
|
|
469
|
+
}),
|
|
470
|
+
are.AreInterpreter.Revert(AreHTML_instructions_constants.AreHTMLInstructions.HideElement),
|
|
471
|
+
__decorateParam(0, aConcept.A_Inject(aConcept.A_Caller)),
|
|
472
|
+
__decorateParam(1, aConcept.A_Inject(AreHTML_context.AreHTMLEngineContext))
|
|
473
|
+
], exports.AreHTMLInterpreter.prototype, "showElement", 1);
|
|
445
474
|
__decorateClass([
|
|
446
475
|
core.A_Frame.Define({
|
|
447
476
|
description: "Add an event listener to an HTML element based on the provided mutation instruction."
|
|
@@ -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":"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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}"]}
|
|
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":";;;;;;;;;;;;;;;;;;;;;;AAqCaA,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,EAgBA,WAAA,CACwB,UACY,OAAA,EAC5B;AACJ,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAA,CAAS,MAAO,CAAA;AAEhE,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,QAAA,KAAa,KAAK,YAAA,EAAc;AAExD,IAAA,MAAM,EAAA,GAAK,OAAA;AAGX,IAAA,QAAA,CAAS,KAAA,GAAQ,GAAG,KAAA,CAAM,OAAA;AAC1B,IAAA,EAAA,CAAG,MAAM,OAAA,GAAU,MAAA;AAAA,EACvB;AAAA,EAMA,WAAA,CACwB,UACY,OAAA,EAC5B;AACJ,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAA,CAAS,MAAO,CAAA;AAEhE,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,QAAA,KAAa,KAAK,YAAA,EAAc;AAExD,IAAA,MAAM,EAAA,GAAK,OAAA;AAKX,IAAA,EAAA,CAAG,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,EAAS,OAAA,IAAW,SAAS,KAAA,IAAS,EAAA;AAAA,EACtE;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,EAWA,QAAA,CACwB,QAAA,EACY,OAAA,EACZ,MAAA,EAChB;AACJ,IAAA,IAAI;AAGA,MAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAA,CAAS,OAAA;AAC5B,MAAA,MAAM,OAAA,GAAU,CAAA,UAAA,EAAa,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAEnD,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,uBAAA,CAAwB,QAAQ,CAAA;AACzD,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,QAAA,CAAS,WAAA,GAAc,MAAA;AAAA,MAC3B,CAAA,MAAO;AACH,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,OAAO,CAAA;AACvD,QAAA,OAAA,CAAQ,YAAA,CAAa,eAAe,OAAO,CAAA;AAC3C,QAAA,OAAA,CAAQ,WAAA,GAAc,MAAA;AACtB,QAAA,CAAC,QAAQ,SAAA,CAAU,IAAA,IAAQ,QAAQ,SAAA,CAAU,IAAA,EAAM,YAAY,OAAO,CAAA;AAEtE,QAAA,OAAA,CAAQ,qBAAA,CAAsB,UAAU,OAAO,CAAA;AAC/C,QAAA,MAAA,EAAQ,MAAM,OAAA,EAAS,CAAA,mBAAA,EAAsB,OAAO,QAAA,CAAS,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MACzE;AAAA,IACJ,SAAS,KAAA,EAAO;AACZ,MAAA,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,IACvB;AAAA,EAEJ;AAAA,EAMA,WAAA,CACwB,UACY,OAAA,EAC5B;AACJ,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,uBAAA,CAAwB,QAAQ,CAAA;AACxD,IAAA,IAAI,SAAS,UAAA,EAAY;AACrB,MAAA,OAAA,CAAQ,UAAA,CAAW,YAAY,OAAO,CAAA;AAAA,IAC1C;AACA,IAAA,OAAA,CAAQ,yBAAyB,QAAQ,CAAA;AAAA,EAC7C;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;AA3rBI,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;AA4CA,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;AAAA,CAAA,EA3RzBhB,0BAAA,CAyRT,SAAA,EAAA,aAAA,EAAA,CAAA,CAAA;AAmBA,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,EA9SzBhB,0BAAA,CA4ST,SAAA,EAAA,aAAA,EAAA,CAAA,CAAA;AAyBA,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,EA3UbjB,0BAAA,CAqUT,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,EA/czBhB,0BAAA,CA6cT,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,EAlfbjB,0BAAA,CA2eT,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,EAviBzBhB,0BAAA,CAqiBT,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,EA/jBbjB,0BAAA,CAwjBT,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,EAlnBzBhB,0BAAA,CAgnBT,SAAA,EAAA,eAAA,EAAA,CAAA,CAAA;AAqBA,eAAA,CAAA;AAAA,EALCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,KAAA,CAAMa,kDAAA,CAAoB,QAAQ,CAAA;AAAA,EACjDb,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,QAAQ,CAAA;AAAA,EAE9C,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA,CAAA;AAAA,EAC7B,qCAASC,gBAAQ,CAAA;AAAA,CAAA,EAxoBbjB,0BAAA,CAqoBT,SAAA,EAAA,UAAA,EAAA,CAAA,CAAA;AAiCA,eAAA,CAAA;AAAA,EAJCY,aAAQ,MAAA,CAAO;AAAA,IACZ,WAAA,EAAa;AAAA,GAChB,CAAA;AAAA,EACAX,kBAAA,CAAe,MAAA,CAAOa,kDAAA,CAAoB,QAAQ,CAAA;AAAA,EAE9C,qCAASC,iBAAQ,CAAA,CAAA;AAAA,EACjB,qCAASC,oCAAoB,CAAA;AAAA,CAAA,EAxqBzBhB,0BAAA,CAsqBT,SAAA,EAAA,aAAA,EAAA,CAAA,CAAA;AAtqBSA,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 { AddStyleInstruction } from \"@adaas/are-html/instructions/AddStyle.instruction\";\nimport { HideElementInstruction } from \"@adaas/are-html/instructions/HideElement.instruction\";\nimport { AreDirectiveContext } from \"@adaas/are-html/directive/AreDirective.context\";\nimport { AreHTMLNode } from \"../lib/AreHTMLNode/AreHTMLNode\";\nimport { AreHTMLEngineContext } from \"./AreHTML.context\";\nimport {\n isBooleanAttribute,\n isIDLFormProperty,\n normalizeClassValue,\n normalizeStyleValue,\n parseEventName,\n toDOMString,\n SVG_NAMESPACE,\n SVG_ATTRIBUTE_NS,\n} from \"./AreHTML.constants\";\n\n\n@A_Frame.Define({\n namespace: 'a-are-html',\n description: 'DOM interpreter for the HTML rendering pipeline. Extends AreInterpreter to apply and revert each ARE instruction type directly against the browser DOM — creating and removing elements, setting and removing attributes and event listeners, managing inline styles, and inserting text and comment nodes. Driven by the scene diff computed per render cycle.'\n})\nexport class AreHTMLInterpreter extends AreInterpreter {\n // ─────────────────────────────────────────────────────────────────────────────\n // ── CreateElement — Apply / Revert ───────────────────────────────────────────\n // ─────────────────────────────────────────────────────────────────────────────\n @A_Frame.Define({\n description: 'Create an HTML element based on the provided declaration instruction. Handles both root-level mounting and child element creation based on the structural parent hierarchy.'\n })\n @AreInterpreter.Apply(AreInstructionDefaultNames.Default)\n @AreInterpreter.Apply(AreHTMLInstructions.AddElement)\n addElement(\n @A_Inject(A_Caller) declaration: AddElementInstruction,\n @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n @A_Inject(A_Logger) logger?: A_Logger,\n ) {\n try {\n const node = declaration.owner as AreHTMLNode;\n\n let currentNode: AreHTMLNode | undefined = node;\n let parent: AreHTMLNode | undefined = node.parent as AreHTMLNode | undefined;\n\n while (parent) {\n if (context.getNodeElement(parent)) {\n break;\n }\n currentNode = parent;\n parent = parent.parent as AreHTMLNode | undefined;\n }\n\n\n // Determine the element tag — components render as a wrapper div\n const tag = node.tag;\n\n const isSVG = tag === 'svg' || this.isInSVGContext(node);\n\n if (parent) {\n\n const mountPoint = context.getNodeElement(parent)\n\n if (!mountPoint) {\n throw new AreInterpreterError({\n title: 'Mount Point Not Found',\n description: `Could not find a mount point for the node with id \"${node.id}\". Ensure that the parent node is rendered before its children, or that a valid root element with the corresponding id exists in the DOM.`\n });\n }\n\n const element = isSVG\n ? context.container.createElementNS(SVG_NAMESPACE, tag)\n : context.container.createElement(tag);\n\n 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 // ── HideElement — Apply / Revert ─────────────────────────────────────────────\n // ─────────────────────────────────────────────────────────────────────────────\n // Drives the `$show` directive. Apply hides the element by forcing its inline\n // `display:none` (which beats stylesheet rules and, unlike rewriting the whole\n // `style` attribute, does NOT clobber other inline styles or `:style`\n // bindings). The element stays mounted — its subtree, listeners and scene\n // state are preserved — so toggling visibility is far cheaper than $if's\n // mount/unmount cycle. Revert restores the element's previous inline display.\n @A_Frame.Define({\n description: 'Hide an element by setting inline display:none, caching its previous inline display value for restoration on revert.'\n })\n @AreInterpreter.Apply(AreHTMLInstructions.HideElement)\n hideElement(\n @A_Inject(A_Caller) mutation: HideElementInstruction,\n @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n ): void {\n const element = context.getElementByInstruction(mutation.parent!);\n\n if (!element || element.nodeType !== Node.ELEMENT_NODE) return;\n\n const el = element as HTMLElement;\n\n // Remember the element's own inline display so it can be restored exactly.\n mutation.cache = el.style.display;\n el.style.display = 'none';\n }\n\n @A_Frame.Define({\n description: 'Restore an element hidden by a HideElement instruction back to its previous inline display value.'\n })\n @AreInterpreter.Revert(AreHTMLInstructions.HideElement)\n showElement(\n @A_Inject(A_Caller) mutation: HideElementInstruction,\n @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n ): void {\n const element = context.getElementByInstruction(mutation.parent!);\n\n if (!element || element.nodeType !== Node.ELEMENT_NODE) return;\n\n const el = element as HTMLElement;\n\n // Restore the cached inline display. An explicit payload display, when\n // provided, takes precedence; otherwise fall back to the cached value\n // (empty string clears the inline rule and reverts to the CSS default).\n el.style.display = mutation.payload?.display ?? mutation.cache ?? '';\n }\n\n\n // ─────────────────────────────────────────────────────────────────────────────\n // ── addEventListener — Apply / Revert ────────────────────────────────────────\n // ─────────────────────────────────────────────────────────────────────────────\n\n @A_Frame.Define({\n description: 'Add an event listener to an HTML element based on the provided mutation instruction.'\n })\n @AreInterpreter.Apply(AreHTMLInstructions.AddListener)\n addEventListener(\n @A_Inject(A_Caller) mutation: AddListenerInstruction,\n @A_Inject(AreHTMLEngineContext) context: AreHTMLEngineContext,\n @A_Inject(AreStore) store: AreStore,\n @A_Inject(AreSyntax) syntax: AreSyntax,\n @A_Inject(AreDirectiveContext) directiveContext?: AreDirectiveContext,\n @A_Inject(A_Logger) logger?: A_Logger,\n ) {\n\n const element = context.getElementByInstruction(mutation.parent);\n\n if (!element) {\n throw new AreInterpreterError({\n title: 'Element Not Found',\n description: `Could not find a DOM element associated with the instruction ASEID \"${mutation.parent}\". Ensure that the parent instruction is properly rendered and associated with a DOM element before adding event listeners.`\n });\n }\n\n /**\n * e.g. @click=\"handleClick\"\n * e.g. @click=\"handleClick($event, element)\"\n * e.g. @click.stop.prevent=\"handleClick\"\n * e.g. @keydown.enter=\"submit\"\n * e.g. @click=\"(e)=> user.name ? handleClick(e) : null\"\n */\n\n const { event: eventName, modifiers } = parseEventName(mutation.payload.name);\n\n const listenerOptions: AddEventListenerOptions = {};\n if (modifiers.has('capture')) listenerOptions.capture = true;\n if (modifiers.has('once')) listenerOptions.once = true;\n if (modifiers.has('passive')) listenerOptions.passive = true;\n\n const handlers = syntax.extractEmitHandlers(mutation.payload.handler);\n\n // Holds the live DOM event so handler invocations (with or without\n // template arguments) always have access to it.\n let liveEvent: Event | null = null;\n\n const handlerScope: Record<string, any> = {};\n\n 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}"]}
|
|
@@ -178,6 +178,19 @@ let AreHTMLInterpreter = class extends AreInterpreter {
|
|
|
178
178
|
console.log("Error removing attribute:", error);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
+
hideElement(mutation, context) {
|
|
182
|
+
const element = context.getElementByInstruction(mutation.parent);
|
|
183
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) return;
|
|
184
|
+
const el = element;
|
|
185
|
+
mutation.cache = el.style.display;
|
|
186
|
+
el.style.display = "none";
|
|
187
|
+
}
|
|
188
|
+
showElement(mutation, context) {
|
|
189
|
+
const element = context.getElementByInstruction(mutation.parent);
|
|
190
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) return;
|
|
191
|
+
const el = element;
|
|
192
|
+
el.style.display = mutation.payload?.display ?? mutation.cache ?? "";
|
|
193
|
+
}
|
|
181
194
|
addEventListener(mutation, context, store, syntax, directiveContext, logger) {
|
|
182
195
|
const element = context.getElementByInstruction(mutation.parent);
|
|
183
196
|
if (!element) {
|
|
@@ -430,6 +443,22 @@ __decorateClass([
|
|
|
430
443
|
__decorateParam(0, A_Inject(A_Caller)),
|
|
431
444
|
__decorateParam(1, A_Inject(AreHTMLEngineContext))
|
|
432
445
|
], AreHTMLInterpreter.prototype, "removeAttribute", 1);
|
|
446
|
+
__decorateClass([
|
|
447
|
+
A_Frame.Define({
|
|
448
|
+
description: "Hide an element by setting inline display:none, caching its previous inline display value for restoration on revert."
|
|
449
|
+
}),
|
|
450
|
+
AreInterpreter.Apply(AreHTMLInstructions.HideElement),
|
|
451
|
+
__decorateParam(0, A_Inject(A_Caller)),
|
|
452
|
+
__decorateParam(1, A_Inject(AreHTMLEngineContext))
|
|
453
|
+
], AreHTMLInterpreter.prototype, "hideElement", 1);
|
|
454
|
+
__decorateClass([
|
|
455
|
+
A_Frame.Define({
|
|
456
|
+
description: "Restore an element hidden by a HideElement instruction back to its previous inline display value."
|
|
457
|
+
}),
|
|
458
|
+
AreInterpreter.Revert(AreHTMLInstructions.HideElement),
|
|
459
|
+
__decorateParam(0, A_Inject(A_Caller)),
|
|
460
|
+
__decorateParam(1, A_Inject(AreHTMLEngineContext))
|
|
461
|
+
], AreHTMLInterpreter.prototype, "showElement", 1);
|
|
433
462
|
__decorateClass([
|
|
434
463
|
A_Frame.Define({
|
|
435
464
|
description: "Add an event listener to an HTML element based on the provided mutation instruction."
|