@saolabs/client 1.0.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 +221 -0
  2. package/dist/index.d.ts +46 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +38 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/plugins.d.ts +38 -0
  7. package/dist/plugins.d.ts.map +1 -0
  8. package/dist/plugins.js +61 -0
  9. package/dist/plugins.js.map +1 -0
  10. package/dist/src/core/app/Application.d.ts +159 -0
  11. package/dist/src/core/app/Application.d.ts.map +1 -0
  12. package/dist/src/core/app/Application.js +338 -0
  13. package/dist/src/core/app/Application.js.map +1 -0
  14. package/dist/src/core/bootstrap/app.d.ts +4 -0
  15. package/dist/src/core/bootstrap/app.d.ts.map +1 -0
  16. package/dist/src/core/bootstrap/app.js +49 -0
  17. package/dist/src/core/bootstrap/app.js.map +1 -0
  18. package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts +9 -0
  19. package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts.map +1 -0
  20. package/dist/src/core/bootstrap/providers/ApiServiceProvider.js +18 -0
  21. package/dist/src/core/bootstrap/providers/ApiServiceProvider.js.map +1 -0
  22. package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts +6 -0
  23. package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts.map +1 -0
  24. package/dist/src/core/bootstrap/providers/CoreServiceProvider.js +21 -0
  25. package/dist/src/core/bootstrap/providers/CoreServiceProvider.js.map +1 -0
  26. package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts +7 -0
  27. package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts.map +1 -0
  28. package/dist/src/core/bootstrap/providers/HelperServiceProvider.js +14 -0
  29. package/dist/src/core/bootstrap/providers/HelperServiceProvider.js.map +1 -0
  30. package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts +9 -0
  31. package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts.map +1 -0
  32. package/dist/src/core/bootstrap/providers/RouteServiceProvider.js +18 -0
  33. package/dist/src/core/bootstrap/providers/RouteServiceProvider.js.map +1 -0
  34. package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts +38 -0
  35. package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts.map +1 -0
  36. package/dist/src/core/bootstrap/providers/ServiceProvider.js +41 -0
  37. package/dist/src/core/bootstrap/providers/ServiceProvider.js.map +1 -0
  38. package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts +9 -0
  39. package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts.map +1 -0
  40. package/dist/src/core/bootstrap/providers/ViewServiceProvider.js +18 -0
  41. package/dist/src/core/bootstrap/providers/ViewServiceProvider.js.map +1 -0
  42. package/dist/src/core/bootstrap/providers/default-providers.d.ts +14 -0
  43. package/dist/src/core/bootstrap/providers/default-providers.d.ts.map +1 -0
  44. package/dist/src/core/bootstrap/providers/default-providers.js +79 -0
  45. package/dist/src/core/bootstrap/providers/default-providers.js.map +1 -0
  46. package/dist/src/core/bootstrap/providers/index.d.ts +10 -0
  47. package/dist/src/core/bootstrap/providers/index.d.ts.map +1 -0
  48. package/dist/src/core/bootstrap/providers/index.js +9 -0
  49. package/dist/src/core/bootstrap/providers/index.js.map +1 -0
  50. package/dist/src/core/bootstrap/providers/provider-order.d.ts +19 -0
  51. package/dist/src/core/bootstrap/providers/provider-order.d.ts.map +1 -0
  52. package/dist/src/core/bootstrap/providers/provider-order.js +51 -0
  53. package/dist/src/core/bootstrap/providers/provider-order.js.map +1 -0
  54. package/dist/src/core/cache/ViewCache.d.ts +46 -0
  55. package/dist/src/core/cache/ViewCache.d.ts.map +1 -0
  56. package/dist/src/core/cache/ViewCache.js +85 -0
  57. package/dist/src/core/cache/ViewCache.js.map +1 -0
  58. package/dist/src/core/cache/index.d.ts +2 -0
  59. package/dist/src/core/cache/index.d.ts.map +1 -0
  60. package/dist/src/core/cache/index.js +2 -0
  61. package/dist/src/core/cache/index.js.map +1 -0
  62. package/dist/src/core/contracts/ApiInterface.d.ts +11 -0
  63. package/dist/src/core/contracts/ApiInterface.d.ts.map +1 -0
  64. package/dist/src/core/contracts/ApiInterface.js +2 -0
  65. package/dist/src/core/contracts/ApiInterface.js.map +1 -0
  66. package/dist/src/core/contracts/ApplicationInterface.d.ts +66 -0
  67. package/dist/src/core/contracts/ApplicationInterface.d.ts.map +1 -0
  68. package/dist/src/core/contracts/ApplicationInterface.js +3 -0
  69. package/dist/src/core/contracts/ApplicationInterface.js.map +1 -0
  70. package/dist/src/core/contracts/BlockInterface.d.ts +67 -0
  71. package/dist/src/core/contracts/BlockInterface.d.ts.map +1 -0
  72. package/dist/src/core/contracts/BlockInterface.js +2 -0
  73. package/dist/src/core/contracts/BlockInterface.js.map +1 -0
  74. package/dist/src/core/contracts/ComponentInterface.d.ts +24 -0
  75. package/dist/src/core/contracts/ComponentInterface.d.ts.map +1 -0
  76. package/dist/src/core/contracts/ComponentInterface.js +2 -0
  77. package/dist/src/core/contracts/ComponentInterface.js.map +1 -0
  78. package/dist/src/core/contracts/ElementInterface.d.ts +117 -0
  79. package/dist/src/core/contracts/ElementInterface.d.ts.map +1 -0
  80. package/dist/src/core/contracts/ElementInterface.js +2 -0
  81. package/dist/src/core/contracts/ElementInterface.js.map +1 -0
  82. package/dist/src/core/contracts/EventServiceInterface.d.ts +37 -0
  83. package/dist/src/core/contracts/EventServiceInterface.d.ts.map +1 -0
  84. package/dist/src/core/contracts/EventServiceInterface.js +3 -0
  85. package/dist/src/core/contracts/EventServiceInterface.js.map +1 -0
  86. package/dist/src/core/contracts/HelperInterface.d.ts +231 -0
  87. package/dist/src/core/contracts/HelperInterface.d.ts.map +1 -0
  88. package/dist/src/core/contracts/HelperInterface.js +3 -0
  89. package/dist/src/core/contracts/HelperInterface.js.map +1 -0
  90. package/dist/src/core/contracts/HttpServiceInterface.d.ts +38 -0
  91. package/dist/src/core/contracts/HttpServiceInterface.d.ts.map +1 -0
  92. package/dist/src/core/contracts/HttpServiceInterface.js +3 -0
  93. package/dist/src/core/contracts/HttpServiceInterface.js.map +1 -0
  94. package/dist/src/core/contracts/LoggerServiceInterface.d.ts +37 -0
  95. package/dist/src/core/contracts/LoggerServiceInterface.d.ts.map +1 -0
  96. package/dist/src/core/contracts/LoggerServiceInterface.js +3 -0
  97. package/dist/src/core/contracts/LoggerServiceInterface.js.map +1 -0
  98. package/dist/src/core/contracts/LoopContextInterface.d.ts +14 -0
  99. package/dist/src/core/contracts/LoopContextInterface.d.ts.map +1 -0
  100. package/dist/src/core/contracts/LoopContextInterface.js +3 -0
  101. package/dist/src/core/contracts/LoopContextInterface.js.map +1 -0
  102. package/dist/src/core/contracts/MarkerInterface.d.ts +55 -0
  103. package/dist/src/core/contracts/MarkerInterface.d.ts.map +1 -0
  104. package/dist/src/core/contracts/MarkerInterface.js +2 -0
  105. package/dist/src/core/contracts/MarkerInterface.js.map +1 -0
  106. package/dist/src/core/contracts/ReactiveInterface.d.ts +38 -0
  107. package/dist/src/core/contracts/ReactiveInterface.d.ts.map +1 -0
  108. package/dist/src/core/contracts/ReactiveInterface.js +2 -0
  109. package/dist/src/core/contracts/ReactiveInterface.js.map +1 -0
  110. package/dist/src/core/contracts/RouterInterface.d.ts +58 -0
  111. package/dist/src/core/contracts/RouterInterface.d.ts.map +1 -0
  112. package/dist/src/core/contracts/RouterInterface.js +2 -0
  113. package/dist/src/core/contracts/RouterInterface.js.map +1 -0
  114. package/dist/src/core/contracts/ServiceProviderInterface.d.ts +12 -0
  115. package/dist/src/core/contracts/ServiceProviderInterface.d.ts.map +1 -0
  116. package/dist/src/core/contracts/ServiceProviderInterface.js +2 -0
  117. package/dist/src/core/contracts/ServiceProviderInterface.js.map +1 -0
  118. package/dist/src/core/contracts/StorageServiceInterface.d.ts +43 -0
  119. package/dist/src/core/contracts/StorageServiceInterface.d.ts.map +1 -0
  120. package/dist/src/core/contracts/StorageServiceInterface.js +3 -0
  121. package/dist/src/core/contracts/StorageServiceInterface.js.map +1 -0
  122. package/dist/src/core/contracts/StoreServiceInterface.d.ts +45 -0
  123. package/dist/src/core/contracts/StoreServiceInterface.d.ts.map +1 -0
  124. package/dist/src/core/contracts/StoreServiceInterface.js +3 -0
  125. package/dist/src/core/contracts/StoreServiceInterface.js.map +1 -0
  126. package/dist/src/core/contracts/ViewCacheInterface.d.ts +13 -0
  127. package/dist/src/core/contracts/ViewCacheInterface.d.ts.map +1 -0
  128. package/dist/src/core/contracts/ViewCacheInterface.js +3 -0
  129. package/dist/src/core/contracts/ViewCacheInterface.js.map +1 -0
  130. package/dist/src/core/contracts/ViewControllerInterface.d.ts +115 -0
  131. package/dist/src/core/contracts/ViewControllerInterface.d.ts.map +1 -0
  132. package/dist/src/core/contracts/ViewControllerInterface.js +2 -0
  133. package/dist/src/core/contracts/ViewControllerInterface.js.map +1 -0
  134. package/dist/src/core/contracts/ViewInterface.d.ts +24 -0
  135. package/dist/src/core/contracts/ViewInterface.d.ts.map +1 -0
  136. package/dist/src/core/contracts/ViewInterface.js +2 -0
  137. package/dist/src/core/contracts/ViewInterface.js.map +1 -0
  138. package/dist/src/core/contracts/ViewManagerInterface.d.ts +44 -0
  139. package/dist/src/core/contracts/ViewManagerInterface.d.ts.map +1 -0
  140. package/dist/src/core/contracts/ViewManagerInterface.js +2 -0
  141. package/dist/src/core/contracts/ViewManagerInterface.js.map +1 -0
  142. package/dist/src/core/contracts/ViewStateInterface.d.ts +40 -0
  143. package/dist/src/core/contracts/ViewStateInterface.d.ts.map +1 -0
  144. package/dist/src/core/contracts/ViewStateInterface.js +3 -0
  145. package/dist/src/core/contracts/ViewStateInterface.js.map +1 -0
  146. package/dist/src/core/contracts/common.d.ts +28 -0
  147. package/dist/src/core/contracts/common.d.ts.map +1 -0
  148. package/dist/src/core/contracts/common.js +29 -0
  149. package/dist/src/core/contracts/common.js.map +1 -0
  150. package/dist/src/core/contracts/utils.d.ts +20 -0
  151. package/dist/src/core/contracts/utils.d.ts.map +1 -0
  152. package/dist/src/core/contracts/utils.js +4 -0
  153. package/dist/src/core/contracts/utils.js.map +1 -0
  154. package/dist/src/core/contracts/views.d.ts +23 -0
  155. package/dist/src/core/contracts/views.d.ts.map +1 -0
  156. package/dist/src/core/contracts/views.js +2 -0
  157. package/dist/src/core/contracts/views.js.map +1 -0
  158. package/dist/src/core/elements/Block.d.ts +58 -0
  159. package/dist/src/core/elements/Block.d.ts.map +1 -0
  160. package/dist/src/core/elements/Block.js +77 -0
  161. package/dist/src/core/elements/Block.js.map +1 -0
  162. package/dist/src/core/elements/BlockOutlet.d.ts +34 -0
  163. package/dist/src/core/elements/BlockOutlet.d.ts.map +1 -0
  164. package/dist/src/core/elements/BlockOutlet.js +59 -0
  165. package/dist/src/core/elements/BlockOutlet.js.map +1 -0
  166. package/dist/src/core/elements/Component.d.ts +62 -0
  167. package/dist/src/core/elements/Component.d.ts.map +1 -0
  168. package/dist/src/core/elements/Component.js +72 -0
  169. package/dist/src/core/elements/Component.js.map +1 -0
  170. package/dist/src/core/elements/ElementManager.d.ts +23 -0
  171. package/dist/src/core/elements/ElementManager.d.ts.map +1 -0
  172. package/dist/src/core/elements/ElementManager.js +33 -0
  173. package/dist/src/core/elements/ElementManager.js.map +1 -0
  174. package/dist/src/core/elements/Fragment.d.ts +51 -0
  175. package/dist/src/core/elements/Fragment.d.ts.map +1 -0
  176. package/dist/src/core/elements/Fragment.js +133 -0
  177. package/dist/src/core/elements/Fragment.js.map +1 -0
  178. package/dist/src/core/elements/Html.d.ts +52 -0
  179. package/dist/src/core/elements/Html.d.ts.map +1 -0
  180. package/dist/src/core/elements/Html.js +299 -0
  181. package/dist/src/core/elements/Html.js.map +1 -0
  182. package/dist/src/core/elements/Output.d.ts +69 -0
  183. package/dist/src/core/elements/Output.d.ts.map +1 -0
  184. package/dist/src/core/elements/Output.js +121 -0
  185. package/dist/src/core/elements/Output.js.map +1 -0
  186. package/dist/src/core/elements/Reactive.d.ts +77 -0
  187. package/dist/src/core/elements/Reactive.d.ts.map +1 -0
  188. package/dist/src/core/elements/Reactive.js +199 -0
  189. package/dist/src/core/elements/Reactive.js.map +1 -0
  190. package/dist/src/core/elements/TextElement.d.ts +46 -0
  191. package/dist/src/core/elements/TextElement.d.ts.map +1 -0
  192. package/dist/src/core/elements/TextElement.js +94 -0
  193. package/dist/src/core/elements/TextElement.js.map +1 -0
  194. package/dist/src/core/elements/Wrapper.d.ts +50 -0
  195. package/dist/src/core/elements/Wrapper.d.ts.map +1 -0
  196. package/dist/src/core/elements/Wrapper.js +96 -0
  197. package/dist/src/core/elements/Wrapper.js.map +1 -0
  198. package/dist/src/core/elements/Yield.d.ts +34 -0
  199. package/dist/src/core/elements/Yield.d.ts.map +1 -0
  200. package/dist/src/core/elements/Yield.js +56 -0
  201. package/dist/src/core/elements/Yield.js.map +1 -0
  202. package/dist/src/core/elements/helpers.d.ts +8 -0
  203. package/dist/src/core/elements/helpers.d.ts.map +1 -0
  204. package/dist/src/core/elements/helpers.js +40 -0
  205. package/dist/src/core/elements/helpers.js.map +1 -0
  206. package/dist/src/core/elements/index.d.ts +12 -0
  207. package/dist/src/core/elements/index.d.ts.map +1 -0
  208. package/dist/src/core/elements/index.js +12 -0
  209. package/dist/src/core/elements/index.js.map +1 -0
  210. package/dist/src/core/hellpers/ApiClient.d.ts +58 -0
  211. package/dist/src/core/hellpers/ApiClient.d.ts.map +1 -0
  212. package/dist/src/core/hellpers/ApiClient.js +122 -0
  213. package/dist/src/core/hellpers/ApiClient.js.map +1 -0
  214. package/dist/src/core/hellpers/app.d.ts +3 -0
  215. package/dist/src/core/hellpers/app.d.ts.map +1 -0
  216. package/dist/src/core/hellpers/app.js +53 -0
  217. package/dist/src/core/hellpers/app.js.map +1 -0
  218. package/dist/src/core/hellpers/utils.d.ts +26 -0
  219. package/dist/src/core/hellpers/utils.d.ts.map +1 -0
  220. package/dist/src/core/hellpers/utils.js +96 -0
  221. package/dist/src/core/hellpers/utils.js.map +1 -0
  222. package/dist/src/core/routers/Router.d.ts +212 -0
  223. package/dist/src/core/routers/Router.d.ts.map +1 -0
  224. package/dist/src/core/routers/Router.js +623 -0
  225. package/dist/src/core/routers/Router.js.map +1 -0
  226. package/dist/src/core/routers/index.d.ts +3 -0
  227. package/dist/src/core/routers/index.d.ts.map +1 -0
  228. package/dist/src/core/routers/index.js +2 -0
  229. package/dist/src/core/routers/index.js.map +1 -0
  230. package/dist/src/core/services/BlockManager.d.ts +63 -0
  231. package/dist/src/core/services/BlockManager.d.ts.map +1 -0
  232. package/dist/src/core/services/BlockManager.js +191 -0
  233. package/dist/src/core/services/BlockManager.js.map +1 -0
  234. package/dist/src/core/services/DomService.d.ts +9 -0
  235. package/dist/src/core/services/DomService.d.ts.map +1 -0
  236. package/dist/src/core/services/DomService.js +18 -0
  237. package/dist/src/core/services/DomService.js.map +1 -0
  238. package/dist/src/core/services/EventService.d.ts +58 -0
  239. package/dist/src/core/services/EventService.d.ts.map +1 -0
  240. package/dist/src/core/services/EventService.js +212 -0
  241. package/dist/src/core/services/EventService.js.map +1 -0
  242. package/dist/src/core/services/HelperService.d.ts +443 -0
  243. package/dist/src/core/services/HelperService.d.ts.map +1 -0
  244. package/dist/src/core/services/HelperService.js +1650 -0
  245. package/dist/src/core/services/HelperService.js.map +1 -0
  246. package/dist/src/core/services/HttpService.d.ts +63 -0
  247. package/dist/src/core/services/HttpService.d.ts.map +1 -0
  248. package/dist/src/core/services/HttpService.js +182 -0
  249. package/dist/src/core/services/HttpService.js.map +1 -0
  250. package/dist/src/core/services/LoggerService.d.ts +56 -0
  251. package/dist/src/core/services/LoggerService.d.ts.map +1 -0
  252. package/dist/src/core/services/LoggerService.js +94 -0
  253. package/dist/src/core/services/LoggerService.js.map +1 -0
  254. package/dist/src/core/services/MarkerRegistry.d.ts +94 -0
  255. package/dist/src/core/services/MarkerRegistry.d.ts.map +1 -0
  256. package/dist/src/core/services/MarkerRegistry.js +199 -0
  257. package/dist/src/core/services/MarkerRegistry.js.map +1 -0
  258. package/dist/src/core/services/MarkerService.d.ts +299 -0
  259. package/dist/src/core/services/MarkerService.d.ts.map +1 -0
  260. package/dist/src/core/services/MarkerService.js +723 -0
  261. package/dist/src/core/services/MarkerService.js.map +1 -0
  262. package/dist/src/core/services/StorageService.d.ts +69 -0
  263. package/dist/src/core/services/StorageService.d.ts.map +1 -0
  264. package/dist/src/core/services/StorageService.js +243 -0
  265. package/dist/src/core/services/StorageService.js.map +1 -0
  266. package/dist/src/core/services/StoreService.d.ts +80 -0
  267. package/dist/src/core/services/StoreService.d.ts.map +1 -0
  268. package/dist/src/core/services/StoreService.js +301 -0
  269. package/dist/src/core/services/StoreService.js.map +1 -0
  270. package/dist/src/core/services/index.d.ts +9 -0
  271. package/dist/src/core/services/index.d.ts.map +1 -0
  272. package/dist/src/core/services/index.js +9 -0
  273. package/dist/src/core/services/index.js.map +1 -0
  274. package/dist/src/core/types/utils.d.ts +29 -0
  275. package/dist/src/core/types/utils.d.ts.map +1 -0
  276. package/dist/src/core/types/utils.js +22 -0
  277. package/dist/src/core/types/utils.js.map +1 -0
  278. package/dist/src/core/view/LoopContext.d.ts +38 -0
  279. package/dist/src/core/view/LoopContext.d.ts.map +1 -0
  280. package/dist/src/core/view/LoopContext.js +100 -0
  281. package/dist/src/core/view/LoopContext.js.map +1 -0
  282. package/dist/src/core/view/Section.d.ts +41 -0
  283. package/dist/src/core/view/Section.d.ts.map +1 -0
  284. package/dist/src/core/view/Section.js +67 -0
  285. package/dist/src/core/view/Section.js.map +1 -0
  286. package/dist/src/core/view/View.d.ts +63 -0
  287. package/dist/src/core/view/View.d.ts.map +1 -0
  288. package/dist/src/core/view/View.js +85 -0
  289. package/dist/src/core/view/View.js.map +1 -0
  290. package/dist/src/core/view/ViewController.d.ts +277 -0
  291. package/dist/src/core/view/ViewController.d.ts.map +1 -0
  292. package/dist/src/core/view/ViewController.js +862 -0
  293. package/dist/src/core/view/ViewController.js.map +1 -0
  294. package/dist/src/core/view/ViewManager.d.ts +141 -0
  295. package/dist/src/core/view/ViewManager.d.ts.map +1 -0
  296. package/dist/src/core/view/ViewManager.js +565 -0
  297. package/dist/src/core/view/ViewManager.js.map +1 -0
  298. package/dist/src/core/view/ViewState.d.ts +117 -0
  299. package/dist/src/core/view/ViewState.d.ts.map +1 -0
  300. package/dist/src/core/view/ViewState.js +410 -0
  301. package/dist/src/core/view/ViewState.js.map +1 -0
  302. package/dist/src/core/view/index.d.ts +6 -0
  303. package/dist/src/core/view/index.d.ts.map +1 -0
  304. package/dist/src/core/view/index.js +6 -0
  305. package/dist/src/core/view/index.js.map +1 -0
  306. package/index.ts +62 -0
  307. package/package.json +70 -0
  308. package/plugins.ts +77 -0
  309. package/src/core/app/Application.ts +410 -0
  310. package/src/core/bootstrap/app.ts +58 -0
  311. package/src/core/bootstrap/providers/ApiServiceProvider.ts +18 -0
  312. package/src/core/bootstrap/providers/CoreServiceProvider.ts +19 -0
  313. package/src/core/bootstrap/providers/HelperServiceProvider.ts +12 -0
  314. package/src/core/bootstrap/providers/RouteServiceProvider.ts +17 -0
  315. package/src/core/bootstrap/providers/ServiceProvider.ts +51 -0
  316. package/src/core/bootstrap/providers/ViewServiceProvider.ts +17 -0
  317. package/src/core/bootstrap/providers/default-providers.ts +94 -0
  318. package/src/core/bootstrap/providers/index.ts +9 -0
  319. package/src/core/bootstrap/providers/provider-order.test.ts +67 -0
  320. package/src/core/bootstrap/providers/provider-order.ts +66 -0
  321. package/src/core/cache/ViewCache.ts +102 -0
  322. package/src/core/cache/index.ts +1 -0
  323. package/src/core/contracts/ApiInterface.ts +11 -0
  324. package/src/core/contracts/ApplicationInterface.ts +79 -0
  325. package/src/core/contracts/BlockInterface.ts +76 -0
  326. package/src/core/contracts/ComponentInterface.ts +26 -0
  327. package/src/core/contracts/ElementInterface.ts +140 -0
  328. package/src/core/contracts/EventServiceInterface.ts +47 -0
  329. package/src/core/contracts/HelperInterface.ts +256 -0
  330. package/src/core/contracts/HttpServiceInterface.ts +51 -0
  331. package/src/core/contracts/LoggerServiceInterface.ts +48 -0
  332. package/src/core/contracts/LoopContextInterface.ts +15 -0
  333. package/src/core/contracts/MarkerInterface.ts +77 -0
  334. package/src/core/contracts/ReactiveInterface.ts +45 -0
  335. package/src/core/contracts/RouterInterface.ts +65 -0
  336. package/src/core/contracts/ServiceProviderInterface.ts +12 -0
  337. package/src/core/contracts/StorageServiceInterface.ts +48 -0
  338. package/src/core/contracts/StoreServiceInterface.ts +50 -0
  339. package/src/core/contracts/ViewCacheInterface.ts +14 -0
  340. package/src/core/contracts/ViewControllerInterface.ts +135 -0
  341. package/src/core/contracts/ViewInterface.ts +31 -0
  342. package/src/core/contracts/ViewManagerInterface.ts +45 -0
  343. package/src/core/contracts/ViewStateInterface.ts +47 -0
  344. package/src/core/contracts/common.ts +27 -0
  345. package/src/core/contracts/utils.ts +23 -0
  346. package/src/core/contracts/views.ts +23 -0
  347. package/src/core/elements/Block.ts +113 -0
  348. package/src/core/elements/BlockOutlet.ts +83 -0
  349. package/src/core/elements/Component.ts +114 -0
  350. package/src/core/elements/ElementManager.ts +48 -0
  351. package/src/core/elements/Fragment.ts +168 -0
  352. package/src/core/elements/Html.ts +364 -0
  353. package/src/core/elements/Output.ts +167 -0
  354. package/src/core/elements/Reactive.ts +253 -0
  355. package/src/core/elements/TextElement.ts +110 -0
  356. package/src/core/elements/Wrapper.ts +131 -0
  357. package/src/core/elements/Yield.ts +70 -0
  358. package/src/core/elements/helpers.ts +56 -0
  359. package/src/core/elements/index.ts +26 -0
  360. package/src/core/hellpers/ApiClient.ts +145 -0
  361. package/src/core/hellpers/app.ts +57 -0
  362. package/src/core/hellpers/utils.ts +109 -0
  363. package/src/core/routers/Router.ts +765 -0
  364. package/src/core/routers/index.ts +2 -0
  365. package/src/core/services/BlockManager.ts +210 -0
  366. package/src/core/services/DomService.ts +26 -0
  367. package/src/core/services/EventService.ts +266 -0
  368. package/src/core/services/HelperService.ts +1653 -0
  369. package/src/core/services/HttpService.ts +235 -0
  370. package/src/core/services/LoggerService.ts +139 -0
  371. package/src/core/services/MarkerRegistry.ts +239 -0
  372. package/src/core/services/MarkerService.ts +923 -0
  373. package/src/core/services/StorageService.ts +268 -0
  374. package/src/core/services/StoreService.ts +338 -0
  375. package/src/core/services/index.ts +8 -0
  376. package/src/core/types/utils.ts +30 -0
  377. package/src/core/view/LoopContext.ts +109 -0
  378. package/src/core/view/Section.ts +86 -0
  379. package/src/core/view/View.ts +109 -0
  380. package/src/core/view/ViewController.ts +1002 -0
  381. package/src/core/view/ViewManager.ts +700 -0
  382. package/src/core/view/ViewState.ts +453 -0
  383. package/src/core/view/index.ts +5 -0
