@akashjs/runtime 0.2.2 → 0.2.7

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 (552) hide show
  1. package/dist/a11y.cjs +2 -0
  2. package/dist/a11y.cjs.map +1 -0
  3. package/dist/a11y.d.cts +99 -0
  4. package/dist/a11y.d.ts +99 -0
  5. package/dist/a11y.js +2 -0
  6. package/dist/a11y.js.map +1 -0
  7. package/dist/async-component.cjs +2 -0
  8. package/dist/async-component.cjs.map +1 -0
  9. package/dist/async-component.d.cts +44 -0
  10. package/dist/async-component.d.ts +44 -0
  11. package/dist/async-component.js +2 -0
  12. package/dist/async-component.js.map +1 -0
  13. package/dist/await-block.cjs +2 -0
  14. package/dist/await-block.cjs.map +1 -0
  15. package/dist/await-block.d.cts +37 -0
  16. package/dist/await-block.d.ts +37 -0
  17. package/dist/await-block.js +2 -0
  18. package/dist/await-block.js.map +1 -0
  19. package/dist/browser.cjs +2 -0
  20. package/dist/browser.cjs.map +1 -0
  21. package/dist/browser.d.cts +125 -0
  22. package/dist/browser.d.ts +125 -0
  23. package/dist/browser.js +2 -0
  24. package/dist/browser.js.map +1 -0
  25. package/dist/chunk-2HLDEWRT.cjs +2 -0
  26. package/dist/chunk-2HLDEWRT.cjs.map +1 -0
  27. package/dist/chunk-2LKFIID7.cjs +2 -0
  28. package/dist/chunk-2LKFIID7.cjs.map +1 -0
  29. package/dist/chunk-34PQECMN.cjs +2 -0
  30. package/dist/chunk-34PQECMN.cjs.map +1 -0
  31. package/dist/chunk-36VM3RJW.cjs +2 -0
  32. package/dist/chunk-36VM3RJW.cjs.map +1 -0
  33. package/dist/chunk-3PGU24B5.cjs +3 -0
  34. package/dist/chunk-3PGU24B5.cjs.map +1 -0
  35. package/dist/chunk-3XREYIJH.cjs +2 -0
  36. package/dist/chunk-3XREYIJH.cjs.map +1 -0
  37. package/dist/chunk-45DPEU7T.cjs +2 -0
  38. package/dist/chunk-45DPEU7T.cjs.map +1 -0
  39. package/dist/chunk-4J3QBQVW.js +4 -0
  40. package/dist/chunk-4J3QBQVW.js.map +1 -0
  41. package/dist/{chunk-NVZLEJXB.cjs → chunk-4NQEIKH5.cjs} +2 -2
  42. package/dist/{chunk-NVZLEJXB.cjs.map → chunk-4NQEIKH5.cjs.map} +1 -1
  43. package/dist/chunk-5QCWH6QA.cjs +4 -0
  44. package/dist/chunk-5QCWH6QA.cjs.map +1 -0
  45. package/dist/chunk-6O46EMQS.cjs +2 -0
  46. package/dist/chunk-6O46EMQS.cjs.map +1 -0
  47. package/dist/chunk-7IJUJUXE.cjs +2 -0
  48. package/dist/chunk-7IJUJUXE.cjs.map +1 -0
  49. package/dist/chunk-7UX5CSGZ.cjs +2 -0
  50. package/dist/chunk-7UX5CSGZ.cjs.map +1 -0
  51. package/dist/chunk-7VBH4F3P.js +2 -0
  52. package/dist/chunk-7VBH4F3P.js.map +1 -0
  53. package/dist/chunk-7ZPSYZHD.cjs +2 -0
  54. package/dist/chunk-7ZPSYZHD.cjs.map +1 -0
  55. package/dist/chunk-AOFLE33X.js +5 -0
  56. package/dist/chunk-AOFLE33X.js.map +1 -0
  57. package/dist/chunk-AQQQVDBQ.cjs +2 -0
  58. package/dist/chunk-AQQQVDBQ.cjs.map +1 -0
  59. package/dist/chunk-AXB5GHGO.js +2 -0
  60. package/dist/chunk-AXB5GHGO.js.map +1 -0
  61. package/dist/chunk-AZCELE44.cjs +2 -0
  62. package/dist/chunk-AZCELE44.cjs.map +1 -0
  63. package/dist/chunk-BB7P6HTR.js +2 -0
  64. package/dist/chunk-BB7P6HTR.js.map +1 -0
  65. package/dist/chunk-BGSF77LF.js +2 -0
  66. package/dist/chunk-BGSF77LF.js.map +1 -0
  67. package/dist/chunk-BHP3UTTQ.cjs +3 -0
  68. package/dist/chunk-BHP3UTTQ.cjs.map +1 -0
  69. package/dist/chunk-CP6SK2B4.js +2 -0
  70. package/dist/chunk-CP6SK2B4.js.map +1 -0
  71. package/dist/chunk-DFYXFKCH.cjs +2 -0
  72. package/dist/chunk-DFYXFKCH.cjs.map +1 -0
  73. package/dist/chunk-DHFVVFZF.cjs +2 -0
  74. package/dist/chunk-DHFVVFZF.cjs.map +1 -0
  75. package/dist/chunk-DP7G45QM.cjs +13 -0
  76. package/dist/chunk-DP7G45QM.cjs.map +1 -0
  77. package/dist/chunk-E6RB7PRO.js +2 -0
  78. package/dist/chunk-E6RB7PRO.js.map +1 -0
  79. package/dist/chunk-F4FXIPR3.js +2 -0
  80. package/dist/chunk-F4FXIPR3.js.map +1 -0
  81. package/dist/chunk-F6VSSM2P.js +2 -0
  82. package/dist/chunk-F6VSSM2P.js.map +1 -0
  83. package/dist/chunk-FUVSCPU4.cjs +2 -0
  84. package/dist/chunk-FUVSCPU4.cjs.map +1 -0
  85. package/dist/chunk-FVF3T4JJ.js +2 -0
  86. package/dist/chunk-FVF3T4JJ.js.map +1 -0
  87. package/dist/chunk-FVWHMFX6.cjs +5 -0
  88. package/dist/chunk-FVWHMFX6.cjs.map +1 -0
  89. package/dist/chunk-IHEW6F2H.js +2 -0
  90. package/dist/chunk-IHEW6F2H.js.map +1 -0
  91. package/dist/chunk-IJS2EMSE.js +2 -0
  92. package/dist/chunk-IJS2EMSE.js.map +1 -0
  93. package/dist/chunk-IKVHLORY.cjs +11 -0
  94. package/dist/chunk-IKVHLORY.cjs.map +1 -0
  95. package/dist/chunk-IQGSDFBI.cjs +2 -0
  96. package/dist/chunk-IQGSDFBI.cjs.map +1 -0
  97. package/dist/chunk-J6KDUWX6.cjs +2 -0
  98. package/dist/chunk-J6KDUWX6.cjs.map +1 -0
  99. package/dist/chunk-JD3LDHUI.cjs +2 -0
  100. package/dist/chunk-JD3LDHUI.cjs.map +1 -0
  101. package/dist/chunk-JEYTB4AG.js +2 -0
  102. package/dist/chunk-JEYTB4AG.js.map +1 -0
  103. package/dist/chunk-JFLZJPVN.js +2 -0
  104. package/dist/chunk-JFLZJPVN.js.map +1 -0
  105. package/dist/chunk-JLPJ22CE.js +2 -0
  106. package/dist/chunk-JLPJ22CE.js.map +1 -0
  107. package/dist/chunk-JQCN42XX.js +2 -0
  108. package/dist/chunk-JQCN42XX.js.map +1 -0
  109. package/dist/chunk-K2HB5VFA.cjs +2 -0
  110. package/dist/chunk-K2HB5VFA.cjs.map +1 -0
  111. package/dist/chunk-K7TMUF3F.cjs +2 -0
  112. package/dist/chunk-K7TMUF3F.cjs.map +1 -0
  113. package/dist/chunk-KE7BJTCD.js +2 -0
  114. package/dist/chunk-KE7BJTCD.js.map +1 -0
  115. package/dist/chunk-KMEGUPH2.js +3 -0
  116. package/dist/chunk-KMEGUPH2.js.map +1 -0
  117. package/dist/chunk-KUPL3ZVD.js +2 -0
  118. package/dist/chunk-KUPL3ZVD.js.map +1 -0
  119. package/dist/chunk-L3ZZX36S.js +2 -0
  120. package/dist/chunk-L3ZZX36S.js.map +1 -0
  121. package/dist/chunk-LD4C62JY.cjs +2 -0
  122. package/dist/chunk-LD4C62JY.cjs.map +1 -0
  123. package/dist/chunk-LWQPLKL6.cjs +20 -0
  124. package/dist/chunk-LWQPLKL6.cjs.map +1 -0
  125. package/dist/chunk-M5IACTFC.cjs +17 -0
  126. package/dist/chunk-M5IACTFC.cjs.map +1 -0
  127. package/dist/chunk-MADMPRT2.js +20 -0
  128. package/dist/chunk-MADMPRT2.js.map +1 -0
  129. package/dist/chunk-MDHWM3C2.js +2 -0
  130. package/dist/chunk-MDHWM3C2.js.map +1 -0
  131. package/dist/chunk-N3ITIHHM.js +5 -0
  132. package/dist/chunk-N3ITIHHM.js.map +1 -0
  133. package/dist/chunk-N5APNCPB.js +2 -0
  134. package/dist/chunk-N5APNCPB.js.map +1 -0
  135. package/dist/chunk-NBYFHJWB.js +36 -0
  136. package/dist/chunk-NBYFHJWB.js.map +1 -0
  137. package/dist/chunk-NCXMNJUN.js +2 -0
  138. package/dist/chunk-NCXMNJUN.js.map +1 -0
  139. package/dist/chunk-NEQ5TENE.cjs +2 -0
  140. package/dist/chunk-NEQ5TENE.cjs.map +1 -0
  141. package/dist/chunk-NGU2W4PD.cjs +2 -0
  142. package/dist/chunk-NGU2W4PD.cjs.map +1 -0
  143. package/dist/chunk-NHDYQTC5.cjs +36 -0
  144. package/dist/chunk-NHDYQTC5.cjs.map +1 -0
  145. package/dist/chunk-NJXXC5JB.js +2 -0
  146. package/dist/chunk-NJXXC5JB.js.map +1 -0
  147. package/dist/chunk-NQEY7DR5.cjs +2 -0
  148. package/dist/chunk-NQEY7DR5.cjs.map +1 -0
  149. package/dist/chunk-OQV3NYDH.js +3 -0
  150. package/dist/chunk-OQV3NYDH.js.map +1 -0
  151. package/dist/chunk-OZ4GNBKA.js +2 -0
  152. package/dist/chunk-OZ4GNBKA.js.map +1 -0
  153. package/dist/chunk-PPNEAFKE.cjs +5 -0
  154. package/dist/chunk-PPNEAFKE.cjs.map +1 -0
  155. package/dist/chunk-PYASLKWF.js +2 -0
  156. package/dist/chunk-PYASLKWF.js.map +1 -0
  157. package/dist/chunk-Q6S7SUOM.js +2 -0
  158. package/dist/chunk-Q6S7SUOM.js.map +1 -0
  159. package/dist/chunk-QE2TJ6P5.cjs +2 -0
  160. package/dist/chunk-QE2TJ6P5.cjs.map +1 -0
  161. package/dist/chunk-QNVMBXVH.js +2 -0
  162. package/dist/chunk-QNVMBXVH.js.map +1 -0
  163. package/dist/chunk-QQ725EZL.js +2 -0
  164. package/dist/chunk-QQ725EZL.js.map +1 -0
  165. package/dist/chunk-QQTZQ6UX.cjs +2 -0
  166. package/dist/chunk-QQTZQ6UX.cjs.map +1 -0
  167. package/dist/chunk-QSPRVXFV.cjs +2 -0
  168. package/dist/chunk-QSPRVXFV.cjs.map +1 -0
  169. package/dist/chunk-QTQ6RUX4.cjs +5 -0
  170. package/dist/chunk-QTQ6RUX4.cjs.map +1 -0
  171. package/dist/chunk-R65RPMQX.cjs +2 -0
  172. package/dist/chunk-R65RPMQX.cjs.map +1 -0
  173. package/dist/chunk-R7NUVVHP.js +2 -0
  174. package/dist/{chunk-Z5LQV5ND.js.map → chunk-R7NUVVHP.js.map} +1 -1
  175. package/dist/chunk-SXYPAP4B.js +2 -0
  176. package/dist/chunk-SXYPAP4B.js.map +1 -0
  177. package/dist/chunk-T2RVAQEU.js +2 -0
  178. package/dist/chunk-T2RVAQEU.js.map +1 -0
  179. package/dist/chunk-T7A5YOEG.cjs +2 -0
  180. package/dist/chunk-T7A5YOEG.cjs.map +1 -0
  181. package/dist/chunk-TDKDZ3QJ.cjs +2 -0
  182. package/dist/chunk-TDKDZ3QJ.cjs.map +1 -0
  183. package/dist/chunk-TFEHO7SF.cjs +2 -0
  184. package/dist/chunk-TFEHO7SF.cjs.map +1 -0
  185. package/dist/chunk-TSFY5HKB.js +17 -0
  186. package/dist/chunk-TSFY5HKB.js.map +1 -0
  187. package/dist/chunk-TYTEJYUQ.cjs +2 -0
  188. package/dist/chunk-TYTEJYUQ.cjs.map +1 -0
  189. package/dist/chunk-TZHEZW6R.js +11 -0
  190. package/dist/chunk-TZHEZW6R.js.map +1 -0
  191. package/dist/chunk-U65WRXZC.js +13 -0
  192. package/dist/chunk-U65WRXZC.js.map +1 -0
  193. package/dist/chunk-UT4MWGJ3.js +2 -0
  194. package/dist/chunk-UT4MWGJ3.js.map +1 -0
  195. package/dist/chunk-V2JDKH3W.cjs +2 -0
  196. package/dist/chunk-V2JDKH3W.cjs.map +1 -0
  197. package/dist/chunk-VNDSKBXQ.cjs +2 -0
  198. package/dist/chunk-VNDSKBXQ.cjs.map +1 -0
  199. package/dist/chunk-VO4FCKHM.js +2 -0
  200. package/dist/chunk-VO4FCKHM.js.map +1 -0
  201. package/dist/chunk-VUMMC2P5.js +2 -0
  202. package/dist/chunk-VUMMC2P5.js.map +1 -0
  203. package/dist/chunk-VUSNUBNI.js +2 -0
  204. package/dist/chunk-VUSNUBNI.js.map +1 -0
  205. package/dist/chunk-VWTULWXF.js +2 -0
  206. package/dist/chunk-VWTULWXF.js.map +1 -0
  207. package/dist/chunk-VX7PSSOU.js +5 -0
  208. package/dist/chunk-VX7PSSOU.js.map +1 -0
  209. package/dist/chunk-WLSXJU2N.js +13 -0
  210. package/dist/chunk-WLSXJU2N.js.map +1 -0
  211. package/dist/chunk-WOZWFMOK.cjs +2 -0
  212. package/dist/chunk-WOZWFMOK.cjs.map +1 -0
  213. package/dist/chunk-WTDTVWCQ.cjs +2 -0
  214. package/dist/chunk-WTDTVWCQ.cjs.map +1 -0
  215. package/dist/chunk-WZ5ULION.js +2 -0
  216. package/dist/chunk-WZ5ULION.js.map +1 -0
  217. package/dist/chunk-XPLIEN2G.cjs +13 -0
  218. package/dist/chunk-XPLIEN2G.cjs.map +1 -0
  219. package/dist/chunk-XWVNLE2W.cjs +2 -0
  220. package/dist/chunk-XWVNLE2W.cjs.map +1 -0
  221. package/dist/chunk-XZR3J626.cjs +2 -0
  222. package/dist/chunk-XZR3J626.cjs.map +1 -0
  223. package/dist/chunk-YDO5KARN.js +2 -0
  224. package/dist/chunk-YDO5KARN.js.map +1 -0
  225. package/dist/chunk-YURIYBTN.cjs +2 -0
  226. package/dist/chunk-YURIYBTN.cjs.map +1 -0
  227. package/dist/chunk-YXKQTEPR.js +2 -0
  228. package/dist/chunk-YXKQTEPR.js.map +1 -0
  229. package/dist/chunk-Z6K4FYG6.js +2 -0
  230. package/dist/chunk-Z6K4FYG6.js.map +1 -0
  231. package/dist/chunk-ZJULEDLY.js +2 -0
  232. package/dist/chunk-ZJULEDLY.js.map +1 -0
  233. package/dist/{component-C1WnFcRp.d.ts → component-CPVtkASo.d.ts} +2 -3
  234. package/dist/{component-C1WnFcRp.d.cts → component-CxlupKuc.d.cts} +2 -3
  235. package/dist/composables.cjs +2 -0
  236. package/dist/composables.cjs.map +1 -0
  237. package/dist/composables.d.cts +103 -0
  238. package/dist/composables.d.ts +103 -0
  239. package/dist/composables.js +2 -0
  240. package/dist/composables.js.map +1 -0
  241. package/dist/{context-2uQ6fuxu.d.ts → context-Cwt7QCpk.d.cts} +1 -9
  242. package/dist/{context-2uQ6fuxu.d.cts → context-Cwt7QCpk.d.ts} +1 -9
  243. package/dist/core.cjs +1 -1
  244. package/dist/core.d.cts +5 -4
  245. package/dist/core.d.ts +5 -4
  246. package/dist/core.js +1 -1
  247. package/dist/css.cjs +2 -0
  248. package/dist/css.cjs.map +1 -0
  249. package/dist/css.d.cts +42 -0
  250. package/dist/css.d.ts +42 -0
  251. package/dist/css.js +2 -0
  252. package/dist/css.js.map +1 -0
  253. package/dist/data-table.cjs +2 -0
  254. package/dist/data-table.cjs.map +1 -0
  255. package/dist/data-table.d.cts +97 -0
  256. package/dist/data-table.d.ts +97 -0
  257. package/dist/data-table.js +2 -0
  258. package/dist/data-table.js.map +1 -0
  259. package/dist/deep-signal.cjs +2 -0
  260. package/dist/deep-signal.cjs.map +1 -0
  261. package/dist/deep-signal.d.cts +48 -0
  262. package/dist/deep-signal.d.ts +48 -0
  263. package/dist/deep-signal.js +2 -0
  264. package/dist/deep-signal.js.map +1 -0
  265. package/dist/defer.cjs +2 -0
  266. package/dist/defer.cjs.map +1 -0
  267. package/dist/defer.d.cts +55 -0
  268. package/dist/defer.d.ts +55 -0
  269. package/dist/defer.js +2 -0
  270. package/dist/defer.js.map +1 -0
  271. package/dist/deprecation.cjs +2 -0
  272. package/dist/deprecation.cjs.map +1 -0
  273. package/dist/deprecation.d.cts +119 -0
  274. package/dist/deprecation.d.ts +119 -0
  275. package/dist/deprecation.js +2 -0
  276. package/dist/deprecation.js.map +1 -0
  277. package/dist/devtools-overlay-3WRM6GKM.js +57 -0
  278. package/dist/devtools-overlay-3WRM6GKM.js.map +1 -0
  279. package/dist/devtools-overlay-WJGSIB4N.cjs +57 -0
  280. package/dist/devtools-overlay-WJGSIB4N.cjs.map +1 -0
  281. package/dist/devtools.cjs +2 -0
  282. package/dist/devtools.cjs.map +1 -0
  283. package/dist/devtools.d.cts +78 -0
  284. package/dist/devtools.d.ts +78 -0
  285. package/dist/devtools.js +2 -0
  286. package/dist/devtools.js.map +1 -0
  287. package/dist/di.cjs +2 -0
  288. package/dist/di.cjs.map +1 -0
  289. package/dist/di.d.cts +93 -0
  290. package/dist/di.d.ts +93 -0
  291. package/dist/di.js +2 -0
  292. package/dist/di.js.map +1 -0
  293. package/dist/directive.cjs +2 -0
  294. package/dist/directive.cjs.map +1 -0
  295. package/dist/directive.d.cts +102 -0
  296. package/dist/directive.d.ts +102 -0
  297. package/dist/directive.js +2 -0
  298. package/dist/directive.js.map +1 -0
  299. package/dist/error-boundary.cjs +2 -0
  300. package/dist/error-boundary.cjs.map +1 -0
  301. package/dist/error-boundary.d.cts +17 -0
  302. package/dist/error-boundary.d.ts +17 -0
  303. package/dist/error-boundary.js +2 -0
  304. package/dist/error-boundary.js.map +1 -0
  305. package/dist/error-hints.cjs +2 -0
  306. package/dist/error-hints.cjs.map +1 -0
  307. package/dist/error-hints.d.cts +17 -0
  308. package/dist/error-hints.d.ts +17 -0
  309. package/dist/error-hints.js +2 -0
  310. package/dist/error-hints.js.map +1 -0
  311. package/dist/errors.cjs +2 -0
  312. package/dist/errors.cjs.map +1 -0
  313. package/dist/errors.d.cts +35 -0
  314. package/dist/errors.d.ts +35 -0
  315. package/dist/errors.js +2 -0
  316. package/dist/errors.js.map +1 -0
  317. package/dist/event-bus.cjs +2 -0
  318. package/dist/event-bus.cjs.map +1 -0
  319. package/dist/event-bus.d.cts +68 -0
  320. package/dist/event-bus.d.ts +68 -0
  321. package/dist/event-bus.js +2 -0
  322. package/dist/event-bus.js.map +1 -0
  323. package/dist/event-modifiers.cjs +2 -0
  324. package/dist/event-modifiers.cjs.map +1 -0
  325. package/dist/event-modifiers.d.cts +130 -0
  326. package/dist/event-modifiers.d.ts +130 -0
  327. package/dist/event-modifiers.js +2 -0
  328. package/dist/event-modifiers.js.map +1 -0
  329. package/dist/flip.cjs +2 -0
  330. package/dist/flip.cjs.map +1 -0
  331. package/dist/flip.d.cts +66 -0
  332. package/dist/flip.d.ts +66 -0
  333. package/dist/flip.js +2 -0
  334. package/dist/flip.js.map +1 -0
  335. package/dist/head.cjs +2 -0
  336. package/dist/head.cjs.map +1 -0
  337. package/dist/head.d.cts +70 -0
  338. package/dist/head.d.ts +70 -0
  339. package/dist/head.js +2 -0
  340. package/dist/head.js.map +1 -0
  341. package/dist/hydration.cjs +2 -0
  342. package/dist/hydration.cjs.map +1 -0
  343. package/dist/hydration.d.cts +84 -0
  344. package/dist/hydration.d.ts +84 -0
  345. package/dist/hydration.js +2 -0
  346. package/dist/hydration.js.map +1 -0
  347. package/dist/image.cjs +2 -0
  348. package/dist/image.cjs.map +1 -0
  349. package/dist/image.d.cts +54 -0
  350. package/dist/image.d.ts +54 -0
  351. package/dist/image.js +2 -0
  352. package/dist/image.js.map +1 -0
  353. package/dist/index.cjs +1 -63
  354. package/dist/index.cjs.map +1 -1
  355. package/dist/index.d.cts +51 -3152
  356. package/dist/index.d.ts +51 -3152
  357. package/dist/index.js +1 -63
  358. package/dist/index.js.map +1 -1
  359. package/dist/infinite-scroll.cjs +2 -0
  360. package/dist/infinite-scroll.cjs.map +1 -0
  361. package/dist/infinite-scroll.d.cts +49 -0
  362. package/dist/infinite-scroll.d.ts +49 -0
  363. package/dist/infinite-scroll.js +2 -0
  364. package/dist/infinite-scroll.js.map +1 -0
  365. package/dist/leak-detector.cjs +2 -0
  366. package/dist/leak-detector.cjs.map +1 -0
  367. package/dist/leak-detector.d.cts +71 -0
  368. package/dist/leak-detector.d.ts +71 -0
  369. package/dist/leak-detector.js +2 -0
  370. package/dist/leak-detector.js.map +1 -0
  371. package/dist/machine.cjs +1 -1
  372. package/dist/machine.d.cts +1 -1
  373. package/dist/machine.d.ts +1 -1
  374. package/dist/machine.js +1 -1
  375. package/dist/offline.cjs +1 -1
  376. package/dist/offline.d.cts +3 -1
  377. package/dist/offline.d.ts +3 -1
  378. package/dist/offline.js +1 -1
  379. package/dist/perf.cjs +2 -0
  380. package/dist/perf.cjs.map +1 -0
  381. package/dist/perf.d.cts +97 -0
  382. package/dist/perf.d.ts +97 -0
  383. package/dist/perf.js +2 -0
  384. package/dist/perf.js.map +1 -0
  385. package/dist/pipes.cjs +2 -0
  386. package/dist/pipes.cjs.map +1 -0
  387. package/dist/pipes.d.cts +130 -0
  388. package/dist/pipes.d.ts +130 -0
  389. package/dist/pipes.js +2 -0
  390. package/dist/pipes.js.map +1 -0
  391. package/dist/plugin.cjs +2 -0
  392. package/dist/plugin.cjs.map +1 -0
  393. package/dist/plugin.d.cts +70 -0
  394. package/dist/plugin.d.ts +70 -0
  395. package/dist/plugin.js +2 -0
  396. package/dist/plugin.js.map +1 -0
  397. package/dist/portal.cjs +2 -0
  398. package/dist/portal.cjs.map +1 -0
  399. package/dist/portal.d.cts +30 -0
  400. package/dist/portal.d.ts +30 -0
  401. package/dist/portal.js +2 -0
  402. package/dist/portal.js.map +1 -0
  403. package/dist/pwa.cjs +1 -1
  404. package/dist/pwa.d.cts +6 -2
  405. package/dist/pwa.d.ts +6 -2
  406. package/dist/pwa.js +1 -1
  407. package/dist/query-state.cjs +2 -0
  408. package/dist/query-state.cjs.map +1 -0
  409. package/dist/query-state.d.cts +82 -0
  410. package/dist/query-state.d.ts +82 -0
  411. package/dist/query-state.js +2 -0
  412. package/dist/query-state.js.map +1 -0
  413. package/dist/reconcile.cjs +2 -0
  414. package/dist/reconcile.cjs.map +1 -0
  415. package/dist/reconcile.d.cts +42 -0
  416. package/dist/reconcile.d.ts +42 -0
  417. package/dist/reconcile.js +2 -0
  418. package/dist/reconcile.js.map +1 -0
  419. package/dist/scheduler-CKi1esN-.d.cts +9 -0
  420. package/dist/scheduler-CKi1esN-.d.ts +9 -0
  421. package/dist/security.cjs +2 -0
  422. package/dist/security.cjs.map +1 -0
  423. package/dist/security.d.cts +193 -0
  424. package/dist/security.d.ts +193 -0
  425. package/dist/security.js +2 -0
  426. package/dist/security.js.map +1 -0
  427. package/dist/seo.cjs +2 -0
  428. package/dist/seo.cjs.map +1 -0
  429. package/dist/seo.d.cts +118 -0
  430. package/dist/seo.d.ts +118 -0
  431. package/dist/seo.js +2 -0
  432. package/dist/seo.js.map +1 -0
  433. package/dist/{signals-C7XfOHHR.d.cts → signals-DionyGGY.d.cts} +7 -0
  434. package/dist/{signals-C7XfOHHR.d.ts → signals-DionyGGY.d.ts} +7 -0
  435. package/dist/snippets.cjs +2 -0
  436. package/dist/snippets.cjs.map +1 -0
  437. package/dist/snippets.d.cts +109 -0
  438. package/dist/snippets.d.ts +109 -0
  439. package/dist/snippets.js +2 -0
  440. package/dist/snippets.js.map +1 -0
  441. package/dist/ssg.cjs +2 -0
  442. package/dist/ssg.cjs.map +1 -0
  443. package/dist/ssg.d.cts +82 -0
  444. package/dist/ssg.d.ts +82 -0
  445. package/dist/ssg.js +2 -0
  446. package/dist/ssg.js.map +1 -0
  447. package/dist/ssr.cjs +1 -1
  448. package/dist/ssr.d.cts +2 -1
  449. package/dist/ssr.d.ts +2 -1
  450. package/dist/ssr.js +1 -1
  451. package/dist/store.cjs +1 -1
  452. package/dist/store.d.cts +33 -30
  453. package/dist/store.d.ts +33 -30
  454. package/dist/store.js +1 -1
  455. package/dist/suspense.cjs +2 -0
  456. package/dist/suspense.cjs.map +1 -0
  457. package/dist/suspense.d.cts +36 -0
  458. package/dist/suspense.d.ts +36 -0
  459. package/dist/suspense.js +2 -0
  460. package/dist/suspense.js.map +1 -0
  461. package/dist/switch.cjs +2 -0
  462. package/dist/switch.cjs.map +1 -0
  463. package/dist/switch.d.cts +48 -0
  464. package/dist/switch.d.ts +48 -0
  465. package/dist/switch.js +2 -0
  466. package/dist/switch.js.map +1 -0
  467. package/dist/sync.cjs +1 -1
  468. package/dist/sync.d.cts +60 -5
  469. package/dist/sync.d.ts +60 -5
  470. package/dist/sync.js +1 -1
  471. package/dist/test.cjs +4 -4
  472. package/dist/test.cjs.map +1 -1
  473. package/dist/test.d.cts +74 -5
  474. package/dist/test.d.ts +74 -5
  475. package/dist/test.js +4 -4
  476. package/dist/test.js.map +1 -1
  477. package/dist/theme.cjs +2 -0
  478. package/dist/theme.cjs.map +1 -0
  479. package/dist/theme.d.cts +56 -0
  480. package/dist/theme.d.ts +56 -0
  481. package/dist/theme.js +2 -0
  482. package/dist/theme.js.map +1 -0
  483. package/dist/toast.cjs +2 -0
  484. package/dist/toast.cjs.map +1 -0
  485. package/dist/toast.d.cts +66 -0
  486. package/dist/toast.d.ts +66 -0
  487. package/dist/toast.js +2 -0
  488. package/dist/toast.js.map +1 -0
  489. package/dist/transition.cjs +2 -0
  490. package/dist/transition.cjs.map +1 -0
  491. package/dist/transition.d.cts +90 -0
  492. package/dist/transition.d.ts +90 -0
  493. package/dist/transition.js +2 -0
  494. package/dist/transition.js.map +1 -0
  495. package/dist/tweened.cjs +2 -0
  496. package/dist/tweened.cjs.map +1 -0
  497. package/dist/tweened.d.cts +59 -0
  498. package/dist/tweened.d.ts +59 -0
  499. package/dist/tweened.js +2 -0
  500. package/dist/tweened.js.map +1 -0
  501. package/dist/types-DjZCk1xT.d.cts +4 -0
  502. package/dist/types-DjZCk1xT.d.ts +4 -0
  503. package/dist/view-transition.cjs +2 -0
  504. package/dist/view-transition.cjs.map +1 -0
  505. package/dist/view-transition.d.cts +80 -0
  506. package/dist/view-transition.d.ts +80 -0
  507. package/dist/view-transition.js +2 -0
  508. package/dist/view-transition.js.map +1 -0
  509. package/dist/virtual-list.cjs +2 -0
  510. package/dist/virtual-list.cjs.map +1 -0
  511. package/dist/virtual-list.d.cts +67 -0
  512. package/dist/virtual-list.d.ts +67 -0
  513. package/dist/virtual-list.js +2 -0
  514. package/dist/virtual-list.js.map +1 -0
  515. package/dist/watch.cjs +2 -0
  516. package/dist/watch.cjs.map +1 -0
  517. package/dist/watch.d.cts +70 -0
  518. package/dist/watch.d.ts +70 -0
  519. package/dist/watch.js +2 -0
  520. package/dist/watch.js.map +1 -0
  521. package/dist/web-component.cjs +2 -0
  522. package/dist/web-component.cjs.map +1 -0
  523. package/dist/web-component.d.cts +51 -0
  524. package/dist/web-component.d.ts +51 -0
  525. package/dist/web-component.js +2 -0
  526. package/dist/web-component.js.map +1 -0
  527. package/package.json +249 -11
  528. package/dist/chunk-3AL2DVPZ.cjs +0 -13
  529. package/dist/chunk-3AL2DVPZ.cjs.map +0 -1
  530. package/dist/chunk-6NX6JRSV.cjs +0 -32
  531. package/dist/chunk-6NX6JRSV.cjs.map +0 -1
  532. package/dist/chunk-BT6HNBE7.js +0 -5
  533. package/dist/chunk-BT6HNBE7.js.map +0 -1
  534. package/dist/chunk-D6QQYZIC.js +0 -2
  535. package/dist/chunk-D6QQYZIC.js.map +0 -1
  536. package/dist/chunk-H4SAK7A5.cjs +0 -2
  537. package/dist/chunk-H4SAK7A5.cjs.map +0 -1
  538. package/dist/chunk-IKZMC3T6.js +0 -2
  539. package/dist/chunk-IKZMC3T6.js.map +0 -1
  540. package/dist/chunk-IM2VW4TK.js +0 -32
  541. package/dist/chunk-IM2VW4TK.js.map +0 -1
  542. package/dist/chunk-NQVWTQ2I.cjs +0 -5
  543. package/dist/chunk-NQVWTQ2I.cjs.map +0 -1
  544. package/dist/chunk-ODDXU5DO.js +0 -2
  545. package/dist/chunk-ODDXU5DO.js.map +0 -1
  546. package/dist/chunk-POLTPHUA.js +0 -13
  547. package/dist/chunk-POLTPHUA.js.map +0 -1
  548. package/dist/chunk-YIB4EKVI.cjs +0 -2
  549. package/dist/chunk-YIB4EKVI.cjs.map +0 -1
  550. package/dist/chunk-YJQLXUTN.cjs +0 -2
  551. package/dist/chunk-YJQLXUTN.cjs.map +0 -1
  552. package/dist/chunk-Z5LQV5ND.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/web-component.ts"],"names":["defineCustomElement","tagName","component","options","props","shadow","styles","AkashElement","prop","attr","parseAttributeValue","name","_oldValue","newValue","styleEl","node","newProps","toCustomElement","_old","val","s","value"],"mappings":"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","file":"chunk-F4FXIPR3.js","sourcesContent":["/**\n * Web Components output.\n *\n * Compile AkashJS components to native Custom Elements that can\n * be used in any framework or plain HTML.\n *\n * ```ts\n * import { defineCustomElement } from '@akashjs/runtime';\n * import Counter from './Counter.akash';\n *\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial'],\n * shadow: true,\n * });\n *\n * // Now usable as: <my-counter initial=\"5\"></my-counter>\n * ```\n */\n\nimport type { Component } from './component.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface CustomElementOptions {\n /** Props to observe as attributes */\n props?: string[];\n /** Use Shadow DOM (default: true) */\n shadow?: boolean;\n /** CSS styles to inject (for shadow DOM) */\n styles?: string;\n /** Extend an existing element */\n extends?: string;\n}\n\n// =========================================================================\n// defineCustomElement\n// =========================================================================\n\n/**\n * Register an AkashJS component as a Custom Element.\n *\n * ```ts\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial', 'step'],\n * shadow: true,\n * styles: ':host { display: block; }',\n * });\n * ```\n */\nexport function defineCustomElement<P extends Record<string, unknown>>(\n tagName: string,\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n const { props = [], shadow = true, styles } = options;\n\n class AkashElement extends HTMLElement {\n static get observedAttributes(): string[] {\n return props;\n }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback(): void {\n // Read initial attribute values\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) {\n this._props[prop] = parseAttributeValue(attr);\n }\n }\n\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback(): void {\n // Clear rendered content\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n this._props[name] = newValue !== null ? parseAttributeValue(newValue) : undefined;\n if (this._mounted) {\n this._render();\n }\n }\n\n private _render(): void {\n // Clear previous\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n\n // Inject styles if shadow DOM\n if (shadow && styles) {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles;\n this._root.appendChild(styleEl);\n }\n\n // Render component\n const node = component(this._props as any);\n this._root.appendChild(node);\n }\n\n // Allow programmatic prop setting\n setProps(newProps: Partial<P>): void {\n Object.assign(this._props, newProps);\n if (this._mounted) this._render();\n }\n }\n\n // Register the custom element\n if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n if (options.extends) {\n customElements.define(tagName, AkashElement, { extends: options.extends });\n } else {\n customElements.define(tagName, AkashElement);\n }\n }\n\n return AkashElement;\n}\n\n/**\n * Convert an AkashJS component to a Custom Element class without registering.\n * Useful for testing or when you want to register later.\n */\nexport function toCustomElement<P extends Record<string, unknown>>(\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n // Same implementation but without auto-registration\n const { props = [], shadow = true, styles } = options;\n\n return class extends HTMLElement {\n static get observedAttributes() { return props; }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback() {\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) this._props[prop] = parseAttributeValue(attr);\n }\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _old: string | null, val: string | null) {\n this._props[name] = val !== null ? parseAttributeValue(val) : undefined;\n if (this._mounted) this._render();\n }\n\n private _render() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n if (shadow && styles) {\n const s = document.createElement('style');\n s.textContent = styles;\n this._root.appendChild(s);\n }\n this._root.appendChild(component(this._props as any));\n }\n } as any;\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction parseAttributeValue(value: string): unknown {\n // Try to parse as JSON (numbers, booleans, objects)\n try {\n return JSON.parse(value);\n } catch {\n return value; // Keep as string\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,a}from'./chunk-YXKQTEPR.js';function Q(e){return Array.isArray(e)?e.join(","):typeof e=="boolean"?e?"true":"false":String(e)}function b(e,t){return typeof t=="number"?Number(e):typeof t=="boolean"?e==="true"||e==="1":Array.isArray(t)?e?e.split(","):[]:e}function u(){return typeof window>"u"?new URLSearchParams:new URLSearchParams(window.location.search)}function x(e,t){if(typeof window>"u")return;let n=e.toString(),r=n?`${window.location.pathname}?${n}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;t==="push"?window.history.pushState(null,"",r):window.history.replaceState(null,"",r);}var s=new Map,h=false;function R(){h||typeof window>"u"||(h=true,window.addEventListener("popstate",()=>{let e=u();a(()=>{for(let[t,n]of s){let r=e.get(t),a=r!==null?n.deserialize(r):n.defaultValue;n.signal.set(a);}});}));}function v(e,t,n={}){let{serialize:r=i=>Q(i),deserialize:a=i=>b(i,t),history:w="replace",debounce:d=0,removeDefault:m=true}=n,p=u().get(e),S=p!==null?a(p):t,o=c(S);s.set(e,{signal:o,deserialize:a,defaultValue:t}),R();let l=null,T=false,z=o.set;o.set=i=>{if(z(i),T);let y=()=>{let c=u();m&&i===t?c.delete(e):c.set(e,r(i)),x(c,w);};d>0?(l&&clearTimeout(l),l=setTimeout(y,d)):y();};o.update;return o.update=i=>{o.set(i(o()));},o}function j(e,t){let n={};for(let[r,a]of Object.entries(e))n[r]=v(r,a.default,{serialize:a.serialize,deserialize:a.deserialize,history:t?.history});return n}function D(){if(typeof window>"u")return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(null,"",e),a(()=>{for(let[,t]of s)t.signal.set(t.defaultValue);});}function M(){let e=u(),t={};return e.forEach((n,r)=>{t[r]=n;}),t}function O(e){s.delete(e);}function k(){s.clear();}export{v as a,j as b,D as c,M as d,O as e,k as f};//# sourceMappingURL=chunk-F6VSSM2P.js.map
