@saolabs/client 1.0.0 → 1.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 (378) hide show
  1. package/README.md +52 -195
  2. package/dist/index.d.ts +20 -5
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +14 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/plugins.d.ts +2 -2
  7. package/dist/plugins.js +2 -2
  8. package/dist/src/core/app/Application.d.ts +17 -15
  9. package/dist/src/core/app/Application.d.ts.map +1 -1
  10. package/dist/src/core/app/Application.js +41 -18
  11. package/dist/src/core/app/Application.js.map +1 -1
  12. package/dist/src/core/bootstrap/app.d.ts +1 -1
  13. package/dist/src/core/bootstrap/app.d.ts.map +1 -1
  14. package/dist/src/core/bootstrap/app.js +74 -4
  15. package/dist/src/core/bootstrap/app.js.map +1 -1
  16. package/dist/src/core/bootstrap/bundle.d.ts +41 -0
  17. package/dist/src/core/bootstrap/bundle.d.ts.map +1 -0
  18. package/dist/src/core/bootstrap/bundle.js +98 -0
  19. package/dist/src/core/bootstrap/bundle.js.map +1 -0
  20. package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts +1 -1
  21. package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts.map +1 -1
  22. package/dist/src/core/bootstrap/providers/ApiServiceProvider.js +3 -3
  23. package/dist/src/core/bootstrap/providers/ApiServiceProvider.js.map +1 -1
  24. package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts +1 -1
  25. package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts.map +1 -1
  26. package/dist/src/core/bootstrap/providers/CoreServiceProvider.js +11 -8
  27. package/dist/src/core/bootstrap/providers/CoreServiceProvider.js.map +1 -1
  28. package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts +3 -1
  29. package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts.map +1 -1
  30. package/dist/src/core/bootstrap/providers/HelperServiceProvider.js +8 -3
  31. package/dist/src/core/bootstrap/providers/HelperServiceProvider.js.map +1 -1
  32. package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts +2 -1
  33. package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts.map +1 -1
  34. package/dist/src/core/bootstrap/providers/RouteServiceProvider.js +14 -4
  35. package/dist/src/core/bootstrap/providers/RouteServiceProvider.js.map +1 -1
  36. package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts +4 -4
  37. package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts.map +1 -1
  38. package/dist/src/core/bootstrap/providers/ServiceProvider.js +5 -5
  39. package/dist/src/core/bootstrap/providers/ServiceProvider.js.map +1 -1
  40. package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts +1 -1
  41. package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts.map +1 -1
  42. package/dist/src/core/bootstrap/providers/ViewServiceProvider.js +3 -3
  43. package/dist/src/core/bootstrap/providers/ViewServiceProvider.js.map +1 -1
  44. package/dist/src/core/bootstrap/providers/default-providers.d.ts +1 -1
  45. package/dist/src/core/bootstrap/providers/default-providers.d.ts.map +1 -1
  46. package/dist/src/core/bootstrap/providers/default-providers.js +44 -11
  47. package/dist/src/core/bootstrap/providers/default-providers.js.map +1 -1
  48. package/dist/src/core/bootstrap/providers/index.d.ts +9 -9
  49. package/dist/src/core/bootstrap/providers/index.d.ts.map +1 -1
  50. package/dist/src/core/bootstrap/providers/index.js +8 -8
  51. package/dist/src/core/bootstrap/providers/index.js.map +1 -1
  52. package/dist/src/core/bootstrap/providers/provider-order.d.ts +1 -1
  53. package/dist/src/core/bootstrap/providers/provider-order.d.ts.map +1 -1
  54. package/dist/src/core/bootstrap/ssr.d.ts +47 -0
  55. package/dist/src/core/bootstrap/ssr.d.ts.map +1 -0
  56. package/dist/src/core/bootstrap/ssr.js +125 -0
  57. package/dist/src/core/bootstrap/ssr.js.map +1 -0
  58. package/dist/src/core/cache/ViewCache.d.ts +1 -1
  59. package/dist/src/core/cache/ViewCache.d.ts.map +1 -1
  60. package/dist/src/core/cache/index.d.ts +1 -1
  61. package/dist/src/core/cache/index.d.ts.map +1 -1
  62. package/dist/src/core/cache/index.js +1 -1
  63. package/dist/src/core/cache/index.js.map +1 -1
  64. package/dist/src/core/contracts/ApplicationInterface.d.ts +13 -11
  65. package/dist/src/core/contracts/ApplicationInterface.d.ts.map +1 -1
  66. package/dist/src/core/contracts/BlockInterface.d.ts +10 -10
  67. package/dist/src/core/contracts/BlockInterface.d.ts.map +1 -1
  68. package/dist/src/core/contracts/BundleInterface.d.ts +38 -0
  69. package/dist/src/core/contracts/BundleInterface.d.ts.map +1 -0
  70. package/dist/src/core/contracts/BundleInterface.js +2 -0
  71. package/dist/src/core/contracts/BundleInterface.js.map +1 -0
  72. package/dist/src/core/contracts/ComponentInterface.d.ts +7 -6
  73. package/dist/src/core/contracts/ComponentInterface.d.ts.map +1 -1
  74. package/dist/src/core/contracts/ElementInterface.d.ts +91 -27
  75. package/dist/src/core/contracts/ElementInterface.d.ts.map +1 -1
  76. package/dist/src/core/contracts/HeadServiceInterface.d.ts +37 -0
  77. package/dist/src/core/contracts/HeadServiceInterface.d.ts.map +1 -0
  78. package/dist/src/core/contracts/HeadServiceInterface.js +3 -0
  79. package/dist/src/core/contracts/HeadServiceInterface.js.map +1 -0
  80. package/dist/src/core/contracts/HelperInterface.d.ts +9 -1
  81. package/dist/src/core/contracts/HelperInterface.d.ts.map +1 -1
  82. package/dist/src/core/contracts/HttpServiceInterface.d.ts +3 -0
  83. package/dist/src/core/contracts/HttpServiceInterface.d.ts.map +1 -1
  84. package/dist/src/core/contracts/MarkerInterface.d.ts +29 -44
  85. package/dist/src/core/contracts/MarkerInterface.d.ts.map +1 -1
  86. package/dist/src/core/contracts/ReactiveInterface.d.ts +9 -9
  87. package/dist/src/core/contracts/ReactiveInterface.d.ts.map +1 -1
  88. package/dist/src/core/contracts/RouterInterface.d.ts +5 -2
  89. package/dist/src/core/contracts/RouterInterface.d.ts.map +1 -1
  90. package/dist/src/core/contracts/SectionInterface.d.ts +48 -0
  91. package/dist/src/core/contracts/SectionInterface.d.ts.map +1 -0
  92. package/dist/src/core/contracts/SectionInterface.js +2 -0
  93. package/dist/src/core/contracts/SectionInterface.js.map +1 -0
  94. package/dist/src/core/contracts/ServiceProviderInterface.d.ts +3 -3
  95. package/dist/src/core/contracts/ServiceProviderInterface.d.ts.map +1 -1
  96. package/dist/src/core/contracts/ViewControllerInterface.d.ts +116 -15
  97. package/dist/src/core/contracts/ViewControllerInterface.d.ts.map +1 -1
  98. package/dist/src/core/contracts/ViewInterface.d.ts +31 -5
  99. package/dist/src/core/contracts/ViewInterface.d.ts.map +1 -1
  100. package/dist/src/core/contracts/ViewManagerInterface.d.ts +47 -5
  101. package/dist/src/core/contracts/ViewManagerInterface.d.ts.map +1 -1
  102. package/dist/src/core/contracts/ViewStateInterface.d.ts +39 -2
  103. package/dist/src/core/contracts/ViewStateInterface.d.ts.map +1 -1
  104. package/dist/src/core/contracts/common.d.ts +3 -3
  105. package/dist/src/core/contracts/common.js +3 -3
  106. package/dist/src/core/contracts/utils.d.ts +19 -19
  107. package/dist/src/core/contracts/utils.d.ts.map +1 -1
  108. package/dist/src/core/contracts/views.d.ts +1 -22
  109. package/dist/src/core/contracts/views.d.ts.map +1 -1
  110. package/dist/src/core/devtools/hook.d.ts +66 -0
  111. package/dist/src/core/devtools/hook.d.ts.map +1 -0
  112. package/dist/src/core/devtools/hook.js +114 -0
  113. package/dist/src/core/devtools/hook.js.map +1 -0
  114. package/dist/src/core/devtools/index.d.ts +34 -0
  115. package/dist/src/core/devtools/index.d.ts.map +1 -0
  116. package/dist/src/core/devtools/index.js +33 -0
  117. package/dist/src/core/devtools/index.js.map +1 -0
  118. package/dist/src/core/devtools/inspector.d.ts +31 -0
  119. package/dist/src/core/devtools/inspector.d.ts.map +1 -0
  120. package/dist/src/core/devtools/inspector.js +249 -0
  121. package/dist/src/core/devtools/inspector.js.map +1 -0
  122. package/dist/src/core/elements/Block.d.ts +9 -7
  123. package/dist/src/core/elements/Block.d.ts.map +1 -1
  124. package/dist/src/core/elements/Block.js +33 -9
  125. package/dist/src/core/elements/Block.js.map +1 -1
  126. package/dist/src/core/elements/BlockOutlet.d.ts +19 -8
  127. package/dist/src/core/elements/BlockOutlet.d.ts.map +1 -1
  128. package/dist/src/core/elements/BlockOutlet.js +57 -13
  129. package/dist/src/core/elements/BlockOutlet.js.map +1 -1
  130. package/dist/src/core/elements/Component.d.ts +83 -11
  131. package/dist/src/core/elements/Component.d.ts.map +1 -1
  132. package/dist/src/core/elements/Component.js +334 -13
  133. package/dist/src/core/elements/Component.js.map +1 -1
  134. package/dist/src/core/elements/ForeachSlotCache.d.ts +95 -0
  135. package/dist/src/core/elements/ForeachSlotCache.d.ts.map +1 -0
  136. package/dist/src/core/elements/ForeachSlotCache.js +149 -0
  137. package/dist/src/core/elements/ForeachSlotCache.js.map +1 -0
  138. package/dist/src/core/elements/Fragment.d.ts +19 -13
  139. package/dist/src/core/elements/Fragment.d.ts.map +1 -1
  140. package/dist/src/core/elements/Fragment.js +43 -20
  141. package/dist/src/core/elements/Fragment.js.map +1 -1
  142. package/dist/src/core/elements/Html.d.ts +89 -12
  143. package/dist/src/core/elements/Html.d.ts.map +1 -1
  144. package/dist/src/core/elements/Html.js +707 -106
  145. package/dist/src/core/elements/Html.js.map +1 -1
  146. package/dist/src/core/elements/Output.d.ts +34 -10
  147. package/dist/src/core/elements/Output.d.ts.map +1 -1
  148. package/dist/src/core/elements/Output.js +141 -26
  149. package/dist/src/core/elements/Output.js.map +1 -1
  150. package/dist/src/core/elements/Reactive.d.ts +85 -14
  151. package/dist/src/core/elements/Reactive.d.ts.map +1 -1
  152. package/dist/src/core/elements/Reactive.js +315 -41
  153. package/dist/src/core/elements/Reactive.js.map +1 -1
  154. package/dist/src/core/elements/TextElement.d.ts +11 -7
  155. package/dist/src/core/elements/TextElement.d.ts.map +1 -1
  156. package/dist/src/core/elements/TextElement.js +18 -11
  157. package/dist/src/core/elements/TextElement.js.map +1 -1
  158. package/dist/src/core/elements/Wrapper.d.ts +24 -13
  159. package/dist/src/core/elements/Wrapper.d.ts.map +1 -1
  160. package/dist/src/core/elements/Wrapper.js +65 -8
  161. package/dist/src/core/elements/Wrapper.js.map +1 -1
  162. package/dist/src/core/elements/Yield.d.ts +10 -9
  163. package/dist/src/core/elements/Yield.d.ts.map +1 -1
  164. package/dist/src/core/elements/Yield.js +31 -19
  165. package/dist/src/core/elements/Yield.js.map +1 -1
  166. package/dist/src/core/elements/helpers.d.ts +7 -7
  167. package/dist/src/core/elements/helpers.d.ts.map +1 -1
  168. package/dist/src/core/elements/helpers.js +4 -4
  169. package/dist/src/core/elements/index.d.ts +12 -11
  170. package/dist/src/core/elements/index.d.ts.map +1 -1
  171. package/dist/src/core/elements/index.js +12 -11
  172. package/dist/src/core/elements/index.js.map +1 -1
  173. package/dist/src/core/elements/reconcileChildren.d.ts +7 -0
  174. package/dist/src/core/elements/reconcileChildren.d.ts.map +1 -0
  175. package/dist/src/core/elements/reconcileChildren.js +74 -0
  176. package/dist/src/core/elements/reconcileChildren.js.map +1 -0
  177. package/dist/src/core/hellpers/utils.d.ts +2 -2
  178. package/dist/src/core/hellpers/utils.js +4 -4
  179. package/dist/src/core/helpers/ApiClient.d.ts +58 -0
  180. package/dist/src/core/helpers/ApiClient.d.ts.map +1 -0
  181. package/dist/src/core/helpers/ApiClient.js +131 -0
  182. package/dist/src/core/helpers/ApiClient.js.map +1 -0
  183. package/dist/src/core/helpers/app.d.ts +3 -0
  184. package/dist/src/core/helpers/app.d.ts.map +1 -0
  185. package/dist/src/core/helpers/app.js +63 -0
  186. package/dist/src/core/helpers/app.js.map +1 -0
  187. package/dist/src/core/helpers/transition.d.ts +34 -0
  188. package/dist/src/core/helpers/transition.d.ts.map +1 -0
  189. package/dist/src/core/helpers/transition.js +118 -0
  190. package/dist/src/core/helpers/transition.js.map +1 -0
  191. package/dist/src/core/helpers/utils.d.ts +26 -0
  192. package/dist/src/core/helpers/utils.d.ts.map +1 -0
  193. package/dist/src/core/helpers/utils.js +96 -0
  194. package/dist/src/core/helpers/utils.js.map +1 -0
  195. package/dist/src/core/helpers/view.d.ts +39 -0
  196. package/dist/src/core/helpers/view.d.ts.map +1 -0
  197. package/dist/src/core/helpers/view.js +286 -0
  198. package/dist/src/core/helpers/view.js.map +1 -0
  199. package/dist/src/core/routers/Router.d.ts +108 -7
  200. package/dist/src/core/routers/Router.d.ts.map +1 -1
  201. package/dist/src/core/routers/Router.js +444 -68
  202. package/dist/src/core/routers/Router.js.map +1 -1
  203. package/dist/src/core/routers/index.d.ts +2 -2
  204. package/dist/src/core/routers/index.d.ts.map +1 -1
  205. package/dist/src/core/routers/index.js +1 -1
  206. package/dist/src/core/routers/index.js.map +1 -1
  207. package/dist/src/core/services/AssetManager.d.ts +112 -0
  208. package/dist/src/core/services/AssetManager.d.ts.map +1 -0
  209. package/dist/src/core/services/AssetManager.js +361 -0
  210. package/dist/src/core/services/AssetManager.js.map +1 -0
  211. package/dist/src/core/services/BlockManager.d.ts +73 -2
  212. package/dist/src/core/services/BlockManager.d.ts.map +1 -1
  213. package/dist/src/core/services/BlockManager.js +270 -48
  214. package/dist/src/core/services/BlockManager.js.map +1 -1
  215. package/dist/src/core/services/DomService.js +3 -3
  216. package/dist/src/core/services/DomService.js.map +1 -1
  217. package/dist/src/core/services/HeadService.d.ts +24 -0
  218. package/dist/src/core/services/HeadService.d.ts.map +1 -0
  219. package/dist/src/core/services/HeadService.js +120 -0
  220. package/dist/src/core/services/HeadService.js.map +1 -0
  221. package/dist/src/core/services/HelperService.d.ts +14 -3
  222. package/dist/src/core/services/HelperService.d.ts.map +1 -1
  223. package/dist/src/core/services/HelperService.js +32 -2
  224. package/dist/src/core/services/HelperService.js.map +1 -1
  225. package/dist/src/core/services/HttpService.d.ts +8 -0
  226. package/dist/src/core/services/HttpService.d.ts.map +1 -1
  227. package/dist/src/core/services/HttpService.js +121 -47
  228. package/dist/src/core/services/HttpService.js.map +1 -1
  229. package/dist/src/core/services/MarkerRegistry.d.ts +51 -8
  230. package/dist/src/core/services/MarkerRegistry.d.ts.map +1 -1
  231. package/dist/src/core/services/MarkerRegistry.js +135 -14
  232. package/dist/src/core/services/MarkerRegistry.js.map +1 -1
  233. package/dist/src/core/services/PageCache.d.ts +101 -0
  234. package/dist/src/core/services/PageCache.d.ts.map +1 -0
  235. package/dist/src/core/services/PageCache.js +184 -0
  236. package/dist/src/core/services/PageCache.js.map +1 -0
  237. package/dist/src/core/services/SectionManager.d.ts +100 -0
  238. package/dist/src/core/services/SectionManager.d.ts.map +1 -0
  239. package/dist/src/core/services/SectionManager.js +408 -0
  240. package/dist/src/core/services/SectionManager.js.map +1 -0
  241. package/dist/src/core/services/StorageService.js +1 -1
  242. package/dist/src/core/services/TranslationService.d.ts +21 -0
  243. package/dist/src/core/services/TranslationService.d.ts.map +1 -0
  244. package/dist/src/core/services/TranslationService.js +95 -0
  245. package/dist/src/core/services/TranslationService.js.map +1 -0
  246. package/dist/src/core/services/index.d.ts +11 -8
  247. package/dist/src/core/services/index.d.ts.map +1 -1
  248. package/dist/src/core/services/index.js +11 -8
  249. package/dist/src/core/services/index.js.map +1 -1
  250. package/dist/src/core/types/utils.d.ts +8 -8
  251. package/dist/src/core/types/utils.d.ts.map +1 -1
  252. package/dist/src/core/view/LoopContext.d.ts +21 -1
  253. package/dist/src/core/view/LoopContext.d.ts.map +1 -1
  254. package/dist/src/core/view/LoopContext.js +36 -0
  255. package/dist/src/core/view/LoopContext.js.map +1 -1
  256. package/dist/src/core/view/ResourceScope.d.ts +38 -0
  257. package/dist/src/core/view/ResourceScope.d.ts.map +1 -0
  258. package/dist/src/core/view/ResourceScope.js +167 -0
  259. package/dist/src/core/view/ResourceScope.js.map +1 -0
  260. package/dist/src/core/view/Section.d.ts +17 -32
  261. package/dist/src/core/view/Section.d.ts.map +1 -1
  262. package/dist/src/core/view/Section.js +14 -55
  263. package/dist/src/core/view/Section.js.map +1 -1
  264. package/dist/src/core/view/View.d.ts +43 -7
  265. package/dist/src/core/view/View.d.ts.map +1 -1
  266. package/dist/src/core/view/View.js +22 -4
  267. package/dist/src/core/view/View.js.map +1 -1
  268. package/dist/src/core/view/ViewController.d.ts +313 -40
  269. package/dist/src/core/view/ViewController.d.ts.map +1 -1
  270. package/dist/src/core/view/ViewController.js +1002 -147
  271. package/dist/src/core/view/ViewController.js.map +1 -1
  272. package/dist/src/core/view/ViewManager.d.ts +318 -27
  273. package/dist/src/core/view/ViewManager.d.ts.map +1 -1
  274. package/dist/src/core/view/ViewManager.js +1199 -258
  275. package/dist/src/core/view/ViewManager.js.map +1 -1
  276. package/dist/src/core/view/ViewState.d.ts +185 -6
  277. package/dist/src/core/view/ViewState.d.ts.map +1 -1
  278. package/dist/src/core/view/ViewState.js +851 -123
  279. package/dist/src/core/view/ViewState.js.map +1 -1
  280. package/dist/src/core/view/index.d.ts +5 -5
  281. package/dist/src/core/view/index.d.ts.map +1 -1
  282. package/dist/src/core/view/index.js +5 -5
  283. package/dist/src/core/view/index.js.map +1 -1
  284. package/dist/src/testing/index.d.ts +69 -0
  285. package/dist/src/testing/index.d.ts.map +1 -0
  286. package/dist/src/testing/index.js +140 -0
  287. package/dist/src/testing/index.js.map +1 -0
  288. package/index.ts +29 -5
  289. package/package.json +30 -21
  290. package/plugins.ts +2 -2
  291. package/src/core/app/Application.ts +58 -31
  292. package/src/core/bootstrap/app.ts +80 -6
  293. package/src/core/bootstrap/bundle.ts +101 -0
  294. package/src/core/bootstrap/providers/ApiServiceProvider.ts +4 -4
  295. package/src/core/bootstrap/providers/CoreServiceProvider.ts +14 -8
  296. package/src/core/bootstrap/providers/HelperServiceProvider.ts +8 -3
  297. package/src/core/bootstrap/providers/RouteServiceProvider.ts +15 -4
  298. package/src/core/bootstrap/providers/ServiceProvider.ts +8 -8
  299. package/src/core/bootstrap/providers/ViewServiceProvider.ts +3 -3
  300. package/src/core/bootstrap/providers/default-providers.ts +51 -16
  301. package/src/core/bootstrap/providers/index.ts +9 -9
  302. package/src/core/bootstrap/providers/provider-order.test.ts +16 -27
  303. package/src/core/bootstrap/providers/provider-order.ts +1 -1
  304. package/src/core/bootstrap/ssr.ts +136 -0
  305. package/src/core/cache/ViewCache.ts +1 -1
  306. package/src/core/cache/index.ts +1 -1
  307. package/src/core/contracts/ApplicationInterface.ts +13 -11
  308. package/src/core/contracts/BlockInterface.ts +18 -18
  309. package/src/core/contracts/BundleInterface.ts +40 -0
  310. package/src/core/contracts/ComponentInterface.ts +7 -6
  311. package/src/core/contracts/ElementInterface.ts +95 -27
  312. package/src/core/contracts/HeadServiceInterface.ts +41 -0
  313. package/src/core/contracts/HelperInterface.ts +9 -1
  314. package/src/core/contracts/HttpServiceInterface.ts +3 -0
  315. package/src/core/contracts/MarkerInterface.ts +22 -49
  316. package/src/core/contracts/ReactiveInterface.ts +9 -9
  317. package/src/core/contracts/RouterInterface.ts +5 -2
  318. package/src/core/contracts/SectionInterface.ts +49 -0
  319. package/src/core/contracts/ServiceProviderInterface.ts +3 -3
  320. package/src/core/contracts/ViewControllerInterface.ts +124 -16
  321. package/src/core/contracts/ViewInterface.ts +34 -5
  322. package/src/core/contracts/ViewManagerInterface.ts +40 -5
  323. package/src/core/contracts/ViewStateInterface.ts +39 -2
  324. package/src/core/contracts/common.ts +3 -3
  325. package/src/core/contracts/utils.ts +19 -19
  326. package/src/core/contracts/views.ts +2 -22
  327. package/src/core/devtools/hook.ts +142 -0
  328. package/src/core/devtools/index.ts +38 -0
  329. package/src/core/devtools/inspector.ts +270 -0
  330. package/src/core/elements/Block.ts +43 -21
  331. package/src/core/elements/BlockOutlet.ts +61 -21
  332. package/src/core/elements/Component.ts +352 -18
  333. package/src/core/elements/ElementManager.ts +9 -9
  334. package/src/core/elements/ForeachSlotCache.ts +170 -0
  335. package/src/core/elements/Fragment.ts +50 -32
  336. package/src/core/elements/Html.ts +696 -117
  337. package/src/core/elements/Output.ts +147 -30
  338. package/src/core/elements/Reactive.ts +329 -52
  339. package/src/core/elements/TextElement.ts +25 -16
  340. package/src/core/elements/Wrapper.ts +84 -18
  341. package/src/core/elements/Yield.ts +35 -24
  342. package/src/core/elements/helpers.ts +12 -12
  343. package/src/core/elements/index.ts +25 -24
  344. package/src/core/elements/reconcileChildren.ts +70 -0
  345. package/src/core/{hellpers → helpers}/ApiClient.ts +8 -1
  346. package/src/core/{hellpers → helpers}/app.ts +13 -2
  347. package/src/core/helpers/transition.ts +127 -0
  348. package/src/core/{hellpers → helpers}/utils.ts +4 -4
  349. package/src/core/helpers/view.ts +283 -0
  350. package/src/core/routers/Router.ts +458 -64
  351. package/src/core/routers/index.ts +2 -2
  352. package/src/core/services/AssetManager.ts +387 -0
  353. package/src/core/services/BlockManager.ts +272 -50
  354. package/src/core/services/DomService.ts +3 -3
  355. package/src/core/services/HeadService.ts +124 -0
  356. package/src/core/services/HelperService.ts +34 -4
  357. package/src/core/services/HttpService.ts +116 -55
  358. package/src/core/services/MarkerRegistry.ts +142 -16
  359. package/src/core/services/PageCache.ts +239 -0
  360. package/src/core/services/SectionManager.ts +387 -0
  361. package/src/core/services/StorageService.ts +1 -1
  362. package/src/core/services/TranslationService.ts +91 -0
  363. package/src/core/services/index.ts +11 -8
  364. package/src/core/types/utils.ts +8 -8
  365. package/src/core/view/LoopContext.ts +38 -1
  366. package/src/core/view/ResourceScope.ts +174 -0
  367. package/src/core/view/Section.ts +21 -68
  368. package/src/core/view/View.ts +57 -8
  369. package/src/core/view/ViewController.ts +1070 -186
  370. package/src/core/view/ViewManager.ts +1346 -272
  371. package/src/core/view/ViewState.ts +834 -116
  372. package/src/core/view/index.ts +5 -5
  373. package/src/testing/index.ts +184 -0
  374. package/dist/src/core/services/MarkerService.d.ts +0 -299
  375. package/dist/src/core/services/MarkerService.d.ts.map +0 -1
  376. package/dist/src/core/services/MarkerService.js +0 -723
  377. package/dist/src/core/services/MarkerService.js.map +0 -1
  378. package/src/core/services/MarkerService.ts +0 -923
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForeachSlotCache.js","sourceRoot":"","sources":["../../../../src/core/elements/ForeachSlotCache.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { InitMode } from "../contracts/common";
2
- import type { FragmentInterface, HtmlInterface, OneChildrenFactory, OneElementChildren } from "../contracts/ElementInterface";
3
- import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
4
- import type { OneObjectType } from "../types/utils";
1
+ import { InitMode } from "../contracts/common.js";
2
+ import type { FragmentInterface, HtmlInterface, SaoChildrenFactory, SaoElementChildren } from "../contracts/ElementInterface.js";
3
+ import type { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
4
+ import type { SaoObjectType } from "../types/utils.js";
5
5
  /**
6
6
  * Fragment — renders multiple root nodes into a parent without a wrapping tag.
7
7
  *
@@ -12,11 +12,11 @@ import type { OneObjectType } from "../types/utils";
12
12
  * similar to Reactive but without the reactivity overhead.
13
13
  */
14
14
  export declare class Fragment implements FragmentInterface {
15
- oneType: OneObjectType;
15
+ saoType: SaoObjectType;
16
16
  parent: HtmlInterface | null;
17
17
  nodes: Node[];
18
18
  /** Tracked child element wrappers (Html, Output, Reactive, TextElement, etc.) */
19
- children: OneElementChildren;
19
+ children: SaoElementChildren;
20
20
  private ctx;
21
21
  private childrenFactory;
22
22
  openTag: Comment;
@@ -29,11 +29,17 @@ export declare class Fragment implements FragmentInterface {
29
29
  id?: string | null;
30
30
  initMode?: InitMode;
31
31
  parentElement?: HtmlInterface | null;
32
- childrenFactory: OneChildrenFactory;
32
+ childrenFactory: SaoChildrenFactory;
33
33
  });
34
34
  setParentElement(parent: HtmlInterface | null): void;
35
+ /** Registry guard — element đã destroy không được reuse */
36
+ __destroyed__: boolean;
37
+ /**
38
+ * Render — idempotent + position-aware (RUNTIME_CONTRACT.md §2),
39
+ * cùng pattern với Reactive.render().
40
+ */
35
41
  render(): void;
36
- setChildrenFactory(factory: OneChildrenFactory): void;
42
+ setChildrenFactory(factory: SaoChildrenFactory): void;
37
43
  /** Hydrate lifecycle — reattach event listeners or perform other setup */
38
44
  hydrate(): void;
39
45
  /** Start lifecycle — recursively activate children's reactive subscriptions */
@@ -41,11 +47,11 @@ export declare class Fragment implements FragmentInterface {
41
47
  /** Stop lifecycle — recursively deactivate children's reactive subscriptions */
42
48
  stop(): void;
43
49
  /** Remove all nodes between markers from the DOM */
44
- clear(): void;
50
+ clear(_destroyChildren?: boolean): void;
45
51
  destroy(): void;
46
- get isOneElement(): boolean;
47
- set isOneElement(value: boolean);
48
- get isOneFragment(): boolean;
49
- set isOneFragment(value: boolean);
52
+ get isSaoElement(): boolean;
53
+ set isSaoElement(value: boolean);
54
+ get isSaoFragment(): boolean;
55
+ set isSaoFragment(value: boolean);
50
56
  }
51
57
  //# sourceMappingURL=Fragment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Fragment.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAA4B,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxJ,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;;GAQG;AACH,qBAAa,QAAS,YAAW,iBAAiB;IAC9C,OAAO,EAAE,aAAa,CAAc;IAC7B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAM;IAC1B,iFAAiF;IAC1E,QAAQ,EAAE,kBAAkB,CAAM;IACzC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,eAAe,CAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAoB;IAE7C,WAAW,EAAE,IAAI,EAAE,CAAM;gBAEb,EACR,GAAG,EACH,EAAS,EACT,QAA2B,EAC3B,aAAoB,EACpB,eAAe,EAClB,EAAE;QACC,GAAG,EAAE,uBAAuB,CAAC;QAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,eAAe,EAAE,kBAAkB,CAAA;KACtC;IASD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAGpD,MAAM,IAAI,IAAI;IAyCd,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIrD,0EAA0E;IAE1E,OAAO,IAAI,IAAI;IAQf,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAQb,gFAAgF;IAChF,IAAI,IAAI,IAAI;IAQZ,oDAAoD;IACpD,KAAK,IAAI,IAAI;IAmBb,OAAO,IAAI,IAAI;IAOf,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAE/B;CACJ"}
1
+ {"version":3,"file":"Fragment.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAA4B,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3J,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;GAQG;AACH,qBAAa,QAAS,YAAW,iBAAiB;IAC9C,OAAO,EAAE,aAAa,CAAc;IAC7B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAM;IAC1B,iFAAiF;IAC1E,QAAQ,EAAE,kBAAkB,CAAM;IACzC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,eAAe,CAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAoB;IAE7C,WAAW,EAAE,IAAI,EAAE,CAAM;gBAEb,EACR,GAAG,EACH,EAAS,EACT,QAA2B,EAC3B,aAAoB,EACpB,eAAe,EAClB,EAAE;QACC,GAAG,EAAE,uBAAuB,CAAC;QAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,eAAe,EAAE,kBAAkB,CAAA;KACtC;IASD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAGpD,2DAA2D;IACpD,aAAa,EAAE,OAAO,CAAS;IAEtC;;;OAGG;IACH,MAAM,IAAI,IAAI;IAkDd,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIrD,0EAA0E;IAE1E,OAAO,IAAI,IAAI;IAQf,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAQb,gFAAgF;IAChF,IAAI,IAAI,IAAI;IAQZ,oDAAoD;IACpD,KAAK,CAAC,gBAAgB,GAAE,OAAc,GAAG,IAAI;IAmB7C,OAAO,IAAI,IAAI;IASf,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAE/B;CACJ"}
@@ -1,5 +1,5 @@
1
- import { InitModes } from "../contracts/common";
2
- import { generateUUID } from "../hellpers/utils";
1
+ import { InitModes } from "../contracts/common.js";
2
+ import { generateUUID } from "../helpers/utils.js";
3
3
  /**
4
4
  * Fragment — renders multiple root nodes into a parent without a wrapping tag.
5
5
  *
@@ -11,12 +11,14 @@ import { generateUUID } from "../hellpers/utils";
11
11
  */
12
12
  export class Fragment {
13
13
  constructor({ ctx, id = null, initMode = InitModes.CREATE, parentElement = null, childrenFactory }) {
14
- this.oneType = 'Fragment';
14
+ this.saoType = 'Fragment';
15
15
  this.nodes = [];
16
16
  /** Tracked child element wrappers (Html, Output, Reactive, TextElement, etc.) */
17
17
  this.children = [];
18
18
  this.initMode = InitModes.CREATE;
19
19
  this.domChildren = []; // For compatibility with HtmlInterface; Fragment itself doesn't have a single root element
20
+ /** Registry guard — element đã destroy không được reuse */
21
+ this.__destroyed__ = false;
20
22
  this.ctx = ctx;
21
23
  this.parent = parentElement;
22
24
  this.childrenFactory = childrenFactory;
@@ -28,43 +30,62 @@ export class Fragment {
28
30
  setParentElement(parent) {
29
31
  this.parent = parent;
30
32
  }
33
+ /**
34
+ * Render — idempotent + position-aware (RUNTIME_CONTRACT.md §2),
35
+ * cùng pattern với Reactive.render().
36
+ */
31
37
  render() {
32
- if (!this.parent || !this.parent.element)
38
+ if (this.__destroyed__)
33
39
  return;
34
- const parentEl = this.parent.element;
35
- // Place start marker
36
- parentEl.appendChild(this.openTag);
40
+ if (!this.openTag.parentNode) {
41
+ if (!this.parent || !this.parent.element)
42
+ return;
43
+ const parentEl = this.parent.element;
44
+ parentEl.appendChild(this.openTag);
45
+ parentEl.appendChild(this.closeTag);
46
+ }
47
+ else {
48
+ this.clear(false);
49
+ }
37
50
  // Build children — compiled output uses (parentElement) => [...] signature
38
51
  const output = this.childrenFactory(this.parent);
52
+ const insertBeforeClose = (node) => {
53
+ this.closeTag.parentNode?.insertBefore(node, this.closeTag);
54
+ };
39
55
  for (const child of output) {
56
+ if (child === null || child === undefined)
57
+ continue;
40
58
  if (typeof child === 'string' || typeof child === 'number') {
41
59
  const textNode = document.createTextNode(String(child));
42
- parentEl.appendChild(textNode);
60
+ insertBeforeClose(textNode);
43
61
  this.nodes.push(textNode);
44
62
  }
45
- else if (child && typeof child === 'object') {
46
- if ('element' in child) {
47
- // HtmlInterface, TextInterface — append their DOM element
48
- parentEl.appendChild(child.element);
63
+ else if (child instanceof Node) {
64
+ insertBeforeClose(child);
65
+ this.nodes.push(child);
66
+ }
67
+ else if (typeof child === 'object') {
68
+ if ('element' in child && child.element) {
69
+ insertBeforeClose(child.element);
49
70
  this.nodes.push(child.element);
50
71
  this.children.push(child);
51
72
  child.render();
52
73
  }
53
74
  else if ('openTag' in child) {
54
- // Reactive, nested Fragment, Output — they self-append markers
75
+ // Marker-based: đặt markers đúng vị trí trước, render sau
55
76
  if ('parent' in child) {
56
77
  child.parent = this.parent;
57
78
  }
58
79
  if ('parentElement' in child) {
59
80
  child.parentElement = this.parent;
60
81
  }
82
+ insertBeforeClose(child.openTag);
83
+ insertBeforeClose(child.closeTag);
61
84
  this.children.push(child);
62
85
  child.render();
63
86
  }
64
87
  }
65
88
  }
66
- // Place end marker
67
- parentEl.appendChild(this.closeTag);
68
89
  }
69
90
  setChildrenFactory(factory) {
70
91
  this.childrenFactory = factory;
@@ -94,7 +115,7 @@ export class Fragment {
94
115
  }
95
116
  }
96
117
  /** Remove all nodes between markers from the DOM */
97
- clear() {
118
+ clear(_destroyChildren = true) {
98
119
  // Destroy managed children first
99
120
  for (const child of this.children) {
100
121
  if ('destroy' in child && typeof child.destroy === 'function') {
@@ -112,21 +133,23 @@ export class Fragment {
112
133
  this.nodes = [];
113
134
  }
114
135
  destroy() {
136
+ this.__destroyed__ = true;
137
+ this.ctx.releaseElement?.(this);
115
138
  this.clear();
116
139
  this.openTag.remove();
117
140
  this.closeTag.remove();
118
141
  this.parent = null;
119
142
  }
120
- get isOneElement() {
143
+ get isSaoElement() {
121
144
  return true;
122
145
  }
123
- set isOneElement(value) {
146
+ set isSaoElement(value) {
124
147
  // No-op setter to satisfy the Interface; this property is always true for Fragment elements
125
148
  }
126
- get isOneFragment() {
149
+ get isSaoFragment() {
127
150
  return true;
128
151
  }
129
- set isOneFragment(value) {
152
+ set isSaoFragment(value) {
130
153
  // No-op setter to satisfy the Interface; this property is always true for Fragment elements
131
154
  }
132
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Fragment.js","sourceRoot":"","sources":["../../../../src/core/elements/Fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;;;;;GAQG;AACH,MAAM,OAAO,QAAQ;IAejB,YAAY,EACR,GAAG,EACH,EAAE,GAAG,IAAI,EACT,QAAQ,GAAG,SAAS,CAAC,MAAM,EAC3B,aAAa,GAAG,IAAI,EACpB,eAAe,EAOlB;QA1BD,YAAO,GAAkB,UAAU,CAAC;QAE7B,UAAK,GAAW,EAAE,CAAC;QAC1B,iFAAiF;QAC1E,aAAQ,GAAuB,EAAE,CAAC;QAMlC,aAAQ,GAAa,SAAS,CAAC,MAAM,CAAC;QAE7C,gBAAW,GAAW,EAAE,CAAC,CAAC,2FAA2F;QAejH,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,0BAA0B;QAC/E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IACD,gBAAgB,CAAC,MAA4B;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IACD,MAAM;QACF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAErC,qBAAqB;QACrB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,2EAA2E;QAC3E,MAAM,MAAM,GAA6B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxD,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;oBACrB,0DAA0D;oBAC1D,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnB,CAAC;qBAAM,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;oBAC5B,+DAA+D;oBAC/D,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;wBACnB,KAAa,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACxC,CAAC;oBACD,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;wBAC1B,KAAa,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC/C,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,OAA2B;QAC1C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACnC,CAAC;IAED,0EAA0E;IAE1E,OAAO;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,SAAS,IAAI,KAAK,IAAI,OAAQ,KAAa,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACpE,KAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,KAAK;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,IAAI,KAAK,IAAI,OAAQ,KAAa,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChE,KAAa,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,gFAAgF;IAChF,IAAI;QACA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,MAAM,IAAI,KAAK,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9D,KAAa,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;QACL,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,KAAK;QACD,iCAAiC;QACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC5D,KAAK,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACL,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QAEnB,6CAA6C;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACvC,OAAO,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;YACjC,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,CAAC,KAAc;QAC3B,4FAA4F;IAChG,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,aAAa,CAAC,KAAc;QAC5B,4FAA4F;IAChG,CAAC;CACJ"}
1
+ {"version":3,"file":"Fragment.js","sourceRoot":"","sources":["../../../../src/core/elements/Fragment.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { InitMode } from "../contracts/common";
2
- import type { HtmlInterface, OneChildrenFactory, OneElementConfig } from "../contracts/ElementInterface";
3
- import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
4
- import type { ViewManagerInterface } from "../contracts/ViewManagerInterface";
5
- import type { OneObjectType } from "../types/utils";
1
+ import { InitMode } from "../contracts/common.js";
2
+ import type { HtmlInterface, SaoChildrenFactory, SaoElementChildren, SaoElementConfig } from "../contracts/ElementInterface.js";
3
+ import type { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
4
+ import type { ViewManagerInterface } from "../contracts/ViewManagerInterface.js";
5
+ import type { SaoObjectType } from "../types/utils.js";
6
6
  export declare class Html implements HtmlInterface {
7
- oneType: OneObjectType;
7
+ saoType: SaoObjectType;
8
8
  element: HTMLElement;
9
9
  parent: HtmlInterface | null;
10
10
  private tagName;
@@ -16,36 +16,113 @@ export declare class Html implements HtmlInterface {
16
16
  private abortController;
17
17
  /** All state subscriptions for reactive bindings — cleanup on destroy */
18
18
  private bindingUnsubscribes;
19
+ /** Invalidates deferred/stale binding callbacks after a config reconciliation. */
20
+ private bindingGeneration;
21
+ private contentUnsubscribe;
22
+ /** DOM state owned by this Html config, used for exact cleanup before reuse. */
23
+ private managedAttributeNames;
24
+ private managedClassNames;
25
+ private managedStyleNames;
26
+ private managedPropertyNames;
27
+ /** Events actually registered through ViewController, independent of current config. */
28
+ private registeredEventNames;
19
29
  initMode: InitMode;
30
+ private adoptedSSR;
20
31
  constructor({ ctx, id, parentElement, tagName, element, config, childrenFactory, initMode, }: {
21
32
  ctx: ViewControllerInterface | ViewManagerInterface;
22
33
  id?: string | null;
23
34
  parentElement?: HtmlInterface | null;
24
35
  tagName?: string;
25
36
  element?: HTMLElement | null;
26
- config?: OneElementConfig;
27
- childrenFactory?: OneChildrenFactory | null;
37
+ config?: SaoElementConfig;
38
+ childrenFactory?: SaoChildrenFactory | null;
28
39
  initMode?: InitMode;
29
40
  });
30
- updateConfig(newConfig: Partial<OneElementConfig>): void;
41
+ updateConfig(newConfig: Partial<SaoElementConfig>): void;
31
42
  private initialize;
43
+ private isBindingCurrent;
44
+ private cleanupBindingResources;
45
+ private clearManagedDomState;
46
+ /**
47
+ * Chuẩn hóa tên attr từ camelCase → kebab-case cho data-* và aria-* attrs.
48
+ *
49
+ * Compiler emit camelCase: "dataCount" → client phải set "data-count" trên DOM.
50
+ * Tham chiếu: COMPILER_CONTRACT.md §3 — camelCase attrs.
51
+ *
52
+ * @example normalizeAttrName('dataCount') === 'data-count'
53
+ * @example normalizeAttrName('ariaLabel') === 'aria-label'
54
+ * @example normalizeAttrName('id') === 'id' (không đổi)
55
+ */
56
+ private normalizeAttrName;
57
+ /**
58
+ * Thiết lập two-way data binding (v-model-like) theo compiler pattern:
59
+ *
60
+ * config.bind = { key: "<stateKey>" } — own bucket, sibling of attrs/props/events.
61
+ *
62
+ * Hành vi:
63
+ * 1. Khởi tạo: set element.value = state hiện tại
64
+ * 2. input event → update state
65
+ * 3. state change → update element.value
66
+ *
67
+ * Tham chiếu: COMPILER_CONTRACT.md §5 — @bind directive.
68
+ */
69
+ private setupTwoWayBinding;
32
70
  private initializeAttributes;
71
+ /**
72
+ * Apply một attr vào element, bao gồm:
73
+ * - Chuẩn hóa tên (camelCase → kebab-case cho data-* / aria-*)
74
+ * - Xử lý reactive binding
75
+ */
76
+ private _applyAttr;
33
77
  private initializeClasses;
78
+ private addClass;
79
+ private removeClass;
80
+ private toggleClass;
81
+ private applyStyle;
34
82
  private initializeStyles;
35
83
  private initializeEvents;
84
+ addEventListeners(): void;
85
+ removeEventListeners(): void;
36
86
  setParentElement(parent: HtmlInterface | null): void;
37
87
  setParent(parent: HtmlInterface | null): void;
38
- setChildrenFactory(factory: OneChildrenFactory): void;
88
+ setChildrenFactory(factory: SaoChildrenFactory): void;
39
89
  isSingleElement(): boolean;
90
+ getElement(): HTMLElement;
91
+ renderChildren(): SaoElementChildren;
92
+ private contentRendered;
93
+ private bindingInitialized;
94
+ private composing;
95
+ private isStarted;
40
96
  render(): HTMLElement;
97
+ private renderTextContent;
98
+ /** Đã chạy enter rồi — re-render không được chạy lại. */
99
+ private _entered;
100
+ /**
101
+ * Enter chạy MỘT lần, khi element vừa được tạo và đã nằm trong DOM.
102
+ * Bỏ qua ở HYDRATE: DOM đó do server render, animate lại là nháy vô cớ
103
+ * (tương đương `appear = false` mặc định của Vue).
104
+ */
105
+ private maybeRunEnter;
106
+ appendElement(element: HTMLElement | Comment | Text): void;
41
107
  /** Start reactive bindings + children (Phase 2 lifecycle) */
42
108
  start(): void;
43
109
  /** Stop reactive bindings + children */
44
110
  stop(): void;
111
+ clearHTML(): void;
45
112
  remove(): void;
113
+ /** Registry guard — element đã destroy không được reuse (xem RUNTIME_CONTRACT.md §2) */
114
+ __destroyed__: boolean;
46
115
  destroy(): void;
47
- get isOneElement(): boolean;
48
- set isOneElement(value: boolean);
116
+ /**
117
+ * Nhả id của element này và toàn bộ cây con khỏi `ctx.elements`, KHÔNG
118
+ * destroy. Dùng khi leave transition giữ DOM lại: registry phải sạch ngay
119
+ * để pass sau tạo element mới thay vì tái dùng xác sắp chết.
120
+ */
121
+ private releaseSubtreeFromRegistry;
122
+ /** Destroy children + dọn nội dung. Tách riêng để leave hoãn được. */
123
+ private teardownSubtree;
124
+ get isSaoElement(): boolean;
125
+ set isSaoElement(value: boolean);
49
126
  get isOneHtml(): boolean;
50
127
  set isOneHtml(value: boolean);
51
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Html.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAgD,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACvJ,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,qBAAa,IAAK,YAAW,aAAa;IACtC,OAAO,EAAE,aAAa,CAAU;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,QAAQ,CAA0B;IAEnC,WAAW,EAAE,IAAI,EAAE,CAAM;IAChC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,eAAe,CAA0C;IAEjE,yEAAyE;IACzE,OAAO,CAAC,mBAAmB,CAAsB;IAC1C,QAAQ,EAAE,QAAQ,CAAoB;gBAEjC,EACR,GAAG,EACH,EAAS,EACT,aAAoB,EACpB,OAAe,EACf,OAAc,EACd,MAAW,EACX,eAAsB,EACtB,QAA2B,GAC9B,EAAE;QACC,GAAG,EAAE,uBAAuB,GAAG,oBAAoB,CAAC;QACpD,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;QAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAC1B,eAAe,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;QAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACvB;IAsCD,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAMxD,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,oBAAoB;IAiE5B,OAAO,CAAC,iBAAiB;IA0DzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,gBAAgB;IAQxB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAIpD,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAG7C,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIrD,eAAe,IAAI,OAAO;IAI1B,MAAM,IAAI,WAAW;IAsCrB,6DAA6D;IAC7D,KAAK,IAAI,IAAI;IAQb,wCAAwC;IACxC,IAAI,IAAI,IAAI;IAQZ,MAAM;IAIN,OAAO;IAuBP,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;CACJ"}
1
+ {"version":3,"file":"Html.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Html.ts"],"names":[],"mappings":"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"}