@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
@@ -1,4 +1,4 @@
1
- export type OneObjectType = 'Application' | 'App' | 'ServiceProvider' | 'Html' | 'Reactive' | 'TextElement' | 'Fragment' | 'Wrapper' | 'Block' | 'BlockOutlet' | 'Output' | 'ViewController' | 'View' | 'Service' | 'Router' | 'App' | 'Component' | 'Unknown' | 'Yield' | '' | null;
1
+ export type SaoObjectType = 'Application' | 'App' | 'ServiceProvider' | 'Html' | 'Reactive' | 'TextElement' | 'Fragment' | 'Wrapper' | 'Block' | 'BlockOutlet' | 'Output' | 'ViewController' | 'View' | 'Service' | 'Router' | 'App' | 'Component' | 'Unknown' | 'Yield' | '' | null;
2
2
  export declare enum OOTEnum {
3
3
  APPLICATION = "Application",
4
4
  HTML = "Html",
@@ -19,11 +19,11 @@ export declare enum OOTEnum {
19
19
  UNKNOWN = "Unknown",
20
20
  YIELD = "Yield"
21
21
  }
22
- export type { OneElementConfig, HtmlElementConfig, OneElementEventHandler, OneElementChildren, OneChildrenFactoryOutput, OneChildrenFactory } from "../contracts/ElementInterface";
23
- export type { ReactiveRenderFn, ReactiveChildrenFactory, ReactiveConfig } from "../contracts/ReactiveInterface";
24
- export type { BlockRenderFactory } from "../contracts/BlockInterface";
25
- export type { ViewRenderFactory, ViewConstructor, ViewLifecycleHooks } from "../contracts/ViewInterface";
26
- export type { StateListener, MultiKeyStateListener, StateItem } from "../contracts/ViewStateInterface";
27
- export type { ServiceKey, ServiceFactory, ServiceBinding } from "../contracts/ApplicationInterface";
28
- export type { ViewConfig, ViewRuntimeConfig } from "../contracts/ViewControllerInterface";
22
+ export type { SaoElementConfig, HtmlElementConfig, SaoElementEventHandler, SaoElementChildren, SaoChildrenFactoryOutput, SaoChildrenFactory } from "../contracts/ElementInterface.js";
23
+ export type { ReactiveRenderFn, ReactiveChildrenFactory, ReactiveConfig } from "../contracts/ReactiveInterface.js";
24
+ export type { BlockRenderFactory } from "../contracts/BlockInterface.js";
25
+ export type { ViewRenderFactory, ViewConstructor, ViewLifecycleHooks } from "../contracts/ViewInterface.js";
26
+ export type { StateListener, MultiKeyStateListener, StateItem } from "../contracts/ViewStateInterface.js";
27
+ export type { ServiceKey, ServiceFactory, ServiceBinding } from "../contracts/ApplicationInterface.js";
28
+ export type { ViewConfig, ViewRuntimeConfig } from "../contracts/ViewControllerInterface.js";
29
29
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core/types/utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,KAAK,GAAG,iBAAiB,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;AACrR,oBAAY,OAAO;IACf,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,YAAY,gBAAgB;IAC5B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,YAAY,gBAAgB;IAC5B,MAAM,WAAW;IACjB,eAAe,mBAAmB;IAClC,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,gBAAgB,oBAAoB;IACpC,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;CAClB;AAGD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnL,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChH,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACzG,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACvG,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACpG,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core/types/utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,KAAK,GAAG,iBAAiB,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;AACrR,oBAAY,OAAO;IACf,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,YAAY,gBAAgB;IAC5B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,YAAY,gBAAgB;IAC5B,MAAM,WAAW;IACjB,eAAe,mBAAmB;IAClC,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,gBAAgB,oBAAoB;IACpC,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;CAClB;AAGD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtL,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnH,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC5G,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC1G,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACvG,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { LoopContextInterface } from "../contracts/LoopContextInterface";
1
+ import type { LoopContextInterface } from "../contracts/LoopContextInterface.js";
2
2
  /**
3
3
  * LoopContext — provides loop metadata for @foreach, @for, @while directives.
4
4
  *
@@ -31,6 +31,26 @@ export declare class LoopContext implements LoopContextInterface {
31
31
  setCount(count: number): void;
32
32
  setCurrentTimes(index: number): void;
33
33
  next(): void;
34
+ /**
35
+ * Bản chụp BẤT BIẾN của trạng thái hiện tại — dùng cho `loop` mà template
36
+ * nhìn thấy trong `@foreach`.
37
+ *
38
+ * Vì sao cần: LoopContext là MỘT object dùng chung, bị mutate qua từng vòng
39
+ * (`setCurrentTimes`). Trong khi đó element con được tạo bởi
40
+ * `childrenFactory` — closure chạy MUỘN (lúc Html.renderChildren), SAU khi
41
+ * vòng lặp đã kết thúc. Closure bắt `loop` theo THAM CHIẾU nên mọi hàng đọc
42
+ * ra cùng một giá trị: trạng thái CUỐI cùng.
43
+ * Đo được: list 6 phần tử, `@click(remove(loop.index))` ở mọi hàng đều nhận
44
+ * index = 5 → bấm hàng nào cũng xoá phần tử cuối, rồi tắc hẳn.
45
+ * `__loopIndex` không dính vì nó là tham số theo từng lần gọi callback (mỗi
46
+ * closure một binding riêng), không phải object chia sẻ.
47
+ *
48
+ * `parent` cũng chụp đệ quy: loop lồng nhau có cùng vấn đề ở mức ngoài.
49
+ * Trả về plain object đã freeze — chỉ đọc, không có `next()` (không ai gọi
50
+ * `next()` trên `loop` của `@foreach`; `@for`/`@while` vẫn nhận context
51
+ * MUTABLE vì codegen của chúng cần `setCurrentTimes`/`next`).
52
+ */
53
+ snapshot(): LoopContextInterface;
34
54
  reset(): void;
35
55
  private increment;
36
56
  private decrement;
@@ -1 +1 @@
1
- {"version":3,"file":"LoopContext.d.ts","sourceRoot":"","sources":["../../../../src/core/view/LoopContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,oBAAoB;IAC7C,KAAK,EAAE,MAAM,CAAK;IAClB,SAAS,EAAE,MAAM,CAAK;IACtB,KAAK,EAAE,MAAM,CAAK;IAClB,SAAS,EAAE,MAAM,CAAM;IACvB,KAAK,EAAE,OAAO,CAAS;IACvB,IAAI,EAAE,OAAO,CAAS;IACtB,GAAG,EAAE,OAAO,CAAQ;IACpB,IAAI,EAAE,OAAO,CAAS;IACtB,KAAK,EAAE,MAAM,CAAK;IAClB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAElC,OAAO,CAAC,IAAI,CAA0C;gBAE1C,MAAM,GAAE,WAAW,GAAG,IAAW;IAO7C,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI;IAM9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW7B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAYpC,IAAI,IAAI,IAAI;IAQZ,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;CAUpB"}
1
+ {"version":3,"file":"LoopContext.d.ts","sourceRoot":"","sources":["../../../../src/core/view/LoopContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEjF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,oBAAoB;IAC7C,KAAK,EAAE,MAAM,CAAK;IAClB,SAAS,EAAE,MAAM,CAAK;IACtB,KAAK,EAAE,MAAM,CAAK;IAClB,SAAS,EAAE,MAAM,CAAM;IACvB,KAAK,EAAE,OAAO,CAAS;IACvB,IAAI,EAAE,OAAO,CAAS;IACtB,GAAG,EAAE,OAAO,CAAQ;IACpB,IAAI,EAAE,OAAO,CAAS;IACtB,KAAK,EAAE,MAAM,CAAK;IAClB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAElC,OAAO,CAAC,IAAI,CAA0C;gBAE1C,MAAM,GAAE,WAAW,GAAG,IAAW;IAO7C,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI;IAM9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW7B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAYpC,IAAI,IAAI,IAAI;IAQZ;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,IAAI,oBAAoB;IAkBhC,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;CAUpB"}
@@ -65,6 +65,42 @@ export class LoopContext {
65
65
  this.decrement();
66
66
  }
67
67
  }
68
+ /**
69
+ * Bản chụp BẤT BIẾN của trạng thái hiện tại — dùng cho `loop` mà template
70
+ * nhìn thấy trong `@foreach`.
71
+ *
72
+ * Vì sao cần: LoopContext là MỘT object dùng chung, bị mutate qua từng vòng
73
+ * (`setCurrentTimes`). Trong khi đó element con được tạo bởi
74
+ * `childrenFactory` — closure chạy MUỘN (lúc Html.renderChildren), SAU khi
75
+ * vòng lặp đã kết thúc. Closure bắt `loop` theo THAM CHIẾU nên mọi hàng đọc
76
+ * ra cùng một giá trị: trạng thái CUỐI cùng.
77
+ * Đo được: list 6 phần tử, `@click(remove(loop.index))` ở mọi hàng đều nhận
78
+ * index = 5 → bấm hàng nào cũng xoá phần tử cuối, rồi tắc hẳn.
79
+ * `__loopIndex` không dính vì nó là tham số theo từng lần gọi callback (mỗi
80
+ * closure một binding riêng), không phải object chia sẻ.
81
+ *
82
+ * `parent` cũng chụp đệ quy: loop lồng nhau có cùng vấn đề ở mức ngoài.
83
+ * Trả về plain object đã freeze — chỉ đọc, không có `next()` (không ai gọi
84
+ * `next()` trên `loop` của `@foreach`; `@for`/`@while` vẫn nhận context
85
+ * MUTABLE vì codegen của chúng cần `setCurrentTimes`/`next`).
86
+ */
87
+ snapshot() {
88
+ return Object.freeze({
89
+ index: this.index,
90
+ iteration: this.iteration,
91
+ count: this.count,
92
+ remaining: this.remaining,
93
+ first: this.first,
94
+ last: this.last,
95
+ odd: this.odd,
96
+ even: this.even,
97
+ depth: this.depth,
98
+ parent: this.parent ? this.parent.snapshot() : null,
99
+ next() {
100
+ console.warn('[LoopContext] `loop` trong @foreach là bản chụp chỉ đọc — next() không có tác dụng.');
101
+ },
102
+ });
103
+ }
68
104
  reset() {
69
105
  this.iteration = 0;
70
106
  this.index = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"LoopContext.js","sourceRoot":"","sources":["../../../../src/core/view/LoopContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoopContext.js","sourceRoot":"","sources":["../../../../src/core/view/LoopContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { StateManagerInterface } from '../contracts/ViewStateInterface.js';
2
+ export type Cleanup = () => void;
3
+ export interface WatchContext {
4
+ readonly signal: AbortSignal;
5
+ /** False after a dependency change, pause, stop, or destroy. */
6
+ readonly current: boolean;
7
+ onCleanup(cleanup: Cleanup): void;
8
+ /** Apply an async result only while this run still owns the scope. */
9
+ commit(update: () => void): boolean;
10
+ }
11
+ export type WatchCallback = (values: Readonly<Record<string, any>>, context: WatchContext) => void | Cleanup | Promise<void | Cleanup>;
12
+ export interface WatchOptions {
13
+ immediate?: boolean;
14
+ /** dom (default) runs after bindings/regions; state runs before regions. */
15
+ flush?: 'state' | 'dom';
16
+ }
17
+ /** Explicit dependencies and ownership; no global hook order or implicit tracking. */
18
+ export declare class ResourceScope {
19
+ private states;
20
+ private afterDom;
21
+ private reportError;
22
+ private records;
23
+ private cleanups;
24
+ private active;
25
+ private destroyed;
26
+ constructor(states: StateManagerInterface, afterDom: (callback: () => void) => Cleanup, reportError?: (error: unknown) => void);
27
+ watch(keys: readonly string[], callback: WatchCallback, options?: WatchOptions): Cleanup;
28
+ /** Own a resource until scope destruction (pause-safe resources only). */
29
+ defer(cleanup: Cleanup): Cleanup;
30
+ resume(): void;
31
+ pause(): void;
32
+ destroy(): void;
33
+ private invalidate;
34
+ private schedule;
35
+ private run;
36
+ private safely;
37
+ }
38
+ //# sourceMappingURL=ResourceScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceScope.d.ts","sourceRoot":"","sources":["../../../../src/core/view/ResourceScope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAEhF,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;AACjC,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,sEAAsE;IACtE,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CACvC;AACD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,KACrF,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;AAC7C,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CAC3B;AAYD,sFAAsF;AACtF,qBAAa,aAAa;IAOlB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IARvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAGd,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,OAAO,EAC3C,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAuD;IAGpG,KAAK,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO;IAuB5F,0EAA0E;IAC1E,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAahC,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IASb,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,GAAG;IA8CX,OAAO,CAAC,MAAM;CAGjB"}
@@ -0,0 +1,167 @@
1
+ /** Explicit dependencies and ownership; no global hook order or implicit tracking. */
2
+ export class ResourceScope {
3
+ constructor(states, afterDom, reportError = error => console.error('[ResourceScope]', error)) {
4
+ this.states = states;
5
+ this.afterDom = afterDom;
6
+ this.reportError = reportError;
7
+ this.records = new Set();
8
+ this.cleanups = new Set();
9
+ this.active = false;
10
+ this.destroyed = false;
11
+ }
12
+ watch(keys, callback, options = {}) {
13
+ if (this.destroyed)
14
+ return () => { };
15
+ const record = {
16
+ keys: [...new Set(keys)], callback, options: { ...options },
17
+ live: true, dirty: options.immediate !== false, off: () => { },
18
+ };
19
+ record.off = this.states.subscribe(record.keys, () => {
20
+ // Abort stale work immediately, even when the next run waits for DOM.
21
+ this.invalidate(record);
22
+ record.dirty = true;
23
+ this.schedule(record);
24
+ });
25
+ this.records.add(record);
26
+ this.schedule(record);
27
+ return () => {
28
+ if (!record.live)
29
+ return;
30
+ record.live = false;
31
+ record.off();
32
+ this.invalidate(record);
33
+ this.records.delete(record);
34
+ };
35
+ }
36
+ /** Own a resource until scope destruction (pause-safe resources only). */
37
+ defer(cleanup) {
38
+ let live = true;
39
+ const dispose = () => {
40
+ if (!live)
41
+ return;
42
+ live = false;
43
+ this.cleanups.delete(dispose);
44
+ this.safely(cleanup);
45
+ };
46
+ if (this.destroyed)
47
+ dispose();
48
+ else
49
+ this.cleanups.add(dispose);
50
+ return dispose;
51
+ }
52
+ resume() {
53
+ if (this.destroyed || this.active)
54
+ return;
55
+ this.active = true;
56
+ for (const record of this.records)
57
+ this.schedule(record);
58
+ }
59
+ pause() {
60
+ if (!this.active)
61
+ return;
62
+ this.active = false;
63
+ for (const record of this.records) {
64
+ if (record.disposeRun || record.cancelQueued)
65
+ record.dirty = true;
66
+ this.invalidate(record);
67
+ }
68
+ }
69
+ destroy() {
70
+ if (this.destroyed)
71
+ return;
72
+ this.destroyed = true;
73
+ this.active = false;
74
+ for (const record of this.records) {
75
+ record.live = false;
76
+ record.off();
77
+ this.invalidate(record);
78
+ }
79
+ this.records.clear();
80
+ for (const cleanup of Array.from(this.cleanups).reverse())
81
+ cleanup();
82
+ }
83
+ invalidate(record) {
84
+ record.cancelQueued?.();
85
+ record.cancelQueued = undefined;
86
+ const dispose = record.disposeRun;
87
+ record.disposeRun = undefined;
88
+ dispose?.();
89
+ }
90
+ schedule(record) {
91
+ if (!this.active || !record.live || !record.dirty || record.cancelQueued)
92
+ return;
93
+ if (record.options.flush === 'state')
94
+ this.run(record);
95
+ else
96
+ record.cancelQueued = this.afterDom(() => {
97
+ record.cancelQueued = undefined;
98
+ this.run(record);
99
+ });
100
+ }
101
+ run(record) {
102
+ if (!this.active || !record.live || !record.dirty)
103
+ return;
104
+ record.dirty = false;
105
+ const controller = new AbortController();
106
+ const cleanups = [];
107
+ const versions = record.keys.map(key => this.states.getStateVersion(key));
108
+ let current = true;
109
+ const isCurrent = () => current && record.keys.every((key, i) => this.states.getStateVersion(key) === versions[i]);
110
+ const onCleanup = (cleanup) => {
111
+ if (isCurrent())
112
+ cleanups.push(cleanup);
113
+ else
114
+ this.safely(cleanup);
115
+ };
116
+ record.disposeRun = () => {
117
+ if (!current)
118
+ return;
119
+ current = false;
120
+ controller.abort();
121
+ for (const cleanup of cleanups.splice(0).reverse())
122
+ this.safely(cleanup);
123
+ };
124
+ const context = {
125
+ signal: controller.signal,
126
+ get current() { return isCurrent(); },
127
+ onCleanup,
128
+ commit: update => {
129
+ if (!isCurrent())
130
+ return false;
131
+ update();
132
+ return true;
133
+ },
134
+ };
135
+ const values = {};
136
+ try {
137
+ for (const key of record.keys)
138
+ values[key] = this.states.getStateByKey(key);
139
+ const result = record.callback(Object.freeze(values), context);
140
+ if (typeof result === 'function')
141
+ onCleanup(result);
142
+ else if (result)
143
+ Promise.resolve(result).then(cleanup => {
144
+ if (typeof cleanup === 'function')
145
+ onCleanup(cleanup);
146
+ }, error => {
147
+ if (isCurrent() && !controller.signal.aborted)
148
+ this.reportError(error);
149
+ });
150
+ }
151
+ catch (error) {
152
+ const dispose = record.disposeRun;
153
+ record.disposeRun = undefined;
154
+ dispose?.();
155
+ this.reportError(error);
156
+ }
157
+ }
158
+ safely(cleanup) {
159
+ try {
160
+ cleanup();
161
+ }
162
+ catch (error) {
163
+ this.reportError(error);
164
+ }
165
+ }
166
+ }
167
+ //# sourceMappingURL=ResourceScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceScope.js","sourceRoot":"","sources":["../../../../src/core/view/ResourceScope.ts"],"names":[],"mappings":"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"}
@@ -1,41 +1,26 @@
1
- import { HtmlInterface } from "../contracts/ElementInterface";
2
- import { ViewControllerInterface } from "../contracts/ViewControllerInterface";
3
- import { SectionConstruvtorArgs, SectionContentRenderer, SectionContentType, SectionInterface, SectionItemType } from "../contracts/views";
1
+ import { HtmlInterface } from "../contracts/ElementInterface.js";
2
+ import { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
3
+ import { SectionConstruvtorArgs, SectionContentRenderer, SectionContentType, SectionInterface, SectionItemType } from "../contracts/SectionInterface.js";
4
+ /**
5
+ * Section — a `@section(name, ...)` declaration.
6
+ *
7
+ * A thin data holder: it does NOT render or subscribe itself. Sections are
8
+ * declared by a page/layout (often before its matching @yield even exists —
9
+ * same cross-controller ordering as Block/BlockOutlet), so SectionManager
10
+ * owns evaluation, DOM insertion, and reactive re-apply (mirrors how
11
+ * BlockManager owns Block/BlockOutlet mounting instead of Block itself).
12
+ */
4
13
  export declare class Section implements SectionInterface {
5
14
  ctx: ViewControllerInterface | undefined | null;
15
+ /** Owning view instance — keys this section as `name + viewId` in SectionManager, same as Block. */
16
+ viewId: string;
6
17
  name: string;
7
18
  type: SectionItemType;
8
19
  contentType: SectionContentType;
9
- stateKeys?: string[];
20
+ stateKeys: string[];
10
21
  renderFactory: SectionContentRenderer;
11
- subscribeFn: (() => void) | null;
12
- unsubscribeFn: (() => void) | null;
13
- content: any;
14
- parentElement: HtmlInterface | undefined | null;
15
- isStarted: boolean;
16
22
  constructor({ ctx, name, type, contentType, stateKeys, renderFactory }: SectionConstruvtorArgs);
17
- initialize(): void;
18
- render(parentElement?: HtmlInterface | null | undefined): void;
19
- start(): void;
20
- stop(): void;
23
+ /** Evaluate current content. `parentElement` only meaningful for contentType 'html'. */
24
+ evaluate(parentElement?: HtmlInterface | null): string | import("../contracts/ElementInterface.js").SaoElementChildren;
21
25
  }
22
- /**
23
- * Note: The "Section" concept is being phased out in favor of a more flexible Block/BlockOutlet system.
24
- * Sections are still supported for backward compatibility but may be deprecated in future versions.
25
- * For new development, consider using Blocks instead of Sections for better flexibility and composability.
26
- *
27
- * --- CHANGELOG ---
28
- * vX.X.X - Introduced Block/BlockOutlet system as a more flexible alternative to Sections.
29
- * - Sections are now considered legacy and may be deprecated in future versions.
30
- * - ViewController's section management is being refactored to support Blocks instead of Sections.
31
- * - Updated documentation and examples to encourage use of Blocks over Sections.
32
- *
33
- * --- FUTURE PLANS ---
34
- * - Phase out Sections entirely in favor of Blocks, which offer more composability and dynamic capabilities.
35
- * - Provide migration guides for existing users to transition from Sections to Blocks.
36
- * - Enhance Block system with features like nested blocks, dynamic block registration, and improved lifecycle management.
37
- *
38
- * --- CURRENT RECOMMENDATION ---
39
- * For new views, prefer using Blocks and BlockOutlets for layout composition instead of Sections. Sections will still work but are not recommended for new development.
40
- */
41
26
  //# sourceMappingURL=Section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../../../src/core/view/Section.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE3I,qBAAa,OAAQ,YAAW,gBAAgB;IAC5C,GAAG,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI,CAAQ;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,aAAa,EAAE,sBAAsB,CAAC;IACtC,WAAW,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;IACxC,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;IAE1C,OAAO,EAAE,GAAG,CAAQ;IAEpB,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAQ;IAEvD,SAAS,EAAE,OAAO,CAAS;gBAEf,EAAE,GAAG,EAAE,IAAI,EAAE,IAAe,EAAE,WAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,sBAAsB;IAWlH,UAAU;IAQV,MAAM,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS;IAKvD,KAAK;IAYL,IAAI;CAQP;AAED;;;;;;;;;;;;;;;;;;GAkBG"}
1
+ {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../../../src/core/view/Section.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEzJ;;;;;;;;GAQG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAC5C,GAAG,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI,CAAQ;IACvD,oGAAoG;IACpG,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,aAAa,EAAE,sBAAsB,CAAC;gBAE1B,EAAE,GAAG,EAAE,IAAI,EAAE,IAAe,EAAE,WAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,sBAAsB;IAUlH,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI;CAGhD"}
@@ -1,67 +1,26 @@
1
+ /**
2
+ * Section — a `@section(name, ...)` declaration.
3
+ *
4
+ * A thin data holder: it does NOT render or subscribe itself. Sections are
5
+ * declared by a page/layout (often before its matching @yield even exists —
6
+ * same cross-controller ordering as Block/BlockOutlet), so SectionManager
7
+ * owns evaluation, DOM insertion, and reactive re-apply (mirrors how
8
+ * BlockManager owns Block/BlockOutlet mounting instead of Block itself).
9
+ */
1
10
  export class Section {
2
11
  constructor({ ctx, name, type = 'static', contentType = 'text', stateKeys, renderFactory }) {
3
12
  this.ctx = null;
4
- this.subscribeFn = null;
5
- this.unsubscribeFn = null;
6
- this.content = null; // Can be string or OneElementChildren depending on contentType
7
- this.parentElement = null; // For dynamic/reactive sections that need a parent element reference
8
- this.isStarted = false; // Flag to indicate if this section is static (renders once) or dynamic/reactive (renders on state change)
9
13
  this.ctx = ctx ?? null;
14
+ this.viewId = ctx?.viewId ?? '';
10
15
  this.name = name;
11
16
  this.type = type;
12
17
  this.contentType = contentType;
13
- this.stateKeys = stateKeys;
18
+ this.stateKeys = stateKeys ?? [];
14
19
  this.renderFactory = renderFactory;
15
- this.initialize();
16
- }
17
- initialize() {
18
- if (this.type === 'static') {
19
- this.render();
20
- }
21
- this.start();
22
- }
23
- render(parentElement) {
24
- this.parentElement = parentElement ?? null;
25
- this.content = this.renderFactory(this.parentElement);
26
- }
27
- start() {
28
- if (this.isStarted)
29
- return; // No need to subscribe for static sections
30
- this.isStarted = true;
31
- if ((this.type === 'reactive' || this.type === 'dynamic') && this.stateKeys && this.ctx) {
32
- this.subscribeFn = () => {
33
- this.render(this.parentElement);
34
- };
35
- this.unsubscribeFn = this.ctx.states.subscribe(this.stateKeys, this.subscribeFn);
36
- }
37
20
  }
38
- stop() {
39
- if (!this.isStarted)
40
- return;
41
- this.isStarted = false;
42
- if (this.unsubscribeFn) {
43
- this.unsubscribeFn();
44
- this.unsubscribeFn = null;
45
- }
21
+ /** Evaluate current content. `parentElement` only meaningful for contentType 'html'. */
22
+ evaluate(parentElement) {
23
+ return this.renderFactory(parentElement ?? null);
46
24
  }
47
25
  }
48
- /**
49
- * Note: The "Section" concept is being phased out in favor of a more flexible Block/BlockOutlet system.
50
- * Sections are still supported for backward compatibility but may be deprecated in future versions.
51
- * For new development, consider using Blocks instead of Sections for better flexibility and composability.
52
- *
53
- * --- CHANGELOG ---
54
- * vX.X.X - Introduced Block/BlockOutlet system as a more flexible alternative to Sections.
55
- * - Sections are now considered legacy and may be deprecated in future versions.
56
- * - ViewController's section management is being refactored to support Blocks instead of Sections.
57
- * - Updated documentation and examples to encourage use of Blocks over Sections.
58
- *
59
- * --- FUTURE PLANS ---
60
- * - Phase out Sections entirely in favor of Blocks, which offer more composability and dynamic capabilities.
61
- * - Provide migration guides for existing users to transition from Sections to Blocks.
62
- * - Enhance Block system with features like nested blocks, dynamic block registration, and improved lifecycle management.
63
- *
64
- * --- CURRENT RECOMMENDATION ---
65
- * For new views, prefer using Blocks and BlockOutlets for layout composition instead of Sections. Sections will still work but are not recommended for new development.
66
- */
67
26
  //# sourceMappingURL=Section.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../../src/core/view/Section.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,OAAO;IAiBhB,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,SAAS,EAAE,aAAa,EAA0B;QAhBlH,QAAG,GAA+C,IAAI,CAAC;QAOvD,gBAAW,GAAwB,IAAI,CAAC;QACxC,kBAAa,GAAwB,IAAI,CAAC;QAE1C,YAAO,GAAQ,IAAI,CAAC,CAAC,+DAA+D;QAEpF,kBAAa,GAAqC,IAAI,CAAC,CAAC,qEAAqE;QAE7H,cAAS,GAAY,KAAK,CAAC,CAAC,0GAA0G;QAGlI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,UAAU;QACN,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IAEjB,CAAC;IAED,MAAM,CAAC,aAAgD;QACnD,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK;QACD,IAAG,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,2CAA2C;QACtE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACtF,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC,CAAC;YACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrF,CAAC;IAEL,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,CAAC;IACL,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;GAkBG"}
1
+ {"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../../src/core/view/Section.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,MAAM,OAAO,OAAO;IAWhB,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,SAAS,EAAE,aAAa,EAA0B;QAVlH,QAAG,GAA+C,IAAI,CAAC;QAWnD,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,wFAAwF;IACxF,QAAQ,CAAC,aAAoC;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IACrD,CAAC;CACJ"}
@@ -1,9 +1,16 @@
1
- import type { ViewType } from "../contracts/ViewControllerInterface";
2
- import type { ViewInterface, ViewLifecycleHooks } from "../contracts/ViewInterface";
3
- import type { OneObjectType } from "../types/utils";
4
- import { ViewController } from "./ViewController";
1
+ import type { ViewType } from "../contracts/ViewControllerInterface.js";
2
+ import type { ViewInterface, ViewLifecycleHooks } from "../contracts/ViewInterface.js";
3
+ import type { SaoObjectType } from "../types/utils.js";
4
+ import { ViewController } from "./ViewController.js";
5
+ import type { WatchCallback, WatchOptions } from './ResourceScope.js';
6
+ /** Declared View API without the legacy catch-all that would hide misspelled members. */
7
+ type ViewMembers = {
8
+ [K in keyof View as string extends K ? never : number extends K ? never : K]: View[K];
9
+ };
10
+ /** The exported object's methods run on the View after its members are merged. */
11
+ export type ViewUserConfig<T extends object> = T & ThisType<T & ViewMembers>;
5
12
  /**
6
- * View — the base class for all views in OneView.
13
+ * View — the base class for all views in SaoView.
7
14
  *
8
15
  * A View is the unit that the user writes. It contains:
9
16
  * - User-defined properties (reactive state, computed values)
@@ -41,23 +48,52 @@ export declare class View implements ViewInterface, ViewLifecycleHooks {
41
48
  * @param systemData — System-level data (SSR data, global config, etc.)
42
49
  */
43
50
  $__setup__(__data__?: Record<string, any>, systemData?: Record<string, any>): void;
51
+ mounting?(): void | Promise<void>;
52
+ mounted?(): void | Promise<void>;
53
+ starting?(): void | Promise<void>;
54
+ started?(): void | Promise<void>;
55
+ pausing?(): void | Promise<void>;
56
+ paused?(): void | Promise<void>;
57
+ resuming?(): void | Promise<void>;
58
+ resumed?(): void | Promise<void>;
59
+ stopping?(): void | Promise<void>;
60
+ stopped?(): void | Promise<void>;
61
+ unmounting?(): void | Promise<void>;
62
+ unmounted?(): void | Promise<void>;
63
+ destroying?(): void | Promise<void>;
64
+ destroyed?(): void | Promise<void>;
44
65
  onInit?(): void | Promise<void>;
45
66
  onMounted?(): void | Promise<void>;
46
67
  onUpdated?(): void | Promise<void>;
47
68
  onDestroy?(): void | Promise<void>;
48
69
  onActivated?(): void | Promise<void>;
49
70
  onDeactivated?(): void | Promise<void>;
71
+ onPause?(): void | Promise<void>;
72
+ onResume?(): void | Promise<void>;
73
+ /**
74
+ * Phát sự kiện lên cha đã `@include` view này.
75
+ *
76
+ * Là method của View (không chỉ hàm trong scope compiled) để template gọi
77
+ * thẳng được: `@click(emit('edit', card['id']))` biên dịch thành
78
+ * `{ handler: 'emit' }`, và ViewController.addEventListener tra handler
79
+ * dạng chuỗi trên chính View.
80
+ */
81
+ emit(event: string, ...args: any[]): any;
82
+ watch(keys: readonly string[], callback: WatchCallback, options?: WatchOptions): () => void;
83
+ afterDom(callback: () => void): () => void;
84
+ get $scope(): import("./ResourceScope.js").ResourceScope;
50
85
  get path(): string;
51
86
  get viewType(): ViewType;
52
87
  /** Shortcut to controller */
53
88
  get __(): ViewController;
54
89
  /** Shortcut to ViewState */
55
90
  get $state(): any;
56
- get oneType(): OneObjectType;
57
- set oneType(value: OneObjectType);
91
+ get saoType(): SaoObjectType;
92
+ set saoType(value: SaoObjectType);
58
93
  get parent(): ViewInterface | null;
59
94
  get children(): ViewInterface[];
60
95
  get superView(): ViewInterface | null;
61
96
  get originView(): ViewInterface | null;
62
97
  }
98
+ export {};
63
99
  //# sourceMappingURL=View.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../../../../src/core/view/View.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,IAAK,YAAW,aAAa,EAAE,kBAAkB;IACnD,QAAQ,EAAG,cAAc,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;gBAEP,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAiB,EAAE,mBAAmB,CAAC,EAAE,GAAG;IAahF;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAO1F,MAAM,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/B,SAAS,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,SAAS,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,SAAS,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,WAAW,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpC,aAAa,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,6BAA6B;IAC7B,IAAI,EAAE,IAAI,cAAc,CAEvB;IAED,4BAA4B;IAC5B,IAAI,MAAM,IAAI,GAAG,CAEhB;IACD,IAAI,OAAO,IAAI,aAAa,CAE3B;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,aAAa,EAE/B;IAED,IAAI,MAAM,IAAI,aAAa,GAAG,IAAI,CAEjC;IACD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAE9B;IACD,IAAI,SAAS,IAAI,aAAa,GAAG,IAAI,CAEpC;IACD,IAAI,UAAU,IAAI,aAAa,GAAG,IAAI,CAErC;CACJ"}
1
+ {"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../../../../src/core/view/View.ts"],"names":[],"mappings":"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"}