@adaas/are-html 0.0.2
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 +87 -0
- package/.conf/tsconfig.browser.json +34 -0
- package/.conf/tsconfig.node.json +35 -0
- package/.nvmrc +1 -0
- package/LICENSE +13 -0
- package/README.md +678 -0
- package/dist/browser/index.d.mts +521 -0
- package/dist/browser/index.mjs +1782 -0
- package/dist/browser/index.mjs.map +1 -0
- package/dist/node/AreBinding.attribute-C6JasbJL.d.ts +110 -0
- package/dist/node/AreBinding.attribute-C6qrxN8K.d.mts +110 -0
- package/dist/node/attributes/AreBinding.attribute.d.mts +4 -0
- package/dist/node/attributes/AreBinding.attribute.d.ts +4 -0
- package/dist/node/attributes/AreBinding.attribute.js +15 -0
- package/dist/node/attributes/AreBinding.attribute.js.map +1 -0
- package/dist/node/attributes/AreBinding.attribute.mjs +14 -0
- package/dist/node/attributes/AreBinding.attribute.mjs.map +1 -0
- package/dist/node/attributes/AreDirective.attribute.d.mts +4 -0
- package/dist/node/attributes/AreDirective.attribute.d.ts +4 -0
- package/dist/node/attributes/AreDirective.attribute.js +20 -0
- package/dist/node/attributes/AreDirective.attribute.js.map +1 -0
- package/dist/node/attributes/AreDirective.attribute.mjs +19 -0
- package/dist/node/attributes/AreDirective.attribute.mjs.map +1 -0
- package/dist/node/attributes/AreEvent.attribute.d.mts +4 -0
- package/dist/node/attributes/AreEvent.attribute.d.ts +4 -0
- package/dist/node/attributes/AreEvent.attribute.js +10 -0
- package/dist/node/attributes/AreEvent.attribute.js.map +1 -0
- package/dist/node/attributes/AreEvent.attribute.mjs +9 -0
- package/dist/node/attributes/AreEvent.attribute.mjs.map +1 -0
- package/dist/node/attributes/AreStatic.attribute.d.mts +4 -0
- package/dist/node/attributes/AreStatic.attribute.d.ts +4 -0
- package/dist/node/attributes/AreStatic.attribute.js +10 -0
- package/dist/node/attributes/AreStatic.attribute.js.map +1 -0
- package/dist/node/attributes/AreStatic.attribute.mjs +9 -0
- package/dist/node/attributes/AreStatic.attribute.mjs.map +1 -0
- package/dist/node/chunk-EQQGB2QZ.mjs +15 -0
- package/dist/node/chunk-EQQGB2QZ.mjs.map +1 -0
- package/dist/node/directives/AreComponent.directive.d.mts +2 -0
- package/dist/node/directives/AreComponent.directive.d.ts +2 -0
- package/dist/node/directives/AreComponent.directive.js +4 -0
- package/dist/node/directives/AreComponent.directive.js.map +1 -0
- package/dist/node/directives/AreComponent.directive.mjs +3 -0
- package/dist/node/directives/AreComponent.directive.mjs.map +1 -0
- package/dist/node/directives/AreDirectiveFor.directive.d.mts +41 -0
- package/dist/node/directives/AreDirectiveFor.directive.d.ts +41 -0
- package/dist/node/directives/AreDirectiveFor.directive.js +206 -0
- package/dist/node/directives/AreDirectiveFor.directive.js.map +1 -0
- package/dist/node/directives/AreDirectiveFor.directive.mjs +196 -0
- package/dist/node/directives/AreDirectiveFor.directive.mjs.map +1 -0
- package/dist/node/directives/AreDirectiveIf.directive.d.mts +15 -0
- package/dist/node/directives/AreDirectiveIf.directive.d.ts +15 -0
- package/dist/node/directives/AreDirectiveIf.directive.js +91 -0
- package/dist/node/directives/AreDirectiveIf.directive.js.map +1 -0
- package/dist/node/directives/AreDirectiveIf.directive.mjs +81 -0
- package/dist/node/directives/AreDirectiveIf.directive.mjs.map +1 -0
- package/dist/node/engine/AreHTML.compiler.d.mts +27 -0
- package/dist/node/engine/AreHTML.compiler.d.ts +27 -0
- package/dist/node/engine/AreHTML.compiler.js +150 -0
- package/dist/node/engine/AreHTML.compiler.js.map +1 -0
- package/dist/node/engine/AreHTML.compiler.mjs +140 -0
- package/dist/node/engine/AreHTML.compiler.mjs.map +1 -0
- package/dist/node/engine/AreHTML.constants.d.mts +2 -0
- package/dist/node/engine/AreHTML.constants.d.ts +2 -0
- package/dist/node/engine/AreHTML.constants.js +4 -0
- package/dist/node/engine/AreHTML.constants.js.map +1 -0
- package/dist/node/engine/AreHTML.constants.mjs +3 -0
- package/dist/node/engine/AreHTML.constants.mjs.map +1 -0
- package/dist/node/engine/AreHTML.context.d.mts +108 -0
- package/dist/node/engine/AreHTML.context.d.ts +108 -0
- package/dist/node/engine/AreHTML.context.js +155 -0
- package/dist/node/engine/AreHTML.context.js.map +1 -0
- package/dist/node/engine/AreHTML.context.mjs +154 -0
- package/dist/node/engine/AreHTML.context.mjs.map +1 -0
- package/dist/node/engine/AreHTML.engine.d.mts +21 -0
- package/dist/node/engine/AreHTML.engine.d.ts +21 -0
- package/dist/node/engine/AreHTML.engine.js +191 -0
- package/dist/node/engine/AreHTML.engine.js.map +1 -0
- package/dist/node/engine/AreHTML.engine.mjs +181 -0
- package/dist/node/engine/AreHTML.engine.mjs.map +1 -0
- package/dist/node/engine/AreHTML.interpreter.d.mts +28 -0
- package/dist/node/engine/AreHTML.interpreter.d.ts +28 -0
- package/dist/node/engine/AreHTML.interpreter.js +340 -0
- package/dist/node/engine/AreHTML.interpreter.js.map +1 -0
- package/dist/node/engine/AreHTML.interpreter.mjs +330 -0
- package/dist/node/engine/AreHTML.interpreter.mjs.map +1 -0
- package/dist/node/engine/AreHTML.lifecycle.d.mts +17 -0
- package/dist/node/engine/AreHTML.lifecycle.d.ts +17 -0
- package/dist/node/engine/AreHTML.lifecycle.js +91 -0
- package/dist/node/engine/AreHTML.lifecycle.js.map +1 -0
- package/dist/node/engine/AreHTML.lifecycle.mjs +79 -0
- package/dist/node/engine/AreHTML.lifecycle.mjs.map +1 -0
- package/dist/node/engine/AreHTML.tokenizer.d.mts +13 -0
- package/dist/node/engine/AreHTML.tokenizer.d.ts +13 -0
- package/dist/node/engine/AreHTML.tokenizer.js +83 -0
- package/dist/node/engine/AreHTML.tokenizer.js.map +1 -0
- package/dist/node/engine/AreHTML.tokenizer.mjs +71 -0
- package/dist/node/engine/AreHTML.tokenizer.mjs.map +1 -0
- package/dist/node/engine/AreHTML.transformer.d.mts +11 -0
- package/dist/node/engine/AreHTML.transformer.d.ts +11 -0
- package/dist/node/engine/AreHTML.transformer.js +44 -0
- package/dist/node/engine/AreHTML.transformer.js.map +1 -0
- package/dist/node/engine/AreHTML.transformer.mjs +32 -0
- package/dist/node/engine/AreHTML.transformer.mjs.map +1 -0
- package/dist/node/engine/AreHTML.types.d.mts +6 -0
- package/dist/node/engine/AreHTML.types.d.ts +6 -0
- package/dist/node/engine/AreHTML.types.js +4 -0
- package/dist/node/engine/AreHTML.types.js.map +1 -0
- package/dist/node/engine/AreHTML.types.mjs +3 -0
- package/dist/node/engine/AreHTML.types.mjs.map +1 -0
- package/dist/node/index.d.mts +39 -0
- package/dist/node/index.d.ts +39 -0
- package/dist/node/index.js +294 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/index.mjs +43 -0
- package/dist/node/index.mjs.map +1 -0
- package/dist/node/instructions/AddAttribute.instruction.d.mts +9 -0
- package/dist/node/instructions/AddAttribute.instruction.d.ts +9 -0
- package/dist/node/instructions/AddAttribute.instruction.js +32 -0
- package/dist/node/instructions/AddAttribute.instruction.js.map +1 -0
- package/dist/node/instructions/AddAttribute.instruction.mjs +25 -0
- package/dist/node/instructions/AddAttribute.instruction.mjs.map +1 -0
- package/dist/node/instructions/AddComment.instruction.d.mts +9 -0
- package/dist/node/instructions/AddComment.instruction.d.ts +9 -0
- package/dist/node/instructions/AddComment.instruction.js +35 -0
- package/dist/node/instructions/AddComment.instruction.js.map +1 -0
- package/dist/node/instructions/AddComment.instruction.mjs +28 -0
- package/dist/node/instructions/AddComment.instruction.mjs.map +1 -0
- package/dist/node/instructions/AddElement.instruction.d.mts +8 -0
- package/dist/node/instructions/AddElement.instruction.d.ts +8 -0
- package/dist/node/instructions/AddElement.instruction.js +32 -0
- package/dist/node/instructions/AddElement.instruction.js.map +1 -0
- package/dist/node/instructions/AddElement.instruction.mjs +25 -0
- package/dist/node/instructions/AddElement.instruction.mjs.map +1 -0
- package/dist/node/instructions/AddInterpolation.instruction.d.mts +8 -0
- package/dist/node/instructions/AddInterpolation.instruction.d.ts +8 -0
- package/dist/node/instructions/AddInterpolation.instruction.js +32 -0
- package/dist/node/instructions/AddInterpolation.instruction.js.map +1 -0
- package/dist/node/instructions/AddInterpolation.instruction.mjs +25 -0
- package/dist/node/instructions/AddInterpolation.instruction.mjs.map +1 -0
- package/dist/node/instructions/AddListener.instruction.d.mts +8 -0
- package/dist/node/instructions/AddListener.instruction.d.ts +8 -0
- package/dist/node/instructions/AddListener.instruction.js +32 -0
- package/dist/node/instructions/AddListener.instruction.js.map +1 -0
- package/dist/node/instructions/AddListener.instruction.mjs +25 -0
- package/dist/node/instructions/AddListener.instruction.mjs.map +1 -0
- package/dist/node/instructions/AddStyle.instruction.d.mts +8 -0
- package/dist/node/instructions/AddStyle.instruction.d.ts +8 -0
- package/dist/node/instructions/AddStyle.instruction.js +32 -0
- package/dist/node/instructions/AddStyle.instruction.js.map +1 -0
- package/dist/node/instructions/AddStyle.instruction.mjs +25 -0
- package/dist/node/instructions/AddStyle.instruction.mjs.map +1 -0
- package/dist/node/instructions/AddText.instruction.d.mts +8 -0
- package/dist/node/instructions/AddText.instruction.d.ts +8 -0
- package/dist/node/instructions/AddText.instruction.js +32 -0
- package/dist/node/instructions/AddText.instruction.js.map +1 -0
- package/dist/node/instructions/AddText.instruction.mjs +25 -0
- package/dist/node/instructions/AddText.instruction.mjs.map +1 -0
- package/dist/node/instructions/AreHTML.instructions.constants.d.mts +11 -0
- package/dist/node/instructions/AreHTML.instructions.constants.d.ts +11 -0
- package/dist/node/instructions/AreHTML.instructions.constants.js +15 -0
- package/dist/node/instructions/AreHTML.instructions.constants.js.map +1 -0
- package/dist/node/instructions/AreHTML.instructions.constants.mjs +15 -0
- package/dist/node/instructions/AreHTML.instructions.constants.mjs.map +1 -0
- package/dist/node/instructions/AreHTML.instructions.types.d.mts +46 -0
- package/dist/node/instructions/AreHTML.instructions.types.d.ts +46 -0
- package/dist/node/instructions/AreHTML.instructions.types.js +4 -0
- package/dist/node/instructions/AreHTML.instructions.types.js.map +1 -0
- package/dist/node/instructions/AreHTML.instructions.types.mjs +3 -0
- package/dist/node/instructions/AreHTML.instructions.types.mjs.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.component.d.mts +4 -0
- package/dist/node/lib/AreDirective/AreDirective.component.d.ts +4 -0
- package/dist/node/lib/AreDirective/AreDirective.component.js +117 -0
- package/dist/node/lib/AreDirective/AreDirective.component.js.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.component.mjs +107 -0
- package/dist/node/lib/AreDirective/AreDirective.component.mjs.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.constants.d.mts +16 -0
- package/dist/node/lib/AreDirective/AreDirective.constants.d.ts +16 -0
- package/dist/node/lib/AreDirective/AreDirective.constants.js +20 -0
- package/dist/node/lib/AreDirective/AreDirective.constants.js.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.constants.mjs +20 -0
- package/dist/node/lib/AreDirective/AreDirective.constants.mjs.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.context.d.mts +9 -0
- package/dist/node/lib/AreDirective/AreDirective.context.d.ts +9 -0
- package/dist/node/lib/AreDirective/AreDirective.context.js +14 -0
- package/dist/node/lib/AreDirective/AreDirective.context.js.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.context.mjs +13 -0
- package/dist/node/lib/AreDirective/AreDirective.context.mjs.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.meta.d.mts +7 -0
- package/dist/node/lib/AreDirective/AreDirective.meta.d.ts +7 -0
- package/dist/node/lib/AreDirective/AreDirective.meta.js +14 -0
- package/dist/node/lib/AreDirective/AreDirective.meta.js.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.meta.mjs +13 -0
- package/dist/node/lib/AreDirective/AreDirective.meta.mjs.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.types.d.mts +17 -0
- package/dist/node/lib/AreDirective/AreDirective.types.d.ts +17 -0
- package/dist/node/lib/AreDirective/AreDirective.types.js +4 -0
- package/dist/node/lib/AreDirective/AreDirective.types.js.map +1 -0
- package/dist/node/lib/AreDirective/AreDirective.types.mjs +3 -0
- package/dist/node/lib/AreDirective/AreDirective.types.mjs.map +1 -0
- package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.mts +13 -0
- package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.ts +13 -0
- package/dist/node/lib/AreHTML/AreHTML.tokenizer.js +82 -0
- package/dist/node/lib/AreHTML/AreHTML.tokenizer.js.map +1 -0
- package/dist/node/lib/AreHTML/AreHTML.tokenizer.mjs +70 -0
- package/dist/node/lib/AreHTML/AreHTML.tokenizer.mjs.map +1 -0
- package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.mts +4 -0
- package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.ts +4 -0
- package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.js +13 -0
- package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.js.map +1 -0
- package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.mjs +12 -0
- package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.mjs.map +1 -0
- package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.mts +4 -0
- package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.ts +4 -0
- package/dist/node/lib/AreHTMLNode/AreHTMLNode.js +82 -0
- package/dist/node/lib/AreHTMLNode/AreHTMLNode.js.map +1 -0
- package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs +75 -0
- package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs.map +1 -0
- package/dist/node/lib/AreRoot/AreRoot.component.d.mts +13 -0
- package/dist/node/lib/AreRoot/AreRoot.component.d.ts +13 -0
- package/dist/node/lib/AreRoot/AreRoot.component.js +117 -0
- package/dist/node/lib/AreRoot/AreRoot.component.js.map +1 -0
- package/dist/node/lib/AreRoot/AreRoot.component.mjs +107 -0
- package/dist/node/lib/AreRoot/AreRoot.component.mjs.map +1 -0
- package/dist/node/lib/AreStyle/AreStyle.context.d.mts +8 -0
- package/dist/node/lib/AreStyle/AreStyle.context.d.ts +8 -0
- package/dist/node/lib/AreStyle/AreStyle.context.js +16 -0
- package/dist/node/lib/AreStyle/AreStyle.context.js.map +1 -0
- package/dist/node/lib/AreStyle/AreStyle.context.mjs +15 -0
- package/dist/node/lib/AreStyle/AreStyle.context.mjs.map +1 -0
- package/dist/node/lib/AreStyle/AreStyle.types.d.mts +2 -0
- package/dist/node/lib/AreStyle/AreStyle.types.d.ts +2 -0
- package/dist/node/lib/AreStyle/AreStyle.types.js +4 -0
- package/dist/node/lib/AreStyle/AreStyle.types.js.map +1 -0
- package/dist/node/lib/AreStyle/AreStyle.types.mjs +3 -0
- package/dist/node/lib/AreStyle/AreStyle.types.mjs.map +1 -0
- package/dist/node/lib/AreWatcher/AreWatcher.component.d.mts +18 -0
- package/dist/node/lib/AreWatcher/AreWatcher.component.d.ts +18 -0
- package/dist/node/lib/AreWatcher/AreWatcher.component.js +78 -0
- package/dist/node/lib/AreWatcher/AreWatcher.component.js.map +1 -0
- package/dist/node/lib/AreWatcher/AreWatcher.component.mjs +71 -0
- package/dist/node/lib/AreWatcher/AreWatcher.component.mjs.map +1 -0
- package/dist/node/nodes/AreComment.d.mts +10 -0
- package/dist/node/nodes/AreComment.d.ts +10 -0
- package/dist/node/nodes/AreComment.js +19 -0
- package/dist/node/nodes/AreComment.js.map +1 -0
- package/dist/node/nodes/AreComment.mjs +18 -0
- package/dist/node/nodes/AreComment.mjs.map +1 -0
- package/dist/node/nodes/AreComponent.d.mts +17 -0
- package/dist/node/nodes/AreComponent.d.ts +17 -0
- package/dist/node/nodes/AreComponent.js +35 -0
- package/dist/node/nodes/AreComponent.js.map +1 -0
- package/dist/node/nodes/AreComponent.mjs +28 -0
- package/dist/node/nodes/AreComponent.mjs.map +1 -0
- package/dist/node/nodes/AreInterpolation.d.mts +10 -0
- package/dist/node/nodes/AreInterpolation.d.ts +10 -0
- package/dist/node/nodes/AreInterpolation.js +19 -0
- package/dist/node/nodes/AreInterpolation.js.map +1 -0
- package/dist/node/nodes/AreInterpolation.mjs +18 -0
- package/dist/node/nodes/AreInterpolation.mjs.map +1 -0
- package/dist/node/nodes/AreRoot.d.mts +21 -0
- package/dist/node/nodes/AreRoot.d.ts +21 -0
- package/dist/node/nodes/AreRoot.js +41 -0
- package/dist/node/nodes/AreRoot.js.map +1 -0
- package/dist/node/nodes/AreRoot.mjs +34 -0
- package/dist/node/nodes/AreRoot.mjs.map +1 -0
- package/dist/node/nodes/AreText.d.mts +10 -0
- package/dist/node/nodes/AreText.d.ts +10 -0
- package/dist/node/nodes/AreText.js +19 -0
- package/dist/node/nodes/AreText.js.map +1 -0
- package/dist/node/nodes/AreText.mjs +18 -0
- package/dist/node/nodes/AreText.mjs.map +1 -0
- package/dist/node/signals/AreRoute.signal.d.mts +12 -0
- package/dist/node/signals/AreRoute.signal.d.ts +12 -0
- package/dist/node/signals/AreRoute.signal.js +25 -0
- package/dist/node/signals/AreRoute.signal.js.map +1 -0
- package/dist/node/signals/AreRoute.signal.mjs +24 -0
- package/dist/node/signals/AreRoute.signal.mjs.map +1 -0
- package/docs/a-logo-docs.png +0 -0
- package/examples/dashboard/concept.ts +60 -0
- package/examples/dashboard/containers/UI.container.ts +233 -0
- package/examples/dashboard/dist/index.html +22 -0
- package/examples/dashboard/dist/mnzfypsd-6zjt7w.js +11454 -0
- package/examples/dashboard/dist/styles.css +792 -0
- package/examples/dashboard/public/index.html +22 -0
- package/examples/dashboard/public/styles.css +792 -0
- package/examples/dashboard/src/components/DashboardApp.component.ts +31 -0
- package/examples/dashboard/src/components/DashboardHeader.component.ts +40 -0
- package/examples/dashboard/src/components/DashboardLogo.component.ts +29 -0
- package/examples/dashboard/src/components/DashboardMain.component.ts +57 -0
- package/examples/dashboard/src/components/DashboardMenu.component.ts +94 -0
- package/examples/dashboard/src/components/DashboardNav.component.ts +28 -0
- package/examples/dashboard/src/components/DashboardNavItem.component.ts +32 -0
- package/examples/dashboard/src/components/DashboardSidebar.component.ts +43 -0
- package/examples/dashboard/src/components/DashboardStatCard.component.ts +71 -0
- package/examples/dashboard/src/components/DashboardStats.component.ts +28 -0
- package/examples/dashboard/src/components/DashboardTable.component.ts +138 -0
- package/examples/dashboard/src/components/DashboardUserCard.component.ts +39 -0
- package/examples/dashboard/src/concept.ts +93 -0
- package/examples/jumpstart/concept.ts +60 -0
- package/examples/jumpstart/containers/UI.container.ts +233 -0
- package/examples/jumpstart/dist/index.html +104 -0
- package/examples/jumpstart/dist/mnpl1g4i-nobz9g.js +10882 -0
- package/examples/jumpstart/dist/static/css/main.css +40 -0
- package/examples/jumpstart/dist/static/img/test.png +0 -0
- package/examples/jumpstart/public/index.html +104 -0
- package/examples/jumpstart/public/static/css/main.css +40 -0
- package/examples/jumpstart/public/static/img/test.png +0 -0
- package/examples/jumpstart/src/components/A-Btn.component.ts +150 -0
- package/examples/jumpstart/src/components/A-Input.component.ts +78 -0
- package/examples/jumpstart/src/components/A-Navigation.component.ts +167 -0
- package/examples/jumpstart/src/components/List.component.ts +138 -0
- package/examples/jumpstart/src/components/PromptTextArea.component.ts +359 -0
- package/examples/jumpstart/src/components/SignInComponent.component.ts +127 -0
- package/examples/jumpstart/src/concept.ts +105 -0
- package/jest.config.ts +61 -0
- package/package.json +110 -0
- package/src/attributes/AreBinding.attribute.ts +19 -0
- package/src/attributes/AreDirective.attribute.ts +26 -0
- package/src/attributes/AreEvent.attribute.ts +5 -0
- package/src/attributes/AreStatic.attribute.ts +6 -0
- package/src/directives/AreComponent.directive.ts +0 -0
- package/src/directives/AreDirectiveFor.directive.ts +322 -0
- package/src/directives/AreDirectiveIf.directive.ts +130 -0
- package/src/engine/AreHTML.compiler.ts +226 -0
- package/src/engine/AreHTML.constants.ts +2 -0
- package/src/engine/AreHTML.context.ts +196 -0
- package/src/engine/AreHTML.engine.ts +210 -0
- package/src/engine/AreHTML.interpreter.ts +466 -0
- package/src/engine/AreHTML.lifecycle.ts +96 -0
- package/src/engine/AreHTML.tokenizer.ts +90 -0
- package/src/engine/AreHTML.transformer.ts +37 -0
- package/src/engine/AreHTML.types.ts +6 -0
- package/src/index.ts +80 -0
- package/src/instructions/AddAttribute.instruction.ts +25 -0
- package/src/instructions/AddComment.instruction.ts +27 -0
- package/src/instructions/AddElement.instruction.ts +22 -0
- package/src/instructions/AddInterpolation.instruction.ts +24 -0
- package/src/instructions/AddListener.instruction.ts +24 -0
- package/src/instructions/AddStyle.instruction.ts +24 -0
- package/src/instructions/AddText.instruction.ts +21 -0
- package/src/instructions/AreHTML.instructions.constants.ts +11 -0
- package/src/instructions/AreHTML.instructions.types.ts +51 -0
- package/src/lib/AreDirective/AreDirective.component.ts +124 -0
- package/src/lib/AreDirective/AreDirective.constants.ts +16 -0
- package/src/lib/AreDirective/AreDirective.context.ts +16 -0
- package/src/lib/AreDirective/AreDirective.meta.ts +9 -0
- package/src/lib/AreDirective/AreDirective.types.ts +14 -0
- package/src/lib/AreHTML/AreHTML.tokenizer.ts +86 -0
- package/src/lib/AreHTMLAttribute/AreHTML.attribute.ts +13 -0
- package/src/lib/AreHTMLNode/AreHTMLNode.ts +84 -0
- package/src/lib/AreRoot/AreRoot.component.ts +134 -0
- package/src/lib/AreStyle/AreStyle.context.ts +20 -0
- package/src/lib/AreStyle/AreStyle.types.ts +0 -0
- package/src/lib/AreWatcher/AreWatcher.component.ts +84 -0
- package/src/nodes/AreComment.ts +17 -0
- package/src/nodes/AreComponent.ts +25 -0
- package/src/nodes/AreInterpolation.ts +16 -0
- package/src/nodes/AreRoot.ts +29 -0
- package/src/nodes/AreText.ts +17 -0
- package/src/signals/AreRoute.signal.ts +27 -0
- package/tests/AreTokenizer.test.ts +260 -0
- package/tests/jest.setup.ts +30 -0
- package/tsconfig.json +60 -0
- package/tslint.json +98 -0
- package/tsup.config.ts +108 -0
package/README.md
ADDED
|
@@ -0,0 +1,678 @@
|
|
|
1
|
+
<img align="left" style="margin-right:40px; margin-bottom:80px;" width="180" height="80" src="./docs/a-logo-docs.png" alt="ADAAS Logo">
|
|
2
|
+
|
|
3
|
+
# ARE HTML Rendering Engine
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
|
|
9
|
+

