@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,4 +1,4 @@
1
- import type { BlockInterface, BlockManagerInterface, BlockOutletInterface } from "../contracts/BlockInterface";
1
+ import type { BlockInterface, BlockManagerInterface, BlockOutletInterface } from "../contracts/BlockInterface.js";
2
2
  /**
3
3
  * BlockManager — manages all block slots in a layout view.
4
4
  *
@@ -39,16 +39,87 @@ export declare class BlockManagerService implements BlockManagerInterface {
39
39
  * viewId:blockName), and inserts block content between outlet markers.
40
40
  */
41
41
  mountAll(): void;
42
+ /**
43
+ * Mount only blocks owned by one Page/Layout controller. Nested layout
44
+ * chains call this from outer to inner, so an inner outlet exists before
45
+ * the next owner is mounted and retained layouts are not rebuilt.
46
+ */
47
+ mountViewBlocks(viewId: string): void;
48
+ /** Hydration counterpart of mountViewBlocks(). */
49
+ hydrateViewBlocks(viewId: string): void;
42
50
  /**
43
51
  * Mount a single block's content into an outlet.
44
- * Content is rendered and inserted between the outlet's open/close markers.
52
+ * Clear nội dung cũ trước, render content mới GIỮA outlet markers
53
+ * (cùng insertion model với Reactive — RUNTIME_CONTRACT.md §2).
45
54
  */
46
55
  private mountBlockIntoOutlet;
56
+ /**
57
+ * Hydrate version của mountAll — dùng khi SSR.
58
+ * KHÁC mountAll: KHÔNG clearOutlet (giữ DOM server), KHÔNG insertBefore.
59
+ * Chạy block factory ở HYDRATE mode → Html/Output/Reactive con CLAIM
60
+ * DOM server đã render sẵn giữa cặp marker của outlet.
61
+ *
62
+ * Tiền đề: page ctrl.initMode === HYDRATE khi gọi (để this.html() trong
63
+ * factory tạo element claim DOM thay vì tạo mới).
64
+ */
65
+ mountAllHydrate(): void;
66
+ /**
67
+ * Claim block content vào outlet (hydrate). Chạy factory, gọi render() đệ quy
68
+ * trên children để claim DOM, KHÔNG chèn node mới. Track children cho lifecycle.
69
+ */
70
+ private hydrateBlockIntoOutlet;
71
+ /** Tìm outlet theo tên (outlet key = `${layoutViewId}-ob-${name}`) */
72
+ private findOutletByName;
73
+ /**
74
+ * Detach block content của một page (rời trang, vào PageCache):
75
+ * gỡ DOM giữa markers của từng outlet vào DocumentFragment, lấy children
76
+ * đang track ra khỏi manager (KHÔNG destroy — instance sống trong cache).
77
+ *
78
+ * Trả Map<outletName, {fragment, children}> để restore sau này.
79
+ */
80
+ detachPageContent(viewId: string): Map<string, {
81
+ fragment: DocumentFragment;
82
+ children: any[];
83
+ }>;
84
+ /**
85
+ * Restore block content của một page từ PageCache vào outlets hiện tại.
86
+ * Tiền đề: layout đang mount trùng với layout lúc detach (ViewManager guard).
87
+ */
88
+ restorePageContent(viewId: string, contents: Map<string, {
89
+ fragment: DocumentFragment;
90
+ children: any[];
91
+ }>): void;
92
+ /** Start toàn bộ block content đang mounted (gọi sau mountAll) */
93
+ startAll(): void;
94
+ /** Stop toàn bộ block content (trước khi swap page) */
95
+ stopAll(): void;
96
+ /**
97
+ * Gỡ mọi dấu vết của một view (page bị destroy):
98
+ * clear outlet đang chứa content của nó + xoá block đăng ký.
99
+ */
100
+ unmountView(viewId: string): void;
101
+ /**
102
+ * Gỡ outlets của một layout khỏi registry mà KHÔNG destroy — layout pause
103
+ * vào PageCache. Nếu để lại, mountAll/findOutletByName có thể đụng outlet
104
+ * (trùng tên) của layout đang detached. Re-register khi resume qua
105
+ * addOutlet (ViewManager.reregisterLayoutOutlets).
106
+ */
107
+ detachOutletsOfView(viewId: string): void;
108
+ /**
109
+ * Gỡ outlets của một layout bị destroy — XOÁ THẬT, khác hẳn
110
+ * `detachOutletsOfView` ở ngay trên (layout chỉ pause vào PageCache và sẽ
111
+ * được re-register, nên KHÔNG được destroy ở đó).
112
+ * `destroy()` idempotent nên gọi ở đây an toàn kể cả khi teardown cây
113
+ * element đã destroy outlet trước đó.
114
+ */
115
+ removeOutletsOfView(viewId: string): void;
47
116
  /**
48
117
  * Clear content from a specific outlet (for page swap).
49
118
  * Removes all DOM nodes between a named outlet's markers.
50
119
  */