2
+ //# sourceMappingURL=chunk-F6VSSM2P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/query-state.ts"],"names":["defaultSerialize","value","defaultDeserialize","raw","defaultValue","getSearchParams","updateURL","params","mode","search","url","activeStates","popstateListening","ensurePopstateListener","batch","key","state","useQueryState","options","serialize","v","deserialize","historyMode","debounceMs","removeDefault","initialValue","signal","debounceTimer","isInternalUpdate","originalSet","doUpdate","currentParams","fn","useQueryStates","schema","result","config","clearQueryState","getQueryParams","removeQueryState","resetQueryState"],"mappings":"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","file":"chunk-F6VSSM2P.js","sourcesContent":["/**\n * URL-synced reactive state.\n *\n * Automatically sync signal values to URL query parameters.\n * Users can share links, use browser back/forward, and state\n * persists across page reloads — all with zero boilerplate.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * const page = useQueryState('page', 1);\n * const tags = useQueryState('tags', ['js']);\n *\n * search.set('akashjs'); // URL → ?q=akashjs&page=1&tags=js\n * // User hits back → signals update automatically\n * ```\n */\n\nimport { signal, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport type { Signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface QueryStateOptions<T> {\n /** Custom serializer (default: auto-detect from type) */\n serialize?: (value: T) => string;\n /** Custom deserializer (default: auto-detect from type) */\n deserialize?: (raw: string) => T;\n /** Whether to push or replace history entry (default: 'replace') */\n history?: 'push' | 'replace';\n /** Debounce URL updates in ms (default: 0) */\n debounce?: number;\n /** Remove param from URL when value equals default */\n removeDefault?: boolean;\n}\n\n// =========================================================================\n// Serializers\n// =========================================================================\n\nfunction defaultSerialize(value: unknown): string {\n if (Array.isArray(value)) return value.join(',');\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n return String(value);\n}\n\nfunction defaultDeserialize<T>(raw: string, defaultValue: T): T {\n if (typeof defaultValue === 'number') return Number(raw) as T;\n if (typeof defaultValue === 'boolean') return (raw === 'true' || raw === '1') as T;\n if (Array.isArray(defaultValue)) {\n return (raw ? raw.split(',') : []) as T;\n }\n return raw as T;\n}\n\n// =========================================================================\n// URL helpers\n// =========================================================================\n\nfunction getSearchParams(): URLSearchParams {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n}\n\nfunction updateURL(params: URLSearchParams, mode: 'push' | 'replace'): void {\n if (typeof window === 'undefined') return;\n\n const search = params.toString();\n const url = search ? `${window.location.pathname}?${search}${window.location.hash}` : `${window.location.pathname}${window.location.hash}`;\n\n if (mode === 'push') {\n window.history.pushState(null, '', url);\n } else {\n window.history.replaceState(null, '', url);\n }\n}\n\n// =========================================================================\n// useQueryState — single value\n// =========================================================================\n\n/** Track active query state signals for popstate sync */\nconst activeStates = new Map<string, { signal: Signal<any>; deserialize: (raw: string) => any; defaultValue: any }>();\nlet popstateListening = false;\n\nfunction ensurePopstateListener(): void {\n if (popstateListening || typeof window === 'undefined') return;\n popstateListening = true;\n\n window.addEventListener('popstate', () => {\n const params = getSearchParams();\n batch(() => {\n for (const [key, state] of activeStates) {\n const raw = params.get(key);\n const value = raw !== null\n ? state.deserialize(raw)\n : state.defaultValue;\n state.signal.set(value);\n }\n });\n });\n}\n\n/**\n * Create a signal synced to a URL query parameter.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * search(); // reads from URL or default\n * search.set('hello'); // updates URL to ?q=hello\n * ```\n */\nexport function useQueryState<T>(\n key: string,\n defaultValue: T,\n options: QueryStateOptions<T> = {},\n): Signal<T> {\n const {\n serialize = (v: T) => defaultSerialize(v),\n deserialize = (raw: string) => defaultDeserialize(raw, defaultValue),\n history: historyMode = 'replace',\n debounce: debounceMs = 0,\n removeDefault = true,\n } = options;\n\n // Read initial value from URL\n const params = getSearchParams();\n const raw = params.get(key);\n const initialValue = raw !== null ? deserialize(raw) : defaultValue;\n\n const state = signal<T>(initialValue);\n\n // Register for popstate sync\n activeStates.set(key, { signal: state, deserialize, defaultValue });\n ensurePopstateListener();\n\n // Sync signal → URL\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let isInternalUpdate = false;\n\n const originalSet = state.set;\n state.set = (value: T) => {\n originalSet(value);\n\n if (isInternalUpdate) return;\n\n const doUpdate = () => {\n const currentParams = getSearchParams();\n\n if (removeDefault && value === defaultValue) {\n currentParams.delete(key);\n } else {\n currentParams.set(key, serialize(value));\n }\n\n updateURL(currentParams, historyMode);\n };\n\n if (debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doUpdate, debounceMs);\n } else {\n doUpdate();\n }\n };\n\n const originalUpdate = state.update;\n state.update = (fn: (prev: T) => T) => {\n state.set(fn(state()));\n };\n\n return state;\n}\n\n// =========================================================================\n// useQueryStates — multiple values at once\n// =========================================================================\n\ntype QueryStateSchema = Record<string, {\n default: unknown;\n serialize?: (value: any) => string;\n deserialize?: (raw: string) => any;\n}>;\n\ntype QueryStates<T extends QueryStateSchema> = {\n [K in keyof T]: Signal<T[K]['default']>;\n};\n\n/**\n * Create multiple URL-synced signals at once.\n * All updates within a batch result in a single URL change.\n *\n * ```ts\n * const { q, page, sort } = useQueryStates({\n * q: { default: '' },\n * page: { default: 1 },\n * sort: { default: 'name' },\n * });\n * ```\n */\nexport function useQueryStates<T extends QueryStateSchema>(\n schema: T,\n options?: { history?: 'push' | 'replace' },\n): QueryStates<T> {\n const result = {} as any;\n for (const [key, config] of Object.entries(schema)) {\n result[key] = useQueryState(key, config.default, {\n serialize: config.serialize,\n deserialize: config.deserialize,\n history: options?.history,\n });\n }\n return result;\n}\n\n// =========================================================================\n// Utilities\n// =========================================================================\n\n/**\n * Remove all query state params from the URL.\n */\nexport function clearQueryState(): void {\n if (typeof window === 'undefined') return;\n const url = `${window.location.pathname}${window.location.hash}`;\n window.history.replaceState(null, '', url);\n\n batch(() => {\n for (const [, state] of activeStates) {\n state.signal.set(state.defaultValue);\n }\n });\n}\n\n/**\n * Get all current query params as a plain object.\n */\nexport function getQueryParams(): Record<string, string> {\n const params = getSearchParams();\n const result: Record<string, string> = {};\n params.forEach((value, key) => { result[key] = value; });\n return result;\n}\n\n/**\n * Cleanup: remove a specific query state binding.\n */\nexport function removeQueryState(key: string): void {\n activeStates.delete(key);\n}\n\n/**\n * Cleanup all query state bindings (useful for testing).\n */\nexport function resetQueryState(): void {\n activeStates.clear();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkXWVNLE2W_cjs=require('./chunk-XWVNLE2W.cjs');var i=chunkXWVNLE2W_cjs.s(n=>{let t=null,o=null;function u(){let e=n.props.target;return e?typeof e=="string"?document.querySelector(e)??document.body:e:document.body}return chunkXWVNLE2W_cjs.p(()=>{o&&t&&t.removeChild(o);}),()=>{t=u();let e=n.children();return o=chunkXWVNLE2W_cjs.l(e),t.appendChild(o),document.createComment("portal")}});exports.a=i;//# sourceMappingURL=chunk-FUVSCPU4.cjs.map
2
+ //# sourceMappingURL=chunk-FUVSCPU4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/portal.ts"],"names":["Portal","defineComponent","ctx","container","mountedNode","getTarget","target","onUnmount","content","nodeToDOM"],"mappings":"mEA8BO,IAAMA,CAAAA,CAASC,mBAAAA,CAA8BC,CAAAA,EAAQ,CAC1D,IAAIC,CAAAA,CAAgC,IAAA,CAChCC,CAAAA,CAA2B,IAAA,CAE/B,SAASC,CAAAA,EAAyB,CAChC,IAAMC,EAASJ,CAAAA,CAAI,KAAA,CAAM,MAAA,CACzB,OAAKI,CAAAA,CACD,OAAOA,CAAAA,EAAW,QAAA,CACb,SAAS,aAAA,CAA2BA,CAAM,CAAA,EAAK,QAAA,CAAS,IAAA,CAE1DA,CAAAA,CAJa,QAAA,CAAS,IAK/B,CAEA,OAAAC,mBAAAA,CAAU,IAAM,CACVH,CAAAA,EAAeD,CAAAA,EACjBA,CAAAA,CAAU,WAAA,CAAYC,CAAW,EAErC,CAAC,CAAA,CAEM,IAAM,CACXD,CAAAA,CAAYE,CAAAA,EAAU,CACtB,IAAMG,CAAAA,CAAUN,CAAAA,CAAI,QAAA,EAAS,CAC7B,OAAAE,CAAAA,CAAcK,mBAAAA,CAAUD,CAAO,EAC/BL,CAAAA,CAAU,WAAA,CAAYC,CAAW,CAAA,CAG1B,QAAA,CAAS,aAAA,CAAc,QAAQ,CACxC,CACF,CAAC","file":"chunk-FUVSCPU4.cjs","sourcesContent":["/**\n * <Portal> component.\n *\n * Renders children into a different DOM node, outside the\n * component tree. Essential for modals, tooltips, toasts,\n * dropdowns, and overlays.\n *\n * ```html\n * <Portal target=\"body\">\n * <div class=\"modal\">Modal content</div>\n * </Portal>\n *\n * <Portal target=\"#tooltip-container\">\n * <Tooltip />\n * </Portal>\n * ```\n */\n\nimport { defineComponent, onUnmount } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface PortalProps {\n /** CSS selector or HTMLElement to render into (default: document.body) */\n target?: string | HTMLElement;\n}\n\n/**\n * <Portal> — render children into a different DOM location.\n */\nexport const Portal = defineComponent<PortalProps>((ctx) => {\n let container: HTMLElement | null = null;\n let mountedNode: Node | null = null;\n\n function getTarget(): HTMLElement {\n const target = ctx.props.target;\n if (!target) return document.body;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target) ?? document.body;\n }\n return target;\n }\n\n onUnmount(() => {\n if (mountedNode && container) {\n container.removeChild(mountedNode);\n }\n });\n\n return () => {\n container = getTarget();\n const content = ctx.children();\n mountedNode = nodeToDOM(content);\n container.appendChild(mountedNode);\n\n // Return a placeholder comment in the original tree\n return document.createComment('portal');\n };\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,e}from'./chunk-YXKQTEPR.js';function a(e,t){return n=>{t.self&&n.target!==n.currentTarget||(t.preventDefault&&n.preventDefault(),t.stopPropagation&&n.stopPropagation(),t.stopImmediatePropagation&&n.stopImmediatePropagation?.(),e(n));}}function f(e,t,n,o={}){let r=a(n,o),i={once:o.once,capture:o.capture,passive:o.passive};return e.addEventListener(t,r,i),()=>e.removeEventListener(t,r,i)}function g(e){let t=c(e.clientWidth),n=c(e.clientHeight);return typeof ResizeObserver<"u"&&new ResizeObserver(r=>{let i=r[0];i&&(t.set(i.contentRect.width),n.set(i.contentRect.height));}).observe(e),{width:()=>t(),height:()=>n()}}function b(e){let t=e??(typeof window<"u"?window:null),n=c(e?e.scrollLeft:window?.scrollX??0),o=c(e?e.scrollTop:window?.scrollY??0);if(t){let s=()=>{e?(n.set(e.scrollLeft),o.set(e.scrollTop)):(n.set(window.scrollX),o.set(window.scrollY));};t.addEventListener("scroll",s,{passive:true});}let r=o.set;o.set=s=>{r(s),e?e.scrollTop=s:window?.scrollTo(window.scrollX,s);};let i=n.set;return n.set=s=>{i(s),e?e.scrollLeft=s:window?.scrollTo(s,window.scrollY);},{scrollX:n,scrollY:o}}function m(){return c(null)}function E(e){return c(null)}function v(e$1,t,n){e$1.name=typeof n=="string"?n:"",e$1.addEventListener("change",()=>{e$1.checked&&t.set(n);}),e(()=>{e$1.checked=t()===n;});}function d(e$1,t,n){return e(()=>{n()?e$1.classList.add(t):e$1.classList.remove(t);})}function w(e,t){let n=Object.entries(t).map(([o,r])=>d(e,o,r));return ()=>n.forEach(o=>o())}function p(e$1,t,n){let o=t.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`);return e(()=>{let r=n();r==null?e$1.style.removeProperty(o):e$1.style.setProperty(o,typeof r=="number"?`${r}px`:String(r));})}function T(e,t){let n=Object.entries(t).map(([o,r])=>p(e,o,r));return ()=>n.forEach(o=>o())}export{a,f as b,g as c,b as d,m as e,E as f,v as g,d as h,w as i,p as j,T as k};//# sourceMappingURL=chunk-FVF3T4JJ.js.map
2
+ //# sourceMappingURL=chunk-FVF3T4JJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/event-modifiers.ts"],"names":["withModifiers","handler","modifiers","e","onEvent","el","event","wrapped","listenerOptions","bindDimensions","width","signal","height","entries","entry","bindScroll","target","scrollX","scrollY","originalSetY","value","originalSetX","bindElement","bindGroup","name","bindGroupItem","group","effect","bindClass","className","condition","bindClasses","classes","disposers","cls","d","bindStyle","property","kebab","m","v","bindStyles","styles","prop","valueFn"],"mappings":"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","file":"chunk-FVF3T4JJ.js","sourcesContent":["/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n"]}
@@ -0,0 +1,5 @@
1
+ 'use strict';var chunkXWVNLE2W_cjs=require('./chunk-XWVNLE2W.cjs'),chunkWOZWFMOK_cjs=require('./chunk-WOZWFMOK.cjs');var f=[];function m(){let i=f;return f=[],i}function g(i){if(!i||i.length===0)return "";let r="",s=i.reduce((o,t)=>t.title??o,""),c=i.reduce((o,t)=>t.titleTemplate??o,"");if(s){let o=c?c.replace("%s",s):s;r+=`<title>${o}</title>
2
+ `;}for(let o of i)for(let t of o.meta??[])r+=" <meta",t.name&&(r+=` name="${t.name}"`),t.property&&(r+=` property="${t.property}"`),t.httpEquiv&&(r+=` http-equiv="${t.httpEquiv}"`),r+=` content="${t.content}"`,r+=` />
3
+ `;for(let o of i)for(let t of o.link??[])r+=` <link rel="${t.rel}" href="${t.href}"`,t.type&&(r+=` type="${t.type}"`),r+=` />
4
+ `;return r}var a="data-akash-head";function h(i){let r=typeof i=="function"?i:()=>i;if(typeof document>"u")return f.push(r()),()=>{};let s=[],c=chunkWOZWFMOK_cjs.e(()=>{let t=r();for(let e of s)e.remove();if(s.length=0,t.title){let e=t.titleTemplate?t.titleTemplate.replace("%s",t.title):t.title;document.title=e;}for(let e of t.meta??[]){let n=document.createElement("meta");n.setAttribute(a,""),e.name&&n.setAttribute("name",e.name),e.property&&n.setAttribute("property",e.property),e.httpEquiv&&n.setAttribute("http-equiv",e.httpEquiv),n.setAttribute("content",e.content),document.head.appendChild(n),s.push(n);}for(let e of t.link??[]){let n=document.createElement("link");n.setAttribute(a,""),n.setAttribute("rel",e.rel),n.setAttribute("href",e.href),e.type&&n.setAttribute("type",e.type),document.head.appendChild(n),s.push(n);}for(let e of t.script??[]){let n=document.createElement("script");n.setAttribute(a,""),e.src&&n.setAttribute("src",e.src),e.type&&n.setAttribute("type",e.type),e.async&&n.setAttribute("async",""),e.defer&&n.setAttribute("defer",""),e.innerHTML&&(n.textContent=e.innerHTML),document.head.appendChild(n),s.push(n);}if(t.htmlAttrs)for(let[e,n]of Object.entries(t.htmlAttrs))document.documentElement.setAttribute(e,n);if(t.bodyAttrs)for(let[e,n]of Object.entries(t.bodyAttrs))document.body.setAttribute(e,n);}),o=()=>{c();for(let t of s)t.remove();s.length=0;};try{chunkXWVNLE2W_cjs.p(o);}catch{}return o}exports.a=m;exports.b=g;exports.c=h;//# sourceMappingURL=chunk-FVWHMFX6.cjs.map
5
+ //# sourceMappingURL=chunk-FVWHMFX6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/head.ts"],"names":["ssrHeadTags","collectSSRHead","tags","renderHeadToString","configs","html","title","t","c","titleTemplate","finalTitle","config","meta","link","MANAGED_ATTR","useHead","getConfig","managedElements","dispose","effect","cfg","el","script","key","value","cleanup","onUnmount"],"mappings":"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","file":"chunk-FVWHMFX6.cjs","sourcesContent":["/**\n * Document head management.\n *\n * Provides Title, Meta, and Head components for managing\n * <head> content declaratively. SSR-compatible — on the server,\n * collects tags; on the client, directly mutates the DOM.\n *\n * ```ts\n * // In any component:\n * useHead({\n * title: 'My Page',\n * meta: [\n * { name: 'description', content: 'Page description' },\n * { property: 'og:title', content: 'My Page' },\n * ],\n * link: [\n * { rel: 'canonical', href: 'https://example.com/page' },\n * ],\n * });\n * ```\n */\n\nimport { effect } from './signals.js';\nimport { onUnmount } from './component.js';\n\n// --- Types ---\n\nexport interface HeadConfig {\n /** Document title */\n title?: string;\n /** Title template — use %s as placeholder */\n titleTemplate?: string;\n /** Meta tags */\n meta?: MetaTag[];\n /** Link tags */\n link?: LinkTag[];\n /** Script tags */\n script?: ScriptTag[];\n /** HTML attributes */\n htmlAttrs?: Record<string, string>;\n /** Body attributes */\n bodyAttrs?: Record<string, string>;\n}\n\nexport interface MetaTag {\n name?: string;\n property?: string;\n httpEquiv?: string;\n content: string;\n}\n\nexport interface LinkTag {\n rel: string;\n href: string;\n type?: string;\n crossorigin?: string;\n}\n\nexport interface ScriptTag {\n src?: string;\n type?: string;\n async?: boolean;\n defer?: boolean;\n innerHTML?: string;\n}\n\n// --- SSR head collection ---\n\nlet ssrHeadTags: HeadConfig[] = [];\n\n/** @internal — collect head tags during SSR */\nexport function collectSSRHead(): HeadConfig[] {\n const tags = ssrHeadTags;\n ssrHeadTags = [];\n return tags;\n}\n\n/** Render collected head tags to HTML string (for SSR) */\nexport function renderHeadToString(configs?: HeadConfig[] | null): string {\n if (!configs || configs.length === 0) return '';\n let html = '';\n\n // Last title wins\n const title = configs.reduce((t, c) => c.title ?? t, '');\n const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, '');\n\n if (title) {\n const finalTitle = titleTemplate\n ? titleTemplate.replace('%s', title)\n : title;\n html += `<title>${finalTitle}</title>\\n`;\n }\n\n // Merge all meta tags\n for (const config of configs) {\n for (const meta of config.meta ?? []) {\n html += ' <meta';\n if (meta.name) html += ` name=\"${meta.name}\"`;\n if (meta.property) html += ` property=\"${meta.property}\"`;\n if (meta.httpEquiv) html += ` http-equiv=\"${meta.httpEquiv}\"`;\n html += ` content=\"${meta.content}\"`;\n html += ' />\\n';\n }\n }\n\n // Merge all link tags\n for (const config of configs) {\n for (const link of config.link ?? []) {\n html += ` <link rel=\"${link.rel}\" href=\"${link.href}\"`;\n if (link.type) html += ` type=\"${link.type}\"`;\n html += ' />\\n';\n }\n }\n\n return html;\n}\n\n// --- Client-side head management ---\n\nconst MANAGED_ATTR = 'data-akash-head';\n\n/**\n * Declaratively manage document head tags.\n * Call inside defineComponent() setup.\n *\n * Tags are automatically cleaned up when the component unmounts.\n * Reactive values (signals) in the config trigger updates.\n */\nexport function useHead(config: HeadConfig | (() => HeadConfig)): () => void {\n const getConfig = typeof config === 'function' ? config : () => config;\n\n // SSR: just collect\n if (typeof document === 'undefined') {\n ssrHeadTags.push(getConfig());\n return () => {};\n }\n\n const managedElements: Element[] = [];\n\n const dispose = effect(() => {\n const cfg = getConfig();\n\n // Clean up previously managed elements\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n\n // Title\n if (cfg.title) {\n const title = cfg.titleTemplate\n ? cfg.titleTemplate.replace('%s', cfg.title)\n : cfg.title;\n document.title = title;\n }\n\n // Meta tags\n for (const meta of cfg.meta ?? []) {\n const el = document.createElement('meta');\n el.setAttribute(MANAGED_ATTR, '');\n if (meta.name) el.setAttribute('name', meta.name);\n if (meta.property) el.setAttribute('property', meta.property);\n if (meta.httpEquiv) el.setAttribute('http-equiv', meta.httpEquiv);\n el.setAttribute('content', meta.content);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Link tags\n for (const link of cfg.link ?? []) {\n const el = document.createElement('link');\n el.setAttribute(MANAGED_ATTR, '');\n el.setAttribute('rel', link.rel);\n el.setAttribute('href', link.href);\n if (link.type) el.setAttribute('type', link.type);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Script tags\n for (const script of cfg.script ?? []) {\n const el = document.createElement('script');\n el.setAttribute(MANAGED_ATTR, '');\n if (script.src) el.setAttribute('src', script.src);\n if (script.type) el.setAttribute('type', script.type);\n if (script.async) el.setAttribute('async', '');\n if (script.defer) el.setAttribute('defer', '');\n if (script.innerHTML) el.textContent = script.innerHTML;\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // HTML attributes\n if (cfg.htmlAttrs) {\n for (const [key, value] of Object.entries(cfg.htmlAttrs)) {\n document.documentElement.setAttribute(key, value);\n }\n }\n\n // Body attributes\n if (cfg.bodyAttrs) {\n for (const [key, value] of Object.entries(cfg.bodyAttrs)) {\n document.body.setAttribute(key, value);\n }\n }\n });\n\n const cleanup = () => {\n dispose();\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n };\n\n // Cleanup on unmount\n try {\n onUnmount(cleanup);\n } catch {\n // onUnmount may throw if called outside component — that's fine,\n // caller can use the returned dispose function manually\n }\n\n return cleanup;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {f}from'./chunk-VUMMC2P5.js';function v(t){return t}function h(t,g){let p=[],i=[],s=[],l={},e=null,r=null,f$1={provide(n,o){f(n,o);},onError(n){i.push(n);},onBeforeMount(n){s.push(n);},config:l},u={use(n){return p.push(n),u},config(n,o){return l[n]=o,u},mount(n){if(r=typeof n=="string"?document.querySelector(n):n,!r)throw new Error(`[AkashJS] Mount target not found: ${n}`);for(let o of p)o.setup(f$1);for(let o of s)o();try{e=t(g??{}),r.appendChild(e);}catch(o){let c=o instanceof Error?o:new Error(String(o));if(i.length>0)for(let a of i)a(c);else throw c}},unmount(){e&&r&&(r.removeChild(e),e=null);}};return u}export{v as a,h as b};//# sourceMappingURL=chunk-IHEW6F2H.js.map
2
+ //# sourceMappingURL=chunk-IHEW6F2H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts"],"names":["definePlugin","plugin","createApp","rootComponent","rootProps","plugins","errorHandlers","beforeMountHooks","appConfig","mountedNode","containerEl","pluginCtx","key","value","provide","handler","hook","app","selector","err","e"],"mappings":"oCA+DO,SAASA,EAAaC,CAAAA,CAAwB,CACnD,OAAOA,CACT,CAcO,SAASC,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACa,CACb,IAAMC,CAAAA,CAAoB,EAAC,CACrBC,CAAAA,CAA+C,EAAC,CAChDC,CAAAA,CAAsC,EAAC,CACvCC,EAAqC,EAAC,CACxCC,EAA2B,IAAA,CAC3BC,CAAAA,CAAkC,KAEhCC,GAAAA,CAA2B,CAC/B,OAAA,CAAWC,CAAAA,CAAsBC,EAAU,CAEzCC,CAAAA,CAAQF,EAAKC,CAAK,EACpB,EACA,OAAA,CAAQE,CAAAA,CAAiC,CACvCT,CAAAA,CAAc,KAAKS,CAAO,EAC5B,CAAA,CACA,aAAA,CAAcC,EAAkB,CAC9BT,CAAAA,CAAiB,IAAA,CAAKS,CAAI,EAC5B,CAAA,CACA,MAAA,CAAQR,CACV,CAAA,CAEMS,CAAAA,CAAmB,CACvB,GAAA,CAAIhB,CAAAA,CAAgB,CAClB,OAAAI,EAAQ,IAAA,CAAKJ,CAAM,EACZgB,CACT,CAAA,CAEA,OAAOL,CAAAA,CAAaC,CAAAA,CAAgB,CAClC,OAAAL,EAAUI,CAAG,CAAA,CAAIC,EACVI,CACT,CAAA,CAEA,MAAMC,CAAAA,CAAgC,CAMpC,GALAR,CAAAA,CACE,OAAOQ,CAAAA,EAAa,QAAA,CAChB,QAAA,CAAS,aAAA,CAA2BA,CAAQ,CAAA,CAC5CA,CAAAA,CAEF,CAACR,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,qCAAqCQ,CAAQ,CAAA,CAC/C,EAIF,IAAA,IAAWjB,CAAAA,IAAUI,CAAAA,CACnBJ,CAAAA,CAAO,MAAMU,GAAS,CAAA,CAIxB,QAAWK,CAAAA,IAAQT,CAAAA,CACjBS,GAAK,CAIP,GAAI,CACFP,CAAAA,CAAcN,EAAeC,CAAAA,EAAa,EAAU,CAAA,CACpDM,CAAAA,CAAY,YAAYD,CAAW,EACrC,CAAA,MAASU,CAAAA,CAAK,CACZ,IAAMC,CAAAA,CAAID,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAC5D,GAAIb,EAAc,MAAA,CAAS,CAAA,CACzB,QAAWS,CAAAA,IAAWT,CAAAA,CACpBS,CAAAA,CAAQK,CAAC,OAGX,MAAMA,CAEV,CACF,CAAA,CAEA,OAAA,EAAU,CACJX,CAAAA,EAAeC,CAAAA,GACjBA,CAAAA,CAAY,WAAA,CAAYD,CAAW,CAAA,CACnCA,CAAAA,CAAc,MAElB,CACF,CAAA,CAEA,OAAOQ,CACT","file":"chunk-IHEW6F2H.js","sourcesContent":["/**\n * Plugin system.\n *\n * Allows third-party extensions to hook into the AkashJS lifecycle.\n * Plugins can provide context values, add global error handlers,\n * register stores, and run setup code.\n *\n * ```ts\n * const authPlugin = definePlugin({\n * name: 'auth',\n * setup(app) {\n * const store = defineStore('auth', { ... })();\n * app.provide(AuthContext, store);\n * app.onError((err) => { if (err.status === 401) logout(); });\n * },\n * });\n *\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.mount('#app');\n * ```\n */\n\nimport { provide } from './context.js';\nimport type { InjectionKey } from './context.js';\nimport type { Component } from './component.js';\n\n// --- Types ---\n\nexport interface PluginContext {\n /** Provide a value to all components */\n provide<T>(key: InjectionKey<T>, value: T): void;\n /** Register a global error handler */\n onError(handler: (error: Error) => void): void;\n /** Register a hook that runs before each component mount */\n onBeforeMount(hook: () => void): void;\n /** Access the app config */\n config: Record<string, unknown>;\n}\n\nexport interface Plugin {\n /** Plugin name (for debugging) */\n name: string;\n /** Setup function called when the plugin is installed */\n setup: (ctx: PluginContext) => void | Promise<void>;\n}\n\nexport interface AppInstance {\n /** Install a plugin */\n use(plugin: Plugin): AppInstance;\n /** Set a config value */\n config(key: string, value: unknown): AppInstance;\n /** Mount the app to a DOM element */\n mount(selector: string | HTMLElement): void;\n /** Unmount the app */\n unmount(): void;\n}\n\n// --- definePlugin ---\n\n/**\n * Define a framework plugin.\n */\nexport function definePlugin(plugin: Plugin): Plugin {\n return plugin;\n}\n\n// --- createApp ---\n\n/**\n * Create an application instance with plugin support.\n *\n * ```ts\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.use(i18nPlugin);\n * app.mount('#app');\n * ```\n */\nexport function createApp<P extends Record<string, unknown>>(\n rootComponent: Component<P>,\n rootProps?: P,\n): AppInstance {\n const plugins: Plugin[] = [];\n const errorHandlers: Array<(error: Error) => void> = [];\n const beforeMountHooks: Array<() => void> = [];\n const appConfig: Record<string, unknown> = {};\n let mountedNode: Node | null = null;\n let containerEl: HTMLElement | null = null;\n\n const pluginCtx: PluginContext = {\n provide<T>(key: InjectionKey<T>, value: T) {\n // Will be called during setup — context scope is active\n provide(key, value);\n },\n onError(handler: (error: Error) => void) {\n errorHandlers.push(handler);\n },\n onBeforeMount(hook: () => void) {\n beforeMountHooks.push(hook);\n },\n config: appConfig,\n };\n\n const app: AppInstance = {\n use(plugin: Plugin) {\n plugins.push(plugin);\n return app;\n },\n\n config(key: string, value: unknown) {\n appConfig[key] = value;\n return app;\n },\n\n mount(selector: string | HTMLElement) {\n containerEl =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector;\n\n if (!containerEl) {\n throw new Error(\n `[AkashJS] Mount target not found: ${selector}`,\n );\n }\n\n // Run plugin setup\n for (const plugin of plugins) {\n plugin.setup(pluginCtx);\n }\n\n // Run before-mount hooks\n for (const hook of beforeMountHooks) {\n hook();\n }\n\n // Render root component\n try {\n mountedNode = rootComponent((rootProps ?? {}) as any);\n containerEl.appendChild(mountedNode);\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (errorHandlers.length > 0) {\n for (const handler of errorHandlers) {\n handler(e);\n }\n } else {\n throw e;\n }\n }\n },\n\n unmount() {\n if (mountedNode && containerEl) {\n containerEl.removeChild(mountedNode);\n mountedNode = null;\n }\n },\n };\n\n return app;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ function a(){let t=new Map;function r(e){let n=t.get(e);return n||(n=new Set,t.set(e,n)),n}return {on(e,n){return r(e).add(n),()=>r(e).delete(n)},once(e,n){let s=o=>{r(e).delete(s),n(o);};return r(e).add(s),()=>r(e).delete(s)},emit(e,n){let s=t.get(e);if(s)for(let o of Array.from(s))o(n);},off(e,n){r(e).delete(n);},clear(e){e?t.delete(e):t.clear();},listenerCount(e){return t.get(e)?.size??0},hasListeners(e){return (t.get(e)?.size??0)>0}}}var d=null;function i(){return d||(d=a()),d}export{a,i as b};//# sourceMappingURL=chunk-IJS2EMSE.js.map
2
+ //# sourceMappingURL=chunk-IJS2EMSE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/event-bus.ts"],"names":["createEventBus","listeners","getSet","event","set","handler","wrapper","data","globalBus","globalEventBus"],"mappings":"AA8DO,SAASA,GAA4E,CAC1F,IAAMC,CAAAA,CAAY,IAAI,IAEtB,SAASC,CAAAA,CAAOC,CAAAA,CAAkC,CAChD,IAAIC,CAAAA,CAAMH,CAAAA,CAAU,GAAA,CAAIE,CAAK,EAC7B,OAAKC,CAAAA,GACHA,CAAAA,CAAM,IAAI,IACVH,CAAAA,CAAU,GAAA,CAAIE,CAAAA,CAAOC,CAAG,GAEnBA,CACT,CAEA,OAAO,CACL,GAA+BD,CAAAA,CAAUE,CAAAA,CAAyC,CAChF,OAAAH,CAAAA,CAAOC,CAAK,CAAA,CAAE,GAAA,CAAIE,CAAuB,CAAA,CAClC,IAAMH,CAAAA,CAAOC,CAAK,CAAA,CAAE,MAAA,CAAOE,CAAuB,CAC3D,CAAA,CAEA,IAAA,CAAiCF,CAAAA,CAAUE,EAAyC,CAClF,IAAMC,EAA+BC,CAAAA,EAAS,CAC5CL,EAAOC,CAAK,CAAA,CAAE,MAAA,CAAOG,CAAuB,EAC5CD,CAAAA,CAAQE,CAAI,EACd,CAAA,CACA,OAAAL,CAAAA,CAAOC,CAAK,CAAA,CAAE,GAAA,CAAIG,CAAuB,CAAA,CAClC,IAAMJ,EAAOC,CAAK,CAAA,CAAE,OAAOG,CAAuB,CAC3D,CAAA,CAEA,IAAA,CAAiCH,EAAUI,CAAAA,CAAkB,CAC3D,IAAMH,CAAAA,CAAMH,EAAU,GAAA,CAAIE,CAAK,CAAA,CAC/B,GAAIC,EACF,IAAA,IAAWC,CAAAA,IAAW,MAAM,IAAA,CAAKD,CAAG,EAClCC,CAAAA,CAAQE,CAAI,EAGlB,CAAA,CAEA,IAAgCJ,CAAAA,CAAUE,CAAAA,CAAmC,CAC3EH,CAAAA,CAAOC,CAAK,CAAA,CAAE,MAAA,CAAOE,CAAuB,EAC9C,EAEA,KAAA,CAAMF,CAAAA,CAAgC,CAChCA,CAAAA,CACFF,CAAAA,CAAU,OAAOE,CAAK,CAAA,CAEtBF,CAAAA,CAAU,KAAA,GAEd,CAAA,CAEA,aAAA,CAAcE,CAAAA,CAAiC,CAC7C,OAAOF,CAAAA,CAAU,GAAA,CAAIE,CAAK,CAAA,EAAG,MAAQ,CACvC,CAAA,CAEA,aAAaA,CAAAA,CAAkC,CAC7C,QAAQF,CAAAA,CAAU,GAAA,CAAIE,CAAK,CAAA,EAAG,MAAQ,CAAA,EAAK,CAC7C,CACF,CACF,CAMA,IAAIK,CAAAA,CAAkC,IAAA,CAe/B,SAASC,GAA4E,CAC1F,OAAKD,IACHA,CAAAA,CAAYR,CAAAA,IAEPQ,CACT","file":"chunk-IJS2EMSE.js","sourcesContent":["/**\n * Event bus — typed pub/sub for cross-component communication.\n *\n * Fire-and-forget events between unrelated components without\n * prop drilling or context coupling.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'user:login': { userId: string };\n * 'cart:updated': { itemCount: number };\n * 'notification': string;\n * }>();\n *\n * // Subscribe\n * bus.on('user:login', ({ userId }) => fetchProfile(userId));\n *\n * // Emit from anywhere\n * bus.emit('user:login', { userId: '123' });\n *\n * // One-time listener\n * bus.once('cart:updated', ({ itemCount }) => showBadge(itemCount));\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type EventMap = Record<string, unknown>;\nexport type EventHandler<T = unknown> = (data: T) => void;\n\nexport interface EventBus<T extends EventMap> {\n /** Subscribe to an event */\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Subscribe once — auto-removes after first call */\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Emit an event to all listeners */\n emit<K extends keyof T & string>(event: K, data: T[K]): void;\n /** Remove a specific handler */\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void;\n /** Remove all handlers for an event (or all events) */\n clear(event?: keyof T & string): void;\n /** Get listener count for an event */\n listenerCount(event: keyof T & string): number;\n /** Check if an event has listeners */\n hasListeners(event: keyof T & string): boolean;\n}\n\n// =========================================================================\n// createEventBus\n// =========================================================================\n\n/**\n * Create a typed event bus.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'theme:change': 'light' | 'dark';\n * 'toast': { message: string; type: string };\n * }>();\n * ```\n */\nexport function createEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n const listeners = new Map<string, Set<EventHandler>>();\n\n function getSet(event: string): Set<EventHandler> {\n let set = listeners.get(event);\n if (!set) {\n set = new Set();\n listeners.set(event, set);\n }\n return set;\n }\n\n return {\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n getSet(event).add(handler as EventHandler);\n return () => getSet(event).delete(handler as EventHandler);\n },\n\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n const wrapper: EventHandler<T[K]> = (data) => {\n getSet(event).delete(wrapper as EventHandler);\n handler(data);\n };\n getSet(event).add(wrapper as EventHandler);\n return () => getSet(event).delete(wrapper as EventHandler);\n },\n\n emit<K extends keyof T & string>(event: K, data: T[K]): void {\n const set = listeners.get(event);\n if (set) {\n for (const handler of Array.from(set)) {\n handler(data);\n }\n }\n },\n\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void {\n getSet(event).delete(handler as EventHandler);\n },\n\n clear(event?: keyof T & string): void {\n if (event) {\n listeners.delete(event);\n } else {\n listeners.clear();\n }\n },\n\n listenerCount(event: keyof T & string): number {\n return listeners.get(event)?.size ?? 0;\n },\n\n hasListeners(event: keyof T & string): boolean {\n return (listeners.get(event)?.size ?? 0) > 0;\n },\n };\n}\n\n// =========================================================================\n// Global bus singleton\n// =========================================================================\n\nlet globalBus: EventBus<any> | null = null;\n\n/**\n * Get the global event bus (created on first call).\n *\n * ```ts\n * import { globalEventBus } from '@akashjs/runtime';\n *\n * // In component A:\n * globalEventBus().emit('notification', 'Hello!');\n *\n * // In component B:\n * globalEventBus().on('notification', (msg) => show(msg));\n * ```\n */\nexport function globalEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n if (!globalBus) {\n globalBus = createEventBus<T>();\n }\n return globalBus as EventBus<T>;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ 'use strict';var chunkFVWHMFX6_cjs=require('./chunk-FVWHMFX6.cjs');function o(t){let r=Array.isArray(t)?t:[t];for(let e of r){let n={"@context":"https://schema.org",...e};chunkFVWHMFX6_cjs.c({script:[{type:"application/ld+json",innerHTML:JSON.stringify(n)}]});}}function s(t){let r=[{property:"og:title",content:t.title}];t.description&&r.push({property:"og:description",content:t.description}),t.image&&r.push({property:"og:image",content:t.image}),t.url&&r.push({property:"og:url",content:t.url}),t.type&&r.push({property:"og:type",content:t.type}),t.siteName&&r.push({property:"og:site_name",content:t.siteName}),t.locale&&r.push({property:"og:locale",content:t.locale}),chunkFVWHMFX6_cjs.c({meta:r});}function p(t){let r=[{name:"twitter:title",content:t.title}];t.card&&r.push({name:"twitter:card",content:t.card}),t.description&&r.push({name:"twitter:description",content:t.description}),t.image&&r.push({name:"twitter:image",content:t.image}),t.site&&r.push({name:"twitter:site",content:t.site}),t.creator&&r.push({name:"twitter:creator",content:t.creator}),chunkFVWHMFX6_cjs.c({meta:r});}function c(t){let r=[];t.description&&r.push({name:"description",content:t.description}),t.robots&&r.push({name:"robots",content:t.robots});let e=[];t.canonical&&e.push({rel:"canonical",href:t.canonical}),chunkFVWHMFX6_cjs.c({title:t.title,meta:r,link:e}),t.openGraph&&s(t.openGraph),t.twitter&&p(t.twitter),t.structuredData&&o(t.structuredData);}function u(t,r){let e=`<?xml version="1.0" encoding="UTF-8"?>
2
+ `;e+=`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
+ `;for(let n of r)e+=` <url>
4
+ `,e+=` <loc>${t}${n.url}</loc>
5
+ `,n.lastmod&&(e+=` <lastmod>${n.lastmod}</lastmod>
6
+ `),n.changefreq&&(e+=` <changefreq>${n.changefreq}</changefreq>
7
+ `),n.priority!=null&&(e+=` <priority>${n.priority}</priority>
8
+ `),e+=` </url>
9
+ `;return e+=`</urlset>
10
+ `,e}exports.a=o;exports.b=s;exports.c=p;exports.d=c;exports.e=u;//# sourceMappingURL=chunk-IKVHLORY.cjs.map
11
+ //# sourceMappingURL=chunk-IKVHLORY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/seo.ts"],"names":["useStructuredData","data","items","item","ld","useHead","useOpenGraph","meta","useTwitterCard","useSEO","config","link","generateSitemap","baseUrl","entries","xml","entry"],"mappings":"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","file":"chunk-IKVHLORY.cjs","sourcesContent":["/**\n * SEO utilities.\n *\n * Structured data (JSON-LD), Open Graph helpers, and canonical URL management.\n * Works with useHead() for SSR-compatible head tag management.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'Article',\n * headline: 'My Post',\n * author: { '@type': 'Person', name: 'Alice' },\n * });\n * ```\n */\n\nimport { useHead } from './head.js';\n\n// --- Types ---\n\nexport interface StructuredData {\n '@context'?: string;\n '@type': string;\n [key: string]: unknown;\n}\n\nexport interface OpenGraphData {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n siteName?: string;\n locale?: string;\n}\n\nexport interface TwitterCardData {\n card?: 'summary' | 'summary_large_image' | 'player' | 'app';\n title: string;\n description?: string;\n image?: string;\n site?: string;\n creator?: string;\n}\n\nexport interface SEOConfig {\n title: string;\n description?: string;\n canonical?: string;\n robots?: string;\n openGraph?: OpenGraphData;\n twitter?: TwitterCardData;\n structuredData?: StructuredData | StructuredData[];\n}\n\n// --- useStructuredData ---\n\n/**\n * Inject JSON-LD structured data into the document head.\n * Data is automatically wrapped with @context.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'WebSite',\n * name: 'AkashJS',\n * url: 'https://akashjs.dev',\n * });\n * ```\n */\nexport function useStructuredData(data: StructuredData | StructuredData[]): void {\n const items = Array.isArray(data) ? data : [data];\n\n for (const item of items) {\n const ld = { '@context': 'https://schema.org', ...item };\n useHead({\n script: [\n { type: 'application/ld+json', innerHTML: JSON.stringify(ld) },\n ],\n });\n }\n}\n\n// --- useOpenGraph ---\n\n/**\n * Set Open Graph meta tags.\n *\n * ```ts\n * useOpenGraph({\n * title: 'My Page',\n * description: 'Page description',\n * image: '/og-image.jpg',\n * type: 'article',\n * });\n * ```\n */\nexport function useOpenGraph(data: OpenGraphData): void {\n const meta: Array<{ property: string; content: string }> = [\n { property: 'og:title', content: data.title },\n ];\n\n if (data.description) meta.push({ property: 'og:description', content: data.description });\n if (data.image) meta.push({ property: 'og:image', content: data.image });\n if (data.url) meta.push({ property: 'og:url', content: data.url });\n if (data.type) meta.push({ property: 'og:type', content: data.type });\n if (data.siteName) meta.push({ property: 'og:site_name', content: data.siteName });\n if (data.locale) meta.push({ property: 'og:locale', content: data.locale });\n\n useHead({ meta });\n}\n\n// --- useTwitterCard ---\n\n/**\n * Set Twitter Card meta tags.\n *\n * ```ts\n * useTwitterCard({\n * card: 'summary_large_image',\n * title: 'My Page',\n * image: '/twitter-card.jpg',\n * });\n * ```\n */\nexport function useTwitterCard(data: TwitterCardData): void {\n const meta: Array<{ name: string; content: string }> = [\n { name: 'twitter:title', content: data.title },\n ];\n\n if (data.card) meta.push({ name: 'twitter:card', content: data.card });\n if (data.description) meta.push({ name: 'twitter:description', content: data.description });\n if (data.image) meta.push({ name: 'twitter:image', content: data.image });\n if (data.site) meta.push({ name: 'twitter:site', content: data.site });\n if (data.creator) meta.push({ name: 'twitter:creator', content: data.creator });\n\n useHead({ meta });\n}\n\n// --- useSEO (all-in-one) ---\n\n/**\n * Set all SEO-related head tags at once.\n *\n * ```ts\n * useSEO({\n * title: 'My Page | MySite',\n * description: 'Page description',\n * canonical: 'https://mysite.com/page',\n * openGraph: { title: 'My Page', image: '/og.jpg' },\n * twitter: { card: 'summary_large_image', title: 'My Page' },\n * structuredData: { '@type': 'WebPage', name: 'My Page' },\n * });\n * ```\n */\nexport function useSEO(config: SEOConfig): void {\n const meta: Array<{ name?: string; property?: string; content: string }> = [];\n\n if (config.description) {\n meta.push({ name: 'description', content: config.description });\n }\n if (config.robots) {\n meta.push({ name: 'robots', content: config.robots });\n }\n\n const link: Array<{ rel: string; href: string }> = [];\n if (config.canonical) {\n link.push({ rel: 'canonical', href: config.canonical });\n }\n\n useHead({ title: config.title, meta, link });\n\n if (config.openGraph) useOpenGraph(config.openGraph);\n if (config.twitter) useTwitterCard(config.twitter);\n if (config.structuredData) useStructuredData(config.structuredData);\n}\n\n// --- Sitemap generation (for CLI/build) ---\n\nexport interface SitemapEntry {\n url: string;\n lastmod?: string;\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';\n priority?: number;\n}\n\n/**\n * Generate a sitemap.xml string from route entries.\n *\n * ```ts\n * const xml = generateSitemap('https://mysite.com', [\n * { url: '/', priority: 1.0 },\n * { url: '/about', changefreq: 'monthly' },\n * { url: '/blog/hello', lastmod: '2026-03-29' },\n * ]);\n * ```\n */\nexport function generateSitemap(baseUrl: string, entries: SitemapEntry[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n';\n\n for (const entry of entries) {\n xml += ' <url>\\n';\n xml += ` <loc>${baseUrl}${entry.url}</loc>\\n`;\n if (entry.lastmod) xml += ` <lastmod>${entry.lastmod}</lastmod>\\n`;\n if (entry.changefreq) xml += ` <changefreq>${entry.changefreq}</changefreq>\\n`;\n if (entry.priority != null) xml += ` <priority>${entry.priority}</priority>\\n`;\n xml += ' </url>\\n';\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkPPNEAFKE_cjs=require('./chunk-PPNEAFKE.cjs');var c=Symbol("akash.context"),t=null;function i(e=t){let n={values:new Map,parent:e};return t=n,n}function p(e){t=e.parent;}function l(){return t}function a(e,n){let o=t;t=e;try{return n()}finally{t=o;}}function T(e){return {[c]:true,_type:void 0,defaultValue:e,id:Symbol("context")}}function f(e,n){if(!t)throw chunkPPNEAFKE_cjs.b("AK0010");t.values.set(e.id,n);}function d(e,n){if(!t)throw chunkPPNEAFKE_cjs.b("AK0012");let o=t;for(;o;){if(o.values.has(e.id))return o.values.get(e.id);o=o.parent;}if(n!==void 0)return n;if(e.defaultValue!==void 0)return e.defaultValue;throw chunkPPNEAFKE_cjs.b("AK0013")}exports.a=i;exports.b=p;exports.c=l;exports.d=a;exports.e=T;exports.f=f;exports.g=d;//# sourceMappingURL=chunk-IQGSDFBI.cjs.map
2
+ //# sourceMappingURL=chunk-IQGSDFBI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context.ts"],"names":["CONTEXT_BRAND","currentScope","pushScope","parent","scope","popScope","getCurrentScope","runInScope","fn","prev","createContext","defaultValue","provide","key","value","akashError","inject","fallback"],"mappings":"mEAWA,IAAMA,CAAAA,CAAgB,MAAA,CAAO,eAAe,CAAA,CAgBxCC,EAAoC,IAAA,CAGjC,SAASC,CAAAA,CAAUC,CAAAA,CAA8BF,EAA4B,CAClF,IAAMG,CAAAA,CAAsB,CAAE,OAAQ,IAAI,GAAA,CAAO,MAAA,CAAAD,CAAO,CAAA,CACxD,OAAAF,CAAAA,CAAeG,CAAAA,CACRA,CACT,CAGO,SAASC,CAAAA,CAASD,CAAAA,CAA2B,CAClDH,CAAAA,CAAeG,CAAAA,CAAM,OACvB,CAGO,SAASE,CAAAA,EAAuC,CACrD,OAAOL,CACT,CAOO,SAASM,CAAAA,CAAcH,CAAAA,CAAqBI,EAAgB,CACjE,IAAMC,CAAAA,CAAOR,CAAAA,CACbA,EAAeG,CAAAA,CACf,GAAI,CACF,OAAOI,GACT,CAAA,OAAE,CACAP,CAAAA,CAAeQ,EACjB,CACF,CAWO,SAASC,CAAAA,CAAiBC,EAAmC,CAClE,OAAO,CACL,CAACX,CAAa,EAAG,IAAA,CACjB,KAAA,CAAO,MAAA,CACP,aAAAW,CAAAA,CACA,EAAA,CAAI,MAAA,CAAO,SAAS,CACtB,CACF,CAQO,SAASC,EAAWC,CAAAA,CAAsBC,CAAAA,CAAgB,CAC/D,GAAI,CAACb,CAAAA,CACH,MAAMc,mBAAAA,CAAW,QAAQ,EAE3Bd,CAAAA,CAAa,MAAA,CAAO,GAAA,CAAIY,CAAAA,CAAI,GAAIC,CAAK,EACvC,CASO,SAASE,EAAUH,CAAAA,CAAsBI,CAAAA,CAAiB,CAC/D,GAAI,CAAChB,CAAAA,CACH,MAAMc,mBAAAA,CAAW,QAAQ,EAI3B,IAAIX,CAAAA,CAA6BH,CAAAA,CACjC,KAAOG,CAAAA,EAAO,CACZ,GAAIA,CAAAA,CAAM,OAAO,GAAA,CAAIS,CAAAA,CAAI,EAAE,CAAA,CACzB,OAAOT,CAAAA,CAAM,MAAA,CAAO,GAAA,CAAIS,CAAAA,CAAI,EAAE,CAAA,CAEhCT,CAAAA,CAAQA,CAAAA,CAAM,OAChB,CAGA,GAAIa,CAAAA,GAAa,MAAA,CAAW,OAAOA,EACnC,GAAIJ,CAAAA,CAAI,YAAA,GAAiB,MAAA,CAAW,OAAOA,CAAAA,CAAI,YAAA,CAE/C,MAAME,mBAAAA,CAAW,QAAQ,CAC3B","file":"chunk-IQGSDFBI.cjs","sourcesContent":["/**\n * Lightweight dependency injection via provide/inject.\n *\n * Context is scoped to the component tree — no injector hierarchy,\n * no decorators, no classes. Just createContext(), provide(), inject().\n */\n\n// --- Types ---\n\nimport { akashError } from './errors.js';\n\nconst CONTEXT_BRAND = Symbol('akash.context');\n\nexport interface InjectionKey<T> {\n readonly [CONTEXT_BRAND]: true;\n readonly _type: T; // phantom type — never used at runtime\n readonly defaultValue: T | undefined;\n readonly id: symbol;\n}\n\n// --- Context stack (managed by component system) ---\n\ninterface ContextScope {\n values: Map<symbol, unknown>;\n parent: ContextScope | null;\n}\n\nlet currentScope: ContextScope | null = null;\n\n/** @internal — called by defineComponent to push/pop context scopes */\nexport function pushScope(parent: ContextScope | null = currentScope): ContextScope {\n const scope: ContextScope = { values: new Map(), parent };\n currentScope = scope;\n return scope;\n}\n\n/** @internal */\nexport function popScope(scope: ContextScope): void {\n currentScope = scope.parent;\n}\n\n/** @internal */\nexport function getCurrentScope(): ContextScope | null {\n return currentScope;\n}\n\n/**\n * Run a function within a given scope so that provide/inject\n * work correctly for components created asynchronously\n * (e.g., lazy-loaded route components).\n */\nexport function runInScope<T>(scope: ContextScope, fn: () => T): T {\n const prev = currentScope;\n currentScope = scope;\n try {\n return fn();\n } finally {\n currentScope = prev;\n }\n}\n\n// --- Public API ---\n\n/**\n * Create a typed context key with an optional default value.\n *\n * ```ts\n * const ThemeContext = createContext<'light' | 'dark'>('light');\n * ```\n */\nexport function createContext<T>(defaultValue?: T): InjectionKey<T> {\n return {\n [CONTEXT_BRAND]: true,\n _type: undefined as T,\n defaultValue,\n id: Symbol('context'),\n };\n}\n\n/**\n * Provide a value for a context key in the current component scope.\n * All descendant components can inject() this value.\n *\n * Must be called inside defineComponent() setup.\n */\nexport function provide<T>(key: InjectionKey<T>, value: T): void {\n if (!currentScope) {\n throw akashError('AK0010');\n }\n currentScope.values.set(key.id, value);\n}\n\n/**\n * Inject a value from the nearest ancestor that provided it.\n *\n * Must be called inside defineComponent() setup.\n */\nexport function inject<T>(key: InjectionKey<T>): T;\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T;\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T {\n if (!currentScope) {\n throw akashError('AK0012');\n }\n\n // Walk up the scope chain\n let scope: ContextScope | null = currentScope;\n while (scope) {\n if (scope.values.has(key.id)) {\n return scope.values.get(key.id) as T;\n }\n scope = scope.parent;\n }\n\n // Check fallback, then default\n if (fallback !== undefined) return fallback;\n if (key.defaultValue !== undefined) return key.defaultValue;\n\n throw akashError('AK0013');\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkWOZWFMOK_cjs=require('./chunk-WOZWFMOK.cjs');var v=0;function h(u={}){let{maxVisible:T=5,defaultDuration:l=3e3,position:f="top-right"}=u,i=chunkWOZWFMOK_cjs.c([]),e=new Map;function o(t,s,n){let r=`toast-${++v}`,p=n?.duration??l,y=n?.dismissible??true,x={id:r,type:t,message:s,duration:p,dismissible:y,createdAt:Date.now()};if(i.update(g=>{let d=[...g,x];if(d.length>T){let O=d.shift();a(O.id);}return d}),p>0){let g=setTimeout(()=>c(r),p);e.set(r,g);}return r}function c(t){a(t),i.update(s=>s.filter(n=>n.id!==t));}function b(){for(let[t]of e)a(t);i.set([]);}function a(t){let s=e.get(t);s&&(clearTimeout(s),e.delete(t));}return {toasts:(()=>i()),position:f,success:(t,s)=>o("success",t,s),error:(t,s)=>o("error",t,s),info:(t,s)=>o("info",t,s),warning:(t,s)=>o("warning",t,s),add:o,dismiss:c,dismissAll:b}}exports.a=h;//# sourceMappingURL=chunk-J6KDUWX6.cjs.map
2
+ //# sourceMappingURL=chunk-J6KDUWX6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/toast.ts"],"names":["idCounter","createToaster","options","maxVisible","defaultDuration","position","toasts","signal","timers","add","type","message","opts","id","duration","dismissible","toast","list","next","removed","clearTimer","timer","dismiss","t","dismissAll","msg"],"mappings":"mEAyEA,IAAIA,CAAAA,CAAY,CAAA,CAKT,SAASC,CAAAA,CAAcC,CAAAA,CAA0B,EAAC,CAAY,CACnE,GAAM,CACJ,UAAA,CAAAC,CAAAA,CAAa,EACb,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,QAAA,CAAAC,CAAAA,CAAW,WACb,EAAIH,CAAAA,CAEEI,CAAAA,CAASC,mBAAAA,CAAgB,EAAE,CAAA,CAC3BC,EAAS,IAAI,GAAA,CAEnB,SAASC,CAAAA,CAAIC,CAAAA,CAAiBC,CAAAA,CAAiBC,EAA6B,CAC1E,IAAMC,CAAAA,CAAK,CAAA,MAAA,EAAS,EAAEb,CAAS,GACzBc,CAAAA,CAAWF,CAAAA,EAAM,QAAA,EAAYR,CAAAA,CAC7BW,CAAAA,CAAcH,CAAAA,EAAM,aAAe,IAAA,CAEnCI,CAAAA,CAAe,CACnB,EAAA,CAAAH,CAAAA,CACA,IAAA,CAAAH,EACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAG,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,UAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAaA,GAXAT,CAAAA,CAAO,OAAQW,CAAAA,EAAS,CACtB,IAAMC,CAAAA,CAAO,CAAC,GAAGD,EAAMD,CAAK,CAAA,CAE5B,GAAIE,CAAAA,CAAK,MAAA,CAASf,CAAAA,CAAY,CAC5B,IAAMgB,CAAAA,CAAUD,CAAAA,CAAK,KAAA,EAAM,CAC3BE,CAAAA,CAAWD,EAAQ,EAAE,EACvB,CACA,OAAOD,CACT,CAAC,EAGGJ,CAAAA,CAAW,CAAA,CAAG,CAChB,IAAMO,CAAAA,CAAQ,UAAA,CAAW,IAAMC,CAAAA,CAAQT,CAAE,CAAA,CAAGC,CAAQ,CAAA,CACpDN,CAAAA,CAAO,GAAA,CAAIK,EAAIQ,CAAK,EACtB,CAEA,OAAOR,CACT,CAEA,SAASS,CAAAA,CAAQT,CAAAA,CAAkB,CACjCO,CAAAA,CAAWP,CAAE,CAAA,CACbP,EAAO,MAAA,CAAQW,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAQM,CAAAA,EAAMA,CAAAA,CAAE,KAAOV,CAAE,CAAC,EACzD,CAEA,SAASW,CAAAA,EAAmB,CAC1B,IAAA,GAAW,CAACX,CAAE,CAAA,GAAKL,CAAAA,CACjBY,CAAAA,CAAWP,CAAE,CAAA,CAEfP,CAAAA,CAAO,GAAA,CAAI,EAAE,EACf,CAEA,SAASc,CAAAA,CAAWP,CAAAA,CAAkB,CACpC,IAAMQ,CAAAA,CAAQb,CAAAA,CAAO,GAAA,CAAIK,CAAE,CAAA,CACvBQ,CAAAA,GACF,YAAA,CAAaA,CAAK,CAAA,CAClBb,EAAO,MAAA,CAAOK,CAAE,CAAA,EAEpB,CAEA,OAAO,CACL,QAAS,IAAMP,CAAAA,EAAO,CAAA,CACtB,QAAA,CAAAD,CAAAA,CACA,OAAA,CAAS,CAACoB,CAAAA,CAAKb,CAAAA,GAASH,CAAAA,CAAI,SAAA,CAAWgB,CAAAA,CAAKb,CAAI,EAChD,KAAA,CAAO,CAACa,CAAAA,CAAKb,CAAAA,GAASH,CAAAA,CAAI,OAAA,CAASgB,EAAKb,CAAI,CAAA,CAC5C,IAAA,CAAM,CAACa,CAAAA,CAAKb,CAAAA,GAASH,EAAI,MAAA,CAAQgB,CAAAA,CAAKb,CAAI,CAAA,CAC1C,OAAA,CAAS,CAACa,EAAKb,CAAAA,GAASH,CAAAA,CAAI,SAAA,CAAWgB,CAAAA,CAAKb,CAAI,CAAA,CAChD,GAAA,CAAAH,CAAAA,CACA,OAAA,CAAAa,CAAAA,CACA,UAAA,CAAAE,CACF,CACF","file":"chunk-J6KDUWX6.cjs","sourcesContent":["/**\n * Toast notification system.\n *\n * Signal-based toast queue with auto-dismiss, stacking, and positions.\n *\n * ```ts\n * const toast = createToaster();\n * toast.success('Saved!');\n * toast.error('Something went wrong');\n * toast.info('Tip: try dark mode', { duration: 5000 });\n * toast.toasts(); // reactive list of active toasts\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\nexport type ToastPosition =\n | 'top-right' | 'top-left' | 'top-center'\n | 'bottom-right' | 'bottom-left' | 'bottom-center';\n\nexport interface Toast {\n id: string;\n type: ToastType;\n message: string;\n duration: number;\n dismissible: boolean;\n createdAt: number;\n}\n\nexport interface ToastOptions {\n /** Duration in ms (default: 3000, 0 = no auto-dismiss) */\n duration?: number;\n /** Whether the toast can be manually dismissed (default: true) */\n dismissible?: boolean;\n}\n\nexport interface ToasterOptions {\n /** Max visible toasts (default: 5) */\n maxVisible?: number;\n /** Default duration in ms (default: 3000) */\n defaultDuration?: number;\n /** Position (default: 'top-right') */\n position?: ToastPosition;\n}\n\nexport interface Toaster {\n /** Active toasts (reactive signal) */\n toasts: ReadonlySignal<Toast[]>;\n /** Position setting */\n position: ToastPosition;\n /** Show a success toast */\n success(message: string, options?: ToastOptions): string;\n /** Show an error toast */\n error(message: string, options?: ToastOptions): string;\n /** Show an info toast */\n info(message: string, options?: ToastOptions): string;\n /** Show a warning toast */\n warning(message: string, options?: ToastOptions): string;\n /** Show a toast with custom type */\n add(type: ToastType, message: string, options?: ToastOptions): string;\n /** Dismiss a specific toast */\n dismiss(id: string): void;\n /** Dismiss all toasts */\n dismissAll(): void;\n}\n\n// --- Implementation ---\n\nlet idCounter = 0;\n\n/**\n * Create a toast notification manager.\n */\nexport function createToaster(options: ToasterOptions = {}): Toaster {\n const {\n maxVisible = 5,\n defaultDuration = 3000,\n position = 'top-right',\n } = options;\n\n const toasts = signal<Toast[]>([]);\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function add(type: ToastType, message: string, opts?: ToastOptions): string {\n const id = `toast-${++idCounter}`;\n const duration = opts?.duration ?? defaultDuration;\n const dismissible = opts?.dismissible ?? true;\n\n const toast: Toast = {\n id,\n type,\n message,\n duration,\n dismissible,\n createdAt: Date.now(),\n };\n\n toasts.update((list) => {\n const next = [...list, toast];\n // Trim to maxVisible\n if (next.length > maxVisible) {\n const removed = next.shift()!;\n clearTimer(removed.id);\n }\n return next;\n });\n\n // Auto-dismiss\n if (duration > 0) {\n const timer = setTimeout(() => dismiss(id), duration);\n timers.set(id, timer);\n }\n\n return id;\n }\n\n function dismiss(id: string): void {\n clearTimer(id);\n toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n function dismissAll(): void {\n for (const [id] of timers) {\n clearTimer(id);\n }\n toasts.set([]);\n }\n\n function clearTimer(id: string): void {\n const timer = timers.get(id);\n if (timer) {\n clearTimeout(timer);\n timers.delete(id);\n }\n }\n\n return {\n toasts: (() => toasts()) as ReadonlySignal<Toast[]>,\n position,\n success: (msg, opts) => add('success', msg, opts),\n error: (msg, opts) => add('error', msg, opts),\n info: (msg, opts) => add('info', msg, opts),\n warning: (msg, opts) => add('warning', msg, opts),\n add,\n dismiss,\n dismissAll,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkXWVNLE2W_cjs=require('./chunk-XWVNLE2W.cjs'),chunkWOZWFMOK_cjs=require('./chunk-WOZWFMOK.cjs');var f=chunkXWVNLE2W_cjs.s(n=>{let o=chunkWOZWFMOK_cjs.c(null);chunkXWVNLE2W_cjs.q(r=>{o.set(r);});function l(){o.set(null);}return ()=>{let r=o();return r?chunkXWVNLE2W_cjs.l(n.props.fallback(r,l)):chunkXWVNLE2W_cjs.l(n.children())}});exports.a=f;//# sourceMappingURL=chunk-JD3LDHUI.cjs.map
2
+ //# sourceMappingURL=chunk-JD3LDHUI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error-boundary.ts"],"names":["ErrorBoundary","defineComponent","ctx","error","signal","onError","err","retry","currentError","nodeToDOM"],"mappings":"qHA8BO,IAAMA,CAAAA,CAAgBC,oBAAqCC,CAAAA,EAAQ,CACxE,IAAMC,CAAAA,CAAQC,mBAAAA,CAAqB,IAAI,CAAA,CAEvCC,mBAAAA,CAASC,CAAAA,EAAQ,CACfH,CAAAA,CAAM,GAAA,CAAIG,CAAG,EACf,CAAC,EAED,SAASC,CAAAA,EAAQ,CACfJ,CAAAA,CAAM,GAAA,CAAI,IAAI,EAChB,CAEA,OAAO,IAAM,CACX,IAAMK,EAAeL,CAAAA,EAAM,CAE3B,OAAIK,CAAAA,CACKC,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,QAAA,CAASM,CAAAA,CAAcD,CAAK,CAAC,CAAA,CAGnDE,mBAAAA,CAAUP,EAAI,QAAA,EAAU,CACjC,CACF,CAAC","file":"chunk-JD3LDHUI.cjs","sourcesContent":["/**\n * ErrorBoundary component.\n *\n * Declarative error handling — catches errors from child components\n * and renders a fallback UI.\n *\n * ```html\n * <ErrorBoundary fallback={(err) => <p>Error: {err.message}</p>}>\n * <RiskyComponent />\n * </ErrorBoundary>\n * ```\n */\n\nimport { defineComponent, onError } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface ErrorBoundaryProps {\n /** Render function called when an error is caught */\n fallback: (error: Error, retry: () => void) => AkashNode;\n}\n\n/**\n * ErrorBoundary component.\n *\n * Catches errors from descendant components and renders a fallback.\n * The fallback receives the error and a `retry` function that re-renders\n * the children.\n */\nexport const ErrorBoundary = defineComponent<ErrorBoundaryProps>((ctx) => {\n const error = signal<Error | null>(null);\n\n onError((err) => {\n error.set(err);\n });\n\n function retry() {\n error.set(null);\n }\n\n return () => {\n const currentError = error();\n\n if (currentError) {\n return nodeToDOM(ctx.props.fallback(currentError, retry));\n }\n\n return nodeToDOM(ctx.children());\n };\n});\n"]}
@@ -0,0 +1,2 @@
1
+ var r=false,t=null;function m(){return r}function c(e){let{container:n,component:o,props:i={}}=e;r=true,t=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);try{o(i);}finally{r=false,t=null;}return ()=>{}}function y(e){if(!r||!t)return null;let n=t.nextNode();for(;n;){if(n instanceof HTMLElement&&n.tagName.toLowerCase()===e.toLowerCase())return n;n=t.nextNode();}return null}function H(){if(!r||!t)return null;let e=t.nextNode();for(;e;){if(e instanceof Text)return e;e=t.nextNode();}return null}function T(e){let{target:n,component:o,props:i,rootMargin:p="200px"}=e;if(typeof IntersectionObserver>"u")return c({container:n,component:o,props:i});let s=false,l=new IntersectionObserver(d=>{for(let u of d)u.isIntersecting&&!s&&(l.disconnect(),c({container:n,component:o,props:i}));},{rootMargin:p});return l.observe(n),()=>{s=true,l.disconnect();}}var f="data-akash-hydrate";function x(e=document.body){return Array.from(e.querySelectorAll(`[${f}]`))}export{m as a,c as b,y as c,H as d,T as e,f,x as g};//# sourceMappingURL=chunk-JEYTB4AG.js.map
2
+ //# sourceMappingURL=chunk-JEYTB4AG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hydration.ts"],"names":["isHydrating","hydrateWalker","isHydrationActive","hydrate","options","container","component","props","claimElement","tag","node","claimText","progressiveHydrate","target","rootMargin","disposed","observer","entries","entry","HYDRATE_ATTR","findHydrationBoundaries","root"],"mappings":"AAiBA,IAAIA,CAAAA,CAAc,KAAA,CAEdC,CAAAA,CAAmC,KAGhC,SAASC,CAAAA,EAA6B,CAC3C,OAAOF,CACT,CA8BO,SAASG,CAAAA,CAAQC,CAAAA,CAAqC,CAC3D,GAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAQ,EAAG,CAAA,CAAIH,EAE7CJ,CAAAA,CAAc,IAAA,CAIdC,CAAAA,CAAgB,QAAA,CAAS,iBACvBI,CAAAA,CACA,UAAA,CAAW,YAAA,CAAe,UAAA,CAAW,SACvC,CAAA,CAEA,GAAI,CAGFC,CAAAA,CAAUC,CAAY,EACxB,CAAA,OAAE,CACAP,CAAAA,CAAc,KAAA,CAEdC,CAAAA,CAAgB,KAClB,CAEA,OAAO,IAAM,CAEb,CACF,CAMO,SAASO,CAAAA,CAAaC,CAAAA,CAAiC,CAC5D,GAAI,CAACT,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,KAE3C,IAAIS,CAAAA,CAAOT,CAAAA,CAAc,QAAA,EAAS,CAClC,KAAOS,CAAAA,EAAM,CACX,GACEA,CAAAA,YAAgB,WAAA,EAChBA,CAAAA,CAAK,OAAA,CAAQ,WAAA,KAAkBD,CAAAA,CAAI,WAAA,EAAY,CAE/C,OAAOC,CAAAA,CAETA,CAAAA,CAAOT,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CAKO,SAASU,CAAAA,EAAyB,CACvC,GAAI,CAACX,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,IAAA,CAE3C,IAAIS,CAAAA,CAAOT,CAAAA,CAAc,QAAA,EAAS,CAClC,KAAOS,CAAAA,EAAM,CACX,GAAIA,CAAAA,YAAgB,IAAA,CAClB,OAAOA,EAETA,CAAAA,CAAOT,CAAAA,CAAc,QAAA,GACvB,CAEA,OAAO,IACT,CA6BO,SAASW,CAAAA,CAAmBR,CAAAA,CAAgD,CACjF,GAAM,CAAE,MAAA,CAAAS,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAO,EAAa,OAAQ,CAAA,CAAIV,CAAAA,CAE3D,GAAI,OAAO,oBAAA,CAAyB,IAElC,OAAOD,CAAAA,CAAQ,CAAE,SAAA,CAAWU,CAAAA,CAAQ,SAAA,CAAAP,EAAW,KAAA,CAAAC,CAAM,CAAC,CAAA,CAGxD,IAAIQ,CAAAA,CAAW,KAAA,CAETC,CAAAA,CAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACX,IAAA,IAAWC,CAAAA,IAASD,EACdC,CAAAA,CAAM,cAAA,EAAkB,CAACH,CAAAA,GAC3BC,CAAAA,CAAS,UAAA,GACTb,CAAAA,CAAQ,CAAE,SAAA,CAAWU,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,MAAAC,CAAM,CAAC,CAAA,EAGrD,CAAA,CACA,CAAE,UAAA,CAAAO,CAAW,CACf,CAAA,CAEA,OAAAE,CAAAA,CAAS,OAAA,CAAQH,CAAM,CAAA,CAEhB,IAAM,CACXE,CAAAA,CAAW,IAAA,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,CAKO,IAAMG,CAAAA,CAAe,qBAKrB,SAASC,CAAAA,CACdC,EAAoB,QAAA,CAAS,IAAA,CACd,CACf,OAAO,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAK,gBAAA,CAA8B,CAAA,CAAA,EAAIF,CAAY,CAAA,CAAA,CAAG,CAAC,CAC3E","file":"chunk-JEYTB4AG.js","sourcesContent":["/**\n * Client-side hydration.\n *\n * After SSR delivers HTML, the client needs to \"hydrate\" —\n * walk the existing DOM, attach signal effects, and make it interactive.\n * No new DOM nodes are created during hydration.\n *\n * Supports progressive hydration via IntersectionObserver:\n * components hydrate lazily when they enter the viewport.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Hydration state ---\n\nlet isHydrating = false;\nlet hydrateRoot: Node | null = null;\nlet hydrateWalker: TreeWalker | null = null;\n\n/** Check if we're currently hydrating (vs. fresh rendering) */\nexport function isHydrationActive(): boolean {\n return isHydrating;\n}\n\n// --- Hydration context ---\n\nexport interface HydrateOptions {\n /** The root DOM element (rendered by SSR) */\n container: HTMLElement;\n /** The root component to hydrate */\n component: Component<any>;\n /** Props to pass to the root component */\n props?: Record<string, unknown>;\n}\n\n/**\n * Hydrate a server-rendered DOM tree.\n *\n * Walks the existing DOM instead of creating new nodes,\n * attaching signal effects to existing elements.\n *\n * ```ts\n * import { hydrate } from '@akashjs/runtime';\n * import App from './App.akash';\n *\n * hydrate({\n * container: document.getElementById('app')!,\n * component: App,\n * props: { title: 'Home' },\n * });\n * ```\n */\nexport function hydrate(options: HydrateOptions): () => void {\n const { container, component, props = {} } = options;\n\n isHydrating = true;\n hydrateRoot = container;\n\n // Create a tree walker to traverse the existing DOM\n hydrateWalker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n );\n\n try {\n // Run the component — during hydration, DOM creation helpers\n // will claim existing nodes instead of creating new ones\n component(props as any);\n } finally {\n isHydrating = false;\n hydrateRoot = null;\n hydrateWalker = null;\n }\n\n return () => {\n // Cleanup — dispose all hydration effects\n };\n}\n\n/**\n * Claim the next DOM node during hydration.\n * Instead of creating a new element, returns the existing one.\n */\nexport function claimElement(tag: string): HTMLElement | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === tag.toLowerCase()\n ) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n/**\n * Claim the next text node during hydration.\n */\nexport function claimText(): Text | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (node instanceof Text) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n// --- Progressive hydration ---\n\nexport interface ProgressiveHydrateOptions {\n /** CSS selector or element to observe */\n target: HTMLElement;\n /** Component to hydrate when visible */\n component: Component<any>;\n /** Props */\n props?: Record<string, unknown>;\n /** IntersectionObserver root margin (default: '200px') */\n rootMargin?: string;\n}\n\n/**\n * Hydrate a component lazily when it enters the viewport.\n *\n * Uses IntersectionObserver to detect when the SSR placeholder\n * becomes visible, then runs full hydration.\n *\n * ```ts\n * progressiveHydrate({\n * target: document.querySelector('[data-hydrate=\"comments\"]')!,\n * component: Comments,\n * props: { postId: 123 },\n * });\n * ```\n */\nexport function progressiveHydrate(options: ProgressiveHydrateOptions): () => void {\n const { target, component, props, rootMargin = '200px' } = options;\n\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: hydrate immediately if IO is not available\n return hydrate({ container: target, component, props });\n }\n\n let disposed = false;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !disposed) {\n observer.disconnect();\n hydrate({ container: target, component, props });\n }\n }\n },\n { rootMargin },\n );\n\n observer.observe(target);\n\n return () => {\n disposed = true;\n observer.disconnect();\n };\n}\n\n// --- Hydrate boundary marker ---\n\n/** Data attribute used to mark hydration boundaries in SSR HTML */\nexport const HYDRATE_ATTR = 'data-akash-hydrate';\n\n/**\n * Find all hydration boundaries in the document.\n */\nexport function findHydrationBoundaries(\n root: HTMLElement = document.body,\n): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(`[${HYDRATE_ATTR}]`));\n}\n"]}
@@ -0,0 +1,2 @@
1
+ function E(a,c={}){let{duration:f=300,easing:u="cubic-bezier(0.2, 0, 0, 1)",delay:P=0,selector:d,keyAttribute:A="data-key",onComplete:p}=c,r=new Map;function h(){return Array.from(d?a.querySelectorAll(d):a.children)}function m(t){return t.getAttribute(A)??t.id??""}function g(){r=new Map;for(let t of h()){let e=m(t);if(e){let i=t.getBoundingClientRect();r.set(e,{left:i.left,top:i.top,width:i.width,height:i.height});}}}function b(){let t=h(),e=[];for(let n of t){let o=m(n),s=r.get(o);if(!s)continue;let l=n.getBoundingClientRect(),y=s.left-l.left,w=s.top-l.top,M=s.width/(l.width||1),v=s.height/(l.height||1);if(Math.abs(y)<.5&&Math.abs(w)<.5&&Math.abs(M-1)<.01&&Math.abs(v-1)<.01)continue;let x=n.animate([{transform:`translate(${y}px, ${w}px) scale(${M}, ${v})`},{transform:"translate(0, 0) scale(1, 1)"}],{duration:f,easing:u,delay:P,fill:"both"});e.push(x);}let i=new Set(t.map(m));for(let[n,o]of r)i.has(n);return r.clear(),new Promise(n=>{if(e.length===0){p?.(),n();return}Promise.all(e.map(o=>o.finished)).then(()=>{for(let o of e)o.cancel();p?.(),n();});})}return {measure:g,animate:b,async flip(t){return g(),t(),await new Promise(e=>requestAnimationFrame(e)),b()}}}async function F(a,c,f){return E(a,f).flip(c)}export{E as a,F as b};//# sourceMappingURL=chunk-JFLZJPVN.js.map
2
+ //# sourceMappingURL=chunk-JFLZJPVN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/flip.ts"],"names":["createFlip","container","options","duration","easing","delay","selector","keyAttribute","onComplete","firstPositions","getElements","getKey","el","measure","key","rect","animate","elements","animations","first","last","dx","dy","dw","dh","animation","currentKeys","resolve","a","update","r","flip"],"mappings":"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","file":"chunk-JFLZJPVN.js","sourcesContent":["/**\n * FLIP animations for list reordering.\n *\n * First-Last-Invert-Play: measure element positions before and after\n * a DOM change, then animate from old to new positions.\n *\n * ```ts\n * const flip = createFlip(listContainer, {\n * duration: 300,\n * easing: 'cubic-bezier(0.2, 0, 0, 1)',\n * });\n *\n * // Before changing the list:\n * flip.measure();\n * // Change the DOM (reorder, add, remove)\n * items.set(newOrder);\n * // Animate:\n * flip.animate();\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface FlipOptions {\n /** Animation duration in ms (default: 300) */\n duration?: number;\n /** CSS easing (default: 'cubic-bezier(0.2, 0, 0, 1)') */\n easing?: string;\n /** Delay in ms */\n delay?: number;\n /** Only animate elements matching this selector */\n selector?: string;\n /** Key attribute to track elements across reorders (default: 'data-key') */\n keyAttribute?: string;\n /** Callback when animation completes */\n onComplete?: () => void;\n}\n\nexport interface FlipController {\n /** Measure current positions (call BEFORE DOM change) */\n measure(): void;\n /** Animate from measured positions to current (call AFTER DOM change) */\n animate(): Promise<void>;\n /** Measure and animate in one step using a callback */\n flip(update: () => void): Promise<void>;\n}\n\ninterface Rect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n// =========================================================================\n// createFlip\n// =========================================================================\n\n/**\n * Create a FLIP animation controller for a container.\n *\n * ```ts\n * const flip = createFlip(container);\n * flip.flip(() => {\n * // reorder DOM elements here\n * container.appendChild(container.firstChild); // move first to last\n * });\n * ```\n */\nexport function createFlip(\n container: HTMLElement,\n options: FlipOptions = {},\n): FlipController {\n const {\n duration = 300,\n easing = 'cubic-bezier(0.2, 0, 0, 1)',\n delay = 0,\n selector,\n keyAttribute = 'data-key',\n onComplete,\n } = options;\n\n let firstPositions = new Map<string, Rect>();\n\n function getElements(): HTMLElement[] {\n if (selector) {\n return Array.from(container.querySelectorAll<HTMLElement>(selector));\n }\n return Array.from(container.children) as HTMLElement[];\n }\n\n function getKey(el: HTMLElement): string {\n return el.getAttribute(keyAttribute) ?? el.id ?? '';\n }\n\n function measure(): void {\n firstPositions = new Map();\n for (const el of getElements()) {\n const key = getKey(el);\n if (key) {\n const rect = el.getBoundingClientRect();\n firstPositions.set(key, {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n }\n }\n }\n\n function animate(): Promise<void> {\n const elements = getElements();\n const animations: Animation[] = [];\n\n for (const el of elements) {\n const key = getKey(el);\n const first = firstPositions.get(key);\n if (!first) continue; // New element — could add enter animation\n\n const last = el.getBoundingClientRect();\n\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const dw = first.width / (last.width || 1);\n const dh = first.height / (last.height || 1);\n\n // Skip if no movement\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5 && Math.abs(dw - 1) < 0.01 && Math.abs(dh - 1) < 0.01) {\n continue;\n }\n\n const animation = el.animate(\n [\n {\n transform: `translate(${dx}px, ${dy}px) scale(${dw}, ${dh})`,\n },\n {\n transform: 'translate(0, 0) scale(1, 1)',\n },\n ],\n {\n duration,\n easing,\n delay,\n fill: 'both',\n },\n );\n\n animations.push(animation);\n }\n\n // Detect removed elements (in first but not in last)\n const currentKeys = new Set(elements.map(getKey));\n for (const [key, rect] of firstPositions) {\n if (!currentKeys.has(key)) {\n // Element was removed — could add exit animation placeholder\n }\n }\n\n firstPositions.clear();\n\n return new Promise<void>((resolve) => {\n if (animations.length === 0) {\n onComplete?.();\n resolve();\n return;\n }\n\n Promise.all(animations.map((a) => a.finished)).then(() => {\n // Clean up fill\n for (const a of animations) {\n a.cancel();\n }\n onComplete?.();\n resolve();\n });\n });\n }\n\n return {\n measure,\n animate,\n async flip(update: () => void): Promise<void> {\n measure();\n update();\n // Wait one frame for DOM to update\n await new Promise((r) => requestAnimationFrame(r));\n return animate();\n },\n };\n}\n\n/**\n * One-shot FLIP animation helper.\n *\n * ```ts\n * await flip(container, () => {\n * // reorder items\n * }, { duration: 300 });\n * ```\n */\nexport async function flip(\n container: HTMLElement,\n update: () => void,\n options?: FlipOptions,\n): Promise<void> {\n const ctrl = createFlip(container, options);\n return ctrl.flip(update);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ var I=0;function g(e){return {_type:"provider",factory:e.factory,providedIn:e.providedIn,multi:e.multi,_id:Symbol(`provider-${++I}`)}}var i=new Map;function y(e=[],r){let s=new Map,u=new Map,a=new Map;for(let t of e)a.set(t.provide._id,t);let d={get(t){let n=t._id;if(t.multi){if(u.has(n))return u.get(n);let o=[],c=a.get(n);if(c?.useFactory?o.push(c.useFactory()):c?.useValue!==void 0&&o.push(c.useValue),r?.has(t)){let v=r.get(t);Array.isArray(v)&&o.push(...v);}return u.set(n,o),o}if(s.has(n))return s.get(n);if(t.providedIn==="root"&&i.has(n))return i.get(n);let T=a.get(n);if(T){let o=p(T,d);return s.set(n,o),o}if(r)return r.get(t);let l=t.factory();return t.providedIn==="root"?i.set(n,l):s.set(n,l),l},has(t){return s.has(t._id)||a.has(t._id)||t.providedIn==="root"&&i.has(t._id)?true:r?r.has(t):false},createChild(t){return y(t??[],d)},dispose(){s.clear(),u.clear();}};return d}function p(e,r){return e.useValue!==void 0?e.useValue:e.useFactory?e.useFactory():e.useExisting?r.get(e.useExisting):e.provide.factory()}var f=null;function P(e){let r=f;return f=e,r}function m(e){if(!f){if(e.providedIn==="root"){if(i.has(e._id))return i.get(e._id);let r=e.factory();return i.set(e._id,r),r}return e.factory()}return f.get(e)}function h(){i.clear();}export{g as a,y as b,P as c,m as d,h as e};//# sourceMappingURL=chunk-JLPJ22CE.js.map
2
+ //# sourceMappingURL=chunk-JLPJ22CE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/di.ts"],"names":["providerIdCounter","defineProvider","config","rootInstances","createInjector","providers","parent","instances","multiInstances","registrations","reg","injector","provider","id","values","parentValues","instance","resolveRegistration","childProviders","currentInjector","setCurrentInjector","prev","injectProvider","clearProviders"],"mappings":"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","file":"chunk-JLPJ22CE.js","sourcesContent":["/**\n * Hierarchical Dependency Injection.\n *\n * Extends the basic provide/inject with multi-level injectors,\n * provider factories, tree-shakable providers, and multi-providers.\n *\n * ```ts\n * // Define a provider with factory\n * const ApiService = defineProvider({\n * factory: () => createHttpClient({ baseUrl: '/api' }),\n * });\n *\n * // Tree-shakable provider (only bundled if injected)\n * const Logger = defineProvider({\n * factory: () => new ConsoleLogger(),\n * providedIn: 'root',\n * });\n *\n * // Use in component\n * const api = injectProvider(ApiService);\n * ```\n */\n\nimport { signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ProviderDef<T> {\n _type: 'provider';\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n _id: symbol;\n}\n\nexport interface Injector {\n /** Get a provider value */\n get<T>(provider: ProviderDef<T>): T;\n /** Check if a provider is registered */\n has(provider: ProviderDef<unknown>): boolean;\n /** Create a child injector */\n createChild(providers?: ProviderRegistration[]): Injector;\n /** Dispose this injector and all cached instances */\n dispose(): void;\n}\n\nexport interface ProviderRegistration<T = unknown> {\n provide: ProviderDef<T>;\n useFactory?: () => T;\n useValue?: T;\n useExisting?: ProviderDef<T>;\n multi?: boolean;\n}\n\n// =========================================================================\n// defineProvider\n// =========================================================================\n\nlet providerIdCounter = 0;\n\n/**\n * Define a typed provider.\n *\n * ```ts\n * const DatabaseService = defineProvider({\n * factory: () => new Database(config),\n * providedIn: 'root', // singleton, tree-shakable\n * });\n * ```\n */\nexport function defineProvider<T>(config: {\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n}): ProviderDef<T> {\n return {\n _type: 'provider',\n factory: config.factory,\n providedIn: config.providedIn,\n multi: config.multi,\n _id: Symbol(`provider-${++providerIdCounter}`),\n };\n}\n\n// =========================================================================\n// Injector implementation\n// =========================================================================\n\nconst rootInstances = new Map<symbol, unknown>();\n\n/**\n * Create an injector with hierarchical resolution.\n *\n * ```ts\n * const injector = createInjector([\n * { provide: ApiService, useFactory: () => new MockApi() },\n * { provide: Logger, useValue: console },\n * ]);\n *\n * const api = injector.get(ApiService);\n * ```\n */\nexport function createInjector(\n providers: ProviderRegistration[] = [],\n parent?: Injector,\n): Injector {\n const instances = new Map<symbol, unknown>();\n const multiInstances = new Map<symbol, unknown[]>();\n const registrations = new Map<symbol, ProviderRegistration>();\n\n // Register providers\n for (const reg of providers) {\n registrations.set(reg.provide._id, reg);\n }\n\n const injector: Injector = {\n get<T>(provider: ProviderDef<T>): T {\n const id = provider._id;\n\n // Multi-provider\n if (provider.multi) {\n if (multiInstances.has(id)) return multiInstances.get(id) as T;\n const values: unknown[] = [];\n const reg = registrations.get(id);\n if (reg?.useFactory) values.push(reg.useFactory());\n else if (reg?.useValue !== undefined) values.push(reg.useValue);\n if (parent?.has(provider)) {\n const parentValues = parent.get(provider);\n if (Array.isArray(parentValues)) values.push(...parentValues);\n }\n multiInstances.set(id, values);\n return values as T;\n }\n\n // Check local cache\n if (instances.has(id)) return instances.get(id) as T;\n\n // Check root singleton\n if (provider.providedIn === 'root' && rootInstances.has(id)) {\n return rootInstances.get(id) as T;\n }\n\n // Check local registrations\n const reg = registrations.get(id);\n if (reg) {\n const instance = resolveRegistration(reg, injector);\n instances.set(id, instance);\n return instance as T;\n }\n\n // Check parent\n if (parent) {\n return parent.get(provider);\n }\n\n // Use default factory\n const instance = provider.factory();\n\n // Cache at appropriate level\n if (provider.providedIn === 'root') {\n rootInstances.set(id, instance);\n } else {\n instances.set(id, instance);\n }\n\n return instance;\n },\n\n has(provider: ProviderDef<unknown>): boolean {\n if (instances.has(provider._id)) return true;\n if (registrations.has(provider._id)) return true;\n if (provider.providedIn === 'root' && rootInstances.has(provider._id)) return true;\n if (parent) return parent.has(provider);\n return false;\n },\n\n createChild(childProviders?: ProviderRegistration[]): Injector {\n return createInjector(childProviders ?? [], injector);\n },\n\n dispose() {\n instances.clear();\n multiInstances.clear();\n },\n };\n\n return injector;\n}\n\nfunction resolveRegistration(reg: ProviderRegistration, injector: Injector): unknown {\n if (reg.useValue !== undefined) return reg.useValue;\n if (reg.useFactory) return reg.useFactory();\n if (reg.useExisting) return injector.get(reg.useExisting);\n return reg.provide.factory();\n}\n\n// =========================================================================\n// Component-level injection helpers\n// =========================================================================\n\nlet currentInjector: Injector | null = null;\n\n/**\n * Set the current injector (called by component setup).\n * @internal\n */\nexport function setCurrentInjector(injector: Injector | null): Injector | null {\n const prev = currentInjector;\n currentInjector = injector;\n return prev;\n}\n\n/**\n * Inject a provider in the current component context.\n *\n * ```ts\n * const api = injectProvider(ApiService);\n * ```\n */\nexport function injectProvider<T>(provider: ProviderDef<T>): T {\n if (!currentInjector) {\n // Fallback to root or create new instance\n if (provider.providedIn === 'root') {\n if (rootInstances.has(provider._id)) {\n return rootInstances.get(provider._id) as T;\n }\n const instance = provider.factory();\n rootInstances.set(provider._id, instance);\n return instance;\n }\n return provider.factory();\n }\n return currentInjector.get(provider);\n}\n\n/**\n * Clear root provider instances (useful for testing).\n */\nexport function clearProviders(): void {\n rootInstances.clear();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,e}from'./chunk-YXKQTEPR.js';function v(n){if(typeof window>"u")return(()=>false);let o=window.matchMedia(n),t=c(o.matches),i=r=>t.set(r.matches);return o.addEventListener("change",i),(()=>t())}var y={sm:640,md:768,lg:1024,xl:1280,"2xl":1536};function S(n=y){let o=Object.entries(n).sort((e,a)=>e[1]-a[1]),t=c(typeof window<"u"?window.innerWidth:1024);if(typeof window<"u"){let e=()=>t.set(window.innerWidth);window.addEventListener("resize",e,{passive:true});}function i(){let e=t(),a="";for(let[g,f]of o)e>=f&&(a=g);return a||o[0]?.[0]||""}function r(e){let a=n[e];return a!==void 0&&t()>=a}function s(e){let a=n[e];return a!==void 0&&t()<a}return {current:i,gte:r,lt:s,width:(()=>t())}}function b(n,o,t="local"){let i=typeof window<"u"?t==="local"?localStorage:sessionStorage:null,r=o;if(i)try{let e=i.getItem(n);e!==null&&(r=JSON.parse(e));}catch{}let s=c(r);return i&&(e(()=>{let e=s();try{i.setItem(n,JSON.stringify(e));}catch{}}),typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key===n&&e.newValue!==null)try{s.set(JSON.parse(e.newValue));}catch{}})),s}function h(n){let o=c(""),t=c(false),i=n?.timeout??2e3,r=null;async function s(e){typeof navigator>"u"||!navigator.clipboard||(await navigator.clipboard.writeText(e),o.set(e),t.set(true),r&&clearTimeout(r),r=setTimeout(()=>t.set(false),i));}return {text:(()=>o()),copied:(()=>t()),copy:s}}function E(){if(typeof window>"u")return(()=>true);let n=c(navigator.onLine);return window.addEventListener("online",()=>n.set(true)),window.addEventListener("offline",()=>n.set(false)),(()=>n())}function T(n){let o=c({latitude:null,longitude:null,accuracy:null,error:null,loading:true});return typeof navigator<"u"&&navigator.geolocation?navigator.geolocation.watchPosition(t=>{o.set({latitude:t.coords.latitude,longitude:t.coords.longitude,accuracy:t.coords.accuracy,error:null,loading:false});},t=>{o.set({latitude:null,longitude:null,accuracy:null,error:t,loading:false});},n):o.set({...o(),loading:false}),(()=>o())}function L(){let n=c(typeof window<"u"?window.innerWidth:0),o=c(typeof window<"u"?window.innerHeight:0);return typeof window<"u"&&window.addEventListener("resize",()=>{n.set(window.innerWidth),o.set(window.innerHeight);},{passive:true}),{width:(()=>n()),height:(()=>o())}}function R(n,o,t={}){if(typeof document>"u")return ()=>{};let{events:i=["pointerdown"],ignore:r=[],active:s=true}=t,e=s;function a(){return typeof n=="function"?n():n}function g(u){let d=u.target;if(!d)return false;for(let c of r)if(typeof c=="string"){if(d.closest(c))return true}else if(c===d||c.contains(d))return true;return false}function f(u){if(!e)return;let d=a();if(!d)return;let c=u.target;d===c||d.contains(c)||g(u)||o(u);}for(let u of i)document.addEventListener(u,f,{passive:true,capture:true});let w=()=>{for(let u of i)document.removeEventListener(u,f,{capture:true});};return w.enable=()=>{e=true;},w.disable=()=>{e=false;},w}export{v as a,S as b,b as c,h as d,E as e,T as f,L as g,R as h};//# sourceMappingURL=chunk-JQCN42XX.js.map
2
+ //# sourceMappingURL=chunk-JQCN42XX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/browser.ts"],"names":["useMediaQuery","query","mql","matches","signal","handler","e","DEFAULT_BREAKPOINTS","useBreakpoint","breakpoints","sorted","a","b","width","current","w","result","name","min","gte","bp","lt","useStorage","key","initialValue","storage","store","startValue","raw","state","effect","value","useClipboard","options","text","copied","timeout","timer","copy","useOnline","online","useGeolocation","pos","err","useWindowSize","height","useClickOutside","target","events","ignore","active","isActive","getTarget","shouldIgnore","event","eventTarget","pattern","listener","el","eventName","dispose"],"mappings":"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","file":"chunk-JQCN42XX.js","sourcesContent":["/**\n * Browser API composables.\n *\n * Signal-based wrappers for common browser APIs.\n * All composables are SSR-safe — they return fallback values\n * when `window` is not available.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useMediaQuery ---\n\n/**\n * Reactive media query matcher.\n *\n * ```ts\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * isMobile(); // true/false, updates on resize\n * ```\n */\nexport function useMediaQuery(query: string): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => false) as ReadonlySignal<boolean>;\n }\n\n const mql = window.matchMedia(query);\n const matches = signal(mql.matches);\n\n const handler = (e: MediaQueryListEvent) => matches.set(e.matches);\n mql.addEventListener('change', handler);\n\n return (() => matches()) as ReadonlySignal<boolean>;\n}\n\n// --- useBreakpoint ---\n\nexport interface Breakpoints {\n [name: string]: number;\n}\n\nconst DEFAULT_BREAKPOINTS: Breakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n/**\n * Reactive breakpoint tracker (Tailwind-style).\n *\n * ```ts\n * const bp = useBreakpoint();\n * bp.current(); // 'md'\n * bp.gte('lg'); // false\n * bp.lt('sm'); // false\n * ```\n */\nexport function useBreakpoint(breakpoints: Breakpoints = DEFAULT_BREAKPOINTS) {\n const sorted = Object.entries(breakpoints).sort((a, b) => a[1] - b[1]);\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 1024);\n\n if (typeof window !== 'undefined') {\n const handler = () => width.set(window.innerWidth);\n window.addEventListener('resize', handler, { passive: true });\n }\n\n function current(): string {\n const w = width();\n let result = '';\n for (const [name, min] of sorted) {\n if (w >= min) result = name;\n }\n return result || sorted[0]?.[0] || '';\n }\n\n function gte(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() >= bp;\n }\n\n function lt(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() < bp;\n }\n\n return { current, gte, lt, width: (() => width()) as ReadonlySignal<number> };\n}\n\n// --- useStorage ---\n\n/**\n * Signal backed by localStorage or sessionStorage.\n * Persists across page refreshes.\n *\n * ```ts\n * const name = useStorage('user-name', 'Guest');\n * name(); // reads from localStorage or 'Guest'\n * name.set('Alice'); // writes to localStorage\n * ```\n */\nexport function useStorage<T>(\n key: string,\n initialValue: T,\n storage: 'local' | 'session' = 'local',\n): Signal<T> {\n const store = typeof window !== 'undefined'\n ? (storage === 'local' ? localStorage : sessionStorage)\n : null;\n\n // Read existing value\n let startValue = initialValue;\n if (store) {\n try {\n const raw = store.getItem(key);\n if (raw !== null) startValue = JSON.parse(raw);\n } catch { /* use initial */ }\n }\n\n const state = signal<T>(startValue);\n\n // Sync writes to storage\n if (store) {\n effect(() => {\n const value = state();\n try {\n store.setItem(key, JSON.stringify(value));\n } catch { /* storage full */ }\n });\n\n // Listen for changes from other tabs\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (e) => {\n if (e.key === key && e.newValue !== null) {\n try {\n state.set(JSON.parse(e.newValue));\n } catch { /* ignore */ }\n }\n });\n }\n }\n\n return state;\n}\n\n// --- useClipboard ---\n\n/**\n * Reactive clipboard access.\n *\n * ```ts\n * const { text, copy, copied } = useClipboard();\n * await copy('Hello');\n * copied(); // true for 2 seconds\n * ```\n */\nexport function useClipboard(options?: { timeout?: number }) {\n const text = signal('');\n const copied = signal(false);\n const timeout = options?.timeout ?? 2000;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n async function copy(value: string): Promise<void> {\n if (typeof navigator === 'undefined' || !navigator.clipboard) return;\n await navigator.clipboard.writeText(value);\n text.set(value);\n copied.set(true);\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => copied.set(false), timeout);\n }\n\n return {\n text: (() => text()) as ReadonlySignal<string>,\n copied: (() => copied()) as ReadonlySignal<boolean>,\n copy,\n };\n}\n\n// --- useOnline ---\n\n/**\n * Reactive online/offline status.\n *\n * ```ts\n * const online = useOnline();\n * online(); // true/false\n * ```\n */\nexport function useOnline(): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => true) as ReadonlySignal<boolean>;\n }\n\n const online = signal(navigator.onLine);\n window.addEventListener('online', () => online.set(true));\n window.addEventListener('offline', () => online.set(false));\n\n return (() => online()) as ReadonlySignal<boolean>;\n}\n\n// --- useGeolocation ---\n\nexport interface GeolocationState {\n latitude: number | null;\n longitude: number | null;\n accuracy: number | null;\n error: GeolocationPositionError | null;\n loading: boolean;\n}\n\n/**\n * Reactive geolocation.\n *\n * ```ts\n * const geo = useGeolocation();\n * geo().latitude; // number | null\n * geo().loading; // boolean\n * ```\n */\nexport function useGeolocation(\n options?: PositionOptions,\n): ReadonlySignal<GeolocationState> {\n const state = signal<GeolocationState>({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: null,\n loading: true,\n });\n\n if (typeof navigator !== 'undefined' && navigator.geolocation) {\n navigator.geolocation.watchPosition(\n (pos) => {\n state.set({\n latitude: pos.coords.latitude,\n longitude: pos.coords.longitude,\n accuracy: pos.coords.accuracy,\n error: null,\n loading: false,\n });\n },\n (err) => {\n state.set({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: err,\n loading: false,\n });\n },\n options,\n );\n } else {\n state.set({ ...state(), loading: false });\n }\n\n return (() => state()) as ReadonlySignal<GeolocationState>;\n}\n\n// --- useWindowSize ---\n\n/**\n * Reactive window dimensions.\n */\nexport function useWindowSize() {\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 0);\n const height = signal(typeof window !== 'undefined' ? window.innerHeight : 0);\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', () => {\n width.set(window.innerWidth);\n height.set(window.innerHeight);\n }, { passive: true });\n }\n\n return {\n width: (() => width()) as ReadonlySignal<number>,\n height: (() => height()) as ReadonlySignal<number>,\n };\n}\n\n// --- useClickOutside ---\n\n/**\n * Detect clicks outside an element. Essential for closing\n * dropdowns, modals, popovers, and context menus.\n *\n * ```ts\n * const dropdown = document.querySelector('.dropdown')!;\n * const dispose = useClickOutside(dropdown, () => {\n * closeDropdown();\n * });\n *\n * // With options:\n * useClickOutside(dropdown, onClose, {\n * events: ['mousedown', 'touchstart'],\n * ignore: ['.trigger-button'],\n * });\n * ```\n */\nexport function useClickOutside(\n target: HTMLElement | (() => HTMLElement | null),\n handler: (event: Event) => void,\n options: {\n /** Events to listen for (default: ['pointerdown']) */\n events?: string[];\n /** Selectors or elements to ignore (clicks on these won't trigger) */\n ignore?: (string | HTMLElement)[];\n /** Whether the listener is active (default: true) */\n active?: boolean;\n } = {},\n): () => void {\n if (typeof document === 'undefined') return () => {};\n\n const {\n events = ['pointerdown'],\n ignore = [],\n active = true,\n } = options;\n\n let isActive = active;\n\n function getTarget(): HTMLElement | null {\n return typeof target === 'function' ? target() : target;\n }\n\n function shouldIgnore(event: Event): boolean {\n const eventTarget = event.target as HTMLElement;\n if (!eventTarget) return false;\n\n for (const pattern of ignore) {\n if (typeof pattern === 'string') {\n if (eventTarget.closest(pattern)) return true;\n } else {\n if (pattern === eventTarget || pattern.contains(eventTarget)) return true;\n }\n }\n return false;\n }\n\n function listener(event: Event): void {\n if (!isActive) return;\n const el = getTarget();\n if (!el) return;\n\n const eventTarget = event.target as Node;\n if (el === eventTarget || el.contains(eventTarget)) return;\n if (shouldIgnore(event)) return;\n\n handler(event);\n }\n\n for (const eventName of events) {\n document.addEventListener(eventName, listener, { passive: true, capture: true });\n }\n\n const dispose = () => {\n for (const eventName of events) {\n document.removeEventListener(eventName, listener, { capture: true } as EventListenerOptions);\n }\n };\n\n // Attach enable/disable to dispose function\n (dispose as any).enable = () => { isActive = true; };\n (dispose as any).disable = () => { isActive = false; };\n\n return dispose;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var r=false,t=null;function m(){return r}function c(e){let{container:n,component:o,props:i={}}=e;r=true,t=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);try{o(i);}finally{r=false,t=null;}return ()=>{}}function y(e){if(!r||!t)return null;let n=t.nextNode();for(;n;){if(n instanceof HTMLElement&&n.tagName.toLowerCase()===e.toLowerCase())return n;n=t.nextNode();}return null}function H(){if(!r||!t)return null;let e=t.nextNode();for(;e;){if(e instanceof Text)return e;e=t.nextNode();}return null}function T(e){let{target:n,component:o,props:i,rootMargin:p="200px"}=e;if(typeof IntersectionObserver>"u")return c({container:n,component:o,props:i});let s=false,l=new IntersectionObserver(d=>{for(let u of d)u.isIntersecting&&!s&&(l.disconnect(),c({container:n,component:o,props:i}));},{rootMargin:p});return l.observe(n),()=>{s=true,l.disconnect();}}var f="data-akash-hydrate";function x(e=document.body){return Array.from(e.querySelectorAll(`[${f}]`))}exports.a=m;exports.b=c;exports.c=y;exports.d=H;exports.e=T;exports.f=f;exports.g=x;//# sourceMappingURL=chunk-K2HB5VFA.cjs.map
2
+ //# sourceMappingURL=chunk-K2HB5VFA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hydration.ts"],"names":["isHydrating","hydrateWalker","isHydrationActive","hydrate","options","container","component","props","claimElement","tag","node","claimText","progressiveHydrate","target","rootMargin","disposed","observer","entries","entry","HYDRATE_ATTR","findHydrationBoundaries","root"],"mappings":"aAiBA,IAAIA,CAAAA,CAAc,KAAA,CAEdC,CAAAA,CAAmC,KAGhC,SAASC,CAAAA,EAA6B,CAC3C,OAAOF,CACT,CA8BO,SAASG,CAAAA,CAAQC,CAAAA,CAAqC,CAC3D,GAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAQ,EAAG,CAAA,CAAIH,EAE7CJ,CAAAA,CAAc,IAAA,CAIdC,CAAAA,CAAgB,QAAA,CAAS,iBACvBI,CAAAA,CACA,UAAA,CAAW,YAAA,CAAe,UAAA,CAAW,SACvC,CAAA,CAEA,GAAI,CAGFC,CAAAA,CAAUC,CAAY,EACxB,CAAA,OAAE,CACAP,CAAAA,CAAc,KAAA,CAEdC,CAAAA,CAAgB,KAClB,CAEA,OAAO,IAAM,CAEb,CACF,CAMO,SAASO,CAAAA,CAAaC,CAAAA,CAAiC,CAC5D,GAAI,CAACT,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,KAE3C,IAAIS,CAAAA,CAAOT,CAAAA,CAAc,QAAA,EAAS,CAClC,KAAOS,CAAAA,EAAM,CACX,GACEA,CAAAA,YAAgB,WAAA,EAChBA,CAAAA,CAAK,OAAA,CAAQ,WAAA,KAAkBD,CAAAA,CAAI,WAAA,EAAY,CAE/C,OAAOC,CAAAA,CAETA,CAAAA,CAAOT,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CAKO,SAASU,CAAAA,EAAyB,CACvC,GAAI,CAACX,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,IAAA,CAE3C,IAAIS,CAAAA,CAAOT,CAAAA,CAAc,QAAA,EAAS,CAClC,KAAOS,CAAAA,EAAM,CACX,GAAIA,CAAAA,YAAgB,IAAA,CAClB,OAAOA,EAETA,CAAAA,CAAOT,CAAAA,CAAc,QAAA,GACvB,CAEA,OAAO,IACT,CA6BO,SAASW,CAAAA,CAAmBR,CAAAA,CAAgD,CACjF,GAAM,CAAE,MAAA,CAAAS,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAO,EAAa,OAAQ,CAAA,CAAIV,CAAAA,CAE3D,GAAI,OAAO,oBAAA,CAAyB,IAElC,OAAOD,CAAAA,CAAQ,CAAE,SAAA,CAAWU,CAAAA,CAAQ,SAAA,CAAAP,EAAW,KAAA,CAAAC,CAAM,CAAC,CAAA,CAGxD,IAAIQ,CAAAA,CAAW,KAAA,CAETC,CAAAA,CAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACX,IAAA,IAAWC,CAAAA,IAASD,EACdC,CAAAA,CAAM,cAAA,EAAkB,CAACH,CAAAA,GAC3BC,CAAAA,CAAS,UAAA,GACTb,CAAAA,CAAQ,CAAE,SAAA,CAAWU,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,MAAAC,CAAM,CAAC,CAAA,EAGrD,CAAA,CACA,CAAE,UAAA,CAAAO,CAAW,CACf,CAAA,CAEA,OAAAE,CAAAA,CAAS,OAAA,CAAQH,CAAM,CAAA,CAEhB,IAAM,CACXE,CAAAA,CAAW,IAAA,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,CAKO,IAAMG,CAAAA,CAAe,qBAKrB,SAASC,CAAAA,CACdC,EAAoB,QAAA,CAAS,IAAA,CACd,CACf,OAAO,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAK,gBAAA,CAA8B,CAAA,CAAA,EAAIF,CAAY,CAAA,CAAA,CAAG,CAAC,CAC3E","file":"chunk-K2HB5VFA.cjs","sourcesContent":["/**\n * Client-side hydration.\n *\n * After SSR delivers HTML, the client needs to \"hydrate\" —\n * walk the existing DOM, attach signal effects, and make it interactive.\n * No new DOM nodes are created during hydration.\n *\n * Supports progressive hydration via IntersectionObserver:\n * components hydrate lazily when they enter the viewport.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Hydration state ---\n\nlet isHydrating = false;\nlet hydrateRoot: Node | null = null;\nlet hydrateWalker: TreeWalker | null = null;\n\n/** Check if we're currently hydrating (vs. fresh rendering) */\nexport function isHydrationActive(): boolean {\n return isHydrating;\n}\n\n// --- Hydration context ---\n\nexport interface HydrateOptions {\n /** The root DOM element (rendered by SSR) */\n container: HTMLElement;\n /** The root component to hydrate */\n component: Component<any>;\n /** Props to pass to the root component */\n props?: Record<string, unknown>;\n}\n\n/**\n * Hydrate a server-rendered DOM tree.\n *\n * Walks the existing DOM instead of creating new nodes,\n * attaching signal effects to existing elements.\n *\n * ```ts\n * import { hydrate } from '@akashjs/runtime';\n * import App from './App.akash';\n *\n * hydrate({\n * container: document.getElementById('app')!,\n * component: App,\n * props: { title: 'Home' },\n * });\n * ```\n */\nexport function hydrate(options: HydrateOptions): () => void {\n const { container, component, props = {} } = options;\n\n isHydrating = true;\n hydrateRoot = container;\n\n // Create a tree walker to traverse the existing DOM\n hydrateWalker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n );\n\n try {\n // Run the component — during hydration, DOM creation helpers\n // will claim existing nodes instead of creating new ones\n component(props as any);\n } finally {\n isHydrating = false;\n hydrateRoot = null;\n hydrateWalker = null;\n }\n\n return () => {\n // Cleanup — dispose all hydration effects\n };\n}\n\n/**\n * Claim the next DOM node during hydration.\n * Instead of creating a new element, returns the existing one.\n */\nexport function claimElement(tag: string): HTMLElement | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === tag.toLowerCase()\n ) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n/**\n * Claim the next text node during hydration.\n */\nexport function claimText(): Text | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (node instanceof Text) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n// --- Progressive hydration ---\n\nexport interface ProgressiveHydrateOptions {\n /** CSS selector or element to observe */\n target: HTMLElement;\n /** Component to hydrate when visible */\n component: Component<any>;\n /** Props */\n props?: Record<string, unknown>;\n /** IntersectionObserver root margin (default: '200px') */\n rootMargin?: string;\n}\n\n/**\n * Hydrate a component lazily when it enters the viewport.\n *\n * Uses IntersectionObserver to detect when the SSR placeholder\n * becomes visible, then runs full hydration.\n *\n * ```ts\n * progressiveHydrate({\n * target: document.querySelector('[data-hydrate=\"comments\"]')!,\n * component: Comments,\n * props: { postId: 123 },\n * });\n * ```\n */\nexport function progressiveHydrate(options: ProgressiveHydrateOptions): () => void {\n const { target, component, props, rootMargin = '200px' } = options;\n\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: hydrate immediately if IO is not available\n return hydrate({ container: target, component, props });\n }\n\n let disposed = false;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !disposed) {\n observer.disconnect();\n hydrate({ container: target, component, props });\n }\n }\n },\n { rootMargin },\n );\n\n observer.observe(target);\n\n return () => {\n disposed = true;\n observer.disconnect();\n };\n}\n\n// --- Hydrate boundary marker ---\n\n/** Data attribute used to mark hydration boundaries in SSR HTML */\nexport const HYDRATE_ATTR = 'data-akash-hydrate';\n\n/**\n * Find all hydration boundaries in the document.\n */\nexport function findHydrationBoundaries(\n root: HTMLElement = document.body,\n): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(`[${HYDRATE_ATTR}]`));\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';function l(n,t,...r){if(r.length>0&&r.every(e=>typeof e=="function")){let e=t(n);for(let i of r)e=i(e);return e}return t(n,...r)}function f(...n){return (t,...r)=>{let e=t;for(let i of n)e=i(e,...r);return e}}function y(n){return n}var F=n=>String(n).toUpperCase(),d=n=>String(n).toLowerCase(),b=n=>{let t=String(n);return t.charAt(0).toUpperCase()+t.slice(1)},T=n=>String(n).replace(/\b\w/g,t=>t.toUpperCase()),h=n=>String(n).trim(),x=(n,t=50,r="...")=>{let e=String(n);return e.length<=t?e:e.slice(0,t-r.length)+r},P=(n,t="medium",r)=>{let e=n instanceof Date?n:new Date(n);if(isNaN(e.getTime()))return String(n);if(t==="iso")return e.toISOString();let i=r??"en-US",o={short:{year:"2-digit",month:"numeric",day:"numeric"},medium:{year:"numeric",month:"numeric",day:"numeric"},long:{year:"numeric",month:"long",day:"numeric"},full:{weekday:"long",year:"numeric",month:"long",day:"numeric"},time:{hour:"numeric",minute:"2-digit"}};return new Intl.DateTimeFormat(i,o[t]).format(e)},I=(n,t="USD",r)=>new Intl.NumberFormat(r??"en-US",{style:"currency",currency:t}).format(Number(n)),S=(n,t,r)=>{let e={};if(t){let[i,o]=t.split("-").map(Number);e.minimumFractionDigits=i,e.maximumFractionDigits=o??i;}return new Intl.NumberFormat(r??"en-US",e).format(Number(n))},D=(n,t=0,r)=>new Intl.NumberFormat(r??"en-US",{style:"percent",minimumFractionDigits:t,maximumFractionDigits:t}).format(Number(n)),w=(n,t=2)=>JSON.stringify(n,null,t),N=(n,t,r)=>{let e=r??`${t}s`;return `${n} ${n===1?t:e}`},U=(n,t)=>{let e=(n instanceof Date?n.getTime():Number(n))-Date.now(),i=Math.abs(e),o=[[6e4,"second"],[36e5,"minute"],[864e5,"hour"],[2592e6,"day"],[31536e6,"month"],[1/0,"year"]],a={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},s="second";for(let[p,g]of o)if(i<p){s=g;break}let m=Math.round(e/a[s]);if(typeof Intl<"u"&&Intl.RelativeTimeFormat)return new Intl.RelativeTimeFormat(t??"en",{numeric:"auto"}).format(m,s);let u=Math.abs(m),c=m<0?"ago":"from now";return `${u} ${s}${u!==1?"s":""} ${c}`};exports.a=l;exports.b=f;exports.c=y;exports.d=F;exports.e=d;exports.f=b;exports.g=T;exports.h=h;exports.i=x;exports.j=P;exports.k=I;exports.l=S;exports.m=D;exports.n=w;exports.o=N;exports.p=U;//# sourceMappingURL=chunk-K7TMUF3F.cjs.map
2
+ //# sourceMappingURL=chunk-K7TMUF3F.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pipes.ts"],"names":["pipe","value","transform","rest","a","result","fn","chain","pipes","args","p","definePipe","uppercase","lowercase","capitalize","s","titleCase","c","trim","truncate","maxLength","suffix","date","format","locale","d","loc","options","currency","currencyCode","number","digitsInfo","opts","min","max","percent","decimals","json","indent","plural","singular","pluralForm","relativeTime","diff","absDiff","units","divisors","unit","threshold","u","n","abs"],"mappings":"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","file":"chunk-K7TMUF3F.cjs","sourcesContent":["/**\n * Pipes — template transform functions.\n *\n * Pure functions that transform display values. Chainable, memoized,\n * and usable both in templates and in script.\n *\n * ```ts\n * import { pipe, uppercase, date, currency } from '@akashjs/runtime';\n *\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(1234.5, currency, 'USD'); // '$1,234.50'\n * pipe('hello world', capitalize, truncate, 5); // 'Hello...'\n * ```\n */\n\n// =========================================================================\n// Pipe type and runner\n// =========================================================================\n\nexport type PipeFn<TIn = any, TOut = any> = (value: TIn, ...args: any[]) => TOut;\n\n/**\n * Apply a pipe transform to a value.\n *\n * ```ts\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(1234, currency, 'USD'); // '$1,234.00'\n * ```\n */\nexport function pipe(value: any, transform: Function, ...rest: any[]): any {\n // If all remaining args are functions, chain them: pipe(5, fn1, fn2, fn3)\n if (rest.length > 0 && rest.every(a => typeof a === 'function')) {\n let result = transform(value);\n for (const fn of rest) {\n result = fn(result);\n }\n return result;\n }\n // Otherwise, pass extra args to the transform: pipe('hello', truncate, 5)\n return transform(value, ...rest);\n}\n\n/**\n * Chain multiple pipes together.\n *\n * ```ts\n * const format = chain(trim, capitalize, truncate);\n * format(' hello world ', 10); // 'Hello w...'\n * ```\n */\nexport function chain<T>(...pipes: PipeFn[]): PipeFn<T, any> {\n return (value: T, ...args: any[]) => {\n let result: any = value;\n for (const p of pipes) {\n result = p(result, ...args);\n }\n return result;\n };\n}\n\n/**\n * Define a custom pipe.\n *\n * ```ts\n * const reverse = definePipe<string, string>((value) =>\n * value.split('').reverse().join('')\n * );\n * pipe('hello', reverse); // 'olleh'\n * ```\n */\nexport function definePipe<TIn, TOut>(fn: PipeFn<TIn, TOut>): PipeFn<TIn, TOut> {\n return fn;\n}\n\n// =========================================================================\n// Built-in pipes\n// =========================================================================\n\n/** Convert string to uppercase */\nexport const uppercase: PipeFn<string, string> = (value) => String(value).toUpperCase();\n\n/** Convert string to lowercase */\nexport const lowercase: PipeFn<string, string> = (value) => String(value).toLowerCase();\n\n/** Capitalize first letter */\nexport const capitalize: PipeFn<string, string> = (value) => {\n const s = String(value);\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\n/** Title case — capitalize each word */\nexport const titleCase: PipeFn<string, string> = (value) => {\n return String(value).replace(/\\b\\w/g, (c) => c.toUpperCase());\n};\n\n/** Trim whitespace */\nexport const trim: PipeFn<string, string> = (value) => String(value).trim();\n\n/**\n * Truncate string to a max length, adding ellipsis.\n *\n * ```ts\n * pipe('Hello World', truncate, 8); // 'Hello...'\n * ```\n */\nexport const truncate: PipeFn<string, string> = (value, maxLength: number = 50, suffix = '...') => {\n const s = String(value);\n if (s.length <= maxLength) return s;\n return s.slice(0, maxLength - suffix.length) + suffix;\n};\n\n/**\n * Format a date.\n *\n * ```ts\n * pipe(new Date(), date); // '3/29/2026'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(new Date(), date, 'long'); // 'March 29, 2026'\n * pipe(new Date(), date, 'time'); // '2:30 PM'\n * pipe(new Date(), date, 'iso'); // '2026-03-29T...'\n * ```\n */\nexport const date: PipeFn<Date | string | number, string> = (\n value,\n format: 'short' | 'medium' | 'long' | 'full' | 'time' | 'iso' = 'medium',\n locale?: string,\n) => {\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return String(value);\n\n if (format === 'iso') return d.toISOString();\n\n const loc = locale ?? 'en-US';\n\n const options: Record<string, Intl.DateTimeFormatOptions> = {\n short: { year: '2-digit', month: 'numeric', day: 'numeric' },\n medium: { year: 'numeric', month: 'numeric', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n };\n\n return new Intl.DateTimeFormat(loc, options[format]).format(d);\n};\n\n/**\n * Format a number as currency.\n *\n * ```ts\n * pipe(1234.5, currency); // '$1,234.50'\n * pipe(1234.5, currency, 'EUR'); // '€1,234.50'\n * ```\n */\nexport const currency: PipeFn<number, string> = (value, currencyCode = 'USD', locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'currency',\n currency: currencyCode,\n }).format(Number(value));\n};\n\n/**\n * Format a number with locale formatting.\n *\n * ```ts\n * pipe(1234567.89, number); // '1,234,567.89'\n * pipe(1234567.89, number, '0-2'); // '1,234,567.89' (0-2 decimal digits)\n * ```\n */\nexport const number: PipeFn<number, string> = (value, digitsInfo?: string, locale?: string) => {\n const opts: Intl.NumberFormatOptions = {};\n if (digitsInfo) {\n const [min, max] = digitsInfo.split('-').map(Number);\n opts.minimumFractionDigits = min;\n opts.maximumFractionDigits = max ?? min;\n }\n return new Intl.NumberFormat(locale ?? 'en-US', opts).format(Number(value));\n};\n\n/**\n * Format a number as a percentage.\n *\n * ```ts\n * pipe(0.85, percent); // '85%'\n * pipe(0.856, percent); // '86%'\n * ```\n */\nexport const percent: PipeFn<number, string> = (value, decimals = 0, locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(Number(value));\n};\n\n/**\n * JSON stringify with formatting.\n *\n * ```ts\n * pipe({ a: 1 }, json); // '{\\n \"a\": 1\\n}'\n * pipe({ a: 1 }, json, 0); // '{\"a\":1}'\n * ```\n */\nexport const json: PipeFn<unknown, string> = (value, indent = 2) => {\n return JSON.stringify(value, null, indent);\n};\n\n/**\n * Pluralize a string based on count.\n *\n * ```ts\n * pipe(1, plural, 'item', 'items'); // '1 item'\n * pipe(5, plural, 'item', 'items'); // '5 items'\n * ```\n */\nexport const plural: PipeFn<number, string> = (value, singular: string, pluralForm?: string) => {\n const p = pluralForm ?? `${singular}s`;\n return `${value} ${value === 1 ? singular : p}`;\n};\n\n/**\n * Relative time formatting.\n *\n * ```ts\n * pipe(Date.now() - 60000, relativeTime); // '1 minute ago'\n * ```\n */\nexport const relativeTime: PipeFn<Date | number, string> = (value, locale?: string) => {\n const d = value instanceof Date ? value.getTime() : Number(value);\n const diff = d - Date.now();\n const absDiff = Math.abs(diff);\n\n const units: Array<[number, Intl.RelativeTimeFormatUnit]> = [\n [60000, 'second'],\n [3600000, 'minute'],\n [86400000, 'hour'],\n [2592000000, 'day'],\n [31536000000, 'month'],\n [Infinity, 'year'],\n ];\n\n const divisors: Record<string, number> = {\n second: 1000, minute: 60000, hour: 3600000,\n day: 86400000, month: 2592000000, year: 31536000000,\n };\n\n let unit: Intl.RelativeTimeFormatUnit = 'second';\n for (const [threshold, u] of units) {\n if (absDiff < threshold) { unit = u; break; }\n }\n\n const n = Math.round(diff / divisors[unit]);\n\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n return new Intl.RelativeTimeFormat(locale ?? 'en', { numeric: 'auto' }).format(n, unit);\n }\n\n const abs = Math.abs(n);\n const suffix = n < 0 ? 'ago' : 'from now';\n return `${abs} ${unit}${abs !== 1 ? 's' : ''} ${suffix}`;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,d,a,b as b$2}from'./chunk-VUMMC2P5.js';import {b as b$1}from'./chunk-AOFLE33X.js';import {e,f}from'./chunk-YXKQTEPR.js';function D(e,n){let o=document.createElement(e);if(n)for(let[c,a]of Object.entries(n))L(o,c,a);return o}function R(e){return document.createTextNode(e)}function B(e){let n=document.createElement("template");return n.innerHTML=e,n.content.cloneNode(true)}function L(e,n,o){if(n==="class"||n==="className")e.className=o;else if(n==="style"&&typeof o=="object"&&o!==null)Object.assign(e.style,o);else if(n==="innerHTML")e.innerHTML=o;else if(n!=="ref")if(n.startsWith("on")){let c=n.slice(2).toLowerCase();e.addEventListener(c,o);}else n in e?e[n]=o:o===false||o==null?e.removeAttribute(n):e.setAttribute(n,o===true?"":String(o));}function _(e$1,n){return e(()=>{e$1.textContent=String(n());},{render:true})}function O(e$1,n,o){return e(()=>{L(e$1,n,o());},{render:true})}function j(e$1,n){return e(()=>{e$1.style.display=n()?"":"none";},{render:true})}function b(e=""){return document.createComment(e)}function S(e$1,n,o,c$1,a){let s=null,h=c(),k=e(()=>{let i=o();if(s){for(let l of s.nodes)try{l.parentNode?.removeChild(l);}catch{}s.dispose?.(),s=null;}let d$1=i?c$1:a,m=n.parentNode;if(!m&&s?.nodes[0]?.parentNode&&(m=s.nodes[0].parentNode),d$1&&m){let l=h?d(h,d$1):d$1(),t=l instanceof DocumentFragment?Array.from(l.childNodes):[l];for(let r of t)m.insertBefore(r,n);s={nodes:t,dispose:null};}},{render:true});return ()=>{if(k(),s){for(let i of s.nodes)try{i.parentNode?.removeChild(i);}catch{}s.dispose?.();}}}function H(e$1,n,o,c$1,a){let s=[],h=c(),k=e(()=>{let i=o(),d$1=[],m=new Map;for(let t of s)m.set(t.key,t);for(let t=0;t<i.length;t++){let r=i[t],u=c$1(r,t),f=m.get(u);if(f){m.delete(u);let T=f.nodes[0];if(T&&!T.parentNode){let x=h?d(h,()=>a(r,t)):a(r,t),P=x instanceof DocumentFragment?Array.from(x.childNodes):[x];d$1.push({key:u,value:r,nodes:P,dispose:null});}else f.value=r,d$1.push(f);}else {let T=h?d(h,()=>a(r,t)):a(r,t),x=T instanceof DocumentFragment?Array.from(T.childNodes):[T];d$1.push({key:u,value:r,nodes:x,dispose:null});}}for(let t of m.values()){for(let r of t.nodes)r.parentNode&&r.parentNode.removeChild(r);t.dispose?.();}let l=n.parentNode;if(l)for(let t of d$1)for(let r of t.nodes)l.insertBefore(r,n);else {let t=null;for(let r of s)if(r.nodes[0]?.parentNode){t=r.nodes[0].parentNode;break}if(t)for(let r of d$1)for(let u of r.nodes)t.appendChild(u);}s=d$1;},{render:true});return ()=>{k();for(let i of s){for(let d of i.nodes)d.parentNode&&d.parentNode.removeChild(d);i.dispose?.();}s=[];}}function I(e){let n=b("show"),o=document.createDocumentFragment();o.appendChild(n);let c=typeof e.when=="function"?e.when:()=>e.when,a;return S(o,n,()=>(a=c(),!!a),()=>N(e.children(a)),e.fallback?()=>N(e.fallback()):void 0),o}function K(e){let n=b("for"),o=document.createDocumentFragment();o.appendChild(n);let c=typeof e.each=="function"?e.each:()=>e.each;return H(o,n,c,e.key,(a,s)=>N(e.children(a,s))),o}function N(e){if(e==null||typeof e=="boolean")return document.createTextNode("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(e instanceof Node)return e;if(Array.isArray(e)){let n=document.createDocumentFragment();for(let o of e)n.appendChild(N(o));return n}return document.createTextNode(String(e))}function V(e,n,o){let c=N(n);o?e.insertBefore(c,o):e.appendChild(c);}function J(e){return e.__reactive=true,e}var p=null;function Q(e){if(!p)throw b$1("AK0020");p.mount.push(e);}function X(e){if(!p)throw b$1("AK0021");p.unmount.push(e);}function Z(e){if(!p)throw b$1("AK0022");p.error.push(e);}function $(e){return {current:e}}function ee(e){let n=o=>{let{children:c$1,...a$1}=o??{},k={props:a$1,children:typeof c$1=="function"?c$1:()=>c$1??null},i={mount:[],unmount:[],error:[]},d=p;p=i;let m=c(),l=a(m),t,r;try{r=f(()=>{if(t=e(k),typeof t!="function")throw b$1("AK0040");let u=t();return N(u)});}catch(u){if(b$2(l),p=d,i.error.length>0){for(let f of i.error)f(u instanceof Error?u:new Error(String(u)));return document.createComment("error")}throw u}return b$2(l),p=d,i.mount.length>0&&queueMicrotask(()=>{for(let u of i.mount)try{let f=u();typeof f=="function"&&i.unmount.push(f);}catch(f){for(let T of i.error)T(f instanceof Error?f:new Error(String(f)));}}),r};return n._akash=true,n}export{D as a,R as b,B as c,L as d,_ as e,O as f,j as g,S as h,H as i,I as j,K as k,N as l,V as m,J as n,Q as o,X as p,Z as q,$ as r,ee as s};//# sourceMappingURL=chunk-KE7BJTCD.js.map
2
+ //# sourceMappingURL=chunk-KE7BJTCD.js.map