@tribepad/themis 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/LICENSE +21 -0
- package/README.md +114 -0
- package/dist/Carousel-NTZX5TOW.js +16 -0
- package/dist/Carousel-NTZX5TOW.js.map +1 -0
- package/dist/Carousel-YH3DOQJU.mjs +7 -0
- package/dist/Carousel-YH3DOQJU.mjs.map +1 -0
- package/dist/chunk-2HIUTHMU.mjs +234 -0
- package/dist/chunk-2HIUTHMU.mjs.map +1 -0
- package/dist/chunk-34GTFTDO.js +431 -0
- package/dist/chunk-34GTFTDO.js.map +1 -0
- package/dist/chunk-3H7ASYR7.js +250 -0
- package/dist/chunk-3H7ASYR7.js.map +1 -0
- package/dist/chunk-3IEN7JOP.js +316 -0
- package/dist/chunk-3IEN7JOP.js.map +1 -0
- package/dist/chunk-3JHN4GAL.js +326 -0
- package/dist/chunk-3JHN4GAL.js.map +1 -0
- package/dist/chunk-3MJPASQU.js +232 -0
- package/dist/chunk-3MJPASQU.js.map +1 -0
- package/dist/chunk-3XD2JUL3.js +572 -0
- package/dist/chunk-3XD2JUL3.js.map +1 -0
- package/dist/chunk-3YOY2VJ6.js +189 -0
- package/dist/chunk-3YOY2VJ6.js.map +1 -0
- package/dist/chunk-4DU5JSXB.js +408 -0
- package/dist/chunk-4DU5JSXB.js.map +1 -0
- package/dist/chunk-4E4E2GSS.js +352 -0
- package/dist/chunk-4E4E2GSS.js.map +1 -0
- package/dist/chunk-4NHAP4AN.mjs +3 -0
- package/dist/chunk-4NHAP4AN.mjs.map +1 -0
- package/dist/chunk-4S33J5NY.mjs +415 -0
- package/dist/chunk-4S33J5NY.mjs.map +1 -0
- package/dist/chunk-5SMGRT3G.mjs +354 -0
- package/dist/chunk-5SMGRT3G.mjs.map +1 -0
- package/dist/chunk-5SVLJN2C.mjs +22 -0
- package/dist/chunk-5SVLJN2C.mjs.map +1 -0
- package/dist/chunk-66WTU4EB.mjs +299 -0
- package/dist/chunk-66WTU4EB.mjs.map +1 -0
- package/dist/chunk-6S25NMOT.mjs +335 -0
- package/dist/chunk-6S25NMOT.mjs.map +1 -0
- package/dist/chunk-6SP7UB3D.js +4 -0
- package/dist/chunk-6SP7UB3D.js.map +1 -0
- package/dist/chunk-6TYWWQHM.mjs +565 -0
- package/dist/chunk-6TYWWQHM.mjs.map +1 -0
- package/dist/chunk-A3YUJA6W.mjs +384 -0
- package/dist/chunk-A3YUJA6W.mjs.map +1 -0
- package/dist/chunk-A6KEDVUR.js +61 -0
- package/dist/chunk-A6KEDVUR.js.map +1 -0
- package/dist/chunk-A77RUEWL.js +730 -0
- package/dist/chunk-A77RUEWL.js.map +1 -0
- package/dist/chunk-AA4IKMPE.mjs +3 -0
- package/dist/chunk-AA4IKMPE.mjs.map +1 -0
- package/dist/chunk-AKIA6GW6.mjs +163 -0
- package/dist/chunk-AKIA6GW6.mjs.map +1 -0
- package/dist/chunk-AL6P275L.mjs +435 -0
- package/dist/chunk-AL6P275L.mjs.map +1 -0
- package/dist/chunk-AZ3RJYTB.js +37 -0
- package/dist/chunk-AZ3RJYTB.js.map +1 -0
- package/dist/chunk-B5Q4UPL6.js +32 -0
- package/dist/chunk-B5Q4UPL6.js.map +1 -0
- package/dist/chunk-B6DHPMDP.mjs +335 -0
- package/dist/chunk-B6DHPMDP.mjs.map +1 -0
- package/dist/chunk-BDXKKMBZ.mjs +184 -0
- package/dist/chunk-BDXKKMBZ.mjs.map +1 -0
- package/dist/chunk-BL6E2DLZ.mjs +52 -0
- package/dist/chunk-BL6E2DLZ.mjs.map +1 -0
- package/dist/chunk-CGFDS4XS.mjs +121 -0
- package/dist/chunk-CGFDS4XS.mjs.map +1 -0
- package/dist/chunk-CJIW5TKI.js +139 -0
- package/dist/chunk-CJIW5TKI.js.map +1 -0
- package/dist/chunk-CKNISJOQ.js +314 -0
- package/dist/chunk-CKNISJOQ.js.map +1 -0
- package/dist/chunk-D6CBOECS.mjs +1757 -0
- package/dist/chunk-D6CBOECS.mjs.map +1 -0
- package/dist/chunk-DDWEVC2S.js +166 -0
- package/dist/chunk-DDWEVC2S.js.map +1 -0
- package/dist/chunk-DZ556D2F.mjs +176 -0
- package/dist/chunk-DZ556D2F.mjs.map +1 -0
- package/dist/chunk-E2KQFV3O.mjs +10 -0
- package/dist/chunk-E2KQFV3O.mjs.map +1 -0
- package/dist/chunk-EMMLADSC.js +126 -0
- package/dist/chunk-EMMLADSC.js.map +1 -0
- package/dist/chunk-EP4WOI5D.mjs +926 -0
- package/dist/chunk-EP4WOI5D.mjs.map +1 -0
- package/dist/chunk-FJRXLJC2.mjs +160 -0
- package/dist/chunk-FJRXLJC2.mjs.map +1 -0
- package/dist/chunk-FKQI434R.js +345 -0
- package/dist/chunk-FKQI434R.js.map +1 -0
- package/dist/chunk-FPKEAJRZ.mjs +100 -0
- package/dist/chunk-FPKEAJRZ.mjs.map +1 -0
- package/dist/chunk-FWQYB22U.js +183 -0
- package/dist/chunk-FWQYB22U.js.map +1 -0
- package/dist/chunk-GD5GHTMA.js +189 -0
- package/dist/chunk-GD5GHTMA.js.map +1 -0
- package/dist/chunk-GE5XTSDZ.js +447 -0
- package/dist/chunk-GE5XTSDZ.js.map +1 -0
- package/dist/chunk-GVE47ZAX.mjs +32 -0
- package/dist/chunk-GVE47ZAX.mjs.map +1 -0
- package/dist/chunk-HK46BT5U.mjs +18 -0
- package/dist/chunk-HK46BT5U.mjs.map +1 -0
- package/dist/chunk-HQVRMR6N.js +365 -0
- package/dist/chunk-HQVRMR6N.js.map +1 -0
- package/dist/chunk-HSGBJPJO.mjs +398 -0
- package/dist/chunk-HSGBJPJO.mjs.map +1 -0
- package/dist/chunk-I3AUTOMZ.mjs +125 -0
- package/dist/chunk-I3AUTOMZ.mjs.map +1 -0
- package/dist/chunk-IEI5LD5C.mjs +1161 -0
- package/dist/chunk-IEI5LD5C.mjs.map +1 -0
- package/dist/chunk-IIPTC2X7.mjs +118 -0
- package/dist/chunk-IIPTC2X7.mjs.map +1 -0
- package/dist/chunk-J7TLHF2Q.js +4 -0
- package/dist/chunk-J7TLHF2Q.js.map +1 -0
- package/dist/chunk-JJOWXFXQ.mjs +765 -0
- package/dist/chunk-JJOWXFXQ.mjs.map +1 -0
- package/dist/chunk-JPTSS2OA.mjs +3 -0
- package/dist/chunk-JPTSS2OA.mjs.map +1 -0
- package/dist/chunk-KFXXRLTP.js +396 -0
- package/dist/chunk-KFXXRLTP.js.map +1 -0
- package/dist/chunk-KPRRBSG6.mjs +272 -0
- package/dist/chunk-KPRRBSG6.mjs.map +1 -0
- package/dist/chunk-NFSBGRDB.mjs +57 -0
- package/dist/chunk-NFSBGRDB.mjs.map +1 -0
- package/dist/chunk-NGJVCFTM.js +219 -0
- package/dist/chunk-NGJVCFTM.js.map +1 -0
- package/dist/chunk-NSQ6MZJ6.mjs +728 -0
- package/dist/chunk-NSQ6MZJ6.mjs.map +1 -0
- package/dist/chunk-NYQYHT76.mjs +296 -0
- package/dist/chunk-NYQYHT76.mjs.map +1 -0
- package/dist/chunk-OLJJGI5B.js +1193 -0
- package/dist/chunk-OLJJGI5B.js.map +1 -0
- package/dist/chunk-Q3572X2J.js +292 -0
- package/dist/chunk-Q3572X2J.js.map +1 -0
- package/dist/chunk-QH7N7D4I.mjs +210 -0
- package/dist/chunk-QH7N7D4I.mjs.map +1 -0
- package/dist/chunk-R7XUIV25.js +466 -0
- package/dist/chunk-R7XUIV25.js.map +1 -0
- package/dist/chunk-RFFO4KPM.js +135 -0
- package/dist/chunk-RFFO4KPM.js.map +1 -0
- package/dist/chunk-RFX7QKA7.mjs +180 -0
- package/dist/chunk-RFX7QKA7.mjs.map +1 -0
- package/dist/chunk-SN5LFAP3.js +940 -0
- package/dist/chunk-SN5LFAP3.js.map +1 -0
- package/dist/chunk-T4COXKQ3.js +24 -0
- package/dist/chunk-T4COXKQ3.js.map +1 -0
- package/dist/chunk-TS54QM27.js +125 -0
- package/dist/chunk-TS54QM27.js.map +1 -0
- package/dist/chunk-UE2S4PCX.mjs +220 -0
- package/dist/chunk-UE2S4PCX.mjs.map +1 -0
- package/dist/chunk-UTW3QX2A.mjs +282 -0
- package/dist/chunk-UTW3QX2A.mjs.map +1 -0
- package/dist/chunk-V74LGMAE.js +1767 -0
- package/dist/chunk-V74LGMAE.js.map +1 -0
- package/dist/chunk-VIREG536.js +12 -0
- package/dist/chunk-VIREG536.js.map +1 -0
- package/dist/chunk-VY7M7346.js +4 -0
- package/dist/chunk-VY7M7346.js.map +1 -0
- package/dist/chunk-W3TJOO7H.mjs +319 -0
- package/dist/chunk-W3TJOO7H.mjs.map +1 -0
- package/dist/chunk-WIUOB36M.js +54 -0
- package/dist/chunk-WIUOB36M.js.map +1 -0
- package/dist/chunk-WJGLM4CY.js +291 -0
- package/dist/chunk-WJGLM4CY.js.map +1 -0
- package/dist/chunk-WNURH5OO.mjs +453 -0
- package/dist/chunk-WNURH5OO.mjs.map +1 -0
- package/dist/chunk-X25TNRSD.mjs +364 -0
- package/dist/chunk-X25TNRSD.mjs.map +1 -0
- package/dist/chunk-Y3GT7ETK.js +108 -0
- package/dist/chunk-Y3GT7ETK.js.map +1 -0
- package/dist/chunk-Z4FRNOF6.mjs +115 -0
- package/dist/chunk-Z4FRNOF6.mjs.map +1 -0
- package/dist/chunk-ZMYLD3BN.js +166 -0
- package/dist/chunk-ZMYLD3BN.js.map +1 -0
- package/dist/chunk-ZP2KV6EX.js +815 -0
- package/dist/chunk-ZP2KV6EX.js.map +1 -0
- package/dist/chunk-ZVKXFELU.js +366 -0
- package/dist/chunk-ZVKXFELU.js.map +1 -0
- package/dist/elements/Accordion/Accordion.d.ts +139 -0
- package/dist/elements/Accordion/Accordion.d.ts.map +1 -0
- package/dist/elements/Accordion/Accordion.types.d.ts +143 -0
- package/dist/elements/Accordion/Accordion.types.d.ts.map +1 -0
- package/dist/elements/Accordion/index.d.ts +13 -0
- package/dist/elements/Accordion/index.d.ts.map +1 -0
- package/dist/elements/Accordion/index.js +78 -0
- package/dist/elements/Accordion/index.js.map +1 -0
- package/dist/elements/Accordion/index.mjs +5 -0
- package/dist/elements/Accordion/index.mjs.map +1 -0
- package/dist/elements/Avatar/Avatar.d.ts +51 -0
- package/dist/elements/Avatar/Avatar.d.ts.map +1 -0
- package/dist/elements/Avatar/Avatar.types.d.ts +145 -0
- package/dist/elements/Avatar/Avatar.types.d.ts.map +1 -0
- package/dist/elements/Avatar/AvatarGroup.d.ts +32 -0
- package/dist/elements/Avatar/AvatarGroup.d.ts.map +1 -0
- package/dist/elements/Avatar/index.d.ts +11 -0
- package/dist/elements/Avatar/index.d.ts.map +1 -0
- package/dist/elements/Avatar/index.js +54 -0
- package/dist/elements/Avatar/index.js.map +1 -0
- package/dist/elements/Avatar/index.mjs +5 -0
- package/dist/elements/Avatar/index.mjs.map +1 -0
- package/dist/elements/Badge/Badge.d.ts +39 -0
- package/dist/elements/Badge/Badge.d.ts.map +1 -0
- package/dist/elements/Badge/Badge.types.d.ts +76 -0
- package/dist/elements/Badge/Badge.types.d.ts.map +1 -0
- package/dist/elements/Badge/index.d.ts +18 -0
- package/dist/elements/Badge/index.d.ts.map +1 -0
- package/dist/elements/Badge/index.js +43 -0
- package/dist/elements/Badge/index.js.map +1 -0
- package/dist/elements/Badge/index.mjs +6 -0
- package/dist/elements/Badge/index.mjs.map +1 -0
- package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts +91 -0
- package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
- package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts +114 -0
- package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -0
- package/dist/elements/Breadcrumbs/index.d.ts +14 -0
- package/dist/elements/Breadcrumbs/index.d.ts.map +1 -0
- package/dist/elements/Breadcrumbs/index.js +54 -0
- package/dist/elements/Breadcrumbs/index.js.map +1 -0
- package/dist/elements/Breadcrumbs/index.mjs +9 -0
- package/dist/elements/Breadcrumbs/index.mjs.map +1 -0
- package/dist/elements/Button/Button.d.ts +92 -0
- package/dist/elements/Button/Button.d.ts.map +1 -0
- package/dist/elements/Button/Button.types.d.ts +54 -0
- package/dist/elements/Button/Button.types.d.ts.map +1 -0
- package/dist/elements/Button/index.d.ts +18 -0
- package/dist/elements/Button/index.d.ts.map +1 -0
- package/dist/elements/Button/index.js +27 -0
- package/dist/elements/Button/index.js.map +1 -0
- package/dist/elements/Button/index.mjs +6 -0
- package/dist/elements/Button/index.mjs.map +1 -0
- package/dist/elements/ButtonGroup/ButtonGroup.d.ts +53 -0
- package/dist/elements/ButtonGroup/ButtonGroup.d.ts.map +1 -0
- package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts +98 -0
- package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts.map +1 -0
- package/dist/elements/ButtonGroup/ButtonGroup.utils.d.ts +60 -0
- package/dist/elements/ButtonGroup/ButtonGroup.utils.d.ts.map +1 -0
- package/dist/elements/ButtonGroup/ButtonGroup.variants.d.ts +39 -0
- package/dist/elements/ButtonGroup/ButtonGroup.variants.d.ts.map +1 -0
- package/dist/elements/ButtonGroup/ButtonGroupContext.d.ts +42 -0
- package/dist/elements/ButtonGroup/ButtonGroupContext.d.ts.map +1 -0
- package/dist/elements/ButtonGroup/index.d.ts +35 -0
- package/dist/elements/ButtonGroup/index.d.ts.map +1 -0
- package/dist/elements/ButtonGroup/index.js +66 -0
- package/dist/elements/ButtonGroup/index.js.map +1 -0
- package/dist/elements/ButtonGroup/index.mjs +5 -0
- package/dist/elements/ButtonGroup/index.mjs.map +1 -0
- package/dist/elements/Card/Card.d.ts +104 -0
- package/dist/elements/Card/Card.d.ts.map +1 -0
- package/dist/elements/Card/Card.types.d.ts +227 -0
- package/dist/elements/Card/Card.types.d.ts.map +1 -0
- package/dist/elements/Card/index.d.ts +38 -0
- package/dist/elements/Card/index.d.ts.map +1 -0
- package/dist/elements/Card/index.js +85 -0
- package/dist/elements/Card/index.js.map +1 -0
- package/dist/elements/Card/index.mjs +8 -0
- package/dist/elements/Card/index.mjs.map +1 -0
- package/dist/elements/Carousel/Carousel.d.ts +13 -0
- package/dist/elements/Carousel/Carousel.d.ts.map +1 -0
- package/dist/elements/Carousel/Carousel.types.d.ts +65 -0
- package/dist/elements/Carousel/Carousel.types.d.ts.map +1 -0
- package/dist/elements/Carousel/LazyCarousel.d.ts +46 -0
- package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -0
- package/dist/elements/Carousel/index.d.ts +5 -0
- package/dist/elements/Carousel/index.d.ts.map +1 -0
- package/dist/elements/Carousel/index.js +23 -0
- package/dist/elements/Carousel/index.js.map +1 -0
- package/dist/elements/Carousel/index.mjs +10 -0
- package/dist/elements/Carousel/index.mjs.map +1 -0
- package/dist/elements/Chart/Chart.d.ts +44 -0
- package/dist/elements/Chart/Chart.d.ts.map +1 -0
- package/dist/elements/Chart/Chart.types.d.ts +254 -0
- package/dist/elements/Chart/Chart.types.d.ts.map +1 -0
- package/dist/elements/Chart/ChartAnnouncer.d.ts +24 -0
- package/dist/elements/Chart/ChartAnnouncer.d.ts.map +1 -0
- package/dist/elements/Chart/ChartAxis.d.ts +42 -0
- package/dist/elements/Chart/ChartAxis.d.ts.map +1 -0
- package/dist/elements/Chart/ChartBarSeries.d.ts +54 -0
- package/dist/elements/Chart/ChartBarSeries.d.ts.map +1 -0
- package/dist/elements/Chart/ChartContext.d.ts +46 -0
- package/dist/elements/Chart/ChartContext.d.ts.map +1 -0
- package/dist/elements/Chart/ChartDataPoint.d.ts +56 -0
- package/dist/elements/Chart/ChartDataPoint.d.ts.map +1 -0
- package/dist/elements/Chart/ChartDataTable.d.ts +35 -0
- package/dist/elements/Chart/ChartDataTable.d.ts.map +1 -0
- package/dist/elements/Chart/ChartGrid.d.ts +32 -0
- package/dist/elements/Chart/ChartGrid.d.ts.map +1 -0
- package/dist/elements/Chart/ChartLegend.d.ts +32 -0
- package/dist/elements/Chart/ChartLegend.d.ts.map +1 -0
- package/dist/elements/Chart/ChartLineSeries.d.ts +52 -0
- package/dist/elements/Chart/ChartLineSeries.d.ts.map +1 -0
- package/dist/elements/Chart/ChartSVG.d.ts +62 -0
- package/dist/elements/Chart/ChartSVG.d.ts.map +1 -0
- package/dist/elements/Chart/ChartTooltip.d.ts +45 -0
- package/dist/elements/Chart/ChartTooltip.d.ts.map +1 -0
- package/dist/elements/Chart/chart.constants.d.ts +108 -0
- package/dist/elements/Chart/chart.constants.d.ts.map +1 -0
- package/dist/elements/Chart/chart.variants.d.ts +45 -0
- package/dist/elements/Chart/chart.variants.d.ts.map +1 -0
- package/dist/elements/Chart/index.d.ts +12 -0
- package/dist/elements/Chart/index.d.ts.map +1 -0
- package/dist/elements/Chart/index.js +47 -0
- package/dist/elements/Chart/index.js.map +1 -0
- package/dist/elements/Chart/index.mjs +6 -0
- package/dist/elements/Chart/index.mjs.map +1 -0
- package/dist/elements/Chart/useChartDimensions.d.ts +18 -0
- package/dist/elements/Chart/useChartDimensions.d.ts.map +1 -0
- package/dist/elements/Chart/useChartKeyboard.d.ts +42 -0
- package/dist/elements/Chart/useChartKeyboard.d.ts.map +1 -0
- package/dist/elements/Chart/useRovingTabIndex.d.ts +46 -0
- package/dist/elements/Chart/useRovingTabIndex.d.ts.map +1 -0
- package/dist/elements/Checkbox/Checkbox.d.ts +94 -0
- package/dist/elements/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/elements/Checkbox/Checkbox.types.d.ts +82 -0
- package/dist/elements/Checkbox/Checkbox.types.d.ts.map +1 -0
- package/dist/elements/Checkbox/index.d.ts +7 -0
- package/dist/elements/Checkbox/index.d.ts.map +1 -0
- package/dist/elements/Checkbox/index.js +47 -0
- package/dist/elements/Checkbox/index.js.map +1 -0
- package/dist/elements/Checkbox/index.mjs +6 -0
- package/dist/elements/Checkbox/index.mjs.map +1 -0
- package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts +130 -0
- package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
- package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts +142 -0
- package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts.map +1 -0
- package/dist/elements/CheckboxGroup/index.d.ts +10 -0
- package/dist/elements/CheckboxGroup/index.d.ts.map +1 -0
- package/dist/elements/CheckboxGroup/index.js +71 -0
- package/dist/elements/CheckboxGroup/index.js.map +1 -0
- package/dist/elements/CheckboxGroup/index.mjs +6 -0
- package/dist/elements/CheckboxGroup/index.mjs.map +1 -0
- package/dist/elements/DatePicker/Calendar.d.ts +16 -0
- package/dist/elements/DatePicker/Calendar.d.ts.map +1 -0
- package/dist/elements/DatePicker/DateField.d.ts +13 -0
- package/dist/elements/DatePicker/DateField.d.ts.map +1 -0
- package/dist/elements/DatePicker/DatePicker.d.ts +16 -0
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/elements/DatePicker/DatePicker.types.d.ts +390 -0
- package/dist/elements/DatePicker/DatePicker.types.d.ts.map +1 -0
- package/dist/elements/DatePicker/DatePicker.variants.d.ts +42 -0
- package/dist/elements/DatePicker/DatePicker.variants.d.ts.map +1 -0
- package/dist/elements/DatePicker/DateRangePicker.d.ts +13 -0
- package/dist/elements/DatePicker/DateRangePicker.d.ts.map +1 -0
- package/dist/elements/DatePicker/index.d.ts +14 -0
- package/dist/elements/DatePicker/index.d.ts.map +1 -0
- package/dist/elements/DatePicker/index.js +123 -0
- package/dist/elements/DatePicker/index.js.map +1 -0
- package/dist/elements/DatePicker/index.mjs +6 -0
- package/dist/elements/DatePicker/index.mjs.map +1 -0
- package/dist/elements/Dropdown/Dropdown.d.ts +197 -0
- package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/elements/Dropdown/Dropdown.types.d.ts +175 -0
- package/dist/elements/Dropdown/Dropdown.types.d.ts.map +1 -0
- package/dist/elements/Dropdown/index.d.ts +12 -0
- package/dist/elements/Dropdown/index.d.ts.map +1 -0
- package/dist/elements/Dropdown/index.js +41 -0
- package/dist/elements/Dropdown/index.js.map +1 -0
- package/dist/elements/Dropdown/index.mjs +4 -0
- package/dist/elements/Dropdown/index.mjs.map +1 -0
- package/dist/elements/FileField/FileField.d.ts +46 -0
- package/dist/elements/FileField/FileField.d.ts.map +1 -0
- package/dist/elements/FileField/FileField.types.d.ts +99 -0
- package/dist/elements/FileField/FileField.types.d.ts.map +1 -0
- package/dist/elements/FileField/FileField.variants.d.ts +49 -0
- package/dist/elements/FileField/FileField.variants.d.ts.map +1 -0
- package/dist/elements/FileField/FilePreview.d.ts +27 -0
- package/dist/elements/FileField/FilePreview.d.ts.map +1 -0
- package/dist/elements/FileField/FileProgress.d.ts +35 -0
- package/dist/elements/FileField/FileProgress.d.ts.map +1 -0
- package/dist/elements/FileField/FileProgress.variants.d.ts +55 -0
- package/dist/elements/FileField/FileProgress.variants.d.ts.map +1 -0
- package/dist/elements/FileField/index.d.ts +41 -0
- package/dist/elements/FileField/index.d.ts.map +1 -0
- package/dist/elements/FileField/index.js +138 -0
- package/dist/elements/FileField/index.js.map +1 -0
- package/dist/elements/FileField/index.mjs +9 -0
- package/dist/elements/FileField/index.mjs.map +1 -0
- package/dist/elements/FileField/useFilePreview.d.ts +46 -0
- package/dist/elements/FileField/useFilePreview.d.ts.map +1 -0
- package/dist/elements/FileField/utils.d.ts +134 -0
- package/dist/elements/FileField/utils.d.ts.map +1 -0
- package/dist/elements/FormLayout/FormLayout.d.ts +51 -0
- package/dist/elements/FormLayout/FormLayout.d.ts.map +1 -0
- package/dist/elements/FormLayout/FormLayout.types.d.ts +66 -0
- package/dist/elements/FormLayout/FormLayout.types.d.ts.map +1 -0
- package/dist/elements/FormLayout/index.d.ts +3 -0
- package/dist/elements/FormLayout/index.d.ts.map +1 -0
- package/dist/elements/FormLayout/index.js +17 -0
- package/dist/elements/FormLayout/index.js.map +1 -0
- package/dist/elements/FormLayout/index.mjs +4 -0
- package/dist/elements/FormLayout/index.mjs.map +1 -0
- package/dist/elements/Modal/Modal.d.ts +168 -0
- package/dist/elements/Modal/Modal.d.ts.map +1 -0
- package/dist/elements/Modal/Modal.types.d.ts +265 -0
- package/dist/elements/Modal/Modal.types.d.ts.map +1 -0
- package/dist/elements/Modal/index.d.ts +14 -0
- package/dist/elements/Modal/index.d.ts.map +1 -0
- package/dist/elements/Modal/index.js +52 -0
- package/dist/elements/Modal/index.js.map +1 -0
- package/dist/elements/Modal/index.mjs +3 -0
- package/dist/elements/Modal/index.mjs.map +1 -0
- package/dist/elements/NumberField/NumberField.d.ts +43 -0
- package/dist/elements/NumberField/NumberField.d.ts.map +1 -0
- package/dist/elements/NumberField/NumberField.types.d.ts +112 -0
- package/dist/elements/NumberField/NumberField.types.d.ts.map +1 -0
- package/dist/elements/NumberField/NumberField.variants.d.ts +82 -0
- package/dist/elements/NumberField/NumberField.variants.d.ts.map +1 -0
- package/dist/elements/NumberField/index.d.ts +25 -0
- package/dist/elements/NumberField/index.d.ts.map +1 -0
- package/dist/elements/NumberField/index.js +57 -0
- package/dist/elements/NumberField/index.js.map +1 -0
- package/dist/elements/NumberField/index.mjs +8 -0
- package/dist/elements/NumberField/index.mjs.map +1 -0
- package/dist/elements/OTPInput/OTPInput.d.ts +105 -0
- package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -0
- package/dist/elements/OTPInput/OTPInput.styles.d.ts +83 -0
- package/dist/elements/OTPInput/OTPInput.styles.d.ts.map +1 -0
- package/dist/elements/OTPInput/OTPInput.types.d.ts +189 -0
- package/dist/elements/OTPInput/OTPInput.types.d.ts.map +1 -0
- package/dist/elements/OTPInput/components/OTPDigit.d.ts +51 -0
- package/dist/elements/OTPInput/components/OTPDigit.d.ts.map +1 -0
- package/dist/elements/OTPInput/hooks/useOTPInput.d.ts +36 -0
- package/dist/elements/OTPInput/hooks/useOTPInput.d.ts.map +1 -0
- package/dist/elements/OTPInput/hooks/useOTPKeyboard.d.ts +59 -0
- package/dist/elements/OTPInput/hooks/useOTPKeyboard.d.ts.map +1 -0
- package/dist/elements/OTPInput/index.d.ts +27 -0
- package/dist/elements/OTPInput/index.d.ts.map +1 -0
- package/dist/elements/OTPInput/index.js +13 -0
- package/dist/elements/OTPInput/index.js.map +1 -0
- package/dist/elements/OTPInput/index.mjs +4 -0
- package/dist/elements/OTPInput/index.mjs.map +1 -0
- package/dist/elements/Panel/Panel.d.ts +111 -0
- package/dist/elements/Panel/Panel.d.ts.map +1 -0
- package/dist/elements/Panel/Panel.types.d.ts +243 -0
- package/dist/elements/Panel/Panel.types.d.ts.map +1 -0
- package/dist/elements/Panel/index.d.ts +4 -0
- package/dist/elements/Panel/index.d.ts.map +1 -0
- package/dist/elements/Panel/index.js +33 -0
- package/dist/elements/Panel/index.js.map +1 -0
- package/dist/elements/Panel/index.mjs +4 -0
- package/dist/elements/Panel/index.mjs.map +1 -0
- package/dist/elements/Progress/Progress.d.ts +44 -0
- package/dist/elements/Progress/Progress.d.ts.map +1 -0
- package/dist/elements/Progress/Progress.types.d.ts +64 -0
- package/dist/elements/Progress/Progress.types.d.ts.map +1 -0
- package/dist/elements/Progress/index.d.ts +11 -0
- package/dist/elements/Progress/index.d.ts.map +1 -0
- package/dist/elements/Progress/index.js +30 -0
- package/dist/elements/Progress/index.js.map +1 -0
- package/dist/elements/Progress/index.mjs +5 -0
- package/dist/elements/Progress/index.mjs.map +1 -0
- package/dist/elements/RadioGroup/RadioGroup.d.ts +110 -0
- package/dist/elements/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/elements/RadioGroup/RadioGroup.types.d.ts +143 -0
- package/dist/elements/RadioGroup/RadioGroup.types.d.ts.map +1 -0
- package/dist/elements/RadioGroup/index.d.ts +10 -0
- package/dist/elements/RadioGroup/index.d.ts.map +1 -0
- package/dist/elements/RadioGroup/index.js +47 -0
- package/dist/elements/RadioGroup/index.js.map +1 -0
- package/dist/elements/RadioGroup/index.mjs +6 -0
- package/dist/elements/RadioGroup/index.mjs.map +1 -0
- package/dist/elements/Resizable/Resizable.types.d.ts +188 -0
- package/dist/elements/Resizable/Resizable.types.d.ts.map +1 -0
- package/dist/elements/Resizable/components/ResizableHandle.d.ts +28 -0
- package/dist/elements/Resizable/components/ResizableHandle.d.ts.map +1 -0
- package/dist/elements/Resizable/components/ResizablePanel.d.ts +24 -0
- package/dist/elements/Resizable/components/ResizablePanel.d.ts.map +1 -0
- package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts +26 -0
- package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts.map +1 -0
- package/dist/elements/Resizable/components/ResizablePopover.d.ts +45 -0
- package/dist/elements/Resizable/components/ResizablePopover.d.ts.map +1 -0
- package/dist/elements/Resizable/hooks/useResizable.d.ts +50 -0
- package/dist/elements/Resizable/hooks/useResizable.d.ts.map +1 -0
- package/dist/elements/Resizable/hooks/useResizableContext.d.ts +36 -0
- package/dist/elements/Resizable/hooks/useResizableContext.d.ts.map +1 -0
- package/dist/elements/Resizable/index.d.ts +37 -0
- package/dist/elements/Resizable/index.d.ts.map +1 -0
- package/dist/elements/Resizable/index.js +65 -0
- package/dist/elements/Resizable/index.js.map +1 -0
- package/dist/elements/Resizable/index.mjs +8 -0
- package/dist/elements/Resizable/index.mjs.map +1 -0
- package/dist/elements/Select/Select.d.ts +184 -0
- package/dist/elements/Select/Select.d.ts.map +1 -0
- package/dist/elements/Select/Select.types.d.ts +166 -0
- package/dist/elements/Select/Select.types.d.ts.map +1 -0
- package/dist/elements/Select/index.d.ts +35 -0
- package/dist/elements/Select/index.d.ts.map +1 -0
- package/dist/elements/Select/index.js +33 -0
- package/dist/elements/Select/index.js.map +1 -0
- package/dist/elements/Select/index.mjs +4 -0
- package/dist/elements/Select/index.mjs.map +1 -0
- package/dist/elements/Skeleton/Skeleton.d.ts +31 -0
- package/dist/elements/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/elements/Skeleton/Skeleton.types.d.ts +36 -0
- package/dist/elements/Skeleton/Skeleton.types.d.ts.map +1 -0
- package/dist/elements/Skeleton/index.d.ts +11 -0
- package/dist/elements/Skeleton/index.d.ts.map +1 -0
- package/dist/elements/Skeleton/index.js +22 -0
- package/dist/elements/Skeleton/index.js.map +1 -0
- package/dist/elements/Skeleton/index.mjs +5 -0
- package/dist/elements/Skeleton/index.mjs.map +1 -0
- package/dist/elements/Switch/Switch.d.ts +39 -0
- package/dist/elements/Switch/Switch.d.ts.map +1 -0
- package/dist/elements/Switch/Switch.types.d.ts +53 -0
- package/dist/elements/Switch/Switch.types.d.ts.map +1 -0
- package/dist/elements/Switch/index.d.ts +8 -0
- package/dist/elements/Switch/index.d.ts.map +1 -0
- package/dist/elements/Switch/index.js +49 -0
- package/dist/elements/Switch/index.js.map +1 -0
- package/dist/elements/Switch/index.mjs +31 -0
- package/dist/elements/Switch/index.mjs.map +1 -0
- package/dist/elements/Table/Table.d.ts +123 -0
- package/dist/elements/Table/Table.d.ts.map +1 -0
- package/dist/elements/Table/Table.types.d.ts +356 -0
- package/dist/elements/Table/Table.types.d.ts.map +1 -0
- package/dist/elements/Table/index.d.ts +5 -0
- package/dist/elements/Table/index.d.ts.map +1 -0
- package/dist/elements/Table/index.js +76 -0
- package/dist/elements/Table/index.js.map +1 -0
- package/dist/elements/Table/index.mjs +7 -0
- package/dist/elements/Table/index.mjs.map +1 -0
- package/dist/elements/Tabs/Tabs.d.ts +129 -0
- package/dist/elements/Tabs/Tabs.d.ts.map +1 -0
- package/dist/elements/Tabs/Tabs.types.d.ts +179 -0
- package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -0
- package/dist/elements/Tabs/index.d.ts +12 -0
- package/dist/elements/Tabs/index.d.ts.map +1 -0
- package/dist/elements/Tabs/index.js +74 -0
- package/dist/elements/Tabs/index.js.map +1 -0
- package/dist/elements/Tabs/index.mjs +5 -0
- package/dist/elements/Tabs/index.mjs.map +1 -0
- package/dist/elements/TextField/TextField.d.ts +155 -0
- package/dist/elements/TextField/TextField.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.types.d.ts +258 -0
- package/dist/elements/TextField/TextField.types.d.ts.map +1 -0
- package/dist/elements/TextField/index.css +23 -0
- package/dist/elements/TextField/index.css.map +1 -0
- package/dist/elements/TextField/index.d.ts +13 -0
- package/dist/elements/TextField/index.d.ts.map +1 -0
- package/dist/elements/TextField/index.js +260 -0
- package/dist/elements/TextField/index.js.map +1 -0
- package/dist/elements/TextField/index.mjs +207 -0
- package/dist/elements/TextField/index.mjs.map +1 -0
- package/dist/elements/TimeField/TimeField.d.ts +34 -0
- package/dist/elements/TimeField/TimeField.d.ts.map +1 -0
- package/dist/elements/TimeField/TimeField.types.d.ts +151 -0
- package/dist/elements/TimeField/TimeField.types.d.ts.map +1 -0
- package/dist/elements/TimeField/index.d.ts +24 -0
- package/dist/elements/TimeField/index.d.ts.map +1 -0
- package/dist/elements/TimeField/index.js +45 -0
- package/dist/elements/TimeField/index.js.map +1 -0
- package/dist/elements/TimeField/index.mjs +4 -0
- package/dist/elements/TimeField/index.mjs.map +1 -0
- package/dist/elements/Toast/Toast.d.ts +105 -0
- package/dist/elements/Toast/Toast.d.ts.map +1 -0
- package/dist/elements/Toast/Toast.types.d.ts +209 -0
- package/dist/elements/Toast/Toast.types.d.ts.map +1 -0
- package/dist/elements/Toast/ToastProvider.d.ts +37 -0
- package/dist/elements/Toast/ToastProvider.d.ts.map +1 -0
- package/dist/elements/Toast/Toaster.d.ts +18 -0
- package/dist/elements/Toast/Toaster.d.ts.map +1 -0
- package/dist/elements/Toast/index.d.ts +27 -0
- package/dist/elements/Toast/index.d.ts.map +1 -0
- package/dist/elements/Toast/index.js +60 -0
- package/dist/elements/Toast/index.js.map +1 -0
- package/dist/elements/Toast/index.mjs +7 -0
- package/dist/elements/Toast/index.mjs.map +1 -0
- package/dist/elements/Tooltip/Tooltip.d.ts +108 -0
- package/dist/elements/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/elements/Tooltip/Tooltip.types.d.ts +135 -0
- package/dist/elements/Tooltip/Tooltip.types.d.ts.map +1 -0
- package/dist/elements/Tooltip/index.d.ts +11 -0
- package/dist/elements/Tooltip/index.d.ts.map +1 -0
- package/dist/elements/Tooltip/index.js +59 -0
- package/dist/elements/Tooltip/index.js.map +1 -0
- package/dist/elements/Tooltip/index.mjs +6 -0
- package/dist/elements/Tooltip/index.mjs.map +1 -0
- package/dist/elements/index.css +23 -0
- package/dist/elements/index.css.map +1 -0
- package/dist/elements/index.d.ts +42 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +839 -0
- package/dist/elements/index.js.map +1 -0
- package/dist/elements/index.mjs +42 -0
- package/dist/elements/index.mjs.map +1 -0
- package/dist/index.css +23 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +865 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +44 -0
- package/dist/index.mjs.map +1 -0
- package/dist/schemas/BaseComponentProps.d.ts +25 -0
- package/dist/schemas/BaseComponentProps.d.ts.map +1 -0
- package/dist/schemas/RegistryItem.d.ts +55 -0
- package/dist/schemas/RegistryItem.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +29 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/index.mjs +4 -0
- package/dist/schemas/index.mjs.map +1 -0
- package/dist/styles/defaults.css +174 -0
- package/dist/styles/index.d.ts +7 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +153 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/index.mjs +4 -0
- package/dist/styles/index.mjs.map +1 -0
- package/dist/styles/interaction-states.d.ts +96 -0
- package/dist/styles/interaction-states.d.ts.map +1 -0
- package/dist/styles/shared-variants.d.ts +120 -0
- package/dist/styles/shared-variants.d.ts.map +1 -0
- package/dist/styles/tokens.css +89 -0
- package/dist/utils/cn.d.ts +13 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +13 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +4 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +228 -0
- package/src/elements/Accordion/Accordion.stories.tsx +793 -0
- package/src/elements/Avatar/Avatar.stories.tsx +408 -0
- package/src/elements/Badge/Badge.stories.tsx +509 -0
- package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +623 -0
- package/src/elements/Button/Button.stories.tsx +670 -0
- package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +658 -0
- package/src/elements/Card/Card.stories.tsx +570 -0
- package/src/elements/Carousel/Carousel.stories.tsx +597 -0
- package/src/elements/Chart/Chart.stories.tsx +616 -0
- package/src/elements/Checkbox/Checkbox.stories.tsx +514 -0
- package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1514 -0
- package/src/elements/DatePicker/DatePicker.stories.tsx +341 -0
- package/src/elements/Dropdown/Dropdown.stories.tsx +397 -0
- package/src/elements/FileField/FileField.stories.tsx +1021 -0
- package/src/elements/FileField/FileProgress.stories.tsx +359 -0
- package/src/elements/FormLayout/FormLayout.stories.tsx +637 -0
- package/src/elements/Modal/Modal.stories.tsx +640 -0
- package/src/elements/NumberField/NumberField.stories.tsx +678 -0
- package/src/elements/OTPInput/OTPInput.stories.tsx +404 -0
- package/src/elements/Panel/Panel.stories.tsx +769 -0
- package/src/elements/Progress/Progress.stories.tsx +668 -0
- package/src/elements/RadioGroup/RadioGroup.stories.tsx +1153 -0
- package/src/elements/Resizable/Resizable.stories.tsx +374 -0
- package/src/elements/Select/Select.stories.tsx +362 -0
- package/src/elements/Skeleton/Skeleton.stories.tsx +284 -0
- package/src/elements/Switch/Switch.stories.tsx +441 -0
- package/src/elements/Table/Table.stories.tsx +790 -0
- package/src/elements/Tabs/Tabs.stories.tsx +661 -0
- package/src/elements/TextField/TextField.stories.tsx +1878 -0
- package/src/elements/TimeField/TimeField.stories.tsx +671 -0
- package/src/elements/Toast/Toast.stories.tsx +971 -0
- package/src/elements/Tooltip/Tooltip.stories.tsx +748 -0
- package/tailwind.config.js +10 -0
- package/tailwind.config.v3.js +10 -0
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkT4COXKQ3_js = require('./chunk-T4COXKQ3.js');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var reactAriaComponents = require('react-aria-components');
|
|
6
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
7
|
+
var lucideReact = require('lucide-react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
var zod = require('zod');
|
|
10
|
+
|
|
11
|
+
var selectTriggerVariants = classVarianceAuthority.cva(
|
|
12
|
+
[
|
|
13
|
+
// Base styles
|
|
14
|
+
"flex",
|
|
15
|
+
"w-full",
|
|
16
|
+
"items-center",
|
|
17
|
+
"justify-between",
|
|
18
|
+
"rounded-md",
|
|
19
|
+
"border",
|
|
20
|
+
"bg-[var(--content-background)]",
|
|
21
|
+
"text-[var(--content-foreground)]",
|
|
22
|
+
"transition-colors",
|
|
23
|
+
"duration-200",
|
|
24
|
+
"outline-none",
|
|
25
|
+
// Focus ring (WCAG 2.2 AAA - 7:1 contrast)
|
|
26
|
+
"focus-visible:ring-2",
|
|
27
|
+
"focus-visible:ring-[var(--ring)]",
|
|
28
|
+
"focus-visible:ring-offset-2",
|
|
29
|
+
// Hover state
|
|
30
|
+
"hover:bg-[var(--accent)]/10",
|
|
31
|
+
// Disabled state
|
|
32
|
+
"disabled:cursor-not-allowed",
|
|
33
|
+
"disabled:opacity-50",
|
|
34
|
+
// Loading state
|
|
35
|
+
"data-[loading=true]:cursor-wait",
|
|
36
|
+
// Truncate text
|
|
37
|
+
"truncate"
|
|
38
|
+
],
|
|
39
|
+
{
|
|
40
|
+
variants: {
|
|
41
|
+
size: {
|
|
42
|
+
// All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance
|
|
43
|
+
// Visual height varies but touch area remains accessible
|
|
44
|
+
sm: "h-9 px-3 text-sm min-h-[44px]",
|
|
45
|
+
default: "h-11 px-4 text-base min-h-[44px]",
|
|
46
|
+
lg: "h-14 px-5 text-lg min-h-[44px]"
|
|
47
|
+
},
|
|
48
|
+
isInvalid: {
|
|
49
|
+
true: "border-[var(--destructive)]",
|
|
50
|
+
false: "border-[var(--input)] hover:border-[var(--input)]/80"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
defaultVariants: {
|
|
54
|
+
size: "default",
|
|
55
|
+
isInvalid: false
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
var selectItemVariants = classVarianceAuthority.cva(
|
|
60
|
+
[
|
|
61
|
+
// Base styles
|
|
62
|
+
"relative",
|
|
63
|
+
"flex",
|
|
64
|
+
"w-full",
|
|
65
|
+
"cursor-pointer",
|
|
66
|
+
"select-none",
|
|
67
|
+
"items-center",
|
|
68
|
+
"rounded-sm",
|
|
69
|
+
"outline-none",
|
|
70
|
+
"transition-colors",
|
|
71
|
+
// Padding for checkmark icon (left side)
|
|
72
|
+
"pl-8",
|
|
73
|
+
"pr-2",
|
|
74
|
+
// Hover state
|
|
75
|
+
"hover:bg-[var(--accent)]",
|
|
76
|
+
"hover:text-[var(--accent-foreground)]",
|
|
77
|
+
// Focus state
|
|
78
|
+
"focus:bg-[var(--accent)]",
|
|
79
|
+
"focus:text-[var(--accent-foreground)]",
|
|
80
|
+
// Selected state
|
|
81
|
+
"data-[selected=true]:bg-[var(--accent)]",
|
|
82
|
+
"data-[selected=true]:text-[var(--accent-foreground)]",
|
|
83
|
+
// Disabled state
|
|
84
|
+
"data-[disabled=true]:pointer-events-none",
|
|
85
|
+
"data-[disabled=true]:opacity-50",
|
|
86
|
+
"data-[disabled=true]:text-[var(--menu-muted)]"
|
|
87
|
+
],
|
|
88
|
+
{
|
|
89
|
+
variants: {
|
|
90
|
+
size: {
|
|
91
|
+
// All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance
|
|
92
|
+
sm: "h-9 py-1.5 text-sm min-h-[44px]",
|
|
93
|
+
default: "h-11 py-2 text-base min-h-[44px]",
|
|
94
|
+
lg: "h-14 py-3 text-lg min-h-[44px]"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
defaultVariants: {
|
|
98
|
+
size: "default"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
var selectPopoverVariants = classVarianceAuthority.cva(
|
|
103
|
+
[
|
|
104
|
+
// Base styles - use menu tokens to match Dropdown styling
|
|
105
|
+
"z-50",
|
|
106
|
+
"w-[--trigger-width]",
|
|
107
|
+
"rounded-md",
|
|
108
|
+
"border",
|
|
109
|
+
"border-[var(--menu-border)]",
|
|
110
|
+
"bg-[var(--menu-background)]",
|
|
111
|
+
"text-[var(--menu-foreground)]",
|
|
112
|
+
"shadow-md",
|
|
113
|
+
"outline-none",
|
|
114
|
+
"overflow-auto",
|
|
115
|
+
// Animations
|
|
116
|
+
"data-[entering]:animate-in",
|
|
117
|
+
"data-[entering]:fade-in-0",
|
|
118
|
+
"data-[entering]:zoom-in-95",
|
|
119
|
+
"data-[exiting]:animate-out",
|
|
120
|
+
"data-[exiting]:fade-out-0",
|
|
121
|
+
"data-[exiting]:zoom-out-95"
|
|
122
|
+
],
|
|
123
|
+
{
|
|
124
|
+
variants: {
|
|
125
|
+
size: {
|
|
126
|
+
sm: "max-h-[200px] p-1",
|
|
127
|
+
default: "max-h-[300px] p-1",
|
|
128
|
+
lg: "max-h-[400px] p-1"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
defaultVariants: {
|
|
132
|
+
size: "default"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
var selectSectionVariants = classVarianceAuthority.cva(
|
|
137
|
+
[
|
|
138
|
+
"px-2",
|
|
139
|
+
"py-1.5",
|
|
140
|
+
"text-xs",
|
|
141
|
+
"font-semibold",
|
|
142
|
+
"text-[var(--menu-muted)]",
|
|
143
|
+
"uppercase",
|
|
144
|
+
"tracking-wider"
|
|
145
|
+
],
|
|
146
|
+
{
|
|
147
|
+
variants: {
|
|
148
|
+
size: {
|
|
149
|
+
sm: "px-2 py-1 text-[10px]",
|
|
150
|
+
default: "px-2 py-1.5 text-xs",
|
|
151
|
+
lg: "px-3 py-2 text-sm"
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
defaultVariants: {
|
|
155
|
+
size: "default"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
var selectErrorVariants = classVarianceAuthority.cva(
|
|
160
|
+
[
|
|
161
|
+
"flex",
|
|
162
|
+
"items-center",
|
|
163
|
+
"gap-1.5",
|
|
164
|
+
"text-sm",
|
|
165
|
+
"font-medium",
|
|
166
|
+
"text-[var(--destructive)]",
|
|
167
|
+
"mt-1.5"
|
|
168
|
+
],
|
|
169
|
+
{
|
|
170
|
+
variants: {
|
|
171
|
+
size: {
|
|
172
|
+
sm: "text-xs mt-1",
|
|
173
|
+
default: "text-sm mt-1.5",
|
|
174
|
+
lg: "text-base mt-2"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
defaultVariants: {
|
|
178
|
+
size: "default"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
var SelectRoot = react.forwardRef(
|
|
183
|
+
({
|
|
184
|
+
// Display props
|
|
185
|
+
label,
|
|
186
|
+
placeholder,
|
|
187
|
+
description,
|
|
188
|
+
// Selection props
|
|
189
|
+
value,
|
|
190
|
+
defaultValue,
|
|
191
|
+
// State props
|
|
192
|
+
isOpen,
|
|
193
|
+
isDisabled = false,
|
|
194
|
+
isRequired = false,
|
|
195
|
+
disabledKeys,
|
|
196
|
+
// Validation props
|
|
197
|
+
validate,
|
|
198
|
+
validationBehavior = "aria",
|
|
199
|
+
errorMessage,
|
|
200
|
+
// Loading state
|
|
201
|
+
isLoading = false,
|
|
202
|
+
emptyStateMessage,
|
|
203
|
+
// Form integration
|
|
204
|
+
name,
|
|
205
|
+
// Size variant
|
|
206
|
+
size = "default",
|
|
207
|
+
// Event handlers
|
|
208
|
+
onChange,
|
|
209
|
+
onOpenChange,
|
|
210
|
+
// Standard props
|
|
211
|
+
className,
|
|
212
|
+
children,
|
|
213
|
+
...props
|
|
214
|
+
}, ref) => {
|
|
215
|
+
const labelId = react.useId();
|
|
216
|
+
const descriptionId = react.useId();
|
|
217
|
+
const errorId = react.useId();
|
|
218
|
+
const childCount = react.Children.count(children);
|
|
219
|
+
if (childCount > 1e3) {
|
|
220
|
+
console.warn(
|
|
221
|
+
"Select has >1000 items. Consider using Autocomplete component for better performance."
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
const isInvalid = Boolean(errorMessage);
|
|
225
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
226
|
+
reactAriaComponents.Select,
|
|
227
|
+
{
|
|
228
|
+
value,
|
|
229
|
+
defaultValue,
|
|
230
|
+
onChange: (key) => {
|
|
231
|
+
if (onChange) {
|
|
232
|
+
onChange(key);
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
placeholder,
|
|
236
|
+
disabledKeys,
|
|
237
|
+
isOpen,
|
|
238
|
+
onOpenChange,
|
|
239
|
+
isDisabled: isDisabled || isLoading,
|
|
240
|
+
isRequired,
|
|
241
|
+
name,
|
|
242
|
+
validate,
|
|
243
|
+
validationBehavior,
|
|
244
|
+
isInvalid,
|
|
245
|
+
className,
|
|
246
|
+
...props,
|
|
247
|
+
children: [
|
|
248
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.Label, { id: labelId, className: "text-sm font-medium text-[var(--content-foreground)]", children: [
|
|
249
|
+
label,
|
|
250
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--destructive)] ml-1", children: "*" })
|
|
251
|
+
] }),
|
|
252
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Text, { id: descriptionId, slot: "description", className: "text-sm text-[var(--menu-muted)] mt-1", children: description }),
|
|
253
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
254
|
+
reactAriaComponents.Button,
|
|
255
|
+
{
|
|
256
|
+
ref,
|
|
257
|
+
className: selectTriggerVariants({ size, isInvalid }),
|
|
258
|
+
"aria-labelledby": labelId,
|
|
259
|
+
"aria-describedby": description ? descriptionId : errorMessage ? errorId : void 0,
|
|
260
|
+
"data-loading": isLoading,
|
|
261
|
+
...isRequired && { "aria-required": "true" },
|
|
262
|
+
...isLoading && { "aria-busy": "true" },
|
|
263
|
+
...(isDisabled || isLoading) && { "aria-disabled": "true" },
|
|
264
|
+
children: [
|
|
265
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.SelectValue, { className: "flex-1 text-left truncate" }),
|
|
266
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin text-[var(--menu-muted)]", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 text-[var(--menu-muted)]", "aria-hidden": "true" })
|
|
267
|
+
]
|
|
268
|
+
}
|
|
269
|
+
),
|
|
270
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.FieldError, { id: errorId, className: selectErrorVariants({ size }), children: ({ validationErrors }) => {
|
|
271
|
+
const displayError = errorMessage || validationErrors.join(" ");
|
|
272
|
+
return displayError ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
273
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
274
|
+
displayError
|
|
275
|
+
] }) : null;
|
|
276
|
+
} }),
|
|
277
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Popover, { className: selectPopoverVariants({ size }), children: /* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.ListBox, { className: "outline-none", children: [
|
|
278
|
+
isLoading && childCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
279
|
+
"div",
|
|
280
|
+
{
|
|
281
|
+
className: "h-11 px-4 py-2",
|
|
282
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-[var(--accent-background)] rounded animate-pulse" })
|
|
283
|
+
},
|
|
284
|
+
`skeleton-${i}`
|
|
285
|
+
)) }),
|
|
286
|
+
!isLoading && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
287
|
+
children,
|
|
288
|
+
childCount === 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
289
|
+
reactAriaComponents.ListBoxItem,
|
|
290
|
+
{
|
|
291
|
+
id: "__empty__",
|
|
292
|
+
textValue: "empty",
|
|
293
|
+
isDisabled: true,
|
|
294
|
+
className: "py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none",
|
|
295
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", children: emptyStateMessage || "No options available" })
|
|
296
|
+
}
|
|
297
|
+
)
|
|
298
|
+
] })
|
|
299
|
+
] }) })
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
);
|
|
305
|
+
SelectRoot.displayName = "Select";
|
|
306
|
+
var MultiSelectRoot = react.forwardRef(
|
|
307
|
+
({
|
|
308
|
+
// Display props
|
|
309
|
+
label,
|
|
310
|
+
placeholder,
|
|
311
|
+
description,
|
|
312
|
+
// Selection props
|
|
313
|
+
value,
|
|
314
|
+
defaultValue,
|
|
315
|
+
selectionMode: _selectionMode = "multiple",
|
|
316
|
+
// State props
|
|
317
|
+
isOpen,
|
|
318
|
+
isDisabled = false,
|
|
319
|
+
isRequired = false,
|
|
320
|
+
disabledKeys,
|
|
321
|
+
// Validation props
|
|
322
|
+
validate,
|
|
323
|
+
validationBehavior = "aria",
|
|
324
|
+
errorMessage,
|
|
325
|
+
// Loading state
|
|
326
|
+
isLoading = false,
|
|
327
|
+
emptyStateMessage,
|
|
328
|
+
// Form integration
|
|
329
|
+
name,
|
|
330
|
+
// Size variant
|
|
331
|
+
size = "default",
|
|
332
|
+
// Event handlers
|
|
333
|
+
onChange,
|
|
334
|
+
onOpenChange,
|
|
335
|
+
// Standard props
|
|
336
|
+
className,
|
|
337
|
+
children,
|
|
338
|
+
...props
|
|
339
|
+
}, ref) => {
|
|
340
|
+
const labelId = react.useId();
|
|
341
|
+
const descriptionId = react.useId();
|
|
342
|
+
const errorId = react.useId();
|
|
343
|
+
const childCount = react.Children.count(children);
|
|
344
|
+
if (childCount > 1e3) {
|
|
345
|
+
console.warn(
|
|
346
|
+
"Select has >1000 items. Consider using Autocomplete component for better performance."
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
const isInvalid = Boolean(errorMessage);
|
|
350
|
+
const valueToLabelMap = react.useMemo(() => {
|
|
351
|
+
const map = /* @__PURE__ */ new Map();
|
|
352
|
+
const processChildren = (nodes) => {
|
|
353
|
+
react.Children.forEach(nodes, (child) => {
|
|
354
|
+
if (react.isValidElement(child)) {
|
|
355
|
+
const element = child;
|
|
356
|
+
if (element.type === SelectItem || element.props?.value) {
|
|
357
|
+
const itemValue = element.props.value;
|
|
358
|
+
const itemChildren = element.props.children;
|
|
359
|
+
if (itemValue && typeof itemChildren === "string") {
|
|
360
|
+
map.set(itemValue, itemChildren);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (element.props?.children) {
|
|
364
|
+
processChildren(element.props.children);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
};
|
|
369
|
+
processChildren(children);
|
|
370
|
+
return map;
|
|
371
|
+
}, [children]);
|
|
372
|
+
const displayValue = react.useMemo(() => {
|
|
373
|
+
if (!value || !Array.isArray(value) || value.length === 0) {
|
|
374
|
+
return placeholder || "";
|
|
375
|
+
}
|
|
376
|
+
if (value.length <= 2) {
|
|
377
|
+
const labels = value.map((v) => valueToLabelMap.get(v) || v);
|
|
378
|
+
return labels.join(", ");
|
|
379
|
+
}
|
|
380
|
+
return `${value.length} items selected`;
|
|
381
|
+
}, [value, valueToLabelMap, placeholder]);
|
|
382
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
383
|
+
reactAriaComponents.Select,
|
|
384
|
+
{
|
|
385
|
+
value,
|
|
386
|
+
defaultValue,
|
|
387
|
+
onChange: (keys) => {
|
|
388
|
+
if (onChange) {
|
|
389
|
+
onChange(keys);
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
selectionMode: "multiple",
|
|
393
|
+
disabledKeys,
|
|
394
|
+
isOpen,
|
|
395
|
+
onOpenChange,
|
|
396
|
+
isDisabled: isDisabled || isLoading,
|
|
397
|
+
isRequired,
|
|
398
|
+
name,
|
|
399
|
+
validate,
|
|
400
|
+
validationBehavior,
|
|
401
|
+
isInvalid,
|
|
402
|
+
className,
|
|
403
|
+
...props,
|
|
404
|
+
children: [
|
|
405
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.Label, { id: labelId, className: "text-sm font-medium text-[var(--content-foreground)]", children: [
|
|
406
|
+
label,
|
|
407
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--destructive)] ml-1", children: "*" })
|
|
408
|
+
] }),
|
|
409
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Text, { id: descriptionId, slot: "description", className: "text-sm text-[var(--menu-muted)] mt-1", children: description }),
|
|
410
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
411
|
+
reactAriaComponents.Button,
|
|
412
|
+
{
|
|
413
|
+
ref,
|
|
414
|
+
className: selectTriggerVariants({ size, isInvalid }),
|
|
415
|
+
"aria-labelledby": labelId,
|
|
416
|
+
"aria-describedby": description ? descriptionId : errorMessage ? errorId : void 0,
|
|
417
|
+
"data-loading": isLoading,
|
|
418
|
+
...isRequired && { "aria-required": "true" },
|
|
419
|
+
...isLoading && { "aria-busy": "true" },
|
|
420
|
+
...(isDisabled || isLoading) && { "aria-disabled": "true" },
|
|
421
|
+
children: [
|
|
422
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-left truncate", children: displayValue }),
|
|
423
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin text-[var(--menu-muted)]", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 text-[var(--menu-muted)]", "aria-hidden": "true" })
|
|
424
|
+
]
|
|
425
|
+
}
|
|
426
|
+
),
|
|
427
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.FieldError, { id: errorId, className: selectErrorVariants({ size }), children: ({ validationErrors }) => {
|
|
428
|
+
const displayError = errorMessage || validationErrors.join(" ");
|
|
429
|
+
return displayError ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
430
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
431
|
+
displayError
|
|
432
|
+
] }) : null;
|
|
433
|
+
} }),
|
|
434
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Popover, { className: selectPopoverVariants({ size }), children: /* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.ListBox, { className: "outline-none", children: [
|
|
435
|
+
isLoading && childCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-11 px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-[var(--accent-background)] rounded animate-pulse" }) }, `skeleton-${i}`)) }),
|
|
436
|
+
!isLoading && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
437
|
+
children,
|
|
438
|
+
childCount === 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
439
|
+
reactAriaComponents.ListBoxItem,
|
|
440
|
+
{
|
|
441
|
+
id: "__empty__",
|
|
442
|
+
textValue: "empty",
|
|
443
|
+
isDisabled: true,
|
|
444
|
+
className: "py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none",
|
|
445
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", children: emptyStateMessage || "No options available" })
|
|
446
|
+
}
|
|
447
|
+
)
|
|
448
|
+
] })
|
|
449
|
+
] }) })
|
|
450
|
+
]
|
|
451
|
+
}
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
);
|
|
455
|
+
MultiSelectRoot.displayName = "MultiSelect";
|
|
456
|
+
function SelectItem({ children, textValue, value, isDisabled = false, className, ...props }) {
|
|
457
|
+
if (!textValue && typeof children !== "string") {
|
|
458
|
+
const message = "Select.Item with custom children requires textValue prop for accessibility";
|
|
459
|
+
if (process.env.NODE_ENV === "development") {
|
|
460
|
+
throw new Error(message);
|
|
461
|
+
} else {
|
|
462
|
+
console.warn(message);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
466
|
+
reactAriaComponents.ListBoxItem,
|
|
467
|
+
{
|
|
468
|
+
id: value,
|
|
469
|
+
textValue: textValue || (typeof children === "string" ? children : void 0),
|
|
470
|
+
className: `${selectItemVariants({ size: "default" })} ${className || ""}`,
|
|
471
|
+
isDisabled,
|
|
472
|
+
...props,
|
|
473
|
+
children: ({ isSelected, selectionMode, isDisabled: itemDisabled }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
474
|
+
selectionMode === "multiple" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
475
|
+
lucideReact.CheckSquare,
|
|
476
|
+
{
|
|
477
|
+
className: `absolute left-2 h-4 w-4 ${isSelected ? "visible" : "invisible"}`,
|
|
478
|
+
"aria-hidden": "true"
|
|
479
|
+
}
|
|
480
|
+
) : isSelected && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "absolute left-2 h-4 w-4", "aria-hidden": "true" }),
|
|
481
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: itemDisabled ? "text-[var(--menu-muted)]" : "", children })
|
|
482
|
+
] })
|
|
483
|
+
}
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
SelectItem.displayName = "SelectItem";
|
|
487
|
+
function SelectSection({ children, className, ...props }) {
|
|
488
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.ListBoxSection, { className: `border-t border-[var(--border)] first:border-t-0 ${className || ""}`, ...props, children });
|
|
489
|
+
}
|
|
490
|
+
SelectSection.displayName = "SelectSection";
|
|
491
|
+
function SelectHeader({ children, className, ...props }) {
|
|
492
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Header, { className: `${selectSectionVariants({ size: "default" })} ${className || ""}`, ...props, children });
|
|
493
|
+
}
|
|
494
|
+
SelectHeader.displayName = "SelectHeader";
|
|
495
|
+
var Select = Object.assign(SelectRoot, {
|
|
496
|
+
Item: SelectItem,
|
|
497
|
+
Section: SelectSection,
|
|
498
|
+
Header: SelectHeader
|
|
499
|
+
});
|
|
500
|
+
var MultiSelect = Object.assign(MultiSelectRoot, {
|
|
501
|
+
Item: SelectItem,
|
|
502
|
+
Section: SelectSection,
|
|
503
|
+
Header: SelectHeader
|
|
504
|
+
});
|
|
505
|
+
var SelectSizeSchema = zod.z.enum(["sm", "default", "lg"]);
|
|
506
|
+
var SelectionModeSchema = zod.z.enum(["single", "multiple"]);
|
|
507
|
+
var ValidationBehaviorSchema = zod.z.enum(["native", "aria"]);
|
|
508
|
+
var SelectPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
|
|
509
|
+
// Display props (US-1)
|
|
510
|
+
label: zod.z.string(),
|
|
511
|
+
// Required for accessibility
|
|
512
|
+
placeholder: zod.z.string().optional(),
|
|
513
|
+
description: zod.z.string().optional(),
|
|
514
|
+
// Selection props (US-1, US-6)
|
|
515
|
+
value: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).optional(),
|
|
516
|
+
defaultValue: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).optional(),
|
|
517
|
+
selectionMode: SelectionModeSchema.optional().default("single"),
|
|
518
|
+
// State props (US-1, US-5)
|
|
519
|
+
isOpen: zod.z.boolean().optional(),
|
|
520
|
+
isDisabled: zod.z.boolean().optional().default(false),
|
|
521
|
+
isRequired: zod.z.boolean().optional().default(false),
|
|
522
|
+
disabledKeys: zod.z.array(zod.z.string()).optional(),
|
|
523
|
+
// Validation props (US-4)
|
|
524
|
+
validate: zod.z.custom().optional(),
|
|
525
|
+
validationBehavior: ValidationBehaviorSchema.optional().default("aria"),
|
|
526
|
+
errorMessage: zod.z.string().optional(),
|
|
527
|
+
// Loading state (US-7)
|
|
528
|
+
isLoading: zod.z.boolean().optional().default(false),
|
|
529
|
+
emptyStateMessage: zod.z.string().optional(),
|
|
530
|
+
// Form integration (US-10)
|
|
531
|
+
name: zod.z.string().optional(),
|
|
532
|
+
// Size variant (US-9)
|
|
533
|
+
size: SelectSizeSchema.optional().default("default"),
|
|
534
|
+
// Event handlers (US-1)
|
|
535
|
+
onChange: zod.z.custom().optional(),
|
|
536
|
+
onOpenChange: zod.z.custom().optional(),
|
|
537
|
+
// Children (Select.Item, Select.Section components)
|
|
538
|
+
children: zod.z.custom()
|
|
539
|
+
});
|
|
540
|
+
var SelectItemPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
|
|
541
|
+
// Item value (required)
|
|
542
|
+
value: zod.z.string(),
|
|
543
|
+
// Text value for typeahead and accessibility (required for custom children)
|
|
544
|
+
textValue: zod.z.string().optional(),
|
|
545
|
+
// Disabled state
|
|
546
|
+
isDisabled: zod.z.boolean().optional().default(false),
|
|
547
|
+
// Item content
|
|
548
|
+
children: zod.z.custom(),
|
|
549
|
+
// Optional className for custom styling
|
|
550
|
+
className: zod.z.string().optional()
|
|
551
|
+
});
|
|
552
|
+
var SelectSectionPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
|
|
553
|
+
// Section content (typically Select.Header + Select.Item components)
|
|
554
|
+
children: zod.z.custom(),
|
|
555
|
+
// Optional className for custom styling
|
|
556
|
+
className: zod.z.string().optional()
|
|
557
|
+
});
|
|
558
|
+
var SelectHeaderPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
|
|
559
|
+
// Header text
|
|
560
|
+
children: zod.z.custom(),
|
|
561
|
+
// Optional className for header styling
|
|
562
|
+
className: zod.z.string().optional()
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
exports.MultiSelect = MultiSelect;
|
|
566
|
+
exports.Select = Select;
|
|
567
|
+
exports.SelectHeaderPropsSchema = SelectHeaderPropsSchema;
|
|
568
|
+
exports.SelectItemPropsSchema = SelectItemPropsSchema;
|
|
569
|
+
exports.SelectPropsSchema = SelectPropsSchema;
|
|
570
|
+
exports.SelectSectionPropsSchema = SelectSectionPropsSchema;
|
|
571
|
+
//# sourceMappingURL=chunk-3XD2JUL3.js.map
|
|
572
|
+
//# sourceMappingURL=chunk-3XD2JUL3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/elements/Select/Select.tsx","../src/elements/Select/Select.types.ts"],"names":["cva","forwardRef","useId","Children","jsxs","AriaSelect","Label","jsx","Text","Button","SelectValue","Loader2","ChevronDown","FieldError","Fragment","AlertCircle","Popover","ListBox","ListBoxItem","useMemo","isValidElement","CheckSquare","Check","ListBoxSection","Header","z","BaseComponentPropsSchema"],"mappings":"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","file":"chunk-3XD2JUL3.js","sourcesContent":["'use client';\n\n/**\n * Select Component - Implementation\n *\n * Accessible select/dropdown component combining React Aria primitives with ShadCN styling.\n * Follows Themis library patterns with compound component structure.\n *\n * @see select-prd.md (Full requirements)\n * @see Select.types.ts (Zod schemas)\n * @see plan.md (Implementation plan)\n */\n\nimport {\n forwardRef,\n Children,\n useId,\n useMemo,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Select as AriaSelect,\n Label,\n Button,\n SelectValue,\n Popover,\n ListBox,\n ListBoxItem,\n ListBoxSection,\n Header,\n Text,\n FieldError,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { Check, CheckSquare, ChevronDown, Loader2, AlertCircle } from 'lucide-react';\nimport type {\n SelectProps,\n SelectItemProps,\n SelectSectionProps,\n SelectHeaderProps,\n} from './Select.types';\n\n/**\n * CVA Variants for Select Trigger Button\n *\n * @see plan.md Decision 14 (CVA variants)\n */\nexport const selectTriggerVariants = cva(\n [\n // Base styles\n 'flex',\n 'w-full',\n 'items-center',\n 'justify-between',\n 'rounded-md',\n 'border',\n 'bg-[var(--content-background)]',\n 'text-[var(--content-foreground)]',\n 'transition-colors',\n 'duration-200',\n 'outline-none',\n // Focus ring (WCAG 2.2 AAA - 7:1 contrast)\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n // Hover state\n 'hover:bg-[var(--accent)]/10',\n // Disabled state\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n // Loading state\n 'data-[loading=true]:cursor-wait',\n // Truncate text\n 'truncate',\n ],\n {\n variants: {\n size: {\n // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance\n // Visual height varies but touch area remains accessible\n sm: 'h-9 px-3 text-sm min-h-[44px]',\n default: 'h-11 px-4 text-base min-h-[44px]',\n lg: 'h-14 px-5 text-lg min-h-[44px]',\n },\n isInvalid: {\n true: 'border-[var(--destructive)]',\n false: 'border-[var(--input)] hover:border-[var(--input)]/80',\n },\n },\n defaultVariants: {\n size: 'default',\n isInvalid: false,\n },\n }\n);\n\n/**\n * CVA Variants for Select Items\n *\n * @see plan.md Decision 14 (CVA variants)\n */\nexport const selectItemVariants = cva(\n [\n // Base styles\n 'relative',\n 'flex',\n 'w-full',\n 'cursor-pointer',\n 'select-none',\n 'items-center',\n 'rounded-sm',\n 'outline-none',\n 'transition-colors',\n // Padding for checkmark icon (left side)\n 'pl-8',\n 'pr-2',\n // Hover state\n 'hover:bg-[var(--accent)]',\n 'hover:text-[var(--accent-foreground)]',\n // Focus state\n 'focus:bg-[var(--accent)]',\n 'focus:text-[var(--accent-foreground)]',\n // Selected state\n 'data-[selected=true]:bg-[var(--accent)]',\n 'data-[selected=true]:text-[var(--accent-foreground)]',\n // Disabled state\n 'data-[disabled=true]:pointer-events-none',\n 'data-[disabled=true]:opacity-50',\n 'data-[disabled=true]:text-[var(--menu-muted)]',\n ],\n {\n variants: {\n size: {\n // All sizes use 44px minimum touch target for WCAG 2.2 AAA compliance\n sm: 'h-9 py-1.5 text-sm min-h-[44px]',\n default: 'h-11 py-2 text-base min-h-[44px]',\n lg: 'h-14 py-3 text-lg min-h-[44px]',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Select Popover\n *\n * @see plan.md Decision 14 (CVA variants)\n */\nexport const selectPopoverVariants = cva(\n [\n // Base styles - use menu tokens to match Dropdown styling\n 'z-50',\n 'w-[--trigger-width]',\n 'rounded-md',\n 'border',\n 'border-[var(--menu-border)]',\n 'bg-[var(--menu-background)]',\n 'text-[var(--menu-foreground)]',\n 'shadow-md',\n 'outline-none',\n 'overflow-auto',\n // Animations\n 'data-[entering]:animate-in',\n 'data-[entering]:fade-in-0',\n 'data-[entering]:zoom-in-95',\n 'data-[exiting]:animate-out',\n 'data-[exiting]:fade-out-0',\n 'data-[exiting]:zoom-out-95',\n ],\n {\n variants: {\n size: {\n sm: 'max-h-[200px] p-1',\n default: 'max-h-[300px] p-1',\n lg: 'max-h-[400px] p-1',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Section Headers\n *\n * @see plan.md Decision 14 (CVA variants)\n */\nexport const selectSectionVariants = cva(\n [\n 'px-2',\n 'py-1.5',\n 'text-xs',\n 'font-semibold',\n 'text-[var(--menu-muted)]',\n 'uppercase',\n 'tracking-wider',\n ],\n {\n variants: {\n size: {\n sm: 'px-2 py-1 text-[10px]',\n default: 'px-2 py-1.5 text-xs',\n lg: 'px-3 py-2 text-sm',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * CVA Variants for Error Messages\n *\n * @see plan.md Decision 14 (CVA variants)\n */\nexport const selectErrorVariants = cva(\n [\n 'flex',\n 'items-center',\n 'gap-1.5',\n 'text-sm',\n 'font-medium',\n 'text-[var(--destructive)]',\n 'mt-1.5',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs mt-1',\n default: 'text-sm mt-1.5',\n lg: 'text-base mt-2',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Select Root Component (Single Selection Only)\n *\n * Main select component with controlled/uncontrolled modes for single selection.\n * For multiple selection, use MultiSelect component.\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see plan.md Decision 28 (Ref forwarding to trigger button)\n */\nconst SelectRoot = forwardRef<HTMLButtonElement, Omit<SelectProps, 'selectionMode'>>(\n (\n {\n // Display props\n label,\n placeholder,\n description,\n\n // Selection props\n value,\n defaultValue,\n\n // State props\n isOpen,\n isDisabled = false,\n isRequired = false,\n disabledKeys,\n\n // Validation props\n validate,\n validationBehavior = 'aria',\n errorMessage,\n\n // Loading state\n isLoading = false,\n emptyStateMessage,\n\n // Form integration\n name,\n\n // Size variant\n size = 'default',\n\n // Event handlers\n onChange,\n onOpenChange,\n\n // Standard props\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Generate unique IDs for accessibility\n const labelId = useId();\n const descriptionId = useId();\n const errorId = useId();\n\n // Warn if >1000 items (Decision 22: Large Item Count Handling)\n const childCount = Children.count(children);\n if (childCount > 1000) {\n console.warn(\n 'Select has >1000 items. Consider using Autocomplete component for better performance.'\n );\n }\n\n // Determine if invalid based on errorMessage or validate function\n const isInvalid = Boolean(errorMessage);\n\n return (\n <AriaSelect\n value={value as string}\n defaultValue={defaultValue as string}\n onChange={(key) => {\n if (onChange) {\n onChange(key as string);\n }\n }}\n placeholder={placeholder}\n disabledKeys={disabledKeys}\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled || isLoading}\n isRequired={isRequired}\n name={name}\n validate={validate as ((value: unknown) => true | string | null | undefined) | undefined}\n validationBehavior={validationBehavior}\n isInvalid={isInvalid}\n className={className}\n {...props}\n >\n {/* Label */}\n <Label id={labelId} className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n {isRequired && <span className=\"text-[var(--destructive)] ml-1\">*</span>}\n </Label>\n\n {/* Description (if provided) */}\n {description && (\n <Text id={descriptionId} slot=\"description\" className=\"text-sm text-[var(--menu-muted)] mt-1\">\n {description}\n </Text>\n )}\n\n {/* Trigger Button */}\n <Button\n ref={ref}\n className={selectTriggerVariants({ size, isInvalid })}\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : errorMessage ? errorId : undefined}\n data-loading={isLoading}\n {...(isRequired && { 'aria-required': 'true' })}\n {...(isLoading && { 'aria-busy': 'true' })}\n {...((isDisabled || isLoading) && { 'aria-disabled': 'true' })}\n >\n <SelectValue className=\"flex-1 text-left truncate\" />\n\n {/* Loading spinner or chevron icon */}\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n )}\n </Button>\n\n {/* Error Message */}\n <FieldError id={errorId} className={selectErrorVariants({ size })}>\n {({ validationErrors }) => {\n // Display custom errorMessage if provided, otherwise show validation errors\n const displayError = errorMessage || validationErrors.join(' ');\n return displayError ? (\n <>\n <AlertCircle className=\"h-4 w-4\" aria-hidden=\"true\" />\n {displayError}\n </>\n ) : null;\n }}\n </FieldError>\n\n {/* Popover with ListBox */}\n <Popover className={selectPopoverVariants({ size })}>\n <ListBox className=\"outline-none\">\n {/* Loading skeleton (if loading and has children) */}\n {isLoading && childCount > 0 && (\n <>\n {Array.from({ length: 3 }).map((_, i) => (\n <div\n key={`skeleton-${i}`}\n className=\"h-11 px-4 py-2\"\n >\n <div className=\"h-4 bg-[var(--accent-background)] rounded animate-pulse\" />\n </div>\n ))}\n </>\n )}\n\n {/* Items or empty state */}\n {!isLoading && (\n <>\n {children}\n {/* Empty state - render as disabled item so popover can open */}\n {childCount === 0 && (\n <ListBoxItem\n id=\"__empty__\"\n textValue=\"empty\"\n isDisabled\n className=\"py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none\"\n >\n <span role=\"status\">\n {emptyStateMessage || 'No options available'}\n </span>\n </ListBoxItem>\n )}\n </>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n }\n);\n\nSelectRoot.displayName = 'Select';\n\n/**\n * MultiSelect Root Component (Multiple Selection)\n *\n * Select component for multiple selection. Uses different API from single Select.\n *\n * @see select-prd.md US-6 (Multiple Selection)\n * @see plan.md Decision 28 (Ref forwarding to trigger button)\n */\nconst MultiSelectRoot = forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n // Display props\n label,\n placeholder,\n description,\n\n // Selection props\n value,\n defaultValue,\n selectionMode: _selectionMode = 'multiple',\n\n // State props\n isOpen,\n isDisabled = false,\n isRequired = false,\n disabledKeys,\n\n // Validation props\n validate,\n validationBehavior = 'aria',\n errorMessage,\n\n // Loading state\n isLoading = false,\n emptyStateMessage,\n\n // Form integration\n name,\n\n // Size variant\n size = 'default',\n\n // Event handlers\n onChange,\n onOpenChange,\n\n // Standard props\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Generate unique IDs for accessibility\n const labelId = useId();\n const descriptionId = useId();\n const errorId = useId();\n\n // Warn if >1000 items\n const childCount = Children.count(children);\n if (childCount > 1000) {\n console.warn(\n 'Select has >1000 items. Consider using Autocomplete component for better performance.'\n );\n }\n\n // Determine if invalid\n const isInvalid = Boolean(errorMessage);\n\n // Build value-to-label map for display (memoized to prevent recreation on every render)\n const valueToLabelMap = useMemo(() => {\n const map = new Map<string, string>();\n const processChildren = (nodes: ReactNode): void => {\n Children.forEach(nodes, (child) => {\n if (isValidElement(child)) {\n const element = child as ReactElement<{ value?: string; children?: ReactNode }>;\n if (element.type === SelectItem || element.props?.value) {\n const itemValue = element.props.value;\n const itemChildren = element.props.children;\n if (itemValue && typeof itemChildren === 'string') {\n map.set(itemValue, itemChildren);\n }\n }\n if (element.props?.children) {\n processChildren(element.props.children);\n }\n }\n });\n };\n processChildren(children);\n return map;\n }, [children]);\n\n // Multi-select display logic (Decision 5: Multi-select threshold)\n // Memoized to prevent recalculation on every render\n const displayValue = useMemo(() => {\n if (!value || !Array.isArray(value) || value.length === 0) {\n return placeholder || '';\n }\n\n if (value.length <= 2) {\n // Show item labels for 1-2 items\n const labels = value.map(v => valueToLabelMap.get(v as string) || v);\n return labels.join(', ');\n }\n\n // Show count for 3+ items\n return `${value.length} items selected`;\n }, [value, valueToLabelMap, placeholder]);\n\n return (\n <AriaSelect\n value={value as string[]}\n defaultValue={defaultValue as string[]}\n onChange={(keys) => {\n if (onChange) {\n onChange(keys as string[]);\n }\n }}\n selectionMode=\"multiple\"\n disabledKeys={disabledKeys}\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled || isLoading}\n isRequired={isRequired}\n name={name}\n validate={validate as ((value: unknown) => true | string | null | undefined) | undefined}\n validationBehavior={validationBehavior}\n isInvalid={isInvalid}\n className={className}\n {...props}\n >\n {/* Label */}\n <Label id={labelId} className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n {isRequired && <span className=\"text-[var(--destructive)] ml-1\">*</span>}\n </Label>\n\n {/* Description */}\n {description && (\n <Text id={descriptionId} slot=\"description\" className=\"text-sm text-[var(--menu-muted)] mt-1\">\n {description}\n </Text>\n )}\n\n {/* Trigger Button */}\n <Button\n ref={ref}\n className={selectTriggerVariants({ size, isInvalid })}\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : errorMessage ? errorId : undefined}\n data-loading={isLoading}\n {...(isRequired && { 'aria-required': 'true' })}\n {...(isLoading && { 'aria-busy': 'true' })}\n {...((isDisabled || isLoading) && { 'aria-disabled': 'true' })}\n >\n <span className=\"flex-1 text-left truncate\">\n {displayValue}\n </span>\n\n {/* Loading spinner or chevron icon */}\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-[var(--menu-muted)]\" aria-hidden=\"true\" />\n )}\n </Button>\n\n {/* Error Message */}\n <FieldError id={errorId} className={selectErrorVariants({ size })}>\n {({ validationErrors }) => {\n // Display custom errorMessage if provided, otherwise show validation errors\n const displayError = errorMessage || validationErrors.join(' ');\n return displayError ? (\n <>\n <AlertCircle className=\"h-4 w-4\" aria-hidden=\"true\" />\n {displayError}\n </>\n ) : null;\n }}\n </FieldError>\n\n {/* Popover with ListBox */}\n <Popover className={selectPopoverVariants({ size })}>\n <ListBox className=\"outline-none\">\n {/* Loading skeleton */}\n {isLoading && childCount > 0 && (\n <>\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={`skeleton-${i}`} className=\"h-11 px-4 py-2\">\n <div className=\"h-4 bg-[var(--accent-background)] rounded animate-pulse\" />\n </div>\n ))}\n </>\n )}\n\n {/* Items or empty state */}\n {!isLoading && (\n <>\n {children}\n {childCount === 0 && (\n <ListBoxItem\n id=\"__empty__\"\n textValue=\"empty\"\n isDisabled\n className=\"py-6 text-center text-sm text-[var(--menu-muted)] cursor-default pointer-events-none\"\n >\n <span role=\"status\">\n {emptyStateMessage || 'No options available'}\n </span>\n </ListBoxItem>\n )}\n </>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n }\n);\n\nMultiSelectRoot.displayName = 'MultiSelect';\n\n/**\n * Select.Item Component\n *\n * Individual selectable item with checkmark icon.\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see plan.md Decision 6 (Left-side checkmark)\n * @see plan.md Decision 23 (textValue required for custom children)\n */\nfunction SelectItem({ children, textValue, value, isDisabled = false, className, ...props }: SelectItemProps): ReactElement {\n // Validate textValue for custom children (Decision 23)\n if (!textValue && typeof children !== 'string') {\n const message = 'Select.Item with custom children requires textValue prop for accessibility';\n if (process.env.NODE_ENV === 'development') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n\n return (\n <ListBoxItem\n id={value}\n textValue={textValue || (typeof children === 'string' ? children : undefined)}\n className={`${selectItemVariants({ size: 'default' })} ${className || ''}`}\n isDisabled={isDisabled}\n {...props}\n >\n {({ isSelected, selectionMode, isDisabled: itemDisabled }) => (\n <>\n {/* Checkmark icon (left side) - Decision 6 */}\n {selectionMode === 'multiple' ? (\n <CheckSquare\n className={`absolute left-2 h-4 w-4 ${isSelected ? 'visible' : 'invisible'}`}\n aria-hidden=\"true\"\n />\n ) : (\n isSelected && <Check className=\"absolute left-2 h-4 w-4\" aria-hidden=\"true\" />\n )}\n <span className={itemDisabled ? 'text-[var(--menu-muted)]' : ''}>\n {children}\n </span>\n </>\n )}\n </ListBoxItem>\n );\n}\n\nSelectItem.displayName = 'SelectItem';\n\n/**\n * Select.Section Component\n *\n * Groups related items with optional header.\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nfunction SelectSection({ children, className, ...props }: SelectSectionProps): ReactElement {\n return (\n <ListBoxSection className={`border-t border-[var(--border)] first:border-t-0 ${className || ''}`} {...props}>\n {children}\n </ListBoxSection>\n );\n}\n\nSelectSection.displayName = 'SelectSection';\n\n/**\n * Select.Header Component\n *\n * Section header with non-interactive label.\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nfunction SelectHeader({ children, className, ...props }: SelectHeaderProps): ReactElement {\n return (\n <Header className={`${selectSectionVariants({ size: 'default' })} ${className || ''}`} {...props}>\n {children}\n </Header>\n );\n}\n\nSelectHeader.displayName = 'SelectHeader';\n\n/**\n * Compound Component Exports\n *\n * Follows Themis library pattern using Object.assign() for compound components.\n *\n * @see GUIDE.mdx (Compound component pattern)\n */\nexport const Select = Object.assign(SelectRoot, {\n Item: SelectItem,\n Section: SelectSection,\n Header: SelectHeader,\n});\n\nexport const MultiSelect = Object.assign(MultiSelectRoot, {\n Item: SelectItem,\n Section: SelectSection,\n Header: SelectHeader,\n});\n\n// Named exports for individual components\nexport { SelectRoot, MultiSelectRoot, SelectItem, SelectSection, SelectHeader };\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\nimport type {\n SelectProps as AriaSelectProps,\n ListBoxItemProps as AriaListBoxItemProps,\n} from 'react-aria-components';\n\n/**\n * Select size variants\n *\n * @see select-prd.md US-9 (Visual States - Size Variants)\n * @see plan.md Decision 4 (Include sm size with warning for desktop-only)\n */\nexport const SelectSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type SelectSize = z.infer<typeof SelectSizeSchema>;\n\n/**\n * Select selection mode\n *\n * @see select-prd.md US-6 (Multiple Selection)\n */\nexport const SelectionModeSchema = z.enum(['single', 'multiple']);\nexport type SelectionMode = z.infer<typeof SelectionModeSchema>;\n\n/**\n * Select validation behavior\n *\n * @see select-prd.md US-4 (Validation and Error Messages)\n */\nexport const ValidationBehaviorSchema = z.enum(['native', 'aria']);\nexport type ValidationBehavior = z.infer<typeof ValidationBehaviorSchema>;\n\n/**\n * Select root component props schema\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see select-prd.md US-4 (Validation and Error Messages)\n * @see select-prd.md US-5 (Disabled States)\n * @see select-prd.md US-6 (Multiple Selection)\n * @see select-prd.md US-7 (Async Data Loading)\n * @see select-prd.md US-10 (Form Integration)\n */\nexport const SelectPropsSchema = BaseComponentPropsSchema.extend({\n // Display props (US-1)\n label: z.string(), // Required for accessibility\n placeholder: z.string().optional(),\n description: z.string().optional(),\n\n // Selection props (US-1, US-6)\n value: z.union([z.string(), z.array(z.string())]).optional(),\n defaultValue: z.union([z.string(), z.array(z.string())]).optional(),\n selectionMode: SelectionModeSchema.optional().default('single'),\n\n // State props (US-1, US-5)\n isOpen: z.boolean().optional(),\n isDisabled: z.boolean().optional().default(false),\n isRequired: z.boolean().optional().default(false),\n disabledKeys: z.array(z.string()).optional(),\n\n // Validation props (US-4)\n validate: z\n .custom<(value: string | string[]) => string | undefined>()\n .optional(),\n validationBehavior: ValidationBehaviorSchema.optional().default('aria'),\n errorMessage: z.string().optional(),\n\n // Loading state (US-7)\n isLoading: z.boolean().optional().default(false),\n emptyStateMessage: z.string().optional(),\n\n // Form integration (US-10)\n name: z.string().optional(),\n\n // Size variant (US-9)\n size: SelectSizeSchema.optional().default('default'),\n\n // Event handlers (US-1)\n onChange: z\n .custom<(value: string | string[]) => void>()\n .optional(),\n onOpenChange: z.custom<(isOpen: boolean) => void>().optional(),\n\n // Children (Select.Item, Select.Section components)\n children: z.custom<ReactNode>(),\n});\n\nexport type SelectProps = z.infer<typeof SelectPropsSchema> &\n Omit<AriaSelectProps<object>, keyof z.infer<typeof SelectPropsSchema>>;\n\n/**\n * Select.Item props schema\n *\n * @see select-prd.md US-1 (Basic Single Selection)\n * @see select-prd.md US-5 (Disabled States)\n * @see select-prd.md US-8 (Custom Value Rendering)\n * @see plan.md Decision 23 (textValue required for custom children)\n */\nexport const SelectItemPropsSchema = BaseComponentPropsSchema.extend({\n // Item value (required)\n value: z.string(),\n\n // Text value for typeahead and accessibility (required for custom children)\n textValue: z.string().optional(),\n\n // Disabled state\n isDisabled: z.boolean().optional().default(false),\n\n // Item content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type SelectItemProps = z.infer<typeof SelectItemPropsSchema> &\n Omit<AriaListBoxItemProps, keyof z.infer<typeof SelectItemPropsSchema>>;\n\n/**\n * Select.Section props schema\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nexport const SelectSectionPropsSchema = BaseComponentPropsSchema.extend({\n // Section content (typically Select.Header + Select.Item components)\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type SelectSectionProps = z.infer<typeof SelectSectionPropsSchema>;\n\n/**\n * Select.Header props schema (for section headers)\n *\n * @see select-prd.md US-3 (Grouped Options with Sections)\n */\nexport const SelectHeaderPropsSchema = BaseComponentPropsSchema.extend({\n // Header text\n children: z.custom<ReactNode>(),\n\n // Optional className for header styling\n className: z.string().optional(),\n});\n\nexport type SelectHeaderProps = z.infer<typeof SelectHeaderPropsSchema>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type SelectVariantSize = SelectSize;\nexport type SelectVariantSelectionMode = SelectionMode;\n"]}
|