51
120
  clearOutlet(name: string): void;
121
+ private outletKey;
122
+ private clearOutletInstance;
52
123
  /**
53
124
  * Clear all outlets (for full layout teardown).
54
125
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BlockManager.d.ts","sourceRoot":"","sources":["../../../../src/core/services/BlockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAsB,MAAM,6BAA6B,CAAC;AAKnI;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAoB,YAAW,qBAAqB;IAC7D,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAChD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAC5D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IACtD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,EAAE,CAAC,CAAa;IAExE,2DAA2D;IAC3D,OAAO,CAAC,eAAe,CAAiC;;IAIxD,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAQhC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ9E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAe3E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAM1D,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIxD;;;;;;OAMG;IACH,QAAQ,IAAI,IAAI;IAchB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAwC5B;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA2B/B;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQlB;AAED,eAAO,MAAM,YAAY,qBAA4B,CAAC;AACtD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"BlockManager.d.ts","sourceRoot":"","sources":["../../../../src/core/services/BlockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAsB,MAAM,gCAAgC,CAAC;AAKtI;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAoB,YAAW,qBAAqB;IAC7D,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAChD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAC5D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IACtD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,EAAE,CAAC,CAAa;IAExE,2DAA2D;IAC3D,OAAO,CAAC,eAAe,CAAiC;;IAIxD,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAQhC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ9E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAe3E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAM1D,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIxD;;;;;;OAMG;IACH,QAAQ,IAAI,IAAI;IAYhB;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUrC,kDAAkD;IAClD,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUvC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAyD5B;;;;;;;;OAQG;IACH,eAAe,IAAI,IAAI;IAUvB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAyB9B,sEAAsE;IACtE,OAAO,CAAC,gBAAgB;IASxB;;;;;;OAMG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,QAAQ,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAyB/F;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,QAAQ,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,GAAG,IAAI;IAehH,kEAAkE;IAClE,QAAQ,IAAI,IAAI;IAQhB,uDAAuD;IACvD,OAAO,IAAI,IAAI;IAQf;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAoBjC;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQzC;;;;;;OAMG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUzC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQlB;AAED,eAAO,MAAM,YAAY,qBAA4B,CAAC;AACtD,eAAe,YAAY,CAAC"}
@@ -83,95 +83,317 @@ export class BlockManagerService {
83
83
  * viewId:blockName), and inserts block content between outlet markers.
84
84
  */
