@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
@@ -0,0 +1,4 @@
1
+ 'use strict';var r=typeof process>"u"||process.env?.NODE_ENV!=="production",o=[{pattern:/Cannot set property '?(\w+)'? of/,hint:e=>`Did you try to reassign a signal? Use ${e[1]}.set(value) instead of ${e[1]} = value.`},{pattern:/(\w+) is not a function/,hint:e=>`"${e[1]}" may be a signal. Read it with ${e[1]}(), set it with ${e[1]}.set(value).`},{pattern:/Cannot read propert(?:y|ies) of (null|undefined)/,hint:()=>"A value is null/undefined. Use optional chaining (?.) or wrap in <Show when={value()}>."},{pattern:/(\w+)\.(?:forEach|map|filter|reduce) is not a function/,hint:e=>`"${e[1]}" might be a signal containing an array. Call ${e[1]}() first to get the value: ${e[1]}().map(...)`},{pattern:/(\w+)\.set is not a function/,hint:e=>`"${e[1]}" is not a writable signal. Only signal() values have .set(). Computed values are read-only.`},{pattern:/Maximum call stack size exceeded/,hint:()=>"Possible circular dependency. Check if two computed values or effects read and write to each other."}];function n(e){if(!r)return e;for(let{pattern:i,hint:a}of o){let t=i.exec(e.message);if(t){e.message+=`
2
+
3
+ \u{1F4A1} Hint: ${a(t)}`;break}}return e}function s(){r&&(typeof window<"u"&&(window.addEventListener("error",e=>{e.error instanceof Error&&n(e.error);}),window.addEventListener("unhandledrejection",e=>{e.reason instanceof Error&&n(e.reason);})),typeof process<"u"&&process.on&&process.on("uncaughtException",e=>{n(e),console.error(e),process.exit(1);}));}exports.a=n;exports.b=s;//# sourceMappingURL=chunk-5QCWH6QA.cjs.map
4
+ //# sourceMappingURL=chunk-5QCWH6QA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error-hints.ts"],"names":["__DEV__","HINTS","m","enhanceError","error","pattern","hint","match","installErrorHints","event","err"],"mappings":"aAOA,IAAMA,CAAAA,CAAU,OAAO,OAAA,CAAY,GAAA,EAAe,OAAA,CAAQ,GAAA,EAAK,QAAA,GAAa,YAAA,CAOtEC,CAAAA,CAAqB,CACzB,CAEE,OAAA,CAAS,kCAAA,CACT,KAAOC,CAAAA,EAAM,CAAA,sCAAA,EAAyCA,CAAAA,CAAE,CAAC,CAAC,CAAA,uBAAA,EAA0BA,CAAAA,CAAE,CAAC,CAAC,CAAA,SAAA,CAC1F,CAAA,CACA,CAEE,OAAA,CAAS,yBAAA,CACT,KAAOA,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,CAAC,CAAC,CAAA,gCAAA,EAAmCA,CAAAA,CAAE,CAAC,CAAC,CAAA,gBAAA,EAAmBA,CAAAA,CAAE,CAAC,CAAC,CAAA,YAAA,CACrF,CAAA,CACA,CAEE,OAAA,CAAS,kDAAA,CACT,IAAA,CAAM,IAAM,yFACd,CAAA,CACA,CAEE,OAAA,CAAS,wDAAA,CACT,IAAA,CAAOA,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,CAAC,CAAC,CAAA,8CAAA,EAAiDA,CAAAA,CAAE,CAAC,CAAC,CAAA,2BAAA,EAA8BA,CAAAA,CAAE,CAAC,CAAC,CAAA,WAAA,CAC9G,CAAA,CACA,CAEE,OAAA,CAAS,8BAAA,CACT,IAAA,CAAOA,GAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,CAAC,CAAC,CAAA,4FAAA,CACvB,CAAA,CACA,CAEE,OAAA,CAAS,kCAAA,CACT,IAAA,CAAM,IAAM,qGACd,CACF,CAAA,CAKO,SAASC,CAAAA,CAAaC,CAAAA,CAAqB,CAChD,GAAI,CAACJ,CAAAA,CAAS,OAAOI,CAAAA,CAErB,IAAA,GAAW,CAAE,OAAA,CAAAC,CAAAA,CAAS,IAAA,CAAAC,CAAK,CAAA,GAAKL,CAAAA,CAAO,CACrC,IAAMM,CAAAA,CAAQF,CAAAA,CAAQ,IAAA,CAAKD,CAAAA,CAAM,OAAO,CAAA,CACxC,GAAIG,CAAAA,CAAO,CACTH,CAAAA,CAAM,OAAA,EAAW;;AAAA,gBAAA,EAAgBE,CAAAA,CAAKC,CAAK,CAAC,CAAA,CAAA,CAC5C,KACF,CACF,CAEA,OAAOH,CACT,CAMO,SAASI,CAAAA,EAA0B,CACnCR,CAAAA,GAED,OAAO,MAAA,CAAW,GAAA,GACpB,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAUS,CAAAA,EAAU,CACtCA,CAAAA,CAAM,KAAA,YAAiB,KAAA,EACzBN,CAAAA,CAAaM,CAAAA,CAAM,KAAK,EAE5B,CAAC,EACD,MAAA,CAAO,gBAAA,CAAiB,oBAAA,CAAuBA,CAAAA,EAAU,CACnDA,CAAAA,CAAM,MAAA,YAAkB,KAAA,EAC1BN,EAAaM,CAAAA,CAAM,MAAM,EAE7B,CAAC,CAAA,CAAA,CAGC,OAAO,OAAA,CAAY,GAAA,EAAe,QAAQ,EAAA,EAC5C,OAAA,CAAQ,EAAA,CAAG,mBAAA,CAAsBC,CAAAA,EAAQ,CACvCP,CAAAA,CAAaO,CAAG,EAChB,OAAA,CAAQ,KAAA,CAAMA,CAAG,CAAA,CACjB,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAAC,CAAA,EAEL","file":"chunk-5QCWH6QA.cjs","sourcesContent":["/**\n * Developer-friendly error hints.\n *\n * Wraps common runtime errors with actionable messages.\n * Only active in development mode.\n */\n\nconst __DEV__ = typeof process === 'undefined' || process.env?.NODE_ENV !== 'production';\n\ninterface ErrorHint {\n pattern: RegExp;\n hint: (match: RegExpMatchArray) => string;\n}\n\nconst HINTS: ErrorHint[] = [\n {\n // signal() called but assigned with = instead of .set()\n pattern: /Cannot set property '?(\\w+)'? of/,\n hint: (m) => `Did you try to reassign a signal? Use ${m[1]}.set(value) instead of ${m[1]} = value.`,\n },\n {\n // signal() return value used without calling it\n pattern: /(\\w+) is not a function/,\n hint: (m) => `\"${m[1]}\" may be a signal. Read it with ${m[1]}(), set it with ${m[1]}.set(value).`,\n },\n {\n // Accessing property on null/undefined (common with unloaded data)\n pattern: /Cannot read propert(?:y|ies) of (null|undefined)/,\n hint: () => `A value is null/undefined. Use optional chaining (?.) or wrap in <Show when={value()}>.`,\n },\n {\n // forEach/map on non-array (signal not unwrapped)\n pattern: /(\\w+)\\.(?:forEach|map|filter|reduce) is not a function/,\n hint: (m) => `\"${m[1]}\" might be a signal containing an array. Call ${m[1]}() first to get the value: ${m[1]}().map(...)`,\n },\n {\n // .set is not a function (calling .set on a computed or plain value)\n pattern: /(\\w+)\\.set is not a function/,\n hint: (m) => `\"${m[1]}\" is not a writable signal. Only signal() values have .set(). Computed values are read-only.`,\n },\n {\n // Maximum call stack (circular dependency)\n pattern: /Maximum call stack size exceeded/,\n hint: () => `Possible circular dependency. Check if two computed values or effects read and write to each other.`,\n },\n];\n\n/**\n * Enhance an error with a developer hint if one matches.\n */\nexport function enhanceError(error: Error): Error {\n if (!__DEV__) return error;\n\n for (const { pattern, hint } of HINTS) {\n const match = pattern.exec(error.message);\n if (match) {\n error.message += `\\n\\n💡 Hint: ${hint(match)}`;\n break;\n }\n }\n\n return error;\n}\n\n/**\n * Install global error handler that adds hints to unhandled errors.\n * Call once in your app's entry point during development.\n */\nexport function installErrorHints(): void {\n if (!__DEV__) return;\n\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (event) => {\n if (event.error instanceof Error) {\n enhanceError(event.error);\n }\n });\n window.addEventListener('unhandledrejection', (event) => {\n if (event.reason instanceof Error) {\n enhanceError(event.reason);\n }\n });\n }\n\n if (typeof process !== 'undefined' && process.on) {\n process.on('uncaughtException', (err) => {\n enhanceError(err);\n console.error(err);\n process.exit(1);\n });\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function j(t,e={}){let{trigger:n="viewport",loading:r,error:i,prefetch:u=false,minLoadTime:l=0,rootMargin:b="200px"}=e,f=null,a=null,c=null;function g(){if(a)return a;let p=Date.now();return a=t().then(async o=>{let d=Date.now()-p;l>0&&d<l&&await new Promise(v=>setTimeout(v,l-d)),f=o.default;}).catch(o=>{c=o instanceof Error?o:new Error(String(o));}),a}return u&&g(),chunkLSD7DEMV_cjs.s(p=>{let o=chunkHL2VGVJT_cjs.c("idle");async function v(){o()==="idle"&&(o.set("loading"),await g(),o.set(c?"error":"ready"));}return ()=>{let s=document.createElement("div");s.style.display="contents";let m=o();return m==="ready"&&f?(s.appendChild(f(p.props)),s):m==="error"&&i&&c?(s.appendChild(chunkLSD7DEMV_cjs.l(i(c))),s):(r&&m==="loading"&&s.appendChild(chunkLSD7DEMV_cjs.l(r())),m==="idle"&&w(s,n,v,b).then(C=>{}),s)}})}async function w(t,e,n,r){return e==="immediate"?(n(),()=>{}):e==="viewport"?E(t,n,r):e==="interaction"||e==="hover"?P(t,n,e):e==="idle"?L(n):typeof e=="object"&&e.type==="timer"?k(n,e.delay):typeof e=="object"&&e.type==="custom"?D(n,e.condition):(n(),()=>{})}function E(t,e,n){if(typeof IntersectionObserver>"u")return e(),()=>{};let r=new IntersectionObserver(i=>{i[0]?.isIntersecting&&(r.disconnect(),e());},{rootMargin:n});return requestAnimationFrame(()=>r.observe(t)),()=>r.disconnect()}function P(t,e,n){let r=n==="hover"?["mouseenter","focusin"]:["click","mouseenter","focusin","touchstart"],i=()=>{for(let u of r)t.removeEventListener(u,i);e();};for(let u of r)t.addEventListener(u,i,{once:true,passive:true});return ()=>{for(let u of r)t.removeEventListener(u,i);}}function L(t){if(typeof requestIdleCallback<"u"){let n=requestIdleCallback(()=>t());return ()=>cancelIdleCallback(n)}let e=setTimeout(t,200);return ()=>clearTimeout(e)}function k(t,e){let n=setTimeout(t,e);return ()=>clearTimeout(n)}function D(t,e){let n=()=>{e()?t():requestAnimationFrame(n);};return requestAnimationFrame(n),()=>{}}exports.a=j;//# sourceMappingURL=chunk-637ENG3A.cjs.map
2
+ //# sourceMappingURL=chunk-637ENG3A.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/defer.ts"],"names":["defer","loader","options","trigger","loadingFn","errorFn","prefetch","minLoadTime","rootMargin","resolvedComp","loadPromise","loadError","startLoad","start","mod","elapsed","r","err","defineComponent","ctx","state","signal","triggerLoad","container","s","nodeToDOM","setupTrigger","cleanup","el","load","setupViewportTrigger","setupInteractionTrigger","setupIdleTrigger","setupTimerTrigger","setupCustomTrigger","observer","entries","type","events","handler","event","id","timer","delay","condition","check"],"mappings":"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","file":"chunk-637ENG3A.cjs","sourcesContent":["/**\n * Deferred loading with triggers.\n *\n * Lazy-load components based on viewport visibility, user interaction,\n * idle time, timer, hover, or custom conditions.\n *\n * ```ts\n * const LazyComments = defer(() => import('./Comments.akash'), {\n * trigger: 'viewport',\n * loading: () => <Skeleton variant=\"text\" />,\n * });\n *\n * const LazyChart = defer(() => import('./Chart.akash'), {\n * trigger: 'idle',\n * loading: () => <Spinner />,\n * });\n *\n * const LazyDropdown = defer(() => import('./Dropdown.akash'), {\n * trigger: 'interaction', // loads on hover/focus/click\n * });\n * ```\n */\n\nimport { signal } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeferTrigger =\n | 'immediate'\n | 'viewport'\n | 'interaction'\n | 'idle'\n | 'hover'\n | { type: 'timer'; delay: number }\n | { type: 'custom'; condition: () => boolean };\n\nexport interface DeferOptions {\n /** When to start loading (default: 'viewport') */\n trigger?: DeferTrigger;\n /** Loading placeholder */\n loading?: () => AkashNode;\n /** Error fallback */\n error?: (err: Error) => AkashNode;\n /** Prefetch — start loading early but don't render until triggered */\n prefetch?: boolean;\n /** Minimum loading time in ms (prevent flash of loading state) */\n minLoadTime?: number;\n /** Viewport root margin for 'viewport' trigger */\n rootMargin?: string;\n}\n\n// =========================================================================\n// defer()\n// =========================================================================\n\n/**\n * Create a deferred component that loads based on a trigger.\n */\nexport function defer<P extends Record<string, unknown>>(\n loader: () => Promise<{ default: Component<P> }>,\n options: DeferOptions = {},\n): Component<P> {\n const {\n trigger = 'viewport',\n loading: loadingFn,\n error: errorFn,\n prefetch = false,\n minLoadTime = 0,\n rootMargin = '200px',\n } = options;\n\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n const start = Date.now();\n loadPromise = loader()\n .then(async (mod) => {\n // Enforce minimum load time\n const elapsed = Date.now() - start;\n if (minLoadTime > 0 && elapsed < minLoadTime) {\n await new Promise((r) => setTimeout(r, minLoadTime - elapsed));\n }\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n // Prefetch if requested\n if (prefetch) startLoad();\n\n return defineComponent<P>((ctx) => {\n const state = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n let triggerCleanup: (() => void) | null = null;\n\n async function triggerLoad(): Promise<void> {\n if (state() !== 'idle') return;\n state.set('loading');\n await startLoad();\n state.set(loadError ? 'error' : 'ready');\n }\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n const s = state();\n\n if (s === 'ready' && resolvedComp) {\n container.appendChild(resolvedComp(ctx.props as any));\n return container;\n }\n\n if (s === 'error' && errorFn && loadError) {\n container.appendChild(nodeToDOM(errorFn(loadError)));\n return container;\n }\n\n // Show loading placeholder\n if (loadingFn && s === 'loading') {\n container.appendChild(nodeToDOM(loadingFn()));\n }\n\n // Set up trigger\n if (s === 'idle') {\n setupTrigger(container, trigger, triggerLoad, rootMargin).then((cleanup) => {\n triggerCleanup = cleanup;\n });\n }\n\n return container;\n };\n });\n}\n\n// =========================================================================\n// Trigger setup\n// =========================================================================\n\nasync function setupTrigger(\n el: HTMLElement,\n trigger: DeferTrigger,\n load: () => void,\n rootMargin: string,\n): Promise<() => void> {\n if (trigger === 'immediate') {\n load();\n return () => {};\n }\n\n if (trigger === 'viewport') {\n return setupViewportTrigger(el, load, rootMargin);\n }\n\n if (trigger === 'interaction' || trigger === 'hover') {\n return setupInteractionTrigger(el, load, trigger);\n }\n\n if (trigger === 'idle') {\n return setupIdleTrigger(load);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'timer') {\n return setupTimerTrigger(load, trigger.delay);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'custom') {\n return setupCustomTrigger(load, trigger.condition);\n }\n\n load();\n return () => {};\n}\n\nfunction setupViewportTrigger(\n el: HTMLElement,\n load: () => void,\n rootMargin: string,\n): () => void {\n if (typeof IntersectionObserver === 'undefined') {\n load();\n return () => {};\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n observer.disconnect();\n load();\n }\n },\n { rootMargin },\n );\n\n // Observe after element is in DOM\n requestAnimationFrame(() => observer.observe(el));\n return () => observer.disconnect();\n}\n\nfunction setupInteractionTrigger(\n el: HTMLElement,\n load: () => void,\n type: 'interaction' | 'hover',\n): () => void {\n const events = type === 'hover'\n ? ['mouseenter', 'focusin']\n : ['click', 'mouseenter', 'focusin', 'touchstart'];\n\n const handler = () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n load();\n };\n\n for (const event of events) {\n el.addEventListener(event, handler, { once: true, passive: true });\n }\n\n return () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n };\n}\n\nfunction setupIdleTrigger(load: () => void): () => void {\n if (typeof requestIdleCallback !== 'undefined') {\n const id = requestIdleCallback(() => load());\n return () => cancelIdleCallback(id);\n }\n // Fallback\n const timer = setTimeout(load, 200);\n return () => clearTimeout(timer);\n}\n\nfunction setupTimerTrigger(load: () => void, delay: number): () => void {\n const timer = setTimeout(load, delay);\n return () => clearTimeout(timer);\n}\n\nfunction setupCustomTrigger(load: () => void, condition: () => boolean): () => void {\n const check = () => {\n if (condition()) load();\n else requestAnimationFrame(check);\n };\n requestAnimationFrame(check);\n return () => {}; // Can't cancel rAF chain easily\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,d}from'./chunk-2UATNCKC.js';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$1){let r,n;typeof i=="string"?(r=s,n=c$1??{}):(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]=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=c([]),g=c(false),v=c(n.presence??{}),x=c(new Map),T=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$1=s?.throttle??50,r=s?.target??(typeof document<"u"?document:null),n=c(0),t=c(0),o=0,l=null;function u(y){n.set(y.clientX),t.set(y.clientY);let m=Date.now();m-o>=c$1?(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$1-(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$1=s?.timeout??2e3,r=c(false),n=null;function t(){r.set(true),i.presence.set({...i.presence.peek?.()??{},typing:true}),n&&clearTimeout(n),n=setTimeout(o,c$1);}function o(){r.set(false),i.presence.set({...i.presence.peek?.()??{},typing:false}),n&&(clearTimeout(n),n=null);}let l=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}}export{h as a,L as b,W as c,_ as d,j as e,A as f};//# sourceMappingURL=chunk-66PLXQS3.js.map
2
+ //# sourceMappingURL=chunk-66PLXQS3.js.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-66PLXQS3.js","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';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var L=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])',"[contenteditable]"].join(", ");function A(e,r={}){let{initialFocus:t,returnFocus:l=true,escapeDeactivates:d=true,allowOutsideClick:f=false,onDeactivate:n}=r,o=chunkHL2VGVJT_cjs.c(false),c=null;function a(){return typeof e=="function"?e():e}function u(){let i=a();return i?Array.from(i.querySelectorAll(L)):[]}function m(i){if(i.key==="Escape"&&d){i.preventDefault(),b(),n?.();return}if(i.key!=="Tab")return;let s=u();if(s.length===0)return;let p=s[0],v=s[s.length-1];i.shiftKey?document.activeElement===p&&(i.preventDefault(),v.focus()):document.activeElement===v&&(i.preventDefault(),p.focus());}function y(i){if(!o()||f)return;let s=a();if(!s)return;let p=i.relatedTarget;if(p&&!s.contains(p)){let v=u();v.length>0&&v[0].focus();}}function h(){if(o())return;o.set(true),c=document.activeElement,document.addEventListener("keydown",m,true);let i=a();i&&i.addEventListener("focusout",y),requestAnimationFrame(()=>{if(t)(typeof t=="string"?a()?.querySelector(t):t)?.focus();else {let s=u();s.length>0&&s[0].focus();}});}function b(){if(!o())return;o.set(false),document.removeEventListener("keydown",m,true);let i=a();i&&i.removeEventListener("focusout",y),l&&c&&(c.focus(),c=null);}return {activate:h,deactivate:b,active:()=>o()}}var g=null;function K(){if(g&&document.body.contains(g))return g;let e=document.createElement("div");return e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),e.style.cssText=["position: absolute","width: 1px","height: 1px","padding: 0","margin: -1px","overflow: hidden","clip: rect(0,0,0,0)","white-space: nowrap","border: 0"].join("; "),document.body.appendChild(e),g=e,e}function k(){return (e,r="polite")=>{if(typeof document>"u")return;let t=K();t.setAttribute("aria-live",r),t.textContent="",requestAnimationFrame(()=>{t.textContent=e;});}}function w(){let e=[],r=new Set,t=false;function l(n){for(let o of e)if(!(o.scope&&!r.has(o.scope))&&T(n,o.key)){o.preventDefault!==false&&n.preventDefault(),o.handler(n);return}}function d(){t||typeof document>"u"||(document.addEventListener("keydown",l),t=true);}function f(n,o,c){let a={key:n,handler:o,scope:c?.scope,description:c?.description??"",preventDefault:c?.preventDefault};return e.push(a),d(),()=>{let u=e.indexOf(a);u!==-1&&e.splice(u,1);}}return {bind:f,enableScope(n){r.add(n);},disableScope(n){r.delete(n);},getBindings(){return e.map(n=>({key:M(n.key),description:n.description??"",scope:n.scope}))},dispose(){e.length=0,typeof document<"u"&&document.removeEventListener("keydown",l),t=false;}}}function T(e,r){let t=r.toLowerCase().split("+"),l=t.pop(),d=t.includes("mod"),f=t.includes("ctrl"),n=t.includes("shift"),o=t.includes("alt"),a=typeof navigator<"u"&&navigator.platform?.includes("Mac")?e.metaKey:e.ctrlKey;return d&&!a||f&&!e.ctrlKey||n&&!e.shiftKey||o&&!e.altKey?false:e.key.toLowerCase()===l||e.code.toLowerCase()===l}function M(e){let r=typeof navigator<"u"&&navigator.platform?.includes("Mac");return e.replace(/mod/gi,r?"\u2318":"Ctrl").replace(/shift/gi,r?"\u21E7":"Shift").replace(/alt/gi,r?"\u2325":"Alt").replace(/\+/g,r?"":"+")}exports.a=A;exports.b=k;exports.c=w;//# sourceMappingURL=chunk-6GY6HC75.cjs.map
2
+ //# sourceMappingURL=chunk-6GY6HC75.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/a11y.ts"],"names":["FOCUSABLE_SELECTOR","useFocusTrap","container","options","initialFocus","returnFocus","escapeDeactivates","allowOutsideClick","onDeactivate","active","signal","previouslyFocused","getContainer","getFocusableElements","el","handleKeyDown","e","deactivate","focusable","first","last","handleFocusOut","relatedTarget","activate","announceRegion","ensureAnnounceRegion","useAnnounce","message","politeness","region","useKeyboard","bindings","activeScopes","listening","binding","matchesKey","startListening","bind","key","handler","idx","scope","b","formatKeyCombo","combo","parts","needsMod","needsCtrl","needsShift","needsAlt","modPressed","isMac"],"mappings":"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","file":"chunk-6GY6HC75.cjs","sourcesContent":["/**\n * Accessibility composables.\n *\n * Built-in a11y primitives that no other framework ships natively.\n * Focus management, screen reader announcements, and keyboard shortcuts.\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// useFocusTrap\n// =========================================================================\n\nexport interface FocusTrapOptions {\n /** CSS selector or element to focus initially (default: first focusable) */\n initialFocus?: string | HTMLElement;\n /** Return focus to the previously focused element on deactivate */\n returnFocus?: boolean;\n /** Escape key deactivates the trap (default: true) */\n escapeDeactivates?: boolean;\n /** Allow clicks outside the trap container (default: false) */\n allowOutsideClick?: boolean;\n /** Callback when Escape deactivates */\n onDeactivate?: () => void;\n}\n\nexport interface FocusTrap {\n /** Activate the focus trap */\n activate(): void;\n /** Deactivate the focus trap */\n deactivate(): void;\n /** Whether the trap is currently active */\n active: ReadonlySignal<boolean>;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n 'select:not([disabled])', 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])', '[contenteditable]',\n].join(', ');\n\n/**\n * Trap focus inside a container element.\n *\n * ```ts\n * const trap = useFocusTrap(dialogRef, {\n * initialFocus: '#first-input',\n * returnFocus: true,\n * escapeDeactivates: true,\n * });\n * trap.activate(); // on open\n * trap.deactivate(); // on close\n * ```\n */\nexport function useFocusTrap(\n container: HTMLElement | (() => HTMLElement | null),\n options: FocusTrapOptions = {},\n): FocusTrap {\n const {\n initialFocus,\n returnFocus = true,\n escapeDeactivates = true,\n allowOutsideClick = false,\n onDeactivate,\n } = options;\n\n const active = signal(false);\n let previouslyFocused: HTMLElement | null = null;\n\n function getContainer(): HTMLElement | null {\n return typeof container === 'function' ? container() : container;\n }\n\n function getFocusableElements(): HTMLElement[] {\n const el = getContainer();\n if (!el) return [];\n return Array.from(el.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && escapeDeactivates) {\n e.preventDefault();\n deactivate();\n onDeactivate?.();\n return;\n }\n\n if (e.key !== 'Tab') return;\n\n const focusable = getFocusableElements();\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n // Shift+Tab: wrap from first to last\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: wrap from last to first\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n function handleFocusOut(e: FocusEvent): void {\n if (!active() || allowOutsideClick) return;\n const el = getContainer();\n if (!el) return;\n\n const relatedTarget = e.relatedTarget as HTMLElement | null;\n if (relatedTarget && !el.contains(relatedTarget)) {\n // Focus escaped — pull it back\n const focusable = getFocusableElements();\n if (focusable.length > 0) {\n focusable[0].focus();\n }\n }\n }\n\n function activate(): void {\n if (active()) return;\n active.set(true);\n\n previouslyFocused = document.activeElement as HTMLElement | null;\n\n document.addEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.addEventListener('focusout', handleFocusOut);\n }\n\n // Focus the initial element\n requestAnimationFrame(() => {\n if (initialFocus) {\n const target = typeof initialFocus === 'string'\n ? getContainer()?.querySelector<HTMLElement>(initialFocus)\n : initialFocus;\n target?.focus();\n } else {\n const focusable = getFocusableElements();\n if (focusable.length > 0) focusable[0].focus();\n }\n });\n }\n\n function deactivate(): void {\n if (!active()) return;\n active.set(false);\n\n document.removeEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.removeEventListener('focusout', handleFocusOut);\n }\n\n if (returnFocus && previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n }\n\n return {\n activate,\n deactivate,\n active: () => active(),\n };\n}\n\n// =========================================================================\n// useAnnounce\n// =========================================================================\n\nexport type AriaLive = 'polite' | 'assertive' | 'off';\n\nlet announceRegion: HTMLElement | null = null;\n\nfunction ensureAnnounceRegion(): HTMLElement {\n if (announceRegion && document.body.contains(announceRegion)) {\n return announceRegion;\n }\n\n const el = document.createElement('div');\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n el.setAttribute('aria-atomic', 'true');\n el.style.cssText = [\n 'position: absolute',\n 'width: 1px',\n 'height: 1px',\n 'padding: 0',\n 'margin: -1px',\n 'overflow: hidden',\n 'clip: rect(0,0,0,0)',\n 'white-space: nowrap',\n 'border: 0',\n ].join('; ');\n\n document.body.appendChild(el);\n announceRegion = el;\n return el;\n}\n\n/**\n * Screen reader announcements via ARIA live regions.\n *\n * ```ts\n * const announce = useAnnounce();\n * announce('Page loaded: Dashboard');\n * announce('Error: Invalid email', 'assertive');\n * ```\n */\nexport function useAnnounce(): (message: string, politeness?: AriaLive) => void {\n return (message: string, politeness: AriaLive = 'polite') => {\n if (typeof document === 'undefined') return;\n\n const region = ensureAnnounceRegion();\n region.setAttribute('aria-live', politeness);\n\n // Clear then set to trigger announcement\n region.textContent = '';\n requestAnimationFrame(() => {\n region.textContent = message;\n });\n };\n}\n\n// =========================================================================\n// useKeyboard\n// =========================================================================\n\nexport interface KeyBinding {\n /** Key combo: 'mod+k', 'Escape', 'ArrowDown', 'shift+Enter' */\n key: string;\n /** Handler function */\n handler: (e: KeyboardEvent) => void;\n /** Optional scope (only active when scope is enabled) */\n scope?: string;\n /** Description for help dialog */\n description?: string;\n /** Prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n}\n\nexport interface KeyboardManager {\n /** Register a binding */\n bind(key: string, handler: (e: KeyboardEvent) => void, options?: {\n scope?: string;\n description?: string;\n preventDefault?: boolean;\n }): () => void;\n /** Enable a scope */\n enableScope(scope: string): void;\n /** Disable a scope */\n disableScope(scope: string): void;\n /** Get all bindings (for help dialog) */\n getBindings(): Array<{ key: string; description: string; scope?: string }>;\n /** Dispose all bindings */\n dispose(): void;\n}\n\n/**\n * Keyboard shortcut manager with scope support.\n *\n * ```ts\n * const kb = useKeyboard();\n * kb.bind('mod+k', () => openSearch(), { description: 'Open search' });\n * kb.bind('Escape', () => close(), { scope: 'modal' });\n * kb.enableScope('modal');\n * ```\n */\nexport function useKeyboard(): KeyboardManager {\n const bindings: KeyBinding[] = [];\n const activeScopes = new Set<string>();\n let listening = false;\n\n function handleKeyDown(e: KeyboardEvent): void {\n for (const binding of bindings) {\n if (binding.scope && !activeScopes.has(binding.scope)) continue;\n if (matchesKey(e, binding.key)) {\n if (binding.preventDefault !== false) {\n e.preventDefault();\n }\n binding.handler(e);\n return;\n }\n }\n }\n\n function startListening(): void {\n if (listening) return;\n if (typeof document === 'undefined') return;\n document.addEventListener('keydown', handleKeyDown);\n listening = true;\n }\n\n function bind(\n key: string,\n handler: (e: KeyboardEvent) => void,\n options?: { scope?: string; description?: string; preventDefault?: boolean },\n ): () => void {\n const binding: KeyBinding = {\n key,\n handler,\n scope: options?.scope,\n description: options?.description ?? '',\n preventDefault: options?.preventDefault,\n };\n bindings.push(binding);\n startListening();\n\n return () => {\n const idx = bindings.indexOf(binding);\n if (idx !== -1) bindings.splice(idx, 1);\n };\n }\n\n return {\n bind,\n enableScope(scope: string) { activeScopes.add(scope); },\n disableScope(scope: string) { activeScopes.delete(scope); },\n getBindings() {\n return bindings.map((b) => ({\n key: formatKeyCombo(b.key),\n description: b.description ?? '',\n scope: b.scope,\n }));\n },\n dispose() {\n bindings.length = 0;\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', handleKeyDown);\n }\n listening = false;\n },\n };\n}\n\n// --- Key matching ---\n\nfunction matchesKey(e: KeyboardEvent, combo: string): boolean {\n const parts = combo.toLowerCase().split('+');\n const key = parts.pop()!;\n\n const needsMod = parts.includes('mod');\n const needsCtrl = parts.includes('ctrl');\n const needsShift = parts.includes('shift');\n const needsAlt = parts.includes('alt');\n\n // mod = Cmd on Mac, Ctrl elsewhere\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n const modPressed = isMac ? e.metaKey : e.ctrlKey;\n\n if (needsMod && !modPressed) return false;\n if (needsCtrl && !e.ctrlKey) return false;\n if (needsShift && !e.shiftKey) return false;\n if (needsAlt && !e.altKey) return false;\n\n return e.key.toLowerCase() === key || e.code.toLowerCase() === key;\n}\n\nfunction formatKeyCombo(combo: string): string {\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n return combo\n .replace(/mod/gi, isMac ? '⌘' : 'Ctrl')\n .replace(/shift/gi, isMac ? '⇧' : 'Shift')\n .replace(/alt/gi, isMac ? '⌥' : 'Alt')\n .replace(/\\+/g, isMac ? '' : '+');\n}\n"]}
@@ -0,0 +1,17 @@
1
+ 'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs');function a(t){return {enterFrom:`${t}-enter-from`,enterActive:`${t}-enter-active`,enterTo:`${t}-enter-to`,exitFrom:`${t}-exit-from`,exitActive:`${t}-exit-active`,exitTo:`${t}-exit-to`}}function d(t,e,i){return new Promise(r=>{t.classList.add(e.enterFrom,e.enterActive),t.offsetHeight,t.classList.remove(e.enterFrom),t.classList.add(e.enterTo);let n=()=>{t.classList.remove(e.enterActive,e.enterTo),t.removeEventListener("transitionend",n),r();};i!==void 0?setTimeout(n,i):(t.addEventListener("transitionend",n,{once:true}),setTimeout(n,5e3));})}function c(t,e,i){return new Promise(r=>{t.classList.add(e.exitFrom,e.exitActive),t.offsetHeight,t.classList.remove(e.exitFrom),t.classList.add(e.exitTo);let n=()=>{t.classList.remove(e.exitActive,e.exitTo),t.removeEventListener("transitionend",n),r();};i!==void 0?setTimeout(n,i):(t.addEventListener("transitionend",n,{once:true}),setTimeout(n,5e3));})}var f=chunkLSD7DEMV_cjs.s(t=>{let e=t.props.name??"akash",i=a(e);return ()=>{let r=document.createElement("div");if(r.style.display="contents",t.props.when){let n=chunkLSD7DEMV_cjs.l(t.children());r.appendChild(n),n instanceof HTMLElement&&(t.props.onEnter?.(n),d(n,i,t.props.duration).then(()=>{t.props.onAfterEnter?.(n);}));}return r}});function v(t,e={}){let{property:i="all",duration:r="0.3s",easing:n="ease"}=e;return `
2
+ .${t}-enter-active,
3
+ .${t}-exit-active {
4
+ transition: ${i} ${r} ${n};
5
+ }
6
+
7
+ .${t}-enter-from,
8
+ .${t}-exit-to {
9
+ opacity: 0;
10
+ }
11
+
12
+ .${t}-enter-to,
13
+ .${t}-exit-from {
14
+ opacity: 1;
15
+ }
16
+ `.trim()}exports.a=a;exports.b=d;exports.c=c;exports.d=f;exports.e=v;//# sourceMappingURL=chunk-6I5PPQ34.cjs.map
17
+ //# sourceMappingURL=chunk-6I5PPQ34.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transition.ts"],"names":["getTransitionClasses","name","enterTransition","el","classes","duration","resolve","onEnd","exitTransition","Transition","defineComponent","ctx","container","content","nodeToDOM","generateTransitionCSS","options","property","easing"],"mappings":"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","file":"chunk-6I5PPQ34.cjs","sourcesContent":["/**\n * Transition/Animation system.\n *\n * Provides CSS-based enter/exit transitions for elements.\n * Works with <Transition> component or programmatic API.\n *\n * Class naming convention (matches Vue/Svelte):\n * - `{name}-enter-from` — initial enter state\n * - `{name}-enter-active` — active enter transition\n * - `{name}-enter-to` — final enter state\n * - `{name}-exit-from` — initial exit state\n * - `{name}-exit-active` — active exit transition\n * - `{name}-exit-to` — final exit state\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport interface TransitionProps {\n /** Transition name (used as CSS class prefix) */\n name?: string;\n /** Duration in ms (overrides CSS transition duration) */\n duration?: number;\n /** Whether the content is shown */\n when: boolean;\n /** CSS transition mode */\n mode?: 'in-out' | 'out-in';\n /** Callback when enter transition starts */\n onEnter?: (el: HTMLElement) => void;\n /** Callback when enter transition completes */\n onAfterEnter?: (el: HTMLElement) => void;\n /** Callback when exit transition starts */\n onExit?: (el: HTMLElement) => void;\n /** Callback when exit transition completes */\n onAfterExit?: (el: HTMLElement) => void;\n}\n\nexport interface TransitionClasses {\n enterFrom: string;\n enterActive: string;\n enterTo: string;\n exitFrom: string;\n exitActive: string;\n exitTo: string;\n}\n\n// --- CSS class helpers ---\n\n/**\n * Get the transition CSS class names for a given transition name.\n */\nexport function getTransitionClasses(name: string): TransitionClasses {\n return {\n enterFrom: `${name}-enter-from`,\n enterActive: `${name}-enter-active`,\n enterTo: `${name}-enter-to`,\n exitFrom: `${name}-exit-from`,\n exitActive: `${name}-exit-active`,\n exitTo: `${name}-exit-to`,\n };\n}\n\n// --- Programmatic transition API ---\n\n/**\n * Run an enter transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function enterTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n // Apply initial state\n el.classList.add(classes.enterFrom, classes.enterActive);\n\n // Force reflow to ensure the initial state is applied\n void el.offsetHeight;\n\n // Transition to final state\n el.classList.remove(classes.enterFrom);\n el.classList.add(classes.enterTo);\n\n const onEnd = () => {\n el.classList.remove(classes.enterActive, classes.enterTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n // Fallback timeout in case transitionend never fires\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n/**\n * Run an exit transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function exitTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n el.classList.add(classes.exitFrom, classes.exitActive);\n\n void el.offsetHeight;\n\n el.classList.remove(classes.exitFrom);\n el.classList.add(classes.exitTo);\n\n const onEnd = () => {\n el.classList.remove(classes.exitActive, classes.exitTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n// --- <Transition> component ---\n\n/**\n * <Transition> component.\n *\n * Applies CSS enter/exit transitions when `when` changes.\n *\n * ```html\n * <Transition name=\"fade\" when={isVisible()}>\n * <div>Content</div>\n * </Transition>\n * ```\n *\n * CSS:\n * ```css\n * .fade-enter-active, .fade-exit-active {\n * transition: opacity 0.3s;\n * }\n * .fade-enter-from, .fade-exit-to {\n * opacity: 0;\n * }\n * ```\n */\nexport const Transition = defineComponent<TransitionProps>((ctx) => {\n const name = ctx.props.name ?? 'akash';\n const classes = getTransitionClasses(name);\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n if (ctx.props.when) {\n const content = nodeToDOM(ctx.children());\n container.appendChild(content);\n\n // Run enter transition on mount\n if (content instanceof HTMLElement) {\n ctx.props.onEnter?.(content);\n enterTransition(content, classes, ctx.props.duration).then(() => {\n ctx.props.onAfterEnter?.(content);\n });\n }\n }\n\n return container;\n };\n});\n\n// --- Preset transition styles ---\n\n/**\n * Generate CSS for common transition presets.\n * Inject this into your app's styles or use the CLI to generate it.\n */\nexport function generateTransitionCSS(name: string, options: {\n property?: string;\n duration?: string;\n easing?: string;\n} = {}): string {\n const {\n property = 'all',\n duration = '0.3s',\n easing = 'ease',\n } = options;\n\n return `\n.${name}-enter-active,\n.${name}-exit-active {\n transition: ${property} ${duration} ${easing};\n}\n\n.${name}-enter-from,\n.${name}-exit-to {\n opacity: 0;\n}\n\n.${name}-enter-to,\n.${name}-exit-from {\n opacity: 1;\n}\n`.trim();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,d,e}from'./chunk-2UATNCKC.js';function T(s={}){let{themes:i={light:{},dark:{}},storageKey:t="akash-theme",attribute:f="data-theme",syncSystem:g=true}=s,o=Object.keys(i);function d$1(){return typeof window>"u"?s.defaultTheme??"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function h(){if(typeof window<"u"&&t){let e=localStorage.getItem(t);if(e&&o.includes(e))return e}return s.defaultTheme??d$1()}let n=c(h()),a=d(()=>n()==="dark");function y(e){if(typeof document>"u")return;document.documentElement.setAttribute(f,e);let r=i[e];if(r)for(let[m,p]of Object.entries(r))document.documentElement.style.setProperty(m,p);document.documentElement.classList.remove(...o),document.documentElement.classList.add(e);}return e(()=>{let e=n();y(e),typeof window<"u"&&t&&localStorage.setItem(t,e);}),g&&typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",r=>{localStorage.getItem(t)||n.set(r.matches?"dark":"light");}),{current:()=>n(),isDark:a,set(e){o.includes(e)&&n.set(e);},toggle(){n.set(a()?"light":"dark");},setSystem(){typeof window<"u"&&t&&localStorage.removeItem(t),n.set(d$1());},themes:o}}export{T as a};//# sourceMappingURL=chunk-6ZCFPR4O.js.map
2
+ //# sourceMappingURL=chunk-6ZCFPR4O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme.ts"],"names":["useTheme","config","themes","storageKey","attribute","syncSystem","themeNames","getSystemTheme","getInitialTheme","stored","current","signal","isDark","computed","applyTheme","name","vars","key","value","effect","e","theme"],"mappings":"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","file":"chunk-6ZCFPR4O.js","sourcesContent":["/**\n * Theme / dark mode system.\n *\n * Signal-based theme management with system preference detection,\n * CSS variable injection, and localStorage persistence.\n *\n * ```ts\n * const theme = useTheme({\n * themes: {\n * light: { '--bg': '#fff', '--text': '#111' },\n * dark: { '--bg': '#111', '--text': '#eee' },\n * },\n * });\n *\n * theme.current(); // 'light' or 'dark'\n * theme.toggle(); // switch between light/dark\n * theme.set('dark'); // set explicitly\n * theme.isDark(); // boolean\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ThemeVariables = Record<string, string>;\n\nexport interface ThemeConfig {\n /** Theme definitions (name → CSS variables) */\n themes?: Record<string, ThemeVariables>;\n /** Default theme name (default: auto-detect from system) */\n defaultTheme?: string;\n /** localStorage key for persistence (default: 'akash-theme') */\n storageKey?: string;\n /** CSS attribute to set on <html> (default: 'data-theme') */\n attribute?: string;\n /** Whether to sync with system preference (default: true) */\n syncSystem?: boolean;\n}\n\nexport interface Theme {\n /** Current theme name (reactive) */\n current: ReadonlySignal<string>;\n /** Whether dark mode is active */\n isDark: ReadonlySignal<boolean>;\n /** Set a specific theme */\n set(theme: string): void;\n /** Toggle between light and dark */\n toggle(): void;\n /** Set the system preference strategy */\n setSystem(): void;\n /** Available theme names */\n themes: string[];\n}\n\n// --- Implementation ---\n\n/**\n * Create a theme manager with system preference detection and persistence.\n */\nexport function useTheme(config: ThemeConfig = {}): Theme {\n const {\n themes = {\n light: {},\n dark: {},\n },\n storageKey = 'akash-theme',\n attribute = 'data-theme',\n syncSystem = true,\n } = config;\n\n const themeNames = Object.keys(themes);\n\n // Detect system preference\n function getSystemTheme(): string {\n if (typeof window === 'undefined') return config.defaultTheme ?? 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Read persisted theme or use default\n function getInitialTheme(): string {\n if (typeof window !== 'undefined' && storageKey) {\n const stored = localStorage.getItem(storageKey);\n if (stored && themeNames.includes(stored)) return stored;\n }\n return config.defaultTheme ?? getSystemTheme();\n }\n\n const current = signal(getInitialTheme());\n const isDark = computed(() => current() === 'dark');\n\n // Apply theme\n function applyTheme(name: string): void {\n if (typeof document === 'undefined') return;\n\n // Set attribute on <html>\n document.documentElement.setAttribute(attribute, name);\n\n // Apply CSS variables\n const vars = themes[name];\n if (vars) {\n for (const [key, value] of Object.entries(vars)) {\n document.documentElement.style.setProperty(key, value);\n }\n }\n\n // Add/remove class for convenience\n document.documentElement.classList.remove(...themeNames);\n document.documentElement.classList.add(name);\n }\n\n // React to theme changes\n effect(() => {\n const name = current();\n applyTheme(name);\n\n // Persist\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.setItem(storageKey, name);\n }\n });\n\n // Sync with system preference changes\n if (syncSystem && typeof window !== 'undefined') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.addEventListener('change', (e) => {\n // Only auto-switch if user hasn't manually overridden\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n current.set(e.matches ? 'dark' : 'light');\n }\n });\n }\n\n return {\n current: () => current(),\n isDark,\n set(theme: string) {\n if (themeNames.includes(theme)) {\n current.set(theme);\n }\n },\n toggle() {\n current.set(isDark() ? 'light' : 'dark');\n },\n setSystem() {\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n current.set(getSystemTheme());\n },\n themes: themeNames,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,d}from'./chunk-2UATNCKC.js';function M(t){let n=c(t.initial),a=c(t.context??{}),d$1=c([t.initial]),g=d(()=>t.states[n()]?.type==="final"),y=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$1.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$1.set([t.initial]);},history:()=>d$1(),can:h,nextEvents:y}}export{M as a};//# sourceMappingURL=chunk-7T4HMWUC.js.map
2
+ //# sourceMappingURL=chunk-7T4HMWUC.js.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-5A7KDBDU.js","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-7T4HMWUC.js","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,5 @@
1
+ var r={AK0010:{code:"AK0010",message:"provide() called outside of component setup.",hint:"provide() must be called inside defineComponent()."},AK0012:{code:"AK0012",message:"inject() called outside of component setup.",hint:"inject() must be called inside defineComponent()."},AK0013:{code:"AK0013",message:"No provider found for injected context.",hint:"Make sure an ancestor component calls provide() with this key."},AK0020:{code:"AK0020",message:"onMount() called outside of component setup.",hint:"onMount() must be called inside defineComponent()."},AK0021:{code:"AK0021",message:"onUnmount() called outside of component setup.",hint:"onUnmount() must be called inside defineComponent()."},AK0022:{code:"AK0022",message:"onError() called outside of component setup.",hint:"onError() must be called inside defineComponent()."},AK0030:{code:"AK0030",message:"Circular dependency detected in computed signal.",hint:"A computed signal is reading itself, directly or via other computeds."},AK0031:{code:"AK0031",message:"Signal set() called during computation.",hint:"Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers."},AK0040:{code:"AK0040",message:"Component setup must return a render function.",hint:"The function passed to defineComponent() must return () => AkashNode."},AK0041:{code:"AK0041",message:"Required prop is missing.",hint:"Check that the parent component is passing all required props."},AK0050:{code:"AK0050",message:"useRoute() called outside of router context.",hint:"Make sure your component is rendered inside a router provider."},AK0051:{code:"AK0051",message:"No route matched the current URL.",hint:"Add a catch-all route ([...rest]) to handle unmatched paths."},AK0052:{code:"AK0052",message:"Route guard threw an error.",hint:"Check the guard function for unhandled exceptions."},AK0060:{code:"AK0060",message:"Form submitted while invalid.",hint:"The submit handler was not called because validation failed. Check form.errors()."},AK0061:{code:"AK0061",message:"Async validator timed out.",hint:"The async validator did not resolve within the expected time. Check your async validation logic."},AK0070:{code:"AK0070",message:"HTTP request failed.",hint:"Check the server response status and network connectivity."},AK0071:{code:"AK0071",message:"createResource() fetcher threw an error.",hint:"Check the fetcher function passed to createResource()."}},s="https://akashjs.dev/errors";function i(e,t){let o=r[e];if(!o)return `[AkashJS ${e}] Unknown error code.`;let n=`[AkashJS ${e}] ${o.message}`;return t&&(n+=`
2
+ ${t}`),n+=`
3
+ ${o.hint}`,n+=`
4
+ See: ${s}/${e}`,n}function d(e,t){return new Error(i(e,t))}function a(e){return r[e]}function c(){return Object.keys(r)}export{i as a,d as b,a as c,c as d};//# sourceMappingURL=chunk-AOFLE33X.js.map
5
+ //# sourceMappingURL=chunk-AOFLE33X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts"],"names":["errors","DOC_BASE","formatError","code","context","def","msg","akashError","getErrorDef","getAllErrorCodes"],"mappings":"AAqBA,IAAMA,EAAmC,CAEvC,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,8CAAA,CACT,IAAA,CAAM,oDACR,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,6CAAA,CACT,IAAA,CAAM,mDACR,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,yCAAA,CACT,IAAA,CAAM,gEACR,CAAA,CAGA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,8CAAA,CACT,IAAA,CAAM,oDACR,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,gDAAA,CACT,IAAA,CAAM,sDACR,CAAA,CACA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,8CAAA,CACT,KAAM,oDACR,CAAA,CAGA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,kDAAA,CACT,KAAM,uEACR,CAAA,CACA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,yCAAA,CACT,KAAM,gHACR,CAAA,CAGA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,gDAAA,CACT,KAAM,uEACR,CAAA,CACA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,2BAAA,CACT,KAAM,gEACR,CAAA,CAGA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,+CACT,IAAA,CAAM,gEACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,oCACT,IAAA,CAAM,8DACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,8BACT,IAAA,CAAM,oDACR,EAGA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,gCACT,IAAA,CAAM,mFACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,6BACT,IAAA,CAAM,kGACR,EAGA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,uBACT,IAAA,CAAM,4DACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,2CACT,IAAA,CAAM,wDACR,CACF,CAAA,CAIMC,CAAAA,CAAW,6BAKV,SAASC,CAAAA,CAAYC,EAAcC,CAAAA,CAA0B,CAClE,IAAMC,CAAAA,CAAML,CAAAA,CAAOG,CAAI,CAAA,CACvB,GAAI,CAACE,CAAAA,CACH,OAAO,YAAYF,CAAI,CAAA,qBAAA,CAAA,CAGzB,IAAIG,CAAAA,CAAM,CAAA,SAAA,EAAYH,CAAI,CAAA,EAAA,EAAKE,CAAAA,CAAI,OAAO,CAAA,CAAA,CAC1C,OAAID,IACFE,CAAAA,EAAO;AAAA,EAAA,EAAOF,CAAO,IAEvBE,CAAAA,EAAO;AAAA,EAAA,EAAOD,CAAAA,CAAI,IAAI,CAAA,CAAA,CACtBC,CAAAA,EAAO;AAAA,OAAA,EAAYL,CAAQ,CAAA,CAAA,EAAIE,CAAI,CAAA,CAAA,CAC5BG,CACT,CAKO,SAASC,CAAAA,CAAWJ,CAAAA,CAAcC,CAAAA,CAAyB,CAChE,OAAO,IAAI,KAAA,CAAMF,CAAAA,CAAYC,EAAMC,CAAO,CAAC,CAC7C,CAKO,SAASI,CAAAA,CAAYL,CAAAA,CAAoC,CAC9D,OAAOH,EAAOG,CAAI,CACpB,CAKO,SAASM,GAA6B,CAC3C,OAAO,MAAA,CAAO,IAAA,CAAKT,CAAM,CAC3B","file":"chunk-AOFLE33X.js","sourcesContent":["/**\n * Error message catalog.\n *\n * Every AkashJS runtime error has a unique code (AK0001, AK0002, etc.),\n * a one-line description, and a link to detailed documentation.\n *\n * Usage:\n * throw akashError('AK0010', 'provide()');\n */\n\n// --- Error registry ---\n\nexport interface ErrorDef {\n /** Error code */\n code: string;\n /** Short description */\n message: string;\n /** Extended explanation and fix suggestion */\n hint: string;\n}\n\nconst errors: Record<string, ErrorDef> = {\n // --- Context errors (AK001x) ---\n AK0010: {\n code: 'AK0010',\n message: 'provide() called outside of component setup.',\n hint: 'provide() must be called inside defineComponent().',\n },\n AK0012: {\n code: 'AK0012',\n message: 'inject() called outside of component setup.',\n hint: 'inject() must be called inside defineComponent().',\n },\n AK0013: {\n code: 'AK0013',\n message: 'No provider found for injected context.',\n hint: 'Make sure an ancestor component calls provide() with this key.',\n },\n\n // --- Lifecycle errors (AK002x) ---\n AK0020: {\n code: 'AK0020',\n message: 'onMount() called outside of component setup.',\n hint: 'onMount() must be called inside defineComponent().',\n },\n AK0021: {\n code: 'AK0021',\n message: 'onUnmount() called outside of component setup.',\n hint: 'onUnmount() must be called inside defineComponent().',\n },\n AK0022: {\n code: 'AK0022',\n message: 'onError() called outside of component setup.',\n hint: 'onError() must be called inside defineComponent().',\n },\n\n // --- Signal errors (AK003x) ---\n AK0030: {\n code: 'AK0030',\n message: 'Circular dependency detected in computed signal.',\n hint: 'A computed signal is reading itself, directly or via other computeds.',\n },\n AK0031: {\n code: 'AK0031',\n message: 'Signal set() called during computation.',\n hint: 'Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers.',\n },\n\n // --- Component errors (AK004x) ---\n AK0040: {\n code: 'AK0040',\n message: 'Component setup must return a render function.',\n hint: 'The function passed to defineComponent() must return () => AkashNode.',\n },\n AK0041: {\n code: 'AK0041',\n message: 'Required prop is missing.',\n hint: 'Check that the parent component is passing all required props.',\n },\n\n // --- Router errors (AK005x) ---\n AK0050: {\n code: 'AK0050',\n message: 'useRoute() called outside of router context.',\n hint: 'Make sure your component is rendered inside a router provider.',\n },\n AK0051: {\n code: 'AK0051',\n message: 'No route matched the current URL.',\n hint: 'Add a catch-all route ([...rest]) to handle unmatched paths.',\n },\n AK0052: {\n code: 'AK0052',\n message: 'Route guard threw an error.',\n hint: 'Check the guard function for unhandled exceptions.',\n },\n\n // --- Form errors (AK006x) ---\n AK0060: {\n code: 'AK0060',\n message: 'Form submitted while invalid.',\n hint: 'The submit handler was not called because validation failed. Check form.errors().',\n },\n AK0061: {\n code: 'AK0061',\n message: 'Async validator timed out.',\n hint: 'The async validator did not resolve within the expected time. Check your async validation logic.',\n },\n\n // --- HTTP errors (AK007x) ---\n AK0070: {\n code: 'AK0070',\n message: 'HTTP request failed.',\n hint: 'Check the server response status and network connectivity.',\n },\n AK0071: {\n code: 'AK0071',\n message: 'createResource() fetcher threw an error.',\n hint: 'Check the fetcher function passed to createResource().',\n },\n};\n\n// --- Public API ---\n\nconst DOC_BASE = 'https://akashjs.dev/errors';\n\n/**\n * Format an AkashJS error with code, message, hint, and doc link.\n */\nexport function formatError(code: string, context?: string): string {\n const def = errors[code];\n if (!def) {\n return `[AkashJS ${code}] Unknown error code.`;\n }\n\n let msg = `[AkashJS ${code}] ${def.message}`;\n if (context) {\n msg += `\\n ${context}`;\n }\n msg += `\\n ${def.hint}`;\n msg += `\\n See: ${DOC_BASE}/${code}`;\n return msg;\n}\n\n/**\n * Create and throw an AkashJS error.\n */\nexport function akashError(code: string, context?: string): Error {\n return new Error(formatError(code, context));\n}\n\n/**\n * Get the error definition for a code.\n */\nexport function getErrorDef(code: string): ErrorDef | undefined {\n return errors[code];\n}\n\n/**\n * Get all registered error codes.\n */\nexport function getAllErrorCodes(): string[] {\n return Object.keys(errors);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';function f(r){let t=r.length;if(t===0)return [];let n=[],s=new Array(t).fill(-1),o=[];for(let e=0;e<t;e++){let c=r[e];if(c===-1)continue;let u=0,m=n.length;for(;u<m;){let p=u+m>>1;n[p]<c?u=p+1:m=p;}n[u]=c,o[u]=e,u>0&&(s[e]=o[u-1]);}let i=new Array(n.length),l=o[n.length-1];for(let e=n.length-1;e>=0;e--)i[e]=l,l=s[l];return i}function h(r,t){let n=[],s=new Map;for(let e=0;e<r.length;e++)s.set(r[e],e);let o=new Array(t.length);for(let e=0;e<t.length;e++)o[e]=s.get(t[e])??-1;let i=new Set(t);for(let e=0;e<r.length;e++)i.has(r[e])||n.push({type:"remove",oldIndex:e});let l=new Set(f(o));for(let e=0;e<t.length;e++)o[e]===-1?n.push({type:"insert",newIndex:e}):l.has(e)||n.push({type:"move",newIndex:e,oldIndex:o[e]});return n}function b(r,t){let n=h(r,t),s=0,o=0,i=0;for(let l of n)l.type==="insert"?s++:l.type==="move"?o++:i++;return {inserts:s,moves:o,removes:i}}exports.a=f;exports.b=h;exports.c=b;//# sourceMappingURL=chunk-AQQQVDBQ.cjs.map
2
+ //# sourceMappingURL=chunk-AQQQVDBQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/reconcile.ts"],"names":["longestIncreasingSubsequence","arr","n","tails","predecessors","indices","i","value","lo","hi","mid","result","k","reconcileKeys","oldKeys","newKeys","ops","oldKeyMap","newToOld","newKeySet","lis","countOps","inserts","moves","removes","op"],"mappings":"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","file":"chunk-AQQQVDBQ.cjs","sourcesContent":["/**\n * List reconciliation with Longest Increasing Subsequence (LIS).\n *\n * When a keyed list updates, we need to determine the minimal set of\n * DOM operations (inserts, moves, removes). The LIS of the new key\n * positions tells us which nodes are already in the correct relative\n * order and don't need to move.\n *\n * This is the same algorithm used by Vue 3, Solid, and Inferno.\n */\n\n/**\n * Find the Longest Increasing Subsequence of indices.\n * Returns the indices into the input array that form the LIS.\n *\n * Time: O(n log n), Space: O(n)\n */\nexport function longestIncreasingSubsequence(arr: number[]): number[] {\n const n = arr.length;\n if (n === 0) return [];\n\n // tails[i] = smallest tail value for increasing subsequence of length i+1\n const tails: number[] = [];\n // predecessors[i] = index of previous element in the LIS ending at i\n const predecessors: number[] = new Array(n).fill(-1);\n // indices[i] = index in arr of the tail for length i+1\n const indices: number[] = [];\n\n for (let i = 0; i < n; i++) {\n const value = arr[i];\n\n // Skip items not in the old list (marked as -1)\n if (value === -1) continue;\n\n // Binary search for the position to insert/replace\n let lo = 0;\n let hi = tails.length;\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < value) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n tails[lo] = value;\n indices[lo] = i;\n\n if (lo > 0) {\n predecessors[i] = indices[lo - 1];\n }\n }\n\n // Reconstruct the LIS by following predecessors\n const result: number[] = new Array(tails.length);\n let k = indices[tails.length - 1];\n\n for (let i = tails.length - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n\n return result;\n}\n\n/**\n * Reconcile two keyed lists and return the minimal DOM operations.\n *\n * @param oldKeys - Keys of the current DOM list\n * @param newKeys - Keys of the new data list\n * @returns Operations to transform old into new\n */\nexport interface ReconcileOp {\n type: 'insert' | 'move' | 'remove';\n /** Index in the NEW array (for insert/move) */\n newIndex?: number;\n /** Index in the OLD array (for remove/move source) */\n oldIndex?: number;\n}\n\nexport function reconcileKeys(\n oldKeys: unknown[],\n newKeys: unknown[],\n): ReconcileOp[] {\n const ops: ReconcileOp[] = [];\n\n // Build old key → index map\n const oldKeyMap = new Map<unknown, number>();\n for (let i = 0; i < oldKeys.length; i++) {\n oldKeyMap.set(oldKeys[i], i);\n }\n\n // For each new key, find its position in old (or -1 if new)\n const newToOld: number[] = new Array(newKeys.length);\n for (let i = 0; i < newKeys.length; i++) {\n newToOld[i] = oldKeyMap.get(newKeys[i]) ?? -1;\n }\n\n // Find nodes that need to be removed (in old but not in new)\n const newKeySet = new Set(newKeys);\n for (let i = 0; i < oldKeys.length; i++) {\n if (!newKeySet.has(oldKeys[i])) {\n ops.push({ type: 'remove', oldIndex: i });\n }\n }\n\n // Find the LIS of old indices — these nodes stay in place\n const lis = new Set(longestIncreasingSubsequence(newToOld));\n\n // Nodes not in the LIS need to be moved or inserted\n for (let i = 0; i < newKeys.length; i++) {\n if (newToOld[i] === -1) {\n // New item — insert\n ops.push({ type: 'insert', newIndex: i });\n } else if (!lis.has(i)) {\n // Existing item not in LIS — move\n ops.push({ type: 'move', newIndex: i, oldIndex: newToOld[i] });\n }\n // Items in LIS stay in place — no op needed\n }\n\n return ops;\n}\n\n/**\n * Count the minimum number of DOM operations needed.\n */\nexport function countOps(oldKeys: unknown[], newKeys: unknown[]): {\n inserts: number;\n moves: number;\n removes: number;\n} {\n const ops = reconcileKeys(oldKeys, newKeys);\n let inserts = 0, moves = 0, removes = 0;\n for (const op of ops) {\n if (op.type === 'insert') inserts++;\n else if (op.type === 'move') moves++;\n else removes++;\n }\n return { inserts, moves, removes };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ function l(n,t,...r){if(r.length>0&&r.every(e=>typeof e=="function")){let e=t(n);for(let i of r)e=i(e);return e}return t(n,...r)}function f(...n){return (t,...r)=>{let e=t;for(let i of n)e=i(e,...r);return e}}function y(n){return n}var F=n=>String(n).toUpperCase(),d=n=>String(n).toLowerCase(),b=n=>{let t=String(n);return t.charAt(0).toUpperCase()+t.slice(1)},T=n=>String(n).replace(/\b\w/g,t=>t.toUpperCase()),h=n=>String(n).trim(),x=(n,t=50,r="...")=>{let e=String(n);return e.length<=t?e:e.slice(0,t-r.length)+r},P=(n,t="medium",r)=>{let e=n instanceof Date?n:new Date(n);if(isNaN(e.getTime()))return String(n);if(t==="iso")return e.toISOString();let i=r??"en-US",o={short:{year:"2-digit",month:"numeric",day:"numeric"},medium:{year:"numeric",month:"numeric",day:"numeric"},long:{year:"numeric",month:"long",day:"numeric"},full:{weekday:"long",year:"numeric",month:"long",day:"numeric"},time:{hour:"numeric",minute:"2-digit"}};return new Intl.DateTimeFormat(i,o[t]).format(e)},I=(n,t="USD",r)=>new Intl.NumberFormat(r??"en-US",{style:"currency",currency:t}).format(Number(n)),S=(n,t,r)=>{let e={};if(t){let[i,o]=t.split("-").map(Number);e.minimumFractionDigits=i,e.maximumFractionDigits=o??i;}return new Intl.NumberFormat(r??"en-US",e).format(Number(n))},D=(n,t=0,r)=>new Intl.NumberFormat(r??"en-US",{style:"percent",minimumFractionDigits:t,maximumFractionDigits:t}).format(Number(n)),w=(n,t=2)=>JSON.stringify(n,null,t),N=(n,t,r)=>{let e=r??`${t}s`;return `${n} ${n===1?t:e}`},U=(n,t)=>{let e=(n instanceof Date?n.getTime():Number(n))-Date.now(),i=Math.abs(e),o=[[6e4,"second"],[36e5,"minute"],[864e5,"hour"],[2592e6,"day"],[31536e6,"month"],[1/0,"year"]],a={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},s="second";for(let[p,g]of o)if(i<p){s=g;break}let m=Math.round(e/a[s]);if(typeof Intl<"u"&&Intl.RelativeTimeFormat)return new Intl.RelativeTimeFormat(t??"en",{numeric:"auto"}).format(m,s);let u=Math.abs(m),c=m<0?"ago":"from now";return `${u} ${s}${u!==1?"s":""} ${c}`};export{l as a,f as b,y as c,F as d,d as e,b as f,T as g,h,x as i,P as j,I as k,S as l,D as m,w as n,N as o,U as p};//# sourceMappingURL=chunk-AXB5GHGO.js.map
2
+ //# sourceMappingURL=chunk-AXB5GHGO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pipes.ts"],"names":["pipe","value","transform","rest","a","result","fn","chain","pipes","args","p","definePipe","uppercase","lowercase","capitalize","s","titleCase","c","trim","truncate","maxLength","suffix","date","format","locale","d","loc","options","currency","currencyCode","number","digitsInfo","opts","min","max","percent","decimals","json","indent","plural","singular","pluralForm","relativeTime","diff","absDiff","units","divisors","unit","threshold","u","n","abs"],"mappings":"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","file":"chunk-AXB5GHGO.js","sourcesContent":["/**\n * Pipes — template transform functions.\n *\n * Pure functions that transform display values. Chainable, memoized,\n * and usable both in templates and in script.\n *\n * ```ts\n * import { pipe, uppercase, date, currency } from '@akashjs/runtime';\n *\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(1234.5, currency, 'USD'); // '$1,234.50'\n * pipe('hello world', capitalize, truncate, 5); // 'Hello...'\n * ```\n */\n\n// =========================================================================\n// Pipe type and runner\n// =========================================================================\n\nexport type PipeFn<TIn = any, TOut = any> = (value: TIn, ...args: any[]) => TOut;\n\n/**\n * Apply a pipe transform to a value.\n *\n * ```ts\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(1234, currency, 'USD'); // '$1,234.00'\n * ```\n */\nexport function pipe(value: any, transform: Function, ...rest: any[]): any {\n // If all remaining args are functions, chain them: pipe(5, fn1, fn2, fn3)\n if (rest.length > 0 && rest.every(a => typeof a === 'function')) {\n let result = transform(value);\n for (const fn of rest) {\n result = fn(result);\n }\n return result;\n }\n // Otherwise, pass extra args to the transform: pipe('hello', truncate, 5)\n return transform(value, ...rest);\n}\n\n/**\n * Chain multiple pipes together.\n *\n * ```ts\n * const format = chain(trim, capitalize, truncate);\n * format(' hello world ', 10); // 'Hello w...'\n * ```\n */\nexport function chain<T>(...pipes: PipeFn[]): PipeFn<T, any> {\n return (value: T, ...args: any[]) => {\n let result: any = value;\n for (const p of pipes) {\n result = p(result, ...args);\n }\n return result;\n };\n}\n\n/**\n * Define a custom pipe.\n *\n * ```ts\n * const reverse = definePipe<string, string>((value) =>\n * value.split('').reverse().join('')\n * );\n * pipe('hello', reverse); // 'olleh'\n * ```\n */\nexport function definePipe<TIn, TOut>(fn: PipeFn<TIn, TOut>): PipeFn<TIn, TOut> {\n return fn;\n}\n\n// =========================================================================\n// Built-in pipes\n// =========================================================================\n\n/** Convert string to uppercase */\nexport const uppercase: PipeFn<string, string> = (value) => String(value).toUpperCase();\n\n/** Convert string to lowercase */\nexport const lowercase: PipeFn<string, string> = (value) => String(value).toLowerCase();\n\n/** Capitalize first letter */\nexport const capitalize: PipeFn<string, string> = (value) => {\n const s = String(value);\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\n/** Title case — capitalize each word */\nexport const titleCase: PipeFn<string, string> = (value) => {\n return String(value).replace(/\\b\\w/g, (c) => c.toUpperCase());\n};\n\n/** Trim whitespace */\nexport const trim: PipeFn<string, string> = (value) => String(value).trim();\n\n/**\n * Truncate string to a max length, adding ellipsis.\n *\n * ```ts\n * pipe('Hello World', truncate, 8); // 'Hello...'\n * ```\n */\nexport const truncate: PipeFn<string, string> = (value, maxLength: number = 50, suffix = '...') => {\n const s = String(value);\n if (s.length <= maxLength) return s;\n return s.slice(0, maxLength - suffix.length) + suffix;\n};\n\n/**\n * Format a date.\n *\n * ```ts\n * pipe(new Date(), date); // '3/29/2026'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(new Date(), date, 'long'); // 'March 29, 2026'\n * pipe(new Date(), date, 'time'); // '2:30 PM'\n * pipe(new Date(), date, 'iso'); // '2026-03-29T...'\n * ```\n */\nexport const date: PipeFn<Date | string | number, string> = (\n value,\n format: 'short' | 'medium' | 'long' | 'full' | 'time' | 'iso' = 'medium',\n locale?: string,\n) => {\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return String(value);\n\n if (format === 'iso') return d.toISOString();\n\n const loc = locale ?? 'en-US';\n\n const options: Record<string, Intl.DateTimeFormatOptions> = {\n short: { year: '2-digit', month: 'numeric', day: 'numeric' },\n medium: { year: 'numeric', month: 'numeric', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n };\n\n return new Intl.DateTimeFormat(loc, options[format]).format(d);\n};\n\n/**\n * Format a number as currency.\n *\n * ```ts\n * pipe(1234.5, currency); // '$1,234.50'\n * pipe(1234.5, currency, 'EUR'); // '€1,234.50'\n * ```\n */\nexport const currency: PipeFn<number, string> = (value, currencyCode = 'USD', locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'currency',\n currency: currencyCode,\n }).format(Number(value));\n};\n\n/**\n * Format a number with locale formatting.\n *\n * ```ts\n * pipe(1234567.89, number); // '1,234,567.89'\n * pipe(1234567.89, number, '0-2'); // '1,234,567.89' (0-2 decimal digits)\n * ```\n */\nexport const number: PipeFn<number, string> = (value, digitsInfo?: string, locale?: string) => {\n const opts: Intl.NumberFormatOptions = {};\n if (digitsInfo) {\n const [min, max] = digitsInfo.split('-').map(Number);\n opts.minimumFractionDigits = min;\n opts.maximumFractionDigits = max ?? min;\n }\n return new Intl.NumberFormat(locale ?? 'en-US', opts).format(Number(value));\n};\n\n/**\n * Format a number as a percentage.\n *\n * ```ts\n * pipe(0.85, percent); // '85%'\n * pipe(0.856, percent); // '86%'\n * ```\n */\nexport const percent: PipeFn<number, string> = (value, decimals = 0, locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(Number(value));\n};\n\n/**\n * JSON stringify with formatting.\n *\n * ```ts\n * pipe({ a: 1 }, json); // '{\\n \"a\": 1\\n}'\n * pipe({ a: 1 }, json, 0); // '{\"a\":1}'\n * ```\n */\nexport const json: PipeFn<unknown, string> = (value, indent = 2) => {\n return JSON.stringify(value, null, indent);\n};\n\n/**\n * Pluralize a string based on count.\n *\n * ```ts\n * pipe(1, plural, 'item', 'items'); // '1 item'\n * pipe(5, plural, 'item', 'items'); // '5 items'\n * ```\n */\nexport const plural: PipeFn<number, string> = (value, singular: string, pluralForm?: string) => {\n const p = pluralForm ?? `${singular}s`;\n return `${value} ${value === 1 ? singular : p}`;\n};\n\n/**\n * Relative time formatting.\n *\n * ```ts\n * pipe(Date.now() - 60000, relativeTime); // '1 minute ago'\n * ```\n */\nexport const relativeTime: PipeFn<Date | number, string> = (value, locale?: string) => {\n const d = value instanceof Date ? value.getTime() : Number(value);\n const diff = d - Date.now();\n const absDiff = Math.abs(diff);\n\n const units: Array<[number, Intl.RelativeTimeFormatUnit]> = [\n [60000, 'second'],\n [3600000, 'minute'],\n [86400000, 'hour'],\n [2592000000, 'day'],\n [31536000000, 'month'],\n [Infinity, 'year'],\n ];\n\n const divisors: Record<string, number> = {\n second: 1000, minute: 60000, hour: 3600000,\n day: 86400000, month: 2592000000, year: 31536000000,\n };\n\n let unit: Intl.RelativeTimeFormatUnit = 'second';\n for (const [threshold, u] of units) {\n if (absDiff < threshold) { unit = u; break; }\n }\n\n const n = Math.round(diff / divisors[unit]);\n\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n return new Intl.RelativeTimeFormat(locale ?? 'en', { numeric: 'auto' }).format(n, unit);\n }\n\n const abs = Math.abs(n);\n const suffix = n < 0 ? 'ago' : 'from now';\n return `${abs} ${unit}${abs !== 1 ? 's' : ''} ${suffix}`;\n};\n"]}
@@ -0,0 +1,3 @@
1
+ 'use strict';var b=new Set(["a","abbr","address","article","aside","b","bdi","bdo","blockquote","br","caption","cite","code","col","colgroup","dd","del","details","dfn","div","dl","dt","em","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","header","hr","i","img","ins","kbd","li","main","mark","nav","ol","p","pre","q","rp","rt","ruby","s","samp","section","small","span","strong","sub","summary","sup","table","tbody","td","tfoot","th","thead","time","tr","u","ul","var","wbr"]),S=new Set(["alt","class","dir","href","id","lang","name","rel","src","style","tabindex","target","title","type","width","height","colspan","rowspan","scope","loading","decoding"]),w=/^(javascript|data|vbscript):/i,A=/^on/i;function O(e,n={}){if(typeof document>"u")return e.replace(/<[^>]*>/g,"");let{allowTags:r=[],allowAttrs:t=[],allowDataAttrs:o=true,allowAriaAttrs:s=true,allowStyle:i=false,tagFilter:a,attrFilter:u}=n,c=new Set([...b,...r]),f=new Set([...S,...t]);i||f.delete("style");let d=new DOMParser().parseFromString(e,"text/html");return h(d.body,c,f,o,s,a,u),d.body.innerHTML}function h(e,n,r,t,o,s,i){let a=Array.from(e.childNodes);for(let u of a)if(u.nodeType===Node.ELEMENT_NODE){let c=u,f=c.tagName.toLowerCase();if(!(s?s(f):n.has(f))){let l=document.createTextNode(c.textContent??"");e.replaceChild(l,u);continue}let y=Array.from(c.attributes);for(let l of y){let p=l.name.toLowerCase(),g=l.value;if(A.test(p)){c.removeAttribute(l.name);continue}if(!(p.startsWith("data-")&&t)&&!(p.startsWith("aria-")&&o)){if(i&&!i(p,g,f)){c.removeAttribute(l.name);continue}if(!r.has(p)){c.removeAttribute(l.name);continue}if((p==="href"||p==="src")&&w.test(g)){c.removeAttribute(l.name);continue}}}h(c,n,r,t,o,s,i);}}function v(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function k(e,n){return r=>{e.innerHTML=O(r,n);}}function P(e={}){let r={...{"default-src":["'self'"],"script-src":["'self'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https:"],"font-src":["'self'","https:"],"connect-src":["'self'"],"frame-ancestors":["'none'"],"base-uri":["'self'"],"form-action":["'self'"],"object-src":["'none'"]},...e.directives};if(e.nonce){let t=`'nonce-${e.nonce}'`;r["script-src"]&&r["script-src"].push(t),r["style-src"]&&r["style-src"].push(t);}return e.reportUri&&(r["report-uri"]=[e.reportUri]),Object.entries(r).map(([t,o])=>`${t} ${o.join(" ")}`).join("; ")}function T(e={}){return e.reportOnly?"Content-Security-Policy-Report-Only":"Content-Security-Policy"}function E(e={}){let n={};if(e.csp!==false){let r=e.csp??{};n[T(r)]=P(r);}if(e.frameOptions!==false&&(n["X-Frame-Options"]=e.frameOptions??"DENY"),e.contentTypeOptions!==false&&(n["X-Content-Type-Options"]="nosniff"),n["X-XSS-Protection"]=e.xssProtection?"1; mode=block":"0",e.hsts!==false){let r=e.hsts??{maxAge:31536e3,includeSubDomains:true},t=`max-age=${r.maxAge}`;r.includeSubDomains&&(t+="; includeSubDomains"),r.preload&&(t+="; preload"),n["Strict-Transport-Security"]=t;}if(e.referrerPolicy!==false&&(n["Referrer-Policy"]=e.referrerPolicy??"strict-origin-when-cross-origin"),e.permissionsPolicy!==false){let r=e.permissionsPolicy??{camera:[],microphone:[],geolocation:[],payment:[]};n["Permissions-Policy"]=Object.entries(r).map(([t,o])=>`${t}=(${o.join(" ")})`).join(", ");}return e.coop!==false&&(n["Cross-Origin-Opener-Policy"]=e.coop??"same-origin"),e.coep!==false&&(n["Cross-Origin-Embedder-Policy"]=e.coep??"require-corp"),n}function x(e,...n){let r=new Set(["__proto__","constructor","prototype"]);for(let t of n)if(!(!t||typeof t!="object"))for(let o of Object.keys(t)){if(r.has(o))continue;let s=e[o],i=t[o];m(i)&&m(s)?e[o]=x({...s},i):e[o]=i;}return e}function R(e){if(e===null||typeof e!="object")return e;Object.freeze(e);for(let n of Object.values(e))typeof n=="object"&&n!==null&&R(n);return e}function m(e){return e!==null&&typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype}async function N(e,n="sha384"){let t=new TextEncoder().encode(e),o=n==="sha256"?"SHA-256":n==="sha384"?"SHA-384":"SHA-512",s=await crypto.subtle.digest(o,t),i=new Uint8Array(s),a=btoa(String.fromCharCode(...i));return `${n}-${a}`}function C(){let e=new Uint8Array(32);return crypto.getRandomValues(e),Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function D(e={}){let{headerName:n="X-CSRF-Token",cookieName:r="csrf-token",tokenGenerator:t=C}=e,o=null;function s(){if(!o){if(typeof document<"u"){let a=document.cookie.match(new RegExp(`${r}=([^;]+)`));if(a)return o=a[1],o}o=t();}return o}return {interceptor:async(a,u)=>{let c=a.method.toUpperCase();return ["POST","PUT","PATCH","DELETE"].includes(c)&&a.headers.set(n,s()),u(a)},token:s,refresh(){o=t();}}}function H(e,n={}){if(e==null)return null;let{allowedHosts:r,allowedProtocols:t=["http:","https:"],allowRelative:o=true}=n;if(e.startsWith("/")&&!e.startsWith("//"))return o?e:null;try{let s=new URL(e);return !t.includes(s.protocol)||r&&!r.includes(s.hostname)?null:s.toString()}catch{return null}}function j(e){let{maxAttempts:n,windowMs:r}=e,t=[];return {check(){let o=Date.now();for(;t.length>0&&t[0]<o-r;)t.shift();return t.length>=n?false:(t.push(o),true)},remaining(){let o=Date.now();for(;t.length>0&&t[0]<o-r;)t.shift();return Math.max(0,n-t.length)},reset(){t.length=0;}}}
2
+ exports.a=O;exports.b=v;exports.c=k;exports.d=P;exports.e=T;exports.f=E;exports.g=x;exports.h=R;exports.i=N;exports.j=C;exports.k=D;exports.l=H;exports.m=j;//# sourceMappingURL=chunk-BHP3UTTQ.cjs.map
3
+ //# sourceMappingURL=chunk-BHP3UTTQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/security.ts"],"names":["SAFE_TAGS","SAFE_ATTRS","DANGEROUS_PROTOCOLS","DANGEROUS_ATTRS","sanitize","html","options","allowTags","allowAttrs","allowDataAttrs","allowAriaAttrs","allowStyle","tagFilter","attrFilter","allowedTags","allowedAttrs","doc","sanitizeNode","node","children","child","el","tag","text","attrs","attr","name","value","escapeHtml","str","createSafeHTML","generateCSP","config","directives","nonceValue","key","values","getCSPHeaderName","generateSecurityHeaders","headers","cspConfig","hsts","policy","safeMerge","target","sources","DANGEROUS_KEYS","source","targetVal","sourceVal","isPlainObject","deepFreeze","obj","val","generateSRI","content","algorithm","data","hashAlgo","hashBuffer","hashArray","base64","generateCSRFToken","array","b","createCSRFInterceptor","headerName","cookieName","tokenGenerator","token","getToken","match","request","next","method","sanitizeURL","url","allowedHosts","allowedProtocols","allowRelative","parsed","createRateLimiter","maxAttempts","windowMs","attempts","now"],"mappings":"aAYA,IAAMA,CAAAA,CAAY,IAAI,GAAA,CAAI,CACxB,IAAK,MAAA,CAAQ,SAAA,CAAW,SAAA,CAAW,OAAA,CAAS,GAAA,CAAK,KAAA,CAAO,KAAA,CACxD,YAAA,CAAc,KAAM,SAAA,CAAW,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,UAAA,CACtD,IAAA,CAAM,KAAA,CAAO,SAAA,CAAW,MAAO,KAAA,CAAO,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,YAAA,CACxD,QAAA,CAAU,QAAA,CAAU,IAAA,CAAM,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,QAAA,CACxD,IAAA,CAAM,GAAA,CAAK,KAAA,CAAO,MAAO,KAAA,CAAO,IAAA,CAAM,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,IAAA,CAC7D,GAAA,CAAK,KAAA,CAAO,IAAK,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQ,GAAA,CAAK,MAAA,CAAQ,SAAA,CAAW,OAAA,CAC7D,MAAA,CAAQ,SAAU,KAAA,CAAO,SAAA,CAAW,KAAA,CAAO,OAAA,CAAS,QAAS,IAAA,CAC7D,OAAA,CAAS,IAAA,CAAM,OAAA,CAAS,OAAQ,IAAA,CAAM,GAAA,CAAK,IAAA,CAAM,KAAA,CAAO,KAC1D,CAAC,CAAA,CAGKC,CAAAA,CAAa,IAAI,GAAA,CAAI,CACzB,KAAA,CAAO,OAAA,CAAS,KAAA,CAAO,MAAA,CAAQ,IAAA,CAAM,MAAA,CAAQ,OAAQ,KAAA,CACrD,KAAA,CAAO,OAAA,CAAS,UAAA,CAAY,QAAA,CAAU,OAAA,CAAS,MAAA,CAAQ,OAAA,CACvD,SAAU,SAAA,CAAW,SAAA,CAAW,OAAA,CAAS,SAAA,CAAW,UACtD,CAAC,CAAA,CAGKC,CAAAA,CAAsB,gCAGtBC,CAAAA,CAAkB,MAAA,CA8BjB,SAASC,CAAAA,CAASC,CAAAA,CAAcC,CAAAA,CAA2B,EAAC,CAAW,CAC5E,GAAI,OAAO,QAAA,CAAa,GAAA,CAEtB,OAAOD,CAAAA,CAAK,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CAGpC,GAAM,CACJ,SAAA,CAAAE,CAAAA,CAAY,EAAC,CACb,UAAA,CAAAC,EAAa,EAAC,CACd,cAAA,CAAAC,CAAAA,CAAiB,KACjB,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,UAAA,CAAAC,EAAa,KAAA,CACb,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,CAAIP,CAAAA,CAEEQ,CAAAA,CAAc,IAAI,GAAA,CAAI,CAAC,GAAGd,CAAAA,CAAW,GAAGO,CAAS,CAAC,CAAA,CAClDQ,EAAe,IAAI,GAAA,CAAI,CAAC,GAAGd,CAAAA,CAAY,GAAGO,CAAU,CAAC,EAEtDG,CAAAA,EAAYI,CAAAA,CAAa,MAAA,CAAO,OAAO,CAAA,CAG5C,IAAMC,CAAAA,CAAM,IAAI,WAAU,CAAE,eAAA,CAAgBX,CAAAA,CAAM,WAAW,CAAA,CAC7D,OAAAY,CAAAA,CAAaD,CAAAA,CAAI,KAAMF,CAAAA,CAAaC,CAAAA,CAAcN,CAAAA,CAAgBC,CAAAA,CAAgBE,CAAAA,CAAWC,CAAU,CAAA,CAEhGG,CAAAA,CAAI,KAAK,SAClB,CAEA,SAASC,CAAAA,CACPC,CAAAA,CACAJ,CAAAA,CACAC,CAAAA,CACAN,CAAAA,CACAC,EACAE,CAAAA,CACAC,CAAAA,CACM,CACN,IAAMM,EAAW,KAAA,CAAM,IAAA,CAAKD,CAAAA,CAAK,UAAU,EAE3C,IAAA,IAAWE,CAAAA,IAASD,CAAAA,CAClB,GAAIC,CAAAA,CAAM,QAAA,GAAa,IAAA,CAAK,YAAA,CAAc,CACxC,IAAMC,CAAAA,CAAKD,CAAAA,CACLE,CAAAA,CAAMD,CAAAA,CAAG,OAAA,CAAQ,WAAA,EAAY,CAKnC,GAAI,EAFcT,CAAAA,CAAYA,CAAAA,CAAUU,CAAG,CAAA,CAAIR,CAAAA,CAAY,GAAA,CAAIQ,CAAG,GAElD,CAEd,IAAMC,CAAAA,CAAO,QAAA,CAAS,cAAA,CAAeF,CAAAA,CAAG,WAAA,EAAe,EAAE,EACzDH,CAAAA,CAAK,YAAA,CAAaK,CAAAA,CAAMH,CAAK,CAAA,CAC7B,QACF,CAGA,IAAMI,EAAQ,KAAA,CAAM,IAAA,CAAKH,CAAAA,CAAG,UAAU,CAAA,CACtC,IAAA,IAAWI,CAAAA,IAAQD,CAAAA,CAAO,CACxB,IAAME,CAAAA,CAAOD,CAAAA,CAAK,IAAA,CAAK,WAAA,EAAY,CAC7BE,CAAAA,CAAQF,CAAAA,CAAK,MAGnB,GAAItB,CAAAA,CAAgB,IAAA,CAAKuB,CAAI,EAAG,CAC9BL,CAAAA,CAAG,eAAA,CAAgBI,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAI,EAAAC,CAAAA,CAAK,UAAA,CAAW,OAAO,GAAKjB,CAAAA,CAAAA,EAC5B,EAAAiB,CAAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAKhB,CAAAA,CAAAA,CAGhC,CAAA,GAAIG,GAAc,CAACA,CAAAA,CAAWa,CAAAA,CAAMC,CAAAA,CAAOL,CAAG,CAAA,CAAG,CAC/CD,CAAAA,CAAG,gBAAgBI,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAI,CAACV,CAAAA,CAAa,IAAIW,CAAI,CAAA,CAAG,CAC3BL,CAAAA,CAAG,eAAA,CAAgBI,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,CAGA,GAAA,CAAKC,CAAAA,GAAS,MAAA,EAAUA,CAAAA,GAAS,KAAA,GAAUxB,CAAAA,CAAoB,IAAA,CAAKyB,CAAK,CAAA,CAAG,CAC1EN,CAAAA,CAAG,eAAA,CAAgBI,CAAAA,CAAK,IAAI,CAAA,CAC5B,QACF,EACF,CAGAR,CAAAA,CAAaI,CAAAA,CAAIP,CAAAA,CAAaC,EAAcN,CAAAA,CAAgBC,CAAAA,CAAgBE,CAAAA,CAAWC,CAAU,EACnG,CAEJ,CAKO,SAASe,CAAAA,CAAWC,CAAAA,CAAqB,CAC9C,OAAOA,CAAAA,CACJ,QAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,KAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,IAAA,CAAM,OAAO,CAC1B,CAUO,SAASC,CAAAA,CAAeT,CAAAA,CAAiBf,CAAAA,CAAmD,CACjG,OAAQD,GAAiB,CACvBgB,CAAAA,CAAG,SAAA,CAAYjB,CAAAA,CAASC,CAAAA,CAAMC,CAAO,EACvC,CACF,CAgCO,SAASyB,CAAAA,CAAYC,CAAAA,CAAoB,EAAC,CAAW,CAc1D,IAAMC,CAAAA,CAAa,CAAE,GAbsB,CACzC,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,YAAA,CAAc,CAAC,QAAQ,CAAA,CACvB,WAAA,CAAa,CAAC,QAAA,CAAU,iBAAiB,CAAA,CACzC,SAAA,CAAW,CAAC,QAAA,CAAU,QAAS,QAAQ,CAAA,CACvC,UAAA,CAAY,CAAC,QAAA,CAAU,QAAQ,CAAA,CAC/B,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,iBAAA,CAAmB,CAAC,QAAQ,CAAA,CAC5B,UAAA,CAAY,CAAC,QAAQ,CAAA,CACrB,aAAA,CAAe,CAAC,QAAQ,CAAA,CACxB,YAAA,CAAc,CAAC,QAAQ,CACzB,CAAA,CAEkC,GAAGD,CAAAA,CAAO,UAAW,CAAA,CAGvD,GAAIA,CAAAA,CAAO,KAAA,CAAO,CAChB,IAAME,CAAAA,CAAa,CAAA,OAAA,EAAUF,CAAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CACrCC,CAAAA,CAAW,YAAY,GACzBA,CAAAA,CAAW,YAAY,CAAA,CAAE,IAAA,CAAKC,CAAU,CAAA,CAEtCD,CAAAA,CAAW,WAAW,GACxBA,CAAAA,CAAW,WAAW,CAAA,CAAE,IAAA,CAAKC,CAAU,EAE3C,CAGA,OAAIF,EAAO,SAAA,GACTC,CAAAA,CAAW,YAAY,CAAA,CAAI,CAACD,CAAAA,CAAO,SAAS,CAAA,CAAA,CAGvC,MAAA,CAAO,QAAQC,CAAU,CAAA,CAC7B,GAAA,CAAI,CAAC,CAACE,CAAAA,CAAKC,CAAM,CAAA,GAAM,GAAGD,CAAG,CAAA,CAAA,EAAIC,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA,CACnD,KAAK,IAAI,CACd,CAKO,SAASC,CAAAA,CAAiBL,CAAAA,CAAoB,EAAC,CAAW,CAC/D,OAAOA,CAAAA,CAAO,UAAA,CACV,qCAAA,CACA,yBACN,CAsCO,SAASM,CAAAA,CAAwBN,EAAgC,EAAC,CAA2B,CAClG,IAAMO,CAAAA,CAAkC,EAAC,CAGzC,GAAIP,EAAO,GAAA,GAAQ,KAAA,CAAO,CACxB,IAAMQ,CAAAA,CAAYR,CAAAA,CAAO,GAAA,EAAO,GAChCO,CAAAA,CAAQF,CAAAA,CAAiBG,CAAS,CAAC,CAAA,CAAIT,CAAAA,CAAYS,CAAS,EAC9D,CAgBA,GAbIR,CAAAA,CAAO,YAAA,GAAiB,KAAA,GAC1BO,EAAQ,iBAAiB,CAAA,CAAIP,CAAAA,CAAO,YAAA,EAAgB,QAIlDA,CAAAA,CAAO,kBAAA,GAAuB,KAAA,GAChCO,CAAAA,CAAQ,wBAAwB,CAAA,CAAI,SAAA,CAAA,CAItCA,CAAAA,CAAQ,kBAAkB,CAAA,CAAIP,CAAAA,CAAO,aAAA,CAAgB,eAAA,CAAkB,GAAA,CAGnEA,CAAAA,CAAO,IAAA,GAAS,KAAA,CAAO,CACzB,IAAMS,CAAAA,CAAOT,CAAAA,CAAO,IAAA,EAAQ,CAAE,MAAA,CAAQ,OAAA,CAAU,iBAAA,CAAmB,IAAK,CAAA,CACpEL,CAAAA,CAAQ,CAAA,QAAA,EAAWc,CAAAA,CAAK,MAAM,CAAA,CAAA,CAC9BA,CAAAA,CAAK,iBAAA,GAAmBd,GAAS,qBAAA,CAAA,CACjCc,CAAAA,CAAK,OAAA,GAASd,CAAAA,EAAS,WAAA,CAAA,CAC3BY,CAAAA,CAAQ,2BAA2B,CAAA,CAAIZ,EACzC,CAQA,GALIK,CAAAA,CAAO,cAAA,GAAmB,KAAA,GAC5BO,CAAAA,CAAQ,iBAAiB,CAAA,CAAIP,EAAO,cAAA,EAAkB,iCAAA,CAAA,CAIpDA,CAAAA,CAAO,iBAAA,GAAsB,KAAA,CAAO,CACtC,IAAMU,CAAAA,CAASV,EAAO,iBAAA,EAAqB,CACzC,MAAA,CAAQ,GACR,UAAA,CAAY,EAAC,CACb,WAAA,CAAa,EAAC,CACd,OAAA,CAAW,EACb,CAAA,CACAO,CAAAA,CAAQ,oBAAoB,CAAA,CAAI,OAAO,OAAA,CAAQG,CAAM,CAAA,CAClD,GAAA,CAAI,CAAC,CAACP,CAAAA,CAAKC,CAAM,IAAM,CAAA,EAAGD,CAAG,CAAA,EAAA,EAAKC,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,EACrD,IAAA,CAAK,IAAI,EACd,CAGA,OAAIJ,CAAAA,CAAO,IAAA,GAAS,KAAA,GAClBO,EAAQ,4BAA4B,CAAA,CAAIP,CAAAA,CAAO,IAAA,EAAQ,aAAA,CAAA,CAIrDA,CAAAA,CAAO,IAAA,GAAS,KAAA,GAClBO,EAAQ,8BAA8B,CAAA,CAAIP,CAAAA,CAAO,IAAA,EAAQ,cAAA,CAAA,CAGpDO,CACT,CAcO,SAASI,EACdC,CAAAA,CAAAA,GACGC,CAAAA,CACA,CACH,IAAMC,CAAAA,CAAiB,IAAI,GAAA,CAAI,CAAC,YAAa,aAAA,CAAe,WAAW,CAAC,CAAA,CAExE,QAAWC,CAAAA,IAAUF,CAAAA,CACnB,GAAI,EAAA,CAACE,GAAU,OAAOA,CAAAA,EAAW,QAAA,CAAA,CAEjC,IAAA,IAAWZ,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKY,CAAM,EAAG,CACrC,GAAID,CAAAA,CAAe,GAAA,CAAIX,CAAG,CAAA,CAAG,SAE7B,IAAMa,EAAaJ,CAAAA,CAAeT,CAAG,CAAA,CAC/Bc,CAAAA,CAAaF,CAAAA,CAAeZ,CAAG,CAAA,CAEjCe,CAAAA,CAAcD,CAAS,CAAA,EAAKC,CAAAA,CAAcF,CAAS,CAAA,CACpDJ,CAAAA,CAAeT,CAAG,CAAA,CAAIQ,CAAAA,CAAU,CAAE,GAAGK,CAAU,CAAA,CAAGC,CAAS,CAAA,CAE3DL,CAAAA,CAAeT,CAAG,CAAA,CAAIc,EAE3B,CAGF,OAAOL,CACT,CAKO,SAASO,CAAAA,CAAcC,CAAAA,CAAqB,CACjD,GAAIA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,CAAU,OAAOA,CAAAA,CACpD,MAAA,CAAO,OAAOA,CAAG,CAAA,CACjB,IAAA,IAAWzB,CAAAA,IAAS,OAAO,MAAA,CAAOyB,CAAG,CAAA,CAC/B,OAAOzB,GAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EACzCwB,CAAAA,CAAWxB,CAAK,CAAA,CAGpB,OAAOyB,CACT,CAEA,SAASF,CAAAA,CAAcG,CAAAA,CAA8C,CACnE,OAAOA,CAAAA,GAAQ,IAAA,EAAQ,OAAOA,GAAQ,QAAA,EAAY,MAAA,CAAO,cAAA,CAAeA,CAAG,CAAA,GAAM,MAAA,CAAO,SAC1F,CAgBA,eAAsBC,CAAAA,CAAYC,CAAAA,CAAiBC,CAAAA,CAA4C,QAAA,CAA2B,CAExH,IAAMC,CAAAA,CADU,IAAI,aAAY,CACX,MAAA,CAAOF,CAAO,CAAA,CAE7BG,CAAAA,CAAWF,CAAAA,GAAc,QAAA,CAAW,SAAA,CAAYA,IAAc,QAAA,CAAW,SAAA,CAAY,SAAA,CACrFG,CAAAA,CAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAOD,EAAUD,CAAI,CAAA,CACtDG,CAAAA,CAAY,IAAI,UAAA,CAAWD,CAAU,CAAA,CACrCE,CAAAA,CAAS,KAAK,MAAA,CAAO,YAAA,CAAa,GAAGD,CAAS,CAAC,CAAA,CAErD,OAAO,CAAA,EAAGJ,CAAS,IAAIK,CAAM,CAAA,CAC/B,CASO,SAASC,CAAAA,EAA4B,CAC1C,IAAMC,CAAAA,CAAQ,IAAI,UAAA,CAAW,EAAE,CAAA,CAC/B,OAAA,MAAA,CAAO,eAAA,CAAgBA,CAAK,CAAA,CACrB,KAAA,CAAM,KAAKA,CAAAA,CAAQC,CAAAA,EAAMA,CAAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAC1E,CAWO,SAASC,CAAAA,CAAsB3D,EAIlC,EAAC,CAAG,CACN,GAAM,CACJ,UAAA,CAAA4D,CAAAA,CAAa,cAAA,CACb,WAAAC,CAAAA,CAAa,YAAA,CACb,cAAA,CAAAC,CAAAA,CAAiBN,CACnB,CAAA,CAAIxD,CAAAA,CAEA+D,CAAAA,CAAuB,KAE3B,SAASC,CAAAA,EAAmB,CAC1B,GAAI,CAACD,CAAAA,CAAO,CAEV,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,CACnC,IAAME,EAAQ,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,IAAI,OAAO,CAAA,EAAGJ,CAAU,CAAA,QAAA,CAAU,CAAC,CAAA,CACvE,GAAII,CAAAA,CACF,OAAAF,EAAQE,CAAAA,CAAM,CAAC,CAAA,CACRF,CAEX,CAEAA,CAAAA,CAAQD,CAAAA,GACV,CACA,OAAOC,CACT,CAWA,OAAO,CACL,WAAA,CAVkB,MAAOG,CAAAA,CAAkBC,IAAiE,CAC5G,IAAMC,CAAAA,CAASF,CAAAA,CAAQ,MAAA,CAAO,WAAA,EAAY,CAE1C,OAAI,CAAC,MAAA,CAAQ,KAAA,CAAO,OAAA,CAAS,QAAQ,CAAA,CAAE,QAAA,CAASE,CAAM,CAAA,EACpDF,EAAQ,OAAA,CAAQ,GAAA,CAAIN,CAAAA,CAAYI,CAAAA,EAAU,CAAA,CAErCG,CAAAA,CAAKD,CAAO,CACrB,CAAA,CAIE,KAAA,CAAOF,CAAAA,CACP,OAAA,EAAU,CAAED,CAAAA,CAAQD,CAAAA,GAAkB,CACxC,CACF,CAcO,SAASO,CAAAA,CAAYC,EAAatE,CAAAA,CAIrC,EAAC,CAAkB,CACrB,GAAIsE,CAAAA,EAAO,IAAA,CAAM,OAAO,IAAA,CAExB,GAAM,CACJ,YAAA,CAAAC,CAAAA,CACA,iBAAAC,CAAAA,CAAmB,CAAC,OAAA,CAAS,QAAQ,CAAA,CACrC,aAAA,CAAAC,CAAAA,CAAgB,IAClB,EAAIzE,CAAAA,CAGJ,GAAIsE,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAI,WAAW,IAAI,CAAA,CAC7C,OAAOG,CAAAA,CAAgBH,CAAAA,CAAM,IAAA,CAG/B,GAAI,CACF,IAAMI,CAAAA,CAAS,IAAI,GAAA,CAAIJ,CAAG,CAAA,CAM1B,OAHI,CAACE,CAAAA,CAAiB,SAASE,CAAAA,CAAO,QAAQ,CAAA,EAG1CH,CAAAA,EAAgB,CAACA,CAAAA,CAAa,QAAA,CAASG,CAAAA,CAAO,QAAQ,CAAA,CAAU,IAAA,CAE7DA,CAAAA,CAAO,QAAA,EAChB,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAaO,SAASC,CAAAA,CAAkB3E,EAG/B,CACD,GAAM,CAAE,WAAA,CAAA4E,EAAa,QAAA,CAAAC,CAAS,CAAA,CAAI7E,CAAAA,CAC5B8E,CAAAA,CAAqB,EAAC,CAE5B,OAAO,CACL,KAAA,EAAiB,CACf,IAAMC,CAAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CAErB,KAAOD,EAAS,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAS,CAAC,CAAA,CAAIC,CAAAA,CAAMF,CAAAA,EAChDC,CAAAA,CAAS,OAAM,CAEjB,OAAIA,CAAAA,CAAS,MAAA,EAAUF,CAAAA,CAAoB,KAAA,EAC3CE,CAAAA,CAAS,IAAA,CAAKC,CAAG,CAAA,CACV,IAAA,CACT,CAAA,CACA,SAAA,EAAoB,CAClB,IAAMA,CAAAA,CAAM,IAAA,CAAK,KAAI,CACrB,KAAOD,CAAAA,CAAS,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAS,CAAC,CAAA,CAAIC,EAAMF,CAAAA,EAChDC,CAAAA,CAAS,KAAA,EAAM,CAEjB,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGF,EAAcE,CAAAA,CAAS,MAAM,CAClD,CAAA,CACA,OAAc,CACZA,CAAAA,CAAS,MAAA,CAAS,EACpB,CACF,CACF","file":"chunk-BHP3UTTQ.cjs","sourcesContent":["/**\n * Security module — built-in protection for AkashJS apps.\n *\n * Auto-sanitization, CSP support, prototype pollution prevention,\n * and secure defaults. AkashJS is secure by default.\n */\n\n// =========================================================================\n// HTML Sanitizer — DOMPurify-style, zero dependencies\n// =========================================================================\n\n/** Tags allowed by default in sanitized HTML */\nconst SAFE_TAGS = new Set([\n 'a', 'abbr', 'address', 'article', 'aside', 'b', 'bdi', 'bdo',\n 'blockquote', 'br', 'caption', 'cite', 'code', 'col', 'colgroup',\n 'dd', 'del', 'details', 'dfn', 'div', 'dl', 'dt', 'em', 'figcaption',\n 'figure', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',\n 'hr', 'i', 'img', 'ins', 'kbd', 'li', 'main', 'mark', 'nav', 'ol',\n 'p', 'pre', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'small',\n 'span', 'strong', 'sub', 'summary', 'sup', 'table', 'tbody', 'td',\n 'tfoot', 'th', 'thead', 'time', 'tr', 'u', 'ul', 'var', 'wbr',\n]);\n\n/** Attributes allowed by default */\nconst SAFE_ATTRS = new Set([\n 'alt', 'class', 'dir', 'href', 'id', 'lang', 'name', 'rel',\n 'src', 'style', 'tabindex', 'target', 'title', 'type', 'width',\n 'height', 'colspan', 'rowspan', 'scope', 'loading', 'decoding',\n]);\n\n/** Dangerous URL protocols */\nconst DANGEROUS_PROTOCOLS = /^(javascript|data|vbscript):/i;\n\n/** Dangerous attribute names (event handlers) */\nconst DANGEROUS_ATTRS = /^on/i;\n\nexport interface SanitizeOptions {\n /** Additional allowed tags */\n allowTags?: string[];\n /** Additional allowed attributes */\n allowAttrs?: string[];\n /** Allow data-* attributes (default: true) */\n allowDataAttrs?: boolean;\n /** Allow aria-* attributes (default: true) */\n allowAriaAttrs?: boolean;\n /** Allow style attribute (default: false) */\n allowStyle?: boolean;\n /** Custom tag filter */\n tagFilter?: (tag: string) => boolean;\n /** Custom attribute filter */\n attrFilter?: (attr: string, value: string, tag: string) => boolean;\n}\n\n/**\n * Sanitize HTML string — remove dangerous tags, attributes, and URLs.\n *\n * ```ts\n * const safe = sanitize(userInput);\n * el.innerHTML = safe; // Safe from XSS\n *\n * // With options:\n * const safe = sanitize(html, { allowTags: ['iframe'], allowStyle: true });\n * ```\n */\nexport function sanitize(html: string, options: SanitizeOptions = {}): string {\n if (typeof document === 'undefined') {\n // SSR fallback — strip all tags\n return html.replace(/<[^>]*>/g, '');\n }\n\n const {\n allowTags = [],\n allowAttrs = [],\n allowDataAttrs = true,\n allowAriaAttrs = true,\n allowStyle = false,\n tagFilter,\n attrFilter,\n } = options;\n\n const allowedTags = new Set([...SAFE_TAGS, ...allowTags]);\n const allowedAttrs = new Set([...SAFE_ATTRS, ...allowAttrs]);\n\n if (!allowStyle) allowedAttrs.delete('style');\n\n // Parse HTML using browser's parser\n const doc = new DOMParser().parseFromString(html, 'text/html');\n sanitizeNode(doc.body, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n\n return doc.body.innerHTML;\n}\n\nfunction sanitizeNode(\n node: Node,\n allowedTags: Set<string>,\n allowedAttrs: Set<string>,\n allowDataAttrs: boolean,\n allowAriaAttrs: boolean,\n tagFilter?: (tag: string) => boolean,\n attrFilter?: (attr: string, value: string, tag: string) => boolean,\n): void {\n const children = Array.from(node.childNodes);\n\n for (const child of children) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n\n // Check if tag is allowed\n const isAllowed = tagFilter ? tagFilter(tag) : allowedTags.has(tag);\n\n if (!isAllowed) {\n // Replace dangerous element with its text content\n const text = document.createTextNode(el.textContent ?? '');\n node.replaceChild(text, child);\n continue;\n }\n\n // Sanitize attributes\n const attrs = Array.from(el.attributes);\n for (const attr of attrs) {\n const name = attr.name.toLowerCase();\n const value = attr.value;\n\n // Always remove event handlers\n if (DANGEROUS_ATTRS.test(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check data-* and aria-*\n if (name.startsWith('data-') && allowDataAttrs) continue;\n if (name.startsWith('aria-') && allowAriaAttrs) continue;\n\n // Custom filter\n if (attrFilter && !attrFilter(name, value, tag)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check if attribute is allowed\n if (!allowedAttrs.has(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Sanitize URLs\n if ((name === 'href' || name === 'src') && DANGEROUS_PROTOCOLS.test(value)) {\n el.removeAttribute(attr.name);\n continue;\n }\n }\n\n // Recurse into children\n sanitizeNode(el, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n }\n }\n}\n\n/**\n * Escape HTML entities — prevents XSS in text content.\n */\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\n/**\n * Create a safe HTML setter that sanitizes automatically.\n *\n * ```ts\n * const setHTML = createSafeHTML(el);\n * setHTML(userContent); // Auto-sanitized\n * ```\n */\nexport function createSafeHTML(el: HTMLElement, options?: SanitizeOptions): (html: string) => void {\n return (html: string) => {\n el.innerHTML = sanitize(html, options);\n };\n}\n\n// =========================================================================\n// CSP (Content Security Policy) Support\n// =========================================================================\n\nexport interface CSPConfig {\n /** Nonce for inline scripts/styles */\n nonce?: string;\n /** Report-only mode (default: false) */\n reportOnly?: boolean;\n /** Report URI for CSP violations */\n reportUri?: string;\n /** Custom directives */\n directives?: Record<string, string[]>;\n}\n\n/**\n * Generate a CSP header string.\n *\n * ```ts\n * const csp = generateCSP({\n * nonce: 'abc123',\n * directives: {\n * 'script-src': [\"'self'\"],\n * 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n * 'img-src': [\"'self'\", 'data:', 'https:'],\n * },\n * });\n * // \"script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; ...\"\n * ```\n */\nexport function generateCSP(config: CSPConfig = {}): string {\n const defaults: Record<string, string[]> = {\n 'default-src': [\"'self'\"],\n 'script-src': [\"'self'\"],\n 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n 'img-src': [\"'self'\", 'data:', 'https:'],\n 'font-src': [\"'self'\", 'https:'],\n 'connect-src': [\"'self'\"],\n 'frame-ancestors': [\"'none'\"],\n 'base-uri': [\"'self'\"],\n 'form-action': [\"'self'\"],\n 'object-src': [\"'none'\"],\n };\n\n const directives = { ...defaults, ...config.directives };\n\n // Add nonce\n if (config.nonce) {\n const nonceValue = `'nonce-${config.nonce}'`;\n if (directives['script-src']) {\n directives['script-src'].push(nonceValue);\n }\n if (directives['style-src']) {\n directives['style-src'].push(nonceValue);\n }\n }\n\n // Add report-uri\n if (config.reportUri) {\n directives['report-uri'] = [config.reportUri];\n }\n\n return Object.entries(directives)\n .map(([key, values]) => `${key} ${values.join(' ')}`)\n .join('; ');\n}\n\n/**\n * Get the CSP header name based on config.\n */\nexport function getCSPHeaderName(config: CSPConfig = {}): string {\n return config.reportOnly\n ? 'Content-Security-Policy-Report-Only'\n : 'Content-Security-Policy';\n}\n\n// =========================================================================\n// Security Headers (Helmet-like)\n// =========================================================================\n\nexport interface SecurityHeadersConfig {\n /** Content Security Policy (false to disable) */\n csp?: CSPConfig | false;\n /** X-Frame-Options (default: 'DENY') */\n frameOptions?: 'DENY' | 'SAMEORIGIN' | false;\n /** X-Content-Type-Options (default: 'nosniff') */\n contentTypeOptions?: boolean;\n /** X-XSS-Protection (default: '0' — let CSP handle it) */\n xssProtection?: boolean;\n /** Strict-Transport-Security */\n hsts?: { maxAge: number; includeSubDomains?: boolean; preload?: boolean } | false;\n /** Referrer-Policy (default: 'strict-origin-when-cross-origin') */\n referrerPolicy?: string | false;\n /** Permissions-Policy */\n permissionsPolicy?: Record<string, string[]> | false;\n /** Cross-Origin-Opener-Policy */\n coop?: 'same-origin' | 'same-origin-allow-popups' | 'unsafe-none' | false;\n /** Cross-Origin-Embedder-Policy */\n coep?: 'require-corp' | 'credentialless' | 'unsafe-none' | false;\n}\n\n/**\n * Generate security headers for SSR responses.\n *\n * ```ts\n * const headers = generateSecurityHeaders();\n * // Apply to your server response\n * for (const [name, value] of Object.entries(headers)) {\n * res.setHeader(name, value);\n * }\n * ```\n */\nexport function generateSecurityHeaders(config: SecurityHeadersConfig = {}): Record<string, string> {\n const headers: Record<string, string> = {};\n\n // CSP\n if (config.csp !== false) {\n const cspConfig = config.csp ?? {};\n headers[getCSPHeaderName(cspConfig)] = generateCSP(cspConfig);\n }\n\n // X-Frame-Options\n if (config.frameOptions !== false) {\n headers['X-Frame-Options'] = config.frameOptions ?? 'DENY';\n }\n\n // X-Content-Type-Options\n if (config.contentTypeOptions !== false) {\n headers['X-Content-Type-Options'] = 'nosniff';\n }\n\n // X-XSS-Protection (disabled by default — CSP is better)\n headers['X-XSS-Protection'] = config.xssProtection ? '1; mode=block' : '0';\n\n // HSTS\n if (config.hsts !== false) {\n const hsts = config.hsts ?? { maxAge: 31536000, includeSubDomains: true };\n let value = `max-age=${hsts.maxAge}`;\n if (hsts.includeSubDomains) value += '; includeSubDomains';\n if (hsts.preload) value += '; preload';\n headers['Strict-Transport-Security'] = value;\n }\n\n // Referrer-Policy\n if (config.referrerPolicy !== false) {\n headers['Referrer-Policy'] = config.referrerPolicy ?? 'strict-origin-when-cross-origin';\n }\n\n // Permissions-Policy\n if (config.permissionsPolicy !== false) {\n const policy = config.permissionsPolicy ?? {\n camera: [],\n microphone: [],\n geolocation: [],\n 'payment': [],\n };\n headers['Permissions-Policy'] = Object.entries(policy)\n .map(([key, values]) => `${key}=(${values.join(' ')})`)\n .join(', ');\n }\n\n // COOP\n if (config.coop !== false) {\n headers['Cross-Origin-Opener-Policy'] = config.coop ?? 'same-origin';\n }\n\n // COEP\n if (config.coep !== false) {\n headers['Cross-Origin-Embedder-Policy'] = config.coep ?? 'require-corp';\n }\n\n return headers;\n}\n\n// =========================================================================\n// Prototype Pollution Prevention\n// =========================================================================\n\n/**\n * Safe deep merge that prevents prototype pollution.\n * Will not set __proto__, constructor, or prototype keys.\n *\n * ```ts\n * const result = safeMerge(defaults, userConfig);\n * ```\n */\nexport function safeMerge<T extends Record<string, unknown>>(\n target: T,\n ...sources: Partial<T>[]\n): T {\n const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const key of Object.keys(source)) {\n if (DANGEROUS_KEYS.has(key)) continue;\n\n const targetVal = (target as any)[key];\n const sourceVal = (source as any)[key];\n\n if (isPlainObject(sourceVal) && isPlainObject(targetVal)) {\n (target as any)[key] = safeMerge({ ...targetVal }, sourceVal);\n } else {\n (target as any)[key] = sourceVal;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Freeze an object deeply — prevents any modification.\n */\nexport function deepFreeze<T>(obj: T): Readonly<T> {\n if (obj === null || typeof obj !== 'object') return obj;\n Object.freeze(obj);\n for (const value of Object.values(obj)) {\n if (typeof value === 'object' && value !== null) {\n deepFreeze(value);\n }\n }\n return obj;\n}\n\nfunction isPlainObject(val: unknown): val is Record<string, unknown> {\n return val !== null && typeof val === 'object' && Object.getPrototypeOf(val) === Object.prototype;\n}\n\n// =========================================================================\n// Subresource Integrity (SRI)\n// =========================================================================\n\n/**\n * Generate SRI hash for a script/style resource.\n * For use in <script integrity=\"...\"> and <link integrity=\"...\">.\n *\n * ```ts\n * // In Node.js build script:\n * const hash = await generateSRI(fileContent);\n * // 'sha384-...'\n * ```\n */\nexport async function generateSRI(content: string, algorithm: 'sha256' | 'sha384' | 'sha512' = 'sha384'): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n\n const hashAlgo = algorithm === 'sha256' ? 'SHA-256' : algorithm === 'sha384' ? 'SHA-384' : 'SHA-512';\n const hashBuffer = await crypto.subtle.digest(hashAlgo, data);\n const hashArray = new Uint8Array(hashBuffer);\n const base64 = btoa(String.fromCharCode(...hashArray));\n\n return `${algorithm}-${base64}`;\n}\n\n// =========================================================================\n// CSRF Protection\n// =========================================================================\n\n/**\n * Generate a CSRF token.\n */\nexport function generateCSRFToken(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Create an HTTP interceptor that attaches CSRF tokens.\n *\n * ```ts\n * const csrf = createCSRFInterceptor();\n * const http = createHttpClient({ interceptors: [csrf.interceptor] });\n * // Token is auto-attached to every mutation request\n * ```\n */\nexport function createCSRFInterceptor(options: {\n headerName?: string;\n cookieName?: string;\n tokenGenerator?: () => string;\n} = {}) {\n const {\n headerName = 'X-CSRF-Token',\n cookieName = 'csrf-token',\n tokenGenerator = generateCSRFToken,\n } = options;\n\n let token: string | null = null;\n\n function getToken(): string {\n if (!token) {\n // Try to read from cookie\n if (typeof document !== 'undefined') {\n const match = document.cookie.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n token = match[1];\n return token;\n }\n }\n // Generate new token\n token = tokenGenerator();\n }\n return token;\n }\n\n const interceptor = async (request: Request, next: (req: Request) => Promise<Response>): Promise<Response> => {\n const method = request.method.toUpperCase();\n // Only attach to mutating requests\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {\n request.headers.set(headerName, getToken());\n }\n return next(request);\n };\n\n return {\n interceptor,\n token: getToken,\n refresh() { token = tokenGenerator(); },\n };\n}\n\n// =========================================================================\n// Input Validation\n// =========================================================================\n\n/**\n * Validate and sanitize a URL — prevent open redirect attacks.\n *\n * ```ts\n * const safe = sanitizeURL(userInput, { allowedHosts: ['example.com'] });\n * if (safe) window.location.href = safe;\n * ```\n */\nexport function sanitizeURL(url: string, options: {\n allowedHosts?: string[];\n allowedProtocols?: string[];\n allowRelative?: boolean;\n} = {}): string | null {\n if (url == null) return null;\n\n const {\n allowedHosts,\n allowedProtocols = ['http:', 'https:'],\n allowRelative = true,\n } = options;\n\n // Relative URLs\n if (url.startsWith('/') && !url.startsWith('//')) {\n return allowRelative ? url : null;\n }\n\n try {\n const parsed = new URL(url);\n\n // Check protocol\n if (!allowedProtocols.includes(parsed.protocol)) return null;\n\n // Check host\n if (allowedHosts && !allowedHosts.includes(parsed.hostname)) return null;\n\n return parsed.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Rate limiter for client-side actions (e.g., form submissions).\n *\n * ```ts\n * const limiter = createRateLimiter({ maxAttempts: 5, windowMs: 60000 });\n * if (!limiter.check()) {\n * toast.error('Too many attempts. Please wait.');\n * return;\n * }\n * ```\n */\nexport function createRateLimiter(options: {\n maxAttempts: number;\n windowMs: number;\n}) {\n const { maxAttempts, windowMs } = options;\n const attempts: number[] = [];\n\n return {\n check(): boolean {\n const now = Date.now();\n // Remove old attempts\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n if (attempts.length >= maxAttempts) return false;\n attempts.push(now);\n return true;\n },\n remaining(): number {\n const now = Date.now();\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n return Math.max(0, maxAttempts - attempts.length);\n },\n reset(): void {\n attempts.length = 0;\n },\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function Q(e){return Array.isArray(e)?e.join(","):typeof e=="boolean"?e?"true":"false":String(e)}function b(e,t){return typeof t=="number"?Number(e):typeof t=="boolean"?e==="true"||e==="1":Array.isArray(t)?e?e.split(","):[]:e}function u(){return typeof window>"u"?new URLSearchParams:new URLSearchParams(window.location.search)}function x(e,t){if(typeof window>"u")return;let n=e.toString(),r=n?`${window.location.pathname}?${n}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;t==="push"?window.history.pushState(null,"",r):window.history.replaceState(null,"",r);}var s=new Map,h=false;function R(){h||typeof window>"u"||(h=true,window.addEventListener("popstate",()=>{let e=u();chunkHL2VGVJT_cjs.a(()=>{for(let[t,n]of s){let r=e.get(t),a=r!==null?n.deserialize(r):n.defaultValue;n.signal.set(a);}});}));}function v(e,t,n={}){let{serialize:r=i=>Q(i),deserialize:a=i=>b(i,t),history:w="replace",debounce:d=0,removeDefault:m=true}=n,p=u().get(e),S=p!==null?a(p):t,o=chunkHL2VGVJT_cjs.c(S);s.set(e,{signal:o,deserialize:a,defaultValue:t}),R();let l=null,T=false,z=o.set;o.set=i=>{if(z(i),T);let y=()=>{let c=u();m&&i===t?c.delete(e):c.set(e,r(i)),x(c,w);};d>0?(l&&clearTimeout(l),l=setTimeout(y,d)):y();};o.update;return o.update=i=>{o.set(i(o()));},o}function j(e,t){let n={};for(let[r,a]of Object.entries(e))n[r]=v(r,a.default,{serialize:a.serialize,deserialize:a.deserialize,history:t?.history});return n}function D(){if(typeof window>"u")return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(null,"",e),chunkHL2VGVJT_cjs.a(()=>{for(let[,t]of s)t.signal.set(t.defaultValue);});}function M(){let e=u(),t={};return e.forEach((n,r)=>{t[r]=n;}),t}function O(e){s.delete(e);}function k(){s.clear();}exports.a=v;exports.b=j;exports.c=D;exports.d=M;exports.e=O;exports.f=k;//# sourceMappingURL=chunk-BLT7XOSX.cjs.map
2
+ //# sourceMappingURL=chunk-BLT7XOSX.cjs.map