@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,117 @@
1
+ import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
2
+ import type { StateManagerInterface, ViewStateInterface, StateListener } from "../contracts/ViewStateInterface";
3
+ /**
4
+ * StateManager — manages reactive state for a ViewController.
5
+ *
6
+ * Core reactive primitive — when a state value changes:
7
+ * 1. Batch the change (add to pendingChanges)
8
+ * 2. Schedule a flush via requestAnimationFrame
9
+ * 3. On flush: notify all subscribed listeners
10
+ * 4. Listeners can trigger Reactive.update() → DOM re-render
11
+ *
12
+ * This replaces the old string-based re-render:
13
+ * OLD: state changes → re-render entire template string → diff/scan DOM
14
+ * NEW: state changes → notify only affected Reactive regions → targeted DOM update
15
+ *
16
+ * @example
17
+ * const [count, setCount] = viewState.__.useState(0, 'count');
18
+ * viewState.__.subscribe('count', (val) => myReactive.update());
19
+ * setCount(1); // → triggers listener → Reactive re-renders its region only
20
+ */
21
+ export declare class StateManager implements StateManagerInterface {
22
+ private states;
23
+ private listeners;
24
+ private multiKeyListeners;
25
+ private pendingChanges;
26
+ private stateIndex;
27
+ private flushRAF;
28
+ private hasPendingFlush;
29
+ private isFlushing;
30
+ private _isDestroyed;
31
+ /** Flag — cho phép update state qua update$xxx chỉ trước lock */
32
+ private _canUpdateStateByKey;
33
+ /** Setter functions exposed for direct property assignment on ViewState */
34
+ setters: Record<string | number, (value: any) => void>;
35
+ /** Reference to owning ViewController */
36
+ controller: ViewControllerInterface | null;
37
+ /** Reference to owning ViewState wrapper */
38
+ private stateInstance;
39
+ /** Properties that should NOT become state keys */
40
+ private ownProperties;
41
+ constructor(stateInstance: ViewState, controller?: ViewControllerInterface | null);
42
+ /** Public getter — compiled output checks this before updateStateByKey */
43
+ get canUpdateStateByKey(): boolean;
44
+ /**
45
+ * Lock — ngăn update$xxx() hoạt động sau initialization.
46
+ * Gọi cuối commitConstructorData().
47
+ */
48
+ lockUpdateRealState(): void;
49
+ /**
50
+ * Unlock — cho phép updateVariableData gọi update$xxx lại.
51
+ * Gọi trước updateVariableData(), lock lại khi xong.
52
+ */
53
+ unlockUpdateRealState(): void;
54
+ /**
55
+ * Bulk state update — set nhiều state keys QUIETLY (không trigger listeners).
56
+ * Dùng trong initialization — set initial values trước khi lock.
57
+ */
58
+ updateRealState(stateMap: Record<string | number, any>): void;
59
+ /**
60
+ * Create a reactive state — similar to React's useState.
61
+ *
62
+ * @returns [currentValue, setValue, stateKey]
63
+ *
64
+ * Also defines a getter/setter on the ViewState instance so that
65
+ * `viewState.count` reads/writes the state reactively.
66
+ */
67
+ useState(value: any, key?: string | number): [any, (newValue: any) => void, string | number];
68
+ /** Register shorthand — just returns the setter */
69
+ register(key: string | number, value: any): (newValue: any) => void;
70
+ /** Update state by key */
71
+ updateStateByKey(key: string | number, value: any): any;
72
+ /**
73
+ * Get state value by key — supports nested paths: 'user.name', 'items.0.id'
74
+ */
75
+ getStateByKey(key: string | number): any;
76
+ /**
77
+ * Update nested state by dot-path key: 'user.name' → clones root, sets nested, triggers change
78
+ */
79
+ updateStateAddressKey(key: string | number, value: any): void;
80
+ subscribe(key: string | number | string[] | Record<string, StateListener>, callback?: StateListener): () => void;
81
+ unsubscribe(key: string | number | string[] | Record<string, StateListener>, callback?: StateListener): void;
82
+ private commitStateChange;
83
+ private executeFlush;
84
+ private flushChanges;
85
+ destroy(): void;
86
+ private setsEqual;
87
+ /** Debug: get all state data as plain object */
88
+ toJSON(): Record<string | number, any>;
89
+ }
90
+ /**
91
+ * ViewState — thin wrapper around StateManager.
92
+ *
93
+ * Provides a clean API surface for view code:
94
+ * - viewState.count → getter reads state value
95
+ * - viewState.count = 5 → setter triggers reactive update
96
+ * - viewState.__ → access StateManager directly
97
+ * - viewState.on('count', cb) → subscribe shorthand
98
+ *
99
+ * The StateManager is stored as a non-enumerable `__` property
100
+ * to keep it hidden from serialization/iteration.
101
+ */
102
+ export declare class ViewState implements ViewStateInterface {
103
+ __: StateManager;
104
+ [key: string]: any;
105
+ constructor(controller?: ViewControllerInterface | null);
106
+ on(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): () => void;
107
+ off(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): void;
108
+ unsubscribe(key: string | number | string[] | Record<string, (value: any) => void>, callback?: (value: any) => void): void;
109
+ /**
110
+ * __useState — wrapper API cho compiled output.
111
+ * Tương tự React useState, return [value, setter].
112
+ *
113
+ * Compiled output: const useState = (value) => __STATE__.__useState(value);
114
+ */
115
+ __useState(value: any, key?: string | number): [any, (newValue: any) => void];
116
+ }
117
+ //# sourceMappingURL=ViewState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewState.d.ts","sourceRoot":"","sources":["../../../../src/core/view/ViewState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,410 @@
1
+ /**
2
+ * StateManager — manages reactive state for a ViewController.
3
+ *
4
+ * Core reactive primitive — when a state value changes:
5
+ * 1. Batch the change (add to pendingChanges)
6
+ * 2. Schedule a flush via requestAnimationFrame
7
+ * 3. On flush: notify all subscribed listeners
8
+ * 4. Listeners can trigger Reactive.update() → DOM re-render
9
+ *
10
+ * This replaces the old string-based re-render:
11
+ * OLD: state changes → re-render entire template string → diff/scan DOM
12
+ * NEW: state changes → notify only affected Reactive regions → targeted DOM update
13
+ *
14
+ * @example
15
+ * const [count, setCount] = viewState.__.useState(0, 'count');
16
+ * viewState.__.subscribe('count', (val) => myReactive.update());
17
+ * setCount(1); // → triggers listener → Reactive re-renders its region only
18
+ */
19
+ export class StateManager {
20
+ constructor(stateInstance, controller) {
21
+ this.states = {};
22
+ this.listeners = new Map();
23
+ this.multiKeyListeners = [];
24
+ this.pendingChanges = new Set();
25
+ this.stateIndex = 0;
26
+ this.flushRAF = null;
27
+ this.hasPendingFlush = false;
28
+ this.isFlushing = false;
29
+ this._isDestroyed = false;
30
+ /** Flag — cho phép update state qua update$xxx chỉ trước lock */
31
+ this._canUpdateStateByKey = true;
32
+ /** Setter functions exposed for direct property assignment on ViewState */
33
+ this.setters = {};
34
+ /** Reference to owning ViewController */
35
+ this.controller = null;
36
+ /** Properties that should NOT become state keys */
37
+ this.ownProperties = ['__', 'on', 'off', 'unsubscribe'];
38
+ this.stateInstance = stateInstance;
39
+ this.controller = controller ?? null;
40
+ }
41
+ // ─── canUpdateStateByKey ─────────────────────────────────────
42
+ /** Public getter — compiled output checks this before updateStateByKey */
43
+ get canUpdateStateByKey() {
44
+ return this._canUpdateStateByKey;
45
+ }
46
+ /**
47
+ * Lock — ngăn update$xxx() hoạt động sau initialization.
48
+ * Gọi cuối commitConstructorData().
49
+ */
50
+ lockUpdateRealState() {
51
+ this._canUpdateStateByKey = false;
52
+ }
53
+ /**
54
+ * Unlock — cho phép updateVariableData gọi update$xxx lại.
55
+ * Gọi trước updateVariableData(), lock lại khi xong.
56
+ */
57
+ unlockUpdateRealState() {
58
+ this._canUpdateStateByKey = true;
59
+ }
60
+ /**
61
+ * Bulk state update — set nhiều state keys QUIETLY (không trigger listeners).
62
+ * Dùng trong initialization — set initial values trước khi lock.
63
+ */
64
+ updateRealState(stateMap) {
65
+ if (!this._canUpdateStateByKey)
66
+ return;
67
+ for (const key in stateMap) {
68
+ if (stateMap.hasOwnProperty(key) && this.states[key]) {
69
+ this.states[key].value = stateMap[key];
70
+ }
71
+ }
72
+ }
73
+ // ─── useState ───────────────────────────────────────────────
74
+ /**
75
+ * Create a reactive state — similar to React's useState.
76
+ *
77
+ * @returns [currentValue, setValue, stateKey]
78
+ *
79
+ * Also defines a getter/setter on the ViewState instance so that
80
+ * `viewState.count` reads/writes the state reactively.
81
+ */
82
+ useState(value, key) {
83
+ // If key already exists, return existing state
84
+ if (key !== undefined && key !== null && this.states[key]) {
85
+ return [this.states[key].value, this.states[key].setValue, key];
86
+ }
87
+ const stateKey = String(key ?? this.stateIndex++);
88
+ const setValue = (newValue) => {
89
+ const oldValue = this.states[stateKey].value;
90
+ this.states[stateKey].value = newValue;
91
+ this.commitStateChange(stateKey, oldValue);
92
+ };
93
+ this.states[stateKey] = { value, setValue, key: stateKey };
94
+ this.setters[stateKey] = setValue;
95
+ // Define reactive property on ViewState if not a reserved name
96
+ if (!this.ownProperties.includes(stateKey)) {
97
+ const self = this;
98
+ Object.defineProperty(this.stateInstance, stateKey, {
99
+ get: () => self.states[stateKey].value,
100
+ set: (val) => {
101
+ if (typeof self.setters[stateKey] === 'function') {
102
+ self.setters[stateKey](val);
103
+ }
104
+ },
105
+ configurable: false,
106
+ enumerable: true,
107
+ });
108
+ }
109
+ return [value, setValue, stateKey];
110
+ }
111
+ // ─── State Access ───────────────────────────────────────────
112
+ /** Register shorthand — just returns the setter */
113
+ register(key, value) {
114
+ return this.useState(value, key)[1];
115
+ }
116
+ /** Update state by key */
117
+ updateStateByKey(key, value) {
118
+ if (!this.states[key])
119
+ return undefined;
120
+ const oldValue = this.states[key].value;
121
+ this.states[key].value = value;
122
+ this.commitStateChange(key, oldValue);
123
+ return value;
124
+ }
125
+ /**
126
+ * Get state value by key — supports nested paths: 'user.name', 'items.0.id'
127
+ */
128
+ getStateByKey(key) {
129
+ const keyStr = String(key);
130
+ if (!keyStr.includes('.')) {
131
+ return this.states[keyStr]?.value ?? null;
132
+ }
133
+ const paths = keyStr.split('.');
134
+ const rootKey = paths[0];
135
+ if (!this.states[rootKey])
136
+ return null;
137
+ let current = this.states[rootKey].value;
138
+ for (let i = 1; i < paths.length; i++) {
139
+ if (typeof current !== 'object' || current === null)
140
+ return null;
141
+ current = current[paths[i]];
142
+ if (current === undefined)
143
+ return null;
144
+ }
145
+ return current;
146
+ }
147
+ /**
148
+ * Update nested state by dot-path key: 'user.name' → clones root, sets nested, triggers change
149
+ */
150
+ updateStateAddressKey(key, value) {
151
+ const keyStr = String(key);
152
+ const keyPaths = keyStr.split('.');
153
+ const rootKey = keyPaths.shift();
154
+ if (!rootKey || !this.states[rootKey])
155
+ return;
156
+ const stateValue = this.states[rootKey].value;
157
+ if (keyPaths.length === 0 || typeof stateValue !== 'object' || stateValue === null) {
158
+ return this.setters[rootKey]?.(value);
159
+ }
160
+ // Clone to create a new reference for reactivity detection
161
+ let clonedValue = Array.isArray(stateValue) ? [...stateValue] : { ...stateValue };
162
+ let current = clonedValue;
163
+ for (let i = 0; i < keyPaths.length - 1; i++) {
164
+ const path = keyPaths[i];
165
+ if (typeof current[path] !== 'object' || current[path] === null) {
166
+ current[path] = {};
167
+ }
168
+ else {
169
+ current[path] = Array.isArray(current[path]) ? [...current[path]] : { ...current[path] };
170
+ }
171
+ current = current[path];
172
+ }
173
+ current[keyPaths[keyPaths.length - 1]] = value;
174
+ this.setters[rootKey]?.(clonedValue);
175
+ }
176
+ // ─── Subscribe / Unsubscribe ────────────────────────────────
177
+ subscribe(key, callback) {
178
+ // Array of keys
179
+ if (Array.isArray(key)) {
180
+ if (key.length === 0)
181
+ return () => { };
182
+ if (key.length === 1 && callback)
183
+ return this.subscribe(key[0], callback);
184
+ if (typeof callback !== 'function')
185
+ return () => { };
186
+ const keys = new Set();
187
+ for (const k of key) {
188
+ if (this.states[k])
189
+ keys.add(k);
190
+ }
191
+ if (keys.size === 0)
192
+ return () => { };
193
+ const listener = { keys, callback, called: false };
194
+ this.multiKeyListeners.push(listener);
195
+ return () => {
196
+ const idx = this.multiKeyListeners.indexOf(listener);
197
+ if (idx !== -1)
198
+ this.multiKeyListeners.splice(idx, 1);
199
+ };
200
+ }
201
+ // Object map of keys → callbacks
202
+ if (typeof key === 'object' && key !== null) {
203
+ const unsubs = {};
204
+ for (const k in key) {
205
+ unsubs[k] = this.subscribe(k, key[k]);
206
+ }
207
+ return () => { for (const k in unsubs)
208
+ unsubs[k](); };
209
+ }
210
+ // Single key
211
+ if (typeof callback !== 'function')
212
+ return () => { };
213
+ if (!this.listeners.has(key))
214
+ this.listeners.set(key, []);
215
+ this.listeners.get(key).push(callback);
216
+ const index = this.listeners.get(key).length - 1;
217
+ return () => {
218
+ const listeners = this.listeners.get(key);
219
+ if (listeners) {
220
+ listeners.splice(index, 1);
221
+ if (listeners.length === 0)
222
+ this.listeners.delete(key);
223
+ }
224
+ };
225
+ }
226
+ unsubscribe(key, callback) {
227
+ if (Array.isArray(key)) {
228
+ if (key.length === 0)
229
+ return;
230
+ if (key.length === 1) {
231
+ this.unsubscribe(key[0], callback);
232
+ return;
233
+ }
234
+ const keySet = new Set(key);
235
+ if (!callback) {
236
+ for (let i = this.multiKeyListeners.length - 1; i >= 0; i--) {
237
+ if (this.setsEqual(this.multiKeyListeners[i].keys, keySet)) {
238
+ this.multiKeyListeners.splice(i, 1);
239
+ }
240
+ }
241
+ return;
242
+ }
243
+ const idx = this.multiKeyListeners.findIndex(l => l.callback === callback && this.setsEqual(l.keys, keySet));
244
+ if (idx !== -1)
245
+ this.multiKeyListeners.splice(idx, 1);
246
+ return;
247
+ }
248
+ if (typeof key === 'object' && key !== null) {
249
+ for (const k in key)
250
+ this.unsubscribe(k, key[k]);
251
+ return;
252
+ }
253
+ if (callback) {
254
+ const listeners = this.listeners.get(key);
255
+ if (listeners) {
256
+ const idx = listeners.indexOf(callback);
257
+ if (idx !== -1) {
258
+ listeners.splice(idx, 1);
259
+ if (listeners.length === 0)
260
+ this.listeners.delete(key);
261
+ }
262
+ }
263
+ }
264
+ else {
265
+ this.listeners.delete(key);
266
+ }
267
+ }
268
+ // ─── Batch Flush System ─────────────────────────────────────
269
+ commitStateChange(key, _oldValue) {
270
+ if (this._isDestroyed)
271
+ return;
272
+ const newValue = this.states[key]?.value;
273
+ if (_oldValue === newValue)
274
+ return;
275
+ this.pendingChanges.add(key);
276
+ if (!this.hasPendingFlush) {
277
+ this.hasPendingFlush = true;
278
+ this.flushRAF = requestAnimationFrame(() => this.executeFlush());
279
+ }
280
+ }
281
+ executeFlush() {
282
+ if (this._isDestroyed || this.isFlushing)
283
+ return;
284
+ try {
285
+ this.isFlushing = true;
286
+ this.flushChanges();
287
+ }
288
+ finally {
289
+ this.isFlushing = false;
290
+ this.hasPendingFlush = false;
291
+ this.flushRAF = null;
292
+ }
293
+ }
294
+ flushChanges() {
295
+ if (this.pendingChanges.size === 0)
296
+ return;
297
+ const changed = Array.from(this.pendingChanges);
298
+ this.pendingChanges.clear();
299
+ // Reset multi-key listener flags
300
+ for (const listener of this.multiKeyListeners) {
301
+ listener.called = false;
302
+ }
303
+ // Notify single-key listeners
304
+ for (const changedKey of changed) {
305
+ const listeners = this.listeners.get(changedKey);
306
+ if (listeners) {
307
+ const currentValue = this.states[changedKey]?.value;
308
+ for (const listener of listeners) {
309
+ try {
310
+ listener(currentValue);
311
+ }
312
+ catch (e) {
313
+ console.error('[ViewState] Listener error:', e);
314
+ }
315
+ }
316
+ }
317
+ // Notify multi-key listeners
318
+ for (const mkl of this.multiKeyListeners) {
319
+ if (!mkl.called && mkl.keys.has(changedKey)) {
320
+ mkl.called = true;
321
+ const values = {};
322
+ for (const k of mkl.keys) {
323
+ if (changed.includes(k)) {
324
+ values[String(k)] = this.states[k]?.value;
325
+ }
326
+ }
327
+ try {
328
+ mkl.callback(values);
329
+ }
330
+ catch (e) {
331
+ console.error('[ViewState] Multi-key listener error:', e);
332
+ }
333
+ }
334
+ }
335
+ }
336
+ }
337
+ // ─── Cleanup ────────────────────────────────────────────────
338
+ destroy() {
339
+ this._isDestroyed = true;
340
+ if (this.flushRAF !== null) {
341
+ cancelAnimationFrame(this.flushRAF);
342
+ this.flushRAF = null;
343
+ }
344
+ this.listeners.clear();
345
+ this.multiKeyListeners = [];
346
+ this.pendingChanges.clear();
347
+ this.states = {};
348
+ this.setters = {};
349
+ this.controller = null;
350
+ }
351
+ // ─── Helpers ────────────────────────────────────────────────
352
+ setsEqual(a, b) {
353
+ if (a.size !== b.size)
354
+ return false;
355
+ for (const item of a)
356
+ if (!b.has(item))
357
+ return false;
358
+ return true;
359
+ }
360
+ /** Debug: get all state data as plain object */
361
+ toJSON() {
362
+ const data = {};
363
+ for (const key in this.states)
364
+ data[key] = this.states[key].value;
365
+ return data;
366
+ }
367
+ }
368
+ /**
369
+ * ViewState — thin wrapper around StateManager.
370
+ *
371
+ * Provides a clean API surface for view code:
372
+ * - viewState.count → getter reads state value
373
+ * - viewState.count = 5 → setter triggers reactive update
374
+ * - viewState.__ → access StateManager directly
375
+ * - viewState.on('count', cb) → subscribe shorthand
376
+ *
377
+ * The StateManager is stored as a non-enumerable `__` property
378
+ * to keep it hidden from serialization/iteration.
379
+ */
380
+ export class ViewState {
381
+ constructor(controller) {
382
+ const manager = new StateManager(this, controller);
383
+ Object.defineProperty(this, '__', {
384
+ value: manager,
385
+ writable: false,
386
+ configurable: false,
387
+ enumerable: false,
388
+ });
389
+ }
390
+ on(key, callback) {
391
+ return this.__.subscribe(key, callback);
392
+ }
393
+ off(key, callback) {
394
+ this.__.unsubscribe(key, callback);
395
+ }
396
+ unsubscribe(key, callback) {
397
+ this.__.unsubscribe(key, callback);
398
+ }
399
+ /**
400
+ * __useState — wrapper API cho compiled output.
401
+ * Tương tự React useState, return [value, setter].
402
+ *
403
+ * Compiled output: const useState = (value) => __STATE__.__useState(value);
404
+ */
405
+ __useState(value, key) {
406
+ const [val, setter] = this.__.useState(value, key);
407
+ return [val, setter];
408
+ }
409
+ }
410
+ //# sourceMappingURL=ViewState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewState.js","sourceRoot":"","sources":["../../../../src/core/view/ViewState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { View } from './View';
2
+ export { ViewController } from './ViewController';
3
+ export { ViewState, StateManager } from './ViewState';
4
+ export { LoopContext } from './LoopContext';
5
+ export { ViewManager } from './ViewManager';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { View } from './View';
2
+ export { ViewController } from './ViewController';
3
+ export { ViewState, StateManager } from './ViewState';
4
+ export { LoopContext } from './LoopContext';
5
+ export { ViewManager } from './ViewManager';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
package/index.ts ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * OneJS V2 - Main Export
3
+ * TypeScript Core with Optimizations
4
+ */
5
+
6
+ // App
7
+ export { Application } from './src/core/app/Application.js';
8
+ export { app } from './src/core/hellpers/app.js';
9
+ export { default as App } from './src/core/bootstrap/app.js';
10
+
11
+ // Services
12
+ export { MarkerService } from './src/core/services/MarkerService.js';
13
+ export { EventService } from './src/core/services/EventService.js';
14
+ export { HttpService } from './src/core/services/HttpService.js';
15
+ export { StoreService } from './src/core/services/StoreService.js';
16
+ export { StorageService } from './src/core/services/StorageService.js';
17
+ export { LoggerService } from './src/core/services/LoggerService.js';
18
+ export { HelperService, CollectionProxy } from './src/core/services/HelperService.js';
19
+ export { BlockManagerService, BlockManager } from './src/core/services/BlockManager.js';
20
+ export { MarkerRegistry, MarkerRegistryService } from './src/core/services/MarkerRegistry.js';
21
+
22
+ // View System
23
+ export { View, ViewController, ViewManager, ViewState, StateManager, LoopContext } from './src/core/view/index.js';
24
+
25
+ // Router
26
+ export { Router, ActiveRoute, useRoute, useParams, useQuery } from './src/core/routers/Router.js';
27
+
28
+ // Elements
29
+ export { Reactive } from './src/core/elements/Reactive.js';
30
+ export { Block } from './src/core/elements/Block.js';
31
+ export { BlockOutlet } from './src/core/elements/BlockOutlet.js';
32
+ export { Html } from './src/core/elements/Html.js';
33
+ export { Fragment } from './src/core/elements/Fragment.js';
34
+ export { Component } from './src/core/elements/Component.js';
35
+ export { TextElement } from './src/core/elements/TextElement.js';
36
+ export { Output } from './src/core/elements/Output.js';
37
+ export { Wrapper } from './src/core/elements/Wrapper.js';
38
+ export { ElementManager } from './src/core/elements/ElementManager.js';
39
+
40
+
41
+ // DOM
42
+ export { Dom, DomService } from './src/core/services/DomService.js';
43
+
44
+ // Helpers
45
+ export { ApiClient } from './src/core/hellpers/ApiClient.js';
46
+
47
+ // Contracts (type-only exports)
48
+ export type { ApplicationInterface } from './src/core/contracts/ApplicationInterface.js';
49
+ export type { HelperInterface, CollectionProxyInterface } from './src/core/contracts/HelperInterface.js';
50
+ export type { EventServiceInterface } from './src/core/contracts/EventServiceInterface.js';
51
+ export type { HttpServiceInterface, HttpRequestConfig, HttpResponse, HttpInterceptor } from './src/core/contracts/HttpServiceInterface.js';
52
+ export type { StoreServiceInterface } from './src/core/contracts/StoreServiceInterface.js';
53
+ export type { StorageServiceInterface } from './src/core/contracts/StorageServiceInterface.js';
54
+ export type { LoggerServiceInterface, LoggerConfig, LogLevel } from './src/core/contracts/LoggerServiceInterface.js';
55
+ export type { ViewInterface } from './src/core/contracts/ViewInterface.js';
56
+ export type { ViewControllerInterface } from './src/core/contracts/ViewControllerInterface.js';
57
+ export type { ViewManagerInterface } from './src/core/contracts/ViewManagerInterface.js';
58
+ export type { ReactiveInterface } from './src/core/contracts/ReactiveInterface.js';
59
+ export type { RouterInterface } from './src/core/contracts/RouterInterface.js';
60
+ export type { RouteDefinition, Route, RouteMatch, RouterConfig } from './src/core/routers/Router.js';
61
+ export type { MarkerRecord, MarkerTagName } from './src/core/contracts/MarkerInterface.js';
62
+ export type { APIEndpoints } from './src/core/hellpers/ApiClient.js';