85
85
  mountAll() {
86
- for (const [name, block] of this.activeBlocks) {
87
- // Try to find an outlet that matches this block name
88
- for (const [outletKey, outlet] of this.blockOutlets) {
89
- if (outletKey.endsWith(`:${name}`) || outlet.name === name) {
90
- if (block.contentRenderFactory) {
91
- this.mountBlockIntoOutlet(block, outlet);
92
- }
93
- break;
94
- }
86
+ // Mount block content vào outlet cùng tên; outlet không có block active → clear về rỗng
87
+ for (const [, outlet] of this.blockOutlets) {
88
+ const block = this.activeBlocks.get(outlet.name);
89
+ if (block && block.contentRenderFactory) {
90
+ this.mountBlockIntoOutlet(block, outlet);
91
+ }
92
+ else {
93
+ this.clearOutletInstance(outlet);
95
94
  }
96
95
  }
97
96
  }
97
+ /**
98
+ * Mount only blocks owned by one Page/Layout controller. Nested layout
99
+ * chains call this from outer to inner, so an inner outlet exists before
100
+ * the next owner is mounted and retained layouts are not rebuilt.
101
+ */
102
+ mountViewBlocks(viewId) {
103
+ for (const [, block] of this.blocks) {
104
+ if (block.viewId !== viewId || !block.contentRenderFactory)
105
+ continue;
106
+ const outlet = this.findOutletByName(block.name);
107
+ if (!outlet)
108
+ continue;
109
+ this.activeBlocks.set(block.name, block);
110
+ this.mountBlockIntoOutlet(block, outlet);
111
+ }
112
+ }
113
+ /** Hydration counterpart of mountViewBlocks(). */
114
+ hydrateViewBlocks(viewId) {
115
+ for (const [, block] of this.blocks) {
116
+ if (block.viewId !== viewId || !block.contentRenderFactory)
117
+ continue;
118
+ const outlet = this.findOutletByName(block.name);
119
+ if (!outlet)
120
+ continue;
121
+ this.activeBlocks.set(block.name, block);
122
+ this.hydrateBlockIntoOutlet(block, outlet);
123
+ }
124
+ }
98
125
  /**
99
126
  * Mount a single block's content into an outlet.
100
- * Content is rendered and inserted between the outlet's open/close markers.
127
+ * Clear nội dung cũ trước, render content mới GIỮA outlet markers
128
+ * (cùng insertion model với Reactive — RUNTIME_CONTRACT.md §2).
101
129
  */
102
130
  mountBlockIntoOutlet(block, outlet) {
103
- if (!outlet.parentElement?.element)
104
- return;
105
- const parentEl = outlet.parentElement.element;
131
+ if (!outlet.openTag.parentNode)
132
+ return; // outlet chưa nằm trong DOM
133
+ // Clear nội dung cũ (page trước) trước khi mount page mới
134
+ this.clearOutletInstance(outlet);
106
135
  const children = [];
107
- // Render block content using the factory
108
- const content = block.contentRenderFactory(block.ctx);
109
- if (!Array.isArray(content))
110
- return;
111
- // Insert each child between outlet markers
112
- for (const child of content) {
136
+ const insertBeforeClose = (node) => {
137
+ outlet.closeTag.parentNode?.insertBefore(node, outlet.closeTag);
138
+ };
139
+ // Render block content using the factory — elements thuộc về PAGE ctrl
140
+ const content = block.contentRenderFactory(outlet.parentElement);
141
+ // Marker `s:b:` của chính block phải bao quanh content — Blade emit cặp này
142
+ // trong @block (ViewStorageManager::getMarkerOpenTag), nên thiếu nó ở đây là
143
+ // DOM sau SPA nav khác DOM từ server: hydrate lần sau không tìm ra block để
144
+ // claim, và cổng tests/e2e/ssr-csr-parity thấy marker lệch một phía.
145
+ // Block dựng sẵn openTag/closeTag trong constructor; chỗ chèn là ở đây, cùng
146
+ // insertion model với content (RUNTIME_CONTRACT.md §2).
147
+ insertBeforeClose(block.openTag);
148
+ // Content không phải mảng vẫn phải đóng marker — block rỗng ở server là cặp
149
+ // marker liền nhau, không phải không có marker.
150
+ for (const child of Array.isArray(content) ? content : []) {
151
+ if (child === null || child === undefined)
152
+ continue;
113
153
  if (typeof child === 'string' || typeof child === 'number') {
114
- const textNode = document.createTextNode(String(child));
115
- parentEl.insertBefore(textNode, outlet.closeTag);
154
+ insertBeforeClose(document.createTextNode(String(child)));
116
155
  }
117
- else if (child && typeof child === 'object') {
118
- if ('element' in child) {
119
- // HtmlInterface, TextInterface
120
- parentEl.insertBefore(child.element, outlet.closeTag);
156
+ else if (child instanceof Node) {
157
+ insertBeforeClose(child);
158
+ }
159
+ else if (typeof child === 'object') {
160
+ if ('element' in child && child.element) {
161
+ insertBeforeClose(child.element);
121
162
  children.push(child);
122
163
  child.render();
123
164
  }
124
165
  else if ('openTag' in child) {
125
- // Reactive, Fragment, Output — set parent, render
166
+ // Marker-based: đặt markers đúng vị trí trước, render sau (idempotent)
126
167
  if ('parent' in child) {
127
168
  child.parent = outlet.parentElement;
128
169
  }
129
170
  if ('parentElement' in child) {
130
171
  child.parentElement = outlet.parentElement;
131
172
  }
173
+ insertBeforeClose(child.openTag);
174
+ insertBeforeClose(child.closeTag);
132
175
  children.push(child);
133
176
  child.render();
134
177
  }
135
178
  }
136
179
  }
137
- // Track mounted children for cleanup
138
- this.mountedChildren.set(outlet.name, children);
180
+ insertBeforeClose(block.closeTag);
181
+ // Track mounted children for lifecycle (start/stop/destroy)
182
+ this.mountedChildren.set(this.outletKey(outlet), children);
139
183
  }
140
184
  /**
141
- * Clear content from a specific outlet (for page swap).
142
- * Removes all DOM nodes between a named outlet's markers.
185
+ * Hydrate version của mountAll — dùng khi SSR.
186
+ * KHÁC mountAll: KHÔNG clearOutlet (giữ DOM server), KHÔNG insertBefore.
187
+ * Chạy block factory ở HYDRATE mode → Html/Output/Reactive con CLAIM
188
+ * DOM server đã render sẵn giữa cặp marker của outlet.
189
+ *
190
+ * Tiền đề: page ctrl.initMode === HYDRATE khi gọi (để this.html() trong
191
+ * factory tạo element claim DOM thay vì tạo mới).
143
192
  */
144
- clearOutlet(name) {
145
- // Find outlet by name
146
- for (const [key, outlet] of this.blockOutlets) {
147
- if (outlet.name === name) {
148
- // Destroy tracked children first
149
- const children = this.mountedChildren.get(name) || [];
150
- if (children) {
151
- for (const child of children) {
152
- if ('destroy' in child && typeof child.destroy === 'function') {
153
- child.destroy();
154
- }
155
- }
156
- this.mountedChildren.delete(name);
193
+ mountAllHydrate() {
194
+ for (const [, outlet] of this.blockOutlets) {
195
+ const block = this.activeBlocks.get(outlet.name);
196
+ if (block && block.contentRenderFactory) {
197
+ this.hydrateBlockIntoOutlet(block, outlet);
198
+ }
199
+ // outlet không có block active → để nguyên DOM server (thường rỗng)
200
+ }
201
+ }
202
+ /**
203
+ * Claim block content vào outlet (hydrate). Chạy factory, gọi render() đệ quy
204
+ * trên children để claim DOM, KHÔNG chèn node mới. Track children cho lifecycle.
205
+ */
206
+ hydrateBlockIntoOutlet(block, outlet) {
207
+ const children = [];
208
+ const content = block.contentRenderFactory(outlet.parentElement);
209
+ if (!Array.isArray(content))
210
+ return;
211
+ for (const child of content) {
212
+ if (child === null || child === undefined)
213
+ continue;
214
+ if (typeof child === 'string' || typeof child === 'number')
215
+ continue; // text: giữ server
216
+ if (child instanceof Node)
217
+ continue;
218
+ if (typeof child === 'object') {
219
+ if ('element' in child && child.element) {
220
+ children.push(child);
221
+ child.render(); // HYDRATE: Html claim DOM, không chèn
222
+ }
223
+ else if ('openTag' in child) {
224
+ if ('parent' in child)
225
+ child.parent = outlet.parentElement;
226
+ if ('parentElement' in child)
227
+ child.parentElement = outlet.parentElement;
228
+ children.push(child);
229
+ child.render(); // HYDRATE: Output/Reactive claim markers
157
230
  }
158
- // Remove any remaining DOM nodes between markers
231
+ }
232
+ }
233
+ this.mountedChildren.set(this.outletKey(outlet), children);
234
+ }
235
+ /** Tìm outlet theo tên (outlet key = `${layoutViewId}-ob-${name}`) */
236
+ findOutletByName(name) {
237
+ let found = null;
238
+ for (const [, outlet] of this.blockOutlets) {
239
+ if (outlet.name === name)
240
+ found = outlet;
241
+ }
242
+ // Nearest/deepest outlet is registered last while mounting a nested chain.
243
+ return found;
244
+ }
245
+ /**
246
+ * Detach block content của một page (rời trang, vào PageCache):
247
+ * gỡ DOM giữa markers của từng outlet vào DocumentFragment, lấy children
248
+ * đang track ra khỏi manager (KHÔNG destroy — instance sống trong cache).
249
+ *
250
+ * Trả Map<outletName, {fragment, children}> để restore sau này.
251
+ */
252
+ detachPageContent(viewId) {
253
+ const result = new Map();
254
+ for (const [name, block] of Array.from(this.activeBlocks)) {
255
+ if (block.viewId !== viewId)
256
+ continue;
257
+ const fragment = document.createDocumentFragment();
258
+ const outlet = this.findOutletByName(name);
259
+ if (outlet && outlet.openTag.parentNode) {
159
260
  let current = outlet.openTag.nextSibling;
160
261
  while (current && current !== outlet.closeTag) {
161
262
  const next = current.nextSibling;
162
- current.remove();
263
+ fragment.appendChild(current); // appendChild tự remove khỏi DOM
163
264
  current = next;
164
265
  }
165
- break;
166
266
  }
267
+ const outletKey = outlet ? this.outletKey(outlet) : name;
268
+ const children = this.mountedChildren.get(outletKey) ?? [];
269
+ this.mountedChildren.delete(outletKey);
270
+ this.activeBlocks.delete(name); // page rời đi — không còn active ở outlet này
271
+ result.set(name, { fragment, children });
272
+ }
273
+ return result;
274
+ }
275
+ /**
276
+ * Restore block content của một page từ PageCache vào outlets hiện tại.
277
+ * Tiền đề: layout đang mount trùng với layout lúc detach (ViewManager guard).
278
+ */
279
+ restorePageContent(viewId, contents) {
280
+ for (const [name, { fragment, children }] of contents) {
281
+ const outlet = this.findOutletByName(name);
282
+ if (outlet && outlet.closeTag.parentNode) {
283
+ outlet.closeTag.parentNode.insertBefore(fragment, outlet.closeTag);
284
+ }
285
+ if (outlet)
286
+ this.mountedChildren.set(this.outletKey(outlet), children);
287
+ // Re-activate block của page này (blocks map còn giữ — pause không xoá)
288
+ const block = this.blocks.get(name + viewId);
289
+ if (block) {
290
+ this.activeBlocks.set(name, block);
291
+ }
292
+ }
293
+ }
294
+ /** Start toàn bộ block content đang mounted (gọi sau mountAll) */
295
+ startAll() {
296
+ for (const [, children] of this.mountedChildren) {
297
+ for (const child of children) {
298
+ if (child && typeof child.start === 'function')
299
+ child.start();
300
+ }
301
+ }
302
+ }
303
+ /** Stop toàn bộ block content (trước khi swap page) */
304
+ stopAll() {
305
+ for (const [, children] of this.mountedChildren) {
306
+ for (const child of children) {
307
+ if (child && typeof child.stop === 'function')
308
+ child.stop();
309
+ }
310
+ }
311
+ }
312
+ /**
313
+ * Gỡ mọi dấu vết của một view (page bị destroy):
314
+ * clear outlet đang chứa content của nó + xoá block đăng ký.
315
+ */
316
+ unmountView(viewId) {
317
+ for (const [name, block] of this.activeBlocks) {
318
+ if (block.viewId === viewId) {
319
+ this.clearOutlet(name);
320
+ this.activeBlocks.delete(name);
321
+ }
322
+ }
323
+ for (const [key, block] of this.blocks) {
324
+ if (block.viewId === viewId) {
325
+ // destroy TRƯỚC khi rời Map. Block KHÔNG nằm trong ctrl.elements
326
+ // nên teardown cây element không bao giờ chạm tới nó — đây là chỗ
327
+ // DUY NHẤT gỡ được record marker toàn cục của nó. Thiếu dòng này
328
+ // thì MarkerRegistry (singleton, sống qua navigate) tăng đúng 1
329
+ // record mỗi lần điều hướng, vĩnh viễn.
330
+ block.destroy?.();
331
+ this.blocks.delete(key);
332
+ }
333
+ }
334
+ }
335
+ /**
336
+ * Gỡ outlets của một layout khỏi registry mà KHÔNG destroy — layout pause
337
+ * vào PageCache. Nếu để lại, mountAll/findOutletByName có thể đụng outlet
338
+ * (trùng tên) của layout đang detached. Re-register khi resume qua
339
+ * addOutlet (ViewManager.reregisterLayoutOutlets).
340
+ */
341
+ detachOutletsOfView(viewId) {
342
+ for (const [key, outlet] of this.blockOutlets) {
343
+ if (outlet.ctx?.viewId === viewId) {
344
+ this.blockOutlets.delete(key);
345
+ }
346
+ }
347
+ }
348
+ /**
349
+ * Gỡ outlets của một layout bị destroy — XOÁ THẬT, khác hẳn
350
+ * `detachOutletsOfView` ở ngay trên (layout chỉ pause vào PageCache và sẽ
351
+ * được re-register, nên KHÔNG được destroy ở đó).
352
+ * `destroy()` idempotent nên gọi ở đây an toàn kể cả khi teardown cây
353
+ * element đã destroy outlet trước đó.
354
+ */
355
+ removeOutletsOfView(viewId) {
356
+ for (const [key, outlet] of this.blockOutlets) {
357
+ if (outlet.ctx?.viewId === viewId) {
358
+ this.mountedChildren.delete(this.outletKey(outlet));
359
+ outlet.destroy?.();
360
+ this.blockOutlets.delete(key);
361
+ }
362
+ }
363
+ }
364
+ /**
365
+ * Clear content from a specific outlet (for page swap).
366
+ * Removes all DOM nodes between a named outlet's markers.
367
+ */
368
+ clearOutlet(name) {
369
+ const outlet = this.findOutletByName(name);
370
+ if (outlet)
371
+ this.clearOutletInstance(outlet);
372
+ }
373
+ outletKey(outlet) {
374
+ return String(outlet.id ?? `${outlet.ctx?.viewId ?? ''}:${outlet.name}`);
375
+ }
376
+ clearOutletInstance(outlet) {
377
+ const key = this.outletKey(outlet);
378
+ const children = this.mountedChildren.get(key) ?? [];
379
+ for (const child of children) {
380
+ if ('destroy' in child && typeof child.destroy === 'function')
381
+ child.destroy();
382
+ }
383
+ this.mountedChildren.delete(key);
384
+ let current = outlet.openTag.nextSibling;
385
+ while (current && current !== outlet.closeTag) {
386
+ const next = current.nextSibling;
387
+ current.remove();
388
+ current = next;
167
389
  }
168
390
  }
169
391
  /**
170
392
  * Clear all outlets (for full layout teardown).
171
393
  */
172
394
  clearAllOutlets() {
173
- for (const [key, outlet] of this.blockOutlets) {
174
- this.clearOutlet(outlet.name);
395
+ for (const [, outlet] of this.blockOutlets) {
396
+ this.clearOutletInstance(outlet);
175
397
  }
176
398
  }
177
399
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BlockManager.js","sourceRoot":"","sources":["../../../../src/core/services/BlockManager.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,mBAAmB;IAS5B;QARA,WAAM,GAAgC,IAAI,GAAG,EAAE,CAAC;QAChD,iBAAY,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC5D,iBAAY,GAAgC,IAAI,GAAG,EAAE,CAAC;QACtD,cAAS,GAAqD,IAAI,GAAG,EAAE,CAAC;QAExE,2DAA2D;QACnD,oBAAe,GAAuB,IAAI,GAAG,EAAE,CAAC;IAEzC,CAAC;IAEhB,GAAG,CAAC,KAAqB;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,MAAc;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACZ,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;IACL,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,QAAyC;QAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,QAA0C;QAChE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,MAA4B;QAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,QAAQ;QACJ,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,qDAAqD;YACrD,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClD,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACzD,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;wBAC7B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC7C,CAAC;oBACD,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,oBAAoB,CAAC,KAAqB,EAAE,MAA4B;QAC5E,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO;YAAE,OAAO;QAE3C,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAU,EAAE,CAAC;QAE3B,yCAAyC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAqB,CAAC,KAAK,CAAC,GAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO;QAEpC,2CAA2C;QAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,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,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;oBACrB,+BAA+B;oBAC/B,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACtD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnB,CAAC;qBAAM,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;oBAC5B,kDAAkD;oBAClD,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;wBACnB,KAAa,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;oBACjD,CAAC;oBACD,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;wBAC1B,KAAa,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;oBACxD,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACpB,sBAAsB;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACvB,iCAAiC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,QAAQ,EAAE,CAAC;oBACX,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC3B,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;4BAC5D,KAAK,CAAC,OAAO,EAAE,CAAC;wBACpB,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;gBAED,iDAAiD;gBACjD,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;gBACzC,OAAO,OAAO,IAAI,OAAO,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;oBACjC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,GAAG,IAAI,CAAC;gBACnB,CAAC;gBACD,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,eAAe;QACX,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,mBAAmB,EAAE,CAAC;AACtD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"BlockManager.js","sourceRoot":"","sources":["../../../../src/core/services/BlockManager.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import { app } from "../hellpers/app";
1
+ import { app } from "../helpers/app.js";
2
2
  export class DomService {
3
3
  constructor() {
4
4
  this.container = document.createElement('template');
5
5
  }
6
6
  parse(html) {
7
7
  this.container.innerHTML = html;
8
- const content = this.container.content;
8
+ const nodes = Array.from(this.container.content.childNodes);
9
9
  this.container.innerHTML = ''; // Clear template content to free memory
10
- return Array.from(content.childNodes);
10
+ return nodes;
11
11
  }
12
12
  create(tagName, options) {
13
13
  return document.createElement(tagName, options);
@@ -1 +1 @@
1
- {"version":3,"file":"DomService.js","sourceRoot":"","sources":["../../../../src/core/services/DomService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,MAAM,OAAO,UAAU;IAEnB;QACI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,IAAY;QACd,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,wCAAwC;QACvE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,OAAe,EAAE,OAAgC;QACpD,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CAGJ;AAID,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AACnC,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"DomService.js","sourceRoot":"","sources":["../../../../src/core/services/DomService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAGxC,MAAM,OAAO,UAAU;IAEnB;QACI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,IAAY;QACd,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,wCAAwC;QACvE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,CAAC,OAAe,EAAE,OAAgC;QACpD,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CAGJ;AAID,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AACnC,eAAe,GAAG,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { HeadLinkOptions, HeadServiceInterface, HeadTagOptions } from "../contracts/HeadServiceInterface.js";
2
+ /**
3
+ * HeadService — the single place that writes to `<head>` (title, meta, link,
4
+ * JSON-LD). Independent of any View: callable from anywhere via `app('Head')`
5
+ * / `App.Head`. Reuses whatever the server already rendered there (SSR's
6
+ * `<title>`, `<meta name="description">`, ...) instead of creating
7
+ * duplicates, and snapshots the pre-managed value so `resetPage()` can put it
8
+ * back — the fix for tags leaking from one SPA-navigated page into the next.
9
+ */
10
+ export declare class HeadServiceImpl implements HeadServiceInterface {
11
+ private managed;
12
+ setTitle(title: string, options?: HeadTagOptions): void;
13
+ setMeta(name: string, content: string, options?: HeadTagOptions): void;
14
+ setMetaProperty(property: string, content: string, options?: HeadTagOptions): void;
15
+ setLink(rel: string, href: string, options?: HeadLinkOptions): void;
16
+ setJsonLd(id: string, data: Record<string, any>, options?: HeadTagOptions): void;
17
+ unset(key: string): void;
18
+ resetPage(): void;
19
+ /** Find-or-create an element by `identAttrs`, snapshot `valueAttr` once, then apply the new value. */
20
+ private setAttrTag;
21
+ }
22
+ export declare const HeadService: HeadServiceImpl;
23
+ export default HeadService;
24
+ //# sourceMappingURL=HeadService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadService.d.ts","sourceRoot":"","sources":["../../../../src/core/services/HeadService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAgB,MAAM,sCAAsC,CAAC;AAQhI;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,oBAAoB;IACxD,OAAO,CAAC,OAAO,CAA4C;IAE3D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,IAAI;IAa3D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,IAAI;IAI1E,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,IAAI;IAItF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAMvE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAE,cAAmB,GAAG,IAAI;IA6BpF,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOxB,SAAS,IAAI,IAAI;IAQjB,sGAAsG;IACtG,OAAO,CAAC,UAAU;CA6BrB;AAED,eAAO,MAAM,WAAW,iBAAwB,CAAC;AACjD,eAAe,WAAW,CAAC"}