@particle-academy/react-fancy 6.7.2 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -1
- package/dist/{Card-CuRZivBz.d.cts → Card-D0sp2T1V.d.cts} +6 -1
- package/dist/{Card-CuRZivBz.d.ts → Card-D0sp2T1V.d.ts} +6 -1
- package/dist/accordion-panel.cjs +7 -7
- package/dist/accordion-panel.js +1 -1
- package/dist/accordion.cjs +3 -3
- package/dist/accordion.js +1 -1
- package/dist/autocomplete.cjs +4 -3
- package/dist/autocomplete.js +3 -2
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.js +1 -1
- package/dist/breadcrumbs.cjs +2 -2
- package/dist/breadcrumbs.js +1 -1
- package/dist/button.cjs +3 -3
- package/dist/button.d.cts +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/button.js +1 -1
- package/dist/calendar.cjs +2 -2
- package/dist/calendar.js +1 -1
- package/dist/callout.cjs +2 -2
- package/dist/callout.js +1 -1
- package/dist/card.cjs +7 -7
- package/dist/card.d.cts +2 -2
- package/dist/card.d.ts +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.cjs +7 -7
- package/dist/carousel.js +1 -1
- package/dist/chart.cjs +2 -2
- package/dist/chart.js +1 -1
- package/dist/chat-drawer.cjs +2 -2
- package/dist/chat-drawer.js +1 -1
- package/dist/chat-thread.cjs +7 -7
- package/dist/chat-thread.js +5 -5
- 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-B4YV2V7G.cjs → chunk-2DX3PNXU.cjs} +3 -3
- package/dist/{chunk-B4YV2V7G.cjs.map → chunk-2DX3PNXU.cjs.map} +1 -1
- package/dist/{chunk-KPRSRWNM.js → chunk-2I7VNCBZ.js} +3 -3
- package/dist/{chunk-KPRSRWNM.js.map → chunk-2I7VNCBZ.js.map} +1 -1
- package/dist/{chunk-WMANILKC.cjs → chunk-2UYQ34RJ.cjs} +7 -7
- package/dist/chunk-2UYQ34RJ.cjs.map +1 -0
- package/dist/chunk-36IC3NDN.cjs +21 -0
- package/dist/chunk-36IC3NDN.cjs.map +1 -0
- package/dist/{chunk-LFC2DL6H.cjs → chunk-3BBEVHSP.cjs} +14 -9
- package/dist/chunk-3BBEVHSP.cjs.map +1 -0
- package/dist/{chunk-2O5UXH5R.cjs → chunk-3EZ6UPXS.cjs} +10 -10
- package/dist/chunk-3EZ6UPXS.cjs.map +1 -0
- package/dist/{chunk-XBFTO64U.cjs → chunk-3KJN3GTB.cjs} +4 -4
- package/dist/{chunk-XBFTO64U.cjs.map → chunk-3KJN3GTB.cjs.map} +1 -1
- package/dist/{chunk-37D5PYEF.js → chunk-3O3ZWWLG.js} +17 -4
- package/dist/chunk-3O3ZWWLG.js.map +1 -0
- package/dist/{chunk-5PHPJL7Z.js → chunk-4EQ336PQ.js} +4 -4
- package/dist/{chunk-5PHPJL7Z.js.map → chunk-4EQ336PQ.js.map} +1 -1
- package/dist/{chunk-EENHSMV2.js → chunk-4L3MGQAR.js} +6 -6
- package/dist/{chunk-EENHSMV2.js.map → chunk-4L3MGQAR.js.map} +1 -1
- package/dist/{chunk-QGY5FPVM.js → chunk-54NB3T3Q.js} +6 -4
- package/dist/chunk-54NB3T3Q.js.map +1 -0
- package/dist/{chunk-FRWOWDGX.js → chunk-5FA6V7JF.js} +3 -3
- package/dist/{chunk-FRWOWDGX.js.map → chunk-5FA6V7JF.js.map} +1 -1
- package/dist/{chunk-UUEAFG6V.js → chunk-5NJF7SQX.js} +6 -6
- package/dist/{chunk-UUEAFG6V.js.map → chunk-5NJF7SQX.js.map} +1 -1
- package/dist/{chunk-ZGDOWJKL.cjs → chunk-5NTFXQ4K.cjs} +6 -6
- package/dist/{chunk-ZGDOWJKL.cjs.map → chunk-5NTFXQ4K.cjs.map} +1 -1
- package/dist/{chunk-CQ7QXZLR.cjs → chunk-5SVZX6WF.cjs} +4 -4
- package/dist/chunk-5SVZX6WF.cjs.map +1 -0
- package/dist/{chunk-JY7HPFOE.cjs → chunk-6B2GMKE4.cjs} +5 -5
- package/dist/{chunk-JY7HPFOE.cjs.map → chunk-6B2GMKE4.cjs.map} +1 -1
- package/dist/{chunk-GSMD5NK5.js → chunk-6BCXGP2T.js} +7 -7
- package/dist/{chunk-GSMD5NK5.js.map → chunk-6BCXGP2T.js.map} +1 -1
- package/dist/{chunk-CVDL6C2O.cjs → chunk-6EPM5JG7.cjs} +3 -3
- package/dist/{chunk-CVDL6C2O.cjs.map → chunk-6EPM5JG7.cjs.map} +1 -1
- package/dist/{chunk-FVQO75KY.cjs → chunk-6GOPFKGC.cjs} +10 -4
- package/dist/chunk-6GOPFKGC.cjs.map +1 -0
- package/dist/{chunk-QTS4Q2NK.js → chunk-6RXEWM3V.js} +4 -3
- package/dist/chunk-6RXEWM3V.js.map +1 -0
- package/dist/{chunk-TLRFXSPA.cjs → chunk-73REG7KM.cjs} +13 -13
- package/dist/{chunk-TLRFXSPA.cjs.map → chunk-73REG7KM.cjs.map} +1 -1
- package/dist/{chunk-MI57NAKF.js → chunk-7B3Z4NVM.js} +6 -5
- package/dist/chunk-7B3Z4NVM.js.map +1 -0
- package/dist/{chunk-J2BWXCES.js → chunk-7GRIO5AZ.js} +3 -3
- package/dist/{chunk-J2BWXCES.js.map → chunk-7GRIO5AZ.js.map} +1 -1
- package/dist/{chunk-V5JTTLJP.cjs → chunk-7K2C744H.cjs} +3 -3
- package/dist/{chunk-V5JTTLJP.cjs.map → chunk-7K2C744H.cjs.map} +1 -1
- package/dist/{chunk-AJPYGRLA.cjs → chunk-7NRG77U5.cjs} +12 -4
- package/dist/chunk-7NRG77U5.cjs.map +1 -0
- package/dist/{chunk-GDF6XTHC.js → chunk-7OUBFO4D.js} +7 -5
- package/dist/chunk-7OUBFO4D.js.map +1 -0
- package/dist/{chunk-6H7ZN23X.cjs → chunk-7PK3OUKR.cjs} +6 -6
- package/dist/{chunk-6H7ZN23X.cjs.map → chunk-7PK3OUKR.cjs.map} +1 -1
- package/dist/{chunk-EUVWYDFN.js → chunk-AE6ICNJR.js} +14 -9
- package/dist/chunk-AE6ICNJR.js.map +1 -0
- package/dist/{chunk-YJXP6AOL.cjs → chunk-AF33UCTN.cjs} +4 -4
- package/dist/{chunk-YJXP6AOL.cjs.map → chunk-AF33UCTN.cjs.map} +1 -1
- package/dist/{chunk-PM5I5ZHK.cjs → chunk-AFFR7HHZ.cjs} +8 -7
- package/dist/chunk-AFFR7HHZ.cjs.map +1 -0
- package/dist/{chunk-F4OYQ2XZ.js → chunk-AR5DLM4K.js} +9 -6
- package/dist/chunk-AR5DLM4K.js.map +1 -0
- package/dist/{chunk-DJB3N4G3.cjs → chunk-AVGZ4PPC.cjs} +9 -9
- package/dist/{chunk-DJB3N4G3.cjs.map → chunk-AVGZ4PPC.cjs.map} +1 -1
- package/dist/{chunk-RANTYGKW.js → chunk-AXW55PQG.js} +3 -3
- package/dist/chunk-AXW55PQG.js.map +1 -0
- package/dist/{chunk-OASSZI6M.cjs → chunk-AZ5DWOQY.cjs} +5 -4
- package/dist/chunk-AZ5DWOQY.cjs.map +1 -0
- package/dist/{chunk-NSJBVV7R.js → chunk-BPTCMI3E.js} +21 -10
- package/dist/chunk-BPTCMI3E.js.map +1 -0
- package/dist/{chunk-PDVU2PXR.js → chunk-BQENLOEV.js} +10 -10
- package/dist/chunk-BQENLOEV.js.map +1 -0
- package/dist/{chunk-25HRO7HQ.cjs → chunk-BYMOPR7P.cjs} +7 -7
- package/dist/chunk-BYMOPR7P.cjs.map +1 -0
- package/dist/{chunk-FKZB27OM.cjs → chunk-C6EVRWXZ.cjs} +11 -8
- package/dist/chunk-C6EVRWXZ.cjs.map +1 -0
- package/dist/{chunk-GTS3QA7M.js → chunk-CO2NEUFK.js} +5 -5
- package/dist/chunk-CO2NEUFK.js.map +1 -0
- package/dist/{chunk-ESCIXKFT.js → chunk-D6NISIKV.js} +17 -7
- package/dist/chunk-D6NISIKV.js.map +1 -0
- package/dist/{chunk-MRZXTL46.cjs → chunk-DFROB5TW.cjs} +20 -20
- package/dist/{chunk-MRZXTL46.cjs.map → chunk-DFROB5TW.cjs.map} +1 -1
- package/dist/{chunk-KFA7B6WP.cjs → chunk-DPPDZOMY.cjs} +17 -7
- package/dist/chunk-DPPDZOMY.cjs.map +1 -0
- package/dist/{chunk-BXPLERIJ.js → chunk-DW2PHLOA.js} +5 -4
- package/dist/chunk-DW2PHLOA.js.map +1 -0
- package/dist/{chunk-BYO5RUDE.cjs → chunk-DXLPBLNC.cjs} +6 -5
- package/dist/chunk-DXLPBLNC.cjs.map +1 -0
- package/dist/{chunk-5WQ6FPSP.js → chunk-E2AEU5SP.js} +4 -4
- package/dist/{chunk-5WQ6FPSP.js.map → chunk-E2AEU5SP.js.map} +1 -1
- package/dist/{chunk-3QCAOD2W.cjs → chunk-EC4ZYZNK.cjs} +3 -3
- package/dist/{chunk-3QCAOD2W.cjs.map → chunk-EC4ZYZNK.cjs.map} +1 -1
- package/dist/{chunk-KXYMMNNV.js → chunk-EDIX6EXQ.js} +20 -20
- package/dist/{chunk-KXYMMNNV.js.map → chunk-EDIX6EXQ.js.map} +1 -1
- package/dist/{chunk-KOAMRCSC.cjs → chunk-ETUDUDSL.cjs} +14 -11
- package/dist/chunk-ETUDUDSL.cjs.map +1 -0
- package/dist/{chunk-LY3RQB3H.js → chunk-F3U4AVGF.js} +3 -3
- package/dist/{chunk-LY3RQB3H.js.map → chunk-F3U4AVGF.js.map} +1 -1
- package/dist/{chunk-AE53RKWR.cjs → chunk-FF5G3E76.cjs} +407 -22
- package/dist/chunk-FF5G3E76.cjs.map +1 -0
- package/dist/{chunk-WNWEC5OU.cjs → chunk-FKHYJ5IC.cjs} +3 -3
- package/dist/{chunk-WNWEC5OU.cjs.map → chunk-FKHYJ5IC.cjs.map} +1 -1
- package/dist/{chunk-QP6VNKLW.cjs → chunk-FNPII6TF.cjs} +9 -5
- package/dist/chunk-FNPII6TF.cjs.map +1 -0
- package/dist/{chunk-JY2RC6I4.js → chunk-FQCLJZZS.js} +13 -10
- package/dist/chunk-FQCLJZZS.js.map +1 -0
- package/dist/{chunk-EQ7G5F6K.js → chunk-FRUHEDZN.js} +3 -3
- package/dist/{chunk-EQ7G5F6K.js.map → chunk-FRUHEDZN.js.map} +1 -1
- package/dist/{chunk-BJL3VDRK.cjs → chunk-FY2WDVKF.cjs} +3 -3
- package/dist/{chunk-BJL3VDRK.cjs.map → chunk-FY2WDVKF.cjs.map} +1 -1
- package/dist/{chunk-SKMORSBO.cjs → chunk-FZQWFDUV.cjs} +5 -5
- package/dist/chunk-FZQWFDUV.cjs.map +1 -0
- package/dist/{chunk-HNJXBMHI.cjs → chunk-G5MDMQVQ.cjs} +40 -39
- package/dist/chunk-G5MDMQVQ.cjs.map +1 -0
- package/dist/{chunk-4DL2U23D.cjs → chunk-GE2ZGE3A.cjs} +21 -13
- package/dist/chunk-GE2ZGE3A.cjs.map +1 -0
- package/dist/{chunk-THMFLRDW.cjs → chunk-GE6TSA3M.cjs} +17 -17
- package/dist/{chunk-THMFLRDW.cjs.map → chunk-GE6TSA3M.cjs.map} +1 -1
- package/dist/{chunk-MQ6VGG62.js → chunk-GJWNZMJT.js} +14 -11
- package/dist/chunk-GJWNZMJT.js.map +1 -0
- package/dist/{chunk-5TP642UT.js → chunk-GODJVIIO.js} +12 -11
- package/dist/chunk-GODJVIIO.js.map +1 -0
- package/dist/{chunk-RLE5WYY6.js → chunk-GZSRKBYI.js} +406 -24
- package/dist/chunk-GZSRKBYI.js.map +1 -0
- package/dist/{chunk-FR4RHVPR.js → chunk-H7IQVCTX.js} +6 -4
- package/dist/chunk-H7IQVCTX.js.map +1 -0
- package/dist/{chunk-KOTUFZJ6.cjs → chunk-H7OTLGRD.cjs} +14 -11
- package/dist/chunk-H7OTLGRD.cjs.map +1 -0
- package/dist/{chunk-K5MQZTDW.cjs → chunk-HKLBCA5X.cjs} +4 -4
- package/dist/{chunk-K5MQZTDW.cjs.map → chunk-HKLBCA5X.cjs.map} +1 -1
- package/dist/{chunk-5QKQXM5V.cjs → chunk-HYU46SOE.cjs} +5 -5
- package/dist/{chunk-5QKQXM5V.cjs.map → chunk-HYU46SOE.cjs.map} +1 -1
- package/dist/{chunk-X2A3NAJW.js → chunk-I65KXHYL.js} +4 -4
- package/dist/chunk-I65KXHYL.js.map +1 -0
- package/dist/{chunk-USWQAMI3.js → chunk-IF6EITB5.js} +3 -3
- package/dist/{chunk-USWQAMI3.js.map → chunk-IF6EITB5.js.map} +1 -1
- package/dist/{chunk-DXZCKDYS.js → chunk-IG2UDCBA.js} +9 -9
- package/dist/chunk-IG2UDCBA.js.map +1 -0
- package/dist/{chunk-YQZB5Z7C.cjs → chunk-INC35VEE.cjs} +3 -2
- package/dist/chunk-INC35VEE.cjs.map +1 -0
- package/dist/{chunk-AQ4DZT4Y.cjs → chunk-ISAHWGMD.cjs} +6 -6
- package/dist/{chunk-AQ4DZT4Y.cjs.map → chunk-ISAHWGMD.cjs.map} +1 -1
- package/dist/{chunk-PJNUGSKI.js → chunk-IYG436ZY.js} +26 -25
- package/dist/chunk-IYG436ZY.js.map +1 -0
- package/dist/{chunk-Z4UXLQSK.cjs → chunk-JDFJK5GO.cjs} +16 -16
- package/dist/chunk-JDFJK5GO.cjs.map +1 -0
- package/dist/{chunk-MAZEX4EZ.cjs → chunk-JQIFCWNZ.cjs} +13 -13
- package/dist/{chunk-MAZEX4EZ.cjs.map → chunk-JQIFCWNZ.cjs.map} +1 -1
- package/dist/{chunk-MKGWHSNV.cjs → chunk-JV2HEOCB.cjs} +5 -4
- package/dist/chunk-JV2HEOCB.cjs.map +1 -0
- package/dist/{chunk-GDH43QH6.js → chunk-KAKKZDCE.js} +6 -6
- package/dist/{chunk-GDH43QH6.js.map → chunk-KAKKZDCE.js.map} +1 -1
- package/dist/{chunk-DJYG7DXS.js → chunk-KDRBUF5S.js} +4 -4
- package/dist/chunk-KDRBUF5S.js.map +1 -0
- package/dist/{chunk-ZVDW2VX5.cjs → chunk-KGSL6SVX.cjs} +3 -3
- package/dist/chunk-KGSL6SVX.cjs.map +1 -0
- package/dist/{chunk-YAPGHVBZ.js → chunk-KRECSPD3.js} +4 -4
- package/dist/{chunk-YAPGHVBZ.js.map → chunk-KRECSPD3.js.map} +1 -1
- package/dist/{chunk-NPSKZ7ZB.cjs → chunk-L5NDZEL6.cjs} +12 -12
- package/dist/{chunk-NPSKZ7ZB.cjs.map → chunk-L5NDZEL6.cjs.map} +1 -1
- package/dist/{chunk-UE3QO7R3.js → chunk-LAQT5FFV.js} +3 -3
- package/dist/{chunk-UE3QO7R3.js.map → chunk-LAQT5FFV.js.map} +1 -1
- package/dist/{chunk-YH75G6SP.cjs → chunk-LHHELLMT.cjs} +3 -3
- package/dist/{chunk-YH75G6SP.cjs.map → chunk-LHHELLMT.cjs.map} +1 -1
- package/dist/{chunk-UK6BGM74.cjs → chunk-LREJ7AV2.cjs} +17 -4
- package/dist/chunk-LREJ7AV2.cjs.map +1 -0
- package/dist/{chunk-Y3QAEF2P.cjs → chunk-LVNCNMKD.cjs} +9 -7
- package/dist/chunk-LVNCNMKD.cjs.map +1 -0
- package/dist/{chunk-UZCR7DK5.js → chunk-LXEOBSEZ.js} +3 -3
- package/dist/{chunk-UZCR7DK5.js.map → chunk-LXEOBSEZ.js.map} +1 -1
- package/dist/{chunk-HLI6RB5V.cjs → chunk-M5ER3Y5I.cjs} +32 -31
- package/dist/chunk-M5ER3Y5I.cjs.map +1 -0
- package/dist/{chunk-CEFK54WP.cjs → chunk-MDAI54AG.cjs} +7 -5
- package/dist/chunk-MDAI54AG.cjs.map +1 -0
- package/dist/{chunk-WE5WGVVX.js → chunk-MKDTXMCE.js} +3 -3
- package/dist/{chunk-WE5WGVVX.js.map → chunk-MKDTXMCE.js.map} +1 -1
- package/dist/{chunk-SXXDTW7S.js → chunk-NETUI353.js} +10 -4
- package/dist/chunk-NETUI353.js.map +1 -0
- package/dist/{chunk-XHUV3VSM.cjs → chunk-NIFHAFKK.cjs} +3 -3
- package/dist/{chunk-XHUV3VSM.cjs.map → chunk-NIFHAFKK.cjs.map} +1 -1
- package/dist/{chunk-LKN7FYW6.js → chunk-NW2LQRUP.js} +4 -4
- package/dist/chunk-NW2LQRUP.js.map +1 -0
- package/dist/{chunk-ONHT2PDW.cjs → chunk-NWP5EGSR.cjs} +3 -3
- package/dist/{chunk-ONHT2PDW.cjs.map → chunk-NWP5EGSR.cjs.map} +1 -1
- package/dist/{chunk-RSLZL6VP.js → chunk-OBA2LR4I.js} +3 -3
- package/dist/chunk-OBA2LR4I.js.map +1 -0
- package/dist/{chunk-VSTUGU7W.js → chunk-PIYQPXLT.js} +8 -8
- package/dist/{chunk-VSTUGU7W.js.map → chunk-PIYQPXLT.js.map} +1 -1
- package/dist/{chunk-WX5XYDVN.js → chunk-PZTFGPQJ.js} +3 -3
- package/dist/{chunk-WX5XYDVN.js.map → chunk-PZTFGPQJ.js.map} +1 -1
- package/dist/{chunk-4GPH7HOR.js → chunk-Q4CNEHVN.js} +3 -3
- package/dist/{chunk-4GPH7HOR.js.map → chunk-Q4CNEHVN.js.map} +1 -1
- package/dist/{chunk-I2VAGZXY.cjs → chunk-Q62RDKRA.cjs} +11 -11
- package/dist/{chunk-I2VAGZXY.cjs.map → chunk-Q62RDKRA.cjs.map} +1 -1
- package/dist/{chunk-QF7CD4JH.cjs → chunk-Q7XL37T3.cjs} +5 -5
- package/dist/{chunk-QF7CD4JH.cjs.map → chunk-Q7XL37T3.cjs.map} +1 -1
- package/dist/{chunk-XZOBGKZL.cjs → chunk-QAM6N3VG.cjs} +6 -5
- package/dist/chunk-QAM6N3VG.cjs.map +1 -0
- package/dist/{chunk-BLOX7MRO.js → chunk-QE7KXMUZ.js} +3 -3
- package/dist/{chunk-BLOX7MRO.js.map → chunk-QE7KXMUZ.js.map} +1 -1
- package/dist/{chunk-ZPBKRJMH.js → chunk-QEJBMXRQ.js} +7 -7
- package/dist/chunk-QEJBMXRQ.js.map +1 -0
- package/dist/{chunk-PCNJJVTF.cjs → chunk-QMZK7SRS.cjs} +3 -3
- package/dist/chunk-QMZK7SRS.cjs.map +1 -0
- package/dist/{chunk-TFX4LL7V.js → chunk-QSRYTWQN.js} +3 -2
- package/dist/chunk-QSRYTWQN.js.map +1 -0
- package/dist/{chunk-Z7SQMQTF.cjs → chunk-QU6HZH6V.cjs} +21 -10
- package/dist/chunk-QU6HZH6V.cjs.map +1 -0
- package/dist/{chunk-GR2WKBER.js → chunk-QUZOGRZS.js} +4 -3
- package/dist/chunk-QUZOGRZS.js.map +1 -0
- package/dist/{chunk-WGRLNXNB.js → chunk-R3PCZSBQ.js} +3 -3
- package/dist/{chunk-WGRLNXNB.js.map → chunk-R3PCZSBQ.js.map} +1 -1
- package/dist/{chunk-EZZKHMR4.js → chunk-R6O6SLXK.js} +3 -3
- package/dist/{chunk-EZZKHMR4.js.map → chunk-R6O6SLXK.js.map} +1 -1
- package/dist/{chunk-5EW47IH7.js → chunk-RCTPN5QK.js} +9 -7
- package/dist/chunk-RCTPN5QK.js.map +1 -0
- package/dist/{chunk-JSD6IEBW.js → chunk-RFTDMQ56.js} +3 -3
- package/dist/{chunk-JSD6IEBW.js.map → chunk-RFTDMQ56.js.map} +1 -1
- package/dist/{chunk-6PRXG7L6.js → chunk-RSB2P3JK.js} +4 -4
- package/dist/{chunk-6PRXG7L6.js.map → chunk-RSB2P3JK.js.map} +1 -1
- package/dist/{chunk-2G6TIX5Q.cjs → chunk-RVBA4LEB.cjs} +13 -13
- package/dist/{chunk-2G6TIX5Q.cjs.map → chunk-RVBA4LEB.cjs.map} +1 -1
- package/dist/{chunk-UVUBV4VZ.js → chunk-S2ID4NNQ.js} +6 -6
- package/dist/{chunk-UVUBV4VZ.js.map → chunk-S2ID4NNQ.js.map} +1 -1
- package/dist/{chunk-TMQF2CRN.js → chunk-S4JQPOBR.js} +7 -7
- package/dist/chunk-S4JQPOBR.js.map +1 -0
- package/dist/{chunk-ETNQ4AEQ.cjs → chunk-S6TVSQDT.cjs} +5 -5
- package/dist/{chunk-ETNQ4AEQ.cjs.map → chunk-S6TVSQDT.cjs.map} +1 -1
- package/dist/{chunk-SSCW67KA.cjs → chunk-SD6YAMDH.cjs} +4 -4
- package/dist/chunk-SD6YAMDH.cjs.map +1 -0
- package/dist/{chunk-MLZGGAXQ.js → chunk-SOIGBPK6.js} +21 -13
- package/dist/chunk-SOIGBPK6.js.map +1 -0
- package/dist/{chunk-7QENPLOP.cjs → chunk-TQDZZIOW.cjs} +5 -5
- package/dist/{chunk-7QENPLOP.cjs.map → chunk-TQDZZIOW.cjs.map} +1 -1
- package/dist/{chunk-MPCZUZ4O.cjs → chunk-U4KUW3RK.cjs} +19 -15
- package/dist/chunk-U4KUW3RK.cjs.map +1 -0
- package/dist/{chunk-AZQXPI5S.js → chunk-UBLMYH6C.js} +3 -3
- package/dist/{chunk-AZQXPI5S.js.map → chunk-UBLMYH6C.js.map} +1 -1
- package/dist/{chunk-P53432AK.cjs → chunk-UIBAIWUR.cjs} +4 -4
- package/dist/{chunk-P53432AK.cjs.map → chunk-UIBAIWUR.cjs.map} +1 -1
- package/dist/{chunk-KKYILQTG.cjs → chunk-UORN3Z7R.cjs} +7 -7
- package/dist/{chunk-KKYILQTG.cjs.map → chunk-UORN3Z7R.cjs.map} +1 -1
- package/dist/{chunk-UXYFM2XT.cjs → chunk-UQABXIQV.cjs} +6 -4
- package/dist/chunk-UQABXIQV.cjs.map +1 -0
- package/dist/chunk-US5R36TQ.js +17 -0
- package/dist/chunk-US5R36TQ.js.map +1 -0
- package/dist/{chunk-CS2ZYMYP.js → chunk-UZZJJ3HJ.js} +3 -3
- package/dist/{chunk-CS2ZYMYP.js.map → chunk-UZZJJ3HJ.js.map} +1 -1
- package/dist/{chunk-Y7RGUUTS.cjs → chunk-V3EKI3VV.cjs} +3 -3
- package/dist/{chunk-Y7RGUUTS.cjs.map → chunk-V3EKI3VV.cjs.map} +1 -1
- package/dist/{chunk-U4Y7ZXME.js → chunk-V64XIPYG.js} +6 -6
- package/dist/{chunk-U4Y7ZXME.js.map → chunk-V64XIPYG.js.map} +1 -1
- package/dist/{chunk-RWU2MFUL.js → chunk-VGUAIFGE.js} +5 -4
- package/dist/chunk-VGUAIFGE.js.map +1 -0
- package/dist/{chunk-LIVC3WUU.cjs → chunk-VH34IZ7R.cjs} +3 -3
- package/dist/{chunk-LIVC3WUU.cjs.map → chunk-VH34IZ7R.cjs.map} +1 -1
- package/dist/{chunk-WNUAGRQN.cjs → chunk-VOAC5OKY.cjs} +4 -4
- package/dist/chunk-VOAC5OKY.cjs.map +1 -0
- package/dist/{chunk-H7ELUIF6.cjs → chunk-W53SZTPX.cjs} +10 -10
- package/dist/{chunk-H7ELUIF6.cjs.map → chunk-W53SZTPX.cjs.map} +1 -1
- package/dist/{chunk-4FH2JHUY.js → chunk-WAEOIEDI.js} +5 -5
- package/dist/{chunk-4FH2JHUY.js.map → chunk-WAEOIEDI.js.map} +1 -1
- package/dist/{chunk-ICMLLZKZ.js → chunk-WJE7UX2G.js} +4 -4
- package/dist/{chunk-ICMLLZKZ.js.map → chunk-WJE7UX2G.js.map} +1 -1
- package/dist/{chunk-DTOIO42M.js → chunk-WLRKE4HC.js} +9 -5
- package/dist/chunk-WLRKE4HC.js.map +1 -0
- package/dist/{chunk-7ZCNZUZK.cjs → chunk-WOURDD4U.cjs} +4 -4
- package/dist/{chunk-7ZCNZUZK.cjs.map → chunk-WOURDD4U.cjs.map} +1 -1
- package/dist/{chunk-OTM7RL2L.js → chunk-WSU36HJM.js} +4 -4
- package/dist/{chunk-OTM7RL2L.js.map → chunk-WSU36HJM.js.map} +1 -1
- package/dist/{chunk-TAYJSIOP.js → chunk-X4NXS42J.js} +5 -5
- package/dist/{chunk-TAYJSIOP.js.map → chunk-X4NXS42J.js.map} +1 -1
- package/dist/{chunk-2UTN3EFK.js → chunk-XALAQZCD.js} +5 -5
- package/dist/{chunk-2UTN3EFK.js.map → chunk-XALAQZCD.js.map} +1 -1
- package/dist/{chunk-RZUYCZ5D.cjs → chunk-XCFBMHQD.cjs} +6 -4
- package/dist/chunk-XCFBMHQD.cjs.map +1 -0
- package/dist/{chunk-NZHVDWOM.cjs → chunk-XEI5JG7C.cjs} +3 -3
- package/dist/{chunk-NZHVDWOM.cjs.map → chunk-XEI5JG7C.cjs.map} +1 -1
- package/dist/{chunk-O3F6DYWR.cjs → chunk-XG6J5MOK.cjs} +3 -3
- package/dist/{chunk-O3F6DYWR.cjs.map → chunk-XG6J5MOK.cjs.map} +1 -1
- package/dist/{chunk-J2DI6RMR.cjs → chunk-XGGAAG74.cjs} +14 -11
- package/dist/chunk-XGGAAG74.cjs.map +1 -0
- package/dist/{chunk-GVMWJ4NI.js → chunk-XH24BGEK.js} +6 -6
- package/dist/{chunk-GVMWJ4NI.js.map → chunk-XH24BGEK.js.map} +1 -1
- package/dist/{chunk-3S5ED522.js → chunk-XO4GHRA2.js} +11 -8
- package/dist/chunk-XO4GHRA2.js.map +1 -0
- package/dist/{chunk-O5ORO2RX.cjs → chunk-XQF4HCOV.cjs} +13 -11
- package/dist/chunk-XQF4HCOV.cjs.map +1 -0
- package/dist/{chunk-VZTXUYPM.cjs → chunk-XT4WBBCD.cjs} +20 -20
- package/dist/chunk-XT4WBBCD.cjs.map +1 -0
- package/dist/{chunk-Z44A7NPD.cjs → chunk-YBBBX5H2.cjs} +40 -39
- package/dist/chunk-YBBBX5H2.cjs.map +1 -0
- package/dist/{chunk-IUCYRQ4J.js → chunk-YPYZZLZ5.js} +5 -5
- package/dist/{chunk-IUCYRQ4J.js.map → chunk-YPYZZLZ5.js.map} +1 -1
- package/dist/{chunk-NVXTHTJI.js → chunk-YTWMIVRI.js} +10 -10
- package/dist/chunk-YTWMIVRI.js.map +1 -0
- package/dist/{chunk-WZAKEJDL.js → chunk-YZW7HQXH.js} +13 -11
- package/dist/chunk-YZW7HQXH.js.map +1 -0
- package/dist/{chunk-AYBKPAI2.cjs → chunk-Z5MNYYUJ.cjs} +3 -3
- package/dist/{chunk-AYBKPAI2.cjs.map → chunk-Z5MNYYUJ.cjs.map} +1 -1
- package/dist/{chunk-GOE36IXL.js → chunk-Z6M3UELD.js} +3 -3
- package/dist/{chunk-GOE36IXL.js.map → chunk-Z6M3UELD.js.map} +1 -1
- package/dist/{chunk-PXZRYL5I.js → chunk-ZBXJDQXN.js} +12 -4
- package/dist/chunk-ZBXJDQXN.js.map +1 -0
- package/dist/{chunk-M5SEYDSS.cjs → chunk-ZDHLEHYR.cjs} +6 -6
- package/dist/{chunk-M5SEYDSS.cjs.map → chunk-ZDHLEHYR.cjs.map} +1 -1
- package/dist/{chunk-SCGTO3PX.js → chunk-ZHTK4IPQ.js} +3 -3
- package/dist/{chunk-SCGTO3PX.js.map → chunk-ZHTK4IPQ.js.map} +1 -1
- package/dist/{chunk-QF2FODTG.js → chunk-ZL5QVNKG.js} +10 -6
- package/dist/chunk-ZL5QVNKG.js.map +1 -0
- package/dist/{chunk-6GVOW3UL.js → chunk-ZUJVGHFW.js} +12 -11
- package/dist/chunk-ZUJVGHFW.js.map +1 -0
- package/dist/code-block.cjs +4 -4
- package/dist/code-block.js +3 -3
- package/dist/code-view.cjs +2 -2
- package/dist/code-view.js +1 -1
- package/dist/command.cjs +3 -3
- package/dist/command.js +1 -1
- package/dist/composer.cjs +7 -6
- package/dist/composer.js +5 -4
- package/dist/content-renderer.cjs +6 -6
- package/dist/content-renderer.js +3 -3
- package/dist/context-menu.cjs +4 -3
- package/dist/context-menu.d.cts +2 -0
- package/dist/context-menu.d.ts +2 -0
- package/dist/context-menu.js +2 -1
- package/dist/date-picker.cjs +5 -5
- package/dist/date-picker.js +4 -4
- package/dist/drawer.cjs +3 -3
- package/dist/drawer.d.cts +10 -4
- package/dist/drawer.d.ts +10 -4
- package/dist/drawer.js +1 -1
- package/dist/dropdown.cjs +5 -4
- package/dist/dropdown.js +3 -2
- package/dist/editor.cjs +9 -8
- package/dist/editor.js +7 -6
- package/dist/emoji-select.cjs +2 -2
- package/dist/emoji-select.js +1 -1
- package/dist/eyebrow.cjs +2 -2
- package/dist/eyebrow.js +1 -1
- package/dist/faux-client.cjs +2 -2
- package/dist/faux-client.js +1 -1
- package/dist/field.cjs +3 -3
- package/dist/field.js +2 -2
- package/dist/file-browser.cjs +6 -5
- package/dist/file-browser.js +2 -1
- package/dist/file-upload.cjs +3 -3
- package/dist/file-upload.js +1 -1
- package/dist/image-viewer.cjs +3 -3
- package/dist/image-viewer.js +2 -2
- package/dist/index-list.cjs +2 -2
- package/dist/index-list.js +1 -1
- package/dist/index.cjs +222 -209
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -2
- package/dist/index.d.ts +20 -2
- package/dist/index.js +78 -77
- package/dist/index.js.map +1 -1
- package/dist/input-tag.cjs +7 -6
- package/dist/input-tag.d.cts +6 -2
- package/dist/input-tag.d.ts +6 -2
- package/dist/input-tag.js +2 -1
- package/dist/input.cjs +10 -9
- package/dist/input.js +9 -8
- package/dist/inputs.cjs +32 -31
- package/dist/inputs.js +19 -18
- package/dist/json-editor.cjs +27 -26
- package/dist/json-editor.js +16 -15
- package/dist/magic-wand.cjs +8 -8
- package/dist/magic-wand.js +7 -7
- package/dist/marquee.cjs +2 -2
- package/dist/marquee.js +1 -1
- package/dist/media-viewer.cjs +5 -5
- package/dist/media-viewer.js +4 -4
- package/dist/menu.cjs +3 -3
- package/dist/menu.js +1 -1
- package/dist/mobile-menu.cjs +5 -4
- package/dist/mobile-menu.d.cts +2 -1
- package/dist/mobile-menu.d.ts +2 -1
- package/dist/mobile-menu.js +3 -2
- package/dist/mode.cjs +3 -3
- package/dist/mode.js +2 -2
- package/dist/multi-switch.cjs +6 -5
- package/dist/multi-switch.js +5 -4
- package/dist/number-field.cjs +11 -10
- package/dist/number-field.js +10 -9
- package/dist/otp-input.cjs +3 -2
- package/dist/otp-input.js +2 -1
- package/dist/pagination.cjs +2 -2
- package/dist/pagination.js +1 -1
- package/dist/paste-pills.cjs +17 -16
- package/dist/paste-pills.js +4 -3
- package/dist/pdf-viewer.cjs +3 -3
- package/dist/pdf-viewer.js +2 -2
- package/dist/popover.cjs +5 -4
- package/dist/popover.js +3 -2
- package/dist/profile.cjs +3 -3
- package/dist/profile.js +2 -2
- package/dist/progress.cjs +2 -2
- package/dist/progress.js +1 -1
- package/dist/prompt-input.cjs +10 -9
- package/dist/prompt-input.js +7 -6
- package/dist/qr-code.cjs +19 -4
- package/dist/qr-code.d.cts +221 -2
- package/dist/qr-code.d.ts +221 -2
- package/dist/qr-code.js +4 -1
- package/dist/radio-group.cjs +5 -5
- package/dist/radio-group.js +4 -4
- package/dist/reason-tag.cjs +6 -5
- package/dist/reason-tag.js +5 -4
- package/dist/reorderable-grid.cjs +4 -3
- package/dist/reorderable-grid.js +2 -1
- package/dist/resizable-panels.cjs +3 -2
- package/dist/resizable-panels.js +2 -1
- package/dist/select.cjs +8 -7
- package/dist/select.js +7 -6
- package/dist/separator.cjs +2 -2
- package/dist/separator.js +1 -1
- package/dist/sidebar.cjs +6 -5
- package/dist/sidebar.js +4 -3
- package/dist/slider.cjs +5 -5
- package/dist/slider.js +4 -4
- package/dist/stat-list.cjs +2 -2
- package/dist/stat-list.d.cts +5 -2
- package/dist/stat-list.d.ts +5 -2
- package/dist/stat-list.js +1 -1
- package/dist/stepper.cjs +3 -2
- package/dist/stepper.js +2 -1
- package/dist/styles.css +24 -0
- package/dist/styles.css.map +1 -1
- package/dist/switch.cjs +3 -3
- package/dist/switch.js +2 -2
- package/dist/table.cjs +11 -11
- package/dist/table.js +1 -1
- package/dist/tabs.cjs +4 -3
- package/dist/tabs.js +2 -1
- package/dist/textarea.cjs +6 -6
- package/dist/textarea.js +5 -5
- package/dist/time-grid.cjs +3 -2
- package/dist/time-grid.js +2 -1
- package/dist/time-picker.cjs +2 -2
- package/dist/time-picker.js +1 -1
- package/dist/timeline.cjs +4 -4
- package/dist/timeline.js +1 -1
- package/dist/toast.cjs +4 -3
- package/dist/toast.d.cts +6 -2
- package/dist/toast.d.ts +6 -2
- package/dist/toast.js +2 -1
- package/dist/tooltip.cjs +4 -3
- package/dist/tooltip.js +3 -2
- package/dist/tree-nav.cjs +3 -3
- package/dist/tree-nav.js +1 -1
- package/docs/Dropdown.md +1 -1
- package/docs/InputTag.md +1 -1
- package/docs/MobileMenu.md +2 -2
- package/docs/Popover.md +1 -1
- package/docs/QrCode.md +108 -0
- package/docs/ReorderableGrid.md +2 -0
- package/docs/ResizablePanels.md +2 -0
- package/docs/Toast.md +2 -2
- package/package.json +1 -1
- package/dist/chunk-25HRO7HQ.cjs.map +0 -1
- package/dist/chunk-2O5UXH5R.cjs.map +0 -1
- package/dist/chunk-37D5PYEF.js.map +0 -1
- package/dist/chunk-3S5ED522.js.map +0 -1
- package/dist/chunk-4DL2U23D.cjs.map +0 -1
- package/dist/chunk-5EW47IH7.js.map +0 -1
- package/dist/chunk-5TP642UT.js.map +0 -1
- package/dist/chunk-6GVOW3UL.js.map +0 -1
- package/dist/chunk-AE53RKWR.cjs.map +0 -1
- package/dist/chunk-AJPYGRLA.cjs.map +0 -1
- package/dist/chunk-BXPLERIJ.js.map +0 -1
- package/dist/chunk-BYO5RUDE.cjs.map +0 -1
- package/dist/chunk-CEFK54WP.cjs.map +0 -1
- package/dist/chunk-CQ7QXZLR.cjs.map +0 -1
- package/dist/chunk-DJYG7DXS.js.map +0 -1
- package/dist/chunk-DTOIO42M.js.map +0 -1
- package/dist/chunk-DXZCKDYS.js.map +0 -1
- package/dist/chunk-ESCIXKFT.js.map +0 -1
- package/dist/chunk-EUVWYDFN.js.map +0 -1
- package/dist/chunk-F4OYQ2XZ.js.map +0 -1
- package/dist/chunk-FKZB27OM.cjs.map +0 -1
- package/dist/chunk-FR4RHVPR.js.map +0 -1
- package/dist/chunk-FVQO75KY.cjs.map +0 -1
- package/dist/chunk-GDF6XTHC.js.map +0 -1
- package/dist/chunk-GR2WKBER.js.map +0 -1
- package/dist/chunk-GTS3QA7M.js.map +0 -1
- package/dist/chunk-HLI6RB5V.cjs.map +0 -1
- package/dist/chunk-HNJXBMHI.cjs.map +0 -1
- package/dist/chunk-J2DI6RMR.cjs.map +0 -1
- package/dist/chunk-JY2RC6I4.js.map +0 -1
- package/dist/chunk-KFA7B6WP.cjs.map +0 -1
- package/dist/chunk-KOAMRCSC.cjs.map +0 -1
- package/dist/chunk-KOTUFZJ6.cjs.map +0 -1
- package/dist/chunk-LFC2DL6H.cjs.map +0 -1
- package/dist/chunk-LKN7FYW6.js.map +0 -1
- package/dist/chunk-MI57NAKF.js.map +0 -1
- package/dist/chunk-MKGWHSNV.cjs.map +0 -1
- package/dist/chunk-MLZGGAXQ.js.map +0 -1
- package/dist/chunk-MPCZUZ4O.cjs.map +0 -1
- package/dist/chunk-MQ6VGG62.js.map +0 -1
- package/dist/chunk-NSJBVV7R.js.map +0 -1
- package/dist/chunk-NVXTHTJI.js.map +0 -1
- package/dist/chunk-O5ORO2RX.cjs.map +0 -1
- package/dist/chunk-OASSZI6M.cjs.map +0 -1
- package/dist/chunk-PCNJJVTF.cjs.map +0 -1
- package/dist/chunk-PDVU2PXR.js.map +0 -1
- package/dist/chunk-PJNUGSKI.js.map +0 -1
- package/dist/chunk-PM5I5ZHK.cjs.map +0 -1
- package/dist/chunk-PXZRYL5I.js.map +0 -1
- package/dist/chunk-QF2FODTG.js.map +0 -1
- package/dist/chunk-QGY5FPVM.js.map +0 -1
- package/dist/chunk-QP6VNKLW.cjs.map +0 -1
- package/dist/chunk-QTS4Q2NK.js.map +0 -1
- package/dist/chunk-RANTYGKW.js.map +0 -1
- package/dist/chunk-RLE5WYY6.js.map +0 -1
- package/dist/chunk-RSLZL6VP.js.map +0 -1
- package/dist/chunk-RWU2MFUL.js.map +0 -1
- package/dist/chunk-RZUYCZ5D.cjs.map +0 -1
- package/dist/chunk-SKMORSBO.cjs.map +0 -1
- package/dist/chunk-SSCW67KA.cjs.map +0 -1
- package/dist/chunk-SXXDTW7S.js.map +0 -1
- package/dist/chunk-TFX4LL7V.js.map +0 -1
- package/dist/chunk-TMQF2CRN.js.map +0 -1
- package/dist/chunk-UK6BGM74.cjs.map +0 -1
- package/dist/chunk-UXYFM2XT.cjs.map +0 -1
- package/dist/chunk-VZTXUYPM.cjs.map +0 -1
- package/dist/chunk-WMANILKC.cjs.map +0 -1
- package/dist/chunk-WNUAGRQN.cjs.map +0 -1
- package/dist/chunk-WZAKEJDL.js.map +0 -1
- package/dist/chunk-X2A3NAJW.js.map +0 -1
- package/dist/chunk-XZOBGKZL.cjs.map +0 -1
- package/dist/chunk-Y3QAEF2P.cjs.map +0 -1
- package/dist/chunk-YQZB5Z7C.cjs.map +0 -1
- package/dist/chunk-Z44A7NPD.cjs.map +0 -1
- package/dist/chunk-Z4UXLQSK.cjs.map +0 -1
- package/dist/chunk-Z7SQMQTF.cjs.map +0 -1
- package/dist/chunk-ZPBKRJMH.js.map +0 -1
- package/dist/chunk-ZVDW2VX5.cjs.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
3
|
+
var chunkDFROB5TW_cjs = require('./chunk-DFROB5TW.cjs');
|
|
4
|
+
var chunkUIBAIWUR_cjs = require('./chunk-UIBAIWUR.cjs');
|
|
5
|
+
var chunkQ7XL37T3_cjs = require('./chunk-Q7XL37T3.cjs');
|
|
6
|
+
var chunkXG6J5MOK_cjs = require('./chunk-XG6J5MOK.cjs');
|
|
7
7
|
var chunk6V44RRSB_cjs = require('./chunk-6V44RRSB.cjs');
|
|
8
|
-
var
|
|
8
|
+
var chunkXGGAAG74_cjs = require('./chunk-XGGAAG74.cjs');
|
|
9
9
|
var chunkTI7D4QDM_cjs = require('./chunk-TI7D4QDM.cjs');
|
|
10
10
|
var chunkKJ22KE56_cjs = require('./chunk-KJ22KE56.cjs');
|
|
11
11
|
var chunkL3V3BYVS_cjs = require('./chunk-L3V3BYVS.cjs');
|
|
@@ -30,7 +30,7 @@ function flattenOptions(list) {
|
|
|
30
30
|
return flat;
|
|
31
31
|
}
|
|
32
32
|
function renderNativeOption(option, index) {
|
|
33
|
-
const resolved =
|
|
33
|
+
const resolved = chunkXG6J5MOK_cjs.resolveOption(option);
|
|
34
34
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
35
|
"option",
|
|
36
36
|
{
|
|
@@ -72,9 +72,9 @@ var NativeSelect = react.forwardRef(
|
|
|
72
72
|
const { showControl, interactive, enterEdit, exitEdit } = chunkKJ22KE56_cjs.useInlineEdit(resolvedMode, disabled);
|
|
73
73
|
if (!showControl) {
|
|
74
74
|
const current = value ?? defaultValue;
|
|
75
|
-
const opt = flattenOptions(list).map((o) =>
|
|
75
|
+
const opt = flattenOptions(list).map((o) => chunkXG6J5MOK_cjs.resolveOption(o)).find((o) => o.value === current);
|
|
76
76
|
const display = /* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
-
|
|
77
|
+
chunkUIBAIWUR_cjs.DisplayValue,
|
|
78
78
|
{
|
|
79
79
|
size,
|
|
80
80
|
leading: prefix,
|
|
@@ -86,7 +86,7 @@ var NativeSelect = react.forwardRef(
|
|
|
86
86
|
);
|
|
87
87
|
if (label || error || description) {
|
|
88
88
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
-
|
|
89
|
+
chunkQ7XL37T3_cjs.Field,
|
|
90
90
|
{
|
|
91
91
|
label,
|
|
92
92
|
labelHidden,
|
|
@@ -104,7 +104,7 @@ var NativeSelect = react.forwardRef(
|
|
|
104
104
|
const isControlled = value !== void 0;
|
|
105
105
|
const resolvedDefault = !isControlled && defaultValue === void 0 && placeholder ? "" : defaultValue;
|
|
106
106
|
const select = /* @__PURE__ */ jsxRuntime.jsx(
|
|
107
|
-
|
|
107
|
+
chunkDFROB5TW_cjs.InputWrapper,
|
|
108
108
|
{
|
|
109
109
|
prefix,
|
|
110
110
|
suffix,
|
|
@@ -120,13 +120,13 @@ var NativeSelect = react.forwardRef(
|
|
|
120
120
|
disabled,
|
|
121
121
|
required,
|
|
122
122
|
className: chunkZU5Q77OT_cjs.cn(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
chunkXG6J5MOK_cjs.inputBaseClasses,
|
|
124
|
+
chunkXG6J5MOK_cjs.inputSizeClasses[size],
|
|
125
|
+
chunkXG6J5MOK_cjs.dirtyClasses(dirty),
|
|
126
|
+
chunkXG6J5MOK_cjs.errorClasses(error),
|
|
127
127
|
"w-full appearance-none bg-no-repeat bg-[length:16px] bg-[right_8px_center]",
|
|
128
128
|
"bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22%236b7280%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M5.23%207.21a.75.75%200%20011.06.02L10%2011.168l3.71-3.938a.75.75%200%20111.08%201.04l-4.25%204.5a.75.75%200%2001-1.08%200l-4.25-4.5a.75.75%200%2001.02-1.06z%22%20clip-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E')]",
|
|
129
|
-
"
|
|
129
|
+
"pe-8",
|
|
130
130
|
className
|
|
131
131
|
),
|
|
132
132
|
onChange: (e) => {
|
|
@@ -154,7 +154,7 @@ var NativeSelect = react.forwardRef(
|
|
|
154
154
|
);
|
|
155
155
|
if (label || error || description) {
|
|
156
156
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
-
|
|
157
|
+
chunkQ7XL37T3_cjs.Field,
|
|
158
158
|
{
|
|
159
159
|
label,
|
|
160
160
|
labelHidden,
|
|
@@ -226,7 +226,7 @@ var ListboxSelect = react.forwardRef(
|
|
|
226
226
|
const anchorRef = react.useRef(null);
|
|
227
227
|
const listRef = react.useRef(null);
|
|
228
228
|
const searchRef = react.useRef(null);
|
|
229
|
-
const position =
|
|
229
|
+
const position = chunkXGGAAG74_cjs.useFloatingPosition(anchorRef, listRef, {
|
|
230
230
|
placement: "bottom-start",
|
|
231
231
|
offset: 4,
|
|
232
232
|
enabled: open
|
|
@@ -244,8 +244,8 @@ var ListboxSelect = react.forwardRef(
|
|
|
244
244
|
}
|
|
245
245
|
}, [open, textInputEnabled]);
|
|
246
246
|
const resolvedOptions = react.useMemo(() => {
|
|
247
|
-
const base = flattenOptions(list).map(
|
|
248
|
-
const created = createdOptions.map(
|
|
247
|
+
const base = flattenOptions(list).map(chunkXG6J5MOK_cjs.resolveOption);
|
|
248
|
+
const created = createdOptions.map(chunkXG6J5MOK_cjs.resolveOption);
|
|
249
249
|
return [...base, ...created];
|
|
250
250
|
}, [list, createdOptions]);
|
|
251
251
|
const filtered = search ? resolvedOptions.filter(
|
|
@@ -335,10 +335,10 @@ var ListboxSelect = react.forwardRef(
|
|
|
335
335
|
const labels = multiple ? currentMulti.map(
|
|
336
336
|
(v) => resolvedOptions.find((o) => o.value === v)?.label ?? v
|
|
337
337
|
) : currentSingle ? [resolvedOptions.find((o) => o.value === currentSingle)?.label ?? currentSingle] : [];
|
|
338
|
-
const display = /* @__PURE__ */ jsxRuntime.jsx(
|
|
338
|
+
const display = /* @__PURE__ */ jsxRuntime.jsx(chunkUIBAIWUR_cjs.DisplayValue, { size, interactive, onActivate: enterEdit, children: labels.join(", ") });
|
|
339
339
|
if (label || error || description) {
|
|
340
340
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
341
|
-
|
|
341
|
+
chunkQ7XL37T3_cjs.Field,
|
|
342
342
|
{
|
|
343
343
|
label,
|
|
344
344
|
labelHidden,
|
|
@@ -369,11 +369,11 @@ var ListboxSelect = react.forwardRef(
|
|
|
369
369
|
"data-react-fancy-select": "",
|
|
370
370
|
"data-variant": "listbox",
|
|
371
371
|
className: chunkZU5Q77OT_cjs.cn(
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
"flex w-full cursor-pointer items-center justify-between gap-2 text-
|
|
372
|
+
chunkXG6J5MOK_cjs.inputBaseClasses,
|
|
373
|
+
chunkXG6J5MOK_cjs.inputSizeClasses[size],
|
|
374
|
+
chunkXG6J5MOK_cjs.dirtyClasses(dirty),
|
|
375
|
+
chunkXG6J5MOK_cjs.errorClasses(error),
|
|
376
|
+
"flex w-full cursor-pointer items-center justify-between gap-2 text-start",
|
|
377
377
|
!hasValue && "text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]",
|
|
378
378
|
className
|
|
379
379
|
),
|
|
@@ -404,6 +404,7 @@ var ListboxSelect = react.forwardRef(
|
|
|
404
404
|
ref: listRef,
|
|
405
405
|
role: "listbox",
|
|
406
406
|
"aria-multiselectable": multiple || void 0,
|
|
407
|
+
dir: position.dir,
|
|
407
408
|
className: "fixed z-50 max-h-60 min-w-[8rem] overflow-y-auto rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:shadow-zinc-950/50 fancy-scale-in",
|
|
408
409
|
style: {
|
|
409
410
|
left: position.x,
|
|
@@ -431,7 +432,7 @@ var ListboxSelect = react.forwardRef(
|
|
|
431
432
|
{
|
|
432
433
|
type: "button",
|
|
433
434
|
onClick: handleCreate,
|
|
434
|
-
className: "flex w-full items-center gap-2 rounded-lg px-3 py-2 text-
|
|
435
|
+
className: "flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-500/10",
|
|
435
436
|
children: [
|
|
436
437
|
/* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-4 w-4 shrink-0", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M10 3a.75.75 0 01.75.75v5.5h5.5a.75.75 0 010 1.5h-5.5v5.5a.75.75 0 01-1.5 0v-5.5h-5.5a.75.75 0 010-1.5h5.5v-5.5A.75.75 0 0110 3z", clipRule: "evenodd" }) }),
|
|
437
438
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate", children: [
|
|
@@ -454,7 +455,7 @@ var ListboxSelect = react.forwardRef(
|
|
|
454
455
|
disabled: option.disabled,
|
|
455
456
|
onClick: () => toggleOption(option.value),
|
|
456
457
|
className: chunkZU5Q77OT_cjs.cn(
|
|
457
|
-
"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-
|
|
458
|
+
"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors",
|
|
458
459
|
i === activeIndex ? "bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]" : "hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))]",
|
|
459
460
|
selected ? "text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]" : "text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]",
|
|
460
461
|
option.disabled && "cursor-not-allowed opacity-50"
|
|
@@ -499,7 +500,7 @@ var ListboxSelect = react.forwardRef(
|
|
|
499
500
|
);
|
|
500
501
|
if (label || error || description) {
|
|
501
502
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
502
|
-
|
|
503
|
+
chunkQ7XL37T3_cjs.Field,
|
|
503
504
|
{
|
|
504
505
|
label,
|
|
505
506
|
labelHidden,
|
|
@@ -528,5 +529,5 @@ var Select = react.forwardRef(
|
|
|
528
529
|
Select.displayName = "Select";
|
|
529
530
|
|
|
530
531
|
exports.Select = Select;
|
|
531
|
-
//# sourceMappingURL=chunk-
|
|
532
|
-
//# sourceMappingURL=chunk-
|
|
532
|
+
//# sourceMappingURL=chunk-M5ER3Y5I.cjs.map
|
|
533
|
+
//# sourceMappingURL=chunk-M5ER3Y5I.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/inputs/Select/Select.tsx"],"names":["resolveOption","jsx","forwardRef","useId","useFieldMode","useInlineEdit","DisplayValue","Field","InputWrapper","jsxs","cn","inputBaseClasses","inputSizeClasses","dirtyClasses","errorClasses","useState","useEffect","useRef","useFloatingPosition","useCallback","useOutsideClick","useEscapeKey","useMemo","label","opt","isImeComposing","Portal"],"mappings":"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","file":"chunk-M5ER3Y5I.cjs","sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { isImeComposing } from \"../../../utils/ime\";\nimport { Field } from \"../Field\";\nimport { InputWrapper } from \"../InputWrapper\";\nimport { Portal } from \"../../Portal\";\nimport { useFloatingPosition } from \"../../../hooks/use-floating-position\";\nimport { useOutsideClick } from \"../../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../../hooks/use-escape-key\";\nimport {\n dirtyClasses,\n errorClasses,\n inputBaseClasses,\n inputSizeClasses,\n resolveOption,\n} from \"../inputs.utils\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport type { InputOption, InputOptionGroup } from \"../inputs.types\";\nimport type { SelectProps } from \"./Select.types\";\n\nfunction isOptionGroup(\n item: InputOption | InputOptionGroup,\n): item is InputOptionGroup {\n return typeof item === \"object\" && \"options\" in item;\n}\n\nfunction flattenOptions(list: (InputOption | InputOptionGroup)[]): InputOption[] {\n const flat: InputOption[] = [];\n for (const item of list) {\n if (isOptionGroup(item)) {\n flat.push(...item.options);\n } else {\n flat.push(item);\n }\n }\n return flat;\n}\n\nfunction renderNativeOption(option: InputOption, index: number) {\n const resolved = resolveOption(option);\n return (\n <option\n key={`${resolved.value}-${index}`}\n value={resolved.value as string}\n disabled={resolved.disabled}\n >\n {resolved.label}\n </option>\n );\n}\n\n// ── Native variant ──────────────────────────────────────────────────────\n\nconst NativeSelect = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n list,\n placeholder,\n prefix,\n suffix,\n prefixPosition,\n suffixPosition,\n mode,\n onValueChange,\n onChange,\n value,\n defaultValue,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n if (!showControl) {\n const current = (value ?? defaultValue) as string | undefined;\n const opt = flattenOptions(list)\n .map((o) => resolveOption(o))\n .find((o) => o.value === current);\n const display = (\n <DisplayValue\n size={size}\n leading={prefix}\n trailing={suffix}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {opt?.label ?? current}\n </DisplayValue>\n );\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {display}\n </Field>\n );\n }\n return display;\n }\n\n // When a placeholder is provided but no value/defaultValue, default to \"\"\n // so the disabled placeholder <option> is the initial selection instead of\n // the browser auto-picking the first real option.\n const isControlled = value !== undefined;\n const resolvedDefault =\n !isControlled && defaultValue === undefined && placeholder ? \"\" : defaultValue;\n\n const select = (\n <InputWrapper\n prefix={prefix}\n suffix={suffix}\n prefixPosition={prefixPosition}\n suffixPosition={suffixPosition}\n size={size}\n >\n <select\n data-react-fancy-select=\"\"\n ref={ref}\n id={selectId}\n disabled={disabled}\n required={required}\n className={cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"w-full appearance-none bg-no-repeat bg-[length:16px] bg-[right_8px_center]\",\n \"bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22%236b7280%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M5.23%207.21a.75.75%200%20011.06.02L10%2011.168l3.71-3.938a.75.75%200%20111.08%201.04l-4.25%204.5a.75.75%200%2001-1.08%200l-4.25-4.5a.75.75%200%2001.02-1.06z%22%20clip-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E')]\",\n \"pe-8\",\n className,\n )}\n onChange={(e) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n {...props}\n {...(isControlled ? { value } : { defaultValue: resolvedDefault })}\n autoFocus={interactive || props.autoFocus}\n onBlur={(e) => {\n props.onBlur?.(e);\n if (interactive) exitEdit();\n }}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {list.map((item, index) =>\n isOptionGroup(item) ? (\n <optgroup key={`group-${index}`} label={item.label}>\n {item.options.map((opt, optIndex) =>\n renderNativeOption(opt, optIndex),\n )}\n </optgroup>\n ) : (\n renderNativeOption(item, index)\n ),\n )}\n </select>\n </InputWrapper>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {select}\n </Field>\n );\n }\n\n return select;\n },\n);\n\nNativeSelect.displayName = \"NativeSelect\";\n\n// ── Listbox variant ─────────────────────────────────────────────────────\n\nconst ListboxSelect = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n list,\n placeholder = \"Select...\",\n multiple = false,\n values: controlledValues,\n defaultValues,\n onValueChange,\n onValuesChange,\n searchable = false,\n creatable = false,\n onCreate,\n createLabel = \"Create\",\n selectedSuffix = \"selected\",\n indicator = \"check\",\n mode,\n value: controlledSingleValue,\n defaultValue: defaultSingleValue,\n },\n _ref,\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n // Creatable implies a text input, which is also the search input.\n const textInputEnabled = searchable || creatable;\n\n // ── State ──────────────────────────────────────────────\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(-1);\n const [createdOptions, setCreatedOptions] = useState<InputOption[]>([]);\n\n // Single-select state\n const [singleValue, setSingleValue] = useState<string>(\n (controlledSingleValue as string) ?? (defaultSingleValue as string) ?? \"\",\n );\n const currentSingle = (controlledSingleValue as string) ?? singleValue;\n\n // Multi-select state\n const [multiValues, setMultiValues] = useState<string[]>(\n controlledValues ?? defaultValues ?? [],\n );\n const currentMulti = controlledValues ?? multiValues;\n\n // Sync controlled values\n useEffect(() => {\n if (controlledValues) setMultiValues(controlledValues);\n }, [controlledValues]);\n useEffect(() => {\n if (controlledSingleValue !== undefined) setSingleValue(controlledSingleValue as string);\n }, [controlledSingleValue]);\n\n // ── Refs ───────────────────────────────────────────────\n const anchorRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const position = useFloatingPosition(anchorRef, listRef, {\n placement: \"bottom-start\",\n offset: 4,\n enabled: open,\n });\n\n const close = useCallback(() => {\n setOpen(false);\n setSearch(\"\");\n setActiveIndex(-1);\n }, []);\n\n // Outside-click guards the dropdown (in a Portal) against its own clicks,\n // with the trigger button ignored since it toggles open/closed itself.\n useOutsideClick(listRef, close, open, anchorRef);\n useEscapeKey(close, open);\n\n // Focus text input on open\n useEffect(() => {\n if (open && textInputEnabled) {\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n }, [open, textInputEnabled]);\n\n // ── Options ────────────────────────────────────────────\n const resolvedOptions = useMemo(() => {\n const base = flattenOptions(list).map(resolveOption);\n const created = createdOptions.map(resolveOption);\n return [...base, ...created];\n }, [list, createdOptions]);\n\n const filtered = search\n ? resolvedOptions.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n : resolvedOptions;\n\n // Exact-match check to decide whether to show the \"Create X\" row\n const canCreate =\n creatable &&\n search.trim().length > 0 &&\n !resolvedOptions.some(\n (o) =>\n o.label.toLowerCase() === search.trim().toLowerCase() ||\n o.value === search.trim(),\n );\n\n // ── Selection ──────────────────────────────────────────\n const isSelected = (value: string): boolean => {\n if (multiple) return currentMulti.includes(value);\n return currentSingle === value;\n };\n\n const toggleOption = useCallback(\n (value: string) => {\n if (multiple) {\n const next = currentMulti.includes(value)\n ? currentMulti.filter((v) => v !== value)\n : [...currentMulti, value];\n setMultiValues(next);\n onValuesChange?.(next);\n } else {\n setSingleValue(value);\n onValueChange?.(value);\n close();\n }\n },\n [multiple, currentMulti, onValuesChange, onValueChange, close],\n );\n\n const handleCreate = useCallback(() => {\n const label = search.trim();\n if (!label) return;\n const value = label;\n const newOption: InputOption = { value, label };\n setCreatedOptions((prev) => [...prev, newOption]);\n onCreate?.(label);\n setSearch(\"\");\n if (multiple) {\n const next = [...currentMulti, value];\n setMultiValues(next);\n onValuesChange?.(next);\n // Keep dropdown open for multi-select; refocus input\n requestAnimationFrame(() => searchRef.current?.focus());\n } else {\n setSingleValue(value);\n onValueChange?.(value);\n close();\n }\n }, [search, multiple, currentMulti, onCreate, onValuesChange, onValueChange, close]);\n\n // ── Display text ───────────────────────────────────────\n const getDisplayText = (): string => {\n if (multiple) {\n if (currentMulti.length === 0) return placeholder;\n if (currentMulti.length === 1) {\n const opt = resolvedOptions.find((o) => o.value === currentMulti[0]);\n return opt?.label ?? currentMulti[0];\n }\n return `${currentMulti.length} ${selectedSuffix}`;\n }\n if (!currentSingle) return placeholder;\n const opt = resolvedOptions.find((o) => o.value === currentSingle);\n return opt?.label ?? currentSingle;\n };\n\n const hasValue = multiple ? currentMulti.length > 0 : !!currentSingle;\n\n // ── Keyboard ───────────────────────────────────────────\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen(true);\n }\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n // Confirming an IME composition in the search box is not a pick.\n if (isImeComposing(e)) return;\n if (activeIndex >= 0) {\n e.preventDefault();\n const item = filtered[activeIndex];\n if (item && !item.disabled) toggleOption(item.value as string);\n } else if (canCreate) {\n e.preventDefault();\n handleCreate();\n }\n }\n };\n\n // ── View mode ──────────────────────────────────────────\n if (!showControl) {\n const labels = multiple\n ? currentMulti.map(\n (v) => resolvedOptions.find((o) => o.value === v)?.label ?? v,\n )\n : currentSingle\n ? [resolvedOptions.find((o) => o.value === currentSingle)?.label ?? currentSingle]\n : [];\n const display = (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {labels.join(\", \")}\n </DisplayValue>\n );\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {display}\n </Field>\n );\n }\n return display;\n }\n\n // ── Render ─────────────────────────────────────────────\n const trigger = (\n <button\n ref={anchorRef}\n type=\"button\"\n id={selectId}\n disabled={disabled}\n autoFocus={interactive}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n data-react-fancy-select=\"\"\n data-variant=\"listbox\"\n className={cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"flex w-full cursor-pointer items-center justify-between gap-2 text-start\",\n !hasValue && \"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\",\n className,\n )}\n >\n <span className=\"truncate\">{getDisplayText()}</span>\n <svg\n className={cn(\"h-4 w-4 shrink-0 text-zinc-400 transition-transform\", open && \"rotate-180\")}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n );\n\n const dropdown = open && (\n <Portal>\n <div\n ref={listRef}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n dir={position.dir}\n className=\"fixed z-50 max-h-60 min-w-[8rem] overflow-y-auto rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:shadow-zinc-950/50 fancy-scale-in\"\n style={{\n left: position.x,\n top: position.y,\n width: anchorRef.current?.offsetWidth,\n }}\n >\n {textInputEnabled && (\n <div className=\"px-2 pb-1 pt-1\">\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setActiveIndex(-1);\n }}\n onKeyDown={handleKeyDown}\n placeholder={creatable && !searchable ? \"Type to add…\" : \"Search…\"}\n className=\"w-full rounded-md border-0 bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-2.5 py-1.5 text-sm text-[color:var(--fancy-text,var(--color-zinc-900))] placeholder:text-[color:var(--fancy-text-faint,var(--color-zinc-400))] outline-none dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))] dark:placeholder:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\"\n />\n </div>\n )}\n\n {canCreate && (\n <button\n type=\"button\"\n onClick={handleCreate}\n className=\"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-500/10\"\n >\n <svg className=\"h-4 w-4 shrink-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 3a.75.75 0 01.75.75v5.5h5.5a.75.75 0 010 1.5h-5.5v5.5a.75.75 0 01-1.5 0v-5.5h-5.5a.75.75 0 010-1.5h5.5v-5.5A.75.75 0 0110 3z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"truncate\">{createLabel} "{search.trim()}"</span>\n </button>\n )}\n\n {filtered.length === 0 && !canCreate ? (\n <div className=\"px-3 py-2 text-sm text-zinc-400\">No results found</div>\n ) : filtered.length === 0 ? null : (\n filtered.map((option, i) => {\n const selected = isSelected(option.value as string);\n return (\n <button\n key={option.value as string}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n disabled={option.disabled}\n onClick={() => toggleOption(option.value as string)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors\",\n i === activeIndex\n ? \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n : \"hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))]\",\n selected\n ? \"text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {/* Indicator */}\n {indicator === \"checkbox\" ? (\n <span\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors\",\n selected\n ? \"border-blue-500 bg-blue-500 text-white dark:border-blue-400 dark:bg-blue-400\"\n : \"border-zinc-300 dark:border-zinc-600\",\n )}\n >\n {selected && (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"2.5 6 5 8.5 9.5 3.5\" />\n </svg>\n )}\n </span>\n ) : (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n {selected && (\n <svg className=\"h-4 w-4 text-blue-500 dark:text-blue-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </span>\n )}\n\n {/* Label + description */}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{option.label}</span>\n {option.description && (\n <span className=\"block truncate text-xs text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\">{option.description}</span>\n )}\n </span>\n </button>\n );\n })\n )}\n </div>\n </Portal>\n );\n\n const content = (\n <div\n className=\"relative\"\n onBlur={(e) => {\n // The popover is portaled (focus moves out of this wrapper), so only\n // exit edit when the dropdown is closed and focus has truly left.\n if (interactive && !open && !e.currentTarget.contains(e.relatedTarget as Node)) {\n exitEdit();\n }\n }}\n >\n {trigger}\n {dropdown}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n },\n);\n\nListboxSelect.displayName = \"ListboxSelect\";\n\n// ── Public component ────────────────────────────────────────────────────\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (props, ref) => {\n const variant = props.variant ?? (props.multiple ? \"listbox\" : \"native\");\n\n if (variant === \"listbox\") {\n return <ListboxSelect {...props} ref={ref} />;\n }\n return <NativeSelect {...props} ref={ref} />;\n },\n);\n\nSelect.displayName = \"Select\";\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunk36IC3NDN_cjs = require('./chunk-36IC3NDN.cjs');
|
|
3
4
|
var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
|
|
4
5
|
var react = require('react');
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -60,8 +61,9 @@ var ResizablePanels = react.forwardRef(
|
|
|
60
61
|
const keyChanged = react.useRef(false);
|
|
61
62
|
const onKeyDown = (e) => {
|
|
62
63
|
if (disabled) return;
|
|
63
|
-
const
|
|
64
|
-
const
|
|
64
|
+
const rtl = horizontal && chunk36IC3NDN_cjs.isRtl(e.currentTarget);
|
|
65
|
+
const dec = horizontal ? rtl ? "ArrowRight" : "ArrowLeft" : "ArrowUp";
|
|
66
|
+
const inc = horizontal ? rtl ? "ArrowLeft" : "ArrowRight" : "ArrowDown";
|
|
65
67
|
const by = e.shiftKey ? largeStep : step;
|
|
66
68
|
let next;
|
|
67
69
|
if (e.key === dec) next = latest.current - by;
|
|
@@ -86,7 +88,7 @@ var ResizablePanels = react.forwardRef(
|
|
|
86
88
|
if (!rect) return null;
|
|
87
89
|
const size = horizontal ? rect.width : rect.height;
|
|
88
90
|
if (!size) return null;
|
|
89
|
-
const offset = horizontal ? clientX - rect.left : clientY - rect.top;
|
|
91
|
+
const offset = horizontal ? chunk36IC3NDN_cjs.isRtl(rootRef.current) ? rect.right - clientX : clientX - rect.left : clientY - rect.top;
|
|
90
92
|
return offset / size * 100;
|
|
91
93
|
};
|
|
92
94
|
const onPointerDown = (e) => {
|
|
@@ -182,5 +184,5 @@ var ResizablePanels = react.forwardRef(
|
|
|
182
184
|
ResizablePanels.displayName = "ResizablePanels";
|
|
183
185
|
|
|
184
186
|
exports.ResizablePanels = ResizablePanels;
|
|
185
|
-
//# sourceMappingURL=chunk-
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
187
|
+
//# sourceMappingURL=chunk-MDAI54AG.cjs.map
|
|
188
|
+
//# sourceMappingURL=chunk-MDAI54AG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ResizablePanels/ResizablePanels.tsx"],"names":["forwardRef","useState","useRef","useCallback","useId","isRtl","Children","jsxs","cn","jsx"],"mappings":"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","file":"chunk-MDAI54AG.cjs","sourcesContent":["import { Children, forwardRef, useCallback, useId, useRef, useState } from \"react\";\nimport type { KeyboardEvent, PointerEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { isRtl } from \"../../utils/direction\";\nimport type { ResizablePanelsProps } from \"./ResizablePanels.types\";\n\nfunction clamp(n: number, lo: number, hi: number): number {\n return Math.min(hi, Math.max(lo, n));\n}\n\n/** Two decimals: precise enough for a pixel on a 4K row, tidy in JSON. */\nfunction tidy(n: number): number {\n return Math.round(n * 100) / 100;\n}\n\nconst SEPARATOR_BASE =\n \"relative shrink-0 touch-none select-none outline-none transition-colors \" +\n \"bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))] \" +\n \"focus-visible:bg-[color:var(--fancy-focus,var(--color-blue-500))] dark:focus-visible:bg-[color:var(--fancy-focus-dark,var(--color-blue-400))] \" +\n \"focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))]/40 dark:focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]/40\";\n\nconst SEPARATOR_ACTIVE =\n \"hover:bg-[color:var(--fancy-focus,var(--color-blue-500))] dark:hover:bg-[color:var(--fancy-focus-dark,var(--color-blue-400))]\";\n\n/**\n * Two panels and a draggable, keyboard-operable separator between them — the\n * W3C window-splitter pattern\n * (https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/).\n *\n * `value` is the PRIMARY (first) panel's share of the container, as a\n * percentage. The separator is `role=\"separator\"` with `aria-valuenow/min/max`,\n * `aria-controls` pointing at the primary panel, and a tab stop. Arrow keys\n * along the drag axis move it by `step`, Shift + Arrow by `largeStep`, Home /\n * End jump to `min` / `max`. Pointer and touch drags use pointer capture, so a\n * fast drag that leaves the bar keeps resizing.\n *\n * `onValueChange` fires continuously; `onValueCommit` fires once per gesture\n * (pointer release, key release) so a host can persist a per-user size without\n * writing on every frame. The host owns persistence.\n */\nexport const ResizablePanels = forwardRef<HTMLDivElement, ResizablePanelsProps>(\n (\n {\n children,\n value,\n defaultValue = 50,\n onValueChange,\n onValueCommit,\n min = 10,\n max = 90,\n orientation = \"horizontal\",\n step = 5,\n largeStep = 20,\n label = \"Resize panels\",\n disabled = false,\n className,\n ...props\n },\n forwardedRef,\n ) => {\n // Never past the container, whatever min/max say.\n const lo = clamp(min, 0, 100);\n const hi = Math.max(lo, clamp(max, 0, 100));\n\n const [internal, setInternal] = useState(defaultValue);\n const controlled = value !== undefined;\n const current = tidy(clamp(controlled ? value : internal, lo, hi));\n\n /*\n * The value most recently ASKED FOR, re-synced to what is rendered on every\n * render. Several key repeats can land before React re-renders; reading the\n * render-time value would make each of them compute from the same start.\n */\n const latest = useRef(current);\n latest.current = current;\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof forwardedRef === \"function\") forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n },\n [forwardedRef],\n );\n\n const firstId = useId();\n const horizontal = orientation === \"horizontal\";\n\n const request = useCallback(\n (next: number) => {\n const v = tidy(clamp(next, lo, hi));\n if (v === latest.current) return;\n latest.current = v;\n if (!controlled) setInternal(v);\n onValueChange?.(v);\n },\n [controlled, hi, lo, onValueChange],\n );\n\n // --- keyboard -----------------------------------------------------------\n\n const keyChanged = useRef(false);\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Side by side, the first panel sits at the inline START: the right in\n // RTL. The separator moves the way the arrow points, so ArrowLeft GROWS\n // the first panel there.\n const rtl = horizontal && isRtl(e.currentTarget);\n const dec = horizontal ? (rtl ? \"ArrowRight\" : \"ArrowLeft\") : \"ArrowUp\";\n const inc = horizontal ? (rtl ? \"ArrowLeft\" : \"ArrowRight\") : \"ArrowDown\";\n const by = e.shiftKey ? largeStep : step;\n let next: number;\n if (e.key === dec) next = latest.current - by;\n else if (e.key === inc) next = latest.current + by;\n else if (e.key === \"Home\") next = lo;\n else if (e.key === \"End\") next = hi;\n else return;\n e.preventDefault();\n const before = latest.current;\n request(next);\n if (latest.current !== before) keyChanged.current = true;\n };\n\n const onKeyUp = () => {\n if (!keyChanged.current) return;\n keyChanged.current = false;\n onValueCommit?.(latest.current);\n };\n\n // --- pointer ------------------------------------------------------------\n\n const drag = useRef<{ pointerId: number; start: number } | null>(null);\n const [dragging, setDragging] = useState(false);\n\n const valueAt = (clientX: number, clientY: number): number | null => {\n const rect = rootRef.current?.getBoundingClientRect();\n if (!rect) return null;\n const size = horizontal ? rect.width : rect.height;\n if (!size) return null;\n // Measured from the inline start, which is the right edge in RTL.\n const offset = horizontal\n ? isRtl(rootRef.current) ? rect.right - clientX : clientX - rect.left\n : clientY - rect.top;\n return (offset / size) * 100;\n };\n\n const onPointerDown = (e: PointerEvent<HTMLDivElement>) => {\n if (disabled || e.button !== 0) return;\n e.preventDefault();\n e.currentTarget.setPointerCapture?.(e.pointerId);\n drag.current = { pointerId: e.pointerId, start: latest.current };\n setDragging(true);\n };\n\n const onPointerMove = (e: PointerEvent<HTMLDivElement>) => {\n if (!drag.current || drag.current.pointerId !== e.pointerId) return;\n const v = valueAt(e.clientX, e.clientY);\n if (v !== null) request(v);\n };\n\n const endDrag = (e: PointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d || d.pointerId !== e.pointerId) return;\n drag.current = null;\n setDragging(false);\n if (e.currentTarget.hasPointerCapture?.(e.pointerId)) {\n e.currentTarget.releasePointerCapture?.(e.pointerId);\n }\n if (latest.current !== d.start) onValueCommit?.(latest.current);\n };\n\n const items = Children.toArray(children);\n\n return (\n <div\n ref={setRefs}\n {...props}\n data-react-fancy-resizable-panels=\"\"\n data-orientation={orientation}\n data-dragging={dragging ? \"\" : undefined}\n data-disabled={disabled ? \"\" : undefined}\n className={cn(\n \"flex h-full w-full min-h-0 min-w-0 overflow-hidden\",\n horizontal ? \"flex-row\" : \"flex-col\",\n dragging && (horizontal ? \"cursor-col-resize select-none\" : \"cursor-row-resize select-none\"),\n className,\n )}\n >\n <div\n id={firstId}\n data-react-fancy-resizable-panels-panel=\"first\"\n className=\"min-h-0 min-w-0 overflow-auto\"\n style={{ flexBasis: `${current}%`, flexGrow: 0, flexShrink: 0 }}\n >\n {items[0]}\n </div>\n <div\n role=\"separator\"\n data-react-fancy-resizable-panels-separator=\"\"\n aria-orientation={horizontal ? \"vertical\" : \"horizontal\"}\n aria-valuenow={current}\n aria-valuemin={lo}\n aria-valuemax={hi}\n aria-controls={firstId}\n aria-label={label}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n onLostPointerCapture={endDrag}\n className={cn(\n SEPARATOR_BASE,\n // A 1px line with a 12px hit area, so it is easy to grab by touch.\n horizontal\n ? \"w-px before:absolute before:inset-y-0 before:-left-1.5 before:-right-1.5\"\n : \"h-px before:absolute before:inset-x-0 before:-top-1.5 before:-bottom-1.5\",\n disabled\n ? \"cursor-default opacity-50\"\n : cn(SEPARATOR_ACTIVE, horizontal ? \"cursor-col-resize\" : \"cursor-row-resize\"),\n )}\n />\n <div\n data-react-fancy-resizable-panels-panel=\"second\"\n className=\"min-h-0 min-w-0 flex-1 overflow-auto\"\n >\n {items[1]}\n </div>\n </div>\n );\n },\n);\n\nResizablePanels.displayName = \"ResizablePanels\";\n"]}
|
|
@@ -54,7 +54,7 @@ function ChatDrawer({
|
|
|
54
54
|
onClick: handleToggle,
|
|
55
55
|
"aria-label": open ? "Collapse drawer" : "Expand drawer",
|
|
56
56
|
"aria-expanded": open,
|
|
57
|
-
className: "
|
|
57
|
+
className: "ms-auto inline-flex h-6 w-6 items-center justify-center rounded-full text-zinc-400 transition hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-700 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-200",
|
|
58
58
|
children: /* @__PURE__ */ jsx(
|
|
59
59
|
Icon,
|
|
60
60
|
{
|
|
@@ -77,5 +77,5 @@ function ChatDrawer({
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
export { ChatDrawer };
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-MKDTXMCE.js.map
|
|
81
|
+
//# sourceMappingURL=chunk-MKDTXMCE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ChatDrawer/ChatDrawer.tsx"],"names":[],"mappings":";;;;AA+DO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA,GAAgB,GAAA;AAAA,EAChB;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,QAAA,GAAW,CAAC,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,qCAAA,EACZ,eAAK,GAAA,CAAI,CAAC,KAAK,CAAA,KAAM;AACpB,QAAA,MAAM,MAAA,GAAS,IAAI,EAAA,KAAO,WAAA;AAC1B,QAAA,MAAM,SAAS,GAAA,CAAI,MAAA,KAAW,OAAO,IAAA,GAAO,GAAA,CAAI,UAAU,CAAA,GAAI,CAAA;AAC9D,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,YACjC,SAAA,EAAW;AAAA,cACT,2GAAA;AAAA,cACA,SACI,4CAAA,GACA;AAAA,aACN,CAAE,KAAK,GAAG,CAAA;AAAA,YACV,cAAA,EAAc,MAAA;AAAA,YAEb,QAAA,EAAA;AAAA,cAAA,MAAA,KAAW,IAAA,oBACV,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW;AAAA,oBACT,wFAAA;AAAA,oBACA,SACI,wBAAA,GACA;AAAA,mBACN,CAAE,KAAK,GAAG,CAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,cAAI,KAAA,EAAM;AAAA;AAAA,WAAA;AAAA,UAvB/C,GAAA,CAAI;AAAA,SAwBX;AAAA,MAEJ,CAAC,CAAA,EACH,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,YAAA;AAAA,UACT,YAAA,EAAY,OAAO,iBAAA,GAAoB,eAAA;AAAA,UACvC,eAAA,EAAe,IAAA;AAAA,UACf,SAAA,EAAU,0RAAA;AAAA,UAEV,QAAA,kBAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,OAAO,cAAA,GAAiB,YAAA;AAAA,cAC9B,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAEC,IAAA,oBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,eAAA;AAAA,QACV,KAAA,EAAO,EAAE,SAAA,EAAW,aAAA,EAAc;AAAA,QAEjC;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/ChatDrawer/ChatDrawer.tsx"],"names":[],"mappings":";;;;AA+DO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA,GAAgB,GAAA;AAAA,EAChB;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,QAAA,GAAW,CAAC,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,qCAAA,EACZ,eAAK,GAAA,CAAI,CAAC,KAAK,CAAA,KAAM;AACpB,QAAA,MAAM,MAAA,GAAS,IAAI,EAAA,KAAO,WAAA;AAC1B,QAAA,MAAM,SAAS,GAAA,CAAI,MAAA,KAAW,OAAO,IAAA,GAAO,GAAA,CAAI,UAAU,CAAA,GAAI,CAAA;AAC9D,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,YACjC,SAAA,EAAW;AAAA,cACT,2GAAA;AAAA,cACA,SACI,4CAAA,GACA;AAAA,aACN,CAAE,KAAK,GAAG,CAAA;AAAA,YACV,cAAA,EAAc,MAAA;AAAA,YAEb,QAAA,EAAA;AAAA,cAAA,MAAA,KAAW,IAAA,oBACV,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW;AAAA,oBACT,wFAAA;AAAA,oBACA,SACI,wBAAA,GACA;AAAA,mBACN,CAAE,KAAK,GAAG,CAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,cAAI,KAAA,EAAM;AAAA;AAAA,WAAA;AAAA,UAvB/C,GAAA,CAAI;AAAA,SAwBX;AAAA,MAEJ,CAAC,CAAA,EACH,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,YAAA;AAAA,UACT,YAAA,EAAY,OAAO,iBAAA,GAAoB,eAAA;AAAA,UACvC,eAAA,EAAe,IAAA;AAAA,UACf,SAAA,EAAU,0RAAA;AAAA,UAEV,QAAA,kBAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,OAAO,cAAA,GAAiB,YAAA;AAAA,cAC9B,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAEC,IAAA,oBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,eAAA;AAAA,QACV,KAAA,EAAO,EAAE,SAAA,EAAW,aAAA,EAAc;AAAA,QAEjC;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-MKDTXMCE.js","sourcesContent":["import { type ReactNode, useCallback } from \"react\";\nimport { Icon } from \"../Icon\";\n\n/**\n * ChatDrawer — tabbed, collapsible panel that sits *above* a `PromptInput`\n * (via the input's `aboveInput` slot) so the drawer and composer share one\n * rounded shell. Each tab gets a numbered chip and a content panel; only\n * one panel renders at a time.\n *\n * <PromptInput\n * aboveInput={\n * <ChatDrawer\n * tabs={[\n * { id: \"files\", label: \"Files\" },\n * { id: \"tools\", label: \"Chat Tools\" },\n * { id: \"prompts\", label: \"Chat Prompts\" },\n * { id: \"deal\", label: \"IBM Analytics Platform\" },\n * ]}\n * activeTabId={tab}\n * onTabChange={setTab}\n * open={open}\n * onToggle={setOpen}\n * >\n * {tab === \"tools\" && <ToolsGrid />}\n * {tab === \"deal\" && <DealCard />}\n * </ChatDrawer>\n * }\n * budgetTokens={200_000}\n * onSubmit={(text) => send(text)}\n * />\n *\n * The drawer is purely presentational and slot-driven — you decide what\n * each tab shows. Tab order in the numbered chips is the order you pass.\n */\n\nexport type ChatDrawerTab = {\n /** Stable id — used as the React key and as `activeTabId`. */\n id: string;\n /** Human label rendered on the chip. */\n label: string;\n /**\n * Optional override for the numbered prefix (defaults to position +1).\n * Set to `null` to hide the number entirely (e.g. for a context-specific\n * tab like the deal one in the screenshots).\n */\n number?: number | null;\n};\n\nexport interface ChatDrawerProps {\n tabs: ChatDrawerTab[];\n activeTabId: string;\n onTabChange: (id: string) => void;\n /** Body open/closed. Default true. */\n open?: boolean;\n /** Called when the chevron is clicked. */\n onToggle?: (open: boolean) => void;\n /** Body content for the active tab. */\n children?: ReactNode;\n /** Min height of the body when open, in px. Default 140. */\n minBodyHeight?: number;\n className?: string;\n}\n\nexport function ChatDrawer({\n tabs,\n activeTabId,\n onTabChange,\n open = true,\n onToggle,\n children,\n minBodyHeight = 140,\n className,\n}: ChatDrawerProps) {\n const handleToggle = useCallback(() => {\n onToggle?.(!open);\n }, [onToggle, open]);\n\n return (\n <div className={className}>\n <div className=\"flex items-center gap-1.5 px-2.5 py-2\">\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {tabs.map((tab, i) => {\n const active = tab.id === activeTabId;\n const number = tab.number === null ? null : tab.number ?? i + 1;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange(tab.id)}\n className={[\n \"group inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-[12px] font-medium transition\",\n active\n ? \"border-violet-500 bg-violet-500 text-white\"\n : \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-transparent text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:border-zinc-300 hover:bg-zinc-50 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:border-zinc-600 dark:hover:bg-zinc-800\",\n ].join(\" \")}\n aria-pressed={active}\n >\n {number !== null && (\n <span\n className={[\n \"inline-flex h-4 w-4 items-center justify-center rounded-full text-[10px] font-semibold\",\n active\n ? \"bg-white/20 text-white\"\n : \"bg-[color:var(--fancy-border,var(--color-zinc-200))] text-zinc-600 group-hover:bg-zinc-300 dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:text-zinc-300\",\n ].join(\" \")}\n >\n {number}\n </span>\n )}\n <span className=\"truncate max-w-[180px]\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n <button\n type=\"button\"\n onClick={handleToggle}\n aria-label={open ? \"Collapse drawer\" : \"Expand drawer\"}\n aria-expanded={open}\n className=\"ms-auto inline-flex h-6 w-6 items-center justify-center rounded-full text-zinc-400 transition hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:text-zinc-700 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:text-zinc-200\"\n >\n <Icon\n name={open ? \"chevron-down\" : \"chevron-up\"}\n className=\"h-3.5 w-3.5\"\n />\n </button>\n </div>\n\n {open && (\n <div\n className=\"px-2.5 pb-2.5\"\n style={{ minHeight: minBodyHeight }}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import { forwardRef } from 'react';
|
|
|
3
3
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
5
|
var StatList = forwardRef(
|
|
6
|
-
({ items, align = "
|
|
6
|
+
({ items, align = "end", className, ...props }, ref) => {
|
|
7
7
|
if (items.length === 0) return null;
|
|
8
8
|
return /* @__PURE__ */ jsx(
|
|
9
9
|
"div",
|
|
@@ -14,7 +14,13 @@ var StatList = forwardRef(
|
|
|
14
14
|
"data-align": align,
|
|
15
15
|
className: cn(
|
|
16
16
|
"flex flex-col gap-0.5 font-mono text-[11.5px] text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]",
|
|
17
|
-
|
|
17
|
+
{
|
|
18
|
+
start: "items-start text-start",
|
|
19
|
+
end: "items-end text-end",
|
|
20
|
+
// Physical: flex alignment is logical, so RTL swaps it back.
|
|
21
|
+
left: "items-start rtl:items-end text-left",
|
|
22
|
+
right: "items-end rtl:items-start text-right"
|
|
23
|
+
}[align],
|
|
18
24
|
className
|
|
19
25
|
),
|
|
20
26
|
children: items.map((item, i) => /* @__PURE__ */ jsxs(
|
|
@@ -36,5 +42,5 @@ var StatList = forwardRef(
|
|
|
36
42
|
StatList.displayName = "StatList";
|
|
37
43
|
|
|
38
44
|
export { StatList };
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-NETUI353.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-NETUI353.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/StatList/StatList.tsx"],"names":[],"mappings":";;;;AAoBO,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,KAAA,EAAO,KAAA,GAAQ,OAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACtD,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,4BAAA,EAA2B,EAAA;AAAA,QAC3B,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,+KAAA;AAAA,UACA;AAAA,YACE,KAAA,EAAO,wBAAA;AAAA,YACP,GAAA,EAAK,oBAAA;AAAA;AAAA,YAEL,IAAA,EAAM,qCAAA;AAAA,YACN,KAAA,EAAO;AAAA,YACP,KAAK,CAAA;AAAA,UACP;AAAA,SACF;AAAA,QAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChB,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEC,WAAA,EAAW,KAAK,GAAA,KAAQ,OAAO,KAAK,KAAA,KAAU,QAAA,GAAW,KAAK,KAAA,GAAQ,MAAA,CAAA;AAAA,YAEtE,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iIAAA,EAAmI,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,cAAK,GAAA;AAAA,cAC/J,IAAA,CAAK;AAAA;AAAA,WAAA;AAAA,UAJD,KAAK,GAAA,KAAQ,OAAO,KAAK,KAAA,KAAU,QAAA,GAAW,KAAK,KAAA,GAAQ,CAAA;AAAA,SAMnE;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-NETUI353.js","sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { StatListProps } from \"./StatList.types\";\n\n/**\n * The mono figure stack — `70 packages / 261 components / MIT licensed`.\n *\n * The Inspiration index and `/packages` each hand-rolled this from tokens, which\n * is the gallery working as intended: it stress-tests the kit, and what it\n * hand-rolls is the gap list. The list only pays off when the gap comes back\n * here, otherwise every surface keeps a copy and they drift apart.\n *\n * Takes `items` as DATA rather than children. What those surfaces repeat is a\n * shape, not a layout, so there is nothing to assemble at the call site — and a\n * data prop is what an agent can emit, which children are not.\n *\n * The value is a `<b>` rather than a colour, because in most of these stacks the\n * figure is the only part that is not muted, and expressing that structurally\n * keeps it meaningful when a design replaces the styling wholesale.\n */\nexport const StatList = forwardRef<HTMLDivElement, StatListProps>(\n ({ items, align = \"end\", className, ...props }, ref) => {\n if (items.length === 0) return null;\n\n return (\n <div\n ref={ref}\n {...props}\n data-react-fancy-stat-list=\"\"\n data-align={align}\n className={cn(\n \"flex flex-col gap-0.5 font-mono text-[11.5px] text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\",\n {\n start: \"items-start text-start\",\n end: \"items-end text-end\",\n // Physical: flex alignment is logical, so RTL swaps it back.\n left: \"items-start rtl:items-end text-left\",\n right: \"items-end rtl:items-start text-right\",\n }[align],\n className,\n )}\n >\n {items.map((item, i) => (\n <span\n key={item.key ?? (typeof item.label === \"string\" ? item.label : i)}\n data-stat={item.key ?? (typeof item.label === \"string\" ? item.label : undefined)}\n >\n <b className=\"font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">{item.value}</b>{\" \"}\n {item.label}\n </span>\n ))}\n </div>\n );\n },\n);\n\nStatList.displayName = \"StatList\";\n"]}
|
|
@@ -151,7 +151,7 @@ function ThumbnailItem({ file, index, onRemove }) {
|
|
|
151
151
|
{
|
|
152
152
|
type: "button",
|
|
153
153
|
onClick: () => onRemove(index),
|
|
154
|
-
className: "absolute top-1
|
|
154
|
+
className: "absolute top-1 end-1 flex h-5 w-5 items-center justify-center rounded-full bg-black/60 text-white opacity-0 transition-opacity hover:bg-black/80 group-hover:opacity-100",
|
|
155
155
|
"aria-label": `Remove ${file.name}`,
|
|
156
156
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size: 10 })
|
|
157
157
|
}
|
|
@@ -276,5 +276,5 @@ var FileUpload = Object.assign(FileUploadRoot, {
|
|
|
276
276
|
|
|
277
277
|
exports.FileUpload = FileUpload;
|
|
278
278
|
exports.useFileUpload = useFileUpload;
|
|
279
|
-
//# sourceMappingURL=chunk-
|
|
280
|
-
//# sourceMappingURL=chunk-
|
|
279
|
+
//# sourceMappingURL=chunk-NIFHAFKK.cjs.map
|
|
280
|
+
//# sourceMappingURL=chunk-NIFHAFKK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FileUpload/FileUpload.context.ts","../src/components/FileUpload/FileUploadDropzone.tsx","../src/components/FileUpload/FileUploadList.tsx","../src/components/FileUpload/matchesAccept.ts","../src/components/FileUpload/FileUpload.tsx"],"names":["createContext","useContext","useState","useRef","useId","useCallback","jsxs","cn","jsx","Fragment","Upload","useMemo","useEffect","File","X"],"mappings":";;;;;;;AAGO,IAAM,iBAAA,GACXA,oBAA6C,IAAI,CAAA;AAE5C,SAAS,aAAA,GAAwC;AACtD,EAAA,MAAM,GAAA,GAAMC,iBAAW,iBAAiB,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;ACPA,IAAM,oBAAA,GAAuB,cAAA;AAG7B,IAAM,YAAA,GAAe,oCAAA;AAqBd,SAAS,kBAAA,CAAmB;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,QAAA,KAAa,aAAA,EAAc;AAC/D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAWC,aAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,UAAUC,WAAA,EAAM;AACtB,EAAA,MAAM,MAAA,GAAS,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA;AACtD,EAAA,MAAM,UAAA,GAAa,WAAA,KAAgB,MAAA,GAAS,oBAAA,GAAuB,YAAA,CAAA;AAEnE,EAAA,MAAM,UAAA,GAAaC,iBAAA;AAAA,IACjB,CAAC,CAAA,KAAuB;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,CAAS,CAAA,CAAE,aAAa,KAAK,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,UAAU,QAAQ;AAAA,GACrB;AAEA,EAAA,MAAM,cAAA,GAAiBA,iBAAA,CAAY,CAAC,CAAA,KAAuB;AACzD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,kBAAkBA,iBAAA,CAAY,MAAM,YAAY,KAAK,CAAA,EAAG,EAAE,CAAA;AAEhE,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,CAAA,KAAwB;AACvB,MAAA,IAAI,QAAA,EAAU;AAGd,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,QAAA,CAAS,OAAA,EAAS;AACnC,MAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,uCAAA,EAAsC,EAAA;AAAA,MACtC,gBAAA,EAAgB,WAAW,EAAA,GAAK,MAAA;AAAA,MAChC,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC/B,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,MAAA,EAAQ,UAAA;AAAA,MACR,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAWC,oBAAA;AAAA,QACT,wKAAA;AAAA;AAAA;AAAA;AAAA,QAIA,6XAAA;AAAA,QACA,WACI,kEAAA,GACA,4LAAA;AAAA,QACJ,QAAA,IAAY,+BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,QAAA;AAAA,YACL,EAAA,EAAI,OAAA;AAAA,YACJ,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU,EAAA;AAAA,YACV,YAAA,EAAY,UAAA;AAAA,YACZ,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,IAAI,EAAE,MAAA,CAAO,KAAA,EAAO,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAM3C,cAAA,CAAA,CAAE,OAAO,KAAA,GAAQ,EAAA;AAAA,YACnB,CAAA;AAAA,YACA,MAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,QACC,yBACCF,eAAA,CAAAG,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACDD,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,qCAAA,EAAoC,EAAA;AAAA,cACpC,eAAA,EAAe,OAAA;AAAA,cACf,QAAA;AAAA,cACA,SAAA,EAAU,SAAA;AAAA,cAET,QAAA,EAAA,WAAA,IAAe;AAAA;AAAA;AAClB,SAAA,EACF,CAAA,mBAEAF,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,qCAAA,EAAoC,EAAA;AAAA,YACpC,eAAA,EAAe,OAAA;AAAA,YACf,YAAA,EAAY,WAAA;AAAA,YACZ,QAAA;AAAA,YACA,SAAA,EAAU,+FAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAE,cAAA,CAACE,kBAAA,EAAA,EAAO,MAAM,EAAA,EAAI,WAAA,EAAa,KAAK,aAAA,EAAY,MAAA,EAAO,WAAU,oBAAA,EAAqB,CAAA;AAAA,8BACtFF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,YAAA,EAAa;AAAA;AAAA;AAAA;AACxD;AAAA;AAAA,GAEJ;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AC1IjC,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAEA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,GAAA,EAAI,CAAG,aAAY,GAAI,EAAA;AACzD;AAEA,SAAS,aAAA,CAAc,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,EAAiE;AAC9G,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAC7C,EAAA,MAAM,SAAA,GAAYG,aAAA,CAAQ,MAAO,OAAA,GAAU,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA,GAAI,IAAA,EAAO,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAE7F,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,SAAA,EAAW,GAAA,CAAI,eAAA,CAAgB,SAAS,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,uBACEN,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8MAAA,EACZ,QAAA,EAAA;AAAA,MAAA,OAAA,IAAW,4BACVE,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,WAAW,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,SAAA,EAAU,8BAA6B,CAAA,mBAE5EF,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+DAAA,EACb,QAAA,EAAA;AAAA,wBAAAE,cAAAA,CAACK,gBAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,WAAU,eAAA,EAAgB,CAAA;AAAA,wBAC1CL,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAyC,QAAA,EAAA,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAE;AAAA,OAAA,EACnF,CAAA;AAAA,sBAEFA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,UAC7B,SAAA,EAAU,4KAAA;AAAA,UACV,YAAA,EAAY,CAAA,OAAA,EAAU,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,UAE/B,QAAA,kBAAAA,cAAAA,CAACM,aAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACf,KAAA,EACF,CAAA;AAAA,oBACAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EAAqD,eAAK,IAAA,EAAK;AAAA,GAAA,EACjF,CAAA;AAEJ;AAEO,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,SAAA,EAAU,EAAwB;AAC5E,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,aAAA,EAAc;AAE5C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,mCAAA,EAAkC,EAAA,EAAG,SAAA,EAAWD,oBAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA,EAC3F,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBC,cAAAA,CAAC,aAAA,EAAA,EAAwC,IAAA,EAAY,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,UAAA,EAAA,EAArD,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAgD,CACtF,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA,CAAC,IAAA,EAAA,EAAG,mCAAA,EAAkC,IAAG,SAAA,EAAWD,oBAAA,CAAG,gBAAA,EAAkB,SAAS,GAC/E,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBD,eAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MAEC,SAAA,EAAU,yLAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAE,cAAAA,CAACK,gBAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,WAAU,wBAAA,EAAyB,CAAA;AAAA,wBACnDL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,eAAK,IAAA,EAAK,CAAA;AAAA,wBAC7CA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCACb,QAAA,EAAA,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EACvB,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,UAAA,CAAW,CAAC,CAAA;AAAA,YAC3B,SAAA,EAAU,qEAAA;AAAA,YACV,YAAA,EAAY,CAAA,OAAA,EAAU,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,YAE/B,QAAA,kBAAAA,cAAAA,CAACM,aAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACf;AAAA,KAAA;AAAA,IAfK,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA;AAAA,GAiBzB,CAAA,EACH,CAAA;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;;;AC3EtB,SAAS,aAAA,CAAc,MAAY,MAAA,EAAyB;AACjE,EAAA,MAAM,KAAA,GAAQ,MAAA,CACX,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,MAAK,CAAE,WAAA,EAAa,CAAA,CACvC,OAAO,OAAO,CAAA;AAIjB,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AACnC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AAEnC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS;AAC1B,IAAA,IAAI,KAAK,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA,CAAK,SAAS,IAAI,CAAA;AACnD,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACjE,IAAA,OAAO,IAAA,KAAS,IAAA;AAAA,EAClB,CAAC,CAAA;AACH;ACxBA,SAAS,SAAA,CAAU,MAAY,MAAA,EAA4C;AACzE,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,KAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,MAAA,EAAO;AACrE;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIZ,cAAAA,CAAiB,EAAE,CAAA;AAC7D,EAAA,MAAM,QAAQ,KAAA,IAAS,aAAA;AAEvB,EAAA,MAAM,QAAA,GAAWG,iBAAAA;AAAA,IACf,CAAC,QAAA,KAAgC;AAC/B,MAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAC/B,MAAA,MAAM,aAA8B,EAAC;AAGrC,MAAA,MAAM,QAAA,GAAW,CACf,MAAA,EACA,MAAA,KACG;AACH,QAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM;AAC1B,UAAA,IAAI,MAAA,CAAO,CAAC,CAAA,EAAG,OAAO,IAAA;AACtB,UAAA,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,MAAM,CAAC,CAAA;AACpC,UAAA,OAAO,KAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH,CAAA;AAIA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,QAAA,CAAS,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,EAAG,MAAM,GAAG,QAAQ,CAAA;AAAA,MACpD;AAEA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,SAAS,SAAS,CAAA;AAAA,MAC9C;AAoBA,MAAA,IAAI,aAAa,KAAA,EAAO;AAgBtB,QAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAGpC,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,WAAA,GAAc,KAAA;AAIpD,QAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,aAAc,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,UAAU,CAAC,CAAA;AAExE,QAAA,IAAI,KAAA,KAAU,MAAA,EAAW,gBAAA,CAAiB,IAAI,CAAA;AAC9C,QAAA,QAAA,GAAW,IAAI,CAAA;AACf,QAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,QAAA,GAAW,UAAU,CAAA;AAEhD,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,KAAA,EAAO,GAAG,KAAK,CAAA;AACnC,MAAA,MAAM,UAAU,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,GAAI,OAAA;AAExD,MAAA,KAAA,MAAW,CAAA,IAAK,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,UAAU,CAAC,CAAA;AAEvF,MAAA,IAAI,KAAA,KAAU,MAAA,EAAW,gBAAA,CAAiB,OAAO,CAAA;AACjD,MAAA,QAAA,GAAW,OAAO,CAAA;AAClB,MAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,QAAA,GAAW,UAAU,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,QAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,QAAA,EAAU,QAAA,EAAU,UAAU,KAAK;AAAA,GACxE;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAAA;AAAA,IACjB,CAAC,KAAA,KAAkB;AACjB,MAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,KAAK,CAAA;AAClD,MAAA,IAAI,KAAA,KAAU,MAAA,EAAW,gBAAA,CAAiB,OAAO,CAAA;AACjD,MAAA,QAAA,GAAW,OAAO,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,QAAA,EAAU,KAAK;AAAA,GACzB;AAEA,EAAA,MAAM,GAAA,GAAMM,aAAAA;AAAA,IACV,OAAO,EAAE,KAAA,EAAO,UAAU,UAAA,EAAY,QAAA,EAAU,QAAQ,QAAA,EAAS,CAAA;AAAA,IACjE,CAAC,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,QAAQ,QAAQ;AAAA,GAC1D;AAEA,EAAA,uBACEH,cAAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,OAAO,GAAA,EACjC,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,gCAA6B,EAAA,EAAG,SAAA,EAAWD,qBAAG,SAAS,CAAA,EAAI,UAAS,CAAA,EAC3E,CAAA;AAEJ;AAEO,IAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB;AAAA,EACtD,QAAA,EAAU,kBAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAC","file":"chunk-XHUV3VSM.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { FileUploadContextValue } from \"./FileUpload.types\";\n\nexport const FileUploadContext =\n createContext<FileUploadContextValue | null>(null);\n\nexport function useFileUpload(): FileUploadContextValue {\n const ctx = useContext(FileUploadContext);\n if (!ctx) {\n throw new Error(\n \"FileUpload compound components must be used within <FileUpload>\",\n );\n }\n return ctx;\n}\n","import { useCallback, useId, useRef, useState } from \"react\";\nimport { Upload } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useFileUpload } from \"./FileUpload.context\";\nimport type { FileUploadDropzoneProps } from \"./FileUpload.types\";\n\n/** Accessible name of the browse trigger when the zone has custom children. */\nconst DEFAULT_BROWSE_LABEL = \"Browse files\";\n\n/** The default zone copy; it doubles as the trigger's accessible name. */\nconst DEFAULT_COPY = \"Drop files here or click to browse\";\n\n/*\n * Keyboard access (after 5.59.0). Until then the zone was a clickable div around a\n * display:none input: no tab stop, no role, no key handler, so a keyboard or\n * switch user could not open the picker at all.\n *\n * The trigger is a REAL <button type=\"button\">, not a div with role=\"button\":\n * focus, Enter and Space (Space on keyup, cancelled by moving off) then come\n * from the platform instead of a key handler that has to get those right.\n *\n * - Default content: the button wraps the icon and the copy, so the visible\n * text IS its accessible name and the look is unchanged.\n * - Custom children: they may contain their own interactive content, which a\n * button must not wrap, so the button is visually hidden beside them and the\n * ZONE draws the focus ring (has-focus-visible) — the focus indicator is\n * never invisible.\n *\n * A click anywhere on the zone still opens the picker, as before; a click on\n * the button bubbles to the zone and is handled there once.\n */\nexport function FileUploadDropzone({\n children,\n className,\n browseLabel,\n}: FileUploadDropzoneProps) {\n const { addFiles, disabled, accept, multiple } = useFileUpload();\n const [dragOver, setDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n const custom = children !== undefined && children !== null;\n const inputLabel = browseLabel ?? (custom ? DEFAULT_BROWSE_LABEL : DEFAULT_COPY);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n if (disabled) return;\n addFiles(e.dataTransfer.files);\n },\n [addFiles, disabled],\n );\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback(() => setDragOver(false), []);\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n // The input's own click bubbles back up here; re-entering would ask for a\n // second picker.\n if (e.target === inputRef.current) return;\n inputRef.current?.click();\n },\n [disabled],\n );\n\n return (\n <div\n data-react-fancy-file-upload-dropzone=\"\"\n data-drag-over={dragOver ? \"\" : undefined}\n data-disabled={disabled ? \"\" : undefined}\n aria-disabled={disabled || undefined}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed p-8 text-center transition-[color,background-color,border-color,box-shadow]\",\n // Full opacity on purpose: a translucent 2px ring over a dashed border\n // falls under WCAG 2.2's 3:1 for a focus indicator. The offset gap is\n // painted with the surface token so it matches the page in dark mode.\n \"has-focus-visible:ring-2 has-focus-visible:ring-offset-2 has-focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))] has-focus-visible:ring-offset-[color:var(--fancy-surface,var(--color-white))] dark:has-focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))] dark:has-focus-visible:ring-offset-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n dragOver\n ? \"border-blue-400 bg-blue-50 dark:border-blue-500 dark:bg-blue-950\"\n : \"border-[color:var(--fancy-border-strong,var(--color-zinc-300))] hover:border-zinc-400 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:hover:border-zinc-500\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n >\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n className=\"hidden\"\n tabIndex={-1}\n aria-label={inputLabel}\n onChange={(e) => {\n if (e.target.files) addFiles(e.target.files);\n\n // Reset, or choosing the SAME file again fires no `change` event at\n // all and the gesture is simply dead — \"remove it, then re-add it\"\n // and \"retry the import that just failed\" both stop working. The\n // component never sees those files to reject them; it is not asked.\n e.target.value = \"\";\n }}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n />\n {custom ? (\n <>\n {children}\n <button\n type=\"button\"\n data-react-fancy-file-upload-browse=\"\"\n aria-controls={inputId}\n disabled={disabled}\n className=\"sr-only\"\n >\n {browseLabel ?? DEFAULT_BROWSE_LABEL}\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n data-react-fancy-file-upload-browse=\"\"\n aria-controls={inputId}\n aria-label={browseLabel}\n disabled={disabled}\n className=\"flex cursor-pointer flex-col items-center rounded-md outline-none disabled:cursor-not-allowed\"\n >\n <Upload size={32} strokeWidth={1.5} aria-hidden=\"true\" className=\"mb-2 text-zinc-400\" />\n <span className=\"text-sm text-zinc-500\">{DEFAULT_COPY}</span>\n </button>\n )}\n </div>\n );\n}\n\nFileUploadDropzone.displayName = \"FileUploadDropzone\";\n","import { useEffect, useMemo } from \"react\";\nimport { File, X } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useFileUpload } from \"./FileUpload.context\";\nimport type { FileUploadListProps } from \"./FileUpload.types\";\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction getExtension(name: string): string {\n const parts = name.split(\".\");\n return parts.length > 1 ? parts.pop()!.toUpperCase() : \"\";\n}\n\nfunction ThumbnailItem({ file, index, onRemove }: { file: File; index: number; onRemove: (i: number) => void }) {\n const isImage = file.type.startsWith(\"image/\");\n const objectUrl = useMemo(() => (isImage ? URL.createObjectURL(file) : null), [file, isImage]);\n\n useEffect(() => {\n return () => {\n if (objectUrl) URL.revokeObjectURL(objectUrl);\n };\n }, [objectUrl]);\n\n return (\n <div className=\"group relative flex w-20 flex-col items-center gap-1\">\n <div className=\"relative h-20 w-20 overflow-hidden rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-zinc-50 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-800\">\n {isImage && objectUrl ? (\n <img src={objectUrl} alt={file.name} className=\"h-full w-full object-cover\" />\n ) : (\n <div className=\"flex h-full w-full flex-col items-center justify-center gap-1\">\n <File size={20} className=\"text-zinc-400\" />\n <span className=\"text-[10px] font-medium text-zinc-500\">{getExtension(file.name)}</span>\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => onRemove(index)}\n className=\"absolute top-1 right-1 flex h-5 w-5 items-center justify-center rounded-full bg-black/60 text-white opacity-0 transition-opacity hover:bg-black/80 group-hover:opacity-100\"\n aria-label={`Remove ${file.name}`}\n >\n <X size={10} />\n </button>\n </div>\n <span className=\"w-full truncate text-center text-xs text-zinc-500\">{file.name}</span>\n </div>\n );\n}\n\nexport function FileUploadList({ thumbnail, className }: FileUploadListProps) {\n const { files, removeFile } = useFileUpload();\n\n if (files.length === 0) return null;\n\n if (thumbnail) {\n return (\n <div data-react-fancy-file-upload-list=\"\" className={cn(\"mt-3 flex flex-wrap gap-3\", className)}>\n {files.map((file, i) => (\n <ThumbnailItem key={`${file.name}-${i}`} file={file} index={i} onRemove={removeFile} />\n ))}\n </div>\n );\n }\n\n return (\n <ul data-react-fancy-file-upload-list=\"\" className={cn(\"mt-3 space-y-2\", className)}>\n {files.map((file, i) => (\n <li\n key={`${file.name}-${i}`}\n className=\"flex items-center gap-3 rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] px-3 py-2 text-sm dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\"\n >\n <File size={16} className=\"shrink-0 text-zinc-400\" />\n <span className=\"flex-1 truncate\">{file.name}</span>\n <span className=\"shrink-0 text-xs text-zinc-400\">\n {formatSize(file.size)}\n </span>\n <button\n type=\"button\"\n onClick={() => removeFile(i)}\n className=\"shrink-0 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300\"\n aria-label={`Remove ${file.name}`}\n >\n <X size={14} />\n </button>\n </li>\n ))}\n </ul>\n );\n}\n\nFileUploadList.displayName = \"FileUploadList\";\n","/**\n * Does a file satisfy an `accept` string?\n *\n * The browser enforces `accept` in the FILE PICKER only. A drag-and-drop never\n * opens a picker, so on the drop path this is the only thing standing between an\n * image-only dropzone and a dropped executable. Forwarding the attribute to the\n * hidden input is half the job; this is the other half.\n *\n * Follows the HTML `accept` grammar: a comma-separated list of extensions\n * (`.csv`), exact MIME types (`text/plain`) and type wildcards (`image/*`).\n * Matching is case-insensitive, because a drop reports whatever the OS says and\n * `TEXT/PLAIN` is a real thing to receive.\n *\n * A dropped file often carries an EMPTY `type` — the OS may not know it and\n * `File.type` is a hint, never a guarantee. That is why extension rules are\n * checked against the name and not the type: an `accept=\".csv\"` zone has to work\n * for a .csv whose type is `\"\"`, which is the common case rather than the edge.\n */\nexport function matchesAccept(file: File, accept: string): boolean {\n const rules = accept\n .split(\",\")\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean);\n\n // An accept string that lists nothing constrains nothing. Failing closed here\n // would turn `accept=\"\"` into a dropzone that silently swallows every file.\n if (rules.length === 0) return true;\n\n const type = file.type.toLowerCase();\n const name = file.name.toLowerCase();\n\n return rules.some((rule) => {\n if (rule.startsWith(\".\")) return name.endsWith(rule);\n if (rule.endsWith(\"/*\")) return type.startsWith(rule.slice(0, -1));\n return type === rule;\n });\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { FileUploadContext } from \"./FileUpload.context\";\nimport { FileUploadDropzone } from \"./FileUploadDropzone\";\nimport { FileUploadList } from \"./FileUploadList\";\nimport { matchesAccept } from \"./matchesAccept\";\nimport type {\n FileRejection,\n FileRejectionReason,\n FileUploadProps,\n} from \"./FileUpload.types\";\n\nfunction rejection(file: File, reason: FileRejectionReason): FileRejection {\n return { name: file.name, size: file.size, type: file.type, reason };\n}\n\nfunction FileUploadRoot({\n children,\n value,\n onChange,\n onReject,\n accept,\n multiple = true,\n maxFiles,\n maxSize,\n disabled = false,\n className,\n}: FileUploadProps) {\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n const files = value ?? internalFiles;\n\n const addFiles = useCallback(\n (newFiles: FileList | File[]) => {\n let toAdd = Array.from(newFiles);\n const rejections: FileRejection[] = [];\n\n // Each file is reported once, under the first rule it failed.\n const keepOnly = (\n passes: (f: File) => boolean,\n reason: FileRejectionReason,\n ) => {\n toAdd = toAdd.filter((f) => {\n if (passes(f)) return true;\n rejections.push(rejection(f, reason));\n return false;\n });\n };\n\n // `accept` is enforced HERE, not only on the input: the input's attribute\n // governs the picker, and a drop never opens one.\n if (accept) {\n keepOnly((f) => matchesAccept(f, accept), \"accept\");\n }\n\n if (maxSize) {\n keepOnly((f) => f.size <= maxSize, \"maxSize\");\n }\n\n /*\n * `multiple={false}` REPLACES; `maxFiles` refuses the overflow.\n *\n * These used to be the same rule — a cap of one, first-wins — on the\n * reasoning that the two props must not disagree about what a single-file\n * upload means. But they are different statements:\n *\n * - `maxFiles={n}` is a QUOTA. Dropping five files into a three-file\n * field should keep three, not the last three.\n * - `multiple={false}` is a FIELD SHAPE: this input holds one file. Its\n * analogue is a radio group, where choosing again MOVES the selection.\n *\n * Under the old rule a single-file field could never change its mind: the\n * second choice computed `[old, new].slice(0, 1)` and discarded the new\n * file in silence. The YouGene estate worked around it by remounting the\n * component with a `key`, which is the shape of a bug rather than a\n * preference.\n */\n if (multiple === false) {\n /*\n * The FIRST of the incoming batch, not the last.\n *\n * Two separate questions hide here, and only one of them was the bug:\n *\n * - ACROSS gestures — choose a file, then choose another. The second\n * must win, or the field cannot change its mind. That is the fix.\n * - WITHIN one gesture — drop two files at once onto a single-file\n * field. Which one wins is arbitrary, and taking the first is what\n * has always shipped; there is no replacement intent in a single\n * ambiguous drop.\n *\n * Taking `slice(-1)` would have answered both with \"the last\", quietly\n * changing the second. The existing drop test caught it.\n */\n const replacement = toAdd.slice(0, 1);\n // Nothing survived the accept/size filters — leave the field alone\n // rather than clearing a file the user never asked to remove.\n const next = replacement.length > 0 ? replacement : files;\n\n // The file being replaced was not refused; the rest of this batch was,\n // by a field that holds one.\n for (const f of toAdd.slice(1)) rejections.push(rejection(f, \"maxFiles\"));\n\n if (value === undefined) setInternalFiles(next);\n onChange?.(next);\n if (rejections.length > 0) onReject?.(rejections);\n\n return;\n }\n\n const updated = [...files, ...toAdd];\n const limited = maxFiles ? updated.slice(0, maxFiles) : updated;\n\n for (const f of updated.slice(limited.length)) rejections.push(rejection(f, \"maxFiles\"));\n\n if (value === undefined) setInternalFiles(limited);\n onChange?.(limited);\n if (rejections.length > 0) onReject?.(rejections);\n },\n [accept, files, maxFiles, maxSize, multiple, onChange, onReject, value],\n );\n\n const removeFile = useCallback(\n (index: number) => {\n const updated = files.filter((_, i) => i !== index);\n if (value === undefined) setInternalFiles(updated);\n onChange?.(updated);\n },\n [files, onChange, value],\n );\n\n const ctx = useMemo(\n () => ({ files, addFiles, removeFile, disabled, accept, multiple }),\n [files, addFiles, removeFile, disabled, accept, multiple],\n );\n\n return (\n <FileUploadContext.Provider value={ctx}>\n <div data-react-fancy-file-upload=\"\" className={cn(className)}>{children}</div>\n </FileUploadContext.Provider>\n );\n}\n\nexport const FileUpload = Object.assign(FileUploadRoot, {\n Dropzone: FileUploadDropzone,\n List: FileUploadList,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/FileUpload/FileUpload.context.ts","../src/components/FileUpload/FileUploadDropzone.tsx","../src/components/FileUpload/FileUploadList.tsx","../src/components/FileUpload/matchesAccept.ts","../src/components/FileUpload/FileUpload.tsx"],"names":["createContext","useContext","useState","useRef","useId","useCallback","jsxs","cn","jsx","Fragment","Upload","useMemo","useEffect","File","X"],"mappings":"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","file":"chunk-NIFHAFKK.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { FileUploadContextValue } from \"./FileUpload.types\";\n\nexport const FileUploadContext =\n createContext<FileUploadContextValue | null>(null);\n\nexport function useFileUpload(): FileUploadContextValue {\n const ctx = useContext(FileUploadContext);\n if (!ctx) {\n throw new Error(\n \"FileUpload compound components must be used within <FileUpload>\",\n );\n }\n return ctx;\n}\n","import { useCallback, useId, useRef, useState } from \"react\";\nimport { Upload } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useFileUpload } from \"./FileUpload.context\";\nimport type { FileUploadDropzoneProps } from \"./FileUpload.types\";\n\n/** Accessible name of the browse trigger when the zone has custom children. */\nconst DEFAULT_BROWSE_LABEL = \"Browse files\";\n\n/** The default zone copy; it doubles as the trigger's accessible name. */\nconst DEFAULT_COPY = \"Drop files here or click to browse\";\n\n/*\n * Keyboard access (after 5.59.0). Until then the zone was a clickable div around a\n * display:none input: no tab stop, no role, no key handler, so a keyboard or\n * switch user could not open the picker at all.\n *\n * The trigger is a REAL <button type=\"button\">, not a div with role=\"button\":\n * focus, Enter and Space (Space on keyup, cancelled by moving off) then come\n * from the platform instead of a key handler that has to get those right.\n *\n * - Default content: the button wraps the icon and the copy, so the visible\n * text IS its accessible name and the look is unchanged.\n * - Custom children: they may contain their own interactive content, which a\n * button must not wrap, so the button is visually hidden beside them and the\n * ZONE draws the focus ring (has-focus-visible) — the focus indicator is\n * never invisible.\n *\n * A click anywhere on the zone still opens the picker, as before; a click on\n * the button bubbles to the zone and is handled there once.\n */\nexport function FileUploadDropzone({\n children,\n className,\n browseLabel,\n}: FileUploadDropzoneProps) {\n const { addFiles, disabled, accept, multiple } = useFileUpload();\n const [dragOver, setDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n const custom = children !== undefined && children !== null;\n const inputLabel = browseLabel ?? (custom ? DEFAULT_BROWSE_LABEL : DEFAULT_COPY);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n if (disabled) return;\n addFiles(e.dataTransfer.files);\n },\n [addFiles, disabled],\n );\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback(() => setDragOver(false), []);\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n // The input's own click bubbles back up here; re-entering would ask for a\n // second picker.\n if (e.target === inputRef.current) return;\n inputRef.current?.click();\n },\n [disabled],\n );\n\n return (\n <div\n data-react-fancy-file-upload-dropzone=\"\"\n data-drag-over={dragOver ? \"\" : undefined}\n data-disabled={disabled ? \"\" : undefined}\n aria-disabled={disabled || undefined}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onClick={handleClick}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed p-8 text-center transition-[color,background-color,border-color,box-shadow]\",\n // Full opacity on purpose: a translucent 2px ring over a dashed border\n // falls under WCAG 2.2's 3:1 for a focus indicator. The offset gap is\n // painted with the surface token so it matches the page in dark mode.\n \"has-focus-visible:ring-2 has-focus-visible:ring-offset-2 has-focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))] has-focus-visible:ring-offset-[color:var(--fancy-surface,var(--color-white))] dark:has-focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))] dark:has-focus-visible:ring-offset-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n dragOver\n ? \"border-blue-400 bg-blue-50 dark:border-blue-500 dark:bg-blue-950\"\n : \"border-[color:var(--fancy-border-strong,var(--color-zinc-300))] hover:border-zinc-400 dark:border-[color:var(--fancy-border-strong-dark,var(--color-zinc-700))] dark:hover:border-zinc-500\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n >\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n className=\"hidden\"\n tabIndex={-1}\n aria-label={inputLabel}\n onChange={(e) => {\n if (e.target.files) addFiles(e.target.files);\n\n // Reset, or choosing the SAME file again fires no `change` event at\n // all and the gesture is simply dead — \"remove it, then re-add it\"\n // and \"retry the import that just failed\" both stop working. The\n // component never sees those files to reject them; it is not asked.\n e.target.value = \"\";\n }}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n />\n {custom ? (\n <>\n {children}\n <button\n type=\"button\"\n data-react-fancy-file-upload-browse=\"\"\n aria-controls={inputId}\n disabled={disabled}\n className=\"sr-only\"\n >\n {browseLabel ?? DEFAULT_BROWSE_LABEL}\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n data-react-fancy-file-upload-browse=\"\"\n aria-controls={inputId}\n aria-label={browseLabel}\n disabled={disabled}\n className=\"flex cursor-pointer flex-col items-center rounded-md outline-none disabled:cursor-not-allowed\"\n >\n <Upload size={32} strokeWidth={1.5} aria-hidden=\"true\" className=\"mb-2 text-zinc-400\" />\n <span className=\"text-sm text-zinc-500\">{DEFAULT_COPY}</span>\n </button>\n )}\n </div>\n );\n}\n\nFileUploadDropzone.displayName = \"FileUploadDropzone\";\n","import { useEffect, useMemo } from \"react\";\nimport { File, X } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { useFileUpload } from \"./FileUpload.context\";\nimport type { FileUploadListProps } from \"./FileUpload.types\";\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction getExtension(name: string): string {\n const parts = name.split(\".\");\n return parts.length > 1 ? parts.pop()!.toUpperCase() : \"\";\n}\n\nfunction ThumbnailItem({ file, index, onRemove }: { file: File; index: number; onRemove: (i: number) => void }) {\n const isImage = file.type.startsWith(\"image/\");\n const objectUrl = useMemo(() => (isImage ? URL.createObjectURL(file) : null), [file, isImage]);\n\n useEffect(() => {\n return () => {\n if (objectUrl) URL.revokeObjectURL(objectUrl);\n };\n }, [objectUrl]);\n\n return (\n <div className=\"group relative flex w-20 flex-col items-center gap-1\">\n <div className=\"relative h-20 w-20 overflow-hidden rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-zinc-50 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-zinc-800\">\n {isImage && objectUrl ? (\n <img src={objectUrl} alt={file.name} className=\"h-full w-full object-cover\" />\n ) : (\n <div className=\"flex h-full w-full flex-col items-center justify-center gap-1\">\n <File size={20} className=\"text-zinc-400\" />\n <span className=\"text-[10px] font-medium text-zinc-500\">{getExtension(file.name)}</span>\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => onRemove(index)}\n className=\"absolute top-1 end-1 flex h-5 w-5 items-center justify-center rounded-full bg-black/60 text-white opacity-0 transition-opacity hover:bg-black/80 group-hover:opacity-100\"\n aria-label={`Remove ${file.name}`}\n >\n <X size={10} />\n </button>\n </div>\n <span className=\"w-full truncate text-center text-xs text-zinc-500\">{file.name}</span>\n </div>\n );\n}\n\nexport function FileUploadList({ thumbnail, className }: FileUploadListProps) {\n const { files, removeFile } = useFileUpload();\n\n if (files.length === 0) return null;\n\n if (thumbnail) {\n return (\n <div data-react-fancy-file-upload-list=\"\" className={cn(\"mt-3 flex flex-wrap gap-3\", className)}>\n {files.map((file, i) => (\n <ThumbnailItem key={`${file.name}-${i}`} file={file} index={i} onRemove={removeFile} />\n ))}\n </div>\n );\n }\n\n return (\n <ul data-react-fancy-file-upload-list=\"\" className={cn(\"mt-3 space-y-2\", className)}>\n {files.map((file, i) => (\n <li\n key={`${file.name}-${i}`}\n className=\"flex items-center gap-3 rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] px-3 py-2 text-sm dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))]\"\n >\n <File size={16} className=\"shrink-0 text-zinc-400\" />\n <span className=\"flex-1 truncate\">{file.name}</span>\n <span className=\"shrink-0 text-xs text-zinc-400\">\n {formatSize(file.size)}\n </span>\n <button\n type=\"button\"\n onClick={() => removeFile(i)}\n className=\"shrink-0 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300\"\n aria-label={`Remove ${file.name}`}\n >\n <X size={14} />\n </button>\n </li>\n ))}\n </ul>\n );\n}\n\nFileUploadList.displayName = \"FileUploadList\";\n","/**\n * Does a file satisfy an `accept` string?\n *\n * The browser enforces `accept` in the FILE PICKER only. A drag-and-drop never\n * opens a picker, so on the drop path this is the only thing standing between an\n * image-only dropzone and a dropped executable. Forwarding the attribute to the\n * hidden input is half the job; this is the other half.\n *\n * Follows the HTML `accept` grammar: a comma-separated list of extensions\n * (`.csv`), exact MIME types (`text/plain`) and type wildcards (`image/*`).\n * Matching is case-insensitive, because a drop reports whatever the OS says and\n * `TEXT/PLAIN` is a real thing to receive.\n *\n * A dropped file often carries an EMPTY `type` — the OS may not know it and\n * `File.type` is a hint, never a guarantee. That is why extension rules are\n * checked against the name and not the type: an `accept=\".csv\"` zone has to work\n * for a .csv whose type is `\"\"`, which is the common case rather than the edge.\n */\nexport function matchesAccept(file: File, accept: string): boolean {\n const rules = accept\n .split(\",\")\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean);\n\n // An accept string that lists nothing constrains nothing. Failing closed here\n // would turn `accept=\"\"` into a dropzone that silently swallows every file.\n if (rules.length === 0) return true;\n\n const type = file.type.toLowerCase();\n const name = file.name.toLowerCase();\n\n return rules.some((rule) => {\n if (rule.startsWith(\".\")) return name.endsWith(rule);\n if (rule.endsWith(\"/*\")) return type.startsWith(rule.slice(0, -1));\n return type === rule;\n });\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { FileUploadContext } from \"./FileUpload.context\";\nimport { FileUploadDropzone } from \"./FileUploadDropzone\";\nimport { FileUploadList } from \"./FileUploadList\";\nimport { matchesAccept } from \"./matchesAccept\";\nimport type {\n FileRejection,\n FileRejectionReason,\n FileUploadProps,\n} from \"./FileUpload.types\";\n\nfunction rejection(file: File, reason: FileRejectionReason): FileRejection {\n return { name: file.name, size: file.size, type: file.type, reason };\n}\n\nfunction FileUploadRoot({\n children,\n value,\n onChange,\n onReject,\n accept,\n multiple = true,\n maxFiles,\n maxSize,\n disabled = false,\n className,\n}: FileUploadProps) {\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n const files = value ?? internalFiles;\n\n const addFiles = useCallback(\n (newFiles: FileList | File[]) => {\n let toAdd = Array.from(newFiles);\n const rejections: FileRejection[] = [];\n\n // Each file is reported once, under the first rule it failed.\n const keepOnly = (\n passes: (f: File) => boolean,\n reason: FileRejectionReason,\n ) => {\n toAdd = toAdd.filter((f) => {\n if (passes(f)) return true;\n rejections.push(rejection(f, reason));\n return false;\n });\n };\n\n // `accept` is enforced HERE, not only on the input: the input's attribute\n // governs the picker, and a drop never opens one.\n if (accept) {\n keepOnly((f) => matchesAccept(f, accept), \"accept\");\n }\n\n if (maxSize) {\n keepOnly((f) => f.size <= maxSize, \"maxSize\");\n }\n\n /*\n * `multiple={false}` REPLACES; `maxFiles` refuses the overflow.\n *\n * These used to be the same rule — a cap of one, first-wins — on the\n * reasoning that the two props must not disagree about what a single-file\n * upload means. But they are different statements:\n *\n * - `maxFiles={n}` is a QUOTA. Dropping five files into a three-file\n * field should keep three, not the last three.\n * - `multiple={false}` is a FIELD SHAPE: this input holds one file. Its\n * analogue is a radio group, where choosing again MOVES the selection.\n *\n * Under the old rule a single-file field could never change its mind: the\n * second choice computed `[old, new].slice(0, 1)` and discarded the new\n * file in silence. The YouGene estate worked around it by remounting the\n * component with a `key`, which is the shape of a bug rather than a\n * preference.\n */\n if (multiple === false) {\n /*\n * The FIRST of the incoming batch, not the last.\n *\n * Two separate questions hide here, and only one of them was the bug:\n *\n * - ACROSS gestures — choose a file, then choose another. The second\n * must win, or the field cannot change its mind. That is the fix.\n * - WITHIN one gesture — drop two files at once onto a single-file\n * field. Which one wins is arbitrary, and taking the first is what\n * has always shipped; there is no replacement intent in a single\n * ambiguous drop.\n *\n * Taking `slice(-1)` would have answered both with \"the last\", quietly\n * changing the second. The existing drop test caught it.\n */\n const replacement = toAdd.slice(0, 1);\n // Nothing survived the accept/size filters — leave the field alone\n // rather than clearing a file the user never asked to remove.\n const next = replacement.length > 0 ? replacement : files;\n\n // The file being replaced was not refused; the rest of this batch was,\n // by a field that holds one.\n for (const f of toAdd.slice(1)) rejections.push(rejection(f, \"maxFiles\"));\n\n if (value === undefined) setInternalFiles(next);\n onChange?.(next);\n if (rejections.length > 0) onReject?.(rejections);\n\n return;\n }\n\n const updated = [...files, ...toAdd];\n const limited = maxFiles ? updated.slice(0, maxFiles) : updated;\n\n for (const f of updated.slice(limited.length)) rejections.push(rejection(f, \"maxFiles\"));\n\n if (value === undefined) setInternalFiles(limited);\n onChange?.(limited);\n if (rejections.length > 0) onReject?.(rejections);\n },\n [accept, files, maxFiles, maxSize, multiple, onChange, onReject, value],\n );\n\n const removeFile = useCallback(\n (index: number) => {\n const updated = files.filter((_, i) => i !== index);\n if (value === undefined) setInternalFiles(updated);\n onChange?.(updated);\n },\n [files, onChange, value],\n );\n\n const ctx = useMemo(\n () => ({ files, addFiles, removeFile, disabled, accept, multiple }),\n [files, addFiles, removeFile, disabled, accept, multiple],\n );\n\n return (\n <FileUploadContext.Provider value={ctx}>\n <div data-react-fancy-file-upload=\"\" className={cn(className)}>{children}</div>\n </FileUploadContext.Provider>\n );\n}\n\nexport const FileUpload = Object.assign(FileUploadRoot, {\n Dropzone: FileUploadDropzone,\n List: FileUploadList,\n});\n"]}
|