@akashjs/runtime 0.2.6 → 0.2.8

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 (542) 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-2GGCZC4O.js +2 -0
  26. package/dist/chunk-2GGCZC4O.js.map +1 -0
  27. package/dist/chunk-2UATNCKC.js +2 -0
  28. package/dist/chunk-2UATNCKC.js.map +1 -0
  29. package/dist/chunk-2XFW6MT7.js +2 -0
  30. package/dist/chunk-2XFW6MT7.js.map +1 -0
  31. package/dist/chunk-34PQECMN.cjs +2 -0
  32. package/dist/chunk-34PQECMN.cjs.map +1 -0
  33. package/dist/chunk-3CD6A5YV.js +2 -0
  34. package/dist/chunk-3CD6A5YV.js.map +1 -0
  35. package/dist/chunk-3PCZFKBH.js +2 -0
  36. package/dist/chunk-3PCZFKBH.js.map +1 -0
  37. package/dist/chunk-3PGU24B5.cjs +3 -0
  38. package/dist/chunk-3PGU24B5.cjs.map +1 -0
  39. package/dist/chunk-3PLQPLVA.js +2 -0
  40. package/dist/chunk-3PLQPLVA.js.map +1 -0
  41. package/dist/chunk-3RDEFZMT.js +2 -0
  42. package/dist/chunk-3RDEFZMT.js.map +1 -0
  43. package/dist/chunk-3VYMJMAU.js +2 -0
  44. package/dist/chunk-3VYMJMAU.js.map +1 -0
  45. package/dist/chunk-3Y663FYJ.js +2 -0
  46. package/dist/chunk-3Y663FYJ.js.map +1 -0
  47. package/dist/chunk-45DPEU7T.cjs +2 -0
  48. package/dist/chunk-45DPEU7T.cjs.map +1 -0
  49. package/dist/chunk-4J3QBQVW.js +4 -0
  50. package/dist/chunk-4J3QBQVW.js.map +1 -0
  51. package/dist/chunk-4VLBY2BW.cjs +2 -0
  52. package/dist/chunk-4VLBY2BW.cjs.map +1 -0
  53. package/dist/chunk-5GDMAABU.js +2 -0
  54. package/dist/chunk-5GDMAABU.js.map +1 -0
  55. package/dist/chunk-5JKXREA2.cjs +2 -0
  56. package/dist/chunk-5JKXREA2.cjs.map +1 -0
  57. package/dist/chunk-5QCWH6QA.cjs +4 -0
  58. package/dist/chunk-5QCWH6QA.cjs.map +1 -0
  59. package/dist/chunk-637ENG3A.cjs +2 -0
  60. package/dist/chunk-637ENG3A.cjs.map +1 -0
  61. package/dist/chunk-66PLXQS3.js +2 -0
  62. package/dist/chunk-66PLXQS3.js.map +1 -0
  63. package/dist/chunk-6GY6HC75.cjs +2 -0
  64. package/dist/chunk-6GY6HC75.cjs.map +1 -0
  65. package/dist/chunk-6I5PPQ34.cjs +17 -0
  66. package/dist/chunk-6I5PPQ34.cjs.map +1 -0
  67. package/dist/chunk-6ZCFPR4O.js +2 -0
  68. package/dist/chunk-6ZCFPR4O.js.map +1 -0
  69. package/dist/chunk-7T4HMWUC.js +2 -0
  70. package/dist/{chunk-5A7KDBDU.js.map → chunk-7T4HMWUC.js.map} +1 -1
  71. package/dist/chunk-AOFLE33X.js +5 -0
  72. package/dist/chunk-AOFLE33X.js.map +1 -0
  73. package/dist/chunk-AQQQVDBQ.cjs +2 -0
  74. package/dist/chunk-AQQQVDBQ.cjs.map +1 -0
  75. package/dist/chunk-AXB5GHGO.js +2 -0
  76. package/dist/chunk-AXB5GHGO.js.map +1 -0
  77. package/dist/chunk-BHP3UTTQ.cjs +3 -0
  78. package/dist/chunk-BHP3UTTQ.cjs.map +1 -0
  79. package/dist/chunk-BLT7XOSX.cjs +2 -0
  80. package/dist/chunk-BLT7XOSX.cjs.map +1 -0
  81. package/dist/chunk-CDZR6GWB.js +2 -0
  82. package/dist/chunk-CDZR6GWB.js.map +1 -0
  83. package/dist/chunk-DFYXFKCH.cjs +2 -0
  84. package/dist/chunk-DFYXFKCH.cjs.map +1 -0
  85. package/dist/chunk-DP7G45QM.cjs +13 -0
  86. package/dist/chunk-DP7G45QM.cjs.map +1 -0
  87. package/dist/chunk-DWSIR5SL.cjs +2 -0
  88. package/dist/chunk-DWSIR5SL.cjs.map +1 -0
  89. package/dist/chunk-E6RB7PRO.js +2 -0
  90. package/dist/chunk-E6RB7PRO.js.map +1 -0
  91. package/dist/chunk-E7BPGVIS.js +2 -0
  92. package/dist/chunk-E7BPGVIS.js.map +1 -0
  93. package/dist/chunk-E7GAIKQT.cjs +2 -0
  94. package/dist/chunk-E7GAIKQT.cjs.map +1 -0
  95. package/dist/chunk-EEQZFKEG.js +2 -0
  96. package/dist/{chunk-TKFJGLUO.js.map → chunk-EEQZFKEG.js.map} +1 -1
  97. package/dist/chunk-EXKQPZ5N.cjs +2 -0
  98. package/dist/chunk-EXKQPZ5N.cjs.map +1 -0
  99. package/dist/{chunk-ZYVQQ5VR.cjs → chunk-F2F5OXCK.cjs} +3 -3
  100. package/dist/{chunk-ZYVQQ5VR.cjs.map → chunk-F2F5OXCK.cjs.map} +1 -1
  101. package/dist/chunk-F4FXIPR3.js +2 -0
  102. package/dist/chunk-F4FXIPR3.js.map +1 -0
  103. package/dist/chunk-GAAO2KXN.js +2 -0
  104. package/dist/chunk-GAAO2KXN.js.map +1 -0
  105. package/dist/chunk-GB7IUC6E.js +2 -0
  106. package/dist/chunk-GB7IUC6E.js.map +1 -0
  107. package/dist/chunk-GHSJ4B55.js +11 -0
  108. package/dist/chunk-GHSJ4B55.js.map +1 -0
  109. package/dist/{chunk-U53YRJNV.js → chunk-GRXHWCFR.js} +3 -3
  110. package/dist/{chunk-U53YRJNV.js.map → chunk-GRXHWCFR.js.map} +1 -1
  111. package/dist/chunk-HHPRQMGX.cjs +2 -0
  112. package/dist/chunk-HHPRQMGX.cjs.map +1 -0
  113. package/dist/chunk-HL2VGVJT.cjs +2 -0
  114. package/dist/chunk-HL2VGVJT.cjs.map +1 -0
  115. package/dist/chunk-IDTJWCYW.js +2 -0
  116. package/dist/chunk-IDTJWCYW.js.map +1 -0
  117. package/dist/chunk-IHEW6F2H.js +2 -0
  118. package/dist/chunk-IHEW6F2H.js.map +1 -0
  119. package/dist/chunk-IJS2EMSE.js +2 -0
  120. package/dist/chunk-IJS2EMSE.js.map +1 -0
  121. package/dist/chunk-IQGSDFBI.cjs +2 -0
  122. package/dist/chunk-IQGSDFBI.cjs.map +1 -0
  123. package/dist/chunk-JEYTB4AG.js +2 -0
  124. package/dist/chunk-JEYTB4AG.js.map +1 -0
  125. package/dist/chunk-JFLZJPVN.js +2 -0
  126. package/dist/chunk-JFLZJPVN.js.map +1 -0
  127. package/dist/chunk-JLPJ22CE.js +2 -0
  128. package/dist/chunk-JLPJ22CE.js.map +1 -0
  129. package/dist/chunk-JMY6E7VR.cjs +2 -0
  130. package/dist/chunk-JMY6E7VR.cjs.map +1 -0
  131. package/dist/chunk-K2HB5VFA.cjs +2 -0
  132. package/dist/chunk-K2HB5VFA.cjs.map +1 -0
  133. package/dist/chunk-K7TMUF3F.cjs +2 -0
  134. package/dist/chunk-K7TMUF3F.cjs.map +1 -0
  135. package/dist/chunk-KFMCMKSC.cjs +2 -0
  136. package/dist/chunk-KFMCMKSC.cjs.map +1 -0
  137. package/dist/chunk-KGV5MKBC.cjs +11 -0
  138. package/dist/chunk-KGV5MKBC.cjs.map +1 -0
  139. package/dist/chunk-KMEGUPH2.js +3 -0
  140. package/dist/chunk-KMEGUPH2.js.map +1 -0
  141. package/dist/chunk-KQAYFPJI.cjs +2 -0
  142. package/dist/chunk-KQAYFPJI.cjs.map +1 -0
  143. package/dist/chunk-LSD7DEMV.cjs +2 -0
  144. package/dist/chunk-LSD7DEMV.cjs.map +1 -0
  145. package/dist/{chunk-2U643GJZ.cjs → chunk-LTMDSGQ6.cjs} +2 -2
  146. package/dist/{chunk-2U643GJZ.cjs.map → chunk-LTMDSGQ6.cjs.map} +1 -1
  147. package/dist/chunk-LWQPLKL6.cjs +20 -0
  148. package/dist/chunk-LWQPLKL6.cjs.map +1 -0
  149. package/dist/{chunk-2Q6SYE5O.cjs → chunk-M2OWSNOM.cjs} +2 -2
  150. package/dist/{chunk-2Q6SYE5O.cjs.map → chunk-M2OWSNOM.cjs.map} +1 -1
  151. package/dist/chunk-MADMPRT2.js +20 -0
  152. package/dist/chunk-MADMPRT2.js.map +1 -0
  153. package/dist/chunk-MDHWM3C2.js +2 -0
  154. package/dist/chunk-MDHWM3C2.js.map +1 -0
  155. package/dist/chunk-MGFRVOM5.js +2 -0
  156. package/dist/chunk-MGFRVOM5.js.map +1 -0
  157. package/dist/chunk-MNUOIAXS.js +2 -0
  158. package/dist/chunk-MNUOIAXS.js.map +1 -0
  159. package/dist/chunk-ND2HZRMR.cjs +2 -0
  160. package/dist/chunk-ND2HZRMR.cjs.map +1 -0
  161. package/dist/chunk-NGU2W4PD.cjs +2 -0
  162. package/dist/chunk-NGU2W4PD.cjs.map +1 -0
  163. package/dist/chunk-NQEY7DR5.cjs +2 -0
  164. package/dist/chunk-NQEY7DR5.cjs.map +1 -0
  165. package/dist/chunk-O5OTZP5M.cjs +2 -0
  166. package/dist/chunk-O5OTZP5M.cjs.map +1 -0
  167. package/dist/chunk-OQV3NYDH.js +3 -0
  168. package/dist/chunk-OQV3NYDH.js.map +1 -0
  169. package/dist/chunk-P4USGNUK.cjs +2 -0
  170. package/dist/chunk-P4USGNUK.cjs.map +1 -0
  171. package/dist/chunk-P55EWYAD.js +2 -0
  172. package/dist/chunk-P55EWYAD.js.map +1 -0
  173. package/dist/chunk-PPNEAFKE.cjs +5 -0
  174. package/dist/chunk-PPNEAFKE.cjs.map +1 -0
  175. package/dist/chunk-PVIYD25D.js +2 -0
  176. package/dist/chunk-PVIYD25D.js.map +1 -0
  177. package/dist/chunk-PWJMCURK.cjs +2 -0
  178. package/dist/chunk-PWJMCURK.cjs.map +1 -0
  179. package/dist/chunk-QQTZQ6UX.cjs +2 -0
  180. package/dist/chunk-QQTZQ6UX.cjs.map +1 -0
  181. package/dist/chunk-QTQ6RUX4.cjs +5 -0
  182. package/dist/chunk-QTQ6RUX4.cjs.map +1 -0
  183. package/dist/chunk-SBDFBADL.cjs +2 -0
  184. package/dist/chunk-SBDFBADL.cjs.map +1 -0
  185. package/dist/chunk-SPS3LM47.cjs +2 -0
  186. package/dist/chunk-SPS3LM47.cjs.map +1 -0
  187. package/dist/chunk-SVNS64LE.js +5 -0
  188. package/dist/chunk-SVNS64LE.js.map +1 -0
  189. package/dist/chunk-SZDKDXRV.js +17 -0
  190. package/dist/chunk-SZDKDXRV.js.map +1 -0
  191. package/dist/chunk-T7A5YOEG.cjs +2 -0
  192. package/dist/chunk-T7A5YOEG.cjs.map +1 -0
  193. package/dist/chunk-U65WRXZC.js +13 -0
  194. package/dist/chunk-U65WRXZC.js.map +1 -0
  195. package/dist/chunk-UT4MWGJ3.js +2 -0
  196. package/dist/chunk-UT4MWGJ3.js.map +1 -0
  197. package/dist/chunk-UXHQ5OFW.js +2 -0
  198. package/dist/chunk-UXHQ5OFW.js.map +1 -0
  199. package/dist/chunk-UYJ4BAPL.cjs +2 -0
  200. package/dist/chunk-UYJ4BAPL.cjs.map +1 -0
  201. package/dist/chunk-VDHUPQDK.cjs +2 -0
  202. package/dist/chunk-VDHUPQDK.cjs.map +1 -0
  203. package/dist/chunk-VTD3TI3M.js +2 -0
  204. package/dist/chunk-VTD3TI3M.js.map +1 -0
  205. package/dist/chunk-VUMMC2P5.js +2 -0
  206. package/dist/chunk-VUMMC2P5.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-WB7QDCEA.js +2 -0
  210. package/dist/{chunk-5NHDEY2C.js.map → chunk-WB7QDCEA.js.map} +1 -1
  211. package/dist/chunk-WLSXJU2N.js +13 -0
  212. package/dist/chunk-WLSXJU2N.js.map +1 -0
  213. package/dist/chunk-XAGYLTHV.js +2 -0
  214. package/dist/chunk-XAGYLTHV.js.map +1 -0
  215. package/dist/{chunk-AVVJKYT3.cjs → chunk-XE7JC7Y3.cjs} +2 -2
  216. package/dist/{chunk-AVVJKYT3.cjs.map → chunk-XE7JC7Y3.cjs.map} +1 -1
  217. package/dist/chunk-XMNDNTHK.cjs +5 -0
  218. package/dist/chunk-XMNDNTHK.cjs.map +1 -0
  219. package/dist/chunk-XOPRWJCX.cjs +2 -0
  220. package/dist/chunk-XOPRWJCX.cjs.map +1 -0
  221. package/dist/chunk-XPLIEN2G.cjs +13 -0
  222. package/dist/chunk-XPLIEN2G.cjs.map +1 -0
  223. package/dist/chunk-XRWOZO67.js +2 -0
  224. package/dist/chunk-XRWOZO67.js.map +1 -0
  225. package/dist/chunk-XZOP3IWH.cjs +2 -0
  226. package/dist/chunk-XZOP3IWH.cjs.map +1 -0
  227. package/dist/chunk-YG76TVFL.js +2 -0
  228. package/dist/chunk-YG76TVFL.js.map +1 -0
  229. package/dist/chunk-YQQDRDJ7.cjs +2 -0
  230. package/dist/chunk-YQQDRDJ7.cjs.map +1 -0
  231. package/dist/chunk-ZGE46DPV.cjs +2 -0
  232. package/dist/chunk-ZGE46DPV.cjs.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-CB1mCq2h.d.cts → context-Cwt7QCpk.d.cts} +1 -9
  242. package/dist/{context-CB1mCq2h.d.ts → 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-CJWKBTP4.js → devtools-overlay-3PHULVP4.js} +3 -3
  278. package/dist/{devtools-overlay-CJWKBTP4.js.map → devtools-overlay-3PHULVP4.js.map} +1 -1
  279. package/dist/{devtools-overlay-EQ3G755P.cjs → devtools-overlay-SJV7WNNS.cjs} +4 -4
  280. package/dist/{devtools-overlay-EQ3G755P.cjs.map → devtools-overlay-SJV7WNNS.cjs.map} +1 -1
  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 +50 -3155
  356. package/dist/index.d.ts +50 -3155
  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 +1 -1
  377. package/dist/offline.d.ts +1 -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 +1 -1
  405. package/dist/pwa.d.ts +1 -1
  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 +1 -1
  453. package/dist/store.d.ts +1 -1
  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 +1 -1
  469. package/dist/sync.d.ts +1 -1
  470. package/dist/sync.js +1 -1
  471. package/dist/test.cjs +2 -2
  472. package/dist/test.cjs.map +1 -1
  473. package/dist/test.d.cts +5 -4
  474. package/dist/test.d.ts +5 -4
  475. package/dist/test.js +2 -2
  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-35DJOBEO.cjs +0 -2
  529. package/dist/chunk-35DJOBEO.cjs.map +0 -1
  530. package/dist/chunk-3GRR4VW2.js +0 -13
  531. package/dist/chunk-3GRR4VW2.js.map +0 -1
  532. package/dist/chunk-5A7KDBDU.js +0 -2
  533. package/dist/chunk-5NHDEY2C.js +0 -2
  534. package/dist/chunk-6GGYM5SF.cjs +0 -5
  535. package/dist/chunk-6GGYM5SF.cjs.map +0 -1
  536. package/dist/chunk-EEILP4OL.cjs +0 -13
  537. package/dist/chunk-EEILP4OL.cjs.map +0 -1
  538. package/dist/chunk-FTTNKDZQ.js +0 -5
  539. package/dist/chunk-FTTNKDZQ.js.map +0 -1
  540. package/dist/chunk-H2HNKYN2.js +0 -2
  541. package/dist/chunk-H2HNKYN2.js.map +0 -1
  542. package/dist/chunk-TKFJGLUO.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/offline.ts"],"names":["openDB","name","version","resolve","reject","request","db","err","idbGetAll","store","req","idbPut","key","value","tx","idbDelete","idbClear","createOfflineStore","options","keyField","items","signal","pendingOps","syncing","online","pending","computed","syncTimer","disposed","syncNow","init","stored","ops","initPromise","interval","getKey","item","put","list","idx","i","next","queueOp","remove","op","fetchFn","serverResponse","serverItems","partial","existing"],"mappings":"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","file":"chunk-2U643GJZ.cjs","sourcesContent":["/**\n * Offline-first store with IndexedDB persistence and background sync.\n *\n * Data persists across page reloads. Changes made offline queue up\n * and sync automatically when connection returns. Conflict resolution\n * via configurable strategies (last-write-wins, merge, custom).\n *\n * ```ts\n * const todos = createOfflineStore('todos', {\n * sync: { url: '/api/todos', strategy: 'last-write-wins' },\n * });\n *\n * todos.add({ id: '1', text: 'Buy milk', done: false });\n * todos.items(); // reactive list\n * todos.syncing(); // boolean\n * todos.pending(); // number of unsynced changes\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type ConflictStrategy = 'last-write-wins' | 'client-wins' | 'server-wins' | 'manual';\n\nexport interface OfflineStoreOptions<T> {\n /** Sync configuration */\n sync?: {\n /** Server URL for sync */\n url: string;\n /** Conflict resolution strategy (default: 'last-write-wins') */\n strategy?: ConflictStrategy;\n /** Sync interval in ms (default: 30000) */\n interval?: number;\n /** Custom fetch */\n fetch?: typeof globalThis.fetch;\n /** Auth headers */\n headers?: Record<string, string>;\n };\n /** Key field for items (default: 'id') */\n keyField?: string;\n /** Version for schema migrations */\n version?: number;\n}\n\nexport interface OfflineStore<T extends Record<string, unknown>> {\n /** All items (reactive) */\n items: ReadonlySignal<T[]>;\n /** Alias for items (reactive) */\n data: ReadonlySignal<T[]>;\n /** Get a single item by key */\n get(key: string): T | undefined;\n /** Add or update an item */\n put(item: T): void;\n /** Add a new item */\n add(item: T): void;\n /** Update an existing item */\n update(key: string, partial: Partial<T>): void;\n /** Remove an item by key */\n remove(key: string): void;\n /** Clear all items */\n clear(): void;\n /** Number of unsynced changes */\n pending: ReadonlySignal<number>;\n /** Whether sync is in progress */\n syncing: ReadonlySignal<boolean>;\n /** Whether online */\n online: ReadonlySignal<boolean>;\n /** Force a sync now */\n sync(): Promise<void>;\n /** Dispose the store (stop sync, close DB) */\n dispose(): void;\n}\n\n/** An operation in the change queue */\ninterface PendingOp<T> {\n type: 'put' | 'delete';\n key: string;\n value?: T;\n timestamp: number;\n}\n\n// =========================================================================\n// IndexedDB wrapper\n// =========================================================================\n\nasync function openDB(name: string, version = 1): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n try {\n const request = indexedDB.open(name, version);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains('items')) {\n db.createObjectStore('items');\n }\n if (!db.objectStoreNames.contains('pending')) {\n db.createObjectStore('pending', { autoIncrement: true });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error('IndexedDB open failed'));\n } catch (err) {\n reject(err);\n }\n });\n}\n\nasync function idbGetAll<T>(db: IDBDatabase, store: string): Promise<T[]> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readonly');\n const req = tx.objectStore(store).getAll();\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\n\nasync function idbPut(db: IDBDatabase, store: string, key: string, value: unknown): Promise<void> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readwrite');\n tx.objectStore(store).put(value, key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n}\n\nasync function idbDelete(db: IDBDatabase, store: string, key: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readwrite');\n tx.objectStore(store).delete(key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n}\n\nasync function idbClear(db: IDBDatabase, store: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readwrite');\n tx.objectStore(store).clear();\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n}\n\n// =========================================================================\n// createOfflineStore\n// =========================================================================\n\n/**\n * Create an offline-first store backed by IndexedDB.\n */\nexport function createOfflineStore<T extends Record<string, unknown>>(\n name: string,\n options: OfflineStoreOptions<T> = {},\n): OfflineStore<T> {\n const keyField = options.keyField ?? 'id';\n const items = signal<T[]>([]);\n const pendingOps = signal<PendingOp<T>[]>([]);\n const syncing = signal(false);\n const online = signal(typeof navigator !== 'undefined' && navigator.onLine != null ? !!navigator.onLine : true);\n const pending = computed(() => pendingOps().length);\n\n let db: IDBDatabase | null = null;\n let syncTimer: ReturnType<typeof setInterval> | null = null;\n let disposed = false;\n\n // Online/offline tracking\n if (typeof window !== 'undefined') {\n window.addEventListener('online', () => {\n online.set(true);\n syncNow();\n });\n window.addEventListener('offline', () => online.set(false));\n }\n\n // Initialize — load from IndexedDB\n async function init(): Promise<void> {\n if (typeof indexedDB === 'undefined') return;\n try {\n db = await openDB(`akash-offline-${name}`, options.version ?? 1);\n const stored = await idbGetAll<T>(db, 'items');\n items.set(stored);\n const ops = await idbGetAll<PendingOp<T>>(db, 'pending');\n pendingOps.set(ops);\n } catch (err) { console.error('[AkashJS] Offline store init failed:', err); }\n }\n\n const initPromise = init();\n\n // Start periodic sync\n if (options.sync) {\n const interval = options.sync.interval ?? 30000;\n syncTimer = setInterval(() => {\n if (online() && pending() > 0 && !syncing()) {\n syncNow();\n }\n }, interval);\n }\n\n function getKey(item: T): string {\n return String((item as any)[keyField]);\n }\n\n function put(item: T): void {\n const key = getKey(item);\n items.update((list) => {\n const idx = list.findIndex((i) => getKey(i) === key);\n if (idx !== -1) {\n const next = [...list];\n next[idx] = item;\n return next;\n }\n return [...list, item];\n });\n\n queueOp({ type: 'put', key, value: item, timestamp: Date.now() });\n if (db) idbPut(db, 'items', key, item);\n }\n\n function remove(key: string): void {\n items.update((list) => list.filter((i) => getKey(i) !== key));\n queueOp({ type: 'delete', key, timestamp: Date.now() });\n if (db) idbDelete(db, 'items', key);\n }\n\n function queueOp(op: PendingOp<T>): void {\n pendingOps.update((ops) => [...ops, op]);\n if (db) {\n const tx = db.transaction('pending', 'readwrite');\n tx.objectStore('pending').add(op);\n }\n }\n\n async function syncNow(): Promise<void> {\n await initPromise;\n if (!options.sync || syncing() || disposed) return;\n const ops = pendingOps();\n if (ops.length === 0) return;\n\n syncing.set(true);\n const fetchFn = options.sync.fetch ?? globalThis.fetch.bind(globalThis);\n\n try {\n const response = await fetchFn(options.sync.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.sync.headers,\n },\n body: JSON.stringify({ ops }),\n });\n\n if (response.ok) {\n pendingOps.set([]);\n if (db) await idbClear(db, 'pending');\n\n // Fetch latest server state\n const serverResponse = await fetchFn(options.sync.url, {\n headers: options.sync.headers,\n });\n if (serverResponse.ok) {\n const serverItems = await serverResponse.json() as T[];\n items.set(serverItems);\n // Update IndexedDB\n if (db) {\n await idbClear(db, 'items');\n for (const item of serverItems) {\n await idbPut(db, 'items', getKey(item), item);\n }\n }\n }\n }\n } catch (err) { console.warn('[AkashJS] Offline sync failed:', err); }\n finally {\n syncing.set(false);\n }\n }\n\n return {\n items: () => items(),\n data: () => items(),\n get(key: string) { return items().find((i) => getKey(i) === key); },\n put,\n add: put,\n update(key: string, partial: Partial<T>) {\n const existing = items().find((i) => getKey(i) === key);\n if (existing) put({ ...existing, ...partial });\n },\n remove,\n clear() {\n items.set([]);\n pendingOps.set([]);\n if (db) {\n idbClear(db, 'items');\n idbClear(db, 'pending');\n }\n },\n pending,\n syncing: () => syncing(),\n online: () => online(),\n sync: syncNow,\n dispose() {\n disposed = true;\n if (syncTimer) clearInterval(syncTimer);\n db?.close();\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/offline.ts"],"names":["openDB","name","version","resolve","reject","request","db","err","idbGetAll","store","req","idbPut","key","value","tx","idbDelete","idbClear","createOfflineStore","options","keyField","items","signal","pendingOps","syncing","online","pending","computed","syncTimer","disposed","syncNow","init","stored","ops","initPromise","interval","getKey","item","put","list","idx","i","next","queueOp","remove","op","fetchFn","serverResponse","serverItems","partial","existing"],"mappings":"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","file":"chunk-LTMDSGQ6.cjs","sourcesContent":["/**\n * Offline-first store with IndexedDB persistence and background sync.\n *\n * Data persists across page reloads. Changes made offline queue up\n * and sync automatically when connection returns. Conflict resolution\n * via configurable strategies (last-write-wins, merge, custom).\n *\n * ```ts\n * const todos = createOfflineStore('todos', {\n * sync: { url: '/api/todos', strategy: 'last-write-wins' },\n * });\n *\n * todos.add({ id: '1', text: 'Buy milk', done: false });\n * todos.items(); // reactive list\n * todos.syncing(); // boolean\n * todos.pending(); // number of unsynced changes\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type ConflictStrategy = 'last-write-wins' | 'client-wins' | 'server-wins' | 'manual';\n\nexport interface OfflineStoreOptions<T> {\n /** Sync configuration */\n sync?: {\n /** Server URL for sync */\n url: string;\n /** Conflict resolution strategy (default: 'last-write-wins') */\n strategy?: ConflictStrategy;\n /** Sync interval in ms (default: 30000) */\n interval?: number;\n /** Custom fetch */\n fetch?: typeof globalThis.fetch;\n /** Auth headers */\n headers?: Record<string, string>;\n };\n /** Key field for items (default: 'id') */\n keyField?: string;\n /** Version for schema migrations */\n version?: number;\n}\n\nexport interface OfflineStore<T extends Record<string, unknown>> {\n /** All items (reactive) */\n items: ReadonlySignal<T[]>;\n /** Alias for items (reactive) */\n data: ReadonlySignal<T[]>;\n /** Get a single item by key */\n get(key: string): T | undefined;\n /** Add or update an item */\n put(item: T): void;\n /** Add a new item */\n add(item: T): void;\n /** Update an existing item */\n update(key: string, partial: Partial<T>): void;\n /** Remove an item by key */\n remove(key: string): void;\n /** Clear all items */\n clear(): void;\n /** Number of unsynced changes */\n pending: ReadonlySignal<number>;\n /** Whether sync is in progress */\n syncing: ReadonlySignal<boolean>;\n /** Whether online */\n online: ReadonlySignal<boolean>;\n /** Force a sync now */\n sync(): Promise<void>;\n /** Dispose the store (stop sync, close DB) */\n dispose(): void;\n}\n\n/** An operation in the change queue */\ninterface PendingOp<T> {\n type: 'put' | 'delete';\n key: string;\n value?: T;\n timestamp: number;\n}\n\n// =========================================================================\n// IndexedDB wrapper\n// =========================================================================\n\nasync function openDB(name: string, version = 1): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n try {\n const request = indexedDB.open(name, version);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains('items')) {\n db.createObjectStore('items');\n }\n if (!db.objectStoreNames.contains('pending')) {\n db.createObjectStore('pending', { autoIncrement: true });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error('IndexedDB open failed'));\n } catch (err) {\n reject(err);\n }\n });\n}\n\nasync function idbGetAll<T>(db: IDBDatabase, store: string): Promise<T[]> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readonly');\n const req = tx.objectStore(store).getAll();\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\n\nasync function idbPut(db: IDBDatabase, store: string, key: string, value: unknown): Promise<void> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readwrite');\n tx.objectStore(store).put(value, key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n}\n\nasync function idbDelete(db: IDBDatabase, store: string, key: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readwrite');\n tx.objectStore(store).delete(key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n}\n\nasync function idbClear(db: IDBDatabase, store: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const tx = db.transaction(store, 'readwrite');\n tx.objectStore(store).clear();\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n}\n\n// =========================================================================\n// createOfflineStore\n// =========================================================================\n\n/**\n * Create an offline-first store backed by IndexedDB.\n */\nexport function createOfflineStore<T extends Record<string, unknown>>(\n name: string,\n options: OfflineStoreOptions<T> = {},\n): OfflineStore<T> {\n const keyField = options.keyField ?? 'id';\n const items = signal<T[]>([]);\n const pendingOps = signal<PendingOp<T>[]>([]);\n const syncing = signal(false);\n const online = signal(typeof navigator !== 'undefined' && navigator.onLine != null ? !!navigator.onLine : true);\n const pending = computed(() => pendingOps().length);\n\n let db: IDBDatabase | null = null;\n let syncTimer: ReturnType<typeof setInterval> | null = null;\n let disposed = false;\n\n // Online/offline tracking\n if (typeof window !== 'undefined') {\n window.addEventListener('online', () => {\n online.set(true);\n syncNow();\n });\n window.addEventListener('offline', () => online.set(false));\n }\n\n // Initialize — load from IndexedDB\n async function init(): Promise<void> {\n if (typeof indexedDB === 'undefined') return;\n try {\n db = await openDB(`akash-offline-${name}`, options.version ?? 1);\n const stored = await idbGetAll<T>(db, 'items');\n items.set(stored);\n const ops = await idbGetAll<PendingOp<T>>(db, 'pending');\n pendingOps.set(ops);\n } catch (err) { console.error('[AkashJS] Offline store init failed:', err); }\n }\n\n const initPromise = init();\n\n // Start periodic sync\n if (options.sync) {\n const interval = options.sync.interval ?? 30000;\n syncTimer = setInterval(() => {\n if (online() && pending() > 0 && !syncing()) {\n syncNow();\n }\n }, interval);\n }\n\n function getKey(item: T): string {\n return String((item as any)[keyField]);\n }\n\n function put(item: T): void {\n const key = getKey(item);\n items.update((list) => {\n const idx = list.findIndex((i) => getKey(i) === key);\n if (idx !== -1) {\n const next = [...list];\n next[idx] = item;\n return next;\n }\n return [...list, item];\n });\n\n queueOp({ type: 'put', key, value: item, timestamp: Date.now() });\n if (db) idbPut(db, 'items', key, item);\n }\n\n function remove(key: string): void {\n items.update((list) => list.filter((i) => getKey(i) !== key));\n queueOp({ type: 'delete', key, timestamp: Date.now() });\n if (db) idbDelete(db, 'items', key);\n }\n\n function queueOp(op: PendingOp<T>): void {\n pendingOps.update((ops) => [...ops, op]);\n if (db) {\n const tx = db.transaction('pending', 'readwrite');\n tx.objectStore('pending').add(op);\n }\n }\n\n async function syncNow(): Promise<void> {\n await initPromise;\n if (!options.sync || syncing() || disposed) return;\n const ops = pendingOps();\n if (ops.length === 0) return;\n\n syncing.set(true);\n const fetchFn = options.sync.fetch ?? globalThis.fetch.bind(globalThis);\n\n try {\n const response = await fetchFn(options.sync.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.sync.headers,\n },\n body: JSON.stringify({ ops }),\n });\n\n if (response.ok) {\n pendingOps.set([]);\n if (db) await idbClear(db, 'pending');\n\n // Fetch latest server state\n const serverResponse = await fetchFn(options.sync.url, {\n headers: options.sync.headers,\n });\n if (serverResponse.ok) {\n const serverItems = await serverResponse.json() as T[];\n items.set(serverItems);\n // Update IndexedDB\n if (db) {\n await idbClear(db, 'items');\n for (const item of serverItems) {\n await idbPut(db, 'items', getKey(item), item);\n }\n }\n }\n }\n } catch (err) { console.warn('[AkashJS] Offline sync failed:', err); }\n finally {\n syncing.set(false);\n }\n }\n\n return {\n items: () => items(),\n data: () => items(),\n get(key: string) { return items().find((i) => getKey(i) === key); },\n put,\n add: put,\n update(key: string, partial: Partial<T>) {\n const existing = items().find((i) => getKey(i) === key);\n if (existing) put({ ...existing, ...partial });\n },\n remove,\n clear() {\n items.set([]);\n pendingOps.set([]);\n if (db) {\n idbClear(db, 'items');\n idbClear(db, 'pending');\n }\n },\n pending,\n syncing: () => syncing(),\n online: () => online(),\n sync: syncNow,\n dispose() {\n disposed = true;\n if (syncTimer) clearInterval(syncTimer);\n db?.close();\n },\n };\n}\n"]}
