@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/elements/FileField/FileField.variants.ts","../src/elements/FileField/utils.ts","../src/elements/FileField/useFilePreview.ts","../src/elements/FileField/FilePreview.tsx","../src/elements/FileField/FileProgress.variants.ts","../src/elements/FileField/FileProgress.tsx","../src/elements/FileField/FileField.tsx","../src/elements/FileField/FileField.types.ts"],"names":["cva","TEXT_SIZE_MEDIUM_SCALE","combineStyles","TRANSITION_COLORS","FOCUS_WITHIN_RING","TOUCH_TARGET_MIN","FOCUS_VISIBLE_RING","DISABLED_STANDARD","TEXT_SIZE_SMALL_SCALE","ERROR_MESSAGE_BASE","SUCCESS_MESSAGE_BASE","DESCRIPTION_BASE","LABEL_BASE","useState","useEffect","jsx","cn","Loader2","ImageIcon","VideoIcon","AudioLines","FileIcon","jsxs","ProgressBar","Fragment","Button","forwardRef","FileField","useId","useRef","useCallback","FileTrigger","Upload","X","BaseComponentPropsSchema","z"],"mappings":"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","file":"chunk-OLJJGI5B.js","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport {\n FOCUS_WITHIN_RING,\n FOCUS_VISIBLE_RING,\n DISABLED_STANDARD,\n TEXT_SIZE_SMALL_SCALE,\n TEXT_SIZE_MEDIUM_SCALE,\n TOUCH_TARGET_MIN,\n ERROR_MESSAGE_BASE,\n SUCCESS_MESSAGE_BASE,\n DESCRIPTION_BASE,\n LABEL_BASE,\n TRANSITION_COLORS,\n combineStyles,\n} from '../../styles';\n\n/**\n * FileField CVA Variants\n * Uses shared utilities from styles/ for consistency and reduced bundle size.\n */\n\nexport const fileFieldContainerVariants = cva(\n 'flex flex-col gap-1.5 w-full',\n {\n variants: {\n size: TEXT_SIZE_MEDIUM_SCALE,\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldDropZoneVariants = cva(\n combineStyles(\n 'flex flex-col items-center justify-center rounded-md border-2 border-dashed',\n 'bg-[var(--content-background)] text-[var(--content-foreground)]',\n TRANSITION_COLORS,\n FOCUS_WITHIN_RING\n ),\n {\n variants: {\n size: {\n sm: 'min-h-[100px] p-4 gap-2',\n default: 'min-h-[140px] p-6 gap-3',\n lg: 'min-h-[180px] p-8 gap-4',\n },\n isDragOver: {\n true: 'border-[var(--primary)] bg-[var(--primary)]/5',\n false: 'border-[var(--input)] hover:border-[var(--primary)]/50',\n },\n isInvalid: {\n true: 'border-[var(--destructive)] bg-[var(--destructive)]/5',\n false: '',\n },\n isDisabled: {\n true: 'opacity-50 cursor-not-allowed pointer-events-none',\n false: 'cursor-pointer',\n },\n },\n compoundVariants: [\n {\n isInvalid: true,\n isDragOver: true,\n className: 'border-[var(--destructive)] bg-[var(--destructive)]/5',\n },\n ],\n defaultVariants: {\n size: 'default',\n isDragOver: false,\n isInvalid: false,\n isDisabled: false,\n },\n }\n);\n\nexport const fileFieldTriggerVariants = cva(\n combineStyles(\n 'inline-flex items-center justify-center gap-2 rounded-md font-medium',\n TRANSITION_COLORS,\n TOUCH_TARGET_MIN,\n FOCUS_VISIBLE_RING,\n DISABLED_STANDARD\n ),\n {\n variants: {\n size: {\n sm: 'px-3 py-2 text-xs',\n default: 'px-4 py-2 text-sm',\n lg: 'px-6 py-3 text-base',\n },\n variant: {\n default: 'bg-[var(--primary)] text-[var(--primary-foreground)] hover:bg-[var(--primary)]/90',\n outline: 'border border-[var(--input)] bg-transparent hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]',\n },\n },\n defaultVariants: {\n size: 'default',\n variant: 'default',\n },\n }\n);\n\nexport const fileFieldListVariants = cva(\n 'flex flex-col gap-2 mt-3',\n {\n variants: {\n size: {\n sm: 'gap-1.5',\n default: 'gap-2',\n lg: 'gap-3',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldListHeaderVariants = cva(\n 'flex items-center justify-between mb-1',\n {\n variants: {\n size: TEXT_SIZE_SMALL_SCALE,\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldItemVariants = cva(\n 'flex items-center justify-between gap-3 bg-[var(--accent-background)] rounded-md border border-[var(--border)]',\n {\n variants: {\n size: {\n sm: 'px-2 py-1.5 text-xs',\n default: 'px-3 py-2 text-sm',\n lg: 'px-4 py-3 text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldRemoveButtonVariants = cva(\n combineStyles(\n 'inline-flex items-center justify-center rounded-full',\n TOUCH_TARGET_MIN,\n '-mr-2 -my-1', // Negative margin for visual sizing\n 'text-[var(--menu-muted)] hover:text-[var(--destructive)] hover:bg-[var(--destructive)]/10',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]'\n ),\n {\n variants: {\n size: {\n sm: '',\n default: '',\n lg: '',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldErrorVariants = cva(\n combineStyles(ERROR_MESSAGE_BASE, 'font-medium'),\n {\n variants: {\n size: TEXT_SIZE_SMALL_SCALE,\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldSuccessVariants = cva(\n combineStyles(SUCCESS_MESSAGE_BASE, 'font-medium'),\n {\n variants: {\n size: TEXT_SIZE_SMALL_SCALE,\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldDescriptionVariants = cva(\n DESCRIPTION_BASE,\n {\n variants: {\n size: TEXT_SIZE_SMALL_SCALE,\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\nexport const fileFieldLabelVariants = cva(\n LABEL_BASE,\n {\n variants: {\n size: TEXT_SIZE_MEDIUM_SCALE,\n isRequired: {\n true: \"after:content-['*'] after:ml-0.5 after:text-[var(--destructive)]\",\n false: '',\n },\n },\n defaultVariants: {\n size: 'default',\n isRequired: false,\n },\n }\n);\n\n// Export variant prop types for consumers\nexport type FileFieldContainerVariants = VariantProps<\n typeof fileFieldContainerVariants\n>;\nexport type FileFieldDropZoneVariants = VariantProps<\n typeof fileFieldDropZoneVariants\n>;\nexport type FileFieldTriggerVariants = VariantProps<\n typeof fileFieldTriggerVariants\n>;\nexport type FileFieldItemVariants = VariantProps<typeof fileFieldItemVariants>;\nexport type FileFieldErrorVariants = VariantProps<\n typeof fileFieldErrorVariants\n>;\n","/**\n * FileField Utility Functions\n *\n * Helper functions for file validation, formatting, and manipulation\n * @see plan.md Section 3: Helper Utilities\n */\n\n/**\n * Format file size in human-readable format\n *\n * @param bytes - File size in bytes\n * @returns Formatted string like \"1.5 MB\" or \"0 B\"\n *\n * @example\n * formatFileSize(0) // \"0 B\"\n * formatFileSize(1024) // \"1 KB\"\n * formatFileSize(1536) // \"1.5 KB\"\n * formatFileSize(1048576) // \"1 MB\"\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const size = parseFloat((bytes / Math.pow(k, i)).toFixed(1));\n\n // Remove trailing .0\n const formatted = size % 1 === 0 ? size.toFixed(0) : size.toFixed(1);\n\n return `${formatted} ${sizes[i]}`;\n}\n\n/**\n * Truncate filename with ellipsis, preserving extension\n *\n * @param name - Original filename\n * @param maxLength - Maximum total length (default: 30)\n * @returns Truncated filename like \"resume-2024-fi...pdf\"\n *\n * @example\n * truncateFileName(\"resume.pdf\", 30) // \"resume.pdf\"\n * truncateFileName(\"my-very-long-filename-here.pdf\", 20) // \"my-very-long...pdf\"\n */\nexport function truncateFileName(name: string, maxLength: number = 30): string {\n if (name.length <= maxLength) return name;\n\n const lastDotIndex = name.lastIndexOf('.');\n if (lastDotIndex === -1) {\n // No extension - just truncate\n return `${name.slice(0, maxLength - 3)}...`;\n }\n\n const ext = name.slice(lastDotIndex);\n const base = name.slice(0, lastDotIndex);\n\n // Ensure we have at least some characters of the base name\n const availableLength = maxLength - ext.length - 3; // 3 for \"...\"\n if (availableLength < 1) {\n return `...${ext}`;\n }\n\n const truncatedBase = base.slice(0, availableLength);\n return `${truncatedBase}...${ext}`;\n}\n\n/**\n * Check if a file type is accepted based on accepted types array\n *\n * Supports:\n * - MIME type patterns: \"image/*\", \"video/*\"\n * - Exact MIME types: \"application/pdf\"\n * - File extensions: \".pdf\", \".docx\"\n *\n * @param file - File to check\n * @param acceptedTypes - Array of accepted type patterns\n * @returns true if file type is accepted\n *\n * @example\n * isFileTypeAccepted(pdfFile, ['application/pdf']) // true\n * isFileTypeAccepted(jpgFile, ['image/*']) // true\n * isFileTypeAccepted(docFile, ['.doc', '.docx']) // true\n */\nexport function isFileTypeAccepted(\n file: File,\n acceptedTypes?: string[]\n): boolean {\n // If no restrictions, accept all\n if (!acceptedTypes || acceptedTypes.length === 0) return true;\n\n return acceptedTypes.some((type) => {\n // Handle MIME type patterns (e.g., \"image/*\")\n if (type.endsWith('/*')) {\n const category = type.slice(0, -2);\n return file.type.startsWith(`${category}/`);\n }\n\n // Handle exact MIME types (e.g., \"application/pdf\")\n if (type.includes('/')) {\n return file.type === type;\n }\n\n // Handle extensions (e.g., \".pdf\")\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n\n return false;\n });\n}\n\n/**\n * Get appropriate icon type for a file based on MIME type\n *\n * @param file - File to check\n * @returns Icon type identifier\n *\n * @example\n * getFileIcon(imageFile) // \"image\"\n * getFileIcon(pdfFile) // \"file\"\n */\nexport function getFileIcon(\n file: File\n): 'file' | 'image' | 'video' | 'audio' {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('video/')) return 'video';\n if (file.type.startsWith('audio/')) return 'audio';\n return 'file';\n}\n\n/**\n * Merge file arrays, replacing duplicates by filename\n *\n * Used for append behavior when selecting additional files.\n * Files with the same name are replaced with the newer version.\n *\n * @param existing - Currently selected files\n * @param incoming - Newly selected files to add\n * @returns Merged array with duplicates replaced\n *\n * @example\n * const existing = [file1, file2];\n * const incoming = [file2New, file3];\n * deduplicateFiles(existing, incoming) // [file1, file2New, file3]\n *\n * @see plan.md Decision 8: Duplicate File Handling\n */\nexport function deduplicateFiles(existing: File[], incoming: File[]): File[] {\n const result = [...existing];\n\n for (const file of incoming) {\n const existingIndex = result.findIndex((f) => f.name === file.name);\n if (existingIndex >= 0) {\n // Replace with new version\n result[existingIndex] = file;\n } else {\n result.push(file);\n }\n }\n\n return result;\n}\n\n/**\n * Convert human-readable file types to MIME type display\n * Used for showing accepted types in UI\n *\n * @param acceptedTypes - Array of accepted type patterns\n * @returns Human-readable string\n *\n * @example\n * formatAcceptedTypes(['image/*']) // \"images\"\n * formatAcceptedTypes(['.pdf', '.doc']) // \"PDF, DOC\"\n * formatAcceptedTypes(['application/pdf']) // \"PDF\"\n */\nexport function formatAcceptedTypes(acceptedTypes?: string[]): string {\n if (!acceptedTypes || acceptedTypes.length === 0) return 'any file';\n\n const formatted = acceptedTypes.map((type) => {\n // MIME type patterns\n if (type === 'image/*') return 'images';\n if (type === 'video/*') return 'videos';\n if (type === 'audio/*') return 'audio';\n\n // File extensions\n if (type.startsWith('.')) {\n return type.slice(1).toUpperCase();\n }\n\n // Exact MIME types - extract subtype\n if (type.includes('/')) {\n const parts = type.split('/');\n const subtype = parts[1] ?? type;\n return subtype.toUpperCase();\n }\n\n return type;\n });\n\n return formatted.join(', ');\n}\n\n// ============================================================================\n// Phase 1: Image Preview Utilities\n// ============================================================================\n\n/**\n * Threshold for image resizing (2MB)\n * Images larger than this will be resized before preview to reduce memory usage\n */\nexport const RESIZE_THRESHOLD = 2 * 1024 * 1024;\n\n/**\n * Check if a file is an image based on MIME type or extension\n *\n * @param file - File to check\n * @returns true if file is an image\n *\n * @example\n * isImageFile(jpgFile) // true\n * isImageFile(pdfFile) // false\n */\nexport function isImageFile(file: File): boolean {\n // Check MIME type first (most reliable)\n if (file.type.startsWith('image/')) {\n return true;\n }\n\n // Fallback to extension check for files with missing/incorrect MIME type\n const imageExtensions =\n /\\.(jpg|jpeg|png|gif|webp|svg|bmp|ico|avif|heic|heif|tiff|tif)$/i;\n return imageExtensions.test(file.name);\n}\n\n/**\n * Create a resized preview image using canvas\n * Used for large images (>2MB) to reduce memory usage\n *\n * @param file - Image file to resize\n * @param maxDimension - Maximum width or height (default: 200)\n * @returns Promise resolving to resized blob URL\n *\n * @example\n * const previewUrl = await createResizedPreview(largeImage, 200);\n * // Remember to call URL.revokeObjectURL(previewUrl) when done\n */\nexport async function createResizedPreview(\n file: File,\n maxDimension: number = 200\n): Promise<string> {\n return new Promise((resolve, reject) => {\n // Use window.Image for browser environment\n const img = new window.Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n // Free original object URL immediately\n URL.revokeObjectURL(objectUrl);\n\n // Calculate scaled dimensions (maintain aspect ratio)\n const scale = Math.min(\n maxDimension / img.width,\n maxDimension / img.height,\n 1 // Don't upscale\n );\n const width = Math.round(img.width * scale);\n const height = Math.round(img.height * scale);\n\n // Draw to canvas at reduced size\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context unavailable'));\n return;\n }\n\n ctx.drawImage(img, 0, 0, width, height);\n\n // Convert to blob URL\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(URL.createObjectURL(blob));\n } else {\n reject(new Error('Failed to create blob'));\n }\n },\n 'image/jpeg',\n 0.8 // Quality for JPEG compression\n );\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n reject(new Error('Failed to load image'));\n };\n\n img.src = objectUrl;\n });\n}\n\n/**\n * Generate a preview URL for a file\n * Automatically resizes large images (>2MB) to reduce memory usage\n *\n * @param file - Image file to preview\n * @param maxDimension - Maximum dimension for resized previews (default: 200)\n * @returns Promise resolving to preview blob URL\n *\n * @example\n * const previewUrl = await generatePreview(file, 100);\n * // Remember to call URL.revokeObjectURL(previewUrl) when done\n */\nexport async function generatePreview(\n file: File,\n maxDimension: number = 200\n): Promise<string> {\n if (file.size > RESIZE_THRESHOLD) {\n return createResizedPreview(file, maxDimension);\n }\n return URL.createObjectURL(file);\n}\n","/**\n * useFilePreview Hook\n *\n * Memory-efficient image preview generation with race condition protection\n * @see future-plan.md for architecture details\n */\n\nimport { useState, useEffect } from 'react';\nimport { isImageFile, generatePreview } from './utils';\n\nexport interface UseFilePreviewOptions {\n /** Whether preview generation is enabled */\n enabled?: boolean;\n /** Maximum file size for preview generation in bytes (default: 10MB) */\n maxBytes?: number;\n /** Maximum preview dimension in pixels (default: 200) */\n maxDimension?: number;\n}\n\nexport interface UseFilePreviewResult {\n /** Preview URL (blob URL) - remember to not revoke manually, hook handles cleanup */\n preview: string | null;\n /** Whether preview is currently being generated */\n isLoading: boolean;\n /** Error message if preview generation failed */\n error: string | null;\n /** Whether the file is an image */\n isImage: boolean;\n}\n\n/**\n * Hook for generating memory-efficient image previews\n *\n * Features:\n * - Uses URL.createObjectURL for better memory management\n * - Automatically resizes large images (>2MB) using canvas\n * - Race condition protection for rapid file changes\n * - Automatic cleanup of blob URLs on unmount/file change\n *\n * @param file - File to generate preview for\n * @param options - Preview configuration options\n * @returns Preview state including URL, loading, and error states\n *\n * @example\n * const { preview, isLoading, error, isImage } = useFilePreview(file, {\n * enabled: showPreviews,\n * maxBytes: 10 * 1024 * 1024,\n * maxDimension: 64\n * });\n */\nexport function useFilePreview(\n file: File,\n options: UseFilePreviewOptions = {}\n): UseFilePreviewResult {\n const { enabled = true, maxBytes = 10 * 1024 * 1024, maxDimension = 200 } = options;\n\n const [preview, setPreview] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const isImage = isImageFile(file);\n\n useEffect(() => {\n // Skip if disabled or not an image\n if (!enabled || !isImage) {\n setPreview(null);\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // Skip preview for files exceeding size limit\n if (file.size > maxBytes) {\n setPreview(null);\n setIsLoading(false);\n setError('File too large for preview');\n return;\n }\n\n // Track if effect is still active (prevents race conditions)\n let isActive = true;\n let objectUrl: string | null = null;\n\n const generatePreviewAsync = async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n // Generate preview (may resize if file > RESIZE_THRESHOLD)\n objectUrl = await generatePreview(file, maxDimension);\n\n // Only update state if effect is still active\n if (isActive) {\n setPreview(objectUrl);\n setIsLoading(false);\n } else {\n // Cleanup if component unmounted or file changed\n URL.revokeObjectURL(objectUrl);\n }\n } catch (err) {\n if (isActive) {\n setError(err instanceof Error ? err.message : 'Failed to generate preview');\n setIsLoading(false);\n setPreview(null);\n }\n }\n };\n\n generatePreviewAsync();\n\n // Cleanup: mark inactive and revoke object URL\n return () => {\n isActive = false;\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n // Also revoke current preview if it exists\n setPreview((prev) => {\n if (prev) {\n URL.revokeObjectURL(prev);\n }\n return null;\n });\n };\n }, [file, enabled, maxBytes, maxDimension, isImage]);\n\n return { preview, isLoading, error, isImage };\n}\n","\"use client\";\n\n/**\n * FilePreview Component\n *\n * Displays image thumbnail previews for files in the FileField list\n * @see future-plan.md for architecture details\n */\n\nimport { type ReactNode } from 'react';\nimport { FileIcon, ImageIcon, VideoIcon, AudioLines, Loader2 } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { useFilePreview } from './useFilePreview';\nimport { getFileIcon } from './utils';\n\nexport interface FilePreviewProps {\n /** File to preview */\n file: File;\n /** Preview size in pixels (width and height) */\n size?: number;\n /** Maximum file size for preview generation */\n maxBytes?: number;\n /** Custom renderer for non-image files */\n renderPreview?: (file: File) => ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * FilePreview Component\n *\n * Displays a thumbnail preview for image files, or an appropriate icon for other file types.\n * Includes loading and error states with accessible feedback.\n */\nexport function FilePreview({\n file,\n size = 64,\n maxBytes = 10 * 1024 * 1024,\n renderPreview,\n className,\n}: FilePreviewProps) {\n const { preview, isLoading, error, isImage } = useFilePreview(file, {\n enabled: true,\n maxBytes,\n maxDimension: size * 2, // Generate at 2x for retina displays\n });\n\n // Container size styles\n const sizeStyles = {\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n };\n\n // If custom renderer provided and not an image, use it\n if (!isImage && renderPreview) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center rounded-md overflow-hidden',\n 'bg-[var(--accent-background)]',\n className\n )}\n style={sizeStyles}\n >\n {renderPreview(file)}\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center rounded-md overflow-hidden',\n 'bg-[var(--accent-background)]',\n className\n )}\n style={sizeStyles}\n aria-busy=\"true\"\n aria-label={`Loading preview for ${file.name}`}\n >\n <Loader2\n className=\"h-4 w-4 animate-spin text-[var(--menu-muted)]\"\n aria-hidden=\"true\"\n />\n </div>\n );\n }\n\n // Image preview\n if (isImage && preview && !error) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center rounded-md overflow-hidden',\n 'bg-[var(--accent-background)]',\n className\n )}\n style={sizeStyles}\n >\n <img\n src={preview}\n alt={file.name}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n </div>\n );\n }\n\n // Error state or non-image file: show icon\n const iconType = getFileIcon(file);\n const IconComponent = getIconForType(iconType);\n\n // Calculate icon size (roughly 40% of container)\n const iconSize = Math.max(16, Math.floor(size * 0.4));\n\n return (\n <div\n className={cn(\n 'flex items-center justify-center rounded-md overflow-hidden',\n 'bg-[var(--accent-background)]',\n className\n )}\n style={sizeStyles}\n aria-label={error ? `Preview unavailable for ${file.name}` : undefined}\n >\n <IconComponent\n className=\"text-[var(--menu-muted)]\"\n style={{ width: iconSize, height: iconSize }}\n aria-hidden=\"true\"\n />\n </div>\n );\n}\n\n/**\n * Get icon component for file type\n */\nfunction getIconForType(\n iconType: 'file' | 'image' | 'video' | 'audio'\n): typeof FileIcon {\n switch (iconType) {\n case 'image':\n return ImageIcon;\n case 'video':\n return VideoIcon;\n case 'audio':\n return AudioLines;\n default:\n return FileIcon;\n }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * FileProgress CVA Variants\n *\n * Type-safe variant definitions for upload progress component\n * Following Themis styling patterns with CSS variable references\n *\n * @see future-plan.md Section 2: Upload Progress Indication\n * @see constitution.md Principle IV: 7:1 contrast ratio\n */\n\n/**\n * Container variants for the FileProgress wrapper\n * Controls spacing and text sizing\n */\nexport const fileProgressVariants = cva(\n ['flex', 'flex-col', 'gap-1', 'w-full'],\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Progress bar track variants (background)\n */\nexport const fileProgressTrackVariants = cva(\n ['rounded-full', 'bg-[var(--accent-background)]', 'overflow-hidden'],\n {\n variants: {\n size: {\n sm: 'h-1.5',\n default: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Progress bar fill variants\n * Uses shimmer animation for pending (indeterminate) state\n *\n * WCAG 2.2 AAA: High contrast colors for all states\n */\nexport const fileProgressBarVariants = cva(\n ['h-full', 'rounded-full', 'transition-all', 'duration-300'],\n {\n variants: {\n status: {\n pending: [\n 'bg-gradient-to-r',\n 'from-[var(--menu-muted)]',\n 'via-[var(--accent-background)]',\n 'to-[var(--menu-muted)]',\n 'bg-[length:200%_100%]',\n 'animate-progress-shimmer',\n ],\n uploading: 'bg-[var(--primary)]',\n complete: 'bg-[var(--success)]',\n error: 'bg-[var(--destructive)]',\n },\n },\n defaultVariants: {\n status: 'pending',\n },\n }\n);\n\n/**\n * Header row variants (filename + status)\n */\nexport const fileProgressHeaderVariants = cva(\n ['flex', 'items-center', 'justify-between', 'gap-2'],\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Error message variants\n */\nexport const fileProgressErrorVariants = cva(\n [\n 'flex',\n 'items-center',\n 'justify-between',\n 'gap-2',\n 'mt-1',\n 'text-[var(--destructive)]',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Retry button variants\n * 44x44px minimum touch target for WCAG 2.2 AAA\n */\nexport const fileProgressRetryVariants = cva(\n [\n 'underline',\n 'hover:no-underline',\n 'min-h-[44px]',\n 'min-w-[44px]',\n 'inline-flex',\n 'items-center',\n 'justify-center',\n // Negative margin to visually appear smaller while maintaining touch target\n '-mr-3',\n '-my-2',\n // Focus styling\n 'focus-visible:outline-none',\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n 'rounded',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n// Export variant prop types for consumers\nexport type FileProgressVariants = VariantProps<typeof fileProgressVariants>;\nexport type FileProgressBarVariants = VariantProps<typeof fileProgressBarVariants>;\nexport type FileProgressTrackVariants = VariantProps<typeof fileProgressTrackVariants>;\n","\"use client\";\n\n/**\n * FileProgress Component\n *\n * Accessible upload progress indicator using React Aria ProgressBar\n * WCAG 2.2 AAA compliant with shimmer animation for pending state\n *\n * @see future-plan.md Section 2: Upload Progress Indication\n * @see React Aria ProgressBar: https://react-aria.adobe.com/ProgressBar\n */\n\nimport { ProgressBar, Button } from 'react-aria-components';\nimport { cn } from '../../utils/cn';\nimport { truncateFileName } from './utils';\nimport {\n fileProgressVariants,\n fileProgressTrackVariants,\n fileProgressBarVariants,\n fileProgressHeaderVariants,\n fileProgressErrorVariants,\n fileProgressRetryVariants,\n} from './FileProgress.variants';\n\n/**\n * Upload status for progress indication\n */\nexport type FileProgressStatus = 'pending' | 'uploading' | 'complete' | 'error';\n\n/**\n * FileProgress component props\n */\nexport interface FileProgressProps {\n /** File being uploaded */\n file: File;\n /** Progress percentage (0-100) */\n progress: number;\n /** Current upload status */\n status: FileProgressStatus;\n /** Error message when status is 'error' */\n error?: string;\n /** Callback when user clicks retry */\n onRetry?: () => void;\n /** Size variant */\n size?: 'sm' | 'default' | 'lg';\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Get status display text\n */\nfunction getStatusText(status: FileProgressStatus, progress: number): string {\n switch (status) {\n case 'pending':\n return 'Waiting...';\n case 'uploading':\n return `${progress}%`;\n case 'complete':\n return 'Complete';\n case 'error':\n return 'Failed';\n }\n}\n\n/**\n * FileProgress Component\n *\n * Displays upload progress for a single file with accessible progress bar,\n * status announcements, and retry functionality for failed uploads.\n */\nfunction FileProgress({\n file,\n progress,\n status,\n error,\n onRetry,\n size = 'default',\n className,\n}: FileProgressProps) {\n const isIndeterminate = status === 'pending';\n const errorId = `progress-error-${file.name.replace(/[^a-zA-Z0-9]/g, '-')}`;\n const statusText = getStatusText(status, progress);\n\n return (\n <div className={cn(fileProgressVariants({ size }), className)}>\n <ProgressBar\n aria-label={file.name}\n value={isIndeterminate ? undefined : progress}\n isIndeterminate={isIndeterminate}\n aria-describedby={status === 'error' && error ? errorId : undefined}\n >\n {({ percentage, valueText }) => (\n <>\n {/* Header: filename + status */}\n <div className={fileProgressHeaderVariants({ size })}>\n <span className=\"truncate\" title={file.name}>\n {truncateFileName(file.name, 30)}\n </span>\n <span className=\"text-[var(--menu-muted)] flex-shrink-0\">\n {status === 'error' ? 'Failed' : valueText ?? statusText}\n </span>\n </div>\n\n {/* Progress bar */}\n <div className={fileProgressTrackVariants({ size })}>\n <div\n className={fileProgressBarVariants({ status })}\n style={{\n width: isIndeterminate ? '100%' : `${percentage ?? 0}%`,\n }}\n />\n </div>\n </>\n )}\n </ProgressBar>\n\n {/* Error message and retry button */}\n {status === 'error' && error && (\n <div\n id={errorId}\n className={fileProgressErrorVariants({ size })}\n >\n <span>{error}</span>\n {onRetry && (\n <Button\n onPress={onRetry}\n className={fileProgressRetryVariants({ size })}\n >\n Retry\n </Button>\n )}\n </div>\n )}\n\n {/* Live region for screen reader announcements */}\n <div\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n >\n {status === 'complete' && `${file.name} upload complete`}\n {status === 'error' && `${file.name} upload failed${error ? `: ${error}` : ''}`}\n </div>\n </div>\n );\n}\n\nFileProgress.displayName = 'FileProgress';\n\nexport { FileProgress };\n","\"use client\";\n\n/**\n * FileField Component - Accessible file selection input\n *\n * Built with React Aria FileTrigger primitive and custom drag-and-drop\n * WCAG 2.2 AAA compliant (7:1 contrast, 44x44px touch targets)\n *\n * @see plan.md for architecture details\n * @see filefield-prd.md for requirements\n */\n\nimport {\n forwardRef,\n useId,\n useState,\n useCallback,\n useRef,\n type DragEvent,\n} from 'react';\nimport { FileTrigger } from 'react-aria-components';\nimport { Button } from '../Button';\nimport { Upload, X, FileIcon, ImageIcon, VideoIcon, AudioLines } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport type { FileFieldProps, ValidationResult } from './FileField.types';\nimport {\n fileFieldContainerVariants,\n fileFieldDropZoneVariants,\n fileFieldTriggerVariants,\n fileFieldListVariants,\n fileFieldListHeaderVariants,\n fileFieldItemVariants,\n fileFieldRemoveButtonVariants,\n fileFieldErrorVariants,\n fileFieldSuccessVariants,\n fileFieldDescriptionVariants,\n fileFieldLabelVariants,\n} from './FileField.variants';\nimport {\n formatFileSize,\n truncateFileName,\n isFileTypeAccepted,\n getFileIcon,\n deduplicateFiles,\n} from './utils';\nimport { FilePreview } from './FilePreview';\nimport { FileProgress } from './FileProgress';\n\n/**\n * FileField Component\n *\n * Accessible file selection input with drag-and-drop support\n */\nconst FileField = forwardRef<HTMLDivElement, FileFieldProps>(\n function FileField(\n {\n // Required\n label,\n\n // File selection\n acceptedFileTypes,\n allowsMultiple = false,\n\n // Constraints\n maxFileSize,\n maxFiles,\n\n // Display\n description,\n errorMessage,\n successMessage,\n triggerText,\n\n // States\n isRequired,\n isDisabled,\n isInvalid,\n isValid,\n\n // Variants\n size = 'default',\n\n // Form integration\n name,\n id,\n className,\n\n // Value (controlled)\n value = [],\n\n // Events\n onChange,\n validate,\n\n // Phase 1: Image Previews\n showPreviews = false,\n previewSize = 64,\n maxPreviewBytes = 10 * 1024 * 1024,\n renderPreview,\n\n // Phase 1: Upload Progress (will be used later)\n showProgress = false,\n uploadProgress,\n uploadStatus,\n uploadErrors,\n onRetry,\n\n // Standard\n 'data-testid': dataTestId,\n 'aria-label': _ariaLabel,\n 'aria-labelledby': _ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) {\n // Generate unique IDs\n const generatedId = useId();\n const fieldId = id ?? generatedId;\n const labelId = `${fieldId}-label`;\n const descriptionId = `${fieldId}-description`;\n const errorId = `${fieldId}-error`;\n\n // Internal state\n const [isDragOver, setIsDragOver] = useState(false);\n const [internalError, setInternalError] = useState<string | null>(null);\n const dragCounterRef = useRef(0);\n\n // Determine which error to show (external takes precedence)\n const displayError = errorMessage ?? internalError;\n const hasError = isInvalid || !!displayError;\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n if (ariaDescribedBy) describedByParts.push(ariaDescribedBy);\n if (description) describedByParts.push(descriptionId);\n if (displayError) describedByParts.push(errorId);\n const describedBy = describedByParts.length > 0 ? describedByParts.join(' ') : undefined;\n\n /**\n * Validate files against constraints\n */\n const validateFiles = useCallback(\n (files: File[], existingFiles: File[] = []): ValidationResult => {\n const validFiles: File[] = [];\n const errors: string[] = [];\n\n for (const file of files) {\n // Check file type\n if (acceptedFileTypes && !isFileTypeAccepted(file, acceptedFileTypes)) {\n errors.push(`\"${file.name}\" has an invalid file type`);\n continue;\n }\n\n // Check file size\n if (maxFileSize && file.size > maxFileSize) {\n errors.push(\n `\"${file.name}\" exceeds the maximum size of ${formatFileSize(maxFileSize)}`\n );\n continue;\n }\n\n validFiles.push(file);\n }\n\n // Check total count (after deduplication with existing files)\n if (maxFiles && allowsMultiple) {\n const combined = deduplicateFiles(existingFiles, validFiles);\n if (combined.length > maxFiles) {\n errors.push(`Maximum ${maxFiles} files allowed`);\n return { valid: [], errors };\n }\n }\n\n return { valid: validFiles, errors };\n },\n [acceptedFileTypes, maxFileSize, maxFiles, allowsMultiple]\n );\n\n /**\n * Process selected/dropped files\n */\n const processFiles = useCallback(\n (fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return;\n\n // Clear internal error on new attempt\n setInternalError(null);\n\n const newFiles = Array.from(fileList);\n\n // Validate files\n const existingFiles = allowsMultiple ? value : [];\n const { valid, errors } = validateFiles(newFiles, existingFiles);\n\n if (errors.length > 0) {\n setInternalError(errors[0] ?? 'Invalid file');\n return;\n }\n\n // Run custom validation if provided\n if (validate && valid.length > 0) {\n const customError = validate(\n allowsMultiple ? deduplicateFiles(existingFiles, valid) : valid\n );\n if (customError) {\n setInternalError(customError);\n return;\n }\n }\n\n // Calculate final file list\n let finalFiles: File[];\n if (allowsMultiple) {\n finalFiles = deduplicateFiles(existingFiles, valid);\n } else {\n finalFiles = valid.slice(0, 1);\n }\n\n onChange?.(finalFiles);\n },\n [allowsMultiple, value, validateFiles, validate, onChange]\n );\n\n /**\n * Handle FileTrigger selection\n */\n const handleSelect = useCallback(\n (fileList: FileList | null) => {\n processFiles(fileList);\n },\n [processFiles]\n );\n\n /**\n * Handle file removal\n */\n const handleRemove = useCallback(\n (fileToRemove: File) => {\n const newFiles = value.filter((f) => f !== fileToRemove);\n onChange?.(newFiles);\n },\n [value, onChange]\n );\n\n /**\n * Handle clear all\n */\n const handleClearAll = useCallback(() => {\n onChange?.([]);\n }, [onChange]);\n\n // Drag and drop handlers\n const handleDragEnter = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (isDisabled) return;\n\n dragCounterRef.current++;\n setIsDragOver(true);\n },\n [isDisabled]\n );\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n },\n []\n );\n\n const handleDragLeave = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n dragCounterRef.current--;\n if (dragCounterRef.current === 0) {\n setIsDragOver(false);\n }\n },\n []\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n dragCounterRef.current = 0;\n setIsDragOver(false);\n\n if (isDisabled) return;\n\n const files = e.dataTransfer?.files;\n processFiles(files ?? null);\n },\n [isDisabled, processFiles]\n );\n\n /**\n * Get icon component for file type\n */\n const getIconComponent = (file: File) => {\n const iconType = getFileIcon(file);\n switch (iconType) {\n case 'image':\n return ImageIcon;\n case 'video':\n return VideoIcon;\n case 'audio':\n return AudioLines;\n default:\n return FileIcon;\n }\n };\n\n // Build accept string for file input\n const acceptString = acceptedFileTypes?.join(',');\n\n return (\n <div\n ref={ref}\n id={fieldId}\n className={cn(fileFieldContainerVariants({ size }), className)}\n data-testid={dataTestId ?? 'file-field'}\n {...props}\n >\n {/* Label */}\n <label\n id={labelId}\n className={fileFieldLabelVariants({ size, isRequired })}\n >\n {label}\n </label>\n\n {/* Drop Zone */}\n <div\n role=\"group\"\n data-testid={`${dataTestId ?? 'file-field'}-dropzone`}\n className={cn(\n 'drop-zone', // Added for test selectors\n fileFieldDropZoneVariants({\n size,\n isDragOver,\n isInvalid: hasError,\n isDisabled,\n })\n )}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n aria-labelledby={labelId}\n aria-describedby={describedBy}\n aria-disabled={isDisabled || undefined}\n >\n <FileTrigger\n acceptedFileTypes={acceptedFileTypes}\n allowsMultiple={allowsMultiple}\n onSelect={handleSelect}\n >\n <Button\n variant=\"outline\"\n isDisabled={isDisabled}\n buttonVisualClassName={fileFieldTriggerVariants({ size })}\n >\n <Upload className=\"h-4 w-4\" aria-hidden=\"true\" />\n {isDragOver\n ? 'Drop files here'\n : triggerText ?? (allowsMultiple ? 'Choose files' : 'Choose file')}\n </Button>\n </FileTrigger>\n\n {/* Hidden file input for name attribute */}\n {name && (\n <input\n type=\"file\"\n name={name}\n accept={acceptString}\n multiple={allowsMultiple}\n disabled={isDisabled}\n className=\"sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {/* Description */}\n {description && (\n <p\n id={descriptionId}\n className={fileFieldDescriptionVariants({ size })}\n >\n {description}\n </p>\n )}\n\n {/* File List */}\n {value.length > 0 && (\n <div className={fileFieldListVariants({ size })}>\n {/* List Header with Clear All */}\n {value.length >= 2 && (\n <div className={fileFieldListHeaderVariants({ size })}>\n <span className=\"text-[var(--menu-muted)]\">\n {value.length} files selected\n </span>\n <Button\n variant=\"link\"\n visualSize=\"sm\"\n onPress={handleClearAll}\n buttonVisualClassName={cn(\n 'text-[var(--menu-muted)] hover:text-[var(--destructive)]',\n 'underline-offset-4 hover:underline'\n )}\n aria-label=\"Clear all files\"\n >\n Clear all\n </Button>\n </div>\n )}\n\n {/* File Items */}\n <ul className=\"space-y-2\">\n {value.map((file, index) => {\n const IconComponent = getIconComponent(file);\n // Calculate preview size based on field size variant\n const effectivePreviewSize =\n size === 'sm' ? Math.min(previewSize, 40) :\n size === 'lg' ? Math.min(previewSize, 80) :\n Math.min(previewSize, 48);\n\n // Check if we should show progress for this file\n const fileStatus = uploadStatus?.[index];\n const fileProgress = uploadProgress?.[index] ?? 0;\n const fileError = uploadErrors?.get(index);\n const showProgressForFile = showProgress && fileStatus !== undefined;\n\n return (\n <li\n key={`${file.name}-${index}`}\n className={showProgressForFile ? 'p-3' : fileFieldItemVariants({ size })}\n >\n {showProgressForFile ? (\n <FileProgress\n file={file}\n progress={fileProgress}\n status={fileStatus}\n error={fileError}\n onRetry={onRetry ? () => onRetry(index) : undefined}\n size={size}\n />\n ) : (\n <>\n <div className=\"flex items-center gap-2 min-w-0\">\n {showPreviews ? (\n <FilePreview\n file={file}\n size={effectivePreviewSize}\n maxBytes={maxPreviewBytes}\n renderPreview={renderPreview}\n className=\"flex-shrink-0\"\n />\n ) : (\n <IconComponent\n className=\"h-4 w-4 flex-shrink-0 text-[var(--menu-muted)]\"\n aria-hidden=\"true\"\n />\n )}\n <span className=\"truncate\" title={file.name}>\n {truncateFileName(file.name, 30)}\n </span>\n <span className=\"text-[var(--menu-muted)] flex-shrink-0\">\n {formatFileSize(file.size)}\n </span>\n </div>\n <Button\n variant=\"ghost\"\n visualSize=\"icon\"\n onPress={() => handleRemove(file)}\n buttonVisualClassName={fileFieldRemoveButtonVariants({ size })}\n aria-label={`Remove ${file.name}`}\n isDisabled={isDisabled}\n >\n <X className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n </>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n {/* Error Message */}\n {displayError && (\n <p\n id={errorId}\n role=\"alert\"\n className={fileFieldErrorVariants({ size })}\n >\n {displayError}\n </p>\n )}\n\n {/* Success Message */}\n {!displayError && isValid && successMessage && (\n <p className={fileFieldSuccessVariants({ size })}>\n {successMessage}\n </p>\n )}\n </div>\n );\n }\n);\n\nFileField.displayName = 'FileField';\n\nexport { FileField };\n","import type { ReactNode } from 'react';\nimport { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\n\n/**\n * FileField props schema extending BaseComponentProps\n *\n * @see filefield-prd.md for full requirements\n * @see plan.md for architectural decisions\n * @see React Aria FileTrigger: https://react-aria.adobe.com/FileTrigger\n */\nexport const FileFieldPropsSchema = BaseComponentPropsSchema.extend({\n // Required\n /** Label text for the file field (required for accessibility) */\n label: z.string(),\n\n // File selection\n /**\n * Array of accepted file types (MIME types or extensions)\n * @example ['application/pdf', 'image/*', '.docx']\n */\n acceptedFileTypes: z.array(z.string()).optional(),\n\n /** Allow selecting multiple files */\n allowsMultiple: z.boolean().default(false),\n\n // Constraints\n /** Maximum file size in bytes */\n maxFileSize: z.number().optional(),\n\n /** Maximum number of files (only applies when allowsMultiple is true) */\n maxFiles: z.number().optional(),\n\n // Display\n /** Description text shown below the drop zone */\n description: z.string().optional(),\n\n /** Error message from external validation */\n errorMessage: z.string().optional(),\n\n /** Success message when files are valid */\n successMessage: z.string().optional(),\n\n /** Custom text for the trigger button */\n triggerText: z.string().optional(),\n\n // States\n /** Mark field as required */\n isRequired: z.boolean().optional(),\n\n /** Disable the field */\n isDisabled: z.boolean().optional(),\n\n /** Show invalid state styling */\n isInvalid: z.boolean().optional(),\n\n /** Show valid state styling */\n isValid: z.boolean().optional(),\n\n // Variants\n /** Size variant */\n size: z.enum(['sm', 'default', 'lg']).default('default'),\n\n // Form integration\n /** Name attribute for form association */\n name: z.string().optional(),\n\n // === Phase 1: Image Previews ===\n /** Enable image thumbnail previews (default: false) */\n showPreviews: z.boolean().default(false),\n\n /** Maximum preview dimension in pixels (default: 64) */\n previewSize: z.number().min(16).max(256).default(64),\n\n /** Maximum file size for preview generation in bytes (default: 10MB) */\n maxPreviewBytes: z.number().default(10 * 1024 * 1024),\n\n // === Phase 1: Upload Progress ===\n /** Enable upload progress display (default: false) */\n showProgress: z.boolean().default(false),\n\n /** Progress values per file (0-100), indexed parallel to files array */\n uploadProgress: z.array(z.number().min(0).max(100)).optional(),\n\n /** Upload status per file, indexed parallel to files array */\n uploadStatus: z\n .array(z.enum(['pending', 'uploading', 'complete', 'error']))\n .optional(),\n})\n .refine(\n (data) => !(data.successMessage && data.errorMessage),\n {\n message:\n 'Cannot provide both successMessage and errorMessage. Use one based on validation state.',\n path: ['successMessage'],\n }\n )\n .refine(\n (data) => {\n // Development mode warning for conflicting validation states\n if (\n typeof process !== 'undefined' &&\n process.env.NODE_ENV === 'development'\n ) {\n if (data.isValid && data.isInvalid) {\n console.error(\n '[FileField] Both isValid and isInvalid are true. isInvalid takes precedence.'\n );\n }\n }\n return true;\n }\n );\n\n/**\n * FileField component props type\n *\n * Includes Zod-validated props plus event handlers that can't be validated by Zod\n */\n/**\n * Upload status for progress indication\n */\nexport type UploadStatus = 'pending' | 'uploading' | 'complete' | 'error';\n\nexport type FileFieldProps = Omit<\n z.infer<typeof FileFieldPropsSchema>,\n 'children'\n> & {\n /** Controlled value - array of selected files */\n value?: File[];\n\n /** Callback when files change */\n onChange?: (files: File[]) => void;\n\n /**\n * Custom validation function\n * Called after internal validation (type, size, count)\n * Return a string to display as error, or undefined/null if valid\n */\n validate?: (files: File[]) => string | undefined | null;\n\n // === Phase 1: Image Previews ===\n /** Custom preview renderer for non-image files */\n renderPreview?: (file: File) => ReactNode;\n\n // === Phase 1: Upload Progress ===\n /** Error messages per file index */\n uploadErrors?: Map<number, string>;\n\n /** Callback when user requests retry for failed upload */\n onRetry?: (fileIndex: number) => void;\n};\n\n/**\n * File field size variants\n */\nexport type FileFieldSize = NonNullable<\n z.infer<typeof FileFieldPropsSchema>['size']\n>;\n\n/**\n * Internal drag state for drop zone styling\n */\nexport type DragState = 'idle' | 'drag-over' | 'drag-invalid';\n\n/**\n * Validation result from internal validation\n */\nexport interface ValidationResult {\n /** Files that passed validation */\n valid: File[];\n /** Error messages for files that failed */\n errors: string[];\n}\n"]}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkB5Q4UPL6_js = require('./chunk-B5Q4UPL6.js');
|
|
4
|
+
var chunkVIREG536_js = require('./chunk-VIREG536.js');
|
|
5
|
+
var chunkT4COXKQ3_js = require('./chunk-T4COXKQ3.js');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var reactAriaComponents = require('react-aria-components');
|
|
8
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
var zod = require('zod');
|
|
11
|
+
|
|
12
|
+
var checkboxContainerVariants = classVarianceAuthority.cva(
|
|
13
|
+
[
|
|
14
|
+
"group inline-flex items-center gap-2 cursor-pointer",
|
|
15
|
+
"transition-colors duration-200",
|
|
16
|
+
"rtl:flex-row-reverse",
|
|
17
|
+
chunkB5Q4UPL6_js.FOCUS_STYLES,
|
|
18
|
+
chunkB5Q4UPL6_js.HIGH_CONTRAST_FOCUS
|
|
19
|
+
].join(" "),
|
|
20
|
+
{
|
|
21
|
+
variants: {
|
|
22
|
+
size: {
|
|
23
|
+
sm: "min-h-[44px] text-sm",
|
|
24
|
+
default: "min-h-[44px] text-sm",
|
|
25
|
+
lg: "min-h-[48px] text-base"
|
|
26
|
+
},
|
|
27
|
+
isDisabled: {
|
|
28
|
+
true: "opacity-50 cursor-not-allowed",
|
|
29
|
+
false: ""
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
defaultVariants: {
|
|
33
|
+
size: "default",
|
|
34
|
+
isDisabled: false
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
var checkboxIndicatorVariants = classVarianceAuthority.cva(
|
|
39
|
+
"flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200",
|
|
40
|
+
{
|
|
41
|
+
variants: {
|
|
42
|
+
variant: {
|
|
43
|
+
default: [
|
|
44
|
+
"border-[var(--border)]",
|
|
45
|
+
"data-[selected]:border-[var(--primary)]",
|
|
46
|
+
"data-[selected]:bg-[var(--primary)]",
|
|
47
|
+
"data-[indeterminate]:border-[var(--primary)]",
|
|
48
|
+
"data-[indeterminate]:bg-[var(--primary)]"
|
|
49
|
+
].join(" "),
|
|
50
|
+
destructive: [
|
|
51
|
+
"border-[var(--border)]",
|
|
52
|
+
"data-[selected]:border-[var(--destructive)]",
|
|
53
|
+
"data-[selected]:bg-[var(--destructive)]",
|
|
54
|
+
"data-[indeterminate]:border-[var(--destructive)]",
|
|
55
|
+
"data-[indeterminate]:bg-[var(--destructive)]"
|
|
56
|
+
].join(" ")
|
|
57
|
+
},
|
|
58
|
+
size: {
|
|
59
|
+
sm: "h-4 w-4",
|
|
60
|
+
default: "h-5 w-5",
|
|
61
|
+
lg: "h-6 w-6"
|
|
62
|
+
},
|
|
63
|
+
isInvalid: {
|
|
64
|
+
true: "border-[var(--destructive)]",
|
|
65
|
+
false: ""
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
defaultVariants: {
|
|
69
|
+
variant: "default",
|
|
70
|
+
size: "default",
|
|
71
|
+
isInvalid: false
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
var checkmarkVariants = classVarianceAuthority.cva(
|
|
76
|
+
[
|
|
77
|
+
"transition-transform duration-200",
|
|
78
|
+
"[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]",
|
|
79
|
+
"motion-reduce:transition-none",
|
|
80
|
+
"scale-0 data-[selected]:scale-100 data-[indeterminate]:scale-100"
|
|
81
|
+
].join(" "),
|
|
82
|
+
{
|
|
83
|
+
variants: {
|
|
84
|
+
variant: {
|
|
85
|
+
default: "text-[var(--primary-foreground)]",
|
|
86
|
+
destructive: "text-[var(--destructive-foreground)]"
|
|
87
|
+
},
|
|
88
|
+
size: {
|
|
89
|
+
sm: "h-3 w-3",
|
|
90
|
+
default: "h-3.5 w-3.5",
|
|
91
|
+
lg: "h-4 w-4"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
defaultVariants: {
|
|
95
|
+
variant: "default",
|
|
96
|
+
size: "default"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
function CheckmarkIcon({ className, ...props }) {
|
|
101
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
"svg",
|
|
103
|
+
{
|
|
104
|
+
className,
|
|
105
|
+
viewBox: "0 0 24 24",
|
|
106
|
+
fill: "none",
|
|
107
|
+
stroke: "currentColor",
|
|
108
|
+
strokeWidth: 3,
|
|
109
|
+
strokeLinecap: "round",
|
|
110
|
+
strokeLinejoin: "round",
|
|
111
|
+
"aria-hidden": "true",
|
|
112
|
+
...props,
|
|
113
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" })
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
function MinusIcon({ className, ...props }) {
|
|
118
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
+
"svg",
|
|
120
|
+
{
|
|
121
|
+
className,
|
|
122
|
+
viewBox: "0 0 24 24",
|
|
123
|
+
fill: "none",
|
|
124
|
+
stroke: "currentColor",
|
|
125
|
+
strokeWidth: 3,
|
|
126
|
+
strokeLinecap: "round",
|
|
127
|
+
strokeLinejoin: "round",
|
|
128
|
+
"aria-hidden": "true",
|
|
129
|
+
...props,
|
|
130
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "5", y1: "12", x2: "19", y2: "12" })
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
var Checkbox = react.forwardRef(
|
|
135
|
+
({
|
|
136
|
+
isSelected,
|
|
137
|
+
defaultSelected,
|
|
138
|
+
isDisabled,
|
|
139
|
+
isReadOnly,
|
|
140
|
+
isIndeterminate,
|
|
141
|
+
isInvalid = false,
|
|
142
|
+
isRequired = false,
|
|
143
|
+
onChange,
|
|
144
|
+
onFocusChange,
|
|
145
|
+
value,
|
|
146
|
+
name,
|
|
147
|
+
size = "default",
|
|
148
|
+
variant = "default",
|
|
149
|
+
label,
|
|
150
|
+
description,
|
|
151
|
+
selectedIcon,
|
|
152
|
+
className,
|
|
153
|
+
id,
|
|
154
|
+
"aria-label": ariaLabel,
|
|
155
|
+
"aria-labelledby": ariaLabelledby,
|
|
156
|
+
"aria-describedby": ariaDescribedby,
|
|
157
|
+
"data-testid": dataTestId,
|
|
158
|
+
slot
|
|
159
|
+
}, ref) => {
|
|
160
|
+
const computedIsDisabled = isDisabled || void 0;
|
|
161
|
+
const computedIsReadOnly = isReadOnly || void 0;
|
|
162
|
+
const computedIsIndeterminate = isIndeterminate || void 0;
|
|
163
|
+
const renderIcon = (isChecked, isIndet) => {
|
|
164
|
+
const iconClassName = chunkVIREG536_js.cn(checkmarkVariants({ variant, size }));
|
|
165
|
+
const dataSelected = isChecked || void 0;
|
|
166
|
+
const dataIndeterminate = isIndet || void 0;
|
|
167
|
+
if (isIndet) {
|
|
168
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
169
|
+
MinusIcon,
|
|
170
|
+
{
|
|
171
|
+
className: iconClassName,
|
|
172
|
+
"data-selected": dataSelected,
|
|
173
|
+
"data-indeterminate": dataIndeterminate
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
if (selectedIcon && isChecked) {
|
|
178
|
+
if (react.isValidElement(selectedIcon)) {
|
|
179
|
+
const iconElement = selectedIcon;
|
|
180
|
+
return react.cloneElement(iconElement, {
|
|
181
|
+
className: chunkVIREG536_js.cn(iconClassName, iconElement.props.className),
|
|
182
|
+
"data-selected": dataSelected
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: iconClassName, "data-selected": dataSelected, children: selectedIcon });
|
|
186
|
+
}
|
|
187
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
188
|
+
CheckmarkIcon,
|
|
189
|
+
{
|
|
190
|
+
className: iconClassName,
|
|
191
|
+
"data-selected": dataSelected,
|
|
192
|
+
"data-indeterminate": dataIndeterminate
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
197
|
+
reactAriaComponents.Checkbox,
|
|
198
|
+
{
|
|
199
|
+
ref,
|
|
200
|
+
id,
|
|
201
|
+
isSelected,
|
|
202
|
+
defaultSelected,
|
|
203
|
+
isDisabled: computedIsDisabled,
|
|
204
|
+
isReadOnly: computedIsReadOnly,
|
|
205
|
+
isIndeterminate: computedIsIndeterminate,
|
|
206
|
+
isInvalid,
|
|
207
|
+
isRequired,
|
|
208
|
+
onChange,
|
|
209
|
+
onFocusChange,
|
|
210
|
+
value,
|
|
211
|
+
name,
|
|
212
|
+
slot,
|
|
213
|
+
"aria-label": ariaLabel,
|
|
214
|
+
"aria-labelledby": ariaLabelledby,
|
|
215
|
+
"aria-describedby": ariaDescribedby,
|
|
216
|
+
"data-testid": dataTestId,
|
|
217
|
+
className: (renderProps) => chunkVIREG536_js.cn(
|
|
218
|
+
checkboxContainerVariants({
|
|
219
|
+
size,
|
|
220
|
+
isDisabled: renderProps.isDisabled
|
|
221
|
+
}),
|
|
222
|
+
className
|
|
223
|
+
),
|
|
224
|
+
children: (renderProps) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
225
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
+
"div",
|
|
227
|
+
{
|
|
228
|
+
className: checkboxIndicatorVariants({
|
|
229
|
+
variant,
|
|
230
|
+
size,
|
|
231
|
+
isInvalid: renderProps.isInvalid
|
|
232
|
+
}),
|
|
233
|
+
"data-selected": renderProps.isSelected || void 0,
|
|
234
|
+
"data-indeterminate": renderProps.isIndeterminate || void 0,
|
|
235
|
+
children: renderIcon(renderProps.isSelected, renderProps.isIndeterminate)
|
|
236
|
+
}
|
|
237
|
+
),
|
|
238
|
+
(label || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
239
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-[var(--content-foreground)]", children: label }),
|
|
240
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-[var(--menu-muted)]", children: description })
|
|
241
|
+
] })
|
|
242
|
+
] })
|
|
243
|
+
}
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
);
|
|
247
|
+
Checkbox.displayName = "Checkbox";
|
|
248
|
+
var CheckboxSizeSchema = zod.z.enum(["sm", "default", "lg"]);
|
|
249
|
+
var CheckboxVariantSchema = zod.z.enum(["default", "destructive"]);
|
|
250
|
+
var CheckboxPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
|
|
251
|
+
// State management (controlled/uncontrolled)
|
|
252
|
+
isSelected: zod.z.boolean().optional(),
|
|
253
|
+
defaultSelected: zod.z.boolean().optional(),
|
|
254
|
+
onChange: zod.z.custom().optional(),
|
|
255
|
+
// Variants (matching Switch/Button pattern)
|
|
256
|
+
variant: CheckboxVariantSchema.optional(),
|
|
257
|
+
size: CheckboxSizeSchema.optional(),
|
|
258
|
+
// States
|
|
259
|
+
isDisabled: zod.z.boolean().optional(),
|
|
260
|
+
isReadOnly: zod.z.boolean().optional(),
|
|
261
|
+
isIndeterminate: zod.z.boolean().optional(),
|
|
262
|
+
isInvalid: zod.z.boolean().optional(),
|
|
263
|
+
isRequired: zod.z.boolean().optional(),
|
|
264
|
+
// Labels (optional built-in labeling)
|
|
265
|
+
label: zod.z.string().optional(),
|
|
266
|
+
description: zod.z.string().optional(),
|
|
267
|
+
// Form integration
|
|
268
|
+
value: zod.z.string().optional(),
|
|
269
|
+
name: zod.z.string().optional(),
|
|
270
|
+
// Custom icon
|
|
271
|
+
selectedIcon: zod.z.any().optional(),
|
|
272
|
+
// ReactNode
|
|
273
|
+
// React Aria slot integration (e.g., for Table)
|
|
274
|
+
slot: zod.z.string().optional(),
|
|
275
|
+
// React Aria CheckboxProps integration
|
|
276
|
+
onFocus: zod.z.custom().optional(),
|
|
277
|
+
onBlur: zod.z.custom().optional(),
|
|
278
|
+
onFocusChange: zod.z.custom().optional(),
|
|
279
|
+
autoFocus: zod.z.boolean().optional()
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
exports.Checkbox = Checkbox;
|
|
283
|
+
exports.CheckboxPropsSchema = CheckboxPropsSchema;
|
|
284
|
+
exports.CheckboxSizeSchema = CheckboxSizeSchema;
|
|
285
|
+
exports.CheckboxVariantSchema = CheckboxVariantSchema;
|
|
286
|
+
exports.CheckmarkIcon = CheckmarkIcon;
|
|
287
|
+
exports.MinusIcon = MinusIcon;
|
|
288
|
+
exports.checkboxContainerVariants = checkboxContainerVariants;
|
|
289
|
+
exports.checkboxIndicatorVariants = checkboxIndicatorVariants;
|
|
290
|
+
exports.checkmarkVariants = checkmarkVariants;
|
|
291
|
+
//# sourceMappingURL=chunk-Q3572X2J.js.map
|
|
292
|
+
//# sourceMappingURL=chunk-Q3572X2J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/elements/Checkbox/Checkbox.tsx","../src/elements/Checkbox/Checkbox.types.ts"],"names":["cva","FOCUS_STYLES","HIGH_CONTRAST_FOCUS","jsx","forwardRef","cn","isValidElement","cloneElement","AriaCheckbox","jsxs","Fragment","z","BaseComponentPropsSchema"],"mappings":"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","file":"chunk-Q3572X2J.js","sourcesContent":["\"use client\";\n\n/**\n * Checkbox Component\n * Standalone accessible checkbox with React Aria primitives and CVA styling\n *\n * Key Features:\n * - Standalone checkbox (not requiring CheckboxGroup)\n * - 44px+ touch targets (WCAG 2.2 AAA)\n * - 2 variants: default, destructive\n * - 3 sizes: sm, default, lg\n * - Indeterminate state support\n * - Spring animation for checkmark\n * - RTL support\n * - Works with React Aria slot system (for Table integration)\n *\n * @see React Aria Checkbox: https://react-spectrum.adobe.com/react-aria/Checkbox.html\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport {\n forwardRef,\n cloneElement,\n isValidElement,\n type ReactNode,\n type ReactElement,\n} from 'react';\nimport { Checkbox as AriaCheckbox } from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { FOCUS_STYLES, HIGH_CONTRAST_FOCUS } from '../../styles/interaction-states';\nimport type { CheckboxProps } from './Checkbox.types';\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * Checkbox container variants\n * Controls the overall checkbox layout with touch target\n */\nconst checkboxContainerVariants = cva(\n [\n \"group inline-flex items-center gap-2 cursor-pointer\",\n \"transition-colors duration-200\",\n \"rtl:flex-row-reverse\",\n FOCUS_STYLES,\n HIGH_CONTRAST_FOCUS,\n ].join(\" \"),\n {\n variants: {\n size: {\n sm: \"min-h-[44px] text-sm\",\n default: \"min-h-[44px] text-sm\",\n lg: \"min-h-[48px] text-base\",\n },\n isDisabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isDisabled: false,\n },\n }\n);\n\n/**\n * Checkbox indicator (the box) variants\n */\nconst checkboxIndicatorVariants = cva(\n \"flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200\",\n {\n variants: {\n variant: {\n default: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--primary)]\",\n \"data-[selected]:bg-[var(--primary)]\",\n \"data-[indeterminate]:border-[var(--primary)]\",\n \"data-[indeterminate]:bg-[var(--primary)]\",\n ].join(\" \"),\n destructive: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--destructive)]\",\n \"data-[selected]:bg-[var(--destructive)]\",\n \"data-[indeterminate]:border-[var(--destructive)]\",\n \"data-[indeterminate]:bg-[var(--destructive)]\",\n ].join(\" \"),\n },\n size: {\n sm: \"h-4 w-4\",\n default: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n },\n isInvalid: {\n true: \"border-[var(--destructive)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n isInvalid: false,\n },\n }\n);\n\n/**\n * Checkmark icon variants with spring animation\n */\nconst checkmarkVariants = cva(\n [\n \"transition-transform duration-200\",\n \"[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]\",\n \"motion-reduce:transition-none\",\n \"scale-0 data-[selected]:scale-100 data-[indeterminate]:scale-100\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: \"text-[var(--primary-foreground)]\",\n destructive: \"text-[var(--destructive-foreground)]\",\n },\n size: {\n sm: \"h-3 w-3\",\n default: \"h-3.5 w-3.5\",\n lg: \"h-4 w-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\n/**\n * Checkmark SVG icon\n */\nfunction CheckmarkIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean; 'data-indeterminate'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n/**\n * Minus (indeterminate) SVG icon\n */\nfunction MinusIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean; 'data-indeterminate'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\n// ============================================================================\n// Checkbox Component\n// ============================================================================\n\n/**\n * Standalone Checkbox component\n * Accessible checkbox that can be used independently or within Table\n */\nconst Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n (\n {\n isSelected,\n defaultSelected,\n isDisabled,\n isReadOnly,\n isIndeterminate,\n isInvalid = false,\n isRequired = false,\n onChange,\n onFocusChange,\n value,\n name,\n size = 'default',\n variant = 'default',\n label,\n description,\n selectedIcon,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'data-testid': dataTestId,\n slot,\n },\n ref\n ) => {\n // Only set these props when explicitly true to allow slot system to control them\n // (e.g., Table's selection slot injects isIndeterminate for partial selection)\n const computedIsDisabled = isDisabled || undefined;\n const computedIsReadOnly = isReadOnly || undefined;\n const computedIsIndeterminate = isIndeterminate || undefined;\n // Render the icon based on state\n const renderIcon = (isChecked: boolean, isIndet: boolean) => {\n const iconClassName = cn(checkmarkVariants({ variant, size }));\n const dataSelected = isChecked || undefined;\n const dataIndeterminate = isIndet || undefined;\n\n // For indeterminate state, always show minus\n if (isIndet) {\n return (\n <MinusIcon\n className={iconClassName}\n data-selected={dataSelected}\n data-indeterminate={dataIndeterminate}\n />\n );\n }\n\n // Custom icon support\n if (selectedIcon && isChecked) {\n if (isValidElement(selectedIcon)) {\n const iconElement = selectedIcon as ReactElement<{ className?: string; 'data-selected'?: boolean }>;\n return cloneElement(iconElement, {\n className: cn(iconClassName, iconElement.props.className),\n 'data-selected': dataSelected,\n });\n }\n return <span className={iconClassName} data-selected={dataSelected}>{selectedIcon}</span>;\n }\n\n // Default checkmark\n return (\n <CheckmarkIcon\n className={iconClassName}\n data-selected={dataSelected}\n data-indeterminate={dataIndeterminate}\n />\n );\n };\n\n return (\n <AriaCheckbox\n ref={ref}\n id={id}\n isSelected={isSelected}\n defaultSelected={defaultSelected}\n isDisabled={computedIsDisabled}\n isReadOnly={computedIsReadOnly}\n isIndeterminate={computedIsIndeterminate}\n isInvalid={isInvalid}\n isRequired={isRequired}\n onChange={onChange}\n onFocusChange={onFocusChange}\n value={value}\n name={name}\n slot={slot}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-describedby={ariaDescribedby}\n data-testid={dataTestId}\n className={(renderProps) =>\n cn(\n checkboxContainerVariants({\n size,\n isDisabled: renderProps.isDisabled,\n }),\n className\n )\n }\n >\n {(renderProps) => (\n <>\n {/* Checkbox indicator (the box) */}\n <div\n className={checkboxIndicatorVariants({\n variant,\n size,\n isInvalid: renderProps.isInvalid,\n })}\n data-selected={renderProps.isSelected || undefined}\n data-indeterminate={renderProps.isIndeterminate || undefined}\n >\n {renderIcon(renderProps.isSelected, renderProps.isIndeterminate)}\n </div>\n\n {/* Label and description */}\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"font-medium text-[var(--content-foreground)]\">\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-sm text-[var(--menu-muted)]\">\n {description}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaCheckbox>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n Checkbox,\n checkboxContainerVariants,\n checkboxIndicatorVariants,\n checkmarkVariants,\n CheckmarkIcon,\n MinusIcon,\n};\n","/**\n * Checkbox Component Types\n * Standalone accessible checkbox with Zod schema validation\n *\n * @see React Aria Checkbox: https://react-spectrum.adobe.com/react-aria/Checkbox.html\n * @see constitution.md Principle II (Type Safety - Zod schema validation)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { CheckboxProps as AriaCheckboxProps } from 'react-aria-components';\n\n/**\n * Checkbox size schema\n * All sizes maintain 44px minimum height for WCAG 2.2 AAA compliance\n */\nexport const CheckboxSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type CheckboxSize = z.infer<typeof CheckboxSizeSchema>;\n\n/**\n * Checkbox variant schema\n * 2 variants: default and destructive\n */\nexport const CheckboxVariantSchema = z.enum(['default', 'destructive']);\nexport type CheckboxVariant = z.infer<typeof CheckboxVariantSchema>;\n\n/**\n * Checkbox props schema extending BaseComponentProps\n *\n * Note: We use .optional() without .default() to allow the component to handle defaults.\n * This ensures compatibility with React Aria's type system and allows partial props.\n *\n * @see React Aria Checkbox: https://react-spectrum.adobe.com/react-aria/Checkbox.html\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const CheckboxPropsSchema = BaseComponentPropsSchema.extend({\n // State management (controlled/uncontrolled)\n isSelected: z.boolean().optional(),\n defaultSelected: z.boolean().optional(),\n onChange: z.custom<(isSelected: boolean) => void>().optional(),\n\n // Variants (matching Switch/Button pattern)\n variant: CheckboxVariantSchema.optional(),\n size: CheckboxSizeSchema.optional(),\n\n // States\n isDisabled: z.boolean().optional(),\n isReadOnly: z.boolean().optional(),\n isIndeterminate: z.boolean().optional(),\n isInvalid: z.boolean().optional(),\n isRequired: z.boolean().optional(),\n\n // Labels (optional built-in labeling)\n label: z.string().optional(),\n description: z.string().optional(),\n\n // Form integration\n value: z.string().optional(),\n name: z.string().optional(),\n\n // Custom icon\n selectedIcon: z.any().optional(), // ReactNode\n\n // React Aria slot integration (e.g., for Table)\n slot: z.string().optional(),\n\n // React Aria CheckboxProps integration\n onFocus: z.custom<() => void>().optional(),\n onBlur: z.custom<() => void>().optional(),\n onFocusChange: z.custom<(isFocused: boolean) => void>().optional(),\n autoFocus: z.boolean().optional(),\n});\n\nexport type CheckboxProps = z.infer<typeof CheckboxPropsSchema> &\n Omit<AriaCheckboxProps, keyof z.infer<typeof CheckboxPropsSchema>>;\n"]}
|