@saolabs/client 1.0.0 → 1.1.0

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 (383) 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 +25 -15
  9. package/dist/src/core/app/Application.d.ts.map +1 -1
  10. package/dist/src/core/app/Application.js +55 -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 +77 -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 +129 -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 +15 -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/helpers/ApiClient.d.ts.map +1 -0
  178. package/dist/src/core/{hellpers → helpers}/ApiClient.js +10 -1
  179. package/dist/src/core/helpers/ApiClient.js.map +1 -0
  180. package/dist/src/core/helpers/app.d.ts +3 -0
  181. package/dist/src/core/helpers/app.d.ts.map +1 -0
  182. package/dist/src/core/{hellpers → helpers}/app.js +11 -1
  183. package/dist/src/core/helpers/app.js.map +1 -0
  184. package/dist/src/core/helpers/transition.d.ts +34 -0
  185. package/dist/src/core/helpers/transition.d.ts.map +1 -0
  186. package/dist/src/core/helpers/transition.js +118 -0
  187. package/dist/src/core/helpers/transition.js.map +1 -0
  188. package/dist/src/core/{hellpers → helpers}/utils.d.ts +2 -2
  189. package/dist/src/core/helpers/utils.d.ts.map +1 -0
  190. package/dist/src/core/{hellpers → helpers}/utils.js +4 -4
  191. package/dist/src/core/helpers/utils.js.map +1 -0
  192. package/dist/src/core/helpers/view.d.ts +39 -0
  193. package/dist/src/core/helpers/view.d.ts.map +1 -0
  194. package/dist/src/core/helpers/view.js +286 -0
  195. package/dist/src/core/helpers/view.js.map +1 -0
  196. package/dist/src/core/routers/Router.d.ts +108 -7
  197. package/dist/src/core/routers/Router.d.ts.map +1 -1
  198. package/dist/src/core/routers/Router.js +444 -68
  199. package/dist/src/core/routers/Router.js.map +1 -1
  200. package/dist/src/core/routers/index.d.ts +2 -2
  201. package/dist/src/core/routers/index.d.ts.map +1 -1
  202. package/dist/src/core/routers/index.js +1 -1
  203. package/dist/src/core/routers/index.js.map +1 -1
  204. package/dist/src/core/services/AssetManager.d.ts +112 -0
  205. package/dist/src/core/services/AssetManager.d.ts.map +1 -0
  206. package/dist/src/core/services/AssetManager.js +361 -0
  207. package/dist/src/core/services/AssetManager.js.map +1 -0
  208. package/dist/src/core/services/BlockManager.d.ts +73 -2
  209. package/dist/src/core/services/BlockManager.d.ts.map +1 -1
  210. package/dist/src/core/services/BlockManager.js +270 -48
  211. package/dist/src/core/services/BlockManager.js.map +1 -1
  212. package/dist/src/core/services/DomService.js +3 -3
  213. package/dist/src/core/services/DomService.js.map +1 -1
  214. package/dist/src/core/services/HeadService.d.ts +24 -0
  215. package/dist/src/core/services/HeadService.d.ts.map +1 -0
  216. package/dist/src/core/services/HeadService.js +120 -0
  217. package/dist/src/core/services/HeadService.js.map +1 -0
  218. package/dist/src/core/services/HelperService.d.ts +14 -3
  219. package/dist/src/core/services/HelperService.d.ts.map +1 -1
  220. package/dist/src/core/services/HelperService.js +32 -2
  221. package/dist/src/core/services/HelperService.js.map +1 -1
  222. package/dist/src/core/services/HttpService.d.ts +8 -0
  223. package/dist/src/core/services/HttpService.d.ts.map +1 -1
  224. package/dist/src/core/services/HttpService.js +121 -47
  225. package/dist/src/core/services/HttpService.js.map +1 -1
  226. package/dist/src/core/services/MarkerRegistry.d.ts +51 -8
  227. package/dist/src/core/services/MarkerRegistry.d.ts.map +1 -1
  228. package/dist/src/core/services/MarkerRegistry.js +135 -14
  229. package/dist/src/core/services/MarkerRegistry.js.map +1 -1
  230. package/dist/src/core/services/PageCache.d.ts +101 -0
  231. package/dist/src/core/services/PageCache.d.ts.map +1 -0
  232. package/dist/src/core/services/PageCache.js +184 -0
  233. package/dist/src/core/services/PageCache.js.map +1 -0
  234. package/dist/src/core/services/SectionManager.d.ts +100 -0
  235. package/dist/src/core/services/SectionManager.d.ts.map +1 -0
  236. package/dist/src/core/services/SectionManager.js +408 -0
  237. package/dist/src/core/services/SectionManager.js.map +1 -0
  238. package/dist/src/core/services/StorageService.js +1 -1
  239. package/dist/src/core/services/TranslationService.d.ts +21 -0
  240. package/dist/src/core/services/TranslationService.d.ts.map +1 -0
  241. package/dist/src/core/services/TranslationService.js +95 -0
  242. package/dist/src/core/services/TranslationService.js.map +1 -0
  243. package/dist/src/core/services/index.d.ts +11 -8
  244. package/dist/src/core/services/index.d.ts.map +1 -1
  245. package/dist/src/core/services/index.js +11 -8
  246. package/dist/src/core/services/index.js.map +1 -1
  247. package/dist/src/core/types/utils.d.ts +8 -8
  248. package/dist/src/core/types/utils.d.ts.map +1 -1
  249. package/dist/src/core/view/LoopContext.d.ts +21 -1
  250. package/dist/src/core/view/LoopContext.d.ts.map +1 -1
  251. package/dist/src/core/view/LoopContext.js +36 -0
  252. package/dist/src/core/view/LoopContext.js.map +1 -1
  253. package/dist/src/core/view/ResourceScope.d.ts +38 -0
  254. package/dist/src/core/view/ResourceScope.d.ts.map +1 -0
  255. package/dist/src/core/view/ResourceScope.js +167 -0
  256. package/dist/src/core/view/ResourceScope.js.map +1 -0
  257. package/dist/src/core/view/Section.d.ts +17 -32
  258. package/dist/src/core/view/Section.d.ts.map +1 -1
  259. package/dist/src/core/view/Section.js +14 -55
  260. package/dist/src/core/view/Section.js.map +1 -1
  261. package/dist/src/core/view/View.d.ts +43 -7
  262. package/dist/src/core/view/View.d.ts.map +1 -1
  263. package/dist/src/core/view/View.js +22 -4
  264. package/dist/src/core/view/View.js.map +1 -1
  265. package/dist/src/core/view/ViewController.d.ts +313 -40
  266. package/dist/src/core/view/ViewController.d.ts.map +1 -1
  267. package/dist/src/core/view/ViewController.js +1002 -147
  268. package/dist/src/core/view/ViewController.js.map +1 -1
  269. package/dist/src/core/view/ViewManager.d.ts +318 -27
  270. package/dist/src/core/view/ViewManager.d.ts.map +1 -1
  271. package/dist/src/core/view/ViewManager.js +1199 -258
  272. package/dist/src/core/view/ViewManager.js.map +1 -1
  273. package/dist/src/core/view/ViewState.d.ts +185 -6
  274. package/dist/src/core/view/ViewState.d.ts.map +1 -1
  275. package/dist/src/core/view/ViewState.js +851 -123
  276. package/dist/src/core/view/ViewState.js.map +1 -1
  277. package/dist/src/core/view/index.d.ts +5 -5
  278. package/dist/src/core/view/index.d.ts.map +1 -1
  279. package/dist/src/core/view/index.js +5 -5
  280. package/dist/src/core/view/index.js.map +1 -1
  281. package/dist/src/testing/index.d.ts +69 -0
  282. package/dist/src/testing/index.d.ts.map +1 -0
  283. package/dist/src/testing/index.js +140 -0
  284. package/dist/src/testing/index.js.map +1 -0
  285. package/index.ts +29 -5
  286. package/package.json +30 -21
  287. package/plugins.ts +2 -2
  288. package/src/core/app/Application.ts +72 -31
  289. package/src/core/bootstrap/app.ts +84 -6
  290. package/src/core/bootstrap/bundle.ts +101 -0
  291. package/src/core/bootstrap/providers/ApiServiceProvider.ts +4 -4
  292. package/src/core/bootstrap/providers/CoreServiceProvider.ts +14 -8
  293. package/src/core/bootstrap/providers/HelperServiceProvider.ts +8 -3
  294. package/src/core/bootstrap/providers/RouteServiceProvider.ts +15 -4
  295. package/src/core/bootstrap/providers/ServiceProvider.ts +8 -8
  296. package/src/core/bootstrap/providers/ViewServiceProvider.ts +3 -3
  297. package/src/core/bootstrap/providers/default-providers.ts +51 -16
  298. package/src/core/bootstrap/providers/index.ts +9 -9
  299. package/src/core/bootstrap/providers/provider-order.test.ts +16 -27
  300. package/src/core/bootstrap/providers/provider-order.ts +1 -1
  301. package/src/core/bootstrap/ssr.ts +141 -0
  302. package/src/core/cache/ViewCache.ts +1 -1
  303. package/src/core/cache/index.ts +1 -1
  304. package/src/core/contracts/ApplicationInterface.ts +15 -11
  305. package/src/core/contracts/BlockInterface.ts +18 -18
  306. package/src/core/contracts/BundleInterface.ts +40 -0
  307. package/src/core/contracts/ComponentInterface.ts +7 -6
  308. package/src/core/contracts/ElementInterface.ts +95 -27
  309. package/src/core/contracts/HeadServiceInterface.ts +41 -0
  310. package/src/core/contracts/HelperInterface.ts +9 -1
  311. package/src/core/contracts/HttpServiceInterface.ts +3 -0
  312. package/src/core/contracts/MarkerInterface.ts +22 -49
  313. package/src/core/contracts/ReactiveInterface.ts +9 -9
  314. package/src/core/contracts/RouterInterface.ts +5 -2
  315. package/src/core/contracts/SectionInterface.ts +49 -0
  316. package/src/core/contracts/ServiceProviderInterface.ts +3 -3
  317. package/src/core/contracts/ViewControllerInterface.ts +124 -16
  318. package/src/core/contracts/ViewInterface.ts +34 -5
  319. package/src/core/contracts/ViewManagerInterface.ts +40 -5
  320. package/src/core/contracts/ViewStateInterface.ts +39 -2
  321. package/src/core/contracts/common.ts +3 -3
  322. package/src/core/contracts/utils.ts +19 -19
  323. package/src/core/contracts/views.ts +2 -22
  324. package/src/core/devtools/hook.ts +142 -0
  325. package/src/core/devtools/index.ts +38 -0
  326. package/src/core/devtools/inspector.ts +270 -0
  327. package/src/core/elements/Block.ts +43 -21
  328. package/src/core/elements/BlockOutlet.ts +61 -21
  329. package/src/core/elements/Component.ts +352 -18
  330. package/src/core/elements/ElementManager.ts +9 -9
  331. package/src/core/elements/ForeachSlotCache.ts +170 -0
  332. package/src/core/elements/Fragment.ts +50 -32
  333. package/src/core/elements/Html.ts +696 -117
  334. package/src/core/elements/Output.ts +147 -30
  335. package/src/core/elements/Reactive.ts +329 -52
  336. package/src/core/elements/TextElement.ts +25 -16
  337. package/src/core/elements/Wrapper.ts +84 -18
  338. package/src/core/elements/Yield.ts +35 -24
  339. package/src/core/elements/helpers.ts +12 -12
  340. package/src/core/elements/index.ts +25 -24
  341. package/src/core/elements/reconcileChildren.ts +70 -0
  342. package/src/core/{hellpers → helpers}/ApiClient.ts +8 -1
  343. package/src/core/{hellpers → helpers}/app.ts +13 -2
  344. package/src/core/helpers/transition.ts +127 -0
  345. package/src/core/{hellpers → helpers}/utils.ts +4 -4
  346. package/src/core/helpers/view.ts +283 -0
  347. package/src/core/routers/Router.ts +458 -64
  348. package/src/core/routers/index.ts +2 -2
  349. package/src/core/services/AssetManager.ts +387 -0
  350. package/src/core/services/BlockManager.ts +272 -50
  351. package/src/core/services/DomService.ts +3 -3
  352. package/src/core/services/HeadService.ts +124 -0
  353. package/src/core/services/HelperService.ts +34 -4
  354. package/src/core/services/HttpService.ts +116 -55
  355. package/src/core/services/MarkerRegistry.ts +142 -16
  356. package/src/core/services/PageCache.ts +239 -0
  357. package/src/core/services/SectionManager.ts +387 -0
  358. package/src/core/services/StorageService.ts +1 -1
  359. package/src/core/services/TranslationService.ts +91 -0
  360. package/src/core/services/index.ts +11 -8
  361. package/src/core/types/utils.ts +8 -8
  362. package/src/core/view/LoopContext.ts +38 -1
  363. package/src/core/view/ResourceScope.ts +174 -0
  364. package/src/core/view/Section.ts +21 -68
  365. package/src/core/view/View.ts +57 -8
  366. package/src/core/view/ViewController.ts +1070 -186
  367. package/src/core/view/ViewManager.ts +1346 -272
  368. package/src/core/view/ViewState.ts +834 -116
  369. package/src/core/view/index.ts +5 -5
  370. package/src/testing/index.ts +184 -0
  371. package/dist/src/core/hellpers/ApiClient.d.ts.map +0 -1
  372. package/dist/src/core/hellpers/ApiClient.js.map +0 -1
  373. package/dist/src/core/hellpers/app.d.ts +0 -3
  374. package/dist/src/core/hellpers/app.d.ts.map +0 -1
  375. package/dist/src/core/hellpers/app.js.map +0 -1
  376. package/dist/src/core/hellpers/utils.d.ts.map +0 -1
  377. package/dist/src/core/hellpers/utils.js.map +0 -1
  378. package/dist/src/core/services/MarkerService.d.ts +0 -299
  379. package/dist/src/core/services/MarkerService.d.ts.map +0 -1
  380. package/dist/src/core/services/MarkerService.js +0 -723
  381. package/dist/src/core/services/MarkerService.js.map +0 -1
  382. package/src/core/services/MarkerService.ts +0 -923
  383. /package/dist/src/core/{hellpers → helpers}/ApiClient.d.ts +0 -0