@@ -0,0 +1,65 @@
1
+ import type { ViewManagerInterface } from "./ViewManagerInterface";
2
+
3
+ // ─── Router Interface ────────────────────────────────────────────
4
+
5
+ export type RouterNavigationType = 'push' | 'pop';
6
+ export type RouterMode = 'history' | 'hash';
7
+
8
+ export interface RouteInterface {
9
+ name: string;
10
+ path: string;
11
+ query?: Record<string, any>;
12
+ params?: Record<string, any>;
13
+ [key: string]: any;
14
+ }
15
+
16
+ export interface ActiveRouteInterface {
17
+ route: RouteInterface;
18
+ $query: Record<string, any>;
19
+ $params: Record<string, any>;
20
+ $urlPath: string;
21
+ $fragment: string;
22
+ new(route: RouteInterface, urlPath: string, fragment: string): ActiveRouteInterface;
23
+ setQuery(query: Record<string, any>): void;
24
+ getParam(key: string, defaultValue?: any): any;
25
+ getQuery(key: string, defaultValue?: any): any;
26
+ getParams(): Record<string, any>;
27
+ query(name: string): any;
28
+ param(name: string): any;
29
+ [key: string]: any;
30
+ }
31
+
32
+ export interface RouterInterface {
33
+ /** Set DI container */
34
+ setApp(app: any): this;
35
+ /** Set ViewManager for view mounting */
36
+ setViewManager(vm: ViewManagerInterface): this;
37
+ /** Router mode: history or hash */
38
+ setMode(mode: RouterMode): this;
39
+ /** Add a route */
40
+ addRoute(path: string, component: string, options?: any): this;
41
+ /** Add multiple routes */
42
+ addRoutes(routes: any[]): this;
43
+ /** Navigate to a path */
44
+ navigate(path: string): void;
45
+ /** Navigate to a named route */
46
+ navigateTo(routeName: string, params?: Record<string, any>): void;
47
+ /** Replace current route */
48
+ replace(path: string): void;
49
+ /** Generate URL for a named route */
50
+ getURL(name: string, params?: Record<string, any>): string | null;
51
+ /** Get current route */
52
+ getCurrentRoute(): ActiveRouteInterface | null;
53
+ /** Navigation guards */
54
+ beforeEach(guard: (to: ActiveRouteInterface, from: ActiveRouteInterface, urlPath: string) => boolean | Promise<boolean>): this;
55
+ afterEach(hook: (to: ActiveRouteInterface, from: ActiveRouteInterface) => void): this;
56
+ /** Start listening to URL changes */
57
+ start(skipInitial?: boolean): void;
58
+ /** Stop listening */
59
+ stop(): void;
60
+ /** Full destroy */
61
+ destroy(): void;
62
+
63
+ getFullUrl(): string;
64
+ }
65
+
@@ -0,0 +1,12 @@
1
+ import { OneObjectType } from "../types/utils";
2
+ import type { ApplicationInterface } from "./ApplicationInterface";
3
+
4
+ /** Service Provider — register() đăng ký, boot() khởi động */
5
+ export interface ServiceProviderInterface {
6
+ oneType?: OneObjectType;
7
+ name: string;
8
+ dependsOn?: string[];
9
+ initApplication?(App?: ApplicationInterface): void;
10
+ register(): void;
11
+ boot?(): void;
12
+ }
@@ -0,0 +1,48 @@
1
+ // ─── Storage Service Interface ───────────────────────────────────
2
+
3
+ export type StorageEventCallback = (data?: any) => void;
4
+
5
+ export interface StorageServiceInterface {
6
+ // ─── CRUD ───────────────────────────────────────────────────
7
+ /**
8
+ * Set value with optional TTL (in seconds).
9
+ * Supports bulk set: set({ key1: val1, key2: val2 })
10
+ */
11
+ set(key: string | Record<string, any>, value?: any, ttl?: number | null): boolean;
12
+ /** Get value (null if expired or missing) */
13
+ get<T = any>(key: string, defaultValue?: T | null): T | null;
14
+ /** Check if key exists and not expired */
15
+ has(key: string): boolean;
16
+ /** Remove key */
17
+ remove(key: string): boolean;
18
+ /** Clear all storage data */
19
+ clear(): void;
20
+
21
+ // ─── Query ──────────────────────────────────────────────────
22
+ /** Get all non-expired values as plain object */
23
+ getAll(): Record<string, any>;
24
+ /** All non-expired keys */
25
+ getAllKeys(): string[];
26
+ /** Number of stored items */
27
+ size(): number;
28
+ isEmpty(): boolean;
29
+
30
+ // ─── Import / Export / Backup ───────────────────────────────
31
+ /** Export all data as JSON string */
32
+ export(): string;
33
+ /** Import data from JSON string */
34
+ import(json: string): boolean;
35
+ /** Create backup snapshot */
36
+ backup(): { timestamp: number; key: string; data: Record<string, any> };
37
+ /** Restore from backup */
38
+ restore(backup: { data: Record<string, any> }): boolean;
39
+
40
+ // ─── Event System ───────────────────────────────────────────
41
+ /** Subscribe to storage events. Returns unsubscribe function. */
42
+ on(event: string, callback: StorageEventCallback): () => void;
43
+ /** Unsubscribe from event */
44
+ off(event: string, callback: StorageEventCallback): void;
45
+
46
+ // ─── Lifecycle ──────────────────────────────────────────────
47
+ destroy(): void;
48
+ }
@@ -0,0 +1,50 @@
1
+ // ─── Store Service Interface ─────────────────────────────────────
2
+
3
+ export interface StoreServiceInterface {
4
+ [key: string]: any;
5
+
6
+ // ─── CRUD ───────────────────────────────────────────────────
7
+ /** Set value with optional TTL (in minutes) */
8
+ set<T = any>(key: string, value: T, ttl?: number | null): void;
9
+ /** Get value (returns null if expired or missing) */
10
+ get<T = any>(key: string): T | null;
11
+ /** Check if key exists and is not expired */
12
+ has(key: string): boolean;
13
+ /** Remove key, returns removed value or null */
14
+ remove(key: string): any;
15
+ /** Clear all data, listeners, TTLs */
16
+ clear(): void;
17
+
18
+ // ─── Subscriptions ──────────────────────────────────────────
19
+ /**
20
+ * Subscribe to key changes. Returns unsubscribe function.
21
+ *
22
+ * - subscribe('user', (value) => { ... })
23
+ * - subscribe(['user', 'token'], (values) => { ... })
24
+ */
25
+ subscribe(key: string | string[], callback: (value: any) => void): () => void;
26
+ /** Unsubscribe specific callback from key */
27
+ unsubscribe(key: string, callback: (value: any) => void): void;
28
+ /** Subscribe to TTL expiration of a key */
29
+ onExpire(key: string, callback: (value: any) => void): () => void;
30
+
31
+ // ─── TTL Utilities ──────────────────────────────────────────
32
+ /** Get TTL info for a key */
33
+ getTTL(key: string): { ttl: number; createdAt: number; expiresAt: number; remaining: number; expired: boolean } | null;
34
+ /** Refresh TTL (reset timer). Pass null to use existing TTL. */
35
+ refreshTTL(key: string, ttl?: number | null): void;
36
+ /** Remove TTL from key (key lives forever) */
37
+ removeTTL(key: string): void;
38
+
39
+ // ─── Iteration ──────────────────────────────────────────────
40
+ /** All non-expired keys */
41
+ keys(): string[];
42
+ /** All non-expired values */
43
+ values<T = any>(): T[];
44
+ /** All non-expired entries */
45
+ entries<T = any>(): Array<[string, T]>;
46
+
47
+ // ─── Lifecycle ──────────────────────────────────────────────
48
+ /** Destroy — clear all + stop cleanup timer */
49
+ destroy(): void;
50
+ }
@@ -0,0 +1,14 @@
1
+ // ─── View Cache Interface ────────────────────────────────────────
2
+
3
+ export interface ViewCacheInterface {
4
+ /** Store a rendered view's DOM state */
5
+ store(viewId: string, element: HTMLElement | DocumentFragment): void;
6
+ /** Retrieve cached DOM for a view (returns null if not cached) */
7
+ retrieve(viewId: string): HTMLElement | DocumentFragment | null;
8
+ /** Check if a view is cached */
9
+ has(viewId: string): boolean;
10
+ /** Remove a specific view from cache */
11
+ remove(viewId: string): void;
12
+ /** Clear all cached views */
13
+ clear(): void;
14
+ }
@@ -0,0 +1,135 @@
1
+ import type { OneObjectType } from "../types/utils";
2
+ import type { ViewInterface, ViewRenderFactory } from "./ViewInterface";
3
+ import type { ViewStateInterface } from "./ViewStateInterface";
4
+ import type { HtmlInterface, FragmentInterface, OneElementEventHandler, OneElementChildren, OneChildrenFactory, WrapperInterface } from "./ElementInterface";
5
+ import type { ReactiveInterface } from "./ReactiveInterface";
6
+ import type { BlockInterface } from "./BlockInterface";
7
+ import type { LoopContextInterface } from "./LoopContextInterface";
8
+ import { SectionInterface } from "./views";
9
+
10
+ // ─── ViewController Interface ────────────────────────────────────
11
+
12
+ export type ViewType = 'view' | 'layout' | 'component' | 'template';
13
+
14
+ export interface ViewControllerInterface {
15
+ oneType: OneObjectType;
16
+ view: ViewInterface;
17
+ viewId: string;
18
+ path: string;
19
+ viewType: ViewType;
20
+ states: ViewStateInterface;
21
+ loopContext: LoopContextInterface | null;
22
+ /** Raw input data reference */
23
+ data: Record<string, any>;
24
+ /** Whether this view defines a super view (layout) */
25
+ hasSuperView: boolean;
26
+ /** Path to super view (layout) */
27
+ superViewPath: string | null;
28
+
29
+ /** Main element (Wrapper) for this view */
30
+ mainElement: any;
31
+
32
+ sections: Map<string, SectionInterface>;
33
+ blocks: Map<string, BlockInterface>;
34
+ urlPath: string | null;
35
+
36
+ childrenFactory: OneChildrenFactory | null;
37
+
38
+ wrapper: (factory: OneChildrenFactory) => WrapperInterface;
39
+
40
+ addEventListener(element: HTMLElement, event: string, handlers: OneElementEventHandler): void;
41
+ /** Called by reactive system to schedule an update */
42
+ scheduleUpdate(reactive: ReactiveInterface): void;
43
+ /** Lifecycle */
44
+ setup(config: Record<string, any>): void;
45
+ /** Commit initial data — set initial state values after render */
46
+ commitData(): void;
47
+ /** Update data from external source */
48
+ updateData(data: Record<string, any>): void;
49
+ /** Update single data item */
50
+ updateDataItem(key: string, value: any): void;
51
+ /** Start reactive subscriptions */
52
+ start(): void;
53
+ /** Stop reactive subscriptions (for caching) */
54
+ stop(): void;
55
+ /** Loop directives */
56
+ __foreach<T>(list: T[] | Record<string, T>, callback: (item: T, key: string, index: number, loop: any) => any): any[];
57
+ __for(loopType?: string, start?: number, end?: number, execute?: (loop: any) => any): any;
58
+ __while(execute: (loop: any) => any, maxIterations?: number): any;
59
+ /** App reference */
60
+ App: any;
61
+ setApp(app: any): void;
62
+ setUserDefinedConfig(config: Record<string, any>): void;
63
+ /** Set root element — the container this view renders into */
64
+ setRootElement(rootElement: HtmlInterface): void;
65
+ /** Render the view's element tree into rootElement */
66
+ render(): ViewInterface | FragmentInterface | null;
67
+
68
+ prerender(): ViewInterface | FragmentInterface | null;
69
+
70
+ superView: ViewControllerInterface | null;
71
+
72
+ /** Whether this controller IS a layout (super view) */
73
+ isSuperView: boolean;
74
+ /** Mark this controller as a super view (layout) */
75
+ setIsSuperView(isSuper: boolean): void;
76
+ /** Set the parent layout's controller */
77
+ setSuperView(superView: ViewControllerInterface): void;
78
+ /** Track the original page view's controller for block mounting */
79
+ originView: ViewControllerInterface | null;
80
+ /** Set the origin (page) controller reference */
81
+ setOriginView(origin: ViewControllerInterface): void;
82
+ setChainFromOrigin(): void;
83
+ ejectOriginChain(): void;
84
+ destroy(): void;
85
+
86
+
87
+
88
+ /** Get config value with optional default */
89
+ getConfig(key?: string, defaultValue?: any): any;
90
+ getConfig(): ViewControllerConfig;
91
+ }
92
+
93
+ // ─── View Config Types ───────────────────────────────────────────
94
+
95
+ export type ViewConfig = {
96
+ hasSuperView?: boolean;
97
+ viewType?: 'view' | 'layout' | 'component' | 'template';
98
+ sections?: Record<string, ViewRenderFactory>;
99
+ hasAwaitData?: boolean;
100
+ hasFetchData?: boolean;
101
+ useVars?: boolean;
102
+ hasSections?: boolean;
103
+ hasSectionPreload?: boolean;
104
+ hasPrerender?: boolean;
105
+ renderLongSections?: Record<string, any>;
106
+ renderSections?: Record<string, any>;
107
+ prerenderSections?: Record<string, any>;
108
+ [key: string]: any;
109
+ }
110
+
111
+ export type ViewRuntimeConfig = {
112
+ data?: Record<string, any>;
113
+
114
+ fetch?: {
115
+ url: string;
116
+ method?: string;
117
+ headers?: Record<string, string>;
118
+ body?: any;
119
+ } | null;
120
+
121
+ viewId?: string;
122
+ path?: string;
123
+ superView?: string | null;
124
+ subscribe?: boolean;
125
+ scripts?: any[];
126
+ styles?: any[];
127
+ resources?: any[];
128
+ commitConstructorData?: () => void;
129
+ updateVariableData?: (data: Record<string, any>) => void;
130
+ updateVariableItemData?: (key: string, value: any) => void;
131
+ prerender?: ViewRenderFactory | null;
132
+ render?: ViewRenderFactory | null;
133
+ [key: string]: any;
134
+ }
135
+ export type ViewControllerConfig = ViewConfig & ViewRuntimeConfig;
@@ -0,0 +1,31 @@
1
+ import type { OneObjectType } from "../types/utils";
2
+ import type { ViewControllerInterface, ViewType } from "./ViewControllerInterface";
3
+ import type { FragmentInterface } from "./ElementInterface";
4
+
5
+ // ─── View Interface ──────────────────────────────────────────────
6
+
7
+ export interface ViewInterface {
8
+ oneType: OneObjectType;
9
+ __ctrl__: ViewControllerInterface;
10
+ path: string;
11
+ viewType: ViewType;
12
+ [key: string]: any;
13
+ }
14
+
15
+ // ─── View Types ──────────────────────────────────────────────────
16
+
17
+ /** Render factory for a View — compiled output calls this to build the DOM tree */
18
+ export type ViewRenderFactory = () => FragmentInterface | ViewInterface | null;
19
+
20
+ /** View class constructor signature */
21
+ export type ViewConstructor = new (path: string, viewType: 'view' | 'layout' | 'component', viewControllerClass?: any) => ViewInterface;
22
+
23
+ /** View lifecycle hooks — user can implement any of these */
24
+ export interface ViewLifecycleHooks {
25
+ onInit?(): void | Promise<void>;
26
+ onMounted?(): void | Promise<void>;
27
+ onUpdated?(): void | Promise<void>;
28
+ onDestroy?(): void | Promise<void>;
29
+ onActivated?(): void | Promise<void>;
30
+ onDeactivated?(): void | Promise<void>;
31
+ }
@@ -0,0 +1,45 @@
1
+ import type { ViewInterface } from "./ViewInterface";
2
+ import type { ApplicationInterface } from "./ApplicationInterface";
3
+ import { RouterNavigationType } from "./RouterInterface";
4
+
5
+
6
+ // ─── ViewManager Interface ───────────────────────────────────────
7
+
8
+ export interface ActiveViewInfo {
9
+ view: ViewInterface;
10
+ path: string;
11
+ isLayout: boolean;
12
+ isActive: boolean;
13
+ }
14
+
15
+ export interface ViewManagerInterface {
16
+ [key: string]: any;
17
+ /** Set DI container */
18
+ setApp(app: ApplicationInterface): void;
19
+ /** Set root DOM container */
20
+ setContainer(container: HTMLElement): void;
21
+ /** Get root container */
22
+ getContainer(): HTMLElement | null;
23
+ /** Register view modules by name */
24
+ setViewRegistry(registry: Record<string, ((...args: any[]) => any) | (() => Promise<any>)>): void;
25
+ /** Register a single view module */
26
+ registerView(name: string, loader: ((...args: any[]) => any) | (() => Promise<any>)): void;
27
+ /** Initialize with optional config */
28
+ init(config?: { container?: HTMLElement; registry?: Record<string, any> }): void;
29
+ /** Mount a view by name — main entry point */
30
+ mountView(name: string, data?: Record<string, any>, route?: any, navigationType?: RouterNavigationType ): any;
31
+ /** Unmount all active views */
32
+ unmountAll(): void;
33
+ /** Unmount a specific view by path */
34
+ unmountView(path: string): void;
35
+ /** Get currently active page view */
36
+ getCurrentView(): ViewInterface | null;
37
+ /** Get current layout view */
38
+ getCurrentLayout(): ViewInterface | null;
39
+ /** Get full view stack */
40
+ getViewStack(): ViewInterface[];
41
+ /** Check if a view is mounted */
42
+ isViewMounted(path: string): boolean;
43
+ /** Full destroy */
44
+ destroy(): void;
45
+ }
@@ -0,0 +1,47 @@
1
+ // ─── ViewState Interface ─────────────────────────────────────────
2
+
3
+ export interface ViewStateInterface {
4
+ /** StateManager accessor */
5
+ __: StateManagerInterface;
6
+ /** Subscribe to state changes */
7
+ on(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): () => void;
8
+ /** Unsubscribe */
9
+ off(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): void;
10
+ [key: string]: any;
11
+ }
12
+
13
+ export interface StateManagerInterface {
14
+ /** Create reactive state — returns [value, setter, key] */
15
+ useState(value: any, key?: string | number): [any, (newValue: any) => void, string | number];
16
+ /** Update state by key */
17
+ updateStateByKey(key: string | number, value: any): any;
18
+ /** Get state value by key (supports nested paths: 'user.name') */
19
+ getStateByKey(key: string | number): any;
20
+ /** Subscribe to state changes */
21
+ subscribe(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): () => void;
22
+ /** Unsubscribe */
23
+ unsubscribe(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): void;
24
+ /** Register shorthand — useState alias */
25
+ register(key: string | number, value: any): (newValue: any) => void;
26
+ /** Destroy — cleanup all listeners and states */
27
+ destroy(): void;
28
+ }
29
+
30
+ // ─── State Types ─────────────────────────────────────────────────
31
+
32
+ /** State listener callback */
33
+ export type StateListener = (value: any) => void;
34
+
35
+ /** Multi-key state listener */
36
+ export interface MultiKeyStateListener {
37
+ keys: Set<string | number>;
38
+ callback: (values: Record<string, any>) => void;
39
+ called: boolean;
40
+ }
41
+
42
+ /** State item stored internally by StateManager */
43
+ export interface StateItem {
44
+ value: any;
45
+ setValue: (value: any) => void;
46
+ key: string | number;
47
+ }
@@ -0,0 +1,27 @@
1
+ export type InitMode = 'create' | 'hydrate';
2
+ export enum InitModes {
3
+ CREATE = 'create',
4
+ HYDRATE = 'hydrate'
5
+ }
6
+ /**
7
+ * Common types and utilities for OneView contracts
8
+ * This file defines shared types and enums used across OneView's contracts, such as initialization modes and system keys for HTML elements.
9
+ *
10
+ * Key exports:
11
+ */
12
+ /**
13
+ * System keys for HTML elements used by OneView.
14
+ * These keys are used to store metadata on HTML elements, such as IDs and view information.
15
+ * @name ESK (Element System Keys)
16
+ * @enum {string}
17
+ * @property {string} ID - Key for unique element ID
18
+ * @property {string} VIEW_ID - Key for associated view ID
19
+ * @property {string} BLOCK_NAME - Key for block name in block outlets
20
+ * @property {string} BLOCKOUTLET_NAME - Key for block outlet name
21
+ */
22
+ export enum ESK {
23
+ ID = 'data-one-id',
24
+ VIEW_ID = 'data-one-view-id',
25
+ BLOCK_NAME = 'data-one-block-name',
26
+ BLOCKOUTLET_NAME = 'data-one-blockoutlet-name'
27
+ }
@@ -0,0 +1,23 @@
1
+ // ─── Barrel Re-exports ───────────────────────────────────────────
2
+ // All interfaces and related types re-exported for backward compatibility
3
+
4
+ export type { LoopContextInterface } from "./LoopContextInterface";
5
+ export type { ViewStateInterface, StateManagerInterface, StateListener, MultiKeyStateListener, StateItem } from "./ViewStateInterface";
6
+ export type { OneNodeInterface, HtmlInterface, TextInterface, OutputInterface, FragmentInterface, OneElementConfig, HtmlElementConfig, OneElementEventHandler, OneElementChildren, OneChildrenFactoryOutput, OneChildrenFactory } from "./ElementInterface";
7
+ export type { ReactiveInterface, ReactiveRenderFn, ReactiveChildrenFactory, ReactiveConfig } from "./ReactiveInterface";
8
+ export type { BlockInterface, BlockOutletInterface, BlockManagerInterface, BlockRenderFactory } from "./BlockInterface";
9
+ export type { ViewControllerInterface, ViewType, ViewConfig, ViewRuntimeConfig } from "./ViewControllerInterface";
10
+ export type { ViewInterface, ViewRenderFactory, ViewConstructor, ViewLifecycleHooks } from "./ViewInterface";
11
+ export type { ComponentInterface } from "./ComponentInterface";
12
+ export type { ApplicationInterface, AppFactory, ServiceKey, ServiceFactory, ServiceBinding } from "./ApplicationInterface";
13
+ export type { ServiceProviderInterface } from "./ServiceProviderInterface";
14
+ export type { ViewCacheInterface } from "./ViewCacheInterface";
15
+ export type { ViewManagerInterface, ActiveViewInfo } from "./ViewManagerInterface";
16
+ export type { RouterInterface } from "./RouterInterface";
17
+ export type { HelperInterface, CollectionProxyInterface } from "./HelperInterface";
18
+ export type { EventServiceInterface, EventCallback } from "./EventServiceInterface";
19
+ export type { HttpServiceInterface, HttpRequestConfig, HttpResponse, HttpInterceptor } from "./HttpServiceInterface";
20
+ export type { StoreServiceInterface } from "./StoreServiceInterface";
21
+ export type { StorageServiceInterface, StorageEventCallback } from "./StorageServiceInterface";
22
+ export type { LoggerServiceInterface, LoggerConfig, LogEntry, LogLevel } from "./LoggerServiceInterface";
23
+
@@ -0,0 +1,23 @@
1
+ import { HtmlInterface, OneElementChildren } from "./ElementInterface";
2
+ import { ViewControllerInterface } from "./utils";
3
+
4
+ export type SectionItemType = 'static' | 'dynamic' | 'async' | 'reactive';
5
+ export type SectionContentType = 'text' | 'html'
6
+ export type SectionContentRenderer = (parentElement?: HtmlInterface | null | undefined) => string | OneElementChildren;
7
+ export type SectionConstruvtorArgs = {
8
+ ctx?: ViewControllerInterface | null;
9
+ name: string;
10
+ type: SectionItemType;
11
+ contentType?: SectionContentType;
12
+ stateKeys?: string[];
13
+ renderFactory: SectionContentRenderer;
14
+ [key: string]: any;
15
+ }
16
+ export interface SectionInterface {
17
+ ctx? : ViewControllerInterface | null;
18
+ name: string;
19
+ type: SectionItemType;
20
+ contentType?: SectionContentType;
21
+ stateKeys?: string[];
22
+ renderFactory?: SectionContentRenderer;
23
+ }
@@ -0,0 +1,113 @@
1
+ import type { BlockInterface, BlockRenderFactory } from "../contracts/BlockInterface";
2
+ import { InitMode } from "../contracts/common";
3
+ import type { FragmentInterface, HtmlInterface } from "../contracts/ElementInterface";
4
+ import type { ReactiveInterface } from "../contracts/ReactiveInterface";
5
+ import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
6
+ import { generateUUID } from "../hellpers/utils";
7
+ import markerRegistry from "../services/MarkerRegistry";
8
+ import type { OneObjectType } from "../types/utils";
9
+ import { Fragment } from "./Fragment";
10
+ /**
11
+ * Block — a named mounting slot used in layout views.
12
+ *
13
+ * In a layout (super view), you declare blocks like `@useBlock('content')`.
14
+ * Each block is a Reactive region that mounts/unmounts page view content.
15
+ *
16
+ * Key behaviors:
17
+ * - Only active when the layout view is active
18
+ * - Caches previously mounted view content (DOM nodes) so that
19
+ * navigating back doesn't re-render and lose user state
20
+ * - Tracks which viewId is currently active in this slot
21
+ *
22
+ * Flow:
23
+ * 1. Layout declares: `@useBlock('content')` → creates Block('content')
24
+ * 2. Router navigates to page → BlockManager.mount('content', viewId, factory)
25
+ * 3. Block caches old content, mounts new content
26
+ * 4. Browser back → BlockManager restores cached content without re-render
27
+ */
28
+ export class Block implements BlockInterface {
29
+ oneType: OneObjectType = 'Block';
30
+ id: string;
31
+ name: string;
32
+ ctx: ViewControllerInterface;
33
+ viewId: string | null = null;
34
+ fragment: FragmentInterface | null = null;
35
+ contentRenderFactory: BlockRenderFactory | null = null;
36
+ openTag: Comment;
37
+ closeTag: Comment;
38
+
39
+ domChildren: Node[] = [];
40
+ initMode?: InitMode | undefined;
41
+ parentElement: HtmlInterface | null = null;
42
+
43
+ public readonly isOneBlock = true;
44
+ public readonly isOneElement = false;
45
+
46
+ constructor({
47
+ ctx,
48
+ name,
49
+ viewId = null,
50
+ contentRenderFactory = (parentElement: HtmlInterface) => [],
51
+ id = null,
52
+ initMode = 'create'
53
+ }: {
54
+ ctx: ViewControllerInterface;
55
+ name: string;
56
+ viewId?: string | null;
57
+ contentRenderFactory?: BlockRenderFactory;
58
+ id?: string | null;
59
+ initMode?: InitMode;
60
+ }) {
61
+ this.id = `${this.viewId}-${id ?? generateUUID(10)}`; // Unique ID for debugging
62
+ this.ctx = ctx;
63
+ this.name = name;
64
+ this.viewId = viewId ?? ctx.viewId; // Associate block with current viewId
65
+ this.initMode = initMode;
66
+ this.contentRenderFactory = contentRenderFactory || ((parentElement: HtmlInterface) => []);
67
+ markerRegistry.register('block', this.id, { name, viewId }); // Register block in marker registry
68
+ this.openTag = markerRegistry.createMarkerStart('block', this.id);
69
+ this.closeTag = markerRegistry.createMarkerEnd('block', this.id);
70
+
71
+ }
72
+
73
+ /** Initialize the block */
74
+ init(): void {
75
+ if (this.initMode === 'hydrate') {
76
+ // Hydration logic here
77
+ } else {
78
+ // Creation logic here
79
+ }
80
+ }
81
+
82
+ /** Render the block's content into the parent element */
83
+ render(): void {
84
+
85
+ if (!this.contentRenderFactory) return;
86
+
87
+ // Generate content using the factory
88
+ const content = this.contentRenderFactory(this.parentElement!);
89
+
90
+ }
91
+
92
+ mount(mountCtx: ViewControllerInterface, parentElement: HtmlInterface): any {
93
+ if(this.fragment) {
94
+ this.fragment.parent = parentElement;
95
+ this.fragment.render();
96
+ }
97
+ }
98
+ unmount(): void {
99
+ // Unmount logic (e.g. hide or remove DOM nodes, stop reactions)
100
+ }
101
+ destroy(): void {
102
+ // Cleanup logic (e.g. remove DOM nodes, clear caches)
103
+ }
104
+ update(): void {
105
+ // Update logic (e.g. re-render content on state change)
106
+ }
107
+
108
+ /** Set the block's parent element (used for mounting) */
109
+ setParentElement(parentElement: HtmlInterface | null): void {
110
+ this.parentElement = parentElement;
111
+ }
112
+
113
+ }