@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.
- package/dist/a11y.cjs +2 -0
- package/dist/a11y.cjs.map +1 -0
- package/dist/a11y.d.cts +99 -0
- package/dist/a11y.d.ts +99 -0
- package/dist/a11y.js +2 -0
- package/dist/a11y.js.map +1 -0
- package/dist/async-component.cjs +2 -0
- package/dist/async-component.cjs.map +1 -0
- package/dist/async-component.d.cts +44 -0
- package/dist/async-component.d.ts +44 -0
- package/dist/async-component.js +2 -0
- package/dist/async-component.js.map +1 -0
- package/dist/await-block.cjs +2 -0
- package/dist/await-block.cjs.map +1 -0
- package/dist/await-block.d.cts +37 -0
- package/dist/await-block.d.ts +37 -0
- package/dist/await-block.js +2 -0
- package/dist/await-block.js.map +1 -0
- package/dist/browser.cjs +2 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +125 -0
- package/dist/browser.d.ts +125 -0
- package/dist/browser.js +2 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunk-2GGCZC4O.js +2 -0
- package/dist/chunk-2GGCZC4O.js.map +1 -0
- package/dist/chunk-2UATNCKC.js +2 -0
- package/dist/chunk-2UATNCKC.js.map +1 -0
- package/dist/chunk-2XFW6MT7.js +2 -0
- package/dist/chunk-2XFW6MT7.js.map +1 -0
- package/dist/chunk-34PQECMN.cjs +2 -0
- package/dist/chunk-34PQECMN.cjs.map +1 -0
- package/dist/chunk-3CD6A5YV.js +2 -0
- package/dist/chunk-3CD6A5YV.js.map +1 -0
- package/dist/chunk-3PCZFKBH.js +2 -0
- package/dist/chunk-3PCZFKBH.js.map +1 -0
- package/dist/chunk-3PGU24B5.cjs +3 -0
- package/dist/chunk-3PGU24B5.cjs.map +1 -0
- package/dist/chunk-3PLQPLVA.js +2 -0
- package/dist/chunk-3PLQPLVA.js.map +1 -0
- package/dist/chunk-3RDEFZMT.js +2 -0
- package/dist/chunk-3RDEFZMT.js.map +1 -0
- package/dist/chunk-3VYMJMAU.js +2 -0
- package/dist/chunk-3VYMJMAU.js.map +1 -0
- package/dist/chunk-3Y663FYJ.js +2 -0
- package/dist/chunk-3Y663FYJ.js.map +1 -0
- package/dist/chunk-45DPEU7T.cjs +2 -0
- package/dist/chunk-45DPEU7T.cjs.map +1 -0
- package/dist/chunk-4J3QBQVW.js +4 -0
- package/dist/chunk-4J3QBQVW.js.map +1 -0
- package/dist/chunk-4VLBY2BW.cjs +2 -0
- package/dist/chunk-4VLBY2BW.cjs.map +1 -0
- package/dist/chunk-5GDMAABU.js +2 -0
- package/dist/chunk-5GDMAABU.js.map +1 -0
- package/dist/chunk-5JKXREA2.cjs +2 -0
- package/dist/chunk-5JKXREA2.cjs.map +1 -0
- package/dist/chunk-5QCWH6QA.cjs +4 -0
- package/dist/chunk-5QCWH6QA.cjs.map +1 -0
- package/dist/chunk-637ENG3A.cjs +2 -0
- package/dist/chunk-637ENG3A.cjs.map +1 -0
- package/dist/chunk-66PLXQS3.js +2 -0
- package/dist/chunk-66PLXQS3.js.map +1 -0
- package/dist/chunk-6GY6HC75.cjs +2 -0
- package/dist/chunk-6GY6HC75.cjs.map +1 -0
- package/dist/chunk-6I5PPQ34.cjs +17 -0
- package/dist/chunk-6I5PPQ34.cjs.map +1 -0
- package/dist/chunk-6ZCFPR4O.js +2 -0
- package/dist/chunk-6ZCFPR4O.js.map +1 -0
- package/dist/chunk-7T4HMWUC.js +2 -0
- package/dist/{chunk-5A7KDBDU.js.map ā chunk-7T4HMWUC.js.map} +1 -1
- package/dist/chunk-AOFLE33X.js +5 -0
- package/dist/chunk-AOFLE33X.js.map +1 -0
- package/dist/chunk-AQQQVDBQ.cjs +2 -0
- package/dist/chunk-AQQQVDBQ.cjs.map +1 -0
- package/dist/chunk-AXB5GHGO.js +2 -0
- package/dist/chunk-AXB5GHGO.js.map +1 -0
- package/dist/chunk-BHP3UTTQ.cjs +3 -0
- package/dist/chunk-BHP3UTTQ.cjs.map +1 -0
- package/dist/chunk-BLT7XOSX.cjs +2 -0
- package/dist/chunk-BLT7XOSX.cjs.map +1 -0
- package/dist/chunk-CDZR6GWB.js +2 -0
- package/dist/chunk-CDZR6GWB.js.map +1 -0
- package/dist/chunk-DFYXFKCH.cjs +2 -0
- package/dist/chunk-DFYXFKCH.cjs.map +1 -0
- package/dist/chunk-DP7G45QM.cjs +13 -0
- package/dist/chunk-DP7G45QM.cjs.map +1 -0
- package/dist/chunk-DWSIR5SL.cjs +2 -0
- package/dist/chunk-DWSIR5SL.cjs.map +1 -0
- package/dist/chunk-E6RB7PRO.js +2 -0
- package/dist/chunk-E6RB7PRO.js.map +1 -0
- package/dist/chunk-E7BPGVIS.js +2 -0
- package/dist/chunk-E7BPGVIS.js.map +1 -0
- package/dist/chunk-E7GAIKQT.cjs +2 -0
- package/dist/chunk-E7GAIKQT.cjs.map +1 -0
- package/dist/chunk-EEQZFKEG.js +2 -0
- package/dist/{chunk-TKFJGLUO.js.map ā chunk-EEQZFKEG.js.map} +1 -1
- package/dist/chunk-EXKQPZ5N.cjs +2 -0
- package/dist/chunk-EXKQPZ5N.cjs.map +1 -0
- package/dist/{chunk-ZYVQQ5VR.cjs ā chunk-F2F5OXCK.cjs} +3 -3
- package/dist/{chunk-ZYVQQ5VR.cjs.map ā chunk-F2F5OXCK.cjs.map} +1 -1
- package/dist/chunk-F4FXIPR3.js +2 -0
- package/dist/chunk-F4FXIPR3.js.map +1 -0
- package/dist/chunk-GAAO2KXN.js +2 -0
- package/dist/chunk-GAAO2KXN.js.map +1 -0
- package/dist/chunk-GB7IUC6E.js +2 -0
- package/dist/chunk-GB7IUC6E.js.map +1 -0
- package/dist/chunk-GHSJ4B55.js +11 -0
- package/dist/chunk-GHSJ4B55.js.map +1 -0
- package/dist/{chunk-U53YRJNV.js ā chunk-GRXHWCFR.js} +3 -3
- package/dist/{chunk-U53YRJNV.js.map ā chunk-GRXHWCFR.js.map} +1 -1
- package/dist/chunk-HHPRQMGX.cjs +2 -0
- package/dist/chunk-HHPRQMGX.cjs.map +1 -0
- package/dist/chunk-HL2VGVJT.cjs +2 -0
- package/dist/chunk-HL2VGVJT.cjs.map +1 -0
- package/dist/chunk-IDTJWCYW.js +2 -0
- package/dist/chunk-IDTJWCYW.js.map +1 -0
- package/dist/chunk-IHEW6F2H.js +2 -0
- package/dist/chunk-IHEW6F2H.js.map +1 -0
- package/dist/chunk-IJS2EMSE.js +2 -0
- package/dist/chunk-IJS2EMSE.js.map +1 -0
- package/dist/chunk-IQGSDFBI.cjs +2 -0
- package/dist/chunk-IQGSDFBI.cjs.map +1 -0
- package/dist/chunk-JEYTB4AG.js +2 -0
- package/dist/chunk-JEYTB4AG.js.map +1 -0
- package/dist/chunk-JFLZJPVN.js +2 -0
- package/dist/chunk-JFLZJPVN.js.map +1 -0
- package/dist/chunk-JLPJ22CE.js +2 -0
- package/dist/chunk-JLPJ22CE.js.map +1 -0
- package/dist/chunk-JMY6E7VR.cjs +2 -0
- package/dist/chunk-JMY6E7VR.cjs.map +1 -0
- package/dist/chunk-K2HB5VFA.cjs +2 -0
- package/dist/chunk-K2HB5VFA.cjs.map +1 -0
- package/dist/chunk-K7TMUF3F.cjs +2 -0
- package/dist/chunk-K7TMUF3F.cjs.map +1 -0
- package/dist/chunk-KFMCMKSC.cjs +2 -0
- package/dist/chunk-KFMCMKSC.cjs.map +1 -0
- package/dist/chunk-KGV5MKBC.cjs +11 -0
- package/dist/chunk-KGV5MKBC.cjs.map +1 -0
- package/dist/chunk-KMEGUPH2.js +3 -0
- package/dist/chunk-KMEGUPH2.js.map +1 -0
- package/dist/chunk-KQAYFPJI.cjs +2 -0
- package/dist/chunk-KQAYFPJI.cjs.map +1 -0
- package/dist/chunk-LSD7DEMV.cjs +2 -0
- package/dist/chunk-LSD7DEMV.cjs.map +1 -0
- package/dist/{chunk-2U643GJZ.cjs ā chunk-LTMDSGQ6.cjs} +2 -2
- package/dist/{chunk-2U643GJZ.cjs.map ā chunk-LTMDSGQ6.cjs.map} +1 -1
- package/dist/chunk-LWQPLKL6.cjs +20 -0
- package/dist/chunk-LWQPLKL6.cjs.map +1 -0
- package/dist/{chunk-2Q6SYE5O.cjs ā chunk-M2OWSNOM.cjs} +2 -2
- package/dist/{chunk-2Q6SYE5O.cjs.map ā chunk-M2OWSNOM.cjs.map} +1 -1
- package/dist/chunk-MADMPRT2.js +20 -0
- package/dist/chunk-MADMPRT2.js.map +1 -0
- package/dist/chunk-MDHWM3C2.js +2 -0
- package/dist/chunk-MDHWM3C2.js.map +1 -0
- package/dist/chunk-MGFRVOM5.js +2 -0
- package/dist/chunk-MGFRVOM5.js.map +1 -0
- package/dist/chunk-MNUOIAXS.js +2 -0
- package/dist/chunk-MNUOIAXS.js.map +1 -0
- package/dist/chunk-ND2HZRMR.cjs +2 -0
- package/dist/chunk-ND2HZRMR.cjs.map +1 -0
- package/dist/chunk-NGU2W4PD.cjs +2 -0
- package/dist/chunk-NGU2W4PD.cjs.map +1 -0
- package/dist/chunk-NQEY7DR5.cjs +2 -0
- package/dist/chunk-NQEY7DR5.cjs.map +1 -0
- package/dist/chunk-O5OTZP5M.cjs +2 -0
- package/dist/chunk-O5OTZP5M.cjs.map +1 -0
- package/dist/chunk-OQV3NYDH.js +3 -0
- package/dist/chunk-OQV3NYDH.js.map +1 -0
- package/dist/chunk-P4USGNUK.cjs +2 -0
- package/dist/chunk-P4USGNUK.cjs.map +1 -0
- package/dist/chunk-P55EWYAD.js +2 -0
- package/dist/chunk-P55EWYAD.js.map +1 -0
- package/dist/chunk-PPNEAFKE.cjs +5 -0
- package/dist/chunk-PPNEAFKE.cjs.map +1 -0
- package/dist/chunk-PVIYD25D.js +2 -0
- package/dist/chunk-PVIYD25D.js.map +1 -0
- package/dist/chunk-PWJMCURK.cjs +2 -0
- package/dist/chunk-PWJMCURK.cjs.map +1 -0
- package/dist/chunk-QQTZQ6UX.cjs +2 -0
- package/dist/chunk-QQTZQ6UX.cjs.map +1 -0
- package/dist/chunk-QTQ6RUX4.cjs +5 -0
- package/dist/chunk-QTQ6RUX4.cjs.map +1 -0
- package/dist/chunk-SBDFBADL.cjs +2 -0
- package/dist/chunk-SBDFBADL.cjs.map +1 -0
- package/dist/chunk-SPS3LM47.cjs +2 -0
- package/dist/chunk-SPS3LM47.cjs.map +1 -0
- package/dist/chunk-SVNS64LE.js +5 -0
- package/dist/chunk-SVNS64LE.js.map +1 -0
- package/dist/chunk-SZDKDXRV.js +17 -0
- package/dist/chunk-SZDKDXRV.js.map +1 -0
- package/dist/chunk-T7A5YOEG.cjs +2 -0
- package/dist/chunk-T7A5YOEG.cjs.map +1 -0
- package/dist/chunk-U65WRXZC.js +13 -0
- package/dist/chunk-U65WRXZC.js.map +1 -0
- package/dist/chunk-UT4MWGJ3.js +2 -0
- package/dist/chunk-UT4MWGJ3.js.map +1 -0
- package/dist/chunk-UXHQ5OFW.js +2 -0
- package/dist/chunk-UXHQ5OFW.js.map +1 -0
- package/dist/chunk-UYJ4BAPL.cjs +2 -0
- package/dist/chunk-UYJ4BAPL.cjs.map +1 -0
- package/dist/chunk-VDHUPQDK.cjs +2 -0
- package/dist/chunk-VDHUPQDK.cjs.map +1 -0
- package/dist/chunk-VTD3TI3M.js +2 -0
- package/dist/chunk-VTD3TI3M.js.map +1 -0
- package/dist/chunk-VUMMC2P5.js +2 -0
- package/dist/chunk-VUMMC2P5.js.map +1 -0
- package/dist/chunk-VX7PSSOU.js +5 -0
- package/dist/chunk-VX7PSSOU.js.map +1 -0
- package/dist/chunk-WB7QDCEA.js +2 -0
- package/dist/{chunk-5NHDEY2C.js.map ā chunk-WB7QDCEA.js.map} +1 -1
- package/dist/chunk-WLSXJU2N.js +13 -0
- package/dist/chunk-WLSXJU2N.js.map +1 -0
- package/dist/chunk-XAGYLTHV.js +2 -0
- package/dist/chunk-XAGYLTHV.js.map +1 -0
- package/dist/{chunk-AVVJKYT3.cjs ā chunk-XE7JC7Y3.cjs} +2 -2
- package/dist/{chunk-AVVJKYT3.cjs.map ā chunk-XE7JC7Y3.cjs.map} +1 -1
- package/dist/chunk-XMNDNTHK.cjs +5 -0
- package/dist/chunk-XMNDNTHK.cjs.map +1 -0
- package/dist/chunk-XOPRWJCX.cjs +2 -0
- package/dist/chunk-XOPRWJCX.cjs.map +1 -0
- package/dist/chunk-XPLIEN2G.cjs +13 -0
- package/dist/chunk-XPLIEN2G.cjs.map +1 -0
- package/dist/chunk-XRWOZO67.js +2 -0
- package/dist/chunk-XRWOZO67.js.map +1 -0
- package/dist/chunk-XZOP3IWH.cjs +2 -0
- package/dist/chunk-XZOP3IWH.cjs.map +1 -0
- package/dist/chunk-YG76TVFL.js +2 -0
- package/dist/chunk-YG76TVFL.js.map +1 -0
- package/dist/chunk-YQQDRDJ7.cjs +2 -0
- package/dist/chunk-YQQDRDJ7.cjs.map +1 -0
- package/dist/chunk-ZGE46DPV.cjs +2 -0
- package/dist/chunk-ZGE46DPV.cjs.map +1 -0
- package/dist/{component-C1WnFcRp.d.ts ā component-CPVtkASo.d.ts} +2 -3
- package/dist/{component-C1WnFcRp.d.cts ā component-CxlupKuc.d.cts} +2 -3
- package/dist/composables.cjs +2 -0
- package/dist/composables.cjs.map +1 -0
- package/dist/composables.d.cts +103 -0
- package/dist/composables.d.ts +103 -0
- package/dist/composables.js +2 -0
- package/dist/composables.js.map +1 -0
- package/dist/{context-CB1mCq2h.d.cts ā context-Cwt7QCpk.d.cts} +1 -9
- package/dist/{context-CB1mCq2h.d.ts ā context-Cwt7QCpk.d.ts} +1 -9
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +5 -4
- package/dist/core.d.ts +5 -4
- package/dist/core.js +1 -1
- package/dist/css.cjs +2 -0
- package/dist/css.cjs.map +1 -0
- package/dist/css.d.cts +42 -0
- package/dist/css.d.ts +42 -0
- package/dist/css.js +2 -0
- package/dist/css.js.map +1 -0
- package/dist/data-table.cjs +2 -0
- package/dist/data-table.cjs.map +1 -0
- package/dist/data-table.d.cts +97 -0
- package/dist/data-table.d.ts +97 -0
- package/dist/data-table.js +2 -0
- package/dist/data-table.js.map +1 -0
- package/dist/deep-signal.cjs +2 -0
- package/dist/deep-signal.cjs.map +1 -0
- package/dist/deep-signal.d.cts +48 -0
- package/dist/deep-signal.d.ts +48 -0
- package/dist/deep-signal.js +2 -0
- package/dist/deep-signal.js.map +1 -0
- package/dist/defer.cjs +2 -0
- package/dist/defer.cjs.map +1 -0
- package/dist/defer.d.cts +55 -0
- package/dist/defer.d.ts +55 -0
- package/dist/defer.js +2 -0
- package/dist/defer.js.map +1 -0
- package/dist/deprecation.cjs +2 -0
- package/dist/deprecation.cjs.map +1 -0
- package/dist/deprecation.d.cts +119 -0
- package/dist/deprecation.d.ts +119 -0
- package/dist/deprecation.js +2 -0
- package/dist/deprecation.js.map +1 -0
- package/dist/{devtools-overlay-CJWKBTP4.js ā devtools-overlay-3PHULVP4.js} +3 -3
- package/dist/{devtools-overlay-CJWKBTP4.js.map ā devtools-overlay-3PHULVP4.js.map} +1 -1
- package/dist/{devtools-overlay-EQ3G755P.cjs ā devtools-overlay-SJV7WNNS.cjs} +4 -4
- package/dist/{devtools-overlay-EQ3G755P.cjs.map ā devtools-overlay-SJV7WNNS.cjs.map} +1 -1
- package/dist/devtools.cjs +2 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +78 -0
- package/dist/devtools.d.ts +78 -0
- package/dist/devtools.js +2 -0
- package/dist/devtools.js.map +1 -0
- package/dist/di.cjs +2 -0
- package/dist/di.cjs.map +1 -0
- package/dist/di.d.cts +93 -0
- package/dist/di.d.ts +93 -0
- package/dist/di.js +2 -0
- package/dist/di.js.map +1 -0
- package/dist/directive.cjs +2 -0
- package/dist/directive.cjs.map +1 -0
- package/dist/directive.d.cts +102 -0
- package/dist/directive.d.ts +102 -0
- package/dist/directive.js +2 -0
- package/dist/directive.js.map +1 -0
- package/dist/error-boundary.cjs +2 -0
- package/dist/error-boundary.cjs.map +1 -0
- package/dist/error-boundary.d.cts +17 -0
- package/dist/error-boundary.d.ts +17 -0
- package/dist/error-boundary.js +2 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/error-hints.cjs +2 -0
- package/dist/error-hints.cjs.map +1 -0
- package/dist/error-hints.d.cts +17 -0
- package/dist/error-hints.d.ts +17 -0
- package/dist/error-hints.js +2 -0
- package/dist/error-hints.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +35 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-bus.cjs +2 -0
- package/dist/event-bus.cjs.map +1 -0
- package/dist/event-bus.d.cts +68 -0
- package/dist/event-bus.d.ts +68 -0
- package/dist/event-bus.js +2 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/event-modifiers.cjs +2 -0
- package/dist/event-modifiers.cjs.map +1 -0
- package/dist/event-modifiers.d.cts +130 -0
- package/dist/event-modifiers.d.ts +130 -0
- package/dist/event-modifiers.js +2 -0
- package/dist/event-modifiers.js.map +1 -0
- package/dist/flip.cjs +2 -0
- package/dist/flip.cjs.map +1 -0
- package/dist/flip.d.cts +66 -0
- package/dist/flip.d.ts +66 -0
- package/dist/flip.js +2 -0
- package/dist/flip.js.map +1 -0
- package/dist/head.cjs +2 -0
- package/dist/head.cjs.map +1 -0
- package/dist/head.d.cts +70 -0
- package/dist/head.d.ts +70 -0
- package/dist/head.js +2 -0
- package/dist/head.js.map +1 -0
- package/dist/hydration.cjs +2 -0
- package/dist/hydration.cjs.map +1 -0
- package/dist/hydration.d.cts +84 -0
- package/dist/hydration.d.ts +84 -0
- package/dist/hydration.js +2 -0
- package/dist/hydration.js.map +1 -0
- package/dist/image.cjs +2 -0
- package/dist/image.cjs.map +1 -0
- package/dist/image.d.cts +54 -0
- package/dist/image.d.ts +54 -0
- package/dist/image.js +2 -0
- package/dist/image.js.map +1 -0
- package/dist/index.cjs +1 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -3155
- package/dist/index.d.ts +50 -3155
- package/dist/index.js +1 -63
- package/dist/index.js.map +1 -1
- package/dist/infinite-scroll.cjs +2 -0
- package/dist/infinite-scroll.cjs.map +1 -0
- package/dist/infinite-scroll.d.cts +49 -0
- package/dist/infinite-scroll.d.ts +49 -0
- package/dist/infinite-scroll.js +2 -0
- package/dist/infinite-scroll.js.map +1 -0
- package/dist/leak-detector.cjs +2 -0
- package/dist/leak-detector.cjs.map +1 -0
- package/dist/leak-detector.d.cts +71 -0
- package/dist/leak-detector.d.ts +71 -0
- package/dist/leak-detector.js +2 -0
- package/dist/leak-detector.js.map +1 -0
- package/dist/machine.cjs +1 -1
- package/dist/machine.d.cts +1 -1
- package/dist/machine.d.ts +1 -1
- package/dist/machine.js +1 -1
- package/dist/offline.cjs +1 -1
- package/dist/offline.d.cts +1 -1
- package/dist/offline.d.ts +1 -1
- package/dist/offline.js +1 -1
- package/dist/perf.cjs +2 -0
- package/dist/perf.cjs.map +1 -0
- package/dist/perf.d.cts +97 -0
- package/dist/perf.d.ts +97 -0
- package/dist/perf.js +2 -0
- package/dist/perf.js.map +1 -0
- package/dist/pipes.cjs +2 -0
- package/dist/pipes.cjs.map +1 -0
- package/dist/pipes.d.cts +130 -0
- package/dist/pipes.d.ts +130 -0
- package/dist/pipes.js +2 -0
- package/dist/pipes.js.map +1 -0
- package/dist/plugin.cjs +2 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +70 -0
- package/dist/plugin.d.ts +70 -0
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -0
- package/dist/portal.cjs +2 -0
- package/dist/portal.cjs.map +1 -0
- package/dist/portal.d.cts +30 -0
- package/dist/portal.d.ts +30 -0
- package/dist/portal.js +2 -0
- package/dist/portal.js.map +1 -0
- package/dist/pwa.cjs +1 -1
- package/dist/pwa.d.cts +1 -1
- package/dist/pwa.d.ts +1 -1
- package/dist/pwa.js +1 -1
- package/dist/query-state.cjs +2 -0
- package/dist/query-state.cjs.map +1 -0
- package/dist/query-state.d.cts +82 -0
- package/dist/query-state.d.ts +82 -0
- package/dist/query-state.js +2 -0
- package/dist/query-state.js.map +1 -0
- package/dist/reconcile.cjs +2 -0
- package/dist/reconcile.cjs.map +1 -0
- package/dist/reconcile.d.cts +42 -0
- package/dist/reconcile.d.ts +42 -0
- package/dist/reconcile.js +2 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/scheduler-CKi1esN-.d.cts +9 -0
- package/dist/scheduler-CKi1esN-.d.ts +9 -0
- package/dist/security.cjs +2 -0
- package/dist/security.cjs.map +1 -0
- package/dist/security.d.cts +193 -0
- package/dist/security.d.ts +193 -0
- package/dist/security.js +2 -0
- package/dist/security.js.map +1 -0
- package/dist/seo.cjs +2 -0
- package/dist/seo.cjs.map +1 -0
- package/dist/seo.d.cts +118 -0
- package/dist/seo.d.ts +118 -0
- package/dist/seo.js +2 -0
- package/dist/seo.js.map +1 -0
- package/dist/{signals-C7XfOHHR.d.cts ā signals-DionyGGY.d.cts} +7 -0
- package/dist/{signals-C7XfOHHR.d.ts ā signals-DionyGGY.d.ts} +7 -0
- package/dist/snippets.cjs +2 -0
- package/dist/snippets.cjs.map +1 -0
- package/dist/snippets.d.cts +109 -0
- package/dist/snippets.d.ts +109 -0
- package/dist/snippets.js +2 -0
- package/dist/snippets.js.map +1 -0
- package/dist/ssg.cjs +2 -0
- package/dist/ssg.cjs.map +1 -0
- package/dist/ssg.d.cts +82 -0
- package/dist/ssg.d.ts +82 -0
- package/dist/ssg.js +2 -0
- package/dist/ssg.js.map +1 -0
- package/dist/ssr.cjs +1 -1
- package/dist/ssr.d.cts +2 -1
- package/dist/ssr.d.ts +2 -1
- package/dist/ssr.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.d.cts +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.js +1 -1
- package/dist/suspense.cjs +2 -0
- package/dist/suspense.cjs.map +1 -0
- package/dist/suspense.d.cts +36 -0
- package/dist/suspense.d.ts +36 -0
- package/dist/suspense.js +2 -0
- package/dist/suspense.js.map +1 -0
- package/dist/switch.cjs +2 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.d.cts +48 -0
- package/dist/switch.d.ts +48 -0
- package/dist/switch.js +2 -0
- package/dist/switch.js.map +1 -0
- package/dist/sync.cjs +1 -1
- package/dist/sync.d.cts +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +1 -1
- package/dist/test.cjs +2 -2
- package/dist/test.cjs.map +1 -1
- package/dist/test.d.cts +5 -4
- package/dist/test.d.ts +5 -4
- package/dist/test.js +2 -2
- package/dist/test.js.map +1 -1
- package/dist/theme.cjs +2 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +56 -0
- package/dist/theme.d.ts +56 -0
- package/dist/theme.js +2 -0
- package/dist/theme.js.map +1 -0
- package/dist/toast.cjs +2 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.d.cts +66 -0
- package/dist/toast.d.ts +66 -0
- package/dist/toast.js +2 -0
- package/dist/toast.js.map +1 -0
- package/dist/transition.cjs +2 -0
- package/dist/transition.cjs.map +1 -0
- package/dist/transition.d.cts +90 -0
- package/dist/transition.d.ts +90 -0
- package/dist/transition.js +2 -0
- package/dist/transition.js.map +1 -0
- package/dist/tweened.cjs +2 -0
- package/dist/tweened.cjs.map +1 -0
- package/dist/tweened.d.cts +59 -0
- package/dist/tweened.d.ts +59 -0
- package/dist/tweened.js +2 -0
- package/dist/tweened.js.map +1 -0
- package/dist/types-DjZCk1xT.d.cts +4 -0
- package/dist/types-DjZCk1xT.d.ts +4 -0
- package/dist/view-transition.cjs +2 -0
- package/dist/view-transition.cjs.map +1 -0
- package/dist/view-transition.d.cts +80 -0
- package/dist/view-transition.d.ts +80 -0
- package/dist/view-transition.js +2 -0
- package/dist/view-transition.js.map +1 -0
- package/dist/virtual-list.cjs +2 -0
- package/dist/virtual-list.cjs.map +1 -0
- package/dist/virtual-list.d.cts +67 -0
- package/dist/virtual-list.d.ts +67 -0
- package/dist/virtual-list.js +2 -0
- package/dist/virtual-list.js.map +1 -0
- package/dist/watch.cjs +2 -0
- package/dist/watch.cjs.map +1 -0
- package/dist/watch.d.cts +70 -0
- package/dist/watch.d.ts +70 -0
- package/dist/watch.js +2 -0
- package/dist/watch.js.map +1 -0
- package/dist/web-component.cjs +2 -0
- package/dist/web-component.cjs.map +1 -0
- package/dist/web-component.d.cts +51 -0
- package/dist/web-component.d.ts +51 -0
- package/dist/web-component.js +2 -0
- package/dist/web-component.js.map +1 -0
- package/package.json +249 -11
- package/dist/chunk-35DJOBEO.cjs +0 -2
- package/dist/chunk-35DJOBEO.cjs.map +0 -1
- package/dist/chunk-3GRR4VW2.js +0 -13
- package/dist/chunk-3GRR4VW2.js.map +0 -1
- package/dist/chunk-5A7KDBDU.js +0 -2
- package/dist/chunk-5NHDEY2C.js +0 -2
- package/dist/chunk-6GGYM5SF.cjs +0 -5
- package/dist/chunk-6GGYM5SF.cjs.map +0 -1
- package/dist/chunk-EEILP4OL.cjs +0 -13
- package/dist/chunk-EEILP4OL.cjs.map +0 -1
- package/dist/chunk-FTTNKDZQ.js +0 -5
- package/dist/chunk-FTTNKDZQ.js.map +0 -1
- package/dist/chunk-H2HNKYN2.js +0 -2
- package/dist/chunk-H2HNKYN2.js.map +0 -1
- package/dist/chunk-TKFJGLUO.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';function w(i){let P=typeof i=="function"?{loader:i}:i,{loader:C,loading:c$1,error:f,timeout:s$1,delay:y=200}=P,l$1=null,t=null,o=null;function A(){return t||(t=C().then(e=>{l$1=e.default;}).catch(e=>{o=e instanceof Error?e:new Error(String(e));}),t)}return s(e=>{let n=c("loading"),m=c(false);A().then(()=>{o?n.set("error"):n.set("ready");});let a=null;y>0?a=setTimeout(()=>m.set(true),y):m.set(true);let u=null;return s$1&&(u=setTimeout(()=>{n()==="loading"&&(o=new Error(`Async component timed out after ${s$1}ms`),n.set("error"));},s$1)),()=>{let r=n();return r!=="loading"&&(a&&clearTimeout(a),u&&clearTimeout(u)),r==="ready"&&l$1?l$1(e.props):r==="error"&&f&&o?l(f(o)):r==="loading"&&m()&&c$1?l(c$1()):document.createComment("async-loading")}})}export{w as a};//# sourceMappingURL=chunk-2GGCZC4O.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2GGCZC4O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/async-component.ts"],"names":["defineAsyncComponent","loaderOrOptions","options","loader","loadingFn","errorFn","timeout","delay","resolvedComp","loadPromise","loadError","startLoad","mod","err","defineComponent","ctx","state","signal","showLoading","delayTimer","timeoutTimer","s","nodeToDOM"],"mappings":"0EAiDO,SAASA,EACdC,CAAAA,CACc,CACd,IAAMC,CAAAA,CACJ,OAAOD,GAAoB,UAAA,CACvB,CAAE,OAAQA,CAAgB,CAAA,CAC1BA,EAEA,CACJ,MAAA,CAAAE,EACA,OAAA,CAASC,GAAAA,CACT,MAAOC,CAAAA,CACP,OAAA,CAAAC,IACA,KAAA,CAAAC,CAAAA,CAAQ,GACV,CAAA,CAAIL,CAAAA,CAGAM,IAAoC,IAAA,CACpCC,CAAAA,CAAoC,KACpCC,CAAAA,CAA0B,IAAA,CAE9B,SAASC,CAAAA,EAA2B,CAClC,OAAIF,CAAAA,GAEJA,CAAAA,CAAcN,GAAO,CAClB,IAAA,CAAMS,GAAQ,CACbJ,GAAAA,CAAeI,EAAI,QACrB,CAAC,EACA,KAAA,CAAOC,CAAAA,EAAQ,CACdH,CAAAA,CAAYG,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,MAAM,MAAA,CAAOA,CAAG,CAAC,EAChE,CAAC,EAEIJ,CAAAA,CACT,CAEA,OAAOK,CAAAA,CAAoBC,CAAAA,EAAQ,CACjC,IAAMC,CAAAA,CAAQC,EAAsC,SAAS,CAAA,CACvDC,EAAcD,CAAAA,CAAO,KAAK,EAGhCN,CAAAA,EAAU,CAAE,KAAK,IAAM,CACjBD,EACFM,CAAAA,CAAM,GAAA,CAAI,OAAO,CAAA,CAEjBA,CAAAA,CAAM,IAAI,OAAO,EAErB,CAAC,CAAA,CAGD,IAAIG,EAAmD,IAAA,CACnDZ,CAAAA,CAAQ,EACVY,CAAAA,CAAa,UAAA,CAAW,IAAMD,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CAAGX,CAAK,EAE1DW,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CAItB,IAAIE,EAAqD,IAAA,CACzD,OAAId,MACFc,CAAAA,CAAe,UAAA,CAAW,IAAM,CAC1BJ,CAAAA,KAAY,SAAA,GACdN,CAAAA,CAAY,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmCJ,GAAO,CAAA,EAAA,CAAI,CAAA,CACpEU,EAAM,GAAA,CAAI,OAAO,GAErB,CAAA,CAAGV,GAAO,GAGL,IAAM,CACX,IAAMe,CAAAA,CAAIL,CAAAA,GAQV,OALIK,CAAAA,GAAM,YACJF,CAAAA,EAAY,YAAA,CAAaA,CAAU,CAAA,CACnCC,CAAAA,EAAc,aAAaA,CAAY,CAAA,CAAA,CAGzCC,IAAM,OAAA,EAAWb,GAAAA,CACZA,IAAaO,CAAAA,CAAI,KAAY,EAGlCM,CAAAA,GAAM,OAAA,EAAWhB,GAAWK,CAAAA,CACvBY,CAAAA,CAAUjB,EAAQK,CAAS,CAAC,EAGjCW,CAAAA,GAAM,SAAA,EAAaH,GAAY,EAAKd,GAAAA,CAC/BkB,EAAUlB,GAAAA,EAAW,EAIvB,QAAA,CAAS,aAAA,CAAc,eAAe,CAC/C,CACF,CAAC,CACH","file":"chunk-2GGCZC4O.js","sourcesContent":["/**\n * defineAsyncComponent ā lazy component loading.\n *\n * Wraps a dynamic import() into a component that shows a loading\n * state while the chunk downloads, an error state if it fails,\n * and the real component once resolved.\n *\n * ```ts\n * const LazyChart = defineAsyncComponent(() => import('./Chart.akash'));\n *\n * // With loading/error:\n * const LazyChart = defineAsyncComponent({\n * loader: () => import('./Chart.akash'),\n * loading: () => <Spinner />,\n * error: (err) => <p>Failed: {err.message}</p>,\n * timeout: 10000,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport type AsyncComponentLoader<P extends Record<string, unknown> = any> =\n () => Promise<{ default: Component<P> }>;\n\nexport interface AsyncComponentOptions<P extends Record<string, unknown> = any> {\n /** The async loader function (dynamic import) */\n loader: AsyncComponentLoader<P>;\n /** Component to show while loading */\n loading?: () => AkashNode;\n /** Component to show on error */\n error?: (error: Error) => AkashNode;\n /** Timeout in ms ā show error after this (default: none) */\n timeout?: number;\n /** Delay in ms before showing loading state (default: 200) */\n delay?: number;\n}\n\n// --- defineAsyncComponent ---\n\n/**\n * Define a component that loads asynchronously via dynamic import.\n */\nexport function defineAsyncComponent<P extends Record<string, unknown> = any>(\n loaderOrOptions: AsyncComponentLoader<P> | AsyncComponentOptions<P>,\n): Component<P> {\n const options: AsyncComponentOptions<P> =\n typeof loaderOrOptions === 'function'\n ? { loader: loaderOrOptions }\n : loaderOrOptions;\n\n const {\n loader,\n loading: loadingFn,\n error: errorFn,\n timeout,\n delay = 200,\n } = options;\n\n // Cache the loaded component\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 loadPromise = loader()\n .then((mod) => {\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 return defineComponent<P>((ctx) => {\n const state = signal<'loading' | 'ready' | 'error'>('loading');\n const showLoading = signal(false);\n\n // Start loading\n startLoad().then(() => {\n if (loadError) {\n state.set('error');\n } else {\n state.set('ready');\n }\n });\n\n // Delay before showing loading indicator\n let delayTimer: ReturnType<typeof setTimeout> | null = null;\n if (delay > 0) {\n delayTimer = setTimeout(() => showLoading.set(true), delay);\n } else {\n showLoading.set(true);\n }\n\n // Timeout\n let timeoutTimer: ReturnType<typeof setTimeout> | null = null;\n if (timeout) {\n timeoutTimer = setTimeout(() => {\n if (state() === 'loading') {\n loadError = new Error(`Async component timed out after ${timeout}ms`);\n state.set('error');\n }\n }, timeout);\n }\n\n return () => {\n const s = state();\n\n // Clear timers once resolved\n if (s !== 'loading') {\n if (delayTimer) clearTimeout(delayTimer);\n if (timeoutTimer) clearTimeout(timeoutTimer);\n }\n\n if (s === 'ready' && resolvedComp) {\n return resolvedComp(ctx.props as any);\n }\n\n if (s === 'error' && errorFn && loadError) {\n return nodeToDOM(errorFn(loadError));\n }\n\n if (s === 'loading' && showLoading() && loadingFn) {\n return nodeToDOM(loadingFn());\n }\n\n // Nothing to show yet\n return document.createComment('async-loading');\n };\n });\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c as c$1,d}from'./chunk-U65WRXZC.js';var c=new Set,a=new Set,b=false,f=0,T=false,D=3,q=100;function h(){if(b)return;b=true;let e=new Map,n=false,t=0;for(;(c.size>0||a.size>0)&&t<q;){if(t++,c.size>0){let s=[...c].sort(V);c.clear();for(let r of s){let i=(e.get(r)??0)+1;if(e.set(r,i),i>D){n=true;continue}r.run();}}if(a.size>0){let s=[...a].sort(V);a.clear();for(let r of s){let i=(e.get(r)??0)+1;if(e.set(r,i),i>D){n=true;continue}r.run();}}if(n&&c.size===0&&a.size===0)break}(n||t>=q)&&(c.clear(),a.clear(),console.error("[AkashJS] Circular dependency detected between effects. Two or more effects are writing to each other's dependencies. The cycle has been broken after "+t+" iterations.")),b=false,T&&(T=false,(c.size>0||a.size>0)&&h());}function m(e){e.isRender?c.add(e):a.add(e),f===0&&!b?h():b&&(T=true);}function X(e){f++;try{return e()}finally{f--,f===0&&h();}}function g(){f++;}function w(){f--,f===0&&h();}function V(e,n){return (e.depth??0)-(n.depth??0)}function H(){h();}var _=typeof process>"u"||process.env?.NODE_ENV!=="production";var u=null;function k(e,n){return e===null?n:Array.isArray(e)?(e.indexOf(n)===-1&&e.push(n),e):e===n?e:[e,n]}function x(e,n){if(e===null||e===n)return null;if(Array.isArray(e)){let t=e.indexOf(n);if(t!==-1){if(e.length===2)return e[1-t];e.splice(t,1);}return e}return e}function R(e,n){if(e!==null)if(Array.isArray(e)){let t=e.slice();for(let s=0;s<t.length;s++)n(t[s]);}else n(e);}var N=class{_value;_subscribers;_equals;_version;constructor(n,t){this._value=n,this._subscribers=null,this._equals=t??Object.is,this._version=0;}};function J(e){this.set(e(this._node._value));}function K(){return this._node._value}function Q(e,n){let t=new N(e,n?.equals),s=()=>(I(t),t._value);return s.set=r=>{_&&u&&u._tag==="computed"&&console.warn("[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation."),!t._equals(t._value,r)&&(t._value=r,t._version++,_&&c$1()&&d("signal-update","signal.set",0),g(),v(t),w());},s._node=t,s.update=J.bind(s),s.peek=K.bind(s),s}var p=class{_tag="computed";_fn;_value;_state;_subscribers;_sources;_equals;_version;_depVersions;constructor(n,t){this._fn=n,this._value=void 0,this._state=1,this._subscribers=null,this._sources=null,this._equals=t??Object.is,this._version=0,this._depVersions=null;}};function Y(e,n){let t=new p(e,n?.equals);return ()=>(u&&(t._subscribers=k(t._subscribers,u),"_sources"in u&&z(u,t)),t._state!==0&&(U(t)?A(t):t._state=0),t._value)}function U(e){if(e._depVersions===null||e._sources===null)return true;let n=e._sources,t=e._depVersions;if(n.length!==t.length)return true;for(let s=0;s<n.length;s++){let r=n[s];if(r instanceof p&&r._state===1&&A(r),r._version!==t[s])return true}return false}function P(e){if(e._sources===null||e._sources.length===0){e._depVersions=null;return}let n=e._sources,t=e._depVersions=new Array(n.length);for(let s=0;s<n.length;s++)t[s]=n[s]._version;}function z(e,n){e._sources===null?e._sources=[n]:e._sources.indexOf(n)===-1&&e._sources.push(n);}var C=new Set;function A(e,n=false){if(C.has(e))throw new Error("[AkashJS] Circular dependency detected between computed values.");if(C.add(e),g(),e._sources!==null){for(let r=0;r<e._sources.length;r++)e._sources[r]._subscribers=x(e._sources[r]._subscribers,e);e._sources=null;}let t=u;u=e;let s=_&&c$1()?performance.now():0;try{let r=e._fn(),i=e._value===void 0&&e._state===1,o=i||!e._equals(e._value,r);e._value=r,e._state=0,o&&e._version++,P(e),o&&!i&&(n?R(e._subscribers,l=>{l._tag==="computed"&&(l._state=1,R(l._subscribers,d=>{d._tag==="computed"&&(d._state=1);}));}):v(e));}finally{_&&s&&d("computed","computed",performance.now()-s),C.delete(e),u=t,w();}}var E=class{_tag="effect";_fn;_cleanup;_sources;_disposed;isRender;_lastSeen;constructor(n,t){this._fn=n,this._cleanup=null,this._sources=null,this._disposed=false,this.isRender=t,this._lastSeen=null;}run(){O(this);}};function Z(e,n){let t=new E(e,n?.render??false);return O(t),()=>{if(t._disposed=true,M(t),t._sources!==null){for(let s=0;s<t._sources.length;s++)t._sources[s]._subscribers=x(t._sources[s]._subscribers,t);t._sources=null;}}}function O(e){if(e._disposed)return;if(e._sources!==null&&e._sources.length>0){let r=false;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];if(o instanceof p)if(o._state===1&&A(o,true),e._lastSeen!==null&&e._lastSeen.has(o)){let l=e._lastSeen.get(o);o._equals(l,o._value)||(r=true);}else r=true;else r=true;}if(!r)return}M(e);let n=e._sources!==null?e._sources.slice():null;if(e._sources!==null){for(let r=0;r<e._sources.length;r++)e._sources[r]._subscribers=x(e._sources[r]._subscribers,e);e._sources=null;}let t=u;u=e;let s=_&&c$1()?performance.now():0;try{let r=e._fn();typeof r=="function"&&(e._cleanup=r);}catch(r){if(n!==null){e._sources=n;for(let i=0;i<n.length;i++)n[i]._subscribers=k(n[i]._subscribers,e);}console.error("[AkashJS] Error in effect (will retry on next signal change):",r);}finally{if(_&&s&&d("effect","effect",performance.now()-s),u=t,e._sources!==null){let r=null;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];o instanceof p&&(r===null&&(r=new Map),r.set(o,o._value));}e._lastSeen=r;}else e._lastSeen=null;}}function M(e){if(e._cleanup){try{e._cleanup();}catch(n){console.error("[AkashJS] Error in effect cleanup (ignored):",n);}e._cleanup=null;}}function j(e){let n=u;u=null;try{return e()}finally{u=n;}}function $(e,n,t){let s=Array.isArray(e),r=s?e:[e],i,o=true;return ()=>{let l=r.map(B=>B());if(o&&(o=false,i=l.slice(),t?.defer!==false))return;let d=i;return i=l.slice(),j(()=>n(s?l:l[0],d?s?d:d[0]:void 0))}}function I(e){u&&(e._subscribers=k(e._subscribers,u),"_sources"in u&&z(u,e));}function v(e){let n=e._subscribers;if(n!==null)if(Array.isArray(n))for(let t=0;t<n.length;t++){let s=n[t];s._tag==="computed"?(s._state=1,v(s)):m(s);}else n._tag==="computed"?(n._state=1,v(n)):m(n);}export{X as a,H as b,Q as c,Y as d,Z as e,j as f,$ as g};//# sourceMappingURL=chunk-2UATNCKC.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2UATNCKC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/scheduler.ts","../src/signals.ts"],"names":["pendingRender","pendingUser","flushing","batchDepth","reflushNeeded","MAX_EFFECT_RUNS","MAX_FLUSH_ITERATIONS","flush","runCounts","circularDetected","iterations","queue","byDepth","fx","count","scheduleEffect","batch","fn","enterBatch","exitBatch","a","b","flushSync","__DEV__","currentSubscriber","addSubscriber","slot","sub","removeSubscriber","idx","forEachSubscriber","copy","i","SignalNode","value","equals","signalUpdate","signalPeek","signal","initialValue","options","node","read","trackSubscriber","isProfiling","recordPerfEntry","notifySubscribers","ComputedNode","computed","addSource","isDirtyByVersion","recompute","deps","versions","dep","snapshotVersions","source","computingSet","skipEffectNotify","prevSubscriber","_t0","newValue","isFirst","changed","sub2","EffectNode","isRender","runEffect","effect","cleanupEffect","anyChanged","lastSeen","prevSources","result","err","untrack","prev","on","isArray","depArray","prevValues","values","d"],"mappings":"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","file":"chunk-2UATNCKC.js","sourcesContent":["/**\n * Microtask-based effect scheduler with priority levels and deduplication.\n *\n * Render effects (DOM bindings) run before user effects to ensure\n * DOM is consistent before user-side effects execute.\n */\n\nexport interface ScheduledEffect {\n run(): void;\n isRender: boolean;\n /** Depth in the dependency graph (0 = root). Lower depth runs first. */\n depth?: number;\n}\n\nconst pendingRender = new Set<ScheduledEffect>();\nconst pendingUser = new Set<ScheduledEffect>();\nlet flushing = false;\nlet batchDepth = 0;\nlet flushScheduled = false;\nlet reflushNeeded = false;\n\nconst MAX_EFFECT_RUNS = 3;\nconst MAX_FLUSH_ITERATIONS = 100;\n\nfunction flush(): void {\n if (flushing) return;\n flushing = true;\n flushScheduled = false;\n\n // Fresh per-effect run counter for THIS flush ā reset every time\n const runCounts = new Map<ScheduledEffect, number>();\n let circularDetected = false;\n\n // Process render effects first, then user effects.\n // Effects may enqueue more effects during flush, so loop until empty.\n let iterations = 0;\n while ((pendingRender.size > 0 || pendingUser.size > 0) && iterations < MAX_FLUSH_ITERATIONS) {\n iterations++;\n\n // Drain render effects (sorted by depth ā parents before children)\n if (pendingRender.size > 0) {\n const queue = [...pendingRender].sort(byDepth);\n pendingRender.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect ā it's in a cycle\n }\n fx.run();\n }\n }\n\n // Drain user effects (sorted by depth)\n if (pendingUser.size > 0) {\n const queue = [...pendingUser].sort(byDepth);\n pendingUser.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect ā it's in a cycle\n }\n fx.run();\n }\n }\n\n // If all remaining effects were skipped due to cycle detection, break\n if (circularDetected && pendingRender.size === 0 && pendingUser.size === 0) {\n break;\n }\n }\n\n if (circularDetected || iterations >= MAX_FLUSH_ITERATIONS) {\n pendingRender.clear();\n pendingUser.clear();\n console.error(\n '[AkashJS] Circular dependency detected between effects. ' +\n 'Two or more effects are writing to each other\\'s dependencies. ' +\n 'The cycle has been broken after ' + iterations + ' iterations.'\n );\n }\n\n flushing = false;\n\n // If effects were scheduled during the tail end of this flush (after the\n // while loop's condition was last checked), re-flush them now.\n if (reflushNeeded) {\n reflushNeeded = false;\n if (pendingRender.size > 0 || pendingUser.size > 0) {\n flush();\n }\n }\n}\n\nexport function scheduleEffect(fx: ScheduledEffect): void {\n if (fx.isRender) {\n pendingRender.add(fx);\n } else {\n pendingUser.add(fx);\n }\n\n if (batchDepth === 0 && !flushing) {\n flush();\n } else if (flushing) {\n // Effects were added during a flush. The while loop may still pick them\n // up, but if it has already checked the queues and found them empty,\n // we need a re-flush after the current one completes.\n reflushNeeded = true;\n }\n}\n\n/**\n * Batch multiple signal writes ā subscribers are notified only once\n * at the end of the batch.\n */\nexport function batch<T>(fn: () => T): T {\n batchDepth++;\n try {\n return fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n flush();\n }\n }\n}\n\n/** Enter/exit batch depth ā used by computed recompute to prevent mid-evaluation flush */\nexport function enterBatch(): void { batchDepth++; }\nexport function exitBatch(): void {\n batchDepth--;\n if (batchDepth === 0) flush();\n}\n\n/** Sort effects by depth (lower depth first = parents before children) */\nfunction byDepth(a: ScheduledEffect, b: ScheduledEffect): number {\n return (a.depth ?? 0) - (b.depth ?? 0);\n}\n\n/** Synchronously flush all pending effects. Useful for testing. */\nexport function flushSync(): void {\n flush();\n}\n","/**\n * Fine-grained reactivity system.\n *\n * Inspired by SolidJS/Preact Signals. Provides signal(), computed(),\n * effect(), and untrack() primitives with automatic dependency tracking\n * and glitch-free diamond dependency resolution.\n *\n * Optimized for minimal memory footprint:\n * - Class-based nodes for V8 hidden class sharing\n * - Lazy subscriber collections (null ā single ā array)\n * - Shared method functions (no per-instance closures for update/peek)\n * - Version-based dirty checking for computed\n * - Dev-only code stripped in production builds\n */\n\nimport { scheduleEffect, enterBatch, exitBatch, type ScheduledEffect } from './scheduler.js';\n\nimport { recordPerfEntry, isProfiling } from './perf.js';\n\nconst __DEV__ = typeof process === 'undefined' || process.env?.NODE_ENV !== 'production';\n\n/** Depth counter to defer effect scheduling until all notifications complete (glitch-free) */\nlet notifyDepth = 0;\n\n// --- Tracking scope ---\n\ntype Subscriber = EffectNode | ComputedNode<any>;\ntype SubscriberSlot = Subscriber | Subscriber[] | null;\n\nlet currentSubscriber: Subscriber | null = null;\n\n// --- Subscriber collection helpers (lazy: null ā single ā array) ---\n\nfunction addSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return sub;\n if (Array.isArray(slot)) {\n if (slot.indexOf(sub) === -1) slot.push(sub);\n return slot;\n }\n // slot is a single subscriber\n if (slot === sub) return slot;\n return [slot, sub];\n}\n\nfunction removeSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return null;\n if (slot === sub) return null;\n if (Array.isArray(slot)) {\n const idx = slot.indexOf(sub);\n if (idx !== -1) {\n if (slot.length === 2) return slot[1 - idx];\n slot.splice(idx, 1);\n }\n return slot;\n }\n return slot;\n}\n\nfunction forEachSubscriber(slot: SubscriberSlot, fn: (sub: Subscriber) => void): void {\n if (slot === null) return;\n if (Array.isArray(slot)) {\n // Snapshot to avoid mutation during iteration\n const copy = slot.slice();\n for (let i = 0; i < copy.length; i++) fn(copy[i]);\n } else {\n fn(slot);\n }\n}\n\nfunction hasSubscribers(slot: SubscriberSlot): boolean {\n return slot !== null;\n}\n\n// --- Signal ---\n\nexport interface Signal<T> {\n /** Read the current value (tracks dependency if inside a reactive scope) */\n (): T;\n /** Set a new value */\n set(value: T): void;\n /** Update the value using the previous value */\n update(fn: (prev: T) => T): void;\n /** Read without tracking (no dependency registered) */\n peek(): T;\n}\n\nexport type ReadonlySignal<T> = () => T;\n\n// Strategy 1: Class-based node for V8 hidden class optimization\nclass SignalNode<T> {\n _value: T;\n _subscribers: SubscriberSlot;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5: cheap dirty checking\n\n constructor(value: T, equals?: (a: T, b: T) => boolean) {\n this._value = value;\n this._subscribers = null; // Strategy 2: lazy (not new Set())\n this._equals = equals ?? Object.is;\n this._version = 0;\n }\n}\n\n// Strategy 3: Shared method functions (not per-instance closures)\nfunction signalUpdate<T>(this: Signal<T> & { _node: SignalNode<T> }, fn: (prev: T) => T): void {\n this.set(fn(this._node._value));\n}\n\nfunction signalPeek<T>(this: { _node: SignalNode<T> }): T {\n return this._node._value;\n}\n\nexport function signal<T>(\n initialValue: T,\n options?: { equals?: (a: T, b: T) => boolean },\n): Signal<T> {\n const node = new SignalNode(initialValue, options?.equals);\n\n const read = (): T => {\n trackSubscriber(node);\n return node._value;\n };\n\n read.set = (value: T): void => {\n if (__DEV__ && currentSubscriber && (currentSubscriber as any)._tag === 'computed') {\n console.warn('[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation.');\n }\n if (node._equals(node._value, value)) return;\n node._value = value;\n node._version++;\n if (__DEV__ && isProfiling()) recordPerfEntry('signal-update', 'signal.set', 0);\n // Inline batch to avoid closure allocation on every set() call\n enterBatch();\n notifySubscribers(node);\n exitBatch();\n };\n\n // Strategy 3: bind shared functions instead of creating per-instance closures\n (read as any)._node = node;\n read.update = signalUpdate.bind(read as any);\n read.peek = signalPeek.bind(read as any);\n\n return read as Signal<T>;\n}\n\n// --- Computed ---\n\nconst enum ComputedState {\n Clean = 0,\n Dirty = 1,\n}\n\n// Strategy 1: Class-based computed node\nclass ComputedNode<T> {\n _tag: 'computed' = 'computed';\n _fn: () => T;\n _value: T | undefined;\n _state: ComputedState;\n _subscribers: SubscriberSlot;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5\n\n // Strategy 5: version snapshots of dependencies at last evaluation\n _depVersions: number[] | null;\n\n constructor(fn: () => T, equals?: (a: T, b: T) => boolean) {\n this._fn = fn;\n this._value = undefined;\n this._state = ComputedState.Dirty;\n this._subscribers = null; // lazy\n this._sources = null; // lazy\n this._equals = equals ?? Object.is;\n this._version = 0;\n this._depVersions = null;\n }\n}\n\nexport function computed<T>(\n fn: () => T,\n options?: { equals?: (a: T, b: T) => boolean },\n): ReadonlySignal<T> {\n const node = new ComputedNode<T>(fn, options?.equals);\n\n const read = (): T => {\n // Track this computed as a dependency of the current subscriber\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber, node);\n }\n }\n\n if (node._state !== ComputedState.Clean) {\n // Strategy 5: check if deps actually changed via version\n if (!isDirtyByVersion(node)) {\n node._state = ComputedState.Clean;\n } else {\n recompute(node);\n }\n }\n\n return node._value as T;\n };\n\n return read;\n}\n\n// Strategy 5: version-based dirty check\nfunction isDirtyByVersion(node: ComputedNode<any>): boolean {\n if (node._depVersions === null || node._sources === null) return true;\n const deps = node._sources;\n const versions = node._depVersions;\n if (deps.length !== versions.length) return true;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n // If a dep is a dirty computed, recompute it first to get the real version\n if (dep instanceof ComputedNode && dep._state === ComputedState.Dirty) {\n recompute(dep);\n }\n if (dep._version !== versions[i]) return true;\n }\n return false;\n}\n\n// Snapshot dependency versions after evaluation\nfunction snapshotVersions(node: ComputedNode<any>): void {\n if (node._sources === null || node._sources.length === 0) {\n node._depVersions = null;\n return;\n }\n const deps = node._sources;\n const versions = node._depVersions = new Array(deps.length);\n for (let i = 0; i < deps.length; i++) {\n versions[i] = deps[i]._version;\n }\n}\n\n// Helper: add source to node's sources array\nfunction addSource(sub: { _sources: (SignalNode<any> | ComputedNode<any>)[] | null }, source: SignalNode<any> | ComputedNode<any>): void {\n if (sub._sources === null) {\n sub._sources = [source];\n } else if (sub._sources.indexOf(source) === -1) {\n sub._sources.push(source);\n }\n}\n\nconst computingSet = new Set<ComputedNode<unknown>>();\n\n/**\n * @param skipEffectNotify - When true, don't schedule effects in notifySubscribers.\n * Used when recompute is called from runEffect's dirty check ā the effect is\n * already being processed, re-scheduling it would trigger the circular run limit.\n */\nfunction recompute<T>(node: ComputedNode<T>, skipEffectNotify = false): void {\n // Detect circular computed dependencies ā only if THIS node is already being computed\n if (computingSet.has(node as ComputedNode<unknown>)) {\n throw new Error('[AkashJS] Circular dependency detected between computed values.');\n }\n computingSet.add(node as ComputedNode<unknown>);\n\n // Prevent effects from flushing while computed is evaluating.\n enterBatch();\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n try {\n const newValue = node._fn();\n const isFirst = node._value === undefined && node._state === ComputedState.Dirty;\n const changed = isFirst || !node._equals(node._value as T, newValue);\n node._value = newValue;\n node._state = ComputedState.Clean;\n if (changed) node._version++;\n\n // Snapshot dep versions for next dirty check\n snapshotVersions(node);\n\n // Only propagate if value actually changed (skip first computation ā\n // the effect that triggered the read is already running).\n if (changed && !isFirst) {\n if (skipEffectNotify) {\n // Only mark downstream computeds as dirty ā don't schedule effects.\n forEachSubscriber(node._subscribers, (sub) => {\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n forEachSubscriber((sub as ComputedNode<any>)._subscribers, (sub2) => {\n if (sub2._tag === 'computed') (sub2 as ComputedNode<any>)._state = ComputedState.Dirty;\n });\n }\n });\n } else {\n notifySubscribers(node);\n }\n }\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('computed', 'computed', performance.now() - _t0);\n computingSet.delete(node as ComputedNode<unknown>);\n currentSubscriber = prevSubscriber;\n exitBatch();\n }\n}\n\n// --- Effect ---\n\n// Strategy 1: Class-based effect node\nclass EffectNode implements ScheduledEffect {\n _tag: 'effect' = 'effect';\n _fn: () => void | (() => void);\n _cleanup: (() => void) | null;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _disposed: boolean;\n isRender: boolean;\n _lastSeen: Map<unknown, unknown> | null;\n\n constructor(fn: () => void | (() => void), isRender: boolean) {\n this._fn = fn;\n this._cleanup = null;\n this._sources = null; // lazy\n this._disposed = false;\n this.isRender = isRender;\n this._lastSeen = null;\n }\n\n run(): void {\n runEffect(this);\n }\n}\n\nexport function effect(\n fn: () => void | (() => void),\n options?: { render?: boolean },\n): () => void {\n const node = new EffectNode(fn, options?.render ?? false);\n\n // Run immediately to establish dependencies\n runEffect(node);\n\n // Return dispose function\n return () => {\n node._disposed = true;\n cleanupEffect(node);\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n };\n}\n\nfunction runEffect(node: EffectNode): void {\n if (node._disposed) return;\n\n // Before re-running, check if any dirty computed source actually changed.\n if (node._sources !== null && node._sources.length > 0) {\n let anyChanged = false;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (source._state === ComputedState.Dirty) {\n recompute(source, true);\n }\n if (node._lastSeen !== null && node._lastSeen.has(source)) {\n const lastSeen = node._lastSeen.get(source);\n if (!source._equals(lastSeen as never, source._value as never)) {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n }\n if (!anyChanged) return;\n }\n\n // Clean up previous run\n cleanupEffect(node);\n\n // Save old sources in case the effect throws\n const prevSources = node._sources !== null ? node._sources.slice() : null;\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n\n try {\n const result = node._fn();\n if (typeof result === 'function') {\n node._cleanup = result;\n }\n } catch (err) {\n // Re-subscribe to previous sources so the effect can recover on next change\n if (prevSources !== null) {\n node._sources = prevSources;\n for (let i = 0; i < prevSources.length; i++) {\n prevSources[i]._subscribers = addSubscriber(prevSources[i]._subscribers, node);\n }\n }\n console.error('[AkashJS] Error in effect (will retry on next signal change):', err);\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('effect', 'effect', performance.now() - _t0);\n currentSubscriber = prevSubscriber;\n\n // Cache computed values for next dirty check\n if (node._sources !== null) {\n let lastSeen: Map<unknown, unknown> | null = null;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (lastSeen === null) lastSeen = new Map();\n lastSeen.set(source, source._value);\n }\n }\n node._lastSeen = lastSeen;\n } else {\n node._lastSeen = null;\n }\n }\n}\n\nfunction cleanupEffect(node: EffectNode): void {\n if (node._cleanup) {\n try {\n node._cleanup();\n } catch (err) {\n console.error('[AkashJS] Error in effect cleanup (ignored):', err);\n }\n node._cleanup = null;\n }\n}\n\n// --- Untrack ---\n\n/** Execute a function without tracking any signal reads */\nexport function untrack<T>(fn: () => T): T {\n const prev = currentSubscriber;\n currentSubscriber = null;\n try {\n return fn();\n } finally {\n currentSubscriber = prev;\n }\n}\n\n// --- on() helper ---\n\n/**\n * Create an effect callback that only tracks specific signals.\n * All other signal reads inside the callback are untracked.\n *\n * ```ts\n * effect(on(url, (currentUrl, prevUrl) => {\n * fetch(currentUrl, options()); // options() not tracked\n * }));\n *\n * effect(on([url, page], ([u, p], prev) => {\n * fetch(`${u}?page=${p}`);\n * }));\n * ```\n */\nexport function on<T>(\n dep: () => T,\n fn: (value: T, prev: T | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on<T extends readonly (() => unknown)[]>(\n deps: [...T],\n fn: (values: { [K in keyof T]: ReturnType<T[K]> }, prev: { [K in keyof T]: ReturnType<T[K]> } | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on(\n deps: (() => any) | (() => any)[],\n fn: (values: any, prev: any) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void) {\n const isArray = Array.isArray(deps);\n const depArray = isArray ? deps : [deps];\n let prevValues: unknown[] | undefined;\n let isFirst = true;\n\n return () => {\n // Track only the specified deps\n const values = depArray.map(d => d());\n\n if (isFirst) {\n isFirst = false;\n prevValues = values.slice();\n if (options?.defer !== false) return;\n }\n\n const prev = prevValues;\n prevValues = values.slice();\n\n return untrack(() => fn(\n isArray ? values : values[0],\n prev ? (isArray ? prev : prev[0]) : undefined,\n ));\n };\n}\n\n// --- Internal helpers ---\n\nfunction trackSubscriber(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber as any, node);\n }\n }\n}\n\nfunction notifySubscribers(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n // Inlined iteration ā avoids closure + array copy overhead.\n // Safe because notifySubscribers is always called inside a batch,\n // so effects are only scheduled (not flushed) during iteration.\n const slot = node._subscribers;\n if (slot === null) return;\n if (Array.isArray(slot)) {\n for (let i = 0; i < slot.length; i++) {\n const sub = slot[i];\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n notifySubscribers(sub as ComputedNode<any>);\n } else {\n scheduleEffect(sub as unknown as ScheduledEffect);\n }\n }\n } else {\n if (slot._tag === 'computed') {\n (slot as ComputedNode<any>)._state = ComputedState.Dirty;\n notifySubscribers(slot as ComputedNode<any>);\n } else {\n scheduleEffect(slot as unknown as ScheduledEffect);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c,e}from'./chunk-2UATNCKC.js';function a(e,t){return n=>{t.self&&n.target!==n.currentTarget||(t.preventDefault&&n.preventDefault(),t.stopPropagation&&n.stopPropagation(),t.stopImmediatePropagation&&n.stopImmediatePropagation?.(),e(n));}}function f(e,t,n,o={}){let r=a(n,o),i={once:o.once,capture:o.capture,passive:o.passive};return e.addEventListener(t,r,i),()=>e.removeEventListener(t,r,i)}function g(e){let t=c(e.clientWidth),n=c(e.clientHeight);return typeof ResizeObserver<"u"&&new ResizeObserver(r=>{let i=r[0];i&&(t.set(i.contentRect.width),n.set(i.contentRect.height));}).observe(e),{width:()=>t(),height:()=>n()}}function b(e){let t=e??(typeof window<"u"?window:null),n=c(e?e.scrollLeft:window?.scrollX??0),o=c(e?e.scrollTop:window?.scrollY??0);if(t){let s=()=>{e?(n.set(e.scrollLeft),o.set(e.scrollTop)):(n.set(window.scrollX),o.set(window.scrollY));};t.addEventListener("scroll",s,{passive:true});}let r=o.set;o.set=s=>{r(s),e?e.scrollTop=s:window?.scrollTo(window.scrollX,s);};let i=n.set;return n.set=s=>{i(s),e?e.scrollLeft=s:window?.scrollTo(s,window.scrollY);},{scrollX:n,scrollY:o}}function m(){return c(null)}function E(e){return c(null)}function v(e$1,t,n){e$1.name=typeof n=="string"?n:"",e$1.addEventListener("change",()=>{e$1.checked&&t.set(n);}),e(()=>{e$1.checked=t()===n;});}function d(e$1,t,n){return e(()=>{n()?e$1.classList.add(t):e$1.classList.remove(t);})}function w(e,t){let n=Object.entries(t).map(([o,r])=>d(e,o,r));return ()=>n.forEach(o=>o())}function p(e$1,t,n){let o=t.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`);return e(()=>{let r=n();r==null?e$1.style.removeProperty(o):e$1.style.setProperty(o,typeof r=="number"?`${r}px`:String(r));})}function T(e,t){let n=Object.entries(t).map(([o,r])=>p(e,o,r));return ()=>n.forEach(o=>o())}export{a,f as b,g as c,b as d,m as e,E as f,v as g,d as h,w as i,p as j,T as k};//# sourceMappingURL=chunk-2XFW6MT7.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2XFW6MT7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event-modifiers.ts"],"names":["withModifiers","handler","modifiers","e","onEvent","el","event","wrapped","listenerOptions","bindDimensions","width","signal","height","entries","entry","bindScroll","target","scrollX","scrollY","originalSetY","value","originalSetX","bindElement","bindGroup","name","bindGroupItem","group","effect","bindClass","className","condition","bindClasses","classes","disposers","cls","d","bindStyle","property","kebab","m","v","bindStyles","styles","prop","valueFn"],"mappings":"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","file":"chunk-2XFW6MT7.js","sourcesContent":["/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';function a(){let t=new Map;function r(e){let n=t.get(e);return n||(n=new Set,t.set(e,n)),n}return {on(e,n){return r(e).add(n),()=>r(e).delete(n)},once(e,n){let s=o=>{r(e).delete(s),n(o);};return r(e).add(s),()=>r(e).delete(s)},emit(e,n){let s=t.get(e);if(s)for(let o of Array.from(s))o(n);},off(e,n){r(e).delete(n);},clear(e){e?t.delete(e):t.clear();},listenerCount(e){return t.get(e)?.size??0},hasListeners(e){return (t.get(e)?.size??0)>0}}}var d=null;function i(){return d||(d=a()),d}exports.a=a;exports.b=i;//# sourceMappingURL=chunk-34PQECMN.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-34PQECMN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event-bus.ts"],"names":["createEventBus","listeners","getSet","event","set","handler","wrapper","data","globalBus","globalEventBus"],"mappings":"aA8DO,SAASA,GAA4E,CAC1F,IAAMC,CAAAA,CAAY,IAAI,IAEtB,SAASC,CAAAA,CAAOC,CAAAA,CAAkC,CAChD,IAAIC,CAAAA,CAAMH,CAAAA,CAAU,GAAA,CAAIE,CAAK,EAC7B,OAAKC,CAAAA,GACHA,CAAAA,CAAM,IAAI,IACVH,CAAAA,CAAU,GAAA,CAAIE,CAAAA,CAAOC,CAAG,GAEnBA,CACT,CAEA,OAAO,CACL,GAA+BD,CAAAA,CAAUE,CAAAA,CAAyC,CAChF,OAAAH,CAAAA,CAAOC,CAAK,CAAA,CAAE,GAAA,CAAIE,CAAuB,CAAA,CAClC,IAAMH,CAAAA,CAAOC,CAAK,CAAA,CAAE,MAAA,CAAOE,CAAuB,CAC3D,CAAA,CAEA,IAAA,CAAiCF,CAAAA,CAAUE,EAAyC,CAClF,IAAMC,EAA+BC,CAAAA,EAAS,CAC5CL,EAAOC,CAAK,CAAA,CAAE,MAAA,CAAOG,CAAuB,EAC5CD,CAAAA,CAAQE,CAAI,EACd,CAAA,CACA,OAAAL,CAAAA,CAAOC,CAAK,CAAA,CAAE,GAAA,CAAIG,CAAuB,CAAA,CAClC,IAAMJ,EAAOC,CAAK,CAAA,CAAE,OAAOG,CAAuB,CAC3D,CAAA,CAEA,IAAA,CAAiCH,EAAUI,CAAAA,CAAkB,CAC3D,IAAMH,CAAAA,CAAMH,EAAU,GAAA,CAAIE,CAAK,CAAA,CAC/B,GAAIC,EACF,IAAA,IAAWC,CAAAA,IAAW,MAAM,IAAA,CAAKD,CAAG,EAClCC,CAAAA,CAAQE,CAAI,EAGlB,CAAA,CAEA,IAAgCJ,CAAAA,CAAUE,CAAAA,CAAmC,CAC3EH,CAAAA,CAAOC,CAAK,CAAA,CAAE,MAAA,CAAOE,CAAuB,EAC9C,EAEA,KAAA,CAAMF,CAAAA,CAAgC,CAChCA,CAAAA,CACFF,CAAAA,CAAU,OAAOE,CAAK,CAAA,CAEtBF,CAAAA,CAAU,KAAA,GAEd,CAAA,CAEA,aAAA,CAAcE,CAAAA,CAAiC,CAC7C,OAAOF,CAAAA,CAAU,GAAA,CAAIE,CAAK,CAAA,EAAG,MAAQ,CACvC,CAAA,CAEA,aAAaA,CAAAA,CAAkC,CAC7C,QAAQF,CAAAA,CAAU,GAAA,CAAIE,CAAK,CAAA,EAAG,MAAQ,CAAA,EAAK,CAC7C,CACF,CACF,CAMA,IAAIK,CAAAA,CAAkC,IAAA,CAe/B,SAASC,GAA4E,CAC1F,OAAKD,IACHA,CAAAA,CAAYR,CAAAA,IAEPQ,CACT","file":"chunk-34PQECMN.cjs","sourcesContent":["/**\n * Event bus ā typed pub/sub for cross-component communication.\n *\n * Fire-and-forget events between unrelated components without\n * prop drilling or context coupling.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'user:login': { userId: string };\n * 'cart:updated': { itemCount: number };\n * 'notification': string;\n * }>();\n *\n * // Subscribe\n * bus.on('user:login', ({ userId }) => fetchProfile(userId));\n *\n * // Emit from anywhere\n * bus.emit('user:login', { userId: '123' });\n *\n * // One-time listener\n * bus.once('cart:updated', ({ itemCount }) => showBadge(itemCount));\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type EventMap = Record<string, unknown>;\nexport type EventHandler<T = unknown> = (data: T) => void;\n\nexport interface EventBus<T extends EventMap> {\n /** Subscribe to an event */\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Subscribe once ā auto-removes after first call */\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void;\n /** Emit an event to all listeners */\n emit<K extends keyof T & string>(event: K, data: T[K]): void;\n /** Remove a specific handler */\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void;\n /** Remove all handlers for an event (or all events) */\n clear(event?: keyof T & string): void;\n /** Get listener count for an event */\n listenerCount(event: keyof T & string): number;\n /** Check if an event has listeners */\n hasListeners(event: keyof T & string): boolean;\n}\n\n// =========================================================================\n// createEventBus\n// =========================================================================\n\n/**\n * Create a typed event bus.\n *\n * ```ts\n * const bus = createEventBus<{\n * 'theme:change': 'light' | 'dark';\n * 'toast': { message: string; type: string };\n * }>();\n * ```\n */\nexport function createEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n const listeners = new Map<string, Set<EventHandler>>();\n\n function getSet(event: string): Set<EventHandler> {\n let set = listeners.get(event);\n if (!set) {\n set = new Set();\n listeners.set(event, set);\n }\n return set;\n }\n\n return {\n on<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n getSet(event).add(handler as EventHandler);\n return () => getSet(event).delete(handler as EventHandler);\n },\n\n once<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): () => void {\n const wrapper: EventHandler<T[K]> = (data) => {\n getSet(event).delete(wrapper as EventHandler);\n handler(data);\n };\n getSet(event).add(wrapper as EventHandler);\n return () => getSet(event).delete(wrapper as EventHandler);\n },\n\n emit<K extends keyof T & string>(event: K, data: T[K]): void {\n const set = listeners.get(event);\n if (set) {\n for (const handler of Array.from(set)) {\n handler(data);\n }\n }\n },\n\n off<K extends keyof T & string>(event: K, handler: EventHandler<T[K]>): void {\n getSet(event).delete(handler as EventHandler);\n },\n\n clear(event?: keyof T & string): void {\n if (event) {\n listeners.delete(event);\n } else {\n listeners.clear();\n }\n },\n\n listenerCount(event: keyof T & string): number {\n return listeners.get(event)?.size ?? 0;\n },\n\n hasListeners(event: keyof T & string): boolean {\n return (listeners.get(event)?.size ?? 0) > 0;\n },\n };\n}\n\n// =========================================================================\n// Global bus singleton\n// =========================================================================\n\nlet globalBus: EventBus<any> | null = null;\n\n/**\n * Get the global event bus (created on first call).\n *\n * ```ts\n * import { globalEventBus } from '@akashjs/runtime';\n *\n * // In component A:\n * globalEventBus().emit('notification', 'Hello!');\n *\n * // In component B:\n * globalEventBus().on('notification', (msg) => show(msg));\n * ```\n */\nexport function globalEventBus<T extends EventMap = Record<string, unknown>>(): EventBus<T> {\n if (!globalBus) {\n globalBus = createEventBus<T>();\n }\n return globalBus as EventBus<T>;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';var k=s(u=>{let o=c(false),a=c(false);return ()=>{let{src:b,alt:y,width:s,height:i,loading:l="lazy",srcset:c,sizes:d,placeholder:v,blurDataUrl:p,class:m,fallbackSrc:f,onLoad:E,onError:w}=u.props,r=document.createElement("div");if(r.style.position="relative",r.style.display="inline-block",r.style.overflow="hidden",s&&(r.style.width=`${s}px`),i&&(r.style.height=`${i}px`),v==="blur"&&p&&!o()){let t=document.createElement("img");t.src=p,t.alt="",t.setAttribute("aria-hidden","true"),t.style.cssText="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);",r.appendChild(t);}let e=document.createElement("img");if(e.alt=y,e.loading=l,a()&&f?e.src=f:e.src=b,c&&(e.srcset=c),d&&(e.sizes=d),s&&(e.width=s),i&&(e.height=i),m&&(e.className=m),e.style.display="block",e.style.width="100%",e.style.height="auto",e.addEventListener("load",()=>{o.set(true),E?.();}),e.addEventListener("error",t=>{a.set(true),w?.(t);}),l==="lazy"&&typeof IntersectionObserver<"u"){e.setAttribute("data-src",e.src);let t=e.src;e.removeAttribute("src");let g=new IntersectionObserver(x=>{x[0].isIntersecting&&(e.src=t,g.disconnect());},{rootMargin:"200px"});requestAnimationFrame(()=>{e.parentElement?g.observe(e):e.src=t;});}return r.appendChild(e),r}});export{k as a};//# sourceMappingURL=chunk-3CD6A5YV.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3CD6A5YV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/image.ts"],"names":["Image","defineComponent","ctx","loaded","signal","errored","src","alt","width","height","loading","srcset","sizes","placeholder","blurDataUrl","className","fallbackSrc","onLoad","onErrorCb","wrapper","blur","img","e","actualSrc","observer","entries"],"mappings":"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","file":"chunk-3CD6A5YV.js","sourcesContent":["/**\n * <Image> component.\n *\n * Optimized image rendering with lazy loading, srcset/sizes,\n * blur placeholder, and error fallback.\n *\n * ```html\n * <Image\n * src=\"/photos/hero.jpg\"\n * alt=\"Hero image\"\n * width={800}\n * height={600}\n * placeholder=\"blur\"\n * blurDataUrl=\"data:image/jpeg;base64,...\"\n * srcset=\"/photos/hero-400.jpg 400w, /photos/hero-800.jpg 800w\"\n * sizes=\"(max-width: 600px) 400px, 800px\"\n * loading=\"lazy\"\n * />\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\n\n// --- Types ---\n\nexport interface ImageProps {\n /** Image source URL */\n src: string;\n /** Alt text (required for accessibility) */\n alt: string;\n /** Width in pixels */\n width?: number;\n /** Height in pixels */\n height?: number;\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager';\n /** Srcset for responsive images */\n srcset?: string;\n /** Sizes attribute for responsive images */\n sizes?: string;\n /** Placeholder strategy */\n placeholder?: 'blur' | 'empty';\n /** Base64 data URL for blur placeholder */\n blurDataUrl?: string;\n /** CSS class */\n class?: string;\n /** Error fallback image URL */\n fallbackSrc?: string;\n /** Callback when image loads */\n onLoad?: () => void;\n /** Callback when image fails to load */\n onError?: (error: Event) => void;\n}\n\n// --- Component ---\n\nexport const Image = defineComponent<ImageProps>((ctx) => {\n const loaded = signal(false);\n const errored = signal(false);\n\n return () => {\n const {\n src,\n alt,\n width,\n height,\n loading = 'lazy',\n srcset,\n sizes,\n placeholder,\n blurDataUrl,\n class: className,\n fallbackSrc,\n onLoad,\n onError: onErrorCb,\n } = ctx.props;\n\n // Wrapper for placeholder\n const wrapper = document.createElement('div');\n wrapper.style.position = 'relative';\n wrapper.style.display = 'inline-block';\n wrapper.style.overflow = 'hidden';\n if (width) wrapper.style.width = `${width}px`;\n if (height) wrapper.style.height = `${height}px`;\n\n // Blur placeholder\n if (placeholder === 'blur' && blurDataUrl && !loaded()) {\n const blur = document.createElement('img');\n blur.src = blurDataUrl;\n blur.alt = '';\n blur.setAttribute('aria-hidden', 'true');\n blur.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);';\n wrapper.appendChild(blur);\n }\n\n // Main image\n const img = document.createElement('img');\n img.alt = alt;\n img.loading = loading;\n\n if (errored() && fallbackSrc) {\n img.src = fallbackSrc;\n } else {\n img.src = src;\n }\n\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (width) img.width = width;\n if (height) img.height = height;\n if (className) img.className = className;\n\n img.style.display = 'block';\n img.style.width = '100%';\n img.style.height = 'auto';\n\n img.addEventListener('load', () => {\n loaded.set(true);\n onLoad?.();\n });\n\n img.addEventListener('error', (e) => {\n errored.set(true);\n onErrorCb?.(e);\n });\n\n // Intersection Observer for lazy loading (fallback for browsers without native lazy)\n if (loading === 'lazy' && typeof IntersectionObserver !== 'undefined') {\n img.setAttribute('data-src', img.src);\n const actualSrc = img.src;\n img.removeAttribute('src');\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n img.src = actualSrc;\n observer.disconnect();\n }\n },\n { rootMargin: '200px' },\n );\n\n // Observe after appended to DOM\n requestAnimationFrame(() => {\n if (img.parentElement) {\n observer.observe(img);\n } else {\n // Fallback: set src immediately\n img.src = actualSrc;\n }\n });\n }\n\n wrapper.appendChild(img);\n return wrapper;\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {e}from'./chunk-2UATNCKC.js';function w(e$1,t,u={}){let{immediate:x=false,once:O=false,debounce:i,deep:l=false}=u,T=Array.isArray(e$1),s=T?e$1:[e$1],o=s.map(()=>{}),h=true,c=null,f=false,y=null,b=()=>{f=true,c&&clearTimeout(c),y?.();};y=e(()=>{let n=s.map(r=>r());if(h){h=false,o=l?n.map(k):[...n],x&&m(n,s.map(()=>{}));return}if(!(l?n.some((r,p)=>!S(r,o[p])):n.some((r,p)=>!Object.is(r,o[p]))))return;let a=[...o];o=l?n.map(k):[...n],m(n,a);});function m(n,d){if(f)return;let a=()=>{O&&(f=true,queueMicrotask(b)),T?t(n,d):t(n[0],d[0]);};i&&i>0?(c&&clearTimeout(c),c=setTimeout(a,i)):a();}return b}function v(e,t){return w(e,t,{once:true})}function g(e,t,u){return w(e,t,{debounce:u})}function k(e){if(e===null||typeof e!="object")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}function S(e,t){if(Object.is(e,t))return true;if(e===null||t===null||typeof e!="object"||typeof t!="object")return false;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return false}}export{w as a,v as b,g as c};//# sourceMappingURL=chunk-3PCZFKBH.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3PCZFKBH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/watch.ts"],"names":["watch","source","callback","options","immediate","once","debounceMs","deep","isMulti","sources","oldValues","isFirst","debounceTimer","disposed","disposeEffect","dispose","effect","newValues","s","deepClone","fireCallback","v","i","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","ms","value","a","b"],"mappings":"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","file":"chunk-3PCZFKBH.js","sourcesContent":["/**\n * watch() ā react to signal changes with old/new values.\n *\n * Unlike effect() which just re-runs, watch() gives you the previous\n * and current value so you can react to *what changed*.\n *\n * ```ts\n * const count = signal(0);\n * watch(count, (newVal, oldVal) => {\n * console.log(`Changed from ${oldVal} to ${newVal}`);\n * });\n *\n * // With options:\n * watch(count, callback, { immediate: true, once: true });\n *\n * // Multiple sources:\n * watch([count, name], ([newCount, newName], [oldCount, oldName]) => { ... });\n * ```\n */\n\nimport { effect } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface WatchOptions {\n /** Run callback immediately with current value (default: false) */\n immediate?: boolean;\n /** Only fire once, then auto-dispose (default: false) */\n once?: boolean;\n /** Debounce callback in ms */\n debounce?: number;\n /** Deep comparison for objects (default: false) */\n deep?: boolean;\n}\n\nexport type WatchSource<T> = () => T;\nexport type WatchCallback<T> = (newValue: T, oldValue: T | undefined) => void;\nexport type WatchArrayCallback<T extends unknown[]> = (newValues: T, oldValues: (T[number] | undefined)[]) => void;\n\n// =========================================================================\n// watch() ā single source\n// =========================================================================\n\n/**\n * Watch a reactive source and call back with old + new values.\n *\n * ```ts\n * const dispose = watch(count, (newVal, oldVal) => {\n * analytics.track('count_changed', { from: oldVal, to: newVal });\n * });\n * ```\n */\nexport function watch<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n options?: WatchOptions,\n): () => void;\n\n/**\n * Watch multiple sources.\n */\nexport function watch<T extends unknown[]>(\n sources: { [K in keyof T]: WatchSource<T[K]> },\n callback: WatchArrayCallback<T>,\n options?: WatchOptions,\n): () => void;\n\nexport function watch(\n source: WatchSource<any> | WatchSource<any>[],\n callback: any,\n options: WatchOptions = {},\n): () => void {\n const { immediate = false, once = false, debounce: debounceMs, deep = false } = options;\n\n const isMulti = Array.isArray(source);\n const sources = isMulti ? source : [source];\n\n let oldValues: any[] = sources.map(() => undefined);\n let isFirst = true;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let disposed = false;\n let disposeEffect: (() => void) | null = null;\n\n const dispose = () => {\n disposed = true;\n if (debounceTimer) clearTimeout(debounceTimer);\n disposeEffect?.();\n };\n\n disposeEffect = effect(() => {\n // Read all sources to establish tracking\n const newValues = sources.map((s) => s());\n\n if (isFirst) {\n isFirst = false;\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n if (immediate) {\n fireCallback(newValues, sources.map(() => undefined));\n }\n return;\n }\n\n // Check if anything actually changed\n const changed = deep\n ? newValues.some((v, i) => !deepEqual(v, oldValues[i]))\n : newValues.some((v, i) => !Object.is(v, oldValues[i]));\n\n if (!changed) return;\n\n const prevValues = [...oldValues];\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n fireCallback(newValues, prevValues);\n });\n\n function fireCallback(newVals: any[], oldVals: any[]): void {\n if (disposed) return;\n\n const doCall = () => {\n if (once) {\n // Dispose BEFORE calling callback so any signal writes in the\n // callback don't re-trigger this watcher\n disposed = true;\n queueMicrotask(dispose);\n }\n\n if (isMulti) {\n callback(newVals, oldVals);\n } else {\n callback(newVals[0], oldVals[0]);\n }\n };\n\n if (debounceMs && debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doCall, debounceMs);\n } else {\n doCall();\n }\n }\n\n return dispose;\n}\n\n// =========================================================================\n// watchOnce ā convenience\n// =========================================================================\n\n/**\n * Watch a source once, then auto-dispose.\n *\n * ```ts\n * watchOnce(isReady, (ready) => {\n * if (ready) initApp();\n * });\n * ```\n */\nexport function watchOnce<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n): () => void {\n return watch(source, callback, { once: true });\n}\n\n// =========================================================================\n// watchDebounced ā convenience\n// =========================================================================\n\n/**\n * Watch with built-in debounce.\n *\n * ```ts\n * watchDebounced(searchInput, (query) => {\n * fetchResults(query);\n * }, 300);\n * ```\n */\nexport function watchDebounced<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n ms: number,\n): () => void {\n return watch(source, callback, { debounce: ms });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value;\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var p=new Set,g=true,l=null;function f(e){g=e;}function I(e){l=e;}function h(){p.clear();}function b(e,n){let t=((...r)=>(u(n),e(...r)));return Object.keys(e).forEach(r=>{t[r]=e[r];}),t.__deprecated=n,t}function y(e,n){return u(n),e}function u(e){if(!g||p.has(e.name))return;p.add(e.name);let n=[`[AkashJS] DEPRECATED: ${e.name}() is deprecated since v${e.since}`];e.removeIn?n[0]+=` and will be removed in v${e.removeIn}.`:n[0]+=".",e.replacement&&n.push(` Migrate to: ${e.replacement}()`),e.message&&n.push(` ${e.message}`),n.push(` See: ${e.link??"https://akash.js.org/migration"}`);let t=n.join(`
|
|
2
|
+
`);l?l(t):typeof console<"u"&&console.warn(t);}var a=new Map;function v(e){a.set(e.name,e);}function d(){return Array.from(a.values())}function x(e){return d().filter(n=>n.stability===e)}function A(e){return a.get(e)?.stability==="deprecated"}function w(e){return a.get(e)?.deprecation??null}function k(e){let n=[],t=[],r=Object.entries(e);if(r.length===0)return {compatible:true,warnings:n,errors:t};let s=r.filter(([o])=>o.startsWith("@akashjs/"));if(s.length>1){let o=new Set(s.map(([,i])=>i.split(".")[0])),m=new Set(s.map(([,i])=>i.split(".").slice(0,2).join(".")));o.size>1?t.push(`Major version mismatch: ${s.map(([i,c])=>`${i}@${c}`).join(", ")}. All @akashjs packages should be on the same major version.`):m.size>1&&n.push(`Minor version mismatch: ${s.map(([i,c])=>`${i}@${c}`).join(", ")}. Consider updating all packages to the same version with \`akash update\`.`);}return {compatible:t.length===0,warnings:n,errors:t}}exports.a=f;exports.b=I;exports.c=h;exports.d=b;exports.e=y;exports.f=v;exports.g=d;exports.h=x;exports.i=A;exports.j=w;exports.k=k;//# sourceMappingURL=chunk-3PGU24B5.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-3PGU24B5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/deprecation.ts"],"names":["warned","warningsEnabled","warningHandler","setDeprecationWarnings","enabled","setWarningHandler","handler","resetDeprecationWarnings","deprecated","fn","info","wrapper","args","emitDeprecationWarning","key","deprecatedValue","value","parts","msg","apiRegistry","registerAPI","getRegisteredAPIs","getAPIsByStability","stability","api","isDeprecated","name","getDeprecationInfo","checkCompatibility","packages","warnings","errors","versions","akashPackages","majors","v","minors","n"],"mappings":"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","file":"chunk-3PGU24B5.cjs","sourcesContent":["/**\n * Deprecation warnings and API stability markers.\n *\n * Provides runtime warnings when deprecated APIs are used,\n * with migration hints pointing to the replacement.\n *\n * ```ts\n * // Mark an API as deprecated:\n * export const oldName = deprecated(newImplementation, {\n * name: 'oldName',\n * replacement: 'newName',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * message: 'Use newName() instead for better performance.',\n * });\n *\n * // Users see:\n * // [AkashJS] DEPRECATED: oldName() is deprecated since v0.2.0 and will be removed in v1.0.0.\n * // Use newName() instead for better performance.\n * // See: https://akash.js.org/migration\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type APIStability = 'stable' | 'experimental' | 'deprecated' | 'internal';\n\nexport interface DeprecationInfo {\n /** Name of the deprecated API */\n name: string;\n /** Replacement API name */\n replacement?: string;\n /** Version when deprecated */\n since: string;\n /** Version when it will be removed */\n removeIn?: string;\n /** Custom migration message */\n message?: string;\n /** Documentation link */\n link?: string;\n}\n\nexport interface APIInfo {\n /** API name */\n name: string;\n /** Stability level */\n stability: APIStability;\n /** Version introduced */\n since: string;\n /** Deprecation info (if deprecated) */\n deprecation?: DeprecationInfo;\n}\n\n// =========================================================================\n// Warning state\n// =========================================================================\n\nconst warned = new Set<string>();\nlet warningsEnabled = true;\nlet warningHandler: ((msg: string) => void) | null = null;\n\n/**\n * Enable or disable deprecation warnings globally.\n */\nexport function setDeprecationWarnings(enabled: boolean): void {\n warningsEnabled = enabled;\n}\n\n/**\n * Set a custom warning handler (default: console.warn).\n */\nexport function setWarningHandler(handler: ((msg: string) => void) | null): void {\n warningHandler = handler;\n}\n\n/**\n * Reset warned-about APIs (useful for testing).\n */\nexport function resetDeprecationWarnings(): void {\n warned.clear();\n}\n\n// =========================================================================\n// deprecated() ā wrap a function with a deprecation warning\n// =========================================================================\n\n/**\n * Wrap a function so it emits a deprecation warning on first call.\n *\n * ```ts\n * // Old API that still works but warns:\n * export const createStore = deprecated(defineStore, {\n * name: 'createStore',\n * replacement: 'defineStore',\n * since: '0.2.0',\n * removeIn: '1.0.0',\n * });\n * ```\n */\nexport function deprecated<T extends (...args: any[]) => any>(\n fn: T,\n info: DeprecationInfo,\n): T {\n const wrapper = ((...args: any[]) => {\n emitDeprecationWarning(info);\n return fn(...args);\n }) as unknown as T;\n\n // Copy properties from original\n Object.keys(fn).forEach((key) => {\n (wrapper as any)[key] = (fn as any)[key];\n });\n\n // Mark as deprecated\n (wrapper as any).__deprecated = info;\n\n return wrapper;\n}\n\n/**\n * Mark a value (non-function) as deprecated.\n * Returns the value but warns on first access.\n */\nexport function deprecatedValue<T>(value: T, info: DeprecationInfo): T {\n emitDeprecationWarning(info);\n return value;\n}\n\n// =========================================================================\n// Warning emission\n// =========================================================================\n\nfunction emitDeprecationWarning(info: DeprecationInfo): void {\n if (!warningsEnabled) return;\n if (warned.has(info.name)) return; // Only warn once per API\n warned.add(info.name);\n\n const parts: string[] = [\n `[AkashJS] DEPRECATED: ${info.name}() is deprecated since v${info.since}`,\n ];\n\n if (info.removeIn) {\n parts[0] += ` and will be removed in v${info.removeIn}.`;\n } else {\n parts[0] += '.';\n }\n\n if (info.replacement) {\n parts.push(` Migrate to: ${info.replacement}()`);\n }\n\n if (info.message) {\n parts.push(` ${info.message}`);\n }\n\n parts.push(` See: ${info.link ?? 'https://akash.js.org/migration'}`);\n\n const msg = parts.join('\\n');\n\n if (warningHandler) {\n warningHandler(msg);\n } else if (typeof console !== 'undefined') {\n console.warn(msg);\n }\n}\n\n// =========================================================================\n// API Registry ā track stability of all APIs\n// =========================================================================\n\nconst apiRegistry = new Map<string, APIInfo>();\n\n/**\n * Register an API with its stability level.\n */\nexport function registerAPI(info: APIInfo): void {\n apiRegistry.set(info.name, info);\n}\n\n/**\n * Get all registered APIs.\n */\nexport function getRegisteredAPIs(): APIInfo[] {\n return Array.from(apiRegistry.values());\n}\n\n/**\n * Get APIs by stability level.\n */\nexport function getAPIsByStability(stability: APIStability): APIInfo[] {\n return getRegisteredAPIs().filter((api) => api.stability === stability);\n}\n\n/**\n * Check if an API is deprecated.\n */\nexport function isDeprecated(name: string): boolean {\n const info = apiRegistry.get(name);\n return info?.stability === 'deprecated';\n}\n\n/**\n * Get deprecation info for an API.\n */\nexport function getDeprecationInfo(name: string): DeprecationInfo | null {\n const info = apiRegistry.get(name);\n return info?.deprecation ?? null;\n}\n\n// =========================================================================\n// Compatibility check\n// =========================================================================\n\nexport interface CompatibilityResult {\n compatible: boolean;\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Check if package versions are compatible.\n *\n * ```ts\n * const result = checkCompatibility({\n * '@akashjs/runtime': '0.2.0',\n * '@akashjs/router': '0.1.0',\n * });\n * if (!result.compatible) {\n * console.error(result.errors);\n * }\n * ```\n */\nexport function checkCompatibility(\n packages: Record<string, string>,\n): CompatibilityResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n const versions = Object.entries(packages);\n if (versions.length === 0) return { compatible: true, warnings, errors };\n\n // Check that all @akashjs packages are on compatible versions\n const akashPackages = versions.filter(([name]) => name.startsWith('@akashjs/'));\n\n if (akashPackages.length > 1) {\n const majors = new Set(akashPackages.map(([, v]) => v.split('.')[0]));\n const minors = new Set(akashPackages.map(([, v]) => v.split('.').slice(0, 2).join('.')));\n\n if (majors.size > 1) {\n errors.push(\n `Major version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'All @akashjs packages should be on the same major version.',\n );\n } else if (minors.size > 1) {\n warnings.push(\n `Minor version mismatch: ${akashPackages.map(([n, v]) => `${n}@${v}`).join(', ')}. ` +\n 'Consider updating all packages to the same version with `akash update`.',\n );\n }\n }\n\n return {\n compatible: errors.length === 0,\n warnings,\n errors,\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c,d}from'./chunk-2UATNCKC.js';function v(t,i,c,u,m=3){let s,a,n,e,o;typeof t=="object"?(s=t.scrollTop,a=t.containerHeight,n=t.itemHeight,e=t.totalItems,o=t.overscan??3):(s=t,a=i,n=c,e=u,o=m);let r=Math.floor(s/n),l=Math.ceil(a/n),h=Math.max(0,r-o),g=Math.min(e,r+l+o);return {start:h,end:g,totalHeight:e*n,offsetTop:h*n}}function V(t){let i=c(0),c$1=c(t.containerHeight??400),u=t.overscan??3,m=d(()=>v(i(),c$1(),t.itemHeight,t.items().length,u)),s=d(()=>{let e=m();return t.items().slice(e.start,e.end).map((o,r)=>({item:o,index:e.start+r}))});function a(e){let o=e.target;i.set(o.scrollTop);}function n(e){c$1.set(e);}return {range:m,visibleItems:s,onScroll:a,setContainerHeight:n,scrollTop:(()=>i())}}var E=s(t=>{let{itemHeight:i,containerHeight:c$1,overscan:u=3}=t.props,m=c(0);return ()=>{let s=t.props.each,a=c$1??400,n=v(m(),a,i,s.length,u),e=document.createElement("div");e.style.height=`${a}px`,e.style.overflow="auto",e.style.position="relative",e.addEventListener("scroll",()=>{m.set(e.scrollTop);},{passive:true});let o=document.createElement("div");o.style.height=`${n.totalHeight}px`,o.style.position="relative";let r=document.createElement("div");r.style.position="absolute",r.style.top=`${n.offsetTop}px`,r.style.left="0",r.style.right="0";for(let l$1=n.start;l$1<n.end;l$1++){let h=s[l$1];if(!h)continue;let g=l(t.props.children(h,l$1));g instanceof HTMLElement&&(g.style.height=`${i}px`),r.appendChild(g);}return o.appendChild(r),e.appendChild(o),e}});export{v as a,V as b,E as c};//# sourceMappingURL=chunk-3PLQPLVA.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3PLQPLVA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/virtual-list.ts"],"names":["calculateRange","scrollTopOrOpts","containerHeight","itemHeight","totalItems","overscan","st","ch","ih","ti","os","firstVisible","visibleCount","start","end","useVirtualList","options","scrollTop","signal","range","computed","visibleItems","r","item","i","onScroll","target","setContainerHeight","height","VirtualFor","defineComponent","ctx","fixedHeight","items","outer","inner","content","row","nodeToDOM"],"mappings":"4EA0DO,SAASA,EACdC,CAAAA,CACAC,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CAAW,EACG,CACd,IAAIC,EAAYC,CAAAA,CAAYC,CAAAA,CAAYC,EAAYC,CAAAA,CAChD,OAAOT,GAAoB,QAAA,EAC7BK,CAAAA,CAAKL,EAAgB,SAAA,CACrBM,CAAAA,CAAKN,CAAAA,CAAgB,eAAA,CACrBO,EAAKP,CAAAA,CAAgB,UAAA,CACrBQ,EAAKR,CAAAA,CAAgB,UAAA,CACrBS,EAAKT,CAAAA,CAAgB,QAAA,EAAY,IAEjCK,CAAAA,CAAKL,CAAAA,CACLM,EAAKL,CAAAA,CACLM,CAAAA,CAAKL,EACLM,CAAAA,CAAKL,CAAAA,CACLM,EAAKL,CAAAA,CAAAA,CAGP,IAAMM,CAAAA,CAAe,IAAA,CAAK,MAAML,CAAAA,CAAKE,CAAE,EACjCI,CAAAA,CAAe,IAAA,CAAK,KAAKL,CAAAA,CAAKC,CAAE,EAEhCK,CAAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,CAAGF,CAAAA,CAAeD,CAAE,CAAA,CACrCI,CAAAA,CAAM,KAAK,GAAA,CAAIL,CAAAA,CAAIE,CAAAA,CAAeC,CAAAA,CAAeF,CAAE,CAAA,CAEzD,OAAO,CACL,KAAA,CAAAG,CAAAA,CACA,IAAAC,CAAAA,CACA,WAAA,CAAaL,EAAKD,CAAAA,CAClB,SAAA,CAAWK,EAAQL,CACrB,CACF,CAeO,SAASO,CAAAA,CAAkBC,EAK/B,CACD,IAAMC,CAAAA,CAAYC,CAAAA,CAAO,CAAC,CAAA,CACpBhB,GAAAA,CAAkBgB,EAAOF,CAAAA,CAAQ,eAAA,EAAmB,GAAG,CAAA,CACvDX,CAAAA,CAAWW,EAAQ,QAAA,EAAY,CAAA,CAE/BG,EAAQC,CAAAA,CAAS,IACdpB,EACLiB,CAAAA,EAAU,CACVf,KAAgB,CAChBc,CAAAA,CAAQ,UAAA,CACRA,CAAAA,CAAQ,OAAM,CAAE,MAAA,CAChBX,CACF,CACD,CAAA,CAEKgB,EAAeD,CAAAA,CAAS,IAAM,CAClC,IAAME,CAAAA,CAAIH,GAAM,CAChB,OAAOH,EAAQ,KAAA,EAAM,CAAE,MAAMM,CAAAA,CAAE,KAAA,CAAOA,CAAAA,CAAE,GAAG,EAAE,GAAA,CAAI,CAACC,EAAMC,CAAAA,IAAO,CAC7D,KAAAD,CAAAA,CACA,KAAA,CAAOD,EAAE,KAAA,CAAQE,CACnB,EAAE,CACJ,CAAC,EAED,SAASC,CAAAA,CAAS,EAAgB,CAChC,IAAMC,CAAAA,CAAS,CAAA,CAAE,OACjBT,CAAAA,CAAU,GAAA,CAAIS,EAAO,SAAS,EAChC,CAEA,SAASC,CAAAA,CAAmBC,EAAsB,CAChD1B,GAAAA,CAAgB,IAAI0B,CAAM,EAC5B,CAEA,OAAO,CACL,MAAAT,CAAAA,CACA,YAAA,CAAAE,CAAAA,CACA,QAAA,CAAAI,EACA,kBAAA,CAAAE,CAAAA,CACA,WAAY,IAAMV,CAAAA,GACpB,CACF,KAIaY,CAAAA,CAAaC,CAAAA,CAAuCC,GAAQ,CACvE,GAAM,CACJ,UAAA,CAAA5B,CAAAA,CACA,gBAAiB6B,GAAAA,CACjB,QAAA,CAAA3B,CAAAA,CAAW,CACb,EAAI0B,CAAAA,CAAI,KAAA,CAEFd,EAAYC,CAAAA,CAAO,CAAC,EAE1B,OAAO,IAAM,CACX,IAAMe,CAAAA,CAAQF,EAAI,KAAA,CAAM,IAAA,CAClBH,EAASI,GAAAA,EAAe,GAAA,CAExBV,EAAItB,CAAAA,CAAeiB,CAAAA,EAAU,CAAGW,CAAAA,CAAQzB,EAAY8B,CAAAA,CAAM,MAAA,CAAQ5B,CAAQ,CAAA,CAG1E6B,CAAAA,CAAQ,SAAS,aAAA,CAAc,KAAK,EAC1CA,CAAAA,CAAM,KAAA,CAAM,OAAS,CAAA,EAAGN,CAAM,KAC9BM,CAAAA,CAAM,KAAA,CAAM,SAAW,MAAA,CACvBA,CAAAA,CAAM,KAAA,CAAM,QAAA,CAAW,WAEvBA,CAAAA,CAAM,gBAAA,CAAiB,SAAU,IAAM,CACrCjB,EAAU,GAAA,CAAIiB,CAAAA,CAAM,SAAS,EAC/B,CAAA,CAAG,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CAGpB,IAAMC,EAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC1CA,EAAM,KAAA,CAAM,MAAA,CAAS,GAAGb,CAAAA,CAAE,WAAW,KACrCa,CAAAA,CAAM,KAAA,CAAM,SAAW,UAAA,CAGvB,IAAMC,EAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC5CA,CAAAA,CAAQ,MAAM,QAAA,CAAW,UAAA,CACzBA,CAAAA,CAAQ,KAAA,CAAM,IAAM,CAAA,EAAGd,CAAAA,CAAE,SAAS,CAAA,EAAA,CAAA,CAClCc,CAAAA,CAAQ,MAAM,IAAA,CAAO,GAAA,CACrBA,EAAQ,KAAA,CAAM,KAAA,CAAQ,IAGtB,IAAA,IAASZ,GAAAA,CAAIF,EAAE,KAAA,CAAOE,GAAAA,CAAIF,EAAE,GAAA,CAAKE,GAAAA,EAAAA,CAAK,CACpC,IAAMD,EAAOU,CAAAA,CAAMT,GAAC,EACpB,GAAI,CAACD,EAAM,SAEX,IAAMc,EAAMC,CAAAA,CAAUP,CAAAA,CAAI,MAAM,QAAA,CAASR,CAAAA,CAAMC,GAAC,CAAC,CAAA,CAC7Ca,aAAe,WAAA,GACjBA,CAAAA,CAAI,KAAA,CAAM,MAAA,CAAS,GAAGlC,CAAU,CAAA,EAAA,CAAA,CAAA,CAElCiC,EAAQ,WAAA,CAAYC,CAAG,EACzB,CAEA,OAAAF,EAAM,WAAA,CAAYC,CAAO,EACzBF,CAAAA,CAAM,WAAA,CAAYC,CAAK,CAAA,CAChBD,CACT,CACF,CAAC","file":"chunk-3PLQPLVA.js","sourcesContent":["/**\n * <VirtualFor> ā virtualized list rendering.\n *\n * Only renders items visible in the viewport plus a small overscan\n * buffer. Essential for rendering thousands of items without\n * destroying performance.\n *\n * ```html\n * <VirtualFor\n * each={items()}\n * key={(item) => item.id}\n * itemHeight={40}\n * overscan={5}\n * >\n * {(item) => <div class=\"row\">{item.name}</div>}\n * </VirtualFor>\n * ```\n */\n\nimport { signal, effect, computed } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface VirtualForProps<T> {\n /** Array of items */\n each: T[];\n /** Key function for reconciliation */\n key: (item: T) => unknown;\n /** Fixed height per item in pixels */\n itemHeight: number;\n /** Container height in pixels (default: auto-detect from parent) */\n containerHeight?: number;\n /** Number of extra items to render above/below viewport */\n overscan?: number;\n /** Render function for each item */\n children: (item: T, index: number) => AkashNode;\n}\n\n// --- Virtual scroll calculations ---\n\nexport interface VirtualRange {\n /** First visible index */\n start: number;\n /** Last visible index (exclusive) */\n end: number;\n /** Total content height in pixels */\n totalHeight: number;\n /** Offset of the first rendered item */\n offsetTop: number;\n}\n\n/**\n * Calculate the visible range given scroll position and dimensions.\n */\nexport function calculateRange(\n scrollTopOrOpts: number | { scrollTop: number; containerHeight: number; itemHeight: number; totalItems: number; overscan?: number },\n containerHeight?: number,\n itemHeight?: number,\n totalItems?: number,\n overscan = 3,\n): VirtualRange {\n let st: number, ch: number, ih: number, ti: number, os: number;\n if (typeof scrollTopOrOpts === 'object') {\n st = scrollTopOrOpts.scrollTop;\n ch = scrollTopOrOpts.containerHeight;\n ih = scrollTopOrOpts.itemHeight;\n ti = scrollTopOrOpts.totalItems;\n os = scrollTopOrOpts.overscan ?? 3;\n } else {\n st = scrollTopOrOpts;\n ch = containerHeight!;\n ih = itemHeight!;\n ti = totalItems!;\n os = overscan;\n }\n\n const firstVisible = Math.floor(st / ih);\n const visibleCount = Math.ceil(ch / ih);\n\n const start = Math.max(0, firstVisible - os);\n const end = Math.min(ti, firstVisible + visibleCount + os);\n\n return {\n start,\n end,\n totalHeight: ti * ih,\n offsetTop: start * ih,\n };\n}\n\n// --- useVirtualList composable ---\n\n/**\n * Low-level virtual list composable for custom implementations.\n *\n * ```ts\n * const { containerRef, range, visibleItems } = useVirtualList({\n * items: () => allItems(),\n * itemHeight: 40,\n * overscan: 5,\n * });\n * ```\n */\nexport function useVirtualList<T>(options: {\n items: () => T[];\n itemHeight: number;\n containerHeight?: number;\n overscan?: number;\n}) {\n const scrollTop = signal(0);\n const containerHeight = signal(options.containerHeight ?? 400);\n const overscan = options.overscan ?? 3;\n\n const range = computed((): VirtualRange => {\n return calculateRange(\n scrollTop(),\n containerHeight(),\n options.itemHeight,\n options.items().length,\n overscan,\n );\n });\n\n const visibleItems = computed(() => {\n const r = range();\n return options.items().slice(r.start, r.end).map((item, i) => ({\n item,\n index: r.start + i,\n }));\n });\n\n function onScroll(e: Event): void {\n const target = e.target as HTMLElement;\n scrollTop.set(target.scrollTop);\n }\n\n function setContainerHeight(height: number): void {\n containerHeight.set(height);\n }\n\n return {\n range,\n visibleItems,\n onScroll,\n setContainerHeight,\n scrollTop: (() => scrollTop()) as ReadonlySignal<number>,\n };\n}\n\n// --- <VirtualFor> component ---\n\nexport const VirtualFor = defineComponent<VirtualForProps<any>>((ctx) => {\n const {\n itemHeight,\n containerHeight: fixedHeight,\n overscan = 3,\n } = ctx.props;\n\n const scrollTop = signal(0);\n\n return () => {\n const items = ctx.props.each;\n const height = fixedHeight ?? 400;\n\n const r = calculateRange(scrollTop(), height, itemHeight, items.length, overscan);\n\n // Outer container (scrollable)\n const outer = document.createElement('div');\n outer.style.height = `${height}px`;\n outer.style.overflow = 'auto';\n outer.style.position = 'relative';\n\n outer.addEventListener('scroll', () => {\n scrollTop.set(outer.scrollTop);\n }, { passive: true });\n\n // Inner spacer (total height)\n const inner = document.createElement('div');\n inner.style.height = `${r.totalHeight}px`;\n inner.style.position = 'relative';\n\n // Rendered items container\n const content = document.createElement('div');\n content.style.position = 'absolute';\n content.style.top = `${r.offsetTop}px`;\n content.style.left = '0';\n content.style.right = '0';\n\n // Render visible items\n for (let i = r.start; i < r.end; i++) {\n const item = items[i];\n if (!item) continue;\n\n const row = nodeToDOM(ctx.props.children(item, i));\n if (row instanceof HTMLElement) {\n row.style.height = `${itemHeight}px`;\n }\n content.appendChild(row);\n }\n\n inner.appendChild(content);\n outer.appendChild(inner);\n return outer;\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,q,l}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';var f=s(n=>{let o=c(null);q(r=>{o.set(r);});function l$1(){o.set(null);}return ()=>{let r=o();return r?l(n.props.fallback(r,l$1)):l(n.children())}});export{f as a};//# sourceMappingURL=chunk-3RDEFZMT.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3RDEFZMT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/error-boundary.ts"],"names":["ErrorBoundary","defineComponent","ctx","error","signal","onError","err","retry","currentError","nodeToDOM"],"mappings":"4EA8BO,IAAMA,CAAAA,CAAgBC,EAAqCC,CAAAA,EAAQ,CACxE,IAAMC,CAAAA,CAAQC,CAAAA,CAAqB,IAAI,CAAA,CAEvCC,CAAAA,CAASC,CAAAA,EAAQ,CACfH,CAAAA,CAAM,GAAA,CAAIG,CAAG,EACf,CAAC,EAED,SAASC,GAAAA,EAAQ,CACfJ,CAAAA,CAAM,GAAA,CAAI,IAAI,EAChB,CAEA,OAAO,IAAM,CACX,IAAMK,EAAeL,CAAAA,EAAM,CAE3B,OAAIK,CAAAA,CACKC,CAAAA,CAAUP,CAAAA,CAAI,MAAM,QAAA,CAASM,CAAAA,CAAcD,GAAK,CAAC,CAAA,CAGnDE,CAAAA,CAAUP,EAAI,QAAA,EAAU,CACjC,CACF,CAAC","file":"chunk-3RDEFZMT.js","sourcesContent":["/**\n * ErrorBoundary component.\n *\n * Declarative error handling ā catches errors from child components\n * and renders a fallback UI.\n *\n * ```html\n * <ErrorBoundary fallback={(err) => <p>Error: {err.message}</p>}>\n * <RiskyComponent />\n * </ErrorBoundary>\n * ```\n */\n\nimport { defineComponent, onError } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface ErrorBoundaryProps {\n /** Render function called when an error is caught */\n fallback: (error: Error, retry: () => void) => AkashNode;\n}\n\n/**\n * ErrorBoundary component.\n *\n * Catches errors from descendant components and renders a fallback.\n * The fallback receives the error and a `retry` function that re-renders\n * the children.\n */\nexport const ErrorBoundary = defineComponent<ErrorBoundaryProps>((ctx) => {\n const error = signal<Error | null>(null);\n\n onError((err) => {\n error.set(err);\n });\n\n function retry() {\n error.set(null);\n }\n\n return () => {\n const currentError = error();\n\n if (currentError) {\n return nodeToDOM(ctx.props.fallback(currentError, retry));\n }\n\n return nodeToDOM(ctx.children());\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';function j(t,e={}){let{trigger:n="viewport",loading:r,error:i,prefetch:u=false,minLoadTime:l$1=0,rootMargin:b="200px"}=e,f=null,a=null,c$1=null;function g(){if(a)return a;let p=Date.now();return a=t().then(async o=>{let d=Date.now()-p;l$1>0&&d<l$1&&await new Promise(v=>setTimeout(v,l$1-d)),f=o.default;}).catch(o=>{c$1=o instanceof Error?o:new Error(String(o));}),a}return u&&g(),s(p=>{let o=c("idle");async function v(){o()==="idle"&&(o.set("loading"),await g(),o.set(c$1?"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$1?(s.appendChild(l(i(c$1))),s):(r&&m==="loading"&&s.appendChild(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),()=>{}}export{j as a};//# sourceMappingURL=chunk-3VYMJMAU.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3VYMJMAU.js.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-3VYMJMAU.js","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}from'./chunk-2UATNCKC.js';function b(l){let{onLoadMore:a,hasMore:s,rootMargin:d="200px",threshold:f=0}=l,n=c(false),t=c(false),r=null,e=null,i=false;async function u(){if(!(n()||t()||i)){if(!s()){t.set(true);return}n.set(true);try{await a(),s()||t.set(!0);}finally{n.set(false);}}}function c$1(p){typeof IntersectionObserver>"u"||(r=new IntersectionObserver(g=>{g[0]?.isIntersecting&&u();},{rootMargin:d,threshold:f}),r.observe(p));}function m(){return e||(e=document.createElement("div"),e.setAttribute("data-akash-sentinel",""),e.style.height="1px",e.setAttribute("aria-hidden","true"),requestAnimationFrame(()=>{e&&!i&&c$1(e);}),e)}return {sentinel:m,loading:()=>n(),done:()=>t(),reset(){t.set(false),n.set(false);},dispose(){i=true,r?.disconnect(),r=null;}}}export{b as a};//# sourceMappingURL=chunk-3Y663FYJ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3Y663FYJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/infinite-scroll.ts"],"names":["useInfiniteScroll","options","onLoadMore","hasMore","rootMargin","threshold","loading","signal","done","observer","sentinelEl","disposed","handleIntersect","createObserver","el","entries","sentinel"],"mappings":"oCAqDO,SAASA,EAAkBC,CAAAA,CAAgD,CAChF,GAAM,CAAE,UAAA,CAAAC,EAAY,OAAA,CAAAC,CAAAA,CAAS,UAAA,CAAAC,CAAAA,CAAa,QAAS,SAAA,CAAAC,CAAAA,CAAY,CAAE,CAAA,CAAIJ,CAAAA,CAE/DK,EAAUC,CAAAA,CAAO,KAAK,CAAA,CACtBC,CAAAA,CAAOD,EAAO,KAAK,CAAA,CACrBE,EAAwC,IAAA,CACxCC,CAAAA,CAAiC,KACjCC,CAAAA,CAAW,KAAA,CAEf,eAAeC,CAAAA,EAAiC,CAC9C,GAAI,EAAAN,CAAAA,IAAaE,CAAAA,EAAK,EAAKG,GAC3B,CAAA,GAAI,CAACR,CAAAA,EAAQ,CAAG,CACdK,CAAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CACb,MACF,CAEAF,CAAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAChB,GAAI,CACF,MAAMJ,GAAW,CACZC,CAAAA,IACHK,CAAAA,CAAK,GAAA,CAAI,CAAA,CAAI,EAEjB,QAAE,CACAF,CAAAA,CAAQ,IAAI,KAAK,EACnB,EACF,CAEA,SAASO,IAAeC,CAAAA,CAAuB,CACzC,OAAO,oBAAA,CAAyB,GAAA,GAEpCL,EAAW,IAAI,oBAAA,CACZM,GAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,EAAG,gBACdH,CAAAA,GAEJ,EACA,CAAE,UAAA,CAAAR,EAAY,SAAA,CAAAC,CAAU,CAC1B,CAAA,CAEAI,EAAS,OAAA,CAAQK,CAAE,GACrB,CAEA,SAASE,GAAwB,CAC/B,OAAIN,CAAAA,GAEJA,CAAAA,CAAa,SAAS,aAAA,CAAc,KAAK,EACzCA,CAAAA,CAAW,YAAA,CAAa,sBAAuB,EAAE,CAAA,CACjDA,EAAW,KAAA,CAAM,MAAA,CAAS,MAC1BA,CAAAA,CAAW,YAAA,CAAa,cAAe,MAAM,CAAA,CAG7C,sBAAsB,IAAM,CACtBA,CAAAA,EAAc,CAACC,GACjBE,GAAAA,CAAeH,CAAU,EAE7B,CAAC,CAAA,CAEMA,EACT,CAEA,OAAO,CACL,QAAA,CAAAM,EACA,OAAA,CAAS,IAAMV,GAAQ,CACvB,IAAA,CAAM,IAAME,CAAAA,EAAK,CACjB,KAAA,EAAQ,CACNA,EAAK,GAAA,CAAI,KAAK,EACdF,CAAAA,CAAQ,GAAA,CAAI,KAAK,EACnB,CAAA,CACA,SAAU,CACRK,CAAAA,CAAW,KACXF,CAAAA,EAAU,UAAA,GACVA,CAAAA,CAAW,KACb,CACF,CACF","file":"chunk-3Y663FYJ.js","sourcesContent":["/**\n * Infinite scroll composable.\n *\n * Uses IntersectionObserver to detect when a sentinel element\n * enters the viewport, then triggers loading more data.\n * Pairs with createCursorPagination() from @akashjs/http.\n *\n * ```ts\n * const { sentinel, loading, done } = useInfiniteScroll({\n * onLoadMore: async () => {\n * pager.loadMore();\n * await fetchNextPage();\n * },\n * hasMore: () => pager.hasMore(),\n * });\n * // Append sentinel() element at the end of your list\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface InfiniteScrollOptions {\n /** Callback to load more items */\n onLoadMore: () => Promise<void> | void;\n /** Whether there are more items to load */\n hasMore: () => boolean;\n /** Root margin for the observer (default: '200px') */\n rootMargin?: string;\n /** Threshold for the observer (default: 0) */\n threshold?: number;\n}\n\nexport interface InfiniteScroll {\n /** Sentinel element to place at the end of the list */\n sentinel: () => HTMLElement;\n /** Whether a load is in progress */\n loading: ReadonlySignal<boolean>;\n /** Whether all items have been loaded */\n done: ReadonlySignal<boolean>;\n /** Reset the scroll state */\n reset(): void;\n /** Dispose the observer */\n dispose(): void;\n}\n\n// --- Implementation ---\n\n/**\n * Create an infinite scroll controller.\n */\nexport function useInfiniteScroll(options: InfiniteScrollOptions): InfiniteScroll {\n const { onLoadMore, hasMore, rootMargin = '200px', threshold = 0 } = options;\n\n const loading = signal(false);\n const done = signal(false);\n let observer: IntersectionObserver | null = null;\n let sentinelEl: HTMLElement | null = null;\n let disposed = false;\n\n async function handleIntersect(): Promise<void> {\n if (loading() || done() || disposed) return;\n if (!hasMore()) {\n done.set(true);\n return;\n }\n\n loading.set(true);\n try {\n await onLoadMore();\n if (!hasMore()) {\n done.set(true);\n }\n } finally {\n loading.set(false);\n }\n }\n\n function createObserver(el: HTMLElement): void {\n if (typeof IntersectionObserver === 'undefined') return;\n\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n handleIntersect();\n }\n },\n { rootMargin, threshold },\n );\n\n observer.observe(el);\n }\n\n function sentinel(): HTMLElement {\n if (sentinelEl) return sentinelEl;\n\n sentinelEl = document.createElement('div');\n sentinelEl.setAttribute('data-akash-sentinel', '');\n sentinelEl.style.height = '1px';\n sentinelEl.setAttribute('aria-hidden', 'true');\n\n // Start observing\n requestAnimationFrame(() => {\n if (sentinelEl && !disposed) {\n createObserver(sentinelEl);\n }\n });\n\n return sentinelEl;\n }\n\n return {\n sentinel,\n loading: () => loading(),\n done: () => done(),\n reset() {\n done.set(false);\n loading.set(false);\n },\n dispose() {\n disposed = true;\n observer?.disconnect();\n observer = null;\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkIQGSDFBI_cjs=require('./chunk-IQGSDFBI.cjs');function v(t){return t}function h(t,g){let p=[],i=[],s=[],l={},e=null,r=null,f={provide(n,o){chunkIQGSDFBI_cjs.f(n,o);},onError(n){i.push(n);},onBeforeMount(n){s.push(n);},config:l},u={use(n){return p.push(n),u},config(n,o){return l[n]=o,u},mount(n){if(r=typeof n=="string"?document.querySelector(n):n,!r)throw new Error(`[AkashJS] Mount target not found: ${n}`);for(let o of p)o.setup(f);for(let o of s)o();try{e=t(g??{}),r.appendChild(e);}catch(o){let c=o instanceof Error?o:new Error(String(o));if(i.length>0)for(let a of i)a(c);else throw c}},unmount(){e&&r&&(r.removeChild(e),e=null);}};return u}exports.a=v;exports.b=h;//# sourceMappingURL=chunk-45DPEU7T.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-45DPEU7T.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"names":["definePlugin","plugin","createApp","rootComponent","rootProps","plugins","errorHandlers","beforeMountHooks","appConfig","mountedNode","containerEl","pluginCtx","key","value","provide","handler","hook","app","selector","err","e"],"mappings":"mEA+DO,SAASA,EAAaC,CAAAA,CAAwB,CACnD,OAAOA,CACT,CAcO,SAASC,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACa,CACb,IAAMC,CAAAA,CAAoB,EAAC,CACrBC,CAAAA,CAA+C,EAAC,CAChDC,CAAAA,CAAsC,EAAC,CACvCC,EAAqC,EAAC,CACxCC,EAA2B,IAAA,CAC3BC,CAAAA,CAAkC,KAEhCC,CAAAA,CAA2B,CAC/B,OAAA,CAAWC,CAAAA,CAAsBC,EAAU,CAEzCC,mBAAAA,CAAQF,EAAKC,CAAK,EACpB,EACA,OAAA,CAAQE,CAAAA,CAAiC,CACvCT,CAAAA,CAAc,KAAKS,CAAO,EAC5B,CAAA,CACA,aAAA,CAAcC,EAAkB,CAC9BT,CAAAA,CAAiB,IAAA,CAAKS,CAAI,EAC5B,CAAA,CACA,MAAA,CAAQR,CACV,CAAA,CAEMS,CAAAA,CAAmB,CACvB,GAAA,CAAIhB,CAAAA,CAAgB,CAClB,OAAAI,EAAQ,IAAA,CAAKJ,CAAM,EACZgB,CACT,CAAA,CAEA,OAAOL,CAAAA,CAAaC,CAAAA,CAAgB,CAClC,OAAAL,EAAUI,CAAG,CAAA,CAAIC,EACVI,CACT,CAAA,CAEA,MAAMC,CAAAA,CAAgC,CAMpC,GALAR,CAAAA,CACE,OAAOQ,CAAAA,EAAa,QAAA,CAChB,QAAA,CAAS,aAAA,CAA2BA,CAAQ,CAAA,CAC5CA,CAAAA,CAEF,CAACR,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,qCAAqCQ,CAAQ,CAAA,CAC/C,EAIF,IAAA,IAAWjB,CAAAA,IAAUI,CAAAA,CACnBJ,CAAAA,CAAO,MAAMU,CAAS,CAAA,CAIxB,QAAWK,CAAAA,IAAQT,CAAAA,CACjBS,GAAK,CAIP,GAAI,CACFP,CAAAA,CAAcN,EAAeC,CAAAA,EAAa,EAAU,CAAA,CACpDM,CAAAA,CAAY,YAAYD,CAAW,EACrC,CAAA,MAASU,CAAAA,CAAK,CACZ,IAAMC,CAAAA,CAAID,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAC5D,GAAIb,EAAc,MAAA,CAAS,CAAA,CACzB,QAAWS,CAAAA,IAAWT,CAAAA,CACpBS,CAAAA,CAAQK,CAAC,OAGX,MAAMA,CAEV,CACF,CAAA,CAEA,OAAA,EAAU,CACJX,CAAAA,EAAeC,CAAAA,GACjBA,CAAAA,CAAY,WAAA,CAAYD,CAAW,CAAA,CACnCA,CAAAA,CAAc,MAElB,CACF,CAAA,CAEA,OAAOQ,CACT","file":"chunk-45DPEU7T.cjs","sourcesContent":["/**\n * Plugin system.\n *\n * Allows third-party extensions to hook into the AkashJS lifecycle.\n * Plugins can provide context values, add global error handlers,\n * register stores, and run setup code.\n *\n * ```ts\n * const authPlugin = definePlugin({\n * name: 'auth',\n * setup(app) {\n * const store = defineStore('auth', { ... })();\n * app.provide(AuthContext, store);\n * app.onError((err) => { if (err.status === 401) logout(); });\n * },\n * });\n *\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.mount('#app');\n * ```\n */\n\nimport { provide } from './context.js';\nimport type { InjectionKey } from './context.js';\nimport type { Component } from './component.js';\n\n// --- Types ---\n\nexport interface PluginContext {\n /** Provide a value to all components */\n provide<T>(key: InjectionKey<T>, value: T): void;\n /** Register a global error handler */\n onError(handler: (error: Error) => void): void;\n /** Register a hook that runs before each component mount */\n onBeforeMount(hook: () => void): void;\n /** Access the app config */\n config: Record<string, unknown>;\n}\n\nexport interface Plugin {\n /** Plugin name (for debugging) */\n name: string;\n /** Setup function called when the plugin is installed */\n setup: (ctx: PluginContext) => void | Promise<void>;\n}\n\nexport interface AppInstance {\n /** Install a plugin */\n use(plugin: Plugin): AppInstance;\n /** Set a config value */\n config(key: string, value: unknown): AppInstance;\n /** Mount the app to a DOM element */\n mount(selector: string | HTMLElement): void;\n /** Unmount the app */\n unmount(): void;\n}\n\n// --- definePlugin ---\n\n/**\n * Define a framework plugin.\n */\nexport function definePlugin(plugin: Plugin): Plugin {\n return plugin;\n}\n\n// --- createApp ---\n\n/**\n * Create an application instance with plugin support.\n *\n * ```ts\n * const app = createApp(App);\n * app.use(authPlugin);\n * app.use(i18nPlugin);\n * app.mount('#app');\n * ```\n */\nexport function createApp<P extends Record<string, unknown>>(\n rootComponent: Component<P>,\n rootProps?: P,\n): AppInstance {\n const plugins: Plugin[] = [];\n const errorHandlers: Array<(error: Error) => void> = [];\n const beforeMountHooks: Array<() => void> = [];\n const appConfig: Record<string, unknown> = {};\n let mountedNode: Node | null = null;\n let containerEl: HTMLElement | null = null;\n\n const pluginCtx: PluginContext = {\n provide<T>(key: InjectionKey<T>, value: T) {\n // Will be called during setup ā context scope is active\n provide(key, value);\n },\n onError(handler: (error: Error) => void) {\n errorHandlers.push(handler);\n },\n onBeforeMount(hook: () => void) {\n beforeMountHooks.push(hook);\n },\n config: appConfig,\n };\n\n const app: AppInstance = {\n use(plugin: Plugin) {\n plugins.push(plugin);\n return app;\n },\n\n config(key: string, value: unknown) {\n appConfig[key] = value;\n return app;\n },\n\n mount(selector: string | HTMLElement) {\n containerEl =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector;\n\n if (!containerEl) {\n throw new Error(\n `[AkashJS] Mount target not found: ${selector}`,\n );\n }\n\n // Run plugin setup\n for (const plugin of plugins) {\n plugin.setup(pluginCtx);\n }\n\n // Run before-mount hooks\n for (const hook of beforeMountHooks) {\n hook();\n }\n\n // Render root component\n try {\n mountedNode = rootComponent((rootProps ?? {}) as any);\n containerEl.appendChild(mountedNode);\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (errorHandlers.length > 0) {\n for (const handler of errorHandlers) {\n handler(e);\n }\n } else {\n throw e;\n }\n }\n },\n\n unmount() {\n if (mountedNode && containerEl) {\n containerEl.removeChild(mountedNode);\n mountedNode = null;\n }\n },\n };\n\n return app;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
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);}));}export{n as a,s as b};//# sourceMappingURL=chunk-4J3QBQVW.js.map
|
|
4
|
+
//# sourceMappingURL=chunk-4J3QBQVW.js.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-4J3QBQVW.js","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 chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var p=Symbol("deepSignal"),m=Symbol("deepRaw");function h(o){let u=chunkHL2VGVJT_cjs.c(0),a=JSON.parse(JSON.stringify(o)),f=new Map;function d(r){let e=f.get(r);return e||(e=chunkHL2VGVJT_cjs.c(0),f.set(r,e)),e}let l=false;function c(r){if(l)return;let e=f.get(r);e&&e.update(i=>i+1);}function T(r,e){l=true;try{return r()}finally{l=false,c(e);}}function y(r,e=[]){return new Proxy(r,{get(i,t,s){if(t==="$raw")return JSON.parse(JSON.stringify(a));if(t==="$signal")return ()=>(u(),JSON.parse(JSON.stringify(a)));if(t===p)return u;if(t===m)return a;let n=Reflect.get(i,t,s),g=[...e,String(t)].join(".");if(d(g)(),Array.isArray(i)&&typeof n=="function"&&new Set(["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"]).has(String(t))){let w=e.join(".")||"__root";return (...b)=>T(()=>n.apply(i,b),w)}return n!==null&&typeof n=="object"?y(n,[...e,String(t)]):n},set(i,t,s){let n=Reflect.set(i,t,s);return c([...e,String(t)].join(".")),u.update(g=>g+1),n},deleteProperty(i,t){let s=Reflect.deleteProperty(i,t);return c([...e,String(t)].join(".")),u.update(n=>n+1),s}})}return y(a)}function N(o){return o.$raw??o}function D(o){if(o===null||typeof o!="object")return false;try{return o[p]!==void 0}catch{return false}}exports.a=h;exports.b=N;exports.c=D;//# sourceMappingURL=chunk-4VLBY2BW.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-4VLBY2BW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/deep-signal.ts"],"names":["SIGNAL_KEY","RAW_KEY","deepSignal","initialValue","version","signal","raw","pathSignals","getPathSignal","path","s","batchedNotify","notifyPath","v","batchNotify","fn","createProxy","target","obj","prop","receiver","value","currentPath","arrPath","args","result","toRaw","proxy","isDeepSignal"],"mappings":"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","file":"chunk-4VLBY2BW.cjs","sourcesContent":["/**\n * Deep reactive signals.\n *\n * Unlike regular signals that are shallow, deepSignal() tracks\n * nested property access and triggers updates when any nested\n * property changes.\n *\n * ```ts\n * const state = deepSignal({ user: { name: 'Alice', age: 30 }, items: [1, 2, 3] });\n * state.user.name; // 'Alice' (tracked)\n * state.user.name = 'Bob'; // triggers reactivity\n * state.items.push(4); // triggers reactivity\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport { batch } from './scheduler.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeepSignal<T> = T extends object\n ? { [K in keyof T]: DeepSignal<T[K]> } & { readonly $raw: T; readonly $signal: () => T }\n : T;\n\n// =========================================================================\n// deepSignal()\n// =========================================================================\n\nconst SIGNAL_KEY = Symbol('deepSignal');\nconst RAW_KEY = Symbol('deepRaw');\n\n/**\n * Create a deeply reactive signal. Nested property access is tracked,\n * and setting any nested property triggers updates.\n *\n * ```ts\n * const state = deepSignal({\n * user: { name: 'Alice', age: 30 },\n * todos: [{ text: 'Buy milk', done: false }],\n * });\n *\n * effect(() => {\n * console.log(state.user.name); // re-runs when name changes\n * });\n *\n * state.user.name = 'Bob'; // triggers the effect above\n * ```\n */\nexport function deepSignal<T extends object>(initialValue: T): DeepSignal<T> {\n const version = signal(0); // root-level signal for $signal compatibility\n const raw = JSON.parse(JSON.stringify(initialValue));\n\n // Per-path signals for fine-grained tracking\n const pathSignals = new Map<string, ReturnType<typeof signal<number>>>();\n\n function getPathSignal(path: string): ReturnType<typeof signal<number>> {\n let s = pathSignals.get(path);\n if (!s) {\n s = signal(0);\n pathSignals.set(path, s);\n }\n return s;\n }\n\n let batchedNotify = false;\n function notifyPath(path: string): void {\n if (batchedNotify) return;\n // Only notify the exact path that changed ā not ancestors\n const s = pathSignals.get(path);\n if (s) s.update(v => v + 1);\n }\n function batchNotify(fn: () => unknown, path: string): unknown {\n batchedNotify = true;\n try {\n return fn();\n } finally {\n batchedNotify = false;\n notifyPath(path);\n }\n }\n\n function createProxy<O extends object>(target: O, path: string[] = []): DeepSignal<O> {\n return new Proxy(target, {\n get(obj, prop, receiver) {\n // Special properties\n if (prop === '$raw') return JSON.parse(JSON.stringify(raw));\n if (prop === '$signal') return () => { version(); return JSON.parse(JSON.stringify(raw)); };\n if (prop === SIGNAL_KEY) return version;\n if (prop === RAW_KEY) return raw;\n\n const value = Reflect.get(obj, prop, receiver);\n\n // Track read ā use per-path signal for fine-grained reactivity\n const currentPath = [...path, String(prop)].join('.');\n getPathSignal(currentPath)();\n\n // Batch array mutation methods so they fire only one notification\n if (Array.isArray(obj) && typeof value === 'function') {\n const mutators = new Set(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse', 'fill', 'copyWithin']);\n if (mutators.has(String(prop))) {\n const arrPath = path.join('.') || '__root';\n return (...args: unknown[]) => batchNotify(() => value.apply(obj, args), arrPath);\n }\n }\n\n // Wrap nested objects in proxies\n if (value !== null && typeof value === 'object') {\n return createProxy(value, [...path, String(prop)]);\n }\n\n return value;\n },\n\n set(obj, prop, value) {\n const result = Reflect.set(obj, prop, value);\n notifyPath([...path, String(prop)].join('.'));\n version.update(v => v + 1); // for $signal users only\n return result;\n },\n\n deleteProperty(obj, prop) {\n const result = Reflect.deleteProperty(obj, prop);\n notifyPath([...path, String(prop)].join('.'));\n version.update(v => v + 1); // for $signal users only\n return result;\n },\n }) as DeepSignal<O>;\n }\n\n // Wrap arrays to track mutation methods\n if (Array.isArray(raw)) {\n const arrayProxy = createProxy(raw);\n return arrayProxy as DeepSignal<T>;\n }\n\n return createProxy(raw);\n}\n\n/**\n * Get the raw (unwrapped) value from a deep signal.\n */\nexport function toRaw<T>(proxy: DeepSignal<T>): T {\n return (proxy as any).$raw ?? proxy;\n}\n\n/**\n * Check if a value is a deep signal proxy.\n */\nexport function isDeepSignal(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n try {\n return (value as any)[SIGNAL_KEY] !== undefined;\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {d as d$1}from'./chunk-EEQZFKEG.js';var p=new Map,d=new Map,m=0,b=0;function y(e,n,t){p.set(e||`signal_${m++}`,{name:e,read:n,get subscriberCount(){return t()}});}function k(e,n){let t=e||`effect_${b++}`,o={name:t,runCount:0,isRender:n.isRender,sourceCount:0};return d.set(t,o),()=>{o.runCount++,o.sourceCount=n.getSourceCount();}}function c(e){let t=d$1()[e];if(!t)return null;let o=t.$snapshot(),s=t.$__meta,a={},l=[];if(s){for(let r of s.getterKeys)try{a[r]=t[r]();}catch{a[r]="<error>";}l.push(...s.actionKeys);}else for(let[r,f]of Object.entries(t))r.startsWith("$")||r in o||typeof f=="function"&&l.push(r);return {$id:e,state:o,getters:a,actions:l,subscriberCount:0}}var u=new Map,g=new Map;function S(){return {stores(){return Object.keys(d$1())},store(e){return c(e)},storeSnapshots(){let e={};for(let n of Object.keys(d$1())){let t=c(n);t&&(e[n]=t);}return e},signals(){return [...p.values()].map(e=>({name:e.name,value:e.read(),subscribers:e.subscriberCount}))},effects(){return [...d.values()].map(e=>({name:e.name,runs:e.runCount,isRender:e.isRender,sources:e.sourceCount}))},version(){return {runtime:"0.2.8"}},log(e){if(e){let n=c(e);n?(console.group(`\u{1F50D} Store: ${e}`),console.log("State:",n.state),console.log("Getters:",n.getters),console.log("Actions:",n.actions),console.groupEnd()):console.warn(`Store "${e}" not found. Available:`,Object.keys(d$1()));}else {let n=Object.keys(d$1());console.group("\u{1F50D} AkashJS Stores");for(let t of n){let o=c(t);o&&(console.group(t),console.log("State:",o.state),console.log("Getters:",o.getters),console.groupEnd());}console.groupEnd();}},startRecording(e){let n=d$1()[e];if(!n){console.warn(`Store "${e}" not found.`);return}let t=[];t.push({timestamp:Date.now(),state:n.$snapshot()});let o=n.$subscribe(s=>{t.push({timestamp:Date.now(),state:{...s}});});u.set(e,t),g.set(e,o),console.log(`\u23FA Recording store "${e}". Call __AKASH_DEVTOOLS__.stopRecording("${e}") to view history.`);},stopRecording(e){let n=g.get(e);n&&n(),g.delete(e);let t=u.get(e)??[];return u.delete(e),console.log(`\u23F9 Stopped recording "${e}". ${t.length} snapshots captured.`),console.table(t.map((o,s)=>({"#":s,time:new Date(o.timestamp).toISOString().slice(11,23),state:JSON.stringify(o.state)}))),t}}}function h(e){let n=S();typeof globalThis<"u"&&(globalThis.__AKASH_DEVTOOLS__=n,console.log("%c\u{1F527} AkashJS DevTools installed. Access via __AKASH_DEVTOOLS__ in console.","color: #7c3aed; font-weight: bold;"),console.log(" .stores() \u2014 list stores"),console.log(' .store("id") \u2014 inspect store'),console.log(" .log() \u2014 pretty-print all stores"),console.log(' .log("id") \u2014 pretty-print one store'),console.log(' .startRecording("id") \u2014 record state changes'),console.log(' .stopRecording("id") \u2014 view recorded history'),console.log(" .signals() \u2014 list tracked signals"),console.log(" .effects() \u2014 list tracked effects")),e?.overlay&&import('./devtools-overlay-3PHULVP4.js').then(t=>t.mountDevtoolsOverlay());}export{y as a,k as b,h as c};//# sourceMappingURL=chunk-5GDMAABU.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-5GDMAABU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools.ts"],"names":["trackedSignals","trackedEffects","signalCounter","effectCounter","__trackSignal","name","read","getSubscriberCount","__trackEffect","meta","id","entry","inspectStore","store","__getStoreInstances","snapshot","getters","actions","key","value","recordings","recordingDisposers","createDevToolsAPI","result","snap","s","storeId","stores","history","unsubscribe","state","disposer","h","i","installDevtools","options","api","m"],"mappings":"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","file":"chunk-5GDMAABU.js","sourcesContent":["/**\n * AkashJS DevTools ā Console-based debugging utilities.\n *\n * Call `installDevtools()` in development to expose `__AKASH_DEVTOOLS__`\n * on the global object. Access it from the browser console:\n *\n * ```js\n * __AKASH_DEVTOOLS__.stores() // list all stores\n * __AKASH_DEVTOOLS__.store('cart') // inspect a store\n * __AKASH_DEVTOOLS__.signals() // list tracked signals\n * __AKASH_DEVTOOLS__.effects() // list active effects\n * ```\n */\n\nimport { __getStoreInstances } from './store.js';\n\ndeclare const __RUNTIME_VERSION__: string;\nimport type { Store } from './store.js';\n\n// --- Signal/Effect tracking ---\n\ninterface TrackedSignal {\n name: string;\n read: () => unknown;\n subscriberCount: number;\n}\n\ninterface TrackedEffect {\n name: string;\n runCount: number;\n isRender: boolean;\n sourceCount: number;\n}\n\nconst trackedSignals = new Map<string, TrackedSignal>();\nconst trackedEffects = new Map<string, TrackedEffect>();\nlet signalCounter = 0;\nlet effectCounter = 0;\n\n/** Register a signal for devtools tracking (call in dev mode) */\nexport function __trackSignal(name: string, read: () => unknown, getSubscriberCount: () => number): void {\n trackedSignals.set(name || `signal_${signalCounter++}`, {\n name,\n read,\n get subscriberCount() { return getSubscriberCount(); },\n } as TrackedSignal);\n}\n\n/** Register an effect for devtools tracking */\nexport function __trackEffect(name: string, meta: { isRender: boolean; getSourceCount: () => number }): () => void {\n const id = name || `effect_${effectCounter++}`;\n const entry: TrackedEffect = {\n name: id,\n runCount: 0,\n isRender: meta.isRender,\n sourceCount: 0,\n };\n trackedEffects.set(id, entry);\n\n // Return a function to increment run count (called each time effect runs)\n return () => {\n entry.runCount++;\n entry.sourceCount = meta.getSourceCount();\n };\n}\n\n// --- Store inspection ---\n\ninterface StoreSnapshot {\n $id: string;\n state: Record<string, unknown>;\n getters: Record<string, unknown>;\n actions: string[];\n subscriberCount: number;\n}\n\nfunction inspectStore(id: string): StoreSnapshot | null {\n const instances = __getStoreInstances();\n const store = instances[id];\n if (!store) return null;\n\n const snapshot = store.$snapshot();\n const meta = (store as any).$__meta as { stateKeys: string[]; getterKeys: string[]; actionKeys: string[] } | undefined;\n const getters: Record<string, unknown> = {};\n const actions: string[] = [];\n\n if (meta) {\n // Use metadata from store creation ā no function calling needed\n for (const key of meta.getterKeys) {\n try { getters[key] = (store as any)[key](); } catch { getters[key] = '<error>'; }\n }\n actions.push(...meta.actionKeys);\n } else {\n // Fallback for stores without metadata\n for (const [key, value] of Object.entries(store)) {\n if (key.startsWith('$') || key in snapshot) continue;\n if (typeof value === 'function') actions.push(key);\n }\n }\n\n return {\n $id: id,\n state: snapshot,\n getters,\n actions,\n subscriberCount: 0,\n };\n}\n\n// --- DevTools API ---\n\nexport interface DevToolsAPI {\n /** List all registered stores */\n stores(): string[];\n /** Inspect a specific store by ID */\n store(id: string): StoreSnapshot | null;\n /** Get all store snapshots */\n storeSnapshots(): Record<string, StoreSnapshot>;\n /** List tracked signals with current values */\n signals(): Array<{ name: string; value: unknown; subscribers: number }>;\n /** List tracked effects with run counts */\n effects(): Array<{ name: string; runs: number; isRender: boolean; sources: number }>;\n /** Get framework version info */\n version(): { runtime: string };\n /** Pretty-print store state to console */\n log(storeId?: string): void;\n /** Record store state history for time-travel */\n startRecording(storeId: string): void;\n /** Stop recording and return history */\n stopRecording(storeId: string): Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>;\n}\n\nconst recordings = new Map<string, Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>>();\nconst recordingDisposers = new Map<string, () => void>();\n\nfunction createDevToolsAPI(): DevToolsAPI {\n return {\n stores() {\n return Object.keys(__getStoreInstances());\n },\n\n store(id: string) {\n return inspectStore(id);\n },\n\n storeSnapshots() {\n const result: Record<string, StoreSnapshot> = {};\n for (const id of Object.keys(__getStoreInstances())) {\n const snap = inspectStore(id);\n if (snap) result[id] = snap;\n }\n return result;\n },\n\n signals() {\n return [...trackedSignals.values()].map(s => ({\n name: s.name,\n value: s.read(),\n subscribers: s.subscriberCount,\n }));\n },\n\n effects() {\n return [...trackedEffects.values()].map(e => ({\n name: e.name,\n runs: e.runCount,\n isRender: e.isRender,\n sources: e.sourceCount,\n }));\n },\n\n version() {\n return { runtime: __RUNTIME_VERSION__ };\n },\n\n log(storeId?: string) {\n if (storeId) {\n const snap = inspectStore(storeId);\n if (snap) {\n console.group(`š Store: ${storeId}`);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.log('Actions:', snap.actions);\n console.groupEnd();\n } else {\n console.warn(`Store \"${storeId}\" not found. Available:`, Object.keys(__getStoreInstances()));\n }\n } else {\n const stores = Object.keys(__getStoreInstances());\n console.group('š AkashJS Stores');\n for (const id of stores) {\n const snap = inspectStore(id);\n if (snap) {\n console.group(id);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.groupEnd();\n }\n }\n console.groupEnd();\n }\n },\n\n startRecording(storeId: string) {\n const store = __getStoreInstances()[storeId];\n if (!store) {\n console.warn(`Store \"${storeId}\" not found.`);\n return;\n }\n\n const history: Array<{ timestamp: number; state: Record<string, unknown>; action?: string }> = [];\n // Record initial state\n history.push({ timestamp: Date.now(), state: store.$snapshot() });\n\n const unsubscribe = store.$subscribe((state) => {\n history.push({ timestamp: Date.now(), state: { ...state } });\n });\n\n recordings.set(storeId, history);\n recordingDisposers.set(storeId, unsubscribe);\n console.log(`āŗ Recording store \"${storeId}\". Call __AKASH_DEVTOOLS__.stopRecording(\"${storeId}\") to view history.`);\n },\n\n stopRecording(storeId: string) {\n const disposer = recordingDisposers.get(storeId);\n if (disposer) disposer();\n recordingDisposers.delete(storeId);\n\n const history = recordings.get(storeId) ?? [];\n recordings.delete(storeId);\n\n console.log(`ā¹ Stopped recording \"${storeId}\". ${history.length} snapshots captured.`);\n console.table(history.map((h, i) => ({\n '#': i,\n time: new Date(h.timestamp).toISOString().slice(11, 23),\n state: JSON.stringify(h.state),\n })));\n\n return history;\n },\n };\n}\n\n/**\n * Install AkashJS DevTools on the global object.\n * Call this in your app's entry point during development:\n *\n * ```ts\n * import { installDevtools } from '@akashjs/runtime';\n * if (import.meta.env.DEV) installDevtools();\n * ```\n */\nexport interface DevToolsOptions {\n /** Enable the visual overlay panel (toggle with Ctrl+Shift+D) */\n overlay?: boolean;\n}\n\nexport function installDevtools(options?: DevToolsOptions): void {\n const api = createDevToolsAPI();\n\n if (typeof globalThis !== 'undefined') {\n (globalThis as any).__AKASH_DEVTOOLS__ = api;\n console.log(\n '%cš§ AkashJS DevTools installed. Access via __AKASH_DEVTOOLS__ in console.',\n 'color: #7c3aed; font-weight: bold;'\n );\n console.log(' .stores() ā list stores');\n console.log(' .store(\"id\") ā inspect store');\n console.log(' .log() ā pretty-print all stores');\n console.log(' .log(\"id\") ā pretty-print one store');\n console.log(' .startRecording(\"id\") ā record state changes');\n console.log(' .stopRecording(\"id\") ā view recorded history');\n console.log(' .signals() ā list tracked signals');\n console.log(' .effects() ā list tracked effects');\n }\n\n // Mount visual overlay if requested\n if (options?.overlay) {\n import('./devtools-overlay.js').then(m => m.mountDevtoolsOverlay());\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function m(o,t){let e=chunkHL2VGVJT_cjs.c(0),n=chunkHL2VGVJT_cjs.c(t?.immediate!==false),u=null;function a(){l(),u=setInterval(()=>e.update(r=>r+1),o);}function l(){u&&(clearInterval(u),u=null);}return n()&&a(),{count:(()=>e()),isActive:(()=>n()),pause(){n.set(false),l();},resume(){n.set(true),a();},reset(){e.set(0);},dispose(){l();}}}function f(o){let t=chunkHL2VGVJT_cjs.c(false),e=null;function n(){u(),t.set(false),e=setTimeout(()=>t.set(true),o);}function u(){e&&(clearTimeout(e),e=null);}return n(),{ready:(()=>t()),restart(){n();},dispose(){u();}}}function d(o,t){let e=chunkHL2VGVJT_cjs.c(o()),n=null;return chunkHL2VGVJT_cjs.e(()=>{let u=o();return n&&clearTimeout(n),n=setTimeout(()=>e.set(u),t),()=>{n&&clearTimeout(n);}}),(()=>e())}function T(o,t){let e=chunkHL2VGVJT_cjs.c(o()),n=0,u=null;return chunkHL2VGVJT_cjs.e(()=>{let a=o(),l=Date.now(),r=l-n;return r>=t?(e.set(a),n=l):(u&&clearTimeout(u),u=setTimeout(()=>{e.set(a),n=Date.now();},t-r)),()=>{u&&clearTimeout(u);}}),(()=>e())}function p(o=0,t){let e=t?.min??-1/0,n=t?.max??1/0,u=l=>Math.min(n,Math.max(e,l)),a=chunkHL2VGVJT_cjs.c(u(o));return {count:(()=>a()),inc(l=1){a.update(r=>u(r+l));},dec(l=1){a.update(r=>u(r-l));},set(l){a.set(u(l));},reset(){a.set(u(o));}}}function y(o=false){let t=chunkHL2VGVJT_cjs.c(o);return {value:(()=>t()),toggle(){t.update(e=>!e);},setTrue(){t.set(true);},setFalse(){t.set(false);}}}function g(o){let t,e=chunkHL2VGVJT_cjs.c(void 0);return chunkHL2VGVJT_cjs.e(()=>{let n=o();e.set(t),t=n;}),(()=>e())}exports.a=m;exports.b=f;exports.c=d;exports.d=T;exports.e=p;exports.f=y;exports.g=g;//# sourceMappingURL=chunk-5JKXREA2.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-5JKXREA2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/composables.ts"],"names":["useInterval","ms","options","count","signal","isActive","timer","start","stop","c","useTimeout","ready","useDebounce","source","delay","debounced","effect","value","useThrottle","interval","throttled","lastUpdate","now","elapsed","useCounter","initial","min","max","clamp","v","delta","useToggle","usePrevious","lastValue","tracked","current"],"mappings":"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","file":"chunk-5JKXREA2.cjs","sourcesContent":["/**\n * Reactive composables ā signal-based utility functions.\n *\n * Timers, debounce, throttle, and other commonly needed\n * reactive primitives that every app uses.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useInterval ---\n\n/**\n * Create a reactive interval that ticks at a given rate.\n *\n * ```ts\n * const { count, pause, resume, reset } = useInterval(1000);\n * count(); // increments every second\n * ```\n */\nexport function useInterval(ms: number, options?: { immediate?: boolean }) {\n const count = signal(0);\n const isActive = signal(options?.immediate !== false);\n let timer: ReturnType<typeof setInterval> | null = null;\n\n function start() {\n stop();\n timer = setInterval(() => count.update((c) => c + 1), ms);\n }\n\n function stop() {\n if (timer) { clearInterval(timer); timer = null; }\n }\n\n if (isActive()) start();\n\n return {\n count: (() => count()) as ReadonlySignal<number>,\n isActive: (() => isActive()) as ReadonlySignal<boolean>,\n pause() { isActive.set(false); stop(); },\n resume() { isActive.set(true); start(); },\n reset() { count.set(0); },\n dispose() { stop(); },\n };\n}\n\n// --- useTimeout ---\n\n/**\n * Reactive timeout that exposes ready state.\n *\n * ```ts\n * const { ready, restart } = useTimeout(3000);\n * ready(); // false, then true after 3s\n * ```\n */\nexport function useTimeout(ms: number) {\n const ready = signal(false);\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n function start() {\n stop();\n ready.set(false);\n timer = setTimeout(() => ready.set(true), ms);\n }\n\n function stop() {\n if (timer) { clearTimeout(timer); timer = null; }\n }\n\n start();\n\n return {\n ready: (() => ready()) as ReadonlySignal<boolean>,\n restart() { start(); },\n dispose() { stop(); },\n };\n}\n\n// --- useDebounce ---\n\n/**\n * Debounce a signal value. The output updates only after the input\n * stops changing for the given delay.\n *\n * ```ts\n * const search = signal('');\n * const debouncedSearch = useDebounce(search, 300);\n * // debouncedSearch() updates 300ms after last search.set()\n * ```\n */\nexport function useDebounce<T>(source: () => T, delay: number): ReadonlySignal<T> {\n const debounced = signal<T>(source());\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n effect(() => {\n const value = source();\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => debounced.set(value), delay);\n return () => { if (timer) clearTimeout(timer); };\n });\n\n return (() => debounced()) as ReadonlySignal<T>;\n}\n\n// --- useThrottle ---\n\n/**\n * Throttle a signal value. The output updates at most once per interval.\n *\n * ```ts\n * const scrollY = signal(0);\n * const throttled = useThrottle(scrollY, 100);\n * ```\n */\nexport function useThrottle<T>(source: () => T, interval: number): ReadonlySignal<T> {\n const throttled = signal<T>(source());\n let lastUpdate = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n effect(() => {\n const value = source();\n const now = Date.now();\n const elapsed = now - lastUpdate;\n\n if (elapsed >= interval) {\n throttled.set(value);\n lastUpdate = now;\n } else {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n throttled.set(value);\n lastUpdate = Date.now();\n }, interval - elapsed);\n }\n return () => { if (timer) clearTimeout(timer); };\n });\n\n return (() => throttled()) as ReadonlySignal<T>;\n}\n\n// --- useCounter ---\n\n/**\n * Simple reactive counter with inc/dec/set/reset.\n *\n * ```ts\n * const { count, inc, dec, set, reset } = useCounter(0);\n * ```\n */\nexport function useCounter(initial = 0, options?: { min?: number; max?: number }) {\n const min = options?.min ?? -Infinity;\n const max = options?.max ?? Infinity;\n const clamp = (v: number) => Math.min(max, Math.max(min, v));\n const count = signal(clamp(initial));\n return {\n count: (() => count()) as ReadonlySignal<number>,\n inc(delta = 1) { count.update((c) => clamp(c + delta)); },\n dec(delta = 1) { count.update((c) => clamp(c - delta)); },\n set(value: number) { count.set(clamp(value)); },\n reset() { count.set(clamp(initial)); },\n };\n}\n\n// --- useToggle ---\n\n/**\n * Reactive boolean toggle.\n *\n * ```ts\n * const { value, toggle, setTrue, setFalse } = useToggle(false);\n * ```\n */\nexport function useToggle(initial = false) {\n const value = signal(initial);\n return {\n value: (() => value()) as ReadonlySignal<boolean>,\n toggle() { value.update((v) => !v); },\n setTrue() { value.set(true); },\n setFalse() { value.set(false); },\n };\n}\n\n// --- usePrevious ---\n\n/**\n * Track the previous value of a signal.\n *\n * ```ts\n * const count = signal(0);\n * const prev = usePrevious(count);\n * count.set(1);\n * prev(); // 0\n * ```\n */\nexport function usePrevious<T>(source: () => T): ReadonlySignal<T | undefined> {\n let lastValue: T | undefined;\n const tracked = signal<T | undefined>(undefined);\n\n effect(() => {\n const current = source();\n tracked.set(lastValue);\n lastValue = current;\n });\n\n return (() => tracked()) as ReadonlySignal<T | undefined>;\n}\n"]}
|