@@ -0,0 +1,184 @@
1
+ export class PageCacheService {
2
+ constructor() {
3
+ /** Map giữ insertion order → dùng làm LRU */
4
+ this.entries = new Map();
5
+ this.maxEntries = 10;
6
+ /** 10 phút — trong khoảng thiết kế 5–15 phút; override per-view qua cache:{ttl} */
7
+ this.defaultTTL = 10 * 60 * 1000;
8
+ /** Hook khi entry bị destroy (evict/expire/invalidate) — ViewManager dọn store tại đây */
9
+ this.onEvict = null;
10
+ /** Injectable cho test */
11
+ this.now = () => Date.now();
12
+ }
13
+ set(urlPath, options) {
14
+ const ttl = options.ttl ?? this.defaultTTL;
15
+ if (ttl <= 0) {
16
+ // Không cache — destroy luôn
17
+ this.destroyViews(options.views);
18
+ return;
19
+ }
20
+ // Đã có entry cùng path → destroy bản cũ trước
21
+ const existing = this.entries.get(urlPath);
22
+ if (existing) {
23
+ this.entries.delete(urlPath);
24
+ this.destroyEntry(existing);
25
+ }
26
+ this.entries.set(urlPath, {
27
+ urlPath,
28
+ views: options.views,
29
+ fragment: options.fragment ?? document.createDocumentFragment(),
30
+ layoutPath: options.layoutPath ?? null,
31
+ outletContents: options.outletContents ?? null,
32
+ scroll: options.scroll ?? { x: 0, y: 0 },
33
+ savedAt: this.now(),
34
+ ttl,
35
+ });
36
+ // LRU evict
37
+ while (this.entries.size > this.maxEntries) {
38
+ const oldestKey = this.entries.keys().next().value;
39
+ const oldest = this.entries.get(oldestKey);
40
+ this.entries.delete(oldestKey);
41
+ this.destroyEntry(oldest);
42
+ }
43
+ }
44
+ /**
45
+ * Trả một entry ĐÃ take() về lại cache — dùng khi restore thất bại nhưng
46
+ * entry còn giá trị (vd layout của page chưa mount lại; lần điều hướng sau
47
+ * có thể restore được). GIỮ savedAt gốc — TTL KHÔNG được reset.
48
+ */
49
+ putBack(entry) {
50
+ if (this.isExpired(entry)) {
51
+ this.destroyEntry(entry);
52
+ return;
53
+ }
54
+ const existing = this.entries.get(entry.urlPath);
55
+ if (existing && existing !== entry) {
56
+ this.entries.delete(entry.urlPath);
57
+ this.destroyEntry(existing);
58
+ }
59
+ this.entries.set(entry.urlPath, entry);
60
+ while (this.entries.size > this.maxEntries) {
61
+ const oldestKey = this.entries.keys().next().value;
62
+ const oldest = this.entries.get(oldestKey);
63
+ this.entries.delete(oldestKey);
64
+ this.destroyEntry(oldest);
65
+ }
66
+ }
67
+ /**
68
+ * Lấy entry RA KHỎI cache (chuyển ownership cho caller để restore).
69
+ * Entry quá hạn → destroy, trả null.
70
+ */
71
+ take(urlPath) {
72
+ const entry = this.entries.get(urlPath);
73
+ if (!entry)
74
+ return null;
75
+ this.entries.delete(urlPath);
76
+ if (this.isExpired(entry)) {
77
+ this.destroyEntry(entry);
78
+ return null;
79
+ }
80
+ return entry;
81
+ }
82
+ has(urlPath) {
83
+ const entry = this.entries.get(urlPath);
84
+ return !!entry && !this.isExpired(entry);
85
+ }
86
+ /** Xoá + destroy entry (vd: push navigation cần data tươi, hoặc sau mutation) */
87
+ invalidate(urlPath) {
88
+ const entry = this.entries.get(urlPath);
89
+ if (!entry)
90
+ return false;
91
+ this.entries.delete(urlPath);
92
+ this.destroyEntry(entry);
93
+ return true;
94
+ }
95
+ /** Quét destroy mọi entry quá hạn. Gọi sau mỗi navigation + khi tab visible lại. */
96
+ sweep() {
97
+ let removed = 0;
98
+ for (const [key, entry] of this.entries) {
99
+ if (this.isExpired(entry)) {
100
+ this.entries.delete(key);
101
+ this.destroyEntry(entry);
102
+ removed++;
103
+ }
104
+ }
105
+ return removed;
106
+ }
107
+ clear() {
108
+ for (const entry of this.entries.values()) {
109
+ this.destroyEntry(entry);
110
+ }
111
+ this.entries.clear();
112
+ }
113
+ get size() {
114
+ return this.entries.size;
115
+ }
116
+ // ─── Private ────────────────────────────────────────────────
117
+ isExpired(entry) {
118
+ return this.now() - entry.savedAt > entry.ttl;
119
+ }
120
+ destroyEntry(entry) {
121
+ this.destroyTakenEntry(entry);
122
+ try {
123
+ this.onEvict?.(entry);
124
+ }
125
+ catch (e) {
126
+ console.error('[PageCache] onEvict error:', e);
127
+ }
128
+ }
129
+ /**
130
+ * Destroy một entry ĐÃ take() ra khỏi cache nhưng không restore được
131
+ * (vd layout hiện tại không khớp layoutPath). Public cho ViewManager.
132
+ */
133
+ destroyTakenEntry(entry) {
134
+ // Block content đã detach — ViewController.destroy() không đi qua chúng
135
+ // (không nằm trong _rootTree) nên phải destroy tường minh trước.
136
+ if (entry.outletContents) {
137
+ for (const [, content] of entry.outletContents) {
138
+ for (const child of content.children) {
139
+ try {
140
+ child?.destroy?.();
141
+ }
142
+ catch (e) {
143
+ console.error('[PageCache] destroy block child error:', e);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ this.destroyViews(entry.views);
149
+ }
150
+ destroyViews(views) {
151
+ for (const view of views) {
152
+ try {
153
+ view.__ctrl__?.destroy();
154
+ }
155
+ catch (e) {
156
+ console.error('[PageCache] destroy view error:', e);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ /**
162
+ * Detach toàn bộ vùng DOM của một wrapper (từ openTag đến closeTag, inclusive)
163
+ * vào DocumentFragment — node KHÔNG bị destroy, chỉ rời khỏi document.
164
+ */
165
+ export function detachWrapperDOM(wrapper) {
166
+ const fragment = document.createDocumentFragment();
167
+ const start = wrapper.openTag;
168
+ const end = wrapper.closeTag;
169
+ if (!start.parentNode)
170
+ return fragment;
171
+ let current = start;
172
+ while (current) {
173
+ const isEnd = current === end;
174
+ const next = current.nextSibling;
175
+ fragment.appendChild(current); // appendChild tự remove khỏi vị trí cũ
176
+ if (isEnd)
177
+ break;
178
+ current = next;
179
+ }
180
+ return fragment;
181
+ }
182
+ export const PageCache = new PageCacheService();
183
+ export default PageCache;
184
+ //# sourceMappingURL=PageCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageCache.js","sourceRoot":"","sources":["../../../../src/core/services/PageCache.ts"],"names":[],"mappings":"AAkDA,MAAM,OAAO,gBAAgB;IAA7B;QACI,6CAA6C;QACrC,YAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QAE7C,eAAU,GAAG,EAAE,CAAC;QACvB,mFAAmF;QAC5E,eAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAEnC,0FAA0F;QACnF,YAAO,GAA6C,IAAI,CAAC;QAEhE,0BAA0B;QACnB,QAAG,GAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAwJhD,CAAC;IAtJG,GAAG,CAAC,OAAe,EAAE,OAA4B;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACX,6BAA6B;YAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO;QACX,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;YACtB,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,sBAAsB,EAAE;YAC/D,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;YAC9C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACnB,GAAG;SACN,CAAC,CAAC;QAEH,YAAY;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAqB;QACzB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,OAAe;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,OAAe;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,iFAAiF;IACjF,UAAU,CAAC,OAAe;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,oFAAoF;IACpF,KAAK;QACD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACzB,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAEvD,SAAS,CAAC,KAAqB;QACnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;IAClD,CAAC;IAEO,YAAY,CAAC,KAAqB;QACtC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC;YAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;IAChG,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,KAAqB;QACnC,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACnC,IAAI,CAAC;wBAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;oBAAC,CAAC;oBAC3B,OAAO,CAAC,EAAE,CAAC;wBAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;gBAC7E,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,KAAsB;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC;gBAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YAAC,CAAC;YACjC,OAAO,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;QACtE,CAAC;IACL,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgD;IAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC;IAEvC,IAAI,OAAO,GAAgB,KAAK,CAAC;IACjC,OAAO,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,OAAO,KAAK,GAAG,CAAC;QAC9B,MAAM,IAAI,GAAgB,OAAO,CAAC,WAAW,CAAC;QAC9C,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC;QACtE,IAAI,KAAK;YAAE,MAAM;QACjB,OAAO,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAChD,eAAe,SAAS,CAAC"}
@@ -0,0 +1,100 @@
1
+ import type { SectionInterface, SectionManagerInterface } from "../contracts/SectionInterface.js";
2
+ import type { YieldInterface } from "../contracts/ElementInterface.js";
3
+ /**
4
+ * SectionManager — connects `@section(name, ...)` declarations to `@yield(name, ...)`
5
+ * markers, cross-controller (a page declares a section, a layout — or nothing —
6
+ * yields it), mirroring how BlockManager connects Block ↔ BlockOutlet.
7
+ *
8
+ * Two content shapes (RUNTIME_CONTRACT):
9
+ * - contentType 'text' (short `@section(name, value)`) — resolves to a plain
10
+ * string. Used as: (a) a single text node between the yield's markers,
11
+ * (b) the `.value` of a `<textarea>` when the yield's immediate DOM parent
12
+ * is a textarea (mutating child text nodes of a live textarea does not
13
+ * reliably update what's displayed once the dirty-value flag is set — every
14
+ * framework sets `.value` directly instead), (c) resolved synchronously via
15
+ * `resolve()` for `this.yieldContent()` used inside an attribute/prop factory.
16
+ * - contentType 'html' (long `@section(name) ... @endsection`) — a children
17
+ * array, mounted between the yield's markers the same way BlockManager
18
+ * mounts block content into an outlet.
19
+ *
20
+ * Head metadata (`meta:title`, `meta:description`, ...): the app shell's
21
+ * `<head>` is plain Laravel Blade (native `@yield`), entirely outside the
22
+ * client's mounted tree — SSR already gets it right for free. SPA navigation
23
+ * bypasses Blade though, so `syncHeadSections()` pushes any `meta:*` section
24
+ * straight to `document.title` / `<meta>` on every mount and on every reactive
25
+ * update, keeping the tab title and metadata "live" across client-side routes.
26
+ */
27
+ export declare class SectionManagerService implements SectionManagerInterface {
28
+ sections: Map<string, SectionInterface>;
29
+ activeSections: Map<string, SectionInterface>;
30
+ yields: Map<string, YieldInterface>;
31
+ subscribers: Map<string, ((section: SectionInterface) => void)[]>;
32
+ /** name+viewId -> unsubscribe fn (only for reactive sections, active while started) */
33
+ private unsubscribers;
34
+ /** yield id -> tracked nodes/elements mounted between its markers (for clear/start/stop) */
35
+ private mounted;
36
+ /** Owners in the current route chain; cached pages retain their sections. */
37
+ private headViewIds;
38
+ add(section: SectionInterface): void;
39
+ active(name: string, viewId: string): void;
40
+ subscribe(name: string, callback: (section: SectionInterface) => void): () => void;
41
+ unsubscribe(name: string, callback?: (section: SectionInterface) => void): void;
42
+ addYield(id: string, yieldEl: YieldInterface): void;
43
+ /** XOÁ THẬT yields của một view bị destroy — destroy rồi mới rời Map. */
44
+ removeYieldsOfView(viewId: string): void;
45
+ /** Resolve the current value of a named section — for `this.yieldContent()` in attrs/props. */
46
+ resolve(name: string, defaultValue?: any): any;
47
+ /**
48
+ * Mount every yield owned by one controller (page or layout — matches the
49
+ * controller Router/ViewManager is currently activating).
50
+ *
51
+ * Render happens for the whole chain before any mounting does (page
52
+ * registers its sections while building its tree, THEN returns
53
+ * `extendView(layout)`, whose own render builds the yields) — so by mount
54
+ * time `activeSections` already holds every section in the chain
55
+ * regardless of call order. Only the yield side needs to be scoped to
56
+ * `viewId`, so each controller's own markers get touched exactly once,
57
+ * mirroring BlockManagerService.mountViewBlocks()'s per-owner pass.
58
+ */
59
+ mountViewSections(viewId: string): void;
60
+ /** Hydrate counterpart: trust server-rendered content, only let nested elements self-claim. */
61
+ hydrateViewSections(viewId: string): void;
62
+ private findYieldsByName;
63
+ /** Re-apply every yield bound to `name` — used after a reactive section change. */
64
+ private applyByName;
65
+ private mountSectionIntoYield;
66
+ private applyText;
67
+ /** Same insertion pattern as BlockManagerService.mountBlockIntoOutlet(). */
68
+ private mountHtml;
69
+ /** Hydrate: claim only — DOM already there from SSR, never insert/clear. */
70
+ private hydrateApplyToYield;
71
+ private clearYield;
72
+ /** Activate reactive sections (subscribe) + start any mounted html-content children. Call after mount/hydrate. */
73
+ startAll(): void;
74
+ /** Deactivate — unsubscribe + stop mounted children. */
75
+ stopAll(): void;
76
+ private subscribeIfReactive;
77
+ /** Notify `subscribe(name, cb)` listeners — both when a different section becomes active
78
+ * (see `active()`) and when the currently active section's own value changes. Consumers:
79
+ * `Html.ts` attribute/prop bindings built from `@yield(...)` (no stateKeys of their own —
80
+ * the section they depend on is only known at runtime), subscribed via `yieldName`. */
81
+ private notify;
82
+ unmountView(viewId: string): void;
83
+ /**
84
+ * Push `meta:*` sections to HeadService — SPA navigation never runs Blade,
85
+ * so nothing else keeps `<title>`/`<meta>` (outside the client's mounted
86
+ * tree entirely) in sync with the active page after the first load. This
87
+ * is the declarative convenience layer over HeadService: a page can
88
+ * either call `@section('meta:title', ...)` in its template, or reach
89
+ * `app('Head')` directly (e.g. from an async data callback) — both end up
90
+ * writing through the same service, so they never fight each other.
91
+ */
92
+ private activateHeadSections;
93
+ private syncHeadSections;
94
+ /** Revert every page-scoped head tag before mounting a new page's chain. Call once per navigation. */
95
+ resetPageHead(): void;
96
+ destroy(): void;
97
+ }
98
+ export declare const SectionManager: SectionManagerService;
99
+ export default SectionManager;
100
+ //# sourceMappingURL=SectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionManager.d.ts","sourceRoot":"","sources":["../../../../src/core/services/SectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAKvE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,qBAAsB,YAAW,uBAAuB;IACjE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAa;IACpD,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAa;IAC1D,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAChD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC,EAAE,CAAC,CAAa;IAE9E,uFAAuF;IACvF,OAAO,CAAC,aAAa,CAAsC;IAC3D,4FAA4F;IAC5F,OAAO,CAAC,OAAO,CAAiC;IAChD,6EAA6E;IAC7E,OAAO,CAAC,WAAW,CAAqB;IAExC,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAQpC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAMlF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAW/E,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAInD,yEAAyE;IACzE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUxC,+FAA+F;IAC/F,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,GAAG;IAOpD;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASvC,+FAA+F;IAC/F,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUzC,OAAO,CAAC,gBAAgB;IAMxB,mFAAmF;IACnF,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,SAAS;IAcjB,4EAA4E;IAC5E,OAAO,CAAC,SAAS;IA8BjB,4EAA4E;IAC5E,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,UAAU;IAiBlB,kHAAkH;IAClH,QAAQ,IAAI,IAAI;IAWhB,wDAAwD;IACxD,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,mBAAmB;IAc3B;;;4FAGwF;IACxF,OAAO,CAAC,MAAM;IAKd,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAajC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IAsCxB,sGAAsG;IACtG,aAAa,IAAI,IAAI;IAKrB,OAAO,IAAI,IAAI;CAWlB;AAED,eAAO,MAAM,cAAc,uBAA8B,CAAC;AAC1D,eAAe,cAAc,CAAC"}