@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/query-state.ts"],"names":["defaultSerialize","value","defaultDeserialize","raw","defaultValue","getSearchParams","updateURL","params","mode","search","url","activeStates","popstateListening","ensurePopstateListener","batch","key","state","useQueryState","options","serialize","v","deserialize","historyMode","debounceMs","removeDefault","initialValue","signal","debounceTimer","isInternalUpdate","originalSet","doUpdate","currentParams","fn","useQueryStates","schema","result","config","clearQueryState","getQueryParams","removeQueryState","resetQueryState"],"mappings":"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","file":"chunk-BLT7XOSX.cjs","sourcesContent":["/**\n * URL-synced reactive state.\n *\n * Automatically sync signal values to URL query parameters.\n * Users can share links, use browser back/forward, and state\n * persists across page reloads — all with zero boilerplate.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * const page = useQueryState('page', 1);\n * const tags = useQueryState('tags', ['js']);\n *\n * search.set('akashjs'); // URL → ?q=akashjs&page=1&tags=js\n * // User hits back → signals update automatically\n * ```\n */\n\nimport { signal, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport type { Signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface QueryStateOptions<T> {\n /** Custom serializer (default: auto-detect from type) */\n serialize?: (value: T) => string;\n /** Custom deserializer (default: auto-detect from type) */\n deserialize?: (raw: string) => T;\n /** Whether to push or replace history entry (default: 'replace') */\n history?: 'push' | 'replace';\n /** Debounce URL updates in ms (default: 0) */\n debounce?: number;\n /** Remove param from URL when value equals default */\n removeDefault?: boolean;\n}\n\n// =========================================================================\n// Serializers\n// =========================================================================\n\nfunction defaultSerialize(value: unknown): string {\n if (Array.isArray(value)) return value.join(',');\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n return String(value);\n}\n\nfunction defaultDeserialize<T>(raw: string, defaultValue: T): T {\n if (typeof defaultValue === 'number') return Number(raw) as T;\n if (typeof defaultValue === 'boolean') return (raw === 'true' || raw === '1') as T;\n if (Array.isArray(defaultValue)) {\n return (raw ? raw.split(',') : []) as T;\n }\n return raw as T;\n}\n\n// =========================================================================\n// URL helpers\n// =========================================================================\n\nfunction getSearchParams(): URLSearchParams {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n}\n\nfunction updateURL(params: URLSearchParams, mode: 'push' | 'replace'): void {\n if (typeof window === 'undefined') return;\n\n const search = params.toString();\n const url = search ? `${window.location.pathname}?${search}${window.location.hash}` : `${window.location.pathname}${window.location.hash}`;\n\n if (mode === 'push') {\n window.history.pushState(null, '', url);\n } else {\n window.history.replaceState(null, '', url);\n }\n}\n\n// =========================================================================\n// useQueryState — single value\n// =========================================================================\n\n/** Track active query state signals for popstate sync */\nconst activeStates = new Map<string, { signal: Signal<any>; deserialize: (raw: string) => any; defaultValue: any }>();\nlet popstateListening = false;\n\nfunction ensurePopstateListener(): void {\n if (popstateListening || typeof window === 'undefined') return;\n popstateListening = true;\n\n window.addEventListener('popstate', () => {\n const params = getSearchParams();\n batch(() => {\n for (const [key, state] of activeStates) {\n const raw = params.get(key);\n const value = raw !== null\n ? state.deserialize(raw)\n : state.defaultValue;\n state.signal.set(value);\n }\n });\n });\n}\n\n/**\n * Create a signal synced to a URL query parameter.\n *\n * ```ts\n * const search = useQueryState('q', '');\n * search(); // reads from URL or default\n * search.set('hello'); // updates URL to ?q=hello\n * ```\n */\nexport function useQueryState<T>(\n key: string,\n defaultValue: T,\n options: QueryStateOptions<T> = {},\n): Signal<T> {\n const {\n serialize = (v: T) => defaultSerialize(v),\n deserialize = (raw: string) => defaultDeserialize(raw, defaultValue),\n history: historyMode = 'replace',\n debounce: debounceMs = 0,\n removeDefault = true,\n } = options;\n\n // Read initial value from URL\n const params = getSearchParams();\n const raw = params.get(key);\n const initialValue = raw !== null ? deserialize(raw) : defaultValue;\n\n const state = signal<T>(initialValue);\n\n // Register for popstate sync\n activeStates.set(key, { signal: state, deserialize, defaultValue });\n ensurePopstateListener();\n\n // Sync signal → URL\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let isInternalUpdate = false;\n\n const originalSet = state.set;\n state.set = (value: T) => {\n originalSet(value);\n\n if (isInternalUpdate) return;\n\n const doUpdate = () => {\n const currentParams = getSearchParams();\n\n if (removeDefault && value === defaultValue) {\n currentParams.delete(key);\n } else {\n currentParams.set(key, serialize(value));\n }\n\n updateURL(currentParams, historyMode);\n };\n\n if (debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doUpdate, debounceMs);\n } else {\n doUpdate();\n }\n };\n\n const originalUpdate = state.update;\n state.update = (fn: (prev: T) => T) => {\n state.set(fn(state()));\n };\n\n return state;\n}\n\n// =========================================================================\n// useQueryStates — multiple values at once\n// =========================================================================\n\ntype QueryStateSchema = Record<string, {\n default: unknown;\n serialize?: (value: any) => string;\n deserialize?: (raw: string) => any;\n}>;\n\ntype QueryStates<T extends QueryStateSchema> = {\n [K in keyof T]: Signal<T[K]['default']>;\n};\n\n/**\n * Create multiple URL-synced signals at once.\n * All updates within a batch result in a single URL change.\n *\n * ```ts\n * const { q, page, sort } = useQueryStates({\n * q: { default: '' },\n * page: { default: 1 },\n * sort: { default: 'name' },\n * });\n * ```\n */\nexport function useQueryStates<T extends QueryStateSchema>(\n schema: T,\n options?: { history?: 'push' | 'replace' },\n): QueryStates<T> {\n const result = {} as any;\n for (const [key, config] of Object.entries(schema)) {\n result[key] = useQueryState(key, config.default, {\n serialize: config.serialize,\n deserialize: config.deserialize,\n history: options?.history,\n });\n }\n return result;\n}\n\n// =========================================================================\n// Utilities\n// =========================================================================\n\n/**\n * Remove all query state params from the URL.\n */\nexport function clearQueryState(): void {\n if (typeof window === 'undefined') return;\n const url = `${window.location.pathname}${window.location.hash}`;\n window.history.replaceState(null, '', url);\n\n batch(() => {\n for (const [, state] of activeStates) {\n state.signal.set(state.defaultValue);\n }\n });\n}\n\n/**\n * Get all current query params as a plain object.\n */\nexport function getQueryParams(): Record<string, string> {\n const params = getSearchParams();\n const result: Record<string, string> = {};\n params.forEach((value, key) => { result[key] = value; });\n return result;\n}\n\n/**\n * Cleanup: remove a specific query state binding.\n */\nexport function removeQueryState(key: string): void {\n activeStates.delete(key);\n}\n\n/**\n * Cleanup all query state bindings (useful for testing).\n */\nexport function resetQueryState(): void {\n activeStates.clear();\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c,d,a,b as b$1}from'./chunk-VUMMC2P5.js';import {b}from'./chunk-AOFLE33X.js';import {e,f}from'./chunk-2UATNCKC.js';function K(e,n){let t=document.createElement(e);if(n)for(let[c,m]of Object.entries(n))I(t,c,m);return t}function q(e){return document.createTextNode(e)}function V(e){let n=document.createElement("template");return n.innerHTML=e,n.content.cloneNode(true)}function I(e,n,t){if(n==="class"||n==="className")e.className=t;else if(n==="style"&&typeof t=="object"&&t!==null)Object.assign(e.style,t);else if(n==="innerHTML")e.innerHTML=t;else if(n!=="ref")if(n.startsWith("on")){let c=n.slice(2).toLowerCase();e.addEventListener(c,t);}else n in e?e[n]=t:t===false||t==null?e.removeAttribute(n):e.setAttribute(n,t===true?"":String(t));}function W(e$1,n){return e(()=>{e$1.textContent=String(n());},{render:true})}function G(e$1,n,t){return e(()=>{I(e$1,n,t());},{render:true})}function U(e$1,n){return e(()=>{e$1.style.display=n()?"":"none";},{render:true})}function R(e=""){return document.createComment(e)}function D(e$1,n,t,c$1,m){let s=null,w=c(),a=e(()=>{let d$1=t();if(s){for(let f of s.nodes)try{f.parentNode?.removeChild(f);}catch{}s.dispose?.(),s=null;}let l=d$1?c$1:m,i=n.parentNode;if(!i&&s?.nodes[0]?.parentNode&&(i=s.nodes[0].parentNode),l&&i){let f=w?d(w,l):l(),p=f instanceof DocumentFragment?Array.from(f.childNodes):[f];for(let g of p)i.insertBefore(g,n);s={nodes:p,dispose:null};}},{render:true});return ()=>{if(a(),s){for(let d of s.nodes)try{d.parentNode?.removeChild(d);}catch{}s.dispose?.();}}}function B(e$1,n,t,c$1,m){let s=[],w=c();function a(l,i,f){let p=w?d(w,()=>m(l,i)):m(l,i),g=p instanceof DocumentFragment?Array.from(p.childNodes):[p];return {key:f,value:l,nodes:g,dispose:null}}let d$1=e(()=>{let l=t(),i=s,f=i.length,p=l.length;if(f===0){let o=new Array(p),u=n.parentNode;for(let r=0;r<p;r++){let h=l[r],k=a(h,r,c$1(h,r));if(o[r]=k,u)for(let L=0;L<k.nodes.length;L++)u.insertBefore(k.nodes[L],n);}s=o;return}if(p===0){for(let o=0;o<f;o++){let u=i[o];for(let r=0;r<u.nodes.length;r++){let h=u.nodes[r];h.parentNode&&h.parentNode.removeChild(h);}u.dispose?.();}s=[];return}let g=new Map;for(let o=0;o<f;o++)g.set(i[o].key,o);let T=new Array(p),N=new Array(p);for(let o=0;o<p;o++){let u=l[o],r=c$1(u,o),h=g.get(r);if(h!==void 0){g.delete(r);let k=i[h];k.nodes[0]&&!k.nodes[0].parentNode?(T[o]=a(u,o,r),N[o]=-1):(k.value=u,T[o]=k,N[o]=h);}else T[o]=a(u,o,r),N[o]=-1;}for(let o of g.values()){let u=i[o];for(let r=0;r<u.nodes.length;r++){let h=u.nodes[r];h.parentNode&&h.parentNode.removeChild(h);}u.dispose?.();}let C=j(N),S=new Set;for(let o=0;o<C.length;o++)S.add(C[o]);let H=n.parentNode;if(H){let o=n;for(let u=p-1;u>=0;u--){let r=T[u];if(S.has(u))o=r.nodes[0];else {for(let h=0;h<r.nodes.length;h++)H.insertBefore(r.nodes[h],o);o=r.nodes[0];}}}s=T;},{render:true});return ()=>{d$1();for(let l of s){for(let i=0;i<l.nodes.length;i++){let f=l.nodes[i];f.parentNode&&f.parentNode.removeChild(f);}l.dispose?.();}s=[];}}function j(e){let n=e.length;if(n===0)return [];let t=[],c=new Array(n).fill(-1),m=[];for(let a=0;a<n;a++){if(e[a]===-1)continue;let d=0,l=t.length;for(;d<l;){let i=d+l>>1;t[i]<e[a]?d=i+1:l=i;}t[d]=e[a],m[d]=a,d>0&&(c[a]=m[d-1]);}let s=new Array(t.length),w=m[t.length-1];for(let a=t.length-1;a>=0;a--)s[a]=w,w=c[w];return s}function Y(e){let n=R("show"),t=document.createDocumentFragment();t.appendChild(n);let c=typeof e.when=="function"?e.when:()=>e.when,m;return D(t,n,()=>(m=c(),!!m),()=>y(e.children(m)),e.fallback?()=>y(e.fallback()):void 0),t}function z(e){let n=R("for"),t=document.createDocumentFragment();t.appendChild(n);let c=typeof e.each=="function"?e.each:()=>e.each;return B(t,n,c,e.key,(m,s)=>y(e.children(m,s))),t}function y(e){if(e==null||typeof e=="boolean")return document.createTextNode("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(e instanceof Node)return e;if(Array.isArray(e)){let n=document.createDocumentFragment();for(let t of e)n.appendChild(y(t));return n}return document.createTextNode(String(e))}function J(e,n,t){let c=y(n);t?e.insertBefore(c,t):e.appendChild(c);}function te(e){return e.__reactive=true,e}var x=null;function oe(e){if(!x)throw b("AK0020");x.mount.push(e);}function re(e){if(!x)throw b("AK0021");x.unmount.push(e);}function se(e){if(!x)throw b("AK0022");x.error.push(e);}function ie(e){return {current:e}}function ce(e){let n=t=>{let{children:c$1,...m}=t??{},a$1={props:m,children:typeof c$1=="function"?c$1:()=>c$1??null},d={mount:[],unmount:[],error:[]},l=x;x=d;let i=c(),f$1=a(i),p,g;try{g=f(()=>{if(p=e(a$1),typeof p!="function")throw b("AK0040");let T=p();return y(T)});}catch(T){if(b$1(f$1),x=l,d.error.length>0){for(let N of d.error)N(T instanceof Error?T:new Error(String(T)));return document.createComment("error")}throw T}return b$1(f$1),x=l,d.mount.length>0&&queueMicrotask(()=>{for(let T of d.mount)try{let N=T();typeof N=="function"&&d.unmount.push(N);}catch(N){for(let C of d.error)C(N instanceof Error?N:new Error(String(N)));}}),g};return n._akash=true,n}export{K as a,q as b,V as c,I as d,W as e,G as f,U as g,D as h,B as i,Y as j,z as k,y as l,J as m,te as n,oe as o,re as p,se as q,ie as r,ce as s};//# sourceMappingURL=chunk-CDZR6GWB.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-CDZR6GWB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom.ts","../src/component.ts"],"names":["createElement","tag","attrs","el","key","value","setProperty","createText","cloneTemplate","html","template","event","bindText","node","fn","effect","bindProperty","bindVisible","createAnchor","label","renderConditional","parent","anchor","condition","trueBranch","falseBranch","current","scope","getCurrentScope","dispose","branch","liveParent","fragment","runInScope","nodes","renderList","items","keyFn","renderItem","currentItems","createItem","data","index","newData","oldItems","oldLen","newLen","newItems","i","item","j","n","oldKeyMap","newToOld","oldIdx","existing","lisIndices","longestIncreasingSubsequence","lisSet","nextSibling","arr","tails","predecessors","indices","lo","hi","mid","result","k","Show","props","container","getWhen","whenValue","nodeToDOM","For","getEach","child","insert","domNode","__getter","currentHooks","onMount","akashError","onUnmount","onError","ref","initialValue","defineComponent","setup","component","rawProps","childrenProp","restProps","ctx","hooks","prevHooks","parentScope","pushScope","renderFn","untrack","rendered","err","popScope","handler","mountFn","cleanup"],"mappings":"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","file":"chunk-CDZR6GWB.js","sourcesContent":["/**\n * Direct DOM rendering runtime.\n *\n * No virtual DOM. The compiler generates calls to these helpers.\n * Signal reads inside templates become fine-grained effects that\n * update only the specific DOM node that changed.\n */\n\nimport { effect } from './signals.js';\nimport { getCurrentScope, runInScope } from './context.js';\nimport type { AkashNode } from './types.js';\n\n// --- DOM creation helpers (used by compiler output) ---\n\n/** Create an element and optionally set static attributes */\nexport function createElement(\n tag: string,\n attrs?: Record<string, unknown>,\n): HTMLElement {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n setProperty(el, key, value);\n }\n }\n return el;\n}\n\n/** Create a text node */\nexport function createText(value: string): Text {\n return document.createTextNode(value);\n}\n\n/** Clone a template element for static structure */\nexport function cloneTemplate(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content.cloneNode(true) as DocumentFragment;\n}\n\n// --- Property/attribute setting ---\n\nexport function setProperty(el: HTMLElement, key: string, value: unknown): void {\n if (key === 'class' || key === 'className') {\n el.className = value as string;\n } else if (key === 'style' && typeof value === 'object' && value !== null) {\n Object.assign(el.style, value);\n } else if (key === 'innerHTML') {\n el.innerHTML = value as string;\n } else if (key === 'ref') {\n // Handled separately by component system\n } else if (key.startsWith('on')) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value as EventListener);\n } else if (key in el) {\n (el as unknown as Record<string, unknown>)[key] = value;\n } else if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n}\n\n// --- Reactive binding (used by compiler for dynamic expressions) ---\n\n/** Bind a reactive expression to a text node's content */\nexport function bindText(node: Text, fn: () => unknown): () => void {\n return effect(\n () => {\n node.textContent = String(fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's attribute/property */\nexport function bindProperty(\n el: HTMLElement,\n key: string,\n fn: () => unknown,\n): () => void {\n return effect(\n () => {\n setProperty(el, key, fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's visibility (display) */\nexport function bindVisible(el: HTMLElement, fn: () => boolean): () => void {\n return effect(\n () => {\n el.style.display = fn() ? '' : 'none';\n },\n { render: true },\n );\n}\n\n// --- Conditional rendering ---\n\n/** Anchor node — comment for normal DOM, hidden element for table contexts */\ntype Anchor = Comment | HTMLElement;\n\n/** Table elements where comment nodes get relocated by the browser */\nconst TABLE_TAGS = new Set(['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR']);\n\nfunction createAnchor(label = ''): Anchor {\n return document.createComment(label);\n}\n\n/**\n * Create a table-safe anchor. Browsers relocate comment nodes inside\n * table elements, breaking anchor-based insertion. Use a hidden element instead.\n */\nfunction createTableSafeAnchor(parent: Node): Anchor {\n if (parent instanceof HTMLElement && TABLE_TAGS.has(parent.tagName)) {\n const tag = parent.tagName === 'TR' ? 'td' : 'tr';\n const el = document.createElement(tag);\n el.style.display = 'none';\n return el;\n }\n return document.createComment('');\n}\n\ninterface ConditionalBlock {\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a conditional block. Swaps DOM fragments based on a reactive\n * condition. Used by the compiler for :if directives and <Show>.\n */\nexport function renderConditional(\n parent: Node,\n anchor: Node,\n condition: () => boolean,\n trueBranch: () => Node,\n falseBranch?: () => Node,\n): () => void {\n let current: ConditionalBlock | null = null;\n\n // Capture scope so children created in branches inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const value = condition();\n\n // Remove old nodes\n if (current) {\n for (const node of current.nodes) {\n try { node.parentNode?.removeChild(node); } catch {}\n }\n current.dispose?.();\n current = null;\n }\n\n // Insert new nodes — use anchor.parentNode since the anchor may have\n // moved from the initial DocumentFragment into the real DOM.\n // In table contexts, the browser may relocate comment anchors.\n const branch = value ? trueBranch : falseBranch;\n let liveParent: Node | null = anchor.parentNode;\n if (!liveParent && (current as ConditionalBlock | null)?.nodes[0]?.parentNode) {\n liveParent = (current as ConditionalBlock | null)!.nodes[0].parentNode;\n }\n if (branch && liveParent) {\n const fragment = scope ? runInScope(scope, branch) : branch();\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n for (const node of nodes) {\n liveParent.insertBefore(node, anchor);\n }\n current = { nodes, dispose: null };\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n if (current) {\n for (const node of current.nodes) {\n try { node.parentNode?.removeChild(node); } catch {}\n }\n current.dispose?.();\n }\n };\n}\n\n// --- List rendering ---\n\ninterface ListItem<T> {\n key: unknown;\n value: T;\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a reactive list with keyed reconciliation.\n * Used by the compiler for :for directives and <For>.\n */\nexport function renderList<T>(\n parent: Node,\n anchor: Node,\n items: () => T[],\n keyFn: (item: T, index: number) => unknown,\n renderItem: (item: T, index: number) => Node,\n): () => void {\n let currentItems: ListItem<T>[] = [];\n\n // Capture scope so children created in renderItem inherit provide/inject context\n const scope = getCurrentScope();\n\n function createItem(data: T, index: number, key: unknown): ListItem<T> {\n const fragment = scope ? runInScope(scope, () => renderItem(data, index)) : renderItem(data, index);\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n return { key, value: data, nodes, dispose: null };\n }\n\n const dispose = effect(\n () => {\n const newData = items();\n const oldItems = currentItems;\n const oldLen = oldItems.length;\n const newLen = newData.length;\n\n // Fast path: first render\n if (oldLen === 0) {\n const newItems: ListItem<T>[] = new Array(newLen);\n const liveParent = anchor.parentNode;\n for (let i = 0; i < newLen; i++) {\n const data = newData[i];\n const item = createItem(data, i, keyFn(data, i));\n newItems[i] = item;\n if (liveParent) {\n for (let j = 0; j < item.nodes.length; j++) {\n liveParent.insertBefore(item.nodes[j], anchor);\n }\n }\n }\n currentItems = newItems;\n return;\n }\n\n // Fast path: clear all\n if (newLen === 0) {\n for (let i = 0; i < oldLen; i++) {\n const item = oldItems[i];\n for (let j = 0; j < item.nodes.length; j++) {\n const n = item.nodes[j];\n if (n.parentNode) n.parentNode.removeChild(n);\n }\n item.dispose?.();\n }\n currentItems = [];\n return;\n }\n\n // Build old key → index map\n const oldKeyMap = new Map<unknown, number>();\n for (let i = 0; i < oldLen; i++) {\n oldKeyMap.set(oldItems[i].key, i);\n }\n\n // Build new items array, reusing existing ListItems by key\n const newItems: ListItem<T>[] = new Array(newLen);\n // newToOld[i] = index in old array, or -1 if new\n const newToOld: number[] = new Array(newLen);\n\n for (let i = 0; i < newLen; i++) {\n const data = newData[i];\n const key = keyFn(data, i);\n const oldIdx = oldKeyMap.get(key);\n\n if (oldIdx !== undefined) {\n oldKeyMap.delete(key);\n const existing = oldItems[oldIdx];\n // Check if nodes are still attached\n if (existing.nodes[0] && !existing.nodes[0].parentNode) {\n newItems[i] = createItem(data, i, key);\n newToOld[i] = -1;\n } else {\n existing.value = data;\n newItems[i] = existing;\n newToOld[i] = oldIdx;\n }\n } else {\n newItems[i] = createItem(data, i, key);\n newToOld[i] = -1;\n }\n }\n\n // Remove items no longer in list\n for (const oldIdx of oldKeyMap.values()) {\n const item = oldItems[oldIdx];\n for (let j = 0; j < item.nodes.length; j++) {\n const n = item.nodes[j];\n if (n.parentNode) n.parentNode.removeChild(n);\n }\n item.dispose?.();\n }\n\n // LIS-based reconciliation: compute which items are already in order\n const lisIndices = longestIncreasingSubsequence(newToOld);\n const lisSet = new Set<number>();\n for (let i = 0; i < lisIndices.length; i++) lisSet.add(lisIndices[i]);\n\n // Walk backwards through new items. Items in the LIS stay in place.\n // Items NOT in the LIS (moves + inserts) get insertBefore'd.\n const liveParent = anchor.parentNode;\n if (liveParent) {\n let nextSibling: Node = anchor;\n for (let i = newLen - 1; i >= 0; i--) {\n const item = newItems[i];\n if (lisSet.has(i)) {\n // In LIS — already in correct relative order, just update nextSibling\n nextSibling = item.nodes[0];\n } else {\n // Not in LIS — move or insert before nextSibling\n for (let j = 0; j < item.nodes.length; j++) {\n liveParent.insertBefore(item.nodes[j], nextSibling);\n }\n nextSibling = item.nodes[0];\n }\n }\n }\n\n currentItems = newItems;\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const item of currentItems) {\n for (let j = 0; j < item.nodes.length; j++) {\n const n = item.nodes[j];\n if (n.parentNode) n.parentNode.removeChild(n);\n }\n item.dispose?.();\n }\n currentItems = [];\n };\n}\n\n/** LIS for renderList — returns indices into arr that form the longest increasing subsequence */\nfunction longestIncreasingSubsequence(arr: number[]): number[] {\n const n = arr.length;\n if (n === 0) return [];\n const tails: number[] = [];\n const predecessors: number[] = new Array(n).fill(-1);\n const indices: number[] = [];\n\n for (let i = 0; i < n; i++) {\n if (arr[i] === -1) continue;\n let lo = 0, hi = tails.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < arr[i]) lo = mid + 1; else hi = mid;\n }\n tails[lo] = arr[i];\n indices[lo] = i;\n if (lo > 0) predecessors[i] = indices[lo - 1];\n }\n\n const result: number[] = new Array(tails.length);\n let k = indices[tails.length - 1];\n for (let i = tails.length - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n return result;\n}\n\n// --- Built-in control flow components ---\n\n/** Props for the <Show> component */\nexport interface ShowProps<T> {\n when: (() => T | null | undefined | false) | T | null | undefined | false;\n fallback?: () => AkashNode;\n children: (value: T) => AkashNode;\n}\n\n/**\n * <Show> component — conditionally renders children with type narrowing.\n * The children callback receives the non-null/undefined value.\n * `when` can be a reactive getter or a static value.\n */\nexport function Show<T>(props: ShowProps<T>): Node {\n const anchor = createAnchor('show');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n // Resolve when — if it's a function, always call it (supports both\n // compiler-generated __reactive getters and plain programmatic functions)\n const getWhen = typeof props.when === 'function'\n ? props.when as () => T | null | undefined | false\n : () => props.when as T | null | undefined | false;\n\n // Capture the when value once per evaluation so the condition check\n // and the children callback receive the same value (fixes nested For contexts)\n let whenValue: T | null | undefined | false;\n renderConditional(\n container,\n anchor,\n () => { whenValue = getWhen(); return !!whenValue; },\n () => nodeToDOM(props.children(whenValue as T)),\n props.fallback ? () => nodeToDOM(props.fallback!()) : undefined,\n );\n\n return container;\n}\n\n/** Props for the <For> component */\nexport interface ForProps<T> {\n each: (() => T[]) | T[];\n key: (item: T) => unknown;\n children: (item: T, index: number) => AkashNode;\n}\n\n/**\n * <For> component — renders a list with keyed reconciliation.\n * `each` can be a reactive getter or a static array.\n */\nexport function For<T>(props: ForProps<T>): Node {\n const anchor = createAnchor('for');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n // Resolve each — if it's a function, always call it (supports both\n // compiler-generated __reactive getters and plain programmatic functions)\n const getEach = typeof props.each === 'function'\n ? props.each as () => T[]\n : () => props.each as T[];\n\n renderList(\n container,\n anchor,\n getEach,\n props.key,\n (item, index) => nodeToDOM(props.children(item, index)),\n );\n\n return container;\n}\n\n// --- Helpers ---\n\n/** Convert an AkashNode to a DOM Node */\nexport function nodeToDOM(node: AkashNode): Node {\n if (node == null || typeof node === 'boolean') {\n return document.createTextNode('');\n }\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node));\n }\n if (node instanceof Node) {\n return node;\n }\n if (Array.isArray(node)) {\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n fragment.appendChild(nodeToDOM(child));\n }\n return fragment;\n }\n return document.createTextNode(String(node));\n}\n\n/** Insert a node into a parent before an anchor */\nexport function insert(parent: Node, node: AkashNode, anchor?: Node): void {\n const domNode = nodeToDOM(node);\n if (anchor) {\n parent.insertBefore(domNode, anchor);\n } else {\n parent.appendChild(domNode);\n }\n}\n","/**\n * Component system.\n *\n * Components are functions. defineComponent() wraps a setup function\n * that runs once, establishes signals and effects, and returns a\n * render function that produces DOM nodes.\n */\n\nimport { effect, untrack } from './signals.js';\nimport { pushScope, popScope, getCurrentScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport { akashError } from './errors.js';\nimport type { AkashNode } from './types.js';\n\n// --- Reactive getter marker (used by compiler) ---\n\n/** Mark a function as a compiler-generated reactive getter */\nexport function __getter<T>(fn: () => T): (() => T) & { __reactive: true } {\n (fn as any).__reactive = true;\n return fn as any;\n}\n\n// --- Types ---\n\nexport interface Ref<T = HTMLElement> {\n current: T | undefined;\n}\n\nexport interface ComponentContext<P extends Record<string, unknown> = Record<string, unknown>> {\n props: Readonly<P>;\n children: () => AkashNode;\n}\n\nexport type Component<P extends Record<string, unknown> = Record<string, unknown>> = {\n (props: P & { children?: AkashNode | (() => AkashNode) }): Node;\n _akash: true;\n};\n\n// --- Lifecycle hook storage ---\n\ninterface LifecycleHooks {\n mount: Array<() => void | (() => void)>;\n unmount: Array<() => void>;\n error: Array<(error: Error) => void>;\n}\n\nlet currentHooks: LifecycleHooks | null = null;\n\n// --- Public lifecycle hooks ---\n\n/**\n * Register a callback to run after the component is mounted to the DOM.\n * If the callback returns a function, it will be called on unmount (cleanup).\n */\nexport function onMount(fn: () => void | (() => void)): void {\n if (!currentHooks) {\n throw akashError('AK0020');\n }\n currentHooks.mount.push(fn);\n}\n\n/**\n * Register a callback to run before the component is unmounted.\n */\nexport function onUnmount(fn: () => void): void {\n if (!currentHooks) {\n throw akashError('AK0021');\n }\n currentHooks.unmount.push(fn);\n}\n\n/**\n * Register an error handler for this component and its descendants.\n */\nexport function onError(fn: (error: Error) => void): void {\n if (!currentHooks) {\n throw akashError('AK0022');\n }\n currentHooks.error.push(fn);\n}\n\n/**\n * Create a ref for accessing a DOM element or storing a mutable value.\n */\nexport function ref<T = HTMLElement>(initialValue?: T): Ref<T> {\n return { current: initialValue as T | undefined };\n}\n\n// --- defineComponent ---\n\n/**\n * Define a component. The setup function runs once per instance.\n * It receives a context with typed props and must return a render function.\n *\n * ```ts\n * const Counter = defineComponent<{ initial: number }>((ctx) => {\n * const count = signal(ctx.props.initial);\n * return () => <div>{count()}</div>;\n * });\n * ```\n */\nexport function defineComponent<P extends Record<string, any> = Record<string, any>>(\n setup: (ctx: ComponentContext<P>) => () => AkashNode,\n): Component<P> {\n const component = (rawProps: P & { children?: AkashNode | (() => AkashNode) }): Node => {\n // Separate children from props, unwrap getter functions for reactivity\n const { children: childrenProp, ...restProps } = rawProps ?? {};\n // Props are passed through as-is — no auto-unwrapping.\n // Components use readProp() to unwrap reactive getters/signals inside\n // effects, which preserves dependency tracking. Auto-unwrapping in the\n // Proxy broke reactivity because it called the getter once and returned\n // the plain value, so effects never subscribed to the underlying signal.\n const props = restProps as unknown as P;\n\n const childrenFn: () => AkashNode =\n typeof childrenProp === 'function'\n ? childrenProp\n : () => childrenProp ?? null;\n\n const ctx: ComponentContext<P> = {\n props,\n children: childrenFn,\n };\n\n // Set up lifecycle hooks collector\n const hooks: LifecycleHooks = { mount: [], unmount: [], error: [] };\n const prevHooks = currentHooks;\n currentHooks = hooks;\n\n // Push context scope for provide/inject\n const parentScope = getCurrentScope();\n const scope = pushScope(parentScope);\n\n let renderFn: () => AkashNode;\n let domNode: Node;\n\n try {\n // Untrack component creation so that signals created inside the component\n // don't register with a parent render effect. This prevents parent effects\n // from re-running (and re-creating the entire component) when internal\n // component state changes. The component's own effects still track their\n // dependencies because effect() sets its own subscriber during execution.\n domNode = untrack(() => {\n renderFn = setup(ctx);\n if (typeof renderFn !== 'function') { throw akashError('AK0040'); }\n const rendered = renderFn();\n return nodeToDOM(rendered);\n });\n } catch (err) {\n popScope(scope);\n currentHooks = prevHooks;\n if (hooks.error.length > 0) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n return document.createComment('error');\n }\n throw err;\n }\n\n // Restore parent state\n popScope(scope);\n currentHooks = prevHooks;\n\n // Run mount callbacks (microtask to ensure DOM is attached)\n if (hooks.mount.length > 0) {\n queueMicrotask(() => {\n for (const mountFn of hooks.mount) {\n try {\n const cleanup = mountFn();\n if (typeof cleanup === 'function') {\n hooks.unmount.push(cleanup);\n }\n } catch (err) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }\n });\n }\n\n return domNode;\n };\n\n component._akash = true as const;\n return component as Component<P>;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';function u(e,h,n={}){let{props:i=[],shadow:d=true,styles:t}=n;class s extends HTMLElement{static get observedAttributes(){return i}_root;_mounted=false;_props={};constructor(){super(),this._root=d?this.attachShadow({mode:"open"}):this;}connectedCallback(){for(let o of i){let r=this.getAttribute(o);r!==null&&(this._props[o]=l(r));}this._render(),this._mounted=true;}disconnectedCallback(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);this._mounted=false;}attributeChangedCallback(o,r,a){this._props[o]=a!==null?l(a):void 0,this._mounted&&this._render();}_render(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);if(d&&t){let r=document.createElement("style");r.textContent=t,this._root.appendChild(r);}let o=h(this._props);this._root.appendChild(o);}setProps(o){Object.assign(this._props,o),this._mounted&&this._render();}}return typeof customElements<"u"&&!customElements.get(e)&&(n.extends?customElements.define(e,s,{extends:n.extends}):customElements.define(e,s)),s}function c(e,h={}){let{props:n=[],shadow:i=true,styles:d}=h;return class extends HTMLElement{static get observedAttributes(){return n}_root;_mounted=false;_props={};constructor(){super(),this._root=i?this.attachShadow({mode:"open"}):this;}connectedCallback(){for(let t of n){let s=this.getAttribute(t);s!==null&&(this._props[t]=l(s));}this._render(),this._mounted=true;}disconnectedCallback(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);this._mounted=false;}attributeChangedCallback(t,s,p){this._props[t]=p!==null?l(p):void 0,this._mounted&&this._render();}_render(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);if(i&&d){let t=document.createElement("style");t.textContent=d,this._root.appendChild(t);}this._root.appendChild(e(this._props));}}}function l(e){try{return JSON.parse(e)}catch{return e}}exports.a=u;exports.b=c;//# sourceMappingURL=chunk-DFYXFKCH.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-DFYXFKCH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/web-component.ts"],"names":["defineCustomElement","tagName","component","options","props","shadow","styles","AkashElement","prop","attr","parseAttributeValue","name","_oldValue","newValue","styleEl","node","newProps","toCustomElement","_old","val","s","value"],"mappings":"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","file":"chunk-DFYXFKCH.cjs","sourcesContent":["/**\n * Web Components output.\n *\n * Compile AkashJS components to native Custom Elements that can\n * be used in any framework or plain HTML.\n *\n * ```ts\n * import { defineCustomElement } from '@akashjs/runtime';\n * import Counter from './Counter.akash';\n *\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial'],\n * shadow: true,\n * });\n *\n * // Now usable as: <my-counter initial=\"5\"></my-counter>\n * ```\n */\n\nimport type { Component } from './component.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface CustomElementOptions {\n /** Props to observe as attributes */\n props?: string[];\n /** Use Shadow DOM (default: true) */\n shadow?: boolean;\n /** CSS styles to inject (for shadow DOM) */\n styles?: string;\n /** Extend an existing element */\n extends?: string;\n}\n\n// =========================================================================\n// defineCustomElement\n// =========================================================================\n\n/**\n * Register an AkashJS component as a Custom Element.\n *\n * ```ts\n * defineCustomElement('my-counter', Counter, {\n * props: ['initial', 'step'],\n * shadow: true,\n * styles: ':host { display: block; }',\n * });\n * ```\n */\nexport function defineCustomElement<P extends Record<string, unknown>>(\n tagName: string,\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n const { props = [], shadow = true, styles } = options;\n\n class AkashElement extends HTMLElement {\n static get observedAttributes(): string[] {\n return props;\n }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback(): void {\n // Read initial attribute values\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) {\n this._props[prop] = parseAttributeValue(attr);\n }\n }\n\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback(): void {\n // Clear rendered content\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n this._props[name] = newValue !== null ? parseAttributeValue(newValue) : undefined;\n if (this._mounted) {\n this._render();\n }\n }\n\n private _render(): void {\n // Clear previous\n while (this._root.firstChild) {\n this._root.removeChild(this._root.firstChild);\n }\n\n // Inject styles if shadow DOM\n if (shadow && styles) {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles;\n this._root.appendChild(styleEl);\n }\n\n // Render component\n const node = component(this._props as any);\n this._root.appendChild(node);\n }\n\n // Allow programmatic prop setting\n setProps(newProps: Partial<P>): void {\n Object.assign(this._props, newProps);\n if (this._mounted) this._render();\n }\n }\n\n // Register the custom element\n if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n if (options.extends) {\n customElements.define(tagName, AkashElement, { extends: options.extends });\n } else {\n customElements.define(tagName, AkashElement);\n }\n }\n\n return AkashElement;\n}\n\n/**\n * Convert an AkashJS component to a Custom Element class without registering.\n * Useful for testing or when you want to register later.\n */\nexport function toCustomElement<P extends Record<string, unknown>>(\n component: Component<P>,\n options: CustomElementOptions = {},\n): typeof HTMLElement {\n // Same implementation but without auto-registration\n const { props = [], shadow = true, styles } = options;\n\n return class extends HTMLElement {\n static get observedAttributes() { return props; }\n\n private _root: ShadowRoot | HTMLElement;\n private _mounted = false;\n private _props: Record<string, unknown> = {};\n\n constructor() {\n super();\n this._root = shadow ? this.attachShadow({ mode: 'open' }) : this;\n }\n\n connectedCallback() {\n for (const prop of props) {\n const attr = this.getAttribute(prop);\n if (attr !== null) this._props[prop] = parseAttributeValue(attr);\n }\n this._render();\n this._mounted = true;\n }\n\n disconnectedCallback() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n this._mounted = false;\n }\n\n attributeChangedCallback(name: string, _old: string | null, val: string | null) {\n this._props[name] = val !== null ? parseAttributeValue(val) : undefined;\n if (this._mounted) this._render();\n }\n\n private _render() {\n while (this._root.firstChild) this._root.removeChild(this._root.firstChild);\n if (shadow && styles) {\n const s = document.createElement('style');\n s.textContent = styles;\n this._root.appendChild(s);\n }\n this._root.appendChild(component(this._props as any));\n }\n } as any;\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction parseAttributeValue(value: string): unknown {\n // Try to parse as JSON (numbers, booleans, objects)\n try {\n return JSON.parse(value);\n } catch {\n return value; // Keep as string\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';function c(){return typeof document<"u"&&"startViewTransition"in document}function f(t,e={}){let{className:n,onBefore:o,onAfter:s,fallback:i="instant"}=e;if(o?.(),c()){n&&document.documentElement.classList.add(n);let a=document.startViewTransition(async()=>{await t();});return {finished:a.finished.then(()=>{n&&document.documentElement.classList.remove(n),s?.();}),updateCallbackDone:a.updateCallbackDone,ready:a.ready,skipTransition:()=>a.skipTransition()}}if(i==="fade")return m(t,e);let r=t(),d=r instanceof Promise?r:Promise.resolve();return s?.(),{finished:d,updateCallbackDone:d,ready:Promise.resolve(),skipTransition:()=>{}}}function u(t={}){let{duration:e="0.25s",easing:n="ease",oldAnimation:o,newAnimation:s}=t,i=`::view-transition-old(root),
|
|
2
|
+
::view-transition-new(root) {
|
|
3
|
+
`;return i+=` animation-duration: ${e};
|
|
4
|
+
`,i+=` animation-timing-function: ${n};
|
|
5
|
+
`,i+=`}
|
|
6
|
+
`,o&&(i+=`::view-transition-old(root) {
|
|
7
|
+
animation-name: ${o};
|
|
8
|
+
}
|
|
9
|
+
`),s&&(i+=`::view-transition-new(root) {
|
|
10
|
+
animation-name: ${s};
|
|
11
|
+
}
|
|
12
|
+
`),i}function w(t,e){t.style.viewTransitionName=e;}function m(t,e){let n=document.documentElement,o=new Promise(async s=>{n.style.transition="opacity 0.15s ease",n.style.opacity="0",await new Promise(i=>setTimeout(i,150)),await t(),n.style.opacity="1",await new Promise(i=>setTimeout(i,150)),n.style.transition="",n.style.opacity="",e.onAfter?.(),s();});return {finished:o,updateCallbackDone:o,ready:Promise.resolve(),skipTransition:()=>{n.style.transition="",n.style.opacity="";}}}exports.a=c;exports.b=f;exports.c=u;exports.d=w;//# sourceMappingURL=chunk-DP7G45QM.cjs.map
|
|
13
|
+
//# sourceMappingURL=chunk-DP7G45QM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/view-transition.ts"],"names":["supportsViewTransitions","startViewTransition","updateCallback","options","className","onBefore","onAfter","fallback","transition","fadeTransition","result","done","viewTransitionCSS","config","duration","easing","oldAnimation","newAnimation","css","assignTransitionName","el","name","finished","resolve","r"],"mappings":"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","file":"chunk-DP7G45QM.cjs","sourcesContent":["/**\n * View Transitions API integration.\n *\n * Wraps the browser's native View Transitions API for smooth\n * page transitions. Falls back gracefully when not supported.\n *\n * ```ts\n * // With router\n * const router = createRouter(routes);\n * enableViewTransitions(router);\n *\n * // Manual\n * await startViewTransition(() => {\n * updateDOM();\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ViewTransitionOptions {\n /** CSS class to add to the document during transition */\n className?: string;\n /** Callback before the transition starts */\n onBefore?: () => void;\n /** Callback after the transition completes */\n onAfter?: () => void;\n /** Fallback behavior when API is not supported (default: 'instant') */\n fallback?: 'instant' | 'fade' | 'none';\n}\n\nexport interface ViewTransition {\n /** Promise that resolves when transition animation is complete */\n finished: Promise<void>;\n /** Promise that resolves when the DOM update callback has run */\n updateCallbackDone: Promise<void>;\n /** Promise that resolves when the transition is ready to animate */\n ready: Promise<void>;\n /** Skip the transition animation */\n skipTransition(): void;\n}\n\n// =========================================================================\n// Feature detection\n// =========================================================================\n\n/**\n * Check if the View Transitions API is supported.\n */\nexport function supportsViewTransitions(): boolean {\n return typeof document !== 'undefined' && 'startViewTransition' in document;\n}\n\n// =========================================================================\n// startViewTransition\n// =========================================================================\n\n/**\n * Start a view transition with the native API, falling back\n * to instant DOM update when not supported.\n *\n * ```ts\n * await startViewTransition(() => {\n * container.innerHTML = newContent;\n * });\n * ```\n */\nexport function startViewTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions = {},\n): ViewTransition {\n const { className, onBefore, onAfter, fallback = 'instant' } = options;\n\n onBefore?.();\n\n // Native View Transitions API\n if (supportsViewTransitions()) {\n if (className) document.documentElement.classList.add(className);\n\n const transition = (document as any).startViewTransition(async () => {\n await updateCallback();\n });\n\n const finished = transition.finished.then(() => {\n if (className) document.documentElement.classList.remove(className);\n onAfter?.();\n });\n\n return {\n finished,\n updateCallbackDone: transition.updateCallbackDone,\n ready: transition.ready,\n skipTransition: () => transition.skipTransition(),\n };\n }\n\n // Fallback\n if (fallback === 'fade') {\n return fadeTransition(updateCallback, options);\n }\n\n // Instant fallback\n const result = updateCallback();\n const done = result instanceof Promise ? result : Promise.resolve();\n\n onAfter?.();\n\n return {\n finished: done,\n updateCallbackDone: done,\n ready: Promise.resolve(),\n skipTransition: () => {},\n };\n}\n\n// =========================================================================\n// CSS helpers for View Transitions\n// =========================================================================\n\n/**\n * Generate CSS for customizing view transitions.\n *\n * ```ts\n * const css = viewTransitionCSS({\n * duration: '0.3s',\n * oldAnimation: 'slide-out-left',\n * newAnimation: 'slide-in-right',\n * });\n * ```\n */\nexport function viewTransitionCSS(config: {\n duration?: string;\n easing?: string;\n oldAnimation?: string;\n newAnimation?: string;\n} = {}): string {\n const {\n duration = '0.25s',\n easing = 'ease',\n oldAnimation,\n newAnimation,\n } = config;\n\n let css = `::view-transition-old(root),\\n::view-transition-new(root) {\\n`;\n css += ` animation-duration: ${duration};\\n`;\n css += ` animation-timing-function: ${easing};\\n`;\n css += `}\\n`;\n\n if (oldAnimation) {\n css += `::view-transition-old(root) {\\n animation-name: ${oldAnimation};\\n}\\n`;\n }\n if (newAnimation) {\n css += `::view-transition-new(root) {\\n animation-name: ${newAnimation};\\n}\\n`;\n }\n\n return css;\n}\n\n/**\n * Assign a view-transition-name to an element for per-element transitions.\n *\n * ```ts\n * assignTransitionName(headerEl, 'page-header');\n * assignTransitionName(contentEl, 'page-content');\n * ```\n */\nexport function assignTransitionName(el: HTMLElement, name: string): void {\n el.style.viewTransitionName = name;\n}\n\n// =========================================================================\n// Fade fallback (for browsers without View Transitions)\n// =========================================================================\n\nfunction fadeTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions,\n): ViewTransition {\n const el = document.documentElement;\n\n const finished = new Promise<void>(async (resolve) => {\n // Fade out\n el.style.transition = 'opacity 0.15s ease';\n el.style.opacity = '0';\n\n await new Promise((r) => setTimeout(r, 150));\n\n // Update DOM\n await updateCallback();\n\n // Fade in\n el.style.opacity = '1';\n\n await new Promise((r) => setTimeout(r, 150));\n\n el.style.transition = '';\n el.style.opacity = '';\n\n options.onAfter?.();\n resolve();\n });\n\n return {\n finished,\n updateCallbackDone: finished,\n ready: Promise.resolve(),\n skipTransition: () => {\n el.style.transition = '';\n el.style.opacity = '';\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var n=null;function h(){return n}function C(t){n&&n.addPending(t);}var x=chunkLSD7DEMV_cjs.s(t=>{let s=chunkHL2VGVJT_cjs.c(false),i=[],u={addPending(e){i.push(e);},isResolved:()=>s()},a=n;n=u;let r;try{r=t.children();}finally{n=a;}return i.length>0?Promise.all(i).then(()=>{s.set(true);}):s.set(true),()=>{let e=document.createElement("div");return e.setAttribute("data-akash-suspense",""),e.style.display="contents",s()?e.appendChild(chunkLSD7DEMV_cjs.l(r)):e.appendChild(chunkLSD7DEMV_cjs.l(t.props.fallback())),chunkHL2VGVJT_cjs.e(()=>{if(s()){for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(chunkLSD7DEMV_cjs.l(r));}}),e}});exports.a=h;exports.b=C;exports.c=x;//# sourceMappingURL=chunk-DWSIR5SL.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-DWSIR5SL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/suspense.ts"],"names":["currentSuspenseCtx","getSuspenseContext","registerPending","promise","Suspense","defineComponent","ctx","resolved","signal","pending","suspenseCtx","prevCtx","childrenNode","container","nodeToDOM","effect"],"mappings":"qHAyBA,IAAIA,CAAAA,CAA6C,IAAA,CAM1C,SAASC,CAAAA,EAA6C,CAC3D,OAAOD,CACT,CAOO,SAASE,CAAAA,CAAgBC,CAAAA,CAAiC,CAC3DH,CAAAA,EACFA,EAAmB,UAAA,CAAWG,CAAO,EAEzC,CAkBO,IAAMC,CAAAA,CAAWC,mBAAAA,CAAgCC,CAAAA,EAAQ,CAC9D,IAAMC,CAAAA,CAAWC,mBAAAA,CAAO,KAAK,EACvBC,CAAAA,CAA8B,EAAC,CAE/BC,CAAAA,CAA+B,CACnC,UAAA,CAAWP,CAAAA,CAA2B,CACpCM,CAAAA,CAAQ,IAAA,CAAKN,CAAO,EACtB,CAAA,CACA,WAAY,IAAMI,CAAAA,EACpB,CAAA,CAGMI,CAAAA,CAAUX,CAAAA,CAChBA,CAAAA,CAAqBU,CAAAA,CAGrB,IAAIE,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAeN,CAAAA,CAAI,QAAA,GACrB,CAAA,OAAE,CACAN,CAAAA,CAAqBW,EACvB,CAGA,OAAIF,EAAQ,MAAA,CAAS,CAAA,CACnB,OAAA,CAAQ,GAAA,CAAIA,CAAO,CAAA,CAAE,IAAA,CAAK,IAAM,CAC9BF,CAAAA,CAAS,GAAA,CAAI,IAAI,EACnB,CAAC,CAAA,CAGDA,CAAAA,CAAS,GAAA,CAAI,IAAI,CAAA,CAGZ,IAAM,CACX,IAAMM,EAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9C,OAAAA,CAAAA,CAAU,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CAChDA,CAAAA,CAAU,KAAA,CAAM,OAAA,CAAU,WAEtBN,CAAAA,EAAS,CACXM,CAAAA,CAAU,WAAA,CAAYC,oBAAUF,CAAY,CAAC,CAAA,CAE7CC,CAAAA,CAAU,WAAA,CAAYC,mBAAAA,CAAUR,CAAAA,CAAI,KAAA,CAAM,UAAU,CAAC,CAAA,CAIvDS,mBAAAA,CAAO,IAAM,CACX,GAAIR,CAAAA,EAAS,CAAG,CACd,KAAOM,CAAAA,CAAU,UAAA,EACfA,CAAAA,CAAU,WAAA,CAAYA,CAAAA,CAAU,UAAU,CAAA,CAE5CA,EAAU,WAAA,CAAYC,mBAAAA,CAAUF,CAAY,CAAC,EAC/C,CACF,CAAC,CAAA,CAEMC,CACT,CACF,CAAC","file":"chunk-DWSIR5SL.cjs","sourcesContent":["/**\n * <Suspense> component.\n *\n * Shows a fallback while async children are loading.\n * When all pending async work resolves, swaps to the real content.\n *\n * Works with both client rendering and SSR streaming:\n * - Client: shows fallback, swaps when promises resolve\n * - SSR: flushes fallback HTML immediately, then sends replacement when ready\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Suspense tracking ---\n\ninterface SuspenseContext {\n /** Register a pending promise */\n addPending(promise: Promise<unknown>): void;\n /** Check if all pending work is resolved */\n isResolved: () => boolean;\n}\n\nlet currentSuspenseCtx: SuspenseContext | null = null;\n\n/**\n * Get the current Suspense context (if inside a <Suspense> boundary).\n * Used by async components and createResource to register pending work.\n */\nexport function getSuspenseContext(): SuspenseContext | null {\n return currentSuspenseCtx;\n}\n\n/**\n * Register a promise with the nearest Suspense boundary.\n * If there is no Suspense boundary, the promise is ignored\n * (component renders without waiting).\n */\nexport function registerPending(promise: Promise<unknown>): void {\n if (currentSuspenseCtx) {\n currentSuspenseCtx.addPending(promise);\n }\n}\n\n// --- Suspense component ---\n\nexport interface SuspenseProps {\n /** Fallback UI shown while children are loading */\n fallback: () => AkashNode;\n}\n\n/**\n * <Suspense> component.\n *\n * ```html\n * <Suspense fallback={() => <Spinner />}>\n * <AsyncComponent />\n * </Suspense>\n * ```\n */\nexport const Suspense = defineComponent<SuspenseProps>((ctx) => {\n const resolved = signal(false);\n const pending: Promise<unknown>[] = [];\n\n const suspenseCtx: SuspenseContext = {\n addPending(promise: Promise<unknown>) {\n pending.push(promise);\n },\n isResolved: () => resolved(),\n };\n\n // Set up the context so child components can register promises\n const prevCtx = currentSuspenseCtx;\n currentSuspenseCtx = suspenseCtx;\n\n // Render children (this may trigger async work registration)\n let childrenNode: AkashNode;\n try {\n childrenNode = ctx.children();\n } finally {\n currentSuspenseCtx = prevCtx;\n }\n\n // If there are pending promises, wait for them\n if (pending.length > 0) {\n Promise.all(pending).then(() => {\n resolved.set(true);\n });\n } else {\n // No async work — resolve immediately\n resolved.set(true);\n }\n\n return () => {\n const container = document.createElement('div');\n container.setAttribute('data-akash-suspense', '');\n container.style.display = 'contents';\n\n if (resolved()) {\n container.appendChild(nodeToDOM(childrenNode));\n } else {\n container.appendChild(nodeToDOM(ctx.props.fallback()));\n }\n\n // Watch for resolution and swap content\n effect(() => {\n if (resolved()) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n container.appendChild(nodeToDOM(childrenNode));\n }\n });\n\n return container;\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function p(...o){let n=[];for(let e of o)if(e){if(typeof e=="string")n.push(e);else if(Array.isArray(e)){let t=p(...e);t&&n.push(t);}else if(typeof e=="object")for(let[t,r]of Object.entries(e))r&&n.push(t);}return n.join(" ")}function u(o){let n=[];for(let[e,t]of Object.entries(o)){if(t==null)continue;let r=s(e),l=typeof t=="number"&&!i.has(e)?`${t}px`:String(t);n.push(`${r}: ${l}`);}return n.join("; ")}function f(o,n){for(let[e,t]of Object.entries(n))if(t==null)o.style.removeProperty(s(e));else {let r=typeof t=="number"&&!i.has(e)?`${t}px`:String(t);o.style.setProperty(s(e),r);}}function s(o){return o.replace(/[A-Z]/g,n=>`-${n.toLowerCase()}`)}var i=new Set(["animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","fillOpacity","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","fontWeight","gridColumn","gridRow","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom"]);export{p as a,u as b,f as c};//# sourceMappingURL=chunk-E6RB7PRO.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-E6RB7PRO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/css.ts"],"names":["cx","inputs","classes","input","nested","key","value","css","styles","parts","prop","camelToKebab","val","UNITLESS_PROPS","applyStyles","el","str","m"],"mappings":"AAuBO,SAASA,CAAAA,CAAAA,GAAMC,EAA2B,CAC/C,IAAMC,EAAoB,EAAC,CAE3B,IAAA,IAAWC,CAAAA,IAASF,CAAAA,CAClB,GAAKE,GAEL,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnBD,CAAAA,CAAQ,IAAA,CAAKC,CAAK,CAAA,CAAA,KAAA,GACT,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAG,CAC/B,IAAMC,CAAAA,CAASJ,CAAAA,CAAG,GAAGG,CAAK,CAAA,CACtBC,GAAQF,CAAAA,CAAQ,IAAA,CAAKE,CAAM,EACjC,CAAA,KAAA,GAAW,OAAOD,GAAU,QAAA,CAC1B,IAAA,GAAW,CAACE,CAAAA,CAAKC,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQH,CAAK,CAAA,CACzCG,CAAAA,EAAOJ,CAAAA,CAAQ,IAAA,CAAKG,CAAG,EAAA,CAKjC,OAAOH,EAAQ,IAAA,CAAK,GAAG,CACzB,CAgBO,SAASK,CAAAA,CAAIC,CAAAA,CAA+B,CACjD,IAAMC,EAAkB,EAAC,CAEzB,IAAA,GAAW,CAACJ,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQE,CAAM,CAAA,CAAG,CACjD,GAAIF,GAAS,IAAA,CAAM,SAEnB,IAAMI,CAAAA,CAAOC,CAAAA,CAAaN,CAAG,CAAA,CACvBO,CAAAA,CAAM,OAAON,CAAAA,EAAU,QAAA,EAAY,CAACO,EAAe,GAAA,CAAIR,CAAG,CAAA,CAC5D,CAAA,EAAGC,CAAK,CAAA,EAAA,CAAA,CACR,OAAOA,CAAK,CAAA,CAEhBG,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAGC,CAAI,KAAKE,CAAG,CAAA,CAAE,EAC9B,CAEA,OAAOH,EAAM,IAAA,CAAK,IAAI,CACxB,CASO,SAASK,CAAAA,CAAYC,EAAiBP,CAAAA,CAA6B,CACxE,IAAA,GAAW,CAACH,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQE,CAAM,CAAA,CAC9C,GAAIF,CAAAA,EAAS,KACXS,CAAAA,CAAG,KAAA,CAAM,eAAeJ,CAAAA,CAAaN,CAAG,CAAC,CAAA,CAAA,KACpC,CACL,IAAMO,CAAAA,CAAM,OAAON,CAAAA,EAAU,UAAY,CAACO,CAAAA,CAAe,GAAA,CAAIR,CAAG,CAAA,CAC5D,CAAA,EAAGC,CAAK,CAAA,EAAA,CAAA,CACR,MAAA,CAAOA,CAAK,CAAA,CAChBS,CAAAA,CAAG,KAAA,CAAM,YAAYJ,CAAAA,CAAaN,CAAG,EAAGO,CAAG,EAC7C,CAEJ,CAIA,SAASD,CAAAA,CAAaK,CAAAA,CAAqB,CACzC,OAAOA,EAAI,OAAA,CAAQ,QAAA,CAAWC,CAAAA,EAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAC3D,CAGA,IAAMJ,CAAAA,CAAiB,IAAI,IAAI,CAC7B,yBAAA,CAA2B,SAAA,CAAW,cAAA,CAAgB,iBAAA,CACtD,aAAA,CAAe,cAAe,MAAA,CAAQ,UAAA,CAAY,cAAA,CAClD,YAAA,CAAc,cAAA,CAAgB,WAAA,CAAa,aAAc,YAAA,CACzD,SAAA,CAAW,WAAA,CAAa,YAAA,CAAc,SAAA,CAAW,OAAA,CAAS,UAC1D,SAAA,CAAW,QAAA,CAAU,QAAA,CAAU,MACjC,CAAC,CAAA","file":"chunk-E6RB7PRO.js","sourcesContent":["/**\n * CSS utility functions.\n *\n * cx() for class name merging and css() for dynamic style objects.\n * Tiny but used in every component.\n */\n\n// --- cx() — class name merging ---\n\ntype CxInput = string | boolean | null | undefined | Record<string, boolean> | CxInput[];\n\n/**\n * Merge class names conditionally. Falsy values are filtered out.\n * Object keys are included when their value is truthy.\n *\n * ```ts\n * cx('btn', isActive && 'btn-active', { 'btn-lg': isLarge })\n * // 'btn btn-active btn-lg'\n *\n * cx('card', undefined, false, null, 'card-primary')\n * // 'card card-primary'\n * ```\n */\nexport function cx(...inputs: CxInput[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input) continue;\n\n if (typeof input === 'string') {\n classes.push(input);\n } else if (Array.isArray(input)) {\n const nested = cx(...input);\n if (nested) classes.push(nested);\n } else if (typeof input === 'object') {\n for (const [key, value] of Object.entries(input)) {\n if (value) classes.push(key);\n }\n }\n }\n\n return classes.join(' ');\n}\n\n// --- css() — dynamic style objects ---\n\ntype CssValue = string | number | null | undefined;\ntype CssProperties = Record<string, CssValue>;\n\n/**\n * Build a CSS style string from an object. Handles camelCase → kebab-case\n * conversion and filters out null/undefined values.\n *\n * ```ts\n * css({ backgroundColor: 'red', fontSize: 14, display: isVisible ? 'block' : 'none' })\n * // 'background-color: red; font-size: 14px; display: block'\n * ```\n */\nexport function css(styles: CssProperties): string {\n const parts: string[] = [];\n\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) continue;\n\n const prop = camelToKebab(key);\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n\n parts.push(`${prop}: ${val}`);\n }\n\n return parts.join('; ');\n}\n\n/**\n * Apply a style object to an element.\n *\n * ```ts\n * applyStyles(el, { color: 'red', marginTop: 10 });\n * ```\n */\nexport function applyStyles(el: HTMLElement, styles: CssProperties): void {\n for (const [key, value] of Object.entries(styles)) {\n if (value == null) {\n el.style.removeProperty(camelToKebab(key));\n } else {\n const val = typeof value === 'number' && !UNITLESS_PROPS.has(key)\n ? `${value}px`\n : String(value);\n el.style.setProperty(camelToKebab(key), val);\n }\n }\n}\n\n// --- Helpers ---\n\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\n/** CSS properties that don't get automatic px units */\nconst UNITLESS_PROPS = new Set([\n 'animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup',\n 'columnCount', 'fillOpacity', 'flex', 'flexGrow', 'flexPositive',\n 'flexShrink', 'flexNegative', 'flexOrder', 'fontWeight', 'gridColumn',\n 'gridRow', 'lineClamp', 'lineHeight', 'opacity', 'order', 'orphans',\n 'tabSize', 'widows', 'zIndex', 'zoom',\n]);\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c as c$1}from'./chunk-2UATNCKC.js';var c=s(e=>{let s=c$1({status:"pending"}),r=e.props.promise;return e.props.promise.then(t=>{e.props.promise===r&&s.set({status:"resolved",value:t});}).catch(t=>{e.props.promise===r&&s.set({status:"rejected",error:t instanceof Error?t:new Error(String(t))});}),()=>{let t=s();switch(t.status){case "pending":return e.props.pending?l(e.props.pending()):document.createComment("await-pending");case "resolved":return l(e.props.then(t.value));case "rejected":return e.props.catch?l(e.props.catch(t.error)):document.createComment("await-error")}}});function m(e){let s=c$1({status:"pending"});return e.then(r=>s.set({status:"resolved",value:r})).catch(r=>s.set({status:"rejected",error:r instanceof Error?r:new Error(String(r))})),()=>s()}export{c as a,m as b};//# sourceMappingURL=chunk-E7BPGVIS.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-E7BPGVIS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/await-block.ts"],"names":["Await","defineComponent","ctx","state","signal","currentPromise","value","err","s","nodeToDOM","awaitSignal","promise","error"],"mappings":"iFAgDO,IAAMA,EAAQC,CAAAA,CAAkCC,CAAAA,EAAQ,CAC7D,IAAMC,EAAQC,GAAAA,CAA4B,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAG3DC,CAAAA,CAAiBH,EAAI,KAAA,CAAM,OAAA,CAE/B,OAAAA,CAAAA,CAAI,KAAA,CAAM,OAAA,CACP,IAAA,CAAMI,GAAU,CACXJ,CAAAA,CAAI,MAAM,OAAA,GAAYG,CAAAA,EACxBF,EAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,MAAAG,CAAM,CAAC,EAE3C,CAAC,CAAA,CACA,MAAOC,CAAAA,EAAQ,CACVL,CAAAA,CAAI,KAAA,CAAM,UAAYG,CAAAA,EACxBF,CAAAA,CAAM,IAAI,CACR,MAAA,CAAQ,WACR,KAAA,CAAOI,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAC3D,CAAC,EAEL,CAAC,CAAA,CAEI,IAAM,CACX,IAAMC,CAAAA,CAAIL,GAAM,CAEhB,OAAQK,EAAE,MAAA,EACR,KAAK,SAAA,CACH,OAAON,CAAAA,CAAI,KAAA,CAAM,QACbO,CAAAA,CAAUP,CAAAA,CAAI,MAAM,OAAA,EAAS,CAAA,CAC7B,QAAA,CAAS,cAAc,eAAe,CAAA,CAE5C,KAAK,UAAA,CACH,OAAOO,EAAUP,CAAAA,CAAI,KAAA,CAAM,IAAA,CAAKM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAE1C,KAAK,UAAA,CACH,OAAON,EAAI,KAAA,CAAM,KAAA,CACbO,CAAAA,CAAUP,CAAAA,CAAI,MAAM,KAAA,CAAMM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAClC,SAAS,aAAA,CAAc,aAAa,CAC5C,CACF,CACF,CAAC,EAcM,SAASE,CAAAA,CAAeC,CAAAA,CAAqB,CAClD,IAAMR,CAAAA,CAAQC,GAAAA,CAAsB,CAAE,OAAQ,SAAU,CAAC,EAEzD,OAAAO,CAAAA,CACG,KAAML,CAAAA,EAAUH,CAAAA,CAAM,GAAA,CAAI,CAAE,OAAQ,UAAA,CAAY,KAAA,CAAAG,CAAM,CAAC,CAAC,EACxD,KAAA,CAAOM,CAAAA,EAAUT,CAAAA,CAAM,GAAA,CAAI,CAC1B,MAAA,CAAQ,UAAA,CACR,MAAOS,CAAAA,YAAiB,KAAA,CAAQA,EAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAC,CAAC,CAAA,CAEG,IAAMT,GACf","file":"chunk-E7BPGVIS.js","sourcesContent":["/**\n * Await block — template-level async handling.\n *\n * Renders different content for pending/resolved/rejected states\n * of a promise, similar to Svelte's {#await} blocks.\n *\n * ```ts\n * Await({\n * promise: fetchUser(userId()),\n * pending: () => <Spinner />,\n * then: (user) => <UserCard user={user} />,\n * catch: (err) => <Error message={err.message} />,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface AwaitProps<T> {\n /** The promise to await */\n promise: Promise<T>;\n /** Render while pending */\n pending?: () => AkashNode;\n /** Render when resolved */\n then: (value: T) => AkashNode;\n /** Render when rejected */\n catch?: (error: Error) => AkashNode;\n}\n\ntype AwaitState<T> =\n | { status: 'pending' }\n | { status: 'resolved'; value: T }\n | { status: 'rejected'; error: Error };\n\n// =========================================================================\n// Await component\n// =========================================================================\n\n/**\n * <Await> component — declarative promise handling.\n */\nexport const Await = defineComponent<AwaitProps<any>>((ctx) => {\n const state = signal<AwaitState<unknown>>({ status: 'pending' });\n\n // Track the promise to handle race conditions\n let currentPromise = ctx.props.promise;\n\n ctx.props.promise\n .then((value) => {\n if (ctx.props.promise === currentPromise) {\n state.set({ status: 'resolved', value });\n }\n })\n .catch((err) => {\n if (ctx.props.promise === currentPromise) {\n state.set({\n status: 'rejected',\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n });\n\n return () => {\n const s = state();\n\n switch (s.status) {\n case 'pending':\n return ctx.props.pending\n ? nodeToDOM(ctx.props.pending())\n : document.createComment('await-pending');\n\n case 'resolved':\n return nodeToDOM(ctx.props.then(s.value));\n\n case 'rejected':\n return ctx.props.catch\n ? nodeToDOM(ctx.props.catch(s.error))\n : document.createComment('await-error');\n }\n };\n});\n\n// =========================================================================\n// Functional await helper\n// =========================================================================\n\n/**\n * Functional await block — returns a signal that updates as the promise resolves.\n *\n * ```ts\n * const result = awaitSignal(fetchData());\n * result().status; // 'pending' | 'resolved' | 'rejected'\n * ```\n */\nexport function awaitSignal<T>(promise: Promise<T>) {\n const state = signal<AwaitState<T>>({ status: 'pending' });\n\n promise\n .then((value) => state.set({ status: 'resolved', value }))\n .catch((error) => state.set({\n status: 'rejected',\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n\n return () => state();\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs');var i=chunkLSD7DEMV_cjs.s(n=>{let t=null,o=null;function u(){let e=n.props.target;return e?typeof e=="string"?document.querySelector(e)??document.body:e:document.body}return chunkLSD7DEMV_cjs.p(()=>{o&&t&&t.removeChild(o);}),()=>{t=u();let e=n.children();return o=chunkLSD7DEMV_cjs.l(e),t.appendChild(o),document.createComment("portal")}});exports.a=i;//# sourceMappingURL=chunk-E7GAIKQT.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-E7GAIKQT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/portal.ts"],"names":["Portal","defineComponent","ctx","container","mountedNode","getTarget","target","onUnmount","content","nodeToDOM"],"mappings":"mEA8BO,IAAMA,CAAAA,CAASC,mBAAAA,CAA8BC,CAAAA,EAAQ,CAC1D,IAAIC,CAAAA,CAAgC,IAAA,CAChCC,CAAAA,CAA2B,IAAA,CAE/B,SAASC,CAAAA,EAAyB,CAChC,IAAMC,EAASJ,CAAAA,CAAI,KAAA,CAAM,MAAA,CACzB,OAAKI,CAAAA,CACD,OAAOA,CAAAA,EAAW,QAAA,CACb,SAAS,aAAA,CAA2BA,CAAM,CAAA,EAAK,QAAA,CAAS,IAAA,CAE1DA,CAAAA,CAJa,QAAA,CAAS,IAK/B,CAEA,OAAAC,mBAAAA,CAAU,IAAM,CACVH,CAAAA,EAAeD,CAAAA,EACjBA,CAAAA,CAAU,WAAA,CAAYC,CAAW,EAErC,CAAC,CAAA,CAEM,IAAM,CACXD,CAAAA,CAAYE,CAAAA,EAAU,CACtB,IAAMG,CAAAA,CAAUN,CAAAA,CAAI,QAAA,EAAS,CAC7B,OAAAE,CAAAA,CAAcK,mBAAAA,CAAUD,CAAO,EAC/BL,CAAAA,CAAU,WAAA,CAAYC,CAAW,CAAA,CAG1B,QAAA,CAAS,aAAA,CAAc,QAAQ,CACxC,CACF,CAAC","file":"chunk-E7GAIKQT.cjs","sourcesContent":["/**\n * <Portal> component.\n *\n * Renders children into a different DOM node, outside the\n * component tree. Essential for modals, tooltips, toasts,\n * dropdowns, and overlays.\n *\n * ```html\n * <Portal target=\"body\">\n * <div class=\"modal\">Modal content</div>\n * </Portal>\n *\n * <Portal target=\"#tooltip-container\">\n * <Tooltip />\n * </Portal>\n * ```\n */\n\nimport { defineComponent, onUnmount } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface PortalProps {\n /** CSS selector or HTMLElement to render into (default: document.body) */\n target?: string | HTMLElement;\n}\n\n/**\n * <Portal> — render children into a different DOM location.\n */\nexport const Portal = defineComponent<PortalProps>((ctx) => {\n let container: HTMLElement | null = null;\n let mountedNode: Node | null = null;\n\n function getTarget(): HTMLElement {\n const target = ctx.props.target;\n if (!target) return document.body;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target) ?? document.body;\n }\n return target;\n }\n\n onUnmount(() => {\n if (mountedNode && container) {\n container.removeChild(mountedNode);\n }\n });\n\n return () => {\n container = getTarget();\n const content = ctx.children();\n mountedNode = nodeToDOM(content);\n container.appendChild(mountedNode);\n\n // Return a placeholder comment in the original tree\n return document.createComment('portal');\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {d as d$1}from'./chunk-66PLXQS3.js';import {c,d,a,e}from'./chunk-2UATNCKC.js';var K=[];function F(c){K.push(...c.plugins);}var k=new Map;function D(c,f){return ()=>{if(k.has(c))return k.get(c);let o=f.state(),n=$(c,o,f);return k.set(c,n),n}}function $(c$1,f,o){let n={},p=Object.keys(f);for(let e of p)n[e]=c(f[e]);let i={$id:c$1};for(let e of p)i[e]=n[e];let h=[],m=[];if(i.$__meta={stateKeys:p,getterKeys:h,actionKeys:m},o.getters)for(let[e,t]of Object.entries(o.getters))h.push(e),i[e]=d(()=>t.call(i,n));let R=[...K,...o.plugins??[]];if(o.actions)for(let[e,t]of Object.entries(o.actions))m.push(e),i[e]=(...S)=>{for(let s of R)s.onAction?.(i,e,S);return t.apply(i,S)};i.$reset=()=>{let e=o.state();for(let t of p)n[t].set(e[t]);},i.$patch=e=>{a(()=>{if(typeof e=="function")e(n);else for(let[t,S]of Object.entries(e))t in n&&n[t].set(S);});},i.$snapshot=()=>{let e={};for(let t of p)e[t]=n[t]();return e};let w=new Set,d$2=null;if(i.$subscribe=e$1=>{if(w.add(e$1),!d$2){let t=true;d$2=e(()=>{for(let s of p)n[s]();if(t){t=false;return}let S=i.$snapshot();for(let s of w)s(S);});}return ()=>{w.delete(e$1),w.size===0&&d$2&&(d$2(),d$2=null);}},o.persist&&typeof window<"u"){let e$1=O(c$1,o.persist);for(let t of e$1){let S=t.storage==="sessionStorage"?sessionStorage:localStorage,s=t.serialize??JSON.stringify,y=t.deserialize??JSON.parse,g=t.pick??p;try{let r=S.getItem(t.key);if(r){let a=y(r);for(let l of g)l in a&&l in n&&n[l].set(a[l]);}}catch{}let u=false,b=true;e(()=>{for(let r of g)r in n&&n[r]();if(b){b=false;return}u||(u=true,queueMicrotask(()=>{u=false;let r={};for(let a of g)a in n&&(r[a]=n[a].peek());try{S.setItem(t.key,s(r));}catch{}}));}),t.storage!=="sessionStorage"&&window.addEventListener("storage",r=>{if(!(r.key!==t.key||!r.newValue))try{let a=y(r.newValue);for(let l of g)l in a&&l in n&&n[l].set(a[l]);}catch{}});}}if(o.sync&&o.sync.enabled!==false){let e$1=o.sync,t=e$1.pick??p,S={};for(let y of t)S[y]=n[y]?.peek?.()??f[y];let s=d$1(S,{transport:e$1.transport,peerId:e$1.peerId});for(let y of t){if(!(y in n)||!(y in s.state))continue;let g=n[y],u=s.state[y],b=g.set,r=false;g.set=a=>{b.call(g,a),r||u.set(a);},e(()=>{let a=u();r=true,g.set(a),r=false;});}i.$sync={peers:s.peers,presence:s.presence,peerPresence:s.peerPresence,peerId:s.peerId,connected:s.connected,connect:s.connect.bind(s),disconnect:s.disconnect.bind(s)};}for(let e of R)e.init?.(i);return i}function O(c,f){return f===true?[{key:`akash-store:${c}`}]:f===false?[]:Array.isArray(f)?f.map((o,n)=>({...o,key:o.key??`akash-store:${c}:${n}`})):[{...f,key:f.key??`akash-store:${c}`}]}function _(){k.clear();}function E(){return Object.fromEntries(k)}export{F as a,D as b,_ as c,E as d};//# sourceMappingURL=chunk-EEQZFKEG.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-EEQZFKEG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store.ts"],"names":["globalPlugins","configureStores","options","storeInstances","defineStore","id","definition","initialState","store","createStoreInstance","stateSignals","stateKeys","key","signal","getterKeys","actionKeys","getterFn","computed","plugins","actionFn","args","plugin","fresh","partialOrFn","batch","value","snapshot","subscribers","subscribeEffect","callback","isInitial","effect","cb","configs","normalizePersistConfigs","cfg","storage","serialize","deserialize","persistKeys","raw","saved","persistScheduled","isInitialPersist","e","updated","syncOpts","syncKeys","syncState","doc","createSync","localSignal","syncSignal","originalSet","fromSync","remoteVal","persist","p","i","clearStores","__getStoreInstances"],"mappings":"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","file":"chunk-TKFJGLUO.js","sourcesContent":["/**\n * Global state management via defineStore().\n *\n * Stores are singleton signal containers that persist across\n * components. They provide shared state, computed getters,\n * and actions — no external library needed.\n *\n * ```ts\n * const useCounterStore = defineStore('counter', {\n * state: () => ({ count: 0, name: 'Counter' }),\n * getters: {\n * doubled: (state) => state.count() * 2,\n * },\n * actions: {\n * increment() { this.count.update(c => c + 1); },\n * reset() { this.count.set(0); },\n * },\n * });\n *\n * // In any component:\n * const store = useCounterStore();\n * store.count(); // 0\n * store.doubled(); // 0\n * store.increment();\n * store.count(); // 1\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport { createSync } from './sync.js';\nimport type { SyncDoc } from './sync.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\ntype StateFactory<S> = () => S;\n\ntype Getters<S, G> = {\n [K in keyof G]: (state: SignalifiedState<S>) => G[K];\n};\n\ntype Actions<A> = {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n};\n\n/** Maps plain state values to signals */\ntype SignalifiedState<S> = {\n [K in keyof S]: Signal<S[K]>;\n};\n\n/** The store instance returned to consumers */\nexport type Store<S, G, A> = SignalifiedState<S> & {\n [K in keyof G]: ReadonlySignal<G[K]>;\n} & {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n} & {\n /** Reset all state to initial values */\n $reset(): void;\n /** Merge partial state into the store, or apply changes via callback */\n $patch(partialOrFn: Partial<S> | ((state: SignalifiedState<S>) => void)): void;\n /** Subscribe to all state changes */\n $subscribe(callback: (state: S) => void): () => void;\n /** Get a plain snapshot of current state */\n $snapshot(): S;\n /** Store ID */\n $id: string;\n};\n\nexport interface PersistOptions<S> {\n /** Only persist these state keys (default: all) */\n pick?: (keyof S)[];\n /** Storage backend (default: 'localStorage') */\n storage?: 'localStorage' | 'sessionStorage';\n /** Custom storage key (default: 'akash-store:{storeId}') */\n key?: string;\n /** Custom serializer (default: JSON.stringify) */\n serialize?: (value: unknown) => string;\n /** Custom deserializer (default: JSON.parse) */\n deserialize?: (value: string) => unknown;\n}\n\nexport interface StoreSyncOptions {\n /** Sync transport (WebSocket, local, etc.) */\n transport?: import('./sync.js').SyncTransport;\n /** Enable sync — uses provided or default transport */\n enabled?: boolean;\n /** Sync room/channel name (default: store ID) */\n room?: string;\n /** Unique peer ID */\n peerId?: string;\n /** Enable presence tracking */\n presence?: boolean;\n /** Only sync these state keys (default: all) */\n pick?: string[];\n}\n\nexport interface StoreDefinition<S, G, A> {\n state: StateFactory<S>;\n getters?: Getters<S, G>;\n actions?: A & ThisType<\n SignalifiedState<S> &\n { [K in keyof G]: ReadonlySignal<G[K]> } &\n A\n >;\n plugins?: StorePlugin[];\n /** Auto-persist state to storage. true = persist all to localStorage. */\n persist?: boolean | PersistOptions<S> | PersistOptions<S>[];\n /** Sync state across peers via CRDT. Adds real-time collaboration to any store. */\n sync?: StoreSyncOptions;\n}\n\n// --- Plugin system ---\n\nexport interface StorePlugin {\n init?(store: Store<any, any, any>): void;\n onAction?(store: Store<any, any, any>, actionName: string, args: unknown[]): void;\n}\n\nconst globalPlugins: StorePlugin[] = [];\n\n/** Register global plugins that apply to all stores */\nexport function configureStores(options: { plugins: StorePlugin[] }): void {\n globalPlugins.push(...options.plugins);\n}\n\n// --- Store registry (singleton) ---\n\nconst storeInstances = new Map<string, Store<any, any, any>>();\n\n// --- defineStore ---\n\n/**\n * Define a global store. Returns a composable function that\n * always returns the same store instance (singleton).\n */\nexport function defineStore<\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = {},\n A extends Record<string, (...args: any[]) => any> = {},\n>(\n id: string,\n definition: StoreDefinition<S, G, A>,\n): () => Store<S, G, A> {\n return () => {\n // Return existing instance if already created\n if (storeInstances.has(id)) {\n return storeInstances.get(id) as Store<S, G, A>;\n }\n\n const initialState = definition.state();\n const store = createStoreInstance(id, initialState, definition);\n storeInstances.set(id, store);\n return store;\n };\n}\n\nfunction createStoreInstance<\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: any[]) => any>,\n>(\n id: string,\n initialState: S,\n definition: StoreDefinition<S, G, A>,\n): Store<S, G, A> {\n // Create signals for each state property\n const stateSignals: Record<string, Signal<unknown>> = {};\n const stateKeys = Object.keys(initialState);\n\n for (const key of stateKeys) {\n stateSignals[key] = signal(initialState[key]);\n }\n\n // Build the store object first so getters can reference other getters via `this`\n const store: any = { $id: id };\n\n // Add state signals\n for (const key of stateKeys) {\n store[key] = stateSignals[key];\n }\n\n // Metadata for devtools — avoids calling functions to classify them\n const getterKeys: string[] = [];\n const actionKeys: string[] = [];\n store.$__meta = { stateKeys, getterKeys, actionKeys };\n\n // Create computed getters — bound to store so `this.otherGetter()` works\n if (definition.getters) {\n for (const [key, getterFn] of Object.entries(definition.getters)) {\n getterKeys.push(key);\n store[key] = computed(() =>\n (getterFn as Function).call(store, stateSignals),\n );\n }\n }\n\n // Collect all plugins (global + per-store)\n const plugins = [...globalPlugins, ...(definition.plugins ?? [])];\n\n // Bind actions with `this` pointing to the full store (state + getters + actions)\n if (definition.actions) {\n for (const [key, actionFn] of Object.entries(definition.actions)) {\n actionKeys.push(key);\n store[key] = (...args: unknown[]) => {\n for (const plugin of plugins) plugin.onAction?.(store, key, args);\n return (actionFn as Function).apply(store, args);\n };\n }\n }\n\n // $reset\n store.$reset = () => {\n const fresh = definition.state();\n for (const key of stateKeys) {\n stateSignals[key].set(fresh[key as keyof S]);\n }\n };\n\n // $patch — merge partial state or apply via callback (batched)\n store.$patch = (partialOrFn: Partial<S> | ((state: any) => void)) => {\n batch(() => {\n if (typeof partialOrFn === 'function') {\n partialOrFn(stateSignals);\n } else {\n for (const [key, value] of Object.entries(partialOrFn)) {\n if (key in stateSignals) {\n stateSignals[key].set(value);\n }\n }\n }\n });\n };\n\n // $snapshot\n store.$snapshot = (): S => {\n const snapshot: Record<string, unknown> = {};\n for (const key of stateKeys) {\n snapshot[key] = stateSignals[key]();\n }\n return snapshot as S;\n };\n\n // $subscribe — watch all state signals and notify on change\n const subscribers = new Set<(state: S) => void>();\n let subscribeEffect: (() => void) | null = null;\n store.$subscribe = (callback: (state: S) => void): (() => void) => {\n subscribers.add(callback);\n // Start watching if this is the first subscriber\n if (!subscribeEffect) {\n let isInitial = true;\n subscribeEffect = effect(() => {\n // Read all state signals to track them\n for (const key of stateKeys) {\n stateSignals[key]();\n }\n // Skip initial run — only notify on actual changes\n if (isInitial) {\n isInitial = false;\n return;\n }\n const snapshot = store.$snapshot();\n for (const cb of subscribers) {\n cb(snapshot);\n }\n });\n }\n return () => {\n subscribers.delete(callback);\n // Dispose effect when no subscribers remain\n if (subscribers.size === 0 && subscribeEffect) {\n subscribeEffect();\n subscribeEffect = null;\n }\n };\n };\n\n // --- Persistence ---\n if (definition.persist && typeof window !== 'undefined') {\n const configs = normalizePersistConfigs(id, definition.persist);\n for (const cfg of configs) {\n const storage = cfg.storage === 'sessionStorage' ? sessionStorage : localStorage;\n const serialize = cfg.serialize ?? JSON.stringify;\n const deserialize = cfg.deserialize ?? JSON.parse;\n const persistKeys = cfg.pick ?? stateKeys;\n\n // Hydrate: read from storage and merge into state\n try {\n const raw = storage.getItem(cfg.key);\n if (raw) {\n const saved = deserialize(raw) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in saved && key in stateSignals) {\n stateSignals[key].set(saved[key]);\n }\n }\n }\n } catch { /* corrupt storage — ignore */ }\n\n // Write: subscribe to state changes and persist (debounced via microtask)\n // The effect tracks signals to detect changes; the microtask reads\n // fresh values so sequential updates in the same tick are all captured.\n let persistScheduled = false;\n let isInitialPersist = true;\n effect(() => {\n // Track the persisted signals (read them so the effect re-runs on change)\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) stateSignals[key]();\n }\n // Skip the initial run (hydration just happened, don't write stale defaults)\n if (isInitialPersist) { isInitialPersist = false; return; }\n // Schedule a microtask to capture the LATEST values after all sync updates\n if (!persistScheduled) {\n persistScheduled = true;\n queueMicrotask(() => {\n persistScheduled = false;\n // Read fresh values NOW, not when the effect ran\n const snapshot: Record<string, unknown> = {};\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) snapshot[key] = stateSignals[key].peek();\n }\n try { storage.setItem(cfg.key, serialize(snapshot)); } catch { /* quota exceeded */ }\n });\n }\n });\n\n // Cross-tab sync: listen for storage events from other tabs\n if (cfg.storage !== 'sessionStorage') {\n window.addEventListener('storage', (e) => {\n if (e.key !== cfg.key || !e.newValue) return;\n try {\n const updated = deserialize(e.newValue) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in updated && key in stateSignals) {\n stateSignals[key].set(updated[key]);\n }\n }\n } catch { /* ignore parse errors */ }\n });\n }\n }\n }\n\n // --- Sync ---\n if (definition.sync && (definition.sync.enabled !== false)) {\n const syncOpts = definition.sync;\n const syncKeys = syncOpts.pick ?? stateKeys;\n\n const syncState: Record<string, unknown> = {};\n for (const key of syncKeys) {\n syncState[key] = stateSignals[key]?.peek?.() ?? initialState[key as keyof S];\n }\n\n const doc = createSync(syncState as Record<string, unknown>, {\n transport: syncOpts.transport,\n peerId: syncOpts.peerId,\n });\n\n // Wire: local signal changes → sync broadcast\n for (const key of syncKeys) {\n if (!(key in stateSignals) || !(key in doc.state)) continue;\n const localSignal = stateSignals[key];\n const syncSignal = (doc.state as Record<string, any>)[key];\n\n const originalSet = localSignal.set;\n let fromSync = false;\n localSignal.set = (value: unknown) => {\n originalSet.call(localSignal, value);\n if (!fromSync) syncSignal.set(value);\n };\n\n // Listen for remote changes\n effect(() => {\n const remoteVal = syncSignal();\n fromSync = true;\n localSignal.set(remoteVal);\n fromSync = false;\n });\n }\n\n // Expose sync metadata on the store\n (store as any).$sync = {\n peers: doc.peers,\n presence: doc.presence,\n peerPresence: doc.peerPresence,\n peerId: doc.peerId,\n connected: doc.connected,\n connect: doc.connect.bind(doc),\n disconnect: doc.disconnect.bind(doc),\n };\n }\n\n // Initialize plugins\n for (const plugin of plugins) plugin.init?.(store);\n\n return store as Store<S, G, A>;\n}\n\nfunction normalizePersistConfigs<S>(id: string, persist: boolean | PersistOptions<S> | PersistOptions<S>[]): Array<PersistOptions<S> & { key: string }> {\n if (persist === true) {\n return [{ key: `akash-store:${id}` }];\n }\n if (persist === false) return [];\n if (Array.isArray(persist)) {\n return persist.map((p, i) => ({ ...p, key: p.key ?? `akash-store:${id}:${i}` }));\n }\n return [{ ...persist, key: persist.key ?? `akash-store:${id}` }];\n}\n\n/**\n * Clear all store instances (useful for testing).\n */\nexport function clearStores(): void {\n storeInstances.clear();\n}\n\n/** @internal — exposes store registry for devtools */\nexport function __getStoreInstances(): Record<string, Store<any, any, any>> {\n return Object.fromEntries(storeInstances);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/store.ts"],"names":["globalPlugins","configureStores","options","storeInstances","defineStore","id","definition","initialState","store","createStoreInstance","stateSignals","stateKeys","key","signal","getterKeys","actionKeys","getterFn","computed","plugins","actionFn","args","plugin","fresh","partialOrFn","batch","value","snapshot","subscribers","subscribeEffect","callback","isInitial","effect","cb","configs","normalizePersistConfigs","cfg","storage","serialize","deserialize","persistKeys","raw","saved","persistScheduled","isInitialPersist","e","updated","syncOpts","syncKeys","syncState","doc","createSync","localSignal","syncSignal","originalSet","fromSync","remoteVal","persist","p","i","clearStores","__getStoreInstances"],"mappings":"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","file":"chunk-EEQZFKEG.js","sourcesContent":["/**\n * Global state management via defineStore().\n *\n * Stores are singleton signal containers that persist across\n * components. They provide shared state, computed getters,\n * and actions — no external library needed.\n *\n * ```ts\n * const useCounterStore = defineStore('counter', {\n * state: () => ({ count: 0, name: 'Counter' }),\n * getters: {\n * doubled: (state) => state.count() * 2,\n * },\n * actions: {\n * increment() { this.count.update(c => c + 1); },\n * reset() { this.count.set(0); },\n * },\n * });\n *\n * // In any component:\n * const store = useCounterStore();\n * store.count(); // 0\n * store.doubled(); // 0\n * store.increment();\n * store.count(); // 1\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport { createSync } from './sync.js';\nimport type { SyncDoc } from './sync.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\ntype StateFactory<S> = () => S;\n\ntype Getters<S, G> = {\n [K in keyof G]: (state: SignalifiedState<S>) => G[K];\n};\n\ntype Actions<A> = {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n};\n\n/** Maps plain state values to signals */\ntype SignalifiedState<S> = {\n [K in keyof S]: Signal<S[K]>;\n};\n\n/** The store instance returned to consumers */\nexport type Store<S, G, A> = SignalifiedState<S> & {\n [K in keyof G]: ReadonlySignal<G[K]>;\n} & {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n} & {\n /** Reset all state to initial values */\n $reset(): void;\n /** Merge partial state into the store, or apply changes via callback */\n $patch(partialOrFn: Partial<S> | ((state: SignalifiedState<S>) => void)): void;\n /** Subscribe to all state changes */\n $subscribe(callback: (state: S) => void): () => void;\n /** Get a plain snapshot of current state */\n $snapshot(): S;\n /** Store ID */\n $id: string;\n};\n\nexport interface PersistOptions<S> {\n /** Only persist these state keys (default: all) */\n pick?: (keyof S)[];\n /** Storage backend (default: 'localStorage') */\n storage?: 'localStorage' | 'sessionStorage';\n /** Custom storage key (default: 'akash-store:{storeId}') */\n key?: string;\n /** Custom serializer (default: JSON.stringify) */\n serialize?: (value: unknown) => string;\n /** Custom deserializer (default: JSON.parse) */\n deserialize?: (value: string) => unknown;\n}\n\nexport interface StoreSyncOptions {\n /** Sync transport (WebSocket, local, etc.) */\n transport?: import('./sync.js').SyncTransport;\n /** Enable sync — uses provided or default transport */\n enabled?: boolean;\n /** Sync room/channel name (default: store ID) */\n room?: string;\n /** Unique peer ID */\n peerId?: string;\n /** Enable presence tracking */\n presence?: boolean;\n /** Only sync these state keys (default: all) */\n pick?: string[];\n}\n\nexport interface StoreDefinition<S, G, A> {\n state: StateFactory<S>;\n getters?: Getters<S, G>;\n actions?: A & ThisType<\n SignalifiedState<S> &\n { [K in keyof G]: ReadonlySignal<G[K]> } &\n A\n >;\n plugins?: StorePlugin[];\n /** Auto-persist state to storage. true = persist all to localStorage. */\n persist?: boolean | PersistOptions<S> | PersistOptions<S>[];\n /** Sync state across peers via CRDT. Adds real-time collaboration to any store. */\n sync?: StoreSyncOptions;\n}\n\n// --- Plugin system ---\n\nexport interface StorePlugin {\n init?(store: Store<any, any, any>): void;\n onAction?(store: Store<any, any, any>, actionName: string, args: unknown[]): void;\n}\n\nconst globalPlugins: StorePlugin[] = [];\n\n/** Register global plugins that apply to all stores */\nexport function configureStores(options: { plugins: StorePlugin[] }): void {\n globalPlugins.push(...options.plugins);\n}\n\n// --- Store registry (singleton) ---\n\nconst storeInstances = new Map<string, Store<any, any, any>>();\n\n// --- defineStore ---\n\n/**\n * Define a global store. Returns a composable function that\n * always returns the same store instance (singleton).\n */\nexport function defineStore<\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = {},\n A extends Record<string, (...args: any[]) => any> = {},\n>(\n id: string,\n definition: StoreDefinition<S, G, A>,\n): () => Store<S, G, A> {\n return () => {\n // Return existing instance if already created\n if (storeInstances.has(id)) {\n return storeInstances.get(id) as Store<S, G, A>;\n }\n\n const initialState = definition.state();\n const store = createStoreInstance(id, initialState, definition);\n storeInstances.set(id, store);\n return store;\n };\n}\n\nfunction createStoreInstance<\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: any[]) => any>,\n>(\n id: string,\n initialState: S,\n definition: StoreDefinition<S, G, A>,\n): Store<S, G, A> {\n // Create signals for each state property\n const stateSignals: Record<string, Signal<unknown>> = {};\n const stateKeys = Object.keys(initialState);\n\n for (const key of stateKeys) {\n stateSignals[key] = signal(initialState[key]);\n }\n\n // Build the store object first so getters can reference other getters via `this`\n const store: any = { $id: id };\n\n // Add state signals\n for (const key of stateKeys) {\n store[key] = stateSignals[key];\n }\n\n // Metadata for devtools — avoids calling functions to classify them\n const getterKeys: string[] = [];\n const actionKeys: string[] = [];\n store.$__meta = { stateKeys, getterKeys, actionKeys };\n\n // Create computed getters — bound to store so `this.otherGetter()` works\n if (definition.getters) {\n for (const [key, getterFn] of Object.entries(definition.getters)) {\n getterKeys.push(key);\n store[key] = computed(() =>\n (getterFn as Function).call(store, stateSignals),\n );\n }\n }\n\n // Collect all plugins (global + per-store)\n const plugins = [...globalPlugins, ...(definition.plugins ?? [])];\n\n // Bind actions with `this` pointing to the full store (state + getters + actions)\n if (definition.actions) {\n for (const [key, actionFn] of Object.entries(definition.actions)) {\n actionKeys.push(key);\n store[key] = (...args: unknown[]) => {\n for (const plugin of plugins) plugin.onAction?.(store, key, args);\n return (actionFn as Function).apply(store, args);\n };\n }\n }\n\n // $reset\n store.$reset = () => {\n const fresh = definition.state();\n for (const key of stateKeys) {\n stateSignals[key].set(fresh[key as keyof S]);\n }\n };\n\n // $patch — merge partial state or apply via callback (batched)\n store.$patch = (partialOrFn: Partial<S> | ((state: any) => void)) => {\n batch(() => {\n if (typeof partialOrFn === 'function') {\n partialOrFn(stateSignals);\n } else {\n for (const [key, value] of Object.entries(partialOrFn)) {\n if (key in stateSignals) {\n stateSignals[key].set(value);\n }\n }\n }\n });\n };\n\n // $snapshot\n store.$snapshot = (): S => {\n const snapshot: Record<string, unknown> = {};\n for (const key of stateKeys) {\n snapshot[key] = stateSignals[key]();\n }\n return snapshot as S;\n };\n\n // $subscribe — watch all state signals and notify on change\n const subscribers = new Set<(state: S) => void>();\n let subscribeEffect: (() => void) | null = null;\n store.$subscribe = (callback: (state: S) => void): (() => void) => {\n subscribers.add(callback);\n // Start watching if this is the first subscriber\n if (!subscribeEffect) {\n let isInitial = true;\n subscribeEffect = effect(() => {\n // Read all state signals to track them\n for (const key of stateKeys) {\n stateSignals[key]();\n }\n // Skip initial run — only notify on actual changes\n if (isInitial) {\n isInitial = false;\n return;\n }\n const snapshot = store.$snapshot();\n for (const cb of subscribers) {\n cb(snapshot);\n }\n });\n }\n return () => {\n subscribers.delete(callback);\n // Dispose effect when no subscribers remain\n if (subscribers.size === 0 && subscribeEffect) {\n subscribeEffect();\n subscribeEffect = null;\n }\n };\n };\n\n // --- Persistence ---\n if (definition.persist && typeof window !== 'undefined') {\n const configs = normalizePersistConfigs(id, definition.persist);\n for (const cfg of configs) {\n const storage = cfg.storage === 'sessionStorage' ? sessionStorage : localStorage;\n const serialize = cfg.serialize ?? JSON.stringify;\n const deserialize = cfg.deserialize ?? JSON.parse;\n const persistKeys = cfg.pick ?? stateKeys;\n\n // Hydrate: read from storage and merge into state\n try {\n const raw = storage.getItem(cfg.key);\n if (raw) {\n const saved = deserialize(raw) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in saved && key in stateSignals) {\n stateSignals[key].set(saved[key]);\n }\n }\n }\n } catch { /* corrupt storage — ignore */ }\n\n // Write: subscribe to state changes and persist (debounced via microtask)\n // The effect tracks signals to detect changes; the microtask reads\n // fresh values so sequential updates in the same tick are all captured.\n let persistScheduled = false;\n let isInitialPersist = true;\n effect(() => {\n // Track the persisted signals (read them so the effect re-runs on change)\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) stateSignals[key]();\n }\n // Skip the initial run (hydration just happened, don't write stale defaults)\n if (isInitialPersist) { isInitialPersist = false; return; }\n // Schedule a microtask to capture the LATEST values after all sync updates\n if (!persistScheduled) {\n persistScheduled = true;\n queueMicrotask(() => {\n persistScheduled = false;\n // Read fresh values NOW, not when the effect ran\n const snapshot: Record<string, unknown> = {};\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) snapshot[key] = stateSignals[key].peek();\n }\n try { storage.setItem(cfg.key, serialize(snapshot)); } catch { /* quota exceeded */ }\n });\n }\n });\n\n // Cross-tab sync: listen for storage events from other tabs\n if (cfg.storage !== 'sessionStorage') {\n window.addEventListener('storage', (e) => {\n if (e.key !== cfg.key || !e.newValue) return;\n try {\n const updated = deserialize(e.newValue) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in updated && key in stateSignals) {\n stateSignals[key].set(updated[key]);\n }\n }\n } catch { /* ignore parse errors */ }\n });\n }\n }\n }\n\n // --- Sync ---\n if (definition.sync && (definition.sync.enabled !== false)) {\n const syncOpts = definition.sync;\n const syncKeys = syncOpts.pick ?? stateKeys;\n\n const syncState: Record<string, unknown> = {};\n for (const key of syncKeys) {\n syncState[key] = stateSignals[key]?.peek?.() ?? initialState[key as keyof S];\n }\n\n const doc = createSync(syncState as Record<string, unknown>, {\n transport: syncOpts.transport,\n peerId: syncOpts.peerId,\n });\n\n // Wire: local signal changes → sync broadcast\n for (const key of syncKeys) {\n if (!(key in stateSignals) || !(key in doc.state)) continue;\n const localSignal = stateSignals[key];\n const syncSignal = (doc.state as Record<string, any>)[key];\n\n const originalSet = localSignal.set;\n let fromSync = false;\n localSignal.set = (value: unknown) => {\n originalSet.call(localSignal, value);\n if (!fromSync) syncSignal.set(value);\n };\n\n // Listen for remote changes\n effect(() => {\n const remoteVal = syncSignal();\n fromSync = true;\n localSignal.set(remoteVal);\n fromSync = false;\n });\n }\n\n // Expose sync metadata on the store\n (store as any).$sync = {\n peers: doc.peers,\n presence: doc.presence,\n peerPresence: doc.peerPresence,\n peerId: doc.peerId,\n connected: doc.connected,\n connect: doc.connect.bind(doc),\n disconnect: doc.disconnect.bind(doc),\n };\n }\n\n // Initialize plugins\n for (const plugin of plugins) plugin.init?.(store);\n\n return store as Store<S, G, A>;\n}\n\nfunction normalizePersistConfigs<S>(id: string, persist: boolean | PersistOptions<S> | PersistOptions<S>[]): Array<PersistOptions<S> & { key: string }> {\n if (persist === true) {\n return [{ key: `akash-store:${id}` }];\n }\n if (persist === false) return [];\n if (Array.isArray(persist)) {\n return persist.map((p, i) => ({ ...p, key: p.key ?? `akash-store:${id}:${i}` }));\n }\n return [{ ...persist, key: persist.key ?? `akash-store:${id}` }];\n}\n\n/**\n * Clear all store instances (useful for testing).\n */\nexport function clearStores(): void {\n storeInstances.clear();\n}\n\n/** @internal — exposes store registry for devtools */\nexport function __getStoreInstances(): Record<string, Store<any, any, any>> {\n return Object.fromEntries(storeInstances);\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function E(r){let{data:n,columns:l,pageSize:s=0,initialSort:x}=r,i=chunkHL2VGVJT_cjs.c(x??{column:null,direction:null}),f=chunkHL2VGVJT_cjs.c(""),o=chunkHL2VGVJT_cjs.c(1),m=chunkHL2VGVJT_cjs.c(Object.fromEntries(l.map(e=>[e.key,e.visible!==false]))),C=chunkHL2VGVJT_cjs.d(()=>{let e=m();return l.filter(t=>e[t.key])}),T=chunkHL2VGVJT_cjs.d(()=>{let e=f().toLowerCase().trim();if(!e)return n();let t=l.filter(a=>a.filterable),d=t.length>0?t:l;return n().filter(a=>d.some(c=>{let p=b(a,c.key);return String(p).toLowerCase().includes(e)}))}),v=chunkHL2VGVJT_cjs.d(()=>{let{column:e,direction:t}=i(),d=[...T()];if(!e||!t)return d;let a=l.find(c=>c.key===e);return a?d.sort((c,p)=>{if(a.compare){let R=a.compare(c,p);return t==="desc"?-R:R}let O=b(c,e),j=b(p,e),y=z(O,j);return t==="desc"?-y:y}):d}),w=chunkHL2VGVJT_cjs.d(()=>T().length),S=chunkHL2VGVJT_cjs.d(()=>s<=0?1:Math.max(1,Math.ceil(w()/s))),h=chunkHL2VGVJT_cjs.d(()=>{let e=v();if(s<=0)return e;let t=(o()-1)*s;return e.slice(t,t+s)});function D(e){let t=i();t.column===e?t.direction==="asc"?i.set({column:e,direction:"desc"}):t.direction==="desc"?i.set({column:null,direction:null}):i.set({column:e,direction:"asc"}):i.set({column:e,direction:"asc"}),o.set(1);}function k(e){f.set(e),o.set(1);}function P(e){m.update(t=>({...t,[e]:!t[e]}));}function M(e){m.update(t=>({...t,[e]:true}));}function V(e){m.update(t=>({...t,[e]:false}));}return {rows:h,allRows:v,totalRows:w,visibleColumns:C,sortState:()=>i(),filterText:()=>f(),page:()=>o(),totalPages:S,sort:D,filter:k,toggleColumn:P,showColumn:M,hideColumn:V,nextPage(){o()<S()&&o.update(e=>e+1);},prevPage(){o()>1&&o.update(e=>e-1);},goToPage(e){o.set(Math.max(1,Math.min(e,S())));},reset(){i.set({column:null,direction:null}),f.set(""),o.set(1);}}}function b(r,n){return n.split(".").reduce((l,s)=>l?.[s],r)}function z(r,n){return r==null&&n==null?0:r==null?-1:n==null?1:typeof r=="number"&&typeof n=="number"?r-n:String(r).localeCompare(String(n))}exports.a=E;//# sourceMappingURL=chunk-EXKQPZ5N.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-EXKQPZ5N.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data-table.ts"],"names":["createDataTable","options","data","columns","pageSize","initialSort","sortState","signal","filterText","page","columnVisibility","c","visibleColumns","computed","vis","filteredRows","text","filterableCols","colsToSearch","row","col","value","getNestedValue","sortedRows","column","direction","rows","colDef","a","b","result","aVal","bVal","defaultCompare","totalRows","totalPages","paginatedRows","all","start","sort","columnKey","current","filter","toggleColumn","key","showColumn","hideColumn","p","obj","path","o","k"],"mappings":"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","file":"chunk-EXKQPZ5N.cjs","sourcesContent":["/**\n * Headless data table.\n *\n * Signal-based table state management with sorting, filtering,\n * column visibility, and pagination integration. No DOM — just logic.\n *\n * ```ts\n * const table = createDataTable({\n * data: () => users(),\n * columns: [\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'email', header: 'Email', sortable: true, filterable: true },\n * { key: 'age', header: 'Age', sortable: true },\n * ],\n * pageSize: 20,\n * });\n *\n * table.rows(); // current page of sorted/filtered data\n * table.sort('name'); // toggle sort by column\n * table.filter('search term');\n * table.toggleColumn('age');\n * table.nextPage();\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface ColumnDef<T> {\n /** Key to access the data (dot notation supported) */\n key: string;\n /** Display header */\n header: string;\n /** Whether this column is sortable (default: false) */\n sortable?: boolean;\n /** Whether this column is searchable by the global filter (default: false) */\n filterable?: boolean;\n /** Custom sort comparator */\n compare?: (a: T, b: T) => number;\n /** Custom cell value accessor */\n accessor?: (row: T) => unknown;\n /** Whether column is visible by default (default: true) */\n visible?: boolean;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\nexport interface DataTableOptions<T> {\n /** Reactive data source */\n data: () => T[];\n /** Column definitions */\n columns: ColumnDef<T>[];\n /** Page size (0 = no pagination) */\n pageSize?: number;\n /** Initial sort */\n initialSort?: SortState;\n}\n\nexport interface DataTable<T> {\n /** Current page of processed (sorted + filtered) rows */\n rows: ReadonlySignal<T[]>;\n /** All processed rows (before pagination) */\n allRows: ReadonlySignal<T[]>;\n /** Total row count after filtering */\n totalRows: ReadonlySignal<number>;\n /** Visible columns */\n visibleColumns: ReadonlySignal<ColumnDef<T>[]>;\n /** Current sort state */\n sortState: ReadonlySignal<SortState>;\n /** Current filter text */\n filterText: ReadonlySignal<string>;\n /** Current page (1-based) */\n page: ReadonlySignal<number>;\n /** Total pages */\n totalPages: ReadonlySignal<number>;\n /** Toggle or set sort on a column */\n sort(columnKey: string): void;\n /** Set the global filter text */\n filter(text: string): void;\n /** Toggle column visibility */\n toggleColumn(columnKey: string): void;\n /** Show a column */\n showColumn(columnKey: string): void;\n /** Hide a column */\n hideColumn(columnKey: string): void;\n /** Go to next page */\n nextPage(): void;\n /** Go to previous page */\n prevPage(): void;\n /** Go to specific page */\n goToPage(page: number): void;\n /** Reset all state (sort, filter, page) */\n reset(): void;\n}\n\n// --- Implementation ---\n\nexport function createDataTable<T extends Record<string, unknown>>(\n options: DataTableOptions<T>,\n): DataTable<T> {\n const { data, columns, pageSize = 0, initialSort } = options;\n\n const sortState = signal<SortState>(initialSort ?? { column: null, direction: null });\n const filterText = signal('');\n const page = signal(1);\n const columnVisibility = signal<Record<string, boolean>>(\n Object.fromEntries(columns.map((c) => [c.key, c.visible !== false])),\n );\n\n // Visible columns\n const visibleColumns = computed(() => {\n const vis = columnVisibility();\n return columns.filter((c) => vis[c.key]);\n });\n\n // Filtered rows\n const filteredRows = computed(() => {\n const text = filterText().toLowerCase().trim();\n if (!text) return data();\n\n // If no columns explicitly marked filterable, filter all columns\n const filterableCols = columns.filter((c) => c.filterable);\n const colsToSearch = filterableCols.length > 0 ? filterableCols : columns;\n\n return data().filter((row) => {\n return colsToSearch.some((col) => {\n const value = getNestedValue(row, col.key);\n return String(value).toLowerCase().includes(text);\n });\n });\n });\n\n // Sorted rows\n const sortedRows = computed(() => {\n const { column, direction } = sortState();\n const rows = [...filteredRows()];\n\n if (!column || !direction) return rows;\n\n const colDef = columns.find((c) => c.key === column);\n if (!colDef) return rows;\n\n return rows.sort((a, b) => {\n if (colDef.compare) {\n const result = colDef.compare(a, b);\n return direction === 'desc' ? -result : result;\n }\n\n const aVal = getNestedValue(a, column);\n const bVal = getNestedValue(b, column);\n const result = defaultCompare(aVal, bVal);\n return direction === 'desc' ? -result : result;\n });\n });\n\n // Total rows after filtering\n const totalRows = computed(() => filteredRows().length);\n\n // Total pages\n const totalPages = computed(() => {\n if (pageSize <= 0) return 1;\n return Math.max(1, Math.ceil(totalRows() / pageSize));\n });\n\n // Paginated rows\n const paginatedRows = computed(() => {\n const all = sortedRows();\n if (pageSize <= 0) return all;\n const start = (page() - 1) * pageSize;\n return all.slice(start, start + pageSize);\n });\n\n // --- Actions ---\n\n function sort(columnKey: string): void {\n const current = sortState();\n if (current.column === columnKey) {\n // Cycle: asc → desc → none\n if (current.direction === 'asc') {\n sortState.set({ column: columnKey, direction: 'desc' });\n } else if (current.direction === 'desc') {\n sortState.set({ column: null, direction: null });\n } else {\n sortState.set({ column: columnKey, direction: 'asc' });\n }\n } else {\n sortState.set({ column: columnKey, direction: 'asc' });\n }\n page.set(1);\n }\n\n function filter(text: string): void {\n filterText.set(text);\n page.set(1);\n }\n\n function toggleColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: !vis[key] }));\n }\n\n function showColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: true }));\n }\n\n function hideColumn(key: string): void {\n columnVisibility.update((vis) => ({ ...vis, [key]: false }));\n }\n\n return {\n rows: paginatedRows,\n allRows: sortedRows,\n totalRows,\n visibleColumns,\n sortState: () => sortState(),\n filterText: () => filterText(),\n page: () => page(),\n totalPages,\n sort,\n filter,\n toggleColumn,\n showColumn,\n hideColumn,\n nextPage() { if (page() < totalPages()) page.update((p) => p + 1); },\n prevPage() { if (page() > 1) page.update((p) => p - 1); },\n goToPage(p: number) { page.set(Math.max(1, Math.min(p, totalPages()))); },\n reset() {\n sortState.set({ column: null, direction: null });\n filterText.set('');\n page.set(1);\n },\n };\n}\n\n// --- Helpers ---\n\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((o: any, k) => o?.[k], obj);\n}\n\nfunction defaultCompare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n return String(a).localeCompare(String(b));\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function v(e,t={}){let s=chunkHL2VGVJT_cjs.c(false),i=chunkHL2VGVJT_cjs.c(false),n=chunkHL2VGVJT_cjs.c(!navigator.onLine),r=null;window.addEventListener("online",()=>n.set(false)),window.addEventListener("offline",()=>n.set(true));let c=new Promise((u,o)=>{if(!("serviceWorker"in navigator)){o(new Error("Service workers not supported"));return}navigator.serviceWorker.register(e,{scope:t.scope}).then(a=>{r=a,s.set(true),t.onReady?.(a),u(a),a.addEventListener("updatefound",()=>{let l=a.installing;l&&l.addEventListener("statechange",()=>{l.state==="installed"&&navigator.serviceWorker.controller&&(i.set(true),t.onUpdate?.(a),t.autoReload&&(l.postMessage({type:"SKIP_WAITING"}),window.location.reload()));});});}).catch(a=>{t.onError?.(a),o(a);});});return {registered:()=>s(),updateAvailable:()=>i(),offline:()=>n(),ready:c,async update(){r&&await r.update();},skipWaiting(){r?.waiting&&(r.waiting.postMessage({type:"SKIP_WAITING"}),window.location.reload());},async unregister(){return r?r.unregister():false}}}function f(e){let t=Array.isArray(e)?e:e.runtimeCache??[],s=Array.isArray(e)?[]:e.precache??[],i=Array.isArray(e)?"akash-cache-v1":e.cacheName??"akash-cache-v1",n=`// Auto-generated service worker by AkashJS
|
|
2
2
|
const CACHE_NAME = '${i}';
|
|
3
3
|
const PRECACHE_URLS = ${JSON.stringify(s)};
|
|
4
4
|
|
|
@@ -32,5 +32,5 @@ self.addEventListener('fetch', (event) => {
|
|
|
32
32
|
fetch(event.request).catch(() => caches.match(event.request))
|
|
33
33
|
);
|
|
34
34
|
});
|
|
35
|
-
`,n}function p(e,t){switch(e){case "cache-first":return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${t}').then(cache => cache.put(event.request, clone)); return response; }))`;case "network-first":return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${t}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;case "stale-while-revalidate":return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${t}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;case "network-only":return "fetch(event.request)";case "cache-only":return "caches.match(event.request)"}}async function y(e,t){return await Notification.requestPermission()!=="granted"?null:await e.pushManager.subscribe({userVisibleOnly:true,applicationServerKey:d(t)})}function d(e){let t="=".repeat((4-e.length%4)%4),s=(e+t).replace(/-/g,"+").replace(/_/g,"/"),i=atob(s);return Uint8Array.from(i,n=>n.charCodeAt(0))}exports.a=v;exports.b=f;exports.c=y;//# sourceMappingURL=chunk-
|
|
36
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
`,n}function p(e,t){switch(e){case "cache-first":return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${t}').then(cache => cache.put(event.request, clone)); return response; }))`;case "network-first":return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${t}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;case "stale-while-revalidate":return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${t}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;case "network-only":return "fetch(event.request)";case "cache-only":return "caches.match(event.request)"}}async function y(e,t){return await Notification.requestPermission()!=="granted"?null:await e.pushManager.subscribe({userVisibleOnly:true,applicationServerKey:d(t)})}function d(e){let t="=".repeat((4-e.length%4)%4),s=(e+t).replace(/-/g,"+").replace(/_/g,"/"),i=atob(s);return Uint8Array.from(i,n=>n.charCodeAt(0))}exports.a=v;exports.b=f;exports.c=y;//# sourceMappingURL=chunk-F2F5OXCK.cjs.map
|
|
36
|
+
//# sourceMappingURL=chunk-F2F5OXCK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pwa.ts"],"names":["registerServiceWorker","swUrl","options","registered","signal","updateAvailable","offline","registration","ready","resolve","reject","reg","newWorker","err","generateSWScript","routesOrConfig","routes","precache","globalCacheName","script","route","matchValue","pattern","cacheName","generateStrategyCode","strategy","subscribePush","vapidPublicKey","urlBase64ToUint8Array","base64String","padding","base64","rawData","char"],"mappings":"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","file":"chunk-ZYVQQ5VR.cjs","sourcesContent":["/**\n * PWA / Service Worker support.\n *\n * Register service workers, configure caching strategies,\n * handle updates, and manage push notifications.\n *\n * ```ts\n * const sw = registerServiceWorker('/sw.js', {\n * onUpdate: () => toast.info('New version available!'),\n * });\n * sw.ready; // Promise<ServiceWorkerRegistration>\n * sw.update(); // check for updates\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface SWOptions {\n /** Callback when a new version is available */\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n /** Callback when the SW is ready */\n onReady?: (registration: ServiceWorkerRegistration) => void;\n /** Callback on registration error */\n onError?: (error: Error) => void;\n /** Auto-reload on update (default: false) */\n autoReload?: boolean;\n /** Scope of the service worker */\n scope?: string;\n}\n\nexport interface SWRegistration {\n /** Whether the SW is registered */\n registered: ReadonlySignal<boolean>;\n /** Whether an update is available */\n updateAvailable: ReadonlySignal<boolean>;\n /** Whether the app is running offline */\n offline: ReadonlySignal<boolean>;\n /** The raw SW registration (available after ready) */\n ready: Promise<ServiceWorkerRegistration>;\n /** Check for updates */\n update(): Promise<void>;\n /** Skip waiting and activate new SW */\n skipWaiting(): void;\n /** Unregister the service worker */\n unregister(): Promise<boolean>;\n}\n\n// =========================================================================\n// Service Worker registration\n// =========================================================================\n\n/**\n * Register a service worker with update detection.\n */\nexport function registerServiceWorker(\n swUrl: string,\n options: SWOptions = {},\n): SWRegistration {\n const registered = signal(false);\n const updateAvailable = signal(false);\n const offline = signal(!navigator.onLine);\n\n let registration: ServiceWorkerRegistration | null = null;\n\n // Track online/offline\n window.addEventListener('online', () => offline.set(false));\n window.addEventListener('offline', () => offline.set(true));\n\n const ready = new Promise<ServiceWorkerRegistration>((resolve, reject) => {\n if (!('serviceWorker' in navigator)) {\n reject(new Error('Service workers not supported'));\n return;\n }\n\n navigator.serviceWorker\n .register(swUrl, { scope: options.scope })\n .then((reg) => {\n registration = reg;\n registered.set(true);\n options.onReady?.(reg);\n resolve(reg);\n\n // Listen for updates\n reg.addEventListener('updatefound', () => {\n const newWorker = reg.installing;\n if (!newWorker) return;\n\n newWorker.addEventListener('statechange', () => {\n if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {\n updateAvailable.set(true);\n options.onUpdate?.(reg);\n\n if (options.autoReload) {\n newWorker.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n }\n });\n });\n })\n .catch((err) => {\n options.onError?.(err);\n reject(err);\n });\n });\n\n return {\n registered: () => registered(),\n updateAvailable: () => updateAvailable(),\n offline: () => offline(),\n ready,\n async update() {\n if (registration) {\n await registration.update();\n }\n },\n skipWaiting() {\n if (registration?.waiting) {\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n },\n async unregister() {\n if (registration) {\n return registration.unregister();\n }\n return false;\n },\n };\n}\n\n// =========================================================================\n// Caching strategies (for SW scripts)\n// =========================================================================\n\nexport type CacheStrategy = 'cache-first' | 'network-first' | 'stale-while-revalidate' | 'network-only' | 'cache-only';\n\nexport interface CacheRoute {\n /** URL pattern to match (string or regex) */\n match: string | RegExp;\n /** Caching strategy */\n strategy: CacheStrategy;\n /** Cache name */\n cacheName?: string;\n /** Max entries in cache */\n maxEntries?: number;\n /** Max age in seconds */\n maxAgeSeconds?: number;\n}\n\n/**\n * Generate a service worker script from cache route configs.\n *\n * ```ts\n * const swScript = generateSWScript([\n * { match: /\\.(?:js|css)$/, strategy: 'cache-first', cacheName: 'assets' },\n * { match: '/api/', strategy: 'network-first', maxAgeSeconds: 300 },\n * { match: /\\.(?:png|jpg|svg)$/, strategy: 'cache-first', cacheName: 'images' },\n * ]);\n * ```\n */\nexport function generateSWScript(routesOrConfig: CacheRoute[] | { cacheName?: string; precache?: string[]; runtimeCache?: CacheRoute[] }): string {\n // Accept both array of routes and config object\n const routes: CacheRoute[] = Array.isArray(routesOrConfig)\n ? routesOrConfig\n : routesOrConfig.runtimeCache ?? [];\n const precache = Array.isArray(routesOrConfig) ? [] : routesOrConfig.precache ?? [];\n const globalCacheName = Array.isArray(routesOrConfig) ? 'akash-cache-v1' : routesOrConfig.cacheName ?? 'akash-cache-v1';\n let script = `// Auto-generated service worker by AkashJS\nconst CACHE_NAME = '${globalCacheName}';\nconst PRECACHE_URLS = ${JSON.stringify(precache)};\n\nself.addEventListener('install', (event) => {\n ${precache.length > 0 ? `event.waitUntil(\n caches.open(CACHE_NAME).then(cache => cache.addAll(PRECACHE_URLS))\n );` : ''}\n self.skipWaiting();\n});\n\nself.addEventListener('activate', (event) => {\n event.waitUntil(clients.claim());\n});\n\nself.addEventListener('message', (event) => {\n if (event.data?.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\nself.addEventListener('fetch', (event) => {\n const url = new URL(event.request.url);\n`;\n\n for (const route of routes) {\n // Support both 'match' and 'urlPattern' property names\n const matchValue = route.match ?? (route as any).urlPattern;\n if (!matchValue) continue;\n\n const pattern = matchValue instanceof RegExp\n ? matchValue.toString()\n : `new RegExp(${JSON.stringify(matchValue.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))})`;\n\n const cacheName = route.cacheName ?? globalCacheName;\n\n script += `\n if (${pattern}.test(url.pathname)) {\n event.respondWith(${generateStrategyCode(route.strategy, cacheName)});\n return;\n }\n`;\n }\n\n script += `\n // Default: network-first\n event.respondWith(\n fetch(event.request).catch(() => caches.match(event.request))\n );\n});\n`;\n\n return script;\n}\n\nfunction generateStrategyCode(strategy: CacheStrategy, cacheName: string): string {\n switch (strategy) {\n case 'cache-first':\n return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }))`;\n case 'network-first':\n return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;\n case 'stale-while-revalidate':\n return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${cacheName}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;\n case 'network-only':\n return `fetch(event.request)`;\n case 'cache-only':\n return `caches.match(event.request)`;\n }\n}\n\n// =========================================================================\n// Push notifications\n// =========================================================================\n\n/**\n * Request push notification permission and subscribe.\n */\nexport async function subscribePush(\n registration: ServiceWorkerRegistration,\n vapidPublicKey: string,\n): Promise<PushSubscription | null> {\n const permission = await Notification.requestPermission();\n if (permission !== 'granted') return null;\n\n const subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n applicationServerKey: urlBase64ToUint8Array(vapidPublicKey) as any,\n });\n\n return subscription;\n}\n\nfunction urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const rawData = atob(base64);\n return Uint8Array.from(rawData, (char) => char.charCodeAt(0));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/pwa.ts"],"names":["registerServiceWorker","swUrl","options","registered","signal","updateAvailable","offline","registration","ready","resolve","reject","reg","newWorker","err","generateSWScript","routesOrConfig","routes","precache","globalCacheName","script","route","matchValue","pattern","cacheName","generateStrategyCode","strategy","subscribePush","vapidPublicKey","urlBase64ToUint8Array","base64String","padding","base64","rawData","char"],"mappings":"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","file":"chunk-F2F5OXCK.cjs","sourcesContent":["/**\n * PWA / Service Worker support.\n *\n * Register service workers, configure caching strategies,\n * handle updates, and manage push notifications.\n *\n * ```ts\n * const sw = registerServiceWorker('/sw.js', {\n * onUpdate: () => toast.info('New version available!'),\n * });\n * sw.ready; // Promise<ServiceWorkerRegistration>\n * sw.update(); // check for updates\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface SWOptions {\n /** Callback when a new version is available */\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n /** Callback when the SW is ready */\n onReady?: (registration: ServiceWorkerRegistration) => void;\n /** Callback on registration error */\n onError?: (error: Error) => void;\n /** Auto-reload on update (default: false) */\n autoReload?: boolean;\n /** Scope of the service worker */\n scope?: string;\n}\n\nexport interface SWRegistration {\n /** Whether the SW is registered */\n registered: ReadonlySignal<boolean>;\n /** Whether an update is available */\n updateAvailable: ReadonlySignal<boolean>;\n /** Whether the app is running offline */\n offline: ReadonlySignal<boolean>;\n /** The raw SW registration (available after ready) */\n ready: Promise<ServiceWorkerRegistration>;\n /** Check for updates */\n update(): Promise<void>;\n /** Skip waiting and activate new SW */\n skipWaiting(): void;\n /** Unregister the service worker */\n unregister(): Promise<boolean>;\n}\n\n// =========================================================================\n// Service Worker registration\n// =========================================================================\n\n/**\n * Register a service worker with update detection.\n */\nexport function registerServiceWorker(\n swUrl: string,\n options: SWOptions = {},\n): SWRegistration {\n const registered = signal(false);\n const updateAvailable = signal(false);\n const offline = signal(!navigator.onLine);\n\n let registration: ServiceWorkerRegistration | null = null;\n\n // Track online/offline\n window.addEventListener('online', () => offline.set(false));\n window.addEventListener('offline', () => offline.set(true));\n\n const ready = new Promise<ServiceWorkerRegistration>((resolve, reject) => {\n if (!('serviceWorker' in navigator)) {\n reject(new Error('Service workers not supported'));\n return;\n }\n\n navigator.serviceWorker\n .register(swUrl, { scope: options.scope })\n .then((reg) => {\n registration = reg;\n registered.set(true);\n options.onReady?.(reg);\n resolve(reg);\n\n // Listen for updates\n reg.addEventListener('updatefound', () => {\n const newWorker = reg.installing;\n if (!newWorker) return;\n\n newWorker.addEventListener('statechange', () => {\n if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {\n updateAvailable.set(true);\n options.onUpdate?.(reg);\n\n if (options.autoReload) {\n newWorker.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n }\n });\n });\n })\n .catch((err) => {\n options.onError?.(err);\n reject(err);\n });\n });\n\n return {\n registered: () => registered(),\n updateAvailable: () => updateAvailable(),\n offline: () => offline(),\n ready,\n async update() {\n if (registration) {\n await registration.update();\n }\n },\n skipWaiting() {\n if (registration?.waiting) {\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n },\n async unregister() {\n if (registration) {\n return registration.unregister();\n }\n return false;\n },\n };\n}\n\n// =========================================================================\n// Caching strategies (for SW scripts)\n// =========================================================================\n\nexport type CacheStrategy = 'cache-first' | 'network-first' | 'stale-while-revalidate' | 'network-only' | 'cache-only';\n\nexport interface CacheRoute {\n /** URL pattern to match (string or regex) */\n match: string | RegExp;\n /** Caching strategy */\n strategy: CacheStrategy;\n /** Cache name */\n cacheName?: string;\n /** Max entries in cache */\n maxEntries?: number;\n /** Max age in seconds */\n maxAgeSeconds?: number;\n}\n\n/**\n * Generate a service worker script from cache route configs.\n *\n * ```ts\n * const swScript = generateSWScript([\n * { match: /\\.(?:js|css)$/, strategy: 'cache-first', cacheName: 'assets' },\n * { match: '/api/', strategy: 'network-first', maxAgeSeconds: 300 },\n * { match: /\\.(?:png|jpg|svg)$/, strategy: 'cache-first', cacheName: 'images' },\n * ]);\n * ```\n */\nexport function generateSWScript(routesOrConfig: CacheRoute[] | { cacheName?: string; precache?: string[]; runtimeCache?: CacheRoute[] }): string {\n // Accept both array of routes and config object\n const routes: CacheRoute[] = Array.isArray(routesOrConfig)\n ? routesOrConfig\n : routesOrConfig.runtimeCache ?? [];\n const precache = Array.isArray(routesOrConfig) ? [] : routesOrConfig.precache ?? [];\n const globalCacheName = Array.isArray(routesOrConfig) ? 'akash-cache-v1' : routesOrConfig.cacheName ?? 'akash-cache-v1';\n let script = `// Auto-generated service worker by AkashJS\nconst CACHE_NAME = '${globalCacheName}';\nconst PRECACHE_URLS = ${JSON.stringify(precache)};\n\nself.addEventListener('install', (event) => {\n ${precache.length > 0 ? `event.waitUntil(\n caches.open(CACHE_NAME).then(cache => cache.addAll(PRECACHE_URLS))\n );` : ''}\n self.skipWaiting();\n});\n\nself.addEventListener('activate', (event) => {\n event.waitUntil(clients.claim());\n});\n\nself.addEventListener('message', (event) => {\n if (event.data?.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\nself.addEventListener('fetch', (event) => {\n const url = new URL(event.request.url);\n`;\n\n for (const route of routes) {\n // Support both 'match' and 'urlPattern' property names\n const matchValue = route.match ?? (route as any).urlPattern;\n if (!matchValue) continue;\n\n const pattern = matchValue instanceof RegExp\n ? matchValue.toString()\n : `new RegExp(${JSON.stringify(matchValue.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))})`;\n\n const cacheName = route.cacheName ?? globalCacheName;\n\n script += `\n if (${pattern}.test(url.pathname)) {\n event.respondWith(${generateStrategyCode(route.strategy, cacheName)});\n return;\n }\n`;\n }\n\n script += `\n // Default: network-first\n event.respondWith(\n fetch(event.request).catch(() => caches.match(event.request))\n );\n});\n`;\n\n return script;\n}\n\nfunction generateStrategyCode(strategy: CacheStrategy, cacheName: string): string {\n switch (strategy) {\n case 'cache-first':\n return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }))`;\n case 'network-first':\n return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;\n case 'stale-while-revalidate':\n return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${cacheName}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;\n case 'network-only':\n return `fetch(event.request)`;\n case 'cache-only':\n return `caches.match(event.request)`;\n }\n}\n\n// =========================================================================\n// Push notifications\n// =========================================================================\n\n/**\n * Request push notification permission and subscribe.\n */\nexport async function subscribePush(\n registration: ServiceWorkerRegistration,\n vapidPublicKey: string,\n): Promise<PushSubscription | null> {\n const permission = await Notification.requestPermission();\n if (permission !== 'granted') return null;\n\n const subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n applicationServerKey: urlBase64ToUint8Array(vapidPublicKey) as any,\n });\n\n return subscription;\n}\n\nfunction urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const rawData = atob(base64);\n return Uint8Array.from(rawData, (char) => char.charCodeAt(0));\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function u(e,h,n={}){let{props:i=[],shadow:d=true,styles:t}=n;class s extends HTMLElement{static get observedAttributes(){return i}_root;_mounted=false;_props={};constructor(){super(),this._root=d?this.attachShadow({mode:"open"}):this;}connectedCallback(){for(let o of i){let r=this.getAttribute(o);r!==null&&(this._props[o]=l(r));}this._render(),this._mounted=true;}disconnectedCallback(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);this._mounted=false;}attributeChangedCallback(o,r,a){this._props[o]=a!==null?l(a):void 0,this._mounted&&this._render();}_render(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);if(d&&t){let r=document.createElement("style");r.textContent=t,this._root.appendChild(r);}let o=h(this._props);this._root.appendChild(o);}setProps(o){Object.assign(this._props,o),this._mounted&&this._render();}}return typeof customElements<"u"&&!customElements.get(e)&&(n.extends?customElements.define(e,s,{extends:n.extends}):customElements.define(e,s)),s}function c(e,h={}){let{props:n=[],shadow:i=true,styles:d}=h;return class extends HTMLElement{static get observedAttributes(){return n}_root;_mounted=false;_props={};constructor(){super(),this._root=i?this.attachShadow({mode:"open"}):this;}connectedCallback(){for(let t of n){let s=this.getAttribute(t);s!==null&&(this._props[t]=l(s));}this._render(),this._mounted=true;}disconnectedCallback(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);this._mounted=false;}attributeChangedCallback(t,s,p){this._props[t]=p!==null?l(p):void 0,this._mounted&&this._render();}_render(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);if(i&&d){let t=document.createElement("style");t.textContent=d,this._root.appendChild(t);}this._root.appendChild(e(this._props));}}}function l(e){try{return JSON.parse(e)}catch{return e}}export{u as a,c as b};//# sourceMappingURL=chunk-F4FXIPR3.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-F4FXIPR3.js.map
|