@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/tweened.ts"],"names":["raf","fn","caf","id","easings","t","defaultInterpolate","from","to","tweened","initialValue","options","duration","easing","interpolate","delay","current","signal","targetValue","rafId","running","read","value","overrides","dur","ease","interp","del","resolve","start","tick","now","elapsed","easedT"],"mappings":"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","file":"chunk-P4USGNUK.cjs","sourcesContent":["/**\n * Tweened values — smooth interpolation between states.\n *\n * Unlike signals that update instantly, tweened values animate\n * smoothly from old to new over a duration.\n *\n * ```ts\n * const progress = tweened(0, { duration: 400 });\n * progress.set(100); // smoothly animates 0 → 100 over 400ms\n * progress(); // intermediate values during animation\n *\n * const color = tweened('#ff0000', { duration: 300, interpolate: lerpColor });\n * ```\n */\n\n// Fallback for non-browser environments (Node.js, SSR)\nconst raf = typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame\n : (fn: (t: number) => void) => setTimeout(() => fn(Date.now()), 16) as unknown as number;\nconst caf = typeof cancelAnimationFrame === 'function'\n ? cancelAnimationFrame\n : (id: number) => clearTimeout(id);\n\nimport { signal } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type Interpolator<T> = (from: T, to: T, t: number) => T;\n\nexport type EasingFn = (t: number) => number;\n\nexport interface TweenedOptions<T> {\n /** Duration in ms (default: 400) */\n duration?: number;\n /** Easing function (default: cubicOut) */\n easing?: EasingFn;\n /** Custom interpolation function */\n interpolate?: Interpolator<T>;\n /** Delay before animation starts */\n delay?: number;\n}\n\nexport interface TweenedSignal<T> {\n /** Read current (animated) value */\n (): T;\n /** Set new target — animates from current to new */\n set(value: T, opts?: Partial<TweenedOptions<T>>): Promise<void>;\n /** Set immediately without animation */\n setImmediate(value: T): void;\n /** Current target value */\n target: () => T;\n}\n\n// =========================================================================\n// Built-in easing functions\n// =========================================================================\n\nexport const easings = {\n linear: (t: number) => t,\n cubicIn: (t: number) => t * t * t,\n cubicOut: (t: number) => 1 - Math.pow(1 - t, 3),\n cubicInOut: (t: number) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,\n quadIn: (t: number) => t * t,\n quadOut: (t: number) => 1 - (1 - t) * (1 - t),\n quintOut: (t: number) => 1 - Math.pow(1 - t, 5),\n bounceOut: (t: number) => {\n if (t < 1 / 2.75) return 7.5625 * t * t;\n if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n elasticOut: (t: number) => {\n if (t === 0 || t === 1) return t;\n return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;\n },\n} as const;\n\n// =========================================================================\n// Default interpolators\n// =========================================================================\n\nfunction defaultInterpolate<T>(from: T, to: T, t: number): T {\n if (typeof from === 'number' && typeof to === 'number') {\n return (from + (to - from) * t) as T;\n }\n // For non-numbers, snap at halfway\n return t < 0.5 ? from : to;\n}\n\n// =========================================================================\n// tweened()\n// =========================================================================\n\n/**\n * Create a tweened signal that animates between values.\n *\n * ```ts\n * const count = tweened(0, { duration: 300, easing: easings.cubicOut });\n * count.set(100); // smoothly goes 0 → 100\n * count(); // current interpolated value\n * ```\n */\nexport function tweened<T>(\n initialValue: T,\n options: TweenedOptions<T> = {},\n): TweenedSignal<T> {\n const {\n duration = 400,\n easing = easings.cubicOut,\n interpolate = defaultInterpolate,\n delay = 0,\n } = options;\n\n const current = signal<T>(initialValue);\n const targetValue = signal<T>(initialValue);\n let rafId = 0;\n let running = false;\n\n const read = (() => current()) as TweenedSignal<T>;\n\n read.set = (value: T, overrides?: Partial<TweenedOptions<T>>): Promise<void> => {\n const dur = overrides?.duration ?? duration;\n const ease = overrides?.easing ?? easing;\n const interp = overrides?.interpolate ?? interpolate;\n const del = overrides?.delay ?? delay;\n\n const from = current();\n targetValue.set(value);\n\n if (dur === 0) {\n current.set(value);\n return Promise.resolve();\n }\n\n // Cancel any running animation\n if (running) {\n caf(rafId);\n running = false;\n }\n\n return new Promise<void>((resolve) => {\n const start = performance.now() + del;\n running = true;\n\n function tick(now: number): void {\n if (!running) { resolve(); return; }\n\n const elapsed = now - start;\n if (elapsed < 0) {\n rafId = raf(tick);\n return;\n }\n\n const t = Math.min(elapsed / dur, 1);\n const easedT = ease(t);\n current.set(interp(from, value, easedT));\n\n if (t < 1) {\n rafId = raf(tick);\n } else {\n running = false;\n resolve();\n }\n }\n\n rafId = raf(tick);\n });\n };\n\n read.setImmediate = (value: T): void => {\n if (running) { caf(rafId); running = false; }\n current.set(value);\n targetValue.set(value);\n };\n\n read.target = () => targetValue();\n\n return read;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c}from'./chunk-2UATNCKC.js';var L=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])',"[contenteditable]"].join(", ");function A(e,r={}){let{initialFocus:t,returnFocus:l=true,escapeDeactivates:d=true,allowOutsideClick:f=false,onDeactivate:n}=r,o=c(false),c$1=null;function a(){return typeof e=="function"?e():e}function u(){let i=a();return i?Array.from(i.querySelectorAll(L)):[]}function m(i){if(i.key==="Escape"&&d){i.preventDefault(),b(),n?.();return}if(i.key!=="Tab")return;let s=u();if(s.length===0)return;let p=s[0],v=s[s.length-1];i.shiftKey?document.activeElement===p&&(i.preventDefault(),v.focus()):document.activeElement===v&&(i.preventDefault(),p.focus());}function y(i){if(!o()||f)return;let s=a();if(!s)return;let p=i.relatedTarget;if(p&&!s.contains(p)){let v=u();v.length>0&&v[0].focus();}}function h(){if(o())return;o.set(true),c$1=document.activeElement,document.addEventListener("keydown",m,true);let i=a();i&&i.addEventListener("focusout",y),requestAnimationFrame(()=>{if(t)(typeof t=="string"?a()?.querySelector(t):t)?.focus();else {let s=u();s.length>0&&s[0].focus();}});}function b(){if(!o())return;o.set(false),document.removeEventListener("keydown",m,true);let i=a();i&&i.removeEventListener("focusout",y),l&&c$1&&(c$1.focus(),c$1=null);}return {activate:h,deactivate:b,active:()=>o()}}var g=null;function K(){if(g&&document.body.contains(g))return g;let e=document.createElement("div");return e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),e.style.cssText=["position: absolute","width: 1px","height: 1px","padding: 0","margin: -1px","overflow: hidden","clip: rect(0,0,0,0)","white-space: nowrap","border: 0"].join("; "),document.body.appendChild(e),g=e,e}function k(){return (e,r="polite")=>{if(typeof document>"u")return;let t=K();t.setAttribute("aria-live",r),t.textContent="",requestAnimationFrame(()=>{t.textContent=e;});}}function w(){let e=[],r=new Set,t=false;function l(n){for(let o of e)if(!(o.scope&&!r.has(o.scope))&&T(n,o.key)){o.preventDefault!==false&&n.preventDefault(),o.handler(n);return}}function d(){t||typeof document>"u"||(document.addEventListener("keydown",l),t=true);}function f(n,o,c){let a={key:n,handler:o,scope:c?.scope,description:c?.description??"",preventDefault:c?.preventDefault};return e.push(a),d(),()=>{let u=e.indexOf(a);u!==-1&&e.splice(u,1);}}return {bind:f,enableScope(n){r.add(n);},disableScope(n){r.delete(n);},getBindings(){return e.map(n=>({key:M(n.key),description:n.description??"",scope:n.scope}))},dispose(){e.length=0,typeof document<"u"&&document.removeEventListener("keydown",l),t=false;}}}function T(e,r){let t=r.toLowerCase().split("+"),l=t.pop(),d=t.includes("mod"),f=t.includes("ctrl"),n=t.includes("shift"),o=t.includes("alt"),a=typeof navigator<"u"&&navigator.platform?.includes("Mac")?e.metaKey:e.ctrlKey;return d&&!a||f&&!e.ctrlKey||n&&!e.shiftKey||o&&!e.altKey?false:e.key.toLowerCase()===l||e.code.toLowerCase()===l}function M(e){let r=typeof navigator<"u"&&navigator.platform?.includes("Mac");return e.replace(/mod/gi,r?"\u2318":"Ctrl").replace(/shift/gi,r?"\u21E7":"Shift").replace(/alt/gi,r?"\u2325":"Alt").replace(/\+/g,r?"":"+")}export{A as a,k as b,w as c};//# sourceMappingURL=chunk-P55EWYAD.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-P55EWYAD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/a11y.ts"],"names":["FOCUSABLE_SELECTOR","useFocusTrap","container","options","initialFocus","returnFocus","escapeDeactivates","allowOutsideClick","onDeactivate","active","signal","previouslyFocused","getContainer","getFocusableElements","el","handleKeyDown","e","deactivate","focusable","first","last","handleFocusOut","relatedTarget","activate","announceRegion","ensureAnnounceRegion","useAnnounce","message","politeness","region","useKeyboard","bindings","activeScopes","listening","binding","matchesKey","startListening","bind","key","handler","idx","scope","b","formatKeyCombo","combo","parts","needsMod","needsCtrl","needsShift","needsAlt","modPressed","isMac"],"mappings":"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","file":"chunk-P55EWYAD.js","sourcesContent":["/**\n * Accessibility composables.\n *\n * Built-in a11y primitives that no other framework ships natively.\n * Focus management, screen reader announcements, and keyboard shortcuts.\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// useFocusTrap\n// =========================================================================\n\nexport interface FocusTrapOptions {\n /** CSS selector or element to focus initially (default: first focusable) */\n initialFocus?: string | HTMLElement;\n /** Return focus to the previously focused element on deactivate */\n returnFocus?: boolean;\n /** Escape key deactivates the trap (default: true) */\n escapeDeactivates?: boolean;\n /** Allow clicks outside the trap container (default: false) */\n allowOutsideClick?: boolean;\n /** Callback when Escape deactivates */\n onDeactivate?: () => void;\n}\n\nexport interface FocusTrap {\n /** Activate the focus trap */\n activate(): void;\n /** Deactivate the focus trap */\n deactivate(): void;\n /** Whether the trap is currently active */\n active: ReadonlySignal<boolean>;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n 'select:not([disabled])', 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])', '[contenteditable]',\n].join(', ');\n\n/**\n * Trap focus inside a container element.\n *\n * ```ts\n * const trap = useFocusTrap(dialogRef, {\n * initialFocus: '#first-input',\n * returnFocus: true,\n * escapeDeactivates: true,\n * });\n * trap.activate(); // on open\n * trap.deactivate(); // on close\n * ```\n */\nexport function useFocusTrap(\n container: HTMLElement | (() => HTMLElement | null),\n options: FocusTrapOptions = {},\n): FocusTrap {\n const {\n initialFocus,\n returnFocus = true,\n escapeDeactivates = true,\n allowOutsideClick = false,\n onDeactivate,\n } = options;\n\n const active = signal(false);\n let previouslyFocused: HTMLElement | null = null;\n\n function getContainer(): HTMLElement | null {\n return typeof container === 'function' ? container() : container;\n }\n\n function getFocusableElements(): HTMLElement[] {\n const el = getContainer();\n if (!el) return [];\n return Array.from(el.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && escapeDeactivates) {\n e.preventDefault();\n deactivate();\n onDeactivate?.();\n return;\n }\n\n if (e.key !== 'Tab') return;\n\n const focusable = getFocusableElements();\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n // Shift+Tab: wrap from first to last\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: wrap from last to first\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n function handleFocusOut(e: FocusEvent): void {\n if (!active() || allowOutsideClick) return;\n const el = getContainer();\n if (!el) return;\n\n const relatedTarget = e.relatedTarget as HTMLElement | null;\n if (relatedTarget && !el.contains(relatedTarget)) {\n // Focus escaped — pull it back\n const focusable = getFocusableElements();\n if (focusable.length > 0) {\n focusable[0].focus();\n }\n }\n }\n\n function activate(): void {\n if (active()) return;\n active.set(true);\n\n previouslyFocused = document.activeElement as HTMLElement | null;\n\n document.addEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.addEventListener('focusout', handleFocusOut);\n }\n\n // Focus the initial element\n requestAnimationFrame(() => {\n if (initialFocus) {\n const target = typeof initialFocus === 'string'\n ? getContainer()?.querySelector<HTMLElement>(initialFocus)\n : initialFocus;\n target?.focus();\n } else {\n const focusable = getFocusableElements();\n if (focusable.length > 0) focusable[0].focus();\n }\n });\n }\n\n function deactivate(): void {\n if (!active()) return;\n active.set(false);\n\n document.removeEventListener('keydown', handleKeyDown, true);\n\n const el = getContainer();\n if (el) {\n el.removeEventListener('focusout', handleFocusOut);\n }\n\n if (returnFocus && previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n }\n\n return {\n activate,\n deactivate,\n active: () => active(),\n };\n}\n\n// =========================================================================\n// useAnnounce\n// =========================================================================\n\nexport type AriaLive = 'polite' | 'assertive' | 'off';\n\nlet announceRegion: HTMLElement | null = null;\n\nfunction ensureAnnounceRegion(): HTMLElement {\n if (announceRegion && document.body.contains(announceRegion)) {\n return announceRegion;\n }\n\n const el = document.createElement('div');\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n el.setAttribute('aria-atomic', 'true');\n el.style.cssText = [\n 'position: absolute',\n 'width: 1px',\n 'height: 1px',\n 'padding: 0',\n 'margin: -1px',\n 'overflow: hidden',\n 'clip: rect(0,0,0,0)',\n 'white-space: nowrap',\n 'border: 0',\n ].join('; ');\n\n document.body.appendChild(el);\n announceRegion = el;\n return el;\n}\n\n/**\n * Screen reader announcements via ARIA live regions.\n *\n * ```ts\n * const announce = useAnnounce();\n * announce('Page loaded: Dashboard');\n * announce('Error: Invalid email', 'assertive');\n * ```\n */\nexport function useAnnounce(): (message: string, politeness?: AriaLive) => void {\n return (message: string, politeness: AriaLive = 'polite') => {\n if (typeof document === 'undefined') return;\n\n const region = ensureAnnounceRegion();\n region.setAttribute('aria-live', politeness);\n\n // Clear then set to trigger announcement\n region.textContent = '';\n requestAnimationFrame(() => {\n region.textContent = message;\n });\n };\n}\n\n// =========================================================================\n// useKeyboard\n// =========================================================================\n\nexport interface KeyBinding {\n /** Key combo: 'mod+k', 'Escape', 'ArrowDown', 'shift+Enter' */\n key: string;\n /** Handler function */\n handler: (e: KeyboardEvent) => void;\n /** Optional scope (only active when scope is enabled) */\n scope?: string;\n /** Description for help dialog */\n description?: string;\n /** Prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n}\n\nexport interface KeyboardManager {\n /** Register a binding */\n bind(key: string, handler: (e: KeyboardEvent) => void, options?: {\n scope?: string;\n description?: string;\n preventDefault?: boolean;\n }): () => void;\n /** Enable a scope */\n enableScope(scope: string): void;\n /** Disable a scope */\n disableScope(scope: string): void;\n /** Get all bindings (for help dialog) */\n getBindings(): Array<{ key: string; description: string; scope?: string }>;\n /** Dispose all bindings */\n dispose(): void;\n}\n\n/**\n * Keyboard shortcut manager with scope support.\n *\n * ```ts\n * const kb = useKeyboard();\n * kb.bind('mod+k', () => openSearch(), { description: 'Open search' });\n * kb.bind('Escape', () => close(), { scope: 'modal' });\n * kb.enableScope('modal');\n * ```\n */\nexport function useKeyboard(): KeyboardManager {\n const bindings: KeyBinding[] = [];\n const activeScopes = new Set<string>();\n let listening = false;\n\n function handleKeyDown(e: KeyboardEvent): void {\n for (const binding of bindings) {\n if (binding.scope && !activeScopes.has(binding.scope)) continue;\n if (matchesKey(e, binding.key)) {\n if (binding.preventDefault !== false) {\n e.preventDefault();\n }\n binding.handler(e);\n return;\n }\n }\n }\n\n function startListening(): void {\n if (listening) return;\n if (typeof document === 'undefined') return;\n document.addEventListener('keydown', handleKeyDown);\n listening = true;\n }\n\n function bind(\n key: string,\n handler: (e: KeyboardEvent) => void,\n options?: { scope?: string; description?: string; preventDefault?: boolean },\n ): () => void {\n const binding: KeyBinding = {\n key,\n handler,\n scope: options?.scope,\n description: options?.description ?? '',\n preventDefault: options?.preventDefault,\n };\n bindings.push(binding);\n startListening();\n\n return () => {\n const idx = bindings.indexOf(binding);\n if (idx !== -1) bindings.splice(idx, 1);\n };\n }\n\n return {\n bind,\n enableScope(scope: string) { activeScopes.add(scope); },\n disableScope(scope: string) { activeScopes.delete(scope); },\n getBindings() {\n return bindings.map((b) => ({\n key: formatKeyCombo(b.key),\n description: b.description ?? '',\n scope: b.scope,\n }));\n },\n dispose() {\n bindings.length = 0;\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', handleKeyDown);\n }\n listening = false;\n },\n };\n}\n\n// --- Key matching ---\n\nfunction matchesKey(e: KeyboardEvent, combo: string): boolean {\n const parts = combo.toLowerCase().split('+');\n const key = parts.pop()!;\n\n const needsMod = parts.includes('mod');\n const needsCtrl = parts.includes('ctrl');\n const needsShift = parts.includes('shift');\n const needsAlt = parts.includes('alt');\n\n // mod = Cmd on Mac, Ctrl elsewhere\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n const modPressed = isMac ? e.metaKey : e.ctrlKey;\n\n if (needsMod && !modPressed) return false;\n if (needsCtrl && !e.ctrlKey) return false;\n if (needsShift && !e.shiftKey) return false;\n if (needsAlt && !e.altKey) return false;\n\n return e.key.toLowerCase() === key || e.code.toLowerCase() === key;\n}\n\nfunction formatKeyCombo(combo: string): string {\n const isMac = typeof navigator !== 'undefined' && navigator.platform?.includes('Mac');\n return combo\n .replace(/mod/gi, isMac ? '⌘' : 'Ctrl')\n .replace(/shift/gi, isMac ? '⇧' : 'Shift')\n .replace(/alt/gi, isMac ? '⌥' : 'Alt')\n .replace(/\\+/g, isMac ? '' : '+');\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
'use strict';var r={AK0010:{code:"AK0010",message:"provide() called outside of component setup.",hint:"provide() must be called inside defineComponent()."},AK0012:{code:"AK0012",message:"inject() called outside of component setup.",hint:"inject() must be called inside defineComponent()."},AK0013:{code:"AK0013",message:"No provider found for injected context.",hint:"Make sure an ancestor component calls provide() with this key."},AK0020:{code:"AK0020",message:"onMount() called outside of component setup.",hint:"onMount() must be called inside defineComponent()."},AK0021:{code:"AK0021",message:"onUnmount() called outside of component setup.",hint:"onUnmount() must be called inside defineComponent()."},AK0022:{code:"AK0022",message:"onError() called outside of component setup.",hint:"onError() must be called inside defineComponent()."},AK0030:{code:"AK0030",message:"Circular dependency detected in computed signal.",hint:"A computed signal is reading itself, directly or via other computeds."},AK0031:{code:"AK0031",message:"Signal set() called during computation.",hint:"Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers."},AK0040:{code:"AK0040",message:"Component setup must return a render function.",hint:"The function passed to defineComponent() must return () => AkashNode."},AK0041:{code:"AK0041",message:"Required prop is missing.",hint:"Check that the parent component is passing all required props."},AK0050:{code:"AK0050",message:"useRoute() called outside of router context.",hint:"Make sure your component is rendered inside a router provider."},AK0051:{code:"AK0051",message:"No route matched the current URL.",hint:"Add a catch-all route ([...rest]) to handle unmatched paths."},AK0052:{code:"AK0052",message:"Route guard threw an error.",hint:"Check the guard function for unhandled exceptions."},AK0060:{code:"AK0060",message:"Form submitted while invalid.",hint:"The submit handler was not called because validation failed. Check form.errors()."},AK0061:{code:"AK0061",message:"Async validator timed out.",hint:"The async validator did not resolve within the expected time. Check your async validation logic."},AK0070:{code:"AK0070",message:"HTTP request failed.",hint:"Check the server response status and network connectivity."},AK0071:{code:"AK0071",message:"createResource() fetcher threw an error.",hint:"Check the fetcher function passed to createResource()."}},s="https://akashjs.dev/errors";function i(e,t){let o=r[e];if(!o)return `[AkashJS ${e}] Unknown error code.`;let n=`[AkashJS ${e}] ${o.message}`;return t&&(n+=`
|
|
2
|
+
${t}`),n+=`
|
|
3
|
+
${o.hint}`,n+=`
|
|
4
|
+
See: ${s}/${e}`,n}function d(e,t){return new Error(i(e,t))}function a(e){return r[e]}function c(){return Object.keys(r)}exports.a=i;exports.b=d;exports.c=a;exports.d=c;//# sourceMappingURL=chunk-PPNEAFKE.cjs.map
|
|
5
|
+
//# sourceMappingURL=chunk-PPNEAFKE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"names":["errors","DOC_BASE","formatError","code","context","def","msg","akashError","getErrorDef","getAllErrorCodes"],"mappings":"aAqBA,IAAMA,EAAmC,CAEvC,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,8CAAA,CACT,IAAA,CAAM,oDACR,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,6CAAA,CACT,IAAA,CAAM,mDACR,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,yCAAA,CACT,IAAA,CAAM,gEACR,CAAA,CAGA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,8CAAA,CACT,IAAA,CAAM,oDACR,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,QAAS,gDAAA,CACT,IAAA,CAAM,sDACR,CAAA,CACA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,8CAAA,CACT,KAAM,oDACR,CAAA,CAGA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,kDAAA,CACT,KAAM,uEACR,CAAA,CACA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,yCAAA,CACT,KAAM,gHACR,CAAA,CAGA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,gDAAA,CACT,KAAM,uEACR,CAAA,CACA,OAAQ,CACN,IAAA,CAAM,SACN,OAAA,CAAS,2BAAA,CACT,KAAM,gEACR,CAAA,CAGA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,+CACT,IAAA,CAAM,gEACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,oCACT,IAAA,CAAM,8DACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,8BACT,IAAA,CAAM,oDACR,EAGA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,gCACT,IAAA,CAAM,mFACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,6BACT,IAAA,CAAM,kGACR,EAGA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,uBACT,IAAA,CAAM,4DACR,EACA,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,OAAA,CAAS,2CACT,IAAA,CAAM,wDACR,CACF,CAAA,CAIMC,CAAAA,CAAW,6BAKV,SAASC,CAAAA,CAAYC,EAAcC,CAAAA,CAA0B,CAClE,IAAMC,CAAAA,CAAML,CAAAA,CAAOG,CAAI,CAAA,CACvB,GAAI,CAACE,CAAAA,CACH,OAAO,YAAYF,CAAI,CAAA,qBAAA,CAAA,CAGzB,IAAIG,CAAAA,CAAM,CAAA,SAAA,EAAYH,CAAI,CAAA,EAAA,EAAKE,CAAAA,CAAI,OAAO,CAAA,CAAA,CAC1C,OAAID,IACFE,CAAAA,EAAO;AAAA,EAAA,EAAOF,CAAO,IAEvBE,CAAAA,EAAO;AAAA,EAAA,EAAOD,CAAAA,CAAI,IAAI,CAAA,CAAA,CACtBC,CAAAA,EAAO;AAAA,OAAA,EAAYL,CAAQ,CAAA,CAAA,EAAIE,CAAI,CAAA,CAAA,CAC5BG,CACT,CAKO,SAASC,CAAAA,CAAWJ,CAAAA,CAAcC,CAAAA,CAAyB,CAChE,OAAO,IAAI,KAAA,CAAMF,CAAAA,CAAYC,EAAMC,CAAO,CAAC,CAC7C,CAKO,SAASI,CAAAA,CAAYL,CAAAA,CAAoC,CAC9D,OAAOH,EAAOG,CAAI,CACpB,CAKO,SAASM,GAA6B,CAC3C,OAAO,MAAA,CAAO,IAAA,CAAKT,CAAM,CAC3B","file":"chunk-PPNEAFKE.cjs","sourcesContent":["/**\n * Error message catalog.\n *\n * Every AkashJS runtime error has a unique code (AK0001, AK0002, etc.),\n * a one-line description, and a link to detailed documentation.\n *\n * Usage:\n * throw akashError('AK0010', 'provide()');\n */\n\n// --- Error registry ---\n\nexport interface ErrorDef {\n /** Error code */\n code: string;\n /** Short description */\n message: string;\n /** Extended explanation and fix suggestion */\n hint: string;\n}\n\nconst errors: Record<string, ErrorDef> = {\n // --- Context errors (AK001x) ---\n AK0010: {\n code: 'AK0010',\n message: 'provide() called outside of component setup.',\n hint: 'provide() must be called inside defineComponent().',\n },\n AK0012: {\n code: 'AK0012',\n message: 'inject() called outside of component setup.',\n hint: 'inject() must be called inside defineComponent().',\n },\n AK0013: {\n code: 'AK0013',\n message: 'No provider found for injected context.',\n hint: 'Make sure an ancestor component calls provide() with this key.',\n },\n\n // --- Lifecycle errors (AK002x) ---\n AK0020: {\n code: 'AK0020',\n message: 'onMount() called outside of component setup.',\n hint: 'onMount() must be called inside defineComponent().',\n },\n AK0021: {\n code: 'AK0021',\n message: 'onUnmount() called outside of component setup.',\n hint: 'onUnmount() must be called inside defineComponent().',\n },\n AK0022: {\n code: 'AK0022',\n message: 'onError() called outside of component setup.',\n hint: 'onError() must be called inside defineComponent().',\n },\n\n // --- Signal errors (AK003x) ---\n AK0030: {\n code: 'AK0030',\n message: 'Circular dependency detected in computed signal.',\n hint: 'A computed signal is reading itself, directly or via other computeds.',\n },\n AK0031: {\n code: 'AK0031',\n message: 'Signal set() called during computation.',\n hint: 'Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers.',\n },\n\n // --- Component errors (AK004x) ---\n AK0040: {\n code: 'AK0040',\n message: 'Component setup must return a render function.',\n hint: 'The function passed to defineComponent() must return () => AkashNode.',\n },\n AK0041: {\n code: 'AK0041',\n message: 'Required prop is missing.',\n hint: 'Check that the parent component is passing all required props.',\n },\n\n // --- Router errors (AK005x) ---\n AK0050: {\n code: 'AK0050',\n message: 'useRoute() called outside of router context.',\n hint: 'Make sure your component is rendered inside a router provider.',\n },\n AK0051: {\n code: 'AK0051',\n message: 'No route matched the current URL.',\n hint: 'Add a catch-all route ([...rest]) to handle unmatched paths.',\n },\n AK0052: {\n code: 'AK0052',\n message: 'Route guard threw an error.',\n hint: 'Check the guard function for unhandled exceptions.',\n },\n\n // --- Form errors (AK006x) ---\n AK0060: {\n code: 'AK0060',\n message: 'Form submitted while invalid.',\n hint: 'The submit handler was not called because validation failed. Check form.errors().',\n },\n AK0061: {\n code: 'AK0061',\n message: 'Async validator timed out.',\n hint: 'The async validator did not resolve within the expected time. Check your async validation logic.',\n },\n\n // --- HTTP errors (AK007x) ---\n AK0070: {\n code: 'AK0070',\n message: 'HTTP request failed.',\n hint: 'Check the server response status and network connectivity.',\n },\n AK0071: {\n code: 'AK0071',\n message: 'createResource() fetcher threw an error.',\n hint: 'Check the fetcher function passed to createResource().',\n },\n};\n\n// --- Public API ---\n\nconst DOC_BASE = 'https://akashjs.dev/errors';\n\n/**\n * Format an AkashJS error with code, message, hint, and doc link.\n */\nexport function formatError(code: string, context?: string): string {\n const def = errors[code];\n if (!def) {\n return `[AkashJS ${code}] Unknown error code.`;\n }\n\n let msg = `[AkashJS ${code}] ${def.message}`;\n if (context) {\n msg += `\\n ${context}`;\n }\n msg += `\\n ${def.hint}`;\n msg += `\\n See: ${DOC_BASE}/${code}`;\n return msg;\n}\n\n/**\n * Create and throw an AkashJS error.\n */\nexport function akashError(code: string, context?: string): Error {\n return new Error(formatError(code, context));\n}\n\n/**\n * Get the error definition for a code.\n */\nexport function getErrorDef(code: string): ErrorDef | undefined {\n return errors[code];\n}\n\n/**\n * Get all registered error codes.\n */\nexport function getAllErrorCodes(): string[] {\n return Object.keys(errors);\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c,d}from'./chunk-2UATNCKC.js';function E(r){let{data:n,columns:l,pageSize:s=0,initialSort:x}=r,i=c(x??{column:null,direction:null}),f=c(""),o=c(1),m=c(Object.fromEntries(l.map(e=>[e.key,e.visible!==false]))),C=d(()=>{let e=m();return l.filter(t=>e[t.key])}),T=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=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=d(()=>T().length),S=d(()=>s<=0?1:Math.max(1,Math.ceil(w()/s))),h=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))}export{E as a};//# sourceMappingURL=chunk-PVIYD25D.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-PVIYD25D.js.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-PVIYD25D.js","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"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function b(l){let{onLoadMore:a,hasMore:s,rootMargin:d="200px",threshold:f=0}=l,n=chunkHL2VGVJT_cjs.c(false),t=chunkHL2VGVJT_cjs.c(false),r=null,e=null,i=false;async function u(){if(!(n()||t()||i)){if(!s()){t.set(true);return}n.set(true);try{await a(),s()||t.set(!0);}finally{n.set(false);}}}function c(p){typeof IntersectionObserver>"u"||(r=new IntersectionObserver(g=>{g[0]?.isIntersecting&&u();},{rootMargin:d,threshold:f}),r.observe(p));}function m(){return e||(e=document.createElement("div"),e.setAttribute("data-akash-sentinel",""),e.style.height="1px",e.setAttribute("aria-hidden","true"),requestAnimationFrame(()=>{e&&!i&&c(e);}),e)}return {sentinel:m,loading:()=>n(),done:()=>t(),reset(){t.set(false),n.set(false);},dispose(){i=true,r?.disconnect(),r=null;}}}exports.a=b;//# sourceMappingURL=chunk-PWJMCURK.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-PWJMCURK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/infinite-scroll.ts"],"names":["useInfiniteScroll","options","onLoadMore","hasMore","rootMargin","threshold","loading","signal","done","observer","sentinelEl","disposed","handleIntersect","createObserver","el","entries","sentinel"],"mappings":"mEAqDO,SAASA,EAAkBC,CAAAA,CAAgD,CAChF,GAAM,CAAE,UAAA,CAAAC,EAAY,OAAA,CAAAC,CAAAA,CAAS,UAAA,CAAAC,CAAAA,CAAa,QAAS,SAAA,CAAAC,CAAAA,CAAY,CAAE,CAAA,CAAIJ,CAAAA,CAE/DK,EAAUC,mBAAAA,CAAO,KAAK,CAAA,CACtBC,CAAAA,CAAOD,oBAAO,KAAK,CAAA,CACrBE,EAAwC,IAAA,CACxCC,CAAAA,CAAiC,KACjCC,CAAAA,CAAW,KAAA,CAEf,eAAeC,CAAAA,EAAiC,CAC9C,GAAI,EAAAN,CAAAA,IAAaE,CAAAA,EAAK,EAAKG,GAC3B,CAAA,GAAI,CAACR,CAAAA,EAAQ,CAAG,CACdK,CAAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CACb,MACF,CAEAF,CAAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAChB,GAAI,CACF,MAAMJ,GAAW,CACZC,CAAAA,IACHK,CAAAA,CAAK,GAAA,CAAI,CAAA,CAAI,EAEjB,QAAE,CACAF,CAAAA,CAAQ,IAAI,KAAK,EACnB,EACF,CAEA,SAASO,EAAeC,CAAAA,CAAuB,CACzC,OAAO,oBAAA,CAAyB,GAAA,GAEpCL,EAAW,IAAI,oBAAA,CACZM,GAAY,CACPA,CAAAA,CAAQ,CAAC,CAAA,EAAG,gBACdH,CAAAA,GAEJ,EACA,CAAE,UAAA,CAAAR,EAAY,SAAA,CAAAC,CAAU,CAC1B,CAAA,CAEAI,EAAS,OAAA,CAAQK,CAAE,GACrB,CAEA,SAASE,GAAwB,CAC/B,OAAIN,CAAAA,GAEJA,CAAAA,CAAa,SAAS,aAAA,CAAc,KAAK,EACzCA,CAAAA,CAAW,YAAA,CAAa,sBAAuB,EAAE,CAAA,CACjDA,EAAW,KAAA,CAAM,MAAA,CAAS,MAC1BA,CAAAA,CAAW,YAAA,CAAa,cAAe,MAAM,CAAA,CAG7C,sBAAsB,IAAM,CACtBA,CAAAA,EAAc,CAACC,GACjBE,CAAAA,CAAeH,CAAU,EAE7B,CAAC,CAAA,CAEMA,EACT,CAEA,OAAO,CACL,QAAA,CAAAM,EACA,OAAA,CAAS,IAAMV,GAAQ,CACvB,IAAA,CAAM,IAAME,CAAAA,EAAK,CACjB,KAAA,EAAQ,CACNA,EAAK,GAAA,CAAI,KAAK,EACdF,CAAAA,CAAQ,GAAA,CAAI,KAAK,EACnB,CAAA,CACA,SAAU,CACRK,CAAAA,CAAW,KACXF,CAAAA,EAAU,UAAA,GACVA,CAAAA,CAAW,KACb,CACF,CACF","file":"chunk-PWJMCURK.cjs","sourcesContent":["/**\n * Infinite scroll composable.\n *\n * Uses IntersectionObserver to detect when a sentinel element\n * enters the viewport, then triggers loading more data.\n * Pairs with createCursorPagination() from @akashjs/http.\n *\n * ```ts\n * const { sentinel, loading, done } = useInfiniteScroll({\n * onLoadMore: async () => {\n * pager.loadMore();\n * await fetchNextPage();\n * },\n * hasMore: () => pager.hasMore(),\n * });\n * // Append sentinel() element at the end of your list\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface InfiniteScrollOptions {\n /** Callback to load more items */\n onLoadMore: () => Promise<void> | void;\n /** Whether there are more items to load */\n hasMore: () => boolean;\n /** Root margin for the observer (default: '200px') */\n rootMargin?: string;\n /** Threshold for the observer (default: 0) */\n threshold?: number;\n}\n\nexport interface InfiniteScroll {\n /** Sentinel element to place at the end of the list */\n sentinel: () => HTMLElement;\n /** Whether a load is in progress */\n loading: ReadonlySignal<boolean>;\n /** Whether all items have been loaded */\n done: ReadonlySignal<boolean>;\n /** Reset the scroll state */\n reset(): void;\n /** Dispose the observer */\n dispose(): void;\n}\n\n// --- Implementation ---\n\n/**\n * Create an infinite scroll controller.\n */\nexport function useInfiniteScroll(options: InfiniteScrollOptions): InfiniteScroll {\n const { onLoadMore, hasMore, rootMargin = '200px', threshold = 0 } = options;\n\n const loading = signal(false);\n const done = signal(false);\n let observer: IntersectionObserver | null = null;\n let sentinelEl: HTMLElement | null = null;\n let disposed = false;\n\n async function handleIntersect(): Promise<void> {\n if (loading() || done() || disposed) return;\n if (!hasMore()) {\n done.set(true);\n return;\n }\n\n loading.set(true);\n try {\n await onLoadMore();\n if (!hasMore()) {\n done.set(true);\n }\n } finally {\n loading.set(false);\n }\n }\n\n function createObserver(el: HTMLElement): void {\n if (typeof IntersectionObserver === 'undefined') return;\n\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n handleIntersect();\n }\n },\n { rootMargin, threshold },\n );\n\n observer.observe(el);\n }\n\n function sentinel(): HTMLElement {\n if (sentinelEl) return sentinelEl;\n\n sentinelEl = document.createElement('div');\n sentinelEl.setAttribute('data-akash-sentinel', '');\n sentinelEl.style.height = '1px';\n sentinelEl.setAttribute('aria-hidden', 'true');\n\n // Start observing\n requestAnimationFrame(() => {\n if (sentinelEl && !disposed) {\n createObserver(sentinelEl);\n }\n });\n\n return sentinelEl;\n }\n\n return {\n sentinel,\n loading: () => loading(),\n done: () => done(),\n reset() {\n done.set(false);\n loading.set(false);\n },\n dispose() {\n disposed = true;\n observer?.disconnect();\n observer = null;\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';function s(e){return {_type:"directive",hooks:e}}function c(e){return s({mounted(n,t){let i=e(n,t);typeof i=="function"&&(n.__directiveCleanup=i);},unmounted(n){n.__directiveCleanup?.();}})}var a=Symbol("akash.directives");function d(e,n,t,i){let o={value:t,arg:i?.arg,modifiers:i?.modifiers},r=e[a]??[];r.push({directive:n,binding:o}),e[a]=r,n.hooks.mounted?.(e,o);}function v(e,n,t){let o=(e[a]??[]).find(r=>r.directive===n);if(o){let r=o.binding.value;o.binding={...o.binding,value:t,oldValue:r},n.hooks.updated?.(e,o.binding);}}function u(e){let n=e[a]??[];for(let t of n)t.directive.hooks.unmounted?.(e,t.binding);delete e[a];}var m=s({mounted(e){requestAnimationFrame(()=>e.focus());}}),l=s({mounted(e,{value:n}){let t=i=>{e.contains(i.target)||n();};document.addEventListener("click",t,true),e.__vClickOutside=t;},unmounted(e){document.removeEventListener("click",e.__vClickOutside,true),delete e.__vClickOutside;}}),T=s({mounted(e,{value:n}){let t=null,i=n.duration??500,o=()=>{t=setTimeout(n.handler,i);},r=()=>{t&&(clearTimeout(t),t=null);};e.addEventListener("pointerdown",o),e.addEventListener("pointerup",r),e.addEventListener("pointerleave",r),e.__vLongPress={start:o,cancel:r};},unmounted(e){let n=e.__vLongPress;n&&(e.removeEventListener("pointerdown",n.start),e.removeEventListener("pointerup",n.cancel),e.removeEventListener("pointerleave",n.cancel));}}),p=s({mounted(e,{value:n}){let t=new IntersectionObserver(i=>{n(i[0].isIntersecting);});t.observe(e),e.__vIntersect=t;},unmounted(e){e.__vIntersect?.disconnect();}}),g=s({mounted(e,{value:n}){let t=new ResizeObserver(i=>{n(i[0]);});t.observe(e),e.__vResize=t;},unmounted(e){e.__vResize?.disconnect();}});exports.a=s;exports.b=c;exports.c=d;exports.d=v;exports.e=u;exports.f=m;exports.g=l;exports.h=T;exports.i=p;exports.j=g;//# sourceMappingURL=chunk-QQTZQ6UX.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-QQTZQ6UX.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/directive.ts"],"names":["defineDirective","hooks","directiveFromFn","fn","el","binding","cleanup","DIRECTIVE_KEY","applyDirective","directive","value","options","states","updateDirective","newValue","state","s","oldValue","removeDirectives","vAutoFocus","vClickOutside","handler","listener","e","vLongPress","timer","duration","start","cancel","fns","vIntersect","callback","observer","entries","vResize"],"mappings":"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","file":"chunk-QQTZQ6UX.cjs","sourcesContent":["/**\n * Custom directive system.\n *\n * Reusable attribute behaviors with lifecycle hooks.\n * Directives attach behavior to elements without components.\n *\n * ```ts\n * const vAutoFocus = defineDirective({\n * mounted(el) { el.focus(); },\n * });\n *\n * const vTooltip = defineDirective<string>({\n * mounted(el, { value }) { addTooltip(el, value); },\n * updated(el, { value }) { updateTooltip(el, value); },\n * unmounted(el) { removeTooltip(el); },\n * });\n *\n * // Usage:\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello tooltip');\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface DirectiveBinding<T = any> {\n /** Current value passed to the directive */\n value: T;\n /** Previous value (on update) */\n oldValue?: T;\n /** Argument (e.g., v-on:click → arg = 'click') */\n arg?: string;\n /** Modifiers (e.g., v-on.prevent → modifiers.prevent = true) */\n modifiers?: Record<string, boolean>;\n}\n\nexport interface DirectiveHooks<T = any> {\n /** Called when the element is inserted into the DOM */\n mounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called when the bound value updates */\n updated?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n /** Called before the element is removed from the DOM */\n unmounted?: (el: HTMLElement, binding: DirectiveBinding<T>) => void;\n}\n\nexport interface Directive<T = any> {\n _type: 'directive';\n hooks: DirectiveHooks<T>;\n}\n\n// =========================================================================\n// defineDirective\n// =========================================================================\n\n/**\n * Define a custom directive.\n *\n * ```ts\n * const vClickOutside = defineDirective<() => void>({\n * mounted(el, { value: handler }) {\n * const listener = (e: Event) => {\n * if (!el.contains(e.target as Node)) handler();\n * };\n * document.addEventListener('click', listener);\n * (el as any).__clickOutside = listener;\n * },\n * unmounted(el) {\n * document.removeEventListener('click', (el as any).__clickOutside);\n * },\n * });\n * ```\n */\nexport function defineDirective<T = any>(hooks: DirectiveHooks<T>): Directive<T> {\n return { _type: 'directive', hooks };\n}\n\n/**\n * Shorthand: directive from a single function (runs on mount).\n */\nexport function directiveFromFn<T = any>(\n fn: (el: HTMLElement, binding: DirectiveBinding<T>) => void | (() => void),\n): Directive<T> {\n return defineDirective<T>({\n mounted(el, binding) {\n const cleanup = fn(el, binding);\n if (typeof cleanup === 'function') {\n (el as any).__directiveCleanup = cleanup;\n }\n },\n unmounted(el) {\n (el as any).__directiveCleanup?.();\n },\n });\n}\n\n// =========================================================================\n// applyDirective — attach a directive to an element\n// =========================================================================\n\nconst DIRECTIVE_KEY = Symbol('akash.directives');\n\ninterface DirectiveState {\n directive: Directive;\n binding: DirectiveBinding;\n}\n\n/**\n * Apply a directive to an element.\n *\n * ```ts\n * applyDirective(el, vAutoFocus);\n * applyDirective(el, vTooltip, 'Hello');\n * ```\n */\nexport function applyDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n value?: T,\n options?: { arg?: string; modifiers?: Record<string, boolean> },\n): void {\n const binding: DirectiveBinding<T> = {\n value: value as T,\n arg: options?.arg,\n modifiers: options?.modifiers,\n };\n\n // Store directive state on element\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n states.push({ directive, binding });\n (el as any)[DIRECTIVE_KEY] = states;\n\n // Call mounted hook\n directive.hooks.mounted?.(el, binding);\n}\n\n/**\n * Update a directive's value on an element.\n */\nexport function updateDirective<T>(\n el: HTMLElement,\n directive: Directive<T>,\n newValue: T,\n): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n const state = states.find((s) => s.directive === directive);\n\n if (state) {\n const oldValue = state.binding.value;\n state.binding = { ...state.binding, value: newValue, oldValue };\n directive.hooks.updated?.(el, state.binding);\n }\n}\n\n/**\n * Remove all directives from an element (call on unmount).\n */\nexport function removeDirectives(el: HTMLElement): void {\n const states: DirectiveState[] = (el as any)[DIRECTIVE_KEY] ?? [];\n for (const state of states) {\n state.directive.hooks.unmounted?.(el, state.binding);\n }\n delete (el as any)[DIRECTIVE_KEY];\n}\n\n// =========================================================================\n// Built-in directives\n// =========================================================================\n\n/** Auto-focus an element when mounted */\nexport const vAutoFocus = defineDirective({\n mounted(el) {\n requestAnimationFrame(() => el.focus());\n },\n});\n\n/** Click outside handler */\nexport const vClickOutside = defineDirective<() => void>({\n mounted(el, { value: handler }) {\n const listener = (e: Event) => {\n if (!el.contains(e.target as Node)) handler();\n };\n document.addEventListener('click', listener, true);\n (el as any).__vClickOutside = listener;\n },\n unmounted(el) {\n document.removeEventListener('click', (el as any).__vClickOutside, true);\n delete (el as any).__vClickOutside;\n },\n});\n\n/** Long press handler */\nexport const vLongPress = defineDirective<{ handler: () => void; duration?: number }>({\n mounted(el, { value }) {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const duration = value.duration ?? 500;\n\n const start = () => { timer = setTimeout(value.handler, duration); };\n const cancel = () => { if (timer) { clearTimeout(timer); timer = null; } };\n\n el.addEventListener('pointerdown', start);\n el.addEventListener('pointerup', cancel);\n el.addEventListener('pointerleave', cancel);\n\n (el as any).__vLongPress = { start, cancel };\n },\n unmounted(el) {\n const fns = (el as any).__vLongPress;\n if (fns) {\n el.removeEventListener('pointerdown', fns.start);\n el.removeEventListener('pointerup', fns.cancel);\n el.removeEventListener('pointerleave', fns.cancel);\n }\n },\n});\n\n/** Intersection observer — triggers callback when element enters viewport */\nexport const vIntersect = defineDirective<(isIntersecting: boolean) => void>({\n mounted(el, { value: callback }) {\n const observer = new IntersectionObserver((entries) => {\n callback(entries[0].isIntersecting);\n });\n observer.observe(el);\n (el as any).__vIntersect = observer;\n },\n unmounted(el) {\n (el as any).__vIntersect?.disconnect();\n },\n});\n\n/** Resize observer — triggers callback on element resize */\nexport const vResize = defineDirective<(entry: ResizeObserverEntry) => void>({\n mounted(el, { value: callback }) {\n const observer = new ResizeObserver((entries) => {\n callback(entries[0]);\n });\n observer.observe(el);\n (el as any).__vResize = observer;\n },\n unmounted(el) {\n (el as any).__vResize?.disconnect();\n },\n});\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
'use strict';var o=false,c=new Map,a=0;function f(){o=true;}function u(){o=false,c.clear();}function l(){return o}function d(t){if(!o)return -1;let e=++a;return c.set(e,{id:e,createdAt:Date.now(),stackTrace:i(),componentName:t??null,disposed:false}),e}function p(t){if(!o||t===-1)return;let e=c.get(t);e&&(e.disposed=true,c.delete(t));}function k(){return Array.from(c.values())}function s(t=3e4){if(!o)return [];let e=Date.now(),n=[];for(let r of c.values())!r.disposed&&e-r.createdAt>t&&n.push({effectId:r.id,age:e-r.createdAt,componentName:r.componentName,stackTrace:r.stackTrace});return n}function m(t=3e4){let e=s(t);if(e.length!==0){console.warn(`[AkashJS] ${e.length} potential effect leak(s) detected:`);for(let n of e){let r=n.componentName?` in ${n.componentName}`:"";console.warn(` Effect #${n.effectId}${r} \u2014 active for ${(n.age/1e3).toFixed(1)}s`),n.stackTrace&&console.warn(` Created at:
|
|
2
|
+
${n.stackTrace}`);}}}function g(){return {enabled:o,activeCount:c.size,totalTracked:a}}function i(){try{let e=new Error().stack;return e?e.split(`
|
|
3
|
+
`).slice(3,8).join(`
|
|
4
|
+
`):null}catch{return null}}exports.a=f;exports.b=u;exports.c=l;exports.d=d;exports.e=p;exports.f=k;exports.g=s;exports.h=m;exports.i=g;//# sourceMappingURL=chunk-QTQ6RUX4.cjs.map
|
|
5
|
+
//# sourceMappingURL=chunk-QTQ6RUX4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/leak-detector.ts"],"names":["tracking","activeEffects","effectIdCounter","enableLeakDetection","disableLeakDetection","isLeakDetectionEnabled","trackEffect","componentName","id","captureStack","untrackEffect","record","getActiveEffects","checkForLeaks","thresholdMs","now","warnings","reportLeaks","leaks","leak","component","getLeakDetectionStats","stack"],"mappings":"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","file":"chunk-QTQ6RUX4.cjs","sourcesContent":["/**\n * Effect disposal and leak detection (dev mode).\n *\n * In development, tracks all created effects and verifies they\n * get properly cleaned up when components unmount. Logs warnings\n * for leaked effects that were never disposed.\n */\n\nimport type { ScheduledEffect } from './scheduler.js';\n\n// --- Tracking state ---\n\nlet tracking = false;\nconst activeEffects = new Map<number, EffectRecord>();\nlet effectIdCounter = 0;\n\ninterface EffectRecord {\n id: number;\n createdAt: number;\n stackTrace: string | null;\n componentName: string | null;\n disposed: boolean;\n}\n\n// --- Public API ---\n\n/**\n * Enable leak detection. Call once at app startup in dev mode.\n *\n * ```ts\n * if (import.meta.env.DEV) {\n * enableLeakDetection();\n * }\n * ```\n */\nexport function enableLeakDetection(): void {\n tracking = true;\n}\n\n/**\n * Disable leak detection.\n */\nexport function disableLeakDetection(): void {\n tracking = false;\n activeEffects.clear();\n}\n\n/**\n * Check if leak detection is enabled.\n */\nexport function isLeakDetectionEnabled(): boolean {\n return tracking;\n}\n\n/**\n * Register an effect for tracking. Called internally by effect().\n * Returns an ID for later disposal tracking.\n */\nexport function trackEffect(componentName?: string): number {\n if (!tracking) return -1;\n\n const id = ++effectIdCounter;\n activeEffects.set(id, {\n id,\n createdAt: Date.now(),\n stackTrace: captureStack(),\n componentName: componentName ?? null,\n disposed: false,\n });\n\n return id;\n}\n\n/**\n * Mark an effect as disposed. Called internally by effect dispose function.\n */\nexport function untrackEffect(id: number): void {\n if (!tracking || id === -1) return;\n\n const record = activeEffects.get(id);\n if (record) {\n record.disposed = true;\n activeEffects.delete(id);\n }\n}\n\n/**\n * Get all currently active (undisposed) effects.\n */\nexport function getActiveEffects(): EffectRecord[] {\n return Array.from(activeEffects.values());\n}\n\n/**\n * Check for leaked effects and return warnings.\n * An effect is considered leaked if it's been active for longer\n * than the given threshold without being disposed.\n */\nexport function checkForLeaks(thresholdMs = 30000): LeakWarning[] {\n if (!tracking) return [];\n\n const now = Date.now();\n const warnings: LeakWarning[] = [];\n\n for (const record of activeEffects.values()) {\n if (!record.disposed && now - record.createdAt > thresholdMs) {\n warnings.push({\n effectId: record.id,\n age: now - record.createdAt,\n componentName: record.componentName,\n stackTrace: record.stackTrace,\n });\n }\n }\n\n return warnings;\n}\n\n/**\n * Log leak warnings to the console.\n */\nexport function reportLeaks(thresholdMs = 30000): void {\n const leaks = checkForLeaks(thresholdMs);\n if (leaks.length === 0) return;\n\n console.warn(\n `[AkashJS] ${leaks.length} potential effect leak(s) detected:`,\n );\n for (const leak of leaks) {\n const component = leak.componentName ? ` in ${leak.componentName}` : '';\n console.warn(\n ` Effect #${leak.effectId}${component} — active for ${(leak.age / 1000).toFixed(1)}s`,\n );\n if (leak.stackTrace) {\n console.warn(` Created at:\\n${leak.stackTrace}`);\n }\n }\n}\n\n/**\n * Get a summary of effect tracking state.\n */\nexport function getLeakDetectionStats(): {\n enabled: boolean;\n activeCount: number;\n totalTracked: number;\n} {\n return {\n enabled: tracking,\n activeCount: activeEffects.size,\n totalTracked: effectIdCounter,\n };\n}\n\n// --- Types ---\n\nexport interface LeakWarning {\n effectId: number;\n age: number;\n componentName: string | null;\n stackTrace: string | null;\n}\n\n// --- Internal ---\n\nfunction captureStack(): string | null {\n try {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return null;\n // Remove first 3 lines (Error, captureStack, trackEffect)\n const lines = stack.split('\\n');\n return lines.slice(3, 8).join('\\n');\n } catch {\n return null;\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function a(e,t){return n=>{t.self&&n.target!==n.currentTarget||(t.preventDefault&&n.preventDefault(),t.stopPropagation&&n.stopPropagation(),t.stopImmediatePropagation&&n.stopImmediatePropagation?.(),e(n));}}function f(e,t,n,o={}){let r=a(n,o),i={once:o.once,capture:o.capture,passive:o.passive};return e.addEventListener(t,r,i),()=>e.removeEventListener(t,r,i)}function g(e){let t=chunkHL2VGVJT_cjs.c(e.clientWidth),n=chunkHL2VGVJT_cjs.c(e.clientHeight);return typeof ResizeObserver<"u"&&new ResizeObserver(r=>{let i=r[0];i&&(t.set(i.contentRect.width),n.set(i.contentRect.height));}).observe(e),{width:()=>t(),height:()=>n()}}function b(e){let t=e??(typeof window<"u"?window:null),n=chunkHL2VGVJT_cjs.c(e?e.scrollLeft:window?.scrollX??0),o=chunkHL2VGVJT_cjs.c(e?e.scrollTop:window?.scrollY??0);if(t){let s=()=>{e?(n.set(e.scrollLeft),o.set(e.scrollTop)):(n.set(window.scrollX),o.set(window.scrollY));};t.addEventListener("scroll",s,{passive:true});}let r=o.set;o.set=s=>{r(s),e?e.scrollTop=s:window?.scrollTo(window.scrollX,s);};let i=n.set;return n.set=s=>{i(s),e?e.scrollLeft=s:window?.scrollTo(s,window.scrollY);},{scrollX:n,scrollY:o}}function m(){return chunkHL2VGVJT_cjs.c(null)}function E(e){return chunkHL2VGVJT_cjs.c(null)}function v(e,t,n){e.name=typeof n=="string"?n:"",e.addEventListener("change",()=>{e.checked&&t.set(n);}),chunkHL2VGVJT_cjs.e(()=>{e.checked=t()===n;});}function d(e,t,n){return chunkHL2VGVJT_cjs.e(()=>{n()?e.classList.add(t):e.classList.remove(t);})}function w(e,t){let n=Object.entries(t).map(([o,r])=>d(e,o,r));return ()=>n.forEach(o=>o())}function p(e,t,n){let o=t.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`);return chunkHL2VGVJT_cjs.e(()=>{let r=n();r==null?e.style.removeProperty(o):e.style.setProperty(o,typeof r=="number"?`${r}px`:String(r));})}function T(e,t){let n=Object.entries(t).map(([o,r])=>p(e,o,r));return ()=>n.forEach(o=>o())}exports.a=a;exports.b=f;exports.c=g;exports.d=b;exports.e=m;exports.f=E;exports.g=v;exports.h=d;exports.i=w;exports.j=p;exports.k=T;//# sourceMappingURL=chunk-SBDFBADL.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-SBDFBADL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event-modifiers.ts"],"names":["withModifiers","handler","modifiers","e","onEvent","el","event","wrapped","listenerOptions","bindDimensions","width","signal","height","entries","entry","bindScroll","target","scrollX","scrollY","originalSetY","value","originalSetX","bindElement","bindGroup","name","bindGroupItem","group","effect","bindClass","className","condition","bindClasses","classes","disposers","cls","d","bindStyle","property","kebab","m","v","bindStyles","styles","prop","valueFn"],"mappings":"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","file":"chunk-SBDFBADL.cjs","sourcesContent":["/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function v(t,i,c,u,m=3){let s,a,n,e,o;typeof t=="object"?(s=t.scrollTop,a=t.containerHeight,n=t.itemHeight,e=t.totalItems,o=t.overscan??3):(s=t,a=i,n=c,e=u,o=m);let r=Math.floor(s/n),l=Math.ceil(a/n),h=Math.max(0,r-o),g=Math.min(e,r+l+o);return {start:h,end:g,totalHeight:e*n,offsetTop:h*n}}function V(t){let i=chunkHL2VGVJT_cjs.c(0),c=chunkHL2VGVJT_cjs.c(t.containerHeight??400),u=t.overscan??3,m=chunkHL2VGVJT_cjs.d(()=>v(i(),c(),t.itemHeight,t.items().length,u)),s=chunkHL2VGVJT_cjs.d(()=>{let e=m();return t.items().slice(e.start,e.end).map((o,r)=>({item:o,index:e.start+r}))});function a(e){let o=e.target;i.set(o.scrollTop);}function n(e){c.set(e);}return {range:m,visibleItems:s,onScroll:a,setContainerHeight:n,scrollTop:(()=>i())}}var E=chunkLSD7DEMV_cjs.s(t=>{let{itemHeight:i,containerHeight:c,overscan:u=3}=t.props,m=chunkHL2VGVJT_cjs.c(0);return ()=>{let s=t.props.each,a=c??400,n=v(m(),a,i,s.length,u),e=document.createElement("div");e.style.height=`${a}px`,e.style.overflow="auto",e.style.position="relative",e.addEventListener("scroll",()=>{m.set(e.scrollTop);},{passive:true});let o=document.createElement("div");o.style.height=`${n.totalHeight}px`,o.style.position="relative";let r=document.createElement("div");r.style.position="absolute",r.style.top=`${n.offsetTop}px`,r.style.left="0",r.style.right="0";for(let l=n.start;l<n.end;l++){let h=s[l];if(!h)continue;let g=chunkLSD7DEMV_cjs.l(t.props.children(h,l));g instanceof HTMLElement&&(g.style.height=`${i}px`),r.appendChild(g);}return o.appendChild(r),e.appendChild(o),e}});exports.a=v;exports.b=V;exports.c=E;//# sourceMappingURL=chunk-SPS3LM47.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-SPS3LM47.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/virtual-list.ts"],"names":["calculateRange","scrollTopOrOpts","containerHeight","itemHeight","totalItems","overscan","st","ch","ih","ti","os","firstVisible","visibleCount","start","end","useVirtualList","options","scrollTop","signal","range","computed","visibleItems","r","item","i","onScroll","target","setContainerHeight","height","VirtualFor","defineComponent","ctx","fixedHeight","items","outer","inner","content","row","nodeToDOM"],"mappings":"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","file":"chunk-SPS3LM47.cjs","sourcesContent":["/**\n * <VirtualFor> — virtualized list rendering.\n *\n * Only renders items visible in the viewport plus a small overscan\n * buffer. Essential for rendering thousands of items without\n * destroying performance.\n *\n * ```html\n * <VirtualFor\n * each={items()}\n * key={(item) => item.id}\n * itemHeight={40}\n * overscan={5}\n * >\n * {(item) => <div class=\"row\">{item.name}</div>}\n * </VirtualFor>\n * ```\n */\n\nimport { signal, effect, computed } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface VirtualForProps<T> {\n /** Array of items */\n each: T[];\n /** Key function for reconciliation */\n key: (item: T) => unknown;\n /** Fixed height per item in pixels */\n itemHeight: number;\n /** Container height in pixels (default: auto-detect from parent) */\n containerHeight?: number;\n /** Number of extra items to render above/below viewport */\n overscan?: number;\n /** Render function for each item */\n children: (item: T, index: number) => AkashNode;\n}\n\n// --- Virtual scroll calculations ---\n\nexport interface VirtualRange {\n /** First visible index */\n start: number;\n /** Last visible index (exclusive) */\n end: number;\n /** Total content height in pixels */\n totalHeight: number;\n /** Offset of the first rendered item */\n offsetTop: number;\n}\n\n/**\n * Calculate the visible range given scroll position and dimensions.\n */\nexport function calculateRange(\n scrollTopOrOpts: number | { scrollTop: number; containerHeight: number; itemHeight: number; totalItems: number; overscan?: number },\n containerHeight?: number,\n itemHeight?: number,\n totalItems?: number,\n overscan = 3,\n): VirtualRange {\n let st: number, ch: number, ih: number, ti: number, os: number;\n if (typeof scrollTopOrOpts === 'object') {\n st = scrollTopOrOpts.scrollTop;\n ch = scrollTopOrOpts.containerHeight;\n ih = scrollTopOrOpts.itemHeight;\n ti = scrollTopOrOpts.totalItems;\n os = scrollTopOrOpts.overscan ?? 3;\n } else {\n st = scrollTopOrOpts;\n ch = containerHeight!;\n ih = itemHeight!;\n ti = totalItems!;\n os = overscan;\n }\n\n const firstVisible = Math.floor(st / ih);\n const visibleCount = Math.ceil(ch / ih);\n\n const start = Math.max(0, firstVisible - os);\n const end = Math.min(ti, firstVisible + visibleCount + os);\n\n return {\n start,\n end,\n totalHeight: ti * ih,\n offsetTop: start * ih,\n };\n}\n\n// --- useVirtualList composable ---\n\n/**\n * Low-level virtual list composable for custom implementations.\n *\n * ```ts\n * const { containerRef, range, visibleItems } = useVirtualList({\n * items: () => allItems(),\n * itemHeight: 40,\n * overscan: 5,\n * });\n * ```\n */\nexport function useVirtualList<T>(options: {\n items: () => T[];\n itemHeight: number;\n containerHeight?: number;\n overscan?: number;\n}) {\n const scrollTop = signal(0);\n const containerHeight = signal(options.containerHeight ?? 400);\n const overscan = options.overscan ?? 3;\n\n const range = computed((): VirtualRange => {\n return calculateRange(\n scrollTop(),\n containerHeight(),\n options.itemHeight,\n options.items().length,\n overscan,\n );\n });\n\n const visibleItems = computed(() => {\n const r = range();\n return options.items().slice(r.start, r.end).map((item, i) => ({\n item,\n index: r.start + i,\n }));\n });\n\n function onScroll(e: Event): void {\n const target = e.target as HTMLElement;\n scrollTop.set(target.scrollTop);\n }\n\n function setContainerHeight(height: number): void {\n containerHeight.set(height);\n }\n\n return {\n range,\n visibleItems,\n onScroll,\n setContainerHeight,\n scrollTop: (() => scrollTop()) as ReadonlySignal<number>,\n };\n}\n\n// --- <VirtualFor> component ---\n\nexport const VirtualFor = defineComponent<VirtualForProps<any>>((ctx) => {\n const {\n itemHeight,\n containerHeight: fixedHeight,\n overscan = 3,\n } = ctx.props;\n\n const scrollTop = signal(0);\n\n return () => {\n const items = ctx.props.each;\n const height = fixedHeight ?? 400;\n\n const r = calculateRange(scrollTop(), height, itemHeight, items.length, overscan);\n\n // Outer container (scrollable)\n const outer = document.createElement('div');\n outer.style.height = `${height}px`;\n outer.style.overflow = 'auto';\n outer.style.position = 'relative';\n\n outer.addEventListener('scroll', () => {\n scrollTop.set(outer.scrollTop);\n }, { passive: true });\n\n // Inner spacer (total height)\n const inner = document.createElement('div');\n inner.style.height = `${r.totalHeight}px`;\n inner.style.position = 'relative';\n\n // Rendered items container\n const content = document.createElement('div');\n content.style.position = 'absolute';\n content.style.top = `${r.offsetTop}px`;\n content.style.left = '0';\n content.style.right = '0';\n\n // Render visible items\n for (let i = r.start; i < r.end; i++) {\n const item = items[i];\n if (!item) continue;\n\n const row = nodeToDOM(ctx.props.children(item, i));\n if (row instanceof HTMLElement) {\n row.style.height = `${itemHeight}px`;\n }\n content.appendChild(row);\n }\n\n inner.appendChild(content);\n outer.appendChild(inner);\n return outer;\n };\n});\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import {p}from'./chunk-CDZR6GWB.js';import {e}from'./chunk-2UATNCKC.js';var f=[];function m(){let i=f;return f=[],i}function g(i){if(!i||i.length===0)return "";let r="",s=i.reduce((o,t)=>t.title??o,""),c=i.reduce((o,t)=>t.titleTemplate??o,"");if(s){let o=c?c.replace("%s",s):s;r+=`<title>${o}</title>
|
|
2
|
+
`;}for(let o of i)for(let t of o.meta??[])r+=" <meta",t.name&&(r+=` name="${t.name}"`),t.property&&(r+=` property="${t.property}"`),t.httpEquiv&&(r+=` http-equiv="${t.httpEquiv}"`),r+=` content="${t.content}"`,r+=` />
|
|
3
|
+
`;for(let o of i)for(let t of o.link??[])r+=` <link rel="${t.rel}" href="${t.href}"`,t.type&&(r+=` type="${t.type}"`),r+=` />
|
|
4
|
+
`;return r}var a="data-akash-head";function h(i){let r=typeof i=="function"?i:()=>i;if(typeof document>"u")return f.push(r()),()=>{};let s=[],c=e(()=>{let t=r();for(let e of s)e.remove();if(s.length=0,t.title){let e=t.titleTemplate?t.titleTemplate.replace("%s",t.title):t.title;document.title=e;}for(let e of t.meta??[]){let n=document.createElement("meta");n.setAttribute(a,""),e.name&&n.setAttribute("name",e.name),e.property&&n.setAttribute("property",e.property),e.httpEquiv&&n.setAttribute("http-equiv",e.httpEquiv),n.setAttribute("content",e.content),document.head.appendChild(n),s.push(n);}for(let e of t.link??[]){let n=document.createElement("link");n.setAttribute(a,""),n.setAttribute("rel",e.rel),n.setAttribute("href",e.href),e.type&&n.setAttribute("type",e.type),document.head.appendChild(n),s.push(n);}for(let e of t.script??[]){let n=document.createElement("script");n.setAttribute(a,""),e.src&&n.setAttribute("src",e.src),e.type&&n.setAttribute("type",e.type),e.async&&n.setAttribute("async",""),e.defer&&n.setAttribute("defer",""),e.innerHTML&&(n.textContent=e.innerHTML),document.head.appendChild(n),s.push(n);}if(t.htmlAttrs)for(let[e,n]of Object.entries(t.htmlAttrs))document.documentElement.setAttribute(e,n);if(t.bodyAttrs)for(let[e,n]of Object.entries(t.bodyAttrs))document.body.setAttribute(e,n);}),o=()=>{c();for(let t of s)t.remove();s.length=0;};try{p(o);}catch{}return o}export{m as a,g as b,h as c};//# sourceMappingURL=chunk-SVNS64LE.js.map
|
|
5
|
+
//# sourceMappingURL=chunk-SVNS64LE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/head.ts"],"names":["ssrHeadTags","collectSSRHead","tags","renderHeadToString","configs","html","title","t","c","titleTemplate","finalTitle","config","meta","link","MANAGED_ATTR","useHead","getConfig","managedElements","dispose","effect","cfg","el","script","key","value","cleanup","onUnmount"],"mappings":"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","file":"chunk-SVNS64LE.js","sourcesContent":["/**\n * Document head management.\n *\n * Provides Title, Meta, and Head components for managing\n * <head> content declaratively. SSR-compatible — on the server,\n * collects tags; on the client, directly mutates the DOM.\n *\n * ```ts\n * // In any component:\n * useHead({\n * title: 'My Page',\n * meta: [\n * { name: 'description', content: 'Page description' },\n * { property: 'og:title', content: 'My Page' },\n * ],\n * link: [\n * { rel: 'canonical', href: 'https://example.com/page' },\n * ],\n * });\n * ```\n */\n\nimport { effect } from './signals.js';\nimport { onUnmount } from './component.js';\n\n// --- Types ---\n\nexport interface HeadConfig {\n /** Document title */\n title?: string;\n /** Title template — use %s as placeholder */\n titleTemplate?: string;\n /** Meta tags */\n meta?: MetaTag[];\n /** Link tags */\n link?: LinkTag[];\n /** Script tags */\n script?: ScriptTag[];\n /** HTML attributes */\n htmlAttrs?: Record<string, string>;\n /** Body attributes */\n bodyAttrs?: Record<string, string>;\n}\n\nexport interface MetaTag {\n name?: string;\n property?: string;\n httpEquiv?: string;\n content: string;\n}\n\nexport interface LinkTag {\n rel: string;\n href: string;\n type?: string;\n crossorigin?: string;\n}\n\nexport interface ScriptTag {\n src?: string;\n type?: string;\n async?: boolean;\n defer?: boolean;\n innerHTML?: string;\n}\n\n// --- SSR head collection ---\n\nlet ssrHeadTags: HeadConfig[] = [];\n\n/** @internal — collect head tags during SSR */\nexport function collectSSRHead(): HeadConfig[] {\n const tags = ssrHeadTags;\n ssrHeadTags = [];\n return tags;\n}\n\n/** Render collected head tags to HTML string (for SSR) */\nexport function renderHeadToString(configs?: HeadConfig[] | null): string {\n if (!configs || configs.length === 0) return '';\n let html = '';\n\n // Last title wins\n const title = configs.reduce((t, c) => c.title ?? t, '');\n const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, '');\n\n if (title) {\n const finalTitle = titleTemplate\n ? titleTemplate.replace('%s', title)\n : title;\n html += `<title>${finalTitle}</title>\\n`;\n }\n\n // Merge all meta tags\n for (const config of configs) {\n for (const meta of config.meta ?? []) {\n html += ' <meta';\n if (meta.name) html += ` name=\"${meta.name}\"`;\n if (meta.property) html += ` property=\"${meta.property}\"`;\n if (meta.httpEquiv) html += ` http-equiv=\"${meta.httpEquiv}\"`;\n html += ` content=\"${meta.content}\"`;\n html += ' />\\n';\n }\n }\n\n // Merge all link tags\n for (const config of configs) {\n for (const link of config.link ?? []) {\n html += ` <link rel=\"${link.rel}\" href=\"${link.href}\"`;\n if (link.type) html += ` type=\"${link.type}\"`;\n html += ' />\\n';\n }\n }\n\n return html;\n}\n\n// --- Client-side head management ---\n\nconst MANAGED_ATTR = 'data-akash-head';\n\n/**\n * Declaratively manage document head tags.\n * Call inside defineComponent() setup.\n *\n * Tags are automatically cleaned up when the component unmounts.\n * Reactive values (signals) in the config trigger updates.\n */\nexport function useHead(config: HeadConfig | (() => HeadConfig)): () => void {\n const getConfig = typeof config === 'function' ? config : () => config;\n\n // SSR: just collect\n if (typeof document === 'undefined') {\n ssrHeadTags.push(getConfig());\n return () => {};\n }\n\n const managedElements: Element[] = [];\n\n const dispose = effect(() => {\n const cfg = getConfig();\n\n // Clean up previously managed elements\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n\n // Title\n if (cfg.title) {\n const title = cfg.titleTemplate\n ? cfg.titleTemplate.replace('%s', cfg.title)\n : cfg.title;\n document.title = title;\n }\n\n // Meta tags\n for (const meta of cfg.meta ?? []) {\n const el = document.createElement('meta');\n el.setAttribute(MANAGED_ATTR, '');\n if (meta.name) el.setAttribute('name', meta.name);\n if (meta.property) el.setAttribute('property', meta.property);\n if (meta.httpEquiv) el.setAttribute('http-equiv', meta.httpEquiv);\n el.setAttribute('content', meta.content);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Link tags\n for (const link of cfg.link ?? []) {\n const el = document.createElement('link');\n el.setAttribute(MANAGED_ATTR, '');\n el.setAttribute('rel', link.rel);\n el.setAttribute('href', link.href);\n if (link.type) el.setAttribute('type', link.type);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Script tags\n for (const script of cfg.script ?? []) {\n const el = document.createElement('script');\n el.setAttribute(MANAGED_ATTR, '');\n if (script.src) el.setAttribute('src', script.src);\n if (script.type) el.setAttribute('type', script.type);\n if (script.async) el.setAttribute('async', '');\n if (script.defer) el.setAttribute('defer', '');\n if (script.innerHTML) el.textContent = script.innerHTML;\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // HTML attributes\n if (cfg.htmlAttrs) {\n for (const [key, value] of Object.entries(cfg.htmlAttrs)) {\n document.documentElement.setAttribute(key, value);\n }\n }\n\n // Body attributes\n if (cfg.bodyAttrs) {\n for (const [key, value] of Object.entries(cfg.bodyAttrs)) {\n document.body.setAttribute(key, value);\n }\n }\n });\n\n const cleanup = () => {\n dispose();\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n };\n\n // Cleanup on unmount\n try {\n onUnmount(cleanup);\n } catch {\n // onUnmount may throw if called outside component — that's fine,\n // caller can use the returned dispose function manually\n }\n\n return cleanup;\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';function a(t){return {enterFrom:`${t}-enter-from`,enterActive:`${t}-enter-active`,enterTo:`${t}-enter-to`,exitFrom:`${t}-exit-from`,exitActive:`${t}-exit-active`,exitTo:`${t}-exit-to`}}function d(t,e,i){return new Promise(r=>{t.classList.add(e.enterFrom,e.enterActive),t.offsetHeight,t.classList.remove(e.enterFrom),t.classList.add(e.enterTo);let n=()=>{t.classList.remove(e.enterActive,e.enterTo),t.removeEventListener("transitionend",n),r();};i!==void 0?setTimeout(n,i):(t.addEventListener("transitionend",n,{once:true}),setTimeout(n,5e3));})}function c(t,e,i){return new Promise(r=>{t.classList.add(e.exitFrom,e.exitActive),t.offsetHeight,t.classList.remove(e.exitFrom),t.classList.add(e.exitTo);let n=()=>{t.classList.remove(e.exitActive,e.exitTo),t.removeEventListener("transitionend",n),r();};i!==void 0?setTimeout(n,i):(t.addEventListener("transitionend",n,{once:true}),setTimeout(n,5e3));})}var f=s(t=>{let e=t.props.name??"akash",i=a(e);return ()=>{let r=document.createElement("div");if(r.style.display="contents",t.props.when){let n=l(t.children());r.appendChild(n),n instanceof HTMLElement&&(t.props.onEnter?.(n),d(n,i,t.props.duration).then(()=>{t.props.onAfterEnter?.(n);}));}return r}});function v(t,e={}){let{property:i="all",duration:r="0.3s",easing:n="ease"}=e;return `
|
|
2
|
+
.${t}-enter-active,
|
|
3
|
+
.${t}-exit-active {
|
|
4
|
+
transition: ${i} ${r} ${n};
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.${t}-enter-from,
|
|
8
|
+
.${t}-exit-to {
|
|
9
|
+
opacity: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.${t}-enter-to,
|
|
13
|
+
.${t}-exit-from {
|
|
14
|
+
opacity: 1;
|
|
15
|
+
}
|
|
16
|
+
`.trim()}export{a,d as b,c,f as d,v as e};//# sourceMappingURL=chunk-SZDKDXRV.js.map
|
|
17
|
+
//# sourceMappingURL=chunk-SZDKDXRV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/transition.ts"],"names":["getTransitionClasses","name","enterTransition","el","classes","duration","resolve","onEnd","exitTransition","Transition","defineComponent","ctx","container","content","nodeToDOM","generateTransitionCSS","options","property","easing"],"mappings":"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","file":"chunk-SZDKDXRV.js","sourcesContent":["/**\n * Transition/Animation system.\n *\n * Provides CSS-based enter/exit transitions for elements.\n * Works with <Transition> component or programmatic API.\n *\n * Class naming convention (matches Vue/Svelte):\n * - `{name}-enter-from` — initial enter state\n * - `{name}-enter-active` — active enter transition\n * - `{name}-enter-to` — final enter state\n * - `{name}-exit-from` — initial exit state\n * - `{name}-exit-active` — active exit transition\n * - `{name}-exit-to` — final exit state\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport interface TransitionProps {\n /** Transition name (used as CSS class prefix) */\n name?: string;\n /** Duration in ms (overrides CSS transition duration) */\n duration?: number;\n /** Whether the content is shown */\n when: boolean;\n /** CSS transition mode */\n mode?: 'in-out' | 'out-in';\n /** Callback when enter transition starts */\n onEnter?: (el: HTMLElement) => void;\n /** Callback when enter transition completes */\n onAfterEnter?: (el: HTMLElement) => void;\n /** Callback when exit transition starts */\n onExit?: (el: HTMLElement) => void;\n /** Callback when exit transition completes */\n onAfterExit?: (el: HTMLElement) => void;\n}\n\nexport interface TransitionClasses {\n enterFrom: string;\n enterActive: string;\n enterTo: string;\n exitFrom: string;\n exitActive: string;\n exitTo: string;\n}\n\n// --- CSS class helpers ---\n\n/**\n * Get the transition CSS class names for a given transition name.\n */\nexport function getTransitionClasses(name: string): TransitionClasses {\n return {\n enterFrom: `${name}-enter-from`,\n enterActive: `${name}-enter-active`,\n enterTo: `${name}-enter-to`,\n exitFrom: `${name}-exit-from`,\n exitActive: `${name}-exit-active`,\n exitTo: `${name}-exit-to`,\n };\n}\n\n// --- Programmatic transition API ---\n\n/**\n * Run an enter transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function enterTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n // Apply initial state\n el.classList.add(classes.enterFrom, classes.enterActive);\n\n // Force reflow to ensure the initial state is applied\n void el.offsetHeight;\n\n // Transition to final state\n el.classList.remove(classes.enterFrom);\n el.classList.add(classes.enterTo);\n\n const onEnd = () => {\n el.classList.remove(classes.enterActive, classes.enterTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n // Fallback timeout in case transitionend never fires\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n/**\n * Run an exit transition on an element.\n * Returns a promise that resolves when the transition completes.\n */\nexport function exitTransition(\n el: HTMLElement,\n classes: TransitionClasses,\n duration?: number,\n): Promise<void> {\n return new Promise((resolve) => {\n el.classList.add(classes.exitFrom, classes.exitActive);\n\n void el.offsetHeight;\n\n el.classList.remove(classes.exitFrom);\n el.classList.add(classes.exitTo);\n\n const onEnd = () => {\n el.classList.remove(classes.exitActive, classes.exitTo);\n el.removeEventListener('transitionend', onEnd);\n resolve();\n };\n\n if (duration !== undefined) {\n setTimeout(onEnd, duration);\n } else {\n el.addEventListener('transitionend', onEnd, { once: true });\n setTimeout(onEnd, 5000);\n }\n });\n}\n\n// --- <Transition> component ---\n\n/**\n * <Transition> component.\n *\n * Applies CSS enter/exit transitions when `when` changes.\n *\n * ```html\n * <Transition name=\"fade\" when={isVisible()}>\n * <div>Content</div>\n * </Transition>\n * ```\n *\n * CSS:\n * ```css\n * .fade-enter-active, .fade-exit-active {\n * transition: opacity 0.3s;\n * }\n * .fade-enter-from, .fade-exit-to {\n * opacity: 0;\n * }\n * ```\n */\nexport const Transition = defineComponent<TransitionProps>((ctx) => {\n const name = ctx.props.name ?? 'akash';\n const classes = getTransitionClasses(name);\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n if (ctx.props.when) {\n const content = nodeToDOM(ctx.children());\n container.appendChild(content);\n\n // Run enter transition on mount\n if (content instanceof HTMLElement) {\n ctx.props.onEnter?.(content);\n enterTransition(content, classes, ctx.props.duration).then(() => {\n ctx.props.onAfterEnter?.(content);\n });\n }\n }\n\n return container;\n };\n});\n\n// --- Preset transition styles ---\n\n/**\n * Generate CSS for common transition presets.\n * Inject this into your app's styles or use the CLI to generate it.\n */\nexport function generateTransitionCSS(name: string, options: {\n property?: string;\n duration?: string;\n easing?: string;\n} = {}): string {\n const {\n property = 'all',\n duration = '0.3s',\n easing = 'ease',\n } = options;\n\n return `\n.${name}-enter-active,\n.${name}-exit-active {\n transition: ${property} ${duration} ${easing};\n}\n\n.${name}-enter-from,\n.${name}-exit-to {\n opacity: 0;\n}\n\n.${name}-enter-to,\n.${name}-exit-from {\n opacity: 1;\n}\n`.trim();\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var I=0;function g(e){return {_type:"provider",factory:e.factory,providedIn:e.providedIn,multi:e.multi,_id:Symbol(`provider-${++I}`)}}var i=new Map;function y(e=[],r){let s=new Map,u=new Map,a=new Map;for(let t of e)a.set(t.provide._id,t);let d={get(t){let n=t._id;if(t.multi){if(u.has(n))return u.get(n);let o=[],c=a.get(n);if(c?.useFactory?o.push(c.useFactory()):c?.useValue!==void 0&&o.push(c.useValue),r?.has(t)){let v=r.get(t);Array.isArray(v)&&o.push(...v);}return u.set(n,o),o}if(s.has(n))return s.get(n);if(t.providedIn==="root"&&i.has(n))return i.get(n);let T=a.get(n);if(T){let o=p(T,d);return s.set(n,o),o}if(r)return r.get(t);let l=t.factory();return t.providedIn==="root"?i.set(n,l):s.set(n,l),l},has(t){return s.has(t._id)||a.has(t._id)||t.providedIn==="root"&&i.has(t._id)?true:r?r.has(t):false},createChild(t){return y(t??[],d)},dispose(){s.clear(),u.clear();}};return d}function p(e,r){return e.useValue!==void 0?e.useValue:e.useFactory?e.useFactory():e.useExisting?r.get(e.useExisting):e.provide.factory()}var f=null;function P(e){let r=f;return f=e,r}function m(e){if(!f){if(e.providedIn==="root"){if(i.has(e._id))return i.get(e._id);let r=e.factory();return i.set(e._id,r),r}return e.factory()}return f.get(e)}function h(){i.clear();}exports.a=g;exports.b=y;exports.c=P;exports.d=m;exports.e=h;//# sourceMappingURL=chunk-T7A5YOEG.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-T7A5YOEG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/di.ts"],"names":["providerIdCounter","defineProvider","config","rootInstances","createInjector","providers","parent","instances","multiInstances","registrations","reg","injector","provider","id","values","parentValues","instance","resolveRegistration","childProviders","currentInjector","setCurrentInjector","prev","injectProvider","clearProviders"],"mappings":"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","file":"chunk-T7A5YOEG.cjs","sourcesContent":["/**\n * Hierarchical Dependency Injection.\n *\n * Extends the basic provide/inject with multi-level injectors,\n * provider factories, tree-shakable providers, and multi-providers.\n *\n * ```ts\n * // Define a provider with factory\n * const ApiService = defineProvider({\n * factory: () => createHttpClient({ baseUrl: '/api' }),\n * });\n *\n * // Tree-shakable provider (only bundled if injected)\n * const Logger = defineProvider({\n * factory: () => new ConsoleLogger(),\n * providedIn: 'root',\n * });\n *\n * // Use in component\n * const api = injectProvider(ApiService);\n * ```\n */\n\nimport { signal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ProviderDef<T> {\n _type: 'provider';\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n _id: symbol;\n}\n\nexport interface Injector {\n /** Get a provider value */\n get<T>(provider: ProviderDef<T>): T;\n /** Check if a provider is registered */\n has(provider: ProviderDef<unknown>): boolean;\n /** Create a child injector */\n createChild(providers?: ProviderRegistration[]): Injector;\n /** Dispose this injector and all cached instances */\n dispose(): void;\n}\n\nexport interface ProviderRegistration<T = unknown> {\n provide: ProviderDef<T>;\n useFactory?: () => T;\n useValue?: T;\n useExisting?: ProviderDef<T>;\n multi?: boolean;\n}\n\n// =========================================================================\n// defineProvider\n// =========================================================================\n\nlet providerIdCounter = 0;\n\n/**\n * Define a typed provider.\n *\n * ```ts\n * const DatabaseService = defineProvider({\n * factory: () => new Database(config),\n * providedIn: 'root', // singleton, tree-shakable\n * });\n * ```\n */\nexport function defineProvider<T>(config: {\n factory: () => T;\n providedIn?: 'root' | 'component';\n multi?: boolean;\n}): ProviderDef<T> {\n return {\n _type: 'provider',\n factory: config.factory,\n providedIn: config.providedIn,\n multi: config.multi,\n _id: Symbol(`provider-${++providerIdCounter}`),\n };\n}\n\n// =========================================================================\n// Injector implementation\n// =========================================================================\n\nconst rootInstances = new Map<symbol, unknown>();\n\n/**\n * Create an injector with hierarchical resolution.\n *\n * ```ts\n * const injector = createInjector([\n * { provide: ApiService, useFactory: () => new MockApi() },\n * { provide: Logger, useValue: console },\n * ]);\n *\n * const api = injector.get(ApiService);\n * ```\n */\nexport function createInjector(\n providers: ProviderRegistration[] = [],\n parent?: Injector,\n): Injector {\n const instances = new Map<symbol, unknown>();\n const multiInstances = new Map<symbol, unknown[]>();\n const registrations = new Map<symbol, ProviderRegistration>();\n\n // Register providers\n for (const reg of providers) {\n registrations.set(reg.provide._id, reg);\n }\n\n const injector: Injector = {\n get<T>(provider: ProviderDef<T>): T {\n const id = provider._id;\n\n // Multi-provider\n if (provider.multi) {\n if (multiInstances.has(id)) return multiInstances.get(id) as T;\n const values: unknown[] = [];\n const reg = registrations.get(id);\n if (reg?.useFactory) values.push(reg.useFactory());\n else if (reg?.useValue !== undefined) values.push(reg.useValue);\n if (parent?.has(provider)) {\n const parentValues = parent.get(provider);\n if (Array.isArray(parentValues)) values.push(...parentValues);\n }\n multiInstances.set(id, values);\n return values as T;\n }\n\n // Check local cache\n if (instances.has(id)) return instances.get(id) as T;\n\n // Check root singleton\n if (provider.providedIn === 'root' && rootInstances.has(id)) {\n return rootInstances.get(id) as T;\n }\n\n // Check local registrations\n const reg = registrations.get(id);\n if (reg) {\n const instance = resolveRegistration(reg, injector);\n instances.set(id, instance);\n return instance as T;\n }\n\n // Check parent\n if (parent) {\n return parent.get(provider);\n }\n\n // Use default factory\n const instance = provider.factory();\n\n // Cache at appropriate level\n if (provider.providedIn === 'root') {\n rootInstances.set(id, instance);\n } else {\n instances.set(id, instance);\n }\n\n return instance;\n },\n\n has(provider: ProviderDef<unknown>): boolean {\n if (instances.has(provider._id)) return true;\n if (registrations.has(provider._id)) return true;\n if (provider.providedIn === 'root' && rootInstances.has(provider._id)) return true;\n if (parent) return parent.has(provider);\n return false;\n },\n\n createChild(childProviders?: ProviderRegistration[]): Injector {\n return createInjector(childProviders ?? [], injector);\n },\n\n dispose() {\n instances.clear();\n multiInstances.clear();\n },\n };\n\n return injector;\n}\n\nfunction resolveRegistration(reg: ProviderRegistration, injector: Injector): unknown {\n if (reg.useValue !== undefined) return reg.useValue;\n if (reg.useFactory) return reg.useFactory();\n if (reg.useExisting) return injector.get(reg.useExisting);\n return reg.provide.factory();\n}\n\n// =========================================================================\n// Component-level injection helpers\n// =========================================================================\n\nlet currentInjector: Injector | null = null;\n\n/**\n * Set the current injector (called by component setup).\n * @internal\n */\nexport function setCurrentInjector(injector: Injector | null): Injector | null {\n const prev = currentInjector;\n currentInjector = injector;\n return prev;\n}\n\n/**\n * Inject a provider in the current component context.\n *\n * ```ts\n * const api = injectProvider(ApiService);\n * ```\n */\nexport function injectProvider<T>(provider: ProviderDef<T>): T {\n if (!currentInjector) {\n // Fallback to root or create new instance\n if (provider.providedIn === 'root') {\n if (rootInstances.has(provider._id)) {\n return rootInstances.get(provider._id) as T;\n }\n const instance = provider.factory();\n rootInstances.set(provider._id, instance);\n return instance;\n }\n return provider.factory();\n }\n return currentInjector.get(provider);\n}\n\n/**\n * Clear root provider instances (useful for testing).\n */\nexport function clearProviders(): void {\n rootInstances.clear();\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var f=false,u=[],l=0;function g(){f=true,u=[],l=performance.now();}function P(){f=false;let r=performance.now();return {entries:[...u],totalDuration:r-l,startTime:l,endTime:r}}function E(){return f}function m(r,e,t){f&&u.push({type:r,name:e,duration:t,timestamp:performance.now()});}function p(r){let e=r.entries.filter(n=>n.type==="render"),t=r.entries.filter(n=>n.type==="effect"),s=r.entries.filter(n=>n.type==="signal-update"),o=r.entries.filter(n=>n.type==="computed"),c=n=>n.length>0?n.reduce((a,i)=>a+i.duration,0)/n.length:0,d=n=>n.length>0?n.reduce((a,i)=>i.duration>a.duration?i:a):null;return {totalRenders:e.length,totalEffects:t.length,totalSignalUpdates:s.length,totalComputedEvals:o.length,avgRenderTime:c(e),avgEffectTime:c(t),slowestRender:d(e),slowestEffect:d(t)}}function w(r,e){let t=performance.now(),s=e(),o=performance.now()-t;return m("render",r,o),{result:s,duration:o}}async function y(r,e){let t=performance.now(),s=await e(),o=performance.now()-t;return m("render",r,o),{result:s,duration:o}}function T(r){let e=0,t=0;return {start(){e=performance.now();},stop(){t=performance.now()-e,m("render",r,t);},get duration(){return t}}}function x(r){let e=p(r),t=`
|
|
2
|
+
Performance Profile
|
|
3
|
+
`;return t+=" "+"\u2500".repeat(50)+`
|
|
4
|
+
`,t+=` Duration: ${r.totalDuration.toFixed(1)} ms
|
|
5
|
+
`,t+=` Renders: ${e.totalRenders} (avg ${e.avgRenderTime.toFixed(2)} ms)
|
|
6
|
+
`,t+=` Effects: ${e.totalEffects} (avg ${e.avgEffectTime.toFixed(2)} ms)
|
|
7
|
+
`,t+=` Signal updates: ${e.totalSignalUpdates}
|
|
8
|
+
`,t+=` Computed evals: ${e.totalComputedEvals}
|
|
9
|
+
`,e.slowestRender&&(t+=` Slowest render: ${e.slowestRender.name} (${e.slowestRender.duration.toFixed(2)} ms)
|
|
10
|
+
`),e.slowestEffect&&(t+=` Slowest effect: ${e.slowestEffect.name} (${e.slowestEffect.duration.toFixed(2)} ms)
|
|
11
|
+
`),t+=" "+"\u2500".repeat(50)+`
|
|
12
|
+
`,t}export{g as a,P as b,E as c,m as d,p as e,w as f,y as g,T as h,x as i};//# sourceMappingURL=chunk-U65WRXZC.js.map
|
|
13
|
+
//# sourceMappingURL=chunk-U65WRXZC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/perf.ts"],"names":["profiling","entries","profileStart","startProfiling","stopProfiling","endTime","isProfiling","recordPerfEntry","type","name","duration","getProfileSummary","profile","renders","e","effects","signalUpdates","computeds","avg","arr","s","slowest","measureSync","fn","start","result","measureAsync","createTimer","startTime","dur","formatProfile","summary","out"],"mappings":"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","file":"chunk-U65WRXZC.js","sourcesContent":["/**\n * Performance profiling utilities.\n *\n * Measure component render times, signal propagation, and\n * effect execution for performance debugging.\n *\n * ```ts\n * import { startProfiling, stopProfiling, getProfile } from '@akashjs/runtime';\n *\n * startProfiling();\n * // ... do stuff ...\n * stopProfiling();\n * console.table(getProfile().entries);\n * ```\n */\n\n// --- Types ---\n\nexport interface PerfEntry {\n type: 'render' | 'effect' | 'signal-update' | 'computed';\n name: string;\n duration: number;\n timestamp: number;\n}\n\nexport interface PerfProfile {\n entries: PerfEntry[];\n totalDuration: number;\n startTime: number;\n endTime: number;\n}\n\nexport interface PerfSummary {\n totalRenders: number;\n totalEffects: number;\n totalSignalUpdates: number;\n totalComputedEvals: number;\n avgRenderTime: number;\n avgEffectTime: number;\n slowestRender: PerfEntry | null;\n slowestEffect: PerfEntry | null;\n}\n\n// --- Profiling state ---\n\nlet profiling = false;\nlet entries: PerfEntry[] = [];\nlet profileStart = 0;\n\n// --- Public API ---\n\n/**\n * Start profiling. Clears previous data.\n */\nexport function startProfiling(): void {\n profiling = true;\n entries = [];\n profileStart = performance.now();\n}\n\n/**\n * Stop profiling.\n */\nexport function stopProfiling(): PerfProfile {\n profiling = false;\n const endTime = performance.now();\n\n return {\n entries: [...entries],\n totalDuration: endTime - profileStart,\n startTime: profileStart,\n endTime,\n };\n}\n\n/**\n * Check if profiling is active.\n */\nexport function isProfiling(): boolean {\n return profiling;\n}\n\n/**\n * Record a performance entry (called internally by the framework).\n */\nexport function recordPerfEntry(\n type: PerfEntry['type'],\n name: string,\n duration: number,\n): void {\n if (!profiling) return;\n entries.push({\n type,\n name,\n duration,\n timestamp: performance.now(),\n });\n}\n\n/**\n * Get a summary of the profiling data.\n */\nexport function getProfileSummary(profile: PerfProfile): PerfSummary {\n const renders = profile.entries.filter((e) => e.type === 'render');\n const effects = profile.entries.filter((e) => e.type === 'effect');\n const signalUpdates = profile.entries.filter((e) => e.type === 'signal-update');\n const computeds = profile.entries.filter((e) => e.type === 'computed');\n\n const avg = (arr: PerfEntry[]) =>\n arr.length > 0 ? arr.reduce((s, e) => s + e.duration, 0) / arr.length : 0;\n\n const slowest = (arr: PerfEntry[]) =>\n arr.length > 0 ? arr.reduce((s, e) => (e.duration > s.duration ? e : s)) : null;\n\n return {\n totalRenders: renders.length,\n totalEffects: effects.length,\n totalSignalUpdates: signalUpdates.length,\n totalComputedEvals: computeds.length,\n avgRenderTime: avg(renders),\n avgEffectTime: avg(effects),\n slowestRender: slowest(renders),\n slowestEffect: slowest(effects),\n };\n}\n\n// --- Measurement helpers ---\n\n/**\n * Measure the time to execute a function.\n *\n * ```ts\n * const { result, duration } = measureSync('my-operation', () => expensiveWork());\n * ```\n */\nexport function measureSync<T>(name: string, fn: () => T): { result: T; duration: number } {\n const start = performance.now();\n const result = fn();\n const duration = performance.now() - start;\n recordPerfEntry('render', name, duration);\n return { result, duration };\n}\n\n/**\n * Measure the time to execute an async function.\n */\nexport async function measureAsync<T>(\n name: string,\n fn: () => Promise<T>,\n): Promise<{ result: T; duration: number }> {\n const start = performance.now();\n const result = await fn();\n const duration = performance.now() - start;\n recordPerfEntry('render', name, duration);\n return { result, duration };\n}\n\n/**\n * Create a named timer for manual start/stop measurement.\n *\n * ```ts\n * const timer = createTimer('data-fetch');\n * timer.start();\n * await fetch(...);\n * timer.stop(); // records the entry\n * timer.duration; // ms\n * ```\n */\nexport function createTimer(name: string) {\n let startTime = 0;\n let dur = 0;\n\n return {\n start() { startTime = performance.now(); },\n stop() {\n dur = performance.now() - startTime;\n recordPerfEntry('render', name, dur);\n },\n get duration() { return dur; },\n };\n}\n\n/**\n * Format a profile for console output.\n */\nexport function formatProfile(profile: PerfProfile): string {\n const summary = getProfileSummary(profile);\n let out = '\\n Performance Profile\\n';\n out += ' ' + '─'.repeat(50) + '\\n';\n out += ` Duration: ${profile.totalDuration.toFixed(1)} ms\\n`;\n out += ` Renders: ${summary.totalRenders} (avg ${summary.avgRenderTime.toFixed(2)} ms)\\n`;\n out += ` Effects: ${summary.totalEffects} (avg ${summary.avgEffectTime.toFixed(2)} ms)\\n`;\n out += ` Signal updates: ${summary.totalSignalUpdates}\\n`;\n out += ` Computed evals: ${summary.totalComputedEvals}\\n`;\n\n if (summary.slowestRender) {\n out += ` Slowest render: ${summary.slowestRender.name} (${summary.slowestRender.duration.toFixed(2)} ms)\\n`;\n }\n if (summary.slowestEffect) {\n out += ` Slowest effect: ${summary.slowestEffect.name} (${summary.slowestEffect.duration.toFixed(2)} ms)\\n`;\n }\n\n out += ' ' + '─'.repeat(50) + '\\n';\n return out;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function f(r){let t=r.length;if(t===0)return [];let n=[],s=new Array(t).fill(-1),o=[];for(let e=0;e<t;e++){let c=r[e];if(c===-1)continue;let u=0,m=n.length;for(;u<m;){let p=u+m>>1;n[p]<c?u=p+1:m=p;}n[u]=c,o[u]=e,u>0&&(s[e]=o[u-1]);}let i=new Array(n.length),l=o[n.length-1];for(let e=n.length-1;e>=0;e--)i[e]=l,l=s[l];return i}function h(r,t){let n=[],s=new Map;for(let e=0;e<r.length;e++)s.set(r[e],e);let o=new Array(t.length);for(let e=0;e<t.length;e++)o[e]=s.get(t[e])??-1;let i=new Set(t);for(let e=0;e<r.length;e++)i.has(r[e])||n.push({type:"remove",oldIndex:e});let l=new Set(f(o));for(let e=0;e<t.length;e++)o[e]===-1?n.push({type:"insert",newIndex:e}):l.has(e)||n.push({type:"move",newIndex:e,oldIndex:o[e]});return n}function b(r,t){let n=h(r,t),s=0,o=0,i=0;for(let l of n)l.type==="insert"?s++:l.type==="move"?o++:i++;return {inserts:s,moves:o,removes:i}}export{f as a,h as b,b as c};//# sourceMappingURL=chunk-UT4MWGJ3.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-UT4MWGJ3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/reconcile.ts"],"names":["longestIncreasingSubsequence","arr","n","tails","predecessors","indices","i","value","lo","hi","mid","result","k","reconcileKeys","oldKeys","newKeys","ops","oldKeyMap","newToOld","newKeySet","lis","countOps","inserts","moves","removes","op"],"mappings":"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","file":"chunk-UT4MWGJ3.js","sourcesContent":["/**\n * List reconciliation with Longest Increasing Subsequence (LIS).\n *\n * When a keyed list updates, we need to determine the minimal set of\n * DOM operations (inserts, moves, removes). The LIS of the new key\n * positions tells us which nodes are already in the correct relative\n * order and don't need to move.\n *\n * This is the same algorithm used by Vue 3, Solid, and Inferno.\n */\n\n/**\n * Find the Longest Increasing Subsequence of indices.\n * Returns the indices into the input array that form the LIS.\n *\n * Time: O(n log n), Space: O(n)\n */\nexport function longestIncreasingSubsequence(arr: number[]): number[] {\n const n = arr.length;\n if (n === 0) return [];\n\n // tails[i] = smallest tail value for increasing subsequence of length i+1\n const tails: number[] = [];\n // predecessors[i] = index of previous element in the LIS ending at i\n const predecessors: number[] = new Array(n).fill(-1);\n // indices[i] = index in arr of the tail for length i+1\n const indices: number[] = [];\n\n for (let i = 0; i < n; i++) {\n const value = arr[i];\n\n // Skip items not in the old list (marked as -1)\n if (value === -1) continue;\n\n // Binary search for the position to insert/replace\n let lo = 0;\n let hi = tails.length;\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < value) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n tails[lo] = value;\n indices[lo] = i;\n\n if (lo > 0) {\n predecessors[i] = indices[lo - 1];\n }\n }\n\n // Reconstruct the LIS by following predecessors\n const result: number[] = new Array(tails.length);\n let k = indices[tails.length - 1];\n\n for (let i = tails.length - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n\n return result;\n}\n\n/**\n * Reconcile two keyed lists and return the minimal DOM operations.\n *\n * @param oldKeys - Keys of the current DOM list\n * @param newKeys - Keys of the new data list\n * @returns Operations to transform old into new\n */\nexport interface ReconcileOp {\n type: 'insert' | 'move' | 'remove';\n /** Index in the NEW array (for insert/move) */\n newIndex?: number;\n /** Index in the OLD array (for remove/move source) */\n oldIndex?: number;\n}\n\nexport function reconcileKeys(\n oldKeys: unknown[],\n newKeys: unknown[],\n): ReconcileOp[] {\n const ops: ReconcileOp[] = [];\n\n // Build old key → index map\n const oldKeyMap = new Map<unknown, number>();\n for (let i = 0; i < oldKeys.length; i++) {\n oldKeyMap.set(oldKeys[i], i);\n }\n\n // For each new key, find its position in old (or -1 if new)\n const newToOld: number[] = new Array(newKeys.length);\n for (let i = 0; i < newKeys.length; i++) {\n newToOld[i] = oldKeyMap.get(newKeys[i]) ?? -1;\n }\n\n // Find nodes that need to be removed (in old but not in new)\n const newKeySet = new Set(newKeys);\n for (let i = 0; i < oldKeys.length; i++) {\n if (!newKeySet.has(oldKeys[i])) {\n ops.push({ type: 'remove', oldIndex: i });\n }\n }\n\n // Find the LIS of old indices — these nodes stay in place\n const lis = new Set(longestIncreasingSubsequence(newToOld));\n\n // Nodes not in the LIS need to be moved or inserted\n for (let i = 0; i < newKeys.length; i++) {\n if (newToOld[i] === -1) {\n // New item — insert\n ops.push({ type: 'insert', newIndex: i });\n } else if (!lis.has(i)) {\n // Existing item not in LIS — move\n ops.push({ type: 'move', newIndex: i, oldIndex: newToOld[i] });\n }\n // Items in LIS stay in place — no op needed\n }\n\n return ops;\n}\n\n/**\n * Count the minimum number of DOM operations needed.\n */\nexport function countOps(oldKeys: unknown[], newKeys: unknown[]): {\n inserts: number;\n moves: number;\n removes: number;\n} {\n const ops = reconcileKeys(oldKeys, newKeys);\n let inserts = 0, moves = 0, removes = 0;\n for (const op of ops) {\n if (op.type === 'insert') inserts++;\n else if (op.type === 'move') moves++;\n else removes++;\n }\n return { inserts, moves, removes };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c}from'./chunk-2UATNCKC.js';var p=typeof requestAnimationFrame=="function"?requestAnimationFrame:e=>setTimeout(()=>e(Date.now()),16),g=typeof cancelAnimationFrame=="function"?cancelAnimationFrame:e=>clearTimeout(e),S={linear:e=>e,cubicIn:e=>e*e*e,cubicOut:e=>1-Math.pow(1-e,3),cubicInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,quadIn:e=>e*e,quadOut:e=>1-(1-e)*(1-e),quintOut:e=>1-Math.pow(1-e,5),bounceOut:e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,elasticOut:e=>e===0||e===1?e:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1};function A(e,r,o){return typeof e=="number"&&typeof r=="number"?e+(r-e)*o:o<.5?e:r}function k(e,r={}){let{duration:o=400,easing:w=S.cubicOut,interpolate:y=A,delay:O=0}=r,a=c(e),m=c(e),i=0,n=false,u=(()=>a());return u.set=(t,s)=>{let f=s?.duration??o,I=s?.easing??w,h=s?.interpolate??y,M=s?.delay??O,P=a();return m.set(t),f===0?(a.set(t),Promise.resolve()):(n&&(g(i),n=false),new Promise(l=>{let x=performance.now()+M;n=true;function c(F){if(!n){l();return}let d=F-x;if(d<0){i=p(c);return}let b=Math.min(d/f,1),q=I(b);a.set(h(P,t,q)),b<1?i=p(c):(n=false,l());}i=p(c);}))},u.setImmediate=t=>{n&&(g(i),n=false),a.set(t),m.set(t);},u.target=()=>m(),u}export{S as a,k as b};//# sourceMappingURL=chunk-UXHQ5OFW.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-UXHQ5OFW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tweened.ts"],"names":["raf","fn","caf","id","easings","t","defaultInterpolate","from","to","tweened","initialValue","options","duration","easing","interpolate","delay","current","signal","targetValue","rafId","running","read","value","overrides","dur","ease","interp","del","resolve","start","tick","now","elapsed","easedT"],"mappings":"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","file":"chunk-UXHQ5OFW.js","sourcesContent":["/**\n * Tweened values — smooth interpolation between states.\n *\n * Unlike signals that update instantly, tweened values animate\n * smoothly from old to new over a duration.\n *\n * ```ts\n * const progress = tweened(0, { duration: 400 });\n * progress.set(100); // smoothly animates 0 → 100 over 400ms\n * progress(); // intermediate values during animation\n *\n * const color = tweened('#ff0000', { duration: 300, interpolate: lerpColor });\n * ```\n */\n\n// Fallback for non-browser environments (Node.js, SSR)\nconst raf = typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame\n : (fn: (t: number) => void) => setTimeout(() => fn(Date.now()), 16) as unknown as number;\nconst caf = typeof cancelAnimationFrame === 'function'\n ? cancelAnimationFrame\n : (id: number) => clearTimeout(id);\n\nimport { signal } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type Interpolator<T> = (from: T, to: T, t: number) => T;\n\nexport type EasingFn = (t: number) => number;\n\nexport interface TweenedOptions<T> {\n /** Duration in ms (default: 400) */\n duration?: number;\n /** Easing function (default: cubicOut) */\n easing?: EasingFn;\n /** Custom interpolation function */\n interpolate?: Interpolator<T>;\n /** Delay before animation starts */\n delay?: number;\n}\n\nexport interface TweenedSignal<T> {\n /** Read current (animated) value */\n (): T;\n /** Set new target — animates from current to new */\n set(value: T, opts?: Partial<TweenedOptions<T>>): Promise<void>;\n /** Set immediately without animation */\n setImmediate(value: T): void;\n /** Current target value */\n target: () => T;\n}\n\n// =========================================================================\n// Built-in easing functions\n// =========================================================================\n\nexport const easings = {\n linear: (t: number) => t,\n cubicIn: (t: number) => t * t * t,\n cubicOut: (t: number) => 1 - Math.pow(1 - t, 3),\n cubicInOut: (t: number) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,\n quadIn: (t: number) => t * t,\n quadOut: (t: number) => 1 - (1 - t) * (1 - t),\n quintOut: (t: number) => 1 - Math.pow(1 - t, 5),\n bounceOut: (t: number) => {\n if (t < 1 / 2.75) return 7.5625 * t * t;\n if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n elasticOut: (t: number) => {\n if (t === 0 || t === 1) return t;\n return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;\n },\n} as const;\n\n// =========================================================================\n// Default interpolators\n// =========================================================================\n\nfunction defaultInterpolate<T>(from: T, to: T, t: number): T {\n if (typeof from === 'number' && typeof to === 'number') {\n return (from + (to - from) * t) as T;\n }\n // For non-numbers, snap at halfway\n return t < 0.5 ? from : to;\n}\n\n// =========================================================================\n// tweened()\n// =========================================================================\n\n/**\n * Create a tweened signal that animates between values.\n *\n * ```ts\n * const count = tweened(0, { duration: 300, easing: easings.cubicOut });\n * count.set(100); // smoothly goes 0 → 100\n * count(); // current interpolated value\n * ```\n */\nexport function tweened<T>(\n initialValue: T,\n options: TweenedOptions<T> = {},\n): TweenedSignal<T> {\n const {\n duration = 400,\n easing = easings.cubicOut,\n interpolate = defaultInterpolate,\n delay = 0,\n } = options;\n\n const current = signal<T>(initialValue);\n const targetValue = signal<T>(initialValue);\n let rafId = 0;\n let running = false;\n\n const read = (() => current()) as TweenedSignal<T>;\n\n read.set = (value: T, overrides?: Partial<TweenedOptions<T>>): Promise<void> => {\n const dur = overrides?.duration ?? duration;\n const ease = overrides?.easing ?? easing;\n const interp = overrides?.interpolate ?? interpolate;\n const del = overrides?.delay ?? delay;\n\n const from = current();\n targetValue.set(value);\n\n if (dur === 0) {\n current.set(value);\n return Promise.resolve();\n }\n\n // Cancel any running animation\n if (running) {\n caf(rafId);\n running = false;\n }\n\n return new Promise<void>((resolve) => {\n const start = performance.now() + del;\n running = true;\n\n function tick(now: number): void {\n if (!running) { resolve(); return; }\n\n const elapsed = now - start;\n if (elapsed < 0) {\n rafId = raf(tick);\n return;\n }\n\n const t = Math.min(elapsed / dur, 1);\n const easedT = ease(t);\n current.set(interp(from, value, easedT));\n\n if (t < 1) {\n rafId = raf(tick);\n } else {\n running = false;\n resolve();\n }\n }\n\n rafId = raf(tick);\n });\n };\n\n read.setImmediate = (value: T): void => {\n if (running) { caf(rafId); running = false; }\n current.set(value);\n targetValue.set(value);\n };\n\n read.target = () => targetValue();\n\n return read;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function w(i){let P=typeof i=="function"?{loader:i}:i,{loader:C,loading:c,error:f,timeout:s,delay:y=200}=P,l=null,t=null,o=null;function A(){return t||(t=C().then(e=>{l=e.default;}).catch(e=>{o=e instanceof Error?e:new Error(String(e));}),t)}return chunkLSD7DEMV_cjs.s(e=>{let n=chunkHL2VGVJT_cjs.c("loading"),m=chunkHL2VGVJT_cjs.c(false);A().then(()=>{o?n.set("error"):n.set("ready");});let a=null;y>0?a=setTimeout(()=>m.set(true),y):m.set(true);let u=null;return s&&(u=setTimeout(()=>{n()==="loading"&&(o=new Error(`Async component timed out after ${s}ms`),n.set("error"));},s)),()=>{let r=n();return r!=="loading"&&(a&&clearTimeout(a),u&&clearTimeout(u)),r==="ready"&&l?l(e.props):r==="error"&&f&&o?chunkLSD7DEMV_cjs.l(f(o)):r==="loading"&&m()&&c?chunkLSD7DEMV_cjs.l(c()):document.createComment("async-loading")}})}exports.a=w;//# sourceMappingURL=chunk-UYJ4BAPL.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-UYJ4BAPL.cjs.map
|