@akashjs/runtime 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/a11y.cjs +2 -0
- package/dist/a11y.cjs.map +1 -0
- package/dist/a11y.d.cts +99 -0
- package/dist/a11y.d.ts +99 -0
- package/dist/a11y.js +2 -0
- package/dist/a11y.js.map +1 -0
- package/dist/async-component.cjs +2 -0
- package/dist/async-component.cjs.map +1 -0
- package/dist/async-component.d.cts +44 -0
- package/dist/async-component.d.ts +44 -0
- package/dist/async-component.js +2 -0
- package/dist/async-component.js.map +1 -0
- package/dist/await-block.cjs +2 -0
- package/dist/await-block.cjs.map +1 -0
- package/dist/await-block.d.cts +37 -0
- package/dist/await-block.d.ts +37 -0
- package/dist/await-block.js +2 -0
- package/dist/await-block.js.map +1 -0
- package/dist/browser.cjs +2 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +125 -0
- package/dist/browser.d.ts +125 -0
- package/dist/browser.js +2 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunk-2GGCZC4O.js +2 -0
- package/dist/chunk-2GGCZC4O.js.map +1 -0
- package/dist/chunk-2UATNCKC.js +2 -0
- package/dist/chunk-2UATNCKC.js.map +1 -0
- package/dist/chunk-2XFW6MT7.js +2 -0
- package/dist/chunk-2XFW6MT7.js.map +1 -0
- package/dist/chunk-34PQECMN.cjs +2 -0
- package/dist/chunk-34PQECMN.cjs.map +1 -0
- package/dist/chunk-3CD6A5YV.js +2 -0
- package/dist/chunk-3CD6A5YV.js.map +1 -0
- package/dist/chunk-3PCZFKBH.js +2 -0
- package/dist/chunk-3PCZFKBH.js.map +1 -0
- package/dist/chunk-3PGU24B5.cjs +3 -0
- package/dist/chunk-3PGU24B5.cjs.map +1 -0
- package/dist/chunk-3PLQPLVA.js +2 -0
- package/dist/chunk-3PLQPLVA.js.map +1 -0
- package/dist/chunk-3RDEFZMT.js +2 -0
- package/dist/chunk-3RDEFZMT.js.map +1 -0
- package/dist/chunk-3VYMJMAU.js +2 -0
- package/dist/chunk-3VYMJMAU.js.map +1 -0
- package/dist/chunk-3Y663FYJ.js +2 -0
- package/dist/chunk-3Y663FYJ.js.map +1 -0
- package/dist/chunk-45DPEU7T.cjs +2 -0
- package/dist/chunk-45DPEU7T.cjs.map +1 -0
- package/dist/chunk-4J3QBQVW.js +4 -0
- package/dist/chunk-4J3QBQVW.js.map +1 -0
- package/dist/chunk-4VLBY2BW.cjs +2 -0
- package/dist/chunk-4VLBY2BW.cjs.map +1 -0
- package/dist/chunk-5GDMAABU.js +2 -0
- package/dist/chunk-5GDMAABU.js.map +1 -0
- package/dist/chunk-5JKXREA2.cjs +2 -0
- package/dist/chunk-5JKXREA2.cjs.map +1 -0
- package/dist/chunk-5QCWH6QA.cjs +4 -0
- package/dist/chunk-5QCWH6QA.cjs.map +1 -0
- package/dist/chunk-637ENG3A.cjs +2 -0
- package/dist/chunk-637ENG3A.cjs.map +1 -0
- package/dist/chunk-66PLXQS3.js +2 -0
- package/dist/chunk-66PLXQS3.js.map +1 -0
- package/dist/chunk-6GY6HC75.cjs +2 -0
- package/dist/chunk-6GY6HC75.cjs.map +1 -0
- package/dist/chunk-6I5PPQ34.cjs +17 -0
- package/dist/chunk-6I5PPQ34.cjs.map +1 -0
- package/dist/chunk-6ZCFPR4O.js +2 -0
- package/dist/chunk-6ZCFPR4O.js.map +1 -0
- package/dist/chunk-7T4HMWUC.js +2 -0
- package/dist/{chunk-5A7KDBDU.js.map → chunk-7T4HMWUC.js.map} +1 -1
- package/dist/chunk-AOFLE33X.js +5 -0
- package/dist/chunk-AOFLE33X.js.map +1 -0
- package/dist/chunk-AQQQVDBQ.cjs +2 -0
- package/dist/chunk-AQQQVDBQ.cjs.map +1 -0
- package/dist/chunk-AXB5GHGO.js +2 -0
- package/dist/chunk-AXB5GHGO.js.map +1 -0
- package/dist/chunk-BHP3UTTQ.cjs +3 -0
- package/dist/chunk-BHP3UTTQ.cjs.map +1 -0
- package/dist/chunk-BLT7XOSX.cjs +2 -0
- package/dist/chunk-BLT7XOSX.cjs.map +1 -0
- package/dist/chunk-CDZR6GWB.js +2 -0
- package/dist/chunk-CDZR6GWB.js.map +1 -0
- package/dist/chunk-DFYXFKCH.cjs +2 -0
- package/dist/chunk-DFYXFKCH.cjs.map +1 -0
- package/dist/chunk-DP7G45QM.cjs +13 -0
- package/dist/chunk-DP7G45QM.cjs.map +1 -0
- package/dist/chunk-DWSIR5SL.cjs +2 -0
- package/dist/chunk-DWSIR5SL.cjs.map +1 -0
- package/dist/chunk-E6RB7PRO.js +2 -0
- package/dist/chunk-E6RB7PRO.js.map +1 -0
- package/dist/chunk-E7BPGVIS.js +2 -0
- package/dist/chunk-E7BPGVIS.js.map +1 -0
- package/dist/chunk-E7GAIKQT.cjs +2 -0
- package/dist/chunk-E7GAIKQT.cjs.map +1 -0
- package/dist/chunk-EEQZFKEG.js +2 -0
- package/dist/{chunk-TKFJGLUO.js.map → chunk-EEQZFKEG.js.map} +1 -1
- package/dist/chunk-EXKQPZ5N.cjs +2 -0
- package/dist/chunk-EXKQPZ5N.cjs.map +1 -0
- package/dist/{chunk-ZYVQQ5VR.cjs → chunk-F2F5OXCK.cjs} +3 -3
- package/dist/{chunk-ZYVQQ5VR.cjs.map → chunk-F2F5OXCK.cjs.map} +1 -1
- package/dist/chunk-F4FXIPR3.js +2 -0
- package/dist/chunk-F4FXIPR3.js.map +1 -0
- package/dist/chunk-GAAO2KXN.js +2 -0
- package/dist/chunk-GAAO2KXN.js.map +1 -0
- package/dist/chunk-GB7IUC6E.js +2 -0
- package/dist/chunk-GB7IUC6E.js.map +1 -0
- package/dist/chunk-GHSJ4B55.js +11 -0
- package/dist/chunk-GHSJ4B55.js.map +1 -0
- package/dist/{chunk-U53YRJNV.js → chunk-GRXHWCFR.js} +3 -3
- package/dist/{chunk-U53YRJNV.js.map → chunk-GRXHWCFR.js.map} +1 -1
- package/dist/chunk-HHPRQMGX.cjs +2 -0
- package/dist/chunk-HHPRQMGX.cjs.map +1 -0
- package/dist/chunk-HL2VGVJT.cjs +2 -0
- package/dist/chunk-HL2VGVJT.cjs.map +1 -0
- package/dist/chunk-IDTJWCYW.js +2 -0
- package/dist/chunk-IDTJWCYW.js.map +1 -0
- package/dist/chunk-IHEW6F2H.js +2 -0
- package/dist/chunk-IHEW6F2H.js.map +1 -0
- package/dist/chunk-IJS2EMSE.js +2 -0
- package/dist/chunk-IJS2EMSE.js.map +1 -0
- package/dist/chunk-IQGSDFBI.cjs +2 -0
- package/dist/chunk-IQGSDFBI.cjs.map +1 -0
- package/dist/chunk-JEYTB4AG.js +2 -0
- package/dist/chunk-JEYTB4AG.js.map +1 -0
- package/dist/chunk-JFLZJPVN.js +2 -0
- package/dist/chunk-JFLZJPVN.js.map +1 -0
- package/dist/chunk-JLPJ22CE.js +2 -0
- package/dist/chunk-JLPJ22CE.js.map +1 -0
- package/dist/chunk-JMY6E7VR.cjs +2 -0
- package/dist/chunk-JMY6E7VR.cjs.map +1 -0
- package/dist/chunk-K2HB5VFA.cjs +2 -0
- package/dist/chunk-K2HB5VFA.cjs.map +1 -0
- package/dist/chunk-K7TMUF3F.cjs +2 -0
- package/dist/chunk-K7TMUF3F.cjs.map +1 -0
- package/dist/chunk-KFMCMKSC.cjs +2 -0
- package/dist/chunk-KFMCMKSC.cjs.map +1 -0
- package/dist/chunk-KGV5MKBC.cjs +11 -0
- package/dist/chunk-KGV5MKBC.cjs.map +1 -0
- package/dist/chunk-KMEGUPH2.js +3 -0
- package/dist/chunk-KMEGUPH2.js.map +1 -0
- package/dist/chunk-KQAYFPJI.cjs +2 -0
- package/dist/chunk-KQAYFPJI.cjs.map +1 -0
- package/dist/chunk-LSD7DEMV.cjs +2 -0
- package/dist/chunk-LSD7DEMV.cjs.map +1 -0
- package/dist/{chunk-2U643GJZ.cjs → chunk-LTMDSGQ6.cjs} +2 -2
- package/dist/{chunk-2U643GJZ.cjs.map → chunk-LTMDSGQ6.cjs.map} +1 -1
- package/dist/chunk-LWQPLKL6.cjs +20 -0
- package/dist/chunk-LWQPLKL6.cjs.map +1 -0
- package/dist/{chunk-2Q6SYE5O.cjs → chunk-M2OWSNOM.cjs} +2 -2
- package/dist/{chunk-2Q6SYE5O.cjs.map → chunk-M2OWSNOM.cjs.map} +1 -1
- package/dist/chunk-MADMPRT2.js +20 -0
- package/dist/chunk-MADMPRT2.js.map +1 -0
- package/dist/chunk-MDHWM3C2.js +2 -0
- package/dist/chunk-MDHWM3C2.js.map +1 -0
- package/dist/chunk-MGFRVOM5.js +2 -0
- package/dist/chunk-MGFRVOM5.js.map +1 -0
- package/dist/chunk-MNUOIAXS.js +2 -0
- package/dist/chunk-MNUOIAXS.js.map +1 -0
- package/dist/chunk-ND2HZRMR.cjs +2 -0
- package/dist/chunk-ND2HZRMR.cjs.map +1 -0
- package/dist/chunk-NGU2W4PD.cjs +2 -0
- package/dist/chunk-NGU2W4PD.cjs.map +1 -0
- package/dist/chunk-NQEY7DR5.cjs +2 -0
- package/dist/chunk-NQEY7DR5.cjs.map +1 -0
- package/dist/chunk-O5OTZP5M.cjs +2 -0
- package/dist/chunk-O5OTZP5M.cjs.map +1 -0
- package/dist/chunk-OQV3NYDH.js +3 -0
- package/dist/chunk-OQV3NYDH.js.map +1 -0
- package/dist/chunk-P4USGNUK.cjs +2 -0
- package/dist/chunk-P4USGNUK.cjs.map +1 -0
- package/dist/chunk-P55EWYAD.js +2 -0
- package/dist/chunk-P55EWYAD.js.map +1 -0
- package/dist/chunk-PPNEAFKE.cjs +5 -0
- package/dist/chunk-PPNEAFKE.cjs.map +1 -0
- package/dist/chunk-PVIYD25D.js +2 -0
- package/dist/chunk-PVIYD25D.js.map +1 -0
- package/dist/chunk-PWJMCURK.cjs +2 -0
- package/dist/chunk-PWJMCURK.cjs.map +1 -0
- package/dist/chunk-QQTZQ6UX.cjs +2 -0
- package/dist/chunk-QQTZQ6UX.cjs.map +1 -0
- package/dist/chunk-QTQ6RUX4.cjs +5 -0
- package/dist/chunk-QTQ6RUX4.cjs.map +1 -0
- package/dist/chunk-SBDFBADL.cjs +2 -0
- package/dist/chunk-SBDFBADL.cjs.map +1 -0
- package/dist/chunk-SPS3LM47.cjs +2 -0
- package/dist/chunk-SPS3LM47.cjs.map +1 -0
- package/dist/chunk-SVNS64LE.js +5 -0
- package/dist/chunk-SVNS64LE.js.map +1 -0
- package/dist/chunk-SZDKDXRV.js +17 -0
- package/dist/chunk-SZDKDXRV.js.map +1 -0
- package/dist/chunk-T7A5YOEG.cjs +2 -0
- package/dist/chunk-T7A5YOEG.cjs.map +1 -0
- package/dist/chunk-U65WRXZC.js +13 -0
- package/dist/chunk-U65WRXZC.js.map +1 -0
- package/dist/chunk-UT4MWGJ3.js +2 -0
- package/dist/chunk-UT4MWGJ3.js.map +1 -0
- package/dist/chunk-UXHQ5OFW.js +2 -0
- package/dist/chunk-UXHQ5OFW.js.map +1 -0
- package/dist/chunk-UYJ4BAPL.cjs +2 -0
- package/dist/chunk-UYJ4BAPL.cjs.map +1 -0
- package/dist/chunk-VDHUPQDK.cjs +2 -0
- package/dist/chunk-VDHUPQDK.cjs.map +1 -0
- package/dist/chunk-VTD3TI3M.js +2 -0
- package/dist/chunk-VTD3TI3M.js.map +1 -0
- package/dist/chunk-VUMMC2P5.js +2 -0
- package/dist/chunk-VUMMC2P5.js.map +1 -0
- package/dist/chunk-VX7PSSOU.js +5 -0
- package/dist/chunk-VX7PSSOU.js.map +1 -0
- package/dist/chunk-WB7QDCEA.js +2 -0
- package/dist/{chunk-5NHDEY2C.js.map → chunk-WB7QDCEA.js.map} +1 -1
- package/dist/chunk-WLSXJU2N.js +13 -0
- package/dist/chunk-WLSXJU2N.js.map +1 -0
- package/dist/chunk-XAGYLTHV.js +2 -0
- package/dist/chunk-XAGYLTHV.js.map +1 -0
- package/dist/{chunk-AVVJKYT3.cjs → chunk-XE7JC7Y3.cjs} +2 -2
- package/dist/{chunk-AVVJKYT3.cjs.map → chunk-XE7JC7Y3.cjs.map} +1 -1
- package/dist/chunk-XMNDNTHK.cjs +5 -0
- package/dist/chunk-XMNDNTHK.cjs.map +1 -0
- package/dist/chunk-XOPRWJCX.cjs +2 -0
- package/dist/chunk-XOPRWJCX.cjs.map +1 -0
- package/dist/chunk-XPLIEN2G.cjs +13 -0
- package/dist/chunk-XPLIEN2G.cjs.map +1 -0
- package/dist/chunk-XRWOZO67.js +2 -0
- package/dist/chunk-XRWOZO67.js.map +1 -0
- package/dist/chunk-XZOP3IWH.cjs +2 -0
- package/dist/chunk-XZOP3IWH.cjs.map +1 -0
- package/dist/chunk-YG76TVFL.js +2 -0
- package/dist/chunk-YG76TVFL.js.map +1 -0
- package/dist/chunk-YQQDRDJ7.cjs +2 -0
- package/dist/chunk-YQQDRDJ7.cjs.map +1 -0
- package/dist/chunk-ZGE46DPV.cjs +2 -0
- package/dist/chunk-ZGE46DPV.cjs.map +1 -0
- package/dist/{component-C1WnFcRp.d.ts → component-CPVtkASo.d.ts} +2 -3
- package/dist/{component-C1WnFcRp.d.cts → component-CxlupKuc.d.cts} +2 -3
- package/dist/composables.cjs +2 -0
- package/dist/composables.cjs.map +1 -0
- package/dist/composables.d.cts +103 -0
- package/dist/composables.d.ts +103 -0
- package/dist/composables.js +2 -0
- package/dist/composables.js.map +1 -0
- package/dist/{context-CB1mCq2h.d.cts → context-Cwt7QCpk.d.cts} +1 -9
- package/dist/{context-CB1mCq2h.d.ts → context-Cwt7QCpk.d.ts} +1 -9
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +5 -4
- package/dist/core.d.ts +5 -4
- package/dist/core.js +1 -1
- package/dist/css.cjs +2 -0
- package/dist/css.cjs.map +1 -0
- package/dist/css.d.cts +42 -0
- package/dist/css.d.ts +42 -0
- package/dist/css.js +2 -0
- package/dist/css.js.map +1 -0
- package/dist/data-table.cjs +2 -0
- package/dist/data-table.cjs.map +1 -0
- package/dist/data-table.d.cts +97 -0
- package/dist/data-table.d.ts +97 -0
- package/dist/data-table.js +2 -0
- package/dist/data-table.js.map +1 -0
- package/dist/deep-signal.cjs +2 -0
- package/dist/deep-signal.cjs.map +1 -0
- package/dist/deep-signal.d.cts +48 -0
- package/dist/deep-signal.d.ts +48 -0
- package/dist/deep-signal.js +2 -0
- package/dist/deep-signal.js.map +1 -0
- package/dist/defer.cjs +2 -0
- package/dist/defer.cjs.map +1 -0
- package/dist/defer.d.cts +55 -0
- package/dist/defer.d.ts +55 -0
- package/dist/defer.js +2 -0
- package/dist/defer.js.map +1 -0
- package/dist/deprecation.cjs +2 -0
- package/dist/deprecation.cjs.map +1 -0
- package/dist/deprecation.d.cts +119 -0
- package/dist/deprecation.d.ts +119 -0
- package/dist/deprecation.js +2 -0
- package/dist/deprecation.js.map +1 -0
- package/dist/{devtools-overlay-CJWKBTP4.js → devtools-overlay-3PHULVP4.js} +3 -3
- package/dist/{devtools-overlay-CJWKBTP4.js.map → devtools-overlay-3PHULVP4.js.map} +1 -1
- package/dist/{devtools-overlay-EQ3G755P.cjs → devtools-overlay-SJV7WNNS.cjs} +4 -4
- package/dist/{devtools-overlay-EQ3G755P.cjs.map → devtools-overlay-SJV7WNNS.cjs.map} +1 -1
- package/dist/devtools.cjs +2 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +78 -0
- package/dist/devtools.d.ts +78 -0
- package/dist/devtools.js +2 -0
- package/dist/devtools.js.map +1 -0
- package/dist/di.cjs +2 -0
- package/dist/di.cjs.map +1 -0
- package/dist/di.d.cts +93 -0
- package/dist/di.d.ts +93 -0
- package/dist/di.js +2 -0
- package/dist/di.js.map +1 -0
- package/dist/directive.cjs +2 -0
- package/dist/directive.cjs.map +1 -0
- package/dist/directive.d.cts +102 -0
- package/dist/directive.d.ts +102 -0
- package/dist/directive.js +2 -0
- package/dist/directive.js.map +1 -0
- package/dist/error-boundary.cjs +2 -0
- package/dist/error-boundary.cjs.map +1 -0
- package/dist/error-boundary.d.cts +17 -0
- package/dist/error-boundary.d.ts +17 -0
- package/dist/error-boundary.js +2 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/error-hints.cjs +2 -0
- package/dist/error-hints.cjs.map +1 -0
- package/dist/error-hints.d.cts +17 -0
- package/dist/error-hints.d.ts +17 -0
- package/dist/error-hints.js +2 -0
- package/dist/error-hints.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +35 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-bus.cjs +2 -0
- package/dist/event-bus.cjs.map +1 -0
- package/dist/event-bus.d.cts +68 -0
- package/dist/event-bus.d.ts +68 -0
- package/dist/event-bus.js +2 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/event-modifiers.cjs +2 -0
- package/dist/event-modifiers.cjs.map +1 -0
- package/dist/event-modifiers.d.cts +130 -0
- package/dist/event-modifiers.d.ts +130 -0
- package/dist/event-modifiers.js +2 -0
- package/dist/event-modifiers.js.map +1 -0
- package/dist/flip.cjs +2 -0
- package/dist/flip.cjs.map +1 -0
- package/dist/flip.d.cts +66 -0
- package/dist/flip.d.ts +66 -0
- package/dist/flip.js +2 -0
- package/dist/flip.js.map +1 -0
- package/dist/head.cjs +2 -0
- package/dist/head.cjs.map +1 -0
- package/dist/head.d.cts +70 -0
- package/dist/head.d.ts +70 -0
- package/dist/head.js +2 -0
- package/dist/head.js.map +1 -0
- package/dist/hydration.cjs +2 -0
- package/dist/hydration.cjs.map +1 -0
- package/dist/hydration.d.cts +84 -0
- package/dist/hydration.d.ts +84 -0
- package/dist/hydration.js +2 -0
- package/dist/hydration.js.map +1 -0
- package/dist/image.cjs +2 -0
- package/dist/image.cjs.map +1 -0
- package/dist/image.d.cts +54 -0
- package/dist/image.d.ts +54 -0
- package/dist/image.js +2 -0
- package/dist/image.js.map +1 -0
- package/dist/index.cjs +1 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -3155
- package/dist/index.d.ts +50 -3155
- package/dist/index.js +1 -63
- package/dist/index.js.map +1 -1
- package/dist/infinite-scroll.cjs +2 -0
- package/dist/infinite-scroll.cjs.map +1 -0
- package/dist/infinite-scroll.d.cts +49 -0
- package/dist/infinite-scroll.d.ts +49 -0
- package/dist/infinite-scroll.js +2 -0
- package/dist/infinite-scroll.js.map +1 -0
- package/dist/leak-detector.cjs +2 -0
- package/dist/leak-detector.cjs.map +1 -0
- package/dist/leak-detector.d.cts +71 -0
- package/dist/leak-detector.d.ts +71 -0
- package/dist/leak-detector.js +2 -0
- package/dist/leak-detector.js.map +1 -0
- package/dist/machine.cjs +1 -1
- package/dist/machine.d.cts +1 -1
- package/dist/machine.d.ts +1 -1
- package/dist/machine.js +1 -1
- package/dist/offline.cjs +1 -1
- package/dist/offline.d.cts +1 -1
- package/dist/offline.d.ts +1 -1
- package/dist/offline.js +1 -1
- package/dist/perf.cjs +2 -0
- package/dist/perf.cjs.map +1 -0
- package/dist/perf.d.cts +97 -0
- package/dist/perf.d.ts +97 -0
- package/dist/perf.js +2 -0
- package/dist/perf.js.map +1 -0
- package/dist/pipes.cjs +2 -0
- package/dist/pipes.cjs.map +1 -0
- package/dist/pipes.d.cts +130 -0
- package/dist/pipes.d.ts +130 -0
- package/dist/pipes.js +2 -0
- package/dist/pipes.js.map +1 -0
- package/dist/plugin.cjs +2 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +70 -0
- package/dist/plugin.d.ts +70 -0
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -0
- package/dist/portal.cjs +2 -0
- package/dist/portal.cjs.map +1 -0
- package/dist/portal.d.cts +30 -0
- package/dist/portal.d.ts +30 -0
- package/dist/portal.js +2 -0
- package/dist/portal.js.map +1 -0
- package/dist/pwa.cjs +1 -1
- package/dist/pwa.d.cts +1 -1
- package/dist/pwa.d.ts +1 -1
- package/dist/pwa.js +1 -1
- package/dist/query-state.cjs +2 -0
- package/dist/query-state.cjs.map +1 -0
- package/dist/query-state.d.cts +82 -0
- package/dist/query-state.d.ts +82 -0
- package/dist/query-state.js +2 -0
- package/dist/query-state.js.map +1 -0
- package/dist/reconcile.cjs +2 -0
- package/dist/reconcile.cjs.map +1 -0
- package/dist/reconcile.d.cts +42 -0
- package/dist/reconcile.d.ts +42 -0
- package/dist/reconcile.js +2 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/scheduler-CKi1esN-.d.cts +9 -0
- package/dist/scheduler-CKi1esN-.d.ts +9 -0
- package/dist/security.cjs +2 -0
- package/dist/security.cjs.map +1 -0
- package/dist/security.d.cts +193 -0
- package/dist/security.d.ts +193 -0
- package/dist/security.js +2 -0
- package/dist/security.js.map +1 -0
- package/dist/seo.cjs +2 -0
- package/dist/seo.cjs.map +1 -0
- package/dist/seo.d.cts +118 -0
- package/dist/seo.d.ts +118 -0
- package/dist/seo.js +2 -0
- package/dist/seo.js.map +1 -0
- package/dist/{signals-C7XfOHHR.d.cts → signals-DionyGGY.d.cts} +7 -0
- package/dist/{signals-C7XfOHHR.d.ts → signals-DionyGGY.d.ts} +7 -0
- package/dist/snippets.cjs +2 -0
- package/dist/snippets.cjs.map +1 -0
- package/dist/snippets.d.cts +109 -0
- package/dist/snippets.d.ts +109 -0
- package/dist/snippets.js +2 -0
- package/dist/snippets.js.map +1 -0
- package/dist/ssg.cjs +2 -0
- package/dist/ssg.cjs.map +1 -0
- package/dist/ssg.d.cts +82 -0
- package/dist/ssg.d.ts +82 -0
- package/dist/ssg.js +2 -0
- package/dist/ssg.js.map +1 -0
- package/dist/ssr.cjs +1 -1
- package/dist/ssr.d.cts +2 -1
- package/dist/ssr.d.ts +2 -1
- package/dist/ssr.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.d.cts +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.js +1 -1
- package/dist/suspense.cjs +2 -0
- package/dist/suspense.cjs.map +1 -0
- package/dist/suspense.d.cts +36 -0
- package/dist/suspense.d.ts +36 -0
- package/dist/suspense.js +2 -0
- package/dist/suspense.js.map +1 -0
- package/dist/switch.cjs +2 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.d.cts +48 -0
- package/dist/switch.d.ts +48 -0
- package/dist/switch.js +2 -0
- package/dist/switch.js.map +1 -0
- package/dist/sync.cjs +1 -1
- package/dist/sync.d.cts +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +1 -1
- package/dist/test.cjs +2 -2
- package/dist/test.cjs.map +1 -1
- package/dist/test.d.cts +5 -4
- package/dist/test.d.ts +5 -4
- package/dist/test.js +2 -2
- package/dist/test.js.map +1 -1
- package/dist/theme.cjs +2 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +56 -0
- package/dist/theme.d.ts +56 -0
- package/dist/theme.js +2 -0
- package/dist/theme.js.map +1 -0
- package/dist/toast.cjs +2 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.d.cts +66 -0
- package/dist/toast.d.ts +66 -0
- package/dist/toast.js +2 -0
- package/dist/toast.js.map +1 -0
- package/dist/transition.cjs +2 -0
- package/dist/transition.cjs.map +1 -0
- package/dist/transition.d.cts +90 -0
- package/dist/transition.d.ts +90 -0
- package/dist/transition.js +2 -0
- package/dist/transition.js.map +1 -0
- package/dist/tweened.cjs +2 -0
- package/dist/tweened.cjs.map +1 -0
- package/dist/tweened.d.cts +59 -0
- package/dist/tweened.d.ts +59 -0
- package/dist/tweened.js +2 -0
- package/dist/tweened.js.map +1 -0
- package/dist/types-DjZCk1xT.d.cts +4 -0
- package/dist/types-DjZCk1xT.d.ts +4 -0
- package/dist/view-transition.cjs +2 -0
- package/dist/view-transition.cjs.map +1 -0
- package/dist/view-transition.d.cts +80 -0
- package/dist/view-transition.d.ts +80 -0
- package/dist/view-transition.js +2 -0
- package/dist/view-transition.js.map +1 -0
- package/dist/virtual-list.cjs +2 -0
- package/dist/virtual-list.cjs.map +1 -0
- package/dist/virtual-list.d.cts +67 -0
- package/dist/virtual-list.d.ts +67 -0
- package/dist/virtual-list.js +2 -0
- package/dist/virtual-list.js.map +1 -0
- package/dist/watch.cjs +2 -0
- package/dist/watch.cjs.map +1 -0
- package/dist/watch.d.cts +70 -0
- package/dist/watch.d.ts +70 -0
- package/dist/watch.js +2 -0
- package/dist/watch.js.map +1 -0
- package/dist/web-component.cjs +2 -0
- package/dist/web-component.cjs.map +1 -0
- package/dist/web-component.d.cts +51 -0
- package/dist/web-component.d.ts +51 -0
- package/dist/web-component.js +2 -0
- package/dist/web-component.js.map +1 -0
- package/package.json +249 -11
- package/dist/chunk-35DJOBEO.cjs +0 -2
- package/dist/chunk-35DJOBEO.cjs.map +0 -1
- package/dist/chunk-3GRR4VW2.js +0 -13
- package/dist/chunk-3GRR4VW2.js.map +0 -1
- package/dist/chunk-5A7KDBDU.js +0 -2
- package/dist/chunk-5NHDEY2C.js +0 -2
- package/dist/chunk-6GGYM5SF.cjs +0 -5
- package/dist/chunk-6GGYM5SF.cjs.map +0 -1
- package/dist/chunk-EEILP4OL.cjs +0 -13
- package/dist/chunk-EEILP4OL.cjs.map +0 -1
- package/dist/chunk-FTTNKDZQ.js +0 -5
- package/dist/chunk-FTTNKDZQ.js.map +0 -1
- package/dist/chunk-H2HNKYN2.js +0 -2
- package/dist/chunk-H2HNKYN2.js.map +0 -1
- package/dist/chunk-TKFJGLUO.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
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();}export{g as a,y as b,P as c,m as d,h as e};//# sourceMappingURL=chunk-JLPJ22CE.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-JLPJ22CE.js.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-JLPJ22CE.js","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,2 @@
|
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var k=chunkLSD7DEMV_cjs.s(u=>{let o=chunkHL2VGVJT_cjs.c(false),a=chunkHL2VGVJT_cjs.c(false);return ()=>{let{src:b,alt:y,width:s,height:i,loading:l="lazy",srcset:c,sizes:d,placeholder:v,blurDataUrl:p,class:m,fallbackSrc:f,onLoad:E,onError:w}=u.props,r=document.createElement("div");if(r.style.position="relative",r.style.display="inline-block",r.style.overflow="hidden",s&&(r.style.width=`${s}px`),i&&(r.style.height=`${i}px`),v==="blur"&&p&&!o()){let t=document.createElement("img");t.src=p,t.alt="",t.setAttribute("aria-hidden","true"),t.style.cssText="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);",r.appendChild(t);}let e=document.createElement("img");if(e.alt=y,e.loading=l,a()&&f?e.src=f:e.src=b,c&&(e.srcset=c),d&&(e.sizes=d),s&&(e.width=s),i&&(e.height=i),m&&(e.className=m),e.style.display="block",e.style.width="100%",e.style.height="auto",e.addEventListener("load",()=>{o.set(true),E?.();}),e.addEventListener("error",t=>{a.set(true),w?.(t);}),l==="lazy"&&typeof IntersectionObserver<"u"){e.setAttribute("data-src",e.src);let t=e.src;e.removeAttribute("src");let g=new IntersectionObserver(x=>{x[0].isIntersecting&&(e.src=t,g.disconnect());},{rootMargin:"200px"});requestAnimationFrame(()=>{e.parentElement?g.observe(e):e.src=t;});}return r.appendChild(e),r}});exports.a=k;//# sourceMappingURL=chunk-JMY6E7VR.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-JMY6E7VR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/image.ts"],"names":["Image","defineComponent","ctx","loaded","signal","errored","src","alt","width","height","loading","srcset","sizes","placeholder","blurDataUrl","className","fallbackSrc","onLoad","onErrorCb","wrapper","blur","img","e","actualSrc","observer","entries"],"mappings":"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","file":"chunk-JMY6E7VR.cjs","sourcesContent":["/**\n * <Image> component.\n *\n * Optimized image rendering with lazy loading, srcset/sizes,\n * blur placeholder, and error fallback.\n *\n * ```html\n * <Image\n * src=\"/photos/hero.jpg\"\n * alt=\"Hero image\"\n * width={800}\n * height={600}\n * placeholder=\"blur\"\n * blurDataUrl=\"data:image/jpeg;base64,...\"\n * srcset=\"/photos/hero-400.jpg 400w, /photos/hero-800.jpg 800w\"\n * sizes=\"(max-width: 600px) 400px, 800px\"\n * loading=\"lazy\"\n * />\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\n\n// --- Types ---\n\nexport interface ImageProps {\n /** Image source URL */\n src: string;\n /** Alt text (required for accessibility) */\n alt: string;\n /** Width in pixels */\n width?: number;\n /** Height in pixels */\n height?: number;\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager';\n /** Srcset for responsive images */\n srcset?: string;\n /** Sizes attribute for responsive images */\n sizes?: string;\n /** Placeholder strategy */\n placeholder?: 'blur' | 'empty';\n /** Base64 data URL for blur placeholder */\n blurDataUrl?: string;\n /** CSS class */\n class?: string;\n /** Error fallback image URL */\n fallbackSrc?: string;\n /** Callback when image loads */\n onLoad?: () => void;\n /** Callback when image fails to load */\n onError?: (error: Event) => void;\n}\n\n// --- Component ---\n\nexport const Image = defineComponent<ImageProps>((ctx) => {\n const loaded = signal(false);\n const errored = signal(false);\n\n return () => {\n const {\n src,\n alt,\n width,\n height,\n loading = 'lazy',\n srcset,\n sizes,\n placeholder,\n blurDataUrl,\n class: className,\n fallbackSrc,\n onLoad,\n onError: onErrorCb,\n } = ctx.props;\n\n // Wrapper for placeholder\n const wrapper = document.createElement('div');\n wrapper.style.position = 'relative';\n wrapper.style.display = 'inline-block';\n wrapper.style.overflow = 'hidden';\n if (width) wrapper.style.width = `${width}px`;\n if (height) wrapper.style.height = `${height}px`;\n\n // Blur placeholder\n if (placeholder === 'blur' && blurDataUrl && !loaded()) {\n const blur = document.createElement('img');\n blur.src = blurDataUrl;\n blur.alt = '';\n blur.setAttribute('aria-hidden', 'true');\n blur.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);';\n wrapper.appendChild(blur);\n }\n\n // Main image\n const img = document.createElement('img');\n img.alt = alt;\n img.loading = loading;\n\n if (errored() && fallbackSrc) {\n img.src = fallbackSrc;\n } else {\n img.src = src;\n }\n\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (width) img.width = width;\n if (height) img.height = height;\n if (className) img.className = className;\n\n img.style.display = 'block';\n img.style.width = '100%';\n img.style.height = 'auto';\n\n img.addEventListener('load', () => {\n loaded.set(true);\n onLoad?.();\n });\n\n img.addEventListener('error', (e) => {\n errored.set(true);\n onErrorCb?.(e);\n });\n\n // Intersection Observer for lazy loading (fallback for browsers without native lazy)\n if (loading === 'lazy' && typeof IntersectionObserver !== 'undefined') {\n img.setAttribute('data-src', img.src);\n const actualSrc = img.src;\n img.removeAttribute('src');\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n img.src = actualSrc;\n observer.disconnect();\n }\n },\n { rootMargin: '200px' },\n );\n\n // Observe after appended to DOM\n requestAnimationFrame(() => {\n if (img.parentElement) {\n observer.observe(img);\n } else {\n // Fallback: set src immediately\n img.src = actualSrc;\n }\n });\n }\n\n wrapper.appendChild(img);\n return wrapper;\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var r=false,t=null;function m(){return r}function c(e){let{container:n,component:o,props:i={}}=e;r=true,t=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);try{o(i);}finally{r=false,t=null;}return ()=>{}}function y(e){if(!r||!t)return null;let n=t.nextNode();for(;n;){if(n instanceof HTMLElement&&n.tagName.toLowerCase()===e.toLowerCase())return n;n=t.nextNode();}return null}function H(){if(!r||!t)return null;let e=t.nextNode();for(;e;){if(e instanceof Text)return e;e=t.nextNode();}return null}function T(e){let{target:n,component:o,props:i,rootMargin:p="200px"}=e;if(typeof IntersectionObserver>"u")return c({container:n,component:o,props:i});let s=false,l=new IntersectionObserver(d=>{for(let u of d)u.isIntersecting&&!s&&(l.disconnect(),c({container:n,component:o,props:i}));},{rootMargin:p});return l.observe(n),()=>{s=true,l.disconnect();}}var f="data-akash-hydrate";function x(e=document.body){return Array.from(e.querySelectorAll(`[${f}]`))}exports.a=m;exports.b=c;exports.c=y;exports.d=H;exports.e=T;exports.f=f;exports.g=x;//# sourceMappingURL=chunk-K2HB5VFA.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-K2HB5VFA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hydration.ts"],"names":["isHydrating","hydrateWalker","isHydrationActive","hydrate","options","container","component","props","claimElement","tag","node","claimText","progressiveHydrate","target","rootMargin","disposed","observer","entries","entry","HYDRATE_ATTR","findHydrationBoundaries","root"],"mappings":"aAiBA,IAAIA,CAAAA,CAAc,KAAA,CAEdC,CAAAA,CAAmC,KAGhC,SAASC,CAAAA,EAA6B,CAC3C,OAAOF,CACT,CA8BO,SAASG,CAAAA,CAAQC,CAAAA,CAAqC,CAC3D,GAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAQ,EAAG,CAAA,CAAIH,EAE7CJ,CAAAA,CAAc,IAAA,CAIdC,CAAAA,CAAgB,QAAA,CAAS,iBACvBI,CAAAA,CACA,UAAA,CAAW,YAAA,CAAe,UAAA,CAAW,SACvC,CAAA,CAEA,GAAI,CAGFC,CAAAA,CAAUC,CAAY,EACxB,CAAA,OAAE,CACAP,CAAAA,CAAc,KAAA,CAEdC,CAAAA,CAAgB,KAClB,CAEA,OAAO,IAAM,CAEb,CACF,CAMO,SAASO,CAAAA,CAAaC,CAAAA,CAAiC,CAC5D,GAAI,CAACT,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,KAE3C,IAAIS,CAAAA,CAAOT,CAAAA,CAAc,QAAA,EAAS,CAClC,KAAOS,CAAAA,EAAM,CACX,GACEA,CAAAA,YAAgB,WAAA,EAChBA,CAAAA,CAAK,OAAA,CAAQ,WAAA,KAAkBD,CAAAA,CAAI,WAAA,EAAY,CAE/C,OAAOC,CAAAA,CAETA,CAAAA,CAAOT,EAAc,QAAA,GACvB,CAEA,OAAO,IACT,CAKO,SAASU,CAAAA,EAAyB,CACvC,GAAI,CAACX,CAAAA,EAAe,CAACC,CAAAA,CAAe,OAAO,IAAA,CAE3C,IAAIS,CAAAA,CAAOT,CAAAA,CAAc,QAAA,EAAS,CAClC,KAAOS,CAAAA,EAAM,CACX,GAAIA,CAAAA,YAAgB,IAAA,CAClB,OAAOA,EAETA,CAAAA,CAAOT,CAAAA,CAAc,QAAA,GACvB,CAEA,OAAO,IACT,CA6BO,SAASW,CAAAA,CAAmBR,CAAAA,CAAgD,CACjF,GAAM,CAAE,MAAA,CAAAS,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAO,EAAa,OAAQ,CAAA,CAAIV,CAAAA,CAE3D,GAAI,OAAO,oBAAA,CAAyB,IAElC,OAAOD,CAAAA,CAAQ,CAAE,SAAA,CAAWU,CAAAA,CAAQ,SAAA,CAAAP,EAAW,KAAA,CAAAC,CAAM,CAAC,CAAA,CAGxD,IAAIQ,CAAAA,CAAW,KAAA,CAETC,CAAAA,CAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACX,IAAA,IAAWC,CAAAA,IAASD,EACdC,CAAAA,CAAM,cAAA,EAAkB,CAACH,CAAAA,GAC3BC,CAAAA,CAAS,UAAA,GACTb,CAAAA,CAAQ,CAAE,SAAA,CAAWU,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,MAAAC,CAAM,CAAC,CAAA,EAGrD,CAAA,CACA,CAAE,UAAA,CAAAO,CAAW,CACf,CAAA,CAEA,OAAAE,CAAAA,CAAS,OAAA,CAAQH,CAAM,CAAA,CAEhB,IAAM,CACXE,CAAAA,CAAW,IAAA,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,CAKO,IAAMG,CAAAA,CAAe,qBAKrB,SAASC,CAAAA,CACdC,EAAoB,QAAA,CAAS,IAAA,CACd,CACf,OAAO,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAK,gBAAA,CAA8B,CAAA,CAAA,EAAIF,CAAY,CAAA,CAAA,CAAG,CAAC,CAC3E","file":"chunk-K2HB5VFA.cjs","sourcesContent":["/**\n * Client-side hydration.\n *\n * After SSR delivers HTML, the client needs to \"hydrate\" —\n * walk the existing DOM, attach signal effects, and make it interactive.\n * No new DOM nodes are created during hydration.\n *\n * Supports progressive hydration via IntersectionObserver:\n * components hydrate lazily when they enter the viewport.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Hydration state ---\n\nlet isHydrating = false;\nlet hydrateRoot: Node | null = null;\nlet hydrateWalker: TreeWalker | null = null;\n\n/** Check if we're currently hydrating (vs. fresh rendering) */\nexport function isHydrationActive(): boolean {\n return isHydrating;\n}\n\n// --- Hydration context ---\n\nexport interface HydrateOptions {\n /** The root DOM element (rendered by SSR) */\n container: HTMLElement;\n /** The root component to hydrate */\n component: Component<any>;\n /** Props to pass to the root component */\n props?: Record<string, unknown>;\n}\n\n/**\n * Hydrate a server-rendered DOM tree.\n *\n * Walks the existing DOM instead of creating new nodes,\n * attaching signal effects to existing elements.\n *\n * ```ts\n * import { hydrate } from '@akashjs/runtime';\n * import App from './App.akash';\n *\n * hydrate({\n * container: document.getElementById('app')!,\n * component: App,\n * props: { title: 'Home' },\n * });\n * ```\n */\nexport function hydrate(options: HydrateOptions): () => void {\n const { container, component, props = {} } = options;\n\n isHydrating = true;\n hydrateRoot = container;\n\n // Create a tree walker to traverse the existing DOM\n hydrateWalker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n );\n\n try {\n // Run the component — during hydration, DOM creation helpers\n // will claim existing nodes instead of creating new ones\n component(props as any);\n } finally {\n isHydrating = false;\n hydrateRoot = null;\n hydrateWalker = null;\n }\n\n return () => {\n // Cleanup — dispose all hydration effects\n };\n}\n\n/**\n * Claim the next DOM node during hydration.\n * Instead of creating a new element, returns the existing one.\n */\nexport function claimElement(tag: string): HTMLElement | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === tag.toLowerCase()\n ) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n/**\n * Claim the next text node during hydration.\n */\nexport function claimText(): Text | null {\n if (!isHydrating || !hydrateWalker) return null;\n\n let node = hydrateWalker.nextNode();\n while (node) {\n if (node instanceof Text) {\n return node;\n }\n node = hydrateWalker.nextNode();\n }\n\n return null;\n}\n\n// --- Progressive hydration ---\n\nexport interface ProgressiveHydrateOptions {\n /** CSS selector or element to observe */\n target: HTMLElement;\n /** Component to hydrate when visible */\n component: Component<any>;\n /** Props */\n props?: Record<string, unknown>;\n /** IntersectionObserver root margin (default: '200px') */\n rootMargin?: string;\n}\n\n/**\n * Hydrate a component lazily when it enters the viewport.\n *\n * Uses IntersectionObserver to detect when the SSR placeholder\n * becomes visible, then runs full hydration.\n *\n * ```ts\n * progressiveHydrate({\n * target: document.querySelector('[data-hydrate=\"comments\"]')!,\n * component: Comments,\n * props: { postId: 123 },\n * });\n * ```\n */\nexport function progressiveHydrate(options: ProgressiveHydrateOptions): () => void {\n const { target, component, props, rootMargin = '200px' } = options;\n\n if (typeof IntersectionObserver === 'undefined') {\n // Fallback: hydrate immediately if IO is not available\n return hydrate({ container: target, component, props });\n }\n\n let disposed = false;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !disposed) {\n observer.disconnect();\n hydrate({ container: target, component, props });\n }\n }\n },\n { rootMargin },\n );\n\n observer.observe(target);\n\n return () => {\n disposed = true;\n observer.disconnect();\n };\n}\n\n// --- Hydrate boundary marker ---\n\n/** Data attribute used to mark hydration boundaries in SSR HTML */\nexport const HYDRATE_ATTR = 'data-akash-hydrate';\n\n/**\n * Find all hydration boundaries in the document.\n */\nexport function findHydrationBoundaries(\n root: HTMLElement = document.body,\n): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(`[${HYDRATE_ATTR}]`));\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';function l(n,t,...r){if(r.length>0&&r.every(e=>typeof e=="function")){let e=t(n);for(let i of r)e=i(e);return e}return t(n,...r)}function f(...n){return (t,...r)=>{let e=t;for(let i of n)e=i(e,...r);return e}}function y(n){return n}var F=n=>String(n).toUpperCase(),d=n=>String(n).toLowerCase(),b=n=>{let t=String(n);return t.charAt(0).toUpperCase()+t.slice(1)},T=n=>String(n).replace(/\b\w/g,t=>t.toUpperCase()),h=n=>String(n).trim(),x=(n,t=50,r="...")=>{let e=String(n);return e.length<=t?e:e.slice(0,t-r.length)+r},P=(n,t="medium",r)=>{let e=n instanceof Date?n:new Date(n);if(isNaN(e.getTime()))return String(n);if(t==="iso")return e.toISOString();let i=r??"en-US",o={short:{year:"2-digit",month:"numeric",day:"numeric"},medium:{year:"numeric",month:"numeric",day:"numeric"},long:{year:"numeric",month:"long",day:"numeric"},full:{weekday:"long",year:"numeric",month:"long",day:"numeric"},time:{hour:"numeric",minute:"2-digit"}};return new Intl.DateTimeFormat(i,o[t]).format(e)},I=(n,t="USD",r)=>new Intl.NumberFormat(r??"en-US",{style:"currency",currency:t}).format(Number(n)),S=(n,t,r)=>{let e={};if(t){let[i,o]=t.split("-").map(Number);e.minimumFractionDigits=i,e.maximumFractionDigits=o??i;}return new Intl.NumberFormat(r??"en-US",e).format(Number(n))},D=(n,t=0,r)=>new Intl.NumberFormat(r??"en-US",{style:"percent",minimumFractionDigits:t,maximumFractionDigits:t}).format(Number(n)),w=(n,t=2)=>JSON.stringify(n,null,t),N=(n,t,r)=>{let e=r??`${t}s`;return `${n} ${n===1?t:e}`},U=(n,t)=>{let e=(n instanceof Date?n.getTime():Number(n))-Date.now(),i=Math.abs(e),o=[[6e4,"second"],[36e5,"minute"],[864e5,"hour"],[2592e6,"day"],[31536e6,"month"],[1/0,"year"]],a={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},s="second";for(let[p,g]of o)if(i<p){s=g;break}let m=Math.round(e/a[s]);if(typeof Intl<"u"&&Intl.RelativeTimeFormat)return new Intl.RelativeTimeFormat(t??"en",{numeric:"auto"}).format(m,s);let u=Math.abs(m),c=m<0?"ago":"from now";return `${u} ${s}${u!==1?"s":""} ${c}`};exports.a=l;exports.b=f;exports.c=y;exports.d=F;exports.e=d;exports.f=b;exports.g=T;exports.h=h;exports.i=x;exports.j=P;exports.k=I;exports.l=S;exports.m=D;exports.n=w;exports.o=N;exports.p=U;//# sourceMappingURL=chunk-K7TMUF3F.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-K7TMUF3F.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pipes.ts"],"names":["pipe","value","transform","rest","a","result","fn","chain","pipes","args","p","definePipe","uppercase","lowercase","capitalize","s","titleCase","c","trim","truncate","maxLength","suffix","date","format","locale","d","loc","options","currency","currencyCode","number","digitsInfo","opts","min","max","percent","decimals","json","indent","plural","singular","pluralForm","relativeTime","diff","absDiff","units","divisors","unit","threshold","u","n","abs"],"mappings":"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","file":"chunk-K7TMUF3F.cjs","sourcesContent":["/**\n * Pipes — template transform functions.\n *\n * Pure functions that transform display values. Chainable, memoized,\n * and usable both in templates and in script.\n *\n * ```ts\n * import { pipe, uppercase, date, currency } from '@akashjs/runtime';\n *\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(1234.5, currency, 'USD'); // '$1,234.50'\n * pipe('hello world', capitalize, truncate, 5); // 'Hello...'\n * ```\n */\n\n// =========================================================================\n// Pipe type and runner\n// =========================================================================\n\nexport type PipeFn<TIn = any, TOut = any> = (value: TIn, ...args: any[]) => TOut;\n\n/**\n * Apply a pipe transform to a value.\n *\n * ```ts\n * pipe('hello', uppercase); // 'HELLO'\n * pipe(1234, currency, 'USD'); // '$1,234.00'\n * ```\n */\nexport function pipe(value: any, transform: Function, ...rest: any[]): any {\n // If all remaining args are functions, chain them: pipe(5, fn1, fn2, fn3)\n if (rest.length > 0 && rest.every(a => typeof a === 'function')) {\n let result = transform(value);\n for (const fn of rest) {\n result = fn(result);\n }\n return result;\n }\n // Otherwise, pass extra args to the transform: pipe('hello', truncate, 5)\n return transform(value, ...rest);\n}\n\n/**\n * Chain multiple pipes together.\n *\n * ```ts\n * const format = chain(trim, capitalize, truncate);\n * format(' hello world ', 10); // 'Hello w...'\n * ```\n */\nexport function chain<T>(...pipes: PipeFn[]): PipeFn<T, any> {\n return (value: T, ...args: any[]) => {\n let result: any = value;\n for (const p of pipes) {\n result = p(result, ...args);\n }\n return result;\n };\n}\n\n/**\n * Define a custom pipe.\n *\n * ```ts\n * const reverse = definePipe<string, string>((value) =>\n * value.split('').reverse().join('')\n * );\n * pipe('hello', reverse); // 'olleh'\n * ```\n */\nexport function definePipe<TIn, TOut>(fn: PipeFn<TIn, TOut>): PipeFn<TIn, TOut> {\n return fn;\n}\n\n// =========================================================================\n// Built-in pipes\n// =========================================================================\n\n/** Convert string to uppercase */\nexport const uppercase: PipeFn<string, string> = (value) => String(value).toUpperCase();\n\n/** Convert string to lowercase */\nexport const lowercase: PipeFn<string, string> = (value) => String(value).toLowerCase();\n\n/** Capitalize first letter */\nexport const capitalize: PipeFn<string, string> = (value) => {\n const s = String(value);\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\n/** Title case — capitalize each word */\nexport const titleCase: PipeFn<string, string> = (value) => {\n return String(value).replace(/\\b\\w/g, (c) => c.toUpperCase());\n};\n\n/** Trim whitespace */\nexport const trim: PipeFn<string, string> = (value) => String(value).trim();\n\n/**\n * Truncate string to a max length, adding ellipsis.\n *\n * ```ts\n * pipe('Hello World', truncate, 8); // 'Hello...'\n * ```\n */\nexport const truncate: PipeFn<string, string> = (value, maxLength: number = 50, suffix = '...') => {\n const s = String(value);\n if (s.length <= maxLength) return s;\n return s.slice(0, maxLength - suffix.length) + suffix;\n};\n\n/**\n * Format a date.\n *\n * ```ts\n * pipe(new Date(), date); // '3/29/2026'\n * pipe(new Date(), date, 'short'); // '3/29/26'\n * pipe(new Date(), date, 'long'); // 'March 29, 2026'\n * pipe(new Date(), date, 'time'); // '2:30 PM'\n * pipe(new Date(), date, 'iso'); // '2026-03-29T...'\n * ```\n */\nexport const date: PipeFn<Date | string | number, string> = (\n value,\n format: 'short' | 'medium' | 'long' | 'full' | 'time' | 'iso' = 'medium',\n locale?: string,\n) => {\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return String(value);\n\n if (format === 'iso') return d.toISOString();\n\n const loc = locale ?? 'en-US';\n\n const options: Record<string, Intl.DateTimeFormatOptions> = {\n short: { year: '2-digit', month: 'numeric', day: 'numeric' },\n medium: { year: 'numeric', month: 'numeric', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n time: { hour: 'numeric', minute: '2-digit' },\n };\n\n return new Intl.DateTimeFormat(loc, options[format]).format(d);\n};\n\n/**\n * Format a number as currency.\n *\n * ```ts\n * pipe(1234.5, currency); // '$1,234.50'\n * pipe(1234.5, currency, 'EUR'); // '€1,234.50'\n * ```\n */\nexport const currency: PipeFn<number, string> = (value, currencyCode = 'USD', locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'currency',\n currency: currencyCode,\n }).format(Number(value));\n};\n\n/**\n * Format a number with locale formatting.\n *\n * ```ts\n * pipe(1234567.89, number); // '1,234,567.89'\n * pipe(1234567.89, number, '0-2'); // '1,234,567.89' (0-2 decimal digits)\n * ```\n */\nexport const number: PipeFn<number, string> = (value, digitsInfo?: string, locale?: string) => {\n const opts: Intl.NumberFormatOptions = {};\n if (digitsInfo) {\n const [min, max] = digitsInfo.split('-').map(Number);\n opts.minimumFractionDigits = min;\n opts.maximumFractionDigits = max ?? min;\n }\n return new Intl.NumberFormat(locale ?? 'en-US', opts).format(Number(value));\n};\n\n/**\n * Format a number as a percentage.\n *\n * ```ts\n * pipe(0.85, percent); // '85%'\n * pipe(0.856, percent); // '86%'\n * ```\n */\nexport const percent: PipeFn<number, string> = (value, decimals = 0, locale?: string) => {\n return new Intl.NumberFormat(locale ?? 'en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(Number(value));\n};\n\n/**\n * JSON stringify with formatting.\n *\n * ```ts\n * pipe({ a: 1 }, json); // '{\\n \"a\": 1\\n}'\n * pipe({ a: 1 }, json, 0); // '{\"a\":1}'\n * ```\n */\nexport const json: PipeFn<unknown, string> = (value, indent = 2) => {\n return JSON.stringify(value, null, indent);\n};\n\n/**\n * Pluralize a string based on count.\n *\n * ```ts\n * pipe(1, plural, 'item', 'items'); // '1 item'\n * pipe(5, plural, 'item', 'items'); // '5 items'\n * ```\n */\nexport const plural: PipeFn<number, string> = (value, singular: string, pluralForm?: string) => {\n const p = pluralForm ?? `${singular}s`;\n return `${value} ${value === 1 ? singular : p}`;\n};\n\n/**\n * Relative time formatting.\n *\n * ```ts\n * pipe(Date.now() - 60000, relativeTime); // '1 minute ago'\n * ```\n */\nexport const relativeTime: PipeFn<Date | number, string> = (value, locale?: string) => {\n const d = value instanceof Date ? value.getTime() : Number(value);\n const diff = d - Date.now();\n const absDiff = Math.abs(diff);\n\n const units: Array<[number, Intl.RelativeTimeFormatUnit]> = [\n [60000, 'second'],\n [3600000, 'minute'],\n [86400000, 'hour'],\n [2592000000, 'day'],\n [31536000000, 'month'],\n [Infinity, 'year'],\n ];\n\n const divisors: Record<string, number> = {\n second: 1000, minute: 60000, hour: 3600000,\n day: 86400000, month: 2592000000, year: 31536000000,\n };\n\n let unit: Intl.RelativeTimeFormatUnit = 'second';\n for (const [threshold, u] of units) {\n if (absDiff < threshold) { unit = u; break; }\n }\n\n const n = Math.round(diff / divisors[unit]);\n\n if (typeof Intl !== 'undefined' && Intl.RelativeTimeFormat) {\n return new Intl.RelativeTimeFormat(locale ?? 'en', { numeric: 'auto' }).format(n, unit);\n }\n\n const abs = Math.abs(n);\n const suffix = n < 0 ? 'ago' : 'from now';\n return `${abs} ${unit}${abs !== 1 ? 's' : ''} ${suffix}`;\n};\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function T(s={}){let{themes:i={light:{},dark:{}},storageKey:t="akash-theme",attribute:f="data-theme",syncSystem:g=true}=s,o=Object.keys(i);function d(){return typeof window>"u"?s.defaultTheme??"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function h(){if(typeof window<"u"&&t){let e=localStorage.getItem(t);if(e&&o.includes(e))return e}return s.defaultTheme??d()}let n=chunkHL2VGVJT_cjs.c(h()),a=chunkHL2VGVJT_cjs.d(()=>n()==="dark");function y(e){if(typeof document>"u")return;document.documentElement.setAttribute(f,e);let r=i[e];if(r)for(let[m,p]of Object.entries(r))document.documentElement.style.setProperty(m,p);document.documentElement.classList.remove(...o),document.documentElement.classList.add(e);}return chunkHL2VGVJT_cjs.e(()=>{let e=n();y(e),typeof window<"u"&&t&&localStorage.setItem(t,e);}),g&&typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",r=>{localStorage.getItem(t)||n.set(r.matches?"dark":"light");}),{current:()=>n(),isDark:a,set(e){o.includes(e)&&n.set(e);},toggle(){n.set(a()?"light":"dark");},setSystem(){typeof window<"u"&&t&&localStorage.removeItem(t),n.set(d());},themes:o}}exports.a=T;//# sourceMappingURL=chunk-KFMCMKSC.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-KFMCMKSC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme.ts"],"names":["useTheme","config","themes","storageKey","attribute","syncSystem","themeNames","getSystemTheme","getInitialTheme","stored","current","signal","isDark","computed","applyTheme","name","vars","key","value","effect","e","theme"],"mappings":"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","file":"chunk-KFMCMKSC.cjs","sourcesContent":["/**\n * Theme / dark mode system.\n *\n * Signal-based theme management with system preference detection,\n * CSS variable injection, and localStorage persistence.\n *\n * ```ts\n * const theme = useTheme({\n * themes: {\n * light: { '--bg': '#fff', '--text': '#111' },\n * dark: { '--bg': '#111', '--text': '#eee' },\n * },\n * });\n *\n * theme.current(); // 'light' or 'dark'\n * theme.toggle(); // switch between light/dark\n * theme.set('dark'); // set explicitly\n * theme.isDark(); // boolean\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ThemeVariables = Record<string, string>;\n\nexport interface ThemeConfig {\n /** Theme definitions (name → CSS variables) */\n themes?: Record<string, ThemeVariables>;\n /** Default theme name (default: auto-detect from system) */\n defaultTheme?: string;\n /** localStorage key for persistence (default: 'akash-theme') */\n storageKey?: string;\n /** CSS attribute to set on <html> (default: 'data-theme') */\n attribute?: string;\n /** Whether to sync with system preference (default: true) */\n syncSystem?: boolean;\n}\n\nexport interface Theme {\n /** Current theme name (reactive) */\n current: ReadonlySignal<string>;\n /** Whether dark mode is active */\n isDark: ReadonlySignal<boolean>;\n /** Set a specific theme */\n set(theme: string): void;\n /** Toggle between light and dark */\n toggle(): void;\n /** Set the system preference strategy */\n setSystem(): void;\n /** Available theme names */\n themes: string[];\n}\n\n// --- Implementation ---\n\n/**\n * Create a theme manager with system preference detection and persistence.\n */\nexport function useTheme(config: ThemeConfig = {}): Theme {\n const {\n themes = {\n light: {},\n dark: {},\n },\n storageKey = 'akash-theme',\n attribute = 'data-theme',\n syncSystem = true,\n } = config;\n\n const themeNames = Object.keys(themes);\n\n // Detect system preference\n function getSystemTheme(): string {\n if (typeof window === 'undefined') return config.defaultTheme ?? 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Read persisted theme or use default\n function getInitialTheme(): string {\n if (typeof window !== 'undefined' && storageKey) {\n const stored = localStorage.getItem(storageKey);\n if (stored && themeNames.includes(stored)) return stored;\n }\n return config.defaultTheme ?? getSystemTheme();\n }\n\n const current = signal(getInitialTheme());\n const isDark = computed(() => current() === 'dark');\n\n // Apply theme\n function applyTheme(name: string): void {\n if (typeof document === 'undefined') return;\n\n // Set attribute on <html>\n document.documentElement.setAttribute(attribute, name);\n\n // Apply CSS variables\n const vars = themes[name];\n if (vars) {\n for (const [key, value] of Object.entries(vars)) {\n document.documentElement.style.setProperty(key, value);\n }\n }\n\n // Add/remove class for convenience\n document.documentElement.classList.remove(...themeNames);\n document.documentElement.classList.add(name);\n }\n\n // React to theme changes\n effect(() => {\n const name = current();\n applyTheme(name);\n\n // Persist\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.setItem(storageKey, name);\n }\n });\n\n // Sync with system preference changes\n if (syncSystem && typeof window !== 'undefined') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.addEventListener('change', (e) => {\n // Only auto-switch if user hasn't manually overridden\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n current.set(e.matches ? 'dark' : 'light');\n }\n });\n }\n\n return {\n current: () => current(),\n isDark,\n set(theme: string) {\n if (themeNames.includes(theme)) {\n current.set(theme);\n }\n },\n toggle() {\n current.set(isDark() ? 'light' : 'dark');\n },\n setSystem() {\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n current.set(getSystemTheme());\n },\n themes: themeNames,\n };\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';var chunkXMNDNTHK_cjs=require('./chunk-XMNDNTHK.cjs');function o(t){let r=Array.isArray(t)?t:[t];for(let e of r){let n={"@context":"https://schema.org",...e};chunkXMNDNTHK_cjs.c({script:[{type:"application/ld+json",innerHTML:JSON.stringify(n)}]});}}function s(t){let r=[{property:"og:title",content:t.title}];t.description&&r.push({property:"og:description",content:t.description}),t.image&&r.push({property:"og:image",content:t.image}),t.url&&r.push({property:"og:url",content:t.url}),t.type&&r.push({property:"og:type",content:t.type}),t.siteName&&r.push({property:"og:site_name",content:t.siteName}),t.locale&&r.push({property:"og:locale",content:t.locale}),chunkXMNDNTHK_cjs.c({meta:r});}function p(t){let r=[{name:"twitter:title",content:t.title}];t.card&&r.push({name:"twitter:card",content:t.card}),t.description&&r.push({name:"twitter:description",content:t.description}),t.image&&r.push({name:"twitter:image",content:t.image}),t.site&&r.push({name:"twitter:site",content:t.site}),t.creator&&r.push({name:"twitter:creator",content:t.creator}),chunkXMNDNTHK_cjs.c({meta:r});}function c(t){let r=[];t.description&&r.push({name:"description",content:t.description}),t.robots&&r.push({name:"robots",content:t.robots});let e=[];t.canonical&&e.push({rel:"canonical",href:t.canonical}),chunkXMNDNTHK_cjs.c({title:t.title,meta:r,link:e}),t.openGraph&&s(t.openGraph),t.twitter&&p(t.twitter),t.structuredData&&o(t.structuredData);}function u(t,r){let e=`<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
`;e+=`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
+
`;for(let n of r)e+=` <url>
|
|
4
|
+
`,e+=` <loc>${t}${n.url}</loc>
|
|
5
|
+
`,n.lastmod&&(e+=` <lastmod>${n.lastmod}</lastmod>
|
|
6
|
+
`),n.changefreq&&(e+=` <changefreq>${n.changefreq}</changefreq>
|
|
7
|
+
`),n.priority!=null&&(e+=` <priority>${n.priority}</priority>
|
|
8
|
+
`),e+=` </url>
|
|
9
|
+
`;return e+=`</urlset>
|
|
10
|
+
`,e}exports.a=o;exports.b=s;exports.c=p;exports.d=c;exports.e=u;//# sourceMappingURL=chunk-KGV5MKBC.cjs.map
|
|
11
|
+
//# sourceMappingURL=chunk-KGV5MKBC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/seo.ts"],"names":["useStructuredData","data","items","item","ld","useHead","useOpenGraph","meta","useTwitterCard","useSEO","config","link","generateSitemap","baseUrl","entries","xml","entry"],"mappings":"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","file":"chunk-KGV5MKBC.cjs","sourcesContent":["/**\n * SEO utilities.\n *\n * Structured data (JSON-LD), Open Graph helpers, and canonical URL management.\n * Works with useHead() for SSR-compatible head tag management.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'Article',\n * headline: 'My Post',\n * author: { '@type': 'Person', name: 'Alice' },\n * });\n * ```\n */\n\nimport { useHead } from './head.js';\n\n// --- Types ---\n\nexport interface StructuredData {\n '@context'?: string;\n '@type': string;\n [key: string]: unknown;\n}\n\nexport interface OpenGraphData {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n siteName?: string;\n locale?: string;\n}\n\nexport interface TwitterCardData {\n card?: 'summary' | 'summary_large_image' | 'player' | 'app';\n title: string;\n description?: string;\n image?: string;\n site?: string;\n creator?: string;\n}\n\nexport interface SEOConfig {\n title: string;\n description?: string;\n canonical?: string;\n robots?: string;\n openGraph?: OpenGraphData;\n twitter?: TwitterCardData;\n structuredData?: StructuredData | StructuredData[];\n}\n\n// --- useStructuredData ---\n\n/**\n * Inject JSON-LD structured data into the document head.\n * Data is automatically wrapped with @context.\n *\n * ```ts\n * useStructuredData({\n * '@type': 'WebSite',\n * name: 'AkashJS',\n * url: 'https://akashjs.dev',\n * });\n * ```\n */\nexport function useStructuredData(data: StructuredData | StructuredData[]): void {\n const items = Array.isArray(data) ? data : [data];\n\n for (const item of items) {\n const ld = { '@context': 'https://schema.org', ...item };\n useHead({\n script: [\n { type: 'application/ld+json', innerHTML: JSON.stringify(ld) },\n ],\n });\n }\n}\n\n// --- useOpenGraph ---\n\n/**\n * Set Open Graph meta tags.\n *\n * ```ts\n * useOpenGraph({\n * title: 'My Page',\n * description: 'Page description',\n * image: '/og-image.jpg',\n * type: 'article',\n * });\n * ```\n */\nexport function useOpenGraph(data: OpenGraphData): void {\n const meta: Array<{ property: string; content: string }> = [\n { property: 'og:title', content: data.title },\n ];\n\n if (data.description) meta.push({ property: 'og:description', content: data.description });\n if (data.image) meta.push({ property: 'og:image', content: data.image });\n if (data.url) meta.push({ property: 'og:url', content: data.url });\n if (data.type) meta.push({ property: 'og:type', content: data.type });\n if (data.siteName) meta.push({ property: 'og:site_name', content: data.siteName });\n if (data.locale) meta.push({ property: 'og:locale', content: data.locale });\n\n useHead({ meta });\n}\n\n// --- useTwitterCard ---\n\n/**\n * Set Twitter Card meta tags.\n *\n * ```ts\n * useTwitterCard({\n * card: 'summary_large_image',\n * title: 'My Page',\n * image: '/twitter-card.jpg',\n * });\n * ```\n */\nexport function useTwitterCard(data: TwitterCardData): void {\n const meta: Array<{ name: string; content: string }> = [\n { name: 'twitter:title', content: data.title },\n ];\n\n if (data.card) meta.push({ name: 'twitter:card', content: data.card });\n if (data.description) meta.push({ name: 'twitter:description', content: data.description });\n if (data.image) meta.push({ name: 'twitter:image', content: data.image });\n if (data.site) meta.push({ name: 'twitter:site', content: data.site });\n if (data.creator) meta.push({ name: 'twitter:creator', content: data.creator });\n\n useHead({ meta });\n}\n\n// --- useSEO (all-in-one) ---\n\n/**\n * Set all SEO-related head tags at once.\n *\n * ```ts\n * useSEO({\n * title: 'My Page | MySite',\n * description: 'Page description',\n * canonical: 'https://mysite.com/page',\n * openGraph: { title: 'My Page', image: '/og.jpg' },\n * twitter: { card: 'summary_large_image', title: 'My Page' },\n * structuredData: { '@type': 'WebPage', name: 'My Page' },\n * });\n * ```\n */\nexport function useSEO(config: SEOConfig): void {\n const meta: Array<{ name?: string; property?: string; content: string }> = [];\n\n if (config.description) {\n meta.push({ name: 'description', content: config.description });\n }\n if (config.robots) {\n meta.push({ name: 'robots', content: config.robots });\n }\n\n const link: Array<{ rel: string; href: string }> = [];\n if (config.canonical) {\n link.push({ rel: 'canonical', href: config.canonical });\n }\n\n useHead({ title: config.title, meta, link });\n\n if (config.openGraph) useOpenGraph(config.openGraph);\n if (config.twitter) useTwitterCard(config.twitter);\n if (config.structuredData) useStructuredData(config.structuredData);\n}\n\n// --- Sitemap generation (for CLI/build) ---\n\nexport interface SitemapEntry {\n url: string;\n lastmod?: string;\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';\n priority?: number;\n}\n\n/**\n * Generate a sitemap.xml string from route entries.\n *\n * ```ts\n * const xml = generateSitemap('https://mysite.com', [\n * { url: '/', priority: 1.0 },\n * { url: '/about', changefreq: 'monthly' },\n * { url: '/blog/hello', lastmod: '2026-03-29' },\n * ]);\n * ```\n */\nexport function generateSitemap(baseUrl: string, entries: SitemapEntry[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n';\n\n for (const entry of entries) {\n xml += ' <url>\\n';\n xml += ` <loc>${baseUrl}${entry.url}</loc>\\n`;\n if (entry.lastmod) xml += ` <lastmod>${entry.lastmod}</lastmod>\\n`;\n if (entry.changefreq) xml += ` <changefreq>${entry.changefreq}</changefreq>\\n`;\n if (entry.priority != null) xml += ` <priority>${entry.priority}</priority>\\n`;\n xml += ' </url>\\n';\n }\n\n xml += '</urlset>\\n';\n return xml;\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var b=new Set(["a","abbr","address","article","aside","b","bdi","bdo","blockquote","br","caption","cite","code","col","colgroup","dd","del","details","dfn","div","dl","dt","em","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","header","hr","i","img","ins","kbd","li","main","mark","nav","ol","p","pre","q","rp","rt","ruby","s","samp","section","small","span","strong","sub","summary","sup","table","tbody","td","tfoot","th","thead","time","tr","u","ul","var","wbr"]),S=new Set(["alt","class","dir","href","id","lang","name","rel","src","style","tabindex","target","title","type","width","height","colspan","rowspan","scope","loading","decoding"]),w=/^(javascript|data|vbscript):/i,A=/^on/i;function O(e,n={}){if(typeof document>"u")return e.replace(/<[^>]*>/g,"");let{allowTags:r=[],allowAttrs:t=[],allowDataAttrs:o=true,allowAriaAttrs:s=true,allowStyle:i=false,tagFilter:a,attrFilter:u}=n,c=new Set([...b,...r]),f=new Set([...S,...t]);i||f.delete("style");let d=new DOMParser().parseFromString(e,"text/html");return h(d.body,c,f,o,s,a,u),d.body.innerHTML}function h(e,n,r,t,o,s,i){let a=Array.from(e.childNodes);for(let u of a)if(u.nodeType===Node.ELEMENT_NODE){let c=u,f=c.tagName.toLowerCase();if(!(s?s(f):n.has(f))){let l=document.createTextNode(c.textContent??"");e.replaceChild(l,u);continue}let y=Array.from(c.attributes);for(let l of y){let p=l.name.toLowerCase(),g=l.value;if(A.test(p)){c.removeAttribute(l.name);continue}if(!(p.startsWith("data-")&&t)&&!(p.startsWith("aria-")&&o)){if(i&&!i(p,g,f)){c.removeAttribute(l.name);continue}if(!r.has(p)){c.removeAttribute(l.name);continue}if((p==="href"||p==="src")&&w.test(g)){c.removeAttribute(l.name);continue}}}h(c,n,r,t,o,s,i);}}function v(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function k(e,n){return r=>{e.innerHTML=O(r,n);}}function P(e={}){let r={...{"default-src":["'self'"],"script-src":["'self'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https:"],"font-src":["'self'","https:"],"connect-src":["'self'"],"frame-ancestors":["'none'"],"base-uri":["'self'"],"form-action":["'self'"],"object-src":["'none'"]},...e.directives};if(e.nonce){let t=`'nonce-${e.nonce}'`;r["script-src"]&&r["script-src"].push(t),r["style-src"]&&r["style-src"].push(t);}return e.reportUri&&(r["report-uri"]=[e.reportUri]),Object.entries(r).map(([t,o])=>`${t} ${o.join(" ")}`).join("; ")}function T(e={}){return e.reportOnly?"Content-Security-Policy-Report-Only":"Content-Security-Policy"}function E(e={}){let n={};if(e.csp!==false){let r=e.csp??{};n[T(r)]=P(r);}if(e.frameOptions!==false&&(n["X-Frame-Options"]=e.frameOptions??"DENY"),e.contentTypeOptions!==false&&(n["X-Content-Type-Options"]="nosniff"),n["X-XSS-Protection"]=e.xssProtection?"1; mode=block":"0",e.hsts!==false){let r=e.hsts??{maxAge:31536e3,includeSubDomains:true},t=`max-age=${r.maxAge}`;r.includeSubDomains&&(t+="; includeSubDomains"),r.preload&&(t+="; preload"),n["Strict-Transport-Security"]=t;}if(e.referrerPolicy!==false&&(n["Referrer-Policy"]=e.referrerPolicy??"strict-origin-when-cross-origin"),e.permissionsPolicy!==false){let r=e.permissionsPolicy??{camera:[],microphone:[],geolocation:[],payment:[]};n["Permissions-Policy"]=Object.entries(r).map(([t,o])=>`${t}=(${o.join(" ")})`).join(", ");}return e.coop!==false&&(n["Cross-Origin-Opener-Policy"]=e.coop??"same-origin"),e.coep!==false&&(n["Cross-Origin-Embedder-Policy"]=e.coep??"require-corp"),n}function x(e,...n){let r=new Set(["__proto__","constructor","prototype"]);for(let t of n)if(!(!t||typeof t!="object"))for(let o of Object.keys(t)){if(r.has(o))continue;let s=e[o],i=t[o];m(i)&&m(s)?e[o]=x({...s},i):e[o]=i;}return e}function R(e){if(e===null||typeof e!="object")return e;Object.freeze(e);for(let n of Object.values(e))typeof n=="object"&&n!==null&&R(n);return e}function m(e){return e!==null&&typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype}async function N(e,n="sha384"){let t=new TextEncoder().encode(e),o=n==="sha256"?"SHA-256":n==="sha384"?"SHA-384":"SHA-512",s=await crypto.subtle.digest(o,t),i=new Uint8Array(s),a=btoa(String.fromCharCode(...i));return `${n}-${a}`}function C(){let e=new Uint8Array(32);return crypto.getRandomValues(e),Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function D(e={}){let{headerName:n="X-CSRF-Token",cookieName:r="csrf-token",tokenGenerator:t=C}=e,o=null;function s(){if(!o){if(typeof document<"u"){let a=document.cookie.match(new RegExp(`${r}=([^;]+)`));if(a)return o=a[1],o}o=t();}return o}return {interceptor:async(a,u)=>{let c=a.method.toUpperCase();return ["POST","PUT","PATCH","DELETE"].includes(c)&&a.headers.set(n,s()),u(a)},token:s,refresh(){o=t();}}}function H(e,n={}){if(e==null)return null;let{allowedHosts:r,allowedProtocols:t=["http:","https:"],allowRelative:o=true}=n;if(e.startsWith("/")&&!e.startsWith("//"))return o?e:null;try{let s=new URL(e);return !t.includes(s.protocol)||r&&!r.includes(s.hostname)?null:s.toString()}catch{return null}}function j(e){let{maxAttempts:n,windowMs:r}=e,t=[];return {check(){let o=Date.now();for(;t.length>0&&t[0]<o-r;)t.shift();return t.length>=n?false:(t.push(o),true)},remaining(){let o=Date.now();for(;t.length>0&&t[0]<o-r;)t.shift();return Math.max(0,n-t.length)},reset(){t.length=0;}}}
|
|
2
|
+
export{O as a,v as b,k as c,P as d,T as e,E as f,x as g,R as h,N as i,C as j,D as k,H as l,j as m};//# sourceMappingURL=chunk-KMEGUPH2.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-KMEGUPH2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/security.ts"],"names":["SAFE_TAGS","SAFE_ATTRS","DANGEROUS_PROTOCOLS","DANGEROUS_ATTRS","sanitize","html","options","allowTags","allowAttrs","allowDataAttrs","allowAriaAttrs","allowStyle","tagFilter","attrFilter","allowedTags","allowedAttrs","doc","sanitizeNode","node","children","child","el","tag","text","attrs","attr","name","value","escapeHtml","str","createSafeHTML","generateCSP","config","directives","nonceValue","key","values","getCSPHeaderName","generateSecurityHeaders","headers","cspConfig","hsts","policy","safeMerge","target","sources","DANGEROUS_KEYS","source","targetVal","sourceVal","isPlainObject","deepFreeze","obj","val","generateSRI","content","algorithm","data","hashAlgo","hashBuffer","hashArray","base64","generateCSRFToken","array","b","createCSRFInterceptor","headerName","cookieName","tokenGenerator","token","getToken","match","request","next","method","sanitizeURL","url","allowedHosts","allowedProtocols","allowRelative","parsed","createRateLimiter","maxAttempts","windowMs","attempts","now"],"mappings":"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","file":"chunk-KMEGUPH2.js","sourcesContent":["/**\n * Security module — built-in protection for AkashJS apps.\n *\n * Auto-sanitization, CSP support, prototype pollution prevention,\n * and secure defaults. AkashJS is secure by default.\n */\n\n// =========================================================================\n// HTML Sanitizer — DOMPurify-style, zero dependencies\n// =========================================================================\n\n/** Tags allowed by default in sanitized HTML */\nconst SAFE_TAGS = new Set([\n 'a', 'abbr', 'address', 'article', 'aside', 'b', 'bdi', 'bdo',\n 'blockquote', 'br', 'caption', 'cite', 'code', 'col', 'colgroup',\n 'dd', 'del', 'details', 'dfn', 'div', 'dl', 'dt', 'em', 'figcaption',\n 'figure', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',\n 'hr', 'i', 'img', 'ins', 'kbd', 'li', 'main', 'mark', 'nav', 'ol',\n 'p', 'pre', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'small',\n 'span', 'strong', 'sub', 'summary', 'sup', 'table', 'tbody', 'td',\n 'tfoot', 'th', 'thead', 'time', 'tr', 'u', 'ul', 'var', 'wbr',\n]);\n\n/** Attributes allowed by default */\nconst SAFE_ATTRS = new Set([\n 'alt', 'class', 'dir', 'href', 'id', 'lang', 'name', 'rel',\n 'src', 'style', 'tabindex', 'target', 'title', 'type', 'width',\n 'height', 'colspan', 'rowspan', 'scope', 'loading', 'decoding',\n]);\n\n/** Dangerous URL protocols */\nconst DANGEROUS_PROTOCOLS = /^(javascript|data|vbscript):/i;\n\n/** Dangerous attribute names (event handlers) */\nconst DANGEROUS_ATTRS = /^on/i;\n\nexport interface SanitizeOptions {\n /** Additional allowed tags */\n allowTags?: string[];\n /** Additional allowed attributes */\n allowAttrs?: string[];\n /** Allow data-* attributes (default: true) */\n allowDataAttrs?: boolean;\n /** Allow aria-* attributes (default: true) */\n allowAriaAttrs?: boolean;\n /** Allow style attribute (default: false) */\n allowStyle?: boolean;\n /** Custom tag filter */\n tagFilter?: (tag: string) => boolean;\n /** Custom attribute filter */\n attrFilter?: (attr: string, value: string, tag: string) => boolean;\n}\n\n/**\n * Sanitize HTML string — remove dangerous tags, attributes, and URLs.\n *\n * ```ts\n * const safe = sanitize(userInput);\n * el.innerHTML = safe; // Safe from XSS\n *\n * // With options:\n * const safe = sanitize(html, { allowTags: ['iframe'], allowStyle: true });\n * ```\n */\nexport function sanitize(html: string, options: SanitizeOptions = {}): string {\n if (typeof document === 'undefined') {\n // SSR fallback — strip all tags\n return html.replace(/<[^>]*>/g, '');\n }\n\n const {\n allowTags = [],\n allowAttrs = [],\n allowDataAttrs = true,\n allowAriaAttrs = true,\n allowStyle = false,\n tagFilter,\n attrFilter,\n } = options;\n\n const allowedTags = new Set([...SAFE_TAGS, ...allowTags]);\n const allowedAttrs = new Set([...SAFE_ATTRS, ...allowAttrs]);\n\n if (!allowStyle) allowedAttrs.delete('style');\n\n // Parse HTML using browser's parser\n const doc = new DOMParser().parseFromString(html, 'text/html');\n sanitizeNode(doc.body, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n\n return doc.body.innerHTML;\n}\n\nfunction sanitizeNode(\n node: Node,\n allowedTags: Set<string>,\n allowedAttrs: Set<string>,\n allowDataAttrs: boolean,\n allowAriaAttrs: boolean,\n tagFilter?: (tag: string) => boolean,\n attrFilter?: (attr: string, value: string, tag: string) => boolean,\n): void {\n const children = Array.from(node.childNodes);\n\n for (const child of children) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n\n // Check if tag is allowed\n const isAllowed = tagFilter ? tagFilter(tag) : allowedTags.has(tag);\n\n if (!isAllowed) {\n // Replace dangerous element with its text content\n const text = document.createTextNode(el.textContent ?? '');\n node.replaceChild(text, child);\n continue;\n }\n\n // Sanitize attributes\n const attrs = Array.from(el.attributes);\n for (const attr of attrs) {\n const name = attr.name.toLowerCase();\n const value = attr.value;\n\n // Always remove event handlers\n if (DANGEROUS_ATTRS.test(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check data-* and aria-*\n if (name.startsWith('data-') && allowDataAttrs) continue;\n if (name.startsWith('aria-') && allowAriaAttrs) continue;\n\n // Custom filter\n if (attrFilter && !attrFilter(name, value, tag)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Check if attribute is allowed\n if (!allowedAttrs.has(name)) {\n el.removeAttribute(attr.name);\n continue;\n }\n\n // Sanitize URLs\n if ((name === 'href' || name === 'src') && DANGEROUS_PROTOCOLS.test(value)) {\n el.removeAttribute(attr.name);\n continue;\n }\n }\n\n // Recurse into children\n sanitizeNode(el, allowedTags, allowedAttrs, allowDataAttrs, allowAriaAttrs, tagFilter, attrFilter);\n }\n }\n}\n\n/**\n * Escape HTML entities — prevents XSS in text content.\n */\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * Create a safe HTML setter that sanitizes automatically.\n *\n * ```ts\n * const setHTML = createSafeHTML(el);\n * setHTML(userContent); // Auto-sanitized\n * ```\n */\nexport function createSafeHTML(el: HTMLElement, options?: SanitizeOptions): (html: string) => void {\n return (html: string) => {\n el.innerHTML = sanitize(html, options);\n };\n}\n\n// =========================================================================\n// CSP (Content Security Policy) Support\n// =========================================================================\n\nexport interface CSPConfig {\n /** Nonce for inline scripts/styles */\n nonce?: string;\n /** Report-only mode (default: false) */\n reportOnly?: boolean;\n /** Report URI for CSP violations */\n reportUri?: string;\n /** Custom directives */\n directives?: Record<string, string[]>;\n}\n\n/**\n * Generate a CSP header string.\n *\n * ```ts\n * const csp = generateCSP({\n * nonce: 'abc123',\n * directives: {\n * 'script-src': [\"'self'\"],\n * 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n * 'img-src': [\"'self'\", 'data:', 'https:'],\n * },\n * });\n * // \"script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; ...\"\n * ```\n */\nexport function generateCSP(config: CSPConfig = {}): string {\n const defaults: Record<string, string[]> = {\n 'default-src': [\"'self'\"],\n 'script-src': [\"'self'\"],\n 'style-src': [\"'self'\", \"'unsafe-inline'\"],\n 'img-src': [\"'self'\", 'data:', 'https:'],\n 'font-src': [\"'self'\", 'https:'],\n 'connect-src': [\"'self'\"],\n 'frame-ancestors': [\"'none'\"],\n 'base-uri': [\"'self'\"],\n 'form-action': [\"'self'\"],\n 'object-src': [\"'none'\"],\n };\n\n const directives = { ...defaults, ...config.directives };\n\n // Add nonce\n if (config.nonce) {\n const nonceValue = `'nonce-${config.nonce}'`;\n if (directives['script-src']) {\n directives['script-src'].push(nonceValue);\n }\n if (directives['style-src']) {\n directives['style-src'].push(nonceValue);\n }\n }\n\n // Add report-uri\n if (config.reportUri) {\n directives['report-uri'] = [config.reportUri];\n }\n\n return Object.entries(directives)\n .map(([key, values]) => `${key} ${values.join(' ')}`)\n .join('; ');\n}\n\n/**\n * Get the CSP header name based on config.\n */\nexport function getCSPHeaderName(config: CSPConfig = {}): string {\n return config.reportOnly\n ? 'Content-Security-Policy-Report-Only'\n : 'Content-Security-Policy';\n}\n\n// =========================================================================\n// Security Headers (Helmet-like)\n// =========================================================================\n\nexport interface SecurityHeadersConfig {\n /** Content Security Policy (false to disable) */\n csp?: CSPConfig | false;\n /** X-Frame-Options (default: 'DENY') */\n frameOptions?: 'DENY' | 'SAMEORIGIN' | false;\n /** X-Content-Type-Options (default: 'nosniff') */\n contentTypeOptions?: boolean;\n /** X-XSS-Protection (default: '0' — let CSP handle it) */\n xssProtection?: boolean;\n /** Strict-Transport-Security */\n hsts?: { maxAge: number; includeSubDomains?: boolean; preload?: boolean } | false;\n /** Referrer-Policy (default: 'strict-origin-when-cross-origin') */\n referrerPolicy?: string | false;\n /** Permissions-Policy */\n permissionsPolicy?: Record<string, string[]> | false;\n /** Cross-Origin-Opener-Policy */\n coop?: 'same-origin' | 'same-origin-allow-popups' | 'unsafe-none' | false;\n /** Cross-Origin-Embedder-Policy */\n coep?: 'require-corp' | 'credentialless' | 'unsafe-none' | false;\n}\n\n/**\n * Generate security headers for SSR responses.\n *\n * ```ts\n * const headers = generateSecurityHeaders();\n * // Apply to your server response\n * for (const [name, value] of Object.entries(headers)) {\n * res.setHeader(name, value);\n * }\n * ```\n */\nexport function generateSecurityHeaders(config: SecurityHeadersConfig = {}): Record<string, string> {\n const headers: Record<string, string> = {};\n\n // CSP\n if (config.csp !== false) {\n const cspConfig = config.csp ?? {};\n headers[getCSPHeaderName(cspConfig)] = generateCSP(cspConfig);\n }\n\n // X-Frame-Options\n if (config.frameOptions !== false) {\n headers['X-Frame-Options'] = config.frameOptions ?? 'DENY';\n }\n\n // X-Content-Type-Options\n if (config.contentTypeOptions !== false) {\n headers['X-Content-Type-Options'] = 'nosniff';\n }\n\n // X-XSS-Protection (disabled by default — CSP is better)\n headers['X-XSS-Protection'] = config.xssProtection ? '1; mode=block' : '0';\n\n // HSTS\n if (config.hsts !== false) {\n const hsts = config.hsts ?? { maxAge: 31536000, includeSubDomains: true };\n let value = `max-age=${hsts.maxAge}`;\n if (hsts.includeSubDomains) value += '; includeSubDomains';\n if (hsts.preload) value += '; preload';\n headers['Strict-Transport-Security'] = value;\n }\n\n // Referrer-Policy\n if (config.referrerPolicy !== false) {\n headers['Referrer-Policy'] = config.referrerPolicy ?? 'strict-origin-when-cross-origin';\n }\n\n // Permissions-Policy\n if (config.permissionsPolicy !== false) {\n const policy = config.permissionsPolicy ?? {\n camera: [],\n microphone: [],\n geolocation: [],\n 'payment': [],\n };\n headers['Permissions-Policy'] = Object.entries(policy)\n .map(([key, values]) => `${key}=(${values.join(' ')})`)\n .join(', ');\n }\n\n // COOP\n if (config.coop !== false) {\n headers['Cross-Origin-Opener-Policy'] = config.coop ?? 'same-origin';\n }\n\n // COEP\n if (config.coep !== false) {\n headers['Cross-Origin-Embedder-Policy'] = config.coep ?? 'require-corp';\n }\n\n return headers;\n}\n\n// =========================================================================\n// Prototype Pollution Prevention\n// =========================================================================\n\n/**\n * Safe deep merge that prevents prototype pollution.\n * Will not set __proto__, constructor, or prototype keys.\n *\n * ```ts\n * const result = safeMerge(defaults, userConfig);\n * ```\n */\nexport function safeMerge<T extends Record<string, unknown>>(\n target: T,\n ...sources: Partial<T>[]\n): T {\n const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const key of Object.keys(source)) {\n if (DANGEROUS_KEYS.has(key)) continue;\n\n const targetVal = (target as any)[key];\n const sourceVal = (source as any)[key];\n\n if (isPlainObject(sourceVal) && isPlainObject(targetVal)) {\n (target as any)[key] = safeMerge({ ...targetVal }, sourceVal);\n } else {\n (target as any)[key] = sourceVal;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Freeze an object deeply — prevents any modification.\n */\nexport function deepFreeze<T>(obj: T): Readonly<T> {\n if (obj === null || typeof obj !== 'object') return obj;\n Object.freeze(obj);\n for (const value of Object.values(obj)) {\n if (typeof value === 'object' && value !== null) {\n deepFreeze(value);\n }\n }\n return obj;\n}\n\nfunction isPlainObject(val: unknown): val is Record<string, unknown> {\n return val !== null && typeof val === 'object' && Object.getPrototypeOf(val) === Object.prototype;\n}\n\n// =========================================================================\n// Subresource Integrity (SRI)\n// =========================================================================\n\n/**\n * Generate SRI hash for a script/style resource.\n * For use in <script integrity=\"...\"> and <link integrity=\"...\">.\n *\n * ```ts\n * // In Node.js build script:\n * const hash = await generateSRI(fileContent);\n * // 'sha384-...'\n * ```\n */\nexport async function generateSRI(content: string, algorithm: 'sha256' | 'sha384' | 'sha512' = 'sha384'): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n\n const hashAlgo = algorithm === 'sha256' ? 'SHA-256' : algorithm === 'sha384' ? 'SHA-384' : 'SHA-512';\n const hashBuffer = await crypto.subtle.digest(hashAlgo, data);\n const hashArray = new Uint8Array(hashBuffer);\n const base64 = btoa(String.fromCharCode(...hashArray));\n\n return `${algorithm}-${base64}`;\n}\n\n// =========================================================================\n// CSRF Protection\n// =========================================================================\n\n/**\n * Generate a CSRF token.\n */\nexport function generateCSRFToken(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Create an HTTP interceptor that attaches CSRF tokens.\n *\n * ```ts\n * const csrf = createCSRFInterceptor();\n * const http = createHttpClient({ interceptors: [csrf.interceptor] });\n * // Token is auto-attached to every mutation request\n * ```\n */\nexport function createCSRFInterceptor(options: {\n headerName?: string;\n cookieName?: string;\n tokenGenerator?: () => string;\n} = {}) {\n const {\n headerName = 'X-CSRF-Token',\n cookieName = 'csrf-token',\n tokenGenerator = generateCSRFToken,\n } = options;\n\n let token: string | null = null;\n\n function getToken(): string {\n if (!token) {\n // Try to read from cookie\n if (typeof document !== 'undefined') {\n const match = document.cookie.match(new RegExp(`${cookieName}=([^;]+)`));\n if (match) {\n token = match[1];\n return token;\n }\n }\n // Generate new token\n token = tokenGenerator();\n }\n return token;\n }\n\n const interceptor = async (request: Request, next: (req: Request) => Promise<Response>): Promise<Response> => {\n const method = request.method.toUpperCase();\n // Only attach to mutating requests\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method)) {\n request.headers.set(headerName, getToken());\n }\n return next(request);\n };\n\n return {\n interceptor,\n token: getToken,\n refresh() { token = tokenGenerator(); },\n };\n}\n\n// =========================================================================\n// Input Validation\n// =========================================================================\n\n/**\n * Validate and sanitize a URL — prevent open redirect attacks.\n *\n * ```ts\n * const safe = sanitizeURL(userInput, { allowedHosts: ['example.com'] });\n * if (safe) window.location.href = safe;\n * ```\n */\nexport function sanitizeURL(url: string, options: {\n allowedHosts?: string[];\n allowedProtocols?: string[];\n allowRelative?: boolean;\n} = {}): string | null {\n if (url == null) return null;\n\n const {\n allowedHosts,\n allowedProtocols = ['http:', 'https:'],\n allowRelative = true,\n } = options;\n\n // Relative URLs\n if (url.startsWith('/') && !url.startsWith('//')) {\n return allowRelative ? url : null;\n }\n\n try {\n const parsed = new URL(url);\n\n // Check protocol\n if (!allowedProtocols.includes(parsed.protocol)) return null;\n\n // Check host\n if (allowedHosts && !allowedHosts.includes(parsed.hostname)) return null;\n\n return parsed.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Rate limiter for client-side actions (e.g., form submissions).\n *\n * ```ts\n * const limiter = createRateLimiter({ maxAttempts: 5, windowMs: 60000 });\n * if (!limiter.check()) {\n * toast.error('Too many attempts. Please wait.');\n * return;\n * }\n * ```\n */\nexport function createRateLimiter(options: {\n maxAttempts: number;\n windowMs: number;\n}) {\n const { maxAttempts, windowMs } = options;\n const attempts: number[] = [];\n\n return {\n check(): boolean {\n const now = Date.now();\n // Remove old attempts\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n if (attempts.length >= maxAttempts) return false;\n attempts.push(now);\n return true;\n },\n remaining(): number {\n const now = Date.now();\n while (attempts.length > 0 && attempts[0] < now - windowMs) {\n attempts.shift();\n }\n return Math.max(0, maxAttempts - attempts.length);\n },\n reset(): void {\n attempts.length = 0;\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function v(n){if(typeof window>"u")return(()=>false);let o=window.matchMedia(n),t=chunkHL2VGVJT_cjs.c(o.matches),i=r=>t.set(r.matches);return o.addEventListener("change",i),(()=>t())}var y={sm:640,md:768,lg:1024,xl:1280,"2xl":1536};function S(n=y){let o=Object.entries(n).sort((e,a)=>e[1]-a[1]),t=chunkHL2VGVJT_cjs.c(typeof window<"u"?window.innerWidth:1024);if(typeof window<"u"){let e=()=>t.set(window.innerWidth);window.addEventListener("resize",e,{passive:true});}function i(){let e=t(),a="";for(let[g,f]of o)e>=f&&(a=g);return a||o[0]?.[0]||""}function r(e){let a=n[e];return a!==void 0&&t()>=a}function s(e){let a=n[e];return a!==void 0&&t()<a}return {current:i,gte:r,lt:s,width:(()=>t())}}function b(n,o,t="local"){let i=typeof window<"u"?t==="local"?localStorage:sessionStorage:null,r=o;if(i)try{let e=i.getItem(n);e!==null&&(r=JSON.parse(e));}catch{}let s=chunkHL2VGVJT_cjs.c(r);return i&&(chunkHL2VGVJT_cjs.e(()=>{let e=s();try{i.setItem(n,JSON.stringify(e));}catch{}}),typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key===n&&e.newValue!==null)try{s.set(JSON.parse(e.newValue));}catch{}})),s}function h(n){let o=chunkHL2VGVJT_cjs.c(""),t=chunkHL2VGVJT_cjs.c(false),i=n?.timeout??2e3,r=null;async function s(e){typeof navigator>"u"||!navigator.clipboard||(await navigator.clipboard.writeText(e),o.set(e),t.set(true),r&&clearTimeout(r),r=setTimeout(()=>t.set(false),i));}return {text:(()=>o()),copied:(()=>t()),copy:s}}function E(){if(typeof window>"u")return(()=>true);let n=chunkHL2VGVJT_cjs.c(navigator.onLine);return window.addEventListener("online",()=>n.set(true)),window.addEventListener("offline",()=>n.set(false)),(()=>n())}function T(n){let o=chunkHL2VGVJT_cjs.c({latitude:null,longitude:null,accuracy:null,error:null,loading:true});return typeof navigator<"u"&&navigator.geolocation?navigator.geolocation.watchPosition(t=>{o.set({latitude:t.coords.latitude,longitude:t.coords.longitude,accuracy:t.coords.accuracy,error:null,loading:false});},t=>{o.set({latitude:null,longitude:null,accuracy:null,error:t,loading:false});},n):o.set({...o(),loading:false}),(()=>o())}function L(){let n=chunkHL2VGVJT_cjs.c(typeof window<"u"?window.innerWidth:0),o=chunkHL2VGVJT_cjs.c(typeof window<"u"?window.innerHeight:0);return typeof window<"u"&&window.addEventListener("resize",()=>{n.set(window.innerWidth),o.set(window.innerHeight);},{passive:true}),{width:(()=>n()),height:(()=>o())}}function R(n,o,t={}){if(typeof document>"u")return ()=>{};let{events:i=["pointerdown"],ignore:r=[],active:s=true}=t,e=s;function a(){return typeof n=="function"?n():n}function g(u){let d=u.target;if(!d)return false;for(let c of r)if(typeof c=="string"){if(d.closest(c))return true}else if(c===d||c.contains(d))return true;return false}function f(u){if(!e)return;let d=a();if(!d)return;let c=u.target;d===c||d.contains(c)||g(u)||o(u);}for(let u of i)document.addEventListener(u,f,{passive:true,capture:true});let w=()=>{for(let u of i)document.removeEventListener(u,f,{capture:true});};return w.enable=()=>{e=true;},w.disable=()=>{e=false;},w}exports.a=v;exports.b=S;exports.c=b;exports.d=h;exports.e=E;exports.f=T;exports.g=L;exports.h=R;//# sourceMappingURL=chunk-KQAYFPJI.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-KQAYFPJI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser.ts"],"names":["useMediaQuery","query","mql","matches","signal","handler","e","DEFAULT_BREAKPOINTS","useBreakpoint","breakpoints","sorted","a","b","width","current","w","result","name","min","gte","bp","lt","useStorage","key","initialValue","storage","store","startValue","raw","state","effect","value","useClipboard","options","text","copied","timeout","timer","copy","useOnline","online","useGeolocation","pos","err","useWindowSize","height","useClickOutside","target","events","ignore","active","isActive","getTarget","shouldIgnore","event","eventTarget","pattern","listener","el","eventName","dispose"],"mappings":"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","file":"chunk-KQAYFPJI.cjs","sourcesContent":["/**\n * Browser API composables.\n *\n * Signal-based wrappers for common browser APIs.\n * All composables are SSR-safe — they return fallback values\n * when `window` is not available.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- useMediaQuery ---\n\n/**\n * Reactive media query matcher.\n *\n * ```ts\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * isMobile(); // true/false, updates on resize\n * ```\n */\nexport function useMediaQuery(query: string): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => false) as ReadonlySignal<boolean>;\n }\n\n const mql = window.matchMedia(query);\n const matches = signal(mql.matches);\n\n const handler = (e: MediaQueryListEvent) => matches.set(e.matches);\n mql.addEventListener('change', handler);\n\n return (() => matches()) as ReadonlySignal<boolean>;\n}\n\n// --- useBreakpoint ---\n\nexport interface Breakpoints {\n [name: string]: number;\n}\n\nconst DEFAULT_BREAKPOINTS: Breakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n/**\n * Reactive breakpoint tracker (Tailwind-style).\n *\n * ```ts\n * const bp = useBreakpoint();\n * bp.current(); // 'md'\n * bp.gte('lg'); // false\n * bp.lt('sm'); // false\n * ```\n */\nexport function useBreakpoint(breakpoints: Breakpoints = DEFAULT_BREAKPOINTS) {\n const sorted = Object.entries(breakpoints).sort((a, b) => a[1] - b[1]);\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 1024);\n\n if (typeof window !== 'undefined') {\n const handler = () => width.set(window.innerWidth);\n window.addEventListener('resize', handler, { passive: true });\n }\n\n function current(): string {\n const w = width();\n let result = '';\n for (const [name, min] of sorted) {\n if (w >= min) result = name;\n }\n return result || sorted[0]?.[0] || '';\n }\n\n function gte(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() >= bp;\n }\n\n function lt(name: string): boolean {\n const bp = breakpoints[name];\n return bp !== undefined && width() < bp;\n }\n\n return { current, gte, lt, width: (() => width()) as ReadonlySignal<number> };\n}\n\n// --- useStorage ---\n\n/**\n * Signal backed by localStorage or sessionStorage.\n * Persists across page refreshes.\n *\n * ```ts\n * const name = useStorage('user-name', 'Guest');\n * name(); // reads from localStorage or 'Guest'\n * name.set('Alice'); // writes to localStorage\n * ```\n */\nexport function useStorage<T>(\n key: string,\n initialValue: T,\n storage: 'local' | 'session' = 'local',\n): Signal<T> {\n const store = typeof window !== 'undefined'\n ? (storage === 'local' ? localStorage : sessionStorage)\n : null;\n\n // Read existing value\n let startValue = initialValue;\n if (store) {\n try {\n const raw = store.getItem(key);\n if (raw !== null) startValue = JSON.parse(raw);\n } catch { /* use initial */ }\n }\n\n const state = signal<T>(startValue);\n\n // Sync writes to storage\n if (store) {\n effect(() => {\n const value = state();\n try {\n store.setItem(key, JSON.stringify(value));\n } catch { /* storage full */ }\n });\n\n // Listen for changes from other tabs\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (e) => {\n if (e.key === key && e.newValue !== null) {\n try {\n state.set(JSON.parse(e.newValue));\n } catch { /* ignore */ }\n }\n });\n }\n }\n\n return state;\n}\n\n// --- useClipboard ---\n\n/**\n * Reactive clipboard access.\n *\n * ```ts\n * const { text, copy, copied } = useClipboard();\n * await copy('Hello');\n * copied(); // true for 2 seconds\n * ```\n */\nexport function useClipboard(options?: { timeout?: number }) {\n const text = signal('');\n const copied = signal(false);\n const timeout = options?.timeout ?? 2000;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n async function copy(value: string): Promise<void> {\n if (typeof navigator === 'undefined' || !navigator.clipboard) return;\n await navigator.clipboard.writeText(value);\n text.set(value);\n copied.set(true);\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => copied.set(false), timeout);\n }\n\n return {\n text: (() => text()) as ReadonlySignal<string>,\n copied: (() => copied()) as ReadonlySignal<boolean>,\n copy,\n };\n}\n\n// --- useOnline ---\n\n/**\n * Reactive online/offline status.\n *\n * ```ts\n * const online = useOnline();\n * online(); // true/false\n * ```\n */\nexport function useOnline(): ReadonlySignal<boolean> {\n if (typeof window === 'undefined') {\n return (() => true) as ReadonlySignal<boolean>;\n }\n\n const online = signal(navigator.onLine);\n window.addEventListener('online', () => online.set(true));\n window.addEventListener('offline', () => online.set(false));\n\n return (() => online()) as ReadonlySignal<boolean>;\n}\n\n// --- useGeolocation ---\n\nexport interface GeolocationState {\n latitude: number | null;\n longitude: number | null;\n accuracy: number | null;\n error: GeolocationPositionError | null;\n loading: boolean;\n}\n\n/**\n * Reactive geolocation.\n *\n * ```ts\n * const geo = useGeolocation();\n * geo().latitude; // number | null\n * geo().loading; // boolean\n * ```\n */\nexport function useGeolocation(\n options?: PositionOptions,\n): ReadonlySignal<GeolocationState> {\n const state = signal<GeolocationState>({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: null,\n loading: true,\n });\n\n if (typeof navigator !== 'undefined' && navigator.geolocation) {\n navigator.geolocation.watchPosition(\n (pos) => {\n state.set({\n latitude: pos.coords.latitude,\n longitude: pos.coords.longitude,\n accuracy: pos.coords.accuracy,\n error: null,\n loading: false,\n });\n },\n (err) => {\n state.set({\n latitude: null,\n longitude: null,\n accuracy: null,\n error: err,\n loading: false,\n });\n },\n options,\n );\n } else {\n state.set({ ...state(), loading: false });\n }\n\n return (() => state()) as ReadonlySignal<GeolocationState>;\n}\n\n// --- useWindowSize ---\n\n/**\n * Reactive window dimensions.\n */\nexport function useWindowSize() {\n const width = signal(typeof window !== 'undefined' ? window.innerWidth : 0);\n const height = signal(typeof window !== 'undefined' ? window.innerHeight : 0);\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', () => {\n width.set(window.innerWidth);\n height.set(window.innerHeight);\n }, { passive: true });\n }\n\n return {\n width: (() => width()) as ReadonlySignal<number>,\n height: (() => height()) as ReadonlySignal<number>,\n };\n}\n\n// --- useClickOutside ---\n\n/**\n * Detect clicks outside an element. Essential for closing\n * dropdowns, modals, popovers, and context menus.\n *\n * ```ts\n * const dropdown = document.querySelector('.dropdown')!;\n * const dispose = useClickOutside(dropdown, () => {\n * closeDropdown();\n * });\n *\n * // With options:\n * useClickOutside(dropdown, onClose, {\n * events: ['mousedown', 'touchstart'],\n * ignore: ['.trigger-button'],\n * });\n * ```\n */\nexport function useClickOutside(\n target: HTMLElement | (() => HTMLElement | null),\n handler: (event: Event) => void,\n options: {\n /** Events to listen for (default: ['pointerdown']) */\n events?: string[];\n /** Selectors or elements to ignore (clicks on these won't trigger) */\n ignore?: (string | HTMLElement)[];\n /** Whether the listener is active (default: true) */\n active?: boolean;\n } = {},\n): () => void {\n if (typeof document === 'undefined') return () => {};\n\n const {\n events = ['pointerdown'],\n ignore = [],\n active = true,\n } = options;\n\n let isActive = active;\n\n function getTarget(): HTMLElement | null {\n return typeof target === 'function' ? target() : target;\n }\n\n function shouldIgnore(event: Event): boolean {\n const eventTarget = event.target as HTMLElement;\n if (!eventTarget) return false;\n\n for (const pattern of ignore) {\n if (typeof pattern === 'string') {\n if (eventTarget.closest(pattern)) return true;\n } else {\n if (pattern === eventTarget || pattern.contains(eventTarget)) return true;\n }\n }\n return false;\n }\n\n function listener(event: Event): void {\n if (!isActive) return;\n const el = getTarget();\n if (!el) return;\n\n const eventTarget = event.target as Node;\n if (el === eventTarget || el.contains(eventTarget)) return;\n if (shouldIgnore(event)) return;\n\n handler(event);\n }\n\n for (const eventName of events) {\n document.addEventListener(eventName, listener, { passive: true, capture: true });\n }\n\n const dispose = () => {\n for (const eventName of events) {\n document.removeEventListener(eventName, listener, { capture: true } as EventListenerOptions);\n }\n };\n\n // Attach enable/disable to dispose function\n (dispose as any).enable = () => { isActive = true; };\n (dispose as any).disable = () => { isActive = false; };\n\n return dispose;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkIQGSDFBI_cjs=require('./chunk-IQGSDFBI.cjs'),chunkPPNEAFKE_cjs=require('./chunk-PPNEAFKE.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function K(e,n){let t=document.createElement(e);if(n)for(let[c,m]of Object.entries(n))I(t,c,m);return t}function q(e){return document.createTextNode(e)}function V(e){let n=document.createElement("template");return n.innerHTML=e,n.content.cloneNode(true)}function I(e,n,t){if(n==="class"||n==="className")e.className=t;else if(n==="style"&&typeof t=="object"&&t!==null)Object.assign(e.style,t);else if(n==="innerHTML")e.innerHTML=t;else if(n!=="ref")if(n.startsWith("on")){let c=n.slice(2).toLowerCase();e.addEventListener(c,t);}else n in e?e[n]=t:t===false||t==null?e.removeAttribute(n):e.setAttribute(n,t===true?"":String(t));}function W(e,n){return chunkHL2VGVJT_cjs.e(()=>{e.textContent=String(n());},{render:true})}function G(e,n,t){return chunkHL2VGVJT_cjs.e(()=>{I(e,n,t());},{render:true})}function U(e,n){return chunkHL2VGVJT_cjs.e(()=>{e.style.display=n()?"":"none";},{render:true})}function R(e=""){return document.createComment(e)}function D(e,n,t,c,m){let s=null,w=chunkIQGSDFBI_cjs.c(),a=chunkHL2VGVJT_cjs.e(()=>{let d=t();if(s){for(let f of s.nodes)try{f.parentNode?.removeChild(f);}catch{}s.dispose?.(),s=null;}let l=d?c:m,i=n.parentNode;if(!i&&s?.nodes[0]?.parentNode&&(i=s.nodes[0].parentNode),l&&i){let f=w?chunkIQGSDFBI_cjs.d(w,l):l(),p=f instanceof DocumentFragment?Array.from(f.childNodes):[f];for(let g of p)i.insertBefore(g,n);s={nodes:p,dispose:null};}},{render:true});return ()=>{if(a(),s){for(let d of s.nodes)try{d.parentNode?.removeChild(d);}catch{}s.dispose?.();}}}function B(e,n,t,c,m){let s=[],w=chunkIQGSDFBI_cjs.c();function a(l,i,f){let p=w?chunkIQGSDFBI_cjs.d(w,()=>m(l,i)):m(l,i),g=p instanceof DocumentFragment?Array.from(p.childNodes):[p];return {key:f,value:l,nodes:g,dispose:null}}let d=chunkHL2VGVJT_cjs.e(()=>{let l=t(),i=s,f=i.length,p=l.length;if(f===0){let o=new Array(p),u=n.parentNode;for(let r=0;r<p;r++){let h=l[r],k=a(h,r,c(h,r));if(o[r]=k,u)for(let L=0;L<k.nodes.length;L++)u.insertBefore(k.nodes[L],n);}s=o;return}if(p===0){for(let o=0;o<f;o++){let u=i[o];for(let r=0;r<u.nodes.length;r++){let h=u.nodes[r];h.parentNode&&h.parentNode.removeChild(h);}u.dispose?.();}s=[];return}let g=new Map;for(let o=0;o<f;o++)g.set(i[o].key,o);let T=new Array(p),N=new Array(p);for(let o=0;o<p;o++){let u=l[o],r=c(u,o),h=g.get(r);if(h!==void 0){g.delete(r);let k=i[h];k.nodes[0]&&!k.nodes[0].parentNode?(T[o]=a(u,o,r),N[o]=-1):(k.value=u,T[o]=k,N[o]=h);}else T[o]=a(u,o,r),N[o]=-1;}for(let o of g.values()){let u=i[o];for(let r=0;r<u.nodes.length;r++){let h=u.nodes[r];h.parentNode&&h.parentNode.removeChild(h);}u.dispose?.();}let C=j(N),S=new Set;for(let o=0;o<C.length;o++)S.add(C[o]);let H=n.parentNode;if(H){let o=n;for(let u=p-1;u>=0;u--){let r=T[u];if(S.has(u))o=r.nodes[0];else {for(let h=0;h<r.nodes.length;h++)H.insertBefore(r.nodes[h],o);o=r.nodes[0];}}}s=T;},{render:true});return ()=>{d();for(let l of s){for(let i=0;i<l.nodes.length;i++){let f=l.nodes[i];f.parentNode&&f.parentNode.removeChild(f);}l.dispose?.();}s=[];}}function j(e){let n=e.length;if(n===0)return [];let t=[],c=new Array(n).fill(-1),m=[];for(let a=0;a<n;a++){if(e[a]===-1)continue;let d=0,l=t.length;for(;d<l;){let i=d+l>>1;t[i]<e[a]?d=i+1:l=i;}t[d]=e[a],m[d]=a,d>0&&(c[a]=m[d-1]);}let s=new Array(t.length),w=m[t.length-1];for(let a=t.length-1;a>=0;a--)s[a]=w,w=c[w];return s}function Y(e){let n=R("show"),t=document.createDocumentFragment();t.appendChild(n);let c=typeof e.when=="function"?e.when:()=>e.when,m;return D(t,n,()=>(m=c(),!!m),()=>y(e.children(m)),e.fallback?()=>y(e.fallback()):void 0),t}function z(e){let n=R("for"),t=document.createDocumentFragment();t.appendChild(n);let c=typeof e.each=="function"?e.each:()=>e.each;return B(t,n,c,e.key,(m,s)=>y(e.children(m,s))),t}function y(e){if(e==null||typeof e=="boolean")return document.createTextNode("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(e instanceof Node)return e;if(Array.isArray(e)){let n=document.createDocumentFragment();for(let t of e)n.appendChild(y(t));return n}return document.createTextNode(String(e))}function J(e,n,t){let c=y(n);t?e.insertBefore(c,t):e.appendChild(c);}function te(e){return e.__reactive=true,e}var x=null;function oe(e){if(!x)throw chunkPPNEAFKE_cjs.b("AK0020");x.mount.push(e);}function re(e){if(!x)throw chunkPPNEAFKE_cjs.b("AK0021");x.unmount.push(e);}function se(e){if(!x)throw chunkPPNEAFKE_cjs.b("AK0022");x.error.push(e);}function ie(e){return {current:e}}function ce(e){let n=t=>{let{children:c,...m}=t??{},a={props:m,children:typeof c=="function"?c:()=>c??null},d={mount:[],unmount:[],error:[]},l=x;x=d;let i=chunkIQGSDFBI_cjs.c(),f=chunkIQGSDFBI_cjs.a(i),p,g;try{g=chunkHL2VGVJT_cjs.f(()=>{if(p=e(a),typeof p!="function")throw chunkPPNEAFKE_cjs.b("AK0040");let T=p();return y(T)});}catch(T){if(chunkIQGSDFBI_cjs.b(f),x=l,d.error.length>0){for(let N of d.error)N(T instanceof Error?T:new Error(String(T)));return document.createComment("error")}throw T}return chunkIQGSDFBI_cjs.b(f),x=l,d.mount.length>0&&queueMicrotask(()=>{for(let T of d.mount)try{let N=T();typeof N=="function"&&d.unmount.push(N);}catch(N){for(let C of d.error)C(N instanceof Error?N:new Error(String(N)));}}),g};return n._akash=true,n}exports.a=K;exports.b=q;exports.c=V;exports.d=I;exports.e=W;exports.f=G;exports.g=U;exports.h=D;exports.i=B;exports.j=Y;exports.k=z;exports.l=y;exports.m=J;exports.n=te;exports.o=oe;exports.p=re;exports.q=se;exports.r=ie;exports.s=ce;//# sourceMappingURL=chunk-LSD7DEMV.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-LSD7DEMV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom.ts","../src/component.ts"],"names":["createElement","tag","attrs","el","key","value","setProperty","createText","cloneTemplate","html","template","event","bindText","node","fn","effect","bindProperty","bindVisible","createAnchor","label","renderConditional","parent","anchor","condition","trueBranch","falseBranch","current","scope","getCurrentScope","dispose","branch","liveParent","fragment","runInScope","nodes","renderList","items","keyFn","renderItem","currentItems","createItem","data","index","newData","oldItems","oldLen","newLen","newItems","i","item","j","n","oldKeyMap","newToOld","oldIdx","existing","lisIndices","longestIncreasingSubsequence","lisSet","nextSibling","arr","tails","predecessors","indices","lo","hi","mid","result","k","Show","props","container","getWhen","whenValue","nodeToDOM","For","getEach","child","insert","domNode","__getter","currentHooks","onMount","akashError","onUnmount","onError","ref","initialValue","defineComponent","setup","component","rawProps","childrenProp","restProps","ctx","hooks","prevHooks","parentScope","pushScope","renderFn","untrack","rendered","err","popScope","handler","mountFn","cleanup"],"mappings":"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","file":"chunk-LSD7DEMV.cjs","sourcesContent":["/**\n * Direct DOM rendering runtime.\n *\n * No virtual DOM. The compiler generates calls to these helpers.\n * Signal reads inside templates become fine-grained effects that\n * update only the specific DOM node that changed.\n */\n\nimport { effect } from './signals.js';\nimport { getCurrentScope, runInScope } from './context.js';\nimport type { AkashNode } from './types.js';\n\n// --- DOM creation helpers (used by compiler output) ---\n\n/** Create an element and optionally set static attributes */\nexport function createElement(\n tag: string,\n attrs?: Record<string, unknown>,\n): HTMLElement {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n setProperty(el, key, value);\n }\n }\n return el;\n}\n\n/** Create a text node */\nexport function createText(value: string): Text {\n return document.createTextNode(value);\n}\n\n/** Clone a template element for static structure */\nexport function cloneTemplate(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content.cloneNode(true) as DocumentFragment;\n}\n\n// --- Property/attribute setting ---\n\nexport function setProperty(el: HTMLElement, key: string, value: unknown): void {\n if (key === 'class' || key === 'className') {\n el.className = value as string;\n } else if (key === 'style' && typeof value === 'object' && value !== null) {\n Object.assign(el.style, value);\n } else if (key === 'innerHTML') {\n el.innerHTML = value as string;\n } else if (key === 'ref') {\n // Handled separately by component system\n } else if (key.startsWith('on')) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value as EventListener);\n } else if (key in el) {\n (el as unknown as Record<string, unknown>)[key] = value;\n } else if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n}\n\n// --- Reactive binding (used by compiler for dynamic expressions) ---\n\n/** Bind a reactive expression to a text node's content */\nexport function bindText(node: Text, fn: () => unknown): () => void {\n return effect(\n () => {\n node.textContent = String(fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's attribute/property */\nexport function bindProperty(\n el: HTMLElement,\n key: string,\n fn: () => unknown,\n): () => void {\n return effect(\n () => {\n setProperty(el, key, fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's visibility (display) */\nexport function bindVisible(el: HTMLElement, fn: () => boolean): () => void {\n return effect(\n () => {\n el.style.display = fn() ? '' : 'none';\n },\n { render: true },\n );\n}\n\n// --- Conditional rendering ---\n\n/** Anchor node — comment for normal DOM, hidden element for table contexts */\ntype Anchor = Comment | HTMLElement;\n\n/** Table elements where comment nodes get relocated by the browser */\nconst TABLE_TAGS = new Set(['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR']);\n\nfunction createAnchor(label = ''): Anchor {\n return document.createComment(label);\n}\n\n/**\n * Create a table-safe anchor. Browsers relocate comment nodes inside\n * table elements, breaking anchor-based insertion. Use a hidden element instead.\n */\nfunction createTableSafeAnchor(parent: Node): Anchor {\n if (parent instanceof HTMLElement && TABLE_TAGS.has(parent.tagName)) {\n const tag = parent.tagName === 'TR' ? 'td' : 'tr';\n const el = document.createElement(tag);\n el.style.display = 'none';\n return el;\n }\n return document.createComment('');\n}\n\ninterface ConditionalBlock {\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a conditional block. Swaps DOM fragments based on a reactive\n * condition. Used by the compiler for :if directives and <Show>.\n */\nexport function renderConditional(\n parent: Node,\n anchor: Node,\n condition: () => boolean,\n trueBranch: () => Node,\n falseBranch?: () => Node,\n): () => void {\n let current: ConditionalBlock | null = null;\n\n // Capture scope so children created in branches inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const value = condition();\n\n // Remove old nodes\n if (current) {\n for (const node of current.nodes) {\n try { node.parentNode?.removeChild(node); } catch {}\n }\n current.dispose?.();\n current = null;\n }\n\n // Insert new nodes — use anchor.parentNode since the anchor may have\n // moved from the initial DocumentFragment into the real DOM.\n // In table contexts, the browser may relocate comment anchors.\n const branch = value ? trueBranch : falseBranch;\n let liveParent: Node | null = anchor.parentNode;\n if (!liveParent && (current as ConditionalBlock | null)?.nodes[0]?.parentNode) {\n liveParent = (current as ConditionalBlock | null)!.nodes[0].parentNode;\n }\n if (branch && liveParent) {\n const fragment = scope ? runInScope(scope, branch) : branch();\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n for (const node of nodes) {\n liveParent.insertBefore(node, anchor);\n }\n current = { nodes, dispose: null };\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n if (current) {\n for (const node of current.nodes) {\n try { node.parentNode?.removeChild(node); } catch {}\n }\n current.dispose?.();\n }\n };\n}\n\n// --- List rendering ---\n\ninterface ListItem<T> {\n key: unknown;\n value: T;\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a reactive list with keyed reconciliation.\n * Used by the compiler for :for directives and <For>.\n */\nexport function renderList<T>(\n parent: Node,\n anchor: Node,\n items: () => T[],\n keyFn: (item: T, index: number) => unknown,\n renderItem: (item: T, index: number) => Node,\n): () => void {\n let currentItems: ListItem<T>[] = [];\n\n // Capture scope so children created in renderItem inherit provide/inject context\n const scope = getCurrentScope();\n\n function createItem(data: T, index: number, key: unknown): ListItem<T> {\n const fragment = scope ? runInScope(scope, () => renderItem(data, index)) : renderItem(data, index);\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n return { key, value: data, nodes, dispose: null };\n }\n\n const dispose = effect(\n () => {\n const newData = items();\n const oldItems = currentItems;\n const oldLen = oldItems.length;\n const newLen = newData.length;\n\n // Fast path: first render\n if (oldLen === 0) {\n const newItems: ListItem<T>[] = new Array(newLen);\n const liveParent = anchor.parentNode;\n for (let i = 0; i < newLen; i++) {\n const data = newData[i];\n const item = createItem(data, i, keyFn(data, i));\n newItems[i] = item;\n if (liveParent) {\n for (let j = 0; j < item.nodes.length; j++) {\n liveParent.insertBefore(item.nodes[j], anchor);\n }\n }\n }\n currentItems = newItems;\n return;\n }\n\n // Fast path: clear all\n if (newLen === 0) {\n for (let i = 0; i < oldLen; i++) {\n const item = oldItems[i];\n for (let j = 0; j < item.nodes.length; j++) {\n const n = item.nodes[j];\n if (n.parentNode) n.parentNode.removeChild(n);\n }\n item.dispose?.();\n }\n currentItems = [];\n return;\n }\n\n // Build old key → index map\n const oldKeyMap = new Map<unknown, number>();\n for (let i = 0; i < oldLen; i++) {\n oldKeyMap.set(oldItems[i].key, i);\n }\n\n // Build new items array, reusing existing ListItems by key\n const newItems: ListItem<T>[] = new Array(newLen);\n // newToOld[i] = index in old array, or -1 if new\n const newToOld: number[] = new Array(newLen);\n\n for (let i = 0; i < newLen; i++) {\n const data = newData[i];\n const key = keyFn(data, i);\n const oldIdx = oldKeyMap.get(key);\n\n if (oldIdx !== undefined) {\n oldKeyMap.delete(key);\n const existing = oldItems[oldIdx];\n // Check if nodes are still attached\n if (existing.nodes[0] && !existing.nodes[0].parentNode) {\n newItems[i] = createItem(data, i, key);\n newToOld[i] = -1;\n } else {\n existing.value = data;\n newItems[i] = existing;\n newToOld[i] = oldIdx;\n }\n } else {\n newItems[i] = createItem(data, i, key);\n newToOld[i] = -1;\n }\n }\n\n // Remove items no longer in list\n for (const oldIdx of oldKeyMap.values()) {\n const item = oldItems[oldIdx];\n for (let j = 0; j < item.nodes.length; j++) {\n const n = item.nodes[j];\n if (n.parentNode) n.parentNode.removeChild(n);\n }\n item.dispose?.();\n }\n\n // LIS-based reconciliation: compute which items are already in order\n const lisIndices = longestIncreasingSubsequence(newToOld);\n const lisSet = new Set<number>();\n for (let i = 0; i < lisIndices.length; i++) lisSet.add(lisIndices[i]);\n\n // Walk backwards through new items. Items in the LIS stay in place.\n // Items NOT in the LIS (moves + inserts) get insertBefore'd.\n const liveParent = anchor.parentNode;\n if (liveParent) {\n let nextSibling: Node = anchor;\n for (let i = newLen - 1; i >= 0; i--) {\n const item = newItems[i];\n if (lisSet.has(i)) {\n // In LIS — already in correct relative order, just update nextSibling\n nextSibling = item.nodes[0];\n } else {\n // Not in LIS — move or insert before nextSibling\n for (let j = 0; j < item.nodes.length; j++) {\n liveParent.insertBefore(item.nodes[j], nextSibling);\n }\n nextSibling = item.nodes[0];\n }\n }\n }\n\n currentItems = newItems;\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const item of currentItems) {\n for (let j = 0; j < item.nodes.length; j++) {\n const n = item.nodes[j];\n if (n.parentNode) n.parentNode.removeChild(n);\n }\n item.dispose?.();\n }\n currentItems = [];\n };\n}\n\n/** LIS for renderList — returns indices into arr that form the longest increasing subsequence */\nfunction longestIncreasingSubsequence(arr: number[]): number[] {\n const n = arr.length;\n if (n === 0) return [];\n const tails: number[] = [];\n const predecessors: number[] = new Array(n).fill(-1);\n const indices: number[] = [];\n\n for (let i = 0; i < n; i++) {\n if (arr[i] === -1) continue;\n let lo = 0, hi = tails.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < arr[i]) lo = mid + 1; else hi = mid;\n }\n tails[lo] = arr[i];\n indices[lo] = i;\n if (lo > 0) predecessors[i] = indices[lo - 1];\n }\n\n const result: number[] = new Array(tails.length);\n let k = indices[tails.length - 1];\n for (let i = tails.length - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n return result;\n}\n\n// --- Built-in control flow components ---\n\n/** Props for the <Show> component */\nexport interface ShowProps<T> {\n when: (() => T | null | undefined | false) | T | null | undefined | false;\n fallback?: () => AkashNode;\n children: (value: T) => AkashNode;\n}\n\n/**\n * <Show> component — conditionally renders children with type narrowing.\n * The children callback receives the non-null/undefined value.\n * `when` can be a reactive getter or a static value.\n */\nexport function Show<T>(props: ShowProps<T>): Node {\n const anchor = createAnchor('show');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n // Resolve when — if it's a function, always call it (supports both\n // compiler-generated __reactive getters and plain programmatic functions)\n const getWhen = typeof props.when === 'function'\n ? props.when as () => T | null | undefined | false\n : () => props.when as T | null | undefined | false;\n\n // Capture the when value once per evaluation so the condition check\n // and the children callback receive the same value (fixes nested For contexts)\n let whenValue: T | null | undefined | false;\n renderConditional(\n container,\n anchor,\n () => { whenValue = getWhen(); return !!whenValue; },\n () => nodeToDOM(props.children(whenValue as T)),\n props.fallback ? () => nodeToDOM(props.fallback!()) : undefined,\n );\n\n return container;\n}\n\n/** Props for the <For> component */\nexport interface ForProps<T> {\n each: (() => T[]) | T[];\n key: (item: T) => unknown;\n children: (item: T, index: number) => AkashNode;\n}\n\n/**\n * <For> component — renders a list with keyed reconciliation.\n * `each` can be a reactive getter or a static array.\n */\nexport function For<T>(props: ForProps<T>): Node {\n const anchor = createAnchor('for');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n // Resolve each — if it's a function, always call it (supports both\n // compiler-generated __reactive getters and plain programmatic functions)\n const getEach = typeof props.each === 'function'\n ? props.each as () => T[]\n : () => props.each as T[];\n\n renderList(\n container,\n anchor,\n getEach,\n props.key,\n (item, index) => nodeToDOM(props.children(item, index)),\n );\n\n return container;\n}\n\n// --- Helpers ---\n\n/** Convert an AkashNode to a DOM Node */\nexport function nodeToDOM(node: AkashNode): Node {\n if (node == null || typeof node === 'boolean') {\n return document.createTextNode('');\n }\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node));\n }\n if (node instanceof Node) {\n return node;\n }\n if (Array.isArray(node)) {\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n fragment.appendChild(nodeToDOM(child));\n }\n return fragment;\n }\n return document.createTextNode(String(node));\n}\n\n/** Insert a node into a parent before an anchor */\nexport function insert(parent: Node, node: AkashNode, anchor?: Node): void {\n const domNode = nodeToDOM(node);\n if (anchor) {\n parent.insertBefore(domNode, anchor);\n } else {\n parent.appendChild(domNode);\n }\n}\n","/**\n * Component system.\n *\n * Components are functions. defineComponent() wraps a setup function\n * that runs once, establishes signals and effects, and returns a\n * render function that produces DOM nodes.\n */\n\nimport { effect, untrack } from './signals.js';\nimport { pushScope, popScope, getCurrentScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport { akashError } from './errors.js';\nimport type { AkashNode } from './types.js';\n\n// --- Reactive getter marker (used by compiler) ---\n\n/** Mark a function as a compiler-generated reactive getter */\nexport function __getter<T>(fn: () => T): (() => T) & { __reactive: true } {\n (fn as any).__reactive = true;\n return fn as any;\n}\n\n// --- Types ---\n\nexport interface Ref<T = HTMLElement> {\n current: T | undefined;\n}\n\nexport interface ComponentContext<P extends Record<string, unknown> = Record<string, unknown>> {\n props: Readonly<P>;\n children: () => AkashNode;\n}\n\nexport type Component<P extends Record<string, unknown> = Record<string, unknown>> = {\n (props: P & { children?: AkashNode | (() => AkashNode) }): Node;\n _akash: true;\n};\n\n// --- Lifecycle hook storage ---\n\ninterface LifecycleHooks {\n mount: Array<() => void | (() => void)>;\n unmount: Array<() => void>;\n error: Array<(error: Error) => void>;\n}\n\nlet currentHooks: LifecycleHooks | null = null;\n\n// --- Public lifecycle hooks ---\n\n/**\n * Register a callback to run after the component is mounted to the DOM.\n * If the callback returns a function, it will be called on unmount (cleanup).\n */\nexport function onMount(fn: () => void | (() => void)): void {\n if (!currentHooks) {\n throw akashError('AK0020');\n }\n currentHooks.mount.push(fn);\n}\n\n/**\n * Register a callback to run before the component is unmounted.\n */\nexport function onUnmount(fn: () => void): void {\n if (!currentHooks) {\n throw akashError('AK0021');\n }\n currentHooks.unmount.push(fn);\n}\n\n/**\n * Register an error handler for this component and its descendants.\n */\nexport function onError(fn: (error: Error) => void): void {\n if (!currentHooks) {\n throw akashError('AK0022');\n }\n currentHooks.error.push(fn);\n}\n\n/**\n * Create a ref for accessing a DOM element or storing a mutable value.\n */\nexport function ref<T = HTMLElement>(initialValue?: T): Ref<T> {\n return { current: initialValue as T | undefined };\n}\n\n// --- defineComponent ---\n\n/**\n * Define a component. The setup function runs once per instance.\n * It receives a context with typed props and must return a render function.\n *\n * ```ts\n * const Counter = defineComponent<{ initial: number }>((ctx) => {\n * const count = signal(ctx.props.initial);\n * return () => <div>{count()}</div>;\n * });\n * ```\n */\nexport function defineComponent<P extends Record<string, any> = Record<string, any>>(\n setup: (ctx: ComponentContext<P>) => () => AkashNode,\n): Component<P> {\n const component = (rawProps: P & { children?: AkashNode | (() => AkashNode) }): Node => {\n // Separate children from props, unwrap getter functions for reactivity\n const { children: childrenProp, ...restProps } = rawProps ?? {};\n // Props are passed through as-is — no auto-unwrapping.\n // Components use readProp() to unwrap reactive getters/signals inside\n // effects, which preserves dependency tracking. Auto-unwrapping in the\n // Proxy broke reactivity because it called the getter once and returned\n // the plain value, so effects never subscribed to the underlying signal.\n const props = restProps as unknown as P;\n\n const childrenFn: () => AkashNode =\n typeof childrenProp === 'function'\n ? childrenProp\n : () => childrenProp ?? null;\n\n const ctx: ComponentContext<P> = {\n props,\n children: childrenFn,\n };\n\n // Set up lifecycle hooks collector\n const hooks: LifecycleHooks = { mount: [], unmount: [], error: [] };\n const prevHooks = currentHooks;\n currentHooks = hooks;\n\n // Push context scope for provide/inject\n const parentScope = getCurrentScope();\n const scope = pushScope(parentScope);\n\n let renderFn: () => AkashNode;\n let domNode: Node;\n\n try {\n // Untrack component creation so that signals created inside the component\n // don't register with a parent render effect. This prevents parent effects\n // from re-running (and re-creating the entire component) when internal\n // component state changes. The component's own effects still track their\n // dependencies because effect() sets its own subscriber during execution.\n domNode = untrack(() => {\n renderFn = setup(ctx);\n if (typeof renderFn !== 'function') { throw akashError('AK0040'); }\n const rendered = renderFn();\n return nodeToDOM(rendered);\n });\n } catch (err) {\n popScope(scope);\n currentHooks = prevHooks;\n if (hooks.error.length > 0) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n return document.createComment('error');\n }\n throw err;\n }\n\n // Restore parent state\n popScope(scope);\n currentHooks = prevHooks;\n\n // Run mount callbacks (microtask to ensure DOM is attached)\n if (hooks.mount.length > 0) {\n queueMicrotask(() => {\n for (const mountFn of hooks.mount) {\n try {\n const cleanup = mountFn();\n if (typeof cleanup === 'function') {\n hooks.unmount.push(cleanup);\n }\n } catch (err) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }\n });\n }\n\n return domNode;\n };\n\n component._akash = true as const;\n return component as Component<P>;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');async function j(a,t=1){return typeof indexedDB>"u"?Promise.reject(new Error("IndexedDB not available")):new Promise((d,r)=>{try{let n=indexedDB.open(a,t);n.onupgradeneeded=()=>{let i=n.result;i.objectStoreNames.contains("items")||i.createObjectStore("items"),i.objectStoreNames.contains("pending")||i.createObjectStore("pending",{autoIncrement:!0});},n.onsuccess=()=>d(n.result),n.onerror=()=>r(n.error??new Error("IndexedDB open failed"));}catch(n){r(n);}})}async function x(a,t){return new Promise((d,r)=>{let i=a.transaction(t,"readonly").objectStore(t).getAll();i.onsuccess=()=>d(i.result),i.onerror=()=>r(i.error);})}async function D(a,t,d,r){return new Promise((n,i)=>{let l=a.transaction(t,"readwrite");l.objectStore(t).put(r,d),l.oncomplete=()=>n(),l.onerror=()=>i(l.error);})}async function B(a,t,d){return new Promise((r,n)=>{let i=a.transaction(t,"readwrite");i.objectStore(t).delete(d),i.oncomplete=()=>r(),i.onerror=()=>n(i.error);})}async function p(a,t){return new Promise((d,r)=>{let n=a.transaction(t,"readwrite");n.objectStore(t).clear(),n.oncomplete=()=>d(),n.onerror=()=>r(n.error);})}function A(a,t={}){let d=t.keyField??"id",r=chunkHL2VGVJT_cjs.c([]),n=chunkHL2VGVJT_cjs.c([]),i=chunkHL2VGVJT_cjs.c(false),l=chunkHL2VGVJT_cjs.c(typeof navigator<"u"&&navigator.onLine!=null?!!navigator.onLine:true),b=chunkHL2VGVJT_cjs.d(()=>n().length),o=null,m=null,T=false;typeof window<"u"&&(window.addEventListener("online",()=>{l.set(true),v();}),window.addEventListener("offline",()=>l.set(false)));async function O(){if(!(typeof indexedDB>"u"))try{o=await j(`akash-offline-${a}`,t.version??1);let e=await x(o,"items");r.set(e);let s=await x(o,"pending");n.set(s);}catch(e){console.error("[AkashJS] Offline store init failed:",e);}}let k=O();if(t.sync){let e=t.sync.interval??3e4;m=setInterval(()=>{l()&&b()>0&&!i()&&v();},e);}function g(e){return String(e[d])}function w(e){let s=g(e);r.update(c=>{let f=c.findIndex(u=>g(u)===s);if(f!==-1){let u=[...c];return u[f]=e,u}return [...c,e]}),S({type:"put",key:s,value:e,timestamp:Date.now()}),o&&D(o,"items",s,e);}function I(e){r.update(s=>s.filter(c=>g(c)!==e)),S({type:"delete",key:e,timestamp:Date.now()}),o&&B(o,"items",e);}function S(e){n.update(s=>[...s,e]),o&&o.transaction("pending","readwrite").objectStore("pending").add(e);}async function v(){if(await k,!t.sync||i()||T)return;let e=n();if(e.length===0)return;i.set(true);let s=t.sync.fetch??globalThis.fetch.bind(globalThis);try{if((await s(t.sync.url,{method:"POST",headers:{"Content-Type":"application/json",...t.sync.headers},body:JSON.stringify({ops:e})})).ok){n.set([]),o&&await p(o,"pending");let f=await s(t.sync.url,{headers:t.sync.headers});if(f.ok){let u=await f.json();if(r.set(u),o){await p(o,"items");for(let P of u)await D(o,"items",g(P),P);}}}}catch(c){console.warn("[AkashJS] Offline sync failed:",c);}finally{i.set(false);}}return {items:()=>r(),data:()=>r(),get(e){return r().find(s=>g(s)===e)},put:w,add:w,update(e,s){let c=r().find(f=>g(f)===e);c&&w({...c,...s});},remove:I,clear(){r.set([]),n.set([]),o&&(p(o,"items"),p(o,"pending"));},pending:b,syncing:()=>i(),online:()=>l(),sync:v,dispose(){T=true,m&&clearInterval(m),o?.close();}}}exports.a=A;//# sourceMappingURL=chunk-LTMDSGQ6.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-LTMDSGQ6.cjs.map
|