@particle-academy/react-fancy 5.51.1 → 5.52.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 +90 -0
- package/README.md +43 -0
- package/dist/accordion-panel.cjs +7 -7
- package/dist/accordion-panel.js +1 -1
- package/dist/accordion.cjs +3 -3
- package/dist/accordion.js +1 -1
- package/dist/activity-light.cjs +2 -2
- package/dist/activity-light.js +1 -1
- package/dist/audio-viewer.cjs +2 -2
- package/dist/audio-viewer.js +1 -1
- package/dist/autocomplete.cjs +2 -2
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.js +1 -1
- package/dist/brand.cjs +3 -3
- package/dist/brand.js +1 -1
- package/dist/breadcrumbs.cjs +2 -2
- package/dist/breadcrumbs.js +1 -1
- package/dist/button.cjs +3 -3
- package/dist/button.js +1 -1
- package/dist/calendar.cjs +2 -2
- package/dist/calendar.js +1 -1
- package/dist/card.cjs +9 -9
- package/dist/card.js +3 -3
- package/dist/carousel.cjs +7 -7
- package/dist/carousel.js +1 -1
- package/dist/chart.cjs +2 -2
- package/dist/chart.js +1 -1
- package/dist/chat-drawer.cjs +2 -2
- package/dist/chat-drawer.js +1 -1
- package/dist/checkbox-group.cjs +5 -5
- package/dist/checkbox-group.js +4 -4
- package/dist/checkbox.cjs +3 -3
- package/dist/checkbox.js +2 -2
- package/dist/{chunk-KODD54GT.js → chunk-26JZ47BJ.js} +5 -5
- package/dist/{chunk-KODD54GT.js.map → chunk-26JZ47BJ.js.map} +1 -1
- package/dist/{chunk-VKXNCYLE.cjs → chunk-2GFM5WD4.cjs} +5 -5
- package/dist/chunk-2GFM5WD4.cjs.map +1 -0
- package/dist/{chunk-MGE5KOVA.js → chunk-2MUGEPRD.js} +10 -10
- package/dist/{chunk-MGE5KOVA.js.map → chunk-2MUGEPRD.js.map} +1 -1
- package/dist/{chunk-UIJR26YW.js → chunk-2OMA3O63.js} +4 -4
- package/dist/{chunk-UIJR26YW.js.map → chunk-2OMA3O63.js.map} +1 -1
- package/dist/{chunk-OC75GWX5.js → chunk-2UTN3EFK.js} +6 -6
- package/dist/{chunk-OC75GWX5.js.map → chunk-2UTN3EFK.js.map} +1 -1
- package/dist/{chunk-CF2U25LM.js → chunk-2XO6EYZ7.js} +9 -9
- package/dist/chunk-2XO6EYZ7.js.map +1 -0
- package/dist/{chunk-QSFTWIUH.cjs → chunk-36HG5JK6.cjs} +6 -6
- package/dist/chunk-36HG5JK6.cjs.map +1 -0
- package/dist/{chunk-TDDWWAM5.js → chunk-3AYRLFNO.js} +6 -6
- package/dist/chunk-3AYRLFNO.js.map +1 -0
- package/dist/{chunk-7JDVCQXD.js → chunk-3EWO5EBI.js} +14 -14
- package/dist/chunk-3EWO5EBI.js.map +1 -0
- package/dist/{chunk-Z3NSPDTW.cjs → chunk-3YA6FDVN.cjs} +8 -8
- package/dist/chunk-3YA6FDVN.cjs.map +1 -0
- package/dist/{chunk-SYVOGYJG.cjs → chunk-43ZRUYJC.cjs} +11 -11
- package/dist/{chunk-SYVOGYJG.cjs.map → chunk-43ZRUYJC.cjs.map} +1 -1
- package/dist/{chunk-NDUEPDNS.js → chunk-44VYWOCG.js} +4 -4
- package/dist/{chunk-NDUEPDNS.js.map → chunk-44VYWOCG.js.map} +1 -1
- package/dist/{chunk-LYHQ4VBR.js → chunk-45FDQ3R5.js} +3 -3
- package/dist/{chunk-LYHQ4VBR.js.map → chunk-45FDQ3R5.js.map} +1 -1
- package/dist/{chunk-LBU3T2LF.js → chunk-4FH2JHUY.js} +7 -7
- package/dist/{chunk-LBU3T2LF.js.map → chunk-4FH2JHUY.js.map} +1 -1
- package/dist/{chunk-5F6V5HHT.cjs → chunk-4JT2QANA.cjs} +11 -11
- package/dist/chunk-4JT2QANA.cjs.map +1 -0
- package/dist/{chunk-N6OZZAOT.js → chunk-4TVAHZ35.js} +9 -9
- package/dist/chunk-4TVAHZ35.js.map +1 -0
- package/dist/{chunk-XLFGWNW4.cjs → chunk-4XMBXG4K.cjs} +4 -4
- package/dist/{chunk-XLFGWNW4.cjs.map → chunk-4XMBXG4K.cjs.map} +1 -1
- package/dist/{chunk-N4VHOTMK.cjs → chunk-546K5LRX.cjs} +3 -3
- package/dist/{chunk-N4VHOTMK.cjs.map → chunk-546K5LRX.cjs.map} +1 -1
- package/dist/{chunk-P7Q2YIIS.js → chunk-5DG4CAWS.js} +8 -8
- package/dist/chunk-5DG4CAWS.js.map +1 -0
- package/dist/{chunk-GU5BYZTR.cjs → chunk-5H6IUCOD.cjs} +8 -8
- package/dist/chunk-5H6IUCOD.cjs.map +1 -0
- package/dist/{chunk-ZY4CVNNZ.js → chunk-5JA4ENMF.js} +6 -6
- package/dist/chunk-5JA4ENMF.js.map +1 -0
- package/dist/{chunk-R3UG6PVX.cjs → chunk-5JK2VDWY.cjs} +7 -7
- package/dist/{chunk-R3UG6PVX.cjs.map → chunk-5JK2VDWY.cjs.map} +1 -1
- package/dist/{chunk-5MU6X3KO.js → chunk-5WQ6FPSP.js} +4 -4
- package/dist/{chunk-5MU6X3KO.js.map → chunk-5WQ6FPSP.js.map} +1 -1
- package/dist/{chunk-TNYWQ6EQ.js → chunk-6HJF55U7.js} +8 -8
- package/dist/chunk-6HJF55U7.js.map +1 -0
- package/dist/{chunk-F7YCIII4.cjs → chunk-6MXFZ3B5.cjs} +3 -3
- package/dist/{chunk-F7YCIII4.cjs.map → chunk-6MXFZ3B5.cjs.map} +1 -1
- package/dist/{chunk-7Y2AENZD.cjs → chunk-7DDUMW4R.cjs} +4 -4
- package/dist/{chunk-7Y2AENZD.cjs.map → chunk-7DDUMW4R.cjs.map} +1 -1
- package/dist/{chunk-2KZINS6D.cjs → chunk-7QENPLOP.cjs} +9 -9
- package/dist/{chunk-2KZINS6D.cjs.map → chunk-7QENPLOP.cjs.map} +1 -1
- package/dist/{chunk-25UPDBI6.cjs → chunk-A5DN2XNM.cjs} +9 -9
- package/dist/chunk-A5DN2XNM.cjs.map +1 -0
- package/dist/{chunk-RA2VOQ46.js → chunk-A5RTALZJ.js} +6 -6
- package/dist/chunk-A5RTALZJ.js.map +1 -0
- package/dist/{chunk-WN45ZE37.cjs → chunk-AVEFCM6T.cjs} +3 -3
- package/dist/{chunk-WN45ZE37.cjs.map → chunk-AVEFCM6T.cjs.map} +1 -1
- package/dist/{chunk-TGNQ5Y6F.cjs → chunk-AYBKPAI2.cjs} +6 -6
- package/dist/{chunk-TGNQ5Y6F.cjs.map → chunk-AYBKPAI2.cjs.map} +1 -1
- package/dist/{chunk-OTCLBINT.js → chunk-AZQXPI5S.js} +7 -7
- package/dist/{chunk-OTCLBINT.js.map → chunk-AZQXPI5S.js.map} +1 -1
- package/dist/{chunk-RWOH2ADL.cjs → chunk-B4YV2V7G.cjs} +4 -4
- package/dist/{chunk-RWOH2ADL.cjs.map → chunk-B4YV2V7G.cjs.map} +1 -1
- package/dist/{chunk-AR3JOPGT.cjs → chunk-BDUL42VO.cjs} +31 -31
- package/dist/{chunk-AR3JOPGT.cjs.map → chunk-BDUL42VO.cjs.map} +1 -1
- package/dist/{chunk-5CXJ5Z4C.cjs → chunk-BJL3VDRK.cjs} +4 -4
- package/dist/{chunk-5CXJ5Z4C.cjs.map → chunk-BJL3VDRK.cjs.map} +1 -1
- package/dist/{chunk-WKAEAGMT.cjs → chunk-BK6XQQYG.cjs} +4 -4
- package/dist/{chunk-WKAEAGMT.cjs.map → chunk-BK6XQQYG.cjs.map} +1 -1
- package/dist/{chunk-UKUNWGL5.js → chunk-BLOX7MRO.js} +6 -6
- package/dist/{chunk-UKUNWGL5.js.map → chunk-BLOX7MRO.js.map} +1 -1
- package/dist/{chunk-Q7O5TLVU.js → chunk-BX7EDTL4.js} +3 -3
- package/dist/{chunk-Q7O5TLVU.js.map → chunk-BX7EDTL4.js.map} +1 -1
- package/dist/{chunk-SAPOYAGN.cjs → chunk-BYUJJXGY.cjs} +9 -9
- package/dist/{chunk-SAPOYAGN.cjs.map → chunk-BYUJJXGY.cjs.map} +1 -1
- package/dist/{chunk-FWA4PCW7.cjs → chunk-CAMQ5B3V.cjs} +5 -5
- package/dist/{chunk-FWA4PCW7.cjs.map → chunk-CAMQ5B3V.cjs.map} +1 -1
- package/dist/{chunk-I6L7OP7G.cjs → chunk-CG3RCQVL.cjs} +5 -5
- package/dist/chunk-CG3RCQVL.cjs.map +1 -0
- package/dist/{chunk-3Q4NSAEA.cjs → chunk-CQ54H7DZ.cjs} +8 -8
- package/dist/{chunk-3Q4NSAEA.cjs.map → chunk-CQ54H7DZ.cjs.map} +1 -1
- package/dist/{chunk-YOTCZUNW.js → chunk-D4QOV56U.js} +7 -7
- package/dist/{chunk-YOTCZUNW.js.map → chunk-D4QOV56U.js.map} +1 -1
- package/dist/{chunk-BZDXX6E3.cjs → chunk-DJB3N4G3.cjs} +11 -11
- package/dist/{chunk-BZDXX6E3.cjs.map → chunk-DJB3N4G3.cjs.map} +1 -1
- package/dist/{chunk-BMTTSBHF.js → chunk-DJYG7DXS.js} +4 -4
- package/dist/{chunk-BMTTSBHF.js.map → chunk-DJYG7DXS.js.map} +1 -1
- package/dist/{chunk-WBVWV2V7.cjs → chunk-DN244T6G.cjs} +6 -6
- package/dist/chunk-DN244T6G.cjs.map +1 -0
- package/dist/{chunk-NCXH5O4I.cjs → chunk-E4TRDGSU.cjs} +10 -10
- package/dist/{chunk-NCXH5O4I.cjs.map → chunk-E4TRDGSU.cjs.map} +1 -1
- package/dist/{chunk-FVG3YXXM.cjs → chunk-EEMNTO7L.cjs} +8 -8
- package/dist/{chunk-FVG3YXXM.cjs.map → chunk-EEMNTO7L.cjs.map} +1 -1
- package/dist/{chunk-IAUJKZAQ.js → chunk-ELBCK3V7.js} +13 -13
- package/dist/{chunk-IAUJKZAQ.js.map → chunk-ELBCK3V7.js.map} +1 -1
- package/dist/{chunk-Y4UPKJN5.js → chunk-EQ7G5F6K.js} +4 -4
- package/dist/{chunk-Y4UPKJN5.js.map → chunk-EQ7G5F6K.js.map} +1 -1
- package/dist/{chunk-U7PFHQBN.cjs → chunk-ETNQ4AEQ.cjs} +6 -6
- package/dist/{chunk-U7PFHQBN.cjs.map → chunk-ETNQ4AEQ.cjs.map} +1 -1
- package/dist/{chunk-23PAOCQQ.cjs → chunk-EXQ33MJR.cjs} +5 -5
- package/dist/{chunk-23PAOCQQ.cjs.map → chunk-EXQ33MJR.cjs.map} +1 -1
- package/dist/{chunk-HKRB2Z6R.cjs → chunk-FGI2EC32.cjs} +8 -8
- package/dist/chunk-FGI2EC32.cjs.map +1 -0
- package/dist/{chunk-AASQ6L6X.cjs → chunk-FNIHCNVD.cjs} +3 -3
- package/dist/{chunk-AASQ6L6X.cjs.map → chunk-FNIHCNVD.cjs.map} +1 -1
- package/dist/{chunk-PCTZNK2Z.js → chunk-FVDQNQKA.js} +9 -9
- package/dist/chunk-FVDQNQKA.js.map +1 -0
- package/dist/{chunk-O6GTY53I.cjs → chunk-FVQO75KY.cjs} +4 -4
- package/dist/{chunk-O6GTY53I.cjs.map → chunk-FVQO75KY.cjs.map} +1 -1
- package/dist/{chunk-FCSR2WVS.js → chunk-FWAVMWMP.js} +4 -4
- package/dist/{chunk-FCSR2WVS.js.map → chunk-FWAVMWMP.js.map} +1 -1
- package/dist/{chunk-FSRPZYZZ.js → chunk-G35XN5WV.js} +4 -4
- package/dist/chunk-G35XN5WV.js.map +1 -0
- package/dist/{chunk-HE3JJXIL.cjs → chunk-G4M3MCJO.cjs} +5 -5
- package/dist/{chunk-HE3JJXIL.cjs.map → chunk-G4M3MCJO.cjs.map} +1 -1
- package/dist/{chunk-T45XK5GN.cjs → chunk-G5DMYAWL.cjs} +19 -19
- package/dist/chunk-G5DMYAWL.cjs.map +1 -0
- package/dist/{chunk-7CN7IHES.js → chunk-GF23UBOT.js} +3 -3
- package/dist/{chunk-7CN7IHES.js.map → chunk-GF23UBOT.js.map} +1 -1
- package/dist/{chunk-BVRPDMB7.cjs → chunk-GKLETY7D.cjs} +4 -4
- package/dist/{chunk-BVRPDMB7.cjs.map → chunk-GKLETY7D.cjs.map} +1 -1
- package/dist/{chunk-KQQA7JBC.js → chunk-GOE36IXL.js} +5 -5
- package/dist/{chunk-KQQA7JBC.js.map → chunk-GOE36IXL.js.map} +1 -1
- package/dist/{chunk-XZUGREDI.js → chunk-GVMWJ4NI.js} +6 -6
- package/dist/{chunk-XZUGREDI.js.map → chunk-GVMWJ4NI.js.map} +1 -1
- package/dist/{chunk-FPZYPD3N.cjs → chunk-H7ELUIF6.cjs} +12 -12
- package/dist/{chunk-FPZYPD3N.cjs.map → chunk-H7ELUIF6.cjs.map} +1 -1
- package/dist/{chunk-VB3QJ6QE.js → chunk-HRH5BIYG.js} +4 -4
- package/dist/{chunk-VB3QJ6QE.js.map → chunk-HRH5BIYG.js.map} +1 -1
- package/dist/{chunk-NTMHP7FS.js → chunk-HVND2IIB.js} +6 -6
- package/dist/{chunk-NTMHP7FS.js.map → chunk-HVND2IIB.js.map} +1 -1
- package/dist/{chunk-ASS6EWNI.js → chunk-ICMLLZKZ.js} +8 -8
- package/dist/{chunk-ASS6EWNI.js.map → chunk-ICMLLZKZ.js.map} +1 -1
- package/dist/{chunk-FNEPZ33A.js → chunk-IU5WQUUC.js} +8 -8
- package/dist/{chunk-FNEPZ33A.js.map → chunk-IU5WQUUC.js.map} +1 -1
- package/dist/{chunk-ATANWEXA.cjs → chunk-JBHQQGG5.cjs} +50 -50
- package/dist/{chunk-ATANWEXA.cjs.map → chunk-JBHQQGG5.cjs.map} +1 -1
- package/dist/{chunk-7ZDJPHLJ.cjs → chunk-JRRYYW3Y.cjs} +24 -24
- package/dist/{chunk-7ZDJPHLJ.cjs.map → chunk-JRRYYW3Y.cjs.map} +1 -1
- package/dist/{chunk-ZLWCZV7R.js → chunk-JSD6IEBW.js} +7 -7
- package/dist/chunk-JSD6IEBW.js.map +1 -0
- package/dist/{chunk-QAFAPHAF.cjs → chunk-JUQZMNPR.cjs} +4 -4
- package/dist/chunk-JUQZMNPR.cjs.map +1 -0
- package/dist/{chunk-PFEFKLUV.cjs → chunk-K5MQZTDW.cjs} +6 -6
- package/dist/{chunk-PFEFKLUV.cjs.map → chunk-K5MQZTDW.cjs.map} +1 -1
- package/dist/{chunk-32AJIHBZ.js → chunk-K6Q542VL.js} +5 -5
- package/dist/chunk-K6Q542VL.js.map +1 -0
- package/dist/{chunk-OFHO5SXA.js → chunk-KC3PYCBO.js} +4 -4
- package/dist/{chunk-OFHO5SXA.js.map → chunk-KC3PYCBO.js.map} +1 -1
- package/dist/{chunk-QW66UHWO.cjs → chunk-KE4XURZD.cjs} +4 -4
- package/dist/{chunk-QW66UHWO.cjs.map → chunk-KE4XURZD.cjs.map} +1 -1
- package/dist/{chunk-JFOORUUD.cjs → chunk-KNKOSMOQ.cjs} +6 -6
- package/dist/chunk-KNKOSMOQ.cjs.map +1 -0
- package/dist/{chunk-LLA33GKC.cjs → chunk-KSU6RYWU.cjs} +4 -4
- package/dist/chunk-KSU6RYWU.cjs.map +1 -0
- package/dist/{chunk-PWEZCMIY.js → chunk-KXYMMNNV.js} +7 -7
- package/dist/chunk-KXYMMNNV.js.map +1 -0
- package/dist/{chunk-SUCBR6L5.cjs → chunk-L4JIBKFW.cjs} +3 -3
- package/dist/{chunk-SUCBR6L5.cjs.map → chunk-L4JIBKFW.cjs.map} +1 -1
- package/dist/{chunk-VGBZWDMM.cjs → chunk-LIVC3WUU.cjs} +4 -4
- package/dist/{chunk-VGBZWDMM.cjs.map → chunk-LIVC3WUU.cjs.map} +1 -1
- package/dist/{chunk-YF2EHBTV.js → chunk-LKN7FYW6.js} +3 -3
- package/dist/{chunk-YF2EHBTV.js.map → chunk-LKN7FYW6.js.map} +1 -1
- package/dist/{chunk-RPVCMW64.cjs → chunk-LX23ZJDM.cjs} +6 -6
- package/dist/chunk-LX23ZJDM.cjs.map +1 -0
- package/dist/{chunk-RU6ZTA4M.cjs → chunk-M5SEYDSS.cjs} +6 -6
- package/dist/{chunk-RU6ZTA4M.cjs.map → chunk-M5SEYDSS.cjs.map} +1 -1
- package/dist/{chunk-FYKOLKQZ.js → chunk-M6XBF2ZS.js} +4 -4
- package/dist/chunk-M6XBF2ZS.js.map +1 -0
- package/dist/{chunk-V6VFSX6V.cjs → chunk-MAZEX4EZ.cjs} +13 -13
- package/dist/{chunk-V6VFSX6V.cjs.map → chunk-MAZEX4EZ.cjs.map} +1 -1
- package/dist/{chunk-7EZBMGEE.cjs → chunk-MRZXTL46.cjs} +7 -7
- package/dist/chunk-MRZXTL46.cjs.map +1 -0
- package/dist/{chunk-M5ACSJJ4.js → chunk-MV6BK4WG.js} +13 -14
- package/dist/chunk-MV6BK4WG.js.map +1 -0
- package/dist/{chunk-GAB2QXHH.js → chunk-N2JESOCJ.js} +7 -7
- package/dist/{chunk-GAB2QXHH.js.map → chunk-N2JESOCJ.js.map} +1 -1
- package/dist/{chunk-K6EJLBBQ.js → chunk-N5XMBHX7.js} +3 -3
- package/dist/{chunk-K6EJLBBQ.js.map → chunk-N5XMBHX7.js.map} +1 -1
- package/dist/{chunk-MH4QS7OE.cjs → chunk-N7ABDCQ6.cjs} +16 -16
- package/dist/{chunk-MH4QS7OE.cjs.map → chunk-N7ABDCQ6.cjs.map} +1 -1
- package/dist/{chunk-G73TVXDQ.js → chunk-NVXTHTJI.js} +9 -9
- package/dist/{chunk-G73TVXDQ.js.map → chunk-NVXTHTJI.js.map} +1 -1
- package/dist/{chunk-YLGTDBB2.cjs → chunk-O3F6DYWR.cjs} +3 -3
- package/dist/{chunk-YLGTDBB2.cjs.map → chunk-O3F6DYWR.cjs.map} +1 -1
- package/dist/{chunk-IECPLOSZ.js → chunk-OFNA5HS5.js} +12 -12
- package/dist/{chunk-IECPLOSZ.js.map → chunk-OFNA5HS5.js.map} +1 -1
- package/dist/{chunk-4HRD4S25.js → chunk-OTM7RL2L.js} +5 -5
- package/dist/{chunk-4HRD4S25.js.map → chunk-OTM7RL2L.js.map} +1 -1
- package/dist/{chunk-TJJ63UJV.js → chunk-OTSVOPKP.js} +3 -3
- package/dist/{chunk-TJJ63UJV.js.map → chunk-OTSVOPKP.js.map} +1 -1
- package/dist/{chunk-PLNDZF2A.cjs → chunk-OWT5B3C2.cjs} +10 -10
- package/dist/chunk-OWT5B3C2.cjs.map +1 -0
- package/dist/{chunk-ZVXOL5H3.js → chunk-OYDJVGFS.js} +3 -3
- package/dist/{chunk-ZVXOL5H3.js.map → chunk-OYDJVGFS.js.map} +1 -1
- package/dist/{chunk-XKDW6B7X.cjs → chunk-P53432AK.cjs} +9 -9
- package/dist/{chunk-XKDW6B7X.cjs.map → chunk-P53432AK.cjs.map} +1 -1
- package/dist/{chunk-WNUU7T62.cjs → chunk-PBZHLHSA.cjs} +3 -3
- package/dist/{chunk-WNUU7T62.cjs.map → chunk-PBZHLHSA.cjs.map} +1 -1
- package/dist/{chunk-S5KUYX3Z.cjs → chunk-PCNJJVTF.cjs} +7 -7
- package/dist/{chunk-S5KUYX3Z.cjs.map → chunk-PCNJJVTF.cjs.map} +1 -1
- package/dist/{chunk-O6E2WC3J.js → chunk-PRP5N7NY.js} +4 -4
- package/dist/chunk-PRP5N7NY.js.map +1 -0
- package/dist/{chunk-MFQ5NBSV.cjs → chunk-QAKIG43N.cjs} +3 -3
- package/dist/{chunk-MFQ5NBSV.cjs.map → chunk-QAKIG43N.cjs.map} +1 -1
- package/dist/{chunk-BBOIFV27.cjs → chunk-QF7CD4JH.cjs} +5 -5
- package/dist/{chunk-BBOIFV27.cjs.map → chunk-QF7CD4JH.cjs.map} +1 -1
- package/dist/{chunk-ZI7JP3TN.js → chunk-QFC736WY.js} +5 -5
- package/dist/{chunk-ZI7JP3TN.js.map → chunk-QFC736WY.js.map} +1 -1
- package/dist/{chunk-ZUQUL53P.cjs → chunk-QHN63FRP.cjs} +10 -10
- package/dist/{chunk-ZUQUL53P.cjs.map → chunk-QHN63FRP.cjs.map} +1 -1
- package/dist/{chunk-CESGP5AF.js → chunk-QPM4CZ4G.js} +3 -3
- package/dist/{chunk-CESGP5AF.js.map → chunk-QPM4CZ4G.js.map} +1 -1
- package/dist/{chunk-LMPPAQKP.cjs → chunk-QUKUX5KU.cjs} +4 -4
- package/dist/{chunk-LMPPAQKP.cjs.map → chunk-QUKUX5KU.cjs.map} +1 -1
- package/dist/{chunk-RUSRAKKA.js → chunk-RANTYGKW.js} +7 -7
- package/dist/{chunk-RUSRAKKA.js.map → chunk-RANTYGKW.js.map} +1 -1
- package/dist/{chunk-M52IS5SO.cjs → chunk-RGMHRPHQ.cjs} +15 -15
- package/dist/chunk-RGMHRPHQ.cjs.map +1 -0
- package/dist/{chunk-Y52NXM73.cjs → chunk-RVBTDXPD.cjs} +5 -5
- package/dist/{chunk-Y52NXM73.cjs.map → chunk-RVBTDXPD.cjs.map} +1 -1
- package/dist/{chunk-RLMU3NHQ.cjs → chunk-S3V2C4DW.cjs} +14 -14
- package/dist/chunk-S3V2C4DW.cjs.map +1 -0
- package/dist/{chunk-6IBBAOQC.cjs → chunk-SONXLQPJ.cjs} +8 -8
- package/dist/chunk-SONXLQPJ.cjs.map +1 -0
- package/dist/{chunk-HIN6PHSE.cjs → chunk-SSCW67KA.cjs} +3 -3
- package/dist/{chunk-HIN6PHSE.cjs.map → chunk-SSCW67KA.cjs.map} +1 -1
- package/dist/{chunk-F2GAZZVS.js → chunk-SVSQXKFL.js} +4 -4
- package/dist/{chunk-F2GAZZVS.js.map → chunk-SVSQXKFL.js.map} +1 -1
- package/dist/{chunk-ZKFFHIEW.js → chunk-SXXDTW7S.js} +4 -4
- package/dist/{chunk-ZKFFHIEW.js.map → chunk-SXXDTW7S.js.map} +1 -1
- package/dist/{chunk-TT3K5D6J.js → chunk-T67FLC55.js} +8 -8
- package/dist/{chunk-TT3K5D6J.js.map → chunk-T67FLC55.js.map} +1 -1
- package/dist/{chunk-FNJDMGJ3.js → chunk-TAYJSIOP.js} +7 -7
- package/dist/{chunk-FNJDMGJ3.js.map → chunk-TAYJSIOP.js.map} +1 -1
- package/dist/{chunk-GCWIZNN2.cjs → chunk-TFKG5FSG.cjs} +8 -8
- package/dist/{chunk-GCWIZNN2.cjs.map → chunk-TFKG5FSG.cjs.map} +1 -1
- package/dist/{chunk-MFBUK4RV.cjs → chunk-TJTC4WNY.cjs} +8 -8
- package/dist/{chunk-MFBUK4RV.cjs.map → chunk-TJTC4WNY.cjs.map} +1 -1
- package/dist/{chunk-BZZDHDMK.cjs → chunk-TLRFXSPA.cjs} +14 -14
- package/dist/{chunk-BZZDHDMK.cjs.map → chunk-TLRFXSPA.cjs.map} +1 -1
- package/dist/{chunk-XDJSFGXW.js → chunk-TMQF2CRN.js} +4 -4
- package/dist/chunk-TMQF2CRN.js.map +1 -0
- package/dist/{chunk-65HKNZFG.cjs → chunk-TTZJ2KXK.cjs} +3 -3
- package/dist/{chunk-65HKNZFG.cjs.map → chunk-TTZJ2KXK.cjs.map} +1 -1
- package/dist/{chunk-P7PKK5BO.js → chunk-UE3QO7R3.js} +4 -4
- package/dist/{chunk-P7PKK5BO.js.map → chunk-UE3QO7R3.js.map} +1 -1
- package/dist/{chunk-QOGKO6JH.cjs → chunk-UET6D7B3.cjs} +6 -6
- package/dist/{chunk-QOGKO6JH.cjs.map → chunk-UET6D7B3.cjs.map} +1 -1
- package/dist/chunk-USWQAMI3.js +35 -0
- package/dist/{chunk-GFYSELJF.js.map → chunk-USWQAMI3.js.map} +1 -1
- package/dist/{chunk-YD4SXA6K.js → chunk-UVMIJCY3.js} +8 -8
- package/dist/chunk-UVMIJCY3.js.map +1 -0
- package/dist/{chunk-DEFGT75G.js → chunk-UVUBV4VZ.js} +6 -6
- package/dist/{chunk-DEFGT75G.js.map → chunk-UVUBV4VZ.js.map} +1 -1
- package/dist/{chunk-CRR3AMJ4.js → chunk-UZCR7DK5.js} +4 -4
- package/dist/{chunk-CRR3AMJ4.js.map → chunk-UZCR7DK5.js.map} +1 -1
- package/dist/{chunk-WKNVZUWZ.cjs → chunk-UZG6LO4Z.cjs} +3 -3
- package/dist/{chunk-WKNVZUWZ.cjs.map → chunk-UZG6LO4Z.cjs.map} +1 -1
- package/dist/{chunk-DCVR6NPP.js → chunk-V4235IZO.js} +3 -3
- package/dist/{chunk-DCVR6NPP.js.map → chunk-V4235IZO.js.map} +1 -1
- package/dist/{chunk-WIS4QRGK.cjs → chunk-V5JTTLJP.cjs} +6 -6
- package/dist/{chunk-WIS4QRGK.cjs.map → chunk-V5JTTLJP.cjs.map} +1 -1
- package/dist/{chunk-NBAHXZHJ.js → chunk-VQXXX6DK.js} +4 -4
- package/dist/{chunk-NBAHXZHJ.js.map → chunk-VQXXX6DK.js.map} +1 -1
- package/dist/{chunk-COH45MGW.cjs → chunk-WFHK2DKG.cjs} +3 -3
- package/dist/{chunk-COH45MGW.cjs.map → chunk-WFHK2DKG.cjs.map} +1 -1
- package/dist/{chunk-VYHZEQIG.js → chunk-WGRLNXNB.js} +6 -6
- package/dist/{chunk-VYHZEQIG.js.map → chunk-WGRLNXNB.js.map} +1 -1
- package/dist/{chunk-XK5WHQ3O.cjs → chunk-WMANILKC.cjs} +4 -4
- package/dist/chunk-WMANILKC.cjs.map +1 -0
- package/dist/{chunk-DHIUMQLP.cjs → chunk-WNUAGRQN.cjs} +4 -4
- package/dist/{chunk-DHIUMQLP.cjs.map → chunk-WNUAGRQN.cjs.map} +1 -1
- package/dist/{chunk-B6CQ4KK7.cjs → chunk-WONP337S.cjs} +13 -14
- package/dist/chunk-WONP337S.cjs.map +1 -0
- package/dist/{chunk-ENYHLZ2X.js → chunk-WW56U3RV.js} +5 -5
- package/dist/{chunk-ENYHLZ2X.js.map → chunk-WW56U3RV.js.map} +1 -1
- package/dist/{chunk-KKWNKBKR.js → chunk-WX5XYDVN.js} +8 -8
- package/dist/{chunk-KKWNKBKR.js.map → chunk-WX5XYDVN.js.map} +1 -1
- package/dist/{chunk-TB35HNBE.js → chunk-X7VIIM2P.js} +3 -3
- package/dist/{chunk-TB35HNBE.js.map → chunk-X7VIIM2P.js.map} +1 -1
- package/dist/{chunk-4NBM3LXN.js → chunk-XB3H2EEL.js} +5 -5
- package/dist/{chunk-4NBM3LXN.js.map → chunk-XB3H2EEL.js.map} +1 -1
- package/dist/{chunk-5RLP77KK.js → chunk-XM3V3RSU.js} +4 -4
- package/dist/{chunk-5RLP77KK.js.map → chunk-XM3V3RSU.js.map} +1 -1
- package/dist/{chunk-IYVV4RD3.cjs → chunk-XM3W5ETT.cjs} +5 -5
- package/dist/{chunk-IYVV4RD3.cjs.map → chunk-XM3W5ETT.cjs.map} +1 -1
- package/dist/{chunk-IWXP2YUP.js → chunk-XOYRJFMU.js} +6 -6
- package/dist/chunk-XOYRJFMU.js.map +1 -0
- package/dist/{chunk-XB6YHUKW.js → chunk-XQDGUXMS.js} +10 -10
- package/dist/{chunk-XB6YHUKW.js.map → chunk-XQDGUXMS.js.map} +1 -1
- package/dist/{chunk-2KAJ4L7C.js → chunk-XS3EIQFP.js} +19 -19
- package/dist/chunk-XS3EIQFP.js.map +1 -0
- package/dist/{chunk-6KXAFP2T.js → chunk-XYOT75HH.js} +3 -3
- package/dist/{chunk-6KXAFP2T.js.map → chunk-XYOT75HH.js.map} +1 -1
- package/dist/{chunk-UDEEPMQ4.js → chunk-Y6LL3B5P.js} +4 -4
- package/dist/{chunk-UDEEPMQ4.js.map → chunk-Y6LL3B5P.js.map} +1 -1
- package/dist/{chunk-OS2QC3NE.cjs → chunk-Y7RGUUTS.cjs} +7 -7
- package/dist/chunk-Y7RGUUTS.cjs.map +1 -0
- package/dist/{chunk-Z6RVBZQ4.js → chunk-Y7UE37QZ.js} +8 -8
- package/dist/{chunk-Z6RVBZQ4.js.map → chunk-Y7UE37QZ.js.map} +1 -1
- package/dist/{chunk-YMDYDUBH.cjs → chunk-YH75G6SP.cjs} +7 -7
- package/dist/{chunk-YMDYDUBH.cjs.map → chunk-YH75G6SP.cjs.map} +1 -1
- package/dist/{chunk-PHDIQ4VC.js → chunk-YQTKTEWS.js} +8 -8
- package/dist/chunk-YQTKTEWS.js.map +1 -0
- package/dist/{chunk-AOFDFBRV.js → chunk-Z4EPQWVC.js} +10 -10
- package/dist/chunk-Z4EPQWVC.js.map +1 -0
- package/dist/{chunk-FVTCPERB.cjs → chunk-Z4UXLQSK.cjs} +15 -15
- package/dist/{chunk-FVTCPERB.cjs.map → chunk-Z4UXLQSK.cjs.map} +1 -1
- package/dist/{chunk-W6RDAZJC.js → chunk-ZAX72LXL.js} +5 -5
- package/dist/chunk-ZAX72LXL.js.map +1 -0
- package/dist/{chunk-NE3Z4AWP.js → chunk-ZULMMW5W.js} +7 -7
- package/dist/{chunk-NE3Z4AWP.js.map → chunk-ZULMMW5W.js.map} +1 -1
- package/dist/color-picker.cjs +2 -2
- package/dist/color-picker.js +1 -1
- package/dist/command.cjs +3 -3
- package/dist/command.js +1 -1
- package/dist/composer.cjs +5 -5
- package/dist/composer.js +3 -3
- package/dist/content-renderer.cjs +4 -4
- package/dist/content-renderer.js +1 -1
- package/dist/context-menu.cjs +3 -3
- package/dist/context-menu.js +1 -1
- package/dist/date-picker.cjs +5 -5
- package/dist/date-picker.js +4 -4
- package/dist/drawer.cjs +3 -3
- package/dist/drawer.js +1 -1
- package/dist/dropdown.cjs +3 -3
- package/dist/dropdown.js +1 -1
- package/dist/editor.cjs +4 -4
- package/dist/editor.js +2 -2
- package/dist/emoji-select.cjs +2 -2
- package/dist/emoji-select.js +1 -1
- package/dist/eyebrow.cjs +2 -2
- package/dist/eyebrow.js +1 -1
- package/dist/faux-client.cjs +2 -2
- package/dist/faux-client.js +1 -1
- package/dist/field.cjs +3 -3
- package/dist/field.js +2 -2
- package/dist/file-browser.cjs +5 -5
- package/dist/file-browser.js +1 -1
- package/dist/file-upload.cjs +3 -3
- package/dist/file-upload.js +1 -1
- package/dist/heading.cjs +2 -2
- package/dist/heading.js +1 -1
- package/dist/image-viewer.cjs +3 -3
- package/dist/image-viewer.js +2 -2
- package/dist/index-list.cjs +2 -2
- package/dist/index-list.js +1 -1
- package/dist/index.cjs +285 -212
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +114 -1
- package/dist/index.d.ts +114 -1
- package/dist/index.js +155 -79
- package/dist/index.js.map +1 -1
- package/dist/input-tag.cjs +6 -6
- package/dist/input-tag.js +1 -1
- package/dist/input.cjs +8 -8
- package/dist/input.js +7 -7
- package/dist/inputs.cjs +28 -28
- package/dist/inputs.js +16 -16
- package/dist/json-editor.cjs +26 -26
- package/dist/json-editor.js +15 -15
- package/dist/kanban.cjs +3 -3
- package/dist/kanban.js +1 -1
- package/dist/kbd.cjs +2 -2
- package/dist/kbd.js +1 -1
- package/dist/magic-wand.cjs +8 -8
- package/dist/magic-wand.js +7 -7
- package/dist/media-viewer.cjs +6 -6
- package/dist/media-viewer.js +5 -5
- package/dist/menu.cjs +3 -3
- package/dist/menu.js +1 -1
- package/dist/mobile-menu.cjs +3 -3
- package/dist/mobile-menu.js +1 -1
- package/dist/modal.cjs +3 -3
- package/dist/modal.js +1 -1
- package/dist/mode.cjs +3 -3
- package/dist/mode.js +2 -2
- package/dist/mood-meter.cjs +2 -2
- package/dist/mood-meter.js +1 -1
- package/dist/multi-switch.cjs +5 -5
- package/dist/multi-switch.js +4 -4
- package/dist/navbar.cjs +3 -3
- package/dist/navbar.js +1 -1
- package/dist/otp-input.cjs +2 -2
- package/dist/otp-input.js +1 -1
- package/dist/pagination.cjs +2 -2
- package/dist/pagination.js +1 -1
- package/dist/paste-pills.cjs +15 -15
- package/dist/paste-pills.js +2 -2
- package/dist/pdf-viewer.cjs +3 -3
- package/dist/pdf-viewer.js +2 -2
- package/dist/pillbox.cjs +2 -2
- package/dist/pillbox.js +1 -1
- package/dist/popover.cjs +3 -3
- package/dist/popover.js +1 -1
- package/dist/profile.cjs +3 -3
- package/dist/profile.js +2 -2
- package/dist/progress.cjs +2 -2
- package/dist/progress.js +1 -1
- package/dist/prompt-input.cjs +5 -5
- package/dist/prompt-input.js +4 -4
- package/dist/pull-quote.cjs +2 -2
- package/dist/pull-quote.js +1 -1
- package/dist/radio-group.cjs +5 -5
- package/dist/radio-group.js +4 -4
- package/dist/reason-tag.cjs +4 -4
- package/dist/reason-tag.js +3 -3
- package/dist/select.cjs +6 -6
- package/dist/select.js +5 -5
- package/dist/separator.cjs +2 -2
- package/dist/separator.js +1 -1
- package/dist/sidebar.cjs +3 -3
- package/dist/sidebar.js +1 -1
- package/dist/skeleton.cjs +2 -2
- package/dist/skeleton.js +1 -1
- package/dist/slider.cjs +5 -5
- package/dist/slider.js +4 -4
- package/dist/stat-list.cjs +2 -2
- package/dist/stat-list.js +1 -1
- package/dist/stat.cjs +3 -3
- package/dist/stat.js +1 -1
- package/dist/styles.css +15 -15
- package/dist/styles.css.map +1 -1
- package/dist/switch.cjs +3 -3
- package/dist/switch.js +2 -2
- package/dist/table.cjs +11 -11
- package/dist/table.js +1 -1
- package/dist/tabs.cjs +3 -3
- package/dist/tabs.js +1 -1
- package/dist/text.cjs +2 -2
- package/dist/text.js +1 -1
- package/dist/textarea.cjs +6 -6
- package/dist/textarea.js +5 -5
- package/dist/time-grid.cjs +2 -2
- package/dist/time-grid.js +1 -1
- package/dist/time-picker.cjs +2 -2
- package/dist/time-picker.js +1 -1
- package/dist/timeline.cjs +4 -4
- package/dist/timeline.js +1 -1
- package/dist/toast.cjs +3 -3
- package/dist/toast.js +1 -1
- package/dist/tree-nav.cjs +3 -3
- package/dist/tree-nav.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-25UPDBI6.cjs.map +0 -1
- package/dist/chunk-2KAJ4L7C.js.map +0 -1
- package/dist/chunk-32AJIHBZ.js.map +0 -1
- package/dist/chunk-5F6V5HHT.cjs.map +0 -1
- package/dist/chunk-6IBBAOQC.cjs.map +0 -1
- package/dist/chunk-7EZBMGEE.cjs.map +0 -1
- package/dist/chunk-7JDVCQXD.js.map +0 -1
- package/dist/chunk-AOFDFBRV.js.map +0 -1
- package/dist/chunk-B6CQ4KK7.cjs.map +0 -1
- package/dist/chunk-CF2U25LM.js.map +0 -1
- package/dist/chunk-FSRPZYZZ.js.map +0 -1
- package/dist/chunk-FYKOLKQZ.js.map +0 -1
- package/dist/chunk-GFYSELJF.js +0 -35
- package/dist/chunk-GU5BYZTR.cjs.map +0 -1
- package/dist/chunk-HKRB2Z6R.cjs.map +0 -1
- package/dist/chunk-I6L7OP7G.cjs.map +0 -1
- package/dist/chunk-IWXP2YUP.js.map +0 -1
- package/dist/chunk-JFOORUUD.cjs.map +0 -1
- package/dist/chunk-LLA33GKC.cjs.map +0 -1
- package/dist/chunk-M52IS5SO.cjs.map +0 -1
- package/dist/chunk-M5ACSJJ4.js.map +0 -1
- package/dist/chunk-N6OZZAOT.js.map +0 -1
- package/dist/chunk-O6E2WC3J.js.map +0 -1
- package/dist/chunk-OS2QC3NE.cjs.map +0 -1
- package/dist/chunk-P7Q2YIIS.js.map +0 -1
- package/dist/chunk-PCTZNK2Z.js.map +0 -1
- package/dist/chunk-PHDIQ4VC.js.map +0 -1
- package/dist/chunk-PLNDZF2A.cjs.map +0 -1
- package/dist/chunk-PWEZCMIY.js.map +0 -1
- package/dist/chunk-QAFAPHAF.cjs.map +0 -1
- package/dist/chunk-QSFTWIUH.cjs.map +0 -1
- package/dist/chunk-RA2VOQ46.js.map +0 -1
- package/dist/chunk-RLMU3NHQ.cjs.map +0 -1
- package/dist/chunk-RPVCMW64.cjs.map +0 -1
- package/dist/chunk-T45XK5GN.cjs.map +0 -1
- package/dist/chunk-TDDWWAM5.js.map +0 -1
- package/dist/chunk-TNYWQ6EQ.js.map +0 -1
- package/dist/chunk-VKXNCYLE.cjs.map +0 -1
- package/dist/chunk-W6RDAZJC.js.map +0 -1
- package/dist/chunk-WBVWV2V7.cjs.map +0 -1
- package/dist/chunk-XDJSFGXW.js.map +0 -1
- package/dist/chunk-XK5WHQ3O.cjs.map +0 -1
- package/dist/chunk-YD4SXA6K.js.map +0 -1
- package/dist/chunk-Z3NSPDTW.cjs.map +0 -1
- package/dist/chunk-ZLWCZV7R.js.map +0 -1
- package/dist/chunk-ZY4CVNNZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TreeNav/TreeNav.context.ts","../src/components/TreeNav/tree-store.ts","../src/components/TreeNav/TreeNode.tsx","../src/components/TreeNav/TreeNav.tsx"],"names":["createContext","useContext","useSyncExternalStore","jsxs","jsx","cn","useRef","useCallback","useEffect","memo","useState","useMemo","useLayoutEffect","VirtualList"],"mappings":"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","file":"chunk-WN45ZE37.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TreeNavContextValue } from \"./TreeNav.types\";\n\nexport const TreeNavContext = createContext<TreeNavContextValue | null>(null);\n\nexport function useTreeNav(): TreeNavContextValue {\n const ctx = useContext(TreeNavContext);\n if (!ctx) {\n throw new Error(\"useTreeNav must be used within a <TreeNav> component\");\n }\n return ctx;\n}\n","import { createContext, useContext, useSyncExternalStore } from \"react\";\nimport type { DragState, DropPosition, TreeNodeData } from \"./TreeNav.types\";\n\n/** What changes as someone clicks, toggles and drags — the state rows subscribe to. */\nexport interface TreeState {\n selectedId?: string;\n expanded: ReadonlySet<string>;\n dragState: DragState;\n}\n\nexport interface TreeStore {\n get(): TreeState;\n set(next: TreeState): void;\n subscribe(listener: () => void): () => void;\n}\n\nexport function createTreeStore(initial: TreeState): TreeStore {\n let state = initial;\n const listeners = new Set<() => void>();\n return {\n get: () => state,\n set(next) {\n state = next;\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n\n/**\n * Everything a row needs that does NOT change on a click. Handlers are stable\n * (they read the latest props and state when called), so this value only changes\n * when the tree's data or configuration does.\n *\n * Kept apart from the public `TreeNavContext` on purpose: that one still carries\n * live `selectedId` / `expandedIds` for `useTreeNav()` callers, and any component\n * reading it re-renders on every click. Rows no longer read it — which is the\n * whole fix: a click used to re-render every row in the tree.\n */\nexport interface TreeInternals {\n store: TreeStore;\n nodes: TreeNodeData[];\n select: (node: TreeNodeData) => void;\n toggle: (id: string) => void;\n expandNode: (id: string) => void;\n setDragState: (state: DragState) => void;\n contextMenu?: (e: React.MouseEvent, node: TreeNodeData) => void;\n moveNode?: (sourceId: string, targetId: string, position: DropPosition) => void;\n externalDrop?: (event: React.DragEvent, target: TreeNodeData, position: DropPosition) => void;\n indentSize: number;\n showIcons: boolean;\n draggable: boolean;\n dragCursor: \"grab\" | \"none\";\n acceptExternalDrops: boolean;\n /** Rows are rendered flat by a virtual list, so a row never renders its children. */\n flat: boolean;\n}\n\nexport const TreeInternalsContext = createContext<TreeInternals | null>(null);\n\nexport function useTreeInternals(): TreeInternals {\n const internals = useContext(TreeInternalsContext);\n if (!internals) throw new Error(\"TreeNav.Node must be used within a <TreeNav> component\");\n return internals;\n}\n\n/** Subscribe to ONE derived value; the row re-renders only when that value changes. */\nexport function useTreeSlice<T>(select: (state: TreeState) => T): T {\n const { store } = useTreeInternals();\n return useSyncExternalStore(\n store.subscribe,\n () => select(store.get()),\n () => select(store.get()),\n );\n}\n","import { memo, useRef, useEffect, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useTreeInternals, useTreeSlice } from \"./tree-store\";\nimport type { TreeNodeProps, TreeNodeData, DropPosition } from \"./TreeNav.types\";\n\nconst EXT_COLORS: Record<string, string> = {\n ts: \"#3178c6\",\n tsx: \"#3178c6\",\n js: \"#f7df1e\",\n jsx: \"#f7df1e\",\n php: \"#777bb4\",\n html: \"#e34c26\",\n htm: \"#e34c26\",\n css: \"#264de4\",\n json: \"#a1a1aa\",\n md: \"#71717a\",\n yaml: \"#cb171e\",\n yml: \"#cb171e\",\n};\n\nfunction FileIcon({ ext }: { ext?: string }) {\n const color = (ext && EXT_COLORS[ext.toLowerCase()]) || \"#71717a\";\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M4 1h5.5L13 4.5V14a1 1 0 01-1 1H4a1 1 0 01-1-1V2a1 1 0 011-1z\" stroke={color} strokeWidth=\"1.2\" />\n <path d=\"M9 1v4h4\" stroke={color} strokeWidth=\"1.2\" />\n </svg>\n );\n}\n\nfunction FolderIcon({ open }: { open: boolean }) {\n if (open) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M1.5 3.5a1 1 0 011-1h3l1.5 1.5H13a1 1 0 011 1V5H2.5V3.5z\" fill=\"#fbbf24\" />\n <path d=\"M1 6h13l-1.5 7.5H2.5L1 6z\" fill=\"#fbbf24\" opacity=\"0.7\" />\n </svg>\n );\n }\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M1.5 3a1 1 0 011-1h3l1.5 1.5H13a1 1 0 011 1v8a1 1 0 01-1 1H2.5a1 1 0 01-1-1V3z\" fill=\"#fbbf24\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\"shrink-0 transition-transform duration-150\", open && \"rotate-90\")}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction isDescendantOf(\n nodes: TreeNodeData[],\n ancestorId: string,\n targetId: string,\n): boolean {\n function findNode(haystack: TreeNodeData[], id: string): TreeNodeData | undefined {\n for (const n of haystack) {\n if (n.id === id) return n;\n if (n.children) {\n const found = findNode(n.children, id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n function hasDescendant(node: TreeNodeData, id: string): boolean {\n if (!node.children) return false;\n for (const child of node.children) {\n if (child.id === id) return true;\n if (hasDescendant(child, id)) return true;\n }\n return false;\n }\n\n const ancestor = findNode(nodes, ancestorId);\n return ancestor ? hasDescendant(ancestor, targetId) : false;\n}\n\nfunction computeDropPosition(\n e: React.DragEvent,\n isFolder: boolean,\n): DropPosition {\n const rect = e.currentTarget.getBoundingClientRect();\n const offsetY = e.clientY - rect.top;\n const third = rect.height / 3;\n\n if (offsetY < third) return \"before\";\n if (offsetY > third * 2) return \"after\";\n return isFolder ? \"inside\" : \"after\";\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n\n/**\n * One row (and, when nested, its expanded children).\n *\n * Reads what changes on a click — selection, expansion, drag — as per-row slices\n * of a store, so a click re-renders only the rows whose slice changed. It used to\n * read one context holding all of it, so every click re-rendered every row:\n * 175-267 ms per click on a 5,000-node tree. `memo` keeps a parent's re-render\n * from reaching rows whose `node` and `depth` did not change.\n */\nfunction TreeNodeImpl({ node, depth }: TreeNodeProps) {\n const {\n store, nodes, select, toggle, expandNode, setDragState, contextMenu, moveNode, externalDrop,\n indentSize, showIcons, draggable, dragCursor, acceptExternalDrops, flat,\n } = useTreeInternals();\n\n const isFolder = node.type === \"folder\" || (node.children && node.children.length > 0);\n const isExpanded = useTreeSlice((s) => s.expanded.has(node.id));\n const isSelected = useTreeSlice((s) => s.selectedId === node.id);\n const isDragging = useTreeSlice((s) => s.dragState.draggedNodeId === node.id);\n const dropPosition = useTreeSlice((s) =>\n s.dragState.dropTargetId === node.id ? s.dragState.dropPosition : null,\n );\n const isDropTarget = dropPosition !== null;\n const paddingLeft = depth * indentSize + 4;\n\n // Auto-expand timer for folders during drag\n const autoExpandTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearAutoExpand = useCallback(() => {\n if (autoExpandTimer.current) {\n clearTimeout(autoExpandTimer.current);\n autoExpandTimer.current = null;\n }\n }, []);\n\n useEffect(() => clearAutoExpand, [clearAutoExpand]);\n\n // ---------------------------------------------------------------------------\n // Click handlers\n // ---------------------------------------------------------------------------\n\n const handleClick = () => {\n if (node.disabled) return;\n if (isFolder) {\n toggle(node.id);\n }\n select(node);\n };\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (contextMenu) {\n e.preventDefault();\n contextMenu(e, node);\n }\n };\n\n // ---------------------------------------------------------------------------\n // Drag source handlers\n // ---------------------------------------------------------------------------\n\n const handleDragStart = useCallback((e: React.DragEvent) => {\n e.dataTransfer.setData(\"text/plain\", node.id);\n e.dataTransfer.effectAllowed = \"move\";\n // Set state async so the browser captures the element for the drag ghost first\n requestAnimationFrame(() => {\n setDragState({ draggedNodeId: node.id, dropTargetId: null, dropPosition: null });\n });\n }, [node.id, setDragState]);\n\n const handleDragEnd = useCallback(() => {\n clearAutoExpand();\n setDragState({ draggedNodeId: null, dropTargetId: null, dropPosition: null });\n }, [clearAutoExpand, setDragState]);\n\n // ---------------------------------------------------------------------------\n // Drop target handlers (on outer div). Drag state is read from the store when\n // the event fires, so a row does not re-render as a drag moves elsewhere.\n // ---------------------------------------------------------------------------\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n const { dragState } = store.get();\n const isExternalDrag = !dragState.draggedNodeId;\n if (isExternalDrag) {\n // External drop accepted only when host opted in.\n if (!acceptExternalDrops) return;\n } else {\n const sourceId = dragState.draggedNodeId!;\n if (sourceId === node.id) return;\n if (isDescendantOf(nodes, sourceId, node.id)) return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = isExternalDrag ? \"copy\" : \"move\";\n\n const position = computeDropPosition(e, !!isFolder);\n\n // Auto-expand collapsed folders when hovering \"inside\"\n if (isFolder && !store.get().expanded.has(node.id) && position === \"inside\") {\n if (!autoExpandTimer.current) {\n autoExpandTimer.current = setTimeout(() => {\n expandNode(node.id);\n autoExpandTimer.current = null;\n }, 500);\n }\n } else {\n clearAutoExpand();\n }\n\n if (dragState.dropTargetId !== node.id || dragState.dropPosition !== position) {\n setDragState({ draggedNodeId: dragState.draggedNodeId, dropTargetId: node.id, dropPosition: position });\n }\n }, [store, acceptExternalDrops, node.id, isFolder, nodes, setDragState, expandNode, clearAutoExpand]);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n clearAutoExpand();\n const { dragState } = store.get();\n if (dragState.dropTargetId === node.id) {\n setDragState({ ...dragState, dropTargetId: null, dropPosition: null });\n }\n }\n }, [store, node.id, setDragState, clearAutoExpand]);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearAutoExpand();\n\n const { dragState } = store.get();\n const sourceId = dragState.draggedNodeId;\n const position = dragState.dropPosition ?? computeDropPosition(e, !!isFolder);\n\n if (sourceId) {\n // Internal node move.\n if (sourceId === node.id) return;\n if (isDescendantOf(nodes, sourceId, node.id)) return;\n moveNode?.(sourceId, node.id, position);\n } else if (acceptExternalDrops) {\n // External drop — files, items from other components, etc.\n externalDrop?.(e, node, position);\n }\n\n setDragState({ draggedNodeId: null, dropTargetId: null, dropPosition: null });\n }, [store, node, isFolder, nodes, moveNode, acceptExternalDrops, externalDrop, setDragState, clearAutoExpand]);\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n const canDrag = draggable && !node.disabled;\n const dropEnabled = draggable || acceptExternalDrops;\n\n return (\n <div\n data-react-fancy-tree-node=\"\"\n onDragOver={dropEnabled ? handleDragOver : undefined}\n onDragLeave={dropEnabled ? handleDragLeave : undefined}\n onDrop={dropEnabled ? handleDrop : undefined}\n >\n {/* Before drop indicator */}\n {isDropTarget && dropPosition === \"before\" && (\n <div\n data-react-fancy-tree-drop-indicator=\"before\"\n className=\"pointer-events-none h-0.5 rounded-full bg-blue-500\"\n style={{ marginLeft: paddingLeft }}\n />\n )}\n\n <button\n type=\"button\"\n draggable={canDrag}\n onDragStart={canDrag ? handleDragStart : undefined}\n onDragEnd={canDrag ? handleDragEnd : undefined}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n disabled={node.disabled}\n className={cn(\n \"flex w-full items-center gap-1 rounded-md py-0.5 text-left text-[13px] transition-colors\",\n isSelected\n ? \"bg-blue-500/15 text-blue-600 dark:text-blue-400\"\n : \"text-zinc-700 hover:bg-zinc-100 dark:text-zinc-300 dark:hover:bg-zinc-800\",\n node.disabled && \"pointer-events-none opacity-40\",\n isDragging && \"opacity-50\",\n // Grab affordance. By default (`dragCursor=\"none\"`) the row keeps its\n // normal click cursor on hover — no open-hand \"move me\" cursor before\n // any drag — and only shows the closed-hand `grabbing` cursor while a\n // drag is actually underway (mousedown/drag). `dragCursor=\"grab\"` opts\n // back into the always-on grab cursor for whole-row drag handles (#14).\n canDrag &&\n (dragCursor === \"grab\" ? \"cursor-grab active:cursor-grabbing\" : \"active:cursor-grabbing\"),\n isDropTarget && dropPosition === \"inside\" && \"bg-blue-500/10 ring-1 ring-blue-500/30 ring-inset\",\n )}\n style={{ paddingLeft }}\n >\n {isFolder && <ChevronIcon open={isExpanded} />}\n {!isFolder && <span className=\"w-3.5 shrink-0\" />}\n {showIcons && (\n node.icon ?? (isFolder\n ? <FolderIcon open={isExpanded} />\n : <FileIcon ext={node.ext ?? node.label.split(\".\").pop()} />)\n )}\n <span className=\"truncate\">{node.label}</span>\n </button>\n\n {/* After drop indicator */}\n {isDropTarget && dropPosition === \"after\" && (\n <div\n data-react-fancy-tree-drop-indicator=\"after\"\n className=\"pointer-events-none h-0.5 rounded-full bg-blue-500\"\n style={{ marginLeft: paddingLeft }}\n />\n )}\n\n {/* A virtual list renders rows flat, so a row never renders its own children there. */}\n {!flat && isFolder && isExpanded && node.children && (\n <div data-react-fancy-tree-node-children=\"\">\n {node.children.map((child) => (\n <TreeNode key={child.id} node={child} depth={depth + 1} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport const TreeNode = memo(TreeNodeImpl);\n\nTreeNode.displayName = \"TreeNode\";\n","import { useMemo, useCallback, useLayoutEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { VirtualList } from \"../VirtualList\";\nimport { TreeNavContext } from \"./TreeNav.context\";\nimport { TreeNode } from \"./TreeNode\";\nimport { createTreeStore, TreeInternalsContext, type TreeInternals } from \"./tree-store\";\nimport type { TreeNavProps, TreeNodeData, DragState } from \"./TreeNav.types\";\n\nfunction collectFolderIds(nodes: TreeNodeData[]): string[] {\n const ids: string[] = [];\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n ids.push(node.id);\n ids.push(...collectFolderIds(node.children));\n }\n }\n return ids;\n}\n\nconst EMPTY_DRAG_STATE: DragState = {\n draggedNodeId: null,\n dropTargetId: null,\n dropPosition: null,\n};\n\ninterface FlatRow {\n id: string;\n node: TreeNodeData;\n depth: number;\n}\n\n/** The rows currently visible — every node, descending only into expanded folders. */\nfunction flattenVisible(nodes: TreeNodeData[], expanded: ReadonlySet<string>): FlatRow[] {\n const rows: FlatRow[] = [];\n const walk = (list: TreeNodeData[], depth: number) => {\n for (const node of list) {\n rows.push({ id: node.id, node, depth });\n const isFolder = node.type === \"folder\" || (node.children && node.children.length > 0);\n if (isFolder && node.children && expanded.has(node.id)) walk(node.children, depth + 1);\n }\n };\n walk(nodes, 0);\n return rows;\n}\n\nfunction TreeNavRoot({\n nodes,\n selectedId,\n onSelect,\n onNodeContextMenu,\n draggable = false,\n onNodeMove,\n acceptExternalDrops = false,\n onExternalDrop,\n expandedIds: controlledExpanded,\n defaultExpandedIds,\n onExpandedChange,\n defaultExpandAll = false,\n indentSize = 16,\n showIcons = true,\n dragCursor = \"none\",\n virtualize = false,\n height = 400,\n rowHeight = 26,\n className,\n}: TreeNavProps) {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(() => {\n if (defaultExpandedIds) return defaultExpandedIds;\n if (defaultExpandAll) return collectFolderIds(nodes);\n return [];\n });\n\n const isControlled = controlledExpanded !== undefined;\n const expandedIds = isControlled ? controlledExpanded : internalExpanded;\n // One Set per change, so a row's \"am I expanded?\" is a lookup, not a scan.\n const expanded = useMemo(() => new Set(expandedIds), [expandedIds]);\n\n const [dragState, setDragState] = useState<DragState>(EMPTY_DRAG_STATE);\n\n /*\n * The latest props and state, for handlers that must stay STABLE. A handler\n * whose identity changes on every click would change the context rows read,\n * and re-render every row — the exact cost this component is avoiding.\n */\n const latest = useRef({ expandedIds, isControlled, onExpandedChange, onSelect, onNodeContextMenu, onNodeMove, onExternalDrop });\n latest.current = { expandedIds, isControlled, onExpandedChange, onSelect, onNodeContextMenu, onNodeMove, onExternalDrop };\n\n const setExpanded = useCallback((next: string[]) => {\n if (!latest.current.isControlled) setInternalExpanded(next);\n latest.current.onExpandedChange?.(next);\n }, []);\n\n const toggle = useCallback(\n (id: string) => {\n const current = latest.current.expandedIds;\n setExpanded(current.includes(id) ? current.filter((v) => v !== id) : [...current, id]);\n },\n [setExpanded],\n );\n\n const expandNode = useCallback(\n (id: string) => {\n const current = latest.current.expandedIds;\n if (!current.includes(id)) setExpanded([...current, id]);\n },\n [setExpanded],\n );\n\n const select = useCallback((node: TreeNodeData) => latest.current.onSelect?.(node.id, node), []);\n const contextMenu = useCallback(\n (e: React.MouseEvent, node: TreeNodeData) => latest.current.onNodeContextMenu?.(e, node),\n [],\n );\n const moveNode = useCallback(\n (sourceId: string, targetId: string, position: Parameters<NonNullable<TreeNavProps[\"onNodeMove\"]>>[2]) =>\n latest.current.onNodeMove?.(sourceId, targetId, position),\n [],\n );\n const externalDrop = useCallback(\n (event: React.DragEvent, target: TreeNodeData, position: Parameters<NonNullable<TreeNavProps[\"onExternalDrop\"]>>[2]) =>\n latest.current.onExternalDrop?.(event, target, position),\n [],\n );\n\n // What rows subscribe to. Seeded with this render's values so the first paint\n // is right; kept current after each render that changes them.\n const [store] = useState(() => createTreeStore({ selectedId, expanded, dragState }));\n useLayoutEffect(() => {\n const current = store.get();\n if (current.selectedId !== selectedId || current.expanded !== expanded || current.dragState !== dragState) {\n store.set({ selectedId, expanded, dragState });\n }\n }, [store, selectedId, expanded, dragState]);\n\n const hasContextMenu = onNodeContextMenu !== undefined;\n const internals = useMemo<TreeInternals>(\n () => ({\n store,\n nodes,\n select,\n toggle,\n expandNode,\n setDragState,\n // Present only when the host gave one: a row then claims the right-click.\n contextMenu: hasContextMenu ? contextMenu : undefined,\n moveNode,\n externalDrop,\n indentSize,\n showIcons,\n draggable,\n dragCursor,\n acceptExternalDrops,\n flat: virtualize,\n }),\n [store, nodes, select, toggle, expandNode, hasContextMenu, contextMenu, moveNode, externalDrop,\n indentSize, showIcons, draggable, dragCursor, acceptExternalDrops, virtualize],\n );\n\n // Unchanged public context, still live for `useTreeNav()` callers. Rows no\n // longer read it, so its changing on a click re-renders only those callers.\n const ctx = useMemo(\n () => ({\n selectedId, onSelect, onNodeContextMenu, expandedIds, toggle, indentSize, showIcons,\n draggable, dragCursor, dragState, setDragState, onNodeMove, acceptExternalDrops, onExternalDrop, nodes, expandNode,\n }),\n [selectedId, onSelect, onNodeContextMenu, expandedIds, toggle, indentSize, showIcons,\n draggable, dragCursor, dragState, onNodeMove, acceptExternalDrops, onExternalDrop, nodes, expandNode],\n );\n\n const rows = useMemo(\n () => (virtualize ? flattenVisible(nodes, expanded) : []),\n [virtualize, nodes, expanded],\n );\n\n const handleDragEnd = useCallback(() => {\n setDragState(EMPTY_DRAG_STATE);\n }, []);\n\n const dropEnabled = draggable || acceptExternalDrops;\n\n return (\n <TreeNavContext.Provider value={ctx}>\n <TreeInternalsContext.Provider value={internals}>\n <nav\n data-react-fancy-tree-nav=\"\"\n data-react-fancy-tree-nav-virtual={virtualize ? \"\" : undefined}\n className={cn(\"flex flex-col gap-0.5 py-1 text-sm\", className)}\n onDragEnd={dropEnabled ? handleDragEnd : undefined}\n >\n {virtualize ? (\n <VirtualList\n items={rows}\n height={height}\n estimateRowHeight={rowHeight}\n renderRow={(row) => <TreeNode node={row.node} depth={row.depth} />}\n />\n ) : (\n nodes.map((node) => <TreeNode key={node.id} node={node} depth={0} />)\n )}\n </nav>\n </TreeInternalsContext.Provider>\n </TreeNavContext.Provider>\n );\n}\n\nTreeNavRoot.displayName = \"TreeNav\";\n\nexport const TreeNav = Object.assign(TreeNavRoot, {\n Node: TreeNode,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/TreeNav/TreeNav.context.ts","../src/components/TreeNav/tree-store.ts","../src/components/TreeNav/TreeNode.tsx","../src/components/TreeNav/TreeNav.tsx"],"names":["createContext","useContext","useSyncExternalStore","jsxs","jsx","cn","useRef","useCallback","useEffect","memo","useState","useMemo","useLayoutEffect","VirtualList"],"mappings":"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","file":"chunk-AVEFCM6T.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TreeNavContextValue } from \"./TreeNav.types\";\n\nexport const TreeNavContext = createContext<TreeNavContextValue | null>(null);\n\nexport function useTreeNav(): TreeNavContextValue {\n const ctx = useContext(TreeNavContext);\n if (!ctx) {\n throw new Error(\"useTreeNav must be used within a <TreeNav> component\");\n }\n return ctx;\n}\n","import { createContext, useContext, useSyncExternalStore } from \"react\";\nimport type { DragState, DropPosition, TreeNodeData } from \"./TreeNav.types\";\n\n/** What changes as someone clicks, toggles and drags — the state rows subscribe to. */\nexport interface TreeState {\n selectedId?: string;\n expanded: ReadonlySet<string>;\n dragState: DragState;\n}\n\nexport interface TreeStore {\n get(): TreeState;\n set(next: TreeState): void;\n subscribe(listener: () => void): () => void;\n}\n\nexport function createTreeStore(initial: TreeState): TreeStore {\n let state = initial;\n const listeners = new Set<() => void>();\n return {\n get: () => state,\n set(next) {\n state = next;\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n\n/**\n * Everything a row needs that does NOT change on a click. Handlers are stable\n * (they read the latest props and state when called), so this value only changes\n * when the tree's data or configuration does.\n *\n * Kept apart from the public `TreeNavContext` on purpose: that one still carries\n * live `selectedId` / `expandedIds` for `useTreeNav()` callers, and any component\n * reading it re-renders on every click. Rows no longer read it — which is the\n * whole fix: a click used to re-render every row in the tree.\n */\nexport interface TreeInternals {\n store: TreeStore;\n nodes: TreeNodeData[];\n select: (node: TreeNodeData) => void;\n toggle: (id: string) => void;\n expandNode: (id: string) => void;\n setDragState: (state: DragState) => void;\n contextMenu?: (e: React.MouseEvent, node: TreeNodeData) => void;\n moveNode?: (sourceId: string, targetId: string, position: DropPosition) => void;\n externalDrop?: (event: React.DragEvent, target: TreeNodeData, position: DropPosition) => void;\n indentSize: number;\n showIcons: boolean;\n draggable: boolean;\n dragCursor: \"grab\" | \"none\";\n acceptExternalDrops: boolean;\n /** Rows are rendered flat by a virtual list, so a row never renders its children. */\n flat: boolean;\n}\n\nexport const TreeInternalsContext = createContext<TreeInternals | null>(null);\n\nexport function useTreeInternals(): TreeInternals {\n const internals = useContext(TreeInternalsContext);\n if (!internals) throw new Error(\"TreeNav.Node must be used within a <TreeNav> component\");\n return internals;\n}\n\n/** Subscribe to ONE derived value; the row re-renders only when that value changes. */\nexport function useTreeSlice<T>(select: (state: TreeState) => T): T {\n const { store } = useTreeInternals();\n return useSyncExternalStore(\n store.subscribe,\n () => select(store.get()),\n () => select(store.get()),\n );\n}\n","import { memo, useRef, useEffect, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useTreeInternals, useTreeSlice } from \"./tree-store\";\nimport type { TreeNodeProps, TreeNodeData, DropPosition } from \"./TreeNav.types\";\n\nconst EXT_COLORS: Record<string, string> = {\n ts: \"#3178c6\",\n tsx: \"#3178c6\",\n js: \"#f7df1e\",\n jsx: \"#f7df1e\",\n php: \"#777bb4\",\n html: \"#e34c26\",\n htm: \"#e34c26\",\n css: \"#264de4\",\n json: \"#a1a1aa\",\n md: \"#71717a\",\n yaml: \"#cb171e\",\n yml: \"#cb171e\",\n};\n\nfunction FileIcon({ ext }: { ext?: string }) {\n const color = (ext && EXT_COLORS[ext.toLowerCase()]) || \"#71717a\";\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M4 1h5.5L13 4.5V14a1 1 0 01-1 1H4a1 1 0 01-1-1V2a1 1 0 011-1z\" stroke={color} strokeWidth=\"1.2\" />\n <path d=\"M9 1v4h4\" stroke={color} strokeWidth=\"1.2\" />\n </svg>\n );\n}\n\nfunction FolderIcon({ open }: { open: boolean }) {\n if (open) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M1.5 3.5a1 1 0 011-1h3l1.5 1.5H13a1 1 0 011 1V5H2.5V3.5z\" fill=\"#fbbf24\" />\n <path d=\"M1 6h13l-1.5 7.5H2.5L1 6z\" fill=\"#fbbf24\" opacity=\"0.7\" />\n </svg>\n );\n }\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M1.5 3a1 1 0 011-1h3l1.5 1.5H13a1 1 0 011 1v8a1 1 0 01-1 1H2.5a1 1 0 01-1-1V3z\" fill=\"#fbbf24\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\"shrink-0 transition-transform duration-150\", open && \"rotate-90\")}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction isDescendantOf(\n nodes: TreeNodeData[],\n ancestorId: string,\n targetId: string,\n): boolean {\n function findNode(haystack: TreeNodeData[], id: string): TreeNodeData | undefined {\n for (const n of haystack) {\n if (n.id === id) return n;\n if (n.children) {\n const found = findNode(n.children, id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n function hasDescendant(node: TreeNodeData, id: string): boolean {\n if (!node.children) return false;\n for (const child of node.children) {\n if (child.id === id) return true;\n if (hasDescendant(child, id)) return true;\n }\n return false;\n }\n\n const ancestor = findNode(nodes, ancestorId);\n return ancestor ? hasDescendant(ancestor, targetId) : false;\n}\n\nfunction computeDropPosition(\n e: React.DragEvent,\n isFolder: boolean,\n): DropPosition {\n const rect = e.currentTarget.getBoundingClientRect();\n const offsetY = e.clientY - rect.top;\n const third = rect.height / 3;\n\n if (offsetY < third) return \"before\";\n if (offsetY > third * 2) return \"after\";\n return isFolder ? \"inside\" : \"after\";\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n\n/**\n * One row (and, when nested, its expanded children).\n *\n * Reads what changes on a click — selection, expansion, drag — as per-row slices\n * of a store, so a click re-renders only the rows whose slice changed. It used to\n * read one context holding all of it, so every click re-rendered every row:\n * 175-267 ms per click on a 5,000-node tree. `memo` keeps a parent's re-render\n * from reaching rows whose `node` and `depth` did not change.\n */\nfunction TreeNodeImpl({ node, depth }: TreeNodeProps) {\n const {\n store, nodes, select, toggle, expandNode, setDragState, contextMenu, moveNode, externalDrop,\n indentSize, showIcons, draggable, dragCursor, acceptExternalDrops, flat,\n } = useTreeInternals();\n\n const isFolder = node.type === \"folder\" || (node.children && node.children.length > 0);\n const isExpanded = useTreeSlice((s) => s.expanded.has(node.id));\n const isSelected = useTreeSlice((s) => s.selectedId === node.id);\n const isDragging = useTreeSlice((s) => s.dragState.draggedNodeId === node.id);\n const dropPosition = useTreeSlice((s) =>\n s.dragState.dropTargetId === node.id ? s.dragState.dropPosition : null,\n );\n const isDropTarget = dropPosition !== null;\n const paddingLeft = depth * indentSize + 4;\n\n // Auto-expand timer for folders during drag\n const autoExpandTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearAutoExpand = useCallback(() => {\n if (autoExpandTimer.current) {\n clearTimeout(autoExpandTimer.current);\n autoExpandTimer.current = null;\n }\n }, []);\n\n useEffect(() => clearAutoExpand, [clearAutoExpand]);\n\n // ---------------------------------------------------------------------------\n // Click handlers\n // ---------------------------------------------------------------------------\n\n const handleClick = () => {\n if (node.disabled) return;\n if (isFolder) {\n toggle(node.id);\n }\n select(node);\n };\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (contextMenu) {\n e.preventDefault();\n contextMenu(e, node);\n }\n };\n\n // ---------------------------------------------------------------------------\n // Drag source handlers\n // ---------------------------------------------------------------------------\n\n const handleDragStart = useCallback((e: React.DragEvent) => {\n e.dataTransfer.setData(\"text/plain\", node.id);\n e.dataTransfer.effectAllowed = \"move\";\n // Set state async so the browser captures the element for the drag ghost first\n requestAnimationFrame(() => {\n setDragState({ draggedNodeId: node.id, dropTargetId: null, dropPosition: null });\n });\n }, [node.id, setDragState]);\n\n const handleDragEnd = useCallback(() => {\n clearAutoExpand();\n setDragState({ draggedNodeId: null, dropTargetId: null, dropPosition: null });\n }, [clearAutoExpand, setDragState]);\n\n // ---------------------------------------------------------------------------\n // Drop target handlers (on outer div). Drag state is read from the store when\n // the event fires, so a row does not re-render as a drag moves elsewhere.\n // ---------------------------------------------------------------------------\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n const { dragState } = store.get();\n const isExternalDrag = !dragState.draggedNodeId;\n if (isExternalDrag) {\n // External drop accepted only when host opted in.\n if (!acceptExternalDrops) return;\n } else {\n const sourceId = dragState.draggedNodeId!;\n if (sourceId === node.id) return;\n if (isDescendantOf(nodes, sourceId, node.id)) return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = isExternalDrag ? \"copy\" : \"move\";\n\n const position = computeDropPosition(e, !!isFolder);\n\n // Auto-expand collapsed folders when hovering \"inside\"\n if (isFolder && !store.get().expanded.has(node.id) && position === \"inside\") {\n if (!autoExpandTimer.current) {\n autoExpandTimer.current = setTimeout(() => {\n expandNode(node.id);\n autoExpandTimer.current = null;\n }, 500);\n }\n } else {\n clearAutoExpand();\n }\n\n if (dragState.dropTargetId !== node.id || dragState.dropPosition !== position) {\n setDragState({ draggedNodeId: dragState.draggedNodeId, dropTargetId: node.id, dropPosition: position });\n }\n }, [store, acceptExternalDrops, node.id, isFolder, nodes, setDragState, expandNode, clearAutoExpand]);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n clearAutoExpand();\n const { dragState } = store.get();\n if (dragState.dropTargetId === node.id) {\n setDragState({ ...dragState, dropTargetId: null, dropPosition: null });\n }\n }\n }, [store, node.id, setDragState, clearAutoExpand]);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearAutoExpand();\n\n const { dragState } = store.get();\n const sourceId = dragState.draggedNodeId;\n const position = dragState.dropPosition ?? computeDropPosition(e, !!isFolder);\n\n if (sourceId) {\n // Internal node move.\n if (sourceId === node.id) return;\n if (isDescendantOf(nodes, sourceId, node.id)) return;\n moveNode?.(sourceId, node.id, position);\n } else if (acceptExternalDrops) {\n // External drop — files, items from other components, etc.\n externalDrop?.(e, node, position);\n }\n\n setDragState({ draggedNodeId: null, dropTargetId: null, dropPosition: null });\n }, [store, node, isFolder, nodes, moveNode, acceptExternalDrops, externalDrop, setDragState, clearAutoExpand]);\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n const canDrag = draggable && !node.disabled;\n const dropEnabled = draggable || acceptExternalDrops;\n\n return (\n <div\n data-react-fancy-tree-node=\"\"\n onDragOver={dropEnabled ? handleDragOver : undefined}\n onDragLeave={dropEnabled ? handleDragLeave : undefined}\n onDrop={dropEnabled ? handleDrop : undefined}\n >\n {/* Before drop indicator */}\n {isDropTarget && dropPosition === \"before\" && (\n <div\n data-react-fancy-tree-drop-indicator=\"before\"\n className=\"pointer-events-none h-0.5 rounded-full bg-blue-500\"\n style={{ marginLeft: paddingLeft }}\n />\n )}\n\n <button\n type=\"button\"\n draggable={canDrag}\n onDragStart={canDrag ? handleDragStart : undefined}\n onDragEnd={canDrag ? handleDragEnd : undefined}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n disabled={node.disabled}\n className={cn(\n \"flex w-full items-center gap-1 rounded-md py-0.5 text-left text-[13px] transition-colors\",\n isSelected\n ? \"bg-blue-500/15 text-blue-600 dark:text-blue-400\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n node.disabled && \"pointer-events-none opacity-40\",\n isDragging && \"opacity-50\",\n // Grab affordance. By default (`dragCursor=\"none\"`) the row keeps its\n // normal click cursor on hover — no open-hand \"move me\" cursor before\n // any drag — and only shows the closed-hand `grabbing` cursor while a\n // drag is actually underway (mousedown/drag). `dragCursor=\"grab\"` opts\n // back into the always-on grab cursor for whole-row drag handles (#14).\n canDrag &&\n (dragCursor === \"grab\" ? \"cursor-grab active:cursor-grabbing\" : \"active:cursor-grabbing\"),\n isDropTarget && dropPosition === \"inside\" && \"bg-blue-500/10 ring-1 ring-blue-500/30 ring-inset\",\n )}\n style={{ paddingLeft }}\n >\n {isFolder && <ChevronIcon open={isExpanded} />}\n {!isFolder && <span className=\"w-3.5 shrink-0\" />}\n {showIcons && (\n node.icon ?? (isFolder\n ? <FolderIcon open={isExpanded} />\n : <FileIcon ext={node.ext ?? node.label.split(\".\").pop()} />)\n )}\n <span className=\"truncate\">{node.label}</span>\n </button>\n\n {/* After drop indicator */}\n {isDropTarget && dropPosition === \"after\" && (\n <div\n data-react-fancy-tree-drop-indicator=\"after\"\n className=\"pointer-events-none h-0.5 rounded-full bg-blue-500\"\n style={{ marginLeft: paddingLeft }}\n />\n )}\n\n {/* A virtual list renders rows flat, so a row never renders its own children there. */}\n {!flat && isFolder && isExpanded && node.children && (\n <div data-react-fancy-tree-node-children=\"\">\n {node.children.map((child) => (\n <TreeNode key={child.id} node={child} depth={depth + 1} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport const TreeNode = memo(TreeNodeImpl);\n\nTreeNode.displayName = \"TreeNode\";\n","import { useMemo, useCallback, useLayoutEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { VirtualList } from \"../VirtualList\";\nimport { TreeNavContext } from \"./TreeNav.context\";\nimport { TreeNode } from \"./TreeNode\";\nimport { createTreeStore, TreeInternalsContext, type TreeInternals } from \"./tree-store\";\nimport type { TreeNavProps, TreeNodeData, DragState } from \"./TreeNav.types\";\n\nfunction collectFolderIds(nodes: TreeNodeData[]): string[] {\n const ids: string[] = [];\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n ids.push(node.id);\n ids.push(...collectFolderIds(node.children));\n }\n }\n return ids;\n}\n\nconst EMPTY_DRAG_STATE: DragState = {\n draggedNodeId: null,\n dropTargetId: null,\n dropPosition: null,\n};\n\ninterface FlatRow {\n id: string;\n node: TreeNodeData;\n depth: number;\n}\n\n/** The rows currently visible — every node, descending only into expanded folders. */\nfunction flattenVisible(nodes: TreeNodeData[], expanded: ReadonlySet<string>): FlatRow[] {\n const rows: FlatRow[] = [];\n const walk = (list: TreeNodeData[], depth: number) => {\n for (const node of list) {\n rows.push({ id: node.id, node, depth });\n const isFolder = node.type === \"folder\" || (node.children && node.children.length > 0);\n if (isFolder && node.children && expanded.has(node.id)) walk(node.children, depth + 1);\n }\n };\n walk(nodes, 0);\n return rows;\n}\n\nfunction TreeNavRoot({\n nodes,\n selectedId,\n onSelect,\n onNodeContextMenu,\n draggable = false,\n onNodeMove,\n acceptExternalDrops = false,\n onExternalDrop,\n expandedIds: controlledExpanded,\n defaultExpandedIds,\n onExpandedChange,\n defaultExpandAll = false,\n indentSize = 16,\n showIcons = true,\n dragCursor = \"none\",\n virtualize = false,\n height = 400,\n rowHeight = 26,\n className,\n}: TreeNavProps) {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(() => {\n if (defaultExpandedIds) return defaultExpandedIds;\n if (defaultExpandAll) return collectFolderIds(nodes);\n return [];\n });\n\n const isControlled = controlledExpanded !== undefined;\n const expandedIds = isControlled ? controlledExpanded : internalExpanded;\n // One Set per change, so a row's \"am I expanded?\" is a lookup, not a scan.\n const expanded = useMemo(() => new Set(expandedIds), [expandedIds]);\n\n const [dragState, setDragState] = useState<DragState>(EMPTY_DRAG_STATE);\n\n /*\n * The latest props and state, for handlers that must stay STABLE. A handler\n * whose identity changes on every click would change the context rows read,\n * and re-render every row — the exact cost this component is avoiding.\n */\n const latest = useRef({ expandedIds, isControlled, onExpandedChange, onSelect, onNodeContextMenu, onNodeMove, onExternalDrop });\n latest.current = { expandedIds, isControlled, onExpandedChange, onSelect, onNodeContextMenu, onNodeMove, onExternalDrop };\n\n const setExpanded = useCallback((next: string[]) => {\n if (!latest.current.isControlled) setInternalExpanded(next);\n latest.current.onExpandedChange?.(next);\n }, []);\n\n const toggle = useCallback(\n (id: string) => {\n const current = latest.current.expandedIds;\n setExpanded(current.includes(id) ? current.filter((v) => v !== id) : [...current, id]);\n },\n [setExpanded],\n );\n\n const expandNode = useCallback(\n (id: string) => {\n const current = latest.current.expandedIds;\n if (!current.includes(id)) setExpanded([...current, id]);\n },\n [setExpanded],\n );\n\n const select = useCallback((node: TreeNodeData) => latest.current.onSelect?.(node.id, node), []);\n const contextMenu = useCallback(\n (e: React.MouseEvent, node: TreeNodeData) => latest.current.onNodeContextMenu?.(e, node),\n [],\n );\n const moveNode = useCallback(\n (sourceId: string, targetId: string, position: Parameters<NonNullable<TreeNavProps[\"onNodeMove\"]>>[2]) =>\n latest.current.onNodeMove?.(sourceId, targetId, position),\n [],\n );\n const externalDrop = useCallback(\n (event: React.DragEvent, target: TreeNodeData, position: Parameters<NonNullable<TreeNavProps[\"onExternalDrop\"]>>[2]) =>\n latest.current.onExternalDrop?.(event, target, position),\n [],\n );\n\n // What rows subscribe to. Seeded with this render's values so the first paint\n // is right; kept current after each render that changes them.\n const [store] = useState(() => createTreeStore({ selectedId, expanded, dragState }));\n useLayoutEffect(() => {\n const current = store.get();\n if (current.selectedId !== selectedId || current.expanded !== expanded || current.dragState !== dragState) {\n store.set({ selectedId, expanded, dragState });\n }\n }, [store, selectedId, expanded, dragState]);\n\n const hasContextMenu = onNodeContextMenu !== undefined;\n const internals = useMemo<TreeInternals>(\n () => ({\n store,\n nodes,\n select,\n toggle,\n expandNode,\n setDragState,\n // Present only when the host gave one: a row then claims the right-click.\n contextMenu: hasContextMenu ? contextMenu : undefined,\n moveNode,\n externalDrop,\n indentSize,\n showIcons,\n draggable,\n dragCursor,\n acceptExternalDrops,\n flat: virtualize,\n }),\n [store, nodes, select, toggle, expandNode, hasContextMenu, contextMenu, moveNode, externalDrop,\n indentSize, showIcons, draggable, dragCursor, acceptExternalDrops, virtualize],\n );\n\n // Unchanged public context, still live for `useTreeNav()` callers. Rows no\n // longer read it, so its changing on a click re-renders only those callers.\n const ctx = useMemo(\n () => ({\n selectedId, onSelect, onNodeContextMenu, expandedIds, toggle, indentSize, showIcons,\n draggable, dragCursor, dragState, setDragState, onNodeMove, acceptExternalDrops, onExternalDrop, nodes, expandNode,\n }),\n [selectedId, onSelect, onNodeContextMenu, expandedIds, toggle, indentSize, showIcons,\n draggable, dragCursor, dragState, onNodeMove, acceptExternalDrops, onExternalDrop, nodes, expandNode],\n );\n\n const rows = useMemo(\n () => (virtualize ? flattenVisible(nodes, expanded) : []),\n [virtualize, nodes, expanded],\n );\n\n const handleDragEnd = useCallback(() => {\n setDragState(EMPTY_DRAG_STATE);\n }, []);\n\n const dropEnabled = draggable || acceptExternalDrops;\n\n return (\n <TreeNavContext.Provider value={ctx}>\n <TreeInternalsContext.Provider value={internals}>\n <nav\n data-react-fancy-tree-nav=\"\"\n data-react-fancy-tree-nav-virtual={virtualize ? \"\" : undefined}\n className={cn(\"flex flex-col gap-0.5 py-1 text-sm\", className)}\n onDragEnd={dropEnabled ? handleDragEnd : undefined}\n >\n {virtualize ? (\n <VirtualList\n items={rows}\n height={height}\n estimateRowHeight={rowHeight}\n renderRow={(row) => <TreeNode node={row.node} depth={row.depth} />}\n />\n ) : (\n nodes.map((node) => <TreeNode key={node.id} node={node} depth={0} />)\n )}\n </nav>\n </TreeInternalsContext.Provider>\n </TreeNavContext.Provider>\n );\n}\n\nTreeNavRoot.displayName = \"TreeNav\";\n\nexport const TreeNav = Object.assign(TreeNavRoot, {\n Node: TreeNode,\n});\n"]}
|
|
@@ -13,8 +13,8 @@ var IndexList = react.forwardRef(
|
|
|
13
13
|
"data-react-fancy-index-row": "",
|
|
14
14
|
className: "relative flex items-baseline gap-4 border-b border-zinc-200 py-3 last:border-b-0 dark:border-zinc-800",
|
|
15
15
|
children: [
|
|
16
|
-
item.num != null && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-num": "", className: "shrink-0 font-mono text-xs tabular-nums text-zinc-400 dark:text-zinc-500", children: item.num }),
|
|
17
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-title": "", className: "min-w-0 flex-1 truncate font-medium text-zinc-900 dark:text-zinc-100", children: item.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
16
|
+
item.num != null && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-num": "", className: "shrink-0 font-mono text-xs tabular-nums text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]", children: item.num }),
|
|
17
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-title": "", className: "min-w-0 flex-1 truncate font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]", children: item.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
18
18
|
Link,
|
|
19
19
|
{
|
|
20
20
|
href: item.href,
|
|
@@ -22,8 +22,8 @@ var IndexList = react.forwardRef(
|
|
|
22
22
|
children: item.title
|
|
23
23
|
}
|
|
24
24
|
) : item.title }),
|
|
25
|
-
item.meta != null && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-meta": "", className: "shrink-0 truncate text-sm text-zinc-500 dark:text-zinc-400", children: item.meta }),
|
|
26
|
-
item.value != null && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-value": "", className: "ml-auto shrink-0 font-mono text-xs tabular-nums text-zinc-500 dark:text-zinc-400", children: item.value })
|
|
25
|
+
item.meta != null && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-meta": "", className: "shrink-0 truncate text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]", children: item.meta }),
|
|
26
|
+
item.value != null && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-react-fancy-index-value": "", className: "ml-auto shrink-0 font-mono text-xs tabular-nums text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]", children: item.value })
|
|
27
27
|
]
|
|
28
28
|
},
|
|
29
29
|
item.id ?? i
|
|
@@ -33,5 +33,5 @@ var IndexList = react.forwardRef(
|
|
|
33
33
|
IndexList.displayName = "IndexList";
|
|
34
34
|
|
|
35
35
|
exports.IndexList = IndexList;
|
|
36
|
-
//# sourceMappingURL=chunk-
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
36
|
+
//# sourceMappingURL=chunk-AYBKPAI2.cjs.map
|
|
37
|
+
//# sourceMappingURL=chunk-AYBKPAI2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/IndexList/IndexList.tsx"],"names":["forwardRef","cn","jsxs","jsx"],"mappings":";;;;;;AAuBO,IAAM,SAAA,GAAYA,gBAAA;AAAA,EACvB,CAAC,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC/C,IAAA,MAAM,OAAO,MAAA,IAAU,GAAA;AAEvB,IAAA,sCACG,IAAA,EAAA,EAAG,GAAA,EAAU,6BAAA,EAA4B,EAAA,EAAG,WAAWC,oBAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EAC7F,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,qBAChBC,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,4BAAA,EAA2B,EAAA;AAAA,QAC3B,SAAA,EAAU,uGAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,GAAA,IAAO,wBACXC,cAAA,CAAC,MAAA,EAAA,EAAK,8BAA2B,EAAA,EAAG,SAAA,EAAU,
|
|
1
|
+
{"version":3,"sources":["../src/components/IndexList/IndexList.tsx"],"names":["forwardRef","cn","jsxs","jsx"],"mappings":";;;;;;AAuBO,IAAM,SAAA,GAAYA,gBAAA;AAAA,EACvB,CAAC,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC/C,IAAA,MAAM,OAAO,MAAA,IAAU,GAAA;AAEvB,IAAA,sCACG,IAAA,EAAA,EAAG,GAAA,EAAU,6BAAA,EAA4B,EAAA,EAAG,WAAWC,oBAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EAC7F,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,qBAChBC,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,4BAAA,EAA2B,EAAA;AAAA,QAC3B,SAAA,EAAU,uGAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,GAAA,IAAO,wBACXC,cAAA,CAAC,MAAA,EAAA,EAAK,8BAA2B,EAAA,EAAG,SAAA,EAAU,yKAAA,EAC3C,QAAA,EAAA,IAAA,CAAK,GAAA,EACR,CAAA;AAAA,yCAGD,MAAA,EAAA,EAAK,8BAAA,EAA6B,IAAG,SAAA,EAAU,yJAAA,EAC7C,eAAK,IAAA,mBACJA,cAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,SAAA,EAAU,8EAAA;AAAA,cAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,WACR,GAEA,KAAK,KAAA,EAET,CAAA;AAAA,UAEC,IAAA,CAAK,IAAA,IAAQ,IAAA,oBACZA,cAAA,CAAC,MAAA,EAAA,EAAK,+BAA4B,EAAA,EAAG,SAAA,EAAU,2JAAA,EAA6J,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,UAGvN,IAAA,CAAK,KAAA,IAAS,IAAA,oBACbA,cAAA,CAAC,MAAA,EAAA,EAAK,gCAA6B,EAAA,EAAG,SAAA,EAAU,iLAAA,EAC7C,QAAA,EAAA,IAAA,CAAK,KAAA,EACR;AAAA;AAAA,OAAA;AAAA,MA9BG,KAAK,EAAA,IAAM;AAAA,KAiCnB,CAAA,EACH,CAAA;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-AYBKPAI2.cjs","sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { IndexListProps } from \"./IndexList.types\";\n\n/**\n * A flush-left numbered index — `num · title · meta · trailing value`, each row\n * optionally a single clickable target.\n *\n * Thirteen gallery styles build this, and the sandbox uses a `stretched-link`\n * treatment in twenty-four places.\n *\n * ## Exactly one anchor per row, by construction\n *\n * The row is `relative` and the title's `<a>` carries `after:absolute\n * after:inset-0`, so the anchor's own pseudo-element covers the row. The\n * alternative — wrapping the row in an `<a>` and putting more links inside —\n * produces nested anchors, which is issue #418: the browser silently\n * restructures that DOM, so the server HTML and the client tree disagree and\n * hydration blows up. A test asserts one anchor per row for that reason.\n *\n * The link text stays the title rather than becoming an `aria-label` on an\n * invisible overlay, so the accessible name is the thing you would say out loud.\n */\nexport const IndexList = forwardRef<HTMLOListElement, IndexListProps>(\n ({ items, linkAs, className, ...props }, ref) => {\n const Link = linkAs ?? \"a\";\n\n return (\n <ol ref={ref} data-react-fancy-index-list=\"\" className={cn(\"m-0 list-none p-0\", className)} {...props}>\n {items.map((item, i) => (\n <li\n key={item.id ?? i}\n data-react-fancy-index-row=\"\"\n className=\"relative flex items-baseline gap-4 border-b border-zinc-200 py-3 last:border-b-0 dark:border-zinc-800\"\n >\n {item.num != null && (\n <span data-react-fancy-index-num=\"\" className=\"shrink-0 font-mono text-xs tabular-nums text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\">\n {item.num}\n </span>\n )}\n\n <span data-react-fancy-index-title=\"\" className=\"min-w-0 flex-1 truncate font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">\n {item.href ? (\n <Link\n href={item.href}\n className=\"no-underline after:absolute after:inset-0 after:content-[''] hover:underline\"\n >\n {item.title}\n </Link>\n ) : (\n item.title\n )}\n </span>\n\n {item.meta != null && (\n <span data-react-fancy-index-meta=\"\" className=\"shrink-0 truncate text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{item.meta}</span>\n )}\n\n {item.value != null && (\n <span data-react-fancy-index-value=\"\" className=\"ml-auto shrink-0 font-mono text-xs tabular-nums text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {item.value}\n </span>\n )}\n </li>\n ))}\n </ol>\n );\n },\n);\n\nIndexList.displayName = \"IndexList\";\n"]}
|
|
@@ -76,15 +76,15 @@ var TimePicker = forwardRef(
|
|
|
76
76
|
}
|
|
77
77
|
} : void 0,
|
|
78
78
|
className: cn(
|
|
79
|
-
"text-sm font-medium tabular-nums text-zinc-900 dark:text-zinc-100",
|
|
80
|
-
interactive && "cursor-pointer rounded-md outline-none transition-colors hover:bg-zinc-100 focus-visible:ring-2 focus-visible:ring-blue-500/40 dark:hover:bg-zinc-800",
|
|
79
|
+
"text-sm font-medium tabular-nums text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]",
|
|
80
|
+
interactive && "cursor-pointer rounded-md outline-none transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] focus-visible:ring-2 focus-visible:ring-blue-500/40 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]",
|
|
81
81
|
className
|
|
82
82
|
),
|
|
83
83
|
children: formatted
|
|
84
84
|
}
|
|
85
85
|
);
|
|
86
86
|
}
|
|
87
|
-
const spinBtnClass = "flex h-7 w-full items-center justify-center rounded text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-600 dark:hover:bg-zinc-800 dark:hover:text-zinc-300 disabled:opacity-50";
|
|
87
|
+
const spinBtnClass = "flex h-7 w-full items-center justify-center rounded text-zinc-400 transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-600 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-300 disabled:opacity-50";
|
|
88
88
|
const displayClass = "flex h-10 w-12 items-center justify-center text-lg font-medium tabular-nums";
|
|
89
89
|
return /* @__PURE__ */ jsxs(
|
|
90
90
|
"div",
|
|
@@ -95,7 +95,7 @@ var TimePicker = forwardRef(
|
|
|
95
95
|
if (interactive && !e.currentTarget.contains(e.relatedTarget)) exitEdit();
|
|
96
96
|
},
|
|
97
97
|
className: cn(
|
|
98
|
-
"inline-flex items-center gap-1 rounded-lg border border-zinc-200 bg-white p-2 dark:border-zinc-700 dark:bg-zinc-900",
|
|
98
|
+
"inline-flex items-center gap-1 rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-2 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]",
|
|
99
99
|
disabled && "opacity-50",
|
|
100
100
|
className
|
|
101
101
|
),
|
|
@@ -117,7 +117,7 @@ var TimePicker = forwardRef(
|
|
|
117
117
|
type: "button",
|
|
118
118
|
onClick: toggleAmPm,
|
|
119
119
|
disabled,
|
|
120
|
-
className: "ml-1 rounded-lg bg-zinc-100 px-2 py-1 text-sm font-medium transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700",
|
|
120
|
+
className: "ml-1 rounded-lg bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-2 py-1 text-sm font-medium transition-colors hover:bg-zinc-200 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:bg-zinc-700",
|
|
121
121
|
children: isPM ? "PM" : "AM"
|
|
122
122
|
}
|
|
123
123
|
)
|
|
@@ -129,5 +129,5 @@ var TimePicker = forwardRef(
|
|
|
129
129
|
TimePicker.displayName = "TimePicker";
|
|
130
130
|
|
|
131
131
|
export { TimePicker };
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
132
|
+
//# sourceMappingURL=chunk-AZQXPI5S.js.map
|
|
133
|
+
//# sourceMappingURL=chunk-AZQXPI5S.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TimePicker/TimePicker.tsx"],"names":["TimePicker"],"mappings":"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","file":"chunk-OTCLBINT.js","sourcesContent":["import { forwardRef, useCallback } from \"react\";\nimport { ChevronUp, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { useFieldMode } from \"../inputs/mode/FieldMode.context\";\nimport { useInlineEdit } from \"../inputs/mode/useInlineEdit\";\nimport type { TimePickerProps } from \"./TimePicker.types\";\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, \"0\");\n}\n\nfunction parseTime(val: string): { hours: number; minutes: number } {\n const [h, m] = val.split(\":\").map(Number);\n return { hours: h || 0, minutes: m || 0 };\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n function TimePicker(\n {\n value: controlledValue,\n defaultValue = \"12:00\",\n onChange,\n format = \"12h\",\n minuteStep = 1,\n disabled = false,\n className,\n mode,\n },\n ref,\n ) {\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue,\n onChange,\n );\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n const { hours: h24, minutes } = parseTime(value);\n const isPM = h24 >= 12;\n const displayHour = format === \"12h\" ? (h24 % 12 || 12) : h24;\n\n // These four MUST stay above the view-mode early return below.\n //\n // They used to sit after it, which meant view mode ran three hooks and edit\n // mode ran seven. Clicking \"Click to edit\" flipped `showControl` and React\n // hit a different hook count on the very next render — the classic\n // desync, which surfaces as a crash from inside React naming none of this\n // code. Nothing caught it because no test ever crossed the boundary.\n const updateTime = useCallback(\n (hours: number, mins: number) => {\n setValue(`${pad(hours)}:${pad(mins)}`);\n },\n [setValue],\n );\n\n const changeHour = useCallback(\n (delta: number) => {\n const newHour = (h24 + delta + 24) % 24;\n updateTime(newHour, minutes);\n },\n [h24, minutes, updateTime],\n );\n\n const changeMinute = useCallback(\n (delta: number) => {\n const newMin = (minutes + delta + 60) % 60;\n updateTime(h24, newMin);\n },\n [h24, minutes, updateTime],\n );\n\n const toggleAmPm = useCallback(() => {\n updateTime((h24 + 12) % 24, minutes);\n }, [h24, minutes, updateTime]);\n\n if (!showControl) {\n const formatted =\n format === \"12h\"\n ? `${pad(displayHour)}:${pad(minutes)} ${isPM ? \"PM\" : \"AM\"}`\n : `${pad(displayHour)}:${pad(minutes)}`;\n return (\n <div\n data-react-fancy-time-picker=\"\"\n data-mode=\"view\"\n ref={ref}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n title={interactive ? \"Click to edit\" : undefined}\n onClick={interactive ? enterEdit : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n enterEdit();\n }\n }\n : undefined\n }\n className={cn(\n \"text-sm font-medium tabular-nums text-zinc-900 dark:text-zinc-100\",\n interactive &&\n \"cursor-pointer rounded-md outline-none transition-colors hover:bg-zinc-100 focus-visible:ring-2 focus-visible:ring-blue-500/40 dark:hover:bg-zinc-800\",\n className,\n )}\n >\n {formatted}\n </div>\n );\n }\n\n const spinBtnClass =\n \"flex h-7 w-full items-center justify-center rounded text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-600 dark:hover:bg-zinc-800 dark:hover:text-zinc-300 disabled:opacity-50\";\n const displayClass =\n \"flex h-10 w-12 items-center justify-center text-lg font-medium tabular-nums\";\n\n return (\n <div\n data-react-fancy-time-picker=\"\"\n ref={ref}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"inline-flex items-center gap-1 rounded-lg border border-zinc-200 bg-white p-2 dark:border-zinc-700 dark:bg-zinc-900\",\n disabled && \"opacity-50\",\n className,\n )}\n >\n {/* Hour column */}\n <div className=\"flex flex-col items-center\">\n <button type=\"button\" autoFocus={interactive} onClick={() => changeHour(1)} disabled={disabled} className={spinBtnClass} aria-label=\"Increase hour\">\n <ChevronUp size={14} />\n </button>\n <div className={displayClass}>{pad(displayHour)}</div>\n <button type=\"button\" onClick={() => changeHour(-1)} disabled={disabled} className={spinBtnClass} aria-label=\"Decrease hour\">\n <ChevronDown size={14} />\n </button>\n </div>\n\n <span className=\"text-lg text-zinc-400\">:</span>\n\n {/* Minute column */}\n <div className=\"flex flex-col items-center\">\n <button type=\"button\" onClick={() => changeMinute(minuteStep)} disabled={disabled} className={spinBtnClass} aria-label=\"Increase minute\">\n <ChevronUp size={14} />\n </button>\n <div className={displayClass}>{pad(minutes)}</div>\n <button type=\"button\" onClick={() => changeMinute(-minuteStep)} disabled={disabled} className={spinBtnClass} aria-label=\"Decrease minute\">\n <ChevronDown size={14} />\n </button>\n </div>\n\n {/* AM/PM toggle */}\n {format === \"12h\" && (\n <button\n type=\"button\"\n onClick={toggleAmPm}\n disabled={disabled}\n className=\"ml-1 rounded-lg bg-zinc-100 px-2 py-1 text-sm font-medium transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700\"\n >\n {isPM ? \"PM\" : \"AM\"}\n </button>\n )}\n </div>\n );\n },\n);\n\nTimePicker.displayName = \"TimePicker\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/TimePicker/TimePicker.tsx"],"names":["TimePicker"],"mappings":"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","file":"chunk-AZQXPI5S.js","sourcesContent":["import { forwardRef, useCallback } from \"react\";\nimport { ChevronUp, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { useFieldMode } from \"../inputs/mode/FieldMode.context\";\nimport { useInlineEdit } from \"../inputs/mode/useInlineEdit\";\nimport type { TimePickerProps } from \"./TimePicker.types\";\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, \"0\");\n}\n\nfunction parseTime(val: string): { hours: number; minutes: number } {\n const [h, m] = val.split(\":\").map(Number);\n return { hours: h || 0, minutes: m || 0 };\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n function TimePicker(\n {\n value: controlledValue,\n defaultValue = \"12:00\",\n onChange,\n format = \"12h\",\n minuteStep = 1,\n disabled = false,\n className,\n mode,\n },\n ref,\n ) {\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue,\n onChange,\n );\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n const { hours: h24, minutes } = parseTime(value);\n const isPM = h24 >= 12;\n const displayHour = format === \"12h\" ? (h24 % 12 || 12) : h24;\n\n // These four MUST stay above the view-mode early return below.\n //\n // They used to sit after it, which meant view mode ran three hooks and edit\n // mode ran seven. Clicking \"Click to edit\" flipped `showControl` and React\n // hit a different hook count on the very next render — the classic\n // desync, which surfaces as a crash from inside React naming none of this\n // code. Nothing caught it because no test ever crossed the boundary.\n const updateTime = useCallback(\n (hours: number, mins: number) => {\n setValue(`${pad(hours)}:${pad(mins)}`);\n },\n [setValue],\n );\n\n const changeHour = useCallback(\n (delta: number) => {\n const newHour = (h24 + delta + 24) % 24;\n updateTime(newHour, minutes);\n },\n [h24, minutes, updateTime],\n );\n\n const changeMinute = useCallback(\n (delta: number) => {\n const newMin = (minutes + delta + 60) % 60;\n updateTime(h24, newMin);\n },\n [h24, minutes, updateTime],\n );\n\n const toggleAmPm = useCallback(() => {\n updateTime((h24 + 12) % 24, minutes);\n }, [h24, minutes, updateTime]);\n\n if (!showControl) {\n const formatted =\n format === \"12h\"\n ? `${pad(displayHour)}:${pad(minutes)} ${isPM ? \"PM\" : \"AM\"}`\n : `${pad(displayHour)}:${pad(minutes)}`;\n return (\n <div\n data-react-fancy-time-picker=\"\"\n data-mode=\"view\"\n ref={ref}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n title={interactive ? \"Click to edit\" : undefined}\n onClick={interactive ? enterEdit : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n enterEdit();\n }\n }\n : undefined\n }\n className={cn(\n \"text-sm font-medium tabular-nums text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\",\n interactive &&\n \"cursor-pointer rounded-md outline-none transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] focus-visible:ring-2 focus-visible:ring-blue-500/40 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n className,\n )}\n >\n {formatted}\n </div>\n );\n }\n\n const spinBtnClass =\n \"flex h-7 w-full items-center justify-center rounded text-zinc-400 transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-600 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-300 disabled:opacity-50\";\n const displayClass =\n \"flex h-10 w-12 items-center justify-center text-lg font-medium tabular-nums\";\n\n return (\n <div\n data-react-fancy-time-picker=\"\"\n ref={ref}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n className={cn(\n \"inline-flex items-center gap-1 rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-2 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n disabled && \"opacity-50\",\n className,\n )}\n >\n {/* Hour column */}\n <div className=\"flex flex-col items-center\">\n <button type=\"button\" autoFocus={interactive} onClick={() => changeHour(1)} disabled={disabled} className={spinBtnClass} aria-label=\"Increase hour\">\n <ChevronUp size={14} />\n </button>\n <div className={displayClass}>{pad(displayHour)}</div>\n <button type=\"button\" onClick={() => changeHour(-1)} disabled={disabled} className={spinBtnClass} aria-label=\"Decrease hour\">\n <ChevronDown size={14} />\n </button>\n </div>\n\n <span className=\"text-lg text-zinc-400\">:</span>\n\n {/* Minute column */}\n <div className=\"flex flex-col items-center\">\n <button type=\"button\" onClick={() => changeMinute(minuteStep)} disabled={disabled} className={spinBtnClass} aria-label=\"Increase minute\">\n <ChevronUp size={14} />\n </button>\n <div className={displayClass}>{pad(minutes)}</div>\n <button type=\"button\" onClick={() => changeMinute(-minuteStep)} disabled={disabled} className={spinBtnClass} aria-label=\"Decrease minute\">\n <ChevronDown size={14} />\n </button>\n </div>\n\n {/* AM/PM toggle */}\n {format === \"12h\" && (\n <button\n type=\"button\"\n onClick={toggleAmPm}\n disabled={disabled}\n className=\"ml-1 rounded-lg bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-2 py-1 text-sm font-medium transition-colors hover:bg-zinc-200 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:bg-zinc-700\"\n >\n {isPM ? \"PM\" : \"AM\"}\n </button>\n )}\n </div>\n );\n },\n);\n\nTimePicker.displayName = \"TimePicker\";\n"]}
|
|
@@ -159,7 +159,7 @@ var Progress = react.forwardRef(
|
|
|
159
159
|
r: radius,
|
|
160
160
|
fill: "none",
|
|
161
161
|
strokeWidth,
|
|
162
|
-
className: chunkZU5Q77OT_cjs.cn("stroke-zinc-200 dark:stroke-zinc-700", trackClassName)
|
|
162
|
+
className: chunkZU5Q77OT_cjs.cn("stroke-[color:var(--fancy-border,var(--color-zinc-200))] dark:stroke-[color:var(--fancy-border-dark,var(--color-zinc-700))]", trackClassName)
|
|
163
163
|
}
|
|
164
164
|
),
|
|
165
165
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -218,7 +218,7 @@ var Progress = react.forwardRef(
|
|
|
218
218
|
"div",
|
|
219
219
|
{
|
|
220
220
|
className: chunkZU5Q77OT_cjs.cn(
|
|
221
|
-
"w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-700",
|
|
221
|
+
"w-full overflow-hidden rounded-full bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]",
|
|
222
222
|
barHeightClasses[named],
|
|
223
223
|
trackClassName
|
|
224
224
|
),
|
|
@@ -257,5 +257,5 @@ var Progress = react.forwardRef(
|
|
|
257
257
|
Progress.displayName = "Progress";
|
|
258
258
|
|
|
259
259
|
exports.Progress = Progress;
|
|
260
|
-
//# sourceMappingURL=chunk-
|
|
261
|
-
//# sourceMappingURL=chunk-
|
|
260
|
+
//# sourceMappingURL=chunk-B4YV2V7G.cjs.map
|
|
261
|
+
//# sourceMappingURL=chunk-B4YV2V7G.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Progress/Progress.colors.ts","../src/components/Progress/Progress.tsx"],"names":["forwardRef","jsxs","cn","jsx"],"mappings":"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","file":"chunk-RWOH2ADL.cjs","sourcesContent":["// AUTO-GENERATED by scripts/gen-progress-colors — do not edit by hand.\n// Literal Tailwind class strings for every color in the v4 palette so the\n// scanner can detect them in the published dist (template-built names are\n// invisible to Tailwind's JIT). Regenerate after changing the palette.\nimport type { Color } from \"../../utils/types\";\n\nexport const progressFill: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"bg-brand\",\n slate: \"bg-slate-500 dark:bg-slate-400\",\n gray: \"bg-gray-500 dark:bg-gray-400\",\n zinc: \"bg-zinc-500 dark:bg-zinc-400\",\n neutral: \"bg-neutral-500 dark:bg-neutral-400\",\n stone: \"bg-stone-500 dark:bg-stone-400\",\n red: \"bg-red-500 dark:bg-red-400\",\n orange: \"bg-orange-500 dark:bg-orange-400\",\n amber: \"bg-amber-500 dark:bg-amber-400\",\n yellow: \"bg-yellow-500 dark:bg-yellow-400\",\n lime: \"bg-lime-500 dark:bg-lime-400\",\n green: \"bg-green-500 dark:bg-green-400\",\n emerald: \"bg-emerald-500 dark:bg-emerald-400\",\n teal: \"bg-teal-500 dark:bg-teal-400\",\n cyan: \"bg-cyan-500 dark:bg-cyan-400\",\n sky: \"bg-sky-500 dark:bg-sky-400\",\n blue: \"bg-blue-500 dark:bg-blue-400\",\n indigo: \"bg-indigo-500 dark:bg-indigo-400\",\n violet: \"bg-violet-500 dark:bg-violet-400\",\n purple: \"bg-purple-500 dark:bg-purple-400\",\n fuchsia: \"bg-fuchsia-500 dark:bg-fuchsia-400\",\n pink: \"bg-pink-500 dark:bg-pink-400\",\n rose: \"bg-rose-500 dark:bg-rose-400\",\n};\n\nexport const progressStroke: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"stroke-brand\",\n slate: \"stroke-slate-500 dark:stroke-slate-400\",\n gray: \"stroke-gray-500 dark:stroke-gray-400\",\n zinc: \"stroke-zinc-500 dark:stroke-zinc-400\",\n neutral: \"stroke-neutral-500 dark:stroke-neutral-400\",\n stone: \"stroke-stone-500 dark:stroke-stone-400\",\n red: \"stroke-red-500 dark:stroke-red-400\",\n orange: \"stroke-orange-500 dark:stroke-orange-400\",\n amber: \"stroke-amber-500 dark:stroke-amber-400\",\n yellow: \"stroke-yellow-500 dark:stroke-yellow-400\",\n lime: \"stroke-lime-500 dark:stroke-lime-400\",\n green: \"stroke-green-500 dark:stroke-green-400\",\n emerald: \"stroke-emerald-500 dark:stroke-emerald-400\",\n teal: \"stroke-teal-500 dark:stroke-teal-400\",\n cyan: \"stroke-cyan-500 dark:stroke-cyan-400\",\n sky: \"stroke-sky-500 dark:stroke-sky-400\",\n blue: \"stroke-blue-500 dark:stroke-blue-400\",\n indigo: \"stroke-indigo-500 dark:stroke-indigo-400\",\n violet: \"stroke-violet-500 dark:stroke-violet-400\",\n purple: \"stroke-purple-500 dark:stroke-purple-400\",\n fuchsia: \"stroke-fuchsia-500 dark:stroke-fuchsia-400\",\n pink: \"stroke-pink-500 dark:stroke-pink-400\",\n rose: \"stroke-rose-500 dark:stroke-rose-400\",\n};\n\nexport const progressText: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"text-brand\",\n slate: \"text-slate-600 dark:text-slate-400\",\n gray: \"text-gray-600 dark:text-gray-400\",\n zinc: \"text-zinc-600 dark:text-zinc-400\",\n neutral: \"text-neutral-600 dark:text-neutral-400\",\n stone: \"text-stone-600 dark:text-stone-400\",\n red: \"text-red-600 dark:text-red-400\",\n orange: \"text-orange-600 dark:text-orange-400\",\n amber: \"text-amber-600 dark:text-amber-400\",\n yellow: \"text-yellow-600 dark:text-yellow-400\",\n lime: \"text-lime-600 dark:text-lime-400\",\n green: \"text-green-600 dark:text-green-400\",\n emerald: \"text-emerald-600 dark:text-emerald-400\",\n teal: \"text-teal-600 dark:text-teal-400\",\n cyan: \"text-cyan-600 dark:text-cyan-400\",\n sky: \"text-sky-600 dark:text-sky-400\",\n blue: \"text-blue-600 dark:text-blue-400\",\n indigo: \"text-indigo-600 dark:text-indigo-400\",\n violet: \"text-violet-600 dark:text-violet-400\",\n purple: \"text-purple-600 dark:text-purple-400\",\n fuchsia: \"text-fuchsia-600 dark:text-fuchsia-400\",\n pink: \"text-pink-600 dark:text-pink-400\",\n rose: \"text-rose-600 dark:text-rose-400\",\n};\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ProgressProps } from \"./Progress.types\";\nimport { progressFill, progressStroke, progressText } from \"./Progress.colors\";\n\ntype NamedSize = \"sm\" | \"md\" | \"lg\";\n\nconst barHeightClasses: Record<NamedSize, string> = {\n sm: \"h-1.5\",\n md: \"h-2.5\",\n lg: \"h-4\",\n};\n\nconst circularSizeMap: Record<NamedSize, number> = {\n sm: 32,\n md: 48,\n lg: 64,\n};\n\nconst namedStrokeWidth: Record<NamedSize, number> = { sm: 3, md: 4, lg: 5 };\n\nconst textSizeClasses: Record<NamedSize, string> = {\n sm: \"text-[8px]\",\n md: \"text-[10px]\",\n lg: \"text-xs\",\n};\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n value = 0,\n max = 100,\n variant = \"bar\",\n size = \"md\",\n strokeWidth: strokeWidthProp,\n color = \"blue\",\n indeterminate = false,\n showValue = false,\n className,\n trackClassName,\n fillClassName,\n ...rest\n },\n ref,\n ) => {\n // Class lookups need a named key; a pixel size sizes the ring itself and\n // leaves the type/bar scales on their default.\n const named: NamedSize = typeof size === \"number\" ? \"md\" : size;\n\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n\n if (variant === \"circular\") {\n const pixelSize = typeof size === \"number\" ? size : null;\n const diameter = pixelSize ?? circularSizeMap[named];\n // Scale with the circle when not told otherwise: a 5px stroke on a 152px\n // ring reads as a hairline, so a fixed default makes large sizes look\n // broken out of the box. The named scale keeps its exact old values.\n const strokeWidth =\n strokeWidthProp ??\n (pixelSize === null ? namedStrokeWidth[named] : Math.max(3, Math.round(diameter * 0.075)));\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = indeterminate ? circumference * 0.75 : circumference - (percentage / 100) * circumference;\n\n return (\n <div\n ref={ref}\n {...rest}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n data-react-fancy-progress=\"\"\n // The named diameters live in styles.css keyed off this, so they work\n // without the consumer's Tailwind generating anything — and, being\n // layered, a className utility still beats them.\n data-size={pixelSize === null ? named : undefined}\n className={cn(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n style={pixelSize === null ? undefined : { width: pixelSize, height: pixelSize }}\n >\n <svg\n // viewBox + 100% so the geometry follows the box instead of being\n // baked in: the ring now scales with whatever sizes the wrapper,\n // including a `className` override of the named scale.\n viewBox={`0 0 ${diameter} ${diameter}`}\n width=\"100%\"\n height=\"100%\"\n className={cn(indeterminate && \"animate-spin\")}\n >\n <circle\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n className={cn(\"stroke-zinc-200 dark:stroke-zinc-700\", trackClassName)}\n />\n <circle\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n className={cn(\n progressStroke[color],\n \"transition-[stroke-dashoffset] duration-300\",\n fillClassName,\n )}\n style={{ transform: \"rotate(-90deg)\", transformOrigin: \"center\" }}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n className={cn(\n \"absolute font-medium\",\n progressText[color],\n textSizeClasses[named],\n )}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n {...rest}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n data-react-fancy-progress=\"\"\n className={cn(\"relative w-full\", className)}\n >\n <div\n className={cn(\n \"w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-700\",\n barHeightClasses[named],\n trackClassName,\n )}\n >\n <div\n className={cn(\n \"h-full rounded-full transition-[width] duration-300\",\n progressFill[color],\n indeterminate && \"animate-pulse w-full\",\n fillClassName,\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n {showValue && !indeterminate && (\n <span\n className={cn(\n \"mt-1 block text-right text-xs font-medium\",\n progressText[color],\n )}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n },\n);\n\nProgress.displayName = \"Progress\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Progress/Progress.colors.ts","../src/components/Progress/Progress.tsx"],"names":["forwardRef","jsxs","cn","jsx"],"mappings":"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","file":"chunk-B4YV2V7G.cjs","sourcesContent":["// AUTO-GENERATED by scripts/gen-progress-colors — do not edit by hand.\n// Literal Tailwind class strings for every color in the v4 palette so the\n// scanner can detect them in the published dist (template-built names are\n// invisible to Tailwind's JIT). Regenerate after changing the palette.\nimport type { Color } from \"../../utils/types\";\n\nexport const progressFill: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"bg-brand\",\n slate: \"bg-slate-500 dark:bg-slate-400\",\n gray: \"bg-gray-500 dark:bg-gray-400\",\n zinc: \"bg-zinc-500 dark:bg-zinc-400\",\n neutral: \"bg-neutral-500 dark:bg-neutral-400\",\n stone: \"bg-stone-500 dark:bg-stone-400\",\n red: \"bg-red-500 dark:bg-red-400\",\n orange: \"bg-orange-500 dark:bg-orange-400\",\n amber: \"bg-amber-500 dark:bg-amber-400\",\n yellow: \"bg-yellow-500 dark:bg-yellow-400\",\n lime: \"bg-lime-500 dark:bg-lime-400\",\n green: \"bg-green-500 dark:bg-green-400\",\n emerald: \"bg-emerald-500 dark:bg-emerald-400\",\n teal: \"bg-teal-500 dark:bg-teal-400\",\n cyan: \"bg-cyan-500 dark:bg-cyan-400\",\n sky: \"bg-sky-500 dark:bg-sky-400\",\n blue: \"bg-blue-500 dark:bg-blue-400\",\n indigo: \"bg-indigo-500 dark:bg-indigo-400\",\n violet: \"bg-violet-500 dark:bg-violet-400\",\n purple: \"bg-purple-500 dark:bg-purple-400\",\n fuchsia: \"bg-fuchsia-500 dark:bg-fuchsia-400\",\n pink: \"bg-pink-500 dark:bg-pink-400\",\n rose: \"bg-rose-500 dark:bg-rose-400\",\n};\n\nexport const progressStroke: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"stroke-brand\",\n slate: \"stroke-slate-500 dark:stroke-slate-400\",\n gray: \"stroke-gray-500 dark:stroke-gray-400\",\n zinc: \"stroke-zinc-500 dark:stroke-zinc-400\",\n neutral: \"stroke-neutral-500 dark:stroke-neutral-400\",\n stone: \"stroke-stone-500 dark:stroke-stone-400\",\n red: \"stroke-red-500 dark:stroke-red-400\",\n orange: \"stroke-orange-500 dark:stroke-orange-400\",\n amber: \"stroke-amber-500 dark:stroke-amber-400\",\n yellow: \"stroke-yellow-500 dark:stroke-yellow-400\",\n lime: \"stroke-lime-500 dark:stroke-lime-400\",\n green: \"stroke-green-500 dark:stroke-green-400\",\n emerald: \"stroke-emerald-500 dark:stroke-emerald-400\",\n teal: \"stroke-teal-500 dark:stroke-teal-400\",\n cyan: \"stroke-cyan-500 dark:stroke-cyan-400\",\n sky: \"stroke-sky-500 dark:stroke-sky-400\",\n blue: \"stroke-blue-500 dark:stroke-blue-400\",\n indigo: \"stroke-indigo-500 dark:stroke-indigo-400\",\n violet: \"stroke-violet-500 dark:stroke-violet-400\",\n purple: \"stroke-purple-500 dark:stroke-purple-400\",\n fuchsia: \"stroke-fuchsia-500 dark:stroke-fuchsia-400\",\n pink: \"stroke-pink-500 dark:stroke-pink-400\",\n rose: \"stroke-rose-500 dark:stroke-rose-400\",\n};\n\nexport const progressText: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"text-brand\",\n slate: \"text-slate-600 dark:text-slate-400\",\n gray: \"text-gray-600 dark:text-gray-400\",\n zinc: \"text-zinc-600 dark:text-zinc-400\",\n neutral: \"text-neutral-600 dark:text-neutral-400\",\n stone: \"text-stone-600 dark:text-stone-400\",\n red: \"text-red-600 dark:text-red-400\",\n orange: \"text-orange-600 dark:text-orange-400\",\n amber: \"text-amber-600 dark:text-amber-400\",\n yellow: \"text-yellow-600 dark:text-yellow-400\",\n lime: \"text-lime-600 dark:text-lime-400\",\n green: \"text-green-600 dark:text-green-400\",\n emerald: \"text-emerald-600 dark:text-emerald-400\",\n teal: \"text-teal-600 dark:text-teal-400\",\n cyan: \"text-cyan-600 dark:text-cyan-400\",\n sky: \"text-sky-600 dark:text-sky-400\",\n blue: \"text-blue-600 dark:text-blue-400\",\n indigo: \"text-indigo-600 dark:text-indigo-400\",\n violet: \"text-violet-600 dark:text-violet-400\",\n purple: \"text-purple-600 dark:text-purple-400\",\n fuchsia: \"text-fuchsia-600 dark:text-fuchsia-400\",\n pink: \"text-pink-600 dark:text-pink-400\",\n rose: \"text-rose-600 dark:text-rose-400\",\n};\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ProgressProps } from \"./Progress.types\";\nimport { progressFill, progressStroke, progressText } from \"./Progress.colors\";\n\ntype NamedSize = \"sm\" | \"md\" | \"lg\";\n\nconst barHeightClasses: Record<NamedSize, string> = {\n sm: \"h-1.5\",\n md: \"h-2.5\",\n lg: \"h-4\",\n};\n\nconst circularSizeMap: Record<NamedSize, number> = {\n sm: 32,\n md: 48,\n lg: 64,\n};\n\nconst namedStrokeWidth: Record<NamedSize, number> = { sm: 3, md: 4, lg: 5 };\n\nconst textSizeClasses: Record<NamedSize, string> = {\n sm: \"text-[8px]\",\n md: \"text-[10px]\",\n lg: \"text-xs\",\n};\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n value = 0,\n max = 100,\n variant = \"bar\",\n size = \"md\",\n strokeWidth: strokeWidthProp,\n color = \"blue\",\n indeterminate = false,\n showValue = false,\n className,\n trackClassName,\n fillClassName,\n ...rest\n },\n ref,\n ) => {\n // Class lookups need a named key; a pixel size sizes the ring itself and\n // leaves the type/bar scales on their default.\n const named: NamedSize = typeof size === \"number\" ? \"md\" : size;\n\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n\n if (variant === \"circular\") {\n const pixelSize = typeof size === \"number\" ? size : null;\n const diameter = pixelSize ?? circularSizeMap[named];\n // Scale with the circle when not told otherwise: a 5px stroke on a 152px\n // ring reads as a hairline, so a fixed default makes large sizes look\n // broken out of the box. The named scale keeps its exact old values.\n const strokeWidth =\n strokeWidthProp ??\n (pixelSize === null ? namedStrokeWidth[named] : Math.max(3, Math.round(diameter * 0.075)));\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = indeterminate ? circumference * 0.75 : circumference - (percentage / 100) * circumference;\n\n return (\n <div\n ref={ref}\n {...rest}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n data-react-fancy-progress=\"\"\n // The named diameters live in styles.css keyed off this, so they work\n // without the consumer's Tailwind generating anything — and, being\n // layered, a className utility still beats them.\n data-size={pixelSize === null ? named : undefined}\n className={cn(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n style={pixelSize === null ? undefined : { width: pixelSize, height: pixelSize }}\n >\n <svg\n // viewBox + 100% so the geometry follows the box instead of being\n // baked in: the ring now scales with whatever sizes the wrapper,\n // including a `className` override of the named scale.\n viewBox={`0 0 ${diameter} ${diameter}`}\n width=\"100%\"\n height=\"100%\"\n className={cn(indeterminate && \"animate-spin\")}\n >\n <circle\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n className={cn(\"stroke-[color:var(--fancy-border,var(--color-zinc-200))] dark:stroke-[color:var(--fancy-border-dark,var(--color-zinc-700))]\", trackClassName)}\n />\n <circle\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n className={cn(\n progressStroke[color],\n \"transition-[stroke-dashoffset] duration-300\",\n fillClassName,\n )}\n style={{ transform: \"rotate(-90deg)\", transformOrigin: \"center\" }}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n className={cn(\n \"absolute font-medium\",\n progressText[color],\n textSizeClasses[named],\n )}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n {...rest}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n data-react-fancy-progress=\"\"\n className={cn(\"relative w-full\", className)}\n >\n <div\n className={cn(\n \"w-full overflow-hidden rounded-full bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n barHeightClasses[named],\n trackClassName,\n )}\n >\n <div\n className={cn(\n \"h-full rounded-full transition-[width] duration-300\",\n progressFill[color],\n indeterminate && \"animate-pulse w-full\",\n fillClassName,\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n {showValue && !indeterminate && (\n <span\n className={cn(\n \"mt-1 block text-right text-xs font-medium\",\n progressText[color],\n )}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n },\n);\n\nProgress.displayName = \"Progress\";\n"]}
|