@akashjs/runtime 0.2.7 → 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 +1 -1
- package/dist/a11y.js +1 -1
- package/dist/async-component.cjs +1 -1
- package/dist/async-component.js +1 -1
- package/dist/await-block.cjs +1 -1
- package/dist/await-block.js +1 -1
- package/dist/browser.cjs +1 -1
- package/dist/browser.js +1 -1
- package/dist/{chunk-SXYPAP4B.js → chunk-2GGCZC4O.js} +2 -2
- package/dist/{chunk-SXYPAP4B.js.map → chunk-2GGCZC4O.js.map} +1 -1
- package/dist/chunk-2UATNCKC.js +2 -0
- package/dist/chunk-2UATNCKC.js.map +1 -0
- package/dist/{chunk-FVF3T4JJ.js → chunk-2XFW6MT7.js} +2 -2
- package/dist/{chunk-FVF3T4JJ.js.map → chunk-2XFW6MT7.js.map} +1 -1
- package/dist/{chunk-ZJULEDLY.js → chunk-3CD6A5YV.js} +2 -2
- package/dist/{chunk-ZJULEDLY.js.map → chunk-3CD6A5YV.js.map} +1 -1
- package/dist/{chunk-N5APNCPB.js → chunk-3PCZFKBH.js} +2 -2
- package/dist/{chunk-N5APNCPB.js.map → chunk-3PCZFKBH.js.map} +1 -1
- package/dist/{chunk-Q6S7SUOM.js → chunk-3PLQPLVA.js} +2 -2
- package/dist/{chunk-Q6S7SUOM.js.map → chunk-3PLQPLVA.js.map} +1 -1
- package/dist/chunk-3RDEFZMT.js +2 -0
- package/dist/{chunk-NCXMNJUN.js.map → chunk-3RDEFZMT.js.map} +1 -1
- package/dist/{chunk-KUPL3ZVD.js → chunk-3VYMJMAU.js} +2 -2
- package/dist/{chunk-KUPL3ZVD.js.map → chunk-3VYMJMAU.js.map} +1 -1
- package/dist/{chunk-QQ725EZL.js → chunk-3Y663FYJ.js} +2 -2
- package/dist/{chunk-QQ725EZL.js.map → chunk-3Y663FYJ.js.map} +1 -1
- package/dist/{chunk-VNDSKBXQ.cjs → chunk-4VLBY2BW.cjs} +2 -2
- package/dist/{chunk-VNDSKBXQ.cjs.map → chunk-4VLBY2BW.cjs.map} +1 -1
- package/dist/{chunk-VUSNUBNI.js → chunk-5GDMAABU.js} +2 -2
- package/dist/{chunk-VUSNUBNI.js.map → chunk-5GDMAABU.js.map} +1 -1
- package/dist/{chunk-QE2TJ6P5.cjs → chunk-5JKXREA2.cjs} +2 -2
- package/dist/{chunk-QE2TJ6P5.cjs.map → chunk-5JKXREA2.cjs.map} +1 -1
- package/dist/{chunk-AZCELE44.cjs → chunk-637ENG3A.cjs} +2 -2
- package/dist/{chunk-AZCELE44.cjs.map → chunk-637ENG3A.cjs.map} +1 -1
- package/dist/{chunk-BB7P6HTR.js → chunk-66PLXQS3.js} +2 -2
- package/dist/{chunk-BB7P6HTR.js.map → chunk-66PLXQS3.js.map} +1 -1
- package/dist/{chunk-TDKDZ3QJ.cjs → chunk-6GY6HC75.cjs} +2 -2
- package/dist/{chunk-TDKDZ3QJ.cjs.map → chunk-6GY6HC75.cjs.map} +1 -1
- package/dist/{chunk-M5IACTFC.cjs → chunk-6I5PPQ34.cjs} +3 -3
- package/dist/{chunk-M5IACTFC.cjs.map → chunk-6I5PPQ34.cjs.map} +1 -1
- package/dist/{chunk-QNVMBXVH.js → chunk-6ZCFPR4O.js} +2 -2
- package/dist/{chunk-QNVMBXVH.js.map → chunk-6ZCFPR4O.js.map} +1 -1
- package/dist/{chunk-R7NUVVHP.js → chunk-7T4HMWUC.js} +2 -2
- package/dist/{chunk-R7NUVVHP.js.map → chunk-7T4HMWUC.js.map} +1 -1
- package/dist/{chunk-36VM3RJW.cjs → chunk-BLT7XOSX.cjs} +2 -2
- package/dist/{chunk-36VM3RJW.cjs.map → chunk-BLT7XOSX.cjs.map} +1 -1
- package/dist/chunk-CDZR6GWB.js +2 -0
- package/dist/chunk-CDZR6GWB.js.map +1 -0
- package/dist/chunk-DWSIR5SL.cjs +2 -0
- package/dist/{chunk-7ZPSYZHD.cjs.map → chunk-DWSIR5SL.cjs.map} +1 -1
- package/dist/{chunk-NJXXC5JB.js → chunk-E7BPGVIS.js} +2 -2
- package/dist/{chunk-NJXXC5JB.js.map → chunk-E7BPGVIS.js.map} +1 -1
- package/dist/chunk-E7GAIKQT.cjs +2 -0
- package/dist/{chunk-FUVSCPU4.cjs.map → chunk-E7GAIKQT.cjs.map} +1 -1
- package/dist/{chunk-VWTULWXF.js → chunk-EEQZFKEG.js} +2 -2
- package/dist/{chunk-VWTULWXF.js.map → chunk-EEQZFKEG.js.map} +1 -1
- package/dist/{chunk-7IJUJUXE.cjs → chunk-EXKQPZ5N.cjs} +2 -2
- package/dist/{chunk-7IJUJUXE.cjs.map → chunk-EXKQPZ5N.cjs.map} +1 -1
- package/dist/{chunk-NHDYQTC5.cjs → chunk-F2F5OXCK.cjs} +3 -3
- package/dist/{chunk-NHDYQTC5.cjs.map → chunk-F2F5OXCK.cjs.map} +1 -1
- package/dist/{chunk-7VBH4F3P.js → chunk-GAAO2KXN.js} +2 -2
- package/dist/{chunk-7VBH4F3P.js.map → chunk-GAAO2KXN.js.map} +1 -1
- package/dist/{chunk-F6VSSM2P.js → chunk-GB7IUC6E.js} +2 -2
- package/dist/{chunk-F6VSSM2P.js.map → chunk-GB7IUC6E.js.map} +1 -1
- package/dist/{chunk-TZHEZW6R.js → chunk-GHSJ4B55.js} +3 -3
- package/dist/{chunk-TZHEZW6R.js.map → chunk-GHSJ4B55.js.map} +1 -1
- package/dist/{chunk-NBYFHJWB.js → chunk-GRXHWCFR.js} +3 -3
- package/dist/{chunk-NBYFHJWB.js.map → chunk-GRXHWCFR.js.map} +1 -1
- package/dist/{chunk-WTDTVWCQ.cjs → chunk-HHPRQMGX.cjs} +2 -2
- package/dist/{chunk-WTDTVWCQ.cjs.map → chunk-HHPRQMGX.cjs.map} +1 -1
- package/dist/chunk-HL2VGVJT.cjs +2 -0
- package/dist/chunk-HL2VGVJT.cjs.map +1 -0
- package/dist/{chunk-Z6K4FYG6.js → chunk-IDTJWCYW.js} +2 -2
- package/dist/{chunk-Z6K4FYG6.js.map → chunk-IDTJWCYW.js.map} +1 -1
- package/dist/{chunk-6O46EMQS.cjs → chunk-JMY6E7VR.cjs} +2 -2
- package/dist/{chunk-6O46EMQS.cjs.map → chunk-JMY6E7VR.cjs.map} +1 -1
- package/dist/{chunk-XZR3J626.cjs → chunk-KFMCMKSC.cjs} +2 -2
- package/dist/{chunk-XZR3J626.cjs.map → chunk-KFMCMKSC.cjs.map} +1 -1
- package/dist/{chunk-IKVHLORY.cjs → chunk-KGV5MKBC.cjs} +3 -3
- package/dist/{chunk-IKVHLORY.cjs.map → chunk-KGV5MKBC.cjs.map} +1 -1
- package/dist/{chunk-R65RPMQX.cjs → chunk-KQAYFPJI.cjs} +2 -2
- package/dist/{chunk-R65RPMQX.cjs.map → chunk-KQAYFPJI.cjs.map} +1 -1
- package/dist/chunk-LSD7DEMV.cjs +2 -0
- package/dist/chunk-LSD7DEMV.cjs.map +1 -0
- package/dist/{chunk-2LKFIID7.cjs → chunk-LTMDSGQ6.cjs} +2 -2
- package/dist/{chunk-2LKFIID7.cjs.map → chunk-LTMDSGQ6.cjs.map} +1 -1
- package/dist/{chunk-4NQEIKH5.cjs → chunk-M2OWSNOM.cjs} +2 -2
- package/dist/{chunk-4NQEIKH5.cjs.map → chunk-M2OWSNOM.cjs.map} +1 -1
- package/dist/{chunk-PYASLKWF.js → chunk-MGFRVOM5.js} +2 -2
- package/dist/{chunk-PYASLKWF.js.map → chunk-MGFRVOM5.js.map} +1 -1
- package/dist/{chunk-JQCN42XX.js → chunk-MNUOIAXS.js} +2 -2
- package/dist/{chunk-JQCN42XX.js.map → chunk-MNUOIAXS.js.map} +1 -1
- package/dist/{chunk-NEQ5TENE.cjs → chunk-ND2HZRMR.cjs} +2 -2
- package/dist/{chunk-NEQ5TENE.cjs.map → chunk-ND2HZRMR.cjs.map} +1 -1
- package/dist/chunk-O5OTZP5M.cjs +2 -0
- package/dist/{chunk-JD3LDHUI.cjs.map → chunk-O5OTZP5M.cjs.map} +1 -1
- package/dist/{chunk-LD4C62JY.cjs → chunk-P4USGNUK.cjs} +2 -2
- package/dist/{chunk-LD4C62JY.cjs.map → chunk-P4USGNUK.cjs.map} +1 -1
- package/dist/{chunk-L3ZZX36S.js → chunk-P55EWYAD.js} +2 -2
- package/dist/{chunk-L3ZZX36S.js.map → chunk-P55EWYAD.js.map} +1 -1
- package/dist/{chunk-OZ4GNBKA.js → chunk-PVIYD25D.js} +2 -2
- package/dist/{chunk-OZ4GNBKA.js.map → chunk-PVIYD25D.js.map} +1 -1
- package/dist/{chunk-2HLDEWRT.cjs → chunk-PWJMCURK.cjs} +2 -2
- package/dist/{chunk-2HLDEWRT.cjs.map → chunk-PWJMCURK.cjs.map} +1 -1
- package/dist/{chunk-7UX5CSGZ.cjs → chunk-SBDFBADL.cjs} +2 -2
- package/dist/{chunk-7UX5CSGZ.cjs.map → chunk-SBDFBADL.cjs.map} +1 -1
- package/dist/{chunk-DHFVVFZF.cjs → chunk-SPS3LM47.cjs} +2 -2
- package/dist/{chunk-DHFVVFZF.cjs.map → chunk-SPS3LM47.cjs.map} +1 -1
- package/dist/{chunk-N3ITIHHM.js → chunk-SVNS64LE.js} +3 -3
- package/dist/{chunk-N3ITIHHM.js.map → chunk-SVNS64LE.js.map} +1 -1
- package/dist/{chunk-TSFY5HKB.js → chunk-SZDKDXRV.js} +3 -3
- package/dist/{chunk-TSFY5HKB.js.map → chunk-SZDKDXRV.js.map} +1 -1
- package/dist/{chunk-T2RVAQEU.js → chunk-UXHQ5OFW.js} +2 -2
- package/dist/{chunk-T2RVAQEU.js.map → chunk-UXHQ5OFW.js.map} +1 -1
- package/dist/{chunk-TFEHO7SF.cjs → chunk-UYJ4BAPL.cjs} +2 -2
- package/dist/{chunk-TFEHO7SF.cjs.map → chunk-UYJ4BAPL.cjs.map} +1 -1
- package/dist/chunk-VDHUPQDK.cjs +2 -0
- package/dist/{chunk-TYTEJYUQ.cjs.map → chunk-VDHUPQDK.cjs.map} +1 -1
- package/dist/{chunk-YDO5KARN.js → chunk-VTD3TI3M.js} +2 -2
- package/dist/{chunk-YDO5KARN.js.map → chunk-VTD3TI3M.js.map} +1 -1
- package/dist/{chunk-CP6SK2B4.js → chunk-WB7QDCEA.js} +2 -2
- package/dist/{chunk-CP6SK2B4.js.map → chunk-WB7QDCEA.js.map} +1 -1
- package/dist/{chunk-WZ5ULION.js → chunk-XAGYLTHV.js} +2 -2
- package/dist/{chunk-WZ5ULION.js.map → chunk-XAGYLTHV.js.map} +1 -1
- package/dist/{chunk-QSPRVXFV.cjs → chunk-XE7JC7Y3.cjs} +2 -2
- package/dist/{chunk-QSPRVXFV.cjs.map → chunk-XE7JC7Y3.cjs.map} +1 -1
- package/dist/{chunk-FVWHMFX6.cjs → chunk-XMNDNTHK.cjs} +3 -3
- package/dist/{chunk-FVWHMFX6.cjs.map → chunk-XMNDNTHK.cjs.map} +1 -1
- package/dist/{chunk-J6KDUWX6.cjs → chunk-XOPRWJCX.cjs} +2 -2
- package/dist/{chunk-J6KDUWX6.cjs.map → chunk-XOPRWJCX.cjs.map} +1 -1
- package/dist/{chunk-VO4FCKHM.js → chunk-XRWOZO67.js} +2 -2
- package/dist/{chunk-VO4FCKHM.js.map → chunk-XRWOZO67.js.map} +1 -1
- package/dist/chunk-XZOP3IWH.cjs +2 -0
- package/dist/{chunk-YURIYBTN.cjs.map → chunk-XZOP3IWH.cjs.map} +1 -1
- package/dist/{chunk-BGSF77LF.js → chunk-YG76TVFL.js} +2 -2
- package/dist/{chunk-BGSF77LF.js.map → chunk-YG76TVFL.js.map} +1 -1
- package/dist/{chunk-V2JDKH3W.cjs → chunk-YQQDRDJ7.cjs} +2 -2
- package/dist/{chunk-V2JDKH3W.cjs.map → chunk-YQQDRDJ7.cjs.map} +1 -1
- package/dist/{chunk-3XREYIJH.cjs → chunk-ZGE46DPV.cjs} +2 -2
- package/dist/{chunk-3XREYIJH.cjs.map → chunk-ZGE46DPV.cjs.map} +1 -1
- package/dist/composables.cjs +1 -1
- package/dist/composables.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deep-signal.cjs +1 -1
- package/dist/deep-signal.js +1 -1
- package/dist/defer.cjs +1 -1
- package/dist/defer.js +1 -1
- package/dist/{devtools-overlay-3WRM6GKM.js → devtools-overlay-3PHULVP4.js} +3 -3
- package/dist/{devtools-overlay-3WRM6GKM.js.map → devtools-overlay-3PHULVP4.js.map} +1 -1
- package/dist/{devtools-overlay-WJGSIB4N.cjs → devtools-overlay-SJV7WNNS.cjs} +4 -4
- package/dist/{devtools-overlay-WJGSIB4N.cjs.map → devtools-overlay-SJV7WNNS.cjs.map} +1 -1
- package/dist/devtools.cjs +1 -1
- package/dist/devtools.js +1 -1
- package/dist/di.cjs +1 -1
- package/dist/di.js +1 -1
- package/dist/error-boundary.cjs +1 -1
- package/dist/error-boundary.js +1 -1
- package/dist/event-modifiers.cjs +1 -1
- package/dist/event-modifiers.js +1 -1
- package/dist/head.cjs +1 -1
- package/dist/head.js +1 -1
- package/dist/hydration.cjs +1 -1
- package/dist/hydration.js +1 -1
- package/dist/image.cjs +1 -1
- package/dist/image.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/infinite-scroll.cjs +1 -1
- package/dist/infinite-scroll.js +1 -1
- package/dist/machine.cjs +1 -1
- package/dist/machine.js +1 -1
- package/dist/offline.cjs +1 -1
- package/dist/offline.js +1 -1
- package/dist/portal.cjs +1 -1
- package/dist/portal.js +1 -1
- package/dist/pwa.cjs +1 -1
- package/dist/pwa.js +1 -1
- package/dist/query-state.cjs +1 -1
- package/dist/query-state.js +1 -1
- package/dist/seo.cjs +1 -1
- package/dist/seo.js +1 -1
- package/dist/snippets.cjs +1 -1
- package/dist/snippets.js +1 -1
- package/dist/ssr.cjs +1 -1
- package/dist/ssr.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/suspense.cjs +1 -1
- package/dist/suspense.js +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +1 -1
- package/dist/sync.cjs +1 -1
- package/dist/sync.js +1 -1
- package/dist/test.cjs +2 -2
- package/dist/test.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/toast.cjs +1 -1
- package/dist/toast.js +1 -1
- package/dist/transition.cjs +1 -1
- package/dist/transition.js +1 -1
- package/dist/tweened.cjs +1 -1
- package/dist/tweened.js +1 -1
- package/dist/virtual-list.cjs +1 -1
- package/dist/virtual-list.js +1 -1
- package/dist/watch.cjs +1 -1
- package/dist/watch.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7ZPSYZHD.cjs +0 -2
- package/dist/chunk-FUVSCPU4.cjs +0 -2
- package/dist/chunk-JD3LDHUI.cjs +0 -2
- package/dist/chunk-KE7BJTCD.js +0 -2
- package/dist/chunk-KE7BJTCD.js.map +0 -1
- package/dist/chunk-NCXMNJUN.js +0 -2
- package/dist/chunk-TYTEJYUQ.cjs +0 -2
- package/dist/chunk-WOZWFMOK.cjs +0 -2
- package/dist/chunk-WOZWFMOK.cjs.map +0 -1
- package/dist/chunk-XWVNLE2W.cjs +0 -2
- package/dist/chunk-XWVNLE2W.cjs.map +0 -1
- package/dist/chunk-YURIYBTN.cjs +0 -2
- package/dist/chunk-YXKQTEPR.js +0 -2
- package/dist/chunk-YXKQTEPR.js.map +0 -1
package/dist/a11y.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk6GY6HC75_cjs=require('./chunk-6GY6HC75.cjs');require('./chunk-HL2VGVJT.cjs'),require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"useAnnounce",{enumerable:true,get:function(){return chunk6GY6HC75_cjs.b}});Object.defineProperty(exports,"useFocusTrap",{enumerable:true,get:function(){return chunk6GY6HC75_cjs.a}});Object.defineProperty(exports,"useKeyboard",{enumerable:true,get:function(){return chunk6GY6HC75_cjs.c}});//# sourceMappingURL=a11y.cjs.map
|
|
2
2
|
//# sourceMappingURL=a11y.cjs.map
|
package/dist/a11y.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{b as useAnnounce,a as useFocusTrap,c as useKeyboard}from'./chunk-
|
|
1
|
+
export{b as useAnnounce,a as useFocusTrap,c as useKeyboard}from'./chunk-P55EWYAD.js';import'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=a11y.js.map
|
|
2
2
|
//# sourceMappingURL=a11y.js.map
|
package/dist/async-component.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkUYJ4BAPL_cjs=require('./chunk-UYJ4BAPL.cjs');require('./chunk-LSD7DEMV.cjs'),require('./chunk-IQGSDFBI.cjs'),require('./chunk-PPNEAFKE.cjs'),require('./chunk-HL2VGVJT.cjs'),require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"defineAsyncComponent",{enumerable:true,get:function(){return chunkUYJ4BAPL_cjs.a}});//# sourceMappingURL=async-component.cjs.map
|
|
2
2
|
//# sourceMappingURL=async-component.cjs.map
|
package/dist/async-component.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as defineAsyncComponent}from'./chunk-
|
|
1
|
+
export{a as defineAsyncComponent}from'./chunk-2GGCZC4O.js';import'./chunk-CDZR6GWB.js';import'./chunk-VUMMC2P5.js';import'./chunk-AOFLE33X.js';import'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=async-component.js.map
|
|
2
2
|
//# sourceMappingURL=async-component.js.map
|
package/dist/await-block.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkXZOP3IWH_cjs=require('./chunk-XZOP3IWH.cjs');require('./chunk-LSD7DEMV.cjs'),require('./chunk-IQGSDFBI.cjs'),require('./chunk-PPNEAFKE.cjs'),require('./chunk-HL2VGVJT.cjs'),require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"Await",{enumerable:true,get:function(){return chunkXZOP3IWH_cjs.a}});Object.defineProperty(exports,"awaitSignal",{enumerable:true,get:function(){return chunkXZOP3IWH_cjs.b}});//# sourceMappingURL=await-block.cjs.map
|
|
2
2
|
//# sourceMappingURL=await-block.cjs.map
|
package/dist/await-block.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as Await,b as awaitSignal}from'./chunk-
|
|
1
|
+
export{a as Await,b as awaitSignal}from'./chunk-E7BPGVIS.js';import'./chunk-CDZR6GWB.js';import'./chunk-VUMMC2P5.js';import'./chunk-AOFLE33X.js';import'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=await-block.js.map
|
|
2
2
|
//# sourceMappingURL=await-block.js.map
|
package/dist/browser.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkKQAYFPJI_cjs=require('./chunk-KQAYFPJI.cjs');require('./chunk-HL2VGVJT.cjs'),require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"useBreakpoint",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.b}});Object.defineProperty(exports,"useClickOutside",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.h}});Object.defineProperty(exports,"useClipboard",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.d}});Object.defineProperty(exports,"useGeolocation",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.f}});Object.defineProperty(exports,"useMediaQuery",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.a}});Object.defineProperty(exports,"useOnline",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.e}});Object.defineProperty(exports,"useStorage",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.c}});Object.defineProperty(exports,"useWindowSize",{enumerable:true,get:function(){return chunkKQAYFPJI_cjs.g}});//# sourceMappingURL=browser.cjs.map
|
|
2
2
|
//# sourceMappingURL=browser.cjs.map
|
package/dist/browser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{b as useBreakpoint,h as useClickOutside,d as useClipboard,f as useGeolocation,a as useMediaQuery,e as useOnline,c as useStorage,g as useWindowSize}from'./chunk-
|
|
1
|
+
export{b as useBreakpoint,h as useClickOutside,d as useClipboard,f as useGeolocation,a as useMediaQuery,e as useOnline,c as useStorage,g as useWindowSize}from'./chunk-MNUOIAXS.js';import'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=browser.js.map
|
|
2
2
|
//# sourceMappingURL=browser.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {s,l}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';function w(i){let P=typeof i=="function"?{loader:i}:i,{loader:C,loading:c$1,error:f,timeout:s$1,delay:y=200}=P,l$1=null,t=null,o=null;function A(){return t||(t=C().then(e=>{l$1=e.default;}).catch(e=>{o=e instanceof Error?e:new Error(String(e));}),t)}return s(e=>{let n=c("loading"),m=c(false);A().then(()=>{o?n.set("error"):n.set("ready");});let a=null;y>0?a=setTimeout(()=>m.set(true),y):m.set(true);let u=null;return s$1&&(u=setTimeout(()=>{n()==="loading"&&(o=new Error(`Async component timed out after ${s$1}ms`),n.set("error"));},s$1)),()=>{let r=n();return r!=="loading"&&(a&&clearTimeout(a),u&&clearTimeout(u)),r==="ready"&&l$1?l$1(e.props):r==="error"&&f&&o?l(f(o)):r==="loading"&&m()&&c$1?l(c$1()):document.createComment("async-loading")}})}export{w as a};//# sourceMappingURL=chunk-2GGCZC4O.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2GGCZC4O.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/async-component.ts"],"names":["defineAsyncComponent","loaderOrOptions","options","loader","loadingFn","errorFn","timeout","delay","resolvedComp","loadPromise","loadError","startLoad","mod","err","defineComponent","ctx","state","signal","showLoading","delayTimer","timeoutTimer","s","nodeToDOM"],"mappings":"0EAiDO,SAASA,EACdC,CAAAA,CACc,CACd,IAAMC,CAAAA,CACJ,OAAOD,GAAoB,UAAA,CACvB,CAAE,OAAQA,CAAgB,CAAA,CAC1BA,EAEA,CACJ,MAAA,CAAAE,EACA,OAAA,CAASC,GAAAA,CACT,MAAOC,CAAAA,CACP,OAAA,CAAAC,IACA,KAAA,CAAAC,CAAAA,CAAQ,GACV,CAAA,CAAIL,CAAAA,CAGAM,IAAoC,IAAA,CACpCC,CAAAA,CAAoC,KACpCC,CAAAA,CAA0B,IAAA,CAE9B,SAASC,CAAAA,EAA2B,CAClC,OAAIF,CAAAA,GAEJA,CAAAA,CAAcN,GAAO,CAClB,IAAA,CAAMS,GAAQ,CACbJ,GAAAA,CAAeI,EAAI,QACrB,CAAC,EACA,KAAA,CAAOC,CAAAA,EAAQ,CACdH,CAAAA,CAAYG,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,MAAM,MAAA,CAAOA,CAAG,CAAC,EAChE,CAAC,EAEIJ,CAAAA,CACT,CAEA,OAAOK,CAAAA,CAAoBC,CAAAA,EAAQ,CACjC,IAAMC,CAAAA,CAAQC,EAAsC,SAAS,CAAA,CACvDC,EAAcD,CAAAA,CAAO,KAAK,EAGhCN,CAAAA,EAAU,CAAE,KAAK,IAAM,CACjBD,EACFM,CAAAA,CAAM,GAAA,CAAI,OAAO,CAAA,CAEjBA,CAAAA,CAAM,IAAI,OAAO,EAErB,CAAC,CAAA,CAGD,IAAIG,EAAmD,IAAA,CACnDZ,CAAAA,CAAQ,EACVY,CAAAA,CAAa,UAAA,CAAW,IAAMD,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CAAGX,CAAK,EAE1DW,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CAItB,IAAIE,EAAqD,IAAA,CACzD,OAAId,MACFc,CAAAA,CAAe,UAAA,CAAW,IAAM,CAC1BJ,CAAAA,KAAY,SAAA,GACdN,CAAAA,CAAY,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmCJ,GAAO,CAAA,EAAA,CAAI,CAAA,CACpEU,EAAM,GAAA,CAAI,OAAO,GAErB,CAAA,CAAGV,GAAO,GAGL,IAAM,CACX,IAAMe,CAAAA,CAAIL,CAAAA,GAQV,OALIK,CAAAA,GAAM,YACJF,CAAAA,EAAY,YAAA,CAAaA,CAAU,CAAA,CACnCC,CAAAA,EAAc,aAAaA,CAAY,CAAA,CAAA,CAGzCC,IAAM,OAAA,EAAWb,GAAAA,CACZA,IAAaO,CAAAA,CAAI,KAAY,EAGlCM,CAAAA,GAAM,OAAA,EAAWhB,GAAWK,CAAAA,CACvBY,CAAAA,CAAUjB,EAAQK,CAAS,CAAC,EAGjCW,CAAAA,GAAM,SAAA,EAAaH,GAAY,EAAKd,GAAAA,CAC/BkB,EAAUlB,GAAAA,EAAW,EAIvB,QAAA,CAAS,aAAA,CAAc,eAAe,CAC/C,CACF,CAAC,CACH","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/async-component.ts"],"names":["defineAsyncComponent","loaderOrOptions","options","loader","loadingFn","errorFn","timeout","delay","resolvedComp","loadPromise","loadError","startLoad","mod","err","defineComponent","ctx","state","signal","showLoading","delayTimer","timeoutTimer","s","nodeToDOM"],"mappings":"0EAiDO,SAASA,EACdC,CAAAA,CACc,CACd,IAAMC,CAAAA,CACJ,OAAOD,GAAoB,UAAA,CACvB,CAAE,OAAQA,CAAgB,CAAA,CAC1BA,EAEA,CACJ,MAAA,CAAAE,EACA,OAAA,CAASC,GAAAA,CACT,MAAOC,CAAAA,CACP,OAAA,CAAAC,IACA,KAAA,CAAAC,CAAAA,CAAQ,GACV,CAAA,CAAIL,CAAAA,CAGAM,IAAoC,IAAA,CACpCC,CAAAA,CAAoC,KACpCC,CAAAA,CAA0B,IAAA,CAE9B,SAASC,CAAAA,EAA2B,CAClC,OAAIF,CAAAA,GAEJA,CAAAA,CAAcN,GAAO,CAClB,IAAA,CAAMS,GAAQ,CACbJ,GAAAA,CAAeI,EAAI,QACrB,CAAC,EACA,KAAA,CAAOC,CAAAA,EAAQ,CACdH,CAAAA,CAAYG,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,MAAM,MAAA,CAAOA,CAAG,CAAC,EAChE,CAAC,EAEIJ,CAAAA,CACT,CAEA,OAAOK,CAAAA,CAAoBC,CAAAA,EAAQ,CACjC,IAAMC,CAAAA,CAAQC,EAAsC,SAAS,CAAA,CACvDC,EAAcD,CAAAA,CAAO,KAAK,EAGhCN,CAAAA,EAAU,CAAE,KAAK,IAAM,CACjBD,EACFM,CAAAA,CAAM,GAAA,CAAI,OAAO,CAAA,CAEjBA,CAAAA,CAAM,IAAI,OAAO,EAErB,CAAC,CAAA,CAGD,IAAIG,EAAmD,IAAA,CACnDZ,CAAAA,CAAQ,EACVY,CAAAA,CAAa,UAAA,CAAW,IAAMD,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CAAGX,CAAK,EAE1DW,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CAItB,IAAIE,EAAqD,IAAA,CACzD,OAAId,MACFc,CAAAA,CAAe,UAAA,CAAW,IAAM,CAC1BJ,CAAAA,KAAY,SAAA,GACdN,CAAAA,CAAY,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmCJ,GAAO,CAAA,EAAA,CAAI,CAAA,CACpEU,EAAM,GAAA,CAAI,OAAO,GAErB,CAAA,CAAGV,GAAO,GAGL,IAAM,CACX,IAAMe,CAAAA,CAAIL,CAAAA,GAQV,OALIK,CAAAA,GAAM,YACJF,CAAAA,EAAY,YAAA,CAAaA,CAAU,CAAA,CACnCC,CAAAA,EAAc,aAAaA,CAAY,CAAA,CAAA,CAGzCC,IAAM,OAAA,EAAWb,GAAAA,CACZA,IAAaO,CAAAA,CAAI,KAAY,EAGlCM,CAAAA,GAAM,OAAA,EAAWhB,GAAWK,CAAAA,CACvBY,CAAAA,CAAUjB,EAAQK,CAAS,CAAC,EAGjCW,CAAAA,GAAM,SAAA,EAAaH,GAAY,EAAKd,GAAAA,CAC/BkB,EAAUlB,GAAAA,EAAW,EAIvB,QAAA,CAAS,aAAA,CAAc,eAAe,CAC/C,CACF,CAAC,CACH","file":"chunk-2GGCZC4O.js","sourcesContent":["/**\n * defineAsyncComponent — lazy component loading.\n *\n * Wraps a dynamic import() into a component that shows a loading\n * state while the chunk downloads, an error state if it fails,\n * and the real component once resolved.\n *\n * ```ts\n * const LazyChart = defineAsyncComponent(() => import('./Chart.akash'));\n *\n * // With loading/error:\n * const LazyChart = defineAsyncComponent({\n * loader: () => import('./Chart.akash'),\n * loading: () => <Spinner />,\n * error: (err) => <p>Failed: {err.message}</p>,\n * timeout: 10000,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport type AsyncComponentLoader<P extends Record<string, unknown> = any> =\n () => Promise<{ default: Component<P> }>;\n\nexport interface AsyncComponentOptions<P extends Record<string, unknown> = any> {\n /** The async loader function (dynamic import) */\n loader: AsyncComponentLoader<P>;\n /** Component to show while loading */\n loading?: () => AkashNode;\n /** Component to show on error */\n error?: (error: Error) => AkashNode;\n /** Timeout in ms — show error after this (default: none) */\n timeout?: number;\n /** Delay in ms before showing loading state (default: 200) */\n delay?: number;\n}\n\n// --- defineAsyncComponent ---\n\n/**\n * Define a component that loads asynchronously via dynamic import.\n */\nexport function defineAsyncComponent<P extends Record<string, unknown> = any>(\n loaderOrOptions: AsyncComponentLoader<P> | AsyncComponentOptions<P>,\n): Component<P> {\n const options: AsyncComponentOptions<P> =\n typeof loaderOrOptions === 'function'\n ? { loader: loaderOrOptions }\n : loaderOrOptions;\n\n const {\n loader,\n loading: loadingFn,\n error: errorFn,\n timeout,\n delay = 200,\n } = options;\n\n // Cache the loaded component\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n loadPromise = loader()\n .then((mod) => {\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n return defineComponent<P>((ctx) => {\n const state = signal<'loading' | 'ready' | 'error'>('loading');\n const showLoading = signal(false);\n\n // Start loading\n startLoad().then(() => {\n if (loadError) {\n state.set('error');\n } else {\n state.set('ready');\n }\n });\n\n // Delay before showing loading indicator\n let delayTimer: ReturnType<typeof setTimeout> | null = null;\n if (delay > 0) {\n delayTimer = setTimeout(() => showLoading.set(true), delay);\n } else {\n showLoading.set(true);\n }\n\n // Timeout\n let timeoutTimer: ReturnType<typeof setTimeout> | null = null;\n if (timeout) {\n timeoutTimer = setTimeout(() => {\n if (state() === 'loading') {\n loadError = new Error(`Async component timed out after ${timeout}ms`);\n state.set('error');\n }\n }, timeout);\n }\n\n return () => {\n const s = state();\n\n // Clear timers once resolved\n if (s !== 'loading') {\n if (delayTimer) clearTimeout(delayTimer);\n if (timeoutTimer) clearTimeout(timeoutTimer);\n }\n\n if (s === 'ready' && resolvedComp) {\n return resolvedComp(ctx.props as any);\n }\n\n if (s === 'error' && errorFn && loadError) {\n return nodeToDOM(errorFn(loadError));\n }\n\n if (s === 'loading' && showLoading() && loadingFn) {\n return nodeToDOM(loadingFn());\n }\n\n // Nothing to show yet\n return document.createComment('async-loading');\n };\n });\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c as c$1,d}from'./chunk-U65WRXZC.js';var c=new Set,a=new Set,b=false,f=0,T=false,D=3,q=100;function h(){if(b)return;b=true;let e=new Map,n=false,t=0;for(;(c.size>0||a.size>0)&&t<q;){if(t++,c.size>0){let s=[...c].sort(V);c.clear();for(let r of s){let i=(e.get(r)??0)+1;if(e.set(r,i),i>D){n=true;continue}r.run();}}if(a.size>0){let s=[...a].sort(V);a.clear();for(let r of s){let i=(e.get(r)??0)+1;if(e.set(r,i),i>D){n=true;continue}r.run();}}if(n&&c.size===0&&a.size===0)break}(n||t>=q)&&(c.clear(),a.clear(),console.error("[AkashJS] Circular dependency detected between effects. Two or more effects are writing to each other's dependencies. The cycle has been broken after "+t+" iterations.")),b=false,T&&(T=false,(c.size>0||a.size>0)&&h());}function m(e){e.isRender?c.add(e):a.add(e),f===0&&!b?h():b&&(T=true);}function X(e){f++;try{return e()}finally{f--,f===0&&h();}}function g(){f++;}function w(){f--,f===0&&h();}function V(e,n){return (e.depth??0)-(n.depth??0)}function H(){h();}var _=typeof process>"u"||process.env?.NODE_ENV!=="production";var u=null;function k(e,n){return e===null?n:Array.isArray(e)?(e.indexOf(n)===-1&&e.push(n),e):e===n?e:[e,n]}function x(e,n){if(e===null||e===n)return null;if(Array.isArray(e)){let t=e.indexOf(n);if(t!==-1){if(e.length===2)return e[1-t];e.splice(t,1);}return e}return e}function R(e,n){if(e!==null)if(Array.isArray(e)){let t=e.slice();for(let s=0;s<t.length;s++)n(t[s]);}else n(e);}var N=class{_value;_subscribers;_equals;_version;constructor(n,t){this._value=n,this._subscribers=null,this._equals=t??Object.is,this._version=0;}};function J(e){this.set(e(this._node._value));}function K(){return this._node._value}function Q(e,n){let t=new N(e,n?.equals),s=()=>(I(t),t._value);return s.set=r=>{_&&u&&u._tag==="computed"&&console.warn("[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation."),!t._equals(t._value,r)&&(t._value=r,t._version++,_&&c$1()&&d("signal-update","signal.set",0),g(),v(t),w());},s._node=t,s.update=J.bind(s),s.peek=K.bind(s),s}var p=class{_tag="computed";_fn;_value;_state;_subscribers;_sources;_equals;_version;_depVersions;constructor(n,t){this._fn=n,this._value=void 0,this._state=1,this._subscribers=null,this._sources=null,this._equals=t??Object.is,this._version=0,this._depVersions=null;}};function Y(e,n){let t=new p(e,n?.equals);return ()=>(u&&(t._subscribers=k(t._subscribers,u),"_sources"in u&&z(u,t)),t._state!==0&&(U(t)?A(t):t._state=0),t._value)}function U(e){if(e._depVersions===null||e._sources===null)return true;let n=e._sources,t=e._depVersions;if(n.length!==t.length)return true;for(let s=0;s<n.length;s++){let r=n[s];if(r instanceof p&&r._state===1&&A(r),r._version!==t[s])return true}return false}function P(e){if(e._sources===null||e._sources.length===0){e._depVersions=null;return}let n=e._sources,t=e._depVersions=new Array(n.length);for(let s=0;s<n.length;s++)t[s]=n[s]._version;}function z(e,n){e._sources===null?e._sources=[n]:e._sources.indexOf(n)===-1&&e._sources.push(n);}var C=new Set;function A(e,n=false){if(C.has(e))throw new Error("[AkashJS] Circular dependency detected between computed values.");if(C.add(e),g(),e._sources!==null){for(let r=0;r<e._sources.length;r++)e._sources[r]._subscribers=x(e._sources[r]._subscribers,e);e._sources=null;}let t=u;u=e;let s=_&&c$1()?performance.now():0;try{let r=e._fn(),i=e._value===void 0&&e._state===1,o=i||!e._equals(e._value,r);e._value=r,e._state=0,o&&e._version++,P(e),o&&!i&&(n?R(e._subscribers,l=>{l._tag==="computed"&&(l._state=1,R(l._subscribers,d=>{d._tag==="computed"&&(d._state=1);}));}):v(e));}finally{_&&s&&d("computed","computed",performance.now()-s),C.delete(e),u=t,w();}}var E=class{_tag="effect";_fn;_cleanup;_sources;_disposed;isRender;_lastSeen;constructor(n,t){this._fn=n,this._cleanup=null,this._sources=null,this._disposed=false,this.isRender=t,this._lastSeen=null;}run(){O(this);}};function Z(e,n){let t=new E(e,n?.render??false);return O(t),()=>{if(t._disposed=true,M(t),t._sources!==null){for(let s=0;s<t._sources.length;s++)t._sources[s]._subscribers=x(t._sources[s]._subscribers,t);t._sources=null;}}}function O(e){if(e._disposed)return;if(e._sources!==null&&e._sources.length>0){let r=false;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];if(o instanceof p)if(o._state===1&&A(o,true),e._lastSeen!==null&&e._lastSeen.has(o)){let l=e._lastSeen.get(o);o._equals(l,o._value)||(r=true);}else r=true;else r=true;}if(!r)return}M(e);let n=e._sources!==null?e._sources.slice():null;if(e._sources!==null){for(let r=0;r<e._sources.length;r++)e._sources[r]._subscribers=x(e._sources[r]._subscribers,e);e._sources=null;}let t=u;u=e;let s=_&&c$1()?performance.now():0;try{let r=e._fn();typeof r=="function"&&(e._cleanup=r);}catch(r){if(n!==null){e._sources=n;for(let i=0;i<n.length;i++)n[i]._subscribers=k(n[i]._subscribers,e);}console.error("[AkashJS] Error in effect (will retry on next signal change):",r);}finally{if(_&&s&&d("effect","effect",performance.now()-s),u=t,e._sources!==null){let r=null;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];o instanceof p&&(r===null&&(r=new Map),r.set(o,o._value));}e._lastSeen=r;}else e._lastSeen=null;}}function M(e){if(e._cleanup){try{e._cleanup();}catch(n){console.error("[AkashJS] Error in effect cleanup (ignored):",n);}e._cleanup=null;}}function j(e){let n=u;u=null;try{return e()}finally{u=n;}}function $(e,n,t){let s=Array.isArray(e),r=s?e:[e],i,o=true;return ()=>{let l=r.map(B=>B());if(o&&(o=false,i=l.slice(),t?.defer!==false))return;let d=i;return i=l.slice(),j(()=>n(s?l:l[0],d?s?d:d[0]:void 0))}}function I(e){u&&(e._subscribers=k(e._subscribers,u),"_sources"in u&&z(u,e));}function v(e){let n=e._subscribers;if(n!==null)if(Array.isArray(n))for(let t=0;t<n.length;t++){let s=n[t];s._tag==="computed"?(s._state=1,v(s)):m(s);}else n._tag==="computed"?(n._state=1,v(n)):m(n);}export{X as a,H as b,Q as c,Y as d,Z as e,j as f,$ as g};//# sourceMappingURL=chunk-2UATNCKC.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2UATNCKC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/scheduler.ts","../src/signals.ts"],"names":["pendingRender","pendingUser","flushing","batchDepth","reflushNeeded","MAX_EFFECT_RUNS","MAX_FLUSH_ITERATIONS","flush","runCounts","circularDetected","iterations","queue","byDepth","fx","count","scheduleEffect","batch","fn","enterBatch","exitBatch","a","b","flushSync","__DEV__","currentSubscriber","addSubscriber","slot","sub","removeSubscriber","idx","forEachSubscriber","copy","i","SignalNode","value","equals","signalUpdate","signalPeek","signal","initialValue","options","node","read","trackSubscriber","isProfiling","recordPerfEntry","notifySubscribers","ComputedNode","computed","addSource","isDirtyByVersion","recompute","deps","versions","dep","snapshotVersions","source","computingSet","skipEffectNotify","prevSubscriber","_t0","newValue","isFirst","changed","sub2","EffectNode","isRender","runEffect","effect","cleanupEffect","anyChanged","lastSeen","prevSources","result","err","untrack","prev","on","isArray","depArray","prevValues","values","d"],"mappings":"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","file":"chunk-2UATNCKC.js","sourcesContent":["/**\n * Microtask-based effect scheduler with priority levels and deduplication.\n *\n * Render effects (DOM bindings) run before user effects to ensure\n * DOM is consistent before user-side effects execute.\n */\n\nexport interface ScheduledEffect {\n run(): void;\n isRender: boolean;\n /** Depth in the dependency graph (0 = root). Lower depth runs first. */\n depth?: number;\n}\n\nconst pendingRender = new Set<ScheduledEffect>();\nconst pendingUser = new Set<ScheduledEffect>();\nlet flushing = false;\nlet batchDepth = 0;\nlet flushScheduled = false;\nlet reflushNeeded = false;\n\nconst MAX_EFFECT_RUNS = 3;\nconst MAX_FLUSH_ITERATIONS = 100;\n\nfunction flush(): void {\n if (flushing) return;\n flushing = true;\n flushScheduled = false;\n\n // Fresh per-effect run counter for THIS flush — reset every time\n const runCounts = new Map<ScheduledEffect, number>();\n let circularDetected = false;\n\n // Process render effects first, then user effects.\n // Effects may enqueue more effects during flush, so loop until empty.\n let iterations = 0;\n while ((pendingRender.size > 0 || pendingUser.size > 0) && iterations < MAX_FLUSH_ITERATIONS) {\n iterations++;\n\n // Drain render effects (sorted by depth — parents before children)\n if (pendingRender.size > 0) {\n const queue = [...pendingRender].sort(byDepth);\n pendingRender.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect — it's in a cycle\n }\n fx.run();\n }\n }\n\n // Drain user effects (sorted by depth)\n if (pendingUser.size > 0) {\n const queue = [...pendingUser].sort(byDepth);\n pendingUser.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect — it's in a cycle\n }\n fx.run();\n }\n }\n\n // If all remaining effects were skipped due to cycle detection, break\n if (circularDetected && pendingRender.size === 0 && pendingUser.size === 0) {\n break;\n }\n }\n\n if (circularDetected || iterations >= MAX_FLUSH_ITERATIONS) {\n pendingRender.clear();\n pendingUser.clear();\n console.error(\n '[AkashJS] Circular dependency detected between effects. ' +\n 'Two or more effects are writing to each other\\'s dependencies. ' +\n 'The cycle has been broken after ' + iterations + ' iterations.'\n );\n }\n\n flushing = false;\n\n // If effects were scheduled during the tail end of this flush (after the\n // while loop's condition was last checked), re-flush them now.\n if (reflushNeeded) {\n reflushNeeded = false;\n if (pendingRender.size > 0 || pendingUser.size > 0) {\n flush();\n }\n }\n}\n\nexport function scheduleEffect(fx: ScheduledEffect): void {\n if (fx.isRender) {\n pendingRender.add(fx);\n } else {\n pendingUser.add(fx);\n }\n\n if (batchDepth === 0 && !flushing) {\n flush();\n } else if (flushing) {\n // Effects were added during a flush. The while loop may still pick them\n // up, but if it has already checked the queues and found them empty,\n // we need a re-flush after the current one completes.\n reflushNeeded = true;\n }\n}\n\n/**\n * Batch multiple signal writes — subscribers are notified only once\n * at the end of the batch.\n */\nexport function batch<T>(fn: () => T): T {\n batchDepth++;\n try {\n return fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n flush();\n }\n }\n}\n\n/** Enter/exit batch depth — used by computed recompute to prevent mid-evaluation flush */\nexport function enterBatch(): void { batchDepth++; }\nexport function exitBatch(): void {\n batchDepth--;\n if (batchDepth === 0) flush();\n}\n\n/** Sort effects by depth (lower depth first = parents before children) */\nfunction byDepth(a: ScheduledEffect, b: ScheduledEffect): number {\n return (a.depth ?? 0) - (b.depth ?? 0);\n}\n\n/** Synchronously flush all pending effects. Useful for testing. */\nexport function flushSync(): void {\n flush();\n}\n","/**\n * Fine-grained reactivity system.\n *\n * Inspired by SolidJS/Preact Signals. Provides signal(), computed(),\n * effect(), and untrack() primitives with automatic dependency tracking\n * and glitch-free diamond dependency resolution.\n *\n * Optimized for minimal memory footprint:\n * - Class-based nodes for V8 hidden class sharing\n * - Lazy subscriber collections (null → single → array)\n * - Shared method functions (no per-instance closures for update/peek)\n * - Version-based dirty checking for computed\n * - Dev-only code stripped in production builds\n */\n\nimport { scheduleEffect, enterBatch, exitBatch, type ScheduledEffect } from './scheduler.js';\n\nimport { recordPerfEntry, isProfiling } from './perf.js';\n\nconst __DEV__ = typeof process === 'undefined' || process.env?.NODE_ENV !== 'production';\n\n/** Depth counter to defer effect scheduling until all notifications complete (glitch-free) */\nlet notifyDepth = 0;\n\n// --- Tracking scope ---\n\ntype Subscriber = EffectNode | ComputedNode<any>;\ntype SubscriberSlot = Subscriber | Subscriber[] | null;\n\nlet currentSubscriber: Subscriber | null = null;\n\n// --- Subscriber collection helpers (lazy: null → single → array) ---\n\nfunction addSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return sub;\n if (Array.isArray(slot)) {\n if (slot.indexOf(sub) === -1) slot.push(sub);\n return slot;\n }\n // slot is a single subscriber\n if (slot === sub) return slot;\n return [slot, sub];\n}\n\nfunction removeSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return null;\n if (slot === sub) return null;\n if (Array.isArray(slot)) {\n const idx = slot.indexOf(sub);\n if (idx !== -1) {\n if (slot.length === 2) return slot[1 - idx];\n slot.splice(idx, 1);\n }\n return slot;\n }\n return slot;\n}\n\nfunction forEachSubscriber(slot: SubscriberSlot, fn: (sub: Subscriber) => void): void {\n if (slot === null) return;\n if (Array.isArray(slot)) {\n // Snapshot to avoid mutation during iteration\n const copy = slot.slice();\n for (let i = 0; i < copy.length; i++) fn(copy[i]);\n } else {\n fn(slot);\n }\n}\n\nfunction hasSubscribers(slot: SubscriberSlot): boolean {\n return slot !== null;\n}\n\n// --- Signal ---\n\nexport interface Signal<T> {\n /** Read the current value (tracks dependency if inside a reactive scope) */\n (): T;\n /** Set a new value */\n set(value: T): void;\n /** Update the value using the previous value */\n update(fn: (prev: T) => T): void;\n /** Read without tracking (no dependency registered) */\n peek(): T;\n}\n\nexport type ReadonlySignal<T> = () => T;\n\n// Strategy 1: Class-based node for V8 hidden class optimization\nclass SignalNode<T> {\n _value: T;\n _subscribers: SubscriberSlot;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5: cheap dirty checking\n\n constructor(value: T, equals?: (a: T, b: T) => boolean) {\n this._value = value;\n this._subscribers = null; // Strategy 2: lazy (not new Set())\n this._equals = equals ?? Object.is;\n this._version = 0;\n }\n}\n\n// Strategy 3: Shared method functions (not per-instance closures)\nfunction signalUpdate<T>(this: Signal<T> & { _node: SignalNode<T> }, fn: (prev: T) => T): void {\n this.set(fn(this._node._value));\n}\n\nfunction signalPeek<T>(this: { _node: SignalNode<T> }): T {\n return this._node._value;\n}\n\nexport function signal<T>(\n initialValue: T,\n options?: { equals?: (a: T, b: T) => boolean },\n): Signal<T> {\n const node = new SignalNode(initialValue, options?.equals);\n\n const read = (): T => {\n trackSubscriber(node);\n return node._value;\n };\n\n read.set = (value: T): void => {\n if (__DEV__ && currentSubscriber && (currentSubscriber as any)._tag === 'computed') {\n console.warn('[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation.');\n }\n if (node._equals(node._value, value)) return;\n node._value = value;\n node._version++;\n if (__DEV__ && isProfiling()) recordPerfEntry('signal-update', 'signal.set', 0);\n // Inline batch to avoid closure allocation on every set() call\n enterBatch();\n notifySubscribers(node);\n exitBatch();\n };\n\n // Strategy 3: bind shared functions instead of creating per-instance closures\n (read as any)._node = node;\n read.update = signalUpdate.bind(read as any);\n read.peek = signalPeek.bind(read as any);\n\n return read as Signal<T>;\n}\n\n// --- Computed ---\n\nconst enum ComputedState {\n Clean = 0,\n Dirty = 1,\n}\n\n// Strategy 1: Class-based computed node\nclass ComputedNode<T> {\n _tag: 'computed' = 'computed';\n _fn: () => T;\n _value: T | undefined;\n _state: ComputedState;\n _subscribers: SubscriberSlot;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5\n\n // Strategy 5: version snapshots of dependencies at last evaluation\n _depVersions: number[] | null;\n\n constructor(fn: () => T, equals?: (a: T, b: T) => boolean) {\n this._fn = fn;\n this._value = undefined;\n this._state = ComputedState.Dirty;\n this._subscribers = null; // lazy\n this._sources = null; // lazy\n this._equals = equals ?? Object.is;\n this._version = 0;\n this._depVersions = null;\n }\n}\n\nexport function computed<T>(\n fn: () => T,\n options?: { equals?: (a: T, b: T) => boolean },\n): ReadonlySignal<T> {\n const node = new ComputedNode<T>(fn, options?.equals);\n\n const read = (): T => {\n // Track this computed as a dependency of the current subscriber\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber, node);\n }\n }\n\n if (node._state !== ComputedState.Clean) {\n // Strategy 5: check if deps actually changed via version\n if (!isDirtyByVersion(node)) {\n node._state = ComputedState.Clean;\n } else {\n recompute(node);\n }\n }\n\n return node._value as T;\n };\n\n return read;\n}\n\n// Strategy 5: version-based dirty check\nfunction isDirtyByVersion(node: ComputedNode<any>): boolean {\n if (node._depVersions === null || node._sources === null) return true;\n const deps = node._sources;\n const versions = node._depVersions;\n if (deps.length !== versions.length) return true;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n // If a dep is a dirty computed, recompute it first to get the real version\n if (dep instanceof ComputedNode && dep._state === ComputedState.Dirty) {\n recompute(dep);\n }\n if (dep._version !== versions[i]) return true;\n }\n return false;\n}\n\n// Snapshot dependency versions after evaluation\nfunction snapshotVersions(node: ComputedNode<any>): void {\n if (node._sources === null || node._sources.length === 0) {\n node._depVersions = null;\n return;\n }\n const deps = node._sources;\n const versions = node._depVersions = new Array(deps.length);\n for (let i = 0; i < deps.length; i++) {\n versions[i] = deps[i]._version;\n }\n}\n\n// Helper: add source to node's sources array\nfunction addSource(sub: { _sources: (SignalNode<any> | ComputedNode<any>)[] | null }, source: SignalNode<any> | ComputedNode<any>): void {\n if (sub._sources === null) {\n sub._sources = [source];\n } else if (sub._sources.indexOf(source) === -1) {\n sub._sources.push(source);\n }\n}\n\nconst computingSet = new Set<ComputedNode<unknown>>();\n\n/**\n * @param skipEffectNotify - When true, don't schedule effects in notifySubscribers.\n * Used when recompute is called from runEffect's dirty check — the effect is\n * already being processed, re-scheduling it would trigger the circular run limit.\n */\nfunction recompute<T>(node: ComputedNode<T>, skipEffectNotify = false): void {\n // Detect circular computed dependencies — only if THIS node is already being computed\n if (computingSet.has(node as ComputedNode<unknown>)) {\n throw new Error('[AkashJS] Circular dependency detected between computed values.');\n }\n computingSet.add(node as ComputedNode<unknown>);\n\n // Prevent effects from flushing while computed is evaluating.\n enterBatch();\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n try {\n const newValue = node._fn();\n const isFirst = node._value === undefined && node._state === ComputedState.Dirty;\n const changed = isFirst || !node._equals(node._value as T, newValue);\n node._value = newValue;\n node._state = ComputedState.Clean;\n if (changed) node._version++;\n\n // Snapshot dep versions for next dirty check\n snapshotVersions(node);\n\n // Only propagate if value actually changed (skip first computation —\n // the effect that triggered the read is already running).\n if (changed && !isFirst) {\n if (skipEffectNotify) {\n // Only mark downstream computeds as dirty — don't schedule effects.\n forEachSubscriber(node._subscribers, (sub) => {\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n forEachSubscriber((sub as ComputedNode<any>)._subscribers, (sub2) => {\n if (sub2._tag === 'computed') (sub2 as ComputedNode<any>)._state = ComputedState.Dirty;\n });\n }\n });\n } else {\n notifySubscribers(node);\n }\n }\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('computed', 'computed', performance.now() - _t0);\n computingSet.delete(node as ComputedNode<unknown>);\n currentSubscriber = prevSubscriber;\n exitBatch();\n }\n}\n\n// --- Effect ---\n\n// Strategy 1: Class-based effect node\nclass EffectNode implements ScheduledEffect {\n _tag: 'effect' = 'effect';\n _fn: () => void | (() => void);\n _cleanup: (() => void) | null;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _disposed: boolean;\n isRender: boolean;\n _lastSeen: Map<unknown, unknown> | null;\n\n constructor(fn: () => void | (() => void), isRender: boolean) {\n this._fn = fn;\n this._cleanup = null;\n this._sources = null; // lazy\n this._disposed = false;\n this.isRender = isRender;\n this._lastSeen = null;\n }\n\n run(): void {\n runEffect(this);\n }\n}\n\nexport function effect(\n fn: () => void | (() => void),\n options?: { render?: boolean },\n): () => void {\n const node = new EffectNode(fn, options?.render ?? false);\n\n // Run immediately to establish dependencies\n runEffect(node);\n\n // Return dispose function\n return () => {\n node._disposed = true;\n cleanupEffect(node);\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n };\n}\n\nfunction runEffect(node: EffectNode): void {\n if (node._disposed) return;\n\n // Before re-running, check if any dirty computed source actually changed.\n if (node._sources !== null && node._sources.length > 0) {\n let anyChanged = false;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (source._state === ComputedState.Dirty) {\n recompute(source, true);\n }\n if (node._lastSeen !== null && node._lastSeen.has(source)) {\n const lastSeen = node._lastSeen.get(source);\n if (!source._equals(lastSeen as never, source._value as never)) {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n }\n if (!anyChanged) return;\n }\n\n // Clean up previous run\n cleanupEffect(node);\n\n // Save old sources in case the effect throws\n const prevSources = node._sources !== null ? node._sources.slice() : null;\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n\n try {\n const result = node._fn();\n if (typeof result === 'function') {\n node._cleanup = result;\n }\n } catch (err) {\n // Re-subscribe to previous sources so the effect can recover on next change\n if (prevSources !== null) {\n node._sources = prevSources;\n for (let i = 0; i < prevSources.length; i++) {\n prevSources[i]._subscribers = addSubscriber(prevSources[i]._subscribers, node);\n }\n }\n console.error('[AkashJS] Error in effect (will retry on next signal change):', err);\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('effect', 'effect', performance.now() - _t0);\n currentSubscriber = prevSubscriber;\n\n // Cache computed values for next dirty check\n if (node._sources !== null) {\n let lastSeen: Map<unknown, unknown> | null = null;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (lastSeen === null) lastSeen = new Map();\n lastSeen.set(source, source._value);\n }\n }\n node._lastSeen = lastSeen;\n } else {\n node._lastSeen = null;\n }\n }\n}\n\nfunction cleanupEffect(node: EffectNode): void {\n if (node._cleanup) {\n try {\n node._cleanup();\n } catch (err) {\n console.error('[AkashJS] Error in effect cleanup (ignored):', err);\n }\n node._cleanup = null;\n }\n}\n\n// --- Untrack ---\n\n/** Execute a function without tracking any signal reads */\nexport function untrack<T>(fn: () => T): T {\n const prev = currentSubscriber;\n currentSubscriber = null;\n try {\n return fn();\n } finally {\n currentSubscriber = prev;\n }\n}\n\n// --- on() helper ---\n\n/**\n * Create an effect callback that only tracks specific signals.\n * All other signal reads inside the callback are untracked.\n *\n * ```ts\n * effect(on(url, (currentUrl, prevUrl) => {\n * fetch(currentUrl, options()); // options() not tracked\n * }));\n *\n * effect(on([url, page], ([u, p], prev) => {\n * fetch(`${u}?page=${p}`);\n * }));\n * ```\n */\nexport function on<T>(\n dep: () => T,\n fn: (value: T, prev: T | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on<T extends readonly (() => unknown)[]>(\n deps: [...T],\n fn: (values: { [K in keyof T]: ReturnType<T[K]> }, prev: { [K in keyof T]: ReturnType<T[K]> } | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on(\n deps: (() => any) | (() => any)[],\n fn: (values: any, prev: any) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void) {\n const isArray = Array.isArray(deps);\n const depArray = isArray ? deps : [deps];\n let prevValues: unknown[] | undefined;\n let isFirst = true;\n\n return () => {\n // Track only the specified deps\n const values = depArray.map(d => d());\n\n if (isFirst) {\n isFirst = false;\n prevValues = values.slice();\n if (options?.defer !== false) return;\n }\n\n const prev = prevValues;\n prevValues = values.slice();\n\n return untrack(() => fn(\n isArray ? values : values[0],\n prev ? (isArray ? prev : prev[0]) : undefined,\n ));\n };\n}\n\n// --- Internal helpers ---\n\nfunction trackSubscriber(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber as any, node);\n }\n }\n}\n\nfunction notifySubscribers(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n // Inlined iteration — avoids closure + array copy overhead.\n // Safe because notifySubscribers is always called inside a batch,\n // so effects are only scheduled (not flushed) during iteration.\n const slot = node._subscribers;\n if (slot === null) return;\n if (Array.isArray(slot)) {\n for (let i = 0; i < slot.length; i++) {\n const sub = slot[i];\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n notifySubscribers(sub as ComputedNode<any>);\n } else {\n scheduleEffect(sub as unknown as ScheduledEffect);\n }\n }\n } else {\n if (slot._tag === 'computed') {\n (slot as ComputedNode<any>)._state = ComputedState.Dirty;\n notifySubscribers(slot as ComputedNode<any>);\n } else {\n scheduleEffect(slot as unknown as ScheduledEffect);\n }\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c,e}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {c,e}from'./chunk-2UATNCKC.js';function a(e,t){return n=>{t.self&&n.target!==n.currentTarget||(t.preventDefault&&n.preventDefault(),t.stopPropagation&&n.stopPropagation(),t.stopImmediatePropagation&&n.stopImmediatePropagation?.(),e(n));}}function f(e,t,n,o={}){let r=a(n,o),i={once:o.once,capture:o.capture,passive:o.passive};return e.addEventListener(t,r,i),()=>e.removeEventListener(t,r,i)}function g(e){let t=c(e.clientWidth),n=c(e.clientHeight);return typeof ResizeObserver<"u"&&new ResizeObserver(r=>{let i=r[0];i&&(t.set(i.contentRect.width),n.set(i.contentRect.height));}).observe(e),{width:()=>t(),height:()=>n()}}function b(e){let t=e??(typeof window<"u"?window:null),n=c(e?e.scrollLeft:window?.scrollX??0),o=c(e?e.scrollTop:window?.scrollY??0);if(t){let s=()=>{e?(n.set(e.scrollLeft),o.set(e.scrollTop)):(n.set(window.scrollX),o.set(window.scrollY));};t.addEventListener("scroll",s,{passive:true});}let r=o.set;o.set=s=>{r(s),e?e.scrollTop=s:window?.scrollTo(window.scrollX,s);};let i=n.set;return n.set=s=>{i(s),e?e.scrollLeft=s:window?.scrollTo(s,window.scrollY);},{scrollX:n,scrollY:o}}function m(){return c(null)}function E(e){return c(null)}function v(e$1,t,n){e$1.name=typeof n=="string"?n:"",e$1.addEventListener("change",()=>{e$1.checked&&t.set(n);}),e(()=>{e$1.checked=t()===n;});}function d(e$1,t,n){return e(()=>{n()?e$1.classList.add(t):e$1.classList.remove(t);})}function w(e,t){let n=Object.entries(t).map(([o,r])=>d(e,o,r));return ()=>n.forEach(o=>o())}function p(e$1,t,n){let o=t.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`);return e(()=>{let r=n();r==null?e$1.style.removeProperty(o):e$1.style.setProperty(o,typeof r=="number"?`${r}px`:String(r));})}function T(e,t){let n=Object.entries(t).map(([o,r])=>p(e,o,r));return ()=>n.forEach(o=>o())}export{a,f as b,g as c,b as d,m as e,E as f,v as g,d as h,w as i,p as j,T as k};//# sourceMappingURL=chunk-2XFW6MT7.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2XFW6MT7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/event-modifiers.ts"],"names":["withModifiers","handler","modifiers","e","onEvent","el","event","wrapped","listenerOptions","bindDimensions","width","signal","height","entries","entry","bindScroll","target","scrollX","scrollY","originalSetY","value","originalSetX","bindElement","bindGroup","name","bindGroupItem","group","effect","bindClass","className","condition","bindClasses","classes","disposers","cls","d","bindStyle","property","kebab","m","v","bindStyles","styles","prop","valueFn"],"mappings":"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","file":"chunk-FVF3T4JJ.js","sourcesContent":["/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/event-modifiers.ts"],"names":["withModifiers","handler","modifiers","e","onEvent","el","event","wrapped","listenerOptions","bindDimensions","width","signal","height","entries","entry","bindScroll","target","scrollX","scrollY","originalSetY","value","originalSetX","bindElement","bindGroup","name","bindGroupItem","group","effect","bindClass","className","condition","bindClasses","classes","disposers","cls","d","bindStyle","property","kebab","m","v","bindStyles","styles","prop","valueFn"],"mappings":"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","file":"chunk-2XFW6MT7.js","sourcesContent":["/**\n * Event modifiers and extended bind/class/style directives.\n *\n * Modifiers: onClick|preventDefault|stopPropagation|once|self|capture\n * Extended binds: bind:clientWidth, bind:scrollY, bind:group, bind:this\n * Class directive: class:active={isActive}\n * Style directive: style:color={textColor}\n */\n\nimport { signal, effect } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Event modifiers\n// =========================================================================\n\nexport interface EventModifiers {\n preventDefault?: boolean;\n stopPropagation?: boolean;\n stopImmediatePropagation?: boolean;\n once?: boolean;\n capture?: boolean;\n passive?: boolean;\n self?: boolean;\n}\n\n/**\n * Wrap an event handler with modifiers.\n *\n * ```ts\n * const handler = withModifiers(onClick, {\n * preventDefault: true,\n * stopPropagation: true,\n * once: true,\n * });\n * el.addEventListener('click', handler);\n * ```\n */\nexport function withModifiers<E extends Event>(\n handler: (e: E) => void,\n modifiers: EventModifiers,\n): (e: E) => void {\n return (e: E) => {\n if (modifiers.self && e.target !== e.currentTarget) return;\n if (modifiers.preventDefault) e.preventDefault();\n if (modifiers.stopPropagation) e.stopPropagation();\n if (modifiers.stopImmediatePropagation) (e as any).stopImmediatePropagation?.();\n handler(e);\n };\n}\n\n/**\n * Attach an event handler with modifiers to an element.\n *\n * ```ts\n * onEvent(el, 'click', handler, { preventDefault: true, once: true });\n * ```\n */\nexport function onEvent<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n modifiers: EventModifiers = {},\n): () => void {\n const wrapped = withModifiers(handler, modifiers);\n const listenerOptions: AddEventListenerOptions = {\n once: modifiers.once,\n capture: modifiers.capture,\n passive: modifiers.passive,\n };\n\n el.addEventListener(event, wrapped as EventListener, listenerOptions);\n return () => el.removeEventListener(event, wrapped as EventListener, listenerOptions);\n}\n\n// =========================================================================\n// Extended bind directives\n// =========================================================================\n\n/**\n * Bind element dimensions to signals (read-only, auto-updating).\n *\n * ```ts\n * const { width, height } = bindDimensions(el);\n * width(); // tracks clientWidth\n * ```\n */\nexport function bindDimensions(el: HTMLElement): {\n width: ReadonlySignal<number>;\n height: ReadonlySignal<number>;\n} {\n const width = signal(el.clientWidth);\n const height = signal(el.clientHeight);\n\n if (typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n width.set(entry.contentRect.width);\n height.set(entry.contentRect.height);\n }\n });\n observer.observe(el);\n }\n\n return {\n width: () => width(),\n height: () => height(),\n };\n}\n\n/**\n * Bind scroll position to signals.\n *\n * ```ts\n * const { scrollX, scrollY } = bindScroll(el);\n * // or for window:\n * const { scrollX, scrollY } = bindScroll();\n * ```\n */\nexport function bindScroll(el?: HTMLElement): {\n scrollX: Signal<number>;\n scrollY: Signal<number>;\n} {\n const target = el ?? (typeof window !== 'undefined' ? window : null);\n const scrollX = signal(el ? el.scrollLeft : (window?.scrollX ?? 0));\n const scrollY = signal(el ? el.scrollTop : (window?.scrollY ?? 0));\n\n if (target) {\n const handler = () => {\n if (el) {\n scrollX.set(el.scrollLeft);\n scrollY.set(el.scrollTop);\n } else {\n scrollX.set(window.scrollX);\n scrollY.set(window.scrollY);\n }\n };\n (target as any).addEventListener('scroll', handler, { passive: true });\n }\n\n // Also allow setting scroll position\n const originalSetY = scrollY.set;\n scrollY.set = (value: number) => {\n originalSetY(value);\n if (el) el.scrollTop = value;\n else window?.scrollTo(window.scrollX, value);\n };\n\n const originalSetX = scrollX.set;\n scrollX.set = (value: number) => {\n originalSetX(value);\n if (el) el.scrollLeft = value;\n else window?.scrollTo(value, window.scrollY);\n };\n\n return { scrollX, scrollY };\n}\n\n/**\n * Bind a signal to an element reference (like bind:this in Svelte).\n *\n * ```ts\n * const myRef = bindElement<HTMLInputElement>();\n * // In render: myRef.set(inputEl);\n * myRef()?.focus();\n * ```\n */\nexport function bindElement<T extends HTMLElement = HTMLElement>(): Signal<T | null> {\n return signal<T | null>(null);\n}\n\n/**\n * Bind a group of radio/checkbox inputs to a signal.\n *\n * ```ts\n * const selected = bindGroup<string>('color');\n * // Apply to each radio: bindGroupItem(radioEl, selected, 'red');\n * ```\n */\nexport function bindGroup<T>(name: string): Signal<T | null> {\n return signal<T | null>(null);\n}\n\nexport function bindGroupItem<T>(\n el: HTMLInputElement,\n group: Signal<T | null>,\n value: T,\n): void {\n el.name = typeof value === 'string' ? value : '';\n el.addEventListener('change', () => {\n if (el.checked) group.set(value);\n });\n\n effect(() => {\n el.checked = group() === value;\n });\n}\n\n// =========================================================================\n// Class directive\n// =========================================================================\n\n/**\n * Conditionally apply a CSS class based on a reactive condition.\n *\n * ```ts\n * bindClass(el, 'active', () => isActive());\n * bindClass(el, 'disabled', () => isDisabled());\n * ```\n */\nexport function bindClass(\n el: HTMLElement,\n className: string,\n condition: () => boolean,\n): () => void {\n return effect(() => {\n if (condition()) {\n el.classList.add(className);\n } else {\n el.classList.remove(className);\n }\n });\n}\n\n/**\n * Apply multiple conditional classes at once.\n *\n * ```ts\n * bindClasses(el, {\n * active: () => isActive(),\n * disabled: () => isDisabled(),\n * 'text-bold': () => isBold(),\n * });\n * ```\n */\nexport function bindClasses(\n el: HTMLElement,\n classes: Record<string, () => boolean>,\n): () => void {\n const disposers = Object.entries(classes).map(([cls, condition]) =>\n bindClass(el, cls, condition),\n );\n return () => disposers.forEach((d) => d());\n}\n\n// =========================================================================\n// Style directive\n// =========================================================================\n\n/**\n * Reactively bind a CSS property to a value.\n *\n * ```ts\n * bindStyle(el, 'color', () => textColor());\n * bindStyle(el, 'font-size', () => `${fontSize()}px`);\n * ```\n */\nexport function bindStyle(\n el: HTMLElement,\n property: string,\n value: () => string | number | null,\n): () => void {\n const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\n return effect(() => {\n const v = value();\n if (v == null) {\n el.style.removeProperty(kebab);\n } else {\n el.style.setProperty(kebab, typeof v === 'number' ? `${v}px` : String(v));\n }\n });\n}\n\n/**\n * Bind multiple style properties at once.\n *\n * ```ts\n * bindStyles(el, {\n * color: () => color(),\n * 'font-size': () => `${size()}px`,\n * opacity: () => isVisible() ? 1 : 0,\n * });\n * ```\n */\nexport function bindStyles(\n el: HTMLElement,\n styles: Record<string, () => string | number | null>,\n): () => void {\n const disposers = Object.entries(styles).map(([prop, valueFn]) =>\n bindStyle(el, prop, valueFn),\n );\n return () => disposers.forEach((d) => d());\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {s}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {s}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';var k=s(u=>{let o=c(false),a=c(false);return ()=>{let{src:b,alt:y,width:s,height:i,loading:l="lazy",srcset:c,sizes:d,placeholder:v,blurDataUrl:p,class:m,fallbackSrc:f,onLoad:E,onError:w}=u.props,r=document.createElement("div");if(r.style.position="relative",r.style.display="inline-block",r.style.overflow="hidden",s&&(r.style.width=`${s}px`),i&&(r.style.height=`${i}px`),v==="blur"&&p&&!o()){let t=document.createElement("img");t.src=p,t.alt="",t.setAttribute("aria-hidden","true"),t.style.cssText="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);",r.appendChild(t);}let e=document.createElement("img");if(e.alt=y,e.loading=l,a()&&f?e.src=f:e.src=b,c&&(e.srcset=c),d&&(e.sizes=d),s&&(e.width=s),i&&(e.height=i),m&&(e.className=m),e.style.display="block",e.style.width="100%",e.style.height="auto",e.addEventListener("load",()=>{o.set(true),E?.();}),e.addEventListener("error",t=>{a.set(true),w?.(t);}),l==="lazy"&&typeof IntersectionObserver<"u"){e.setAttribute("data-src",e.src);let t=e.src;e.removeAttribute("src");let g=new IntersectionObserver(x=>{x[0].isIntersecting&&(e.src=t,g.disconnect());},{rootMargin:"200px"});requestAnimationFrame(()=>{e.parentElement?g.observe(e):e.src=t;});}return r.appendChild(e),r}});export{k as a};//# sourceMappingURL=chunk-3CD6A5YV.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3CD6A5YV.js.map
|
|
@@ -1 +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-
|
|
1
|
+
{"version":3,"sources":["../src/image.ts"],"names":["Image","defineComponent","ctx","loaded","signal","errored","src","alt","width","height","loading","srcset","sizes","placeholder","blurDataUrl","className","fallbackSrc","onLoad","onErrorCb","wrapper","blur","img","e","actualSrc","observer","entries"],"mappings":"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","file":"chunk-3CD6A5YV.js","sourcesContent":["/**\n * <Image> component.\n *\n * Optimized image rendering with lazy loading, srcset/sizes,\n * blur placeholder, and error fallback.\n *\n * ```html\n * <Image\n * src=\"/photos/hero.jpg\"\n * alt=\"Hero image\"\n * width={800}\n * height={600}\n * placeholder=\"blur\"\n * blurDataUrl=\"data:image/jpeg;base64,...\"\n * srcset=\"/photos/hero-400.jpg 400w, /photos/hero-800.jpg 800w\"\n * sizes=\"(max-width: 600px) 400px, 800px\"\n * loading=\"lazy\"\n * />\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\n\n// --- Types ---\n\nexport interface ImageProps {\n /** Image source URL */\n src: string;\n /** Alt text (required for accessibility) */\n alt: string;\n /** Width in pixels */\n width?: number;\n /** Height in pixels */\n height?: number;\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager';\n /** Srcset for responsive images */\n srcset?: string;\n /** Sizes attribute for responsive images */\n sizes?: string;\n /** Placeholder strategy */\n placeholder?: 'blur' | 'empty';\n /** Base64 data URL for blur placeholder */\n blurDataUrl?: string;\n /** CSS class */\n class?: string;\n /** Error fallback image URL */\n fallbackSrc?: string;\n /** Callback when image loads */\n onLoad?: () => void;\n /** Callback when image fails to load */\n onError?: (error: Event) => void;\n}\n\n// --- Component ---\n\nexport const Image = defineComponent<ImageProps>((ctx) => {\n const loaded = signal(false);\n const errored = signal(false);\n\n return () => {\n const {\n src,\n alt,\n width,\n height,\n loading = 'lazy',\n srcset,\n sizes,\n placeholder,\n blurDataUrl,\n class: className,\n fallbackSrc,\n onLoad,\n onError: onErrorCb,\n } = ctx.props;\n\n // Wrapper for placeholder\n const wrapper = document.createElement('div');\n wrapper.style.position = 'relative';\n wrapper.style.display = 'inline-block';\n wrapper.style.overflow = 'hidden';\n if (width) wrapper.style.width = `${width}px`;\n if (height) wrapper.style.height = `${height}px`;\n\n // Blur placeholder\n if (placeholder === 'blur' && blurDataUrl && !loaded()) {\n const blur = document.createElement('img');\n blur.src = blurDataUrl;\n blur.alt = '';\n blur.setAttribute('aria-hidden', 'true');\n blur.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);';\n wrapper.appendChild(blur);\n }\n\n // Main image\n const img = document.createElement('img');\n img.alt = alt;\n img.loading = loading;\n\n if (errored() && fallbackSrc) {\n img.src = fallbackSrc;\n } else {\n img.src = src;\n }\n\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (width) img.width = width;\n if (height) img.height = height;\n if (className) img.className = className;\n\n img.style.display = 'block';\n img.style.width = '100%';\n img.style.height = 'auto';\n\n img.addEventListener('load', () => {\n loaded.set(true);\n onLoad?.();\n });\n\n img.addEventListener('error', (e) => {\n errored.set(true);\n onErrorCb?.(e);\n });\n\n // Intersection Observer for lazy loading (fallback for browsers without native lazy)\n if (loading === 'lazy' && typeof IntersectionObserver !== 'undefined') {\n img.setAttribute('data-src', img.src);\n const actualSrc = img.src;\n img.removeAttribute('src');\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n img.src = actualSrc;\n observer.disconnect();\n }\n },\n { rootMargin: '200px' },\n );\n\n // Observe after appended to DOM\n requestAnimationFrame(() => {\n if (img.parentElement) {\n observer.observe(img);\n } else {\n // Fallback: set src immediately\n img.src = actualSrc;\n }\n });\n }\n\n wrapper.appendChild(img);\n return wrapper;\n };\n});\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {e}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {e}from'./chunk-2UATNCKC.js';function w(e$1,t,u={}){let{immediate:x=false,once:O=false,debounce:i,deep:l=false}=u,T=Array.isArray(e$1),s=T?e$1:[e$1],o=s.map(()=>{}),h=true,c=null,f=false,y=null,b=()=>{f=true,c&&clearTimeout(c),y?.();};y=e(()=>{let n=s.map(r=>r());if(h){h=false,o=l?n.map(k):[...n],x&&m(n,s.map(()=>{}));return}if(!(l?n.some((r,p)=>!S(r,o[p])):n.some((r,p)=>!Object.is(r,o[p]))))return;let a=[...o];o=l?n.map(k):[...n],m(n,a);});function m(n,d){if(f)return;let a=()=>{O&&(f=true,queueMicrotask(b)),T?t(n,d):t(n[0],d[0]);};i&&i>0?(c&&clearTimeout(c),c=setTimeout(a,i)):a();}return b}function v(e,t){return w(e,t,{once:true})}function g(e,t,u){return w(e,t,{debounce:u})}function k(e){if(e===null||typeof e!="object")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}function S(e,t){if(Object.is(e,t))return true;if(e===null||t===null||typeof e!="object"||typeof t!="object")return false;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return false}}export{w as a,v as b,g as c};//# sourceMappingURL=chunk-3PCZFKBH.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3PCZFKBH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/watch.ts"],"names":["watch","source","callback","options","immediate","once","debounceMs","deep","isMulti","sources","oldValues","isFirst","debounceTimer","disposed","disposeEffect","dispose","effect","newValues","s","deepClone","fireCallback","v","i","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","ms","value","a","b"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/watch.ts"],"names":["watch","source","callback","options","immediate","once","debounceMs","deep","isMulti","sources","oldValues","isFirst","debounceTimer","disposed","disposeEffect","dispose","effect","newValues","s","deepClone","fireCallback","v","i","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","ms","value","a","b"],"mappings":"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","file":"chunk-3PCZFKBH.js","sourcesContent":["/**\n * watch() — react to signal changes with old/new values.\n *\n * Unlike effect() which just re-runs, watch() gives you the previous\n * and current value so you can react to *what changed*.\n *\n * ```ts\n * const count = signal(0);\n * watch(count, (newVal, oldVal) => {\n * console.log(`Changed from ${oldVal} to ${newVal}`);\n * });\n *\n * // With options:\n * watch(count, callback, { immediate: true, once: true });\n *\n * // Multiple sources:\n * watch([count, name], ([newCount, newName], [oldCount, oldName]) => { ... });\n * ```\n */\n\nimport { effect } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface WatchOptions {\n /** Run callback immediately with current value (default: false) */\n immediate?: boolean;\n /** Only fire once, then auto-dispose (default: false) */\n once?: boolean;\n /** Debounce callback in ms */\n debounce?: number;\n /** Deep comparison for objects (default: false) */\n deep?: boolean;\n}\n\nexport type WatchSource<T> = () => T;\nexport type WatchCallback<T> = (newValue: T, oldValue: T | undefined) => void;\nexport type WatchArrayCallback<T extends unknown[]> = (newValues: T, oldValues: (T[number] | undefined)[]) => void;\n\n// =========================================================================\n// watch() — single source\n// =========================================================================\n\n/**\n * Watch a reactive source and call back with old + new values.\n *\n * ```ts\n * const dispose = watch(count, (newVal, oldVal) => {\n * analytics.track('count_changed', { from: oldVal, to: newVal });\n * });\n * ```\n */\nexport function watch<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n options?: WatchOptions,\n): () => void;\n\n/**\n * Watch multiple sources.\n */\nexport function watch<T extends unknown[]>(\n sources: { [K in keyof T]: WatchSource<T[K]> },\n callback: WatchArrayCallback<T>,\n options?: WatchOptions,\n): () => void;\n\nexport function watch(\n source: WatchSource<any> | WatchSource<any>[],\n callback: any,\n options: WatchOptions = {},\n): () => void {\n const { immediate = false, once = false, debounce: debounceMs, deep = false } = options;\n\n const isMulti = Array.isArray(source);\n const sources = isMulti ? source : [source];\n\n let oldValues: any[] = sources.map(() => undefined);\n let isFirst = true;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let disposed = false;\n let disposeEffect: (() => void) | null = null;\n\n const dispose = () => {\n disposed = true;\n if (debounceTimer) clearTimeout(debounceTimer);\n disposeEffect?.();\n };\n\n disposeEffect = effect(() => {\n // Read all sources to establish tracking\n const newValues = sources.map((s) => s());\n\n if (isFirst) {\n isFirst = false;\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n if (immediate) {\n fireCallback(newValues, sources.map(() => undefined));\n }\n return;\n }\n\n // Check if anything actually changed\n const changed = deep\n ? newValues.some((v, i) => !deepEqual(v, oldValues[i]))\n : newValues.some((v, i) => !Object.is(v, oldValues[i]));\n\n if (!changed) return;\n\n const prevValues = [...oldValues];\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n fireCallback(newValues, prevValues);\n });\n\n function fireCallback(newVals: any[], oldVals: any[]): void {\n if (disposed) return;\n\n const doCall = () => {\n if (once) {\n // Dispose BEFORE calling callback so any signal writes in the\n // callback don't re-trigger this watcher\n disposed = true;\n queueMicrotask(dispose);\n }\n\n if (isMulti) {\n callback(newVals, oldVals);\n } else {\n callback(newVals[0], oldVals[0]);\n }\n };\n\n if (debounceMs && debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doCall, debounceMs);\n } else {\n doCall();\n }\n }\n\n return dispose;\n}\n\n// =========================================================================\n// watchOnce — convenience\n// =========================================================================\n\n/**\n * Watch a source once, then auto-dispose.\n *\n * ```ts\n * watchOnce(isReady, (ready) => {\n * if (ready) initApp();\n * });\n * ```\n */\nexport function watchOnce<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n): () => void {\n return watch(source, callback, { once: true });\n}\n\n// =========================================================================\n// watchDebounced — convenience\n// =========================================================================\n\n/**\n * Watch with built-in debounce.\n *\n * ```ts\n * watchDebounced(searchInput, (query) => {\n * fetchResults(query);\n * }, 300);\n * ```\n */\nexport function watchDebounced<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n ms: number,\n): () => void {\n return watch(source, callback, { debounce: ms });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value;\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {s,l}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c,d}from'./chunk-2UATNCKC.js';function v(t,i,c,u,m=3){let s,a,n,e,o;typeof t=="object"?(s=t.scrollTop,a=t.containerHeight,n=t.itemHeight,e=t.totalItems,o=t.overscan??3):(s=t,a=i,n=c,e=u,o=m);let r=Math.floor(s/n),l=Math.ceil(a/n),h=Math.max(0,r-o),g=Math.min(e,r+l+o);return {start:h,end:g,totalHeight:e*n,offsetTop:h*n}}function V(t){let i=c(0),c$1=c(t.containerHeight??400),u=t.overscan??3,m=d(()=>v(i(),c$1(),t.itemHeight,t.items().length,u)),s=d(()=>{let e=m();return t.items().slice(e.start,e.end).map((o,r)=>({item:o,index:e.start+r}))});function a(e){let o=e.target;i.set(o.scrollTop);}function n(e){c$1.set(e);}return {range:m,visibleItems:s,onScroll:a,setContainerHeight:n,scrollTop:(()=>i())}}var E=s(t=>{let{itemHeight:i,containerHeight:c$1,overscan:u=3}=t.props,m=c(0);return ()=>{let s=t.props.each,a=c$1??400,n=v(m(),a,i,s.length,u),e=document.createElement("div");e.style.height=`${a}px`,e.style.overflow="auto",e.style.position="relative",e.addEventListener("scroll",()=>{m.set(e.scrollTop);},{passive:true});let o=document.createElement("div");o.style.height=`${n.totalHeight}px`,o.style.position="relative";let r=document.createElement("div");r.style.position="absolute",r.style.top=`${n.offsetTop}px`,r.style.left="0",r.style.right="0";for(let l$1=n.start;l$1<n.end;l$1++){let h=s[l$1];if(!h)continue;let g=l(t.props.children(h,l$1));g instanceof HTMLElement&&(g.style.height=`${i}px`),r.appendChild(g);}return o.appendChild(r),e.appendChild(o),e}});export{v as a,V as b,E as c};//# sourceMappingURL=chunk-3PLQPLVA.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3PLQPLVA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/virtual-list.ts"],"names":["calculateRange","scrollTopOrOpts","containerHeight","itemHeight","totalItems","overscan","st","ch","ih","ti","os","firstVisible","visibleCount","start","end","useVirtualList","options","scrollTop","signal","range","computed","visibleItems","r","item","i","onScroll","target","setContainerHeight","height","VirtualFor","defineComponent","ctx","fixedHeight","items","outer","inner","content","row","nodeToDOM"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/virtual-list.ts"],"names":["calculateRange","scrollTopOrOpts","containerHeight","itemHeight","totalItems","overscan","st","ch","ih","ti","os","firstVisible","visibleCount","start","end","useVirtualList","options","scrollTop","signal","range","computed","visibleItems","r","item","i","onScroll","target","setContainerHeight","height","VirtualFor","defineComponent","ctx","fixedHeight","items","outer","inner","content","row","nodeToDOM"],"mappings":"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","file":"chunk-3PLQPLVA.js","sourcesContent":["/**\n * <VirtualFor> — virtualized list rendering.\n *\n * Only renders items visible in the viewport plus a small overscan\n * buffer. Essential for rendering thousands of items without\n * destroying performance.\n *\n * ```html\n * <VirtualFor\n * each={items()}\n * key={(item) => item.id}\n * itemHeight={40}\n * overscan={5}\n * >\n * {(item) => <div class=\"row\">{item.name}</div>}\n * </VirtualFor>\n * ```\n */\n\nimport { signal, effect, computed } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport interface VirtualForProps<T> {\n /** Array of items */\n each: T[];\n /** Key function for reconciliation */\n key: (item: T) => unknown;\n /** Fixed height per item in pixels */\n itemHeight: number;\n /** Container height in pixels (default: auto-detect from parent) */\n containerHeight?: number;\n /** Number of extra items to render above/below viewport */\n overscan?: number;\n /** Render function for each item */\n children: (item: T, index: number) => AkashNode;\n}\n\n// --- Virtual scroll calculations ---\n\nexport interface VirtualRange {\n /** First visible index */\n start: number;\n /** Last visible index (exclusive) */\n end: number;\n /** Total content height in pixels */\n totalHeight: number;\n /** Offset of the first rendered item */\n offsetTop: number;\n}\n\n/**\n * Calculate the visible range given scroll position and dimensions.\n */\nexport function calculateRange(\n scrollTopOrOpts: number | { scrollTop: number; containerHeight: number; itemHeight: number; totalItems: number; overscan?: number },\n containerHeight?: number,\n itemHeight?: number,\n totalItems?: number,\n overscan = 3,\n): VirtualRange {\n let st: number, ch: number, ih: number, ti: number, os: number;\n if (typeof scrollTopOrOpts === 'object') {\n st = scrollTopOrOpts.scrollTop;\n ch = scrollTopOrOpts.containerHeight;\n ih = scrollTopOrOpts.itemHeight;\n ti = scrollTopOrOpts.totalItems;\n os = scrollTopOrOpts.overscan ?? 3;\n } else {\n st = scrollTopOrOpts;\n ch = containerHeight!;\n ih = itemHeight!;\n ti = totalItems!;\n os = overscan;\n }\n\n const firstVisible = Math.floor(st / ih);\n const visibleCount = Math.ceil(ch / ih);\n\n const start = Math.max(0, firstVisible - os);\n const end = Math.min(ti, firstVisible + visibleCount + os);\n\n return {\n start,\n end,\n totalHeight: ti * ih,\n offsetTop: start * ih,\n };\n}\n\n// --- useVirtualList composable ---\n\n/**\n * Low-level virtual list composable for custom implementations.\n *\n * ```ts\n * const { containerRef, range, visibleItems } = useVirtualList({\n * items: () => allItems(),\n * itemHeight: 40,\n * overscan: 5,\n * });\n * ```\n */\nexport function useVirtualList<T>(options: {\n items: () => T[];\n itemHeight: number;\n containerHeight?: number;\n overscan?: number;\n}) {\n const scrollTop = signal(0);\n const containerHeight = signal(options.containerHeight ?? 400);\n const overscan = options.overscan ?? 3;\n\n const range = computed((): VirtualRange => {\n return calculateRange(\n scrollTop(),\n containerHeight(),\n options.itemHeight,\n options.items().length,\n overscan,\n );\n });\n\n const visibleItems = computed(() => {\n const r = range();\n return options.items().slice(r.start, r.end).map((item, i) => ({\n item,\n index: r.start + i,\n }));\n });\n\n function onScroll(e: Event): void {\n const target = e.target as HTMLElement;\n scrollTop.set(target.scrollTop);\n }\n\n function setContainerHeight(height: number): void {\n containerHeight.set(height);\n }\n\n return {\n range,\n visibleItems,\n onScroll,\n setContainerHeight,\n scrollTop: (() => scrollTop()) as ReadonlySignal<number>,\n };\n}\n\n// --- <VirtualFor> component ---\n\nexport const VirtualFor = defineComponent<VirtualForProps<any>>((ctx) => {\n const {\n itemHeight,\n containerHeight: fixedHeight,\n overscan = 3,\n } = ctx.props;\n\n const scrollTop = signal(0);\n\n return () => {\n const items = ctx.props.each;\n const height = fixedHeight ?? 400;\n\n const r = calculateRange(scrollTop(), height, itemHeight, items.length, overscan);\n\n // Outer container (scrollable)\n const outer = document.createElement('div');\n outer.style.height = `${height}px`;\n outer.style.overflow = 'auto';\n outer.style.position = 'relative';\n\n outer.addEventListener('scroll', () => {\n scrollTop.set(outer.scrollTop);\n }, { passive: true });\n\n // Inner spacer (total height)\n const inner = document.createElement('div');\n inner.style.height = `${r.totalHeight}px`;\n inner.style.position = 'relative';\n\n // Rendered items container\n const content = document.createElement('div');\n content.style.position = 'absolute';\n content.style.top = `${r.offsetTop}px`;\n content.style.left = '0';\n content.style.right = '0';\n\n // Render visible items\n for (let i = r.start; i < r.end; i++) {\n const item = items[i];\n if (!item) continue;\n\n const row = nodeToDOM(ctx.props.children(item, i));\n if (row instanceof HTMLElement) {\n row.style.height = `${itemHeight}px`;\n }\n content.appendChild(row);\n }\n\n inner.appendChild(content);\n outer.appendChild(inner);\n return outer;\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,q,l}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';var f=s(n=>{let o=c(null);q(r=>{o.set(r);});function l$1(){o.set(null);}return ()=>{let r=o();return r?l(n.props.fallback(r,l$1)):l(n.children())}});export{f as a};//# sourceMappingURL=chunk-3RDEFZMT.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3RDEFZMT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error-boundary.ts"],"names":["ErrorBoundary","defineComponent","ctx","error","signal","onError","err","retry","currentError","nodeToDOM"],"mappings":"4EA8BO,IAAMA,CAAAA,CAAgBC,EAAqCC,CAAAA,EAAQ,CACxE,IAAMC,CAAAA,CAAQC,CAAAA,CAAqB,IAAI,CAAA,CAEvCC,CAAAA,CAASC,CAAAA,EAAQ,CACfH,CAAAA,CAAM,GAAA,CAAIG,CAAG,EACf,CAAC,EAED,SAASC,GAAAA,EAAQ,CACfJ,CAAAA,CAAM,GAAA,CAAI,IAAI,EAChB,CAEA,OAAO,IAAM,CACX,IAAMK,EAAeL,CAAAA,EAAM,CAE3B,OAAIK,CAAAA,CACKC,CAAAA,CAAUP,CAAAA,CAAI,MAAM,QAAA,CAASM,CAAAA,CAAcD,GAAK,CAAC,CAAA,CAGnDE,CAAAA,CAAUP,EAAI,QAAA,EAAU,CACjC,CACF,CAAC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/error-boundary.ts"],"names":["ErrorBoundary","defineComponent","ctx","error","signal","onError","err","retry","currentError","nodeToDOM"],"mappings":"4EA8BO,IAAMA,CAAAA,CAAgBC,EAAqCC,CAAAA,EAAQ,CACxE,IAAMC,CAAAA,CAAQC,CAAAA,CAAqB,IAAI,CAAA,CAEvCC,CAAAA,CAASC,CAAAA,EAAQ,CACfH,CAAAA,CAAM,GAAA,CAAIG,CAAG,EACf,CAAC,EAED,SAASC,GAAAA,EAAQ,CACfJ,CAAAA,CAAM,GAAA,CAAI,IAAI,EAChB,CAEA,OAAO,IAAM,CACX,IAAMK,EAAeL,CAAAA,EAAM,CAE3B,OAAIK,CAAAA,CACKC,CAAAA,CAAUP,CAAAA,CAAI,MAAM,QAAA,CAASM,CAAAA,CAAcD,GAAK,CAAC,CAAA,CAGnDE,CAAAA,CAAUP,EAAI,QAAA,EAAU,CACjC,CACF,CAAC","file":"chunk-3RDEFZMT.js","sourcesContent":["/**\n * ErrorBoundary component.\n *\n * Declarative error handling — catches errors from child components\n * and renders a fallback UI.\n *\n * ```html\n * <ErrorBoundary fallback={(err) => <p>Error: {err.message}</p>}>\n * <RiskyComponent />\n * </ErrorBoundary>\n * ```\n */\n\nimport { defineComponent, onError } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface ErrorBoundaryProps {\n /** Render function called when an error is caught */\n fallback: (error: Error, retry: () => void) => AkashNode;\n}\n\n/**\n * ErrorBoundary component.\n *\n * Catches errors from descendant components and renders a fallback.\n * The fallback receives the error and a `retry` function that re-renders\n * the children.\n */\nexport const ErrorBoundary = defineComponent<ErrorBoundaryProps>((ctx) => {\n const error = signal<Error | null>(null);\n\n onError((err) => {\n error.set(err);\n });\n\n function retry() {\n error.set(null);\n }\n\n return () => {\n const currentError = error();\n\n if (currentError) {\n return nodeToDOM(ctx.props.fallback(currentError, retry));\n }\n\n return nodeToDOM(ctx.children());\n };\n});\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {s,l}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c}from'./chunk-2UATNCKC.js';function j(t,e={}){let{trigger:n="viewport",loading:r,error:i,prefetch:u=false,minLoadTime:l$1=0,rootMargin:b="200px"}=e,f=null,a=null,c$1=null;function g(){if(a)return a;let p=Date.now();return a=t().then(async o=>{let d=Date.now()-p;l$1>0&&d<l$1&&await new Promise(v=>setTimeout(v,l$1-d)),f=o.default;}).catch(o=>{c$1=o instanceof Error?o:new Error(String(o));}),a}return u&&g(),s(p=>{let o=c("idle");async function v(){o()==="idle"&&(o.set("loading"),await g(),o.set(c$1?"error":"ready"));}return ()=>{let s=document.createElement("div");s.style.display="contents";let m=o();return m==="ready"&&f?(s.appendChild(f(p.props)),s):m==="error"&&i&&c$1?(s.appendChild(l(i(c$1))),s):(r&&m==="loading"&&s.appendChild(l(r())),m==="idle"&&w(s,n,v,b).then(C=>{}),s)}})}async function w(t,e,n,r){return e==="immediate"?(n(),()=>{}):e==="viewport"?E(t,n,r):e==="interaction"||e==="hover"?P(t,n,e):e==="idle"?L(n):typeof e=="object"&&e.type==="timer"?k(n,e.delay):typeof e=="object"&&e.type==="custom"?D(n,e.condition):(n(),()=>{})}function E(t,e,n){if(typeof IntersectionObserver>"u")return e(),()=>{};let r=new IntersectionObserver(i=>{i[0]?.isIntersecting&&(r.disconnect(),e());},{rootMargin:n});return requestAnimationFrame(()=>r.observe(t)),()=>r.disconnect()}function P(t,e,n){let r=n==="hover"?["mouseenter","focusin"]:["click","mouseenter","focusin","touchstart"],i=()=>{for(let u of r)t.removeEventListener(u,i);e();};for(let u of r)t.addEventListener(u,i,{once:true,passive:true});return ()=>{for(let u of r)t.removeEventListener(u,i);}}function L(t){if(typeof requestIdleCallback<"u"){let n=requestIdleCallback(()=>t());return ()=>cancelIdleCallback(n)}let e=setTimeout(t,200);return ()=>clearTimeout(e)}function k(t,e){let n=setTimeout(t,e);return ()=>clearTimeout(n)}function D(t,e){let n=()=>{e()?t():requestAnimationFrame(n);};return requestAnimationFrame(n),()=>{}}export{j as a};//# sourceMappingURL=chunk-3VYMJMAU.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3VYMJMAU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defer.ts"],"names":["defer","loader","options","trigger","loadingFn","errorFn","prefetch","minLoadTime","rootMargin","resolvedComp","loadPromise","loadError","startLoad","start","mod","elapsed","r","err","defineComponent","ctx","state","signal","triggerLoad","container","s","nodeToDOM","setupTrigger","cleanup","el","load","setupViewportTrigger","setupInteractionTrigger","setupIdleTrigger","setupTimerTrigger","setupCustomTrigger","observer","entries","type","events","handler","event","id","timer","delay","condition","check"],"mappings":"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","file":"chunk-KUPL3ZVD.js","sourcesContent":["/**\n * Deferred loading with triggers.\n *\n * Lazy-load components based on viewport visibility, user interaction,\n * idle time, timer, hover, or custom conditions.\n *\n * ```ts\n * const LazyComments = defer(() => import('./Comments.akash'), {\n * trigger: 'viewport',\n * loading: () => <Skeleton variant=\"text\" />,\n * });\n *\n * const LazyChart = defer(() => import('./Chart.akash'), {\n * trigger: 'idle',\n * loading: () => <Spinner />,\n * });\n *\n * const LazyDropdown = defer(() => import('./Dropdown.akash'), {\n * trigger: 'interaction', // loads on hover/focus/click\n * });\n * ```\n */\n\nimport { signal } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeferTrigger =\n | 'immediate'\n | 'viewport'\n | 'interaction'\n | 'idle'\n | 'hover'\n | { type: 'timer'; delay: number }\n | { type: 'custom'; condition: () => boolean };\n\nexport interface DeferOptions {\n /** When to start loading (default: 'viewport') */\n trigger?: DeferTrigger;\n /** Loading placeholder */\n loading?: () => AkashNode;\n /** Error fallback */\n error?: (err: Error) => AkashNode;\n /** Prefetch — start loading early but don't render until triggered */\n prefetch?: boolean;\n /** Minimum loading time in ms (prevent flash of loading state) */\n minLoadTime?: number;\n /** Viewport root margin for 'viewport' trigger */\n rootMargin?: string;\n}\n\n// =========================================================================\n// defer()\n// =========================================================================\n\n/**\n * Create a deferred component that loads based on a trigger.\n */\nexport function defer<P extends Record<string, unknown>>(\n loader: () => Promise<{ default: Component<P> }>,\n options: DeferOptions = {},\n): Component<P> {\n const {\n trigger = 'viewport',\n loading: loadingFn,\n error: errorFn,\n prefetch = false,\n minLoadTime = 0,\n rootMargin = '200px',\n } = options;\n\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n const start = Date.now();\n loadPromise = loader()\n .then(async (mod) => {\n // Enforce minimum load time\n const elapsed = Date.now() - start;\n if (minLoadTime > 0 && elapsed < minLoadTime) {\n await new Promise((r) => setTimeout(r, minLoadTime - elapsed));\n }\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n // Prefetch if requested\n if (prefetch) startLoad();\n\n return defineComponent<P>((ctx) => {\n const state = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n let triggerCleanup: (() => void) | null = null;\n\n async function triggerLoad(): Promise<void> {\n if (state() !== 'idle') return;\n state.set('loading');\n await startLoad();\n state.set(loadError ? 'error' : 'ready');\n }\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n const s = state();\n\n if (s === 'ready' && resolvedComp) {\n container.appendChild(resolvedComp(ctx.props as any));\n return container;\n }\n\n if (s === 'error' && errorFn && loadError) {\n container.appendChild(nodeToDOM(errorFn(loadError)));\n return container;\n }\n\n // Show loading placeholder\n if (loadingFn && s === 'loading') {\n container.appendChild(nodeToDOM(loadingFn()));\n }\n\n // Set up trigger\n if (s === 'idle') {\n setupTrigger(container, trigger, triggerLoad, rootMargin).then((cleanup) => {\n triggerCleanup = cleanup;\n });\n }\n\n return container;\n };\n });\n}\n\n// =========================================================================\n// Trigger setup\n// =========================================================================\n\nasync function setupTrigger(\n el: HTMLElement,\n trigger: DeferTrigger,\n load: () => void,\n rootMargin: string,\n): Promise<() => void> {\n if (trigger === 'immediate') {\n load();\n return () => {};\n }\n\n if (trigger === 'viewport') {\n return setupViewportTrigger(el, load, rootMargin);\n }\n\n if (trigger === 'interaction' || trigger === 'hover') {\n return setupInteractionTrigger(el, load, trigger);\n }\n\n if (trigger === 'idle') {\n return setupIdleTrigger(load);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'timer') {\n return setupTimerTrigger(load, trigger.delay);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'custom') {\n return setupCustomTrigger(load, trigger.condition);\n }\n\n load();\n return () => {};\n}\n\nfunction setupViewportTrigger(\n el: HTMLElement,\n load: () => void,\n rootMargin: string,\n): () => void {\n if (typeof IntersectionObserver === 'undefined') {\n load();\n return () => {};\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n observer.disconnect();\n load();\n }\n },\n { rootMargin },\n );\n\n // Observe after element is in DOM\n requestAnimationFrame(() => observer.observe(el));\n return () => observer.disconnect();\n}\n\nfunction setupInteractionTrigger(\n el: HTMLElement,\n load: () => void,\n type: 'interaction' | 'hover',\n): () => void {\n const events = type === 'hover'\n ? ['mouseenter', 'focusin']\n : ['click', 'mouseenter', 'focusin', 'touchstart'];\n\n const handler = () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n load();\n };\n\n for (const event of events) {\n el.addEventListener(event, handler, { once: true, passive: true });\n }\n\n return () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n };\n}\n\nfunction setupIdleTrigger(load: () => void): () => void {\n if (typeof requestIdleCallback !== 'undefined') {\n const id = requestIdleCallback(() => load());\n return () => cancelIdleCallback(id);\n }\n // Fallback\n const timer = setTimeout(load, 200);\n return () => clearTimeout(timer);\n}\n\nfunction setupTimerTrigger(load: () => void, delay: number): () => void {\n const timer = setTimeout(load, delay);\n return () => clearTimeout(timer);\n}\n\nfunction setupCustomTrigger(load: () => void, condition: () => boolean): () => void {\n const check = () => {\n if (condition()) load();\n else requestAnimationFrame(check);\n };\n requestAnimationFrame(check);\n return () => {}; // Can't cancel rAF chain easily\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/defer.ts"],"names":["defer","loader","options","trigger","loadingFn","errorFn","prefetch","minLoadTime","rootMargin","resolvedComp","loadPromise","loadError","startLoad","start","mod","elapsed","r","err","defineComponent","ctx","state","signal","triggerLoad","container","s","nodeToDOM","setupTrigger","cleanup","el","load","setupViewportTrigger","setupInteractionTrigger","setupIdleTrigger","setupTimerTrigger","setupCustomTrigger","observer","entries","type","events","handler","event","id","timer","delay","condition","check"],"mappings":"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","file":"chunk-3VYMJMAU.js","sourcesContent":["/**\n * Deferred loading with triggers.\n *\n * Lazy-load components based on viewport visibility, user interaction,\n * idle time, timer, hover, or custom conditions.\n *\n * ```ts\n * const LazyComments = defer(() => import('./Comments.akash'), {\n * trigger: 'viewport',\n * loading: () => <Skeleton variant=\"text\" />,\n * });\n *\n * const LazyChart = defer(() => import('./Chart.akash'), {\n * trigger: 'idle',\n * loading: () => <Spinner />,\n * });\n *\n * const LazyDropdown = defer(() => import('./Dropdown.akash'), {\n * trigger: 'interaction', // loads on hover/focus/click\n * });\n * ```\n */\n\nimport { signal } from './signals.js';\nimport { defineComponent } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeferTrigger =\n | 'immediate'\n | 'viewport'\n | 'interaction'\n | 'idle'\n | 'hover'\n | { type: 'timer'; delay: number }\n | { type: 'custom'; condition: () => boolean };\n\nexport interface DeferOptions {\n /** When to start loading (default: 'viewport') */\n trigger?: DeferTrigger;\n /** Loading placeholder */\n loading?: () => AkashNode;\n /** Error fallback */\n error?: (err: Error) => AkashNode;\n /** Prefetch — start loading early but don't render until triggered */\n prefetch?: boolean;\n /** Minimum loading time in ms (prevent flash of loading state) */\n minLoadTime?: number;\n /** Viewport root margin for 'viewport' trigger */\n rootMargin?: string;\n}\n\n// =========================================================================\n// defer()\n// =========================================================================\n\n/**\n * Create a deferred component that loads based on a trigger.\n */\nexport function defer<P extends Record<string, unknown>>(\n loader: () => Promise<{ default: Component<P> }>,\n options: DeferOptions = {},\n): Component<P> {\n const {\n trigger = 'viewport',\n loading: loadingFn,\n error: errorFn,\n prefetch = false,\n minLoadTime = 0,\n rootMargin = '200px',\n } = options;\n\n let resolvedComp: Component<P> | null = null;\n let loadPromise: Promise<void> | null = null;\n let loadError: Error | null = null;\n\n function startLoad(): Promise<void> {\n if (loadPromise) return loadPromise;\n\n const start = Date.now();\n loadPromise = loader()\n .then(async (mod) => {\n // Enforce minimum load time\n const elapsed = Date.now() - start;\n if (minLoadTime > 0 && elapsed < minLoadTime) {\n await new Promise((r) => setTimeout(r, minLoadTime - elapsed));\n }\n resolvedComp = mod.default;\n })\n .catch((err) => {\n loadError = err instanceof Error ? err : new Error(String(err));\n });\n\n return loadPromise;\n }\n\n // Prefetch if requested\n if (prefetch) startLoad();\n\n return defineComponent<P>((ctx) => {\n const state = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n let triggerCleanup: (() => void) | null = null;\n\n async function triggerLoad(): Promise<void> {\n if (state() !== 'idle') return;\n state.set('loading');\n await startLoad();\n state.set(loadError ? 'error' : 'ready');\n }\n\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n\n const s = state();\n\n if (s === 'ready' && resolvedComp) {\n container.appendChild(resolvedComp(ctx.props as any));\n return container;\n }\n\n if (s === 'error' && errorFn && loadError) {\n container.appendChild(nodeToDOM(errorFn(loadError)));\n return container;\n }\n\n // Show loading placeholder\n if (loadingFn && s === 'loading') {\n container.appendChild(nodeToDOM(loadingFn()));\n }\n\n // Set up trigger\n if (s === 'idle') {\n setupTrigger(container, trigger, triggerLoad, rootMargin).then((cleanup) => {\n triggerCleanup = cleanup;\n });\n }\n\n return container;\n };\n });\n}\n\n// =========================================================================\n// Trigger setup\n// =========================================================================\n\nasync function setupTrigger(\n el: HTMLElement,\n trigger: DeferTrigger,\n load: () => void,\n rootMargin: string,\n): Promise<() => void> {\n if (trigger === 'immediate') {\n load();\n return () => {};\n }\n\n if (trigger === 'viewport') {\n return setupViewportTrigger(el, load, rootMargin);\n }\n\n if (trigger === 'interaction' || trigger === 'hover') {\n return setupInteractionTrigger(el, load, trigger);\n }\n\n if (trigger === 'idle') {\n return setupIdleTrigger(load);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'timer') {\n return setupTimerTrigger(load, trigger.delay);\n }\n\n if (typeof trigger === 'object' && trigger.type === 'custom') {\n return setupCustomTrigger(load, trigger.condition);\n }\n\n load();\n return () => {};\n}\n\nfunction setupViewportTrigger(\n el: HTMLElement,\n load: () => void,\n rootMargin: string,\n): () => void {\n if (typeof IntersectionObserver === 'undefined') {\n load();\n return () => {};\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n observer.disconnect();\n load();\n }\n },\n { rootMargin },\n );\n\n // Observe after element is in DOM\n requestAnimationFrame(() => observer.observe(el));\n return () => observer.disconnect();\n}\n\nfunction setupInteractionTrigger(\n el: HTMLElement,\n load: () => void,\n type: 'interaction' | 'hover',\n): () => void {\n const events = type === 'hover'\n ? ['mouseenter', 'focusin']\n : ['click', 'mouseenter', 'focusin', 'touchstart'];\n\n const handler = () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n load();\n };\n\n for (const event of events) {\n el.addEventListener(event, handler, { once: true, passive: true });\n }\n\n return () => {\n for (const event of events) {\n el.removeEventListener(event, handler);\n }\n };\n}\n\nfunction setupIdleTrigger(load: () => void): () => void {\n if (typeof requestIdleCallback !== 'undefined') {\n const id = requestIdleCallback(() => load());\n return () => cancelIdleCallback(id);\n }\n // Fallback\n const timer = setTimeout(load, 200);\n return () => clearTimeout(timer);\n}\n\nfunction setupTimerTrigger(load: () => void, delay: number): () => void {\n const timer = setTimeout(load, delay);\n return () => clearTimeout(timer);\n}\n\nfunction setupCustomTrigger(load: () => void, condition: () => boolean): () => void {\n const check = () => {\n if (condition()) load();\n else requestAnimationFrame(check);\n };\n requestAnimationFrame(check);\n return () => {}; // Can't cancel rAF chain easily\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {c}from'./chunk-2UATNCKC.js';function b(l){let{onLoadMore:a,hasMore:s,rootMargin:d="200px",threshold:f=0}=l,n=c(false),t=c(false),r=null,e=null,i=false;async function u(){if(!(n()||t()||i)){if(!s()){t.set(true);return}n.set(true);try{await a(),s()||t.set(!0);}finally{n.set(false);}}}function c$1(p){typeof IntersectionObserver>"u"||(r=new IntersectionObserver(g=>{g[0]?.isIntersecting&&u();},{rootMargin:d,threshold:f}),r.observe(p));}function m(){return e||(e=document.createElement("div"),e.setAttribute("data-akash-sentinel",""),e.style.height="1px",e.setAttribute("aria-hidden","true"),requestAnimationFrame(()=>{e&&!i&&c$1(e);}),e)}return {sentinel:m,loading:()=>n(),done:()=>t(),reset(){t.set(false),n.set(false);},dispose(){i=true,r?.disconnect(),r=null;}}}export{b as a};//# sourceMappingURL=chunk-3Y663FYJ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3Y663FYJ.js.map
|