@particle-academy/react-fancy 5.20.0 → 5.22.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/dist/accordion-panel.cjs +8 -8
- package/dist/accordion-panel.js +2 -2
- package/dist/accordion.cjs +4 -4
- package/dist/accordion.js +2 -2
- package/dist/audio-viewer.cjs +3 -3
- package/dist/audio-viewer.js +2 -2
- package/dist/autocomplete.cjs +3 -3
- package/dist/autocomplete.js +2 -2
- package/dist/avatar.cjs +3 -3
- package/dist/avatar.js +2 -2
- package/dist/badge.cjs +3 -3
- package/dist/badge.js +2 -2
- package/dist/brand.cjs +4 -4
- package/dist/brand.js +2 -2
- package/dist/breadcrumbs.cjs +3 -3
- package/dist/breadcrumbs.js +2 -2
- package/dist/button.cjs +5 -5
- package/dist/button.js +3 -3
- package/dist/calendar.cjs +3 -3
- package/dist/calendar.js +2 -2
- package/dist/callout.cjs +3 -3
- package/dist/callout.js +2 -2
- package/dist/card.cjs +7 -7
- package/dist/card.js +2 -2
- package/dist/carousel.cjs +8 -8
- package/dist/carousel.js +2 -2
- package/dist/chart.cjs +3 -3
- package/dist/chart.js +2 -2
- package/dist/chat-drawer.cjs +4 -4
- package/dist/chat-drawer.js +3 -3
- 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-ZLCVKYHY.js → chunk-25ZOOUFG.js} +3 -3
- package/dist/{chunk-ZLCVKYHY.js.map → chunk-25ZOOUFG.js.map} +1 -1
- package/dist/{chunk-UCYAHLGM.js → chunk-2LBRS6Z4.js} +3 -3
- package/dist/{chunk-UCYAHLGM.js.map → chunk-2LBRS6Z4.js.map} +1 -1
- package/dist/{chunk-E4LFD44D.js → chunk-35EN5AYE.js} +3 -3
- package/dist/{chunk-E4LFD44D.js.map → chunk-35EN5AYE.js.map} +1 -1
- package/dist/{chunk-AOOBRPTE.cjs → chunk-3EIB7RPD.cjs} +8 -8
- package/dist/{chunk-AOOBRPTE.cjs.map → chunk-3EIB7RPD.cjs.map} +1 -1
- package/dist/{chunk-GKGL7F36.js → chunk-3FG5K7A7.js} +3 -3
- package/dist/{chunk-GKGL7F36.js.map → chunk-3FG5K7A7.js.map} +1 -1
- package/dist/{chunk-WNIP443K.js → chunk-3LM47BME.js} +4 -4
- package/dist/{chunk-WNIP443K.js.map → chunk-3LM47BME.js.map} +1 -1
- package/dist/{chunk-NH7NRRII.js → chunk-4K4ECIKK.js} +3 -3
- package/dist/{chunk-NH7NRRII.js.map → chunk-4K4ECIKK.js.map} +1 -1
- package/dist/{chunk-KC6QBKKB.cjs → chunk-524TOKU3.cjs} +8 -8
- package/dist/{chunk-KC6QBKKB.cjs.map → chunk-524TOKU3.cjs.map} +1 -1
- package/dist/{chunk-6OSHAP6L.cjs → chunk-5CXJ5Z4C.cjs} +6 -6
- package/dist/{chunk-6OSHAP6L.cjs.map → chunk-5CXJ5Z4C.cjs.map} +1 -1
- package/dist/{chunk-AY3JABE3.cjs → chunk-5DSMOURR.cjs} +4 -4
- package/dist/{chunk-AY3JABE3.cjs.map → chunk-5DSMOURR.cjs.map} +1 -1
- package/dist/{chunk-VQ4M25U3.cjs → chunk-5P3PISAX.cjs} +4 -4
- package/dist/{chunk-VQ4M25U3.cjs.map → chunk-5P3PISAX.cjs.map} +1 -1
- package/dist/{chunk-P7AJAN62.js → chunk-5RLP77KK.js} +3 -3
- package/dist/{chunk-P7AJAN62.js.map → chunk-5RLP77KK.js.map} +1 -1
- package/dist/{chunk-FCAV5IFW.js → chunk-6GWOB2Z4.js} +3 -3
- package/dist/{chunk-FCAV5IFW.js.map → chunk-6GWOB2Z4.js.map} +1 -1
- package/dist/{chunk-JCOBDDHF.js → chunk-6KXAFP2T.js} +3 -3
- package/dist/{chunk-JCOBDDHF.js.map → chunk-6KXAFP2T.js.map} +1 -1
- package/dist/{chunk-E7PHL3TD.cjs → chunk-6LOV75CN.cjs} +5 -5
- package/dist/{chunk-E7PHL3TD.cjs.map → chunk-6LOV75CN.cjs.map} +1 -1
- package/dist/{chunk-CEEEENPW.js → chunk-6PF5ENWM.js} +3 -3
- package/dist/{chunk-CEEEENPW.js.map → chunk-6PF5ENWM.js.map} +1 -1
- package/dist/{chunk-2PELJ4VA.cjs → chunk-6SO2ZX3J.cjs} +15 -15
- package/dist/{chunk-2PELJ4VA.cjs.map → chunk-6SO2ZX3J.cjs.map} +1 -1
- package/dist/{chunk-AVR5P4GA.cjs → chunk-7B3HK6TY.cjs} +11 -11
- package/dist/{chunk-AVR5P4GA.cjs.map → chunk-7B3HK6TY.cjs.map} +1 -1
- package/dist/{chunk-YHXE274U.js → chunk-7CN7IHES.js} +3 -3
- package/dist/{chunk-YHXE274U.js.map → chunk-7CN7IHES.js.map} +1 -1
- package/dist/{chunk-7NLKXBZ2.cjs → chunk-7EZBMGEE.cjs} +8 -8
- package/dist/{chunk-7NLKXBZ2.cjs.map → chunk-7EZBMGEE.cjs.map} +1 -1
- package/dist/{chunk-ZFVSEO5Z.cjs → chunk-7HMEDY24.cjs} +6 -6
- package/dist/{chunk-ZFVSEO5Z.cjs.map → chunk-7HMEDY24.cjs.map} +1 -1
- package/dist/{chunk-YXC7QHNT.cjs → chunk-7VLRHXLQ.cjs} +6 -6
- package/dist/{chunk-YXC7QHNT.cjs.map → chunk-7VLRHXLQ.cjs.map} +1 -1
- package/dist/{chunk-GIDW3SUE.cjs → chunk-7Y2AENZD.cjs} +6 -6
- package/dist/{chunk-GIDW3SUE.cjs.map → chunk-7Y2AENZD.cjs.map} +1 -1
- package/dist/{chunk-ANEX75DF.cjs → chunk-AASQ6L6X.cjs} +4 -4
- package/dist/{chunk-ANEX75DF.cjs.map → chunk-AASQ6L6X.cjs.map} +1 -1
- package/dist/{chunk-ZWOEKDNI.js → chunk-AT5OG5N4.js} +3 -3
- package/dist/{chunk-ZWOEKDNI.js.map → chunk-AT5OG5N4.js.map} +1 -1
- package/dist/{chunk-TVRCOKJQ.cjs → chunk-ATJSHM6J.cjs} +4 -4
- package/dist/{chunk-TVRCOKJQ.cjs.map → chunk-ATJSHM6J.cjs.map} +1 -1
- package/dist/{chunk-A22T6DKO.cjs → chunk-AVCDGSXV.cjs} +13 -13
- package/dist/{chunk-A22T6DKO.cjs.map → chunk-AVCDGSXV.cjs.map} +1 -1
- package/dist/{chunk-MDUSUJWY.cjs → chunk-AVU4JOYM.cjs} +4 -4
- package/dist/{chunk-MDUSUJWY.cjs.map → chunk-AVU4JOYM.cjs.map} +1 -1
- package/dist/{chunk-AR2IBCX7.cjs → chunk-BZP4LOO5.cjs} +53 -53
- package/dist/{chunk-AR2IBCX7.cjs.map → chunk-BZP4LOO5.cjs.map} +1 -1
- package/dist/{chunk-HAOYXGGJ.js → chunk-CCG2L5EH.js} +3 -3
- package/dist/{chunk-HAOYXGGJ.js.map → chunk-CCG2L5EH.js.map} +1 -1
- package/dist/{chunk-Y5V5GBN4.cjs → chunk-CJVNO5YM.cjs} +6 -6
- package/dist/{chunk-Y5V5GBN4.cjs.map → chunk-CJVNO5YM.cjs.map} +1 -1
- package/dist/{chunk-PVWPZYTR.js → chunk-CK6LRROH.js} +3 -3
- package/dist/{chunk-PVWPZYTR.js.map → chunk-CK6LRROH.js.map} +1 -1
- package/dist/{chunk-LNWO23PU.cjs → chunk-COH45MGW.cjs} +7 -7
- package/dist/{chunk-LNWO23PU.cjs.map → chunk-COH45MGW.cjs.map} +1 -1
- package/dist/{chunk-EVXDG2XN.js → chunk-CRR3AMJ4.js} +3 -3
- package/dist/{chunk-EVXDG2XN.js.map → chunk-CRR3AMJ4.js.map} +1 -1
- package/dist/{chunk-BWT2L6XP.js → chunk-D7G53WOZ.js} +6 -6
- package/dist/{chunk-BWT2L6XP.js.map → chunk-D7G53WOZ.js.map} +1 -1
- package/dist/{chunk-JYKZKSZJ.js → chunk-DIHH75KD.js} +5 -5
- package/dist/{chunk-JYKZKSZJ.js.map → chunk-DIHH75KD.js.map} +1 -1
- package/dist/{chunk-ZT36VWIA.js → chunk-DKKU3VVJ.js} +5 -5
- package/dist/{chunk-ZT36VWIA.js.map → chunk-DKKU3VVJ.js.map} +1 -1
- package/dist/{chunk-PITWDKKY.js → chunk-EWRP6KCY.js} +3 -3
- package/dist/{chunk-PITWDKKY.js.map → chunk-EWRP6KCY.js.map} +1 -1
- package/dist/{chunk-HTKDPFLJ.cjs → chunk-F2VJEXN2.cjs} +16 -16
- package/dist/{chunk-HTKDPFLJ.cjs.map → chunk-F2VJEXN2.cjs.map} +1 -1
- package/dist/{chunk-DV4IMAQW.js → chunk-FA4IG5RB.js} +3 -3
- package/dist/{chunk-DV4IMAQW.js.map → chunk-FA4IG5RB.js.map} +1 -1
- package/dist/{chunk-FVV76TRF.js → chunk-FBWUXSKH.js} +3 -3
- package/dist/{chunk-FVV76TRF.js.map → chunk-FBWUXSKH.js.map} +1 -1
- package/dist/{chunk-XMBOZ73D.js → chunk-FCSR2WVS.js} +3 -3
- package/dist/{chunk-XMBOZ73D.js.map → chunk-FCSR2WVS.js.map} +1 -1
- package/dist/{chunk-3DJGPNUI.js → chunk-FERMW3YE.js} +3 -3
- package/dist/{chunk-3DJGPNUI.js.map → chunk-FERMW3YE.js.map} +1 -1
- package/dist/{chunk-M24NCWBU.js → chunk-FFWAY7F5.js} +3 -3
- package/dist/{chunk-M24NCWBU.js.map → chunk-FFWAY7F5.js.map} +1 -1
- package/dist/{chunk-SYXLPCQP.cjs → chunk-FQSSVOVQ.cjs} +4 -4
- package/dist/{chunk-SYXLPCQP.cjs.map → chunk-FQSSVOVQ.cjs.map} +1 -1
- package/dist/chunk-FWCREAIT.js +121 -0
- package/dist/chunk-FWCREAIT.js.map +1 -0
- package/dist/{chunk-RNHIDZLE.cjs → chunk-G7227RTY.cjs} +7 -7
- package/dist/{chunk-RNHIDZLE.cjs.map → chunk-G7227RTY.cjs.map} +1 -1
- package/dist/{chunk-KUKYJZIU.cjs → chunk-GBGJWAXZ.cjs} +8 -8
- package/dist/{chunk-KUKYJZIU.cjs.map → chunk-GBGJWAXZ.cjs.map} +1 -1
- package/dist/{chunk-IE4CM2SN.js → chunk-GIIGXAT4.js} +5 -5
- package/dist/{chunk-IE4CM2SN.js.map → chunk-GIIGXAT4.js.map} +1 -1
- package/dist/{chunk-SKI33QNW.js → chunk-GKEWT3DW.js} +3 -3
- package/dist/{chunk-SKI33QNW.js.map → chunk-GKEWT3DW.js.map} +1 -1
- package/dist/{chunk-X5VZRFQD.cjs → chunk-H5OPZEVQ.cjs} +5 -5
- package/dist/{chunk-X5VZRFQD.cjs.map → chunk-H5OPZEVQ.cjs.map} +1 -1
- package/dist/{chunk-CS4GQXYY.js → chunk-H6F6ZWAG.js} +3 -3
- package/dist/{chunk-CS4GQXYY.js.map → chunk-H6F6ZWAG.js.map} +1 -1
- package/dist/{chunk-T6IXZZBQ.cjs → chunk-HE3JJXIL.cjs} +4 -4
- package/dist/{chunk-T6IXZZBQ.cjs.map → chunk-HE3JJXIL.cjs.map} +1 -1
- package/dist/{chunk-ARSQY4P7.cjs → chunk-HIN6PHSE.cjs} +7 -7
- package/dist/{chunk-ARSQY4P7.cjs.map → chunk-HIN6PHSE.cjs.map} +1 -1
- package/dist/{chunk-WT72KW5M.cjs → chunk-HIOMHITU.cjs} +19 -19
- package/dist/{chunk-WT72KW5M.cjs.map → chunk-HIOMHITU.cjs.map} +1 -1
- package/dist/{chunk-B4JLRS5E.js → chunk-HOP3XXPV.js} +3 -3
- package/dist/{chunk-B4JLRS5E.js.map → chunk-HOP3XXPV.js.map} +1 -1
- package/dist/chunk-HPNIEYSJ.cjs +131 -0
- package/dist/chunk-HPNIEYSJ.cjs.map +1 -0
- package/dist/{chunk-CQWPMRYS.js → chunk-HYNED2OA.js} +5 -5
- package/dist/{chunk-CQWPMRYS.js.map → chunk-HYNED2OA.js.map} +1 -1
- package/dist/{chunk-IF5LOWUL.js → chunk-I3RPL3GE.js} +3 -3
- package/dist/{chunk-IF5LOWUL.js.map → chunk-I3RPL3GE.js.map} +1 -1
- package/dist/{chunk-6Y2QO7YV.cjs → chunk-ICT477LK.cjs} +8 -8
- package/dist/{chunk-6Y2QO7YV.cjs.map → chunk-ICT477LK.cjs.map} +1 -1
- package/dist/{chunk-VBZZ4CMM.cjs → chunk-ISPCXIJZ.cjs} +5 -5
- package/dist/{chunk-VBZZ4CMM.cjs.map → chunk-ISPCXIJZ.cjs.map} +1 -1
- package/dist/{chunk-M7EEQPE7.js → chunk-IVRYSSM7.js} +3 -3
- package/dist/{chunk-M7EEQPE7.js.map → chunk-IVRYSSM7.js.map} +1 -1
- package/dist/{chunk-D4WM23Y4.js → chunk-IWXP2YUP.js} +3 -3
- package/dist/{chunk-D4WM23Y4.js.map → chunk-IWXP2YUP.js.map} +1 -1
- package/dist/{chunk-6GC5DMOK.cjs → chunk-JFOORUUD.cjs} +8 -8
- package/dist/{chunk-6GC5DMOK.cjs.map → chunk-JFOORUUD.cjs.map} +1 -1
- package/dist/{chunk-MZIU27UY.js → chunk-JICO4LTT.js} +3 -3
- package/dist/{chunk-MZIU27UY.js.map → chunk-JICO4LTT.js.map} +1 -1
- package/dist/{chunk-ZNTEM7F2.js → chunk-JJBOKZWV.js} +3 -3
- package/dist/{chunk-ZNTEM7F2.js.map → chunk-JJBOKZWV.js.map} +1 -1
- package/dist/{chunk-FO4GCX67.cjs → chunk-JM2H642B.cjs} +9 -9
- package/dist/{chunk-FO4GCX67.cjs.map → chunk-JM2H642B.cjs.map} +1 -1
- package/dist/{chunk-7ZDIQOFH.cjs → chunk-JV6RDIA6.cjs} +13 -13
- package/dist/{chunk-7ZDIQOFH.cjs.map → chunk-JV6RDIA6.cjs.map} +1 -1
- package/dist/{chunk-K7JGOQJG.js → chunk-KKWNKBKR.js} +3 -3
- package/dist/{chunk-K7JGOQJG.js.map → chunk-KKWNKBKR.js.map} +1 -1
- package/dist/{chunk-QWSTG5MF.js → chunk-KO2HLNBB.js} +7 -7
- package/dist/{chunk-QWSTG5MF.js.map → chunk-KO2HLNBB.js.map} +1 -1
- package/dist/{chunk-5QL7XT3N.js → chunk-KQQA7JBC.js} +4 -4
- package/dist/{chunk-5QL7XT3N.js.map → chunk-KQQA7JBC.js.map} +1 -1
- package/dist/{chunk-DWRMC2FN.cjs → chunk-LMPPAQKP.cjs} +7 -7
- package/dist/{chunk-DWRMC2FN.cjs.map → chunk-LMPPAQKP.cjs.map} +1 -1
- package/dist/{chunk-JU5W65N3.cjs → chunk-LNFMT2CE.cjs} +18 -18
- package/dist/{chunk-JU5W65N3.cjs.map → chunk-LNFMT2CE.cjs.map} +1 -1
- package/dist/{chunk-M2S5GCXY.cjs → chunk-LY7PZEF4.cjs} +11 -11
- package/dist/{chunk-M2S5GCXY.cjs.map → chunk-LY7PZEF4.cjs.map} +1 -1
- package/dist/{chunk-AKIUDPJU.js → chunk-LYHQ4VBR.js} +3 -3
- package/dist/{chunk-AKIUDPJU.js.map → chunk-LYHQ4VBR.js.map} +1 -1
- package/dist/{chunk-MKFWFZVX.js → chunk-M6AONUIX.js} +3 -3
- package/dist/{chunk-MKFWFZVX.js.map → chunk-M6AONUIX.js.map} +1 -1
- package/dist/{chunk-KKYP5R3G.cjs → chunk-MCCE5RDB.cjs} +12 -12
- package/dist/{chunk-KKYP5R3G.cjs.map → chunk-MCCE5RDB.cjs.map} +1 -1
- package/dist/{chunk-X36ZGYTF.js → chunk-MEUR7C6X.js} +5 -5
- package/dist/{chunk-X36ZGYTF.js.map → chunk-MEUR7C6X.js.map} +1 -1
- package/dist/{chunk-RM4QWJS3.js → chunk-MIUSTEIV.js} +3 -3
- package/dist/{chunk-RM4QWJS3.js.map → chunk-MIUSTEIV.js.map} +1 -1
- package/dist/chunk-MMW2JGKZ.js +29 -0
- package/dist/chunk-MMW2JGKZ.js.map +1 -0
- package/dist/{chunk-RID7CYGD.js → chunk-MRRKDRZU.js} +5 -5
- package/dist/{chunk-RID7CYGD.js.map → chunk-MRRKDRZU.js.map} +1 -1
- package/dist/{chunk-A3CNYKT3.js → chunk-MUCXXYDN.js} +3 -3
- package/dist/{chunk-A3CNYKT3.js.map → chunk-MUCXXYDN.js.map} +1 -1
- package/dist/{chunk-CZZH45GQ.cjs → chunk-N4VHOTMK.cjs} +9 -9
- package/dist/{chunk-CZZH45GQ.cjs.map → chunk-N4VHOTMK.cjs.map} +1 -1
- package/dist/{chunk-6FBFE66M.cjs → chunk-N6K2CTSU.cjs} +5 -5
- package/dist/{chunk-6FBFE66M.cjs.map → chunk-N6K2CTSU.cjs.map} +1 -1
- package/dist/{chunk-DJ3YM72H.cjs → chunk-ND5D7GJB.cjs} +4 -4
- package/dist/{chunk-DJ3YM72H.cjs.map → chunk-ND5D7GJB.cjs.map} +1 -1
- package/dist/{chunk-YCZN4FWI.js → chunk-NDUEPDNS.js} +3 -3
- package/dist/{chunk-YCZN4FWI.js.map → chunk-NDUEPDNS.js.map} +1 -1
- package/dist/{chunk-6FYMMQ3G.cjs → chunk-NHTSQRAF.cjs} +10 -10
- package/dist/{chunk-6FYMMQ3G.cjs.map → chunk-NHTSQRAF.cjs.map} +1 -1
- package/dist/{chunk-PPLR2DNC.cjs → chunk-NP7SU2DF.cjs} +5 -5
- package/dist/{chunk-PPLR2DNC.cjs.map → chunk-NP7SU2DF.cjs.map} +1 -1
- package/dist/{chunk-POZZY3D5.cjs → chunk-NR346SKH.cjs} +5 -5
- package/dist/{chunk-POZZY3D5.cjs.map → chunk-NR346SKH.cjs.map} +1 -1
- package/dist/{chunk-TECFGOV2.js → chunk-NTMHP7FS.js} +3 -3
- package/dist/{chunk-TECFGOV2.js.map → chunk-NTMHP7FS.js.map} +1 -1
- package/dist/{chunk-7XDKIZQE.js → chunk-NUPQJ5SJ.js} +3 -3
- package/dist/{chunk-7XDKIZQE.js.map → chunk-NUPQJ5SJ.js.map} +1 -1
- package/dist/{chunk-M645OITZ.js → chunk-NYDR2VSA.js} +3 -3
- package/dist/{chunk-M645OITZ.js.map → chunk-NYDR2VSA.js.map} +1 -1
- package/dist/{chunk-3SQ34IQC.cjs → chunk-NZFJ4XMJ.cjs} +10 -10
- package/dist/{chunk-3SQ34IQC.cjs.map → chunk-NZFJ4XMJ.cjs.map} +1 -1
- package/dist/{chunk-YT42J4VQ.js → chunk-O6E2WC3J.js} +3 -3
- package/dist/{chunk-YT42J4VQ.js.map → chunk-O6E2WC3J.js.map} +1 -1
- package/dist/{chunk-5LHG7HEY.cjs → chunk-O6GTY53I.cjs} +4 -4
- package/dist/{chunk-5LHG7HEY.cjs.map → chunk-O6GTY53I.cjs.map} +1 -1
- package/dist/{chunk-ESKVRRVA.js → chunk-OFHO5SXA.js} +3 -3
- package/dist/{chunk-ESKVRRVA.js.map → chunk-OFHO5SXA.js.map} +1 -1
- package/dist/{chunk-SCPHSBBU.cjs → chunk-OGEE23SP.cjs} +4 -4
- package/dist/{chunk-SCPHSBBU.cjs.map → chunk-OGEE23SP.cjs.map} +1 -1
- package/dist/{chunk-RR7BWUVP.cjs → chunk-OS2QC3NE.cjs} +6 -6
- package/dist/{chunk-RR7BWUVP.cjs.map → chunk-OS2QC3NE.cjs.map} +1 -1
- package/dist/{chunk-F6SCZCJE.js → chunk-P7F32HIH.js} +3 -3
- package/dist/{chunk-F6SCZCJE.js.map → chunk-P7F32HIH.js.map} +1 -1
- package/dist/{chunk-WXADO5TS.cjs → chunk-PAESRUUH.cjs} +10 -10
- package/dist/{chunk-WXADO5TS.cjs.map → chunk-PAESRUUH.cjs.map} +1 -1
- package/dist/{chunk-PH3WGR5P.cjs → chunk-PFEFKLUV.cjs} +8 -8
- package/dist/{chunk-PH3WGR5P.cjs.map → chunk-PFEFKLUV.cjs.map} +1 -1
- package/dist/{chunk-5HOQ2PHR.cjs → chunk-PV5WDIGM.cjs} +9 -9
- package/dist/{chunk-5HOQ2PHR.cjs.map → chunk-PV5WDIGM.cjs.map} +1 -1
- package/dist/{chunk-DDRHCFUE.js → chunk-PVQBXEV3.js} +6 -6
- package/dist/{chunk-DDRHCFUE.js.map → chunk-PVQBXEV3.js.map} +1 -1
- package/dist/{chunk-D7NAXQ2N.js → chunk-PWEZCMIY.js} +3 -3
- package/dist/{chunk-D7NAXQ2N.js.map → chunk-PWEZCMIY.js.map} +1 -1
- package/dist/{chunk-LYFUPTLG.cjs → chunk-PWLBHNOA.cjs} +14 -14
- package/dist/{chunk-LYFUPTLG.cjs.map → chunk-PWLBHNOA.cjs.map} +1 -1
- package/dist/{chunk-BPBI3WWQ.cjs → chunk-QAFAPHAF.cjs} +8 -8
- package/dist/{chunk-BPBI3WWQ.cjs.map → chunk-QAFAPHAF.cjs.map} +1 -1
- package/dist/{chunk-AC7M7JDO.cjs → chunk-QDVDBUJM.cjs} +6 -6
- package/dist/{chunk-AC7M7JDO.cjs.map → chunk-QDVDBUJM.cjs.map} +1 -1
- package/dist/{chunk-2ICXWLKS.js → chunk-QJKWBU3I.js} +3 -3
- package/dist/{chunk-2ICXWLKS.js.map → chunk-QJKWBU3I.js.map} +1 -1
- package/dist/{chunk-JXIBUIEY.cjs → chunk-QKFOJKVE.cjs} +4 -4
- package/dist/{chunk-JXIBUIEY.cjs.map → chunk-QKFOJKVE.cjs.map} +1 -1
- package/dist/{chunk-NNSNANNY.cjs → chunk-QOGKO6JH.cjs} +5 -5
- package/dist/{chunk-NNSNANNY.cjs.map → chunk-QOGKO6JH.cjs.map} +1 -1
- package/dist/{chunk-B3HVWXIQ.cjs → chunk-QSFTWIUH.cjs} +8 -8
- package/dist/{chunk-B3HVWXIQ.cjs.map → chunk-QSFTWIUH.cjs.map} +1 -1
- package/dist/{chunk-3MHVFEIP.cjs → chunk-QW66UHWO.cjs} +4 -4
- package/dist/{chunk-3MHVFEIP.cjs.map → chunk-QW66UHWO.cjs.map} +1 -1
- package/dist/{chunk-IGYIMS6J.js → chunk-RA2VOQ46.js} +3 -3
- package/dist/{chunk-IGYIMS6J.js.map → chunk-RA2VOQ46.js.map} +1 -1
- package/dist/{chunk-HG6XUJOT.js → chunk-RFLPFQFF.js} +3 -3
- package/dist/{chunk-HG6XUJOT.js.map → chunk-RFLPFQFF.js.map} +1 -1
- package/dist/{chunk-KICZTIZL.cjs → chunk-RKG2Q2HT.cjs} +7 -7
- package/dist/{chunk-KICZTIZL.cjs.map → chunk-RKG2Q2HT.cjs.map} +1 -1
- package/dist/{chunk-PRJSEZ5F.cjs → chunk-RN2EW7CK.cjs} +12 -12
- package/dist/{chunk-PRJSEZ5F.cjs.map → chunk-RN2EW7CK.cjs.map} +1 -1
- package/dist/{chunk-EERAEPQO.cjs → chunk-RPVCMW64.cjs} +12 -12
- package/dist/{chunk-EERAEPQO.cjs.map → chunk-RPVCMW64.cjs.map} +1 -1
- package/dist/{chunk-ATFXU6R6.js → chunk-RSLZL6VP.js} +3 -3
- package/dist/{chunk-ATFXU6R6.js.map → chunk-RSLZL6VP.js.map} +1 -1
- package/dist/{chunk-HNITJ2UR.js → chunk-SAF5642F.js} +4 -4
- package/dist/{chunk-HNITJ2UR.js.map → chunk-SAF5642F.js.map} +1 -1
- package/dist/{chunk-4UA45GB4.js → chunk-SG3L4322.js} +6 -6
- package/dist/{chunk-4UA45GB4.js.map → chunk-SG3L4322.js.map} +1 -1
- package/dist/{chunk-PG3ILQIW.js → chunk-SLJD25VV.js} +3 -3
- package/dist/{chunk-PG3ILQIW.js.map → chunk-SLJD25VV.js.map} +1 -1
- package/dist/{chunk-EQGY3QDJ.cjs → chunk-SO4NNG26.cjs} +7 -7
- package/dist/{chunk-EQGY3QDJ.cjs.map → chunk-SO4NNG26.cjs.map} +1 -1
- package/dist/{chunk-DZD2RJVD.js → chunk-SOYORSLZ.js} +3 -3
- package/dist/{chunk-DZD2RJVD.js.map → chunk-SOYORSLZ.js.map} +1 -1
- package/dist/{chunk-MGZE2QEM.cjs → chunk-SUCBR6L5.cjs} +6 -6
- package/dist/{chunk-MGZE2QEM.cjs.map → chunk-SUCBR6L5.cjs.map} +1 -1
- package/dist/{chunk-NLJGNPNN.js → chunk-SWBF2BXA.js} +3 -3
- package/dist/{chunk-NLJGNPNN.js.map → chunk-SWBF2BXA.js.map} +1 -1
- package/dist/{chunk-6H6OYLMJ.js → chunk-SX4CSO6C.js} +3 -3
- package/dist/{chunk-6H6OYLMJ.js.map → chunk-SX4CSO6C.js.map} +1 -1
- package/dist/{chunk-ORFHF6PT.cjs → chunk-T5OCRKPD.cjs} +6 -6
- package/dist/{chunk-ORFHF6PT.cjs.map → chunk-T5OCRKPD.cjs.map} +1 -1
- package/dist/{chunk-AGDW5ENV.js → chunk-TB35HNBE.js} +3 -3
- package/dist/{chunk-AGDW5ENV.js.map → chunk-TB35HNBE.js.map} +1 -1
- package/dist/{chunk-RES2GOQQ.js → chunk-TDDWWAM5.js} +3 -3
- package/dist/{chunk-RES2GOQQ.js.map → chunk-TDDWWAM5.js.map} +1 -1
- package/dist/{chunk-6L6LI2RL.cjs → chunk-TGNQ5Y6F.cjs} +4 -4
- package/dist/{chunk-6L6LI2RL.cjs.map → chunk-TGNQ5Y6F.cjs.map} +1 -1
- package/dist/{chunk-I462NM2A.cjs → chunk-TH7VP4CL.cjs} +5 -5
- package/dist/{chunk-I462NM2A.cjs.map → chunk-TH7VP4CL.cjs.map} +1 -1
- package/dist/{chunk-PYRMH34E.js → chunk-TJJ63UJV.js} +3 -3
- package/dist/{chunk-PYRMH34E.js.map → chunk-TJJ63UJV.js.map} +1 -1
- package/dist/{chunk-I25RP6AM.js → chunk-TQFQUNV3.js} +3 -3
- package/dist/{chunk-I25RP6AM.js.map → chunk-TQFQUNV3.js.map} +1 -1
- package/dist/{chunk-RMFLRBUC.cjs → chunk-TWSPVX6X.cjs} +8 -8
- package/dist/{chunk-RMFLRBUC.cjs.map → chunk-TWSPVX6X.cjs.map} +1 -1
- package/dist/{chunk-UPVWN72I.cjs → chunk-TXCAIL5X.cjs} +7 -7
- package/dist/{chunk-UPVWN72I.cjs.map → chunk-TXCAIL5X.cjs.map} +1 -1
- package/dist/{chunk-LZL2KD4P.cjs → chunk-TZHK3LEW.cjs} +9 -9
- package/dist/{chunk-LZL2KD4P.cjs.map → chunk-TZHK3LEW.cjs.map} +1 -1
- package/dist/{chunk-74ZN5CNE.js → chunk-UIJR26YW.js} +3 -3
- package/dist/{chunk-74ZN5CNE.js.map → chunk-UIJR26YW.js.map} +1 -1
- package/dist/{chunk-CFBK5RIZ.js → chunk-UKUNWGL5.js} +3 -3
- package/dist/{chunk-CFBK5RIZ.js.map → chunk-UKUNWGL5.js.map} +1 -1
- package/dist/{chunk-IGU5YXRV.cjs → chunk-UMJ3JMDT.cjs} +9 -9
- package/dist/{chunk-IGU5YXRV.cjs.map → chunk-UMJ3JMDT.cjs.map} +1 -1
- package/dist/{chunk-JHEM6IGT.cjs → chunk-V35A6B7A.cjs} +4 -4
- package/dist/{chunk-JHEM6IGT.cjs.map → chunk-V35A6B7A.cjs.map} +1 -1
- package/dist/{chunk-PRDWJ4AR.js → chunk-VFIVF5YO.js} +3 -3
- package/dist/{chunk-PRDWJ4AR.js.map → chunk-VFIVF5YO.js.map} +1 -1
- package/dist/{chunk-Y6DK4CGY.js → chunk-VGAOLXTK.js} +14 -14
- package/dist/{chunk-Y6DK4CGY.js.map → chunk-VGAOLXTK.js.map} +1 -1
- package/dist/{chunk-IJ4I55QQ.cjs → chunk-VGBZWDMM.cjs} +4 -4
- package/dist/{chunk-IJ4I55QQ.cjs.map → chunk-VGBZWDMM.cjs.map} +1 -1
- package/dist/{chunk-DBJWHDWP.js → chunk-VKMPVFQK.js} +3 -3
- package/dist/{chunk-DBJWHDWP.js.map → chunk-VKMPVFQK.js.map} +1 -1
- package/dist/{chunk-5OC6DUYT.js → chunk-VME5743O.js} +3 -3
- package/dist/{chunk-5OC6DUYT.js.map → chunk-VME5743O.js.map} +1 -1
- package/dist/{chunk-YVDAXYHP.js → chunk-VOGI7GX3.js} +3 -3
- package/dist/{chunk-YVDAXYHP.js.map → chunk-VOGI7GX3.js.map} +1 -1
- package/dist/{chunk-R55HE5C5.js → chunk-VVL5LMLW.js} +3 -3
- package/dist/{chunk-R55HE5C5.js.map → chunk-VVL5LMLW.js.map} +1 -1
- package/dist/{chunk-2CYRAKWI.cjs → chunk-VW6WUXFR.cjs} +11 -11
- package/dist/{chunk-2CYRAKWI.cjs.map → chunk-VW6WUXFR.cjs.map} +1 -1
- package/dist/{chunk-6RYZ2MOE.js → chunk-VYQI4R6S.js} +4 -4
- package/dist/{chunk-6RYZ2MOE.js.map → chunk-VYQI4R6S.js.map} +1 -1
- package/dist/{chunk-HBFVOHQC.cjs → chunk-WCWZADR2.cjs} +7 -7
- package/dist/{chunk-HBFVOHQC.cjs.map → chunk-WCWZADR2.cjs.map} +1 -1
- package/dist/{chunk-IXHZVFHX.cjs → chunk-WKAEAGMT.cjs} +4 -4
- package/dist/{chunk-IXHZVFHX.cjs.map → chunk-WKAEAGMT.cjs.map} +1 -1
- package/dist/{chunk-PBXYU4EV.cjs → chunk-WKNVZUWZ.cjs} +5 -5
- package/dist/{chunk-PBXYU4EV.cjs.map → chunk-WKNVZUWZ.cjs.map} +1 -1
- package/dist/{chunk-6BW5BQMN.cjs → chunk-XKDW6B7X.cjs} +4 -4
- package/dist/{chunk-6BW5BQMN.cjs.map → chunk-XKDW6B7X.cjs.map} +1 -1
- package/dist/{chunk-23CLGUMT.cjs → chunk-XLFGWNW4.cjs} +4 -4
- package/dist/{chunk-23CLGUMT.cjs.map → chunk-XLFGWNW4.cjs.map} +1 -1
- package/dist/{chunk-PJ4TQ6YO.js → chunk-XLVYW5LK.js} +5 -5
- package/dist/{chunk-PJ4TQ6YO.js.map → chunk-XLVYW5LK.js.map} +1 -1
- package/dist/{chunk-MPDLL4X3.cjs → chunk-XQNYFXBY.cjs} +8 -8
- package/dist/{chunk-MPDLL4X3.cjs.map → chunk-XQNYFXBY.cjs.map} +1 -1
- package/dist/{chunk-I2JXK25I.js → chunk-XXBW4EUO.js} +3 -3
- package/dist/{chunk-I2JXK25I.js.map → chunk-XXBW4EUO.js.map} +1 -1
- package/dist/{chunk-RA3P63XW.cjs → chunk-Y3T7WMT6.cjs} +4 -4
- package/dist/{chunk-RA3P63XW.cjs.map → chunk-Y3T7WMT6.cjs.map} +1 -1
- package/dist/{chunk-LPQVXTKV.js → chunk-Y4UPKJN5.js} +3 -3
- package/dist/{chunk-LPQVXTKV.js.map → chunk-Y4UPKJN5.js.map} +1 -1
- package/dist/{chunk-47TFRODY.cjs → chunk-YAJYIRQL.cjs} +4 -4
- package/dist/{chunk-47TFRODY.cjs.map → chunk-YAJYIRQL.cjs.map} +1 -1
- package/dist/{chunk-DTPGJNOI.js → chunk-YCV43A7D.js} +3 -3
- package/dist/{chunk-DTPGJNOI.js.map → chunk-YCV43A7D.js.map} +1 -1
- package/dist/{chunk-YT6N44Z3.js → chunk-YF2EHBTV.js} +3 -3
- package/dist/{chunk-YT6N44Z3.js.map → chunk-YF2EHBTV.js.map} +1 -1
- package/dist/{chunk-4CM2VMLR.js → chunk-YLDYGT5O.js} +3 -3
- package/dist/{chunk-4CM2VMLR.js.map → chunk-YLDYGT5O.js.map} +1 -1
- package/dist/{chunk-JIYP73OJ.js → chunk-YQJWD53X.js} +3 -3
- package/dist/{chunk-JIYP73OJ.js.map → chunk-YQJWD53X.js.map} +1 -1
- package/dist/{chunk-O4MKOSU2.js → chunk-YTMQ2K64.js} +3 -3
- package/dist/{chunk-O4MKOSU2.js.map → chunk-YTMQ2K64.js.map} +1 -1
- package/dist/{chunk-IF25CE6S.cjs → chunk-YTXBU6QC.cjs} +6 -6
- package/dist/{chunk-IF25CE6S.cjs.map → chunk-YTXBU6QC.cjs.map} +1 -1
- package/dist/{chunk-F6NEPU67.cjs → chunk-Z43BI7CQ.cjs} +10 -10
- package/dist/{chunk-F6NEPU67.cjs.map → chunk-Z43BI7CQ.cjs.map} +1 -1
- package/dist/{chunk-BEGDL2CD.js → chunk-ZI7JP3TN.js} +3 -3
- package/dist/{chunk-BEGDL2CD.js.map → chunk-ZI7JP3TN.js.map} +1 -1
- package/dist/{chunk-3F66SAE7.js → chunk-ZKFFHIEW.js} +3 -3
- package/dist/{chunk-3F66SAE7.js.map → chunk-ZKFFHIEW.js.map} +1 -1
- package/dist/{chunk-QFFC2DKK.js → chunk-ZLWCZV7R.js} +3 -3
- package/dist/{chunk-QFFC2DKK.js.map → chunk-ZLWCZV7R.js.map} +1 -1
- package/dist/{chunk-BWTFK2GV.cjs → chunk-ZMD3PIYF.cjs} +12 -12
- package/dist/{chunk-BWTFK2GV.cjs.map → chunk-ZMD3PIYF.cjs.map} +1 -1
- package/dist/{chunk-5I4PR2KV.cjs → chunk-ZPHHKIFV.cjs} +10 -10
- package/dist/{chunk-5I4PR2KV.cjs.map → chunk-ZPHHKIFV.cjs.map} +1 -1
- package/dist/{chunk-JPTWZ3RF.cjs → chunk-ZTC3EQFZ.cjs} +8 -8
- package/dist/{chunk-JPTWZ3RF.cjs.map → chunk-ZTC3EQFZ.cjs.map} +1 -1
- package/dist/chunk-ZU5Q77OT.cjs +31 -0
- package/dist/chunk-ZU5Q77OT.cjs.map +1 -0
- package/dist/{chunk-ORPYY2MO.cjs → chunk-ZVDW2VX5.cjs} +4 -4
- package/dist/{chunk-ORPYY2MO.cjs.map → chunk-ZVDW2VX5.cjs.map} +1 -1
- package/dist/{chunk-4DQ6HX27.cjs → chunk-ZVRVOKXH.cjs} +7 -7
- package/dist/{chunk-4DQ6HX27.cjs.map → chunk-ZVRVOKXH.cjs.map} +1 -1
- package/dist/code-view.cjs +3 -3
- package/dist/code-view.js +2 -2
- package/dist/color-picker.cjs +3 -3
- package/dist/color-picker.js +2 -2
- package/dist/command.cjs +4 -4
- package/dist/command.js +2 -2
- package/dist/composer.cjs +3 -3
- package/dist/composer.js +2 -2
- package/dist/container.cjs +3 -3
- package/dist/container.js +2 -2
- package/dist/content-renderer.cjs +5 -5
- package/dist/content-renderer.js +2 -2
- package/dist/context-menu.cjs +4 -4
- package/dist/context-menu.js +2 -2
- package/dist/date-picker.cjs +5 -5
- package/dist/date-picker.js +4 -4
- package/dist/drawer.cjs +4 -4
- package/dist/drawer.js +2 -2
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.js +2 -2
- package/dist/editor.cjs +7 -7
- package/dist/editor.js +5 -5
- package/dist/emoji-select.cjs +3 -3
- package/dist/emoji-select.js +2 -2
- package/dist/emoji.cjs +3 -3
- package/dist/emoji.js +2 -2
- package/dist/eyebrow.cjs +3 -3
- package/dist/eyebrow.js +2 -2
- package/dist/faux-client.cjs +3 -3
- package/dist/faux-client.js +2 -2
- package/dist/field.cjs +3 -3
- package/dist/field.js +2 -2
- package/dist/file-browser.cjs +6 -6
- package/dist/file-browser.js +2 -2
- package/dist/file-upload.cjs +4 -4
- package/dist/file-upload.js +2 -2
- package/dist/grid.cjs +3 -3
- package/dist/grid.js +2 -2
- package/dist/heading.cjs +3 -3
- package/dist/heading.js +2 -2
- package/dist/icon.cjs +8 -8
- package/dist/icon.js +2 -2
- package/dist/image-viewer.cjs +3 -3
- package/dist/image-viewer.js +2 -2
- package/dist/index-list.cjs +3 -3
- package/dist/index-list.js +2 -2
- package/dist/index.cjs +251 -223
- package/dist/index.d.cts +79 -2
- package/dist/index.d.ts +79 -2
- package/dist/index.js +88 -88
- package/dist/input.cjs +6 -6
- package/dist/input.js +5 -5
- package/dist/inputs.cjs +26 -26
- package/dist/inputs.js +14 -14
- package/dist/json-editor.cjs +27 -27
- package/dist/json-editor.js +16 -16
- package/dist/kanban.cjs +4 -4
- package/dist/kanban.js +2 -2
- package/dist/kbd.cjs +3 -3
- package/dist/kbd.js +2 -2
- package/dist/magic-wand.cjs +10 -10
- package/dist/magic-wand.js +9 -9
- package/dist/marquee.cjs +3 -3
- package/dist/marquee.js +2 -2
- package/dist/media-viewer.cjs +7 -7
- package/dist/media-viewer.js +6 -6
- package/dist/menu.cjs +4 -4
- package/dist/menu.js +2 -2
- package/dist/mobile-menu.cjs +5 -5
- package/dist/mobile-menu.js +3 -3
- package/dist/modal.cjs +4 -4
- package/dist/modal.js +2 -2
- package/dist/mode.cjs +3 -3
- package/dist/mode.js +2 -2
- package/dist/multi-switch.cjs +5 -5
- package/dist/multi-switch.js +4 -4
- package/dist/navbar.cjs +4 -4
- package/dist/navbar.js +2 -2
- package/dist/otp-input.cjs +3 -3
- package/dist/otp-input.js +2 -2
- package/dist/pagination.cjs +3 -3
- package/dist/pagination.js +2 -2
- package/dist/pdf-viewer.cjs +3 -3
- package/dist/pdf-viewer.js +2 -2
- package/dist/pillbox.cjs +3 -3
- package/dist/pillbox.js +2 -2
- package/dist/popover.cjs +4 -4
- package/dist/popover.js +2 -2
- package/dist/profile.cjs +4 -4
- package/dist/profile.js +3 -3
- package/dist/progress.cjs +3 -3
- package/dist/progress.js +2 -2
- package/dist/prompt-input.cjs +6 -6
- package/dist/prompt-input.js +5 -5
- package/dist/pull-quote.cjs +3 -3
- package/dist/pull-quote.js +2 -2
- package/dist/radio-group.cjs +5 -5
- package/dist/radio-group.js +4 -4
- package/dist/reason-tag.cjs +6 -6
- package/dist/reason-tag.js +5 -5
- package/dist/section.cjs +3 -3
- package/dist/section.js +2 -2
- package/dist/select.cjs +6 -6
- package/dist/select.js +5 -5
- package/dist/separator.cjs +3 -3
- package/dist/separator.js +2 -2
- package/dist/sidebar.cjs +5 -5
- package/dist/sidebar.js +3 -3
- package/dist/skeleton.cjs +3 -3
- package/dist/skeleton.js +2 -2
- package/dist/slider.cjs +5 -5
- package/dist/slider.js +4 -4
- package/dist/stat-list.cjs +3 -3
- package/dist/stat-list.js +2 -2
- package/dist/stat.cjs +4 -4
- package/dist/stat.js +2 -2
- package/dist/sticky-note.cjs +3 -3
- package/dist/sticky-note.js +2 -2
- package/dist/switch.cjs +3 -3
- package/dist/switch.js +2 -2
- package/dist/table.cjs +12 -12
- package/dist/table.js +2 -2
- package/dist/tabs.cjs +4 -4
- package/dist/tabs.js +2 -2
- package/dist/text.cjs +3 -3
- package/dist/text.js +2 -2
- package/dist/textarea.cjs +6 -6
- package/dist/textarea.js +5 -5
- package/dist/time-grid.cjs +3 -3
- package/dist/time-grid.js +2 -2
- package/dist/time-picker.cjs +3 -3
- package/dist/time-picker.js +2 -2
- package/dist/timeline.cjs +5 -5
- package/dist/timeline.js +2 -2
- package/dist/toast.cjs +4 -4
- package/dist/toast.js +2 -2
- package/dist/tooltip.cjs +3 -3
- package/dist/tooltip.js +2 -2
- package/dist/tree-nav.cjs +4 -4
- package/dist/tree-nav.js +2 -2
- package/dist/video-viewer.cjs +3 -3
- package/dist/video-viewer.js +2 -2
- package/package.json +2 -3
- package/dist/chunk-3Z6ALUWP.cjs +0 -13
- package/dist/chunk-3Z6ALUWP.cjs.map +0 -1
- package/dist/chunk-DSUHZO6T.js +0 -11
- package/dist/chunk-DSUHZO6T.js.map +0 -1
- package/dist/chunk-G34OBTU3.cjs +0 -27
- package/dist/chunk-G34OBTU3.cjs.map +0 -1
- package/dist/chunk-RNPFSVFN.js +0 -24
- package/dist/chunk-RNPFSVFN.js.map +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
// src/hooks/use-id.ts
|
|
6
|
+
function useId(prefix) {
|
|
7
|
+
const id = react.useId();
|
|
8
|
+
return prefix ? `${prefix}-${id}` : id;
|
|
9
|
+
}
|
|
10
|
+
function useNodeRegistry() {
|
|
11
|
+
const rectsRef = react.useRef(/* @__PURE__ */ new Map());
|
|
12
|
+
const [version, setVersion] = react.useState(0);
|
|
13
|
+
const registerNode = react.useCallback((id, rect) => {
|
|
14
|
+
rectsRef.current.set(id, rect);
|
|
15
|
+
setVersion((v) => v + 1);
|
|
16
|
+
}, []);
|
|
17
|
+
const unregisterNode = react.useCallback((id) => {
|
|
18
|
+
rectsRef.current.delete(id);
|
|
19
|
+
setVersion((v) => v + 1);
|
|
20
|
+
}, []);
|
|
21
|
+
return { registerNode, unregisterNode, nodeRects: rectsRef.current, version };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// src/theme.ts
|
|
25
|
+
var THEME_STORAGE_KEY = "fancy-ui.theme";
|
|
26
|
+
var DARK_QUERY = "(prefers-color-scheme: dark)";
|
|
27
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
28
|
+
var storageKey = THEME_STORAGE_KEY;
|
|
29
|
+
var stopWatchingSystem = null;
|
|
30
|
+
function canUseDom() {
|
|
31
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
32
|
+
}
|
|
33
|
+
function getThemePreference() {
|
|
34
|
+
if (!canUseDom()) return "system";
|
|
35
|
+
try {
|
|
36
|
+
const saved = window.localStorage.getItem(storageKey);
|
|
37
|
+
return saved === "light" || saved === "dark" ? saved : "system";
|
|
38
|
+
} catch {
|
|
39
|
+
return "system";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function systemTheme() {
|
|
43
|
+
if (!canUseDom() || typeof window.matchMedia !== "function") return "light";
|
|
44
|
+
return window.matchMedia(DARK_QUERY).matches ? "dark" : "light";
|
|
45
|
+
}
|
|
46
|
+
function resolveTheme(preference = getThemePreference()) {
|
|
47
|
+
return preference === "system" ? systemTheme() : preference;
|
|
48
|
+
}
|
|
49
|
+
function applyToDocument(resolved) {
|
|
50
|
+
if (!canUseDom()) return;
|
|
51
|
+
const root = document.documentElement;
|
|
52
|
+
root.classList.toggle("dark", resolved === "dark");
|
|
53
|
+
root.setAttribute("data-theme", resolved);
|
|
54
|
+
}
|
|
55
|
+
function publish() {
|
|
56
|
+
const preference = getThemePreference();
|
|
57
|
+
const resolved = resolveTheme(preference);
|
|
58
|
+
applyToDocument(resolved);
|
|
59
|
+
listeners.forEach((listener) => listener(resolved, preference));
|
|
60
|
+
}
|
|
61
|
+
function setThemePreference(preference) {
|
|
62
|
+
if (canUseDom()) {
|
|
63
|
+
try {
|
|
64
|
+
if (preference === "system") {
|
|
65
|
+
window.localStorage.removeItem(storageKey);
|
|
66
|
+
} else {
|
|
67
|
+
window.localStorage.setItem(storageKey, preference);
|
|
68
|
+
}
|
|
69
|
+
} catch {
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
publish();
|
|
73
|
+
}
|
|
74
|
+
function subscribeTheme(listener) {
|
|
75
|
+
listeners.add(listener);
|
|
76
|
+
return () => {
|
|
77
|
+
listeners.delete(listener);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function initTheme(options = {}) {
|
|
81
|
+
if (options.storageKey) storageKey = options.storageKey;
|
|
82
|
+
if (!canUseDom()) return () => {
|
|
83
|
+
};
|
|
84
|
+
applyToDocument(resolveTheme());
|
|
85
|
+
if (!stopWatchingSystem && typeof window.matchMedia === "function") {
|
|
86
|
+
const media = window.matchMedia(DARK_QUERY);
|
|
87
|
+
const onSystemChange = () => {
|
|
88
|
+
if (getThemePreference() === "system") publish();
|
|
89
|
+
};
|
|
90
|
+
if (typeof media.addEventListener === "function") {
|
|
91
|
+
media.addEventListener("change", onSystemChange);
|
|
92
|
+
stopWatchingSystem = () => media.removeEventListener("change", onSystemChange);
|
|
93
|
+
} else {
|
|
94
|
+
media.addListener(onSystemChange);
|
|
95
|
+
stopWatchingSystem = () => media.removeListener(onSystemChange);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return () => {
|
|
99
|
+
stopWatchingSystem?.();
|
|
100
|
+
stopWatchingSystem = null;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function useTheme() {
|
|
104
|
+
const [state, setState] = react.useState({
|
|
105
|
+
preference: "system",
|
|
106
|
+
resolved: "light"
|
|
107
|
+
});
|
|
108
|
+
react.useEffect(() => {
|
|
109
|
+
const sync = () => {
|
|
110
|
+
setState({ preference: getThemePreference(), resolved: resolveTheme() });
|
|
111
|
+
};
|
|
112
|
+
sync();
|
|
113
|
+
return subscribeTheme(sync);
|
|
114
|
+
}, []);
|
|
115
|
+
const setPreference = react.useCallback((preference) => {
|
|
116
|
+
setThemePreference(preference);
|
|
117
|
+
}, []);
|
|
118
|
+
return { ...state, setPreference };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
exports.THEME_STORAGE_KEY = THEME_STORAGE_KEY;
|
|
122
|
+
exports.getThemePreference = getThemePreference;
|
|
123
|
+
exports.initTheme = initTheme;
|
|
124
|
+
exports.resolveTheme = resolveTheme;
|
|
125
|
+
exports.setThemePreference = setThemePreference;
|
|
126
|
+
exports.subscribeTheme = subscribeTheme;
|
|
127
|
+
exports.useId = useId;
|
|
128
|
+
exports.useNodeRegistry = useNodeRegistry;
|
|
129
|
+
exports.useTheme = useTheme;
|
|
130
|
+
//# sourceMappingURL=chunk-HPNIEYSJ.cjs.map
|
|
131
|
+
//# sourceMappingURL=chunk-HPNIEYSJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-id.ts","../src/hooks/use-node-registry.ts","../src/theme.ts","../src/hooks/use-theme.ts"],"names":["useReactId","useRef","useState","useCallback","useEffect"],"mappings":"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","file":"chunk-HPNIEYSJ.cjs","sourcesContent":["import { useId as useReactId } from \"react\";\n\nexport function useId(prefix?: string): string {\n const id = useReactId();\n return prefix ? `${prefix}-${id}` : id;\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport interface NodeRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface UseNodeRegistryReturn {\n registerNode: (id: string, rect: NodeRect) => void;\n unregisterNode: (id: string) => void;\n nodeRects: Map<string, NodeRect>;\n version: number;\n}\n\nexport function useNodeRegistry(): UseNodeRegistryReturn {\n const rectsRef = useRef(new Map<string, NodeRect>());\n const [version, setVersion] = useState(0);\n\n const registerNode = useCallback((id: string, rect: NodeRect) => {\n rectsRef.current.set(id, rect);\n setVersion((v) => v + 1);\n }, []);\n\n const unregisterNode = useCallback((id: string) => {\n rectsRef.current.delete(id);\n setVersion((v) => v + 1);\n }, []);\n\n return { registerNode, unregisterNode, nodeRects: rectsRef.current, version };\n}\n","/**\n * Light / dark / **system** theming.\n *\n * `styles.css` in this package defines the dark contract — it redefines the\n * whole `--color-secondary-*` scale under `:where(.dark)` so that \"900\" always\n * means strongest foreground and \"50\" always means faintest surface. This module\n * is the other half of that contract: the thing that decides when `.dark` is on.\n *\n * It lives here rather than in each app because every consumer was hand-rolling\n * it, and every hand-rolled copy had the same two holes:\n *\n * - **No live listener.** The OS preference was read once at boot, so changing\n * the system theme with the page open did nothing. That is a default, not a\n * \"system\" mode.\n * - **No way back.** Choosing light or dark wrote to storage forever, so\n * \"follow my system\" was unreachable after a single click.\n *\n * Both are fixed by treating **\"system\" as the absence of a stored choice**\n * rather than as a third stored value.\n *\n * Every export is safe to call during SSR, where it is a no-op that resolves to\n * `\"light\"`. Pair it with `useTheme`, which deliberately renders `system/light`\n * on the server and syncs in an effect — this project has paid for hydration\n * mismatches caused by reading the real theme during render.\n */\n\nexport type ThemePreference = \"light\" | \"dark\" | \"system\";\nexport type ResolvedTheme = \"light\" | \"dark\";\n\n/**\n * Deliberately the key the showcase already used, so adopting this module keeps\n * a returning visitor's saved choice instead of silently resetting it.\n */\nexport const THEME_STORAGE_KEY = \"fancy-ui.theme\";\n\nconst DARK_QUERY = \"(prefers-color-scheme: dark)\";\n\ntype ThemeListener = (resolved: ResolvedTheme, preference: ThemePreference) => void;\n\nconst listeners = new Set<ThemeListener>();\nlet storageKey = THEME_STORAGE_KEY;\nlet stopWatchingSystem: (() => void) | null = null;\n\nfunction canUseDom(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\n/** The stored choice, or `\"system\"` when there isn't one. */\nexport function getThemePreference(): ThemePreference {\n if (!canUseDom()) return \"system\";\n try {\n const saved = window.localStorage.getItem(storageKey);\n return saved === \"light\" || saved === \"dark\" ? saved : \"system\";\n } catch {\n // Private browsing and blocked storage both throw here. A theme is not\n // worth taking the page down over.\n return \"system\";\n }\n}\n\nfunction systemTheme(): ResolvedTheme {\n if (!canUseDom() || typeof window.matchMedia !== \"function\") return \"light\";\n return window.matchMedia(DARK_QUERY).matches ? \"dark\" : \"light\";\n}\n\n/** What is actually on screen, as opposed to what the user asked for. */\nexport function resolveTheme(preference: ThemePreference = getThemePreference()): ResolvedTheme {\n return preference === \"system\" ? systemTheme() : preference;\n}\n\nfunction applyToDocument(resolved: ResolvedTheme): void {\n if (!canUseDom()) return;\n const root = document.documentElement;\n // The class is what this package's CSS keys off; the attribute is for\n // consumers whose own styles key off `[data-theme]`.\n root.classList.toggle(\"dark\", resolved === \"dark\");\n root.setAttribute(\"data-theme\", resolved);\n}\n\nfunction publish(): void {\n const preference = getThemePreference();\n const resolved = resolveTheme(preference);\n applyToDocument(resolved);\n listeners.forEach((listener) => listener(resolved, preference));\n}\n\n/**\n * Choose a theme. `\"system\"` REMOVES the stored value rather than storing the\n * string — an absent choice is what lets the OS keep speaking for the user.\n */\nexport function setThemePreference(preference: ThemePreference): void {\n if (canUseDom()) {\n try {\n if (preference === \"system\") {\n window.localStorage.removeItem(storageKey);\n } else {\n window.localStorage.setItem(storageKey, preference);\n }\n } catch {\n // As above: still apply it for this page even if it cannot persist.\n }\n }\n publish();\n}\n\n/** Observe theme changes. Returns an unsubscribe. */\nexport function subscribeTheme(listener: ThemeListener): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n/**\n * Apply the current theme and start following the OS. Call once, as early as\n * possible — before first paint if you want to avoid a flash of the wrong\n * theme. Returns a disposer; calling it again is harmless.\n */\nexport function initTheme(options: { storageKey?: string } = {}): () => void {\n if (options.storageKey) storageKey = options.storageKey;\n if (!canUseDom()) return () => {};\n\n applyToDocument(resolveTheme());\n\n if (!stopWatchingSystem && typeof window.matchMedia === \"function\") {\n const media = window.matchMedia(DARK_QUERY);\n const onSystemChange = (): void => {\n // Only \"system\" follows the OS. An explicit choice has to survive\n // the user switching their OS theme, or it isn't a choice.\n if (getThemePreference() === \"system\") publish();\n };\n\n if (typeof media.addEventListener === \"function\") {\n media.addEventListener(\"change\", onSystemChange);\n stopWatchingSystem = () => media.removeEventListener(\"change\", onSystemChange);\n } else {\n // Safari < 14 and friends.\n media.addListener(onSystemChange);\n stopWatchingSystem = () => media.removeListener(onSystemChange);\n }\n }\n\n return () => {\n stopWatchingSystem?.();\n stopWatchingSystem = null;\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport {\n getThemePreference,\n resolveTheme,\n setThemePreference,\n subscribeTheme,\n type ResolvedTheme,\n type ThemePreference,\n} from \"../theme\";\n\nexport type UseThemeResult = {\n /** What the user asked for, including `\"system\"`. */\n preference: ThemePreference;\n /** What is actually on screen. */\n resolved: ResolvedTheme;\n setPreference: (preference: ThemePreference) => void;\n};\n\n/**\n * Read and set the theme from a component, re-rendering when it changes —\n * including when the OS theme changes underneath a `\"system\"` preference.\n *\n * The initial state is deliberately `system` / `light` rather than the real\n * theme: the server has neither storage nor an OS preference, so reading the\n * truth during render is exactly the hydration mismatch this project has\n * already chased down more than once. The effect syncs immediately on mount.\n */\nexport function useTheme(): UseThemeResult {\n const [state, setState] = useState<{ preference: ThemePreference; resolved: ResolvedTheme }>({\n preference: \"system\",\n resolved: \"light\",\n });\n\n useEffect(() => {\n const sync = (): void => {\n setState({ preference: getThemePreference(), resolved: resolveTheme() });\n };\n sync();\n return subscribeTheme(sync);\n }, []);\n\n const setPreference = useCallback((preference: ThemePreference): void => {\n setThemePreference(preference);\n }, []);\n\n return { ...state, setPreference };\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { DisplayValue } from './chunk-
|
|
2
|
-
import { Field } from './chunk-
|
|
1
|
+
import { DisplayValue } from './chunk-KKWNKBKR.js';
|
|
2
|
+
import { Field } from './chunk-FERMW3YE.js';
|
|
3
3
|
import { inputBaseClasses, inputSizeClasses, dirtyClasses, errorClasses } from './chunk-GFYSELJF.js';
|
|
4
4
|
import { useInlineEdit } from './chunk-OL53XYHF.js';
|
|
5
5
|
import { useFieldMode } from './chunk-NRXK42LO.js';
|
|
6
6
|
import { useControllableState } from './chunk-6FQGMVF2.js';
|
|
7
|
-
import { cn } from './chunk-
|
|
7
|
+
import { cn } from './chunk-MMW2JGKZ.js';
|
|
8
8
|
import { forwardRef, useId } from 'react';
|
|
9
9
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
10
10
|
|
|
@@ -251,5 +251,5 @@ var RangeDatePicker = forwardRef(
|
|
|
251
251
|
RangeDatePicker.displayName = "RangeDatePicker";
|
|
252
252
|
|
|
253
253
|
export { DatePicker };
|
|
254
|
-
//# sourceMappingURL=chunk-
|
|
255
|
-
//# sourceMappingURL=chunk-
|
|
254
|
+
//# sourceMappingURL=chunk-HYNED2OA.js.map
|
|
255
|
+
//# sourceMappingURL=chunk-HYNED2OA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/inputs/DatePicker/DatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;AAgBA,SAAS,eAAA,CAAgB,KAAa,WAAA,EAA+B;AACnE,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AACjB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,EAAA,IAAI,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,OAAO,GAAA;AACzC,EAAA,OAAO,WAAA,GACH,IAAA,CAAK,cAAA,CAAe,MAAA,EAAW;AAAA,IAC7B,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA,GACD,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAW;AAAA,IACjC,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACN,CAAA;AACP;AAEO,IAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM;AAAA,MACJ,IAAA,GAAO,IAAA;AAAA,MACP,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,EAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF,GAAI,KAAA;AAEJ,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,WAAW,EAAA,IAAM,MAAA;AACvB,IAAA,MAAM,SAAA,GAAY,cAAc,gBAAA,GAAmB,MAAA;AAEnD,IAAA,MAAM,YAAA,GAAe,EAAA;AAAA,MACnB,gBAAA;AAAA,MACA,iBAAiB,IAAI,CAAA;AAAA,MACrB,aAAa,KAAK,CAAA;AAAA,MAClB,aAAa,KAAK,CAAA;AAAA,MAClB;AAAA,KACF;AAEA,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,uBACE,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,EAAA,EAAI,QAAA;AAAA,UACJ,SAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,KAAA,EAAO,KAAA;AAAA,QACP,EAAA,EAAI,QAAA;AAAA,QACJ,SAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AAOzB,IAAM,gBAAA,GAAmB,UAAA;AAAA,EAIvB,CACE;AAAA,IACE,IAAA,GAAO,IAAA;AAAA,IACP,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAc,IAAA;AAKpB,IAAA,MAAM,YAAA,GAAe,aAAa,IAAI,CAAA;AACtC,IAAA,MAAM,EAAE,aAAa,WAAA,EAAa,SAAA,EAAW,UAAS,GAAI,aAAA,CAAc,cAAc,QAAQ,CAAA;AAC9F,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,oBAAA;AAAA,MACxB,WAAA,CAAY,KAAA;AAAA,MACZ,YAAY,YAAA,IAAgB,EAAA;AAAA,MAC5B,WAAA,CAAY;AAAA,KACd;AAEA,IAAA,MAAM,KAAA,GAAQ,CAAC,WAAA,mBACb,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA,EAAY,SAAA;AAAA,QAEX,QAAA,EAAA,eAAA,CAAgB,OAAO,WAAW;AAAA;AAAA,KACrC,mBAEA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,8BAAA,EAA6B,EAAA;AAAA,QAC7B,GAAA;AAAA,QACA,EAAA;AAAA,QACA,IAAA,EAAM,SAAA;AAAA,QACN,IAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,QACrC,SAAA,EAAW,WAAA;AAAA,QACX,QAAQ,MAAM;AACZ,UAAA,IAAI,aAAa,QAAA,EAAS;AAAA,QAC5B;AAAA;AAAA,KACF;AAGF,IAAA,IAAI,KAAA,IAAS,SAAS,WAAA,EAAa;AACjC,MAAA,uBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,EAAS,EAAA;AAAA,UACT,IAAA;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AAE/B,IAAM,eAAA,GAAkB,UAAA;AAAA,EAItB,CACE;AAAA,IACE,IAAA,GAAO,IAAA;AAAA,IACP,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,IAAA;AAKnB,IAAA,MAAM,YAAA,GAAe,aAAa,IAAI,CAAA;AACtC,IAAA,MAAM,EAAE,aAAa,WAAA,EAAa,SAAA,EAAW,UAAS,GAAI,aAAA,CAAc,cAAc,QAAQ,CAAA;AAC9F,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,oBAAA;AAAA,MACxB,UAAA,CAAW,KAAA;AAAA,MACX,UAAA,CAAW,YAAA,IAAgB,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,MAClC,UAAA,CAAW;AAAA,KACb;AAEA,IAAA,MAAM,KAAA,GAAQ,CAAC,WAAA,mBACb,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA,EAAY,SAAA;AAAA,QAEX,QAAA,EAAA,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,GAChB,CAAA,EAAG,gBAAgB,KAAA,CAAM,CAAC,GAAG,WAAW,CAAC,WAAM,eAAA,CAAgB,KAAA,CAAM,CAAC,CAAA,EAAG,WAAW,CAAC,CAAA,CAAA,GACrF;AAAA;AAAA,KACN,mBAEA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,8BAAA,EAA6B,EAAA;AAAA,QAC7B,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,QAClD,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,WAAA,IAAe,CAAC,CAAA,CAAE,aAAA,CAAc,SAAS,CAAA,CAAE,aAAqB,GAAG,QAAA,EAAS;AAAA,QAClF,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,EAAA;AAAA,cACA,IAAA,EAAM,SAAA;AAAA,cACN,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,GAAW,MAAA;AAAA,cAC/B,GAAA;AAAA,cACA,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAAA,cACjB,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,cACd,QAAA;AAAA,cACA,QAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,cACpD,SAAA,EAAW,YAAA;AAAA,cACX,SAAA,EAAW;AAAA;AAAA,WACb;AAAA,0BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EAA2C,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,0BAC7D,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,SAAA;AAAA,cACN,IAAA,EAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,IAAA,CAAA,GAAS,MAAA;AAAA,cAC7B,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAAA,cACjB,GAAA;AAAA,cACA,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,cACd,QAAA;AAAA,cACA,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,cACpD,SAAA,EAAW;AAAA;AAAA;AACb;AAAA;AAAA,KACF;AAGF,IAAA,IAAI,KAAA,IAAS,SAAS,WAAA,EAAa;AACjC,MAAA,uBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,EAAS,EAAA;AAAA,UACT,IAAA;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-CQWPMRYS.js","sourcesContent":["import { forwardRef, useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport {\n dirtyClasses,\n errorClasses,\n inputBaseClasses,\n inputSizeClasses,\n} from \"../inputs.utils\";\nimport type { DatePickerProps } from \"./DatePicker.types\";\n\n/** Locale-format an ISO date / datetime-local string; fall back to the raw value. */\nfunction formatDateValue(iso: string, includeTime?: boolean): string {\n if (!iso) return \"\";\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return iso;\n return includeTime\n ? date.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })\n : date.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (props, ref) => {\n const {\n size = \"md\",\n dirty,\n error,\n label,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min,\n max,\n includeTime,\n } = props;\n\n const autoId = useId();\n const pickerId = id ?? autoId;\n const inputType = includeTime ? \"datetime-local\" : \"date\";\n\n const inputClasses = cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"w-full\",\n );\n\n if (props.range) {\n return (\n <RangeDatePicker\n {...props}\n id={pickerId}\n inputType={inputType}\n inputClasses={inputClasses}\n ref={ref}\n />\n );\n }\n\n return (\n <SingleDatePicker\n {...props}\n range={false}\n id={pickerId}\n inputType={inputType}\n inputClasses={inputClasses}\n ref={ref}\n />\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n\ninterface InternalProps {\n inputType: string;\n inputClasses: string;\n}\n\nconst SingleDatePicker = forwardRef<\n HTMLInputElement,\n DatePickerProps & { range?: false } & InternalProps\n>(\n (\n {\n size = \"md\",\n error,\n label,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min,\n max,\n includeTime,\n mode,\n inputType,\n inputClasses,\n ...rest\n },\n ref,\n ) => {\n const singleProps = rest as {\n value?: string;\n defaultValue?: string;\n onValueChange?: (v: string) => void;\n };\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n singleProps.value,\n singleProps.defaultValue ?? \"\",\n singleProps.onValueChange,\n );\n\n const input = !showControl ? (\n <DisplayValue\n size={size}\n className={className}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {formatDateValue(value, includeTime)}\n </DisplayValue>\n ) : (\n <input\n data-react-fancy-date-picker=\"\"\n ref={ref}\n id={id}\n type={inputType}\n name={name}\n min={min}\n max={max}\n value={value}\n disabled={disabled}\n required={required}\n onChange={(e) => setValue(e.target.value)}\n className={cn(inputClasses, className)}\n autoFocus={interactive}\n onBlur={() => {\n if (interactive) exitEdit();\n }}\n />\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {input}\n </Field>\n );\n }\n\n return input;\n },\n);\n\nSingleDatePicker.displayName = \"SingleDatePicker\";\n\nconst RangeDatePicker = forwardRef<\n HTMLInputElement,\n DatePickerProps & { range: true } & InternalProps\n>(\n (\n {\n size = \"md\",\n error,\n label,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min,\n max,\n includeTime,\n mode,\n inputType,\n inputClasses,\n ...rest\n },\n ref,\n ) => {\n const rangeProps = rest as {\n value?: [string, string];\n defaultValue?: [string, string];\n onValueChange?: (v: [string, string]) => void;\n };\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n rangeProps.value,\n rangeProps.defaultValue ?? [\"\", \"\"] as [string, string],\n rangeProps.onValueChange,\n );\n\n const input = !showControl ? (\n <DisplayValue\n size={size}\n className={className}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {value[0] || value[1]\n ? `${formatDateValue(value[0], includeTime)} – ${formatDateValue(value[1], includeTime)}`\n : \"\"}\n </DisplayValue>\n ) : (\n <div\n data-react-fancy-date-picker=\"\"\n className={cn(\"flex items-center gap-2\", className)}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n >\n <input\n ref={ref}\n id={id}\n type={inputType}\n name={name ? `${name}_start` : undefined}\n min={min}\n max={value[1] || max}\n value={value[0]}\n disabled={disabled}\n required={required}\n onChange={(e) => setValue([e.target.value, value[1]])}\n className={inputClasses}\n autoFocus={interactive}\n />\n <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">to</span>\n <input\n type={inputType}\n name={name ? `${name}_end` : undefined}\n min={value[0] || min}\n max={max}\n value={value[1]}\n disabled={disabled}\n onChange={(e) => setValue([value[0], e.target.value])}\n className={inputClasses}\n />\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {input}\n </Field>\n );\n }\n\n return input;\n },\n);\n\nRangeDatePicker.displayName = \"RangeDatePicker\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/inputs/DatePicker/DatePicker.tsx"],"names":[],"mappings":"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","file":"chunk-HYNED2OA.js","sourcesContent":["import { forwardRef, useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport {\n dirtyClasses,\n errorClasses,\n inputBaseClasses,\n inputSizeClasses,\n} from \"../inputs.utils\";\nimport type { DatePickerProps } from \"./DatePicker.types\";\n\n/** Locale-format an ISO date / datetime-local string; fall back to the raw value. */\nfunction formatDateValue(iso: string, includeTime?: boolean): string {\n if (!iso) return \"\";\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return iso;\n return includeTime\n ? date.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })\n : date.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (props, ref) => {\n const {\n size = \"md\",\n dirty,\n error,\n label,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min,\n max,\n includeTime,\n } = props;\n\n const autoId = useId();\n const pickerId = id ?? autoId;\n const inputType = includeTime ? \"datetime-local\" : \"date\";\n\n const inputClasses = cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"w-full\",\n );\n\n if (props.range) {\n return (\n <RangeDatePicker\n {...props}\n id={pickerId}\n inputType={inputType}\n inputClasses={inputClasses}\n ref={ref}\n />\n );\n }\n\n return (\n <SingleDatePicker\n {...props}\n range={false}\n id={pickerId}\n inputType={inputType}\n inputClasses={inputClasses}\n ref={ref}\n />\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n\ninterface InternalProps {\n inputType: string;\n inputClasses: string;\n}\n\nconst SingleDatePicker = forwardRef<\n HTMLInputElement,\n DatePickerProps & { range?: false } & InternalProps\n>(\n (\n {\n size = \"md\",\n error,\n label,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min,\n max,\n includeTime,\n mode,\n inputType,\n inputClasses,\n ...rest\n },\n ref,\n ) => {\n const singleProps = rest as {\n value?: string;\n defaultValue?: string;\n onValueChange?: (v: string) => void;\n };\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n singleProps.value,\n singleProps.defaultValue ?? \"\",\n singleProps.onValueChange,\n );\n\n const input = !showControl ? (\n <DisplayValue\n size={size}\n className={className}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {formatDateValue(value, includeTime)}\n </DisplayValue>\n ) : (\n <input\n data-react-fancy-date-picker=\"\"\n ref={ref}\n id={id}\n type={inputType}\n name={name}\n min={min}\n max={max}\n value={value}\n disabled={disabled}\n required={required}\n onChange={(e) => setValue(e.target.value)}\n className={cn(inputClasses, className)}\n autoFocus={interactive}\n onBlur={() => {\n if (interactive) exitEdit();\n }}\n />\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {input}\n </Field>\n );\n }\n\n return input;\n },\n);\n\nSingleDatePicker.displayName = \"SingleDatePicker\";\n\nconst RangeDatePicker = forwardRef<\n HTMLInputElement,\n DatePickerProps & { range: true } & InternalProps\n>(\n (\n {\n size = \"md\",\n error,\n label,\n description,\n required,\n disabled,\n className,\n id,\n name,\n min,\n max,\n includeTime,\n mode,\n inputType,\n inputClasses,\n ...rest\n },\n ref,\n ) => {\n const rangeProps = rest as {\n value?: [string, string];\n defaultValue?: [string, string];\n onValueChange?: (v: [string, string]) => void;\n };\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n const [value, setValue] = useControllableState(\n rangeProps.value,\n rangeProps.defaultValue ?? [\"\", \"\"] as [string, string],\n rangeProps.onValueChange,\n );\n\n const input = !showControl ? (\n <DisplayValue\n size={size}\n className={className}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {value[0] || value[1]\n ? `${formatDateValue(value[0], includeTime)} – ${formatDateValue(value[1], includeTime)}`\n : \"\"}\n </DisplayValue>\n ) : (\n <div\n data-react-fancy-date-picker=\"\"\n className={cn(\"flex items-center gap-2\", className)}\n onBlur={(e) => {\n if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n }}\n >\n <input\n ref={ref}\n id={id}\n type={inputType}\n name={name ? `${name}_start` : undefined}\n min={min}\n max={value[1] || max}\n value={value[0]}\n disabled={disabled}\n required={required}\n onChange={(e) => setValue([e.target.value, value[1]])}\n className={inputClasses}\n autoFocus={interactive}\n />\n <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">to</span>\n <input\n type={inputType}\n name={name ? `${name}_end` : undefined}\n min={value[0] || min}\n max={max}\n value={value[1]}\n disabled={disabled}\n onChange={(e) => setValue([value[0], e.target.value])}\n className={inputClasses}\n />\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={id}\n size={size}\n >\n {input}\n </Field>\n );\n }\n\n return input;\n },\n);\n\nRangeDatePicker.displayName = \"RangeDatePicker\";\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useControllableState } from './chunk-6FQGMVF2.js';
|
|
2
|
-
import { cn } from './chunk-
|
|
2
|
+
import { cn } from './chunk-MMW2JGKZ.js';
|
|
3
3
|
import { createContext, useContext, useEffect, useMemo, useCallback, useState, useRef } from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -269,5 +269,5 @@ AccordionPanel.Trigger = AccordionPanelTrigger;
|
|
|
269
269
|
AccordionPanel.Content = AccordionPanelContent;
|
|
270
270
|
|
|
271
271
|
export { AccordionPanel, AccordionPanelContent, AccordionPanelSection, AccordionPanelTrigger, useAccordionPanel, useAccordionSection };
|
|
272
|
-
//# sourceMappingURL=chunk-
|
|
273
|
-
//# sourceMappingURL=chunk-
|
|
272
|
+
//# sourceMappingURL=chunk-I3RPL3GE.js.map
|
|
273
|
+
//# sourceMappingURL=chunk-I3RPL3GE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AccordionPanel/AccordionPanel.context.ts","../src/components/AccordionPanel/AccordionPanel.Section.tsx","../src/components/AccordionPanel/AccordionPanel.Trigger.tsx","../src/components/AccordionPanel/AccordionPanel.Content.tsx","../src/components/AccordionPanel/AccordionPanel.tsx"],"names":["jsx","useMemo"],"mappings":"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","file":"chunk-IF5LOWUL.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { AccordionOrientation } from \"./AccordionPanel.types\";\n\n// ── Panel-level context ─────────────────────────────────────────────────\n\nexport interface AccordionPanelContextValue {\n orientation: AccordionOrientation;\n isOpen: (id: string) => boolean;\n toggle: (id: string) => void;\n open: (id: string) => void;\n close: (id: string) => void;\n /** Ordered list of all section ids registered in this panel */\n sectionIds: string[];\n registerSection: (id: string) => () => void;\n}\n\nexport const AccordionPanelContext =\n createContext<AccordionPanelContextValue | null>(null);\n\nexport function useAccordionPanel(): AccordionPanelContextValue {\n const ctx = useContext(AccordionPanelContext);\n if (!ctx) {\n throw new Error(\n \"AccordionPanel components must be used inside <AccordionPanel>\",\n );\n }\n return ctx;\n}\n\n// ── Section-level context ───────────────────────────────────────────────\n\nexport interface AccordionSectionContextValue {\n id: string;\n open: boolean;\n pinned: boolean;\n orientation: AccordionOrientation;\n toggle: () => void;\n}\n\nexport const AccordionSectionContext =\n createContext<AccordionSectionContextValue | null>(null);\n\nexport function useAccordionSection(): AccordionSectionContextValue {\n const ctx = useContext(AccordionSectionContext);\n if (!ctx) {\n throw new Error(\n \"<AccordionPanel.Trigger> must be rendered inside <AccordionPanel.Section>\",\n );\n }\n return ctx;\n}\n","import { useEffect, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n AccordionSectionContext,\n useAccordionPanel,\n} from \"./AccordionPanel.context\";\nimport type { AccordionPanelSectionProps } from \"./AccordionPanel.types\";\n\n/**\n * One collapsible section inside an AccordionPanel.\n *\n * Compose with `<AccordionPanel.Trigger>` and `<AccordionPanel.Content>`\n * children — Content renders only when open, Trigger always renders and\n * adapts its look by state. Children that are not Trigger/Content are\n * rendered as-is, regardless of state, so static decorations stay put.\n *\n * Pinned sections never collapse and don't need a Trigger.\n */\nexport function AccordionPanelSection({\n id,\n pinned = false,\n className,\n openClassName,\n closedClassName,\n unstyled,\n children,\n}: AccordionPanelSectionProps) {\n const panel = useAccordionPanel();\n const { orientation, isOpen, toggle, registerSection } = panel;\n\n useEffect(() => registerSection(id), [id, registerSection]);\n\n const open = pinned || isOpen(id);\n\n const sectionCtx = useMemo(\n () => ({\n id,\n open,\n pinned,\n orientation,\n toggle: () => toggle(id),\n }),\n [id, open, pinned, orientation, toggle],\n );\n\n return (\n <AccordionSectionContext.Provider value={sectionCtx}>\n <div\n data-react-fancy-accordion-section=\"\"\n data-state={open ? \"open\" : \"closed\"}\n data-pinned={pinned ? \"\" : undefined}\n data-orientation={orientation}\n className={cn(\n \"flex shrink-0\",\n !unstyled && \"items-center gap-1\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n className,\n open ? openClassName : closedClassName,\n )}\n >\n {children}\n </div>\n </AccordionSectionContext.Provider>\n );\n}\n\nAccordionPanelSection.displayName = \"AccordionPanelSection\";\n","import { cn } from \"../../utils/cn\";\nimport { useAccordionSection } from \"./AccordionPanel.context\";\nimport type {\n AccordionPanelTriggerProps,\n SectionRenderable,\n SectionRenderState,\n} from \"./AccordionPanel.types\";\n\nfunction renderSlot(slot: SectionRenderable, state: SectionRenderState) {\n return typeof slot === \"function\" ? slot(state) : slot;\n}\n\n/**\n * Trigger for an AccordionPanel.Section.\n *\n * Has two visual roles, picked automatically from section state:\n *\n * - When the section is OPEN: renders as a thin divider on the section's\n * trailing edge. Hovering reveals an inset chevron pointing toward the\n * section so the user knows clicking will collapse it.\n *\n * - When the section is CLOSED: renders as a standalone chevron button\n * in place of the section content. Clicking re-expands the section.\n *\n * Supply `children` (node or render-prop) to fully replace the default\n * rendering. The render-prop receives `{ open, toggle, orientation, id }`.\n */\nexport function AccordionPanelTrigger({\n children,\n className,\n \"aria-label\": ariaLabel,\n}: AccordionPanelTriggerProps) {\n const { id, open, orientation, toggle } = useAccordionSection();\n const state: SectionRenderState = { id, open, orientation, toggle };\n\n // Custom render path — caller is in charge of look & feel.\n if (children !== undefined) {\n return (\n <div\n data-react-fancy-accordion-trigger=\"\"\n data-state={open ? \"open\" : \"closed\"}\n data-orientation={orientation}\n className={className}\n >\n {renderSlot(children, state)}\n </div>\n );\n }\n\n // Default rendering ----------------------------------------------------\n\n if (open) {\n // Trailing-edge divider. The visible line is 1px (rendered via the\n // ::before pseudo-element so it stays narrow); the button's actual\n // hitbox is much wider (w-3 / h-3 = 12px) so users don't have to land\n // pixel-perfect on the line. Hovering the hitbox highlights the line\n // and reveals an inset chevron signalling \"click to collapse\".\n return (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={ariaLabel ?? \"Collapse section\"}\n data-react-fancy-accordion-trigger=\"\"\n data-state=\"open\"\n data-orientation={orientation}\n className={cn(\n \"group relative flex shrink-0 items-center justify-center cursor-pointer\",\n \"text-zinc-500 dark:text-zinc-500\",\n \"hover:text-zinc-900 dark:hover:text-zinc-100\",\n // Wide hitbox + thin visible line (drawn via ::before).\n orientation === \"horizontal\"\n ? \"w-3 self-stretch\"\n : \"h-3 self-stretch\",\n \"before:absolute before:bg-zinc-200 dark:before:bg-zinc-700\",\n \"before:transition-colors group-hover:before:bg-zinc-400 dark:group-hover:before:bg-zinc-500\",\n orientation === \"horizontal\"\n ? \"before:top-0 before:bottom-0 before:w-px before:left-1/2 before:-translate-x-1/2\"\n : \"before:left-0 before:right-0 before:h-px before:top-1/2 before:-translate-y-1/2\",\n \"transition-colors\",\n className,\n )}\n >\n <ChevronIcon\n orientation={orientation}\n purpose=\"collapse\"\n className=\"relative opacity-0 group-hover:opacity-100 transition-opacity\"\n />\n </button>\n );\n }\n\n // Closed: standalone chevron button. Click to re-expand.\n return (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={ariaLabel ?? \"Expand section\"}\n data-react-fancy-accordion-trigger=\"\"\n data-state=\"closed\"\n data-orientation={orientation}\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-md\",\n \"text-zinc-400 dark:text-zinc-500\",\n \"hover:text-zinc-900 dark:hover:text-zinc-100\",\n \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\n \"transition-colors cursor-pointer\",\n orientation === \"horizontal\" ? \"h-8 w-6 mx-0.5\" : \"w-8 h-6 my-0.5\",\n className,\n )}\n >\n <ChevronIcon orientation={orientation} purpose=\"expand\" />\n </button>\n );\n}\n\nAccordionPanelTrigger.displayName = \"AccordionPanelTrigger\";\n\n// ── Internal chevron ────────────────────────────────────────────────────\n\nfunction ChevronIcon({\n orientation,\n purpose,\n className,\n}: {\n orientation: \"horizontal\" | \"vertical\";\n /** \"expand\" → closed section, click to open. \"collapse\" → open section, click to close. */\n purpose: \"expand\" | \"collapse\";\n className?: string;\n}) {\n // For horizontal: both states use a left-pointing chevron (matches the\n // screenshot convention — closed sections show ❮, open dividers reveal\n // a ❮ on hover indicating the section will collapse leftward).\n //\n // For vertical: closed shows down ⌄ (click to expand below); open\n // divider on hover shows up ⌃ (click to collapse upward).\n const transform =\n orientation === \"horizontal\"\n ? \"rotate(180deg)\"\n : purpose === \"expand\"\n ? \"rotate(90deg)\"\n : \"rotate(270deg)\";\n\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ transform }}\n className={className}\n aria-hidden=\"true\"\n >\n <polyline points=\"6 4 10 8 6 12\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useAccordionSection } from \"./AccordionPanel.context\";\n\nexport interface AccordionPanelContentProps {\n children: ReactNode;\n className?: string;\n /**\n * Skip the default flex-row/flex-col + items-center + gap classes so the\n * consumer can lay out the open-state content however they want (e.g. a\n * full-height chat panel with header/scroll/input rows). The\n * `data-react-fancy-accordion-content` attribute and conditional render\n * (only when the section is open) are kept.\n */\n unstyled?: boolean;\n}\n\n/**\n * Wrapper for the open-state content of a Section. Renders its children\n * only when the parent Section is open; returns `null` otherwise.\n *\n * Use this so siblings of `<AccordionPanel.Trigger>` inside a section can\n * cleanly toggle in/out of the DOM.\n *\n * The default styling assumes an inline cluster — flex row (horizontal\n * orientation) or column (vertical), centered, with a small gap. For panel\n * use cases where the content needs full-bleed layout (chat panes, canvas\n * surfaces, etc.), pass `unstyled` and supply your own className.\n */\nexport function AccordionPanelContent({\n children,\n className,\n unstyled,\n}: AccordionPanelContentProps) {\n const { open, orientation } = useAccordionSection();\n if (!open) return null;\n\n return (\n <div\n data-react-fancy-accordion-content=\"\"\n data-orientation={orientation}\n className={cn(\n !unstyled && \"flex items-center gap-1\",\n !unstyled && (orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nAccordionPanelContent.displayName = \"AccordionPanelContent\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { AccordionPanelContext } from \"./AccordionPanel.context\";\nimport { AccordionPanelSection } from \"./AccordionPanel.Section\";\nimport { AccordionPanelTrigger } from \"./AccordionPanel.Trigger\";\nimport { AccordionPanelContent } from \"./AccordionPanel.Content\";\nimport type { AccordionPanelProps } from \"./AccordionPanel.types\";\n\n/**\n * Horizontal or vertical accordion of collapsible sections.\n *\n * Use the compound parts:\n * <AccordionPanel orientation=\"horizontal\" defaultValue={[\"wishlist\"]}>\n * <AccordionPanel.Section id=\"home\" pinned>\n * <Button icon=\"home\" />\n * </AccordionPanel.Section>\n * <AccordionPanel.Section id=\"wishlist\">\n * <Button icon=\"list\">Wishlist</Button>\n * </AccordionPanel.Section>\n * </AccordionPanel>\n *\n * Each non-pinned section renders a trigger (default chevron-divider) that\n * collapses/expands. Pass a custom `trigger` prop on a Section, or use the\n * exported `AccordionPanel.Trigger` directly to compose your own.\n */\nfunction AccordionPanelRoot({\n orientation = \"horizontal\",\n value: controlledValue,\n defaultValue,\n onValueChange,\n className,\n children,\n}: AccordionPanelProps) {\n const [openIds, setOpenIds] = useControllableState<string[]>(\n controlledValue,\n defaultValue ?? [],\n onValueChange,\n );\n\n const openSet = useMemo(() => new Set(openIds), [openIds]);\n\n const isOpen = useCallback((id: string) => openSet.has(id), [openSet]);\n\n const open = useCallback(\n (id: string) => {\n setOpenIds(openSet.has(id) ? (openIds ?? []) : [...(openIds ?? []), id]);\n },\n [openSet, openIds, setOpenIds],\n );\n\n const close = useCallback(\n (id: string) => {\n setOpenIds((openIds ?? []).filter((x) => x !== id));\n },\n [openIds, setOpenIds],\n );\n\n const toggle = useCallback(\n (id: string) => {\n setOpenIds(\n openSet.has(id)\n ? (openIds ?? []).filter((x) => x !== id)\n : [...(openIds ?? []), id],\n );\n },\n [openSet, openIds, setOpenIds],\n );\n\n // Track section order for downstream consumers (e.g. trigger direction\n // heuristics that need to know neighbors).\n const [sectionIds, setSectionIds] = useState<string[]>([]);\n const orderRef = useRef<string[]>([]);\n\n const registerSection = useCallback((id: string) => {\n if (!orderRef.current.includes(id)) {\n orderRef.current = [...orderRef.current, id];\n setSectionIds(orderRef.current);\n }\n return () => {\n orderRef.current = orderRef.current.filter((x) => x !== id);\n setSectionIds(orderRef.current);\n };\n }, []);\n\n const ctx = useMemo(\n () => ({\n orientation,\n isOpen,\n toggle,\n open,\n close,\n sectionIds,\n registerSection,\n }),\n [orientation, isOpen, toggle, open, close, sectionIds, registerSection],\n );\n\n return (\n <AccordionPanelContext.Provider value={ctx}>\n <div\n data-react-fancy-accordion-panel=\"\"\n data-orientation={orientation}\n className={cn(\n \"inline-flex items-stretch\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionPanelContext.Provider>\n );\n}\n\nAccordionPanelRoot.displayName = \"AccordionPanel\";\n\n// ── Compound exports ────────────────────────────────────────────────────\n\ntype AccordionPanelType = typeof AccordionPanelRoot & {\n Section: typeof AccordionPanelSection;\n Trigger: typeof AccordionPanelTrigger;\n Content: typeof AccordionPanelContent;\n};\n\nexport const AccordionPanel = AccordionPanelRoot as AccordionPanelType;\nAccordionPanel.Section = AccordionPanelSection;\nAccordionPanel.Trigger = AccordionPanelTrigger;\nAccordionPanel.Content = AccordionPanelContent;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AccordionPanel/AccordionPanel.context.ts","../src/components/AccordionPanel/AccordionPanel.Section.tsx","../src/components/AccordionPanel/AccordionPanel.Trigger.tsx","../src/components/AccordionPanel/AccordionPanel.Content.tsx","../src/components/AccordionPanel/AccordionPanel.tsx"],"names":["jsx","useMemo"],"mappings":"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","file":"chunk-I3RPL3GE.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { AccordionOrientation } from \"./AccordionPanel.types\";\n\n// ── Panel-level context ─────────────────────────────────────────────────\n\nexport interface AccordionPanelContextValue {\n orientation: AccordionOrientation;\n isOpen: (id: string) => boolean;\n toggle: (id: string) => void;\n open: (id: string) => void;\n close: (id: string) => void;\n /** Ordered list of all section ids registered in this panel */\n sectionIds: string[];\n registerSection: (id: string) => () => void;\n}\n\nexport const AccordionPanelContext =\n createContext<AccordionPanelContextValue | null>(null);\n\nexport function useAccordionPanel(): AccordionPanelContextValue {\n const ctx = useContext(AccordionPanelContext);\n if (!ctx) {\n throw new Error(\n \"AccordionPanel components must be used inside <AccordionPanel>\",\n );\n }\n return ctx;\n}\n\n// ── Section-level context ───────────────────────────────────────────────\n\nexport interface AccordionSectionContextValue {\n id: string;\n open: boolean;\n pinned: boolean;\n orientation: AccordionOrientation;\n toggle: () => void;\n}\n\nexport const AccordionSectionContext =\n createContext<AccordionSectionContextValue | null>(null);\n\nexport function useAccordionSection(): AccordionSectionContextValue {\n const ctx = useContext(AccordionSectionContext);\n if (!ctx) {\n throw new Error(\n \"<AccordionPanel.Trigger> must be rendered inside <AccordionPanel.Section>\",\n );\n }\n return ctx;\n}\n","import { useEffect, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n AccordionSectionContext,\n useAccordionPanel,\n} from \"./AccordionPanel.context\";\nimport type { AccordionPanelSectionProps } from \"./AccordionPanel.types\";\n\n/**\n * One collapsible section inside an AccordionPanel.\n *\n * Compose with `<AccordionPanel.Trigger>` and `<AccordionPanel.Content>`\n * children — Content renders only when open, Trigger always renders and\n * adapts its look by state. Children that are not Trigger/Content are\n * rendered as-is, regardless of state, so static decorations stay put.\n *\n * Pinned sections never collapse and don't need a Trigger.\n */\nexport function AccordionPanelSection({\n id,\n pinned = false,\n className,\n openClassName,\n closedClassName,\n unstyled,\n children,\n}: AccordionPanelSectionProps) {\n const panel = useAccordionPanel();\n const { orientation, isOpen, toggle, registerSection } = panel;\n\n useEffect(() => registerSection(id), [id, registerSection]);\n\n const open = pinned || isOpen(id);\n\n const sectionCtx = useMemo(\n () => ({\n id,\n open,\n pinned,\n orientation,\n toggle: () => toggle(id),\n }),\n [id, open, pinned, orientation, toggle],\n );\n\n return (\n <AccordionSectionContext.Provider value={sectionCtx}>\n <div\n data-react-fancy-accordion-section=\"\"\n data-state={open ? \"open\" : \"closed\"}\n data-pinned={pinned ? \"\" : undefined}\n data-orientation={orientation}\n className={cn(\n \"flex shrink-0\",\n !unstyled && \"items-center gap-1\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n className,\n open ? openClassName : closedClassName,\n )}\n >\n {children}\n </div>\n </AccordionSectionContext.Provider>\n );\n}\n\nAccordionPanelSection.displayName = \"AccordionPanelSection\";\n","import { cn } from \"../../utils/cn\";\nimport { useAccordionSection } from \"./AccordionPanel.context\";\nimport type {\n AccordionPanelTriggerProps,\n SectionRenderable,\n SectionRenderState,\n} from \"./AccordionPanel.types\";\n\nfunction renderSlot(slot: SectionRenderable, state: SectionRenderState) {\n return typeof slot === \"function\" ? slot(state) : slot;\n}\n\n/**\n * Trigger for an AccordionPanel.Section.\n *\n * Has two visual roles, picked automatically from section state:\n *\n * - When the section is OPEN: renders as a thin divider on the section's\n * trailing edge. Hovering reveals an inset chevron pointing toward the\n * section so the user knows clicking will collapse it.\n *\n * - When the section is CLOSED: renders as a standalone chevron button\n * in place of the section content. Clicking re-expands the section.\n *\n * Supply `children` (node or render-prop) to fully replace the default\n * rendering. The render-prop receives `{ open, toggle, orientation, id }`.\n */\nexport function AccordionPanelTrigger({\n children,\n className,\n \"aria-label\": ariaLabel,\n}: AccordionPanelTriggerProps) {\n const { id, open, orientation, toggle } = useAccordionSection();\n const state: SectionRenderState = { id, open, orientation, toggle };\n\n // Custom render path — caller is in charge of look & feel.\n if (children !== undefined) {\n return (\n <div\n data-react-fancy-accordion-trigger=\"\"\n data-state={open ? \"open\" : \"closed\"}\n data-orientation={orientation}\n className={className}\n >\n {renderSlot(children, state)}\n </div>\n );\n }\n\n // Default rendering ----------------------------------------------------\n\n if (open) {\n // Trailing-edge divider. The visible line is 1px (rendered via the\n // ::before pseudo-element so it stays narrow); the button's actual\n // hitbox is much wider (w-3 / h-3 = 12px) so users don't have to land\n // pixel-perfect on the line. Hovering the hitbox highlights the line\n // and reveals an inset chevron signalling \"click to collapse\".\n return (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={ariaLabel ?? \"Collapse section\"}\n data-react-fancy-accordion-trigger=\"\"\n data-state=\"open\"\n data-orientation={orientation}\n className={cn(\n \"group relative flex shrink-0 items-center justify-center cursor-pointer\",\n \"text-zinc-500 dark:text-zinc-500\",\n \"hover:text-zinc-900 dark:hover:text-zinc-100\",\n // Wide hitbox + thin visible line (drawn via ::before).\n orientation === \"horizontal\"\n ? \"w-3 self-stretch\"\n : \"h-3 self-stretch\",\n \"before:absolute before:bg-zinc-200 dark:before:bg-zinc-700\",\n \"before:transition-colors group-hover:before:bg-zinc-400 dark:group-hover:before:bg-zinc-500\",\n orientation === \"horizontal\"\n ? \"before:top-0 before:bottom-0 before:w-px before:left-1/2 before:-translate-x-1/2\"\n : \"before:left-0 before:right-0 before:h-px before:top-1/2 before:-translate-y-1/2\",\n \"transition-colors\",\n className,\n )}\n >\n <ChevronIcon\n orientation={orientation}\n purpose=\"collapse\"\n className=\"relative opacity-0 group-hover:opacity-100 transition-opacity\"\n />\n </button>\n );\n }\n\n // Closed: standalone chevron button. Click to re-expand.\n return (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={ariaLabel ?? \"Expand section\"}\n data-react-fancy-accordion-trigger=\"\"\n data-state=\"closed\"\n data-orientation={orientation}\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-md\",\n \"text-zinc-400 dark:text-zinc-500\",\n \"hover:text-zinc-900 dark:hover:text-zinc-100\",\n \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\n \"transition-colors cursor-pointer\",\n orientation === \"horizontal\" ? \"h-8 w-6 mx-0.5\" : \"w-8 h-6 my-0.5\",\n className,\n )}\n >\n <ChevronIcon orientation={orientation} purpose=\"expand\" />\n </button>\n );\n}\n\nAccordionPanelTrigger.displayName = \"AccordionPanelTrigger\";\n\n// ── Internal chevron ────────────────────────────────────────────────────\n\nfunction ChevronIcon({\n orientation,\n purpose,\n className,\n}: {\n orientation: \"horizontal\" | \"vertical\";\n /** \"expand\" → closed section, click to open. \"collapse\" → open section, click to close. */\n purpose: \"expand\" | \"collapse\";\n className?: string;\n}) {\n // For horizontal: both states use a left-pointing chevron (matches the\n // screenshot convention — closed sections show ❮, open dividers reveal\n // a ❮ on hover indicating the section will collapse leftward).\n //\n // For vertical: closed shows down ⌄ (click to expand below); open\n // divider on hover shows up ⌃ (click to collapse upward).\n const transform =\n orientation === \"horizontal\"\n ? \"rotate(180deg)\"\n : purpose === \"expand\"\n ? \"rotate(90deg)\"\n : \"rotate(270deg)\";\n\n return (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ transform }}\n className={className}\n aria-hidden=\"true\"\n >\n <polyline points=\"6 4 10 8 6 12\" />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useAccordionSection } from \"./AccordionPanel.context\";\n\nexport interface AccordionPanelContentProps {\n children: ReactNode;\n className?: string;\n /**\n * Skip the default flex-row/flex-col + items-center + gap classes so the\n * consumer can lay out the open-state content however they want (e.g. a\n * full-height chat panel with header/scroll/input rows). The\n * `data-react-fancy-accordion-content` attribute and conditional render\n * (only when the section is open) are kept.\n */\n unstyled?: boolean;\n}\n\n/**\n * Wrapper for the open-state content of a Section. Renders its children\n * only when the parent Section is open; returns `null` otherwise.\n *\n * Use this so siblings of `<AccordionPanel.Trigger>` inside a section can\n * cleanly toggle in/out of the DOM.\n *\n * The default styling assumes an inline cluster — flex row (horizontal\n * orientation) or column (vertical), centered, with a small gap. For panel\n * use cases where the content needs full-bleed layout (chat panes, canvas\n * surfaces, etc.), pass `unstyled` and supply your own className.\n */\nexport function AccordionPanelContent({\n children,\n className,\n unstyled,\n}: AccordionPanelContentProps) {\n const { open, orientation } = useAccordionSection();\n if (!open) return null;\n\n return (\n <div\n data-react-fancy-accordion-content=\"\"\n data-orientation={orientation}\n className={cn(\n !unstyled && \"flex items-center gap-1\",\n !unstyled && (orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nAccordionPanelContent.displayName = \"AccordionPanelContent\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { AccordionPanelContext } from \"./AccordionPanel.context\";\nimport { AccordionPanelSection } from \"./AccordionPanel.Section\";\nimport { AccordionPanelTrigger } from \"./AccordionPanel.Trigger\";\nimport { AccordionPanelContent } from \"./AccordionPanel.Content\";\nimport type { AccordionPanelProps } from \"./AccordionPanel.types\";\n\n/**\n * Horizontal or vertical accordion of collapsible sections.\n *\n * Use the compound parts:\n * <AccordionPanel orientation=\"horizontal\" defaultValue={[\"wishlist\"]}>\n * <AccordionPanel.Section id=\"home\" pinned>\n * <Button icon=\"home\" />\n * </AccordionPanel.Section>\n * <AccordionPanel.Section id=\"wishlist\">\n * <Button icon=\"list\">Wishlist</Button>\n * </AccordionPanel.Section>\n * </AccordionPanel>\n *\n * Each non-pinned section renders a trigger (default chevron-divider) that\n * collapses/expands. Pass a custom `trigger` prop on a Section, or use the\n * exported `AccordionPanel.Trigger` directly to compose your own.\n */\nfunction AccordionPanelRoot({\n orientation = \"horizontal\",\n value: controlledValue,\n defaultValue,\n onValueChange,\n className,\n children,\n}: AccordionPanelProps) {\n const [openIds, setOpenIds] = useControllableState<string[]>(\n controlledValue,\n defaultValue ?? [],\n onValueChange,\n );\n\n const openSet = useMemo(() => new Set(openIds), [openIds]);\n\n const isOpen = useCallback((id: string) => openSet.has(id), [openSet]);\n\n const open = useCallback(\n (id: string) => {\n setOpenIds(openSet.has(id) ? (openIds ?? []) : [...(openIds ?? []), id]);\n },\n [openSet, openIds, setOpenIds],\n );\n\n const close = useCallback(\n (id: string) => {\n setOpenIds((openIds ?? []).filter((x) => x !== id));\n },\n [openIds, setOpenIds],\n );\n\n const toggle = useCallback(\n (id: string) => {\n setOpenIds(\n openSet.has(id)\n ? (openIds ?? []).filter((x) => x !== id)\n : [...(openIds ?? []), id],\n );\n },\n [openSet, openIds, setOpenIds],\n );\n\n // Track section order for downstream consumers (e.g. trigger direction\n // heuristics that need to know neighbors).\n const [sectionIds, setSectionIds] = useState<string[]>([]);\n const orderRef = useRef<string[]>([]);\n\n const registerSection = useCallback((id: string) => {\n if (!orderRef.current.includes(id)) {\n orderRef.current = [...orderRef.current, id];\n setSectionIds(orderRef.current);\n }\n return () => {\n orderRef.current = orderRef.current.filter((x) => x !== id);\n setSectionIds(orderRef.current);\n };\n }, []);\n\n const ctx = useMemo(\n () => ({\n orientation,\n isOpen,\n toggle,\n open,\n close,\n sectionIds,\n registerSection,\n }),\n [orientation, isOpen, toggle, open, close, sectionIds, registerSection],\n );\n\n return (\n <AccordionPanelContext.Provider value={ctx}>\n <div\n data-react-fancy-accordion-panel=\"\"\n data-orientation={orientation}\n className={cn(\n \"inline-flex items-stretch\",\n orientation === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionPanelContext.Provider>\n );\n}\n\nAccordionPanelRoot.displayName = \"AccordionPanel\";\n\n// ── Compound exports ────────────────────────────────────────────────────\n\ntype AccordionPanelType = typeof AccordionPanelRoot & {\n Section: typeof AccordionPanelSection;\n Trigger: typeof AccordionPanelTrigger;\n Content: typeof AccordionPanelContent;\n};\n\nexport const AccordionPanel = AccordionPanelRoot as AccordionPanelType;\nAccordionPanel.Section = AccordionPanelSection;\nAccordionPanel.Trigger = AccordionPanelTrigger;\nAccordionPanel.Content = AccordionPanelContent;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkWKNVZUWZ_cjs = require('./chunk-WKNVZUWZ.cjs');
|
|
4
|
+
var chunkF2VJEXN2_cjs = require('./chunk-F2VJEXN2.cjs');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
7
7
|
var CONFIDENCE_TIERS = [
|
|
@@ -82,9 +82,9 @@ function ReasonTag({
|
|
|
82
82
|
)
|
|
83
83
|
] });
|
|
84
84
|
}
|
|
85
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
86
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
87
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkWKNVZUWZ_cjs.Popover, { hover: true, children: [
|
|
86
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkWKNVZUWZ_cjs.Popover.Trigger, { children: trigger }),
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkWKNVZUWZ_cjs.Popover.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-72 space-y-2 text-sm", children: [
|
|
88
88
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-2", children: [
|
|
89
89
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
90
90
|
"span",
|
|
@@ -109,11 +109,11 @@ function ReasonTag({
|
|
|
109
109
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[10px] uppercase tracking-wider text-zinc-400", children: "sources" }),
|
|
110
110
|
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-0.5 space-y-0.5 text-[12px]", children: sources.map((s, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: s.href ? /* @__PURE__ */ jsxRuntime.jsx("a", { className: "text-violet-600 hover:underline", href: s.href, children: s.label }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-600 dark:text-zinc-300", children: s.label }) }, i)) })
|
|
111
111
|
] }),
|
|
112
|
-
onFollowUp && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end pt-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
onFollowUp && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end pt-1", children: /* @__PURE__ */ jsxRuntime.jsx(chunkF2VJEXN2_cjs.Button, { size: "sm", variant: "ghost", onClick: onFollowUp, children: "ask follow-up" }) })
|
|
113
113
|
] }) })
|
|
114
114
|
] });
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
exports.ReasonTag = ReasonTag;
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
119
|
-
//# sourceMappingURL=chunk-
|
|
118
|
+
//# sourceMappingURL=chunk-ICT477LK.cjs.map
|
|
119
|
+
//# sourceMappingURL=chunk-ICT477LK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ReasonTag/ReasonTag.tsx"],"names":["jsxs","jsx","Popover","Button"],"mappings":";;;;;;AAuDA,IAAM,gBAAA,GAAyE;AAAA,EAC7E,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,OAAO,MAAA,EAAO;AAAA,EAC7C,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AAAA,EAC9C,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,SAAA,EAAW,OAAO,KAAA;AACrC,CAAA;AAEA,SAAS,KAAK,CAAA,EAAW;AACvB,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAC,CAAA,KAAM,KAAK,CAAA,CAAE,GAAG,CAAA,IAAK,gBAAA,CAAiB,CAAC,CAAA;AACvE;AAEO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,UAAU,EAAC;AAAA,EACX,EAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,MAAA,GAAS,KAAA;AAAA,EACT,UAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAA,GAAI,KAAK,UAAU,CAAA;AAEzB,EAAA,MAAM,OAAA,GACJ,UAAU,MAAA,mBACRA,eAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,4FAAA,EAA+F,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACzH,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,CAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,MAEzD,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,0BAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,CAAE,KAAA;AAAM;AAAA,SACpC;AAAA,QACC,KAAA;AAAA,wBACDA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAAyB,QAAA,EAAA,GAAA,EAAC;AAAA;AAAA;AAAA,GAC5C,GACE,UAAU,WAAA,mBACZD,eAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,2DAAA,EAA8D,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACxF,KAAA,EAAO,EAAE,mBAAA,EAAqB,CAAA,CAAE,KAAA,EAAM;AAAA,MAErC,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,wBACDC,cAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,8BAAA;AAAA,YACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM;AAAA,YACzB,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,sBAGFD,eAAA,CAAC,MAAA,EAAA,EAAK,WAAW,CAAA,6CAAA,EAAgD,SAAA,IAAa,EAAE,CAAA,CAAA,EAC9E,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACrCA,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oDAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,CAAE,KAAA,EAAM;AAAA,QAClC,KAAA,EAAM;AAAA;AAAA;AACR,GAAA,EACF,CAAA;AAGJ,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,uBACED,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EACb,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,sBACDC,cAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,uGAAA;AAAA,UACV,KAAA,EAAO,EAAE,WAAA,EAAa,CAAA,CAAE,KAAA,EAAM;AAAA,UAE7B,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACED,eAAA,CAACE,yBAAA,EAAA,EAAQ,KAAA,EAAK,IAAA,EACZ,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAACC,yBAAA,CAAQ,OAAA,EAAR,EAAiB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,mCACzBA,yBAAA,CAAQ,OAAA,EAAR,EACC,QAAA,kBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,oDAAA;AAAA,YACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM;AAAA,YAEvB,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,KAAA;AAAA,cAAM,mBAAA;AAAA,cAAA,CAAgB,UAAA,GAAa,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SACxD;AAAA,QACC,EAAA,oBACCA,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6CAAA,EAA8C,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAC1D;AAAA,SAAA,EACJ;AAAA,OAAA,EAEJ,CAAA;AAAA,sBACAC,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DAAA,EACV,QAAA,EAAA,MAAA,EACH,CAAA;AAAA,MACC,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAChBD,eAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAAqD,QAAA,EAAA,SAAA,EAEpE,CAAA;AAAA,wBACAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gCAAA,EACX,kBAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACfA,cAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,CAAA,CAAE,IAAA,kCACA,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAA,EAAkC,IAAA,EAAM,CAAA,CAAE,IAAA,EACpD,QAAA,EAAA,CAAA,CAAE,KAAA,EACL,oBAEAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA,CAAA,CAAE,KAAA,EACL,CAAA,EAAA,EARK,CAUT,CACD,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAED,UAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBACb,QAAA,kBAAAA,cAAA,CAACE,wBAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,2BAEvD,CAAA,EACF;AAAA,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-6Y2QO7YV.cjs","sourcesContent":["import { Popover } from \"../Popover\";\nimport { Button } from \"../Button\";\n\n/**\n * ReasonTag — wraps any value with a small affordance that reveals the\n * agent's reasoning, sources, and confidence on hover or click.\n *\n * <ReasonTag\n * value=\"$1.4M\"\n * reason=\"Projected Q3 ARR after stacking renewals.\"\n * confidence={0.91}\n * sources={[{ label: \"Q2 actuals · CRM export\" }]}\n * by=\"Forecaster\"\n * />\n *\n * Three visual styles:\n * • \"dot\" — value with a tiny coloured dot (default, subtle)\n * • \"underline\" — dotted underline + trailing \"?\"\n * • \"chip\" — full coloured pill (loud)\n *\n * Confidence drives the colour via three tiers (high / medium / low),\n * so a quick visual scan tells the human which suggestions deserve a\n * second look without opening any tooltips.\n *\n * `pinned` swaps the popover for an inline annotation slot — useful\n * when explainability should always be visible, not buried in a hover.\n */\nexport type ReasonTagSource = { label: string; href?: string };\n\nexport type ReasonTagTheme = \"dot\" | \"underline\" | \"chip\";\n\nexport interface ReasonTagProps {\n /** The value the tag wraps — usually a number, label, or short phrase. */\n value: React.ReactNode;\n /** Free-text rationale shown in the popover / inline annotation. */\n reason: string;\n /** 0..1 confidence. Drives the tier colour. Defaults to 1. */\n confidence?: number;\n /** Optional list of sources (label + optional href). */\n sources?: ReasonTagSource[];\n /** Optional author / agent name shown in the popover header. */\n by?: string;\n /** Visual treatment for the trigger. */\n theme?: ReasonTagTheme;\n /**\n * When true, the popover is replaced with an always-visible inline\n * annotation below the value.\n */\n pinned?: boolean;\n /** Called when the user hits the \"ask follow-up\" action. */\n onFollowUp?: () => void;\n /** Optional className applied to the trigger element. */\n className?: string;\n}\n\nconst CONFIDENCE_TIERS: Array<{ min: number; color: string; label: string }> = [\n { min: 0.85, color: \"#10b981\", label: \"high\" },\n { min: 0.6, color: \"#f59e0b\", label: \"medium\" },\n { min: 0, color: \"#ef4444\", label: \"low\" },\n];\n\nfunction tier(c: number) {\n return CONFIDENCE_TIERS.find((t) => c >= t.min) ?? CONFIDENCE_TIERS[2];\n}\n\nexport function ReasonTag({\n value,\n reason,\n confidence = 1,\n sources = [],\n by,\n theme = \"dot\",\n pinned = false,\n onFollowUp,\n className,\n}: ReasonTagProps) {\n const t = tier(confidence);\n\n const trigger =\n theme === \"chip\" ? (\n <span\n className={`inline-flex cursor-help items-center gap-1 rounded-full px-2 py-0.5 text-[12px] font-medium ${className ?? \"\"}`}\n style={{ backgroundColor: t.color + \"22\", color: t.color }}\n >\n <span\n className=\"h-1.5 w-1.5 rounded-full\"\n style={{ backgroundColor: t.color }}\n />\n {value}\n <span className=\"text-[10px] opacity-70\">?</span>\n </span>\n ) : theme === \"underline\" ? (\n <span\n className={`cursor-help underline decoration-dotted underline-offset-2 ${className ?? \"\"}`}\n style={{ textDecorationColor: t.color }}\n >\n {value}\n <span\n className=\"ml-0.5 font-mono text-[10px]\"\n style={{ color: t.color }}\n >\n ?\n </span>\n </span>\n ) : (\n <span className={`inline-flex cursor-help items-baseline gap-1 ${className ?? \"\"}`}>\n <span className=\"font-medium\">{value}</span>\n <span\n className=\"inline-block h-1.5 w-1.5 rounded-full align-middle\"\n style={{ backgroundColor: t.color }}\n title=\"reason available\"\n />\n </span>\n );\n\n if (pinned) {\n return (\n <span className=\"inline-flex flex-col items-start gap-0.5 align-top\">\n {trigger}\n <span\n className=\"block max-w-[280px] rounded border-l-2 pl-2 text-[11px] leading-snug text-zinc-600 dark:text-zinc-300\"\n style={{ borderColor: t.color }}\n >\n {reason}\n </span>\n </span>\n );\n }\n\n return (\n <Popover hover>\n <Popover.Trigger>{trigger}</Popover.Trigger>\n <Popover.Content>\n <div className=\"w-72 space-y-2 text-sm\">\n <div className=\"flex items-baseline gap-2\">\n <span\n className=\"text-[10px] font-semibold uppercase tracking-wider\"\n style={{ color: t.color }}\n >\n {t.label} confidence · {(confidence * 100).toFixed(0)}%\n </span>\n {by && (\n <span className=\"ml-auto font-mono text-[10px] text-zinc-400\">\n @{by}\n </span>\n )}\n </div>\n <p className=\"text-[13px] leading-snug text-zinc-700 dark:text-zinc-200\">\n {reason}\n </p>\n {sources.length > 0 && (\n <div>\n <div className=\"text-[10px] uppercase tracking-wider text-zinc-400\">\n sources\n </div>\n <ul className=\"mt-0.5 space-y-0.5 text-[12px]\">\n {sources.map((s, i) => (\n <li key={i}>\n {s.href ? (\n <a className=\"text-violet-600 hover:underline\" href={s.href}>\n {s.label}\n </a>\n ) : (\n <span className=\"text-zinc-600 dark:text-zinc-300\">\n {s.label}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n {onFollowUp && (\n <div className=\"flex justify-end pt-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onFollowUp}>\n ask follow-up\n </Button>\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ReasonTag/ReasonTag.tsx"],"names":["jsxs","jsx","Popover","Button"],"mappings":"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","file":"chunk-ICT477LK.cjs","sourcesContent":["import { Popover } from \"../Popover\";\nimport { Button } from \"../Button\";\n\n/**\n * ReasonTag — wraps any value with a small affordance that reveals the\n * agent's reasoning, sources, and confidence on hover or click.\n *\n * <ReasonTag\n * value=\"$1.4M\"\n * reason=\"Projected Q3 ARR after stacking renewals.\"\n * confidence={0.91}\n * sources={[{ label: \"Q2 actuals · CRM export\" }]}\n * by=\"Forecaster\"\n * />\n *\n * Three visual styles:\n * • \"dot\" — value with a tiny coloured dot (default, subtle)\n * • \"underline\" — dotted underline + trailing \"?\"\n * • \"chip\" — full coloured pill (loud)\n *\n * Confidence drives the colour via three tiers (high / medium / low),\n * so a quick visual scan tells the human which suggestions deserve a\n * second look without opening any tooltips.\n *\n * `pinned` swaps the popover for an inline annotation slot — useful\n * when explainability should always be visible, not buried in a hover.\n */\nexport type ReasonTagSource = { label: string; href?: string };\n\nexport type ReasonTagTheme = \"dot\" | \"underline\" | \"chip\";\n\nexport interface ReasonTagProps {\n /** The value the tag wraps — usually a number, label, or short phrase. */\n value: React.ReactNode;\n /** Free-text rationale shown in the popover / inline annotation. */\n reason: string;\n /** 0..1 confidence. Drives the tier colour. Defaults to 1. */\n confidence?: number;\n /** Optional list of sources (label + optional href). */\n sources?: ReasonTagSource[];\n /** Optional author / agent name shown in the popover header. */\n by?: string;\n /** Visual treatment for the trigger. */\n theme?: ReasonTagTheme;\n /**\n * When true, the popover is replaced with an always-visible inline\n * annotation below the value.\n */\n pinned?: boolean;\n /** Called when the user hits the \"ask follow-up\" action. */\n onFollowUp?: () => void;\n /** Optional className applied to the trigger element. */\n className?: string;\n}\n\nconst CONFIDENCE_TIERS: Array<{ min: number; color: string; label: string }> = [\n { min: 0.85, color: \"#10b981\", label: \"high\" },\n { min: 0.6, color: \"#f59e0b\", label: \"medium\" },\n { min: 0, color: \"#ef4444\", label: \"low\" },\n];\n\nfunction tier(c: number) {\n return CONFIDENCE_TIERS.find((t) => c >= t.min) ?? CONFIDENCE_TIERS[2];\n}\n\nexport function ReasonTag({\n value,\n reason,\n confidence = 1,\n sources = [],\n by,\n theme = \"dot\",\n pinned = false,\n onFollowUp,\n className,\n}: ReasonTagProps) {\n const t = tier(confidence);\n\n const trigger =\n theme === \"chip\" ? (\n <span\n className={`inline-flex cursor-help items-center gap-1 rounded-full px-2 py-0.5 text-[12px] font-medium ${className ?? \"\"}`}\n style={{ backgroundColor: t.color + \"22\", color: t.color }}\n >\n <span\n className=\"h-1.5 w-1.5 rounded-full\"\n style={{ backgroundColor: t.color }}\n />\n {value}\n <span className=\"text-[10px] opacity-70\">?</span>\n </span>\n ) : theme === \"underline\" ? (\n <span\n className={`cursor-help underline decoration-dotted underline-offset-2 ${className ?? \"\"}`}\n style={{ textDecorationColor: t.color }}\n >\n {value}\n <span\n className=\"ml-0.5 font-mono text-[10px]\"\n style={{ color: t.color }}\n >\n ?\n </span>\n </span>\n ) : (\n <span className={`inline-flex cursor-help items-baseline gap-1 ${className ?? \"\"}`}>\n <span className=\"font-medium\">{value}</span>\n <span\n className=\"inline-block h-1.5 w-1.5 rounded-full align-middle\"\n style={{ backgroundColor: t.color }}\n title=\"reason available\"\n />\n </span>\n );\n\n if (pinned) {\n return (\n <span className=\"inline-flex flex-col items-start gap-0.5 align-top\">\n {trigger}\n <span\n className=\"block max-w-[280px] rounded border-l-2 pl-2 text-[11px] leading-snug text-zinc-600 dark:text-zinc-300\"\n style={{ borderColor: t.color }}\n >\n {reason}\n </span>\n </span>\n );\n }\n\n return (\n <Popover hover>\n <Popover.Trigger>{trigger}</Popover.Trigger>\n <Popover.Content>\n <div className=\"w-72 space-y-2 text-sm\">\n <div className=\"flex items-baseline gap-2\">\n <span\n className=\"text-[10px] font-semibold uppercase tracking-wider\"\n style={{ color: t.color }}\n >\n {t.label} confidence · {(confidence * 100).toFixed(0)}%\n </span>\n {by && (\n <span className=\"ml-auto font-mono text-[10px] text-zinc-400\">\n @{by}\n </span>\n )}\n </div>\n <p className=\"text-[13px] leading-snug text-zinc-700 dark:text-zinc-200\">\n {reason}\n </p>\n {sources.length > 0 && (\n <div>\n <div className=\"text-[10px] uppercase tracking-wider text-zinc-400\">\n sources\n </div>\n <ul className=\"mt-0.5 space-y-0.5 text-[12px]\">\n {sources.map((s, i) => (\n <li key={i}>\n {s.href ? (\n <a className=\"text-violet-600 hover:underline\" href={s.href}>\n {s.label}\n </a>\n ) : (\n <span className=\"text-zinc-600 dark:text-zinc-300\">\n {s.label}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n {onFollowUp && (\n <div className=\"flex justify-end pt-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onFollowUp}>\n ask follow-up\n </Button>\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkJ2DI6RMR_cjs = require('./chunk-J2DI6RMR.cjs');
|
|
4
4
|
var chunkNBZC6LOB_cjs = require('./chunk-NBZC6LOB.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
|
|
@@ -39,7 +39,7 @@ var Tooltip = react.forwardRef(
|
|
|
39
39
|
ref: floatingRef,
|
|
40
40
|
"data-react-fancy-tooltip": "",
|
|
41
41
|
role: "tooltip",
|
|
42
|
-
className:
|
|
42
|
+
className: chunkZU5Q77OT_cjs.cn(
|
|
43
43
|
"fancy-fade-in pointer-events-none fixed z-50 max-w-xs rounded-lg bg-zinc-900 px-3 py-1.5 text-sm text-white shadow-lg dark:bg-zinc-700 dark:text-zinc-100",
|
|
44
44
|
className
|
|
45
45
|
),
|
|
@@ -49,7 +49,7 @@ var Tooltip = react.forwardRef(
|
|
|
49
49
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
50
50
|
"div",
|
|
51
51
|
{
|
|
52
|
-
className:
|
|
52
|
+
className: chunkZU5Q77OT_cjs.cn(
|
|
53
53
|
"absolute h-2 w-2 rotate-45 bg-zinc-900 dark:bg-zinc-700",
|
|
54
54
|
position.placement.startsWith("top") && "bottom-[-4px] left-1/2 -translate-x-1/2",
|
|
55
55
|
position.placement.startsWith("bottom") && "top-[-4px] left-1/2 -translate-x-1/2",
|
|
@@ -67,5 +67,5 @@ var Tooltip = react.forwardRef(
|
|
|
67
67
|
Tooltip.displayName = "Tooltip";
|
|
68
68
|
|
|
69
69
|
exports.Tooltip = Tooltip;
|
|
70
|
-
//# sourceMappingURL=chunk-
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
70
|
+
//# sourceMappingURL=chunk-ISPCXIJZ.cjs.map
|
|
71
|
+
//# sourceMappingURL=chunk-ISPCXIJZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":["forwardRef","Tooltip","useState","useRef","useFloatingPosition","useCallback","cloneElement","jsxs","Fragment","Portal","cn","jsx"],"mappings":";;;;;;;;AAaO,IAAM,OAAA,GAAUA,gBAAA;AAAA,EACrB,SAASC,QAAAA,CACP,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,GAAY,KAAA,EAAO,KAAA,GAAQ,GAAA,EAAK,MAAA,GAAS,CAAA,EAAG,SAAA,IACjE,IAAA,EACA;AACA,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtC,IAAA,MAAM,SAAA,GAAYC,aAAoB,IAAI,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAcA,aAAuB,IAAI,CAAA;AAC/C,IAAA,MAAM,UAAA,GAAaA,aAAsC,MAAS,CAAA;AAElE,IAAA,MAAM,QAAA,GAAWC,qCAAA,CAAoB,SAAA,EAAW,WAAA,EAAa;AAAA,MAC3D,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,IAAA,GAAOC,kBAAY,MAAM;AAC7B,MAAA,UAAA,CAAW,UAAU,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,IAC5D,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,IAAA,GAAOA,kBAAY,MAAM;AAC7B,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,OAAA,GAAUC,mBAAa,QAAA,EAAmD;AAAA,MAC9E,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc,IAAA;AAAA,MACd,YAAA,EAAc,IAAA;AAAA,MACd,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MACA,IAAA,mCACEC,wBAAA,EAAA,EACC,QAAA,kBAAAF,eAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,WAAA;AAAA,UACL,0BAAA,EAAyB,EAAA;AAAA,UACzB,IAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAWG,oBAAA;AAAA,YACT,2JAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,OAAO,EAAE,IAAA,EAAM,SAAS,CAAA,EAAG,GAAA,EAAK,SAAS,CAAA,EAAE;AAAA,UAE1C,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,4BACDC,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAWD,oBAAA;AAAA,kBACT,yDAAA;AAAA,kBACA,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,KAAK,CAAA,IACjC,yCAAA;AAAA,kBACF,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,IACpC,sCAAA;AAAA,kBACF,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,IAClC,uCAAA;AAAA,kBACF,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,IACnC;AAAA;AACJ;AAAA;AACF;AAAA;AAAA,OACF,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":["forwardRef","Tooltip","useState","useRef","useFloatingPosition","useCallback","cloneElement","jsxs","Fragment","Portal","cn","jsx"],"mappings":";;;;;;;;AAaO,IAAM,OAAA,GAAUA,gBAAA;AAAA,EACrB,SAASC,QAAAA,CACP,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,GAAY,KAAA,EAAO,KAAA,GAAQ,GAAA,EAAK,MAAA,GAAS,CAAA,EAAG,SAAA,IACjE,IAAA,EACA;AACA,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtC,IAAA,MAAM,SAAA,GAAYC,aAAoB,IAAI,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAcA,aAAuB,IAAI,CAAA;AAC/C,IAAA,MAAM,UAAA,GAAaA,aAAsC,MAAS,CAAA;AAElE,IAAA,MAAM,QAAA,GAAWC,qCAAA,CAAoB,SAAA,EAAW,WAAA,EAAa;AAAA,MAC3D,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,IAAA,GAAOC,kBAAY,MAAM;AAC7B,MAAA,UAAA,CAAW,UAAU,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,IAC5D,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,IAAA,GAAOA,kBAAY,MAAM;AAC7B,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,OAAA,GAAUC,mBAAa,QAAA,EAAmD;AAAA,MAC9E,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc,IAAA;AAAA,MACd,YAAA,EAAc,IAAA;AAAA,MACd,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MACA,IAAA,mCACEC,wBAAA,EAAA,EACC,QAAA,kBAAAF,eAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,WAAA;AAAA,UACL,0BAAA,EAAyB,EAAA;AAAA,UACzB,IAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAWG,oBAAA;AAAA,YACT,2JAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,OAAO,EAAE,IAAA,EAAM,SAAS,CAAA,EAAG,GAAA,EAAK,SAAS,CAAA,EAAE;AAAA,UAE1C,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,4BACDC,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAWD,oBAAA;AAAA,kBACT,yDAAA;AAAA,kBACA,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,KAAK,CAAA,IACjC,yCAAA;AAAA,kBACF,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,IACpC,sCAAA;AAAA,kBACF,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,IAClC,uCAAA;AAAA,kBACF,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,IACnC;AAAA;AACJ;AAAA;AACF;AAAA;AAAA,OACF,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-ISPCXIJZ.cjs","sourcesContent":["import {\n cloneElement,\n forwardRef,\n useCallback,\n useRef,\n useState,\n type ReactElement,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { useFloatingPosition } from \"../../hooks/use-floating-position\";\nimport type { TooltipProps } from \"./Tooltip.types\";\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n function Tooltip(\n { children, content, placement = \"top\", delay = 200, offset = 8, className },\n _ref,\n ) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLElement>(null);\n const floatingRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const position = useFloatingPosition(anchorRef, floatingRef, {\n placement,\n offset,\n enabled: open,\n });\n\n const show = useCallback(() => {\n timeoutRef.current = setTimeout(() => setOpen(true), delay);\n }, [delay]);\n\n const hide = useCallback(() => {\n clearTimeout(timeoutRef.current);\n setOpen(false);\n }, []);\n\n const trigger = cloneElement(children as ReactElement<Record<string, unknown>>, {\n ref: anchorRef,\n onMouseEnter: show,\n onMouseLeave: hide,\n onFocus: show,\n onBlur: hide,\n });\n\n return (\n <>\n {trigger}\n {open && (\n <Portal>\n <div\n ref={floatingRef}\n data-react-fancy-tooltip=\"\"\n role=\"tooltip\"\n className={cn(\n \"fancy-fade-in pointer-events-none fixed z-50 max-w-xs rounded-lg bg-zinc-900 px-3 py-1.5 text-sm text-white shadow-lg dark:bg-zinc-700 dark:text-zinc-100\",\n className,\n )}\n style={{ left: position.x, top: position.y }}\n >\n {content}\n <div\n className={cn(\n \"absolute h-2 w-2 rotate-45 bg-zinc-900 dark:bg-zinc-700\",\n position.placement.startsWith(\"top\") &&\n \"bottom-[-4px] left-1/2 -translate-x-1/2\",\n position.placement.startsWith(\"bottom\") &&\n \"top-[-4px] left-1/2 -translate-x-1/2\",\n position.placement.startsWith(\"left\") &&\n \"right-[-4px] top-1/2 -translate-y-1/2\",\n position.placement.startsWith(\"right\") &&\n \"left-[-4px] top-1/2 -translate-y-1/2\",\n )}\n />\n </div>\n </Portal>\n )}\n </>\n );\n },\n);\n\nTooltip.displayName = \"Tooltip\";\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
1
|
+
import { cn } from './chunk-MMW2JGKZ.js';
|
|
2
2
|
import { forwardRef, useSyncExternalStore } from 'react';
|
|
3
3
|
import { jsx } from 'react/jsx-runtime';
|
|
4
4
|
|
|
@@ -133,5 +133,5 @@ var Icon = forwardRef(
|
|
|
133
133
|
Icon.displayName = "Icon";
|
|
134
134
|
|
|
135
135
|
export { Icon, configureIcons, registerIconAddendum, registerIconSet, registerIcons, resolveIcon };
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
137
|
-
//# sourceMappingURL=chunk-
|
|
136
|
+
//# sourceMappingURL=chunk-IVRYSSM7.js.map
|
|
137
|
+
//# sourceMappingURL=chunk-IVRYSSM7.js.map
|