@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.
Files changed (365) hide show
  1. package/.conf/tsconfig.base.json +87 -0
  2. package/.conf/tsconfig.browser.json +34 -0
  3. package/.conf/tsconfig.node.json +35 -0
  4. package/.nvmrc +1 -0
  5. package/LICENSE +13 -0
  6. package/README.md +678 -0
  7. package/dist/browser/index.d.mts +521 -0
  8. package/dist/browser/index.mjs +1782 -0
  9. package/dist/browser/index.mjs.map +1 -0
  10. package/dist/node/AreBinding.attribute-C6JasbJL.d.ts +110 -0
  11. package/dist/node/AreBinding.attribute-C6qrxN8K.d.mts +110 -0
  12. package/dist/node/attributes/AreBinding.attribute.d.mts +4 -0
  13. package/dist/node/attributes/AreBinding.attribute.d.ts +4 -0
  14. package/dist/node/attributes/AreBinding.attribute.js +15 -0
  15. package/dist/node/attributes/AreBinding.attribute.js.map +1 -0
  16. package/dist/node/attributes/AreBinding.attribute.mjs +14 -0
  17. package/dist/node/attributes/AreBinding.attribute.mjs.map +1 -0
  18. package/dist/node/attributes/AreDirective.attribute.d.mts +4 -0
  19. package/dist/node/attributes/AreDirective.attribute.d.ts +4 -0
  20. package/dist/node/attributes/AreDirective.attribute.js +20 -0
  21. package/dist/node/attributes/AreDirective.attribute.js.map +1 -0
  22. package/dist/node/attributes/AreDirective.attribute.mjs +19 -0
  23. package/dist/node/attributes/AreDirective.attribute.mjs.map +1 -0
  24. package/dist/node/attributes/AreEvent.attribute.d.mts +4 -0
  25. package/dist/node/attributes/AreEvent.attribute.d.ts +4 -0
  26. package/dist/node/attributes/AreEvent.attribute.js +10 -0
  27. package/dist/node/attributes/AreEvent.attribute.js.map +1 -0
  28. package/dist/node/attributes/AreEvent.attribute.mjs +9 -0
  29. package/dist/node/attributes/AreEvent.attribute.mjs.map +1 -0
  30. package/dist/node/attributes/AreStatic.attribute.d.mts +4 -0
  31. package/dist/node/attributes/AreStatic.attribute.d.ts +4 -0
  32. package/dist/node/attributes/AreStatic.attribute.js +10 -0
  33. package/dist/node/attributes/AreStatic.attribute.js.map +1 -0
  34. package/dist/node/attributes/AreStatic.attribute.mjs +9 -0
  35. package/dist/node/attributes/AreStatic.attribute.mjs.map +1 -0
  36. package/dist/node/chunk-EQQGB2QZ.mjs +15 -0
  37. package/dist/node/chunk-EQQGB2QZ.mjs.map +1 -0
  38. package/dist/node/directives/AreComponent.directive.d.mts +2 -0
  39. package/dist/node/directives/AreComponent.directive.d.ts +2 -0
  40. package/dist/node/directives/AreComponent.directive.js +4 -0
  41. package/dist/node/directives/AreComponent.directive.js.map +1 -0
  42. package/dist/node/directives/AreComponent.directive.mjs +3 -0
  43. package/dist/node/directives/AreComponent.directive.mjs.map +1 -0
  44. package/dist/node/directives/AreDirectiveFor.directive.d.mts +41 -0
  45. package/dist/node/directives/AreDirectiveFor.directive.d.ts +41 -0
  46. package/dist/node/directives/AreDirectiveFor.directive.js +206 -0
  47. package/dist/node/directives/AreDirectiveFor.directive.js.map +1 -0
  48. package/dist/node/directives/AreDirectiveFor.directive.mjs +196 -0
  49. package/dist/node/directives/AreDirectiveFor.directive.mjs.map +1 -0
  50. package/dist/node/directives/AreDirectiveIf.directive.d.mts +15 -0
  51. package/dist/node/directives/AreDirectiveIf.directive.d.ts +15 -0
  52. package/dist/node/directives/AreDirectiveIf.directive.js +91 -0
  53. package/dist/node/directives/AreDirectiveIf.directive.js.map +1 -0
  54. package/dist/node/directives/AreDirectiveIf.directive.mjs +81 -0
  55. package/dist/node/directives/AreDirectiveIf.directive.mjs.map +1 -0
  56. package/dist/node/engine/AreHTML.compiler.d.mts +27 -0
  57. package/dist/node/engine/AreHTML.compiler.d.ts +27 -0
  58. package/dist/node/engine/AreHTML.compiler.js +150 -0
  59. package/dist/node/engine/AreHTML.compiler.js.map +1 -0
  60. package/dist/node/engine/AreHTML.compiler.mjs +140 -0
  61. package/dist/node/engine/AreHTML.compiler.mjs.map +1 -0
  62. package/dist/node/engine/AreHTML.constants.d.mts +2 -0
  63. package/dist/node/engine/AreHTML.constants.d.ts +2 -0
  64. package/dist/node/engine/AreHTML.constants.js +4 -0
  65. package/dist/node/engine/AreHTML.constants.js.map +1 -0
  66. package/dist/node/engine/AreHTML.constants.mjs +3 -0
  67. package/dist/node/engine/AreHTML.constants.mjs.map +1 -0
  68. package/dist/node/engine/AreHTML.context.d.mts +108 -0
  69. package/dist/node/engine/AreHTML.context.d.ts +108 -0
  70. package/dist/node/engine/AreHTML.context.js +155 -0
  71. package/dist/node/engine/AreHTML.context.js.map +1 -0
  72. package/dist/node/engine/AreHTML.context.mjs +154 -0
  73. package/dist/node/engine/AreHTML.context.mjs.map +1 -0
  74. package/dist/node/engine/AreHTML.engine.d.mts +21 -0
  75. package/dist/node/engine/AreHTML.engine.d.ts +21 -0
  76. package/dist/node/engine/AreHTML.engine.js +191 -0
  77. package/dist/node/engine/AreHTML.engine.js.map +1 -0
  78. package/dist/node/engine/AreHTML.engine.mjs +181 -0
  79. package/dist/node/engine/AreHTML.engine.mjs.map +1 -0
  80. package/dist/node/engine/AreHTML.interpreter.d.mts +28 -0
  81. package/dist/node/engine/AreHTML.interpreter.d.ts +28 -0
  82. package/dist/node/engine/AreHTML.interpreter.js +340 -0
  83. package/dist/node/engine/AreHTML.interpreter.js.map +1 -0
  84. package/dist/node/engine/AreHTML.interpreter.mjs +330 -0
  85. package/dist/node/engine/AreHTML.interpreter.mjs.map +1 -0
  86. package/dist/node/engine/AreHTML.lifecycle.d.mts +17 -0
  87. package/dist/node/engine/AreHTML.lifecycle.d.ts +17 -0
  88. package/dist/node/engine/AreHTML.lifecycle.js +91 -0
  89. package/dist/node/engine/AreHTML.lifecycle.js.map +1 -0
  90. package/dist/node/engine/AreHTML.lifecycle.mjs +79 -0
  91. package/dist/node/engine/AreHTML.lifecycle.mjs.map +1 -0
  92. package/dist/node/engine/AreHTML.tokenizer.d.mts +13 -0
  93. package/dist/node/engine/AreHTML.tokenizer.d.ts +13 -0
  94. package/dist/node/engine/AreHTML.tokenizer.js +83 -0
  95. package/dist/node/engine/AreHTML.tokenizer.js.map +1 -0
  96. package/dist/node/engine/AreHTML.tokenizer.mjs +71 -0
  97. package/dist/node/engine/AreHTML.tokenizer.mjs.map +1 -0
  98. package/dist/node/engine/AreHTML.transformer.d.mts +11 -0
  99. package/dist/node/engine/AreHTML.transformer.d.ts +11 -0
  100. package/dist/node/engine/AreHTML.transformer.js +44 -0
  101. package/dist/node/engine/AreHTML.transformer.js.map +1 -0
  102. package/dist/node/engine/AreHTML.transformer.mjs +32 -0
  103. package/dist/node/engine/AreHTML.transformer.mjs.map +1 -0
  104. package/dist/node/engine/AreHTML.types.d.mts +6 -0
  105. package/dist/node/engine/AreHTML.types.d.ts +6 -0
  106. package/dist/node/engine/AreHTML.types.js +4 -0
  107. package/dist/node/engine/AreHTML.types.js.map +1 -0
  108. package/dist/node/engine/AreHTML.types.mjs +3 -0
  109. package/dist/node/engine/AreHTML.types.mjs.map +1 -0
  110. package/dist/node/index.d.mts +39 -0
  111. package/dist/node/index.d.ts +39 -0
  112. package/dist/node/index.js +294 -0
  113. package/dist/node/index.js.map +1 -0
  114. package/dist/node/index.mjs +43 -0
  115. package/dist/node/index.mjs.map +1 -0
  116. package/dist/node/instructions/AddAttribute.instruction.d.mts +9 -0
  117. package/dist/node/instructions/AddAttribute.instruction.d.ts +9 -0
  118. package/dist/node/instructions/AddAttribute.instruction.js +32 -0
  119. package/dist/node/instructions/AddAttribute.instruction.js.map +1 -0
  120. package/dist/node/instructions/AddAttribute.instruction.mjs +25 -0
  121. package/dist/node/instructions/AddAttribute.instruction.mjs.map +1 -0
  122. package/dist/node/instructions/AddComment.instruction.d.mts +9 -0
  123. package/dist/node/instructions/AddComment.instruction.d.ts +9 -0
  124. package/dist/node/instructions/AddComment.instruction.js +35 -0
  125. package/dist/node/instructions/AddComment.instruction.js.map +1 -0
  126. package/dist/node/instructions/AddComment.instruction.mjs +28 -0
  127. package/dist/node/instructions/AddComment.instruction.mjs.map +1 -0
  128. package/dist/node/instructions/AddElement.instruction.d.mts +8 -0
  129. package/dist/node/instructions/AddElement.instruction.d.ts +8 -0
  130. package/dist/node/instructions/AddElement.instruction.js +32 -0
  131. package/dist/node/instructions/AddElement.instruction.js.map +1 -0
  132. package/dist/node/instructions/AddElement.instruction.mjs +25 -0
  133. package/dist/node/instructions/AddElement.instruction.mjs.map +1 -0
  134. package/dist/node/instructions/AddInterpolation.instruction.d.mts +8 -0
  135. package/dist/node/instructions/AddInterpolation.instruction.d.ts +8 -0
  136. package/dist/node/instructions/AddInterpolation.instruction.js +32 -0
  137. package/dist/node/instructions/AddInterpolation.instruction.js.map +1 -0
  138. package/dist/node/instructions/AddInterpolation.instruction.mjs +25 -0
  139. package/dist/node/instructions/AddInterpolation.instruction.mjs.map +1 -0
  140. package/dist/node/instructions/AddListener.instruction.d.mts +8 -0
  141. package/dist/node/instructions/AddListener.instruction.d.ts +8 -0
  142. package/dist/node/instructions/AddListener.instruction.js +32 -0
  143. package/dist/node/instructions/AddListener.instruction.js.map +1 -0
  144. package/dist/node/instructions/AddListener.instruction.mjs +25 -0
  145. package/dist/node/instructions/AddListener.instruction.mjs.map +1 -0
  146. package/dist/node/instructions/AddStyle.instruction.d.mts +8 -0
  147. package/dist/node/instructions/AddStyle.instruction.d.ts +8 -0
  148. package/dist/node/instructions/AddStyle.instruction.js +32 -0
  149. package/dist/node/instructions/AddStyle.instruction.js.map +1 -0
  150. package/dist/node/instructions/AddStyle.instruction.mjs +25 -0
  151. package/dist/node/instructions/AddStyle.instruction.mjs.map +1 -0
  152. package/dist/node/instructions/AddText.instruction.d.mts +8 -0
  153. package/dist/node/instructions/AddText.instruction.d.ts +8 -0
  154. package/dist/node/instructions/AddText.instruction.js +32 -0
  155. package/dist/node/instructions/AddText.instruction.js.map +1 -0
  156. package/dist/node/instructions/AddText.instruction.mjs +25 -0
  157. package/dist/node/instructions/AddText.instruction.mjs.map +1 -0
  158. package/dist/node/instructions/AreHTML.instructions.constants.d.mts +11 -0
  159. package/dist/node/instructions/AreHTML.instructions.constants.d.ts +11 -0
  160. package/dist/node/instructions/AreHTML.instructions.constants.js +15 -0
  161. package/dist/node/instructions/AreHTML.instructions.constants.js.map +1 -0
  162. package/dist/node/instructions/AreHTML.instructions.constants.mjs +15 -0
  163. package/dist/node/instructions/AreHTML.instructions.constants.mjs.map +1 -0
  164. package/dist/node/instructions/AreHTML.instructions.types.d.mts +46 -0
  165. package/dist/node/instructions/AreHTML.instructions.types.d.ts +46 -0
  166. package/dist/node/instructions/AreHTML.instructions.types.js +4 -0
  167. package/dist/node/instructions/AreHTML.instructions.types.js.map +1 -0
  168. package/dist/node/instructions/AreHTML.instructions.types.mjs +3 -0
  169. package/dist/node/instructions/AreHTML.instructions.types.mjs.map +1 -0
  170. package/dist/node/lib/AreDirective/AreDirective.component.d.mts +4 -0
  171. package/dist/node/lib/AreDirective/AreDirective.component.d.ts +4 -0
  172. package/dist/node/lib/AreDirective/AreDirective.component.js +117 -0
  173. package/dist/node/lib/AreDirective/AreDirective.component.js.map +1 -0
  174. package/dist/node/lib/AreDirective/AreDirective.component.mjs +107 -0
  175. package/dist/node/lib/AreDirective/AreDirective.component.mjs.map +1 -0
  176. package/dist/node/lib/AreDirective/AreDirective.constants.d.mts +16 -0
  177. package/dist/node/lib/AreDirective/AreDirective.constants.d.ts +16 -0
  178. package/dist/node/lib/AreDirective/AreDirective.constants.js +20 -0
  179. package/dist/node/lib/AreDirective/AreDirective.constants.js.map +1 -0
  180. package/dist/node/lib/AreDirective/AreDirective.constants.mjs +20 -0
  181. package/dist/node/lib/AreDirective/AreDirective.constants.mjs.map +1 -0
  182. package/dist/node/lib/AreDirective/AreDirective.context.d.mts +9 -0
  183. package/dist/node/lib/AreDirective/AreDirective.context.d.ts +9 -0
  184. package/dist/node/lib/AreDirective/AreDirective.context.js +14 -0
  185. package/dist/node/lib/AreDirective/AreDirective.context.js.map +1 -0
  186. package/dist/node/lib/AreDirective/AreDirective.context.mjs +13 -0
  187. package/dist/node/lib/AreDirective/AreDirective.context.mjs.map +1 -0
  188. package/dist/node/lib/AreDirective/AreDirective.meta.d.mts +7 -0
  189. package/dist/node/lib/AreDirective/AreDirective.meta.d.ts +7 -0
  190. package/dist/node/lib/AreDirective/AreDirective.meta.js +14 -0
  191. package/dist/node/lib/AreDirective/AreDirective.meta.js.map +1 -0
  192. package/dist/node/lib/AreDirective/AreDirective.meta.mjs +13 -0
  193. package/dist/node/lib/AreDirective/AreDirective.meta.mjs.map +1 -0
  194. package/dist/node/lib/AreDirective/AreDirective.types.d.mts +17 -0
  195. package/dist/node/lib/AreDirective/AreDirective.types.d.ts +17 -0
  196. package/dist/node/lib/AreDirective/AreDirective.types.js +4 -0
  197. package/dist/node/lib/AreDirective/AreDirective.types.js.map +1 -0
  198. package/dist/node/lib/AreDirective/AreDirective.types.mjs +3 -0
  199. package/dist/node/lib/AreDirective/AreDirective.types.mjs.map +1 -0
  200. package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.mts +13 -0
  201. package/dist/node/lib/AreHTML/AreHTML.tokenizer.d.ts +13 -0
  202. package/dist/node/lib/AreHTML/AreHTML.tokenizer.js +82 -0
  203. package/dist/node/lib/AreHTML/AreHTML.tokenizer.js.map +1 -0
  204. package/dist/node/lib/AreHTML/AreHTML.tokenizer.mjs +70 -0
  205. package/dist/node/lib/AreHTML/AreHTML.tokenizer.mjs.map +1 -0
  206. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.mts +4 -0
  207. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.d.ts +4 -0
  208. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.js +13 -0
  209. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.js.map +1 -0
  210. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.mjs +12 -0
  211. package/dist/node/lib/AreHTMLAttribute/AreHTML.attribute.mjs.map +1 -0
  212. package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.mts +4 -0
  213. package/dist/node/lib/AreHTMLNode/AreHTMLNode.d.ts +4 -0
  214. package/dist/node/lib/AreHTMLNode/AreHTMLNode.js +82 -0
  215. package/dist/node/lib/AreHTMLNode/AreHTMLNode.js.map +1 -0
  216. package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs +75 -0
  217. package/dist/node/lib/AreHTMLNode/AreHTMLNode.mjs.map +1 -0
  218. package/dist/node/lib/AreRoot/AreRoot.component.d.mts +13 -0
  219. package/dist/node/lib/AreRoot/AreRoot.component.d.ts +13 -0
  220. package/dist/node/lib/AreRoot/AreRoot.component.js +117 -0
  221. package/dist/node/lib/AreRoot/AreRoot.component.js.map +1 -0
  222. package/dist/node/lib/AreRoot/AreRoot.component.mjs +107 -0
  223. package/dist/node/lib/AreRoot/AreRoot.component.mjs.map +1 -0
  224. package/dist/node/lib/AreStyle/AreStyle.context.d.mts +8 -0
  225. package/dist/node/lib/AreStyle/AreStyle.context.d.ts +8 -0
  226. package/dist/node/lib/AreStyle/AreStyle.context.js +16 -0
  227. package/dist/node/lib/AreStyle/AreStyle.context.js.map +1 -0
  228. package/dist/node/lib/AreStyle/AreStyle.context.mjs +15 -0
  229. package/dist/node/lib/AreStyle/AreStyle.context.mjs.map +1 -0
  230. package/dist/node/lib/AreStyle/AreStyle.types.d.mts +2 -0
  231. package/dist/node/lib/AreStyle/AreStyle.types.d.ts +2 -0
  232. package/dist/node/lib/AreStyle/AreStyle.types.js +4 -0
  233. package/dist/node/lib/AreStyle/AreStyle.types.js.map +1 -0
  234. package/dist/node/lib/AreStyle/AreStyle.types.mjs +3 -0
  235. package/dist/node/lib/AreStyle/AreStyle.types.mjs.map +1 -0
  236. package/dist/node/lib/AreWatcher/AreWatcher.component.d.mts +18 -0
  237. package/dist/node/lib/AreWatcher/AreWatcher.component.d.ts +18 -0
  238. package/dist/node/lib/AreWatcher/AreWatcher.component.js +78 -0
  239. package/dist/node/lib/AreWatcher/AreWatcher.component.js.map +1 -0
  240. package/dist/node/lib/AreWatcher/AreWatcher.component.mjs +71 -0
  241. package/dist/node/lib/AreWatcher/AreWatcher.component.mjs.map +1 -0
  242. package/dist/node/nodes/AreComment.d.mts +10 -0
  243. package/dist/node/nodes/AreComment.d.ts +10 -0
  244. package/dist/node/nodes/AreComment.js +19 -0
  245. package/dist/node/nodes/AreComment.js.map +1 -0
  246. package/dist/node/nodes/AreComment.mjs +18 -0
  247. package/dist/node/nodes/AreComment.mjs.map +1 -0
  248. package/dist/node/nodes/AreComponent.d.mts +17 -0
  249. package/dist/node/nodes/AreComponent.d.ts +17 -0
  250. package/dist/node/nodes/AreComponent.js +35 -0
  251. package/dist/node/nodes/AreComponent.js.map +1 -0
  252. package/dist/node/nodes/AreComponent.mjs +28 -0
  253. package/dist/node/nodes/AreComponent.mjs.map +1 -0
  254. package/dist/node/nodes/AreInterpolation.d.mts +10 -0
  255. package/dist/node/nodes/AreInterpolation.d.ts +10 -0
  256. package/dist/node/nodes/AreInterpolation.js +19 -0
  257. package/dist/node/nodes/AreInterpolation.js.map +1 -0
  258. package/dist/node/nodes/AreInterpolation.mjs +18 -0
  259. package/dist/node/nodes/AreInterpolation.mjs.map +1 -0
  260. package/dist/node/nodes/AreRoot.d.mts +21 -0
  261. package/dist/node/nodes/AreRoot.d.ts +21 -0
  262. package/dist/node/nodes/AreRoot.js +41 -0
  263. package/dist/node/nodes/AreRoot.js.map +1 -0
  264. package/dist/node/nodes/AreRoot.mjs +34 -0
  265. package/dist/node/nodes/AreRoot.mjs.map +1 -0
  266. package/dist/node/nodes/AreText.d.mts +10 -0
  267. package/dist/node/nodes/AreText.d.ts +10 -0
  268. package/dist/node/nodes/AreText.js +19 -0
  269. package/dist/node/nodes/AreText.js.map +1 -0
  270. package/dist/node/nodes/AreText.mjs +18 -0
  271. package/dist/node/nodes/AreText.mjs.map +1 -0
  272. package/dist/node/signals/AreRoute.signal.d.mts +12 -0
  273. package/dist/node/signals/AreRoute.signal.d.ts +12 -0
  274. package/dist/node/signals/AreRoute.signal.js +25 -0
  275. package/dist/node/signals/AreRoute.signal.js.map +1 -0
  276. package/dist/node/signals/AreRoute.signal.mjs +24 -0
  277. package/dist/node/signals/AreRoute.signal.mjs.map +1 -0
  278. package/docs/a-logo-docs.png +0 -0
  279. package/examples/dashboard/concept.ts +60 -0
  280. package/examples/dashboard/containers/UI.container.ts +233 -0
  281. package/examples/dashboard/dist/index.html +22 -0
  282. package/examples/dashboard/dist/mnzfypsd-6zjt7w.js +11454 -0
  283. package/examples/dashboard/dist/styles.css +792 -0
  284. package/examples/dashboard/public/index.html +22 -0
  285. package/examples/dashboard/public/styles.css +792 -0
  286. package/examples/dashboard/src/components/DashboardApp.component.ts +31 -0
  287. package/examples/dashboard/src/components/DashboardHeader.component.ts +40 -0
  288. package/examples/dashboard/src/components/DashboardLogo.component.ts +29 -0
  289. package/examples/dashboard/src/components/DashboardMain.component.ts +57 -0
  290. package/examples/dashboard/src/components/DashboardMenu.component.ts +94 -0
  291. package/examples/dashboard/src/components/DashboardNav.component.ts +28 -0
  292. package/examples/dashboard/src/components/DashboardNavItem.component.ts +32 -0
  293. package/examples/dashboard/src/components/DashboardSidebar.component.ts +43 -0
  294. package/examples/dashboard/src/components/DashboardStatCard.component.ts +71 -0
  295. package/examples/dashboard/src/components/DashboardStats.component.ts +28 -0
  296. package/examples/dashboard/src/components/DashboardTable.component.ts +138 -0
  297. package/examples/dashboard/src/components/DashboardUserCard.component.ts +39 -0
  298. package/examples/dashboard/src/concept.ts +93 -0
  299. package/examples/jumpstart/concept.ts +60 -0
  300. package/examples/jumpstart/containers/UI.container.ts +233 -0
  301. package/examples/jumpstart/dist/index.html +104 -0
  302. package/examples/jumpstart/dist/mnpl1g4i-nobz9g.js +10882 -0
  303. package/examples/jumpstart/dist/static/css/main.css +40 -0
  304. package/examples/jumpstart/dist/static/img/test.png +0 -0
  305. package/examples/jumpstart/public/index.html +104 -0
  306. package/examples/jumpstart/public/static/css/main.css +40 -0
  307. package/examples/jumpstart/public/static/img/test.png +0 -0
  308. package/examples/jumpstart/src/components/A-Btn.component.ts +150 -0
  309. package/examples/jumpstart/src/components/A-Input.component.ts +78 -0
  310. package/examples/jumpstart/src/components/A-Navigation.component.ts +167 -0
  311. package/examples/jumpstart/src/components/List.component.ts +138 -0
  312. package/examples/jumpstart/src/components/PromptTextArea.component.ts +359 -0
  313. package/examples/jumpstart/src/components/SignInComponent.component.ts +127 -0
  314. package/examples/jumpstart/src/concept.ts +105 -0
  315. package/jest.config.ts +61 -0
  316. package/package.json +110 -0
  317. package/src/attributes/AreBinding.attribute.ts +19 -0
  318. package/src/attributes/AreDirective.attribute.ts +26 -0
  319. package/src/attributes/AreEvent.attribute.ts +5 -0
  320. package/src/attributes/AreStatic.attribute.ts +6 -0
  321. package/src/directives/AreComponent.directive.ts +0 -0
  322. package/src/directives/AreDirectiveFor.directive.ts +322 -0
  323. package/src/directives/AreDirectiveIf.directive.ts +130 -0
  324. package/src/engine/AreHTML.compiler.ts +226 -0
  325. package/src/engine/AreHTML.constants.ts +2 -0
  326. package/src/engine/AreHTML.context.ts +196 -0
  327. package/src/engine/AreHTML.engine.ts +210 -0
  328. package/src/engine/AreHTML.interpreter.ts +466 -0
  329. package/src/engine/AreHTML.lifecycle.ts +96 -0
  330. package/src/engine/AreHTML.tokenizer.ts +90 -0
  331. package/src/engine/AreHTML.transformer.ts +37 -0
  332. package/src/engine/AreHTML.types.ts +6 -0
  333. package/src/index.ts +80 -0
  334. package/src/instructions/AddAttribute.instruction.ts +25 -0
  335. package/src/instructions/AddComment.instruction.ts +27 -0
  336. package/src/instructions/AddElement.instruction.ts +22 -0
  337. package/src/instructions/AddInterpolation.instruction.ts +24 -0
  338. package/src/instructions/AddListener.instruction.ts +24 -0
  339. package/src/instructions/AddStyle.instruction.ts +24 -0
  340. package/src/instructions/AddText.instruction.ts +21 -0
  341. package/src/instructions/AreHTML.instructions.constants.ts +11 -0
  342. package/src/instructions/AreHTML.instructions.types.ts +51 -0
  343. package/src/lib/AreDirective/AreDirective.component.ts +124 -0
  344. package/src/lib/AreDirective/AreDirective.constants.ts +16 -0
  345. package/src/lib/AreDirective/AreDirective.context.ts +16 -0
  346. package/src/lib/AreDirective/AreDirective.meta.ts +9 -0
  347. package/src/lib/AreDirective/AreDirective.types.ts +14 -0
  348. package/src/lib/AreHTML/AreHTML.tokenizer.ts +86 -0
  349. package/src/lib/AreHTMLAttribute/AreHTML.attribute.ts +13 -0
  350. package/src/lib/AreHTMLNode/AreHTMLNode.ts +84 -0
  351. package/src/lib/AreRoot/AreRoot.component.ts +134 -0
  352. package/src/lib/AreStyle/AreStyle.context.ts +20 -0
  353. package/src/lib/AreStyle/AreStyle.types.ts +0 -0
  354. package/src/lib/AreWatcher/AreWatcher.component.ts +84 -0
  355. package/src/nodes/AreComment.ts +17 -0
  356. package/src/nodes/AreComponent.ts +25 -0
  357. package/src/nodes/AreInterpolation.ts +16 -0
  358. package/src/nodes/AreRoot.ts +29 -0
  359. package/src/nodes/AreText.ts +17 -0
  360. package/src/signals/AreRoute.signal.ts +27 -0
  361. package/tests/AreTokenizer.test.ts +260 -0
  362. package/tests/jest.setup.ts +30 -0
  363. package/tsconfig.json +60 -0
  364. package/tslint.json +98 -0
  365. 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
+ ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
6
+ ![Node.js](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)
7
+ ![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)
8
+
9
+ ![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)
10
+ ![Version](https://img.shields.io/npm/v/@adaas/a-utils)
11
+ ![Downloads](https://img.shields.io/npm/dm/@adaas/a-utils)
12
+ ![Build Status](https://img.shields.io/badge/build-passing-brightgreen)
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
+