|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## HTML Rendering Engine for the [ARE](https://github.com/ADAAS-org/adaas-are) (A-Concept Rendering Engine) framework.
|
|
17
|
+
|
|
18
|
+
`@adaas/are-html` bridges the ARE reactive scene graph to the browser DOM. It provides a full HTML compilation, interpreting, and lifecycle pipeline — turning ARE component templates written in standard HTML syntax into live, reactive DOM trees.
|
|
19
|
+
|
|
20
|
+
## Table of Contents
|
|
21
|
+
|
|
22
|
+
- [Overview](#overview)
|
|
23
|
+
- [Installation](#installation)
|
|
24
|
+
- [Quick Start](#quick-start)
|
|
25
|
+
- [Template Syntax](#template-syntax)
|
|
26
|
+
- [Interpolations `{{ }}`](#interpolations-)
|
|
27
|
+
- [Static Attributes](#static-attributes)
|
|
28
|
+
- [Dynamic Bindings `:attr`](#dynamic-bindings-attr)
|
|
29
|
+
- [Event Listeners `@event`](#event-listeners-event)
|
|
30
|
+
- [Conditional Rendering `$if`](#conditional-rendering-if)
|
|
31
|
+
- [List Rendering `$for`](#list-rendering-for)
|
|
32
|
+
- [HTML Comments](#html-comments)
|
|
33
|
+
- [Component Authoring](#component-authoring)
|
|
34
|
+
- [`@Are.Template`](#aretemplate)
|
|
35
|
+
- [`@Are.Data`](#aredata)
|
|
36
|
+
- [`@Are.Styles`](#arestyles)
|
|
37
|
+
- [`@Are.EventHandler`](#areeventhandler)
|
|
38
|
+
- [`props`](#props)
|
|
39
|
+
- [Engine Architecture](#engine-architecture)
|
|
40
|
+
- [AreHTMLEngine](#arehtmlengine)
|
|
41
|
+
- [AreHTMLCompiler](#arehtmlcompiler)
|
|
42
|
+
- [AreHTMLInterpreter](#arehtmlinterpreter)
|
|
43
|
+
- [AreHTMLLifecycle](#arehtmllifecycle)
|
|
44
|
+
- [AreHTMLTokenizer](#arehtmltokenizer)
|
|
45
|
+
- [AreHTMLTransformer](#arehtmltransformer)
|
|
46
|
+
- [AreHTMLEngineContext](#arehtmlenginecontext)
|
|
47
|
+
- [Nodes](#nodes)
|
|
48
|
+
- [Instructions](#instructions)
|
|
49
|
+
- [Directives](#directives)
|
|
50
|
+
- [Built-in: `$if`](#built-in-if)
|
|
51
|
+
- [Built-in: `$for`](#built-in-for)
|
|
52
|
+
- [Custom Directives](#custom-directives)
|
|
53
|
+
- [Signals & Routing](#signals--routing)
|
|
54
|
+
- [AreRoute](#areroute)
|
|
55
|
+
- [AreRoot component](#areroot-component)
|
|
56
|
+
- [Watcher](#watcher)
|
|
57
|
+
- [API Reference](#api-reference)
|
|
58
|
+
- [License](#license)
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Overview
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
@adaas/are-html
|
|
66
|
+
│
|
|
67
|
+
├── AreHTMLEngine ← registers compiler, interpreter, tokenizer, lifecycle, transformer
|
|
68
|
+
├── AreHTMLCompiler ← converts AreNodes + attributes into SceneInstructions
|
|
69
|
+
├── AreHTMLInterpreter ← applies SceneInstructions to the real DOM
|
|
70
|
+
├── AreHTMLLifecycle ← initialises nodes, subscribes to signals
|
|
71
|
+
├── AreHTMLTokenizer ← parses HTML markup into AreHTMLNode attribute objects
|
|
72
|
+
├── AreHTMLTransformer ← runs directive transform phase (tree restructuring)
|
|
73
|
+
│
|
|
74
|
+
├── nodes/ ← AreHTMLNode, AreComponentNode, AreRootNode, AreText, AreInterpolation, AreComment
|
|
75
|
+
├── attributes/ ← AreStaticAttribute, AreBindingAttribute, AreEventAttribute, AreDirectiveAttribute
|
|
76
|
+
├── directives/ ← AreDirectiveIf ($if), AreDirectiveFor ($for)
|
|
77
|
+
├── instructions/ ← AddElement, AddText, AddAttribute, AddStyle, AddListener, AddInterpolation, AddComment
|
|
78
|
+
└── signals/ ← AreRoute (client-side routing signal)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The engine follows a strict pipeline per node:
|
|
82
|
+
|
|
83
|
+
1. **Tokenize** — parse raw HTML markup, extract attributes
|
|
84
|
+
2. **Transform** — run directive transforms that may restructure the node tree
|
|
85
|
+
3. **Compile** — emit `SceneInstruction` objects describing DOM mutations
|
|
86
|
+
4. **Mount** — apply instructions through the interpreter, writing to the real DOM
|
|
87
|
+
5. **Update** — re-compile reactive instructions when store values change
|
|
88
|
+
6. **Unmount** — revert instructions and clean up the DOM
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Installation
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm install @adaas/are-html
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Peer dependencies (installed automatically as transitive deps):
|
|
99
|
+
|
|
100
|
+
| Package | Purpose |
|
|
101
|
+
|---|---|
|
|
102
|
+
| `@adaas/are` | Core ARE scene graph, store, compiler, interpreter |
|
|
103
|
+
| `@adaas/a-concept` | Dependency injection, component model |
|
|
104
|
+
| `@adaas/a-frame` | Component metadata decorators |
|
|
105
|
+
| `@adaas/a-utils` | Logger, signal bus, execution context |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Quick Start
|
|
110
|
+
|
|
111
|
+
### 1. Write a component
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { Are, AreNode, AreStore, AreEvent } from '@adaas/are';
|
|
115
|
+
import { A_Caller, A_Inject } from '@adaas/a-concept';
|
|
116
|
+
|
|
117
|
+
export class CounterComponent extends Are {
|
|
118
|
+
|
|
119
|
+
@Are.Template
|
|
120
|
+
async template(@A_Inject(A_Caller) node: AreNode) {
|
|
121
|
+
node.setContent(`
|
|
122
|
+
<div class="counter">
|
|
123
|
+
<p>Count: {{count}}</p>
|
|
124
|
+
<button @click="increment">+</button>
|
|
125
|
+
</div>
|
|
126
|
+
`);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@Are.Data
|
|
130
|
+
async data(@A_Inject(AreStore) store: AreStore) {
|
|
131
|
+
store.set({ count: 0 });
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@Are.EventHandler
|
|
135
|
+
async increment(
|
|
136
|
+
@A_Inject(A_Caller) node: AreNode,
|
|
137
|
+
@A_Inject(AreStore) store: AreStore,
|
|
138
|
+
) {
|
|
139
|
+
store.set('count', store.get('count') + 1);
|
|
140
|
+
await node.update();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 2. Bootstrap with `AreHTMLEngine`
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
import { A_Concept, A_Context } from '@adaas/a-concept';
|
|
149
|
+
import { A_Logger } from '@adaas/a-utils/a-logger';
|
|
150
|
+
import { A_Service, A_ServiceFeatures } from '@adaas/a-utils/a-service';
|
|
151
|
+
import { A_SignalBus } from '@adaas/a-utils/a-signal';
|
|
152
|
+
import { AreInit, AreRoute } from '@adaas/are';
|
|
153
|
+
import { AreHTMLEngine } from '@adaas/are-html';
|
|
154
|
+
import { AreRoot } from '@adaas/are-html';
|
|
155
|
+
import { AreHTMLEngineContext } from '@adaas/are-html';
|
|
156
|
+
import { AreDirectiveIf, AreDirectiveFor } from '@adaas/are-html';
|
|
157
|
+
import { CounterComponent } from './counter.component';
|
|
158
|
+
|
|
159
|
+
// Your app container (extends A_Service or any A-Concept service)
|
|
160
|
+
class AppContainer extends A_Service {
|
|
161
|
+
// ... build/load/start lifecycle hooks
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const container = new AppContainer({
|
|
165
|
+
name: 'my-app',
|
|
166
|
+
components: [
|
|
167
|
+
CounterComponent,
|
|
168
|
+
AreDirectiveIf,
|
|
169
|
+
AreDirectiveFor,
|
|
170
|
+
AreRoot,
|
|
171
|
+
AreHTMLEngine,
|
|
172
|
+
A_SignalBus,
|
|
173
|
+
A_Logger,
|
|
174
|
+
],
|
|
175
|
+
fragments: [
|
|
176
|
+
new AreHTMLEngineContext({ container: document }),
|
|
177
|
+
],
|
|
178
|
+
entities: [AreInit, AreRoute],
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const concept = new A_Concept({
|
|
182
|
+
name: 'my-concept',
|
|
183
|
+
containers: [container],
|
|
184
|
+
components: [A_Logger],
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
await concept.load();
|
|
188
|
+
await concept.start();
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 3. `index.html`
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<!DOCTYPE html>
|
|
195
|
+
<html>
|
|
196
|
+
<body>
|
|
197
|
+
<!-- The engine mounts onto existing DOM elements by their id -->
|
|
198
|
+
<are-root id="app" default="counter-component"></are-root>
|
|
199
|
+
</body>
|
|
200
|
+
</html>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Template Syntax
|
|
206
|
+
|
|
207
|
+
Templates are plain HTML strings written inside `node.setContent(...)` inside an `@Are.Template` method.
|
|
208
|
+
|
|
209
|
+
### Interpolations `{{ }}`
|
|
210
|
+
|
|
211
|
+
Double-curly-brace syntax renders a reactive value from the component store:
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<p>Hello, {{username}}!</p>
|
|
215
|
+
<span class="badge">{{count}}</span>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
The value is re-evaluated and the text node is updated on every `node.update()` call.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### Static Attributes
|
|
223
|
+
|
|
224
|
+
Regular HTML attributes are treated as static and written directly to the DOM element:
|
|
225
|
+
|
|
226
|
+
```html
|
|
227
|
+
<button class="btn btn-primary" type="button">Click me</button>
|
|
228
|
+
<img src="/logo.png" alt="Logo" />
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
### Dynamic Bindings `:attr`
|
|
234
|
+
|
|
235
|
+
Prefix an attribute name with `:` to evaluate its value as a store expression:
|
|
236
|
+
|
|
237
|
+
```html
|
|
238
|
+
<!-- binds the "class" attribute to an expression -->
|
|
239
|
+
<li :class="active === item.name ? 'menu-item-active' : ''" class="menu-item">...</li>
|
|
240
|
+
|
|
241
|
+
<!-- binds href dynamically -->
|
|
242
|
+
<a :href="user.profileUrl">Profile</a>
|
|
243
|
+
|
|
244
|
+
<!-- binds a boolean attribute -->
|
|
245
|
+
<input :disabled="isLoading" />
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
The expression has access to all values in the component store.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### Event Listeners `@event`
|
|
253
|
+
|
|
254
|
+
Prefix an attribute name with `@` to attach a DOM event listener that fires an ARE event routed to an `@Are.EventHandler` method on the component:
|
|
255
|
+
|
|
256
|
+
```html
|
|
257
|
+
<button @click="handleClick">Submit</button>
|
|
258
|
+
<input @input="onInput" />
|
|
259
|
+
<form @submit="onSubmit">...</form>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Pass arguments to the handler:
|
|
263
|
+
|
|
264
|
+
```html
|
|
265
|
+
<li @click="$select(item.id)">{{item.name}}</li>
|
|
266
|
+
<button @click="$remove(item)">Delete</button>
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Inside the handler use `event.get('args')` to retrieve the passed arguments.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### Conditional Rendering `$if`
|
|
274
|
+
|
|
275
|
+
The `$if` directive conditionally renders an element based on a store expression. When the expression is falsy the element is replaced by a comment placeholder and removed from the DOM:
|
|
276
|
+
|
|
277
|
+
```html
|
|
278
|
+
<!-- simple boolean -->
|
|
279
|
+
<div $if="isVisible">Visible content</div>
|
|
280
|
+
|
|
281
|
+
<!-- expression -->
|
|
282
|
+
<span $if="user.role === 'admin'">Admin panel</span>
|
|
283
|
+
|
|
284
|
+
<!-- combined with $for -->
|
|
285
|
+
<li $for="item in items" $if="item.badge > 0" class="menu-item">
|
|
286
|
+
{{item.name}} <span class="badge">{{item.badge}}</span>
|
|
287
|
+
</li>
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
### List Rendering `$for`
|
|
293
|
+
|
|
294
|
+
The `$for` directive renders a template element for each item in a store array. It supports key, optional index, and function-call expressions:
|
|
295
|
+
|
|
296
|
+
```html
|
|
297
|
+
<!-- basic -->
|
|
298
|
+
<li $for="item in items">{{item.name}}</li>
|
|
299
|
+
|
|
300
|
+
<!-- with index -->
|
|
301
|
+
<tr $for="row, idx in rows">
|
|
302
|
+
<td>{{idx}}</td><td>{{row.value}}</td>
|
|
303
|
+
</tr>
|
|
304
|
+
|
|
305
|
+
<!-- expression with parentheses -->
|
|
306
|
+
<li $for="(item, i) in items">{{i}}: {{item.label}}</li>
|
|
307
|
+
|
|
308
|
+
<!-- filter function defined in the store -->
|
|
309
|
+
<li $for="item in filter(items)">{{item.name}}</li>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Each generated node receives its own isolated `AreDirectiveContext` holding the item-scoped variables, so bindings like `{{item.name}}` resolve correctly per clone.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
### HTML Comments
|
|
317
|
+
|
|
318
|
+
HTML comments are first-class nodes — they pass through to the DOM as `Comment` nodes and are also used internally by the `$if` and `$for` directives as placeholder anchors:
|
|
319
|
+
|
|
320
|
+
```html
|
|
321
|
+
<!-- This is a static comment -->
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Component Authoring
|
|
327
|
+
|
|
328
|
+
ARE components extend the `Are` base class from `@adaas/are`.
|
|
329
|
+
|
|
330
|
+
### `@Are.Template`
|
|
331
|
+
|
|
332
|
+
Defines the HTML structure. Called once during the compile phase.
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
@Are.Template
|
|
336
|
+
async template(@A_Inject(A_Caller) node: AreNode) {
|
|
337
|
+
node.setContent(`<div class="card">{{title}}</div>`);
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### `@Are.Data`
|
|
342
|
+
|
|
343
|
+
Initialises the component store. Called once before compilation.
|
|
344
|
+
|
|
345
|
+
```typescript
|
|
346
|
+
@Are.Data
|
|
347
|
+
async data(@A_Inject(AreStore) store: AreStore) {
|
|
348
|
+
store.set({ title: 'Hello World', count: 0 });
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### `@Are.Styles`
|
|
353
|
+
|
|
354
|
+
Attaches scoped CSS to the component node.
|
|
355
|
+
|
|
356
|
+
```typescript
|
|
357
|
+
@Are.Styles
|
|
358
|
+
async styles(@A_Inject(A_Caller) node: AreNode) {
|
|
359
|
+
node.setStyles(`
|
|
360
|
+
.card { padding: 16px; border-radius: 8px; }
|
|
361
|
+
`);
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### `@Are.EventHandler`
|
|
366
|
+
|
|
367
|
+
Declares a DOM event handler. The method is resolved by name from the template's `@event="handlerName"` binding.
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
@Are.EventHandler
|
|
371
|
+
async handleClick(
|
|
372
|
+
@A_Inject(A_Caller) node: AreNode,
|
|
373
|
+
@A_Inject(AreStore) store: AreStore,
|
|
374
|
+
@A_Inject(AreEvent) event: AreEvent,
|
|
375
|
+
) {
|
|
376
|
+
store.set('count', store.get('count') + 1);
|
|
377
|
+
await node.update();
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Access DOM event arguments:
|
|
382
|
+
```typescript
|
|
383
|
+
const [arg1] = event.get('args') ?? [];
|
|
384
|
+
const domElement = event.get('element');
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### `props`
|
|
388
|
+
|
|
389
|
+
Define typed, default-valued props that parent components can pass via `:propName="expression"` bindings:
|
|
390
|
+
|
|
391
|
+
```typescript
|
|
392
|
+
export class CardComponent extends Are {
|
|
393
|
+
props: Record<string, ArePropDefinition> = {
|
|
394
|
+
title: { type: 'string', default: '' },
|
|
395
|
+
disabled: { type: 'boolean', default: false },
|
|
396
|
+
count: { type: 'number', default: 0 },
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Usage in a parent template:
|
|
402
|
+
```html
|
|
403
|
+
<card-component :title="selectedItem.name" :disabled="isLoading"></card-component>
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Engine Architecture
|
|
409
|
+
|
|
410
|
+
### AreHTMLEngine
|
|
411
|
+
|
|
412
|
+
The top-level engine class registered as a component in the container. On load it packages the entire pipeline:
|
|
413
|
+
|
|
414
|
+
```typescript
|
|
415
|
+
import { AreHTMLEngine } from '@adaas/are-html';
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
Registers: `AreHTMLCompiler`, `AreHTMLInterpreter`, `AreHTMLTokenizer`, `AreHTMLLifecycle`, `AreHTMLTransformer`, and the `AreHTMLEngineContext` context.
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
### AreHTMLCompiler
|
|
423
|
+
|
|
424
|
+
Extends `AreCompiler`. Converts visited `AreNode` / `AreAttribute` instances into `AreInstruction` objects planned onto a `AreScene`:
|
|
425
|
+
|
|
426
|
+
| Visitor target | Emits |
|
|
427
|
+
|---|---|
|
|
428
|
+
| `AreInterpolation` | `AddTextInstruction` (evaluated) |
|
|
429
|
+
| `AreText` | `AddTextInstruction` (static) |
|
|
430
|
+
| `AreStaticAttribute` | `AddAttributeInstruction` |
|
|
431
|
+
| `AreEventAttribute` | `AddListenerInstruction` |
|
|
432
|
+
| `AreBindingAttribute` | `AddAttributeInstruction` (evaluated) or prop injection |
|
|
433
|
+
| Directive attributes | delegated to the directive's compile method |
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
### AreHTMLInterpreter
|
|
438
|
+
|
|
439
|
+
Extends `AreInterpreter`. Applies and reverts instructions against the real DOM:
|
|
440
|
+
|
|
441
|
+
| Instruction | Apply | Revert |
|
|
442
|
+
|---|---|---|
|
|
443
|
+
| `AddElement` | `createElement` + `appendChild` / `replaceChild` | `removeChild` |
|
|
444
|
+
| `AddAttribute` | `setAttribute` (with cache-diff for reactive updates) | `removeAttribute` |
|
|
445
|
+
| `AddListener` | `addEventListener` | `removeEventListener` |
|
|
446
|
+
| `AddText` | `createTextNode` + `appendChild` | `removeChild` |
|
|
447
|
+
| `AddComment` | `createComment` + `appendChild` | `removeChild` |
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
### AreHTMLLifecycle
|
|
452
|
+
|
|
453
|
+
Extends `AreLifecycle`. Handles per-node initialisation hooks:
|
|
454
|
+
|
|
455
|
+
- `AreComponentNode` — standard init + scope registration
|
|
456
|
+
- `AreRootNode` — subscribes the node to the `AreSignalsContext`
|
|
457
|
+
- `AreText` / `AreInterpolation` — creates a lightweight `AreScene` per text node
|
|
458
|
+
|
|
459
|
+
Also manages the directive attribute update pipeline, chaining updates when store values change.
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
### AreHTMLTokenizer
|
|
464
|
+
|
|
465
|
+
Extends `AreTokenizer`. Parses the raw markup string on `AreComponentNode` and `AreRootNode`, extracting attributes and registering them into the node scope:
|
|
466
|
+
|
|
467
|
+
| Prefix | Attribute class |
|
|
468
|
+
|---|---|
|
|
469
|
+
| `$` | `AreDirectiveAttribute` |
|
|
470
|
+
| `:` | `AreBindingAttribute` |
|
|
471
|
+
| `@` | `AreEventAttribute` |
|
|
472
|
+
| _(none)_ | `AreStaticAttribute` |
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
### AreHTMLTransformer
|
|
477
|
+
|
|
478
|
+
Extends `AreTransformer`. Runs before compilation and delegates to a directive component's `Transform` phase for `AreDirectiveAttribute` instances. Transformations may restructure the node tree (e.g. `$if` and `$for` move original nodes into template clones before the compile cycle starts).
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
### AreHTMLEngineContext
|
|
483
|
+
|
|
484
|
+
The shared context object that maps AreNodes and instructions to their DOM nodes:
|
|
485
|
+
|
|
486
|
+
```typescript
|
|
487
|
+
import { AreHTMLEngineContext } from '@adaas/are-html';
|
|
488
|
+
|
|
489
|
+
// provide as a fragment during container setup
|
|
490
|
+
fragments: [
|
|
491
|
+
new AreHTMLEngineContext({ container: document }),
|
|
492
|
+
]
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
Maintains internal indices for: `nodeToHostElements`, `instructionToElement`, `elementListeners`.
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## Nodes
|
|
500
|
+
|
|
501
|
+
| Class | Description |
|
|
502
|
+
|---|---|
|
|
503
|
+
| `AreHTMLNode` | Base node class. Exposes `staticAttributes`, `bindings`, `directives`, `events`, `interpolations`, `styles`. |
|
|
504
|
+
| `AreComponentNode` | Generic HTML element node. Resolves a matching `Are` component instance from the scope. |
|
|
505
|
+
| `AreRootNode` | Special root element node (`<are-root>`). Fixed `tag = 'div'`. |
|
|
506
|
+
| `AreText` | Plain text node. |
|
|
507
|
+
| `AreInterpolation` | `{{ expression }}` node. |
|
|
508
|
+
| `AreComment` | HTML comment node. |
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## Instructions
|
|
513
|
+
|
|
514
|
+
Instructions are immutable descriptions of DOM mutations that can be applied (mounted) or reverted (unmounted):
|
|
515
|
+
|
|
516
|
+
| Class | Type | Description |
|
|
517
|
+
|---|---|---|
|
|
518
|
+
| `AddElementInstruction` | `AreDeclaration` | Creates one DOM element. |
|
|
519
|
+
| `AddTextInstruction` | `AreDeclaration` | Creates one text node (static or evaluated). |
|
|
520
|
+
| `AddCommentInstruction` | `AreDeclaration` | Creates one comment node. |
|
|
521
|
+
| `AddAttributeInstruction` | `AreMutation` | Sets an attribute on the parent element. Supports reactive diff updates. |
|
|
522
|
+
| `AddStyleInstruction` | `AreMutation` | Sets an inline CSS property on the parent element. |
|
|
523
|
+
| `AddListenerInstruction` | `AreMutation` | Attaches a DOM event listener. |
|
|
524
|
+
| `AddInterpolationInstruction` | `AreMutation` | Reactive text node resolved from the store. |
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## Directives
|
|
529
|
+
|
|
530
|
+
Directives are prefixed with `$` in templates and processed in priority order (higher number runs first):
|
|
531
|
+
|
|
532
|
+
### Built-in: `$if`
|
|
533
|
+
|
|
534
|
+
Priority: **2**
|
|
535
|
+
|
|
536
|
+
Conditionally shows or hides an element. During the transform phase the original node is wrapped in a group + comment anchor. During compile/update the inner template's scene is activated or deactivated.
|
|
537
|
+
|
|
538
|
+
```html
|
|
539
|
+
<div $if="isAuthenticated">Welcome back, {{username}}!</div>
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
### Built-in: `$for`
|
|
543
|
+
|
|
544
|
+
Priority: **1**
|
|
545
|
+
|
|
546
|
+
Renders a list by cloning the template node for each array item. Each clone has an isolated `AreDirectiveContext` with item-scoped variables. Supports incremental updates — unchanged items are kept, new items are appended, removed items are unmounted.
|
|
547
|
+
|
|
548
|
+
```html
|
|
549
|
+
<li $for="product in products">
|
|
550
|
+
{{product.name}} — ${{product.price}}
|
|
551
|
+
</li>
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Custom Directives
|
|
555
|
+
|
|
556
|
+
Extend `AreDirective` and give it a priority, then implement `Transform`, `Compile`, and/or `Update` phases:
|
|
557
|
+
|
|
558
|
+
```typescript
|
|
559
|
+
import { AreDirective } from '@adaas/are-html';
|
|
560
|
+
import { AreDirectiveAttribute, AreDirectiveContext } from '@adaas/are-html';
|
|
561
|
+
import { A_Inject, A_Caller } from '@adaas/a-concept';
|
|
562
|
+
import { AreStore, AreScene } from '@adaas/are';
|
|
563
|
+
|
|
564
|
+
@AreDirective.Priority(3)
|
|
565
|
+
export class AreDirectivePermission extends AreDirective {
|
|
566
|
+
|
|
567
|
+
@AreDirective.Compile
|
|
568
|
+
compile(
|
|
569
|
+
@A_Inject(A_Caller) attribute: AreDirectiveAttribute,
|
|
570
|
+
@A_Inject(AreStore) store: AreStore,
|
|
571
|
+
@A_Inject(AreScene) scene: AreScene,
|
|
572
|
+
) {
|
|
573
|
+
const allowed = store.get(attribute.content);
|
|
574
|
+
if (!allowed) scene.deactivate();
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
Register the directive in your container's `components` array and name it `AreDirective<PascalCaseName>` — the tokenizer resolves components by name automatically.
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
## Signals & Routing
|
|
584
|
+
|
|
585
|
+
### AreRoute
|
|
586
|
+
|
|
587
|
+
`AreRoute` wraps an `A_Route` (path or regex) as an ARE signal. It is used to match the current `document.location.pathname` against registered route conditions:
|
|
588
|
+
|
|
589
|
+
```typescript
|
|
590
|
+
import { AreRoute } from '@adaas/are-html';
|
|
591
|
+
|
|
592
|
+
// Matches /dashboard or any sub-path
|
|
593
|
+
new AreRoute('/dashboard');
|
|
594
|
+
|
|
595
|
+
// Regex route
|
|
596
|
+
new AreRoute(/^\/user\/\d+/);
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
`AreRoute.default()` returns an `AreRoute` for the current pathname.
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
### AreRoot component
|
|
604
|
+
|
|
605
|
+
`AreRoot` is a built-in `Are` component that powers `<are-root>` elements. It resolves which child component to render based on incoming signals or a `default` attribute, then performs a full lifecycle cycle (tokenize → compile → mount) on the new child:
|
|
606
|
+
|
|
607
|
+
```html
|
|
608
|
+
<!-- render 'dashboard-component' by default -->
|
|
609
|
+
<are-root id="main" default="dashboard-component"></are-root>
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
Route-driven rendering uses `AreSignalsContext` / `AreSignalsMeta` to select the component; when a new signal arrives the old child is unmounted, destroyed, and replaced.
|
|
613
|
+
|
|
614
|
+
---
|
|
615
|
+
|
|
616
|
+
## Watcher
|
|
617
|
+
|
|
618
|
+
`AreWatcher` observes browser navigation events (`pushState`, `replaceState`, `popstate`, `hashchange`) and notifies handlers on URL change:
|
|
619
|
+
|
|
620
|
+
```typescript
|
|
621
|
+
import { AreWatcher } from '@adaas/are-html';
|
|
622
|
+
|
|
623
|
+
const watcher = new AreWatcher();
|
|
624
|
+
const unsubscribe = watcher.onChange((url: URL) => {
|
|
625
|
+
console.log('Navigated to:', url.pathname);
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
// later
|
|
629
|
+
unsubscribe();
|
|
630
|
+
watcher.destroy();
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
---
|
|
634
|
+
|
|
635
|
+
## API Reference
|
|
636
|
+
|
|
637
|
+
| Export | Description |
|
|
638
|
+
|---|---|
|
|
639
|
+
| `AreHTMLEngine` | Main engine — register as a component |
|
|
640
|
+
| `AreHTMLEngineContext` | Context fragment — register as a fragment |
|
|
641
|
+
| `AreHTMLNode` | Base HTML node class |
|
|
642
|
+
| `AreHTMLAttribute` | Base attribute class |
|
|
643
|
+
| `AreHTMLCompiler` | Compiler (extendable) |
|
|
644
|
+
| `AreHTMLInterpreter` | DOM interpreter (extendable) |
|
|
645
|
+
| `AreHTMLLifecycle` | Node lifecycle hooks (extendable) |
|
|
646
|
+
| `AreHTMLTokenizer` | Markup attribute parser (extendable) |
|
|
647
|
+
| `AreHTMLTransformer` | Directive transform runner (extendable) |
|
|
648
|
+
| `AreComponentNode` | Generic element node |
|
|
649
|
+
| `AreRootNode` | `<are-root>` node |
|
|
650
|
+
| `AreText` | Text node |
|
|
651
|
+
| `AreInterpolation` | `{{ }}` interpolation node |
|
|
652
|
+
| `AreComment` | Comment node |
|
|
653
|
+
| `AreStaticAttribute` | Plain HTML attribute |
|
|
654
|
+
| `AreBindingAttribute` | `:prop` dynamic binding |
|
|
655
|
+
| `AreEventAttribute` | `@event` listener binding |
|
|
656
|
+
| `AreDirectiveAttribute` | `$directive` attribute |
|
|
657
|
+
| `AreDirectiveIf` | Built-in `$if` directive |
|
|
658
|
+
| `AreDirectiveFor` | Built-in `$for` directive |
|
|
659
|
+
| `AreDirective` | Base class for custom directives |
|
|
660
|
+
| `AreDirectiveContext` | Per-item scope context for directives |
|
|
661
|
+
| `AreRoot` | `<are-root>` component |
|
|
662
|
+
| `AreWatcher` | Browser navigation observer |
|
|
663
|
+
| `AreRoute` | Client-side routing signal |
|
|
664
|
+
| `AddElementInstruction` | DOM element creation instruction |
|
|
665
|
+
| `AddTextInstruction` | Text node instruction |
|
|
666
|
+
| `AddCommentInstruction` | Comment node instruction |
|
|
667
|
+
| `AddAttributeInstruction` | Attribute mutation instruction |
|
|
668
|
+
| `AddStyleInstruction` | Inline style mutation instruction |
|
|
669
|
+
| `AddListenerInstruction` | Event listener mutation instruction |
|
|
670
|
+
| `AddInterpolationInstruction` | Reactive interpolation instruction |
|
|
671
|
+
| `AreHTMLInstructions` | Instruction name constants |
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
## License
|
|
676
|
+
|
|
677
|
+
ISC © [ADAAS](https://adaas.org)
|
|
678
|
+
|