@@ -0,0 +1,20 @@
1
+ 'use strict';var P=`<!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ {{head}}
7
+ </head>
8
+ <body>
9
+ <div id="app">{{content}}</div>
10
+ {{scripts}}
11
+ </body>
12
+ </html>`;async function x(t){let{routes:r,render:e,outDir:n="dist",template:l=P,onPage:u,onError:g,concurrency:d=5}=t,m=Date.now(),p=typeof r=="function"?await r():r,a={rendered:[],errors:[],duration:0};for(let c=0;c<p.length;c+=d){let h=p.slice(c,c+d);await Promise.all(h.map(async s=>{try{let o=await e(s),i=l.replace("{{content}}",o).replace("{{head}}","").replace("{{scripts}}",""),f=w(s);a.rendered.push({url:s,file:`${n}/${f}`,size:new Blob([i]).size}),u?.(s,i);}catch(o){let i=o instanceof Error?o:new Error(String(o));a.errors.push({url:s,error:i.message}),g?.(s,i);}}));}return a.duration=Date.now()-m,a}function y(t){return t.filter(r=>!r.path.includes(":")&&!r.path.includes("*")).map(r=>r.path)}function v(t,r){return r.map(e=>{let n=t;for(let[l,u]of Object.entries(e))n=n.replace(`:${l}`,u);return n})}function w(t){let r=t.replace(/^\//,"").replace(/\/$/,"");return r?`${r}/index.html`:"index.html"}function E(t,r){let e=`<?xml version="1.0" encoding="UTF-8"?>
13
+ `;e+=`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
14
+ `;for(let n of r.rendered)e+=` <url>
15
+ `,e+=` <loc>${t}${n.url}</loc>
16
+ `,e+=` <lastmod>${new Date().toISOString().split("T")[0]}</lastmod>
17
+ `,e+=` </url>
18
+ `;return e+=`</urlset>
19
+ `,e}exports.a=x;exports.b=y;exports.c=v;exports.d=w;exports.e=E;//# sourceMappingURL=chunk-LWQPLKL6.cjs.map
20
+ //# sourceMappingURL=chunk-LWQPLKL6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ssg.ts"],"names":["DEFAULT_TEMPLATE","prerender","options","routesInput","render","outDir","template","onPage","onError","concurrency","start","routes","result","i","batch","url","content","html","filePath","urlToFilePath","err","error","discoverStaticRoutes","routeManifest","generatePaths","pattern","params","p","path","key","value","clean","sitemapFromResults","baseUrl","results","xml","page"],"mappings":"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","file":"chunk-LWQPLKL6.cjs","sourcesContent":["/**\n * Static Site Generation (SSG) / Prerendering.\n *\n * Pre-render pages at build time to static HTML files.\n * Combine with hydration for interactive islands.\n *\n * ```ts\n * // In build script or akash build --prerender:\n * await prerender({\n * routes: ['/', '/about', '/blog/hello'],\n * render: (url) => renderToString(App, { url }),\n * outDir: 'dist',\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface PrerenderOptions {\n /** Routes to prerender */\n routes: string[] | (() => Promise<string[]>);\n /** Render function — returns HTML for a given URL */\n render: (url: string) => Promise<string> | string;\n /** Output directory (default: 'dist') */\n outDir?: string;\n /** HTML template with {{content}} placeholder */\n template?: string;\n /** Callback per rendered page */\n onPage?: (url: string, html: string) => void;\n /** Callback on error */\n onError?: (url: string, error: Error) => void;\n /** Concurrency limit (default: 5) */\n concurrency?: number;\n}\n\nexport interface PrerenderResult {\n /** Successfully rendered pages */\n rendered: Array<{ url: string; file: string; size: number }>;\n /** Pages that failed to render */\n errors: Array<{ url: string; error: string }>;\n /** Total time in ms */\n duration: number;\n}\n\n// =========================================================================\n// Default HTML template\n// =========================================================================\n\nconst DEFAULT_TEMPLATE = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n {{head}}\n</head>\n<body>\n <div id=\"app\">{{content}}</div>\n {{scripts}}\n</body>\n</html>`;\n\n// =========================================================================\n// prerender()\n// =========================================================================\n\n/**\n * Pre-render routes to static HTML files.\n */\nexport async function prerender(options: PrerenderOptions): Promise<PrerenderResult> {\n const {\n routes: routesInput,\n render,\n outDir = 'dist',\n template = DEFAULT_TEMPLATE,\n onPage,\n onError,\n concurrency = 5,\n } = options;\n\n const start = Date.now();\n\n // Resolve routes\n const routes = typeof routesInput === 'function'\n ? await routesInput()\n : routesInput;\n\n const result: PrerenderResult = {\n rendered: [],\n errors: [],\n duration: 0,\n };\n\n // Process in batches for concurrency control\n for (let i = 0; i < routes.length; i += concurrency) {\n const batch = routes.slice(i, i + concurrency);\n await Promise.all(batch.map(async (url) => {\n try {\n const content = await render(url);\n const html = template\n .replace('{{content}}', content)\n .replace('{{head}}', '')\n .replace('{{scripts}}', '');\n\n const filePath = urlToFilePath(url);\n\n // In a real implementation, we'd write to disk here.\n // For now, we return the result for the caller to handle.\n result.rendered.push({\n url,\n file: `${outDir}/${filePath}`,\n size: new Blob([html]).size,\n });\n\n onPage?.(url, html);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n result.errors.push({ url, error: error.message });\n onError?.(url, error);\n }\n }));\n }\n\n result.duration = Date.now() - start;\n return result;\n}\n\n// =========================================================================\n// Route discovery\n// =========================================================================\n\n/**\n * Discover routes from the file system for prerendering.\n * Scans src/routes/ and returns all static (non-parameterized) paths.\n */\nexport function discoverStaticRoutes(routeManifest: Array<{ path: string }>): string[] {\n return routeManifest\n .filter((r) => !r.path.includes(':') && !r.path.includes('*'))\n .map((r) => r.path);\n}\n\n/**\n * Generate all possible paths for parameterized routes.\n *\n * ```ts\n * const paths = generatePaths('/blog/:slug', [\n * { slug: 'hello' },\n * { slug: 'world' },\n * ]);\n * // ['/blog/hello', '/blog/world']\n * ```\n */\nexport function generatePaths(\n pattern: string,\n params: Record<string, string>[],\n): string[] {\n return params.map((p) => {\n let path = pattern;\n for (const [key, value] of Object.entries(p)) {\n path = path.replace(`:${key}`, value);\n }\n return path;\n });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\n/**\n * Convert a URL path to a file path for static output.\n * / → index.html\n * /about → about/index.html\n * /blog/hello → blog/hello/index.html\n */\nexport function urlToFilePath(url: string): string {\n const clean = url.replace(/^\\//, '').replace(/\\/$/, '');\n if (!clean) return 'index.html';\n return `${clean}/index.html`;\n}\n\n/**\n * Generate a sitemap from prerender results.\n */\nexport function sitemapFromResults(\n baseUrl: string,\n results: PrerenderResult,\n): 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 page of results.rendered) {\n xml += ` <url>\\n`;\n xml += ` <loc>${baseUrl}${page.url}</loc>\\n`;\n xml += ` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n`;\n xml += ` </url>\\n`;\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkEEILP4OL_cjs=require('./chunk-EEILP4OL.cjs');function M(t){let n=chunkEEILP4OL_cjs.l(t.initial),a=chunkEEILP4OL_cjs.l(t.context??{}),d=chunkEEILP4OL_cjs.l([t.initial]),g=chunkEEILP4OL_cjs.m(()=>t.states[n()]?.type==="final"),y=chunkEEILP4OL_cjs.m(()=>{let e=t.states[n()];return e?.on?Object.keys(e.on):[]}),S=t.states[t.initial];S?.entry&&S.entry({data:a(),event:""});function E(e,i){if(g())return;let s=n(),o=t.states[s];if(!o?.on)return;let x=o.on[e];if(!x)return;let r,l,f;if(typeof x=="string")r=x;else {let T=x;r=T.target,l=T.guard,f=T.action;}let c={data:a(),event:e,payload:i};if(l&&!l(c))return;o.exit&&o.exit(c),f&&f(c,i),a.set(c.data),n.set(r),d.update(T=>[...T,r]);let v=t.states[r];v?.entry&&v.entry({data:a(),event:e});}function h(e){let i=t.states[n()];if(!i?.on)return false;let s=i.on[e];if(!s)return false;if(typeof s!="string"){let o=s;if(o.guard)return o.guard({data:a(),event:e})}return true}return {state:()=>n(),context:()=>a(),send:E,matches:e=>n()===e,done:g,reset(){n.set(t.initial),a.set(t.context??{}),d.set([t.initial]);},history:()=>d(),can:h,nextEvents:y}}exports.a=M;//# sourceMappingURL=chunk-2Q6SYE5O.cjs.map
2
- //# sourceMappingURL=chunk-2Q6SYE5O.cjs.map
1
+ 'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function M(t){let n=chunkHL2VGVJT_cjs.c(t.initial),a=chunkHL2VGVJT_cjs.c(t.context??{}),d=chunkHL2VGVJT_cjs.c([t.initial]),g=chunkHL2VGVJT_cjs.d(()=>t.states[n()]?.type==="final"),y=chunkHL2VGVJT_cjs.d(()=>{let e=t.states[n()];return e?.on?Object.keys(e.on):[]}),S=t.states[t.initial];S?.entry&&S.entry({data:a(),event:""});function E(e,i){if(g())return;let s=n(),o=t.states[s];if(!o?.on)return;let x=o.on[e];if(!x)return;let r,l,f;if(typeof x=="string")r=x;else {let T=x;r=T.target,l=T.guard,f=T.action;}let c={data:a(),event:e,payload:i};if(l&&!l(c))return;o.exit&&o.exit(c),f&&f(c,i),a.set(c.data),n.set(r),d.update(T=>[...T,r]);let v=t.states[r];v?.entry&&v.entry({data:a(),event:e});}function h(e){let i=t.states[n()];if(!i?.on)return false;let s=i.on[e];if(!s)return false;if(typeof s!="string"){let o=s;if(o.guard)return o.guard({data:a(),event:e})}return true}return {state:()=>n(),context:()=>a(),send:E,matches:e=>n()===e,done:g,reset(){n.set(t.initial),a.set(t.context??{}),d.set([t.initial]);},history:()=>d(),can:h,nextEvents:y}}exports.a=M;//# sourceMappingURL=chunk-M2OWSNOM.cjs.map
2
+ //# sourceMappingURL=chunk-M2OWSNOM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/machine.ts"],"names":["createMachine","config","currentState","signal","contextData","stateHistory","done","computed","nextEvents","stateCfg","initialStateCfg","send","event","payload","state","transition","target","guard","action","t","ctx","h","targetCfg","can"],"mappings":"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","file":"chunk-2Q6SYE5O.cjs","sourcesContent":["/**\n * State machines for complex UI flows.\n *\n * Finite state machines with typed states, events, guards,\n * actions, and reactive current state signal.\n *\n * ```ts\n * const checkout = createMachine({\n * initial: 'cart',\n * states: {\n * cart: { on: { CHECKOUT: 'shipping' } },\n * shipping: { on: { NEXT: 'payment', BACK: 'cart' } },\n * payment: { on: { PAY: 'processing', BACK: 'shipping' } },\n * processing: { on: { SUCCESS: 'complete', FAIL: 'payment' } },\n * complete: { type: 'final' },\n * },\n * });\n *\n * checkout.state(); // 'cart'\n * checkout.send('CHECKOUT');\n * checkout.state(); // 'shipping'\n * checkout.matches('shipping'); // true\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface MachineConfig<TState extends string, TEvent extends string, TContext = unknown> {\n /** Initial state */\n initial: TState;\n /** Initial context data */\n context?: TContext;\n /** State definitions */\n states: Record<TState, StateConfig<TState, TEvent, TContext>>;\n}\n\nexport interface StateConfig<TState extends string, TEvent extends string, TContext = unknown> {\n /** Transitions: event → target state */\n on?: Partial<Record<TEvent, TState | TransitionConfig<TState, TEvent, TContext>>>;\n /** Entry action — runs when entering this state */\n entry?: (ctx: MachineContext<TContext>) => void;\n /** Exit action — runs when leaving this state */\n exit?: (ctx: MachineContext<TContext>) => void;\n /** Final state — machine stops accepting events */\n type?: 'final';\n}\n\nexport interface TransitionConfig<TState extends string, TEvent extends string, TContext = unknown> {\n /** Target state */\n target: TState;\n /** Guard — transition only if this returns true */\n guard?: (ctx: MachineContext<TContext>) => boolean;\n /** Action — runs during the transition */\n action?: (ctx: MachineContext<TContext>) => void;\n}\n\nexport interface MachineContext<TContext> {\n /** The context data (mutable) */\n data: TContext;\n /** The current event that triggered the transition */\n event: string;\n /** Optional payload passed with the event via send(event, payload) */\n payload?: unknown;\n}\n\nexport interface Machine<TState extends string, TEvent extends string, TContext = unknown> {\n /** Current state (reactive signal) */\n state: ReadonlySignal<TState>;\n /** Context data (reactive signal) */\n context: ReadonlySignal<TContext>;\n /** Send an event to the machine */\n send(event: TEvent, payload?: Record<string, unknown>): void;\n /** Check if currently in a specific state */\n matches(state: TState): boolean;\n /** Whether the machine is in a final state */\n done: ReadonlySignal<boolean>;\n /** Reset to initial state */\n reset(): void;\n /** State history */\n history: ReadonlySignal<TState[]>;\n /** Can a specific event be sent in the current state? */\n can(event: TEvent): boolean;\n /** Get all possible events from current state */\n nextEvents: ReadonlySignal<TEvent[]>;\n}\n\n// =========================================================================\n// createMachine\n// =========================================================================\n\n/**\n * Create a finite state machine.\n */\nexport function createMachine<\n TState extends string,\n TEvent extends string,\n TContext = unknown,\n>(config: MachineConfig<TState, TEvent, TContext>): Machine<TState, TEvent, TContext> {\n const currentState = signal<TState>(config.initial);\n const contextData = signal<TContext>((config.context ?? {}) as TContext);\n const stateHistory = signal<TState[]>([config.initial]);\n\n const done = computed(() => {\n const stateCfg = config.states[currentState()];\n return stateCfg?.type === 'final';\n });\n\n const nextEvents = computed((): TEvent[] => {\n const stateCfg = config.states[currentState()];\n if (!stateCfg?.on) return [];\n return Object.keys(stateCfg.on) as TEvent[];\n });\n\n // Run entry action for initial state\n const initialStateCfg = config.states[config.initial];\n if (initialStateCfg?.entry) {\n initialStateCfg.entry({ data: contextData() as TContext, event: '' });\n }\n\n function send(event: TEvent, payload?: unknown): void {\n if (done()) return; // Final state — no more transitions\n\n const state = currentState();\n const stateCfg = config.states[state];\n if (!stateCfg?.on) return;\n\n const transition = stateCfg.on[event];\n if (!transition) return;\n\n let target: TState;\n let guard: ((ctx: MachineContext<TContext>) => boolean) | undefined;\n let action: ((ctx: MachineContext<TContext>) => void) | undefined;\n\n if (typeof transition === 'string') {\n target = transition as TState;\n } else {\n const t = transition as TransitionConfig<TState, TEvent, TContext>;\n target = t.target;\n guard = t.guard;\n action = t.action;\n }\n\n const ctx: MachineContext<TContext> = {\n data: contextData() as TContext,\n event,\n payload,\n };\n\n // Check guard\n if (guard && !guard(ctx)) return;\n\n // Exit action\n if (stateCfg.exit) {\n stateCfg.exit(ctx);\n }\n\n // Transition action — pass payload as second argument for convenience\n if (action) {\n (action as Function)(ctx, payload);\n }\n\n // Update context if modified\n contextData.set(ctx.data);\n\n // Enter new state\n currentState.set(target);\n stateHistory.update((h) => [...h, target]);\n\n // Entry action for new state\n const targetCfg = config.states[target];\n if (targetCfg?.entry) {\n targetCfg.entry({ data: contextData() as TContext, event });\n }\n }\n\n function can(event: TEvent): boolean {\n const stateCfg = config.states[currentState()];\n if (!stateCfg?.on) return false;\n const transition = stateCfg.on[event];\n if (!transition) return false;\n\n if (typeof transition !== 'string') {\n const t = transition as TransitionConfig<TState, TEvent, TContext>;\n if (t.guard) {\n return t.guard({ data: contextData() as TContext, event });\n }\n }\n return true;\n }\n\n return {\n state: () => currentState(),\n context: () => contextData(),\n send,\n matches: (state: TState) => currentState() === state,\n done,\n reset() {\n currentState.set(config.initial);\n contextData.set((config.context ?? {}) as TContext);\n stateHistory.set([config.initial]);\n },\n history: () => stateHistory(),\n can,\n nextEvents,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/machine.ts"],"names":["createMachine","config","currentState","signal","contextData","stateHistory","done","computed","nextEvents","stateCfg","initialStateCfg","send","event","payload","state","transition","target","guard","action","t","ctx","h","targetCfg","can"],"mappings":"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","file":"chunk-M2OWSNOM.cjs","sourcesContent":["/**\n * State machines for complex UI flows.\n *\n * Finite state machines with typed states, events, guards,\n * actions, and reactive current state signal.\n *\n * ```ts\n * const checkout = createMachine({\n * initial: 'cart',\n * states: {\n * cart: { on: { CHECKOUT: 'shipping' } },\n * shipping: { on: { NEXT: 'payment', BACK: 'cart' } },\n * payment: { on: { PAY: 'processing', BACK: 'shipping' } },\n * processing: { on: { SUCCESS: 'complete', FAIL: 'payment' } },\n * complete: { type: 'final' },\n * },\n * });\n *\n * checkout.state(); // 'cart'\n * checkout.send('CHECKOUT');\n * checkout.state(); // 'shipping'\n * checkout.matches('shipping'); // true\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface MachineConfig<TState extends string, TEvent extends string, TContext = unknown> {\n /** Initial state */\n initial: TState;\n /** Initial context data */\n context?: TContext;\n /** State definitions */\n states: Record<TState, StateConfig<TState, TEvent, TContext>>;\n}\n\nexport interface StateConfig<TState extends string, TEvent extends string, TContext = unknown> {\n /** Transitions: event → target state */\n on?: Partial<Record<TEvent, TState | TransitionConfig<TState, TEvent, TContext>>>;\n /** Entry action — runs when entering this state */\n entry?: (ctx: MachineContext<TContext>) => void;\n /** Exit action — runs when leaving this state */\n exit?: (ctx: MachineContext<TContext>) => void;\n /** Final state — machine stops accepting events */\n type?: 'final';\n}\n\nexport interface TransitionConfig<TState extends string, TEvent extends string, TContext = unknown> {\n /** Target state */\n target: TState;\n /** Guard — transition only if this returns true */\n guard?: (ctx: MachineContext<TContext>) => boolean;\n /** Action — runs during the transition */\n action?: (ctx: MachineContext<TContext>) => void;\n}\n\nexport interface MachineContext<TContext> {\n /** The context data (mutable) */\n data: TContext;\n /** The current event that triggered the transition */\n event: string;\n /** Optional payload passed with the event via send(event, payload) */\n payload?: unknown;\n}\n\nexport interface Machine<TState extends string, TEvent extends string, TContext = unknown> {\n /** Current state (reactive signal) */\n state: ReadonlySignal<TState>;\n /** Context data (reactive signal) */\n context: ReadonlySignal<TContext>;\n /** Send an event to the machine */\n send(event: TEvent, payload?: Record<string, unknown>): void;\n /** Check if currently in a specific state */\n matches(state: TState): boolean;\n /** Whether the machine is in a final state */\n done: ReadonlySignal<boolean>;\n /** Reset to initial state */\n reset(): void;\n /** State history */\n history: ReadonlySignal<TState[]>;\n /** Can a specific event be sent in the current state? */\n can(event: TEvent): boolean;\n /** Get all possible events from current state */\n nextEvents: ReadonlySignal<TEvent[]>;\n}\n\n// =========================================================================\n// createMachine\n// =========================================================================\n\n/**\n * Create a finite state machine.\n */\nexport function createMachine<\n TState extends string,\n TEvent extends string,\n TContext = unknown,\n>(config: MachineConfig<TState, TEvent, TContext>): Machine<TState, TEvent, TContext> {\n const currentState = signal<TState>(config.initial);\n const contextData = signal<TContext>((config.context ?? {}) as TContext);\n const stateHistory = signal<TState[]>([config.initial]);\n\n const done = computed(() => {\n const stateCfg = config.states[currentState()];\n return stateCfg?.type === 'final';\n });\n\n const nextEvents = computed((): TEvent[] => {\n const stateCfg = config.states[currentState()];\n if (!stateCfg?.on) return [];\n return Object.keys(stateCfg.on) as TEvent[];\n });\n\n // Run entry action for initial state\n const initialStateCfg = config.states[config.initial];\n if (initialStateCfg?.entry) {\n initialStateCfg.entry({ data: contextData() as TContext, event: '' });\n }\n\n function send(event: TEvent, payload?: unknown): void {\n if (done()) return; // Final state — no more transitions\n\n const state = currentState();\n const stateCfg = config.states[state];\n if (!stateCfg?.on) return;\n\n const transition = stateCfg.on[event];\n if (!transition) return;\n\n let target: TState;\n let guard: ((ctx: MachineContext<TContext>) => boolean) | undefined;\n let action: ((ctx: MachineContext<TContext>) => void) | undefined;\n\n if (typeof transition === 'string') {\n target = transition as TState;\n } else {\n const t = transition as TransitionConfig<TState, TEvent, TContext>;\n target = t.target;\n guard = t.guard;\n action = t.action;\n }\n\n const ctx: MachineContext<TContext> = {\n data: contextData() as TContext,\n event,\n payload,\n };\n\n // Check guard\n if (guard && !guard(ctx)) return;\n\n // Exit action\n if (stateCfg.exit) {\n stateCfg.exit(ctx);\n }\n\n // Transition action — pass payload as second argument for convenience\n if (action) {\n (action as Function)(ctx, payload);\n }\n\n // Update context if modified\n contextData.set(ctx.data);\n\n // Enter new state\n currentState.set(target);\n stateHistory.update((h) => [...h, target]);\n\n // Entry action for new state\n const targetCfg = config.states[target];\n if (targetCfg?.entry) {\n targetCfg.entry({ data: contextData() as TContext, event });\n }\n }\n\n function can(event: TEvent): boolean {\n const stateCfg = config.states[currentState()];\n if (!stateCfg?.on) return false;\n const transition = stateCfg.on[event];\n if (!transition) return false;\n\n if (typeof transition !== 'string') {\n const t = transition as TransitionConfig<TState, TEvent, TContext>;\n if (t.guard) {\n return t.guard({ data: contextData() as TContext, event });\n }\n }\n return true;\n }\n\n return {\n state: () => currentState(),\n context: () => contextData(),\n send,\n matches: (state: TState) => currentState() === state,\n done,\n reset() {\n currentState.set(config.initial);\n contextData.set((config.context ?? {}) as TContext);\n stateHistory.set([config.initial]);\n },\n history: () => stateHistory(),\n can,\n nextEvents,\n };\n}\n"]}
@@ -0,0 +1,20 @@
1
+ var P=`<!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ {{head}}
7
+ </head>
8
+ <body>
9
+ <div id="app">{{content}}</div>
10
+ {{scripts}}
11
+ </body>
12
+ </html>`;async function x(t){let{routes:r,render:e,outDir:n="dist",template:l=P,onPage:u,onError:g,concurrency:d=5}=t,m=Date.now(),p=typeof r=="function"?await r():r,a={rendered:[],errors:[],duration:0};for(let c=0;c<p.length;c+=d){let h=p.slice(c,c+d);await Promise.all(h.map(async s=>{try{let o=await e(s),i=l.replace("{{content}}",o).replace("{{head}}","").replace("{{scripts}}",""),f=w(s);a.rendered.push({url:s,file:`${n}/${f}`,size:new Blob([i]).size}),u?.(s,i);}catch(o){let i=o instanceof Error?o:new Error(String(o));a.errors.push({url:s,error:i.message}),g?.(s,i);}}));}return a.duration=Date.now()-m,a}function y(t){return t.filter(r=>!r.path.includes(":")&&!r.path.includes("*")).map(r=>r.path)}function v(t,r){return r.map(e=>{let n=t;for(let[l,u]of Object.entries(e))n=n.replace(`:${l}`,u);return n})}function w(t){let r=t.replace(/^\//,"").replace(/\/$/,"");return r?`${r}/index.html`:"index.html"}function E(t,r){let e=`<?xml version="1.0" encoding="UTF-8"?>
13
+ `;e+=`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
14
+ `;for(let n of r.rendered)e+=` <url>
15
+ `,e+=` <loc>${t}${n.url}</loc>
16
+ `,e+=` <lastmod>${new Date().toISOString().split("T")[0]}</lastmod>
17
+ `,e+=` </url>
18
+ `;return e+=`</urlset>
19
+ `,e}export{x as a,y as b,v as c,w as d,E as e};//# sourceMappingURL=chunk-MADMPRT2.js.map
20
+ //# sourceMappingURL=chunk-MADMPRT2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ssg.ts"],"names":["DEFAULT_TEMPLATE","prerender","options","routesInput","render","outDir","template","onPage","onError","concurrency","start","routes","result","i","batch","url","content","html","filePath","urlToFilePath","err","error","discoverStaticRoutes","routeManifest","generatePaths","pattern","params","p","path","key","value","clean","sitemapFromResults","baseUrl","results","xml","page"],"mappings":"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","file":"chunk-MADMPRT2.js","sourcesContent":["/**\n * Static Site Generation (SSG) / Prerendering.\n *\n * Pre-render pages at build time to static HTML files.\n * Combine with hydration for interactive islands.\n *\n * ```ts\n * // In build script or akash build --prerender:\n * await prerender({\n * routes: ['/', '/about', '/blog/hello'],\n * render: (url) => renderToString(App, { url }),\n * outDir: 'dist',\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface PrerenderOptions {\n /** Routes to prerender */\n routes: string[] | (() => Promise<string[]>);\n /** Render function — returns HTML for a given URL */\n render: (url: string) => Promise<string> | string;\n /** Output directory (default: 'dist') */\n outDir?: string;\n /** HTML template with {{content}} placeholder */\n template?: string;\n /** Callback per rendered page */\n onPage?: (url: string, html: string) => void;\n /** Callback on error */\n onError?: (url: string, error: Error) => void;\n /** Concurrency limit (default: 5) */\n concurrency?: number;\n}\n\nexport interface PrerenderResult {\n /** Successfully rendered pages */\n rendered: Array<{ url: string; file: string; size: number }>;\n /** Pages that failed to render */\n errors: Array<{ url: string; error: string }>;\n /** Total time in ms */\n duration: number;\n}\n\n// =========================================================================\n// Default HTML template\n// =========================================================================\n\nconst DEFAULT_TEMPLATE = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n {{head}}\n</head>\n<body>\n <div id=\"app\">{{content}}</div>\n {{scripts}}\n</body>\n</html>`;\n\n// =========================================================================\n// prerender()\n// =========================================================================\n\n/**\n * Pre-render routes to static HTML files.\n */\nexport async function prerender(options: PrerenderOptions): Promise<PrerenderResult> {\n const {\n routes: routesInput,\n render,\n outDir = 'dist',\n template = DEFAULT_TEMPLATE,\n onPage,\n onError,\n concurrency = 5,\n } = options;\n\n const start = Date.now();\n\n // Resolve routes\n const routes = typeof routesInput === 'function'\n ? await routesInput()\n : routesInput;\n\n const result: PrerenderResult = {\n rendered: [],\n errors: [],\n duration: 0,\n };\n\n // Process in batches for concurrency control\n for (let i = 0; i < routes.length; i += concurrency) {\n const batch = routes.slice(i, i + concurrency);\n await Promise.all(batch.map(async (url) => {\n try {\n const content = await render(url);\n const html = template\n .replace('{{content}}', content)\n .replace('{{head}}', '')\n .replace('{{scripts}}', '');\n\n const filePath = urlToFilePath(url);\n\n // In a real implementation, we'd write to disk here.\n // For now, we return the result for the caller to handle.\n result.rendered.push({\n url,\n file: `${outDir}/${filePath}`,\n size: new Blob([html]).size,\n });\n\n onPage?.(url, html);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n result.errors.push({ url, error: error.message });\n onError?.(url, error);\n }\n }));\n }\n\n result.duration = Date.now() - start;\n return result;\n}\n\n// =========================================================================\n// Route discovery\n// =========================================================================\n\n/**\n * Discover routes from the file system for prerendering.\n * Scans src/routes/ and returns all static (non-parameterized) paths.\n */\nexport function discoverStaticRoutes(routeManifest: Array<{ path: string }>): string[] {\n return routeManifest\n .filter((r) => !r.path.includes(':') && !r.path.includes('*'))\n .map((r) => r.path);\n}\n\n/**\n * Generate all possible paths for parameterized routes.\n *\n * ```ts\n * const paths = generatePaths('/blog/:slug', [\n * { slug: 'hello' },\n * { slug: 'world' },\n * ]);\n * // ['/blog/hello', '/blog/world']\n * ```\n */\nexport function generatePaths(\n pattern: string,\n params: Record<string, string>[],\n): string[] {\n return params.map((p) => {\n let path = pattern;\n for (const [key, value] of Object.entries(p)) {\n path = path.replace(`:${key}`, value);\n }\n return path;\n });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\n/**\n * Convert a URL path to a file path for static output.\n * / → index.html\n * /about → about/index.html\n * /blog/hello → blog/hello/index.html\n */\nexport function urlToFilePath(url: string): string {\n const clean = url.replace(/^\\//, '').replace(/\\/$/, '');\n if (!clean) return 'index.html';\n return `${clean}/index.html`;\n}\n\n/**\n * Generate a sitemap from prerender results.\n */\nexport function sitemapFromResults(\n baseUrl: string,\n results: PrerenderResult,\n): 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 page of results.rendered) {\n xml += ` <url>\\n`;\n xml += ` <loc>${baseUrl}${page.url}</loc>\\n`;\n xml += ` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n`;\n xml += ` </url>\\n`;\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ function s(e){return {_type:"directive",hooks:e}}function c(e){return s({mounted(n,t){let i=e(n,t);typeof i=="function"&&(n.__directiveCleanup=i);},unmounted(n){n.__directiveCleanup?.();}})}var a=Symbol("akash.directives");function d(e,n,t,i){let o={value:t,arg:i?.arg,modifiers:i?.modifiers},r=e[a]??[];r.push({directive:n,binding:o}),e[a]=r,n.hooks.mounted?.(e,o);}function v(e,n,t){let o=(e[a]??[]).find(r=>r.directive===n);if(o){let r=o.binding.value;o.binding={...o.binding,value:t,oldValue:r},n.hooks.updated?.(e,o.binding);}}function u(e){let n=e[a]??[];for(let t of n)t.directive.hooks.unmounted?.(e,t.binding);delete e[a];}var m=s({mounted(e){requestAnimationFrame(()=>e.focus());}}),l=s({mounted(e,{value:n}){let t=i=>{e.contains(i.target)||n();};document.addEventListener("click",t,true),e.__vClickOutside=t;},unmounted(e){document.removeEventListener("click",e.__vClickOutside,true),delete e.__vClickOutside;}}),T=s({mounted(e,{value:n}){let t=null,i=n.duration??500,o=()=>{t=setTimeout(n.handler,i);},r=()=>{t&&(clearTimeout(t),t=null);};e.addEventListener("pointerdown",o),e.addEventListener("pointerup",r),e.addEventListener("pointerleave",r),e.__vLongPress={start:o,cancel:r};},unmounted(e){let n=e.__vLongPress;n&&(e.removeEventListener("pointerdown",n.start),e.removeEventListener("pointerup",n.cancel),e.removeEventListener("pointerleave",n.cancel));}}),p=s({mounted(e,{value:n}){let t=new IntersectionObserver(i=>{n(i[0].isIntersecting);});t.observe(e),e.__vIntersect=t;},unmounted(e){e.__vIntersect?.disconnect();}}),g=s({mounted(e,{value:n}){let t=new ResizeObserver(i=>{n(i[0]);});t.observe(e),e.__vResize=t;},unmounted(e){e.__vResize?.disconnect();}});export{s as a,c as b,d as c,v as d,u as e,m as f,l as g,T as h,p as i,g as j};//# sourceMappingURL=chunk-MDHWM3C2.js.map
2
+ //# sourceMappingURL=chunk-MDHWM3C2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/directive.ts"],"names":["defineDirective","hooks","directiveFromFn","fn","el","binding","cleanup","DIRECTIVE_KEY","applyDirective","directive","value","options","states","updateDirective","newValue","state","s","oldValue","removeDirectives","vAutoFocus","vClickOutside","handler","listener","e","vLongPress","timer","duration","start","cancel","fns","vIntersect","callback","observer","entries","vResize"],"mappings":"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","file":"chunk-MDHWM3C2.js","sourcesContent":["/**\n * Custom directive system.\n *\n * Reusable attribute behaviors with lifecycle hooks.\n * Directives attach behavior to elements without components.\n *\n * ```ts\n * const vAutoFocus = defineDirective({\n * mounted(el) { el.focus(); },\n * });\n *\n * const vTooltip = defineDirective<string>({\n * mounted(el, { value }) { addTooltip(el, value); },\n * updated(el, { value }) { updateTooltip(el, value); },\n * unmounted(el) { removeTooltip(el); },\n * });\n *\n * // Usage:\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello tooltip');\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface DirectiveBinding<T = any> {\n /** Current value passed to the directive */\n value: T;\n /** Previous value (on update) */\n oldValue?: T;\n /** Argument (e.g., v-on:click → arg = 'click') */\n arg?: string;\n /** Modifiers (e.g., v-on.prevent → modifiers.prevent = true) */\n modifiers?: Record<string, boolean>;\n}\n\nexport interface DirectiveHooks<T = any> {\n /** Called when the element is inserted into the DOM */\n mounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called when the bound value updates */\n updated?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called before the element is removed from the DOM */\n unmounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n}\n\nexport interface Directive<T = any> {\n _type: 'directive';\n hooks: DirectiveHooks<T>;\n}\n\n// =========================================================================\n// defineDirective\n// =========================================================================\n\n/**\n * Define a custom directive.\n *\n * ```ts\n * const vClickOutside = defineDirective<() => void>({\n * mounted(el, { value: handler }) {\n * const listener = (e: Event) => {\n * if (!el.contains(e.target as Node)) handler();\n * };\n * document.addEventListener('click', listener);\n * (el as any).__clickOutside = listener;\n * },\n * unmounted(el) {\n * document.removeEventListener('click', (el as any).__clickOutside);\n * },\n * });\n * ```\n */\nexport function defineDirective<T = any>(hooks: DirectiveHooks<T>): Directive<T> {\n return { _type: 'directive', hooks };\n}\n\n/**\n * Shorthand: directive from a single function (runs on mount).\n */\nexport function directiveFromFn<T = any>(\n fn: (el: HTMLElement, binding: DirectiveBinding<T>) => void | (() => void),\n): Directive<T> {\n return defineDirective<T>({\n mounted(el, binding) {\n const cleanup = fn(el, binding);\n if (typeof cleanup === 'function') {\n (el as any).__directiveCleanup = cleanup;\n }\n },\n unmounted(el) {\n (el as any).__directiveCleanup?.();\n },\n });\n}\n\n// =========================================================================\n// applyDirective — attach a directive to an element\n// =========================================================================\n\nconst DIRECTIVE_KEY = Symbol('akash.directives');\n\ninterface DirectiveState {\n directive: Directive;\n binding: DirectiveBinding;\n}\n\n/**\n * Apply a directive to an element.\n *\n * ```ts\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello');\n * ```\n */\nexport function applyDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n value?: T,\n options?: { arg?: string; modifiers?: Record<string, boolean> },\n): void {\n const binding: DirectiveBinding<T> = {\n value: value as T,\n arg: options?.arg,\n modifiers: options?.modifiers,\n };\n\n // Store directive state on element\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n states.push({ directive, binding });\n (el as any)[DIRECTIVE_KEY] = states;\n\n // Call mounted hook\n directive.hooks.mounted?.(el, binding);\n}\n\n/**\n * Update a directive's value on an element.\n */\nexport function updateDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n newValue: T,\n): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n const state = states.find((s) => s.directive === directive);\n\n if (state) {\n const oldValue = state.binding.value;\n state.binding = { ...state.binding, value: newValue, oldValue };\n directive.hooks.updated?.(el, state.binding);\n }\n}\n\n/**\n * Remove all directives from an element (call on unmount).\n */\nexport function removeDirectives(el: HTMLElement): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n for (const state of states) {\n state.directive.hooks.unmounted?.(el, state.binding);\n }\n delete (el as any)[DIRECTIVE_KEY];\n}\n\n// =========================================================================\n// Built-in directives\n// =========================================================================\n\n/** Auto-focus an element when mounted */\nexport const vAutoFocus = defineDirective({\n mounted(el) {\n requestAnimationFrame(() => el.focus());\n },\n});\n\n/** Click outside handler */\nexport const vClickOutside = defineDirective<() => void>({\n mounted(el, { value: handler }) {\n const listener = (e: Event) => {\n if (!el.contains(e.target as Node)) handler();\n };\n document.addEventListener('click', listener, true);\n (el as any).__vClickOutside = listener;\n },\n unmounted(el) {\n document.removeEventListener('click', (el as any).__vClickOutside, true);\n delete (el as any).__vClickOutside;\n },\n});\n\n/** Long press handler */\nexport const vLongPress = defineDirective<{ handler: () => void; duration?: number }>({\n mounted(el, { value }) {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const duration = value.duration ?? 500;\n\n const start = () => { timer = setTimeout(value.handler, duration); };\n const cancel = () => { if (timer) { clearTimeout(timer); timer = null; } };\n\n el.addEventListener('pointerdown', start);\n el.addEventListener('pointerup', cancel);\n el.addEventListener('pointerleave', cancel);\n\n (el as any).__vLongPress = { start, cancel };\n },\n unmounted(el) {\n const fns = (el as any).__vLongPress;\n if (fns) {\n el.removeEventListener('pointerdown', fns.start);\n el.removeEventListener('pointerup', fns.cancel);\n el.removeEventListener('pointerleave', fns.cancel);\n }\n },\n});\n\n/** Intersection observer — triggers callback when element enters viewport */\nexport const vIntersect = defineDirective<(isIntersecting: boolean) => void>({\n mounted(el, { value: callback }) {\n const observer = new IntersectionObserver((entries) => {\n callback(entries[0].isIntersecting);\n });\n observer.observe(el);\n (el as any).__vIntersect = observer;\n },\n unmounted(el) {\n (el as any).__vIntersect?.disconnect();\n },\n});\n\n/** Resize observer — triggers callback on element resize */\nexport const vResize = defineDirective<(entry: ResizeObserverEntry) => void>({\n mounted(el, { value: callback }) {\n const observer = new ResizeObserver((entries) => {\n callback(entries[0]);\n });\n observer.observe(el);\n (el as any).__vResize = observer;\n },\n unmounted(el) {\n (el as any).__vResize?.disconnect();\n },\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import {c}from'./chunk-2UATNCKC.js';var v=0;function h(u={}){let{maxVisible:T=5,defaultDuration:l=3e3,position:f="top-right"}=u,i=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$1(r),p);e.set(r,g);}return r}function c$1(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$1,dismissAll:b}}export{h as a};//# sourceMappingURL=chunk-MGFRVOM5.js.map
2
+ //# sourceMappingURL=chunk-MGFRVOM5.js.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":"oCAyEA,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,CAAAA,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,GAAAA,CAAQT,CAAE,CAAA,CAAGC,CAAQ,CAAA,CACpDN,CAAAA,CAAO,GAAA,CAAIK,EAAIQ,CAAK,EACtB,CAEA,OAAOR,CACT,CAEA,SAASS,GAAAA,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,GAAAA,CACA,UAAA,CAAAE,CACF,CACF","file":"chunk-MGFRVOM5.js","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
+ import {c,e}from'./chunk-2UATNCKC.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-MNUOIAXS.js.map
2
+ //# sourceMappingURL=chunk-MNUOIAXS.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-MNUOIAXS.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 chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var h=class{entry;constructor(s,c){this.entry={value:s,timestamp:Date.now(),peerId:c};}get value(){return this.entry.value}get timestamp(){return this.entry.timestamp}set(s,c){let r=Date.now();return this.entry={value:s,timestamp:Math.max(r,this.entry.timestamp+1),peerId:c},true}merge(s){return s.timestamp>this.entry.timestamp||s.timestamp===this.entry.timestamp&&(!s.peerId||!this.entry.peerId||s.peerId>=this.entry.peerId)?(this.entry=s,true):false}toEntry(){return {...this.entry}}};function L(i){let s=null,c=[],r=[];return {send(n){s?.send(JSON.stringify({...n,type:"op",room:i.room}));},onReceive(n){c.push(n);let t=false;return ()=>{if(t)return;t=true;let o=c.indexOf(n);o!==-1&&c.splice(o,1);}},onPresence(n){return r.push(n),()=>{let t=r.indexOf(n);t!==-1&&r.splice(t,1);}},sendPresence(n){s?.send(JSON.stringify({type:"presence",room:i.room,data:n}));},connect(){s=new WebSocket(i.url,i.protocols),s.onmessage=n=>{try{let t=JSON.parse(n.data);if(t.type==="op")for(let o of c)o(t);else if(t.type==="presence")for(let o of r)o(t.peerId,t.data);}catch{}},s.onopen=()=>{s?.send(JSON.stringify({type:"join",room:i.room}));};},disconnect(){s?.close(),s=null;}}}function W(){let i=[],s=[];return {send(c){for(let r of i)r(c);},onReceive(c){i.push(c);let r=false;return ()=>{if(r)return;r=true;let n=i.indexOf(c);n!==-1&&i.splice(n,1);}},sendPresence(c,r){for(let n of s)n(r??"unknown",c);},onPresence(c){s.push(c);let r=false;return ()=>{if(r)return;r=true;let n=s.indexOf(c);n!==-1&&s.splice(n,1);}},connect(){},disconnect(){}}}var D=0;function _(i,s,c){let r,n;typeof i=="string"?(r=s,n=c??{}):(r=i,n=s??{});let t=n.peerId??`peer-${++D}-${Date.now()}`,o=n.transport??W(),l=new Map,u={};for(let[e,a]of Object.entries(r))l.set(e,new h(a,t)),u[e]=chunkHL2VGVJT_cjs.c(a);let y={};for(let e of Object.keys(r)){let a=u[e],d=l.get(e),p=(()=>a());p.set=k=>{d.set(k,t),a.set(k),o.send({type:"set",key:e,value:k,timestamp:d.timestamp,peerId:t});},p.update=k=>{p.set(k(a()));},p.peek=()=>a.peek(),y[e]=p;}let m=chunkHL2VGVJT_cjs.c([]),g=chunkHL2VGVJT_cjs.c(false),v=chunkHL2VGVJT_cjs.c(n.presence??{}),x=chunkHL2VGVJT_cjs.c(new Map),T=chunkHL2VGVJT_cjs.c([]);function O(e,a){if(e in u){u[e].set(a);let d=l.get(e);d&&d.set(a,t),o.send({type:"set",key:e,value:a,timestamp:Date.now(),peerId:t});}T.update(d=>d.filter(p=>p.key!==e));}let R=o.onReceive(e=>{if(e.peerId!==t&&e.type==="set"&&l.has(e.key)){let a=l.get(e.key),d=a.value,p=a.timestamp;if(n.onConflict&&p>0&&Math.abs(e.timestamp-p)<1e3&&e.peerId!==t){let w={key:e.key,localValue:d,remoteValue:e.value,localTimestamp:p,remoteTimestamp:e.timestamp,remotePeerId:e.peerId},S;try{S=n.onConflict(w);}catch(b){console.warn("[AkashJS Sync] onConflict handler threw, falling back to LWW:",b),a.merge({value:e.value,timestamp:e.timestamp,peerId:e.peerId})&&u[e.key].set(e.value),S="__fallback__";}S==="__fallback__"||(S!==void 0?(a.set(S,t),u[e.key].set(S),o.send({type:"set",key:e.key,value:S,timestamp:Date.now(),peerId:t})):T.update(b=>[...b,w]));}else a.merge({value:e.value,timestamp:e.timestamp,peerId:e.peerId})&&u[e.key].set(e.value);}}),P=v.set;v.set=e=>{P.call(v,e),o.sendPresence?.(e,t);};let C=o.onPresence?.((e,a)=>{e!==t&&x.update(d=>{let p=new Map(d);return a===null?p.delete(e):p.set(e,a),p});});return {state:y,peers:()=>m(),presence:v,peerPresence:()=>x(),conflicts:()=>T(),resolveConflict:O,peerId:t,connected:()=>g(),connect(){o.connect(),g.set(true);let e=v();Object.keys(e).length>0&&o.sendPresence?.(e,t);},disconnect(){o.sendPresence?.(null,t),o.disconnect(),g.set(false);},dispose(){o.sendPresence?.(null,t),R(),C?.(),o.disconnect();}}}function j(i,s){let c=s?.throttle??50,r=s?.target??(typeof document<"u"?document:null),n=chunkHL2VGVJT_cjs.c(0),t=chunkHL2VGVJT_cjs.c(0),o=0,l=null;function u(y){n.set(y.clientX),t.set(y.clientY);let m=Date.now();m-o>=c?(o=m,i.presence.set({...i.presence.peek?.()??{},cursor:{x:y.clientX,y:y.clientY}})):l||(l=setTimeout(()=>{l=null,o=Date.now(),i.presence.set({...i.presence.peek?.()??{},cursor:{x:n.peek(),y:t.peek()}});},c-(m-o)));}return r?.addEventListener?.("mousemove",u),{x:()=>n(),y:()=>t(),dispose(){r?.removeEventListener?.("mousemove",u),l&&clearTimeout(l);}}}function A(i,s){let c=s?.timeout??2e3,r=chunkHL2VGVJT_cjs.c(false),n=null;function t(){r.set(true),i.presence.set({...i.presence.peek?.()??{},typing:true}),n&&clearTimeout(n),n=setTimeout(o,c);}function o(){r.set(false),i.presence.set({...i.presence.peek?.()??{},typing:false}),n&&(clearTimeout(n),n=null);}let l=chunkHL2VGVJT_cjs.d(()=>{let u=i.peerPresence(),y=[];if(u instanceof Map)for(let[m,g]of u)g&&typeof g=="object"&&g.typing&&y.push(m);return y});return {isTyping:()=>r(),othersTyping:l,start:t,stop:o}}exports.a=h;exports.b=L;exports.c=W;exports.d=_;exports.e=j;exports.f=A;//# sourceMappingURL=chunk-ND2HZRMR.cjs.map
2
+ //# sourceMappingURL=chunk-ND2HZRMR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sync.ts"],"names":["LWWRegister","initialValue","peerId","value","ts","remote","createWebSocketTransport","options","ws","opHandlers","presenceHandlers","op","handler","removed","i","data","e","msg","h","createLocalTransport","senderPeerId","peerIdCounter","createSync","roomIdOrState","stateOrOptions","maybeOptions","initialState","transport","registers","stateSignals","key","signal","state","original","register","proxy","fn","peers","connected","presence","peerPresenceMap","conflictsSignal","resolveConflict","list","c","unsubOps","localValue","localTimestamp","conflict","resolved","err","originalPresenceSet","unsubPresence","remotePeerId","map","next","p","useCursor","doc","throttleMs","target","x","y","lastSend","pending","onMove","now","useTypingIndicator","timeout","isTyping","timer","start","stop","othersTyping","computed","typing","id"],"mappings":"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","file":"chunk-ND2HZRMR.cjs","sourcesContent":["/**\n * Collaborative signals with CRDT.\n *\n * Make any signal multiplayer with one line. Multiple users can\n * edit the same state simultaneously with automatic conflict\n * resolution via Last-Writer-Wins Register and Operation-based CRDTs.\n *\n * ```ts\n * const doc = createSync('doc-123', {\n * title: '',\n * blocks: [],\n * cursor: { x: 0, y: 0 },\n * });\n *\n * doc.state.title.set('Hello'); // syncs to all peers\n * doc.peers(); // list of connected users\n * doc.presence.set({ cursor: { x: 10, y: 20 } });\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// CRDT — Last-Writer-Wins Register\n// =========================================================================\n\nexport interface LWWEntry<T> {\n value: T;\n timestamp: number;\n peerId: string;\n}\n\n/**\n * Last-Writer-Wins Register — simplest CRDT for single values.\n * The write with the highest timestamp wins on conflict.\n */\nexport class LWWRegister<T> {\n private entry: LWWEntry<T>;\n\n constructor(initialValue: T, peerId: string) {\n this.entry = { value: initialValue, timestamp: Date.now(), peerId };\n }\n\n get value(): T {\n return this.entry.value;\n }\n\n get timestamp(): number {\n return this.entry.timestamp;\n }\n\n set(value: T, peerId: string): boolean {\n const ts = Date.now();\n // Local writes always succeed unconditionally — the register always\n // advances for intentional writes. Conflict resolution only applies\n // in merge() for remote ops.\n this.entry = { value, timestamp: Math.max(ts, this.entry.timestamp + 1), peerId };\n return true;\n }\n\n merge(remote: LWWEntry<T>): boolean {\n if (\n remote.timestamp > this.entry.timestamp ||\n (remote.timestamp === this.entry.timestamp && (\n !remote.peerId || !this.entry.peerId || remote.peerId >= this.entry.peerId\n ))\n ) {\n this.entry = remote;\n return true;\n }\n return false;\n }\n\n toEntry(): LWWEntry<T> {\n return { ...this.entry };\n }\n}\n\n// =========================================================================\n// Operation log for list CRDTs\n// =========================================================================\n\nexport type SyncOp =\n | { type: 'set'; key: string; value: unknown; timestamp: number; peerId: string }\n | { type: 'insert'; key: string; index: number; value: unknown; timestamp: number; peerId: string }\n | { type: 'delete'; key: string; index: number; timestamp: number; peerId: string };\n\n// =========================================================================\n// Sync transport interface\n// =========================================================================\n\nexport interface SyncTransport {\n /** Send an operation to peers */\n send(op: SyncOp): void;\n /** Listen for operations from peers */\n onReceive(handler: (op: SyncOp) => void): () => void;\n /** Listen for peer presence updates */\n onPresence?(handler: (peerId: string, data: unknown) => void): () => void;\n /** Send presence data (peerId passed by createSync internals) */\n sendPresence?(data: unknown, peerId?: string): void;\n /** Connect to the sync channel */\n connect(): void;\n /** Disconnect */\n disconnect(): void;\n}\n\n// =========================================================================\n// WebSocket transport\n// =========================================================================\n\nexport interface WebSocketTransportOptions {\n url: string;\n room: string;\n protocols?: string | string[];\n}\n\nexport function createWebSocketTransport(options: WebSocketTransportOptions): SyncTransport {\n let ws: WebSocket | null = null;\n const opHandlers: Array<(op: SyncOp) => void> = [];\n const presenceHandlers: Array<(peerId: string, data: unknown) => void> = [];\n\n return {\n send(op: SyncOp) {\n ws?.send(JSON.stringify({ ...op, type: 'op', room: options.room }));\n },\n onReceive(handler) {\n opHandlers.push(handler);\n let removed = false;\n return () => {\n if (removed) return;\n removed = true;\n const i = opHandlers.indexOf(handler);\n if (i !== -1) opHandlers.splice(i, 1);\n };\n },\n onPresence(handler) {\n presenceHandlers.push(handler);\n return () => {\n const i = presenceHandlers.indexOf(handler);\n if (i !== -1) presenceHandlers.splice(i, 1);\n };\n },\n sendPresence(data) {\n ws?.send(JSON.stringify({ type: 'presence', room: options.room, data }));\n },\n connect() {\n ws = new WebSocket(options.url, options.protocols);\n ws.onmessage = (e) => {\n try {\n const msg = JSON.parse(e.data);\n if (msg.type === 'op') {\n for (const h of opHandlers) h(msg);\n } else if (msg.type === 'presence') {\n for (const h of presenceHandlers) h(msg.peerId, msg.data);\n }\n } catch { /* ignore parse errors */ }\n };\n ws.onopen = () => {\n ws?.send(JSON.stringify({ type: 'join', room: options.room }));\n };\n },\n disconnect() {\n ws?.close();\n ws = null;\n },\n };\n}\n\n// =========================================================================\n// In-memory transport (for testing / single-tab)\n// =========================================================================\n\nexport function createLocalTransport(): SyncTransport {\n const opHandlers: Array<(op: SyncOp) => void> = [];\n const presenceHandlers: Array<(peerId: string, data: unknown) => void> = [];\n return {\n send(op) {\n for (const h of opHandlers) h(op);\n },\n onReceive(handler) {\n opHandlers.push(handler);\n let removed = false;\n return () => {\n if (removed) return;\n removed = true;\n const i = opHandlers.indexOf(handler);\n if (i !== -1) opHandlers.splice(i, 1);\n };\n },\n sendPresence(data, senderPeerId?: string) {\n for (const h of presenceHandlers) h(senderPeerId ?? 'unknown', data);\n },\n onPresence(handler) {\n presenceHandlers.push(handler);\n let removed = false;\n return () => {\n if (removed) return;\n removed = true;\n const i = presenceHandlers.indexOf(handler);\n if (i !== -1) presenceHandlers.splice(i, 1);\n };\n },\n connect() {},\n disconnect() {},\n };\n}\n\n// =========================================================================\n// createSync — the main API\n// =========================================================================\n\nexport interface SyncConflict {\n key: string;\n localValue: unknown;\n remoteValue: unknown;\n localTimestamp: number;\n remoteTimestamp: number;\n remotePeerId: string;\n}\n\nexport interface SyncOptions {\n /** Transport for sending/receiving operations */\n transport?: SyncTransport;\n /** Unique peer ID (default: random) */\n peerId?: string;\n /** Initial presence data — broadcast on connect */\n presence?: Record<string, unknown>;\n /** Custom conflict resolver. Return the winning value, or undefined to queue for manual resolution. */\n onConflict?: (conflict: SyncConflict) => unknown | undefined;\n}\n\nexport interface SyncDoc<T extends Record<string, unknown>> {\n /** Reactive synced state — each key is a Signal */\n state: { [K in keyof T]: Signal<T[K]> };\n /** Connected peers (reactive) */\n peers: ReadonlySignal<PeerInfo[]>;\n /** Local presence data */\n presence: Signal<Record<string, unknown>>;\n /** Peer presence map (reactive) */\n peerPresence: ReadonlySignal<Map<string, unknown>>;\n /** Unresolved conflicts (reactive) */\n conflicts: ReadonlySignal<SyncConflict[]>;\n /** Resolve a conflict by choosing a value for a key */\n resolveConflict: (key: string, value: unknown) => void;\n /** This peer's ID */\n peerId: string;\n /** Whether connected */\n connected: ReadonlySignal<boolean>;\n /** Connect to the sync channel */\n connect(): void;\n /** Disconnect */\n disconnect(): void;\n /** Dispose the sync doc */\n dispose(): void;\n}\n\nexport interface PeerInfo {\n id: string;\n joinedAt: number;\n}\n\nlet peerIdCounter = 0;\n\n/**\n * Create a collaborative synced document.\n *\n * ```ts\n * const doc = createSync('room-1', { title: '', count: 0 }, {\n * transport: createWebSocketTransport({ url: 'wss://sync.example.com', room: 'room-1' }),\n * });\n *\n * doc.state.title.set('Hello'); // auto-syncs to all peers\n * doc.peers(); // connected users\n * ```\n */\nexport function createSync<T extends Record<string, unknown>>(\n initialState: T,\n options?: SyncOptions,\n): SyncDoc<T>;\nexport function createSync<T extends Record<string, unknown>>(\n roomIdOrState: string | T,\n stateOrOptions?: T | SyncOptions,\n maybeOptions?: SyncOptions,\n): SyncDoc<T> {\n // Support both old (roomId, state, options) and new (state, options) signatures\n let initialState: T;\n let options: SyncOptions;\n if (typeof roomIdOrState === 'string') {\n initialState = stateOrOptions as T;\n options = maybeOptions ?? {};\n } else {\n initialState = roomIdOrState;\n options = (stateOrOptions as SyncOptions) ?? {};\n }\n const peerId = options.peerId ?? `peer-${++peerIdCounter}-${Date.now()}`;\n const transport = options.transport ?? createLocalTransport();\n\n // Create CRDT registers and signals for each state key\n const registers = new Map<string, LWWRegister<unknown>>();\n const stateSignals: Record<string, Signal<unknown>> = {};\n\n for (const [key, value] of Object.entries(initialState)) {\n registers.set(key, new LWWRegister(value, peerId));\n stateSignals[key] = signal(value);\n }\n\n // Intercept signal.set to broadcast operations\n const state = {} as { [K in keyof T]: Signal<T[K]> };\n for (const key of Object.keys(initialState)) {\n const original = stateSignals[key];\n const register = registers.get(key)!;\n\n const proxy: Signal<any> = (() => original()) as any;\n proxy.set = (value: any) => {\n register.set(value, peerId);\n original.set(value);\n transport.send({\n type: 'set',\n key,\n value,\n timestamp: register.timestamp,\n peerId,\n });\n };\n proxy.update = (fn: (prev: any) => any) => {\n proxy.set(fn(original()));\n };\n proxy.peek = () => original.peek();\n\n (state as any)[key] = proxy;\n }\n\n // Peers\n const peers = signal<PeerInfo[]>([]);\n const connected = signal(false);\n const presence = signal<Record<string, unknown>>(options.presence ?? {});\n const peerPresenceMap = signal(new Map<string, unknown>());\n\n // Conflict tracking\n const conflictsSignal = signal<SyncConflict[]>([]);\n\n function resolveConflict(key: string, value: unknown): void {\n // Apply the resolved value\n if (key in stateSignals) {\n stateSignals[key].set(value);\n const register = registers.get(key);\n if (register) register.set(value, peerId);\n // Broadcast the resolution\n transport.send({ type: 'set', key, value, timestamp: Date.now(), peerId });\n }\n // Remove from conflicts list\n conflictsSignal.update(list => list.filter(c => c.key !== key));\n }\n\n // Listen for remote operations (skip self-originated ops)\n const unsubOps = transport.onReceive((op) => {\n if (op.peerId === peerId) return;\n if (op.type === 'set' && registers.has(op.key)) {\n const register = registers.get(op.key)!;\n const localValue = register.value;\n const localTimestamp = register.timestamp;\n\n // Check for conflict: remote write to a key we also recently wrote\n const isConflict = options.onConflict && localTimestamp > 0 &&\n Math.abs(op.timestamp - localTimestamp) < 1000 && // within 1s window\n op.peerId !== peerId;\n\n if (isConflict) {\n const conflict: SyncConflict = {\n key: op.key,\n localValue,\n remoteValue: op.value,\n localTimestamp,\n remoteTimestamp: op.timestamp,\n remotePeerId: op.peerId,\n };\n let resolved: unknown;\n try {\n resolved = options.onConflict!(conflict);\n } catch (err) {\n console.warn('[AkashJS Sync] onConflict handler threw, falling back to LWW:', err);\n // Fallback to standard LWW merge\n const merged = register.merge({ value: op.value, timestamp: op.timestamp, peerId: op.peerId });\n if (merged) stateSignals[op.key].set(op.value);\n resolved = '__fallback__';\n }\n if (resolved === '__fallback__') {\n // Already handled by LWW fallback above\n } else if (resolved !== undefined) {\n register.set(resolved, peerId);\n stateSignals[op.key].set(resolved);\n transport.send({ type: 'set', key: op.key, value: resolved, timestamp: Date.now(), peerId });\n } else {\n conflictsSignal.update(list => [...list, conflict]);\n }\n } else {\n // No conflict handler or no conflict — standard LWW merge\n const merged = register.merge({\n value: op.value,\n timestamp: op.timestamp,\n peerId: op.peerId,\n });\n if (merged) {\n stateSignals[op.key].set(op.value);\n }\n }\n }\n });\n\n // Intercept presence.set to broadcast with peerId\n const originalPresenceSet = presence.set;\n presence.set = (data: Record<string, unknown>) => {\n originalPresenceSet.call(presence, data);\n transport.sendPresence?.(data, peerId);\n };\n\n // Listen for presence — filter out self\n const unsubPresence = transport.onPresence?.((remotePeerId, data) => {\n if (remotePeerId === peerId) return; // ignore own presence\n peerPresenceMap.update((map) => {\n const next = new Map(map);\n if (data === null) {\n next.delete(remotePeerId); // peer disconnected\n } else {\n next.set(remotePeerId, data);\n }\n return next;\n });\n });\n\n return {\n state,\n peers: () => peers(),\n presence,\n peerPresence: () => peerPresenceMap(),\n conflicts: () => conflictsSignal(),\n resolveConflict,\n peerId,\n connected: () => connected(),\n connect() {\n transport.connect();\n connected.set(true);\n // Broadcast initial presence on connect\n const p = presence();\n if (Object.keys(p).length > 0) {\n transport.sendPresence?.(p, peerId);\n }\n },\n disconnect() {\n // Broadcast null presence to signal departure\n transport.sendPresence?.(null, peerId);\n transport.disconnect();\n connected.set(false);\n },\n dispose() {\n transport.sendPresence?.(null, peerId);\n unsubOps();\n unsubPresence?.();\n transport.disconnect();\n },\n };\n}\n\n// =========================================================================\n// Presence composables\n// =========================================================================\n\n/**\n * Track cursor position and broadcast via sync presence.\n * Throttles updates to avoid flooding the transport.\n *\n * ```ts\n * const cursor = useCursor(doc, { throttle: 50 });\n * // Automatically tracks mousemove and broadcasts { cursor: { x, y } }\n * // Other peers: doc.peerPresence().get(peerId).cursor\n * ```\n */\nexport function useCursor(\n doc: SyncDoc<any>,\n options?: { throttle?: number; target?: HTMLElement },\n): { x: ReadonlySignal<number>; y: ReadonlySignal<number>; dispose: () => void } {\n const throttleMs = options?.throttle ?? 50;\n const target = options?.target ?? (typeof document !== 'undefined' ? document : null);\n const x = signal(0);\n const y = signal(0);\n let lastSend = 0;\n let pending: ReturnType<typeof setTimeout> | null = null;\n\n function onMove(e: MouseEvent): void {\n x.set(e.clientX);\n y.set(e.clientY);\n\n const now = Date.now();\n if (now - lastSend >= throttleMs) {\n lastSend = now;\n doc.presence.set({ ...doc.presence.peek?.() ?? {}, cursor: { x: e.clientX, y: e.clientY } });\n } else if (!pending) {\n pending = setTimeout(() => {\n pending = null;\n lastSend = Date.now();\n doc.presence.set({ ...doc.presence.peek?.() ?? {}, cursor: { x: x.peek(), y: y.peek() } });\n }, throttleMs - (now - lastSend));\n }\n }\n\n target?.addEventListener?.('mousemove', onMove as EventListener);\n\n return {\n x: () => x(),\n y: () => y(),\n dispose() {\n target?.removeEventListener?.('mousemove', onMove as EventListener);\n if (pending) clearTimeout(pending);\n },\n };\n}\n\n/**\n * Typing indicator — broadcasts typing state with auto-timeout.\n *\n * ```ts\n * const typing = useTypingIndicator(doc, { timeout: 2000 });\n * typing.start(); // broadcasts { typing: true }\n * // Auto-stops after 2s of inactivity\n * typing.stop(); // manual stop\n *\n * // Other peers typing:\n * typing.othersTyping(); // string[] of peer IDs currently typing\n * ```\n */\nexport function useTypingIndicator(\n doc: SyncDoc<any>,\n options?: { timeout?: number },\n): {\n isTyping: ReadonlySignal<boolean>;\n othersTyping: ReadonlySignal<string[]>;\n start: () => void;\n stop: () => void;\n} {\n const timeout = options?.timeout ?? 2000;\n const isTyping = signal(false);\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n function start(): void {\n isTyping.set(true);\n doc.presence.set({ ...doc.presence.peek?.() ?? {}, typing: true });\n if (timer) clearTimeout(timer);\n timer = setTimeout(stop, timeout);\n }\n\n function stop(): void {\n isTyping.set(false);\n doc.presence.set({ ...doc.presence.peek?.() ?? {}, typing: false });\n if (timer) { clearTimeout(timer); timer = null; }\n }\n\n const othersTyping = computed(() => {\n const peers = doc.peerPresence();\n const typing: string[] = [];\n if (peers instanceof Map) {\n for (const [id, data] of peers) {\n if (data && typeof data === 'object' && (data as any).typing) {\n typing.push(id);\n }\n }\n }\n return typing;\n });\n\n return {\n isTyping: () => isTyping(),\n othersTyping,\n start,\n stop,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';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)}exports.a=E;exports.b=F;//# sourceMappingURL=chunk-NGU2W4PD.cjs.map
2
+ //# sourceMappingURL=chunk-NGU2W4PD.cjs.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-NGU2W4PD.cjs","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
+ 'use strict';function p(...o){let n=[];for(let e of o)if(e){if(typeof e=="string")n.push(e);else if(Array.isArray(e)){let t=p(...e);t&&n.push(t);}else if(typeof e=="object")for(let[t,r]of Object.entries(e))r&&n.push(t);}return n.join(" ")}function u(o){let n=[];for(let[e,t]of Object.entries(o)){if(t==null)continue;let r=s(e),l=typeof t=="number"&&!i.has(e)?`${t}px`:String(t);n.push(`${r}: ${l}`);}return n.join("; ")}function f(o,n){for(let[e,t]of Object.entries(n))if(t==null)o.style.removeProperty(s(e));else {let r=typeof t=="number"&&!i.has(e)?`${t}px`:String(t);o.style.setProperty(s(e),r);}}function s(o){return o.replace(/[A-Z]/g,n=>`-${n.toLowerCase()}`)}var i=new Set(["animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","fillOpacity","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","fontWeight","gridColumn","gridRow","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom"]);exports.a=p;exports.b=u;exports.c=f;//# sourceMappingURL=chunk-NQEY7DR5.cjs.map
2
+ //# sourceMappingURL=chunk-NQEY7DR5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/css.ts"],"names":["cx","inputs","classes","input","nested","key","value","css","styles","parts","prop","camelToKebab","val","UNITLESS_PROPS","applyStyles","el","str","m"],"mappings":"aAuBO,SAASA,CAAAA,CAAAA,GAAMC,EAA2B,CAC/C,IAAMC,EAAoB,EAAC,CAE3B,IAAA,IAAWC,CAAAA,IAASF,CAAAA,CAClB,GAAKE,GAEL,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnBD,CAAAA,CAAQ,IAAA,CAAKC,CAAK,CAAA,CAAA,KAAA,GACT,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAG,CAC/B,IAAMC,CAAAA,CAASJ,CAAAA,CAAG,GAAGG,CAAK,CAAA,CACtBC,GAAQF,CAAAA,CAAQ,IAAA,CAAKE,CAAM,EACjC,CAAA,KAAA,GAAW,OAAOD,GAAU,QAAA,CAC1B,IAAA,GAAW,CAACE,CAAAA,CAAKC,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQH,CAAK,CAAA,CACzCG,CAAAA,EAAOJ,CAAAA,CAAQ,IAAA,CAAKG,CAAG,EAAA,CAKjC,OAAOH,EAAQ,IAAA,CAAK,GAAG,CACzB,CAgBO,SAASK,CAAAA,CAAIC,CAAAA,CAA+B,CACjD,IAAMC,EAAkB,EAAC,CAEzB,IAAA,GAAW,CAACJ,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQE,CAAM,CAAA,CAAG,CACjD,GAAIF,GAAS,IAAA,CAAM,SAEnB,IAAMI,CAAAA,CAAOC,CAAAA,CAAaN,CAAG,CAAA,CACvBO,CAAAA,CAAM,OAAON,CAAAA,EAAU,QAAA,EAAY,CAACO,EAAe,GAAA,CAAIR,CAAG,CAAA,CAC5D,CAAA,EAAGC,CAAK,CAAA,EAAA,CAAA,CACR,OAAOA,CAAK,CAAA,CAEhBG,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAGC,CAAI,KAAKE,CAAG,CAAA,CAAE,EAC9B,CAEA,OAAOH,EAAM,IAAA,CAAK,IAAI,CACxB,CASO,SAASK,CAAAA,CAAYC,EAAiBP,CAAAA,CAA6B,CACxE,IAAA,GAAW,CAACH,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQE,CAAM,CAAA,CAC9C,GAAIF,CAAAA,EAAS,KACXS,CAAAA,CAAG,KAAA,CAAM,eAAeJ,CAAAA,CAAaN,CAAG,CAAC,CAAA,CAAA,KACpC,CACL,IAAMO,CAAAA,CAAM,OAAON,CAAAA,EAAU,UAAY,CAACO,CAAAA,CAAe,GAAA,CAAIR,CAAG,CAAA,CAC5D,CAAA,EAAGC,CAAK,CAAA,EAAA,CAAA,CACR,MAAA,CAAOA,CAAK,CAAA,CAChBS,CAAAA,CAAG,KAAA,CAAM,YAAYJ,CAAAA,CAAaN,CAAG,EAAGO,CAAG,EAC7C,CAEJ,CAIA,SAASD,CAAAA,CAAaK,CAAAA,CAAqB,CACzC,OAAOA,EAAI,OAAA,CAAQ,QAAA,CAAWC,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAC3D,CAGA,IAAMJ,CAAAA,CAAiB,IAAI,IAAI,CAC7B,yBAAA,CAA2B,SAAA,CAAW,cAAA,CAAgB,iBAAA,CACtD,aAAA,CAAe,cAAe,MAAA,CAAQ,UAAA,CAAY,cAAA,CAClD,YAAA,CAAc,cAAA,CAAgB,WAAA,CAAa,aAAc,YAAA,CACzD,SAAA,CAAW,WAAA,CAAa,YAAA,CAAc,SAAA,CAAW,OAAA,CAAS,UAC1D,SAAA,CAAW,QAAA,CAAU,QAAA,CAAU,MACjC,CAAC,CAAA","file":"chunk-NQEY7DR5.cjs","sourcesContent":["/**\n * CSS utility functions.\n *\n * cx() for class name merging and css() for dynamic style objects.\n * Tiny but used in every component.\n */\n\n// --- cx() — class name merging ---\n\ntype CxInput = string | boolean | null | undefined | Record<string, boolean> | CxInput[];\n\n/**\n * Merge class names conditionally. Falsy values are filtered out.\n * Object keys are included when their value is truthy.\n *\n * ```ts\n * cx('btn', isActive && 'btn-active', { 'btn-lg': isLarge })\n * // 'btn btn-active btn-lg'\n *\n * cx('card', undefined, false, null, 'card-primary')\n * // 'card card-primary'\n * ```\n */\nexport function cx(...inputs: CxInput[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input) continue;\n\n if (typeof input === 'string') {\n classes.push(input);\n } else if (Array.isArray(input)) {\n const nested = cx(...input);\n if (nested) classes.push(nested);\n } else if (typeof input === 'object') {\n for (const [key, value] of Object.entries(input)) {\n if (value) classes.push(key);\n }\n }\n }\n\n return classes.join(' ');\n}\n\n// --- css() — dynamic style objects ---\n\ntype CssValue = string | number | null | undefined;\ntype CssProperties = Record<string, CssValue>;\n\n/**\n * Build a CSS style string from an object. Handles camelCase → kebab-case\n * conversion and filters out null/undefined values.\n *\n * ```ts\n * css({ backgroundColor: 'red', fontSize: 14, display: isVisible ? 'block' : 'none' })\n * // 'background-color: red; font-size: 14px; display: block'\n * ```\n */\nexport function css(styles: CssProperties): string {\n const parts: string[] = [];\n\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) continue;\n\n const prop = camelToKebab(key);\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n\n parts.push(`${prop}: ${val}`);\n }\n\n return parts.join('; ');\n}\n\n/**\n * Apply a style object to an element.\n *\n * ```ts\n * applyStyles(el, { color: 'red', marginTop: 10 });\n * ```\n */\nexport function applyStyles(el: HTMLElement, styles: CssProperties): void {\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) {\n el.style.removeProperty(camelToKebab(key));\n } else {\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n el.style.setProperty(camelToKebab(key), val);\n }\n }\n}\n\n// --- Helpers ---\n\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\n/** CSS properties that don't get automatic px units */\nconst UNITLESS_PROPS = new Set([\n 'animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup',\n 'columnCount', 'fillOpacity', 'flex', 'flexGrow', 'flexPositive',\n 'flexShrink', 'flexNegative', 'flexOrder', 'fontWeight', 'gridColumn',\n 'gridRow', 'lineClamp', 'lineHeight', 'opacity', 'order', 'orphans',\n 'tabSize', 'widows', 'zIndex', 'zoom',\n]);\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var f=chunkLSD7DEMV_cjs.s(n=>{let o=chunkHL2VGVJT_cjs.c(null);chunkLSD7DEMV_cjs.q(r=>{o.set(r);});function l(){o.set(null);}return ()=>{let r=o();return r?chunkLSD7DEMV_cjs.l(n.props.fallback(r,l)):chunkLSD7DEMV_cjs.l(n.children())}});exports.a=f;//# sourceMappingURL=chunk-O5OTZP5M.cjs.map
2
+ //# sourceMappingURL=chunk-O5OTZP5M.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-O5OTZP5M.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,3 @@
1
+ var p=new Set,g=true,l=null;function f(e){g=e;}function I(e){l=e;}function h(){p.clear();}function b(e,n){let t=((...r)=>(u(n),e(...r)));return Object.keys(e).forEach(r=>{t[r]=e[r];}),t.__deprecated=n,t}function y(e,n){return u(n),e}function u(e){if(!g||p.has(e.name))return;p.add(e.name);let n=[`[AkashJS] DEPRECATED: ${e.name}() is deprecated since v${e.since}`];e.removeIn?n[0]+=` and will be removed in v${e.removeIn}.`:n[0]+=".",e.replacement&&n.push(` Migrate to: ${e.replacement}()`),e.message&&n.push(` ${e.message}`),n.push(` See: ${e.link??"https://akash.js.org/migration"}`);let t=n.join(`
2
+ `);l?l(t):typeof console<"u"&&console.warn(t);}var a=new Map;function v(e){a.set(e.name,e);}function d(){return Array.from(a.values())}function x(e){return d().filter(n=>n.stability===e)}function A(e){return a.get(e)?.stability==="deprecated"}function w(e){return a.get(e)?.deprecation??null}function k(e){let n=[],t=[],r=Object.entries(e);if(r.length===0)return {compatible:true,warnings:n,errors:t};let s=r.filter(([o])=>o.startsWith("@akashjs/"));if(s.length>1){let o=new Set(s.map(([,i])=>i.split(".")[0])),m=new Set(s.map(([,i])=>i.split(".").slice(0,2).join(".")));o.size>1?t.push(`Major version mismatch: ${s.map(([i,c])=>`${i}@${c}`).join(", ")}. All @akashjs packages should be on the same major version.`):m.size>1&&n.push(`Minor version mismatch: ${s.map(([i,c])=>`${i}@${c}`).join(", ")}. Consider updating all packages to the same version with \`akash update\`.`);}return {compatible:t.length===0,warnings:n,errors:t}}export{f as a,I as b,h as c,b as d,y as e,v as f,d as g,x as h,A as i,w as j,k};//# sourceMappingURL=chunk-OQV3NYDH.js.map
3
+ //# sourceMappingURL=chunk-OQV3NYDH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deprecation.ts"],"names":["warned","warningsEnabled","warningHandler","setDeprecationWarnings","enabled","setWarningHandler","handler","resetDeprecationWarnings","deprecated","fn","info","wrapper","args","emitDeprecationWarning","key","deprecatedValue","value","parts","msg","apiRegistry","registerAPI","getRegisteredAPIs","getAPIsByStability","stability","api","isDeprecated","name","getDeprecationInfo","checkCompatibility","packages","warnings","errors","versions","akashPackages","majors","v","minors","n"],"mappings":"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","file":"chunk-OQV3NYDH.js","sourcesContent":["/**\n * Deprecation warnings and API stability markers.\n *\n * Provides runtime warnings when deprecated APIs are used,\n * with migration hints pointing to the replacement.\n *\n * ```ts\n * // Mark an API as deprecated:\n * export const oldName = deprecated(newImplementation, {\n * name: 'oldName',\n * replacement: 'newName',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * message: 'Use newName() instead for better performance.',\n * });\n *\n * // Users see:\n * // [AkashJS] DEPRECATED: oldName() is deprecated since v0.2.0 and will be removed in v1.0.0.\n * // Use newName() instead for better performance.\n * // See: https://akash.js.org/migration\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type APIStability = 'stable' | 'experimental' | 'deprecated' | 'internal';\n\nexport interface DeprecationInfo {\n /** Name of the deprecated API */\n name: string;\n /** Replacement API name */\n replacement?: string;\n /** Version when deprecated */\n since: string;\n /** Version when it will be removed */\n removeIn?: string;\n /** Custom migration message */\n message?: string;\n /** Documentation link */\n link?: string;\n}\n\nexport interface APIInfo {\n /** API name */\n name: string;\n /** Stability level */\n stability: APIStability;\n /** Version introduced */\n since: string;\n /** Deprecation info (if deprecated) */\n deprecation?: DeprecationInfo;\n}\n\n// =========================================================================\n// Warning state\n// =========================================================================\n\nconst warned = new Set<string>();\nlet warningsEnabled = true;\nlet warningHandler: ((msg: string) => void) | null = null;\n\n/**\n * Enable or disable deprecation warnings globally.\n */\nexport function setDeprecationWarnings(enabled: boolean): void {\n warningsEnabled = enabled;\n}\n\n/**\n * Set a custom warning handler (default: console.warn).\n */\nexport function setWarningHandler(handler: ((msg: string) => void) | null): void {\n warningHandler = handler;\n}\n\n/**\n * Reset warned-about APIs (useful for testing).\n */\nexport function resetDeprecationWarnings(): void {\n warned.clear();\n}\n\n// =========================================================================\n// deprecated() — wrap a function with a deprecation warning\n// =========================================================================\n\n/**\n * Wrap a function so it emits a deprecation warning on first call.\n *\n * ```ts\n * // Old API that still works but warns:\n * export const createStore = deprecated(defineStore, {\n * name: 'createStore',\n * replacement: 'defineStore',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * });\n * ```\n */\nexport function deprecated<T extends (...args: any[]) => any>(\n fn: T,\n info: DeprecationInfo,\n): T {\n const wrapper = ((...args: any[]) => {\n emitDeprecationWarning(info);\n return fn(...args);\n }) as unknown as T;\n\n // Copy properties from original\n Object.keys(fn).forEach((key) => {\n (wrapper as any)[key] = (fn as any)[key];\n });\n\n // Mark as deprecated\n (wrapper as any).__deprecated = info;\n\n return wrapper;\n}\n\n/**\n * Mark a value (non-function) as deprecated.\n * Returns the value but warns on first access.\n */\nexport function deprecatedValue<T>(value: T, info: DeprecationInfo): T {\n emitDeprecationWarning(info);\n return value;\n}\n\n// =========================================================================\n// Warning emission\n// =========================================================================\n\nfunction emitDeprecationWarning(info: DeprecationInfo): void {\n if (!warningsEnabled) return;\n if (warned.has(info.name)) return; // Only warn once per API\n warned.add(info.name);\n\n const parts: string[] = [\n `[AkashJS] DEPRECATED: ${info.name}() is deprecated since v${info.since}`,\n ];\n\n if (info.removeIn) {\n parts[0] += ` and will be removed in v${info.removeIn}.`;\n } else {\n parts[0] += '.';\n }\n\n if (info.replacement) {\n parts.push(` Migrate to: ${info.replacement}()`);\n }\n\n if (info.message) {\n parts.push(` ${info.message}`);\n }\n\n parts.push(` See: ${info.link ?? 'https://akash.js.org/migration'}`);\n\n const msg = parts.join('\\n');\n\n if (warningHandler) {\n warningHandler(msg);\n } else if (typeof console !== 'undefined') {\n console.warn(msg);\n }\n}\n\n// =========================================================================\n// API Registry — track stability of all APIs\n// =========================================================================\n\nconst apiRegistry = new Map<string, APIInfo>();\n\n/**\n * Register an API with its stability level.\n */\nexport function registerAPI(info: APIInfo): void {\n apiRegistry.set(info.name, info);\n}\n\n/**\n * Get all registered APIs.\n */\nexport function getRegisteredAPIs(): APIInfo[] {\n return Array.from(apiRegistry.values());\n}\n\n/**\n * Get APIs by stability level.\n */\nexport function getAPIsByStability(stability: APIStability): APIInfo[] {\n return getRegisteredAPIs().filter((api) => api.stability === stability);\n}\n\n/**\n * Check if an API is deprecated.\n */\nexport function isDeprecated(name: string): boolean {\n const info = apiRegistry.get(name);\n return info?.stability === 'deprecated';\n}\n\n/**\n * Get deprecation info for an API.\n */\nexport function getDeprecationInfo(name: string): DeprecationInfo | null {\n const info = apiRegistry.get(name);\n return info?.deprecation ?? null;\n}\n\n// =========================================================================\n// Compatibility check\n// =========================================================================\n\nexport interface CompatibilityResult {\n compatible: boolean;\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Check if package versions are compatible.\n *\n * ```ts\n * const result = checkCompatibility({\n * '@akashjs/runtime': '0.2.0',\n * '@akashjs/router': '0.1.0',\n * });\n * if (!result.compatible) {\n * console.error(result.errors);\n * }\n * ```\n */\nexport function checkCompatibility(\n packages: Record<string, string>,\n): CompatibilityResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n const versions = Object.entries(packages);\n if (versions.length === 0) return { compatible: true, warnings, errors };\n\n // Check that all @akashjs packages are on compatible versions\n const akashPackages = versions.filter(([name]) => name.startsWith('@akashjs/'));\n\n if (akashPackages.length > 1) {\n const majors = new Set(akashPackages.map(([, v]) => v.split('.')[0]));\n const minors = new Set(akashPackages.map(([, v]) => v.split('.').slice(0, 2).join('.')));\n\n if (majors.size > 1) {\n errors.push(\n `Major version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'All @akashjs packages should be on the same major version.',\n );\n } else if (minors.size > 1) {\n warnings.push(\n `Minor version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'Consider updating all packages to the same version with `akash update`.',\n );\n }\n }\n\n return {\n compatible: errors.length === 0,\n warnings,\n errors,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var p=typeof requestAnimationFrame=="function"?requestAnimationFrame:e=>setTimeout(()=>e(Date.now()),16),g=typeof cancelAnimationFrame=="function"?cancelAnimationFrame:e=>clearTimeout(e),S={linear:e=>e,cubicIn:e=>e*e*e,cubicOut:e=>1-Math.pow(1-e,3),cubicInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,quadIn:e=>e*e,quadOut:e=>1-(1-e)*(1-e),quintOut:e=>1-Math.pow(1-e,5),bounceOut:e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,elasticOut:e=>e===0||e===1?e:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1};function A(e,r,o){return typeof e=="number"&&typeof r=="number"?e+(r-e)*o:o<.5?e:r}function k(e,r={}){let{duration:o=400,easing:w=S.cubicOut,interpolate:y=A,delay:O=0}=r,a=chunkHL2VGVJT_cjs.c(e),m=chunkHL2VGVJT_cjs.c(e),i=0,n=false,u=(()=>a());return u.set=(t,s)=>{let f=s?.duration??o,I=s?.easing??w,h=s?.interpolate??y,M=s?.delay??O,P=a();return m.set(t),f===0?(a.set(t),Promise.resolve()):(n&&(g(i),n=false),new Promise(l=>{let x=performance.now()+M;n=true;function c(F){if(!n){l();return}let d=F-x;if(d<0){i=p(c);return}let b=Math.min(d/f,1),q=I(b);a.set(h(P,t,q)),b<1?i=p(c):(n=false,l());}i=p(c);}))},u.setImmediate=t=>{n&&(g(i),n=false),a.set(t),m.set(t);},u.target=()=>m(),u}exports.a=S;exports.b=k;//# sourceMappingURL=chunk-P4USGNUK.cjs.map
2
+ //# sourceMappingURL=chunk-P4USGNUK.cjs.map