@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
@@ -0,0 +1,105 @@
1
+ import { A_Concept, A_Context } from "@adaas/a-concept"
2
+ // import { SignInComponent } from "./components/SignInComponent.component"
3
+ import { ABtn } from "./components/A-Btn.component";
4
+ // import { AInput } from "./components/A-Input.component";
5
+ // import { ANavigation } from "./components/A-Navigation.component";
6
+ import { A_Config, ConfigReader } from "@adaas/a-utils/a-config";
7
+ import { A_Logger, A_LOGGER_ENV_KEYS } from "@adaas/a-utils/a-logger";
8
+ import { A_SignalBus, A_SignalState } from "@adaas/a-utils/a-signal";
9
+ import { A_Polyfill } from "@adaas/a-utils/a-polyfill";
10
+ import { AreApp } from "src/containers/AreWebApp.container";
11
+ import { AreRoot } from "src/lib/AreRoot/AreRoot.component";
12
+ import { AreHTMLEngine } from "src/engine/AreHTML.engine";
13
+ import { AreInit } from "@adaas/are";
14
+ import { AreRoute } from "@adaas/are";
15
+ import { AreContext } from "@adaas/are";
16
+ import { AreHTMLEngineContext } from "src/engine/AreHTML.context";
17
+ import { ListComponent } from "./components/List.component";
18
+ import { AreDirectiveIf } from "src/directives/AreDirectiveIf.directive";
19
+ import { AreDirectiveFor } from "src/directives/AreDirectiveFor.directive";
20
+
21
+
22
+ // // TODO: Fix for build system ---
23
+ // window.process = { env: { NODE_ENV: 'production' }, cwd: () => "/" } as any; // --- IGNORE ---
24
+ // window.__dirname = "/"; // --- IGNORE ---
25
+
26
+ (async () => {
27
+ try {
28
+
29
+ const container = new AreApp({
30
+ name: 'ARE Jumpstart',
31
+ components: [
32
+ // ----------------------------------
33
+ // Allowed Entities
34
+ // ----------------------------------
35
+ // ............
36
+ // ----------------------------------
37
+ // Allowed Commands
38
+ // ----------------------------------
39
+ // ............
40
+ // ----------------------------------
41
+ // UI Components
42
+ // ----------------------------------
43
+ ABtn,
44
+ ListComponent,
45
+ // ----------------------------------
46
+ // Directives
47
+ // ----------------------------------
48
+ AreDirectiveIf,
49
+ AreDirectiveFor,
50
+ // ----------------------------------
51
+ // Engine Components
52
+ // ----------------------------------
53
+ A_SignalBus,
54
+ // ----------------------------------
55
+ // Addons
56
+ // ----------------------------------
57
+ AreRoot,
58
+ ConfigReader,
59
+ AreHTMLEngine,
60
+ A_Logger,
61
+ ],
62
+ entities: [
63
+ // ............
64
+ AreInit,
65
+ AreRoute
66
+ ],
67
+ fragments: [
68
+ new A_SignalState([AreRoute]),
69
+ new AreHTMLEngineContext(document.body.innerHTML),
70
+
71
+ new A_Config({
72
+ defaults: {
73
+ [A_LOGGER_ENV_KEYS.LOG_LEVEL]: 'info',
74
+ }
75
+ }),
76
+ ]
77
+ });
78
+
79
+ const concept = new A_Concept({
80
+ name: 'adaas-are-example-jumpstart',
81
+ fragments: [new A_Config({
82
+ variables: ['CONFIG_VERBOSE', 'DEV_MODE'] as const,
83
+ defaults: {
84
+ CONFIG_VERBOSE: true,
85
+ DEV_MODE: true
86
+ }
87
+ })],
88
+ components: [A_Logger, ConfigReader, A_Polyfill],
89
+ containers: [container]
90
+ })
91
+
92
+ console.log('Building Concept...');
93
+ await concept.load();
94
+ console.log('✓ Concept loaded successfully.');
95
+ await concept.start();
96
+
97
+
98
+ } catch (error) {
99
+ const logger = A_Context.root.resolve<A_Logger>(A_Logger)!;
100
+ logger.error(error);
101
+ }
102
+
103
+
104
+
105
+ })();
package/jest.config.ts ADDED
@@ -0,0 +1,61 @@
1
+ import type { Config } from '@jest/types';
2
+
3
+ const config: Config.InitialOptions = {
4
+ displayName: 'adaas-are-html',
5
+ preset: 'ts-jest',
6
+ testEnvironment: 'node',
7
+ resetModules: true,
8
+ rootDir: '.',
9
+ testMatch: ['<rootDir>/tests/**/*.test.ts'],
10
+ setupFilesAfterEnv: ['<rootDir>/tests/jest.setup.ts'],
11
+ moduleNameMapper: {
12
+ // ── @adaas/are — main entry and all sub-path imports used internally by the dist ──
13
+ "^@adaas/are$": "<rootDir>/node_modules/@adaas/are/dist/node/index.js",
14
+ "^@adaas/are/attribute/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreAttribute/$1.js",
15
+ "^@adaas/are/compiler/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreCompiler/$1.js",
16
+ "^@adaas/are/component/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreComponent/$1.js",
17
+ "^@adaas/are/engine/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreEngine/$1.js",
18
+ "^@adaas/are/event/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreEvent/$1.js",
19
+ "^@adaas/are/instruction/types/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreInstruction/types/$1.js",
20
+ "^@adaas/are/instruction/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreInstruction/$1.js",
21
+ "^@adaas/are/interpreter/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreInterpreter/$1.js",
22
+ "^@adaas/are/lifecycle/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreLifecycle/$1.js",
23
+ "^@adaas/are/loader/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreLoader/$1.js",
24
+ "^@adaas/are/node/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreNode/$1.js",
25
+ "^@adaas/are/scene/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreScene/$1.js",
26
+ "^@adaas/are/signals/entities/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreSignals/entities/$1.js",
27
+ "^@adaas/are/signals/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreSignals/$1.js",
28
+ "^@adaas/are/store/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreStore/$1.js",
29
+ "^@adaas/are/syntax/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreSyntax/$1.js",
30
+ "^@adaas/are/tokenizer/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreTokenizer/$1.js",
31
+ "^@adaas/are/transformer/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreTransformer/$1.js",
32
+ "^@adaas/are/watcher/(.*)": "<rootDir>/node_modules/@adaas/are/dist/node/lib/AreWatcher/$1.js",
33
+
34
+ // ── @adaas/are-html internal path aliases (mirrors tsconfig.json paths) ──
35
+ // Base ARE-HTML entities
36
+ "@adaas/are-html/nodes/(.*)": "<rootDir>/src/nodes/$1",
37
+ "@adaas/are-html/attributes/(.*)": "<rootDir>/src/attributes/$1",
38
+ "@adaas/are-html/directives/(.*)": "<rootDir>/src/directives/$1",
39
+ "@adaas/are-html/instructions/(.*)": "<rootDir>/src/instructions/$1",
40
+ "@adaas/are-html/watchers/(.*)": "<rootDir>/src/watchers/$1",
41
+ "@adaas/are-html/signals/(.*)": "<rootDir>/src/signals/$1",
42
+ // Custom lib exports
43
+ "@adaas/are-html/style/(.*)": "<rootDir>/src/lib/AreStyle/$1",
44
+ "@adaas/are-html/directive/(.*)": "<rootDir>/src/lib/AreDirective/$1",
45
+ "@adaas/are-html/root/(.*)": "<rootDir>/src/lib/AreRoot/$1",
46
+ "@adaas/are-html/node": "<rootDir>/src/lib/AreHTMLNode/AreHTMLNode",
47
+ "@adaas/are-html/attribute": "<rootDir>/src/lib/AreHTMLAttribute/AreHTML.attribute",
48
+ // HTML engine basics
49
+ "@adaas/are-html/compiler": "<rootDir>/src/engine/AreHTML.compiler",
50
+ "@adaas/are-html/constants": "<rootDir>/src/engine/AreHTML.constants",
51
+ "@adaas/are-html/context": "<rootDir>/src/engine/AreHTML.context",
52
+ "@adaas/are-html/engine": "<rootDir>/src/engine/AreHTML.engine",
53
+ "@adaas/are-html/interpreter": "<rootDir>/src/engine/AreHTML.interpreter",
54
+ "@adaas/are-html/lifecycle": "<rootDir>/src/engine/AreHTML.lifecycle",
55
+ "@adaas/are-html/tokenizer": "<rootDir>/src/engine/AreHTML.tokenizer",
56
+ "@adaas/are-html/transformer": "<rootDir>/src/engine/AreHTML.transformer",
57
+ "@adaas/are-html/types": "<rootDir>/src/engine/AreHTML.types",
58
+ },
59
+ collectCoverageFrom: ['src/**/*.ts', '!src/**/*.d.ts']
60
+ };
61
+ export default config;
package/package.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "@adaas/are-html",
3
+ "version": "0.0.2",
4
+ "description": "A-Concept Rendering Engine (ARE) is a powerful rendering engine designed to work seamlessly with the A-Concept framework. This library provides an HTML engine implementation of ARE, enabling developers to create dynamic and interactive user interfaces for web applications using standard HTML syntax.",
5
+ "keywords": [
6
+ "a-concept",
7
+ "a-frame",
8
+ "a-utils",
9
+ "rendering-engine",
10
+ "html-engine",
11
+ "web-components",
12
+ "virtual-dom",
13
+ "reactivity-system",
14
+ "template-syntax",
15
+ "lifecycle-management",
16
+ "event-handling",
17
+ "state-management",
18
+ "scene-graph",
19
+ "instruction-set",
20
+ "are-html-engine"
21
+ ],
22
+ "license": "Apache-2.0",
23
+ "author": {
24
+ "name": "ADAAS YAZILIM LİMİTED ŞİRKETİ",
25
+ "email": "contact-us@adaas.org"
26
+ },
27
+ "homepage": "https://github.com/ADAAS-org/adaas-are-html#readme",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/ADAAS-org/adaas-are-html.git"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/ADAAS-org/adaas-are-html/issues"
34
+ },
35
+ "exports": {
36
+ ".": {
37
+ "browser": {
38
+ "types": "./dist/browser/index.d.mts",
39
+ "import": "./dist/browser/index.mjs"
40
+ },
41
+ "node": {
42
+ "types": "./dist/node/index.d.ts",
43
+ "import": "./dist/node/index.mjs",
44
+ "require": "./dist/node/index.cjs"
45
+ },
46
+ "default": {
47
+ "types": "./dist/node/index.d.ts",
48
+ "import": "./dist/node/index.mjs",
49
+ "require": "./dist/node/index.cjs"
50
+ }
51
+ }
52
+ },
53
+ "sideEffects": false,
54
+ "nodemonConfig": {
55
+ "ignore": [
56
+ "**/*.test.ts",
57
+ "**/*.spec.ts",
58
+ ".git",
59
+ "node_modules",
60
+ "**/dist/**"
61
+ ],
62
+ "watch": [
63
+ "examples",
64
+ "src"
65
+ ],
66
+ "exec": "node -r tsconfig-paths/register -r ts-node/register ",
67
+ "ext": "ts, js"
68
+ },
69
+ "scripts": {
70
+ "test": "jest",
71
+ "example:jumpstart": "nodemon ./examples/jumpstart/concept.ts",
72
+ "example:dashboard": "nodemon ./examples/dashboard/concept.ts",
73
+ "example:auxta": "nodemon ./examples/auxta/concept.ts",
74
+ "test:test": "nodemon ./src/test/app.ts",
75
+ "release": " npm run build && git add . && git commit -m \"new version created :: $(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g')\" && npm version patch && npm publish --access public",
76
+ "preversion": "echo test",
77
+ "version": "echo git add .",
78
+ "postversion": "git push --no-verify && git push --tags --no-verify && echo \"\n======Version Pushed Successfully=====\n\" ",
79
+ "echo-version": "echo $npm_package_version",
80
+ "build": "tsup --config tsup.config.ts"
81
+ },
82
+ "dependencies": {
83
+ "@adaas/a-concept": "^0.3.13",
84
+ "@adaas/a-frame": "^0.0.22",
85
+ "@adaas/a-utils": "^0.3.16",
86
+ "@adaas/are": "^0.0.9"
87
+ },
88
+ "devDependencies": {
89
+ "@types/chai": "^4.3.14",
90
+ "@types/jest": "^29.5.12",
91
+ "@types/mocha": "^10.0.6",
92
+ "@types/node": "^24.9.1",
93
+ "axios": "^1.7.2",
94
+ "chai": "^5.1.0",
95
+ "dotenv": "^16.4.5",
96
+ "jest": "^29.7.0",
97
+ "mocha": "^10.4.0",
98
+ "nodemon": "^3.1.4",
99
+ "ts-jest": "^29.1.2",
100
+ "ts-node": "^10.9.2",
101
+ "tsconfig-paths": "^4.2.0",
102
+ "tscpaths": "^0.0.9",
103
+ "tsup": "^8.5.0",
104
+ "typescript": "^5.9.3"
105
+ },
106
+ "directories": {
107
+ "doc": "docs",
108
+ "test": "tests"
109
+ }
110
+ }
@@ -0,0 +1,19 @@
1
+ import { AreHTMLAttribute } from "@adaas/are-html/attribute";
2
+
3
+
4
+
5
+
6
+
7
+
8
+ export class AreBindingAttribute extends AreHTMLAttribute {
9
+
10
+ // get value(): string {
11
+
12
+ // const [firstPart, ...pathPart] = this.content.split('.');
13
+
14
+ // const primaryObject = this.owner.store.get(firstPart);
15
+
16
+ // return AreCommonHelper.extractPropertyByPath(primaryObject, pathPart.join('.')) as string;
17
+ // }
18
+
19
+ }
@@ -0,0 +1,26 @@
1
+ import { A_FormatterHelper } from "@adaas/a-concept";
2
+ import type { AreDirective } from "@adaas/are-html/directive/AreDirective.component";
3
+ import { AreHTMLAttribute } from "@adaas/are-html/attribute";
4
+ import { AreStoreWatchingEntity } from "@adaas/are";
5
+ import { AreHTMLNode } from "@adaas/are-html/node";
6
+
7
+
8
+
9
+ export class AreDirectiveAttribute extends AreHTMLAttribute implements AreStoreWatchingEntity {
10
+
11
+ cache?: any
12
+
13
+ template?: AreHTMLNode
14
+
15
+ /**
16
+ * Returns a custom directive component associated with this attribute, if available.
17
+ *
18
+ * The method uses the attribute's name to resolve the corresponding directive component from the scope. It constructs the expected directive name by converting the attribute name to PascalCase and prefixing it with "AreDirective". If a matching directive component is found in the scope, it is returned; otherwise, the method returns undefined.
19
+ */
20
+ get component(): AreDirective | undefined {
21
+ const component = this.scope.resolve<AreDirective>(`AreDirective${A_FormatterHelper.toPascalCase(this.name)}`) as AreDirective | undefined;
22
+
23
+ return component as AreDirective;
24
+ }
25
+
26
+ }
@@ -0,0 +1,5 @@
1
+ import { AreHTMLAttribute } from "@adaas/are-html/attribute";
2
+
3
+
4
+ export class AreEventAttribute extends AreHTMLAttribute {
5
+ }
@@ -0,0 +1,6 @@
1
+ import { AreHTMLAttribute } from "@adaas/are-html/attribute";
2
+
3
+
4
+ export class AreStaticAttribute extends AreHTMLAttribute {
5
+
6
+ }
File without changes
@@ -0,0 +1,322 @@
1
+ import { A_Caller, A_Inject, A_Scope } from "@adaas/a-concept";
2
+ import { A_Logger } from "@adaas/a-utils/a-logger";
3
+ import { AreDirectiveAttribute } from "@adaas/are-html/attributes/AreDirective.attribute";
4
+ import { AreCompilerError, AreScene, AreStore } from "@adaas/are";
5
+ import { AreDirective } from "@adaas/are-html/directive/AreDirective.component";
6
+ import { AddCommentInstruction } from "@adaas/are-html/instructions/AddComment.instruction";
7
+ import { AreHTMLNode } from "@adaas/are-html/node";
8
+ import { AreDirectiveContext } from "@adaas/are-html/directive/AreDirective.context";
9
+
10
+
11
+ type AreForExpression = {
12
+ key: string;
13
+ index: string | undefined;
14
+ arrayExpr: string;
15
+ };
16
+
17
+
18
+ @AreDirective.Priority(1)
19
+ export class AreDirectiveFor extends AreDirective {
20
+
21
+
22
+ @AreDirective.Transform
23
+ transform(
24
+ @A_Inject(A_Caller) attribute: AreDirectiveAttribute,
25
+ @A_Inject(A_Scope) scope: A_Scope,
26
+ @A_Inject(AreStore) store: AreStore,
27
+ @A_Inject(AreScene) scene: AreScene,
28
+ @A_Inject(A_Logger) logger: A_Logger,
29
+ ...args: any[]
30
+ ) {
31
+
32
+ logger.debug(`[Transform] directive $FOR for <${attribute.owner.aseid.toString()}>`)
33
+
34
+ const node = attribute.owner;
35
+
36
+ /**
37
+ * Transfer the original node's scope (with all registered attributes and children)
38
+ * to the template clone, and give the owner node a fresh empty scope.
39
+ * This mirrors the $if directive's approach, making the owner a lightweight
40
+ * group container whose sole visible presence is a comment placeholder.
41
+ */
42
+ const forTemplate = node.cloneWithScope();
43
+
44
+ /**
45
+ * Remove the $for attribute from the template so iterative clones do not
46
+ * re-trigger this directive during their own transform phase.
47
+ * Re-register it on the owner so the reactive compile/update pipeline keeps working.
48
+ */
49
+ const forAttr = forTemplate.attributes.find(d => d.name === attribute.name);
50
+
51
+ if (forAttr) {
52
+ forTemplate.scope.deregister(forAttr);
53
+ node.scope.register(forAttr);
54
+ }
55
+
56
+ /**
57
+ * Re-initialize the owner node with its fresh scope so it becomes a valid
58
+ * group container that will own the generated item nodes as children.
59
+ */
60
+ node.init();
61
+
62
+ /**
63
+ * Store the template for use in compile and update.
64
+ */
65
+ attribute.template = forTemplate;
66
+
67
+
68
+ /**
69
+ * Parse the $for expression and evaluate the source array.
70
+ */
71
+ const { key, index, arrayExpr } = this.parseExpression(attribute.content);
72
+ const array = this.resolveArray(store, arrayExpr, attribute.content);
73
+
74
+ attribute.value = array;
75
+
76
+ console.log('Initial array for "for" directive:', scene);
77
+
78
+ /**
79
+ * For each item in the array, spawn a clone of the template with the
80
+ * item's store values pre-set and its scene activated.
81
+ *
82
+ * The children are added to the owner node before the main compiler's
83
+ * children iteration loop runs, so the main cycle will compile them —
84
+ * no explicit child.compile() call is needed here.
85
+ */
86
+ for (let i = 0; i < array.length; i++) {
87
+ this.spawnItemNode(attribute.template!, attribute.owner, key, index, array[i], i);
88
+ }
89
+
90
+ console.log('Template for "for" directive:', forTemplate);
91
+ }
92
+
93
+
94
+ @AreDirective.Compile
95
+ compile(
96
+ @A_Inject(A_Caller) attribute: AreDirectiveAttribute,
97
+ @A_Inject(AreStore) store: AreStore,
98
+ @A_Inject(AreScene) scene: AreScene,
99
+ ...args: any[]
100
+ ): void {
101
+ /**
102
+ * Replace the group node's default host declaration with a comment placeholder
103
+ * so the owner element itself does not render as a DOM element — the item nodes
104
+ * render as its children instead.
105
+ */
106
+ const hostInstruction = scene.host!;
107
+ const commentIdentifier = ` --- for: ${attribute.template!.id} --- `;
108
+ const declaration = new AddCommentInstruction({ content: commentIdentifier });
109
+
110
+ scene.setHost(declaration);
111
+ scene.planBefore(declaration, hostInstruction);
112
+ scene.unPlan(hostInstruction);
113
+ }
114
+
115
+
116
+ @AreDirective.Update
117
+ update(
118
+ @A_Inject(A_Caller) attribute: AreDirectiveAttribute,
119
+ @A_Inject(AreStore) store: AreStore,
120
+ @A_Inject(AreScene) scene: AreScene,
121
+ ...args: any[]
122
+ ): void {
123
+ /**
124
+ * Re-evaluate the source array.
125
+ */
126
+ const { key, index, arrayExpr } = this.parseExpression(attribute.content);
127
+ const newArray = this.resolveArray(store, arrayExpr, attribute.content);
128
+
129
+ const owner = attribute.owner;
130
+ const currentChildren = [...owner.children] as AreHTMLNode[];
131
+
132
+ attribute.value = newArray;
133
+
134
+ const newLen = newArray.length;
135
+
136
+ /**
137
+ * Build a set of new items for O(1) identity lookup.
138
+ * Uses reference equality — items that exist in newArray are "kept".
139
+ */
140
+ const newItemSet = new Set(newArray);
141
+
142
+ /**
143
+ * Partition existing children by identity: nodes whose stored item is
144
+ * still present in the new array are kept; the rest are removed.
145
+ * This correctly handles deletions from any position, not just the tail.
146
+ */
147
+ const keptChildren: AreHTMLNode[] = [];
148
+ const removedChildren: AreHTMLNode[] = [];
149
+
150
+ for (const child of currentChildren) {
151
+ const ctx = child.scope.resolveFlat(AreDirectiveContext);
152
+
153
+ if (ctx && newItemSet.has(ctx.scope[key])) {
154
+ keptChildren.push(child);
155
+ } else {
156
+ removedChildren.push(child);
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Unmount and detach nodes whose items are no longer in the array.
162
+ */
163
+ for (const child of removedChildren) {
164
+ child.unmount();
165
+ owner.removeChild(child);
166
+ }
167
+
168
+ /**
169
+ * Update store values on kept nodes so their reactive bindings pick up
170
+ * the latest data and corrected indices without a full re-render.
171
+ */
172
+ for (let i = 0; i < keptChildren.length; i++) {
173
+ let directiveContext = keptChildren[i].scope.resolveFlat(AreDirectiveContext);
174
+
175
+ if (!directiveContext) {
176
+ directiveContext = new AreDirectiveContext(keptChildren[i].aseid);
177
+ keptChildren[i].scope.register(directiveContext);
178
+ }
179
+
180
+ directiveContext.scope = {
181
+ ...directiveContext.scope,
182
+ [key]: newArray[i],
183
+ [index || 'index']: i,
184
+ };
185
+ }
186
+
187
+ /**
188
+ * Append nodes for items added beyond the current kept count.
189
+ * These are created outside the main compile cycle so they need an
190
+ * explicit compile + mount to appear in the DOM.
191
+ */
192
+ for (let i = keptChildren.length; i < newLen; i++) {
193
+ const itemNode = this.spawnItemNode(attribute.template!, owner, key, index, newArray[i], i);
194
+
195
+ itemNode.transform();
196
+ itemNode.compile();
197
+ itemNode.mount();
198
+ }
199
+ }
200
+
201
+
202
+ // ─────────────────────────────────────────────────────────────────────────────
203
+ // ── Helpers ──────────────────────────────────────────────────────────────────
204
+ // ─────────────────────────────────────────────────────────────────────────────
205
+
206
+ /**
207
+ * Parses the $for expression string into its constituent parts.
208
+ *
209
+ * Supported formats:
210
+ * item in items
211
+ * item, index in items
212
+ * (item, index) in items
213
+ * item in filter(items)
214
+ * item, index in filter(items, 'active')
215
+ */
216
+ private parseExpression(content: string): AreForExpression {
217
+ const inIndex = content.lastIndexOf(' in ');
218
+ const keyAndIndex = content.slice(0, inIndex).trim().replace(/^\(|\)$/g, '');
219
+ const arrayExpr = content.slice(inIndex + 4).trim();
220
+ const keyParts = keyAndIndex.split(',').map(p => p.trim());
221
+
222
+ return {
223
+ key: keyParts[0],
224
+ index: keyParts[1] || undefined,
225
+ arrayExpr,
226
+ };
227
+ }
228
+
229
+ /**
230
+ * Resolves the array expression against the store.
231
+ * Supports both plain key lookups and function-call expressions:
232
+ * items → store.get('items')
233
+ * filter(items) → store.get('filter')(store.get('items'))
234
+ */
235
+ private resolveArray(store: AreStore, arrayExpr: string, fullContent: string): any[] {
236
+ let result: any;
237
+ const callMatch = arrayExpr.match(/^([^(]+)\((.+)\)$/);
238
+
239
+ if (callMatch) {
240
+ const fnName = callMatch[1].trim();
241
+ const fn = store.get(fnName as any);
242
+
243
+ if (typeof fn !== 'function')
244
+ throw new AreCompilerError({
245
+ title: 'Invalid "for" Directive Function',
246
+ description: `The expression "${fnName}" in the "for" directive does not resolve to a function in the store. Received: ${typeof fn}`,
247
+ });
248
+
249
+ const rawArgs = callMatch[2].split(',').map(a => a.trim());
250
+ const resolvedArgs = rawArgs.map(arg => {
251
+ if (arg.startsWith("'") && arg.endsWith("'")) return arg.slice(1, -1);
252
+ if (arg.startsWith('"') && arg.endsWith('"')) return arg.slice(1, -1);
253
+ if (!isNaN(Number(arg))) return Number(arg);
254
+ return store.get(arg as any);
255
+ });
256
+
257
+ result = (fn as Function)(...resolvedArgs);
258
+ } else {
259
+ result = store.get(arrayExpr as any);
260
+ }
261
+
262
+ if (!Array.isArray(result))
263
+ throw new AreCompilerError({
264
+ title: 'Invalid "for" Directive Value',
265
+ description: `The "for" directive expects an array but got ${typeof result}. Expression: "${fullContent}". Received: ${JSON.stringify(result)}`,
266
+ });
267
+
268
+ return result;
269
+ }
270
+
271
+ /**
272
+ * Creates a single item node from the template, registers it as a child of
273
+ * the owner, initialises it, injects item-scoped store values, and activates
274
+ * its scene so the mount/compile cycle will include it.
275
+ *
276
+ * NOTE: This method does NOT call compile() or mount() — the caller is
277
+ * responsible for doing so when the main lifecycle cycle won't cover it
278
+ * (i.e. during update, but not during the initial compile phase).
279
+ */
280
+ private spawnItemNode(
281
+ template: AreHTMLNode,
282
+ owner: AreHTMLNode,
283
+ key: string,
284
+ index: string | undefined,
285
+ item: any,
286
+ i: number,
287
+ ): AreHTMLNode {
288
+ const itemNode = template.clone() as AreHTMLNode;
289
+
290
+ owner.addChild(itemNode);
291
+
292
+ const queue = [itemNode];
293
+
294
+ while (queue.length > 0) {
295
+ const current = queue.shift()!
296
+
297
+ current.init();
298
+
299
+ queue.push(...current.children as AreHTMLNode[]);
300
+ }
301
+
302
+ /**
303
+ * Resolve or create a directive context for the item node. This is needed to hold the item-specific store values (e.g. the "item" and "index" in a "for" loop) that the template's bindings will reference during compile and update. The context is shared among all clones of the same template, but that's fine because each clone gets its own scope values assigned here.
304
+ */
305
+ let directiveContext = itemNode.scope.resolveFlat(AreDirectiveContext);
306
+
307
+ if (!directiveContext) {
308
+ directiveContext = new AreDirectiveContext(itemNode.aseid);
309
+ itemNode.scope.register(directiveContext);
310
+ }
311
+
312
+ directiveContext.scope = {
313
+ ...directiveContext.scope,
314
+ [key]: item,
315
+ [index || 'index']: i,
316
+ }
317
+
318
+ itemNode.scene.activate();
319
+
320
+ return itemNode;
321
+ }
322
+ }