silver-ui 0.5.0 → 0.6.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/README.md +1 -65
- package/dist/{chunk-FNRYGCO3.js → chunk-2SN3KVWF.js} +4 -4
- package/dist/{chunk-FNRYGCO3.js.map → chunk-2SN3KVWF.js.map} +1 -1
- package/dist/{chunk-BSPWX2OZ.cjs → chunk-3IDT3PZC.cjs} +10 -10
- package/dist/{chunk-BSPWX2OZ.cjs.map → chunk-3IDT3PZC.cjs.map} +1 -1
- package/dist/chunk-3PEK2Q54.cjs +31 -0
- package/dist/chunk-3PEK2Q54.cjs.map +1 -0
- package/dist/{chunk-4SUQFPWH.js → chunk-45OSUS5A.js} +6 -6
- package/dist/{chunk-4SUQFPWH.js.map → chunk-45OSUS5A.js.map} +1 -1
- package/dist/{chunk-L7XJZJCM.js → chunk-4EUUZQAM.js} +5 -5
- package/dist/{chunk-L7XJZJCM.js.map → chunk-4EUUZQAM.js.map} +1 -1
- package/dist/{chunk-Q3HMGFGI.js → chunk-4JJFQZVY.js} +98 -77
- package/dist/chunk-4JJFQZVY.js.map +1 -0
- package/dist/chunk-5FQKELP6.js +28 -0
- package/dist/chunk-5FQKELP6.js.map +1 -0
- package/dist/{chunk-TTDNCN5G.cjs → chunk-5JROXZBG.cjs} +13 -39
- package/dist/chunk-5JROXZBG.cjs.map +1 -0
- package/dist/{chunk-OUZX7STE.cjs → chunk-5K3C3INR.cjs} +25 -53
- package/dist/chunk-5K3C3INR.cjs.map +1 -0
- package/dist/{chunk-AEYJ6PWC.js → chunk-5RFHYDQY.js} +16 -11
- package/dist/chunk-5RFHYDQY.js.map +1 -0
- package/dist/{chunk-PGTOVMP7.cjs → chunk-6FC5YF2O.cjs} +10 -10
- package/dist/{chunk-PGTOVMP7.cjs.map → chunk-6FC5YF2O.cjs.map} +1 -1
- package/dist/{chunk-6EYLEVC6.js → chunk-6I5QWA6A.js} +13 -6
- package/dist/chunk-6I5QWA6A.js.map +1 -0
- package/dist/{chunk-F7BFO3SD.cjs → chunk-6ZV7HGZT.cjs} +24 -8
- package/dist/chunk-6ZV7HGZT.cjs.map +1 -0
- package/dist/{chunk-2WTHSGDP.cjs → chunk-7EE6DCRP.cjs} +14 -14
- package/dist/{chunk-2WTHSGDP.cjs.map → chunk-7EE6DCRP.cjs.map} +1 -1
- package/dist/{chunk-HIH6MS5D.js → chunk-7TJ2O56S.js} +4 -4
- package/dist/{chunk-HIH6MS5D.js.map → chunk-7TJ2O56S.js.map} +1 -1
- package/dist/chunk-A2AC6WL5.cjs +4 -0
- package/dist/chunk-A2AC6WL5.cjs.map +1 -0
- package/dist/{chunk-BIJ6YDWJ.cjs → chunk-AFJEAYR4.cjs} +15 -8
- package/dist/chunk-AFJEAYR4.cjs.map +1 -0
- package/dist/chunk-AFXU6XIS.js +3 -0
- package/dist/chunk-AFXU6XIS.js.map +1 -0
- package/dist/{chunk-L5PJCLV6.js → chunk-AKAXQ4RL.js} +16 -25
- package/dist/chunk-AKAXQ4RL.js.map +1 -0
- package/dist/{chunk-OTQAREYU.js → chunk-ATK3F3MC.js} +4 -4
- package/dist/{chunk-OTQAREYU.js.map → chunk-ATK3F3MC.js.map} +1 -1
- package/dist/{chunk-2VL66QBX.js → chunk-B5QX6KGJ.js} +3 -3
- package/dist/{chunk-2VL66QBX.js.map → chunk-B5QX6KGJ.js.map} +1 -1
- package/dist/{chunk-TOQ4MGM5.js → chunk-BDFNEQR3.js} +6 -6
- package/dist/{chunk-TOQ4MGM5.js.map → chunk-BDFNEQR3.js.map} +1 -1
- package/dist/{chunk-UARQIMPS.js → chunk-BGLT7XH6.js} +5 -5
- package/dist/{chunk-UARQIMPS.js.map → chunk-BGLT7XH6.js.map} +1 -1
- package/dist/{chunk-2AWSJF22.js → chunk-BNGYGCT2.js} +8 -8
- package/dist/chunk-BNGYGCT2.js.map +1 -0
- package/dist/{chunk-TH537HOM.js → chunk-C6EWA3H2.js} +6 -6
- package/dist/{chunk-TH537HOM.js.map → chunk-C6EWA3H2.js.map} +1 -1
- package/dist/{chunk-2F5TDBRT.cjs → chunk-CABYRYVA.cjs} +8 -8
- package/dist/{chunk-2F5TDBRT.cjs.map → chunk-CABYRYVA.cjs.map} +1 -1
- package/dist/{chunk-7CTHD4G6.cjs → chunk-CNDUYO7I.cjs} +5 -5
- package/dist/{chunk-7CTHD4G6.cjs.map → chunk-CNDUYO7I.cjs.map} +1 -1
- package/dist/{chunk-3VJIUZAY.cjs → chunk-CVT7JW6C.cjs} +16 -25
- package/dist/chunk-CVT7JW6C.cjs.map +1 -0
- package/dist/{chunk-GSTINE4X.js → chunk-CZUMVOPH.js} +1771 -575
- package/dist/chunk-CZUMVOPH.js.map +1 -0
- package/dist/{chunk-MGJLBHPJ.js → chunk-DAO4UXR4.js} +4 -4
- package/dist/{chunk-MGJLBHPJ.js.map → chunk-DAO4UXR4.js.map} +1 -1
- package/dist/{chunk-HWD4HDQ5.cjs → chunk-DFEAB7Z3.cjs} +10 -10
- package/dist/{chunk-HWD4HDQ5.cjs.map → chunk-DFEAB7Z3.cjs.map} +1 -1
- package/dist/{chunk-GY2ZZR4Z.cjs → chunk-DK6USFZP.cjs} +18 -18
- package/dist/{chunk-GY2ZZR4Z.cjs.map → chunk-DK6USFZP.cjs.map} +1 -1
- package/dist/{chunk-WPMWHKJX.js → chunk-DPSAPA6B.js} +5 -5
- package/dist/{chunk-WPMWHKJX.js.map → chunk-DPSAPA6B.js.map} +1 -1
- package/dist/{chunk-AV7D3SXF.js → chunk-DWZR2AGT.js} +4 -4
- package/dist/{chunk-AV7D3SXF.js.map → chunk-DWZR2AGT.js.map} +1 -1
- package/dist/{chunk-2RZNX26F.cjs → chunk-DXUFDJHA.cjs} +12 -13
- package/dist/chunk-DXUFDJHA.cjs.map +1 -0
- package/dist/{chunk-67UUGI3M.cjs → chunk-DYMZ4DLN.cjs} +8 -8
- package/dist/{chunk-67UUGI3M.cjs.map → chunk-DYMZ4DLN.cjs.map} +1 -1
- package/dist/{chunk-JM4Q7ZQH.cjs → chunk-EEOUWM2F.cjs} +8 -8
- package/dist/chunk-EEOUWM2F.cjs.map +1 -0
- package/dist/{chunk-KC4EKXGF.js → chunk-EIJSWHG7.js} +9 -10
- package/dist/chunk-EIJSWHG7.js.map +1 -0
- package/dist/{chunk-FCUUGJTM.cjs → chunk-ENVDR66N.cjs} +132 -160
- package/dist/chunk-ENVDR66N.cjs.map +1 -0
- package/dist/{chunk-J2YKUHQM.js → chunk-ERVWZILR.js} +14 -23
- package/dist/chunk-ERVWZILR.js.map +1 -0
- package/dist/{chunk-IX26TMZD.cjs → chunk-EVCQCZMM.cjs} +5 -5
- package/dist/{chunk-IX26TMZD.cjs.map → chunk-EVCQCZMM.cjs.map} +1 -1
- package/dist/{chunk-E42WOTIC.js → chunk-FIOCTAXT.js} +3 -3
- package/dist/{chunk-E42WOTIC.js.map → chunk-FIOCTAXT.js.map} +1 -1
- package/dist/{chunk-LW3DJOF4.cjs → chunk-FLDTPAG4.cjs} +6 -6
- package/dist/{chunk-LW3DJOF4.cjs.map → chunk-FLDTPAG4.cjs.map} +1 -1
- package/dist/{chunk-XHJRAEGW.js → chunk-FQN22DO5.js} +5 -5
- package/dist/{chunk-XHJRAEGW.js.map → chunk-FQN22DO5.js.map} +1 -1
- package/dist/{chunk-XPGIWOJO.cjs → chunk-FWBYCTUB.cjs} +18 -18
- package/dist/chunk-FWBYCTUB.cjs.map +1 -0
- package/dist/{chunk-UXGHFKLA.js → chunk-G5PU2EL2.js} +4 -4
- package/dist/{chunk-UXGHFKLA.js.map → chunk-G5PU2EL2.js.map} +1 -1
- package/dist/{chunk-UXQSSRBQ.cjs → chunk-GJKRSQEA.cjs} +1781 -581
- package/dist/chunk-GJKRSQEA.cjs.map +1 -0
- package/dist/{chunk-JSAYTQTJ.cjs → chunk-GJZAGTPV.cjs} +7 -7
- package/dist/chunk-GJZAGTPV.cjs.map +1 -0
- package/dist/{chunk-BSI4BQEX.cjs → chunk-GU65FGY6.cjs} +4 -4
- package/dist/{chunk-BSI4BQEX.cjs.map → chunk-GU65FGY6.cjs.map} +1 -1
- package/dist/{chunk-W5F7PYT2.js → chunk-GUUCIG7U.js} +6 -6
- package/dist/{chunk-W5F7PYT2.js.map → chunk-GUUCIG7U.js.map} +1 -1
- package/dist/{chunk-XZZI3JYK.cjs → chunk-H5VMHDRD.cjs} +6 -6
- package/dist/{chunk-XZZI3JYK.cjs.map → chunk-H5VMHDRD.cjs.map} +1 -1
- package/dist/{chunk-ZPJW3PP7.cjs → chunk-H7VK36SZ.cjs} +16 -9
- package/dist/chunk-H7VK36SZ.cjs.map +1 -0
- package/dist/{chunk-2Y7ULSEU.js → chunk-HKGFMJFK.js} +17 -17
- package/dist/{chunk-2Y7ULSEU.js.map → chunk-HKGFMJFK.js.map} +1 -1
- package/dist/{chunk-THTVYP5V.js → chunk-HMJINNXZ.js} +21 -32
- package/dist/chunk-HMJINNXZ.js.map +1 -0
- package/dist/{chunk-VV72PGKH.cjs → chunk-HPOURAKV.cjs} +27 -27
- package/dist/chunk-HPOURAKV.cjs.map +1 -0
- package/dist/{chunk-I2NG2P5K.cjs → chunk-INQ34SVW.cjs} +5 -5
- package/dist/{chunk-I2NG2P5K.cjs.map → chunk-INQ34SVW.cjs.map} +1 -1
- package/dist/{chunk-D5OX6II7.cjs → chunk-IREOTHD3.cjs} +8 -8
- package/dist/chunk-IREOTHD3.cjs.map +1 -0
- package/dist/{chunk-GW6P4FJ4.cjs → chunk-ISWZQUVA.cjs} +25 -40
- package/dist/chunk-ISWZQUVA.cjs.map +1 -0
- package/dist/{chunk-J3X465QT.cjs → chunk-J4LJXCXB.cjs} +9 -9
- package/dist/{chunk-J3X465QT.cjs.map → chunk-J4LJXCXB.cjs.map} +1 -1
- package/dist/{chunk-PBQMHXVO.js → chunk-JC66FRQX.js} +3 -3
- package/dist/{chunk-PBQMHXVO.js.map → chunk-JC66FRQX.js.map} +1 -1
- package/dist/{chunk-S5CMLG2E.js → chunk-JHMUMJF3.js} +9 -5
- package/dist/chunk-JHMUMJF3.js.map +1 -0
- package/dist/{chunk-CUHJDV6K.js → chunk-JR353MN5.js} +6 -6
- package/dist/{chunk-CUHJDV6K.js.map → chunk-JR353MN5.js.map} +1 -1
- package/dist/{chunk-JS6MRT6M.js → chunk-K2V3IOAX.js} +4 -4
- package/dist/{chunk-JS6MRT6M.js.map → chunk-K2V3IOAX.js.map} +1 -1
- package/dist/{chunk-VH3G4IUX.js → chunk-K2WT7A64.js} +12 -38
- package/dist/chunk-K2WT7A64.js.map +1 -0
- package/dist/{chunk-OERNLR2P.js → chunk-KCI4I42U.js} +8 -8
- package/dist/{chunk-OERNLR2P.js.map → chunk-KCI4I42U.js.map} +1 -1
- package/dist/{chunk-EBJPUXFQ.js → chunk-KEPCKSDE.js} +31 -11
- package/dist/chunk-KEPCKSDE.js.map +1 -0
- package/dist/{chunk-OF5NULAO.js → chunk-KG7RHDVX.js} +7 -7
- package/dist/{chunk-OF5NULAO.js.map → chunk-KG7RHDVX.js.map} +1 -1
- package/dist/{chunk-6PIVWNUR.js → chunk-KWZMXX4F.js} +5 -5
- package/dist/chunk-KWZMXX4F.js.map +1 -0
- package/dist/{chunk-DZZEJY3J.js → chunk-LDYUVGD4.js} +120 -148
- package/dist/chunk-LDYUVGD4.js.map +1 -0
- package/dist/{chunk-VD52FLHL.js → chunk-LF6I2B7G.js} +9 -9
- package/dist/{chunk-VD52FLHL.js.map → chunk-LF6I2B7G.js.map} +1 -1
- package/dist/{chunk-3IYM5MAC.js → chunk-LLSWAAFH.js} +4 -4
- package/dist/{chunk-3IYM5MAC.js.map → chunk-LLSWAAFH.js.map} +1 -1
- package/dist/{chunk-LBGC6EC5.js → chunk-M64WMYYV.js} +15 -15
- package/dist/chunk-M64WMYYV.js.map +1 -0
- package/dist/{chunk-3Z5PF75J.cjs → chunk-MHAXS4GO.cjs} +17 -19
- package/dist/chunk-MHAXS4GO.cjs.map +1 -0
- package/dist/{chunk-TKTCN4JE.cjs → chunk-MHEPDHL5.cjs} +9 -9
- package/dist/{chunk-TKTCN4JE.cjs.map → chunk-MHEPDHL5.cjs.map} +1 -1
- package/dist/{chunk-Z7OUMVR5.cjs → chunk-NFEL5GNX.cjs} +9 -9
- package/dist/{chunk-Z7OUMVR5.cjs.map → chunk-NFEL5GNX.cjs.map} +1 -1
- package/dist/{chunk-X4I5YARV.cjs → chunk-NG2H3PYA.cjs} +11 -11
- package/dist/{chunk-X4I5YARV.cjs.map → chunk-NG2H3PYA.cjs.map} +1 -1
- package/dist/{chunk-VO4FG3L2.cjs → chunk-NW36BN7N.cjs} +17 -17
- package/dist/{chunk-VO4FG3L2.cjs.map → chunk-NW36BN7N.cjs.map} +1 -1
- package/dist/{chunk-RJEZBOSH.js → chunk-NXTDP6AX.js} +12 -14
- package/dist/chunk-NXTDP6AX.js.map +1 -0
- package/dist/{chunk-N77K3NQY.cjs → chunk-P5LMEANN.cjs} +7 -7
- package/dist/{chunk-N77K3NQY.cjs.map → chunk-P5LMEANN.cjs.map} +1 -1
- package/dist/{chunk-4HXNBLCJ.js → chunk-P7TSM63O.js} +3 -3
- package/dist/{chunk-4HXNBLCJ.js.map → chunk-P7TSM63O.js.map} +1 -1
- package/dist/chunk-PG4CZRTU.js +77 -0
- package/dist/chunk-PG4CZRTU.js.map +1 -0
- package/dist/{chunk-SUT35RHA.cjs → chunk-PHFJBQXU.cjs} +8 -8
- package/dist/{chunk-SUT35RHA.cjs.map → chunk-PHFJBQXU.cjs.map} +1 -1
- package/dist/{chunk-YJEX32HZ.cjs → chunk-PNM7MPUX.cjs} +8 -8
- package/dist/{chunk-YJEX32HZ.cjs.map → chunk-PNM7MPUX.cjs.map} +1 -1
- package/dist/{chunk-MEXR5ONE.js → chunk-PU4PBI3H.js} +5 -5
- package/dist/{chunk-MEXR5ONE.js.map → chunk-PU4PBI3H.js.map} +1 -1
- package/dist/{chunk-2GMDMZKI.cjs → chunk-PYJX2SBC.cjs} +5 -5
- package/dist/{chunk-2GMDMZKI.cjs.map → chunk-PYJX2SBC.cjs.map} +1 -1
- package/dist/{chunk-U5M4JZBX.js → chunk-PYN75QAG.js} +6 -6
- package/dist/chunk-PYN75QAG.js.map +1 -0
- package/dist/{chunk-2VAUVJVG.js → chunk-QHXI2QDK.js} +3 -3
- package/dist/{chunk-2VAUVJVG.js.map → chunk-QHXI2QDK.js.map} +1 -1
- package/dist/{chunk-RRXOSNCX.cjs → chunk-QTOFQB26.cjs} +11 -11
- package/dist/{chunk-RRXOSNCX.cjs.map → chunk-QTOFQB26.cjs.map} +1 -1
- package/dist/{chunk-DV4K35UC.cjs → chunk-QYZXTIB2.cjs} +4 -4
- package/dist/{chunk-DV4K35UC.cjs.map → chunk-QYZXTIB2.cjs.map} +1 -1
- package/dist/{chunk-FFF57VHO.cjs → chunk-R3ZS6FU6.cjs} +8 -8
- package/dist/{chunk-FFF57VHO.cjs.map → chunk-R3ZS6FU6.cjs.map} +1 -1
- package/dist/{chunk-L5JS6P62.cjs → chunk-RAMDISDK.cjs} +14 -10
- package/dist/chunk-RAMDISDK.cjs.map +1 -0
- package/dist/{chunk-SUWRSJAN.cjs → chunk-RLIBY7XB.cjs} +16 -11
- package/dist/chunk-RLIBY7XB.cjs.map +1 -0
- package/dist/{chunk-I47WOF6E.js → chunk-RU7JPU7V.js} +3 -3
- package/dist/{chunk-I47WOF6E.js.map → chunk-RU7JPU7V.js.map} +1 -1
- package/dist/{chunk-HNDDNW52.js → chunk-RXKDRZF3.js} +3 -3
- package/dist/{chunk-HNDDNW52.js.map → chunk-RXKDRZF3.js.map} +1 -1
- package/dist/{chunk-EFBSEJBD.js → chunk-S4WWBV4N.js} +22 -47
- package/dist/chunk-S4WWBV4N.js.map +1 -0
- package/dist/{chunk-6J326CN6.js → chunk-SEDUAMDW.js} +4 -4
- package/dist/{chunk-6J326CN6.js.map → chunk-SEDUAMDW.js.map} +1 -1
- package/dist/{chunk-TSKFGLGQ.cjs → chunk-SKZNSOB7.cjs} +18 -27
- package/dist/chunk-SKZNSOB7.cjs.map +1 -0
- package/dist/{chunk-YDNEAHVK.cjs → chunk-TNYAYXKC.cjs} +37 -37
- package/dist/{chunk-YDNEAHVK.cjs.map → chunk-TNYAYXKC.cjs.map} +1 -1
- package/dist/{chunk-JJNXQ7EL.js → chunk-TQDJVPHP.js} +3 -3
- package/dist/{chunk-JJNXQ7EL.js.map → chunk-TQDJVPHP.js.map} +1 -1
- package/dist/{chunk-MEUELWGO.cjs → chunk-TVWU4XBL.cjs} +8 -8
- package/dist/{chunk-MEUELWGO.cjs.map → chunk-TVWU4XBL.cjs.map} +1 -1
- package/dist/{chunk-HWP2UGOC.cjs → chunk-U4L75VA4.cjs} +126 -105
- package/dist/chunk-U4L75VA4.cjs.map +1 -0
- package/dist/{chunk-6DAZ2ZOW.cjs → chunk-U5HW5P7Q.cjs} +11 -11
- package/dist/{chunk-6DAZ2ZOW.cjs.map → chunk-U5HW5P7Q.cjs.map} +1 -1
- package/dist/{chunk-R4DGCQTA.cjs → chunk-UMS46KF4.cjs} +7 -7
- package/dist/{chunk-R4DGCQTA.cjs.map → chunk-UMS46KF4.cjs.map} +1 -1
- package/dist/{chunk-75KSHZTV.js → chunk-UT45YVPI.js} +7 -7
- package/dist/{chunk-75KSHZTV.js.map → chunk-UT45YVPI.js.map} +1 -1
- package/dist/{chunk-LKGHYNLH.js → chunk-UYZQGHFI.js} +10 -10
- package/dist/chunk-UYZQGHFI.js.map +1 -0
- package/dist/{chunk-IGJEZLHP.cjs → chunk-UZGPFPIV.cjs} +17 -17
- package/dist/{chunk-IGJEZLHP.cjs.map → chunk-UZGPFPIV.cjs.map} +1 -1
- package/dist/{chunk-Q4HAXT5C.cjs → chunk-VK7DXUGH.cjs} +31 -11
- package/dist/chunk-VK7DXUGH.cjs.map +1 -0
- package/dist/chunk-VPWNRWNO.cjs +81 -0
- package/dist/chunk-VPWNRWNO.cjs.map +1 -0
- package/dist/{chunk-K4K4FU3D.cjs → chunk-VREW3BK6.cjs} +11 -11
- package/dist/{chunk-K4K4FU3D.cjs.map → chunk-VREW3BK6.cjs.map} +1 -1
- package/dist/{chunk-ANACERIO.cjs → chunk-VRQ66IBW.cjs} +6 -6
- package/dist/{chunk-ANACERIO.cjs.map → chunk-VRQ66IBW.cjs.map} +1 -1
- package/dist/{chunk-HXIU3SIQ.cjs → chunk-VW52NVGM.cjs} +5 -5
- package/dist/{chunk-HXIU3SIQ.cjs.map → chunk-VW52NVGM.cjs.map} +1 -1
- package/dist/{chunk-5XMWGK3O.cjs → chunk-VXOIOPGZ.cjs} +25 -36
- package/dist/chunk-VXOIOPGZ.cjs.map +1 -0
- package/dist/{chunk-4RDA4W4N.js → chunk-WAWHHXSR.js} +23 -7
- package/dist/chunk-WAWHHXSR.js.map +1 -0
- package/dist/{chunk-65MJZYO6.js → chunk-WEXTGWRE.js} +14 -29
- package/dist/chunk-WEXTGWRE.js.map +1 -0
- package/dist/{chunk-ECDYAZ2R.js → chunk-WHDDBOJN.js} +5 -5
- package/dist/{chunk-ECDYAZ2R.js.map → chunk-WHDDBOJN.js.map} +1 -1
- package/dist/{chunk-ESRDHDYN.cjs → chunk-WINDLDH3.cjs} +9 -9
- package/dist/{chunk-ESRDHDYN.cjs.map → chunk-WINDLDH3.cjs.map} +1 -1
- package/dist/{chunk-ADSG24VE.js → chunk-WM7NEOME.js} +6 -6
- package/dist/{chunk-ADSG24VE.js.map → chunk-WM7NEOME.js.map} +1 -1
- package/dist/{chunk-H4L456EW.js → chunk-XTLNUYCK.js} +12 -5
- package/dist/chunk-XTLNUYCK.js.map +1 -0
- package/dist/{chunk-QO5C7TIV.js → chunk-ZSB43DEI.js} +5 -5
- package/dist/{chunk-QO5C7TIV.js.map → chunk-ZSB43DEI.js.map} +1 -1
- package/dist/{chunk-V4ZH2H2P.cjs → chunk-ZUAWNT66.cjs} +14 -14
- package/dist/{chunk-V4ZH2H2P.cjs.map → chunk-ZUAWNT66.cjs.map} +1 -1
- package/dist/components/Alert/index.cjs +10 -8
- package/dist/components/Alert/index.js +9 -7
- package/dist/components/AlertDialog/index.cjs +12 -10
- package/dist/components/AlertDialog/index.js +10 -8
- package/dist/components/AppShell/index.cjs +18 -15
- package/dist/components/AppShell/index.js +15 -12
- package/dist/components/AutocompleteInput/index.cjs +17 -14
- package/dist/components/AutocompleteInput/index.js +13 -10
- package/dist/components/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/index.cjs +5 -10
- package/dist/components/Breadcrumbs/index.js +2 -7
- package/dist/components/Button/Button.d.ts +5 -3
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/index.cjs +9 -7
- package/dist/components/Button/index.js +8 -6
- package/dist/components/Calendar/index.cjs +10 -8
- package/dist/components/Calendar/index.js +9 -7
- package/dist/components/CheckboxInput/index.cjs +9 -8
- package/dist/components/CheckboxInput/index.js +8 -7
- package/dist/components/CodeBlock/index.cjs +10 -8
- package/dist/components/CodeBlock/index.js +9 -7
- package/dist/components/ContextMenu/index.cjs +14 -12
- package/dist/components/ContextMenu/index.js +12 -10
- package/dist/components/DateInput/index.cjs +13 -11
- package/dist/components/DateInput/index.js +12 -10
- package/dist/components/DateRangeInput/index.cjs +13 -11
- package/dist/components/DateRangeInput/index.js +12 -10
- package/dist/components/DateTimeInput/index.cjs +15 -13
- package/dist/components/DateTimeInput/index.js +14 -12
- package/dist/components/DropdownMenu/index.cjs +15 -13
- package/dist/components/DropdownMenu/index.js +11 -9
- package/dist/components/EmptyState/index.cjs +5 -5
- package/dist/components/EmptyState/index.js +4 -4
- package/dist/components/Field/index.cjs +6 -6
- package/dist/components/Field/index.js +4 -4
- package/dist/components/FileInput/index.cjs +11 -9
- package/dist/components/FileInput/index.js +10 -8
- package/dist/components/HoverCard/HoverCard.d.ts +6 -6
- package/dist/components/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/components/HoverCard/index.cjs +4 -4
- package/dist/components/HoverCard/index.js +2 -2
- package/dist/components/InputGroup/index.cjs +9 -9
- package/dist/components/InputGroup/index.js +5 -5
- package/dist/components/Item/Item.d.ts.map +1 -1
- package/dist/components/Item/index.cjs +7 -8
- package/dist/components/Item/index.js +6 -7
- package/dist/components/Layout/Layout.recipe.d.ts +17 -0
- package/dist/components/Layout/Layout.recipe.d.ts.map +1 -1
- package/dist/components/Layout/LayoutHeader.d.ts +6 -1
- package/dist/components/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/components/Layout/index.cjs +14 -12
- package/dist/components/Layout/index.js +9 -7
- package/dist/components/Lightbox/index.cjs +11 -9
- package/dist/components/Lightbox/index.js +9 -7
- package/dist/components/Link/Link.d.ts +4 -5
- package/dist/components/Link/Link.d.ts.map +1 -1
- package/dist/components/Link/Link.recipe.d.ts.map +1 -1
- package/dist/components/Link/index.cjs +9 -6
- package/dist/components/Link/index.js +6 -3
- package/dist/components/List/index.cjs +9 -10
- package/dist/components/List/index.js +7 -8
- package/dist/components/MetadataList/MetadataList.recipe.d.ts +9 -1
- package/dist/components/MetadataList/MetadataList.recipe.d.ts.map +1 -1
- package/dist/components/MetadataList/MetadataListItem.d.ts +6 -1
- package/dist/components/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/components/MetadataList/index.cjs +9 -6
- package/dist/components/MetadataList/index.js +7 -4
- package/dist/components/MultiSelect/index.cjs +13 -11
- package/dist/components/MultiSelect/index.js +12 -10
- package/dist/components/NumberInput/index.cjs +12 -10
- package/dist/components/NumberInput/index.js +11 -9
- package/dist/components/Pagination/index.cjs +10 -8
- package/dist/components/Pagination/index.js +9 -7
- package/dist/components/PasswordInput/index.cjs +13 -11
- package/dist/components/PasswordInput/index.js +12 -10
- package/dist/components/Popover/Popover.d.ts +13 -1
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/index.cjs +11 -9
- package/dist/components/Popover/index.js +9 -7
- package/dist/components/RadioGroup/index.cjs +10 -9
- package/dist/components/RadioGroup/index.js +8 -7
- package/dist/components/Schedule/CalendarEvent.d.ts +18 -4
- package/dist/components/Schedule/CalendarEvent.d.ts.map +1 -1
- package/dist/components/Schedule/DayView.d.ts +7 -1
- package/dist/components/Schedule/DayView.d.ts.map +1 -1
- package/dist/components/Schedule/ListView.d.ts.map +1 -1
- package/dist/components/Schedule/ListView.recipe.d.ts +56 -0
- package/dist/components/Schedule/ListView.recipe.d.ts.map +1 -0
- package/dist/components/Schedule/MonthlyView.d.ts.map +1 -1
- package/dist/components/Schedule/MonthlyView.recipe.d.ts +47 -0
- package/dist/components/Schedule/MonthlyView.recipe.d.ts.map +1 -0
- package/dist/components/Schedule/ScheduleEvent.recipe.d.ts +17 -0
- package/dist/components/Schedule/ScheduleEvent.recipe.d.ts.map +1 -1
- package/dist/components/Schedule/TimeGridView.d.ts +7 -1
- package/dist/components/Schedule/TimeGridView.d.ts.map +1 -1
- package/dist/components/Schedule/TimeGridView.recipe.d.ts +43 -0
- package/dist/components/Schedule/TimeGridView.recipe.d.ts.map +1 -0
- package/dist/components/Schedule/WeeklyView.d.ts +7 -1
- package/dist/components/Schedule/WeeklyView.d.ts.map +1 -1
- package/dist/components/Schedule/index.cjs +44 -21
- package/dist/components/Schedule/index.d.ts +6 -2
- package/dist/components/Schedule/index.d.ts.map +1 -1
- package/dist/components/Schedule/index.js +17 -10
- package/dist/components/Schedule/plugins/EventMovePlugin.d.ts +23 -0
- package/dist/components/Schedule/plugins/EventMovePlugin.d.ts.map +1 -0
- package/dist/components/Schedule/plugins/EventPopoverPlugin.d.ts +31 -0
- package/dist/components/Schedule/plugins/EventPopoverPlugin.d.ts.map +1 -0
- package/dist/components/Schedule/plugins/EventResizePlugin.d.ts +24 -0
- package/dist/components/Schedule/plugins/EventResizePlugin.d.ts.map +1 -0
- package/dist/components/Schedule/plugins/ScheduleEventPopoverContent.d.ts +39 -0
- package/dist/components/Schedule/plugins/ScheduleEventPopoverContent.d.ts.map +1 -0
- package/dist/components/Schedule/plugins/index.d.ts +4 -0
- package/dist/components/Schedule/plugins/index.d.ts.map +1 -1
- package/dist/components/Schedule/shared.d.ts +58 -3
- package/dist/components/Schedule/shared.d.ts.map +1 -1
- package/dist/components/Schedule/types.d.ts +47 -1
- package/dist/components/Schedule/types.d.ts.map +1 -1
- package/dist/components/SearchFilterInput/SearchFilterInputEditPopover.d.ts.map +1 -1
- package/dist/components/SearchFilterInput/SearchFilterInputEditPopover.recipe.d.ts +4 -0
- package/dist/components/SearchFilterInput/SearchFilterInputEditPopover.recipe.d.ts.map +1 -0
- package/dist/components/SearchFilterInput/index.cjs +32 -29
- package/dist/components/SearchFilterInput/index.js +24 -21
- package/dist/components/Select/index.cjs +15 -13
- package/dist/components/Select/index.js +13 -11
- package/dist/components/SideNav/SideNav.d.ts.map +1 -1
- package/dist/components/SideNav/SideNav.recipe.d.ts +26 -7
- package/dist/components/SideNav/SideNav.recipe.d.ts.map +1 -1
- package/dist/components/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/components/SideNav/index.cjs +18 -15
- package/dist/components/SideNav/index.js +12 -9
- package/dist/components/Slider/index.cjs +6 -6
- package/dist/components/Slider/index.js +5 -5
- package/dist/components/Spinner/index.cjs +5 -5
- package/dist/components/Spinner/index.js +4 -4
- package/dist/components/SplitButton/index.cjs +13 -11
- package/dist/components/SplitButton/index.js +12 -10
- package/dist/components/Stepper/index.cjs +5 -5
- package/dist/components/Stepper/index.js +4 -4
- package/dist/components/Switch/index.cjs +6 -6
- package/dist/components/Switch/index.js +5 -5
- package/dist/components/Table/index.cjs +54 -51
- package/dist/components/Table/index.js +28 -25
- package/dist/components/Tabs/Tab.d.ts.map +1 -1
- package/dist/components/Tabs/index.cjs +15 -13
- package/dist/components/Tabs/index.js +10 -8
- package/dist/components/Tag/Tag.d.ts.map +1 -1
- package/dist/components/Tag/index.cjs +8 -5
- package/dist/components/Tag/index.js +7 -4
- package/dist/components/TagsInput/index.cjs +15 -12
- package/dist/components/TagsInput/index.js +14 -11
- package/dist/components/Text/Heading.d.ts +5 -5
- package/dist/components/Text/Heading.d.ts.map +1 -1
- package/dist/components/Text/Text.d.ts +5 -5
- package/dist/components/Text/Text.d.ts.map +1 -1
- package/dist/components/Text/index.cjs +5 -5
- package/dist/components/Text/index.js +3 -3
- package/dist/components/TextArea/index.cjs +7 -7
- package/dist/components/TextArea/index.js +6 -6
- package/dist/components/TextInput/index.cjs +12 -10
- package/dist/components/TextInput/index.js +11 -9
- package/dist/components/Thumbnail/index.cjs +10 -8
- package/dist/components/Thumbnail/index.js +9 -7
- package/dist/components/TimeInput/index.cjs +11 -9
- package/dist/components/TimeInput/index.js +10 -8
- package/dist/components/Toast/index.cjs +12 -10
- package/dist/components/Toast/index.js +9 -7
- package/dist/components/ToggleButton/ToggleButton.recipe.d.ts.map +1 -1
- package/dist/components/ToggleButton/index.cjs +7 -7
- package/dist/components/ToggleButton/index.js +5 -5
- package/dist/components/Tooltip/Tooltip.d.ts +6 -6
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/index.cjs +4 -4
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/components/TopNav/index.cjs +16 -13
- package/dist/components/TopNav/index.js +11 -8
- package/dist/components/TreeView/TreeViewItem.d.ts.map +1 -1
- package/dist/components/TreeView/index.cjs +3 -2
- package/dist/components/TreeView/index.js +2 -1
- package/dist/index.cjs +233 -214
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -57
- package/dist/index.js.map +1 -1
- package/dist/internal/ActionElement.d.ts +45 -0
- package/dist/internal/ActionElement.d.ts.map +1 -0
- package/dist/internal/HoverLayerTrigger.d.ts +3 -4
- package/dist/internal/HoverLayerTrigger.d.ts.map +1 -1
- package/dist/internal/useLayer.d.ts +12 -0
- package/dist/internal/useLayer.d.ts.map +1 -1
- package/dist/internal/useSelectListbox.d.ts +5 -5
- package/dist/internal/useSelectListbox.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-2AWSJF22.js.map +0 -1
- package/dist/chunk-2RZNX26F.cjs.map +0 -1
- package/dist/chunk-3VJIUZAY.cjs.map +0 -1
- package/dist/chunk-3Z5PF75J.cjs.map +0 -1
- package/dist/chunk-4RDA4W4N.js.map +0 -1
- package/dist/chunk-5XMWGK3O.cjs.map +0 -1
- package/dist/chunk-65MJZYO6.js.map +0 -1
- package/dist/chunk-6EYLEVC6.js.map +0 -1
- package/dist/chunk-6PIVWNUR.js.map +0 -1
- package/dist/chunk-AEYJ6PWC.js.map +0 -1
- package/dist/chunk-BIJ6YDWJ.cjs.map +0 -1
- package/dist/chunk-D5OX6II7.cjs.map +0 -1
- package/dist/chunk-DZZEJY3J.js.map +0 -1
- package/dist/chunk-EBJPUXFQ.js.map +0 -1
- package/dist/chunk-EFBSEJBD.js.map +0 -1
- package/dist/chunk-F7BFO3SD.cjs.map +0 -1
- package/dist/chunk-FCUUGJTM.cjs.map +0 -1
- package/dist/chunk-GSTINE4X.js.map +0 -1
- package/dist/chunk-GW6P4FJ4.cjs.map +0 -1
- package/dist/chunk-H4L456EW.js.map +0 -1
- package/dist/chunk-HWP2UGOC.cjs.map +0 -1
- package/dist/chunk-J2YKUHQM.js.map +0 -1
- package/dist/chunk-JM4Q7ZQH.cjs.map +0 -1
- package/dist/chunk-JSAYTQTJ.cjs.map +0 -1
- package/dist/chunk-KC4EKXGF.js.map +0 -1
- package/dist/chunk-L5JS6P62.cjs.map +0 -1
- package/dist/chunk-L5PJCLV6.js.map +0 -1
- package/dist/chunk-LBGC6EC5.js.map +0 -1
- package/dist/chunk-LKGHYNLH.js.map +0 -1
- package/dist/chunk-OUZX7STE.cjs.map +0 -1
- package/dist/chunk-Q3HMGFGI.js.map +0 -1
- package/dist/chunk-Q4HAXT5C.cjs.map +0 -1
- package/dist/chunk-RJEZBOSH.js.map +0 -1
- package/dist/chunk-S5CMLG2E.js.map +0 -1
- package/dist/chunk-SUWRSJAN.cjs.map +0 -1
- package/dist/chunk-THTVYP5V.js.map +0 -1
- package/dist/chunk-TSKFGLGQ.cjs.map +0 -1
- package/dist/chunk-TTDNCN5G.cjs.map +0 -1
- package/dist/chunk-U5M4JZBX.js.map +0 -1
- package/dist/chunk-UXQSSRBQ.cjs.map +0 -1
- package/dist/chunk-VH3G4IUX.js.map +0 -1
- package/dist/chunk-VV72PGKH.cjs.map +0 -1
- package/dist/chunk-XPGIWOJO.cjs.map +0 -1
- package/dist/chunk-ZPJW3PP7.cjs.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Calendar } from './chunk-
|
|
1
|
+
import { Calendar } from './chunk-B5QX6KGJ.js';
|
|
2
2
|
import { plainDateFormat, DATE_FORMAT_LONG, plainDateIsBefore, plainDateIsAfter, plainDateCreate } from './chunk-5HPXUDX6.js';
|
|
3
3
|
import { inputStyles, inputRecipe } from './chunk-3M23WX6K.js';
|
|
4
|
-
import { getNecessity, Field } from './chunk-
|
|
4
|
+
import { getNecessity, Field } from './chunk-SEDUAMDW.js';
|
|
5
5
|
import { getStatusMessageID, getDescribedBy, getStatusIcon } from './chunk-G6HS52US.js';
|
|
6
|
-
import { Popover } from './chunk-
|
|
7
|
-
import { Button } from './chunk-
|
|
8
|
-
import { Spinner } from './chunk-
|
|
6
|
+
import { Popover } from './chunk-JHMUMJF3.js';
|
|
7
|
+
import { Button } from './chunk-HMJINNXZ.js';
|
|
8
|
+
import { Spinner } from './chunk-QHXI2QDK.js';
|
|
9
9
|
import { mergeRefs } from './chunk-SGLIDI6R.js';
|
|
10
10
|
import { isReactNode } from './chunk-2PSZAWLC.js';
|
|
11
11
|
import { css } from './chunk-OD4DHHZH.js';
|
|
@@ -314,5 +314,5 @@ function DateInput({
|
|
|
314
314
|
DateInput.displayName = "DateInput";
|
|
315
315
|
|
|
316
316
|
export { DateInput };
|
|
317
|
-
//# sourceMappingURL=chunk-
|
|
318
|
-
//# sourceMappingURL=chunk-
|
|
317
|
+
//# sourceMappingURL=chunk-UT45YVPI.js.map
|
|
318
|
+
//# sourceMappingURL=chunk-UT45YVPI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/parseDateInput.ts","../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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","file":"chunk-75KSHZTV.js","sourcesContent":["import {plainDateCreate, type PlainDate} from 'internal/plainDate';\n\nconst MONTH_NAMES: Partial<Record<string, number>> = {\n jan: 1,\n january: 1,\n feb: 2,\n february: 2,\n mar: 3,\n march: 3,\n apr: 4,\n april: 4,\n may: 5,\n jun: 6,\n june: 6,\n jul: 7,\n july: 7,\n aug: 8,\n august: 8,\n sep: 9,\n september: 9,\n oct: 10,\n october: 10,\n nov: 11,\n november: 11,\n dec: 12,\n december: 12,\n};\n\n/**\n * Parses common date input formats into a PlainDate.\n * Supports: \"2026-05-21\", \"05/21/2026\", \"May 21, 2026\", \"21 May 2026\", etc.\n * Returns null if the input cannot be parsed.\n */\nexport function parseDateInput(input: string): PlainDate | null {\n const trimmed = input.trim();\n if (trimmed === '') {\n return null;\n }\n\n // ISO format: 2026-05-21\n const isoMatch = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/.exec(trimmed);\n if (isoMatch != null) {\n return tryCreate(\n parseInt(isoMatch[1], 10),\n parseInt(isoMatch[2], 10),\n parseInt(isoMatch[3], 10),\n );\n }\n\n // US format: 05/21/2026, 5/21/2026, or 3/4/25 (2-digit year)\n const usMatch = /^(\\d{1,2})[/\\-.](\\d{1,2})[/\\-.](\\d{2,4})$/.exec(trimmed);\n if (usMatch != null) {\n let year = parseInt(usMatch[3], 10);\n if (year < 100) {\n year += year < 50 ? 2000 : 1900;\n }\n return tryCreate(year, parseInt(usMatch[1], 10), parseInt(usMatch[2], 10));\n }\n\n // Named month: \"May 21, 2026\" or \"May 21 2026\"\n const namedMonthFirst = /^([A-Za-z]+)\\s+(\\d{1,2}),?\\s+(\\d{4})$/.exec(trimmed);\n if (namedMonthFirst != null) {\n const month = MONTH_NAMES[namedMonthFirst[1].toLowerCase()];\n if (month != null) {\n return tryCreate(\n parseInt(namedMonthFirst[3], 10),\n month,\n parseInt(namedMonthFirst[2], 10),\n );\n }\n }\n\n // Named month reversed: \"21 May 2026\"\n const namedMonthLast = /^(\\d{1,2})\\s+([A-Za-z]+),?\\s+(\\d{4})$/.exec(trimmed);\n if (namedMonthLast != null) {\n const month = MONTH_NAMES[namedMonthLast[2].toLowerCase()];\n if (month != null) {\n return tryCreate(\n parseInt(namedMonthLast[3], 10),\n month,\n parseInt(namedMonthLast[1], 10),\n );\n }\n }\n\n return null;\n}\n\nfunction tryCreate(year: number, month: number, day: number): PlainDate | null {\n try {\n return plainDateCreate(year, month, day);\n } catch {\n return null;\n }\n}\n","import {CalendarIcon, X} from 'lucide-react';\nimport {\n useCallback,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {Button} from 'components/Button';\nimport {Calendar, type CalendarHandle} from 'components/Calendar';\nimport {\n Field,\n getNecessity,\n type FieldNecessity,\n type InputSize,\n type InputStatus,\n} from 'components/Field';\nimport {inputRecipe, inputStyles} from 'components/Field/inputStyles';\nimport {\n getDescribedBy,\n getStatusIcon,\n getStatusMessageID,\n} from 'components/Field/inputUtils';\nimport type {IconComponent} from 'components/Icon';\nimport {Popover} from 'components/Popover';\nimport {Spinner} from 'components/Spinner';\nimport {cx} from 'internal/cx';\nimport isReactNode from 'internal/isReactNode';\nimport {mergeRefs} from 'internal/mergeRefs';\nimport {parseDateInput} from 'internal/parseDateInput';\nimport {\n DATE_FORMAT_LONG,\n plainDateFormat,\n plainDateIsAfter,\n plainDateIsBefore,\n type PlainDate,\n} from 'internal/plainDate';\nimport {css} from 'styled-system/css';\n\nexport type {PlainDate} from 'internal/plainDate';\n\nconst styles = {\n wrapper: css({ps: '1', gap: '1'}),\n} as const;\n\nexport type DateInputProps = {\n /**\n * Additional CSS class names applied to the input wrapper.\n */\n className?: string;\n /**\n * Test ID applied to the input element.\n */\n 'data-testid'?: string;\n /**\n * Supporting text rendered below the label.\n */\n description?: ReactNode;\n /**\n * Returns true for dates that should be disabled.\n */\n getIsDateDisabled?: (date: PlainDate) => boolean;\n /**\n * Whether to show a clear button when a value is selected.\n * @default false\n */\n hasClear?: boolean;\n /**\n * Custom HTML id applied to the input element.\n */\n htmlId?: string;\n /**\n * Whether the input is disabled.\n * @default false\n */\n isDisabled?: boolean;\n /**\n * Whether to visually hide the label.\n * @default false\n */\n isLabelHidden?: boolean;\n /**\n * Whether the input is in a loading state.\n * @default false\n */\n isLoading?: boolean;\n /**\n * Field label text.\n */\n label: string;\n /**\n * Icon shown before the label.\n */\n labelIcon?: IconComponent;\n /**\n * Tooltip content shown next to the label.\n */\n labelTooltip?: ReactNode;\n /**\n * Maximum selectable date.\n */\n max?: PlainDate;\n /**\n * Minimum selectable date.\n */\n min?: PlainDate;\n /**\n * Called when the selected date changes.\n */\n onChange: (value: PlainDate | null) => void;\n /**\n * Placeholder text shown when no date is selected. Typed dates accept a\n * range of formats, including \"May 21, 2026\", \"5/21/2026\", and \"2026-05-21\".\n * @default 'e.g. May 21, 2026'\n */\n placeholder?: string;\n /**\n * Ref forwarded to the input element.\n */\n ref?: Ref<HTMLInputElement>;\n /**\n * Visual size of the input.\n * @default 'md'\n */\n size?: InputSize;\n /**\n * Validation status displayed below the input.\n */\n status?: InputStatus;\n /**\n * Inline styles applied to the input wrapper.\n */\n style?: CSSProperties;\n /**\n * Currently selected date. Pass `null` for an empty input.\n */\n value: PlainDate | null;\n} & FieldNecessity;\n\nfunction formatDate(value: PlainDate | null | undefined): string {\n return value == null ? '' : plainDateFormat(value, DATE_FORMAT_LONG);\n}\n\nfunction isDateAllowed(\n date: PlainDate,\n options: {\n getIsDateDisabled?: (date: PlainDate) => boolean;\n max?: PlainDate;\n min?: PlainDate;\n },\n): boolean {\n if (options.min != null && plainDateIsBefore(date, options.min)) {\n return false;\n }\n if (options.max != null && plainDateIsAfter(date, options.max)) {\n return false;\n }\n if (options.getIsDateDisabled?.(date)) {\n return false;\n }\n return true;\n}\n\n/**\n * A date picker input that combines a text input with a calendar popover.\n * Users can type a date directly or select one from the calendar.\n */\nexport function DateInput({\n label,\n value,\n onChange,\n min,\n max,\n getIsDateDisabled,\n placeholder = 'e.g. May 21, 2026',\n size = 'md',\n description,\n isLabelHidden = false,\n isOptional,\n isRequired,\n isDisabled = false,\n isLoading = false,\n hasClear = false,\n htmlId,\n status,\n labelIcon,\n labelTooltip,\n className,\n 'data-testid': dataTestId,\n style,\n ref,\n}: DateInputProps): React.JSX.Element {\n const generatedId = useId();\n const inputId = htmlId ?? generatedId;\n const popoverId = `${inputId}-calendar`;\n const descriptionID = isReactNode(description)\n ? `${inputId}-description`\n : undefined;\n const statusMessageID = getStatusMessageID(inputId, status);\n const describedBy = getDescribedBy(descriptionID, statusMessageID);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const calendarRef = useRef<CalendarHandle | null>(null);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [pendingInput, setPendingInput] = useState<string | null>(null);\n\n const displayValue = pendingInput ?? formatDate(value);\n\n const necessity = getNecessity(isOptional, isRequired);\n\n const handleCalendarChange = useCallback(\n (nextValue: PlainDate) => {\n onChange(nextValue);\n setPendingInput(null);\n setIsOpen(false);\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n setPendingInput(text);\n\n const parsed = parseDateInput(text);\n if (\n parsed != null &&\n isDateAllowed(parsed, {min, max, getIsDateDisabled})\n ) {\n onChange(parsed);\n calendarRef.current?.navigateTo(parsed);\n }\n },\n [getIsDateDisabled, max, min, onChange],\n );\n\n const commitPendingInput = useCallback(() => {\n if (pendingInput == null) {\n return;\n }\n\n if (pendingInput.trim() === '') {\n if (value != null) {\n onChange(null);\n }\n setPendingInput(null);\n return;\n }\n\n const parsed = parseDateInput(pendingInput);\n if (\n parsed != null &&\n isDateAllowed(parsed, {min, max, getIsDateDisabled})\n ) {\n onChange(parsed);\n }\n setPendingInput(null);\n }, [getIsDateDisabled, max, min, onChange, pendingInput, value]);\n\n const handleBlur = useCallback(() => {\n commitPendingInput();\n }, [commitPendingInput]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitPendingInput();\n }\n },\n [commitPendingInput],\n );\n\n const handleClear = useCallback(() => {\n onChange(null);\n setPendingInput(null);\n inputRef.current?.focus();\n }, [onChange]);\n\n return (\n <Field\n className={className}\n description={description}\n descriptionID={descriptionID}\n inputId={inputId}\n isDisabled={isDisabled}\n isLabelHidden={isLabelHidden}\n {...necessity}\n label={label}\n labelIcon={labelIcon}\n labelTooltip={labelTooltip}\n status={\n status == null ? undefined : {...status, messageID: statusMessageID}\n }\n style={style}>\n <div\n className={cx(\n inputRecipe({\n size,\n status: status?.type,\n isDisabled: isDisabled,\n }),\n styles.wrapper,\n )}\n ref={wrapperRef}>\n <Popover\n content={\n <Calendar\n getIsDateDisabled={getIsDateDisabled}\n hasAutoFocus={isOpen}\n max={max}\n min={min}\n onChange={handleCalendarChange}\n ref={calendarRef}\n value={value ?? undefined}\n viewDate={value ?? undefined}\n />\n }\n hasAutoFocus={false}\n id={popoverId}\n isEnabled={!isDisabled}\n isOpen={isOpen}\n label={`Choose ${label}`}\n onOpenChange={setIsOpen}\n padding={3}>\n <Button\n icon={CalendarIcon}\n isDisabled={isDisabled}\n isIconOnly\n label={`Choose ${label}`}\n size=\"sm\"\n variant=\"ghost\"\n />\n </Popover>\n <input\n aria-busy={isLoading || undefined}\n aria-controls={popoverId}\n aria-describedby={describedBy}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-invalid={status?.type === 'error' || undefined}\n aria-required={isRequired ?? undefined}\n autoComplete=\"off\"\n className={inputStyles.control}\n data-testid={dataTestId}\n disabled={isDisabled}\n id={inputId}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={mergeRefs(ref, inputRef)}\n role=\"combobox\"\n type=\"text\"\n value={displayValue}\n />\n {hasClear && value != null && !isDisabled && !isLoading ? (\n <Button\n icon={X}\n isIconOnly\n label={`Clear ${label}`}\n onClick={handleClear}\n size=\"sm\"\n variant=\"ghost\"\n />\n ) : null}\n {isLoading ? <Spinner size=\"sm\" /> : null}\n {status != null ? (\n <span className={inputStyles.iconSlot}>\n {getStatusIcon(status.type)}\n </span>\n ) : null}\n </div>\n </Field>\n );\n}\n\nDateInput.displayName = 'DateInput';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/internal/parseDateInput.ts","../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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","file":"chunk-UT45YVPI.js","sourcesContent":["import {plainDateCreate, type PlainDate} from 'internal/plainDate';\n\nconst MONTH_NAMES: Partial<Record<string, number>> = {\n jan: 1,\n january: 1,\n feb: 2,\n february: 2,\n mar: 3,\n march: 3,\n apr: 4,\n april: 4,\n may: 5,\n jun: 6,\n june: 6,\n jul: 7,\n july: 7,\n aug: 8,\n august: 8,\n sep: 9,\n september: 9,\n oct: 10,\n october: 10,\n nov: 11,\n november: 11,\n dec: 12,\n december: 12,\n};\n\n/**\n * Parses common date input formats into a PlainDate.\n * Supports: \"2026-05-21\", \"05/21/2026\", \"May 21, 2026\", \"21 May 2026\", etc.\n * Returns null if the input cannot be parsed.\n */\nexport function parseDateInput(input: string): PlainDate | null {\n const trimmed = input.trim();\n if (trimmed === '') {\n return null;\n }\n\n // ISO format: 2026-05-21\n const isoMatch = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/.exec(trimmed);\n if (isoMatch != null) {\n return tryCreate(\n parseInt(isoMatch[1], 10),\n parseInt(isoMatch[2], 10),\n parseInt(isoMatch[3], 10),\n );\n }\n\n // US format: 05/21/2026, 5/21/2026, or 3/4/25 (2-digit year)\n const usMatch = /^(\\d{1,2})[/\\-.](\\d{1,2})[/\\-.](\\d{2,4})$/.exec(trimmed);\n if (usMatch != null) {\n let year = parseInt(usMatch[3], 10);\n if (year < 100) {\n year += year < 50 ? 2000 : 1900;\n }\n return tryCreate(year, parseInt(usMatch[1], 10), parseInt(usMatch[2], 10));\n }\n\n // Named month: \"May 21, 2026\" or \"May 21 2026\"\n const namedMonthFirst = /^([A-Za-z]+)\\s+(\\d{1,2}),?\\s+(\\d{4})$/.exec(trimmed);\n if (namedMonthFirst != null) {\n const month = MONTH_NAMES[namedMonthFirst[1].toLowerCase()];\n if (month != null) {\n return tryCreate(\n parseInt(namedMonthFirst[3], 10),\n month,\n parseInt(namedMonthFirst[2], 10),\n );\n }\n }\n\n // Named month reversed: \"21 May 2026\"\n const namedMonthLast = /^(\\d{1,2})\\s+([A-Za-z]+),?\\s+(\\d{4})$/.exec(trimmed);\n if (namedMonthLast != null) {\n const month = MONTH_NAMES[namedMonthLast[2].toLowerCase()];\n if (month != null) {\n return tryCreate(\n parseInt(namedMonthLast[3], 10),\n month,\n parseInt(namedMonthLast[1], 10),\n );\n }\n }\n\n return null;\n}\n\nfunction tryCreate(year: number, month: number, day: number): PlainDate | null {\n try {\n return plainDateCreate(year, month, day);\n } catch {\n return null;\n }\n}\n","import {CalendarIcon, X} from 'lucide-react';\nimport {\n useCallback,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {Button} from 'components/Button';\nimport {Calendar, type CalendarHandle} from 'components/Calendar';\nimport {\n Field,\n getNecessity,\n type FieldNecessity,\n type InputSize,\n type InputStatus,\n} from 'components/Field';\nimport {inputRecipe, inputStyles} from 'components/Field/inputStyles';\nimport {\n getDescribedBy,\n getStatusIcon,\n getStatusMessageID,\n} from 'components/Field/inputUtils';\nimport type {IconComponent} from 'components/Icon';\nimport {Popover} from 'components/Popover';\nimport {Spinner} from 'components/Spinner';\nimport {cx} from 'internal/cx';\nimport isReactNode from 'internal/isReactNode';\nimport {mergeRefs} from 'internal/mergeRefs';\nimport {parseDateInput} from 'internal/parseDateInput';\nimport {\n DATE_FORMAT_LONG,\n plainDateFormat,\n plainDateIsAfter,\n plainDateIsBefore,\n type PlainDate,\n} from 'internal/plainDate';\nimport {css} from 'styled-system/css';\n\nexport type {PlainDate} from 'internal/plainDate';\n\nconst styles = {\n wrapper: css({ps: '1', gap: '1'}),\n} as const;\n\nexport type DateInputProps = {\n /**\n * Additional CSS class names applied to the input wrapper.\n */\n className?: string;\n /**\n * Test ID applied to the input element.\n */\n 'data-testid'?: string;\n /**\n * Supporting text rendered below the label.\n */\n description?: ReactNode;\n /**\n * Returns true for dates that should be disabled.\n */\n getIsDateDisabled?: (date: PlainDate) => boolean;\n /**\n * Whether to show a clear button when a value is selected.\n * @default false\n */\n hasClear?: boolean;\n /**\n * Custom HTML id applied to the input element.\n */\n htmlId?: string;\n /**\n * Whether the input is disabled.\n * @default false\n */\n isDisabled?: boolean;\n /**\n * Whether to visually hide the label.\n * @default false\n */\n isLabelHidden?: boolean;\n /**\n * Whether the input is in a loading state.\n * @default false\n */\n isLoading?: boolean;\n /**\n * Field label text.\n */\n label: string;\n /**\n * Icon shown before the label.\n */\n labelIcon?: IconComponent;\n /**\n * Tooltip content shown next to the label.\n */\n labelTooltip?: ReactNode;\n /**\n * Maximum selectable date.\n */\n max?: PlainDate;\n /**\n * Minimum selectable date.\n */\n min?: PlainDate;\n /**\n * Called when the selected date changes.\n */\n onChange: (value: PlainDate | null) => void;\n /**\n * Placeholder text shown when no date is selected. Typed dates accept a\n * range of formats, including \"May 21, 2026\", \"5/21/2026\", and \"2026-05-21\".\n * @default 'e.g. May 21, 2026'\n */\n placeholder?: string;\n /**\n * Ref forwarded to the input element.\n */\n ref?: Ref<HTMLInputElement>;\n /**\n * Visual size of the input.\n * @default 'md'\n */\n size?: InputSize;\n /**\n * Validation status displayed below the input.\n */\n status?: InputStatus;\n /**\n * Inline styles applied to the input wrapper.\n */\n style?: CSSProperties;\n /**\n * Currently selected date. Pass `null` for an empty input.\n */\n value: PlainDate | null;\n} & FieldNecessity;\n\nfunction formatDate(value: PlainDate | null | undefined): string {\n return value == null ? '' : plainDateFormat(value, DATE_FORMAT_LONG);\n}\n\nfunction isDateAllowed(\n date: PlainDate,\n options: {\n getIsDateDisabled?: (date: PlainDate) => boolean;\n max?: PlainDate;\n min?: PlainDate;\n },\n): boolean {\n if (options.min != null && plainDateIsBefore(date, options.min)) {\n return false;\n }\n if (options.max != null && plainDateIsAfter(date, options.max)) {\n return false;\n }\n if (options.getIsDateDisabled?.(date)) {\n return false;\n }\n return true;\n}\n\n/**\n * A date picker input that combines a text input with a calendar popover.\n * Users can type a date directly or select one from the calendar.\n */\nexport function DateInput({\n label,\n value,\n onChange,\n min,\n max,\n getIsDateDisabled,\n placeholder = 'e.g. May 21, 2026',\n size = 'md',\n description,\n isLabelHidden = false,\n isOptional,\n isRequired,\n isDisabled = false,\n isLoading = false,\n hasClear = false,\n htmlId,\n status,\n labelIcon,\n labelTooltip,\n className,\n 'data-testid': dataTestId,\n style,\n ref,\n}: DateInputProps): React.JSX.Element {\n const generatedId = useId();\n const inputId = htmlId ?? generatedId;\n const popoverId = `${inputId}-calendar`;\n const descriptionID = isReactNode(description)\n ? `${inputId}-description`\n : undefined;\n const statusMessageID = getStatusMessageID(inputId, status);\n const describedBy = getDescribedBy(descriptionID, statusMessageID);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const calendarRef = useRef<CalendarHandle | null>(null);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [pendingInput, setPendingInput] = useState<string | null>(null);\n\n const displayValue = pendingInput ?? formatDate(value);\n\n const necessity = getNecessity(isOptional, isRequired);\n\n const handleCalendarChange = useCallback(\n (nextValue: PlainDate) => {\n onChange(nextValue);\n setPendingInput(null);\n setIsOpen(false);\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const text = event.target.value;\n setPendingInput(text);\n\n const parsed = parseDateInput(text);\n if (\n parsed != null &&\n isDateAllowed(parsed, {min, max, getIsDateDisabled})\n ) {\n onChange(parsed);\n calendarRef.current?.navigateTo(parsed);\n }\n },\n [getIsDateDisabled, max, min, onChange],\n );\n\n const commitPendingInput = useCallback(() => {\n if (pendingInput == null) {\n return;\n }\n\n if (pendingInput.trim() === '') {\n if (value != null) {\n onChange(null);\n }\n setPendingInput(null);\n return;\n }\n\n const parsed = parseDateInput(pendingInput);\n if (\n parsed != null &&\n isDateAllowed(parsed, {min, max, getIsDateDisabled})\n ) {\n onChange(parsed);\n }\n setPendingInput(null);\n }, [getIsDateDisabled, max, min, onChange, pendingInput, value]);\n\n const handleBlur = useCallback(() => {\n commitPendingInput();\n }, [commitPendingInput]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitPendingInput();\n }\n },\n [commitPendingInput],\n );\n\n const handleClear = useCallback(() => {\n onChange(null);\n setPendingInput(null);\n inputRef.current?.focus();\n }, [onChange]);\n\n return (\n <Field\n className={className}\n description={description}\n descriptionID={descriptionID}\n inputId={inputId}\n isDisabled={isDisabled}\n isLabelHidden={isLabelHidden}\n {...necessity}\n label={label}\n labelIcon={labelIcon}\n labelTooltip={labelTooltip}\n status={\n status == null ? undefined : {...status, messageID: statusMessageID}\n }\n style={style}>\n <div\n className={cx(\n inputRecipe({\n size,\n status: status?.type,\n isDisabled: isDisabled,\n }),\n styles.wrapper,\n )}\n ref={wrapperRef}>\n <Popover\n content={\n <Calendar\n getIsDateDisabled={getIsDateDisabled}\n hasAutoFocus={isOpen}\n max={max}\n min={min}\n onChange={handleCalendarChange}\n ref={calendarRef}\n value={value ?? undefined}\n viewDate={value ?? undefined}\n />\n }\n hasAutoFocus={false}\n id={popoverId}\n isEnabled={!isDisabled}\n isOpen={isOpen}\n label={`Choose ${label}`}\n onOpenChange={setIsOpen}\n padding={3}>\n <Button\n icon={CalendarIcon}\n isDisabled={isDisabled}\n isIconOnly\n label={`Choose ${label}`}\n size=\"sm\"\n variant=\"ghost\"\n />\n </Popover>\n <input\n aria-busy={isLoading || undefined}\n aria-controls={popoverId}\n aria-describedby={describedBy}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-invalid={status?.type === 'error' || undefined}\n aria-required={isRequired ?? undefined}\n autoComplete=\"off\"\n className={inputStyles.control}\n data-testid={dataTestId}\n disabled={isDisabled}\n id={inputId}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={mergeRefs(ref, inputRef)}\n role=\"combobox\"\n type=\"text\"\n value={displayValue}\n />\n {hasClear && value != null && !isDisabled && !isLoading ? (\n <Button\n icon={X}\n isIconOnly\n label={`Clear ${label}`}\n onClick={handleClear}\n size=\"sm\"\n variant=\"ghost\"\n />\n ) : null}\n {isLoading ? <Spinner size=\"sm\" /> : null}\n {status != null ? (\n <span className={inputStyles.iconSlot}>\n {getStatusIcon(status.type)}\n </span>\n ) : null}\n </div>\n </Field>\n );\n}\n\nDateInput.displayName = 'DateInput';\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { useSelectListbox, renderSelectListboxOptions } from './chunk-
|
|
2
|
-
import { Item } from './chunk-
|
|
1
|
+
import { useSelectListbox, renderSelectListboxOptions } from './chunk-5RFHYDQY.js';
|
|
2
|
+
import { Item } from './chunk-ERVWZILR.js';
|
|
3
3
|
import { inputRecipe } from './chunk-3M23WX6K.js';
|
|
4
|
-
import { getNecessity, Field } from './chunk-
|
|
5
|
-
import { Popover } from './chunk-
|
|
6
|
-
import { Button } from './chunk-
|
|
7
|
-
import { Spinner } from './chunk-
|
|
4
|
+
import { getNecessity, Field } from './chunk-SEDUAMDW.js';
|
|
5
|
+
import { Popover } from './chunk-JHMUMJF3.js';
|
|
6
|
+
import { Button } from './chunk-HMJINNXZ.js';
|
|
7
|
+
import { Spinner } from './chunk-QHXI2QDK.js';
|
|
8
8
|
import { Icon } from './chunk-IUW777WZ.js';
|
|
9
9
|
import { sva } from './chunk-IAVZKGZS.js';
|
|
10
10
|
import { cx } from './chunk-PPNETWIP.js';
|
|
@@ -237,11 +237,11 @@ function Select({
|
|
|
237
237
|
statusMessageID,
|
|
238
238
|
triggerRef
|
|
239
239
|
} = useSelectListbox({
|
|
240
|
-
clearQueryOnCommit: true,
|
|
241
|
-
closeOnCommit: true,
|
|
242
240
|
description,
|
|
243
241
|
isDisabled,
|
|
244
242
|
isLoading,
|
|
243
|
+
isListboxClosedOnCommit: true,
|
|
244
|
+
isQueryClearedOnCommit: true,
|
|
245
245
|
onCommitOption: commitOption,
|
|
246
246
|
options,
|
|
247
247
|
selectedValues,
|
|
@@ -463,5 +463,5 @@ function SelectOption({
|
|
|
463
463
|
SelectOption.displayName = "SelectOption";
|
|
464
464
|
|
|
465
465
|
export { Select, SelectOption };
|
|
466
|
-
//# sourceMappingURL=chunk-
|
|
467
|
-
//# sourceMappingURL=chunk-
|
|
466
|
+
//# sourceMappingURL=chunk-UYZQGHFI.js.map
|
|
467
|
+
//# sourceMappingURL=chunk-UYZQGHFI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Select/Select.recipe.ts","../src/components/Select/Select.tsx","../src/components/Select/SelectOption.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-UYZQGHFI.js","sourcesContent":["import {sva, type RecipeVariantProps} from 'styled-system/css';\n\nexport const selectMenuRecipe = sva({\n slots: [\n 'menu',\n 'search',\n 'option',\n 'optionContent',\n 'check',\n 'iconSlot',\n 'sectionHeading',\n 'divider',\n ],\n base: {\n menu: {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5',\n maxH: '80',\n overflowY: 'auto',\n p: '1',\n },\n search: {\n w: 'full',\n px: '2',\n py: '1',\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'border.emphasized',\n borderRadius: 'md',\n fontFamily: 'body',\n outline: 'none',\n _focus: {\n borderColor: 'primary',\n },\n },\n option: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '2',\n w: 'full',\n px: '2',\n py: '2',\n borderWidth: 0,\n borderRadius: 'md',\n bg: 'transparent',\n color: 'fg',\n cursor: 'pointer',\n fontFamily: 'body',\n textAlign: 'start',\n _hover: {bg: 'bg.subtle'},\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffsetTight',\n },\n '&[aria-disabled=\"true\"]': {\n opacity: 0.5,\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n '&[data-highlighted]': {\n bg: 'bg.subtle',\n },\n '&[data-selected]': {\n fontWeight: 'medium',\n },\n },\n optionContent: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '2',\n minW: 0,\n },\n check: {\n display: 'inline-flex',\n color: 'primary',\n },\n iconSlot: {\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n color: 'fg.muted',\n },\n sectionHeading: {\n px: '2',\n py: '1',\n color: 'fg.muted',\n fontFamily: 'body',\n fontSize: 'sm',\n fontWeight: 'semibold',\n },\n divider: {\n h: '1px',\n bg: 'border',\n my: '1',\n },\n },\n});\n\nexport type SelectMenuVariants = RecipeVariantProps<typeof selectMenuRecipe>;\n\nexport const selectTriggerRecipe = sva({\n slots: ['wrapper', 'trigger', 'label'],\n base: {\n wrapper: {\n cursor: 'pointer',\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '2',\n flex: 1,\n minW: 0,\n p: 0,\n borderWidth: 0,\n bg: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n fontFamily: 'body',\n outline: 'none',\n textAlign: 'start',\n _disabled: {\n cursor: 'not-allowed',\n },\n },\n label: {\n flex: 1,\n minW: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n variants: {\n isDisabled: {\n true: {wrapper: {cursor: 'not-allowed'}},\n false: {},\n },\n isPlaceholder: {\n true: {label: {color: 'fg.muted'}},\n false: {},\n },\n },\n defaultVariants: {\n isDisabled: false,\n isPlaceholder: false,\n },\n});\n\nexport type SelectTriggerVariants = RecipeVariantProps<\n typeof selectTriggerRecipe\n>;\n\nexport const selectOptionItemRecipe = sva({\n slots: ['root', 'icon'],\n base: {\n root: {\n display: 'flex',\n minW: 0,\n p: 0,\n },\n icon: {\n display: 'inline-flex',\n flexShrink: 0,\n color: 'fg.muted',\n },\n },\n});\n\nexport type SelectOptionItemVariants = RecipeVariantProps<\n typeof selectOptionItemRecipe\n>;\n","import {Check, ChevronDown, X} from 'lucide-react';\nimport {\n useCallback,\n useMemo,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {Button} from 'components/Button';\nimport {\n Field,\n getNecessity,\n type FieldNecessity,\n type InputSize,\n type InputStatus,\n} from 'components/Field';\nimport {inputRecipe} from 'components/Field/inputStyles';\nimport {Icon, type IconComponent} from 'components/Icon';\nimport {Popover} from 'components/Popover';\nimport {\n selectMenuRecipe,\n selectTriggerRecipe,\n} from 'components/Select/Select.recipe';\nimport {Spinner} from 'components/Spinner';\nimport {cx} from 'internal/cx';\nimport {\n renderSelectListboxOptions,\n useSelectListbox,\n type SelectListboxOptionData,\n} from 'internal/useSelectListbox';\n\nexport interface SelectOptionData extends SelectListboxOptionData {\n /**\n * Icon displayed before the label.\n */\n icon?: IconComponent;\n /**\n * Whether the option is disabled.\n */\n isDisabled?: boolean;\n /**\n * Option label. Defaults to `value`.\n */\n label?: string;\n /**\n * Option value.\n */\n value: string;\n}\n\nexport interface SelectDivider {\n /**\n * Discriminator identifying a divider entry.\n */\n type: 'divider';\n}\n\nexport interface SelectSection {\n /**\n * Options within this section.\n */\n options: ReadonlyArray<SelectOptionData>;\n /**\n * Optional heading text for the section.\n */\n title?: string;\n /**\n * Discriminator identifying a section entry.\n */\n type: 'section';\n}\n\nexport type SelectOptionDefinition =\n | SelectDivider\n | SelectOptionData\n | SelectSection\n | string;\n\nexport type SelectProps = {\n /**\n * Additional CSS class names applied to the trigger wrapper.\n */\n className?: string;\n /**\n * Test ID applied to the combobox button.\n */\n 'data-testid'?: string;\n /**\n * Supporting text displayed below the label.\n */\n description?: ReactNode;\n /**\n * Whether to show a clear button when a value is selected.\n * @default false\n */\n hasClear?: boolean;\n /**\n * Whether to show search input in the dropdown.\n * @default false\n */\n hasSearch?: boolean;\n /**\n * Whether the selector is disabled.\n * @default false\n */\n isDisabled?: boolean;\n /**\n * Whether to visually hide the label.\n * @default false\n */\n isLabelHidden?: boolean;\n /**\n * Whether the selector is loading.\n * @default false\n */\n isLoading?: boolean;\n /**\n * Field label.\n */\n label: string;\n /**\n * Icon shown before the label.\n */\n labelIcon?: IconComponent;\n /**\n * Tooltip content shown next to the label.\n */\n labelTooltip?: ReactNode;\n /**\n * Called when selection changes.\n */\n onChange: (value: string | null) => void;\n /**\n * Options to display.\n */\n options: ReadonlyArray<SelectOptionDefinition>;\n /**\n * Placeholder shown when no option is selected.\n * @default 'Select...'\n */\n placeholder?: string;\n /**\n * Ref forwarded to the combobox button.\n */\n ref?: Ref<HTMLButtonElement>;\n /**\n * Custom render function for selectable options.\n */\n renderOption?: (option: SelectOptionData) => ReactNode;\n /**\n * Search input placeholder.\n * @default 'Search...'\n */\n searchPlaceholder?: string;\n /**\n * Select size.\n * @default 'md'\n */\n size?: InputSize;\n /**\n * Start icon rendered in the trigger.\n */\n startIcon?: IconComponent;\n /**\n * Validation status displayed below the selector.\n */\n status?: InputStatus;\n /**\n * Inline styles applied to the trigger wrapper.\n */\n style?: CSSProperties;\n /**\n * Selected option value.\n */\n value: string | null;\n} & FieldNecessity;\n\n/**\n * Single-select dropdown field.\n */\nexport function Select({\n className,\n 'data-testid': dataTestId,\n description,\n hasClear = false,\n hasSearch = false,\n isDisabled = false,\n isLabelHidden = false,\n isLoading = false,\n isOptional,\n isRequired,\n label,\n labelIcon,\n labelTooltip,\n onChange,\n options,\n placeholder = 'Select...',\n ref,\n renderOption: renderOptionProp,\n searchPlaceholder = 'Search...',\n size = 'md',\n startIcon,\n status,\n style,\n value,\n}: SelectProps): React.JSX.Element {\n const selectedValues = useMemo(\n () => (value == null ? new Set<string>() : new Set([value])),\n [value],\n );\n\n const commitOption = useCallback(\n (option: SelectOptionData): boolean => {\n if (option.isDisabled) {\n return false;\n }\n\n onChange(option.value);\n return true;\n },\n [onChange],\n );\n\n const {\n activeDescendantId,\n describedBy,\n descriptionID,\n filteredValues,\n getOptionId,\n handleKeyboardNavigation,\n handleOptionClick,\n handleOptionMouseEnter,\n highlightedValue,\n inputId,\n isInteractionDisabled,\n isOpen,\n listboxId,\n query,\n selectableOptions,\n setHighlightedValue,\n setIsOpen,\n setQuery,\n statusMessageID,\n triggerRef,\n } = useSelectListbox({\n description,\n isDisabled,\n isLoading,\n isListboxClosedOnCommit: true,\n isQueryClearedOnCommit: true,\n onCommitOption: commitOption,\n options,\n selectedValues,\n status,\n });\n\n const selectedOption = useMemo(\n () => selectableOptions.find(option => option.value === value),\n [selectableOptions, value],\n );\n\n const menuClasses = selectMenuRecipe();\n\n const renderOption = useCallback(\n (option: SelectOptionData): ReactNode => {\n if (!filteredValues.has(option.value)) {\n return null;\n }\n return (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events -- keyboard navigation is handled by the combobox input, not individual options\n <div\n aria-disabled={option.isDisabled ?? undefined}\n aria-selected={option.value === value || undefined}\n className={menuClasses.option}\n data-highlighted={option.value === highlightedValue ? '' : undefined}\n data-selected={option.value === value ? '' : undefined}\n data-value={option.value}\n id={getOptionId(option.value)}\n key={option.value}\n onClick={option.isDisabled ? undefined : handleOptionClick}\n onMouseEnter={handleOptionMouseEnter}\n role=\"option\"\n tabIndex={option.value === highlightedValue ? 0 : -1}>\n <span className={menuClasses.optionContent}>\n {renderOptionProp == null ? (\n <>\n {option.icon != null ? (\n <span className={menuClasses.iconSlot}>\n <Icon color=\"secondary\" icon={option.icon} size=\"sm\" />\n </span>\n ) : null}\n {option.label}\n </>\n ) : (\n renderOptionProp(option)\n )}\n </span>\n {option.value === value ? (\n <span className={menuClasses.check}>\n <Icon color=\"accent\" icon={Check} size=\"sm\" />\n </span>\n ) : null}\n </div>\n );\n },\n [\n filteredValues,\n getOptionId,\n handleOptionClick,\n handleOptionMouseEnter,\n highlightedValue,\n menuClasses,\n renderOptionProp,\n value,\n ],\n );\n\n const optionNodes = renderSelectListboxOptions({\n dividerClassName: menuClasses.divider ?? '',\n inputId,\n options,\n renderOption,\n sectionHeadingClassName: menuClasses.sectionHeading ?? '',\n });\n\n const menu = (\n <>\n {hasSearch ? (\n <input\n aria-activedescendant={activeDescendantId}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-label={`Search ${label}`}\n className={menuClasses.search}\n onChange={event => {\n setQuery(event.target.value);\n setHighlightedValue(null);\n }}\n onKeyDown={handleKeyboardNavigation}\n placeholder={searchPlaceholder}\n type=\"search\"\n value={query}\n />\n ) : null}\n <div\n aria-label={`${label} options`}\n className={menuClasses.menu}\n id={listboxId}\n role=\"listbox\">\n {optionNodes}\n </div>\n </>\n );\n\n const necessity = getNecessity(isOptional, isRequired);\n const triggerClasses = selectTriggerRecipe({\n isDisabled: isInteractionDisabled,\n isPlaceholder: selectedOption == null,\n });\n\n const trigger = (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events, jsx-a11y-x/no-static-element-interactions -- mouse clicks anywhere on the visual input delegate to the inner combobox button; keyboard handling stays on that button.\n <div\n className={cx(\n inputRecipe({\n size,\n status: status?.type,\n isDisabled,\n }),\n triggerClasses.wrapper,\n )}\n onClick={() => {\n if (!isInteractionDisabled) {\n setIsOpen(currentIsOpen => !currentIsOpen);\n }\n }}\n ref={triggerRef}>\n {startIcon != null ? (\n <span className={menuClasses.iconSlot}>\n <Icon color=\"secondary\" icon={startIcon} size=\"sm\" />\n </span>\n ) : null}\n <button\n aria-activedescendant={activeDescendantId}\n aria-busy={isLoading || undefined}\n aria-controls={listboxId}\n aria-describedby={describedBy}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={status?.type === 'error' || undefined}\n className={triggerClasses.trigger}\n data-testid={dataTestId}\n disabled={isInteractionDisabled}\n id={inputId}\n onKeyDown={handleKeyboardNavigation}\n ref={ref}\n role=\"combobox\"\n type=\"button\">\n <span className={triggerClasses.label}>\n {selectedOption?.label ?? placeholder}\n </span>\n </button>\n {isLoading ? <Spinner size=\"sm\" /> : null}\n {hasClear && selectedOption != null && !isDisabled ? (\n <Button\n icon={X}\n isIconOnly\n label={`Clear ${label}`}\n onClick={event => {\n event.stopPropagation();\n onChange(null);\n }}\n size=\"sm\"\n variant=\"ghost\"\n />\n ) : null}\n <span className={menuClasses.iconSlot}>\n <Icon icon={ChevronDown} size=\"sm\" />\n </span>\n </div>\n );\n\n return (\n <Field\n className={className}\n description={description}\n descriptionID={descriptionID}\n inputId={inputId}\n isDisabled={isDisabled}\n isLabelHidden={isLabelHidden}\n {...necessity}\n label={label}\n labelIcon={labelIcon}\n labelTooltip={labelTooltip}\n status={\n status == null ? undefined : {...status, messageID: statusMessageID}\n }\n style={style}>\n {trigger}\n <Popover\n anchorRef={triggerRef}\n content={menu}\n hasAutoFocus={hasSearch}\n hasCloseButton={false}\n isEnabled={false}\n isOpen={isOpen}\n onOpenChange={setIsOpen}\n />\n </Field>\n );\n}\n\nSelect.displayName = 'Select';\n","import type {CSSProperties, ReactNode, Ref} from 'react';\nimport {Icon, type IconComponent} from 'components/Icon';\nimport {Item} from 'components/Item';\nimport {selectOptionItemRecipe} from 'components/Select/Select.recipe';\nimport {cx} from 'internal/cx';\n\nexport interface SelectOptionProps {\n /**\n * Additional CSS class names applied to the option layout.\n */\n className?: string;\n /**\n * Test ID applied to the option layout.\n */\n 'data-testid'?: string;\n /**\n * Supporting text displayed below the label.\n */\n description?: ReactNode;\n /**\n * Trailing content.\n */\n endContent?: ReactNode;\n /**\n * Icon displayed before the label.\n */\n icon?: IconComponent;\n /**\n * Primary label.\n */\n label: ReactNode;\n /**\n * Ref forwarded to the layout root.\n */\n ref?: Ref<HTMLSpanElement>;\n /**\n * Inline styles applied to the layout root.\n */\n style?: CSSProperties;\n}\n\n/**\n * Helper layout for custom Select option rendering.\n */\nexport function SelectOption({\n className,\n 'data-testid': dataTestId,\n description,\n endContent,\n icon,\n label,\n ref,\n style,\n}: SelectOptionProps): React.JSX.Element {\n const classes = selectOptionItemRecipe();\n\n return (\n <Item\n as=\"span\"\n className={cx(classes.root, className)}\n data-testid={dataTestId}\n description={description}\n endContent={endContent}\n label={label}\n ref={ref}\n startContent={\n icon != null ? (\n <span className={classes.icon}>\n <Icon color=\"secondary\" icon={icon} size=\"sm\" />\n </span>\n ) : null\n }\n style={style}\n />\n );\n}\n\nSelectOption.displayName = 'SelectOption';\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkRLIBY7XB_cjs = require('./chunk-RLIBY7XB.cjs');
|
|
4
4
|
var chunkKUXFEAT4_cjs = require('./chunk-KUXFEAT4.cjs');
|
|
5
5
|
var chunkVXBVSYPA_cjs = require('./chunk-VXBVSYPA.cjs');
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
6
|
+
var chunkR3ZS6FU6_cjs = require('./chunk-R3ZS6FU6.cjs');
|
|
7
|
+
var chunkRAMDISDK_cjs = require('./chunk-RAMDISDK.cjs');
|
|
8
|
+
var chunkVXOIOPGZ_cjs = require('./chunk-VXOIOPGZ.cjs');
|
|
9
|
+
var chunkGU65FGY6_cjs = require('./chunk-GU65FGY6.cjs');
|
|
10
|
+
var chunkMHAXS4GO_cjs = require('./chunk-MHAXS4GO.cjs');
|
|
11
11
|
var chunkJ4PIYOWT_cjs = require('./chunk-J4PIYOWT.cjs');
|
|
12
12
|
var chunkZ6RT3WPE_cjs = require('./chunk-Z6RT3WPE.cjs');
|
|
13
13
|
var chunkSPDVNY2Z_cjs = require('./chunk-SPDVNY2Z.cjs');
|
|
@@ -258,15 +258,15 @@ function MultiSelect({
|
|
|
258
258
|
statusMessageID,
|
|
259
259
|
triggerRef,
|
|
260
260
|
visibleSelectableOptions
|
|
261
|
-
} =
|
|
261
|
+
} = chunkRLIBY7XB_cjs.useSelectListbox({
|
|
262
262
|
description,
|
|
263
263
|
isDefaultOpen,
|
|
264
264
|
isDisabled,
|
|
265
|
+
isHighlightClearedOnCommit: false,
|
|
265
266
|
isLoading,
|
|
266
267
|
onCommitOption: toggleValue,
|
|
267
268
|
options,
|
|
268
269
|
selectedValues,
|
|
269
|
-
shouldClearOnCommit: false,
|
|
270
270
|
status
|
|
271
271
|
});
|
|
272
272
|
const selectedOptions = react.useMemo(
|
|
@@ -313,7 +313,7 @@ function MultiSelect({
|
|
|
313
313
|
const overflow = selectedOptions.length - visible.length;
|
|
314
314
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: triggerClasses.badges, children: [
|
|
315
315
|
visible.map((option) => /* @__PURE__ */ jsxRuntime.jsx(chunkKUXFEAT4_cjs.Badge, { label: option.label ?? option.value }, option.value)),
|
|
316
|
-
overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
316
|
+
overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkMHAXS4GO_cjs.Text, { as: "span", color: "secondary", type: "supporting", children: [
|
|
317
317
|
"+",
|
|
318
318
|
overflow
|
|
319
319
|
] }) : null
|
|
@@ -357,7 +357,7 @@ function MultiSelect({
|
|
|
357
357
|
)
|
|
358
358
|
);
|
|
359
359
|
};
|
|
360
|
-
const optionNodes =
|
|
360
|
+
const optionNodes = chunkRLIBY7XB_cjs.renderSelectListboxOptions({
|
|
361
361
|
dividerClassName: menuClasses.divider ?? "",
|
|
362
362
|
inputId,
|
|
363
363
|
options,
|
|
@@ -457,9 +457,9 @@ function MultiSelect({
|
|
|
457
457
|
children: renderTriggerValue()
|
|
458
458
|
}
|
|
459
459
|
),
|
|
460
|
-
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
460
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkGU65FGY6_cjs.Spinner, { size: "sm" }) : null,
|
|
461
461
|
hasClear && value.length > 0 && !isDisabled ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
462
|
-
|
|
462
|
+
chunkVXOIOPGZ_cjs.Button,
|
|
463
463
|
{
|
|
464
464
|
icon: lucideReact.X,
|
|
465
465
|
isIconOnly: true,
|
|
@@ -477,9 +477,9 @@ function MultiSelect({
|
|
|
477
477
|
}
|
|
478
478
|
)
|
|
479
479
|
);
|
|
480
|
-
const necessity =
|
|
480
|
+
const necessity = chunkR3ZS6FU6_cjs.getNecessity(isOptional, isRequired);
|
|
481
481
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
482
|
-
|
|
482
|
+
chunkR3ZS6FU6_cjs.Field,
|
|
483
483
|
{
|
|
484
484
|
className,
|
|
485
485
|
description,
|
|
@@ -496,7 +496,7 @@ function MultiSelect({
|
|
|
496
496
|
children: [
|
|
497
497
|
trigger,
|
|
498
498
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
499
|
-
|
|
499
|
+
chunkRAMDISDK_cjs.Popover,
|
|
500
500
|
{
|
|
501
501
|
anchorRef: triggerRef,
|
|
502
502
|
content: menu,
|
|
@@ -514,5 +514,5 @@ function MultiSelect({
|
|
|
514
514
|
MultiSelect.displayName = "MultiSelect";
|
|
515
515
|
|
|
516
516
|
exports.MultiSelect = MultiSelect;
|
|
517
|
-
//# sourceMappingURL=chunk-
|
|
518
|
-
//# sourceMappingURL=chunk-
|
|
517
|
+
//# sourceMappingURL=chunk-UZGPFPIV.cjs.map
|
|
518
|
+
//# sourceMappingURL=chunk-UZGPFPIV.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/MultiSelect/MultiSelect.recipe.ts","../src/components/MultiSelect/MultiSelect.tsx"],"names":["sva","useMemo","useCallback","useSelectListbox","jsx","jsxs","Badge","Text","Icon","Check","Fragment","renderSelectListboxOptions","cx","inputRecipe","Spinner","Button","X","ChevronDown","getNecessity","Field","Popover"],"mappings":"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","file":"chunk-IGJEZLHP.cjs","sourcesContent":["import {sva, type RecipeVariantProps} from 'styled-system/css';\n\nexport const multiSelectMenuRecipe = sva({\n slots: [\n 'menu',\n 'search',\n 'option',\n 'optionContent',\n 'checkbox',\n 'iconSlot',\n 'sectionHeading',\n 'divider',\n ],\n base: {\n menu: {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5',\n maxH: '80',\n overflowY: 'auto',\n p: '1',\n },\n search: {\n w: 'full',\n px: '2',\n py: '1',\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'border.emphasized',\n borderRadius: 'md',\n fontFamily: 'body',\n outline: 'none',\n _focus: {\n borderColor: 'primary',\n },\n },\n option: {\n display: 'flex',\n alignItems: 'center',\n gap: '2',\n w: 'full',\n px: '2',\n py: '2',\n borderWidth: 0,\n borderRadius: 'md',\n bg: 'transparent',\n color: 'fg',\n cursor: 'pointer',\n fontFamily: 'body',\n textAlign: 'start',\n _hover: {bg: 'bg.subtle'},\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffsetTight',\n },\n '&[aria-disabled=\"true\"]': {\n opacity: 0.55,\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n },\n optionContent: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '2',\n minW: 0,\n flex: 1,\n },\n checkbox: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n w: '5',\n h: '5',\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'fg.muted',\n borderRadius: 'sm',\n bg: 'bg',\n color: 'fg.onPrimary',\n },\n iconSlot: {\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n color: 'fg.muted',\n },\n sectionHeading: {\n px: '2',\n py: '1',\n color: 'fg.muted',\n fontFamily: 'body',\n fontSize: 'sm',\n fontWeight: 'semibold',\n },\n divider: {\n h: '1px',\n bg: 'border',\n my: '1',\n },\n },\n variants: {\n isHighlighted: {\n true: {option: {bg: 'bg.subtle'}},\n false: {},\n },\n isSelected: {\n true: {checkbox: {bg: 'primary', borderColor: 'primary'}},\n false: {},\n },\n },\n defaultVariants: {\n isHighlighted: false,\n isSelected: false,\n },\n});\n\nexport type MultiSelectMenuVariants = RecipeVariantProps<\n typeof multiSelectMenuRecipe\n>;\n\nexport const multiSelectTriggerRecipe = sva({\n slots: ['wrapper', 'trigger', 'triggerText', 'badges'],\n base: {\n wrapper: {\n cursor: 'pointer',\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '2',\n flex: 1,\n minW: 0,\n p: 0,\n borderWidth: 0,\n bg: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n fontFamily: 'body',\n outline: 'none',\n textAlign: 'start',\n _disabled: {\n cursor: 'not-allowed',\n },\n },\n triggerText: {\n flex: 1,\n minW: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n badges: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '1',\n minW: 0,\n overflow: 'hidden',\n },\n },\n variants: {\n isDisabled: {\n true: {wrapper: {cursor: 'not-allowed'}},\n false: {},\n },\n isPlaceholder: {\n true: {triggerText: {color: 'fg.muted'}},\n false: {},\n },\n },\n defaultVariants: {\n isDisabled: false,\n isPlaceholder: false,\n },\n});\n\nexport type MultiSelectTriggerVariants = RecipeVariantProps<\n typeof multiSelectTriggerRecipe\n>;\n","import {Check, ChevronDown, X} from 'lucide-react';\nimport {\n useCallback,\n useMemo,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {Badge} from 'components/Badge';\nimport {Button} from 'components/Button';\nimport {\n Field,\n getNecessity,\n type FieldNecessity,\n type InputSize,\n type InputStatus,\n} from 'components/Field';\nimport {inputRecipe} from 'components/Field/inputStyles';\nimport {Icon, type IconComponent} from 'components/Icon';\nimport {\n multiSelectMenuRecipe,\n multiSelectTriggerRecipe,\n} from 'components/MultiSelect/MultiSelect.recipe';\nimport {Popover} from 'components/Popover';\nimport {Spinner} from 'components/Spinner';\nimport {Text} from 'components/Text';\nimport {cx} from 'internal/cx';\nimport {\n renderSelectListboxOptions,\n useSelectListbox,\n type SelectListboxOptionData,\n} from 'internal/useSelectListbox';\n\nexport interface MultiSelectOptionData extends SelectListboxOptionData {\n /**\n * Icon displayed before the label.\n */\n icon?: IconComponent;\n /**\n * Whether the option is disabled.\n */\n isDisabled?: boolean;\n /**\n * Option label. Defaults to `value`.\n */\n label?: string;\n /**\n * Option value.\n */\n value: string;\n}\n\nexport interface MultiSelectDivider {\n /**\n * Discriminator identifying a divider entry.\n */\n type: 'divider';\n}\n\nexport interface MultiSelectSection {\n /**\n * Options within this section.\n */\n options: ReadonlyArray<MultiSelectOptionData>;\n /**\n * Optional heading text for the section.\n */\n title?: string;\n /**\n * Discriminator identifying a section entry.\n */\n type: 'section';\n}\n\nexport type MultiSelectOption =\n | MultiSelectDivider\n | MultiSelectOptionData\n | MultiSelectSection\n | string;\n\nexport type MultiSelectTriggerDisplay = 'count' | 'labels' | 'badges';\n\nexport type MultiSelectProps = {\n /**\n * Custom render function for selectable options.\n */\n children?: (option: MultiSelectOptionData) => ReactNode;\n /**\n * Additional CSS class names applied to the trigger wrapper.\n */\n className?: string;\n /**\n * Test ID applied to the combobox button.\n */\n 'data-testid'?: string;\n /**\n * Supporting text displayed below the label.\n */\n description?: ReactNode;\n /**\n * Whether to show a clear button when values are selected.\n * @default false\n */\n hasClear?: boolean;\n /**\n * Whether to show search input in the dropdown.\n * @default false\n */\n hasSearch?: boolean;\n /**\n * Whether to show a select-all option.\n * @default false\n */\n hasSelectAll?: boolean;\n /**\n * Whether the selector starts open.\n * @default false\n */\n isDefaultOpen?: boolean;\n /**\n * Whether the selector is disabled.\n * @default false\n */\n isDisabled?: boolean;\n /**\n * Whether to visually hide the label.\n * @default false\n */\n isLabelHidden?: boolean;\n /**\n * Whether the selector is loading.\n * @default false\n */\n isLoading?: boolean;\n /**\n * Field label.\n */\n label: string;\n /**\n * Icon shown before the label.\n */\n labelIcon?: IconComponent;\n /**\n * Tooltip content shown next to the label.\n */\n labelTooltip?: ReactNode;\n /**\n * Maximum number of badges before showing an overflow count.\n * @default 3\n */\n maxBadges?: number;\n /**\n * Called when selection changes.\n */\n onChange: (value: string[]) => void;\n /**\n * Options to display.\n */\n options: ReadonlyArray<MultiSelectOption>;\n /**\n * Placeholder shown when no values are selected.\n * @default 'Select...'\n */\n placeholder?: string;\n /**\n * Ref forwarded to the combobox button.\n */\n ref?: Ref<HTMLButtonElement>;\n /**\n * Search input placeholder.\n * @default 'Search...'\n */\n searchPlaceholder?: string;\n /**\n * Select-all option label.\n * @default 'Select all'\n */\n selectAllLabel?: string;\n /**\n * Select size.\n * @default 'md'\n */\n size?: InputSize;\n /**\n * Start icon rendered in the trigger.\n */\n startIcon?: IconComponent;\n /**\n * Validation status displayed below the selector.\n */\n status?: InputStatus;\n /**\n * Inline styles applied to the trigger wrapper.\n */\n style?: CSSProperties;\n /**\n * How selected items are summarized in the trigger.\n * @default 'count'\n */\n triggerDisplay?: MultiSelectTriggerDisplay;\n /**\n * Selected option values.\n */\n value: string[];\n} & FieldNecessity;\n\n/**\n * Multi-select dropdown field with checkbox-style options.\n */\nexport function MultiSelect({\n children,\n className,\n 'data-testid': dataTestId,\n description,\n hasClear = false,\n hasSearch = false,\n hasSelectAll = false,\n isDefaultOpen = false,\n isDisabled = false,\n isLabelHidden = false,\n isLoading = false,\n isOptional,\n isRequired,\n label,\n labelIcon,\n labelTooltip,\n maxBadges = 3,\n onChange,\n options,\n placeholder = 'Select...',\n ref,\n searchPlaceholder = 'Search...',\n selectAllLabel = 'Select all',\n size = 'md',\n startIcon,\n status,\n style,\n triggerDisplay = 'count',\n value,\n}: MultiSelectProps): React.JSX.Element {\n const selectedValues = useMemo(() => new Set(value), [value]);\n\n const toggleValue = useCallback(\n (option: MultiSelectOptionData): boolean => {\n if (option.isDisabled === true) {\n return false;\n }\n\n const nextValues = new Set(value);\n if (nextValues.has(option.value)) {\n nextValues.delete(option.value);\n } else {\n nextValues.add(option.value);\n }\n onChange(Array.from(nextValues));\n return true;\n },\n [onChange, value],\n );\n\n const {\n activeDescendantId,\n describedBy,\n descriptionID,\n filteredValues,\n getOptionId,\n handleKeyboardNavigation,\n handleOptionClick,\n handleOptionMouseEnter,\n highlightedValue,\n inputId,\n isInteractionDisabled,\n isOpen,\n listboxId,\n query,\n selectableOptions,\n setHighlightedValue,\n setIsOpen,\n setQuery,\n statusMessageID,\n triggerRef,\n visibleSelectableOptions,\n } = useSelectListbox({\n description,\n isDefaultOpen,\n isDisabled,\n isLoading,\n onCommitOption: toggleValue,\n options,\n selectedValues,\n shouldClearOnCommit: false,\n status,\n });\n\n const selectedOptions = useMemo(\n () => selectableOptions.filter(option => selectedValues.has(option.value)),\n [selectableOptions, selectedValues],\n );\n const enabledVisibleOptions = useMemo(\n () => visibleSelectableOptions.filter(option => option.isDisabled !== true),\n [visibleSelectableOptions],\n );\n const allSelected =\n enabledVisibleOptions.length > 0 &&\n enabledVisibleOptions.every(option => selectedValues.has(option.value));\n\n const toggleAll = useCallback(() => {\n if (allSelected) {\n onChange(\n value.filter(\n optionValue =>\n !enabledVisibleOptions.some(option => option.value === optionValue),\n ),\n );\n return;\n }\n\n const nextValues = new Set(value);\n for (const option of enabledVisibleOptions) {\n nextValues.add(option.value);\n }\n onChange(Array.from(nextValues));\n }, [allSelected, onChange, enabledVisibleOptions, value]);\n\n const menuClasses = multiSelectMenuRecipe();\n const triggerClasses = multiSelectTriggerRecipe({\n isDisabled: isInteractionDisabled,\n isPlaceholder: selectedOptions.length === 0,\n });\n\n const renderTriggerValue = (): ReactNode => {\n if (selectedOptions.length === 0) {\n return <span className={triggerClasses.triggerText}>{placeholder}</span>;\n }\n if (triggerDisplay === 'labels') {\n const labels = selectedOptions.map(\n option => option.label ?? option.value,\n );\n return (\n <span className={triggerClasses.triggerText}>{labels.join(', ')}</span>\n );\n }\n if (triggerDisplay === 'badges') {\n const visible = selectedOptions.slice(0, maxBadges);\n const overflow = selectedOptions.length - visible.length;\n return (\n <span className={triggerClasses.badges}>\n {visible.map(option => (\n <Badge key={option.value} label={option.label ?? option.value} />\n ))}\n {overflow > 0 ? (\n <Text as=\"span\" color=\"secondary\" type=\"supporting\">\n +{overflow}\n </Text>\n ) : null}\n </span>\n );\n }\n return (\n <span className={triggerClasses.triggerText}>\n {selectedOptions.length} selected\n </span>\n );\n };\n\n const renderOption = (option: MultiSelectOptionData): ReactNode => {\n if (!filteredValues.has(option.value)) {\n return null;\n }\n const isSelected = selectedValues.has(option.value);\n const isHighlighted = highlightedValue === option.value;\n const optionClasses = multiSelectMenuRecipe({isHighlighted, isSelected});\n return (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events -- keyboard navigation is handled by the combobox input, not individual options\n <div\n aria-disabled={option.isDisabled ?? undefined}\n aria-selected={isSelected}\n className={optionClasses.option}\n data-value={option.value}\n id={getOptionId(option.value)}\n key={option.value}\n onClick={option.isDisabled ? undefined : handleOptionClick}\n onMouseEnter={handleOptionMouseEnter}\n role=\"option\"\n tabIndex={isHighlighted ? 0 : -1}>\n <span aria-hidden=\"true\" className={optionClasses.checkbox}>\n {isSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={optionClasses.optionContent}>\n {children == null ? (\n <>\n {option.icon != null ? (\n <span className={optionClasses.iconSlot}>\n <Icon color=\"secondary\" icon={option.icon} size=\"sm\" />\n </span>\n ) : null}\n {option.label}\n </>\n ) : (\n children(option)\n )}\n </span>\n </div>\n );\n };\n\n const optionNodes = renderSelectListboxOptions({\n dividerClassName: menuClasses.divider ?? '',\n inputId,\n options,\n renderOption,\n sectionHeadingClassName: menuClasses.sectionHeading ?? '',\n });\n\n const selectAllClasses = multiSelectMenuRecipe({isSelected: allSelected});\n\n const menu = (\n <>\n {hasSearch ? (\n <input\n aria-activedescendant={activeDescendantId}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-label={`Search ${label}`}\n className={menuClasses.search}\n onChange={event => {\n setQuery(event.target.value);\n setHighlightedValue(null);\n }}\n onKeyDown={handleKeyboardNavigation}\n placeholder={searchPlaceholder}\n type=\"search\"\n value={query}\n />\n ) : null}\n <div\n aria-label={`${label} options`}\n aria-multiselectable=\"true\"\n className={menuClasses.menu}\n id={listboxId}\n role=\"listbox\">\n {hasSelectAll ? (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events -- keyboard navigation is handled by the combobox input, not individual options\n <div\n aria-selected={allSelected}\n className={selectAllClasses.option}\n onClick={toggleAll}\n role=\"option\"\n tabIndex={-1}>\n <span aria-hidden=\"true\" className={selectAllClasses.checkbox}>\n {allSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={selectAllClasses.optionContent}>\n {selectAllLabel}\n </span>\n </div>\n ) : null}\n {optionNodes}\n </div>\n </>\n );\n\n const trigger = (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events, jsx-a11y-x/no-static-element-interactions -- mouse clicks anywhere on the visual input delegate to the inner combobox button; keyboard handling stays on that button.\n <div\n className={cx(\n inputRecipe({\n size,\n status: status?.type,\n isDisabled,\n }),\n triggerClasses.wrapper,\n )}\n onClick={() => {\n if (!isInteractionDisabled) {\n setIsOpen(currentIsOpen => !currentIsOpen);\n }\n }}\n ref={triggerRef}>\n {startIcon != null ? (\n <span className={menuClasses.iconSlot}>\n <Icon color=\"secondary\" icon={startIcon} size=\"sm\" />\n </span>\n ) : null}\n <button\n aria-activedescendant={activeDescendantId}\n aria-busy={isLoading || undefined}\n aria-controls={listboxId}\n aria-describedby={describedBy}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={status?.type === 'error' || undefined}\n className={triggerClasses.trigger}\n data-testid={dataTestId}\n disabled={isInteractionDisabled}\n id={inputId}\n onKeyDown={handleKeyboardNavigation}\n ref={ref}\n role=\"combobox\"\n type=\"button\">\n {renderTriggerValue()}\n </button>\n {isLoading ? <Spinner size=\"sm\" /> : null}\n {hasClear && value.length > 0 && !isDisabled ? (\n <Button\n icon={X}\n isIconOnly\n label={`Clear ${label}`}\n onClick={event => {\n event.stopPropagation();\n onChange([]);\n }}\n size=\"sm\"\n variant=\"ghost\"\n />\n ) : null}\n <span className={menuClasses.iconSlot}>\n <Icon icon={ChevronDown} size=\"sm\" />\n </span>\n </div>\n );\n\n const necessity = getNecessity(isOptional, isRequired);\n\n return (\n <Field\n className={className}\n description={description}\n descriptionID={descriptionID}\n inputId={inputId}\n isDisabled={isDisabled}\n isLabelHidden={isLabelHidden}\n {...necessity}\n label={label}\n labelIcon={labelIcon}\n labelTooltip={labelTooltip}\n status={\n status == null ? undefined : {...status, messageID: statusMessageID}\n }\n style={style}>\n {trigger}\n <Popover\n anchorRef={triggerRef}\n content={menu}\n hasAutoFocus={hasSearch}\n hasCloseButton={false}\n isEnabled={false}\n isOpen={isOpen}\n onOpenChange={setIsOpen}\n />\n </Field>\n );\n}\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/MultiSelect/MultiSelect.recipe.ts","../src/components/MultiSelect/MultiSelect.tsx"],"names":["sva","useMemo","useCallback","useSelectListbox","jsx","jsxs","Badge","Text","Icon","Check","Fragment","renderSelectListboxOptions","cx","inputRecipe","Spinner","Button","X","ChevronDown","getNecessity","Field","Popover"],"mappings":";;;;;;;;;;;;;;;;;;AAEO,IAAM,wBAAwBA,qBAAA,CAAI;AAAA,EACvC,KAAA,EAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe,QAAA;AAAA,MACf,GAAA,EAAK,KAAA;AAAA,MACL,IAAA,EAAM,IAAA;AAAA,MACN,SAAA,EAAW,MAAA;AAAA,MACX,CAAA,EAAG;AAAA,KACL;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,CAAA,EAAG,MAAA;AAAA,MACH,EAAA,EAAI,GAAA;AAAA,MACJ,EAAA,EAAI,GAAA;AAAA,MACJ,WAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,mBAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,UAAA,EAAY,MAAA;AAAA,MACZ,OAAA,EAAS,MAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACN,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,GAAA,EAAK,GAAA;AAAA,MACL,CAAA,EAAG,MAAA;AAAA,MACH,EAAA,EAAI,GAAA;AAAA,MACJ,EAAA,EAAI,GAAA;AAAA,MACJ,WAAA,EAAa,CAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,OAAA;AAAA,MACX,MAAA,EAAQ,EAAC,EAAA,EAAI,WAAA,EAAW;AAAA,MACxB,aAAA,EAAe;AAAA,QACb,YAAA,EAAc,OAAA;AAAA,QACd,YAAA,EAAc,OAAA;AAAA,QACd,YAAA,EAAc,SAAA;AAAA,QACd,aAAA,EAAe;AAAA,OACjB;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,OAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAQ,aAAA;AAAA,QACR,aAAA,EAAe;AAAA;AACjB,KACF;AAAA,IACA,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,aAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,aAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,CAAA;AAAA,MACZ,CAAA,EAAG,GAAA;AAAA,MACH,CAAA,EAAG,GAAA;AAAA,MACH,WAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,UAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,EAAA,EAAI,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,aAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,EAAA,EAAI,GAAA;AAAA,MACJ,EAAA,EAAI,GAAA;AAAA,MACJ,KAAA,EAAO,UAAA;AAAA,MACP,UAAA,EAAY,MAAA;AAAA,MACZ,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAA,EAAS;AAAA,MACP,CAAA,EAAG,KAAA;AAAA,MACH,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,aAAA,EAAe;AAAA,MACb,MAAM,EAAC,MAAA,EAAQ,EAAC,EAAA,EAAI,aAAW,EAAC;AAAA,MAChC,OAAO;AAAC,KACV;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,EAAC,QAAA,EAAU,EAAC,IAAI,SAAA,EAAW,WAAA,EAAa,WAAS,EAAC;AAAA,MACxD,OAAO;AAAC;AACV,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY;AAAA;AAEhB,CAAC,CAAA;AAMM,IAAM,2BAA2BA,qBAAA,CAAI;AAAA,EAC1C,KAAA,EAAO,CAAC,SAAA,EAAW,SAAA,EAAW,eAAe,QAAQ,CAAA;AAAA,EACrD,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,eAAA;AAAA,MAChB,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,CAAA,EAAG,CAAA;AAAA,MACH,WAAA,EAAa,CAAA;AAAA,MACb,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA,EAAY,MAAA;AAAA,MACZ,OAAA,EAAS,MAAA;AAAA,MACT,SAAA,EAAW,OAAA;AAAA,MACX,SAAA,EAAW;AAAA,QACT,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,CAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,YAAA,EAAc,UAAA;AAAA,MACd,UAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,aAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA,EAAY;AAAA,MACV,MAAM,EAAC,OAAA,EAAS,EAAC,MAAA,EAAQ,eAAa,EAAC;AAAA,MACvC,OAAO;AAAC,KACV;AAAA,IACA,aAAA,EAAe;AAAA,MACb,MAAM,EAAC,WAAA,EAAa,EAAC,KAAA,EAAO,YAAU,EAAC;AAAA,MACvC,OAAO;AAAC;AACV,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe;AAAA;AAEnB,CAAC,CAAA;AC+BM,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,EAAe,UAAA;AAAA,EACf,WAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,KAAA;AAAA,EACZ,YAAA,GAAe,KAAA;AAAA,EACf,aAAA,GAAgB,KAAA;AAAA,EAChB,UAAA,GAAa,KAAA;AAAA,EACb,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA,GAAY,KAAA;AAAA,EACZ,UAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA,GAAY,CAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA,GAAc,WAAA;AAAA,EACd,GAAA;AAAA,EACA,iBAAA,GAAoB,WAAA;AAAA,EACpB,cAAA,GAAiB,YAAA;AAAA,EACjB,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA,GAAiB,OAAA;AAAA,EACjB;AACF,CAAA,EAAwC;AACtC,EAAA,MAAM,cAAA,GAAiBC,cAAQ,MAAM,IAAI,IAAI,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAE5D,EAAA,MAAM,WAAA,GAAcC,iBAAA;AAAA,IAClB,CAAC,MAAA,KAA2C;AAC1C,MAAA,IAAI,MAAA,CAAO,eAAe,IAAA,EAAM;AAC9B,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,KAAK,CAAA;AAChC,MAAA,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAChC,QAAA,UAAA,CAAW,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,MAC7B;AACA,MAAA,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,UAAU,KAAK;AAAA,GAClB;AAEA,EAAA,MAAM;AAAA,IACJ,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,qBAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACEC,kCAAA,CAAiB;AAAA,IACnB,WAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,0BAAA,EAA4B,KAAA;AAAA,IAC5B,SAAA;AAAA,IACA,cAAA,EAAgB,WAAA;AAAA,IAChB,OAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBF,aAAA;AAAA,IACtB,MAAM,kBAAkB,MAAA,CAAO,CAAA,MAAA,KAAU,eAAe,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACzE,CAAC,mBAAmB,cAAc;AAAA,GACpC;AACA,EAAA,MAAM,qBAAA,GAAwBA,aAAA;AAAA,IAC5B,MAAM,wBAAA,CAAyB,MAAA,CAAO,CAAA,MAAA,KAAU,MAAA,CAAO,eAAe,IAAI,CAAA;AAAA,IAC1E,CAAC,wBAAwB;AAAA,GAC3B;AACA,EAAA,MAAM,WAAA,GACJ,qBAAA,CAAsB,MAAA,GAAS,CAAA,IAC/B,qBAAA,CAAsB,KAAA,CAAM,CAAA,MAAA,KAAU,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAExE,EAAA,MAAM,SAAA,GAAYC,kBAAY,MAAM;AAClC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,QAAA;AAAA,QACE,KAAA,CAAM,MAAA;AAAA,UACJ,iBACE,CAAC,qBAAA,CAAsB,KAAK,CAAA,MAAA,KAAU,MAAA,CAAO,UAAU,WAAW;AAAA;AACtE,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,KAAK,CAAA;AAChC,IAAA,KAAA,MAAW,UAAU,qBAAA,EAAuB;AAC1C,MAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,IAC7B;AACA,IAAA,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EACjC,GAAG,CAAC,WAAA,EAAa,QAAA,EAAU,qBAAA,EAAuB,KAAK,CAAC,CAAA;AAExD,EAAA,MAAM,cAAc,qBAAA,EAAsB;AAC1C,EAAA,MAAM,iBAAiB,wBAAA,CAAyB;AAAA,IAC9C,UAAA,EAAY,qBAAA;AAAA,IACZ,aAAA,EAAe,gBAAgB,MAAA,KAAW;AAAA,GAC3C,CAAA;AAED,EAAA,MAAM,qBAAqB,MAAiB;AAC1C,IAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,MAAA,uBAAOE,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAA,CAAe,aAAc,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,IACnE;AACA,IAAA,IAAI,mBAAmB,QAAA,EAAU;AAC/B,MAAA,MAAM,SAAS,eAAA,CAAgB,GAAA;AAAA,QAC7B,CAAA,MAAA,KAAU,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO;AAAA,OACnC;AACA,MAAA,uBACEA,cAAA,CAAC,UAAK,SAAA,EAAW,cAAA,CAAe,aAAc,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAE,CAAA;AAAA,IAEpE;AACA,IAAA,IAAI,mBAAmB,QAAA,EAAU;AAC/B,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAClD,MAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,MAAA,GAAS,OAAA,CAAQ,MAAA;AAClD,MAAA,uBACEC,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAA,CAAe,MAAA,EAC7B,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,qBACXD,cAAA,CAACE,uBAAA,EAAA,EAAyB,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,EAAA,EAA5C,MAAA,CAAO,KAA4C,CAChE,CAAA;AAAA,QACA,QAAA,GAAW,oBACVD,eAAA,CAACE,sBAAA,EAAA,EAAK,IAAG,MAAA,EAAO,KAAA,EAAM,WAAA,EAAY,IAAA,EAAK,YAAA,EAAa,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAChD;AAAA,SAAA,EACJ,CAAA,GACE;AAAA,OAAA,EACN,CAAA;AAAA,IAEJ;AACA,IAAA,uBACEF,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAA,CAAe,WAAA,EAC7B,QAAA,EAAA;AAAA,MAAA,eAAA,CAAgB,MAAA;AAAA,MAAO;AAAA,KAAA,EAC1B,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAA6C;AACjE,IAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAClD,IAAA,MAAM,aAAA,GAAgB,qBAAqB,MAAA,CAAO,KAAA;AAClD,IAAA,MAAM,aAAA,GAAgB,qBAAA,CAAsB,EAAC,aAAA,EAAe,YAAW,CAAA;AACvE,IAAA;AAAA;AAAA,sBAEEA,eAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,eAAA,EAAe,OAAO,UAAA,IAAc,MAAA;AAAA,UACpC,eAAA,EAAe,UAAA;AAAA,UACf,WAAW,aAAA,CAAc,MAAA;AAAA,UACzB,cAAY,MAAA,CAAO,KAAA;AAAA,UACnB,EAAA,EAAI,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA;AAAA,UAE5B,OAAA,EAAS,MAAA,CAAO,UAAA,GAAa,MAAA,GAAY,iBAAA;AAAA,UACzC,YAAA,EAAc,sBAAA;AAAA,UACd,IAAA,EAAK,QAAA;AAAA,UACL,QAAA,EAAU,gBAAgB,CAAA,GAAI,EAAA;AAAA,UAC9B,QAAA,EAAA;AAAA,4BAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAW,cAAc,QAAA,EAC/C,QAAA,EAAA,UAAA,mBAAaA,cAAA,CAACI,sBAAA,EAAA,EAAK,IAAA,EAAMC,iBAAA,EAAO,IAAA,EAAK,IAAA,EAAK,IAAK,IAAA,EAClD,CAAA;AAAA,2CACC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAc,aAAA,EAC5B,QAAA,EAAA,QAAA,IAAY,uBACXJ,eAAA,CAAAK,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,MAAA,CAAO,QAAQ,IAAA,mBACdN,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAc,QAAA,EAC7B,QAAA,kBAAAA,cAAA,CAACI,sBAAA,EAAA,EAAK,KAAA,EAAM,aAAY,IAAA,EAAM,MAAA,CAAO,MAAM,IAAA,EAAK,IAAA,EAAK,GACvD,CAAA,GACE,IAAA;AAAA,cACH,MAAA,CAAO;AAAA,aAAA,EACV,CAAA,GAEA,QAAA,CAAS,MAAM,CAAA,EAEnB;AAAA;AAAA,SAAA;AAAA,QArBK,MAAA,CAAO;AAAA;AAsBd;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,cAAcG,4CAAA,CAA2B;AAAA,IAC7C,gBAAA,EAAkB,YAAY,OAAA,IAAW,EAAA;AAAA,IACzC,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,uBAAA,EAAyB,YAAY,cAAA,IAAkB;AAAA,GACxD,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,EAAC,UAAA,EAAY,aAAY,CAAA;AAExE,EAAA,MAAM,uBACJN,eAAA,CAAAK,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,SAAA,mBACCN,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,uBAAA,EAAuB,kBAAA;AAAA,QACvB,mBAAA,EAAkB,MAAA;AAAA,QAClB,eAAA,EAAe,SAAA;AAAA,QACf,YAAA,EAAY,UAAU,KAAK,CAAA,CAAA;AAAA,QAC3B,WAAW,WAAA,CAAY,MAAA;AAAA,QACvB,UAAU,CAAA,KAAA,KAAS;AACjB,UAAA,QAAA,CAAS,KAAA,CAAM,OAAO,KAAK,CAAA;AAC3B,UAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,QAC1B,CAAA;AAAA,QACA,SAAA,EAAW,wBAAA;AAAA,QACX,WAAA,EAAa,iBAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO;AAAA;AAAA,KACT,GACE,IAAA;AAAA,oBACJC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,GAAG,KAAK,CAAA,QAAA,CAAA;AAAA,QACpB,sBAAA,EAAqB,MAAA;AAAA,QACrB,WAAW,WAAA,CAAY,IAAA;AAAA,QACvB,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAK,SAAA;AAAA,QACJ,QAAA,EAAA;AAAA,UAAA,YAAA;AAAA;AAAA,4BAECA,eAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,eAAA,EAAe,WAAA;AAAA,gBACf,WAAW,gBAAA,CAAiB,MAAA;AAAA,gBAC5B,OAAA,EAAS,SAAA;AAAA,gBACT,IAAA,EAAK,QAAA;AAAA,gBACL,QAAA,EAAU,EAAA;AAAA,gBACV,QAAA,EAAA;AAAA,kCAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAW,iBAAiB,QAAA,EAClD,QAAA,EAAA,WAAA,mBAAcA,cAAA,CAACI,sBAAA,EAAA,EAAK,IAAA,EAAMC,iBAAA,EAAO,IAAA,EAAK,IAAA,EAAK,IAAK,IAAA,EACnD,CAAA;AAAA,kCACAL,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,gBAAA,CAAiB,eAC/B,QAAA,EAAA,cAAA,EACH;AAAA;AAAA;AAAA;AACF,cACE,IAAA;AAAA,UACH;AAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,OAAA;AAAA;AAAA,oBAEJC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWO,oBAAA;AAAA,UACTC,6BAAA,CAAY;AAAA,YACV,IAAA;AAAA,YACA,QAAQ,MAAA,EAAQ,IAAA;AAAA,YAChB;AAAA,WACD,CAAA;AAAA,UACD,cAAA,CAAe;AAAA,SACjB;AAAA,QACA,SAAS,MAAM;AACb,UAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,YAAA,SAAA,CAAU,CAAA,aAAA,KAAiB,CAAC,aAAa,CAAA;AAAA,UAC3C;AAAA,QACF,CAAA;AAAA,QACA,GAAA,EAAK,UAAA;AAAA,QACJ,QAAA,EAAA;AAAA,UAAA,SAAA,IAAa,IAAA,mBACZT,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAY,QAAA,EAC3B,QAAA,kBAAAA,cAAA,CAACI,sBAAA,EAAA,EAAK,KAAA,EAAM,aAAY,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK,IAAA,EAAK,GACrD,CAAA,GACE,IAAA;AAAA,0BACJJ,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAuB,kBAAA;AAAA,cACvB,aAAW,SAAA,IAAa,MAAA;AAAA,cACxB,eAAA,EAAe,SAAA;AAAA,cACf,kBAAA,EAAkB,WAAA;AAAA,cAClB,eAAA,EAAe,MAAA;AAAA,cACf,eAAA,EAAc,SAAA;AAAA,cACd,cAAA,EAAc,MAAA,EAAQ,IAAA,KAAS,OAAA,IAAW,MAAA;AAAA,cAC1C,WAAW,cAAA,CAAe,OAAA;AAAA,cAC1B,aAAA,EAAa,UAAA;AAAA,cACb,QAAA,EAAU,qBAAA;AAAA,cACV,EAAA,EAAI,OAAA;AAAA,cACJ,SAAA,EAAW,wBAAA;AAAA,cACX,GAAA;AAAA,cACA,IAAA,EAAK,UAAA;AAAA,cACL,IAAA,EAAK,QAAA;AAAA,cACJ,QAAA,EAAA,kBAAA;AAAmB;AAAA,WACtB;AAAA,UACC,SAAA,mBAAYA,cAAA,CAACU,yBAAA,EAAA,EAAQ,IAAA,EAAK,MAAK,CAAA,GAAK,IAAA;AAAA,UACpC,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,CAAC,UAAA,mBAChCV,cAAA;AAAA,YAACW,wBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAMC,aAAA;AAAA,cACN,UAAA,EAAU,IAAA;AAAA,cACV,KAAA,EAAO,SAAS,KAAK,CAAA,CAAA;AAAA,cACrB,SAAS,CAAA,KAAA,KAAS;AAChB,gBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,gBAAA,QAAA,CAAS,EAAE,CAAA;AAAA,cACb,CAAA;AAAA,cACA,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAQ;AAAA;AAAA,WACV,GACE,IAAA;AAAA,0BACJZ,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,WAAA,CAAY,QAAA,EAC3B,QAAA,kBAAAA,cAAA,CAACI,sBAAA,EAAA,EAAK,IAAA,EAAMS,uBAAA,EAAa,IAAA,EAAK,IAAA,EAAK,CAAA,EACrC;AAAA;AAAA;AAAA;AACF,GAAA;AAGF,EAAA,MAAM,SAAA,GAAYC,8BAAA,CAAa,UAAA,EAAY,UAAU,CAAA;AAErD,EAAA,uBACEb,eAAA;AAAA,IAACc,uBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACC,GAAG,SAAA;AAAA,MACJ,KAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA,EACE,UAAU,IAAA,GAAO,MAAA,GAAY,EAAC,GAAG,MAAA,EAAQ,WAAW,eAAA,EAAe;AAAA,MAErE,KAAA;AAAA,MACC,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,wBACDf,cAAA;AAAA,UAACgB,yBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,UAAA;AAAA,YACX,OAAA,EAAS,IAAA;AAAA,YACT,YAAA,EAAc,SAAA;AAAA,YACd,cAAA,EAAgB,KAAA;AAAA,YAChB,SAAA,EAAW,KAAA;AAAA,YACX,MAAA;AAAA,YACA,YAAA,EAAc;AAAA;AAAA;AAChB;AAAA;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-UZGPFPIV.cjs","sourcesContent":["import {sva, type RecipeVariantProps} from 'styled-system/css';\n\nexport const multiSelectMenuRecipe = sva({\n slots: [\n 'menu',\n 'search',\n 'option',\n 'optionContent',\n 'checkbox',\n 'iconSlot',\n 'sectionHeading',\n 'divider',\n ],\n base: {\n menu: {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5',\n maxH: '80',\n overflowY: 'auto',\n p: '1',\n },\n search: {\n w: 'full',\n px: '2',\n py: '1',\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'border.emphasized',\n borderRadius: 'md',\n fontFamily: 'body',\n outline: 'none',\n _focus: {\n borderColor: 'primary',\n },\n },\n option: {\n display: 'flex',\n alignItems: 'center',\n gap: '2',\n w: 'full',\n px: '2',\n py: '2',\n borderWidth: 0,\n borderRadius: 'md',\n bg: 'transparent',\n color: 'fg',\n cursor: 'pointer',\n fontFamily: 'body',\n textAlign: 'start',\n _hover: {bg: 'bg.subtle'},\n _focusVisible: {\n outlineWidth: 'focus',\n outlineStyle: 'solid',\n outlineColor: 'primary',\n outlineOffset: 'focusOffsetTight',\n },\n '&[aria-disabled=\"true\"]': {\n opacity: 0.55,\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n },\n optionContent: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '2',\n minW: 0,\n flex: 1,\n },\n checkbox: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n w: '5',\n h: '5',\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'fg.muted',\n borderRadius: 'sm',\n bg: 'bg',\n color: 'fg.onPrimary',\n },\n iconSlot: {\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n color: 'fg.muted',\n },\n sectionHeading: {\n px: '2',\n py: '1',\n color: 'fg.muted',\n fontFamily: 'body',\n fontSize: 'sm',\n fontWeight: 'semibold',\n },\n divider: {\n h: '1px',\n bg: 'border',\n my: '1',\n },\n },\n variants: {\n isHighlighted: {\n true: {option: {bg: 'bg.subtle'}},\n false: {},\n },\n isSelected: {\n true: {checkbox: {bg: 'primary', borderColor: 'primary'}},\n false: {},\n },\n },\n defaultVariants: {\n isHighlighted: false,\n isSelected: false,\n },\n});\n\nexport type MultiSelectMenuVariants = RecipeVariantProps<\n typeof multiSelectMenuRecipe\n>;\n\nexport const multiSelectTriggerRecipe = sva({\n slots: ['wrapper', 'trigger', 'triggerText', 'badges'],\n base: {\n wrapper: {\n cursor: 'pointer',\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '2',\n flex: 1,\n minW: 0,\n p: 0,\n borderWidth: 0,\n bg: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n fontFamily: 'body',\n outline: 'none',\n textAlign: 'start',\n _disabled: {\n cursor: 'not-allowed',\n },\n },\n triggerText: {\n flex: 1,\n minW: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n badges: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '1',\n minW: 0,\n overflow: 'hidden',\n },\n },\n variants: {\n isDisabled: {\n true: {wrapper: {cursor: 'not-allowed'}},\n false: {},\n },\n isPlaceholder: {\n true: {triggerText: {color: 'fg.muted'}},\n false: {},\n },\n },\n defaultVariants: {\n isDisabled: false,\n isPlaceholder: false,\n },\n});\n\nexport type MultiSelectTriggerVariants = RecipeVariantProps<\n typeof multiSelectTriggerRecipe\n>;\n","import {Check, ChevronDown, X} from 'lucide-react';\nimport {\n useCallback,\n useMemo,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {Badge} from 'components/Badge';\nimport {Button} from 'components/Button';\nimport {\n Field,\n getNecessity,\n type FieldNecessity,\n type InputSize,\n type InputStatus,\n} from 'components/Field';\nimport {inputRecipe} from 'components/Field/inputStyles';\nimport {Icon, type IconComponent} from 'components/Icon';\nimport {\n multiSelectMenuRecipe,\n multiSelectTriggerRecipe,\n} from 'components/MultiSelect/MultiSelect.recipe';\nimport {Popover} from 'components/Popover';\nimport {Spinner} from 'components/Spinner';\nimport {Text} from 'components/Text';\nimport {cx} from 'internal/cx';\nimport {\n renderSelectListboxOptions,\n useSelectListbox,\n type SelectListboxOptionData,\n} from 'internal/useSelectListbox';\n\nexport interface MultiSelectOptionData extends SelectListboxOptionData {\n /**\n * Icon displayed before the label.\n */\n icon?: IconComponent;\n /**\n * Whether the option is disabled.\n */\n isDisabled?: boolean;\n /**\n * Option label. Defaults to `value`.\n */\n label?: string;\n /**\n * Option value.\n */\n value: string;\n}\n\nexport interface MultiSelectDivider {\n /**\n * Discriminator identifying a divider entry.\n */\n type: 'divider';\n}\n\nexport interface MultiSelectSection {\n /**\n * Options within this section.\n */\n options: ReadonlyArray<MultiSelectOptionData>;\n /**\n * Optional heading text for the section.\n */\n title?: string;\n /**\n * Discriminator identifying a section entry.\n */\n type: 'section';\n}\n\nexport type MultiSelectOption =\n | MultiSelectDivider\n | MultiSelectOptionData\n | MultiSelectSection\n | string;\n\nexport type MultiSelectTriggerDisplay = 'count' | 'labels' | 'badges';\n\nexport type MultiSelectProps = {\n /**\n * Custom render function for selectable options.\n */\n children?: (option: MultiSelectOptionData) => ReactNode;\n /**\n * Additional CSS class names applied to the trigger wrapper.\n */\n className?: string;\n /**\n * Test ID applied to the combobox button.\n */\n 'data-testid'?: string;\n /**\n * Supporting text displayed below the label.\n */\n description?: ReactNode;\n /**\n * Whether to show a clear button when values are selected.\n * @default false\n */\n hasClear?: boolean;\n /**\n * Whether to show search input in the dropdown.\n * @default false\n */\n hasSearch?: boolean;\n /**\n * Whether to show a select-all option.\n * @default false\n */\n hasSelectAll?: boolean;\n /**\n * Whether the selector starts open.\n * @default false\n */\n isDefaultOpen?: boolean;\n /**\n * Whether the selector is disabled.\n * @default false\n */\n isDisabled?: boolean;\n /**\n * Whether to visually hide the label.\n * @default false\n */\n isLabelHidden?: boolean;\n /**\n * Whether the selector is loading.\n * @default false\n */\n isLoading?: boolean;\n /**\n * Field label.\n */\n label: string;\n /**\n * Icon shown before the label.\n */\n labelIcon?: IconComponent;\n /**\n * Tooltip content shown next to the label.\n */\n labelTooltip?: ReactNode;\n /**\n * Maximum number of badges before showing an overflow count.\n * @default 3\n */\n maxBadges?: number;\n /**\n * Called when selection changes.\n */\n onChange: (value: string[]) => void;\n /**\n * Options to display.\n */\n options: ReadonlyArray<MultiSelectOption>;\n /**\n * Placeholder shown when no values are selected.\n * @default 'Select...'\n */\n placeholder?: string;\n /**\n * Ref forwarded to the combobox button.\n */\n ref?: Ref<HTMLButtonElement>;\n /**\n * Search input placeholder.\n * @default 'Search...'\n */\n searchPlaceholder?: string;\n /**\n * Select-all option label.\n * @default 'Select all'\n */\n selectAllLabel?: string;\n /**\n * Select size.\n * @default 'md'\n */\n size?: InputSize;\n /**\n * Start icon rendered in the trigger.\n */\n startIcon?: IconComponent;\n /**\n * Validation status displayed below the selector.\n */\n status?: InputStatus;\n /**\n * Inline styles applied to the trigger wrapper.\n */\n style?: CSSProperties;\n /**\n * How selected items are summarized in the trigger.\n * @default 'count'\n */\n triggerDisplay?: MultiSelectTriggerDisplay;\n /**\n * Selected option values.\n */\n value: string[];\n} & FieldNecessity;\n\n/**\n * Multi-select dropdown field with checkbox-style options.\n */\nexport function MultiSelect({\n children,\n className,\n 'data-testid': dataTestId,\n description,\n hasClear = false,\n hasSearch = false,\n hasSelectAll = false,\n isDefaultOpen = false,\n isDisabled = false,\n isLabelHidden = false,\n isLoading = false,\n isOptional,\n isRequired,\n label,\n labelIcon,\n labelTooltip,\n maxBadges = 3,\n onChange,\n options,\n placeholder = 'Select...',\n ref,\n searchPlaceholder = 'Search...',\n selectAllLabel = 'Select all',\n size = 'md',\n startIcon,\n status,\n style,\n triggerDisplay = 'count',\n value,\n}: MultiSelectProps): React.JSX.Element {\n const selectedValues = useMemo(() => new Set(value), [value]);\n\n const toggleValue = useCallback(\n (option: MultiSelectOptionData): boolean => {\n if (option.isDisabled === true) {\n return false;\n }\n\n const nextValues = new Set(value);\n if (nextValues.has(option.value)) {\n nextValues.delete(option.value);\n } else {\n nextValues.add(option.value);\n }\n onChange(Array.from(nextValues));\n return true;\n },\n [onChange, value],\n );\n\n const {\n activeDescendantId,\n describedBy,\n descriptionID,\n filteredValues,\n getOptionId,\n handleKeyboardNavigation,\n handleOptionClick,\n handleOptionMouseEnter,\n highlightedValue,\n inputId,\n isInteractionDisabled,\n isOpen,\n listboxId,\n query,\n selectableOptions,\n setHighlightedValue,\n setIsOpen,\n setQuery,\n statusMessageID,\n triggerRef,\n visibleSelectableOptions,\n } = useSelectListbox({\n description,\n isDefaultOpen,\n isDisabled,\n isHighlightClearedOnCommit: false,\n isLoading,\n onCommitOption: toggleValue,\n options,\n selectedValues,\n status,\n });\n\n const selectedOptions = useMemo(\n () => selectableOptions.filter(option => selectedValues.has(option.value)),\n [selectableOptions, selectedValues],\n );\n const enabledVisibleOptions = useMemo(\n () => visibleSelectableOptions.filter(option => option.isDisabled !== true),\n [visibleSelectableOptions],\n );\n const allSelected =\n enabledVisibleOptions.length > 0 &&\n enabledVisibleOptions.every(option => selectedValues.has(option.value));\n\n const toggleAll = useCallback(() => {\n if (allSelected) {\n onChange(\n value.filter(\n optionValue =>\n !enabledVisibleOptions.some(option => option.value === optionValue),\n ),\n );\n return;\n }\n\n const nextValues = new Set(value);\n for (const option of enabledVisibleOptions) {\n nextValues.add(option.value);\n }\n onChange(Array.from(nextValues));\n }, [allSelected, onChange, enabledVisibleOptions, value]);\n\n const menuClasses = multiSelectMenuRecipe();\n const triggerClasses = multiSelectTriggerRecipe({\n isDisabled: isInteractionDisabled,\n isPlaceholder: selectedOptions.length === 0,\n });\n\n const renderTriggerValue = (): ReactNode => {\n if (selectedOptions.length === 0) {\n return <span className={triggerClasses.triggerText}>{placeholder}</span>;\n }\n if (triggerDisplay === 'labels') {\n const labels = selectedOptions.map(\n option => option.label ?? option.value,\n );\n return (\n <span className={triggerClasses.triggerText}>{labels.join(', ')}</span>\n );\n }\n if (triggerDisplay === 'badges') {\n const visible = selectedOptions.slice(0, maxBadges);\n const overflow = selectedOptions.length - visible.length;\n return (\n <span className={triggerClasses.badges}>\n {visible.map(option => (\n <Badge key={option.value} label={option.label ?? option.value} />\n ))}\n {overflow > 0 ? (\n <Text as=\"span\" color=\"secondary\" type=\"supporting\">\n +{overflow}\n </Text>\n ) : null}\n </span>\n );\n }\n return (\n <span className={triggerClasses.triggerText}>\n {selectedOptions.length} selected\n </span>\n );\n };\n\n const renderOption = (option: MultiSelectOptionData): ReactNode => {\n if (!filteredValues.has(option.value)) {\n return null;\n }\n const isSelected = selectedValues.has(option.value);\n const isHighlighted = highlightedValue === option.value;\n const optionClasses = multiSelectMenuRecipe({isHighlighted, isSelected});\n return (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events -- keyboard navigation is handled by the combobox input, not individual options\n <div\n aria-disabled={option.isDisabled ?? undefined}\n aria-selected={isSelected}\n className={optionClasses.option}\n data-value={option.value}\n id={getOptionId(option.value)}\n key={option.value}\n onClick={option.isDisabled ? undefined : handleOptionClick}\n onMouseEnter={handleOptionMouseEnter}\n role=\"option\"\n tabIndex={isHighlighted ? 0 : -1}>\n <span aria-hidden=\"true\" className={optionClasses.checkbox}>\n {isSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={optionClasses.optionContent}>\n {children == null ? (\n <>\n {option.icon != null ? (\n <span className={optionClasses.iconSlot}>\n <Icon color=\"secondary\" icon={option.icon} size=\"sm\" />\n </span>\n ) : null}\n {option.label}\n </>\n ) : (\n children(option)\n )}\n </span>\n </div>\n );\n };\n\n const optionNodes = renderSelectListboxOptions({\n dividerClassName: menuClasses.divider ?? '',\n inputId,\n options,\n renderOption,\n sectionHeadingClassName: menuClasses.sectionHeading ?? '',\n });\n\n const selectAllClasses = multiSelectMenuRecipe({isSelected: allSelected});\n\n const menu = (\n <>\n {hasSearch ? (\n <input\n aria-activedescendant={activeDescendantId}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-label={`Search ${label}`}\n className={menuClasses.search}\n onChange={event => {\n setQuery(event.target.value);\n setHighlightedValue(null);\n }}\n onKeyDown={handleKeyboardNavigation}\n placeholder={searchPlaceholder}\n type=\"search\"\n value={query}\n />\n ) : null}\n <div\n aria-label={`${label} options`}\n aria-multiselectable=\"true\"\n className={menuClasses.menu}\n id={listboxId}\n role=\"listbox\">\n {hasSelectAll ? (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events -- keyboard navigation is handled by the combobox input, not individual options\n <div\n aria-selected={allSelected}\n className={selectAllClasses.option}\n onClick={toggleAll}\n role=\"option\"\n tabIndex={-1}>\n <span aria-hidden=\"true\" className={selectAllClasses.checkbox}>\n {allSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={selectAllClasses.optionContent}>\n {selectAllLabel}\n </span>\n </div>\n ) : null}\n {optionNodes}\n </div>\n </>\n );\n\n const trigger = (\n // eslint-disable-next-line jsx-a11y-x/click-events-have-key-events, jsx-a11y-x/no-static-element-interactions -- mouse clicks anywhere on the visual input delegate to the inner combobox button; keyboard handling stays on that button.\n <div\n className={cx(\n inputRecipe({\n size,\n status: status?.type,\n isDisabled,\n }),\n triggerClasses.wrapper,\n )}\n onClick={() => {\n if (!isInteractionDisabled) {\n setIsOpen(currentIsOpen => !currentIsOpen);\n }\n }}\n ref={triggerRef}>\n {startIcon != null ? (\n <span className={menuClasses.iconSlot}>\n <Icon color=\"secondary\" icon={startIcon} size=\"sm\" />\n </span>\n ) : null}\n <button\n aria-activedescendant={activeDescendantId}\n aria-busy={isLoading || undefined}\n aria-controls={listboxId}\n aria-describedby={describedBy}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={status?.type === 'error' || undefined}\n className={triggerClasses.trigger}\n data-testid={dataTestId}\n disabled={isInteractionDisabled}\n id={inputId}\n onKeyDown={handleKeyboardNavigation}\n ref={ref}\n role=\"combobox\"\n type=\"button\">\n {renderTriggerValue()}\n </button>\n {isLoading ? <Spinner size=\"sm\" /> : null}\n {hasClear && value.length > 0 && !isDisabled ? (\n <Button\n icon={X}\n isIconOnly\n label={`Clear ${label}`}\n onClick={event => {\n event.stopPropagation();\n onChange([]);\n }}\n size=\"sm\"\n variant=\"ghost\"\n />\n ) : null}\n <span className={menuClasses.iconSlot}>\n <Icon icon={ChevronDown} size=\"sm\" />\n </span>\n </div>\n );\n\n const necessity = getNecessity(isOptional, isRequired);\n\n return (\n <Field\n className={className}\n description={description}\n descriptionID={descriptionID}\n inputId={inputId}\n isDisabled={isDisabled}\n isLabelHidden={isLabelHidden}\n {...necessity}\n label={label}\n labelIcon={labelIcon}\n labelTooltip={labelTooltip}\n status={\n status == null ? undefined : {...status, messageID: statusMessageID}\n }\n style={style}>\n {trigger}\n <Popover\n anchorRef={triggerRef}\n content={menu}\n hasAutoFocus={hasSearch}\n hasCloseButton={false}\n isEnabled={false}\n isOpen={isOpen}\n onOpenChange={setIsOpen}\n />\n </Field>\n );\n}\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
|
|
@@ -6,6 +6,7 @@ var chunkSPDVNY2Z_cjs = require('./chunk-SPDVNY2Z.cjs');
|
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
|
|
9
|
+
var useIsomorphicLayoutEffect = typeof document !== "undefined" ? react.useLayoutEffect : react.useEffect;
|
|
9
10
|
var useLatest = (value) => {
|
|
10
11
|
const ref = react.useRef(value);
|
|
11
12
|
ref.current = value;
|
|
@@ -48,6 +49,24 @@ function getPositionArea(placement = "above", alignment = "center") {
|
|
|
48
49
|
}
|
|
49
50
|
return `${cssPlacement} center`;
|
|
50
51
|
}
|
|
52
|
+
function getOffsetStyle(placement, offsetX, offsetY) {
|
|
53
|
+
const style = {};
|
|
54
|
+
if (offsetY != null) {
|
|
55
|
+
if (placement === "above") {
|
|
56
|
+
style.marginBlockEnd = `${offsetY}px`;
|
|
57
|
+
} else {
|
|
58
|
+
style.marginBlockStart = `${offsetY}px`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (offsetX != null) {
|
|
62
|
+
if (placement === "start") {
|
|
63
|
+
style.marginInlineEnd = `${offsetX}px`;
|
|
64
|
+
} else {
|
|
65
|
+
style.marginInlineStart = `${offsetX}px`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return style;
|
|
69
|
+
}
|
|
51
70
|
function useLayer({
|
|
52
71
|
onShow,
|
|
53
72
|
onHide,
|
|
@@ -118,19 +137,21 @@ function useLayer({
|
|
|
118
137
|
(children, props) => {
|
|
119
138
|
const placement = props?.placement ?? "above";
|
|
120
139
|
const alignment = props?.alignment ?? "center";
|
|
140
|
+
const { offsetX, offsetY } = props ?? {};
|
|
121
141
|
const anchorStyle = {
|
|
122
142
|
border: "none",
|
|
123
143
|
positionAnchor: anchorId,
|
|
124
144
|
positionArea: getPositionArea(placement, alignment),
|
|
125
145
|
positionTryFallbacks: "flip-block, flip-inline, flip-block flip-inline"
|
|
126
146
|
};
|
|
147
|
+
const offsetStyle = getOffsetStyle(placement, offsetX, offsetY);
|
|
127
148
|
const layerProps = {
|
|
128
149
|
ref: popoverRefCallback,
|
|
129
150
|
id,
|
|
130
151
|
role: props?.role,
|
|
131
152
|
popover: isDismissable ? "auto" : "manual",
|
|
132
153
|
className: chunkSPDVNY2Z_cjs.cx(styles.layer, props?.className),
|
|
133
|
-
style: { ...anchorStyle, ...props?.style }
|
|
154
|
+
style: { ...anchorStyle, ...offsetStyle, ...props?.style }
|
|
134
155
|
};
|
|
135
156
|
return react.createElement("div", layerProps, children);
|
|
136
157
|
},
|
|
@@ -324,7 +345,6 @@ function useHoverLayer({
|
|
|
324
345
|
[clearTimeouts, interactionRef, layer, ref, scheduleHide]
|
|
325
346
|
);
|
|
326
347
|
}
|
|
327
|
-
var useIsomorphicLayoutEffect = typeof document !== "undefined" ? react.useLayoutEffect : react.useEffect;
|
|
328
348
|
var styles2 = {
|
|
329
349
|
wrapperContents: chunkRU6JG3FS_cjs.css({
|
|
330
350
|
display: "contents"
|
|
@@ -351,17 +371,17 @@ function HoverLayerTrigger({
|
|
|
351
371
|
className,
|
|
352
372
|
"data-testid": dataTestId,
|
|
353
373
|
describedBy,
|
|
354
|
-
|
|
374
|
+
hoverIndication = "auto",
|
|
375
|
+
isNonTextWrapperPropsForwarded = true,
|
|
355
376
|
layer,
|
|
356
377
|
nonTextWrapperElement = "span",
|
|
357
|
-
shouldForwardNonTextWrapperProps = true,
|
|
358
378
|
style,
|
|
359
379
|
triggerRef,
|
|
360
380
|
wrapperRef
|
|
361
381
|
}) {
|
|
362
382
|
const ownWrapperRef = react.useRef(null);
|
|
363
383
|
const textOnly = isTextOnly(children);
|
|
364
|
-
const showHoverIndication =
|
|
384
|
+
const showHoverIndication = hoverIndication === "always" || hoverIndication === "auto" && textOnly;
|
|
365
385
|
useIsomorphicLayoutEffect(() => {
|
|
366
386
|
if (textOnly) {
|
|
367
387
|
return;
|
|
@@ -406,13 +426,13 @@ function HoverLayerTrigger({
|
|
|
406
426
|
layer
|
|
407
427
|
] });
|
|
408
428
|
}
|
|
409
|
-
const nonTextWrapperRef =
|
|
429
|
+
const nonTextWrapperRef = isNonTextWrapperPropsForwarded ? chunk6SHL7FYO_cjs.mergeRefs(ownWrapperRef, wrapperRef) : ownWrapperRef;
|
|
410
430
|
const nonTextWrapperClassName = chunkSPDVNY2Z_cjs.cx(
|
|
411
431
|
styles2.wrapperContents,
|
|
412
|
-
|
|
432
|
+
isNonTextWrapperPropsForwarded ? className : void 0
|
|
413
433
|
);
|
|
414
|
-
const nonTextWrapperTestId =
|
|
415
|
-
const nonTextWrapperStyle =
|
|
434
|
+
const nonTextWrapperTestId = isNonTextWrapperPropsForwarded ? dataTestId : void 0;
|
|
435
|
+
const nonTextWrapperStyle = isNonTextWrapperPropsForwarded ? style : void 0;
|
|
416
436
|
const wrappedChildren = nonTextWrapperElement === "div" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
417
437
|
"div",
|
|
418
438
|
{
|
|
@@ -443,5 +463,5 @@ exports.useHoverLayer = useHoverLayer;
|
|
|
443
463
|
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
|
|
444
464
|
exports.useLatest_default = useLatest_default;
|
|
445
465
|
exports.useLayer = useLayer;
|
|
446
|
-
//# sourceMappingURL=chunk-
|
|
447
|
-
//# sourceMappingURL=chunk-
|
|
466
|
+
//# sourceMappingURL=chunk-VK7DXUGH.cjs.map
|
|
467
|
+
//# sourceMappingURL=chunk-VK7DXUGH.cjs.map
|