@zentauri-ui/zentauri-components 1.9.2 → 2.1.0
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/CHANGELOG.md +18 -0
- package/README.md +36 -8
- package/cli/cli.integration.test.ts +52 -0
- package/cli/index.mjs +288 -0
- package/cli/registry.json +14 -0
- package/dist/chunk-22FJROCI.js +70 -0
- package/dist/chunk-22FJROCI.js.map +1 -0
- package/dist/chunk-2NQKFH26.mjs +64 -0
- package/dist/chunk-2NQKFH26.mjs.map +1 -0
- package/dist/chunk-2VPXQ2LA.mjs +57 -0
- package/dist/chunk-2VPXQ2LA.mjs.map +1 -0
- package/dist/chunk-3453DQNL.js +63 -0
- package/dist/chunk-3453DQNL.js.map +1 -0
- package/dist/chunk-34LHS26H.mjs +240 -0
- package/dist/chunk-34LHS26H.mjs.map +1 -0
- package/dist/chunk-3CYJQ6KF.js +121 -0
- package/dist/chunk-3CYJQ6KF.js.map +1 -0
- package/dist/chunk-3EJCQXGV.js +169 -0
- package/dist/chunk-3EJCQXGV.js.map +1 -0
- package/dist/chunk-3VW4HMJT.mjs +58 -0
- package/dist/chunk-3VW4HMJT.mjs.map +1 -0
- package/dist/chunk-42ZSQNDF.mjs +64 -0
- package/dist/chunk-42ZSQNDF.mjs.map +1 -0
- package/dist/{chunk-V4FFKIX3.js → chunk-4LCH4OJ5.js} +10 -10
- package/dist/{chunk-V4FFKIX3.js.map → chunk-4LCH4OJ5.js.map} +1 -1
- package/dist/chunk-4TX7EQ5Y.js +19 -0
- package/dist/{chunk-AQHY4S33.js.map → chunk-4TX7EQ5Y.js.map} +1 -1
- package/dist/chunk-4WG3VNVL.mjs +69 -0
- package/dist/chunk-4WG3VNVL.mjs.map +1 -0
- package/dist/chunk-4ZBMDWWY.mjs +107 -0
- package/dist/chunk-4ZBMDWWY.mjs.map +1 -0
- package/dist/chunk-523VQLCW.mjs +62 -0
- package/dist/chunk-523VQLCW.mjs.map +1 -0
- package/dist/chunk-5AOVTY2X.mjs +68 -0
- package/dist/chunk-5AOVTY2X.mjs.map +1 -0
- package/dist/{chunk-GVGKISKD.js → chunk-5QLPZYWO.js} +9 -9
- package/dist/{chunk-GVGKISKD.js.map → chunk-5QLPZYWO.js.map} +1 -1
- package/dist/{chunk-VUIWYURS.js → chunk-6XVSACCS.js} +15 -15
- package/dist/{chunk-VUIWYURS.js.map → chunk-6XVSACCS.js.map} +1 -1
- package/dist/{chunk-7GIL24GK.js → chunk-7ARZ3MK2.js} +12 -12
- package/dist/{chunk-7GIL24GK.js.map → chunk-7ARZ3MK2.js.map} +1 -1
- package/dist/chunk-7DVECOO7.js +78 -0
- package/dist/chunk-7DVECOO7.js.map +1 -0
- package/dist/{chunk-O23PJPGM.mjs → chunk-7HQFFQSQ.mjs} +3 -3
- package/dist/{chunk-O23PJPGM.mjs.map → chunk-7HQFFQSQ.mjs.map} +1 -1
- package/dist/{chunk-2PWT2MB5.mjs → chunk-7KCX2FX2.mjs} +3 -3
- package/dist/{chunk-2PWT2MB5.mjs.map → chunk-7KCX2FX2.mjs.map} +1 -1
- package/dist/{chunk-ZCTSXNAE.mjs → chunk-7WQ5TWUO.mjs} +3 -3
- package/dist/{chunk-ZCTSXNAE.mjs.map → chunk-7WQ5TWUO.mjs.map} +1 -1
- package/dist/chunk-A7MU6SFI.js +254 -0
- package/dist/chunk-A7MU6SFI.js.map +1 -0
- package/dist/chunk-AOVZY2A3.js +80 -0
- package/dist/chunk-AOVZY2A3.js.map +1 -0
- package/dist/{chunk-D4B62J5C.js → chunk-APBQNYFN.js} +11 -11
- package/dist/{chunk-D4B62J5C.js.map → chunk-APBQNYFN.js.map} +1 -1
- package/dist/chunk-AZ26NZJV.mjs +66 -0
- package/dist/chunk-AZ26NZJV.mjs.map +1 -0
- package/dist/chunk-BBM4BKSN.js +65 -0
- package/dist/chunk-BBM4BKSN.js.map +1 -0
- package/dist/{chunk-I4TGI6U3.mjs → chunk-BGIWVTAU.mjs} +3 -3
- package/dist/{chunk-I4TGI6U3.mjs.map → chunk-BGIWVTAU.mjs.map} +1 -1
- package/dist/{chunk-OPUO55TO.mjs → chunk-BJRS5RXR.mjs} +3 -3
- package/dist/{chunk-OPUO55TO.mjs.map → chunk-BJRS5RXR.mjs.map} +1 -1
- package/dist/{chunk-RYJ5WEE3.js → chunk-BUBIH4LS.js} +9 -9
- package/dist/{chunk-RYJ5WEE3.js.map → chunk-BUBIH4LS.js.map} +1 -1
- package/dist/chunk-BUEI4RMR.mjs +82 -0
- package/dist/chunk-BUEI4RMR.mjs.map +1 -0
- package/dist/chunk-BVTYDGLM.mjs +68 -0
- package/dist/chunk-BVTYDGLM.mjs.map +1 -0
- package/dist/{chunk-7JBQ3ZJN.mjs → chunk-BYXFSXNG.mjs} +3 -3
- package/dist/{chunk-7JBQ3ZJN.mjs.map → chunk-BYXFSXNG.mjs.map} +1 -1
- package/dist/chunk-BZTAA3MK.js +62 -0
- package/dist/chunk-BZTAA3MK.js.map +1 -0
- package/dist/chunk-C6K2SWHC.mjs +74 -0
- package/dist/chunk-C6K2SWHC.mjs.map +1 -0
- package/dist/chunk-CJCOURVM.js +79 -0
- package/dist/chunk-CJCOURVM.js.map +1 -0
- package/dist/chunk-COVTMJIQ.mjs +171 -0
- package/dist/chunk-COVTMJIQ.mjs.map +1 -0
- package/dist/{chunk-ZY6O6Z2I.mjs → chunk-CQ2S43AD.mjs} +3 -3
- package/dist/{chunk-ZY6O6Z2I.mjs.map → chunk-CQ2S43AD.mjs.map} +1 -1
- package/dist/chunk-D7ATXPVI.js +70 -0
- package/dist/chunk-D7ATXPVI.js.map +1 -0
- package/dist/chunk-DOA4ESKS.mjs +58 -0
- package/dist/chunk-DOA4ESKS.mjs.map +1 -0
- package/dist/{chunk-QIUVXTLE.mjs → chunk-DSGPPYZ3.mjs} +3 -3
- package/dist/{chunk-QIUVXTLE.mjs.map → chunk-DSGPPYZ3.mjs.map} +1 -1
- package/dist/chunk-DYSXCJGL.js +47 -0
- package/dist/chunk-DYSXCJGL.js.map +1 -0
- package/dist/{chunk-P2DQP4J4.js → chunk-EDJ6TVL3.js} +117 -12
- package/dist/chunk-EDJ6TVL3.js.map +1 -0
- package/dist/chunk-EE53BIXR.mjs +112 -0
- package/dist/chunk-EE53BIXR.mjs.map +1 -0
- package/dist/chunk-EJ3UMMCS.mjs +65 -0
- package/dist/chunk-EJ3UMMCS.mjs.map +1 -0
- package/dist/chunk-ENYZGL4R.mjs +94 -0
- package/dist/chunk-ENYZGL4R.mjs.map +1 -0
- package/dist/{chunk-BZZVO4GL.mjs → chunk-F6W3GJJ2.mjs} +108 -3
- package/dist/chunk-F6W3GJJ2.mjs.map +1 -0
- package/dist/chunk-FBUY6K6S.js +69 -0
- package/dist/chunk-FBUY6K6S.js.map +1 -0
- package/dist/{chunk-QKZR2UTL.mjs → chunk-FEMXNI6E.mjs} +3 -3
- package/dist/{chunk-QKZR2UTL.mjs.map → chunk-FEMXNI6E.mjs.map} +1 -1
- package/dist/chunk-FX5KR2GP.mjs +81 -0
- package/dist/chunk-FX5KR2GP.mjs.map +1 -0
- package/dist/{chunk-3HSFL4WA.mjs → chunk-GENYOZN4.mjs} +3 -3
- package/dist/{chunk-3HSFL4WA.mjs.map → chunk-GENYOZN4.mjs.map} +1 -1
- package/dist/{chunk-C7F6OCGK.mjs → chunk-GFCT24TH.mjs} +3 -3
- package/dist/{chunk-C7F6OCGK.mjs.map → chunk-GFCT24TH.mjs.map} +1 -1
- package/dist/{chunk-IPUQBMAB.mjs → chunk-GH2GZFRD.mjs} +3 -3
- package/dist/{chunk-IPUQBMAB.mjs.map → chunk-GH2GZFRD.mjs.map} +1 -1
- package/dist/{chunk-NAHHFB2M.js → chunk-GICW4DH5.js} +9 -9
- package/dist/{chunk-NAHHFB2M.js.map → chunk-GICW4DH5.js.map} +1 -1
- package/dist/chunk-HFQJRAG7.mjs +116 -0
- package/dist/chunk-HFQJRAG7.mjs.map +1 -0
- package/dist/chunk-HNRCPZCK.js +107 -0
- package/dist/chunk-HNRCPZCK.js.map +1 -0
- package/dist/chunk-HOOZYA4N.js +92 -0
- package/dist/chunk-HOOZYA4N.js.map +1 -0
- package/dist/chunk-IEHY6KNM.js +122 -0
- package/dist/chunk-IEHY6KNM.js.map +1 -0
- package/dist/{chunk-BDBL4XXI.mjs → chunk-ILCT3P7D.mjs} +3 -3
- package/dist/{chunk-BDBL4XXI.mjs.map → chunk-ILCT3P7D.mjs.map} +1 -1
- package/dist/chunk-IR5SJ7AQ.js +87 -0
- package/dist/chunk-IR5SJ7AQ.js.map +1 -0
- package/dist/chunk-J2SUGU3X.js +63 -0
- package/dist/chunk-J2SUGU3X.js.map +1 -0
- package/dist/{chunk-4LVEWKXF.mjs → chunk-J7IATHJY.mjs} +3 -3
- package/dist/{chunk-4LVEWKXF.mjs.map → chunk-J7IATHJY.mjs.map} +1 -1
- package/dist/{chunk-EKBSSKJQ.js → chunk-JD7TCCMW.js} +10 -10
- package/dist/{chunk-EKBSSKJQ.js.map → chunk-JD7TCCMW.js.map} +1 -1
- package/dist/chunk-JEDMUBYI.mjs +75 -0
- package/dist/chunk-JEDMUBYI.mjs.map +1 -0
- package/dist/{chunk-L4PDJ6IB.mjs → chunk-JEZUMCJ6.mjs} +3 -3
- package/dist/{chunk-L4PDJ6IB.mjs.map → chunk-JEZUMCJ6.mjs.map} +1 -1
- package/dist/{chunk-KEGOUZL5.js → chunk-JGPG2D2Y.js} +7 -7
- package/dist/{chunk-KEGOUZL5.js.map → chunk-JGPG2D2Y.js.map} +1 -1
- package/dist/chunk-JOLSS7UY.mjs +61 -0
- package/dist/chunk-JOLSS7UY.mjs.map +1 -0
- package/dist/{chunk-ATMCT3A3.mjs → chunk-K2H6LIPQ.mjs} +3 -3
- package/dist/{chunk-ATMCT3A3.mjs.map → chunk-K2H6LIPQ.mjs.map} +1 -1
- package/dist/chunk-K7PR3XXT.mjs +128 -0
- package/dist/chunk-K7PR3XXT.mjs.map +1 -0
- package/dist/{chunk-LQPKZ5ZD.js → chunk-KCXTYTOY.js} +6 -6
- package/dist/{chunk-LQPKZ5ZD.js.map → chunk-KCXTYTOY.js.map} +1 -1
- package/dist/chunk-KJMW7S5X.js +78 -0
- package/dist/chunk-KJMW7S5X.js.map +1 -0
- package/dist/chunk-KOIXQXZB.js +49 -0
- package/dist/{chunk-NVTV3EQB.js.map → chunk-KOIXQXZB.js.map} +1 -1
- package/dist/{chunk-PKXDRTC7.js → chunk-KQZWTTY2.js} +13 -13
- package/dist/{chunk-PKXDRTC7.js.map → chunk-KQZWTTY2.js.map} +1 -1
- package/dist/chunk-KWBGLH7G.js +155 -0
- package/dist/chunk-KWBGLH7G.js.map +1 -0
- package/dist/chunk-L7W4NRK6.js +78 -0
- package/dist/chunk-L7W4NRK6.js.map +1 -0
- package/dist/chunk-LRYKMXKI.mjs +159 -0
- package/dist/chunk-LRYKMXKI.mjs.map +1 -0
- package/dist/chunk-MBEQ4GQ7.mjs +44 -0
- package/dist/chunk-MBEQ4GQ7.mjs.map +1 -0
- package/dist/{chunk-PAJYNQR3.mjs → chunk-MI3CVVNR.mjs} +3 -3
- package/dist/{chunk-PAJYNQR3.mjs.map → chunk-MI3CVVNR.mjs.map} +1 -1
- package/dist/{chunk-4FU6FDUT.mjs → chunk-MXYQOQJ4.mjs} +3 -3
- package/dist/{chunk-4FU6FDUT.mjs.map → chunk-MXYQOQJ4.mjs.map} +1 -1
- package/dist/chunk-N3FNN47Q.mjs +64 -0
- package/dist/chunk-N3FNN47Q.mjs.map +1 -0
- package/dist/chunk-NEFDIJ5N.js +672 -0
- package/dist/chunk-NEFDIJ5N.js.map +1 -0
- package/dist/chunk-NFUOJMNI.js +61 -0
- package/dist/chunk-NFUOJMNI.js.map +1 -0
- package/dist/chunk-NGZTAVQO.mjs +79 -0
- package/dist/chunk-NGZTAVQO.mjs.map +1 -0
- package/dist/chunk-NNGL2AFQ.js +181 -0
- package/dist/chunk-NNGL2AFQ.js.map +1 -0
- package/dist/{chunk-Q2NE2UAO.mjs → chunk-NXVSGMLI.mjs} +3 -3
- package/dist/{chunk-Q2NE2UAO.mjs.map → chunk-NXVSGMLI.mjs.map} +1 -1
- package/dist/chunk-NYO3W5GY.js +61 -0
- package/dist/chunk-NYO3W5GY.js.map +1 -0
- package/dist/{chunk-ZFNVFMWG.mjs → chunk-O22T5X4G.mjs} +3 -3
- package/dist/{chunk-ZFNVFMWG.mjs.map → chunk-O22T5X4G.mjs.map} +1 -1
- package/dist/{chunk-Y73U7C4T.js → chunk-OCKSRD6O.js} +16 -16
- package/dist/{chunk-Y73U7C4T.js.map → chunk-OCKSRD6O.js.map} +1 -1
- package/dist/{chunk-27PO2FY2.mjs → chunk-OO4IPM4F.mjs} +3 -3
- package/dist/{chunk-27PO2FY2.mjs.map → chunk-OO4IPM4F.mjs.map} +1 -1
- package/dist/chunk-PP3L6M62.js +126 -0
- package/dist/chunk-PP3L6M62.js.map +1 -0
- package/dist/{chunk-63YMCBGJ.js → chunk-PYNQZP4X.js} +12 -12
- package/dist/{chunk-63YMCBGJ.js.map → chunk-PYNQZP4X.js.map} +1 -1
- package/dist/{chunk-QDHARZDN.js → chunk-QGTLXKKB.js} +12 -12
- package/dist/{chunk-QDHARZDN.js.map → chunk-QGTLXKKB.js.map} +1 -1
- package/dist/chunk-QNRJT7R4.js +144 -0
- package/dist/chunk-QNRJT7R4.js.map +1 -0
- package/dist/chunk-QX6PPTWL.mjs +125 -0
- package/dist/chunk-QX6PPTWL.mjs.map +1 -0
- package/dist/{chunk-OPACTZGV.js → chunk-RRUVHDN6.js} +11 -11
- package/dist/{chunk-OPACTZGV.js.map → chunk-RRUVHDN6.js.map} +1 -1
- package/dist/{chunk-IQ6QVIZ3.mjs → chunk-RSMFWP5S.mjs} +3 -3
- package/dist/{chunk-IQ6QVIZ3.mjs.map → chunk-RSMFWP5S.mjs.map} +1 -1
- package/dist/chunk-SCOIRBML.js +705 -0
- package/dist/{chunk-WBRTXAKP.js.map → chunk-SCOIRBML.js.map} +1 -1
- package/dist/chunk-SCWQSQBJ.mjs +113 -0
- package/dist/chunk-SCWQSQBJ.mjs.map +1 -0
- package/dist/{chunk-LLNK24MM.js → chunk-SK24YZIC.js} +18 -18
- package/dist/{chunk-LLNK24MM.js.map → chunk-SK24YZIC.js.map} +1 -1
- package/dist/chunk-SRJCGSNX.js +74 -0
- package/dist/chunk-SRJCGSNX.js.map +1 -0
- package/dist/chunk-SRSRY5K2.js +71 -0
- package/dist/chunk-SRSRY5K2.js.map +1 -0
- package/dist/chunk-SS3T3BUL.mjs +70 -0
- package/dist/chunk-SS3T3BUL.mjs.map +1 -0
- package/dist/{chunk-L6PSW7JE.mjs → chunk-SUTFW53Y.mjs} +3 -3
- package/dist/{chunk-L6PSW7JE.mjs.map → chunk-SUTFW53Y.mjs.map} +1 -1
- package/dist/chunk-T4ZLTKV2.mjs +112 -0
- package/dist/chunk-T4ZLTKV2.mjs.map +1 -0
- package/dist/chunk-TCEGQIGW.mjs +653 -0
- package/dist/chunk-TCEGQIGW.mjs.map +1 -0
- package/dist/{chunk-MUKI3OHH.js → chunk-TDVHPNYI.js} +14 -14
- package/dist/{chunk-MUKI3OHH.js.map → chunk-TDVHPNYI.js.map} +1 -1
- package/dist/chunk-TKAOHMVA.mjs +120 -0
- package/dist/chunk-TKAOHMVA.mjs.map +1 -0
- package/dist/chunk-TT33BIIT.js +71 -0
- package/dist/chunk-TT33BIIT.js.map +1 -0
- package/dist/chunk-U64ISRUX.mjs +73 -0
- package/dist/chunk-U64ISRUX.mjs.map +1 -0
- package/dist/{chunk-O6R6OQXI.mjs → chunk-UFDJ5NIY.mjs} +3 -3
- package/dist/{chunk-O6R6OQXI.mjs.map → chunk-UFDJ5NIY.mjs.map} +1 -1
- package/dist/chunk-UG3GF2BD.js +120 -0
- package/dist/chunk-UG3GF2BD.js.map +1 -0
- package/dist/chunk-UJXFD4SK.js +65 -0
- package/dist/chunk-UJXFD4SK.js.map +1 -0
- package/dist/chunk-USLNTKVQ.js +114 -0
- package/dist/chunk-USLNTKVQ.js.map +1 -0
- package/dist/chunk-UT6QG35L.js +68 -0
- package/dist/chunk-UT6QG35L.js.map +1 -0
- package/dist/{chunk-37YQUTKG.js → chunk-VKEDTQY6.js} +8 -8
- package/dist/{chunk-37YQUTKG.js.map → chunk-VKEDTQY6.js.map} +1 -1
- package/dist/{chunk-I5TREZO5.js → chunk-VSD4KDZT.js} +10 -10
- package/dist/{chunk-I5TREZO5.js.map → chunk-VSD4KDZT.js.map} +1 -1
- package/dist/chunk-WGN2CBG6.js +82 -0
- package/dist/chunk-WGN2CBG6.js.map +1 -0
- package/dist/chunk-X7HK6RTF.js +83 -0
- package/dist/chunk-X7HK6RTF.js.map +1 -0
- package/dist/{chunk-34OSFCSH.js → chunk-XF3NHZZ3.js} +7 -7
- package/dist/{chunk-34OSFCSH.js.map → chunk-XF3NHZZ3.js.map} +1 -1
- package/dist/chunk-XUW42JAP.js +69 -0
- package/dist/chunk-XUW42JAP.js.map +1 -0
- package/dist/{chunk-EIX26RKN.js → chunk-XXGMFT6O.js} +9 -9
- package/dist/{chunk-EIX26RKN.js.map → chunk-XXGMFT6O.js.map} +1 -1
- package/dist/chunk-Y5JAQEBF.js +134 -0
- package/dist/chunk-Y5JAQEBF.js.map +1 -0
- package/dist/chunk-Y7BU5RC4.js +95 -0
- package/dist/chunk-Y7BU5RC4.js.map +1 -0
- package/dist/chunk-YH6MOKHR.mjs +65 -0
- package/dist/chunk-YH6MOKHR.mjs.map +1 -0
- package/dist/chunk-YKTANA3H.mjs +52 -0
- package/dist/chunk-YKTANA3H.mjs.map +1 -0
- package/dist/{chunk-NWMSIYZP.js → chunk-YNTUZCLI.js} +16 -16
- package/dist/{chunk-NWMSIYZP.js.map → chunk-YNTUZCLI.js.map} +1 -1
- package/dist/chunk-YPTHTFVF.mjs +144 -0
- package/dist/chunk-YPTHTFVF.mjs.map +1 -0
- package/dist/chunk-YPYPWALR.js +128 -0
- package/dist/chunk-YPYPWALR.js.map +1 -0
- package/dist/chunk-YXU2MJMT.mjs +52 -0
- package/dist/chunk-YXU2MJMT.mjs.map +1 -0
- package/dist/{chunk-ZITS2V53.js → chunk-ZIP7EX64.js} +9 -9
- package/dist/{chunk-ZITS2V53.js.map → chunk-ZIP7EX64.js.map} +1 -1
- package/dist/chunk-ZJWOSRAS.mjs +57 -0
- package/dist/chunk-ZJWOSRAS.mjs.map +1 -0
- package/dist/{chunk-ODT5TFIT.mjs → chunk-ZMFRJHO6.mjs} +3 -3
- package/dist/{chunk-ODT5TFIT.mjs.map → chunk-ZMFRJHO6.mjs.map} +1 -1
- package/dist/chunk-ZPGYR2UP.mjs +54 -0
- package/dist/chunk-ZPGYR2UP.mjs.map +1 -0
- package/dist/{chunk-XPHD3X4L.mjs → chunk-ZUQOQW5W.mjs} +3 -3
- package/dist/{chunk-XPHD3X4L.mjs.map → chunk-ZUQOQW5W.mjs.map} +1 -1
- package/dist/design-system/accordion.d.ts +85 -85
- package/dist/design-system/accordion.d.ts.map +1 -1
- package/dist/design-system/alert.d.ts +46 -46
- package/dist/design-system/alert.d.ts.map +1 -1
- package/dist/design-system/animated-number.d.ts +44 -44
- package/dist/design-system/avatar.d.ts +47 -47
- package/dist/design-system/avatar.d.ts.map +1 -1
- package/dist/design-system/badge.d.ts +92 -92
- package/dist/design-system/badge.d.ts.map +1 -1
- package/dist/design-system/breadcrumb.d.ts +38 -38
- package/dist/design-system/breadcrumb.d.ts.map +1 -1
- package/dist/design-system/button.d.ts +50 -50
- package/dist/design-system/button.d.ts.map +1 -1
- package/dist/design-system/card.d.ts +52 -52
- package/dist/design-system/card.d.ts.map +1 -1
- package/dist/design-system/checkbox.d.ts +32 -32
- package/dist/design-system/checkbox.d.ts.map +1 -1
- package/dist/design-system/combobox.d.ts +124 -0
- package/dist/design-system/combobox.d.ts.map +1 -0
- package/dist/design-system/command.d.ts +53 -53
- package/dist/design-system/command.d.ts.map +1 -1
- package/dist/design-system/context-menu.d.ts +51 -51
- package/dist/design-system/context-menu.d.ts.map +1 -1
- package/dist/design-system/copy-button.d.ts +49 -49
- package/dist/design-system/copy-button.d.ts.map +1 -1
- package/dist/design-system/divider.d.ts +47 -47
- package/dist/design-system/drawer.d.ts +90 -90
- package/dist/design-system/drawer.d.ts.map +1 -1
- package/dist/design-system/dropdown.d.ts +97 -97
- package/dist/design-system/dropdown.d.ts.map +1 -1
- package/dist/design-system/dynamic-stepper.d.ts +57 -57
- package/dist/design-system/empty-state.d.ts +25 -25
- package/dist/design-system/empty-state.d.ts.map +1 -1
- package/dist/design-system/facade.js +41 -40
- package/dist/design-system/facade.js.map +1 -1
- package/dist/design-system/facade.mjs +40 -39
- package/dist/design-system/facade.mjs.map +1 -1
- package/dist/design-system/file-upload.d.ts +36 -36
- package/dist/design-system/file-upload.d.ts.map +1 -1
- package/dist/design-system/index.d.ts +1 -0
- package/dist/design-system/index.d.ts.map +1 -1
- package/dist/design-system/inputs.d.ts +159 -159
- package/dist/design-system/inputs.d.ts.map +1 -1
- package/dist/design-system/kbd.d.ts +51 -51
- package/dist/design-system/kbd.d.ts.map +1 -1
- package/dist/design-system/marquee.d.ts +43 -43
- package/dist/design-system/marquee.d.ts.map +1 -1
- package/dist/design-system/modal.d.ts +90 -90
- package/dist/design-system/modal.d.ts.map +1 -1
- package/dist/design-system/otp-input.d.ts +38 -38
- package/dist/design-system/otp-input.d.ts.map +1 -1
- package/dist/design-system/pagination.d.ts +51 -51
- package/dist/design-system/pagination.d.ts.map +1 -1
- package/dist/design-system/popover.d.ts +44 -44
- package/dist/design-system/popover.d.ts.map +1 -1
- package/dist/design-system/progress.d.ts +47 -47
- package/dist/design-system/progress.d.ts.map +1 -1
- package/dist/design-system/radio-group.d.ts +32 -32
- package/dist/design-system/radio-group.d.ts.map +1 -1
- package/dist/design-system/rating.d.ts +54 -54
- package/dist/design-system/rating.d.ts.map +1 -1
- package/dist/design-system/scroll-area.d.ts +30 -30
- package/dist/design-system/scroll-area.d.ts.map +1 -1
- package/dist/design-system/select.d.ts +132 -132
- package/dist/design-system/select.d.ts.map +1 -1
- package/dist/design-system/skeleton.d.ts +67 -67
- package/dist/design-system/skeleton.d.ts.map +1 -1
- package/dist/design-system/slider.d.ts +45 -45
- package/dist/design-system/slider.d.ts.map +1 -1
- package/dist/design-system/spinner.d.ts +43 -43
- package/dist/design-system/table.d.ts +108 -108
- package/dist/design-system/table.d.ts.map +1 -1
- package/dist/design-system/tabs.d.ts +43 -43
- package/dist/design-system/tabs.d.ts.map +1 -1
- package/dist/design-system/timeline.d.ts +45 -45
- package/dist/design-system/timeline.d.ts.map +1 -1
- package/dist/design-system/toast.d.ts +47 -47
- package/dist/design-system/toast.d.ts.map +1 -1
- package/dist/design-system/toggle.d.ts +88 -88
- package/dist/design-system/toggle.d.ts.map +1 -1
- package/dist/design-system/tokens.d.ts +101 -0
- package/dist/design-system/tokens.d.ts.map +1 -1
- package/dist/design-system/tokens.js +11 -7
- package/dist/design-system/tokens.mjs +1 -1
- package/dist/design-system/tooltip.d.ts +44 -44
- package/dist/design-system/tooltip.d.ts.map +1 -1
- package/dist/design-system/tree-view.d.ts +92 -92
- package/dist/design-system/tree-view.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useCookie/index.d.ts +2 -0
- package/dist/hooks/useCookie/index.d.ts.map +1 -0
- package/dist/hooks/useCookie/useCookie.d.ts +36 -0
- package/dist/hooks/useCookie/useCookie.d.ts.map +1 -0
- package/dist/hooks/useCookie.js +76 -0
- package/dist/hooks/useCookie.js.map +1 -0
- package/dist/hooks/useCookie.mjs +74 -0
- package/dist/hooks/useCookie.mjs.map +1 -0
- package/dist/hooks/useCountdown/index.d.ts +2 -0
- package/dist/hooks/useCountdown/index.d.ts.map +1 -0
- package/dist/hooks/useCountdown/useCountdown.d.ts +40 -0
- package/dist/hooks/useCountdown/useCountdown.d.ts.map +1 -0
- package/dist/hooks/useCountdown.js +60 -0
- package/dist/hooks/useCountdown.js.map +1 -0
- package/dist/hooks/useCountdown.mjs +58 -0
- package/dist/hooks/useCountdown.mjs.map +1 -0
- package/dist/hooks/useEventListener/index.d.ts +2 -0
- package/dist/hooks/useEventListener/index.d.ts.map +1 -0
- package/dist/hooks/useEventListener/useEventListener.d.ts +22 -0
- package/dist/hooks/useEventListener/useEventListener.d.ts.map +1 -0
- package/dist/hooks/useEventListener.js +45 -0
- package/dist/hooks/useEventListener.js.map +1 -0
- package/dist/hooks/useEventListener.mjs +43 -0
- package/dist/hooks/useEventListener.mjs.map +1 -0
- package/dist/hooks/useGeolocation/index.d.ts +2 -0
- package/dist/hooks/useGeolocation/index.d.ts.map +1 -0
- package/dist/hooks/useGeolocation/useGeolocation.d.ts +48 -0
- package/dist/hooks/useGeolocation/useGeolocation.d.ts.map +1 -0
- package/dist/hooks/useGeolocation.js +111 -0
- package/dist/hooks/useGeolocation.js.map +1 -0
- package/dist/hooks/useGeolocation.mjs +109 -0
- package/dist/hooks/useGeolocation.mjs.map +1 -0
- package/dist/hooks/useHotkeys/index.d.ts +2 -0
- package/dist/hooks/useHotkeys/index.d.ts.map +1 -0
- package/dist/hooks/useHotkeys/useHotkeys.d.ts +24 -0
- package/dist/hooks/useHotkeys/useHotkeys.d.ts.map +1 -0
- package/dist/hooks/useHotkeys.js +90 -0
- package/dist/hooks/useHotkeys.js.map +1 -0
- package/dist/hooks/useHotkeys.mjs +88 -0
- package/dist/hooks/useHotkeys.mjs.map +1 -0
- package/dist/hooks/useIdleTimeout/index.d.ts +2 -0
- package/dist/hooks/useIdleTimeout/index.d.ts.map +1 -0
- package/dist/hooks/useIdleTimeout/useIdleTimeout.d.ts +31 -0
- package/dist/hooks/useIdleTimeout/useIdleTimeout.d.ts.map +1 -0
- package/dist/hooks/useIdleTimeout.js +77 -0
- package/dist/hooks/useIdleTimeout.js.map +1 -0
- package/dist/hooks/useIdleTimeout.mjs +75 -0
- package/dist/hooks/useIdleTimeout.mjs.map +1 -0
- package/dist/hooks/useInterval/index.d.ts +2 -0
- package/dist/hooks/useInterval/index.d.ts.map +1 -0
- package/dist/hooks/useInterval/useInterval.d.ts +12 -0
- package/dist/hooks/useInterval/useInterval.d.ts.map +1 -0
- package/dist/hooks/useInterval.js +27 -0
- package/dist/hooks/useInterval.js.map +1 -0
- package/dist/hooks/useInterval.mjs +25 -0
- package/dist/hooks/useInterval.mjs.map +1 -0
- package/dist/hooks/useKeyPress/index.d.ts +2 -0
- package/dist/hooks/useKeyPress/index.d.ts.map +1 -0
- package/dist/hooks/useKeyPress/useKeyPress.d.ts +15 -0
- package/dist/hooks/useKeyPress/useKeyPress.d.ts.map +1 -0
- package/dist/hooks/useKeyPress.js +47 -0
- package/dist/hooks/useKeyPress.js.map +1 -0
- package/dist/hooks/useKeyPress.mjs +45 -0
- package/dist/hooks/useKeyPress.mjs.map +1 -0
- package/dist/hooks/useLongPress/index.d.ts +2 -0
- package/dist/hooks/useLongPress/index.d.ts.map +1 -0
- package/dist/hooks/useLongPress/useLongPress.d.ts +46 -0
- package/dist/hooks/useLongPress/useLongPress.d.ts.map +1 -0
- package/dist/hooks/useLongPress.js +116 -0
- package/dist/hooks/useLongPress.js.map +1 -0
- package/dist/hooks/useLongPress.mjs +114 -0
- package/dist/hooks/useLongPress.mjs.map +1 -0
- package/dist/hooks/usePrevious/index.d.ts +2 -0
- package/dist/hooks/usePrevious/index.d.ts.map +1 -0
- package/dist/hooks/usePrevious/usePrevious.d.ts +13 -0
- package/dist/hooks/usePrevious/usePrevious.d.ts.map +1 -0
- package/dist/hooks/usePrevious.js +17 -0
- package/dist/hooks/usePrevious.js.map +1 -0
- package/dist/hooks/usePrevious.mjs +15 -0
- package/dist/hooks/usePrevious.mjs.map +1 -0
- package/dist/hooks/useScrollPosition/index.d.ts +2 -0
- package/dist/hooks/useScrollPosition/index.d.ts.map +1 -0
- package/dist/hooks/useScrollPosition/useScrollPosition.d.ts +37 -0
- package/dist/hooks/useScrollPosition/useScrollPosition.d.ts.map +1 -0
- package/dist/hooks/useScrollPosition.js +41 -0
- package/dist/hooks/useScrollPosition.js.map +1 -0
- package/dist/hooks/useScrollPosition.mjs +39 -0
- package/dist/hooks/useScrollPosition.mjs.map +1 -0
- package/dist/hooks/useTimeout/index.d.ts +2 -0
- package/dist/hooks/useTimeout/index.d.ts.map +1 -0
- package/dist/hooks/useTimeout/useTimeout.d.ts +19 -0
- package/dist/hooks/useTimeout/useTimeout.d.ts.map +1 -0
- package/dist/hooks/useTimeout.js +38 -0
- package/dist/hooks/useTimeout.js.map +1 -0
- package/dist/hooks/useTimeout.mjs +36 -0
- package/dist/hooks/useTimeout.mjs.map +1 -0
- package/dist/hooks/useVirtualList/index.d.ts +2 -0
- package/dist/hooks/useVirtualList/index.d.ts.map +1 -0
- package/dist/hooks/useVirtualList/useVirtualList.d.ts +47 -0
- package/dist/hooks/useVirtualList/useVirtualList.d.ts.map +1 -0
- package/dist/hooks/useVirtualList.js +84 -0
- package/dist/hooks/useVirtualList.js.map +1 -0
- package/dist/hooks/useVirtualList.mjs +82 -0
- package/dist/hooks/useVirtualList.mjs.map +1 -0
- package/dist/lib/facade.d.ts.map +1 -1
- package/dist/ui/accordion/animated.js +8 -8
- package/dist/ui/accordion/animated.mjs +3 -3
- package/dist/ui/accordion.js +10 -10
- package/dist/ui/accordion.mjs +3 -3
- package/dist/ui/alert/animated.js +3 -3
- package/dist/ui/alert/animated.mjs +2 -2
- package/dist/ui/alert.js +11 -11
- package/dist/ui/alert.mjs +3 -3
- package/dist/ui/animated-number.js +4 -4
- package/dist/ui/animated-number.mjs +1 -1
- package/dist/ui/avatar/animated.js +6 -6
- package/dist/ui/avatar/animated.mjs +3 -3
- package/dist/ui/avatar.js +10 -10
- package/dist/ui/avatar.mjs +3 -3
- package/dist/ui/badge/animated.js +3 -3
- package/dist/ui/badge/animated.mjs +2 -2
- package/dist/ui/badge/variants.d.ts +45 -45
- package/dist/ui/badge.js +5 -5
- package/dist/ui/badge.mjs +3 -3
- package/dist/ui/breadcrumb.js +9 -9
- package/dist/ui/breadcrumb.mjs +1 -1
- package/dist/ui/buttons/animated.js +43 -42
- package/dist/ui/buttons/animated.js.map +1 -1
- package/dist/ui/buttons/animated.mjs +41 -40
- package/dist/ui/buttons/animated.mjs.map +1 -1
- package/dist/ui/buttons.js +44 -43
- package/dist/ui/buttons.mjs +42 -41
- package/dist/ui/card/animated.js +8 -8
- package/dist/ui/card/animated.mjs +3 -3
- package/dist/ui/card.js +13 -13
- package/dist/ui/card.mjs +3 -3
- package/dist/ui/checkbox/animated.js +5 -5
- package/dist/ui/checkbox/animated.mjs +2 -2
- package/dist/ui/checkbox.js +9 -9
- package/dist/ui/checkbox.mjs +3 -3
- package/dist/ui/combobox/combobox-base.d.ts +37 -0
- package/dist/ui/combobox/combobox-base.d.ts.map +1 -0
- package/dist/ui/combobox/combobox.d.ts +6 -0
- package/dist/ui/combobox/combobox.d.ts.map +1 -0
- package/dist/ui/combobox/index.d.ts +4 -0
- package/dist/ui/combobox/index.d.ts.map +1 -0
- package/dist/ui/combobox/types.d.ts +70 -0
- package/dist/ui/combobox/types.d.ts.map +1 -0
- package/dist/ui/combobox/variants.d.ts +17 -0
- package/dist/ui/combobox/variants.d.ts.map +1 -0
- package/dist/ui/combobox.js +510 -0
- package/dist/ui/combobox.js.map +1 -0
- package/dist/ui/combobox.mjs +495 -0
- package/dist/ui/combobox.mjs.map +1 -0
- package/dist/ui/command/animated.js +3 -3
- package/dist/ui/command/animated.mjs +2 -2
- package/dist/ui/command.js +16 -16
- package/dist/ui/command.mjs +3 -3
- package/dist/ui/context-menu.js +8 -8
- package/dist/ui/context-menu.mjs +2 -2
- package/dist/ui/copy-button/animated.js +3 -3
- package/dist/ui/copy-button/animated.mjs +2 -2
- package/dist/ui/copy-button.js +4 -4
- package/dist/ui/copy-button.mjs +3 -3
- package/dist/ui/divider/animated.js +3 -3
- package/dist/ui/divider/animated.mjs +2 -2
- package/dist/ui/divider.js +7 -7
- package/dist/ui/divider.mjs +3 -3
- package/dist/ui/drawer/animated.js +12 -12
- package/dist/ui/drawer/animated.mjs +3 -3
- package/dist/ui/drawer.js +12 -12
- package/dist/ui/drawer.mjs +2 -2
- package/dist/ui/dropdown.js +9 -9
- package/dist/ui/dropdown.mjs +1 -1
- package/dist/ui/dynamic-stepper/variants.d.ts +1 -1
- package/dist/ui/dynamic-stepper/variants.d.ts.map +1 -1
- package/dist/ui/dynamic-stepper.js +53 -52
- package/dist/ui/dynamic-stepper.js.map +1 -1
- package/dist/ui/dynamic-stepper.mjs +42 -41
- package/dist/ui/dynamic-stepper.mjs.map +1 -1
- package/dist/ui/empty-state/animated.js +3 -3
- package/dist/ui/empty-state/animated.mjs +2 -2
- package/dist/ui/empty-state.js +11 -11
- package/dist/ui/empty-state.mjs +3 -3
- package/dist/ui/file-upload.js +3 -3
- package/dist/ui/file-upload.mjs +1 -1
- package/dist/ui/inputs/animated.js +4 -4
- package/dist/ui/inputs/animated.mjs +2 -2
- package/dist/ui/inputs.js +5 -5
- package/dist/ui/inputs.mjs +3 -3
- package/dist/ui/kbd/animated.js +3 -3
- package/dist/ui/kbd/animated.mjs +2 -2
- package/dist/ui/kbd.js +5 -5
- package/dist/ui/kbd.mjs +3 -3
- package/dist/ui/marquee.js +6 -6
- package/dist/ui/marquee.mjs +1 -1
- package/dist/ui/modal/animated.js +5 -5
- package/dist/ui/modal/animated.mjs +2 -2
- package/dist/ui/modal.js +13 -13
- package/dist/ui/modal.mjs +3 -3
- package/dist/ui/otp-input.js +10 -10
- package/dist/ui/otp-input.mjs +1 -1
- package/dist/ui/pagination.js +49 -48
- package/dist/ui/pagination.js.map +1 -1
- package/dist/ui/pagination.mjs +41 -40
- package/dist/ui/pagination.mjs.map +1 -1
- package/dist/ui/popover/animated.js +5 -5
- package/dist/ui/popover/animated.mjs +2 -2
- package/dist/ui/popover.js +8 -8
- package/dist/ui/popover.mjs +2 -2
- package/dist/ui/progress/animated.js +9 -9
- package/dist/ui/progress/animated.mjs +3 -3
- package/dist/ui/progress.js +10 -10
- package/dist/ui/progress.mjs +3 -3
- package/dist/ui/radio-group/animated.js +8 -8
- package/dist/ui/radio-group/animated.mjs +2 -2
- package/dist/ui/radio-group.js +12 -12
- package/dist/ui/radio-group.mjs +3 -3
- package/dist/ui/rating.js +11 -11
- package/dist/ui/rating.mjs +1 -1
- package/dist/ui/scroll-area.js +7 -7
- package/dist/ui/scroll-area.mjs +1 -1
- package/dist/ui/search/search-suggestion-list.d.ts.map +1 -1
- package/dist/ui/search.js +12 -9
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/search.mjs +11 -8
- package/dist/ui/search.mjs.map +1 -1
- package/dist/ui/select.js +11 -11
- package/dist/ui/select.mjs +1 -1
- package/dist/ui/skeleton/animated.js +9 -9
- package/dist/ui/skeleton/animated.mjs +2 -2
- package/dist/ui/skeleton/variants.d.ts +21 -21
- package/dist/ui/skeleton/variants.d.ts.map +1 -1
- package/dist/ui/skeleton.js +10 -10
- package/dist/ui/skeleton.mjs +2 -2
- package/dist/ui/slider.js +9 -9
- package/dist/ui/slider.mjs +1 -1
- package/dist/ui/spinner/animated.js +5 -5
- package/dist/ui/spinner/animated.mjs +1 -1
- package/dist/ui/table/animated.js +9 -9
- package/dist/ui/table/animated.mjs +3 -3
- package/dist/ui/table.js +15 -15
- package/dist/ui/table.mjs +2 -2
- package/dist/ui/tabs/animated.js +3 -3
- package/dist/ui/tabs/animated.mjs +2 -2
- package/dist/ui/tabs.js +10 -10
- package/dist/ui/tabs.mjs +2 -2
- package/dist/ui/timeline/animated.js +12 -12
- package/dist/ui/timeline/animated.mjs +3 -3
- package/dist/ui/timeline.js +15 -15
- package/dist/ui/timeline.mjs +3 -3
- package/dist/ui/toast/animated.js +8 -8
- package/dist/ui/toast/animated.mjs +2 -2
- package/dist/ui/toast.js +13 -13
- package/dist/ui/toast.mjs +2 -2
- package/dist/ui/toggle/animated.js +5 -5
- package/dist/ui/toggle/animated.mjs +2 -2
- package/dist/ui/toggle.js +5 -5
- package/dist/ui/toggle.mjs +3 -3
- package/dist/ui/tooltip/animated.js +4 -4
- package/dist/ui/tooltip/animated.mjs +2 -2
- package/dist/ui/tooltip.js +8 -8
- package/dist/ui/tooltip.mjs +2 -2
- package/dist/ui/tree-view/animated.js +3 -3
- package/dist/ui/tree-view/animated.mjs +2 -2
- package/dist/ui/tree-view.js +6 -6
- package/dist/ui/tree-view.mjs +3 -3
- package/package.json +2 -2
- package/src/design-system/accordion.ts +85 -85
- package/src/design-system/alert.ts +46 -46
- package/src/design-system/animated-number.ts +44 -44
- package/src/design-system/avatar.ts +47 -47
- package/src/design-system/badge.ts +50 -50
- package/src/design-system/breadcrumb.ts +38 -38
- package/src/design-system/button.ts +52 -52
- package/src/design-system/card.ts +54 -54
- package/src/design-system/checkbox.ts +32 -32
- package/src/design-system/combobox.ts +204 -0
- package/src/design-system/command.ts +53 -53
- package/src/design-system/context-menu.ts +24 -24
- package/src/design-system/copy-button.ts +51 -51
- package/src/design-system/divider.ts +47 -47
- package/src/design-system/drawer.ts +90 -90
- package/src/design-system/dropdown.ts +97 -97
- package/src/design-system/dynamic-stepper.ts +57 -57
- package/src/design-system/empty-state.ts +25 -25
- package/src/design-system/file-upload.ts +36 -36
- package/src/design-system/index.ts +1 -0
- package/src/design-system/inputs.ts +166 -166
- package/src/design-system/kbd.ts +52 -52
- package/src/design-system/marquee.ts +43 -43
- package/src/design-system/modal.ts +90 -90
- package/src/design-system/otp-input.ts +38 -38
- package/src/design-system/pagination.ts +51 -51
- package/src/design-system/popover.ts +44 -44
- package/src/design-system/progress.ts +47 -47
- package/src/design-system/radio-group.ts +32 -32
- package/src/design-system/rating.ts +54 -54
- package/src/design-system/scroll-area.ts +30 -30
- package/src/design-system/select.ts +132 -132
- package/src/design-system/skeleton.ts +67 -67
- package/src/design-system/slider.ts +45 -45
- package/src/design-system/spinner.ts +43 -43
- package/src/design-system/table.ts +108 -108
- package/src/design-system/tabs.ts +44 -43
- package/src/design-system/timeline.ts +45 -45
- package/src/design-system/toast.ts +47 -47
- package/src/design-system/toggle.ts +88 -88
- package/src/design-system/tokens.ts +102 -0
- package/src/design-system/tooltip.ts +44 -44
- package/src/design-system/tree-view.ts +92 -92
- package/src/hooks/index.ts +50 -0
- package/src/hooks/useCookie/index.ts +5 -0
- package/src/hooks/useCookie/useCookie.test.ts +57 -0
- package/src/hooks/useCookie/useCookie.ts +127 -0
- package/src/hooks/useCountdown/index.ts +5 -0
- package/src/hooks/useCountdown/useCountdown.test.ts +113 -0
- package/src/hooks/useCountdown/useCountdown.ts +106 -0
- package/src/hooks/useEventListener/index.ts +4 -0
- package/src/hooks/useEventListener/useEventListener.test.ts +60 -0
- package/src/hooks/useEventListener/useEventListener.ts +99 -0
- package/src/hooks/useGeolocation/index.ts +6 -0
- package/src/hooks/useGeolocation/useGeolocation.test.ts +110 -0
- package/src/hooks/useGeolocation/useGeolocation.ts +175 -0
- package/src/hooks/useHotkeys/index.ts +5 -0
- package/src/hooks/useHotkeys/useHotkeys.test.ts +82 -0
- package/src/hooks/useHotkeys/useHotkeys.ts +130 -0
- package/src/hooks/useIdleTimeout/index.ts +5 -0
- package/src/hooks/useIdleTimeout/useIdleTimeout.test.ts +95 -0
- package/src/hooks/useIdleTimeout/useIdleTimeout.ts +111 -0
- package/src/hooks/useInterval/index.ts +1 -0
- package/src/hooks/useInterval/useInterval.test.ts +56 -0
- package/src/hooks/useInterval/useInterval.ts +36 -0
- package/src/hooks/useKeyPress/index.ts +1 -0
- package/src/hooks/useKeyPress/useKeyPress.test.ts +67 -0
- package/src/hooks/useKeyPress/useKeyPress.ts +65 -0
- package/src/hooks/useLongPress/index.ts +5 -0
- package/src/hooks/useLongPress/useLongPress.test.ts +180 -0
- package/src/hooks/useLongPress/useLongPress.ts +177 -0
- package/src/hooks/usePrevious/index.ts +1 -0
- package/src/hooks/usePrevious/usePrevious.test.ts +33 -0
- package/src/hooks/usePrevious/usePrevious.ts +24 -0
- package/src/hooks/useScrollPosition/index.ts +5 -0
- package/src/hooks/useScrollPosition/useScrollPosition.test.ts +69 -0
- package/src/hooks/useScrollPosition/useScrollPosition.ts +88 -0
- package/src/hooks/useTimeout/index.ts +1 -0
- package/src/hooks/useTimeout/useTimeout.test.ts +63 -0
- package/src/hooks/useTimeout/useTimeout.ts +58 -0
- package/src/hooks/useVirtualList/index.ts +6 -0
- package/src/hooks/useVirtualList/useVirtualList.test.ts +102 -0
- package/src/hooks/useVirtualList/useVirtualList.ts +141 -0
- package/src/lib/facade.test.ts +29 -8
- package/src/lib/facade.ts +6 -2
- package/src/ui/combobox/combobox-base.tsx +552 -0
- package/src/ui/combobox/combobox.test.tsx +292 -0
- package/src/ui/combobox/combobox.tsx +8 -0
- package/src/ui/combobox/index.ts +33 -0
- package/src/ui/combobox/types.ts +91 -0
- package/src/ui/combobox/variants.ts +58 -0
- package/src/ui/search/search-suggestion-list.tsx +11 -6
- package/src/ui/skeleton/variants.ts +105 -0
- package/dist/chunk-22I54GJW.js +0 -69
- package/dist/chunk-22I54GJW.js.map +0 -1
- package/dist/chunk-3I6XR7KN.js +0 -87
- package/dist/chunk-3I6XR7KN.js.map +0 -1
- package/dist/chunk-3R6PQUG2.mjs +0 -144
- package/dist/chunk-3R6PQUG2.mjs.map +0 -1
- package/dist/chunk-3Z6L24ZK.js +0 -83
- package/dist/chunk-3Z6L24ZK.js.map +0 -1
- package/dist/chunk-44G3U35C.js +0 -181
- package/dist/chunk-44G3U35C.js.map +0 -1
- package/dist/chunk-456OEGUT.mjs +0 -58
- package/dist/chunk-456OEGUT.mjs.map +0 -1
- package/dist/chunk-45CGVW7S.js +0 -126
- package/dist/chunk-45CGVW7S.js.map +0 -1
- package/dist/chunk-4QLWSXXO.mjs +0 -65
- package/dist/chunk-4QLWSXXO.mjs.map +0 -1
- package/dist/chunk-4U7CDEN7.mjs +0 -57
- package/dist/chunk-4U7CDEN7.mjs.map +0 -1
- package/dist/chunk-4ZP444GA.mjs +0 -19
- package/dist/chunk-4ZP444GA.mjs.map +0 -1
- package/dist/chunk-56DECC6D.js +0 -95
- package/dist/chunk-56DECC6D.js.map +0 -1
- package/dist/chunk-56KZVM5D.mjs +0 -159
- package/dist/chunk-56KZVM5D.mjs.map +0 -1
- package/dist/chunk-5BSYGFN7.mjs +0 -94
- package/dist/chunk-5BSYGFN7.mjs.map +0 -1
- package/dist/chunk-5J6QMTES.js +0 -655
- package/dist/chunk-5J6QMTES.js.map +0 -1
- package/dist/chunk-5QSYJHWL.mjs +0 -75
- package/dist/chunk-5QSYJHWL.mjs.map +0 -1
- package/dist/chunk-5R6XJAXQ.mjs +0 -66
- package/dist/chunk-5R6XJAXQ.mjs.map +0 -1
- package/dist/chunk-5WWD3TZ2.mjs +0 -70
- package/dist/chunk-5WWD3TZ2.mjs.map +0 -1
- package/dist/chunk-63UE3BR4.mjs +0 -79
- package/dist/chunk-63UE3BR4.mjs.map +0 -1
- package/dist/chunk-7LFRU6AW.js +0 -254
- package/dist/chunk-7LFRU6AW.js.map +0 -1
- package/dist/chunk-7M4TUP4I.js +0 -74
- package/dist/chunk-7M4TUP4I.js.map +0 -1
- package/dist/chunk-AADGUMYW.js +0 -122
- package/dist/chunk-AADGUMYW.js.map +0 -1
- package/dist/chunk-AQHY4S33.js +0 -19
- package/dist/chunk-BTSCPOWZ.mjs +0 -171
- package/dist/chunk-BTSCPOWZ.mjs.map +0 -1
- package/dist/chunk-BZZVO4GL.mjs.map +0 -1
- package/dist/chunk-DWDDIG6R.js +0 -68
- package/dist/chunk-DWDDIG6R.js.map +0 -1
- package/dist/chunk-E7BPOL74.js +0 -155
- package/dist/chunk-E7BPOL74.js.map +0 -1
- package/dist/chunk-EP7WTIKH.mjs +0 -81
- package/dist/chunk-EP7WTIKH.mjs.map +0 -1
- package/dist/chunk-F6V74YMW.js +0 -71
- package/dist/chunk-F6V74YMW.js.map +0 -1
- package/dist/chunk-FNNIH7R2.js +0 -70
- package/dist/chunk-FNNIH7R2.js.map +0 -1
- package/dist/chunk-FWY22BZZ.js +0 -134
- package/dist/chunk-FWY22BZZ.js.map +0 -1
- package/dist/chunk-FXDHDQTH.js +0 -79
- package/dist/chunk-FXDHDQTH.js.map +0 -1
- package/dist/chunk-FZET7XQV.js +0 -169
- package/dist/chunk-FZET7XQV.js.map +0 -1
- package/dist/chunk-GDYSB7SB.js +0 -78
- package/dist/chunk-GDYSB7SB.js.map +0 -1
- package/dist/chunk-GPM2PRC5.js +0 -61
- package/dist/chunk-GPM2PRC5.js.map +0 -1
- package/dist/chunk-I55QC57T.js +0 -47
- package/dist/chunk-I55QC57T.js.map +0 -1
- package/dist/chunk-ISXAUMRW.js +0 -63
- package/dist/chunk-ISXAUMRW.js.map +0 -1
- package/dist/chunk-IULYVARJ.mjs +0 -107
- package/dist/chunk-IULYVARJ.mjs.map +0 -1
- package/dist/chunk-IZAQBJKT.mjs +0 -125
- package/dist/chunk-IZAQBJKT.mjs.map +0 -1
- package/dist/chunk-J6XKTPP5.js +0 -61
- package/dist/chunk-J6XKTPP5.js.map +0 -1
- package/dist/chunk-JF4BRFOG.mjs +0 -54
- package/dist/chunk-JF4BRFOG.mjs.map +0 -1
- package/dist/chunk-JI3IEKH6.mjs +0 -64
- package/dist/chunk-JI3IEKH6.mjs.map +0 -1
- package/dist/chunk-JTMRSRYD.js +0 -63
- package/dist/chunk-JTMRSRYD.js.map +0 -1
- package/dist/chunk-KXNMW4NV.mjs +0 -61
- package/dist/chunk-KXNMW4NV.mjs.map +0 -1
- package/dist/chunk-L67EJJFN.js +0 -82
- package/dist/chunk-L67EJJFN.js.map +0 -1
- package/dist/chunk-L6AS5AVO.js +0 -121
- package/dist/chunk-L6AS5AVO.js.map +0 -1
- package/dist/chunk-LL2UY6CD.mjs +0 -74
- package/dist/chunk-LL2UY6CD.mjs.map +0 -1
- package/dist/chunk-LU6VEI4B.js +0 -92
- package/dist/chunk-LU6VEI4B.js.map +0 -1
- package/dist/chunk-MCYFKM7T.js +0 -62
- package/dist/chunk-MCYFKM7T.js.map +0 -1
- package/dist/chunk-MUP7DVQR.js +0 -26
- package/dist/chunk-MUP7DVQR.js.map +0 -1
- package/dist/chunk-N2RUT33F.mjs +0 -68
- package/dist/chunk-N2RUT33F.mjs.map +0 -1
- package/dist/chunk-NMBSK44H.mjs +0 -44
- package/dist/chunk-NMBSK44H.mjs.map +0 -1
- package/dist/chunk-NVTV3EQB.js +0 -49
- package/dist/chunk-NXNL64Q7.mjs +0 -112
- package/dist/chunk-NXNL64Q7.mjs.map +0 -1
- package/dist/chunk-OGMIKRLJ.js +0 -78
- package/dist/chunk-OGMIKRLJ.js.map +0 -1
- package/dist/chunk-OOBA2MDD.mjs +0 -57
- package/dist/chunk-OOBA2MDD.mjs.map +0 -1
- package/dist/chunk-OQCI2IVL.mjs +0 -112
- package/dist/chunk-OQCI2IVL.mjs.map +0 -1
- package/dist/chunk-P25NI2HG.js +0 -114
- package/dist/chunk-P25NI2HG.js.map +0 -1
- package/dist/chunk-P2DQP4J4.js.map +0 -1
- package/dist/chunk-P43A2BPU.mjs +0 -82
- package/dist/chunk-P43A2BPU.mjs.map +0 -1
- package/dist/chunk-P54PZ72L.mjs +0 -65
- package/dist/chunk-P54PZ72L.mjs.map +0 -1
- package/dist/chunk-PNAFXOZC.mjs +0 -69
- package/dist/chunk-PNAFXOZC.mjs.map +0 -1
- package/dist/chunk-QTFOUK4H.js +0 -107
- package/dist/chunk-QTFOUK4H.js.map +0 -1
- package/dist/chunk-QW2ZHKPC.mjs +0 -64
- package/dist/chunk-QW2ZHKPC.mjs.map +0 -1
- package/dist/chunk-R2256VSD.js +0 -80
- package/dist/chunk-R2256VSD.js.map +0 -1
- package/dist/chunk-S4OSJ4ZN.js +0 -71
- package/dist/chunk-S4OSJ4ZN.js.map +0 -1
- package/dist/chunk-SWU5U5BB.mjs +0 -116
- package/dist/chunk-SWU5U5BB.mjs.map +0 -1
- package/dist/chunk-SYFTQAZG.mjs +0 -58
- package/dist/chunk-SYFTQAZG.mjs.map +0 -1
- package/dist/chunk-T5SPR27V.mjs +0 -64
- package/dist/chunk-T5SPR27V.mjs.map +0 -1
- package/dist/chunk-TD4W3AHI.mjs +0 -113
- package/dist/chunk-TD4W3AHI.mjs.map +0 -1
- package/dist/chunk-TMFXI5FH.mjs +0 -52
- package/dist/chunk-TMFXI5FH.mjs.map +0 -1
- package/dist/chunk-UJBXDDHN.mjs +0 -73
- package/dist/chunk-UJBXDDHN.mjs.map +0 -1
- package/dist/chunk-USLP5NY6.js +0 -69
- package/dist/chunk-USLP5NY6.js.map +0 -1
- package/dist/chunk-UU34Q42Q.js +0 -70
- package/dist/chunk-UU34Q42Q.js.map +0 -1
- package/dist/chunk-V4U6Q5NL.mjs +0 -68
- package/dist/chunk-V4U6Q5NL.mjs.map +0 -1
- package/dist/chunk-VIKQGO4W.mjs +0 -636
- package/dist/chunk-VIKQGO4W.mjs.map +0 -1
- package/dist/chunk-VWHER5XN.js +0 -65
- package/dist/chunk-VWHER5XN.js.map +0 -1
- package/dist/chunk-WBRTXAKP.js +0 -705
- package/dist/chunk-WN7XWKAS.mjs +0 -52
- package/dist/chunk-WN7XWKAS.mjs.map +0 -1
- package/dist/chunk-X3N4EVF7.mjs +0 -240
- package/dist/chunk-X3N4EVF7.mjs.map +0 -1
- package/dist/chunk-Y4YQSCNL.js +0 -65
- package/dist/chunk-Y4YQSCNL.js.map +0 -1
- package/dist/chunk-Y7NRTCAT.js +0 -78
- package/dist/chunk-Y7NRTCAT.js.map +0 -1
- package/dist/chunk-YDKAE7RM.mjs +0 -62
- package/dist/chunk-YDKAE7RM.mjs.map +0 -1
- package/dist/chunk-YN4ZS3R2.js +0 -120
- package/dist/chunk-YN4ZS3R2.js.map +0 -1
- package/src/ui/accessibility/axe-core.test.tsx +0 -139
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
function readCookie(name) {
|
|
6
|
+
if (typeof document === "undefined") {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const prefix = `${encodeURIComponent(name)}=`;
|
|
10
|
+
const match = document.cookie.split("; ").find((row) => row.startsWith(prefix));
|
|
11
|
+
if (!match) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
return decodeURIComponent(match.slice(prefix.length));
|
|
16
|
+
} catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function serializeCookie(name, value, options) {
|
|
21
|
+
const { maxAgeSeconds, expires, path = "/", domain, sameSite } = options;
|
|
22
|
+
const secure = options.secure || sameSite === "none";
|
|
23
|
+
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}; path=${path}`;
|
|
24
|
+
if (maxAgeSeconds != null) {
|
|
25
|
+
cookie += `; max-age=${maxAgeSeconds}`;
|
|
26
|
+
}
|
|
27
|
+
if (expires) {
|
|
28
|
+
cookie += `; expires=${expires.toUTCString()}`;
|
|
29
|
+
}
|
|
30
|
+
if (domain) {
|
|
31
|
+
cookie += `; domain=${domain}`;
|
|
32
|
+
}
|
|
33
|
+
if (secure) {
|
|
34
|
+
cookie += "; secure";
|
|
35
|
+
}
|
|
36
|
+
if (sameSite) {
|
|
37
|
+
cookie += `; samesite=${sameSite}`;
|
|
38
|
+
}
|
|
39
|
+
return cookie;
|
|
40
|
+
}
|
|
41
|
+
function useCookie(name, initialValue) {
|
|
42
|
+
const [value, setValueState] = useState(initialValue ?? null);
|
|
43
|
+
const setCookie = useCallback(
|
|
44
|
+
(value2, options = {}) => {
|
|
45
|
+
if (typeof document === "undefined") {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
document.cookie = serializeCookie(name, value2, options);
|
|
49
|
+
setValueState(value2);
|
|
50
|
+
},
|
|
51
|
+
[name]
|
|
52
|
+
);
|
|
53
|
+
const removeCookie = useCallback(
|
|
54
|
+
(options = {}) => {
|
|
55
|
+
if (typeof document === "undefined") {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
document.cookie = serializeCookie(name, "", {
|
|
59
|
+
...options,
|
|
60
|
+
maxAgeSeconds: 0
|
|
61
|
+
});
|
|
62
|
+
setValueState(null);
|
|
63
|
+
},
|
|
64
|
+
[name]
|
|
65
|
+
);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
setValueState(readCookie(name) ?? initialValue ?? null);
|
|
68
|
+
}, [name]);
|
|
69
|
+
return [value, setCookie, removeCookie];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { useCookie };
|
|
73
|
+
//# sourceMappingURL=useCookie.mjs.map
|
|
74
|
+
//# sourceMappingURL=useCookie.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useCookie/useCookie.ts"],"names":["value"],"mappings":"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","file":"useCookie.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport type CookieOptions = {\n /** Lifetime in seconds (sets `max-age`). Omit for a session cookie. */\n maxAgeSeconds?: number;\n /** Absolute expiry (sets `expires`). */\n expires?: Date;\n /** Cookie path (default `\"/\"`). */\n path?: string;\n /** Cookie domain. */\n domain?: string;\n /** Restrict to HTTPS. */\n secure?: boolean;\n /** SameSite attribute. `\"none\"` automatically forces `secure` per browser requirements. */\n sameSite?: \"strict\" | \"lax\" | \"none\";\n};\n\nexport type UseCookieResult = [\n string | null,\n (value: string, options?: CookieOptions) => void,\n (options?: Pick<CookieOptions, \"path\" | \"domain\">) => void,\n];\n\nfunction readCookie(name: string): string | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n const prefix = `${encodeURIComponent(name)}=`;\n const match = document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(prefix));\n if (!match) {\n return null;\n }\n try {\n return decodeURIComponent(match.slice(prefix.length));\n } catch {\n // Malformed cookie value — return null rather than crashing.\n return null;\n }\n}\n\nfunction serializeCookie(\n name: string,\n value: string,\n options: CookieOptions,\n): string {\n const { maxAgeSeconds, expires, path = \"/\", domain, sameSite } = options;\n // SameSite=None requires Secure; enforce it automatically.\n const secure = options.secure || sameSite === \"none\";\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}; path=${path}`;\n if (maxAgeSeconds != null) {\n cookie += `; max-age=${maxAgeSeconds}`;\n }\n if (expires) {\n cookie += `; expires=${expires.toUTCString()}`;\n }\n if (domain) {\n cookie += `; domain=${domain}`;\n }\n if (secure) {\n cookie += \"; secure\";\n }\n if (sameSite) {\n cookie += `; samesite=${sameSite}`;\n }\n return cookie;\n}\n\n/**\n * Reads and writes a single cookie with React state that stays in sync with your updates.\n *\n * - Initial state is `initialValue` (or `null`) to avoid SSR hydration mismatches; the actual\n * cookie value is read on mount via a `useEffect`.\n * - `setCookie` writes `document.cookie` (URI-encoded) and updates state in the same call.\n * - `removeCookie` expires the cookie via `max-age=0`; pass the same `path` / `domain` used when setting.\n * - Reactivity covers writes made through this hook instance; cookies changed elsewhere are\n * re-read only when `name` changes (the browser offers no cookie change event in wide support).\n * - `SameSite=\"none\"` automatically forces the `Secure` flag per browser requirements.\n *\n * @param name - Cookie name.\n * @param initialValue - Fallback when the cookie is absent (and during SSR).\n * @returns `[value, setCookie, removeCookie]`.\n */\nexport function useCookie(\n name: string,\n initialValue?: string,\n): UseCookieResult {\n // Initialize to initialValue (not readCookie) to avoid SSR hydration mismatches.\n // The effect below syncs the actual cookie value after mount.\n const [value, setValueState] = useState<string | null>(initialValue ?? null);\n\n const setCookie = useCallback(\n (value: string, options: CookieOptions = {}) => {\n if (typeof document === \"undefined\") {\n return;\n }\n document.cookie = serializeCookie(name, value, options);\n setValueState(value);\n },\n [name],\n );\n\n const removeCookie = useCallback(\n (options: Pick<CookieOptions, \"path\" | \"domain\"> = {}) => {\n if (typeof document === \"undefined\") {\n return;\n }\n document.cookie = serializeCookie(name, \"\", {\n ...options,\n maxAgeSeconds: 0,\n });\n setValueState(null);\n },\n [name],\n );\n\n useEffect(() => {\n setValueState(readCookie(name) ?? initialValue ?? null);\n // Intentionally keyed by name only: initialValue is a fallback, not a data source.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [name]);\n\n return [value, setCookie, removeCookie];\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCountdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type UseCountdownParams = {
|
|
2
|
+
/** Value the countdown starts from. */
|
|
3
|
+
countStart: number;
|
|
4
|
+
/** Value the countdown stops at (default `0`). */
|
|
5
|
+
countStop?: number;
|
|
6
|
+
/** Milliseconds between ticks (default `1000`). */
|
|
7
|
+
intervalMs?: number;
|
|
8
|
+
/** Start counting immediately on mount (default `false`). */
|
|
9
|
+
autoStart?: boolean;
|
|
10
|
+
/** Called once when the countdown reaches `countStop`. */
|
|
11
|
+
onComplete?: () => void;
|
|
12
|
+
};
|
|
13
|
+
export type UseCountdownResult = {
|
|
14
|
+
/** Current count value. */
|
|
15
|
+
count: number;
|
|
16
|
+
/** Whether the countdown is actively ticking. */
|
|
17
|
+
isRunning: boolean;
|
|
18
|
+
/** Whether the countdown has reached `countStop`. */
|
|
19
|
+
isComplete: boolean;
|
|
20
|
+
/** Reset to `countStart` and begin ticking. */
|
|
21
|
+
start: () => void;
|
|
22
|
+
/** Stop ticking, keeping the current count. */
|
|
23
|
+
pause: () => void;
|
|
24
|
+
/** Continue ticking from the current count. No-op if the countdown is complete. */
|
|
25
|
+
resume: () => void;
|
|
26
|
+
/** Stop ticking and reset the count to `countStart`. */
|
|
27
|
+
reset: () => void;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Countdown timer decrementing by one each tick, with start, pause, resume, and reset controls.
|
|
31
|
+
*
|
|
32
|
+
* - Counts from `countStart` down to `countStop` (default `0`) every `intervalMs` (default 1s).
|
|
33
|
+
* - `onComplete` fires once when the count reaches `countStop`; the timer stops automatically.
|
|
34
|
+
* - `resume` on a completed countdown is a no-op; call `start` or `reset` to run it again.
|
|
35
|
+
*
|
|
36
|
+
* @param params - {@link UseCountdownParams}
|
|
37
|
+
* @returns {@link UseCountdownResult}
|
|
38
|
+
*/
|
|
39
|
+
export declare function useCountdown({ countStart, countStop, intervalMs, autoStart, onComplete, }: UseCountdownParams): UseCountdownResult;
|
|
40
|
+
//# sourceMappingURL=useCountdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCountdown.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCountdown/useCountdown.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,wDAAwD;IACxD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,SAAa,EACb,UAAiB,EACjB,SAAiB,EACjB,UAAU,GACX,EAAE,kBAAkB,GAAG,kBAAkB,CAuDzC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
require('../chunk-PZ5AY32C.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
function useCountdown({
|
|
8
|
+
countStart,
|
|
9
|
+
countStop = 0,
|
|
10
|
+
intervalMs = 1e3,
|
|
11
|
+
autoStart = false,
|
|
12
|
+
onComplete
|
|
13
|
+
}) {
|
|
14
|
+
const [count, setCount] = react.useState(countStart);
|
|
15
|
+
const [isRunning, setIsRunning] = react.useState(autoStart);
|
|
16
|
+
const onCompleteRef = react.useRef(onComplete);
|
|
17
|
+
react.useEffect(() => {
|
|
18
|
+
onCompleteRef.current = onComplete;
|
|
19
|
+
}, [onComplete]);
|
|
20
|
+
const isComplete = count <= countStop;
|
|
21
|
+
react.useEffect(() => {
|
|
22
|
+
if (!isRunning) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const id = window.setInterval(() => {
|
|
26
|
+
setCount((previous) => Math.max(countStop, previous - 1));
|
|
27
|
+
}, intervalMs);
|
|
28
|
+
return () => {
|
|
29
|
+
window.clearInterval(id);
|
|
30
|
+
};
|
|
31
|
+
}, [countStop, intervalMs, isRunning]);
|
|
32
|
+
react.useEffect(() => {
|
|
33
|
+
if (isRunning && count <= countStop) {
|
|
34
|
+
setIsRunning(false);
|
|
35
|
+
onCompleteRef.current?.();
|
|
36
|
+
}
|
|
37
|
+
}, [count, countStop, isRunning]);
|
|
38
|
+
const start = react.useCallback(() => {
|
|
39
|
+
setCount(countStart);
|
|
40
|
+
setIsRunning(true);
|
|
41
|
+
}, [countStart]);
|
|
42
|
+
const pause = react.useCallback(() => {
|
|
43
|
+
setIsRunning(false);
|
|
44
|
+
}, []);
|
|
45
|
+
const resume = react.useCallback(() => {
|
|
46
|
+
if (isComplete) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
setIsRunning(true);
|
|
50
|
+
}, [isComplete]);
|
|
51
|
+
const reset = react.useCallback(() => {
|
|
52
|
+
setIsRunning(false);
|
|
53
|
+
setCount(countStart);
|
|
54
|
+
}, [countStart]);
|
|
55
|
+
return { count, isRunning, isComplete, start, pause, resume, reset };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
exports.useCountdown = useCountdown;
|
|
59
|
+
//# sourceMappingURL=useCountdown.js.map
|
|
60
|
+
//# sourceMappingURL=useCountdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useCountdown/useCountdown.ts"],"names":["useState","useRef","useEffect","useCallback"],"mappings":";;;;;AA4CO,SAAS,YAAA,CAAa;AAAA,EAC3B,UAAA;AAAA,EACA,SAAA,GAAY,CAAA;AAAA,EACZ,UAAA,GAAa,GAAA;AAAA,EACb,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,EAA2C;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,UAAU,CAAA;AAC7C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,SAAS,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgBC,aAAO,UAAU,CAAA;AAEvC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,aAAA,CAAc,OAAA,GAAU,UAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,aAAa,KAAA,IAAS,SAAA;AAI5B,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,MAAM;AAClC,MAAA,QAAA,CAAS,CAAC,QAAA,KAAa,IAAA,CAAK,IAAI,SAAA,EAAW,QAAA,GAAW,CAAC,CAAC,CAAA;AAAA,IAC1D,GAAG,UAAU,CAAA;AACb,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,cAAc,EAAE,CAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,UAAA,EAAY,SAAS,CAAC,CAAA;AAErC,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,IAAa,SAAS,SAAA,EAAW;AACnC,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,aAAA,CAAc,OAAA,IAAU;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,SAAA,EAAW,SAAS,CAAC,CAAA;AAEhC,EAAA,MAAM,KAAA,GAAQC,kBAAY,MAAM;AAC9B,IAAA,QAAA,CAAS,UAAU,CAAA;AACnB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC9B,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM;AAE/B,IAAA,IAAI,UAAA,EAAY;AACd,MAAA;AAAA,IACF;AACA,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC9B,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,QAAA,CAAS,UAAU,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,YAAY,KAAA,EAAO,KAAA,EAAO,QAAQ,KAAA,EAAM;AACrE","file":"useCountdown.js","sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport type UseCountdownParams = {\n /** Value the countdown starts from. */\n countStart: number;\n /** Value the countdown stops at (default `0`). */\n countStop?: number;\n /** Milliseconds between ticks (default `1000`). */\n intervalMs?: number;\n /** Start counting immediately on mount (default `false`). */\n autoStart?: boolean;\n /** Called once when the countdown reaches `countStop`. */\n onComplete?: () => void;\n};\n\nexport type UseCountdownResult = {\n /** Current count value. */\n count: number;\n /** Whether the countdown is actively ticking. */\n isRunning: boolean;\n /** Whether the countdown has reached `countStop`. */\n isComplete: boolean;\n /** Reset to `countStart` and begin ticking. */\n start: () => void;\n /** Stop ticking, keeping the current count. */\n pause: () => void;\n /** Continue ticking from the current count. No-op if the countdown is complete. */\n resume: () => void;\n /** Stop ticking and reset the count to `countStart`. */\n reset: () => void;\n};\n\n/**\n * Countdown timer decrementing by one each tick, with start, pause, resume, and reset controls.\n *\n * - Counts from `countStart` down to `countStop` (default `0`) every `intervalMs` (default 1s).\n * - `onComplete` fires once when the count reaches `countStop`; the timer stops automatically.\n * - `resume` on a completed countdown is a no-op; call `start` or `reset` to run it again.\n *\n * @param params - {@link UseCountdownParams}\n * @returns {@link UseCountdownResult}\n */\nexport function useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1000,\n autoStart = false,\n onComplete,\n}: UseCountdownParams): UseCountdownResult {\n const [count, setCount] = useState(countStart);\n const [isRunning, setIsRunning] = useState(autoStart);\n const onCompleteRef = useRef(onComplete);\n\n useEffect(() => {\n onCompleteRef.current = onComplete;\n }, [onComplete]);\n\n const isComplete = count <= countStop;\n\n // Interval effect: does NOT include `count` in deps so the timer is not recreated on every tick.\n // Completion is handled by the separate effect below.\n useEffect(() => {\n if (!isRunning) {\n return;\n }\n const id = window.setInterval(() => {\n setCount((previous) => Math.max(countStop, previous - 1));\n }, intervalMs);\n return () => {\n window.clearInterval(id);\n };\n }, [countStop, intervalMs, isRunning]);\n\n useEffect(() => {\n if (isRunning && count <= countStop) {\n setIsRunning(false);\n onCompleteRef.current?.();\n }\n }, [count, countStop, isRunning]);\n\n const start = useCallback(() => {\n setCount(countStart);\n setIsRunning(true);\n }, [countStart]);\n\n const pause = useCallback(() => {\n setIsRunning(false);\n }, []);\n\n const resume = useCallback(() => {\n // No-op when the countdown has already reached countStop to prevent retriggering onComplete.\n if (isComplete) {\n return;\n }\n setIsRunning(true);\n }, [isComplete]);\n\n const reset = useCallback(() => {\n setIsRunning(false);\n setCount(countStart);\n }, [countStart]);\n\n return { count, isRunning, isComplete, start, pause, resume, reset };\n}\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
function useCountdown({
|
|
6
|
+
countStart,
|
|
7
|
+
countStop = 0,
|
|
8
|
+
intervalMs = 1e3,
|
|
9
|
+
autoStart = false,
|
|
10
|
+
onComplete
|
|
11
|
+
}) {
|
|
12
|
+
const [count, setCount] = useState(countStart);
|
|
13
|
+
const [isRunning, setIsRunning] = useState(autoStart);
|
|
14
|
+
const onCompleteRef = useRef(onComplete);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
onCompleteRef.current = onComplete;
|
|
17
|
+
}, [onComplete]);
|
|
18
|
+
const isComplete = count <= countStop;
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!isRunning) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const id = window.setInterval(() => {
|
|
24
|
+
setCount((previous) => Math.max(countStop, previous - 1));
|
|
25
|
+
}, intervalMs);
|
|
26
|
+
return () => {
|
|
27
|
+
window.clearInterval(id);
|
|
28
|
+
};
|
|
29
|
+
}, [countStop, intervalMs, isRunning]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (isRunning && count <= countStop) {
|
|
32
|
+
setIsRunning(false);
|
|
33
|
+
onCompleteRef.current?.();
|
|
34
|
+
}
|
|
35
|
+
}, [count, countStop, isRunning]);
|
|
36
|
+
const start = useCallback(() => {
|
|
37
|
+
setCount(countStart);
|
|
38
|
+
setIsRunning(true);
|
|
39
|
+
}, [countStart]);
|
|
40
|
+
const pause = useCallback(() => {
|
|
41
|
+
setIsRunning(false);
|
|
42
|
+
}, []);
|
|
43
|
+
const resume = useCallback(() => {
|
|
44
|
+
if (isComplete) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setIsRunning(true);
|
|
48
|
+
}, [isComplete]);
|
|
49
|
+
const reset = useCallback(() => {
|
|
50
|
+
setIsRunning(false);
|
|
51
|
+
setCount(countStart);
|
|
52
|
+
}, [countStart]);
|
|
53
|
+
return { count, isRunning, isComplete, start, pause, resume, reset };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { useCountdown };
|
|
57
|
+
//# sourceMappingURL=useCountdown.mjs.map
|
|
58
|
+
//# sourceMappingURL=useCountdown.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useCountdown/useCountdown.ts"],"names":[],"mappings":";;;AA4CO,SAAS,YAAA,CAAa;AAAA,EAC3B,UAAA;AAAA,EACA,SAAA,GAAY,CAAA;AAAA,EACZ,UAAA,GAAa,GAAA;AAAA,EACb,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,EAA2C;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,UAAU,CAAA;AAC7C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,SAAS,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgB,OAAO,UAAU,CAAA;AAEvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,aAAA,CAAc,OAAA,GAAU,UAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,aAAa,KAAA,IAAS,SAAA;AAI5B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,MAAM;AAClC,MAAA,QAAA,CAAS,CAAC,QAAA,KAAa,IAAA,CAAK,IAAI,SAAA,EAAW,QAAA,GAAW,CAAC,CAAC,CAAA;AAAA,IAC1D,GAAG,UAAU,CAAA;AACb,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,cAAc,EAAE,CAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,UAAA,EAAY,SAAS,CAAC,CAAA;AAErC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,IAAa,SAAS,SAAA,EAAW;AACnC,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,aAAA,CAAc,OAAA,IAAU;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,SAAA,EAAW,SAAS,CAAC,CAAA;AAEhC,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,QAAA,CAAS,UAAU,CAAA;AACnB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAE/B,IAAA,IAAI,UAAA,EAAY;AACd,MAAA;AAAA,IACF;AACA,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,QAAA,CAAS,UAAU,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,YAAY,KAAA,EAAO,KAAA,EAAO,QAAQ,KAAA,EAAM;AACrE","file":"useCountdown.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport type UseCountdownParams = {\n /** Value the countdown starts from. */\n countStart: number;\n /** Value the countdown stops at (default `0`). */\n countStop?: number;\n /** Milliseconds between ticks (default `1000`). */\n intervalMs?: number;\n /** Start counting immediately on mount (default `false`). */\n autoStart?: boolean;\n /** Called once when the countdown reaches `countStop`. */\n onComplete?: () => void;\n};\n\nexport type UseCountdownResult = {\n /** Current count value. */\n count: number;\n /** Whether the countdown is actively ticking. */\n isRunning: boolean;\n /** Whether the countdown has reached `countStop`. */\n isComplete: boolean;\n /** Reset to `countStart` and begin ticking. */\n start: () => void;\n /** Stop ticking, keeping the current count. */\n pause: () => void;\n /** Continue ticking from the current count. No-op if the countdown is complete. */\n resume: () => void;\n /** Stop ticking and reset the count to `countStart`. */\n reset: () => void;\n};\n\n/**\n * Countdown timer decrementing by one each tick, with start, pause, resume, and reset controls.\n *\n * - Counts from `countStart` down to `countStop` (default `0`) every `intervalMs` (default 1s).\n * - `onComplete` fires once when the count reaches `countStop`; the timer stops automatically.\n * - `resume` on a completed countdown is a no-op; call `start` or `reset` to run it again.\n *\n * @param params - {@link UseCountdownParams}\n * @returns {@link UseCountdownResult}\n */\nexport function useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1000,\n autoStart = false,\n onComplete,\n}: UseCountdownParams): UseCountdownResult {\n const [count, setCount] = useState(countStart);\n const [isRunning, setIsRunning] = useState(autoStart);\n const onCompleteRef = useRef(onComplete);\n\n useEffect(() => {\n onCompleteRef.current = onComplete;\n }, [onComplete]);\n\n const isComplete = count <= countStop;\n\n // Interval effect: does NOT include `count` in deps so the timer is not recreated on every tick.\n // Completion is handled by the separate effect below.\n useEffect(() => {\n if (!isRunning) {\n return;\n }\n const id = window.setInterval(() => {\n setCount((previous) => Math.max(countStop, previous - 1));\n }, intervalMs);\n return () => {\n window.clearInterval(id);\n };\n }, [countStop, intervalMs, isRunning]);\n\n useEffect(() => {\n if (isRunning && count <= countStop) {\n setIsRunning(false);\n onCompleteRef.current?.();\n }\n }, [count, countStop, isRunning]);\n\n const start = useCallback(() => {\n setCount(countStart);\n setIsRunning(true);\n }, [countStart]);\n\n const pause = useCallback(() => {\n setIsRunning(false);\n }, []);\n\n const resume = useCallback(() => {\n // No-op when the countdown has already reached countStop to prevent retriggering onComplete.\n if (isComplete) {\n return;\n }\n setIsRunning(true);\n }, [isComplete]);\n\n const reset = useCallback(() => {\n setIsRunning(false);\n setCount(countStart);\n }, [countStart]);\n\n return { count, isRunning, isComplete, start, pause, resume, reset };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useEventListener/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RefObject } from "react";
|
|
2
|
+
export type UseEventListenerTarget = EventTarget | RefObject<EventTarget | null> | null;
|
|
3
|
+
/**
|
|
4
|
+
* Attaches a DOM event listener with automatic cleanup and a stable wrapper around the latest handler.
|
|
5
|
+
*
|
|
6
|
+
* - Defaults to `window`; pass an element, `document`, or a React ref object as `target`.
|
|
7
|
+
* - Pass explicit `null` as `target` to skip attaching (useful for conditional subscriptions).
|
|
8
|
+
* - The handler is kept in a ref, so passing a new inline function each render does not re-subscribe.
|
|
9
|
+
* - Ref targets are resolved when the effect runs (after mount); if the ref is retargeted later,
|
|
10
|
+
* re-render with a state-backed node (or key the component) to re-subscribe.
|
|
11
|
+
* - Pass `options` as individual booleans or a stable object reference to avoid re-subscribing on
|
|
12
|
+
* every render. Internally, `capture`, `passive`, and `once` are compared individually.
|
|
13
|
+
*
|
|
14
|
+
* @param eventName - DOM event name (typed against `WindowEventMap` / `DocumentEventMap` / `HTMLElementEventMap`).
|
|
15
|
+
* @param handler - Listener invoked with the native event.
|
|
16
|
+
* @param target - Event target, React ref to one, `undefined` for `window`, or `null` to skip.
|
|
17
|
+
* @param options - Standard `addEventListener` options.
|
|
18
|
+
*/
|
|
19
|
+
export declare function useEventListener<K extends keyof WindowEventMap>(eventName: K, handler: (event: WindowEventMap[K]) => void, target?: Window | null, options?: boolean | AddEventListenerOptions): void;
|
|
20
|
+
export declare function useEventListener<K extends keyof DocumentEventMap>(eventName: K, handler: (event: DocumentEventMap[K]) => void, target: Document | RefObject<Document | null>, options?: boolean | AddEventListenerOptions): void;
|
|
21
|
+
export declare function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = HTMLElement>(eventName: K, handler: (event: HTMLElementEventMap[K]) => void, target: T | RefObject<T | null> | null, options?: boolean | AddEventListenerOptions): void;
|
|
22
|
+
//# sourceMappingURL=useEventListener.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEventListener.d.ts","sourceRoot":"","sources":["../../../src/hooks/useEventListener/useEventListener.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAC7B,IAAI,CAAC;AAmBT;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,cAAc,EAC7D,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,EAC3C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;AACR,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAC/D,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,EAC7C,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,EAC7C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;AACR,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,MAAM,mBAAmB,EACnC,CAAC,SAAS,WAAW,GAAG,WAAW,EAEnC,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,EAChD,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EACtC,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
require('../chunk-PZ5AY32C.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
function resolveTarget(target) {
|
|
8
|
+
if (target === void 0) {
|
|
9
|
+
return typeof window === "undefined" ? null : window;
|
|
10
|
+
}
|
|
11
|
+
if (target === null) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
if (target instanceof EventTarget) {
|
|
15
|
+
return target;
|
|
16
|
+
}
|
|
17
|
+
return target.current;
|
|
18
|
+
}
|
|
19
|
+
function useEventListener(eventName, handler, target, options) {
|
|
20
|
+
const handlerRef = react.useRef(handler);
|
|
21
|
+
react.useEffect(() => {
|
|
22
|
+
handlerRef.current = handler;
|
|
23
|
+
}, [handler]);
|
|
24
|
+
const capture = typeof options === "boolean" ? options : options?.capture ?? false;
|
|
25
|
+
const passive = typeof options === "object" ? options?.passive ?? false : false;
|
|
26
|
+
const once = typeof options === "object" ? options?.once ?? false : false;
|
|
27
|
+
react.useEffect(() => {
|
|
28
|
+
const node = resolveTarget(target);
|
|
29
|
+
if (node == null) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const listenerOptions = { capture, passive, once };
|
|
33
|
+
const listener = (event) => {
|
|
34
|
+
handlerRef.current(event);
|
|
35
|
+
};
|
|
36
|
+
node.addEventListener(eventName, listener, listenerOptions);
|
|
37
|
+
return () => {
|
|
38
|
+
node.removeEventListener(eventName, listener, listenerOptions);
|
|
39
|
+
};
|
|
40
|
+
}, [eventName, target, capture, passive, once]);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
exports.useEventListener = useEventListener;
|
|
44
|
+
//# sourceMappingURL=useEventListener.js.map
|
|
45
|
+
//# sourceMappingURL=useEventListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useEventListener/useEventListener.ts"],"names":["useRef","useEffect"],"mappings":";;;;;AAUA,SAAS,cACP,MAAA,EACoB;AACpB,EAAA,IAAI,WAAW,MAAA,EAAW;AAExB,IAAA,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,IAAA,GAAO,MAAA;AAAA,EAChD;AACA,EAAA,IAAI,WAAW,IAAA,EAAM;AAEnB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,CAAO,OAAA;AAChB;AAuCO,SAAS,gBAAA,CACd,SAAA,EACA,OAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,UAAA,GAAaA,aAAO,OAAO,CAAA;AAEjC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAAA,EACvB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAIZ,EAAA,MAAM,UACJ,OAAO,OAAA,KAAY,SAAA,GAAY,OAAA,GAAW,SAAS,OAAA,IAAW,KAAA;AAChE,EAAA,MAAM,UACJ,OAAO,OAAA,KAAY,QAAA,GAAY,OAAA,EAAS,WAAW,KAAA,GAAS,KAAA;AAC9D,EAAA,MAAM,OAAO,OAAO,OAAA,KAAY,QAAA,GAAY,OAAA,EAAS,QAAQ,KAAA,GAAS,KAAA;AAEtE,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,IAAA,GAAO,cAAc,MAAM,CAAA;AACjC,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAkB,EAAE,OAAA,EAAS,OAAA,EAAS,IAAA,EAAK;AACjD,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAiB;AACjC,MAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IAC1B,CAAA;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAC1D,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAAA,IAC/D,CAAA;AAAA,EACF,GAAG,CAAC,SAAA,EAAW,QAAQ,OAAA,EAAS,OAAA,EAAS,IAAI,CAAC,CAAA;AAChD","file":"useEventListener.js","sourcesContent":["\"use client\";\n\nimport type { RefObject } from \"react\";\nimport { useEffect, useRef } from \"react\";\n\nexport type UseEventListenerTarget =\n | EventTarget\n | RefObject<EventTarget | null>\n | null;\n\nfunction resolveTarget(\n target: UseEventListenerTarget | undefined,\n): EventTarget | null {\n if (target === undefined) {\n // No target specified — default to window.\n return typeof window === \"undefined\" ? null : window;\n }\n if (target === null) {\n // Explicit null — caller opts out; do not attach any listener.\n return null;\n }\n if (target instanceof EventTarget) {\n return target;\n }\n return target.current;\n}\n\n/**\n * Attaches a DOM event listener with automatic cleanup and a stable wrapper around the latest handler.\n *\n * - Defaults to `window`; pass an element, `document`, or a React ref object as `target`.\n * - Pass explicit `null` as `target` to skip attaching (useful for conditional subscriptions).\n * - The handler is kept in a ref, so passing a new inline function each render does not re-subscribe.\n * - Ref targets are resolved when the effect runs (after mount); if the ref is retargeted later,\n * re-render with a state-backed node (or key the component) to re-subscribe.\n * - Pass `options` as individual booleans or a stable object reference to avoid re-subscribing on\n * every render. Internally, `capture`, `passive`, and `once` are compared individually.\n *\n * @param eventName - DOM event name (typed against `WindowEventMap` / `DocumentEventMap` / `HTMLElementEventMap`).\n * @param handler - Listener invoked with the native event.\n * @param target - Event target, React ref to one, `undefined` for `window`, or `null` to skip.\n * @param options - Standard `addEventListener` options.\n */\nexport function useEventListener<K extends keyof WindowEventMap>(\n eventName: K,\n handler: (event: WindowEventMap[K]) => void,\n target?: Window | null,\n options?: boolean | AddEventListenerOptions,\n): void;\nexport function useEventListener<K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void,\n target: Document | RefObject<Document | null>,\n options?: boolean | AddEventListenerOptions,\n): void;\nexport function useEventListener<\n K extends keyof HTMLElementEventMap,\n T extends HTMLElement = HTMLElement,\n>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n target: T | RefObject<T | null> | null,\n options?: boolean | AddEventListenerOptions,\n): void;\nexport function useEventListener(\n eventName: string,\n handler: (event: Event) => void,\n target?: UseEventListenerTarget,\n options?: boolean | AddEventListenerOptions,\n): void {\n const handlerRef = useRef(handler);\n\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n // Destructure options to stable primitives so an inline `{ passive: true }` object literal\n // passed by callers does not cause the listener to be removed and re-added on every render.\n const capture =\n typeof options === \"boolean\" ? options : (options?.capture ?? false);\n const passive =\n typeof options === \"object\" ? (options?.passive ?? false) : false;\n const once = typeof options === \"object\" ? (options?.once ?? false) : false;\n\n useEffect(() => {\n const node = resolveTarget(target);\n if (node == null) {\n return;\n }\n const listenerOptions = { capture, passive, once };\n const listener = (event: Event) => {\n handlerRef.current(event);\n };\n node.addEventListener(eventName, listener, listenerOptions);\n return () => {\n node.removeEventListener(eventName, listener, listenerOptions);\n };\n }, [eventName, target, capture, passive, once]);\n}\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useRef, useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
function resolveTarget(target) {
|
|
6
|
+
if (target === void 0) {
|
|
7
|
+
return typeof window === "undefined" ? null : window;
|
|
8
|
+
}
|
|
9
|
+
if (target === null) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
if (target instanceof EventTarget) {
|
|
13
|
+
return target;
|
|
14
|
+
}
|
|
15
|
+
return target.current;
|
|
16
|
+
}
|
|
17
|
+
function useEventListener(eventName, handler, target, options) {
|
|
18
|
+
const handlerRef = useRef(handler);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
handlerRef.current = handler;
|
|
21
|
+
}, [handler]);
|
|
22
|
+
const capture = typeof options === "boolean" ? options : options?.capture ?? false;
|
|
23
|
+
const passive = typeof options === "object" ? options?.passive ?? false : false;
|
|
24
|
+
const once = typeof options === "object" ? options?.once ?? false : false;
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const node = resolveTarget(target);
|
|
27
|
+
if (node == null) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const listenerOptions = { capture, passive, once };
|
|
31
|
+
const listener = (event) => {
|
|
32
|
+
handlerRef.current(event);
|
|
33
|
+
};
|
|
34
|
+
node.addEventListener(eventName, listener, listenerOptions);
|
|
35
|
+
return () => {
|
|
36
|
+
node.removeEventListener(eventName, listener, listenerOptions);
|
|
37
|
+
};
|
|
38
|
+
}, [eventName, target, capture, passive, once]);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { useEventListener };
|
|
42
|
+
//# sourceMappingURL=useEventListener.mjs.map
|
|
43
|
+
//# sourceMappingURL=useEventListener.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useEventListener/useEventListener.ts"],"names":[],"mappings":";;;AAUA,SAAS,cACP,MAAA,EACoB;AACpB,EAAA,IAAI,WAAW,MAAA,EAAW;AAExB,IAAA,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,IAAA,GAAO,MAAA;AAAA,EAChD;AACA,EAAA,IAAI,WAAW,IAAA,EAAM;AAEnB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,CAAO,OAAA;AAChB;AAuCO,SAAS,gBAAA,CACd,SAAA,EACA,OAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAAA,EACvB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAIZ,EAAA,MAAM,UACJ,OAAO,OAAA,KAAY,SAAA,GAAY,OAAA,GAAW,SAAS,OAAA,IAAW,KAAA;AAChE,EAAA,MAAM,UACJ,OAAO,OAAA,KAAY,QAAA,GAAY,OAAA,EAAS,WAAW,KAAA,GAAS,KAAA;AAC9D,EAAA,MAAM,OAAO,OAAO,OAAA,KAAY,QAAA,GAAY,OAAA,EAAS,QAAQ,KAAA,GAAS,KAAA;AAEtE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,IAAA,GAAO,cAAc,MAAM,CAAA;AACjC,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAkB,EAAE,OAAA,EAAS,OAAA,EAAS,IAAA,EAAK;AACjD,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAiB;AACjC,MAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IAC1B,CAAA;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAC1D,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAAA,IAC/D,CAAA;AAAA,EACF,GAAG,CAAC,SAAA,EAAW,QAAQ,OAAA,EAAS,OAAA,EAAS,IAAI,CAAC,CAAA;AAChD","file":"useEventListener.mjs","sourcesContent":["\"use client\";\n\nimport type { RefObject } from \"react\";\nimport { useEffect, useRef } from \"react\";\n\nexport type UseEventListenerTarget =\n | EventTarget\n | RefObject<EventTarget | null>\n | null;\n\nfunction resolveTarget(\n target: UseEventListenerTarget | undefined,\n): EventTarget | null {\n if (target === undefined) {\n // No target specified — default to window.\n return typeof window === \"undefined\" ? null : window;\n }\n if (target === null) {\n // Explicit null — caller opts out; do not attach any listener.\n return null;\n }\n if (target instanceof EventTarget) {\n return target;\n }\n return target.current;\n}\n\n/**\n * Attaches a DOM event listener with automatic cleanup and a stable wrapper around the latest handler.\n *\n * - Defaults to `window`; pass an element, `document`, or a React ref object as `target`.\n * - Pass explicit `null` as `target` to skip attaching (useful for conditional subscriptions).\n * - The handler is kept in a ref, so passing a new inline function each render does not re-subscribe.\n * - Ref targets are resolved when the effect runs (after mount); if the ref is retargeted later,\n * re-render with a state-backed node (or key the component) to re-subscribe.\n * - Pass `options` as individual booleans or a stable object reference to avoid re-subscribing on\n * every render. Internally, `capture`, `passive`, and `once` are compared individually.\n *\n * @param eventName - DOM event name (typed against `WindowEventMap` / `DocumentEventMap` / `HTMLElementEventMap`).\n * @param handler - Listener invoked with the native event.\n * @param target - Event target, React ref to one, `undefined` for `window`, or `null` to skip.\n * @param options - Standard `addEventListener` options.\n */\nexport function useEventListener<K extends keyof WindowEventMap>(\n eventName: K,\n handler: (event: WindowEventMap[K]) => void,\n target?: Window | null,\n options?: boolean | AddEventListenerOptions,\n): void;\nexport function useEventListener<K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void,\n target: Document | RefObject<Document | null>,\n options?: boolean | AddEventListenerOptions,\n): void;\nexport function useEventListener<\n K extends keyof HTMLElementEventMap,\n T extends HTMLElement = HTMLElement,\n>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n target: T | RefObject<T | null> | null,\n options?: boolean | AddEventListenerOptions,\n): void;\nexport function useEventListener(\n eventName: string,\n handler: (event: Event) => void,\n target?: UseEventListenerTarget,\n options?: boolean | AddEventListenerOptions,\n): void {\n const handlerRef = useRef(handler);\n\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n // Destructure options to stable primitives so an inline `{ passive: true }` object literal\n // passed by callers does not cause the listener to be removed and re-added on every render.\n const capture =\n typeof options === \"boolean\" ? options : (options?.capture ?? false);\n const passive =\n typeof options === \"object\" ? (options?.passive ?? false) : false;\n const once = typeof options === \"object\" ? (options?.once ?? false) : false;\n\n useEffect(() => {\n const node = resolveTarget(target);\n if (node == null) {\n return;\n }\n const listenerOptions = { capture, passive, once };\n const listener = (event: Event) => {\n handlerRef.current(event);\n };\n node.addEventListener(eventName, listener, listenerOptions);\n return () => {\n node.removeEventListener(eventName, listener, listenerOptions);\n };\n }, [eventName, target, capture, passive, once]);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useGeolocation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type GeolocationCoordinatesSnapshot = {
|
|
2
|
+
latitude: number;
|
|
3
|
+
longitude: number;
|
|
4
|
+
accuracy: number;
|
|
5
|
+
altitude: number | null;
|
|
6
|
+
altitudeAccuracy: number | null;
|
|
7
|
+
heading: number | null;
|
|
8
|
+
speed: number | null;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
};
|
|
11
|
+
export type UseGeolocationParams = {
|
|
12
|
+
/** Start requesting the position (default `true`). Set `false` to defer the permission prompt. */
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
/** Keep watching for position updates instead of a one-shot read (default `true`). */
|
|
15
|
+
watch?: boolean;
|
|
16
|
+
/** `PositionOptions.enableHighAccuracy`. */
|
|
17
|
+
enableHighAccuracy?: boolean;
|
|
18
|
+
/** `PositionOptions.maximumAge` in milliseconds. */
|
|
19
|
+
maximumAge?: number;
|
|
20
|
+
/** `PositionOptions.timeout` in milliseconds. */
|
|
21
|
+
timeout?: number;
|
|
22
|
+
};
|
|
23
|
+
export type UseGeolocationResult = {
|
|
24
|
+
/** Whether `navigator.geolocation` exists in this browser. */
|
|
25
|
+
isSupported: boolean;
|
|
26
|
+
/** True while enabled and no position or error has arrived yet. */
|
|
27
|
+
loading: boolean;
|
|
28
|
+
/** Permission state from the Permissions API (`"unknown"` where unsupported or before resolution). */
|
|
29
|
+
permission: PermissionState | "unknown";
|
|
30
|
+
/** Latest position snapshot, or `null` before the first fix. */
|
|
31
|
+
position: GeolocationCoordinatesSnapshot | null;
|
|
32
|
+
/** Latest geolocation error, cleared when a new fix succeeds. */
|
|
33
|
+
error: GeolocationPositionError | null;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Browser geolocation with loading, error, and Permissions API state.
|
|
37
|
+
*
|
|
38
|
+
* - Requesting the position triggers the browser permission prompt; pass `enabled: false`
|
|
39
|
+
* and flip it from a user gesture to avoid prompting on mount.
|
|
40
|
+
* - `watch: true` (default) uses `watchPosition` for live updates; `false` reads once.
|
|
41
|
+
* - `permission` mirrors `navigator.permissions.query({ name: "geolocation" })` including
|
|
42
|
+
* change events, independent of whether a request is active.
|
|
43
|
+
*
|
|
44
|
+
* @param params - {@link UseGeolocationParams}
|
|
45
|
+
* @returns {@link UseGeolocationResult}
|
|
46
|
+
*/
|
|
47
|
+
export declare function useGeolocation(params?: UseGeolocationParams): UseGeolocationResult;
|
|
48
|
+
//# sourceMappingURL=useGeolocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGeolocation.d.ts","sourceRoot":"","sources":["../../../src/hooks/useGeolocation/useGeolocation.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kGAAkG;IAClG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,8DAA8D;IAC9D,WAAW,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC;IACxC,gEAAgE;IAChE,QAAQ,EAAE,8BAA8B,GAAG,IAAI,CAAC;IAChD,iEAAiE;IACjE,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACxC,CAAC;AAkBF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,GAAE,oBAAyB,GAChC,oBAAoB,CAuGtB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
require('../chunk-PZ5AY32C.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
function toSnapshot(position) {
|
|
8
|
+
const { coords } = position;
|
|
9
|
+
return {
|
|
10
|
+
latitude: coords.latitude,
|
|
11
|
+
longitude: coords.longitude,
|
|
12
|
+
accuracy: coords.accuracy,
|
|
13
|
+
altitude: coords.altitude,
|
|
14
|
+
altitudeAccuracy: coords.altitudeAccuracy,
|
|
15
|
+
heading: coords.heading,
|
|
16
|
+
speed: coords.speed,
|
|
17
|
+
timestamp: position.timestamp
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function useGeolocation(params = {}) {
|
|
21
|
+
const {
|
|
22
|
+
enabled = true,
|
|
23
|
+
watch = true,
|
|
24
|
+
enableHighAccuracy,
|
|
25
|
+
maximumAge,
|
|
26
|
+
timeout
|
|
27
|
+
} = params;
|
|
28
|
+
const isSupported = typeof navigator !== "undefined" && "geolocation" in navigator;
|
|
29
|
+
const [permission, setPermission] = react.useState(
|
|
30
|
+
"unknown"
|
|
31
|
+
);
|
|
32
|
+
const [position, setPosition] = react.useState(null);
|
|
33
|
+
const [error, setError] = react.useState(null);
|
|
34
|
+
const [settled, setSettled] = react.useState(false);
|
|
35
|
+
react.useEffect(() => {
|
|
36
|
+
if (typeof navigator === "undefined" || navigator.permissions?.query == null) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
let active = true;
|
|
40
|
+
let status;
|
|
41
|
+
const onChange = () => {
|
|
42
|
+
if (active && status) {
|
|
43
|
+
setPermission(status.state);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
navigator.permissions.query({ name: "geolocation" }).then((result) => {
|
|
47
|
+
if (!active) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
status = result;
|
|
51
|
+
setPermission(result.state);
|
|
52
|
+
result.addEventListener("change", onChange);
|
|
53
|
+
}).catch(() => {
|
|
54
|
+
});
|
|
55
|
+
return () => {
|
|
56
|
+
active = false;
|
|
57
|
+
status?.removeEventListener("change", onChange);
|
|
58
|
+
};
|
|
59
|
+
}, []);
|
|
60
|
+
react.useEffect(() => {
|
|
61
|
+
if (!enabled || !isSupported) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const geolocation = navigator.geolocation;
|
|
65
|
+
let active = true;
|
|
66
|
+
setSettled(false);
|
|
67
|
+
const onSuccess = (next) => {
|
|
68
|
+
if (!active) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
setPosition(toSnapshot(next));
|
|
72
|
+
setError(null);
|
|
73
|
+
setSettled(true);
|
|
74
|
+
};
|
|
75
|
+
const onError = (nextError) => {
|
|
76
|
+
if (!active) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
setError(nextError);
|
|
80
|
+
setSettled(true);
|
|
81
|
+
};
|
|
82
|
+
const options = {
|
|
83
|
+
enableHighAccuracy,
|
|
84
|
+
maximumAge,
|
|
85
|
+
timeout
|
|
86
|
+
};
|
|
87
|
+
let watchId;
|
|
88
|
+
if (watch) {
|
|
89
|
+
watchId = geolocation.watchPosition(onSuccess, onError, options);
|
|
90
|
+
} else {
|
|
91
|
+
geolocation.getCurrentPosition(onSuccess, onError, options);
|
|
92
|
+
}
|
|
93
|
+
return () => {
|
|
94
|
+
active = false;
|
|
95
|
+
if (watchId !== void 0) {
|
|
96
|
+
geolocation.clearWatch(watchId);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}, [enableHighAccuracy, enabled, isSupported, maximumAge, timeout, watch]);
|
|
100
|
+
return {
|
|
101
|
+
isSupported,
|
|
102
|
+
loading: enabled && isSupported && !settled,
|
|
103
|
+
permission,
|
|
104
|
+
position,
|
|
105
|
+
error
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
exports.useGeolocation = useGeolocation;
|
|
110
|
+
//# sourceMappingURL=useGeolocation.js.map
|
|
111
|
+
//# sourceMappingURL=useGeolocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useGeolocation/useGeolocation.ts"],"names":["useState","useEffect"],"mappings":"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","file":"useGeolocation.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport type GeolocationCoordinatesSnapshot = {\n latitude: number;\n longitude: number;\n accuracy: number;\n altitude: number | null;\n altitudeAccuracy: number | null;\n heading: number | null;\n speed: number | null;\n timestamp: number;\n};\n\nexport type UseGeolocationParams = {\n /** Start requesting the position (default `true`). Set `false` to defer the permission prompt. */\n enabled?: boolean;\n /** Keep watching for position updates instead of a one-shot read (default `true`). */\n watch?: boolean;\n /** `PositionOptions.enableHighAccuracy`. */\n enableHighAccuracy?: boolean;\n /** `PositionOptions.maximumAge` in milliseconds. */\n maximumAge?: number;\n /** `PositionOptions.timeout` in milliseconds. */\n timeout?: number;\n};\n\nexport type UseGeolocationResult = {\n /** Whether `navigator.geolocation` exists in this browser. */\n isSupported: boolean;\n /** True while enabled and no position or error has arrived yet. */\n loading: boolean;\n /** Permission state from the Permissions API (`\"unknown\"` where unsupported or before resolution). */\n permission: PermissionState | \"unknown\";\n /** Latest position snapshot, or `null` before the first fix. */\n position: GeolocationCoordinatesSnapshot | null;\n /** Latest geolocation error, cleared when a new fix succeeds. */\n error: GeolocationPositionError | null;\n};\n\nfunction toSnapshot(\n position: GeolocationPosition,\n): GeolocationCoordinatesSnapshot {\n const { coords } = position;\n return {\n latitude: coords.latitude,\n longitude: coords.longitude,\n accuracy: coords.accuracy,\n altitude: coords.altitude,\n altitudeAccuracy: coords.altitudeAccuracy,\n heading: coords.heading,\n speed: coords.speed,\n timestamp: position.timestamp,\n };\n}\n\n/**\n * Browser geolocation with loading, error, and Permissions API state.\n *\n * - Requesting the position triggers the browser permission prompt; pass `enabled: false`\n * and flip it from a user gesture to avoid prompting on mount.\n * - `watch: true` (default) uses `watchPosition` for live updates; `false` reads once.\n * - `permission` mirrors `navigator.permissions.query({ name: \"geolocation\" })` including\n * change events, independent of whether a request is active.\n *\n * @param params - {@link UseGeolocationParams}\n * @returns {@link UseGeolocationResult}\n */\nexport function useGeolocation(\n params: UseGeolocationParams = {},\n): UseGeolocationResult {\n const {\n enabled = true,\n watch = true,\n enableHighAccuracy,\n maximumAge,\n timeout,\n } = params;\n\n const isSupported =\n typeof navigator !== \"undefined\" && \"geolocation\" in navigator;\n\n const [permission, setPermission] = useState<PermissionState | \"unknown\">(\n \"unknown\",\n );\n const [position, setPosition] =\n useState<GeolocationCoordinatesSnapshot | null>(null);\n const [error, setError] = useState<GeolocationPositionError | null>(null);\n const [settled, setSettled] = useState(false);\n\n useEffect(() => {\n if (\n typeof navigator === \"undefined\" ||\n navigator.permissions?.query == null\n ) {\n return;\n }\n let active = true;\n let status: PermissionStatus | undefined;\n const onChange = () => {\n if (active && status) {\n setPermission(status.state);\n }\n };\n navigator.permissions\n .query({ name: \"geolocation\" })\n .then((result) => {\n // Guard against the component unmounting before this promise resolves,\n // which would otherwise attach a listener that can never be cleaned up.\n if (!active) {\n return;\n }\n status = result;\n setPermission(result.state);\n result.addEventListener(\"change\", onChange);\n })\n .catch(() => {\n /* permissions API may reject for geolocation in some browsers */\n });\n return () => {\n active = false;\n status?.removeEventListener(\"change\", onChange);\n };\n }, []);\n\n useEffect(() => {\n if (!enabled || !isSupported) {\n return;\n }\n const geolocation = navigator.geolocation;\n let active = true;\n setSettled(false);\n const onSuccess = (next: GeolocationPosition) => {\n if (!active) {\n return;\n }\n setPosition(toSnapshot(next));\n setError(null);\n setSettled(true);\n };\n const onError = (nextError: GeolocationPositionError) => {\n if (!active) {\n return;\n }\n setError(nextError);\n setSettled(true);\n };\n const options: PositionOptions = {\n enableHighAccuracy,\n maximumAge,\n timeout,\n };\n let watchId: number | undefined;\n if (watch) {\n watchId = geolocation.watchPosition(onSuccess, onError, options);\n } else {\n geolocation.getCurrentPosition(onSuccess, onError, options);\n }\n return () => {\n active = false;\n if (watchId !== undefined) {\n geolocation.clearWatch(watchId);\n }\n };\n }, [enableHighAccuracy, enabled, isSupported, maximumAge, timeout, watch]);\n\n return {\n isSupported,\n loading: enabled && isSupported && !settled,\n permission,\n position,\n error,\n };\n}\n"]}
|