@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useInterval/useInterval.ts"],"names":["useRef","useEffect"],"mappings":";;;;;AAcO,SAAS,WAAA,CACd,UACA,OAAA,EACM;AACN,EAAA,MAAM,WAAA,GAAcA,aAAO,QAAQ,CAAA;AAEnC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,MAAM;AAClC,MAAA,WAAA,CAAY,OAAA,EAAQ;AAAA,IACtB,GAAG,OAAO,CAAA;AACV,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,cAAc,EAAE,CAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd","file":"useInterval.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Declarative `setInterval`: runs `callback` every `delayMs` milliseconds with automatic cleanup.\n *\n * - The latest callback is kept in a ref, so a new inline function each render does not restart the timer.\n * - Pass `null` as the delay to pause the interval; pass a number again to resume.\n * - Changing `delayMs` clears the previous interval and starts a fresh one.\n *\n * @param callback - Function invoked on every tick.\n * @param delayMs - Interval in milliseconds, or `null` to pause.\n */\nexport function useInterval(\n callback: () => void,\n delayMs: number | null,\n): void {\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delayMs == null) {\n return;\n }\n const id = window.setInterval(() => {\n callbackRef.current();\n }, delayMs);\n return () => {\n window.clearInterval(id);\n };\n }, [delayMs]);\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useRef, useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
function useInterval(callback, delayMs) {
|
|
6
|
+
const callbackRef = useRef(callback);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
callbackRef.current = callback;
|
|
9
|
+
}, [callback]);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (delayMs == null) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const id = window.setInterval(() => {
|
|
15
|
+
callbackRef.current();
|
|
16
|
+
}, delayMs);
|
|
17
|
+
return () => {
|
|
18
|
+
window.clearInterval(id);
|
|
19
|
+
};
|
|
20
|
+
}, [delayMs]);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { useInterval };
|
|
24
|
+
//# sourceMappingURL=useInterval.mjs.map
|
|
25
|
+
//# sourceMappingURL=useInterval.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useInterval/useInterval.ts"],"names":[],"mappings":";;;AAcO,SAAS,WAAA,CACd,UACA,OAAA,EACM;AACN,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,WAAA,CAAY,MAAM;AAClC,MAAA,WAAA,CAAY,OAAA,EAAQ;AAAA,IACtB,GAAG,OAAO,CAAA;AACV,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,cAAc,EAAE,CAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd","file":"useInterval.mjs","sourcesContent":["\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Declarative `setInterval`: runs `callback` every `delayMs` milliseconds with automatic cleanup.\n *\n * - The latest callback is kept in a ref, so a new inline function each render does not restart the timer.\n * - Pass `null` as the delay to pause the interval; pass a number again to resume.\n * - Changing `delayMs` clears the previous interval and starts a fresh one.\n *\n * @param callback - Function invoked on every tick.\n * @param delayMs - Interval in milliseconds, or `null` to pause.\n */\nexport function useInterval(\n callback: () => void,\n delayMs: number | null,\n): void {\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delayMs == null) {\n return;\n }\n const id = window.setInterval(() => {\n callbackRef.current();\n }, delayMs);\n return () => {\n window.clearInterval(id);\n };\n }, [delayMs]);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useKeyPress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks whether a keyboard key (or any of several keys) is currently held down.
|
|
3
|
+
*
|
|
4
|
+
* - Matches against `event.key`, case-insensitively (`"k"`, `"Escape"`, `"ArrowUp"`, …).
|
|
5
|
+
* - Listens on `window` for `keydown` / `keyup`, and clears on window `blur` so the
|
|
6
|
+
* state cannot get stuck when focus leaves the page mid-press.
|
|
7
|
+
* - When an array of keys is watched, `pressed` remains `true` as long as ANY of the
|
|
8
|
+
* target keys are still held — releasing one watched key while another is held does
|
|
9
|
+
* not reset the state.
|
|
10
|
+
*
|
|
11
|
+
* @param targetKey - A key name or array of key names to watch.
|
|
12
|
+
* @returns `true` while one of the target keys is pressed.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useKeyPress(targetKey: string | string[]): boolean;
|
|
15
|
+
//# sourceMappingURL=useKeyPress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyPress.d.ts","sourceRoot":"","sources":["../../../src/hooks/useKeyPress/useKeyPress.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CA+CjE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
require('../chunk-PZ5AY32C.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
function useKeyPress(targetKey) {
|
|
8
|
+
const [pressed, setPressed] = react.useState(false);
|
|
9
|
+
const normalizedKey = (Array.isArray(targetKey) ? targetKey : [targetKey]).map((k) => k.toLowerCase()).sort().join("\0");
|
|
10
|
+
react.useEffect(() => {
|
|
11
|
+
const keys = normalizedKey.split("\0");
|
|
12
|
+
const pressedKeys = /* @__PURE__ */ new Set();
|
|
13
|
+
const onKeyDown = (event) => {
|
|
14
|
+
const key = event.key.toLowerCase();
|
|
15
|
+
if (keys.includes(key)) {
|
|
16
|
+
pressedKeys.add(key);
|
|
17
|
+
setPressed(true);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const onKeyUp = (event) => {
|
|
21
|
+
const key = event.key.toLowerCase();
|
|
22
|
+
if (keys.includes(key)) {
|
|
23
|
+
pressedKeys.delete(key);
|
|
24
|
+
setPressed(pressedKeys.size > 0);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const onBlur = () => {
|
|
28
|
+
pressedKeys.clear();
|
|
29
|
+
setPressed(false);
|
|
30
|
+
};
|
|
31
|
+
window.addEventListener("keydown", onKeyDown);
|
|
32
|
+
window.addEventListener("keyup", onKeyUp);
|
|
33
|
+
window.addEventListener("blur", onBlur);
|
|
34
|
+
return () => {
|
|
35
|
+
pressedKeys.clear();
|
|
36
|
+
setPressed(false);
|
|
37
|
+
window.removeEventListener("keydown", onKeyDown);
|
|
38
|
+
window.removeEventListener("keyup", onKeyUp);
|
|
39
|
+
window.removeEventListener("blur", onBlur);
|
|
40
|
+
};
|
|
41
|
+
}, [normalizedKey]);
|
|
42
|
+
return pressed;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
exports.useKeyPress = useKeyPress;
|
|
46
|
+
//# sourceMappingURL=useKeyPress.js.map
|
|
47
|
+
//# sourceMappingURL=useKeyPress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useKeyPress/useKeyPress.ts"],"names":["useState","useEffect"],"mappings":";;;;;AAiBO,SAAS,YAAY,SAAA,EAAuC;AACjE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAI5C,EAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,CAAC,SAAS,CAAA,EACrE,IAAI,CAAC,CAAA,KAAM,EAAE,WAAA,EAAa,EAC1B,IAAA,EAAK,CACL,KAAK,IAAM,CAAA;AAEd,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,IAAM,CAAA;AAGvC,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AAEpC,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY;AAClC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,QAAA,WAAA,CAAY,IAAI,GAAG,CAAA;AACnB,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAyB;AACxC,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY;AAClC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,QAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AACtB,QAAA,UAAA,CAAW,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AACA,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC5C,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AACtC,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAC/C,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAQ,MAAM,CAAA;AAAA,IAC3C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO,OAAA;AACT","file":"useKeyPress.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Tracks whether a keyboard key (or any of several keys) is currently held down.\n *\n * - Matches against `event.key`, case-insensitively (`\"k\"`, `\"Escape\"`, `\"ArrowUp\"`, …).\n * - Listens on `window` for `keydown` / `keyup`, and clears on window `blur` so the\n * state cannot get stuck when focus leaves the page mid-press.\n * - When an array of keys is watched, `pressed` remains `true` as long as ANY of the\n * target keys are still held — releasing one watched key while another is held does\n * not reset the state.\n *\n * @param targetKey - A key name or array of key names to watch.\n * @returns `true` while one of the target keys is pressed.\n */\nexport function useKeyPress(targetKey: string | string[]): boolean {\n const [pressed, setPressed] = useState(false);\n\n // Build a stable string key from the sorted target array.\n // Use \\x00 as separator (not \"|\") so the literal \"|\" key is handled correctly.\n const normalizedKey = (Array.isArray(targetKey) ? targetKey : [targetKey])\n .map((k) => k.toLowerCase())\n .sort()\n .join(\"\\x00\");\n\n useEffect(() => {\n const keys = normalizedKey.split(\"\\x00\");\n // Local Set tracks which target keys are currently pressed so that releasing\n // one key while another is still held does not incorrectly clear `pressed`.\n const pressedKeys = new Set<string>();\n\n const onKeyDown = (event: KeyboardEvent) => {\n const key = event.key.toLowerCase();\n if (keys.includes(key)) {\n pressedKeys.add(key);\n setPressed(true);\n }\n };\n const onKeyUp = (event: KeyboardEvent) => {\n const key = event.key.toLowerCase();\n if (keys.includes(key)) {\n pressedKeys.delete(key);\n setPressed(pressedKeys.size > 0);\n }\n };\n const onBlur = () => {\n pressedKeys.clear();\n setPressed(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"blur\", onBlur);\n return () => {\n pressedKeys.clear();\n setPressed(false);\n window.removeEventListener(\"keydown\", onKeyDown);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, [normalizedKey]);\n\n return pressed;\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
function useKeyPress(targetKey) {
|
|
6
|
+
const [pressed, setPressed] = useState(false);
|
|
7
|
+
const normalizedKey = (Array.isArray(targetKey) ? targetKey : [targetKey]).map((k) => k.toLowerCase()).sort().join("\0");
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
const keys = normalizedKey.split("\0");
|
|
10
|
+
const pressedKeys = /* @__PURE__ */ new Set();
|
|
11
|
+
const onKeyDown = (event) => {
|
|
12
|
+
const key = event.key.toLowerCase();
|
|
13
|
+
if (keys.includes(key)) {
|
|
14
|
+
pressedKeys.add(key);
|
|
15
|
+
setPressed(true);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const onKeyUp = (event) => {
|
|
19
|
+
const key = event.key.toLowerCase();
|
|
20
|
+
if (keys.includes(key)) {
|
|
21
|
+
pressedKeys.delete(key);
|
|
22
|
+
setPressed(pressedKeys.size > 0);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const onBlur = () => {
|
|
26
|
+
pressedKeys.clear();
|
|
27
|
+
setPressed(false);
|
|
28
|
+
};
|
|
29
|
+
window.addEventListener("keydown", onKeyDown);
|
|
30
|
+
window.addEventListener("keyup", onKeyUp);
|
|
31
|
+
window.addEventListener("blur", onBlur);
|
|
32
|
+
return () => {
|
|
33
|
+
pressedKeys.clear();
|
|
34
|
+
setPressed(false);
|
|
35
|
+
window.removeEventListener("keydown", onKeyDown);
|
|
36
|
+
window.removeEventListener("keyup", onKeyUp);
|
|
37
|
+
window.removeEventListener("blur", onBlur);
|
|
38
|
+
};
|
|
39
|
+
}, [normalizedKey]);
|
|
40
|
+
return pressed;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { useKeyPress };
|
|
44
|
+
//# sourceMappingURL=useKeyPress.mjs.map
|
|
45
|
+
//# sourceMappingURL=useKeyPress.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useKeyPress/useKeyPress.ts"],"names":[],"mappings":";;;AAiBO,SAAS,YAAY,SAAA,EAAuC;AACjE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAI5C,EAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,CAAC,SAAS,CAAA,EACrE,IAAI,CAAC,CAAA,KAAM,EAAE,WAAA,EAAa,EAC1B,IAAA,EAAK,CACL,KAAK,IAAM,CAAA;AAEd,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,IAAM,CAAA;AAGvC,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AAEpC,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY;AAClC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,QAAA,WAAA,CAAY,IAAI,GAAG,CAAA;AACnB,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAyB;AACxC,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,WAAA,EAAY;AAClC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,QAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AACtB,QAAA,UAAA,CAAW,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AACA,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC5C,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AACtC,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAC/C,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAQ,MAAM,CAAA;AAAA,IAC3C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO,OAAA;AACT","file":"useKeyPress.mjs","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Tracks whether a keyboard key (or any of several keys) is currently held down.\n *\n * - Matches against `event.key`, case-insensitively (`\"k\"`, `\"Escape\"`, `\"ArrowUp\"`, …).\n * - Listens on `window` for `keydown` / `keyup`, and clears on window `blur` so the\n * state cannot get stuck when focus leaves the page mid-press.\n * - When an array of keys is watched, `pressed` remains `true` as long as ANY of the\n * target keys are still held — releasing one watched key while another is held does\n * not reset the state.\n *\n * @param targetKey - A key name or array of key names to watch.\n * @returns `true` while one of the target keys is pressed.\n */\nexport function useKeyPress(targetKey: string | string[]): boolean {\n const [pressed, setPressed] = useState(false);\n\n // Build a stable string key from the sorted target array.\n // Use \\x00 as separator (not \"|\") so the literal \"|\" key is handled correctly.\n const normalizedKey = (Array.isArray(targetKey) ? targetKey : [targetKey])\n .map((k) => k.toLowerCase())\n .sort()\n .join(\"\\x00\");\n\n useEffect(() => {\n const keys = normalizedKey.split(\"\\x00\");\n // Local Set tracks which target keys are currently pressed so that releasing\n // one key while another is still held does not incorrectly clear `pressed`.\n const pressedKeys = new Set<string>();\n\n const onKeyDown = (event: KeyboardEvent) => {\n const key = event.key.toLowerCase();\n if (keys.includes(key)) {\n pressedKeys.add(key);\n setPressed(true);\n }\n };\n const onKeyUp = (event: KeyboardEvent) => {\n const key = event.key.toLowerCase();\n if (keys.includes(key)) {\n pressedKeys.delete(key);\n setPressed(pressedKeys.size > 0);\n }\n };\n const onBlur = () => {\n pressedKeys.clear();\n setPressed(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"blur\", onBlur);\n return () => {\n pressedKeys.clear();\n setPressed(false);\n window.removeEventListener(\"keydown\", onKeyDown);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, [normalizedKey]);\n\n return pressed;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLongPress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from "react";
|
|
2
|
+
export type UseLongPressOptions = {
|
|
3
|
+
/** Hold duration in milliseconds before the press counts as "long" (default `500`). */
|
|
4
|
+
thresholdMs?: number;
|
|
5
|
+
/** Pointer travel in pixels that cancels the press (default `10`). */
|
|
6
|
+
moveTolerancePx?: number;
|
|
7
|
+
/** Called when the pointer goes down (press attempt starts). */
|
|
8
|
+
onStart?: (event: ReactPointerEvent) => void;
|
|
9
|
+
/** Called on release after a long press fired. */
|
|
10
|
+
onFinish?: (event: ReactPointerEvent) => void;
|
|
11
|
+
/** Called when the press is released or cancelled before the threshold. */
|
|
12
|
+
onCancel?: (event: ReactPointerEvent) => void;
|
|
13
|
+
};
|
|
14
|
+
export type UseLongPressHandlers = {
|
|
15
|
+
onPointerDown: (event: ReactPointerEvent) => void;
|
|
16
|
+
onPointerMove: (event: ReactPointerEvent) => void;
|
|
17
|
+
onPointerUp: (event: ReactPointerEvent) => void;
|
|
18
|
+
onPointerLeave: (event: ReactPointerEvent) => void;
|
|
19
|
+
/** Handles browser-level pointer cancellation (e.g. system interruption, scroll takeover). */
|
|
20
|
+
onPointerCancel: (event: ReactPointerEvent) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Suppresses the synthetic `click` event that fires after a successful long press.
|
|
23
|
+
* Spread alongside the other handlers to prevent unintended navigation or button actions.
|
|
24
|
+
*/
|
|
25
|
+
onClick: (event: ReactMouseEvent) => void;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Long-press gesture detection built on pointer events, so it works for mouse, touch, and pen.
|
|
29
|
+
*
|
|
30
|
+
* Spread the returned handlers onto the target element. After the pointer is held
|
|
31
|
+
* `thresholdMs` without travelling more than `moveTolerancePx`, `callback` fires once;
|
|
32
|
+
* releasing afterwards calls `onFinish`, while early release / movement / leaving the
|
|
33
|
+
* element calls `onCancel`.
|
|
34
|
+
*
|
|
35
|
+
* Only the primary button (button 0 / left click / first touch contact) starts a long press;
|
|
36
|
+
* right and middle mouse buttons are ignored.
|
|
37
|
+
*
|
|
38
|
+
* Pair with `touch-action` / `select-none` CSS on touch targets to suppress native
|
|
39
|
+
* scrolling or text selection during the hold where needed.
|
|
40
|
+
*
|
|
41
|
+
* @param callback - Invoked once when the press crosses the threshold.
|
|
42
|
+
* @param options - {@link UseLongPressOptions}
|
|
43
|
+
* @returns Spreadable pointer handlers ({@link UseLongPressHandlers}).
|
|
44
|
+
*/
|
|
45
|
+
export declare function useLongPress(callback: (event: ReactPointerEvent) => void, options?: UseLongPressOptions): UseLongPressHandlers;
|
|
46
|
+
//# sourceMappingURL=useLongPress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLongPress.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLongPress/useLongPress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,IAAI,eAAe,EAC7B,YAAY,IAAI,iBAAiB,EAClC,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,mBAAmB,GAAG;IAChC,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,cAAc,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,8FAA8F;IAC9F,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD;;;OAGG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,EAC5C,OAAO,GAAE,mBAAwB,GAChC,oBAAoB,CAwHtB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
require('../chunk-PZ5AY32C.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
function useLongPress(callback, options = {}) {
|
|
8
|
+
const {
|
|
9
|
+
thresholdMs = 500,
|
|
10
|
+
moveTolerancePx = 10,
|
|
11
|
+
onStart,
|
|
12
|
+
onFinish,
|
|
13
|
+
onCancel
|
|
14
|
+
} = options;
|
|
15
|
+
const callbackRef = react.useRef(callback);
|
|
16
|
+
const onStartRef = react.useRef(onStart);
|
|
17
|
+
const onFinishRef = react.useRef(onFinish);
|
|
18
|
+
const onCancelRef = react.useRef(onCancel);
|
|
19
|
+
react.useEffect(() => {
|
|
20
|
+
callbackRef.current = callback;
|
|
21
|
+
onStartRef.current = onStart;
|
|
22
|
+
onFinishRef.current = onFinish;
|
|
23
|
+
onCancelRef.current = onCancel;
|
|
24
|
+
}, [callback, onCancel, onFinish, onStart]);
|
|
25
|
+
const timeoutRef = react.useRef(void 0);
|
|
26
|
+
const triggeredRef = react.useRef(false);
|
|
27
|
+
const pressingRef = react.useRef(false);
|
|
28
|
+
const originRef = react.useRef({ x: 0, y: 0 });
|
|
29
|
+
const stopTimer = react.useCallback(() => {
|
|
30
|
+
if (timeoutRef.current !== void 0) {
|
|
31
|
+
window.clearTimeout(timeoutRef.current);
|
|
32
|
+
timeoutRef.current = void 0;
|
|
33
|
+
}
|
|
34
|
+
}, []);
|
|
35
|
+
react.useEffect(() => stopTimer, [stopTimer]);
|
|
36
|
+
const cancel = react.useCallback(
|
|
37
|
+
(event) => {
|
|
38
|
+
if (!pressingRef.current) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
pressingRef.current = false;
|
|
42
|
+
stopTimer();
|
|
43
|
+
if (!triggeredRef.current) {
|
|
44
|
+
onCancelRef.current?.(event);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
[stopTimer]
|
|
48
|
+
);
|
|
49
|
+
const onPointerDown = react.useCallback(
|
|
50
|
+
(event) => {
|
|
51
|
+
if (event.button > 0) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
pressingRef.current = true;
|
|
55
|
+
triggeredRef.current = false;
|
|
56
|
+
originRef.current = { x: event.clientX, y: event.clientY };
|
|
57
|
+
onStartRef.current?.(event);
|
|
58
|
+
stopTimer();
|
|
59
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
60
|
+
timeoutRef.current = void 0;
|
|
61
|
+
if (pressingRef.current) {
|
|
62
|
+
triggeredRef.current = true;
|
|
63
|
+
callbackRef.current(event);
|
|
64
|
+
}
|
|
65
|
+
}, thresholdMs);
|
|
66
|
+
},
|
|
67
|
+
[stopTimer, thresholdMs]
|
|
68
|
+
);
|
|
69
|
+
const onPointerMove = react.useCallback(
|
|
70
|
+
(event) => {
|
|
71
|
+
if (!pressingRef.current || triggeredRef.current) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const dx = event.clientX - originRef.current.x;
|
|
75
|
+
const dy = event.clientY - originRef.current.y;
|
|
76
|
+
if (Math.hypot(dx, dy) > moveTolerancePx) {
|
|
77
|
+
cancel(event);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
[cancel, moveTolerancePx]
|
|
81
|
+
);
|
|
82
|
+
const onPointerUp = react.useCallback(
|
|
83
|
+
(event) => {
|
|
84
|
+
if (!pressingRef.current) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const triggered = triggeredRef.current;
|
|
88
|
+
pressingRef.current = false;
|
|
89
|
+
stopTimer();
|
|
90
|
+
if (triggered) {
|
|
91
|
+
onFinishRef.current?.(event);
|
|
92
|
+
} else {
|
|
93
|
+
onCancelRef.current?.(event);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
[stopTimer]
|
|
97
|
+
);
|
|
98
|
+
const onClick = react.useCallback((event) => {
|
|
99
|
+
if (triggeredRef.current) {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
triggeredRef.current = false;
|
|
102
|
+
}
|
|
103
|
+
}, []);
|
|
104
|
+
return {
|
|
105
|
+
onPointerDown,
|
|
106
|
+
onPointerMove,
|
|
107
|
+
onPointerUp,
|
|
108
|
+
onPointerLeave: cancel,
|
|
109
|
+
onPointerCancel: cancel,
|
|
110
|
+
onClick
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
exports.useLongPress = useLongPress;
|
|
115
|
+
//# sourceMappingURL=useLongPress.js.map
|
|
116
|
+
//# sourceMappingURL=useLongPress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useLongPress/useLongPress.ts"],"names":["useRef","useEffect","useCallback"],"mappings":"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","file":"useLongPress.js","sourcesContent":["\"use client\";\n\nimport type {\n MouseEvent as ReactMouseEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport { useCallback, useEffect, useRef } from \"react\";\n\nexport type UseLongPressOptions = {\n /** Hold duration in milliseconds before the press counts as \"long\" (default `500`). */\n thresholdMs?: number;\n /** Pointer travel in pixels that cancels the press (default `10`). */\n moveTolerancePx?: number;\n /** Called when the pointer goes down (press attempt starts). */\n onStart?: (event: ReactPointerEvent) => void;\n /** Called on release after a long press fired. */\n onFinish?: (event: ReactPointerEvent) => void;\n /** Called when the press is released or cancelled before the threshold. */\n onCancel?: (event: ReactPointerEvent) => void;\n};\n\nexport type UseLongPressHandlers = {\n onPointerDown: (event: ReactPointerEvent) => void;\n onPointerMove: (event: ReactPointerEvent) => void;\n onPointerUp: (event: ReactPointerEvent) => void;\n onPointerLeave: (event: ReactPointerEvent) => void;\n /** Handles browser-level pointer cancellation (e.g. system interruption, scroll takeover). */\n onPointerCancel: (event: ReactPointerEvent) => void;\n /**\n * Suppresses the synthetic `click` event that fires after a successful long press.\n * Spread alongside the other handlers to prevent unintended navigation or button actions.\n */\n onClick: (event: ReactMouseEvent) => void;\n};\n\n/**\n * Long-press gesture detection built on pointer events, so it works for mouse, touch, and pen.\n *\n * Spread the returned handlers onto the target element. After the pointer is held\n * `thresholdMs` without travelling more than `moveTolerancePx`, `callback` fires once;\n * releasing afterwards calls `onFinish`, while early release / movement / leaving the\n * element calls `onCancel`.\n *\n * Only the primary button (button 0 / left click / first touch contact) starts a long press;\n * right and middle mouse buttons are ignored.\n *\n * Pair with `touch-action` / `select-none` CSS on touch targets to suppress native\n * scrolling or text selection during the hold where needed.\n *\n * @param callback - Invoked once when the press crosses the threshold.\n * @param options - {@link UseLongPressOptions}\n * @returns Spreadable pointer handlers ({@link UseLongPressHandlers}).\n */\nexport function useLongPress(\n callback: (event: ReactPointerEvent) => void,\n options: UseLongPressOptions = {},\n): UseLongPressHandlers {\n const {\n thresholdMs = 500,\n moveTolerancePx = 10,\n onStart,\n onFinish,\n onCancel,\n } = options;\n\n const callbackRef = useRef(callback);\n const onStartRef = useRef(onStart);\n const onFinishRef = useRef(onFinish);\n const onCancelRef = useRef(onCancel);\n\n useEffect(() => {\n callbackRef.current = callback;\n onStartRef.current = onStart;\n onFinishRef.current = onFinish;\n onCancelRef.current = onCancel;\n }, [callback, onCancel, onFinish, onStart]);\n\n const timeoutRef = useRef<number | undefined>(undefined);\n const triggeredRef = useRef(false);\n const pressingRef = useRef(false);\n const originRef = useRef({ x: 0, y: 0 });\n\n const stopTimer = useCallback(() => {\n if (timeoutRef.current !== undefined) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n }, []);\n\n useEffect(() => stopTimer, [stopTimer]);\n\n const cancel = useCallback(\n (event: ReactPointerEvent) => {\n if (!pressingRef.current) {\n return;\n }\n pressingRef.current = false;\n stopTimer();\n if (!triggeredRef.current) {\n onCancelRef.current?.(event);\n }\n },\n [stopTimer],\n );\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent) => {\n // Only respond to the primary button (left click / first touch contact).\n // event.button > 0 catches right (2) and middle (1) mouse buttons.\n if (event.button > 0) {\n return;\n }\n pressingRef.current = true;\n triggeredRef.current = false;\n originRef.current = { x: event.clientX, y: event.clientY };\n onStartRef.current?.(event);\n stopTimer();\n timeoutRef.current = window.setTimeout(() => {\n timeoutRef.current = undefined;\n if (pressingRef.current) {\n triggeredRef.current = true;\n callbackRef.current(event);\n }\n }, thresholdMs);\n },\n [stopTimer, thresholdMs],\n );\n\n const onPointerMove = useCallback(\n (event: ReactPointerEvent) => {\n if (!pressingRef.current || triggeredRef.current) {\n return;\n }\n const dx = event.clientX - originRef.current.x;\n const dy = event.clientY - originRef.current.y;\n if (Math.hypot(dx, dy) > moveTolerancePx) {\n cancel(event);\n }\n },\n [cancel, moveTolerancePx],\n );\n\n const onPointerUp = useCallback(\n (event: ReactPointerEvent) => {\n if (!pressingRef.current) {\n return;\n }\n const triggered = triggeredRef.current;\n pressingRef.current = false;\n stopTimer();\n if (triggered) {\n onFinishRef.current?.(event);\n } else {\n onCancelRef.current?.(event);\n }\n },\n [stopTimer],\n );\n\n // After a successful long press the browser fires a synthetic `click` event on pointer up.\n // This handler suppresses it so navigation and button actions aren't triggered unexpectedly.\n const onClick = useCallback((event: ReactMouseEvent) => {\n if (triggeredRef.current) {\n event.preventDefault();\n triggeredRef.current = false;\n }\n }, []);\n\n return {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerLeave: cancel,\n onPointerCancel: cancel,\n onClick,\n };\n}\n"]}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useRef, useEffect, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
function useLongPress(callback, options = {}) {
|
|
6
|
+
const {
|
|
7
|
+
thresholdMs = 500,
|
|
8
|
+
moveTolerancePx = 10,
|
|
9
|
+
onStart,
|
|
10
|
+
onFinish,
|
|
11
|
+
onCancel
|
|
12
|
+
} = options;
|
|
13
|
+
const callbackRef = useRef(callback);
|
|
14
|
+
const onStartRef = useRef(onStart);
|
|
15
|
+
const onFinishRef = useRef(onFinish);
|
|
16
|
+
const onCancelRef = useRef(onCancel);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
callbackRef.current = callback;
|
|
19
|
+
onStartRef.current = onStart;
|
|
20
|
+
onFinishRef.current = onFinish;
|
|
21
|
+
onCancelRef.current = onCancel;
|
|
22
|
+
}, [callback, onCancel, onFinish, onStart]);
|
|
23
|
+
const timeoutRef = useRef(void 0);
|
|
24
|
+
const triggeredRef = useRef(false);
|
|
25
|
+
const pressingRef = useRef(false);
|
|
26
|
+
const originRef = useRef({ x: 0, y: 0 });
|
|
27
|
+
const stopTimer = useCallback(() => {
|
|
28
|
+
if (timeoutRef.current !== void 0) {
|
|
29
|
+
window.clearTimeout(timeoutRef.current);
|
|
30
|
+
timeoutRef.current = void 0;
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
useEffect(() => stopTimer, [stopTimer]);
|
|
34
|
+
const cancel = useCallback(
|
|
35
|
+
(event) => {
|
|
36
|
+
if (!pressingRef.current) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
pressingRef.current = false;
|
|
40
|
+
stopTimer();
|
|
41
|
+
if (!triggeredRef.current) {
|
|
42
|
+
onCancelRef.current?.(event);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
[stopTimer]
|
|
46
|
+
);
|
|
47
|
+
const onPointerDown = useCallback(
|
|
48
|
+
(event) => {
|
|
49
|
+
if (event.button > 0) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
pressingRef.current = true;
|
|
53
|
+
triggeredRef.current = false;
|
|
54
|
+
originRef.current = { x: event.clientX, y: event.clientY };
|
|
55
|
+
onStartRef.current?.(event);
|
|
56
|
+
stopTimer();
|
|
57
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
58
|
+
timeoutRef.current = void 0;
|
|
59
|
+
if (pressingRef.current) {
|
|
60
|
+
triggeredRef.current = true;
|
|
61
|
+
callbackRef.current(event);
|
|
62
|
+
}
|
|
63
|
+
}, thresholdMs);
|
|
64
|
+
},
|
|
65
|
+
[stopTimer, thresholdMs]
|
|
66
|
+
);
|
|
67
|
+
const onPointerMove = useCallback(
|
|
68
|
+
(event) => {
|
|
69
|
+
if (!pressingRef.current || triggeredRef.current) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const dx = event.clientX - originRef.current.x;
|
|
73
|
+
const dy = event.clientY - originRef.current.y;
|
|
74
|
+
if (Math.hypot(dx, dy) > moveTolerancePx) {
|
|
75
|
+
cancel(event);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
[cancel, moveTolerancePx]
|
|
79
|
+
);
|
|
80
|
+
const onPointerUp = useCallback(
|
|
81
|
+
(event) => {
|
|
82
|
+
if (!pressingRef.current) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const triggered = triggeredRef.current;
|
|
86
|
+
pressingRef.current = false;
|
|
87
|
+
stopTimer();
|
|
88
|
+
if (triggered) {
|
|
89
|
+
onFinishRef.current?.(event);
|
|
90
|
+
} else {
|
|
91
|
+
onCancelRef.current?.(event);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
[stopTimer]
|
|
95
|
+
);
|
|
96
|
+
const onClick = useCallback((event) => {
|
|
97
|
+
if (triggeredRef.current) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
triggeredRef.current = false;
|
|
100
|
+
}
|
|
101
|
+
}, []);
|
|
102
|
+
return {
|
|
103
|
+
onPointerDown,
|
|
104
|
+
onPointerMove,
|
|
105
|
+
onPointerUp,
|
|
106
|
+
onPointerLeave: cancel,
|
|
107
|
+
onPointerCancel: cancel,
|
|
108
|
+
onClick
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export { useLongPress };
|
|
113
|
+
//# sourceMappingURL=useLongPress.mjs.map
|
|
114
|
+
//# sourceMappingURL=useLongPress.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useLongPress/useLongPress.ts"],"names":[],"mappings":"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","file":"useLongPress.mjs","sourcesContent":["\"use client\";\n\nimport type {\n MouseEvent as ReactMouseEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport { useCallback, useEffect, useRef } from \"react\";\n\nexport type UseLongPressOptions = {\n /** Hold duration in milliseconds before the press counts as \"long\" (default `500`). */\n thresholdMs?: number;\n /** Pointer travel in pixels that cancels the press (default `10`). */\n moveTolerancePx?: number;\n /** Called when the pointer goes down (press attempt starts). */\n onStart?: (event: ReactPointerEvent) => void;\n /** Called on release after a long press fired. */\n onFinish?: (event: ReactPointerEvent) => void;\n /** Called when the press is released or cancelled before the threshold. */\n onCancel?: (event: ReactPointerEvent) => void;\n};\n\nexport type UseLongPressHandlers = {\n onPointerDown: (event: ReactPointerEvent) => void;\n onPointerMove: (event: ReactPointerEvent) => void;\n onPointerUp: (event: ReactPointerEvent) => void;\n onPointerLeave: (event: ReactPointerEvent) => void;\n /** Handles browser-level pointer cancellation (e.g. system interruption, scroll takeover). */\n onPointerCancel: (event: ReactPointerEvent) => void;\n /**\n * Suppresses the synthetic `click` event that fires after a successful long press.\n * Spread alongside the other handlers to prevent unintended navigation or button actions.\n */\n onClick: (event: ReactMouseEvent) => void;\n};\n\n/**\n * Long-press gesture detection built on pointer events, so it works for mouse, touch, and pen.\n *\n * Spread the returned handlers onto the target element. After the pointer is held\n * `thresholdMs` without travelling more than `moveTolerancePx`, `callback` fires once;\n * releasing afterwards calls `onFinish`, while early release / movement / leaving the\n * element calls `onCancel`.\n *\n * Only the primary button (button 0 / left click / first touch contact) starts a long press;\n * right and middle mouse buttons are ignored.\n *\n * Pair with `touch-action` / `select-none` CSS on touch targets to suppress native\n * scrolling or text selection during the hold where needed.\n *\n * @param callback - Invoked once when the press crosses the threshold.\n * @param options - {@link UseLongPressOptions}\n * @returns Spreadable pointer handlers ({@link UseLongPressHandlers}).\n */\nexport function useLongPress(\n callback: (event: ReactPointerEvent) => void,\n options: UseLongPressOptions = {},\n): UseLongPressHandlers {\n const {\n thresholdMs = 500,\n moveTolerancePx = 10,\n onStart,\n onFinish,\n onCancel,\n } = options;\n\n const callbackRef = useRef(callback);\n const onStartRef = useRef(onStart);\n const onFinishRef = useRef(onFinish);\n const onCancelRef = useRef(onCancel);\n\n useEffect(() => {\n callbackRef.current = callback;\n onStartRef.current = onStart;\n onFinishRef.current = onFinish;\n onCancelRef.current = onCancel;\n }, [callback, onCancel, onFinish, onStart]);\n\n const timeoutRef = useRef<number | undefined>(undefined);\n const triggeredRef = useRef(false);\n const pressingRef = useRef(false);\n const originRef = useRef({ x: 0, y: 0 });\n\n const stopTimer = useCallback(() => {\n if (timeoutRef.current !== undefined) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n }, []);\n\n useEffect(() => stopTimer, [stopTimer]);\n\n const cancel = useCallback(\n (event: ReactPointerEvent) => {\n if (!pressingRef.current) {\n return;\n }\n pressingRef.current = false;\n stopTimer();\n if (!triggeredRef.current) {\n onCancelRef.current?.(event);\n }\n },\n [stopTimer],\n );\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent) => {\n // Only respond to the primary button (left click / first touch contact).\n // event.button > 0 catches right (2) and middle (1) mouse buttons.\n if (event.button > 0) {\n return;\n }\n pressingRef.current = true;\n triggeredRef.current = false;\n originRef.current = { x: event.clientX, y: event.clientY };\n onStartRef.current?.(event);\n stopTimer();\n timeoutRef.current = window.setTimeout(() => {\n timeoutRef.current = undefined;\n if (pressingRef.current) {\n triggeredRef.current = true;\n callbackRef.current(event);\n }\n }, thresholdMs);\n },\n [stopTimer, thresholdMs],\n );\n\n const onPointerMove = useCallback(\n (event: ReactPointerEvent) => {\n if (!pressingRef.current || triggeredRef.current) {\n return;\n }\n const dx = event.clientX - originRef.current.x;\n const dy = event.clientY - originRef.current.y;\n if (Math.hypot(dx, dy) > moveTolerancePx) {\n cancel(event);\n }\n },\n [cancel, moveTolerancePx],\n );\n\n const onPointerUp = useCallback(\n (event: ReactPointerEvent) => {\n if (!pressingRef.current) {\n return;\n }\n const triggered = triggeredRef.current;\n pressingRef.current = false;\n stopTimer();\n if (triggered) {\n onFinishRef.current?.(event);\n } else {\n onCancelRef.current?.(event);\n }\n },\n [stopTimer],\n );\n\n // After a successful long press the browser fires a synthetic `click` event on pointer up.\n // This handler suppresses it so navigation and button actions aren't triggered unexpectedly.\n const onClick = useCallback((event: ReactMouseEvent) => {\n if (triggeredRef.current) {\n event.preventDefault();\n triggeredRef.current = false;\n }\n }, []);\n\n return {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerLeave: cancel,\n onPointerCancel: cancel,\n onClick,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/usePrevious/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the value passed in on the previous render (`undefined` on first render).
|
|
3
|
+
*
|
|
4
|
+
* The ref is updated in an effect after each committed render, so during a render
|
|
5
|
+
* you always see the value from the previous one — handy for diffing props/state,
|
|
6
|
+
* animation direction, or "changed since last render" checks.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam T - Tracked value type.
|
|
9
|
+
* @param value - The current value to track.
|
|
10
|
+
* @returns The value from the previous render, or `undefined` before the first update.
|
|
11
|
+
*/
|
|
12
|
+
export declare function usePrevious<T>(value: T): T | undefined;
|
|
13
|
+
//# sourceMappingURL=usePrevious.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrevious.d.ts","sourceRoot":"","sources":["../../../src/hooks/usePrevious/usePrevious.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAQtD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
require('../chunk-PZ5AY32C.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
function usePrevious(value) {
|
|
8
|
+
const previousRef = react.useRef(void 0);
|
|
9
|
+
react.useEffect(() => {
|
|
10
|
+
previousRef.current = value;
|
|
11
|
+
}, [value]);
|
|
12
|
+
return previousRef.current;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.usePrevious = usePrevious;
|
|
16
|
+
//# sourceMappingURL=usePrevious.js.map
|
|
17
|
+
//# sourceMappingURL=usePrevious.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/usePrevious/usePrevious.ts"],"names":["useRef","useEffect"],"mappings":";;;;;AAeO,SAAS,YAAe,KAAA,EAAyB;AACtD,EAAA,MAAM,WAAA,GAAcA,aAAsB,MAAS,CAAA;AAEnD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AAAA,EACxB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB","file":"usePrevious.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Returns the value passed in on the previous render (`undefined` on first render).\n *\n * The ref is updated in an effect after each committed render, so during a render\n * you always see the value from the previous one — handy for diffing props/state,\n * animation direction, or \"changed since last render\" checks.\n *\n * @typeParam T - Tracked value type.\n * @param value - The current value to track.\n * @returns The value from the previous render, or `undefined` before the first update.\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const previousRef = useRef<T | undefined>(undefined);\n\n useEffect(() => {\n previousRef.current = value;\n }, [value]);\n\n return previousRef.current;\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import '../chunk-J5LGTIGS.mjs';
|
|
3
|
+
import { useRef, useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
function usePrevious(value) {
|
|
6
|
+
const previousRef = useRef(void 0);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
previousRef.current = value;
|
|
9
|
+
}, [value]);
|
|
10
|
+
return previousRef.current;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { usePrevious };
|
|
14
|
+
//# sourceMappingURL=usePrevious.mjs.map
|
|
15
|
+
//# sourceMappingURL=usePrevious.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/usePrevious/usePrevious.ts"],"names":[],"mappings":";;;AAeO,SAAS,YAAe,KAAA,EAAyB;AACtD,EAAA,MAAM,WAAA,GAAc,OAAsB,MAAS,CAAA;AAEnD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AAAA,EACxB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,WAAA,CAAY,OAAA;AACrB","file":"usePrevious.mjs","sourcesContent":["\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Returns the value passed in on the previous render (`undefined` on first render).\n *\n * The ref is updated in an effect after each committed render, so during a render\n * you always see the value from the previous one — handy for diffing props/state,\n * animation direction, or \"changed since last render\" checks.\n *\n * @typeParam T - Tracked value type.\n * @param value - The current value to track.\n * @returns The value from the previous render, or `undefined` before the first update.\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const previousRef = useRef<T | undefined>(undefined);\n\n useEffect(() => {\n previousRef.current = value;\n }, [value]);\n\n return previousRef.current;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useScrollPosition/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { RefCallback, RefObject } from "react";
|
|
2
|
+
export type ScrollPosition = {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
};
|
|
6
|
+
export type UseScrollPositionParams<T extends HTMLElement = HTMLElement> = {
|
|
7
|
+
/**
|
|
8
|
+
* Scroll container to observe via a pre-populated RefObject.
|
|
9
|
+
* For elements that mount asynchronously, use the returned `setRef` callback ref instead.
|
|
10
|
+
*/
|
|
11
|
+
target?: RefObject<T | null>;
|
|
12
|
+
};
|
|
13
|
+
export type UseScrollPositionResult<T extends HTMLElement = HTMLElement> = ScrollPosition & {
|
|
14
|
+
/**
|
|
15
|
+
* Callback ref to attach to a scroll container — works correctly with elements
|
|
16
|
+
* that are null on initial render (lazy / conditional mounts). Pass this as `ref`
|
|
17
|
+
* on the scrollable element when you cannot guarantee the ref is populated at mount.
|
|
18
|
+
*/
|
|
19
|
+
setRef: RefCallback<T>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Tracks the scroll offset of the window (default) or a scrollable element.
|
|
23
|
+
*
|
|
24
|
+
* - Window mode reads `scrollX` / `scrollY`; element mode reads `scrollLeft` / `scrollTop`.
|
|
25
|
+
* - Subscribes with a passive `scroll` listener and reads the initial position on mount.
|
|
26
|
+
* - Pass a pre-populated `target` RefObject **or** use the returned `setRef` callback ref on
|
|
27
|
+
* the scrollable element. Prefer `setRef` for elements that may be null on the first render
|
|
28
|
+
* (conditional mounts, portals) — it stores the element in state so the effect re-attaches
|
|
29
|
+
* correctly when the element becomes available.
|
|
30
|
+
* - For high-frequency consumers, derive throttled values downstream (e.g. with
|
|
31
|
+
* `useThrottledCallback`) rather than throttling the source of truth.
|
|
32
|
+
*
|
|
33
|
+
* @param params - {@link UseScrollPositionParams}
|
|
34
|
+
* @returns Latest `{ x, y }` scroll offset in pixels plus a `setRef` callback ref.
|
|
35
|
+
*/
|
|
36
|
+
export declare function useScrollPosition<T extends HTMLElement = HTMLElement>(params?: UseScrollPositionParams<T>): UseScrollPositionResult<T>;
|
|
37
|
+
//# sourceMappingURL=useScrollPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollPosition.d.ts","sourceRoot":"","sources":["../../../src/hooks/useScrollPosition/useScrollPosition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI;IACzE;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IACrE,cAAc,GAAG;IACf;;;;OAIG;IACH,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC;AAEJ;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnE,MAAM,GAAE,uBAAuB,CAAC,CAAC,CAAM,GACtC,uBAAuB,CAAC,CAAC,CAAC,CA0C5B"}
|