@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
@@ -1,6 +1,10 @@
1
- import { InitModes } from "../contracts/common";
2
- import { generateUUID } from "../hellpers/utils";
3
- import markerRegistry from "../services/MarkerRegistry";
1
+ import { reconcileChildren } from './reconcileChildren.js';
2
+ import { InitModes } from "../contracts/common.js";
3
+ import { generateUUID } from "../helpers/utils.js";
4
+ import { mountChildrenBeforeAnchor } from "../helpers/view.js";
5
+ import markerRegistry from "../services/MarkerRegistry.js";
6
+ import { ForeachSlotCache } from "./ForeachSlotCache.js";
7
+ import { isLeaving } from "../helpers/transition.js";
4
8
  /**
5
9
  * Reactive — a region in the DOM bounded by comment markers that
6
10
  * can re-render its content when reactive dependencies change.
@@ -17,29 +21,69 @@ import markerRegistry from "../services/MarkerRegistry";
17
21
  */
18
22
  export class Reactive {
19
23
  constructor({ type = 'reactive', id = null, ctx, parentElement = null, parentReactive = null, stateKeys = [], childrenFactory = () => [], initMode = InitModes.CREATE, }) {
20
- this.oneType = 'Reactive';
21
- this.parent = null; // Alias for parentReactive to satisfy OneNodeInterface
24
+ this.saoType = 'Reactive';
25
+ this.parent = null; // Alias for parentReactive to satisfy SaoNodeInterface
22
26
  this.children = [];
23
27
  this.mounted = false;
24
28
  this.unsubscribe = () => { };
25
29
  this._isStarted = false;
30
+ /** Marker model (hydration) — gán bởi BlockManager/SSR khi cần; mặc định null. */
31
+ /** Key trả về bởi markerRegistry.register — destroy() dùng để gỡ lại */
32
+ this.markerKey = null;
26
33
  this.domChildren = []; // For compatibility with HtmlInterface; Reactive itself doesn't have a single root element
27
34
  this.initMode = InitModes.CREATE;
35
+ /**
36
+ * Slot cache cho @foreach reconciliation (Phase 5).
37
+ * Được tạo khi type === 'foreach', null cho tất cả các type khác.
38
+ * Cache maps item ref → Saola elements — cho phép reuse elements
39
+ * khi item object reference không thay đổi.
40
+ */
41
+ this._foreachCache = null;
42
+ /** Registry guard — element đã destroy không được reuse */
43
+ this.__destroyed__ = false;
28
44
  this.ctx = ctx;
29
45
  this.parentElement = parentElement;
30
46
  this.parentReactive = parentReactive;
31
- this.id = `${ctx.viewId}-${id || generateUUID(5)}`;
47
+ this.id = id ? id : `${ctx.viewId}-${generateUUID(5)}`;
32
48
  this.type = type;
33
49
  this.childrenFactory = childrenFactory;
34
50
  this.stateKeys = stateKeys;
35
51
  this.initMode = initMode;
36
- markerRegistry.register('reactive', this.id, {
37
- type: this.type,
38
- stateKeys: this.stateKeys,
39
- viewID: this.ctx.viewId,
40
- });
41
- this.openTag = markerRegistry.createMarkerStart('reactive', this.id);
42
- this.closeTag = markerRegistry.createMarkerEnd('reactive', this.id);
52
+ // foreach type: khởi tạo slot cache để hỗ trợ identity-keyed reconciliation
53
+ if (type === 'foreach') {
54
+ this._foreachCache = new ForeachSlotCache();
55
+ }
56
+ if (this.initMode === InitModes.CREATE) {
57
+ this.markerKey = markerRegistry.register('reactive', this.id, {
58
+ type: this.type,
59
+ stateKeys: this.stateKeys,
60
+ viewID: this.ctx.viewId,
61
+ });
62
+ this.openTag = markerRegistry.createMarkerStart('reactive', this.id);
63
+ this.closeTag = markerRegistry.createMarkerEnd('reactive', this.id);
64
+ }
65
+ else {
66
+ // ── Hydrate: tìm markers SSR trong DOM ──────────────────────
67
+ // Scan parent element cho cặp comment <!--r:id--> ... <!--/r:id-->
68
+ // (MarkerRegistry format). Fallback tạo mới nếu không tìm thấy.
69
+ const claimed = this.claimSSRMarkers();
70
+ if (claimed) {
71
+ this.openTag = claimed.open;
72
+ this.closeTag = claimed.close;
73
+ }
74
+ else {
75
+ this.openTag = markerRegistry.createMarkerStart('reactive', this.id);
76
+ this.closeTag = markerRegistry.createMarkerEnd('reactive', this.id);
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * Tìm cặp comment markers từ server-rendered HTML.
82
+ * Format MarkerRegistry: open = `r:id`, close = `/r:id`
83
+ * (r = shortcut cho 'reactive').
84
+ */
85
+ claimSSRMarkers() {
86
+ return markerRegistry.claim('reactive', this.id, this.parentElement?.element ?? null);
43
87
  }
44
88
  setParentElement(parent) {
45
89
  this.parentElement = parent;
@@ -55,15 +99,56 @@ export class Reactive {
55
99
  this.start();
56
100
  }
57
101
  }
58
- /** Mount markers into parent and render content */
102
+ /**
103
+ * Render — idempotent + position-aware (RUNTIME_CONTRACT.md §2):
104
+ * - Markers chưa trong DOM → đặt markers (trước closeTag của parentReactive
105
+ * nếu có, ngược lại append vào parentElement — đường mountElementList
106
+ * duyệt tuần tự nên vị trí đúng).
107
+ * - Markers đã trong DOM → chỉ thay nội dung GIỮA markers.
108
+ * Children loại marker-based (Output, nested Reactive, Fragment) được CALLER
109
+ * đặt markers vào đúng vị trí trước, rồi mới gọi child.render() — FIX(baseline#6).
110
+ * Children sinh ra khi đang active được start() ngay — FIX(baseline#7).
111
+ */
59
112
  render() {
60
- const target = this.getInsertionTarget();
61
- if (!target)
113
+ try {
114
+ this._render();
115
+ }
116
+ catch (err) {
117
+ // Lỗi ở vùng reactive thường xảy ra SAU khi trang đã sống (state đổi do
118
+ // user tương tác) — ngoài mọi try/catch của renderPageView. 'render' cho
119
+ // lần đầu, 'update' cho re-render.
120
+ const phase = this.mounted ? 'update' : 'render';
121
+ const result = this.ctx.handleError(err, { phase, path: this.ctx.path });
122
+ if (!result.handled)
123
+ throw err;
124
+ this.clearContent();
125
+ if (result.fallback !== null && result.fallback !== undefined) {
126
+ mountChildrenBeforeAnchor(this.closeTag, Array.isArray(result.fallback) ? result.fallback : [result.fallback], this.parentElement);
127
+ }
128
+ }
129
+ }
130
+ _render() {
131
+ if (this.__destroyed__)
132
+ return;
133
+ // ── Hydrate mode: markers đã trong DOM từ SSR ────────────────
134
+ // Tiền đề: ViewManager.hydrateView() đã gọi commitData() TRƯỚC bước này,
135
+ // nên closure state (vd `show`) đã có giá trị = trạng thái server.
136
+ // → childrenFactory sinh đúng element tree khớp với SSR DOM.
137
+ // _hydrateChildren tạo JS objects (Html claim DOM, Output claim markers)
138
+ // mà KHÔNG insert node mới — giữ nguyên DOM server-rendered.
139
+ if (this.initMode === InitModes.HYDRATE && this.openTag.parentNode) {
140
+ this._hydrateChildren();
141
+ this.mounted = true;
142
+ // Chuyển sang CREATE: re-render sau này (do state đổi) dùng CSR flow.
143
+ this.initMode = InitModes.CREATE;
62
144
  return;
63
- if (!this.mounted) {
64
- // First render: place markers
65
- if (this.parentReactive) {
66
- // Insert before the parent's close marker
145
+ }
146
+ if (!this.openTag.parentNode) {
147
+ // ── Lần đầu mount: đặt markers vào DOM ───────────────────────────
148
+ const target = this.getInsertionTarget();
149
+ if (!target)
150
+ return;
151
+ if (this.parentReactive && this.parentReactive.closeTag.parentNode === target) {
67
152
  target.insertBefore(this.openTag, this.parentReactive.closeTag);
68
153
  target.insertBefore(this.closeTag, this.parentReactive.closeTag);
69
154
  }
@@ -72,34 +157,215 @@ export class Reactive {
72
157
  target.appendChild(this.closeTag);
73
158
  }
74
159
  this.mounted = true;
160
+ // Initial render — _renderChildren tự mở cửa sổ cache quanh factory call
161
+ this._renderChildren();
162
+ }
163
+ else if (this._foreachCache) {
164
+ // ── Re-render @foreach: dùng reconciler ──────────────────────────
165
+ this.renderForeach();
75
166
  }
76
167
  else {
77
- // Re-render: clear existing content between markers
78
- this.clearContent();
168
+ // ── Re-render các type khác: clear + factory ──────────────────────
169
+ const output = this._runFactoryWithCache();
170
+ const next = output.filter(child => child != null).map(child => typeof child === 'string' || typeof child === 'number' ? document.createTextNode(String(child)) : child);
171
+ const parent = this.closeTag.parentNode;
172
+ if (parent)
173
+ reconcileChildren(parent, this.children, next, this.closeTag);
174
+ this.children = next;
175
+ this._cleanOrphanNodes(next);
176
+ if (this._isStarted)
177
+ for (const child of next)
178
+ child.start?.();
79
179
  }
80
- // Produce children
81
- const output = this.childrenFactory(this, this.parentElement);
82
- // Insert children between markers
180
+ this.mounted = true;
181
+ }
182
+ /**
183
+ * Phần render nội bộ: chạy childrenFactory, insert children vào DOM.
184
+ * Dùng cho initial render (mọi type) và re-render non-foreach.
185
+ * Precondition: markers đã trong DOM.
186
+ */
187
+ _renderChildren() {
188
+ // Cửa sổ cache chỉ mở quanh factory call — KHÔNG mở trong child.render()
189
+ // phía dưới, tránh nested @foreach (chạy lúc render con) ghi nhầm entry
190
+ // vào cache của loop ngoài rồi bị prunePass destroy oan ở pass sau.
191
+ const output = this._runFactoryWithCache();
192
+ const newChildren = [];
83
193
  for (const child of output) {
194
+ if (child === null || child === undefined)
195
+ continue;
84
196
  if (typeof child === 'string' || typeof child === 'number') {
85
197
  const textNode = document.createTextNode(String(child));
86
198
  this.insertBeforeClose(textNode);
87
199
  this.children.push(textNode);
88
200
  }
89
- else if (child && typeof child === 'object') {
90
- if ('element' in child) {
91
- // HtmlInterface, TextInterface, FragmentInterface
201
+ else if (child instanceof Node) {
202
+ this.insertBeforeClose(child);
203
+ this.children.push(child);
204
+ }
205
+ else if (typeof child === 'object') {
206
+ if ('element' in child && child.element) {
207
+ // Html, TextElement — single root element
92
208
  this.insertBeforeClose(child.element);
93
209
  this.children.push(child);
210
+ newChildren.push(child);
94
211
  child.render();
95
212
  }
96
213
  else if ('openTag' in child) {
97
- // Nested Reactive
214
+ // Marker-based: Output, nested Reactive, Fragment...
215
+ this.insertBeforeClose(child.openTag);
216
+ this.insertBeforeClose(child.closeTag);
98
217
  this.children.push(child);
218
+ newChildren.push(child);
99
219
  child.render();
100
220
  }
101
221
  }
102
222
  }
223
+ // Vùng active: children mới cần start() ngay (có subscription/event)
224
+ if (this._isStarted) {
225
+ for (const child of newChildren) {
226
+ if (typeof child.start === 'function') {
227
+ child.start();
228
+ }
229
+ }
230
+ }
231
+ }
232
+ /**
233
+ * Chạy childrenFactory với cửa sổ cache foreach (nếu có) mở đúng quanh
234
+ * factory call. beginPass reset occurrence counters + touched set.
235
+ */
236
+ _runFactoryWithCache() {
237
+ if (!this._foreachCache) {
238
+ return this.childrenFactory(this, this.parentElement);
239
+ }
240
+ this._foreachCache.beginPass();
241
+ this.ctx._currentForeachCache = this._foreachCache;
242
+ try {
243
+ return this.childrenFactory(this, this.parentElement);
244
+ }
245
+ finally {
246
+ this.ctx._currentForeachCache = null;
247
+ }
248
+ }
249
+ /**
250
+ * Hydrate children — tạo JS element objects từ factory nhưng KHÔNG insert DOM.
251
+ * Html children đã claim server DOM nodes trong constructor.
252
+ * Output/Reactive children gọi render() để claim markers.
253
+ * Sau hydrate, re-render tiếp theo dùng flow CSR bình thường.
254
+ */
255
+ _hydrateChildren() {
256
+ const output = this._runFactoryWithCache();
257
+ for (const child of output) {
258
+ if (child === null || child === undefined)
259
+ continue;
260
+ if (typeof child === 'string' || typeof child === 'number')
261
+ continue;
262
+ if (child instanceof Node)
263
+ continue;
264
+ if (typeof child === 'object') {
265
+ if ('element' in child && child.element) {
266
+ this.children.push(child);
267
+ child.render();
268
+ }
269
+ else if ('openTag' in child) {
270
+ if (typeof child.setParentElement === 'function') {
271
+ child.setParentElement(this.parentElement);
272
+ }
273
+ this.children.push(child);
274
+ child.render();
275
+ }
276
+ }
277
+ }
278
+ }
279
+ /**
280
+ * renderForeach — identity-keyed reconciliation cho @foreach (Phase 5).
281
+ *
282
+ * # Thuật toán
283
+ * 1. Snapshot cache hiện tại (prevSlots) — biết item nào đang hiển thị
284
+ * 2. Chạy childrenFactory với cache active → __foreach trả về:
285
+ * - cached elements nếu item ref giống (no DOM create)
286
+ * - elements mới nếu item mới (và lưu vào cache)
287
+ * 3. Diff: items nào KHÔNG xuất hiện trong kết quả mới → destroy + xoá cache
288
+ * 4. Reorder DOM: insertBefore(closeTag) cho tất cả elements mới (move hoặc append)
289
+ * 5. Cleanup orphan DOM nodes (nodes còn sót từ destroyed items)
290
+ * 6. Start elements mới nếu vùng đang active
291
+ *
292
+ * # Complexity
293
+ * - O(n) forEach pass trong __foreach
294
+ * - O(n) destroy pass cho removed items
295
+ * - O(n) DOM move pass (insertBefore là O(1) mỗi node)
296
+ * → Tổng O(n) so với O(2n) của clear+recreate, nhưng tiết kiệm DOM create/destroy
297
+ * cho unchanged items.
298
+ */
299
+ renderForeach() {
300
+ // ── Step 1: Ghi nhớ children đang hiển thị (phân biệt reuse/new) ─────
301
+ const cache = this._foreachCache;
302
+ const prevChildren = new Set(this.children); // old Saola elements
303
+ // ── Step 2: Chạy factory với cache active (beginPass + claim/store) ──
304
+ const output = this._runFactoryWithCache();
305
+ // Flatten output thành danh sách children mới
306
+ const newChildren = [];
307
+ for (const child of output) {
308
+ if (child === null || child === undefined)
309
+ continue;
310
+ if (typeof child === 'object') {
311
+ newChildren.push(child);
312
+ }
313
+ }
314
+ // ── Step 3: Destroy slot không được claim/store trong pass ───────────
315
+ // = item đã rời list, hoặc bị thay bằng ref mới (key trùng nhưng ref đổi).
316
+ cache.prunePass((slot) => {
317
+ for (const el of slot.elements) {
318
+ if (el && typeof el.destroy === 'function') {
319
+ el.destroy();
320
+ }
321
+ }
322
+ });
323
+ const trulyNew = newChildren.filter(child => !prevChildren.has(child));
324
+ const parent = this.closeTag.parentNode;
325
+ if (parent)
326
+ reconcileChildren(parent, this.children, newChildren, this.closeTag, child => cache.refreshedElements.has(child));
327
+ this._cleanOrphanNodes(newChildren);
328
+ this.children = newChildren;
329
+ if (this._isStarted) {
330
+ for (const child of trulyNew)
331
+ child.start?.();
332
+ }
333
+ }
334
+ /**
335
+ * Xoá các DOM nodes "mồ côi" giữa openTag và closeTag của Reactive.
336
+ * Orphan = nodes không thuộc bất kỳ child nào trong newChildren.
337
+ *
338
+ * Build tập hợp "expected nodes" từ newChildren, sau đó scan DOM
339
+ * và remove nodes không nằm trong tập đó.
340
+ */
341
+ _cleanOrphanNodes(newChildren) {
342
+ // Thu thập tất cả DOM nodes hợp lệ (thuộc new children)
343
+ const validNodes = new Set();
344
+ for (const child of newChildren) {
345
+ if ('element' in child && child.element) {
346
+ validNodes.add(child.element);
347
+ }
348
+ else if ('openTag' in child) {
349
+ // Marker-based: collect tất cả nodes trong block
350
+ let node = child.openTag;
351
+ while (node && node !== child.closeTag) {
352
+ validNodes.add(node);
353
+ node = node.nextSibling;
354
+ }
355
+ if (node)
356
+ validNodes.add(node); // closeTag
357
+ }
358
+ }
359
+ // Scan từ openTag → closeTag, remove nodes không hợp lệ.
360
+ // Node đang chạy leave PHẢI nằm lại tới khi animation xong — nó tự gỡ.
361
+ let current = this.openTag.nextSibling;
362
+ while (current && current !== this.closeTag) {
363
+ const next = current.nextSibling;
364
+ if (!validNodes.has(current) && !isLeaving(current)) {
365
+ current.remove();
366
+ }
367
+ current = next;
368
+ }
103
369
  }
104
370
  /** Schedule a re-render through the ViewController */
105
371
  update() {
@@ -114,11 +380,13 @@ export class Reactive {
114
380
  }
115
381
  }
116
382
  this.children = [];
117
- // Remove DOM nodes between markers
383
+ // Remove DOM nodes between markers — trừ node đang leave (child.destroy()
384
+ // phía trên vừa khởi động animation cho chúng; tự gỡ khi xong).
118
385
  let current = this.openTag.nextSibling;
119
386
  while (current && current !== this.closeTag) {
120
387
  const next = current.nextSibling;
121
- current.remove();
388
+ if (!isLeaving(current))
389
+ current.remove();
122
390
  current = next;
123
391
  }
124
392
  }
@@ -166,16 +434,22 @@ export class Reactive {
166
434
  }
167
435
  }
168
436
  }
169
- /** Remove content but keep markers (for hide/show scenarios) */
170
- hide() {
171
- this.clearContent();
172
- }
173
- /** Re-render content (for show after hide) */
174
- show() {
175
- this.render();
176
- }
177
437
  destroy() {
438
+ this.__destroyed__ = true;
439
+ this.ctx.releaseElement?.(this);
440
+ // MarkerRegistry là singleton TOÀN CỤC (sống qua navigate). Reactive trong
441
+ // loop có id kèm item (`{viewId}-{hash}-${item.id}`) → không gỡ thì mỗi
442
+ // trang/mỗi lần refresh để lại một record vĩnh viễn.
443
+ if (this.markerKey) {
444
+ markerRegistry.remove(this.markerKey);
445
+ this.markerKey = null;
446
+ }
447
+ this.stop();
178
448
  this.clearContent();
449
+ // Giải phóng cache — clearContent() đã destroy các elements
450
+ if (this._foreachCache) {
451
+ this._foreachCache.clear();
452
+ }
179
453
  this.openTag.remove();
180
454
  this.closeTag.remove();
181
455
  this.mounted = false;
@@ -188,10 +462,10 @@ export class Reactive {
188
462
  set isOneReactive(value) {
189
463
  // No-op setter to satisfy the Interface; this property is always true for Reactive elements
190
464
  }
191
- set isOneElement(value) {
465
+ set isSaoElement(value) {
192
466
  // No-op setter to satisfy the Interface; Reactive is a type of OneElement
193
467
  }
194
- get isOneElement() {
468
+ get isSaoElement() {
195
469
  return true;
196
470
  }
197
471
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Reactive.js","sourceRoot":"","sources":["../../../../src/core/elements/Reactive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Reactive.js","sourceRoot":"","sources":["../../../../src/core/elements/Reactive.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { HtmlInterface, TextInterface } from "../contracts/ElementInterface";
2
- import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
3
- import { OneObjectType } from "../types/utils";
1
+ import type { HtmlInterface, TextInterface } from "../contracts/ElementInterface.js";
2
+ import type { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
3
+ import { SaoObjectType } from "../types/utils.js";
4
4
  /**
5
5
  * TextElement — wraps a DOM Text node.
6
6
  *
@@ -9,7 +9,7 @@ import { OneObjectType } from "../types/utils";
9
9
  * no DOM removal/insertion needed.
10
10
  */
11
11
  export declare class TextElement implements TextInterface {
12
- oneType: OneObjectType;
12
+ saoType: SaoObjectType;
13
13
  element: Text;
14
14
  parent: HtmlInterface | null;
15
15
  private ctx;
@@ -19,6 +19,7 @@ export declare class TextElement implements TextInterface {
19
19
  _text: string;
20
20
  shouldEscapeHTML: boolean;
21
21
  isStarted: boolean;
22
+ readonly isStatic: boolean;
22
23
  domChildren: Node[];
23
24
  constructor({ ctx, parent, stateKeys, generateText, isEscapeHTML }: {
24
25
  ctx: ViewControllerInterface;
@@ -33,13 +34,16 @@ export declare class TextElement implements TextInterface {
33
34
  setParentElement(parent: HtmlInterface | null): void;
34
35
  /** Update text content in-place */
35
36
  update(newText: string): void;
36
- render(): void;
37
+ render(): HTMLElement | Text | Comment;
38
+ replaceStaticText(text: string): void;
37
39
  remove(): void;
40
+ /** Registry guard — element đã destroy không được reuse */
41
+ __destroyed__: boolean;
38
42
  destroy(): void;
39
43
  get text(): string;
40
44
  set text(newText: string);
41
- get isOneElement(): boolean;
42
- set isOneElement(value: boolean);
45
+ get isSaoElement(): boolean;
46
+ set isSaoElement(value: boolean);
43
47
  get isOneText(): boolean;
44
48
  set isOneText(value: boolean);
45
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TextElement.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,aAAa;IAC7C,OAAO,EAAE,aAAa,CAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAA6B;IAChD,SAAS,CAAC,YAAY,EAAE,MAAM,MAAM,CAAoB;IACjD,KAAK,EAAE,MAAM,CAAM;IACnB,gBAAgB,EAAE,OAAO,CAAQ;IAEjC,SAAS,EAAE,OAAO,CAAS;IAGlC,WAAW,EAAE,IAAI,EAAE,CAAM;gBACb,EAAE,GAAG,EAAE,MAAa,EAAE,SAAc,EAAE,YAAuB,EAAE,YAAmB,EAAE,EAAE;QAAE,GAAG,EAAE,uBAAuB,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE;IAa5O,kCAAkC;IAClC,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAQZ,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAIpD,mCAAmC;IACnC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO7B,MAAM,IAAI,IAAI;IAMd,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IASf,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAEvB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;CACJ"}
1
+ {"version":3,"file":"TextElement.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,aAAa;IAC7C,OAAO,EAAE,aAAa,CAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAA6B;IAChD,SAAS,CAAC,YAAY,EAAE,MAAM,MAAM,CAAoB;IACjD,KAAK,EAAE,MAAM,CAAM;IACnB,gBAAgB,EAAE,OAAO,CAAQ;IAEjC,SAAS,EAAE,OAAO,CAAS;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAG3B,WAAW,EAAE,IAAI,EAAE,CAAM;gBACb,EAAE,GAAG,EAAE,MAAa,EAAE,SAAc,EAAE,YAAuB,EAAE,YAAmB,EAAE,EAAE;QAAE,GAAG,EAAE,uBAAuB,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE;IAa5O,kCAAkC;IAClC,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAQZ,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAIpD,mCAAmC;IACnC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO7B,MAAM,IAAI,WAAW,GAAG,IAAI,GAAG,OAAO;IAMtC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC,MAAM,IAAI,IAAI;IAId,2DAA2D;IACpD,aAAa,EAAE,OAAO,CAAS;IAEtC,OAAO,IAAI,IAAI;IAUf,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAEvB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;CACJ"}
@@ -1,4 +1,3 @@
1
- import { escapeHTML } from "../hellpers/utils";
2
1
  /**
3
2
  * TextElement — wraps a DOM Text node.
4
3
  *
@@ -8,7 +7,7 @@ import { escapeHTML } from "../hellpers/utils";
8
7
  */
9
8
  export class TextElement {
10
9
  constructor({ ctx, parent = null, stateKeys = [], generateText = () => '', isEscapeHTML = true }) {
11
- this.oneType = 'TextElement';
10
+ this.saoType = 'TextElement';
12
11
  this.statekeys = [];
13
12
  this.unsubscribe = null;
14
13
  this.generateText = () => this._text;
@@ -16,15 +15,17 @@ export class TextElement {
16
15
  this.shouldEscapeHTML = true; // Whether to escape HTML in text content
17
16
  this.isStarted = false;
18
17
  this.domChildren = []; // For compatibility with HtmlInterface; Text itself doesn't have a single root element
18
+ /** Registry guard — element đã destroy không được reuse */
19
+ this.__destroyed__ = false;
19
20
  this.ctx = ctx;
20
21
  this.generateText = generateText;
21
22
  this.parent = parent;
22
23
  this.statekeys = stateKeys;
24
+ this.isStatic = stateKeys.length === 0;
23
25
  this.shouldEscapeHTML = isEscapeHTML;
26
+ // FIX(baseline#3): KHÔNG escapeHTML khi ghi vào Text node — text node tự an toàn,
27
+ // escape thủ công gây double-escape. shouldEscapeHTML chỉ dùng cho SSR string path.
24
28
  this._text = this.generateText();
25
- if (this.shouldEscapeHTML) {
26
- this._text = escapeHTML(this._text);
27
- }
28
29
  this.element = document.createTextNode(this._text);
29
30
  }
30
31
  /** Start reactive text updates */
@@ -48,23 +49,29 @@ export class TextElement {
48
49
  }
49
50
  }
50
51
  setParentElement(parent) {
52
+ this.parent = parent;
51
53
  }
52
54
  /** Update text content in-place */
53
55
  update(newText) {
54
56
  if (this._text !== newText) {
55
57
  this._text = newText;
56
- this.element.textContent = this.shouldEscapeHTML ? escapeHTML(newText) : newText;
58
+ this.element.textContent = newText;
57
59
  }
58
60
  }
59
61
  render() {
60
- if (this.parent && this.parent.element) {
61
- this.parent.element.appendChild(this.element);
62
- }
62
+ const text = this.generateText();
63
+ this.update(text);
64
+ return this.element;
65
+ }
66
+ replaceStaticText(text) {
67
+ this.generateText = () => text;
68
+ this.update(text);
63
69
  }
64
70
  remove() {
65
71
  this.element.remove();
66
72
  }
67
73
  destroy() {
74
+ this.__destroyed__ = true;
68
75
  if (this.unsubscribe) {
69
76
  this.unsubscribe();
70
77
  this.unsubscribe = null;
@@ -78,10 +85,10 @@ export class TextElement {
78
85
  set text(newText) {
79
86
  this.update(newText);
80
87
  }
81
- get isOneElement() {
88
+ get isSaoElement() {
82
89
  return true;
83
90
  }
84
- set isOneElement(value) {
91
+ set isSaoElement(value) {
85
92
  // No-op setter to satisfy the Interface; this property is always true for Text elements
86
93
  }
87
94
  get isOneText() {
@@ -1 +1 @@
1
- {"version":3,"file":"TextElement.js","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextElement.js","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"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"}