@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/Resizable/hooks/useResizableContext.ts","../src/elements/Resizable/components/ResizablePanelGroup.tsx","../src/elements/Resizable/Resizable.types.ts","../src/elements/Resizable/components/ResizablePanel.tsx","../src/elements/Resizable/hooks/useResizable.ts","../src/elements/Resizable/components/ResizablePopover.tsx","../src/elements/Resizable/components/ResizableHandle.tsx"],"names":["ResizablePanelGroup","forwardRef","ResizablePanel","useRef","useState","useEffect","jsx","useCallback","ResizablePopover","leftSize","rightSize","AriaButton","Button","ResizableHandle","jsxs"],"mappings":"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","file":"chunk-EP4WOI5D.mjs","sourcesContent":["/**\n * Resizable Context Hook\n *\n * Provides context for ResizablePanelGroup compound components.\n * Manages panel sizes, registration, and screen reader announcements.\n */\n\nimport {\n createContext,\n useContext,\n useRef,\n useState,\n useCallback,\n useEffect,\n type ReactNode,\n} from 'react';\nimport type { ResizableContextValue, PanelInfo } from '../Resizable.types';\n\n// ============================================================================\n// Context\n// ============================================================================\n\n/**\n * Context for Resizable compound components.\n * Must be used within a ResizablePanelGroup.\n */\nexport const ResizableContext = createContext<ResizableContextValue | null>(\n null\n);\n\nResizableContext.displayName = 'ResizableContext';\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook to access ResizableContext.\n * Throws an error if used outside of ResizablePanelGroup.\n *\n * @returns ResizableContextValue\n * @throws Error if used outside ResizablePanelGroup\n */\nexport function useResizableContext(): ResizableContextValue {\n const context = useContext(ResizableContext);\n\n if (!context) {\n throw new Error(\n 'useResizableContext must be used within a ResizablePanelGroup. ' +\n 'Make sure ResizablePanel and ResizableHandle are children of ResizablePanelGroup.'\n );\n }\n\n return context;\n}\n\n// ============================================================================\n// Provider Props\n// ============================================================================\n\ninterface ResizableProviderProps {\n direction: 'horizontal' | 'vertical';\n groupLabel: string;\n sizes?: number[];\n defaultSizes?: number[];\n onSizesChange?: (sizes: number[]) => void;\n children: ReactNode;\n}\n\n// ============================================================================\n// Provider Hook\n// ============================================================================\n\n/**\n * Hook to create ResizableContext value for the provider.\n * Handles both controlled and uncontrolled modes.\n */\nexport function useResizableProvider({\n direction,\n groupLabel,\n sizes: controlledSizes,\n onSizesChange,\n}: Omit<ResizableProviderProps, 'children'>): ResizableContextValue {\n // Internal state for uncontrolled mode\n const [internalSizes, setInternalSizes] = useState<number[]>([]);\n\n // Panel registration\n const [panels, setPanels] = useState<PanelInfo[]>([]);\n\n // Container ref for size calculations\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Live region ref for announcements\n const liveRegionRef = useRef<HTMLDivElement | null>(null);\n const announceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track if sizes have been initialized\n const sizesInitializedRef = useRef(false);\n\n // Determine if controlled\n const isControlled = controlledSizes !== undefined;\n const sizes = isControlled ? controlledSizes : internalSizes;\n\n /**\n * Update sizes - handles both controlled and uncontrolled modes.\n */\n const setSizes = useCallback(\n (newSizes: number[]) => {\n if (isControlled) {\n onSizesChange?.(newSizes);\n } else {\n setInternalSizes(newSizes);\n }\n },\n [isControlled, onSizesChange]\n );\n\n /**\n * Register a panel with the group.\n */\n const registerPanel = useCallback((index: number, info: PanelInfo) => {\n setPanels((prev) => {\n const newPanels = [...prev];\n newPanels[index] = info;\n return newPanels;\n });\n }, []);\n\n /**\n * Unregister a panel from the group.\n */\n const unregisterPanel = useCallback((index: number) => {\n setPanels((prev) => {\n const newPanels = [...prev];\n delete newPanels[index];\n return newPanels.filter(Boolean);\n });\n }, []);\n\n // Initialize sizes when panels are registered (uncontrolled mode only)\n useEffect(() => {\n // Skip if controlled or already initialized\n if (isControlled || sizesInitializedRef.current) return;\n\n // Get registered panel count\n const registeredPanels = panels.filter(Boolean);\n const panelCount = registeredPanels.length;\n\n // Wait until we have at least 2 panels (common case: panel + panel with handle between)\n if (panelCount < 2) return;\n\n // Check if sizes need initialization\n const needsInit = sizes.length < panelCount || sizes.some((s) => s === undefined);\n\n if (needsInit) {\n // Initialize with equal distribution using defaultSize from each panel if available\n const newSizes: number[] = [];\n const equalSize = 100 / panelCount;\n\n for (let i = 0; i < panelCount; i++) {\n newSizes[i] = equalSize;\n }\n\n sizesInitializedRef.current = true;\n setInternalSizes(newSizes);\n }\n }, [panels, sizes, isControlled]);\n\n // Cleanup live region on unmount\n useEffect(() => {\n return () => {\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n }\n if (liveRegionRef.current) {\n document.body.removeChild(liveRegionRef.current);\n liveRegionRef.current = null;\n }\n };\n }, []);\n\n /**\n * Announce a message to screen readers via live region.\n */\n const announce = useCallback((message: string) => {\n // Create live region if it doesn't exist\n if (!liveRegionRef.current) {\n const liveRegion = document.createElement('div');\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.className = 'sr-only';\n liveRegion.style.cssText =\n 'position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;';\n document.body.appendChild(liveRegion);\n liveRegionRef.current = liveRegion;\n }\n\n // Update live region content\n liveRegionRef.current.textContent = message;\n\n // Clear previous timeout if any\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n }\n\n // Clear after announcement\n announceTimeoutRef.current = setTimeout(() => {\n if (liveRegionRef.current) {\n liveRegionRef.current.textContent = '';\n }\n }, 1000);\n }, []);\n\n return {\n direction,\n groupLabel,\n sizes,\n setSizes,\n panels,\n registerPanel,\n unregisterPanel,\n announce,\n containerRef,\n };\n}\n","/**\n * ResizablePanelGroup Component\n *\n * Container component for resizable panel layouts.\n * Provides context for child panels and handles.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport { forwardRef, useImperativeHandle, type ReactElement } from 'react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizablePanelGroupProps } from '../Resizable.types';\nimport {\n ResizableContext,\n useResizableProvider,\n} from '../hooks/useResizableContext';\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizablePanelGroup - Container for resizable panels.\n *\n * Provides context for child ResizablePanel and ResizableHandle components.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * <ResizablePanelGroup direction=\"horizontal\" groupLabel=\"Main layout\">\n * <ResizablePanel name=\"Sidebar\">Content</ResizablePanel>\n * <ResizableHandle />\n * <ResizablePanel name=\"Main\">Content</ResizablePanel>\n * </ResizablePanelGroup>\n * ```\n */\nexport const ResizablePanelGroup = forwardRef<\n HTMLDivElement | null,\n ResizablePanelGroupProps\n>(function ResizablePanelGroup(\n { direction, groupLabel, sizes, onSizesChange, className, children },\n ref\n): ReactElement {\n // Create context value with controlled/uncontrolled handling\n const contextValue = useResizableProvider({\n direction,\n groupLabel,\n sizes,\n onSizesChange,\n });\n\n // Expose containerRef to parent via forwarded ref\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n ref,\n () => contextValue.containerRef.current,\n [contextValue.containerRef]\n );\n\n return (\n <ResizableContext.Provider value={contextValue}>\n <div\n ref={contextValue.containerRef}\n role=\"group\"\n aria-label={`${groupLabel}, ${direction}`}\n data-direction={direction}\n className={cn(\n 'flex h-full w-full',\n direction === 'horizontal' ? 'flex-row' : 'flex-col',\n className\n )}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n});\n\nResizablePanelGroup.displayName = 'ResizablePanelGroup';\n","/**\n * Resizable Component Types\n *\n * Zod schemas and TypeScript types for the Resizable compound component.\n * Provides accessible, keyboard-navigable resizable panel layouts.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport { z } from 'zod';\nimport { type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default minimum panel size (percentage).\n */\nexport const DEFAULT_MIN_SIZE = 10;\n\n/**\n * Default maximum panel size (percentage).\n */\nexport const DEFAULT_MAX_SIZE = 90;\n\n/**\n * Long-press threshold for touch devices (ms).\n * Tap (< threshold) opens popover, long-press (>= threshold) enables drag.\n */\nexport const LONG_PRESS_THRESHOLD = 300;\n\n// ============================================================================\n// Preset Type\n// ============================================================================\n\n/**\n * Size preset for quick adjustment via popover.\n */\nexport interface ResizePreset {\n /** Display label for the preset button */\n label: string;\n /** Size percentages for each panel (must sum to 100) */\n sizes: number[];\n}\n\n/**\n * Zod schema for ResizePreset validation.\n */\nexport const ResizePresetSchema = z.object({\n label: z.string().min(1),\n sizes: z.array(z.number().min(0).max(100)),\n});\n\n// ============================================================================\n// ResizablePanelGroup Props\n// ============================================================================\n\n/**\n * Zod schema for ResizablePanelGroup props.\n */\nexport const ResizablePanelGroupPropsSchema = z.object({\n /** Layout direction */\n direction: z.enum(['horizontal', 'vertical']),\n\n /** REQUIRED: Label for screen reader identification of this group */\n groupLabel: z.string().min(1),\n\n /** Controlled mode: current sizes as percentages */\n sizes: z.array(z.number().min(0).max(100)).optional(),\n\n /** Callback when sizes change */\n onSizesChange: z.function().optional(),\n\n /** Additional CSS classes */\n className: z.string().optional(),\n\n /** Panel children */\n children: z.custom<ReactNode>(),\n});\n\n/**\n * Props for ResizablePanelGroup component.\n */\nexport interface ResizablePanelGroupProps {\n /** Layout direction: 'horizontal' or 'vertical' */\n direction: 'horizontal' | 'vertical';\n\n /** REQUIRED: Label for screen reader identification (e.g., \"Main layout\") */\n groupLabel: string;\n\n /** Controlled mode: current sizes as percentages (must sum to 100) */\n sizes?: number[];\n\n /** Callback when sizes change */\n onSizesChange?: (sizes: number[]) => void;\n\n /** Additional CSS classes */\n className?: string;\n\n /** Panel and Handle children */\n children: ReactNode;\n}\n\n// ============================================================================\n// ResizablePanel Props\n// ============================================================================\n\n/**\n * Zod schema for ResizablePanel props.\n */\nexport const ResizablePanelPropsSchema = z.object({\n /** REQUIRED: Name for screen reader identification */\n name: z.string().min(1),\n\n /** Default size as percentage (auto-distributes equally if omitted) */\n defaultSize: z.number().min(0).max(100).optional(),\n\n /** Minimum size as percentage */\n minSize: z.number().min(0).max(100).optional().default(DEFAULT_MIN_SIZE),\n\n /** Maximum size as percentage */\n maxSize: z.number().min(0).max(100).optional().default(DEFAULT_MAX_SIZE),\n\n /** Whether panel can collapse to 0% */\n collapsible: z.boolean().optional().default(false),\n\n /** Callback when panel collapses */\n onCollapse: z.function().optional(),\n\n /** Callback when panel expands from collapsed */\n onExpand: z.function().optional(),\n\n /** Callback when panel resizes */\n onResize: z.function().optional(),\n\n /** Additional CSS classes */\n className: z.string().optional(),\n\n /** Panel content */\n children: z.custom<ReactNode>(),\n});\n\n/**\n * Props for ResizablePanel component.\n */\nexport interface ResizablePanelProps {\n /** REQUIRED: Name for screen reader identification (e.g., \"Sidebar\") */\n name: string;\n\n /** Default size as percentage (0-100). Auto-distributes equally if omitted. */\n defaultSize?: number;\n\n /** Minimum size as percentage (default: 10) */\n minSize?: number;\n\n /** Maximum size as percentage (default: 90) */\n maxSize?: number;\n\n /** Whether panel can collapse to 0% */\n collapsible?: boolean;\n\n /** Callback when panel collapses to 0% */\n onCollapse?: () => void;\n\n /** Callback when panel expands from collapsed state */\n onExpand?: () => void;\n\n /** Callback when panel size changes */\n onResize?: (size: number) => void;\n\n /** Additional CSS classes */\n className?: string;\n\n /** Panel content */\n children: ReactNode;\n}\n\n// ============================================================================\n// ResizableHandle Props\n// ============================================================================\n\n/**\n * Zod schema for ResizableHandle props.\n */\nexport const ResizableHandlePropsSchema = z.object({\n /** Whether to show the visual grip indicator */\n withHandle: z.boolean().optional().default(true),\n\n /** Size presets for quick adjustment */\n presets: z.array(ResizePresetSchema).optional(),\n\n /** Whether the handle is disabled */\n disabled: z.boolean().optional().default(false),\n\n /** Additional CSS classes */\n className: z.string().optional(),\n});\n\n/**\n * Props for ResizableHandle component.\n */\nexport interface ResizableHandleProps {\n /** Whether to show the visual grip indicator (default: true) */\n withHandle?: boolean;\n\n /** Size presets for quick adjustment via popover */\n presets?: ResizePreset[];\n\n /** Whether the handle is disabled */\n disabled?: boolean;\n\n /** Additional CSS classes */\n className?: string;\n}\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\n/**\n * Panel registration info stored in context.\n */\nexport interface PanelInfo {\n name: string;\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n}\n\n/**\n * Context value for ResizablePanelGroup.\n */\nexport interface ResizableContextValue {\n /** Layout direction */\n direction: 'horizontal' | 'vertical';\n\n /** Group label for screen reader announcements */\n groupLabel: string;\n\n /** Current panel sizes as percentages */\n sizes: number[];\n\n /** Update panel sizes */\n setSizes: (sizes: number[]) => void;\n\n /** Registered panel info */\n panels: PanelInfo[];\n\n /** Register a panel with the group */\n registerPanel: (index: number, info: PanelInfo) => void;\n\n /** Unregister a panel */\n unregisterPanel: (index: number) => void;\n\n /** Announce a message to screen readers */\n announce: (message: string) => void;\n\n /** Reference to the container element */\n containerRef: React.RefObject<HTMLDivElement | null>;\n}\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * CVA variants for ResizableHandle styling.\n * Ensures 44x44px touch target for WCAG 2.2 AAA compliance.\n */\nexport const resizableHandleVariants = cva(\n [\n // Base styles - 44px touch target\n 'relative flex items-center justify-center',\n 'shrink-0',\n 'bg-transparent',\n 'transition-colors duration-150',\n // Focus styles\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2',\n // Touch target padding for accessibility\n 'touch-none select-none',\n ],\n {\n variants: {\n direction: {\n horizontal: [\n 'w-3 min-w-[12px]',\n 'cursor-col-resize',\n 'hover:bg-[var(--accent)]/50',\n // Ensure 44px touch target via padding\n 'before:absolute before:inset-y-0 before:-inset-x-4',\n 'before:min-w-[44px]',\n ],\n vertical: [\n 'h-3 min-h-[12px]',\n 'cursor-row-resize',\n 'hover:bg-[var(--accent)]/50',\n // Ensure 44px touch target via padding\n 'before:absolute before:inset-x-0 before:-inset-y-4',\n 'before:min-h-[44px]',\n ],\n },\n disabled: {\n true: 'cursor-not-allowed opacity-50 pointer-events-none',\n false: '',\n },\n isDragging: {\n true: 'bg-[var(--accent)]',\n false: '',\n },\n },\n defaultVariants: {\n direction: 'horizontal',\n disabled: false,\n isDragging: false,\n },\n }\n);\n\n/**\n * CVA variants for the grip indicator inside the handle.\n */\nexport const resizableGripVariants = cva(\n [\n 'flex items-center justify-center',\n 'rounded-full',\n 'bg-[var(--border)]',\n 'text-[var(--menu-muted)]',\n ],\n {\n variants: {\n direction: {\n horizontal: 'h-8 w-1',\n vertical: 'h-1 w-8',\n },\n },\n defaultVariants: {\n direction: 'horizontal',\n },\n }\n);\n\n/**\n * Type for resizableHandleVariants props.\n */\nexport type ResizableHandleVariantProps = VariantProps<\n typeof resizableHandleVariants\n>;\n","/**\n * ResizablePanel Component\n *\n * Individual panel within a ResizablePanelGroup.\n * Registers with context and applies size from group state.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n} from 'react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizablePanelProps } from '../Resizable.types';\nimport { DEFAULT_MIN_SIZE, DEFAULT_MAX_SIZE } from '../Resizable.types';\nimport { useResizableContext } from '../hooks/useResizableContext';\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizablePanel - Individual panel in a resizable layout.\n *\n * Must be used within a ResizablePanelGroup.\n * Registers itself with context for size management.\n *\n * @example\n * ```tsx\n * <ResizablePanel name=\"Sidebar\" defaultSize={25} minSize={15} maxSize={40}>\n * <SidebarContent />\n * </ResizablePanel>\n * ```\n */\nexport const ResizablePanel = forwardRef<HTMLDivElement, ResizablePanelProps>(\n function ResizablePanel(\n {\n name,\n defaultSize: _defaultSize,\n minSize = DEFAULT_MIN_SIZE,\n maxSize = DEFAULT_MAX_SIZE,\n collapsible = false,\n onCollapse,\n onExpand,\n onResize,\n className,\n children,\n },\n ref\n ): ReactElement {\n const { sizes, registerPanel, unregisterPanel, containerRef } =\n useResizableContext();\n\n // Internal ref for DOM element\n const internalRef = useRef<HTMLDivElement>(null);\n\n // Track panel index based on DOM order (use state to trigger re-renders)\n const [panelIndex, setPanelIndex] = useState<number>(-1);\n const prevSizeRef = useRef<number | null>(null);\n const isRegisteredRef = useRef(false);\n const registeredIndexRef = useRef<number>(-1);\n\n // Calculate panel index from DOM position (useEffect runs after refs are set)\n useEffect(() => {\n const panel = internalRef.current;\n const container = containerRef.current;\n if (!panel || !container) return;\n\n // Count panels before this one in the DOM\n const allPanels = container.querySelectorAll('[data-resizable-panel]');\n let foundIndex = -1;\n for (let i = 0; i < allPanels.length; i++) {\n if (allPanels[i] === panel) {\n foundIndex = i;\n break;\n }\n }\n\n if (foundIndex === -1) return;\n\n // Update index state (triggers re-render)\n if (panelIndex !== foundIndex) {\n setPanelIndex(foundIndex);\n }\n\n // Register/update panel info\n if (!isRegisteredRef.current) {\n isRegisteredRef.current = true;\n registeredIndexRef.current = foundIndex;\n registerPanel(foundIndex, {\n name,\n minSize,\n maxSize,\n collapsible,\n });\n }\n\n return () => {\n if (isRegisteredRef.current) {\n unregisterPanel(registeredIndexRef.current);\n isRegisteredRef.current = false;\n }\n };\n }, [containerRef, registerPanel, unregisterPanel, name, minSize, maxSize, collapsible, panelIndex]);\n\n // Get current size for this panel\n const currentSize = panelIndex >= 0 ? sizes[panelIndex] ?? 50 : 50;\n\n // Handle collapse/expand callbacks\n useEffect(() => {\n if (prevSizeRef.current === null) {\n prevSizeRef.current = currentSize;\n return;\n }\n\n const wasCollapsed = prevSizeRef.current === 0;\n const isCollapsed = currentSize === 0;\n\n if (!wasCollapsed && isCollapsed && onCollapse) {\n onCollapse();\n } else if (wasCollapsed && !isCollapsed && onExpand) {\n onExpand();\n }\n\n if (onResize && prevSizeRef.current !== currentSize) {\n onResize(currentSize);\n }\n\n prevSizeRef.current = currentSize;\n }, [currentSize, onCollapse, onExpand, onResize]);\n\n return (\n <div\n ref={(node) => {\n // Update internal ref\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n // Forward to external ref if provided\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n }}\n role=\"region\"\n aria-label={name}\n data-resizable-panel=\"\"\n data-panel-name={name}\n data-panel-index={panelIndex}\n data-collapsed={currentSize === 0}\n style={{\n flexBasis: `${currentSize}%`,\n flexGrow: 0,\n flexShrink: 0,\n overflow: 'hidden',\n }}\n className={cn('relative', className)}\n >\n {children}\n </div>\n );\n }\n);\n\nResizablePanel.displayName = 'ResizablePanel';\n","/**\n * useResizable Hook\n *\n * Core resize logic for handling drag interactions.\n * Manages pointer events, calculates size changes, and enforces constraints.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport { useCallback, useRef, useState, useEffect } from 'react';\nimport type { PanelInfo } from '../Resizable.types';\nimport { LONG_PRESS_THRESHOLD } from '../Resizable.types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface UseResizableOptions {\n /** Layout direction */\n direction: 'horizontal' | 'vertical';\n /** Current panel sizes */\n sizes: number[];\n /** Update panel sizes */\n setSizes: (sizes: number[]) => void;\n /** Registered panel info */\n panels: PanelInfo[];\n /** Reference to container element for size calculations */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** Index of the left/top panel this handle controls */\n leftPanelIndex: number;\n /** Index of the right/bottom panel this handle controls */\n rightPanelIndex: number;\n /** Whether the handle is disabled */\n disabled?: boolean;\n /** Callback to announce size changes */\n announce?: (message: string) => void;\n /** Group label for announcements */\n groupLabel?: string;\n /** Callback when popover should open */\n onOpenPopover?: () => void;\n}\n\ninterface UseResizableReturn {\n /** Whether currently dragging */\n isDragging: boolean;\n /** Pointer down handler for drag start */\n handlePointerDown: (event: React.PointerEvent) => void;\n /** Keyboard handler for arrow key resizing */\n handleKeyDown: (event: React.KeyboardEvent) => void;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Clamp a size value within min/max bounds.\n */\nfunction clampSize(size: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, size));\n}\n\n/**\n * Calculate new sizes when adjusting by a delta.\n * Only affects adjacent panels - other panels remain unchanged.\n */\nfunction calculateNewSizes(\n sizes: number[],\n panels: PanelInfo[],\n leftIndex: number,\n rightIndex: number,\n delta: number\n): number[] {\n const newSizes = [...sizes];\n const leftPanel = panels[leftIndex];\n const rightPanel = panels[rightIndex];\n\n if (!leftPanel || !rightPanel) return sizes;\n\n // Current sizes\n const leftSize = sizes[leftIndex] ?? 50;\n const rightSize = sizes[rightIndex] ?? 50;\n\n // Calculate new sizes\n let newLeftSize = leftSize + delta;\n let newRightSize = rightSize - delta;\n\n // Apply constraints\n const leftMin = leftPanel.collapsible ? 0 : leftPanel.minSize;\n const leftMax = leftPanel.maxSize;\n const rightMin = rightPanel.collapsible ? 0 : rightPanel.minSize;\n const rightMax = rightPanel.maxSize;\n\n // Clamp left panel\n newLeftSize = clampSize(newLeftSize, leftMin, leftMax);\n\n // Adjust right panel to compensate\n newRightSize = leftSize + rightSize - newLeftSize;\n\n // Clamp right panel\n newRightSize = clampSize(newRightSize, rightMin, rightMax);\n\n // Re-adjust left panel if right was clamped\n newLeftSize = leftSize + rightSize - newRightSize;\n\n newSizes[leftIndex] = newLeftSize;\n newSizes[rightIndex] = newRightSize;\n\n return newSizes;\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook for managing resize interactions.\n *\n * @param options - Resize options\n * @returns Drag state and event handlers\n */\nexport function useResizable({\n direction,\n sizes,\n setSizes,\n panels,\n containerRef,\n leftPanelIndex,\n rightPanelIndex,\n disabled = false,\n announce,\n groupLabel,\n onOpenPopover,\n}: UseResizableOptions): UseResizableReturn {\n const [isDragging, setIsDragging] = useState(false);\n\n // Track drag start position and sizes\n const dragStartRef = useRef<{\n position: number;\n sizes: number[];\n containerSize: number;\n } | null>(null);\n\n // Track long press for touch interaction\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pointerDownTimeRef = useRef<number>(0);\n const wasLongPressRef = useRef<boolean>(false);\n\n // Store latest values in refs for stable event handlers\n const panelsRef = useRef(panels);\n const sizesRef = useRef(sizes);\n const setSizesRef = useRef(setSizes);\n\n // Refs for stable event listener references (prevents memory leaks)\n const handlePointerMoveRef = useRef<(e: PointerEvent) => void>(() => {});\n const handlePointerUpRef = useRef<() => void>(() => {});\n\n // Keep refs updated\n useEffect(() => {\n panelsRef.current = panels;\n sizesRef.current = sizes;\n setSizesRef.current = setSizes;\n }, [panels, sizes, setSizes]);\n\n /**\n * Get container size in the resize direction.\n */\n const getContainerSize = useCallback((): number => {\n const container = containerRef.current;\n if (!container) return 0;\n return direction === 'horizontal'\n ? container.offsetWidth\n : container.offsetHeight;\n }, [containerRef, direction]);\n\n /**\n * Convert pixel delta to percentage delta.\n */\n const pixelsToPercent = useCallback(\n (pixels: number): number => {\n const containerSize = getContainerSize();\n if (containerSize === 0) return 0;\n return (pixels / containerSize) * 100;\n },\n [getContainerSize]\n );\n\n // Stable wrapper functions for event listeners (prevent memory leaks)\n // These are created once and never change, using refs to call current handlers\n const onPointerMove = useCallback((e: PointerEvent) => {\n handlePointerMoveRef.current(e);\n }, []);\n\n const onPointerUp = useCallback(() => {\n handlePointerUpRef.current();\n }, []);\n\n /**\n * Handle pointer move during drag.\n * Uses refs to avoid stale closures and prevent listener removal on re-render.\n */\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n if (!dragStartRef.current || disabled) return;\n\n const position =\n direction === 'horizontal' ? event.clientX : event.clientY;\n const delta = position - dragStartRef.current.position;\n const percentDelta = pixelsToPercent(delta);\n\n const newSizes = calculateNewSizes(\n dragStartRef.current.sizes,\n panelsRef.current,\n leftPanelIndex,\n rightPanelIndex,\n percentDelta\n );\n\n setSizesRef.current(newSizes);\n },\n [\n direction,\n disabled,\n leftPanelIndex,\n pixelsToPercent,\n rightPanelIndex,\n ]\n );\n\n /**\n * Handle pointer up to end drag.\n * Uses refs to avoid stale closures.\n */\n const handlePointerUp = useCallback(() => {\n // Clear long press timer\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n\n // Check if this was a tap (not a long press or drag)\n const duration = Date.now() - pointerDownTimeRef.current;\n const wasTap = duration < LONG_PRESS_THRESHOLD && !wasLongPressRef.current;\n\n if (wasTap && onOpenPopover && !disabled) {\n onOpenPopover();\n }\n\n // End drag\n if (isDragging) {\n setIsDragging(false);\n\n // Announce final size\n const leftPanel = panelsRef.current[leftPanelIndex];\n const newSize = Math.round(sizesRef.current[leftPanelIndex] ?? 50);\n if (announce && leftPanel && groupLabel) {\n announce(\n `${leftPanel.name} in ${groupLabel} resized to ${newSize} percent`\n );\n }\n }\n\n dragStartRef.current = null;\n wasLongPressRef.current = false;\n\n // Remove document listeners (use stable wrappers to match what was added)\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n document.removeEventListener('pointercancel', onPointerUp);\n\n // Reset cursor\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }, [\n announce,\n disabled,\n groupLabel,\n isDragging,\n leftPanelIndex,\n onOpenPopover,\n onPointerMove,\n onPointerUp,\n ]);\n\n // Keep handler refs updated so stable wrappers call the latest handlers\n useEffect(() => {\n handlePointerMoveRef.current = handlePointerMove;\n handlePointerUpRef.current = handlePointerUp;\n });\n\n /**\n * Handle pointer down to start drag.\n */\n const handlePointerDown = useCallback(\n (event: React.PointerEvent) => {\n if (disabled) return;\n\n // Prevent text selection during drag\n event.preventDefault();\n\n const position =\n direction === 'horizontal' ? event.clientX : event.clientY;\n pointerDownTimeRef.current = Date.now();\n wasLongPressRef.current = false;\n\n // Store initial state\n dragStartRef.current = {\n position,\n sizes: [...sizes],\n containerSize: getContainerSize(),\n };\n\n // Set up long press timer for touch\n longPressTimerRef.current = setTimeout(() => {\n wasLongPressRef.current = true;\n setIsDragging(true);\n\n // Set cursor during drag\n document.body.style.cursor =\n direction === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }, LONG_PRESS_THRESHOLD);\n\n // Add document listeners (use stable wrappers to prevent memory leaks)\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp);\n document.addEventListener('pointercancel', onPointerUp);\n\n // For mouse, start dragging immediately\n if (event.pointerType === 'mouse') {\n // Clear long press timer for mouse - drag starts immediately\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n wasLongPressRef.current = true;\n setIsDragging(true);\n document.body.style.cursor =\n direction === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n },\n [\n direction,\n disabled,\n getContainerSize,\n onPointerMove,\n onPointerUp,\n sizes,\n ]\n );\n\n /**\n * Handle keyboard navigation.\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n const step = event.shiftKey ? 10 : 1;\n let delta = 0;\n\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n delta = -step;\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n delta = step;\n break;\n case 'Home': {\n // Set to minimum\n const leftPanel = panels[leftPanelIndex];\n if (leftPanel) {\n const minSize = leftPanel.collapsible ? 0 : leftPanel.minSize;\n delta = minSize - (sizes[leftPanelIndex] ?? 50);\n }\n break;\n }\n case 'End': {\n // Set to maximum\n const leftPanel = panels[leftPanelIndex];\n if (leftPanel) {\n delta = leftPanel.maxSize - (sizes[leftPanelIndex] ?? 50);\n }\n break;\n }\n case 'Enter':\n case ' ':\n // Open popover\n event.preventDefault();\n onOpenPopover?.();\n return;\n default:\n return;\n }\n\n if (delta !== 0) {\n event.preventDefault();\n const newSizes = calculateNewSizes(\n sizes,\n panels,\n leftPanelIndex,\n rightPanelIndex,\n delta\n );\n setSizes(newSizes);\n\n // Announce the change\n const leftPanel = panels[leftPanelIndex];\n const newSize = Math.round(newSizes[leftPanelIndex] ?? 50);\n if (announce && leftPanel && groupLabel) {\n announce(\n `${leftPanel.name} in ${groupLabel} resized to ${newSize} percent`\n );\n }\n }\n },\n [\n announce,\n disabled,\n groupLabel,\n leftPanelIndex,\n onOpenPopover,\n panels,\n rightPanelIndex,\n setSizes,\n sizes,\n ]\n );\n\n // Cleanup on unmount only (empty deps = only runs on unmount)\n useEffect(() => {\n // Capture stable wrappers for cleanup\n const moveHandler = onPointerMove;\n const upHandler = onPointerUp;\n return () => {\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n }\n // Use stable wrappers for cleanup\n document.removeEventListener('pointermove', moveHandler);\n document.removeEventListener('pointerup', upHandler);\n document.removeEventListener('pointercancel', upHandler);\n };\n }, [onPointerMove, onPointerUp]);\n\n return {\n isDragging,\n handlePointerDown,\n handleKeyDown,\n };\n}\n","/**\n * ResizablePopover Component\n *\n * Precision control popover for resizable panels.\n * Shows linked NumberFields and preset buttons for exact sizing.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useEffect,\n useRef,\n type ReactElement,\n} from 'react';\nimport {\n DialogTrigger,\n Popover,\n Dialog,\n Button as AriaButton,\n} from 'react-aria-components';\nimport { X } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizePreset, PanelInfo } from '../Resizable.types';\nimport { NumberField } from '../../NumberField/NumberField';\nimport { Button } from '../../Button/Button';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface ResizablePopoverProps {\n /** Whether popover is open */\n isOpen: boolean;\n /** Callback when open state changes */\n onOpenChange: (isOpen: boolean) => void;\n /** Group label for the title */\n groupLabel: string;\n /** Left/top panel info */\n leftPanel: PanelInfo;\n /** Right/bottom panel info */\n rightPanel: PanelInfo;\n /** Left/top panel size (percentage) */\n leftSize: number;\n /** Right/bottom panel size (percentage) */\n rightSize: number;\n /** Callback when sizes change */\n onSizesChange: (leftSize: number, rightSize: number) => void;\n /** Size presets */\n presets?: ResizePreset[];\n /** The trigger element (handle) */\n triggerRef: React.RefObject<HTMLDivElement | null>;\n /** Direction for positioning */\n direction: 'horizontal' | 'vertical';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizablePopover - Precision control for panel sizes.\n *\n * Features:\n * - Two linked NumberFields that sum to 100%\n * - Preset buttons for quick sizing\n * - Cancel reverts to original, Close keeps changes\n * - Live preview as values change\n */\nexport const ResizablePopover = forwardRef<HTMLDivElement, ResizablePopoverProps>(\n function ResizablePopover(\n {\n isOpen,\n onOpenChange,\n groupLabel,\n leftPanel,\n rightPanel,\n leftSize,\n rightSize,\n onSizesChange,\n presets,\n triggerRef,\n direction,\n },\n _ref\n ): ReactElement | null {\n // Store original sizes when popover opens (for cancel)\n const [originalSizes, setOriginalSizes] = useState({ left: leftSize, right: rightSize });\n\n // Capture original sizes only when popover transitions from closed to open\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (isOpen && !wasOpenRef.current) {\n setOriginalSizes({ left: leftSize, right: rightSize });\n }\n wasOpenRef.current = isOpen;\n }, [isOpen, leftSize, rightSize]);\n\n /**\n * Handle left panel size change.\n * Auto-adjusts right panel to sum to 100%.\n */\n const handleLeftChange = useCallback(\n (value: number | null) => {\n if (value === null) return;\n\n // Clamp to valid range\n const newLeft = Math.max(\n leftPanel.collapsible ? 0 : leftPanel.minSize,\n Math.min(leftPanel.maxSize, value)\n );\n\n // Calculate right size (remaining percentage)\n const newRight = 100 - newLeft;\n\n // Check right panel constraints\n const rightMin = rightPanel.collapsible ? 0 : rightPanel.minSize;\n const rightMax = rightPanel.maxSize;\n\n if (newRight < rightMin || newRight > rightMax) {\n // Can't make this change - right panel would be out of bounds\n return;\n }\n\n onSizesChange(newLeft, newRight);\n },\n [leftPanel, rightPanel, onSizesChange]\n );\n\n /**\n * Handle right panel size change.\n * Auto-adjusts left panel to sum to 100%.\n */\n const handleRightChange = useCallback(\n (value: number | null) => {\n if (value === null) return;\n\n // Clamp to valid range\n const newRight = Math.max(\n rightPanel.collapsible ? 0 : rightPanel.minSize,\n Math.min(rightPanel.maxSize, value)\n );\n\n // Calculate left size (remaining percentage)\n const newLeft = 100 - newRight;\n\n // Check left panel constraints\n const leftMin = leftPanel.collapsible ? 0 : leftPanel.minSize;\n const leftMax = leftPanel.maxSize;\n\n if (newLeft < leftMin || newLeft > leftMax) {\n // Can't make this change - left panel would be out of bounds\n return;\n }\n\n onSizesChange(newLeft, newRight);\n },\n [leftPanel, rightPanel, onSizesChange]\n );\n\n /**\n * Apply a preset.\n */\n const handlePreset = useCallback(\n (preset: ResizePreset) => {\n const leftSize = preset.sizes[0];\n const rightSize = preset.sizes[1];\n if (leftSize !== undefined && rightSize !== undefined) {\n onSizesChange(leftSize, rightSize);\n }\n },\n [onSizesChange]\n );\n\n /**\n * Handle cancel - revert to original sizes.\n */\n const handleCancel = useCallback(() => {\n onSizesChange(originalSizes.left, originalSizes.right);\n onOpenChange(false);\n }, [onSizesChange, onOpenChange, originalSizes]);\n\n /**\n * Handle close (X button or click outside) - keep changes.\n */\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n if (!isOpen) return null;\n\n // Popover placement based on direction\n const placement = direction === 'horizontal' ? 'bottom' : 'right';\n\n return (\n <DialogTrigger isOpen={isOpen} onOpenChange={onOpenChange}>\n <AriaButton className=\"sr-only\">Open resize controls</AriaButton>\n <Popover\n triggerRef={triggerRef}\n placement={placement}\n offset={8}\n className={cn(\n 'w-72',\n 'rounded-lg border border-[var(--border)]',\n 'bg-[var(--popover)] text-[var(--popover-foreground)]',\n 'shadow-lg',\n 'outline-none',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95'\n )}\n >\n <Dialog className=\"outline-none\">\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-[var(--border)] px-4 py-3\">\n <h3 className=\"text-sm font-medium\">Resize: {groupLabel}</h3>\n <AriaButton\n onPress={handleClose}\n className={cn(\n 'inline-flex items-center justify-center rounded-md',\n 'min-h-[44px] min-w-[44px]',\n 'text-[var(--menu-muted)]',\n 'hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2'\n )}\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </AriaButton>\n </div>\n\n {/* Content */}\n <div className=\"space-y-4 px-4 py-4\">\n {/* Left/Top Panel NumberField */}\n <div>\n <NumberField\n label={`${leftPanel.name} (%)`}\n value={Math.round(leftSize)}\n onChange={handleLeftChange}\n minValue={leftPanel.collapsible ? 0 : leftPanel.minSize}\n maxValue={leftPanel.maxSize}\n step={1}\n stepperLayout=\"sides\"\n />\n </div>\n\n {/* Right/Bottom Panel NumberField */}\n <div>\n <NumberField\n label={`${rightPanel.name} (%)`}\n value={Math.round(rightSize)}\n onChange={handleRightChange}\n minValue={rightPanel.collapsible ? 0 : rightPanel.minSize}\n maxValue={rightPanel.maxSize}\n step={1}\n stepperLayout=\"sides\"\n />\n </div>\n\n {/* Presets */}\n {presets && presets.length > 0 && (\n <div className=\"border-t border-[var(--border)] pt-4\">\n <div className=\"mb-2 text-xs font-medium text-[var(--menu-muted)]\">\n Presets\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {presets.map((preset, index) => (\n <Button\n key={index}\n variant=\"outline\"\n size=\"sm\"\n onPress={() => handlePreset(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex justify-end border-t border-[var(--border)] px-4 py-3\">\n <Button variant=\"ghost\" size=\"sm\" onPress={handleCancel}>\n Cancel\n </Button>\n </div>\n </Dialog>\n </Popover>\n </DialogTrigger>\n );\n }\n);\n\nResizablePopover.displayName = 'ResizablePopover';\n","/**\n * ResizableHandle Component\n *\n * Draggable handle between resizable panels.\n * Provides keyboard navigation, ARIA slider semantics, and precision popover.\n *\n * @see {@link ../../docs/prd/resizable-prd.md} for full requirements\n */\n\nimport {\n forwardRef,\n useRef,\n useEffect,\n useState,\n useCallback,\n type ReactElement,\n} from 'react';\nimport { GripVertical, GripHorizontal } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport type { ResizableHandleProps } from '../Resizable.types';\nimport {\n resizableHandleVariants,\n resizableGripVariants,\n DEFAULT_MIN_SIZE,\n DEFAULT_MAX_SIZE,\n} from '../Resizable.types';\nimport { useResizableContext } from '../hooks/useResizableContext';\nimport { useResizable } from '../hooks/useResizable';\nimport { ResizablePopover } from './ResizablePopover';\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResizableHandle - Draggable handle between panels.\n *\n * Must be used within a ResizablePanelGroup, between ResizablePanels.\n * Provides drag, keyboard, and popover controls for resizing.\n *\n * @example\n * ```tsx\n * <ResizableHandle\n * presets={[\n * { label: 'Equal', sizes: [50, 50] },\n * { label: 'Focus Left', sizes: [70, 30] },\n * ]}\n * />\n * ```\n */\nexport const ResizableHandle = forwardRef<HTMLDivElement, ResizableHandleProps>(\n function ResizableHandle(\n { withHandle = true, presets, disabled = false, className },\n ref\n ): ReactElement {\n const {\n direction,\n groupLabel,\n sizes,\n setSizes,\n panels,\n announce,\n containerRef,\n } = useResizableContext();\n\n // Track handle index based on DOM position\n const internalRef = useRef<HTMLDivElement>(null);\n const handleRef = (ref as React.RefObject<HTMLDivElement>) || internalRef;\n const [handleIndex, setHandleIndex] = useState(0);\n\n // Calculate handle index based on DOM position\n useEffect(() => {\n const handle = handleRef.current;\n const container = containerRef.current;\n if (!handle || !container) return;\n\n // Count handles before this one\n const handles = container.querySelectorAll('[role=\"slider\"]');\n let index = 0;\n handles.forEach((h, i) => {\n if (h === handle) {\n index = i;\n }\n });\n setHandleIndex(index);\n }, [containerRef, handleRef]);\n\n // Handle controls panels at handleIndex and handleIndex + 1\n const leftPanelIndex = handleIndex;\n const rightPanelIndex = handleIndex + 1;\n\n // Get adjacent panel info\n const leftPanel = panels[leftPanelIndex];\n const rightPanel = panels[rightPanelIndex];\n\n // Get current sizes for adjacent panels\n const leftSize = sizes[leftPanelIndex] ?? 50;\n const rightSize = sizes[rightPanelIndex] ?? 50;\n\n // Popover state\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n\n // Handle size changes from popover\n const handlePopoverSizesChange = useCallback(\n (newLeftSize: number, newRightSize: number) => {\n const newSizes = [...sizes];\n newSizes[leftPanelIndex] = newLeftSize;\n newSizes[rightPanelIndex] = newRightSize;\n setSizes(newSizes);\n },\n [sizes, setSizes, leftPanelIndex, rightPanelIndex]\n );\n\n // Use resize hook for drag/keyboard handling\n const { isDragging, handlePointerDown, handleKeyDown } = useResizable({\n direction,\n sizes,\n setSizes,\n panels,\n containerRef,\n leftPanelIndex,\n rightPanelIndex,\n disabled,\n announce,\n groupLabel,\n onOpenPopover: () => setIsPopoverOpen(true),\n });\n\n // Build aria-label with panel names and group context\n const ariaLabel =\n leftPanel && rightPanel\n ? `Resize handle between ${leftPanel.name} and ${rightPanel.name} in ${groupLabel}`\n : `Resize handle in ${groupLabel}`;\n\n // Select grip icon based on direction\n const GripIcon = direction === 'horizontal' ? GripVertical : GripHorizontal;\n\n // Default panel info for popover when panels not registered yet\n const leftPanelInfo = leftPanel ?? {\n name: 'Panel 1',\n minSize: DEFAULT_MIN_SIZE,\n maxSize: DEFAULT_MAX_SIZE,\n collapsible: false,\n };\n const rightPanelInfo = rightPanel ?? {\n name: 'Panel 2',\n minSize: DEFAULT_MIN_SIZE,\n maxSize: DEFAULT_MAX_SIZE,\n collapsible: false,\n };\n\n return (\n <>\n <div\n ref={handleRef}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-valuenow={Math.round(leftSize)}\n aria-valuemin={leftPanel?.collapsible ? 0 : (leftPanel?.minSize ?? 0)}\n aria-valuemax={leftPanel?.maxSize ?? 100}\n aria-orientation={direction}\n aria-disabled={disabled}\n data-direction={direction}\n data-dragging={isDragging}\n data-disabled={disabled}\n onPointerDown={handlePointerDown}\n onKeyDown={handleKeyDown}\n className={cn(\n resizableHandleVariants({\n direction,\n disabled,\n isDragging,\n }),\n className\n )}\n >\n {withHandle && (\n <div\n className={cn(resizableGripVariants({ direction }))}\n aria-hidden=\"true\"\n >\n <GripIcon className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n\n {/* Precision Control Popover */}\n <ResizablePopover\n isOpen={isPopoverOpen}\n onOpenChange={setIsPopoverOpen}\n groupLabel={groupLabel}\n leftPanel={leftPanelInfo}\n rightPanel={rightPanelInfo}\n leftSize={leftSize}\n rightSize={rightSize}\n onSizesChange={handlePopoverSizesChange}\n presets={presets}\n triggerRef={handleRef}\n direction={direction}\n />\n </>\n );\n }\n);\n\nResizableHandle.displayName = 'ResizableHandle';\n\n// Re-export presets prop type for consumers\nexport type { ResizePreset } from '../Resizable.types';\n"]}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { cn } from './chunk-E2KQFV3O.mjs';
|
|
2
|
+
import { BaseComponentPropsSchema } from './chunk-5SVLJN2C.mjs';
|
|
3
|
+
import { memo, forwardRef, useId } from 'react';
|
|
4
|
+
import { ProgressBar } from 'react-aria-components';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
|
|
9
|
+
var progressTrackVariants = cva(
|
|
10
|
+
// Base styles - track container
|
|
11
|
+
"relative w-full overflow-hidden rounded-full bg-[var(--accent-background)]",
|
|
12
|
+
{
|
|
13
|
+
variants: {
|
|
14
|
+
size: {
|
|
15
|
+
sm: "h-1",
|
|
16
|
+
// 4px
|
|
17
|
+
default: "h-2",
|
|
18
|
+
// 8px
|
|
19
|
+
lg: "h-3"
|
|
20
|
+
// 12px
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
size: "default"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
var progressIndicatorVariants = cva(
|
|
29
|
+
// Base styles - indicator with smooth transition
|
|
30
|
+
"h-full rounded-full transition-all duration-300 ease-out",
|
|
31
|
+
{
|
|
32
|
+
variants: {
|
|
33
|
+
variant: {
|
|
34
|
+
default: "bg-[var(--primary)]",
|
|
35
|
+
success: "bg-[var(--success,hsl(142,76%,36%))]",
|
|
36
|
+
warning: "bg-[var(--warning,hsl(38,92%,50%))]",
|
|
37
|
+
destructive: "bg-[var(--destructive)]"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
defaultVariants: {
|
|
41
|
+
variant: "default"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
var progressContainerVariants = cva("flex w-full gap-2", {
|
|
46
|
+
variants: {
|
|
47
|
+
labelPosition: {
|
|
48
|
+
top: "flex-col",
|
|
49
|
+
side: "flex-row items-center"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
defaultVariants: {
|
|
53
|
+
labelPosition: "top"
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
var Progress = memo(
|
|
57
|
+
forwardRef(
|
|
58
|
+
({
|
|
59
|
+
value,
|
|
60
|
+
minValue = 0,
|
|
61
|
+
maxValue = 100,
|
|
62
|
+
isIndeterminate = false,
|
|
63
|
+
label,
|
|
64
|
+
showValueLabel = true,
|
|
65
|
+
valueLabel,
|
|
66
|
+
formatOptions,
|
|
67
|
+
labelPosition = "top",
|
|
68
|
+
variant = "default",
|
|
69
|
+
size = "default",
|
|
70
|
+
className,
|
|
71
|
+
"aria-label": ariaLabel,
|
|
72
|
+
"aria-labelledby": ariaLabelledBy,
|
|
73
|
+
"aria-describedby": ariaDescribedBy,
|
|
74
|
+
...props
|
|
75
|
+
}, ref) => {
|
|
76
|
+
const labelId = useId();
|
|
77
|
+
const shouldShowValueLabel = showValueLabel && !isIndeterminate;
|
|
78
|
+
return /* @__PURE__ */ jsx(
|
|
79
|
+
ProgressBar,
|
|
80
|
+
{
|
|
81
|
+
ref,
|
|
82
|
+
value: isIndeterminate ? void 0 : value,
|
|
83
|
+
minValue,
|
|
84
|
+
maxValue,
|
|
85
|
+
isIndeterminate,
|
|
86
|
+
formatOptions: formatOptions ?? { style: "percent" },
|
|
87
|
+
"aria-label": ariaLabel,
|
|
88
|
+
"aria-labelledby": label ? labelId : ariaLabelledBy,
|
|
89
|
+
"aria-describedby": ariaDescribedBy,
|
|
90
|
+
className: cn(progressContainerVariants({ labelPosition }), className),
|
|
91
|
+
...props,
|
|
92
|
+
children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
93
|
+
(label || shouldShowValueLabel) && /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
94
|
+
label && /* @__PURE__ */ jsx(
|
|
95
|
+
"span",
|
|
96
|
+
{
|
|
97
|
+
id: labelId,
|
|
98
|
+
className: "font-medium text-[var(--content-foreground)]",
|
|
99
|
+
children: label
|
|
100
|
+
}
|
|
101
|
+
),
|
|
102
|
+
shouldShowValueLabel && /* @__PURE__ */ jsx(
|
|
103
|
+
"span",
|
|
104
|
+
{
|
|
105
|
+
"aria-hidden": "true",
|
|
106
|
+
className: "text-[var(--menu-muted)]",
|
|
107
|
+
children: valueLabel ?? valueText
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
] }),
|
|
111
|
+
/* @__PURE__ */ jsx("div", { className: progressTrackVariants({ size }), children: /* @__PURE__ */ jsx(
|
|
112
|
+
"div",
|
|
113
|
+
{
|
|
114
|
+
className: cn(
|
|
115
|
+
progressIndicatorVariants({ variant }),
|
|
116
|
+
isIndeterminate && "motion-safe:animate-pulse"
|
|
117
|
+
),
|
|
118
|
+
style: {
|
|
119
|
+
width: isIndeterminate ? "100%" : `${percentage ?? 0}%`
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
) })
|
|
123
|
+
] })
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
Progress.displayName = "Progress";
|
|
130
|
+
var ProgressPropsSchema = BaseComponentPropsSchema.extend({
|
|
131
|
+
// Value props
|
|
132
|
+
/** Current progress value (0-100 by default) */
|
|
133
|
+
value: z.number().optional(),
|
|
134
|
+
/** Minimum value (default: 0) */
|
|
135
|
+
minValue: z.number().optional().default(0),
|
|
136
|
+
/** Maximum value (default: 100) */
|
|
137
|
+
maxValue: z.number().optional().default(100),
|
|
138
|
+
/** When true, shows indeterminate animation (unknown progress) */
|
|
139
|
+
isIndeterminate: z.boolean().optional(),
|
|
140
|
+
// Label props
|
|
141
|
+
/** Label text displayed above or beside the progress bar */
|
|
142
|
+
label: z.string().optional(),
|
|
143
|
+
/** Show/hide the value label (default: true) */
|
|
144
|
+
showValueLabel: z.boolean().optional().default(true),
|
|
145
|
+
/** Custom value label text (overrides formatted value) */
|
|
146
|
+
valueLabel: z.string().optional(),
|
|
147
|
+
/** Label position relative to progress bar */
|
|
148
|
+
labelPosition: z.enum(["top", "side"]).optional().default("top"),
|
|
149
|
+
// Note: formatOptions is Intl.NumberFormatOptions which can't be validated by Zod
|
|
150
|
+
// It's handled in the TypeScript interface instead
|
|
151
|
+
// Variants
|
|
152
|
+
/** Color variant for semantic meaning */
|
|
153
|
+
variant: z.enum(["default", "success", "warning", "destructive"]).optional().default("default"),
|
|
154
|
+
/** Size variant controlling track height */
|
|
155
|
+
size: z.enum(["sm", "default", "lg"]).optional().default("default")
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
export { Progress, ProgressPropsSchema, progressContainerVariants, progressIndicatorVariants, progressTrackVariants };
|
|
159
|
+
//# sourceMappingURL=chunk-FJRXLJC2.mjs.map
|
|
160
|
+
//# sourceMappingURL=chunk-FJRXLJC2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/elements/Progress/Progress.tsx","../src/elements/Progress/Progress.types.ts"],"names":["AriaProgressBar"],"mappings":"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","file":"chunk-FJRXLJC2.mjs","sourcesContent":["\"use client\";\n\n/**\n * Progress Component\n * Accessible progress bar with React Aria primitives and CVA styling\n *\n * @see React Aria ProgressBar: https://react-aria.adobe.com/ProgressBar\n * @see ShadCN Progress: https://ui.shadcn.com/docs/components/progress\n * @see spec.md FR-009 (WCAG 2.2 AAA - 7:1 contrast ratio)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\nimport { forwardRef, memo, useId } from 'react';\nimport { ProgressBar as AriaProgressBar } from 'react-aria-components';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type { ProgressProps } from './Progress.types';\n\n/**\n * Progress track variants (the background container)\n * Controls size/height of the progress bar\n */\nconst progressTrackVariants = cva(\n // Base styles - track container\n 'relative w-full overflow-hidden rounded-full bg-[var(--accent-background)]',\n {\n variants: {\n size: {\n sm: 'h-1', // 4px\n default: 'h-2', // 8px\n lg: 'h-3', // 12px\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Progress indicator variants (the filled portion)\n * Controls color and animation based on variant and state\n */\nconst progressIndicatorVariants = cva(\n // Base styles - indicator with smooth transition\n 'h-full rounded-full transition-all duration-300 ease-out',\n {\n variants: {\n variant: {\n default: 'bg-[var(--primary)]',\n success: 'bg-[var(--success,hsl(142,76%,36%))]',\n warning: 'bg-[var(--warning,hsl(38,92%,50%))]',\n destructive: 'bg-[var(--destructive)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\n/**\n * Progress container variants (wrapper with label positioning)\n */\nconst progressContainerVariants = cva('flex w-full gap-2', {\n variants: {\n labelPosition: {\n top: 'flex-col',\n side: 'flex-row items-center',\n },\n },\n defaultVariants: {\n labelPosition: 'top',\n },\n});\n\nexport interface ProgressComponentProps\n extends Omit<ProgressProps, 'children' | 'size' | 'variant'>,\n VariantProps<typeof progressTrackVariants>,\n VariantProps<typeof progressIndicatorVariants> {\n /** Size variant controlling track height */\n size?: 'sm' | 'default' | 'lg';\n /** Color variant for semantic meaning */\n variant?: 'default' | 'success' | 'warning' | 'destructive';\n}\n\n/**\n * Progress Component\n * Displays determinate or indeterminate progress indicators\n *\n * Features:\n * - WCAG 2.2 AAA compliant (7:1 contrast ratio)\n * - Determinate and indeterminate modes\n * - Custom value formatting via Intl.NumberFormat\n * - 3 size variants (sm, default, lg)\n * - 4 color variants (default, success, warning, destructive)\n * - Label support with flexible positioning\n * - Theme-aware styling via semantic CSS tokens\n */\nconst Progress = memo(\n forwardRef<HTMLDivElement, ProgressComponentProps>(\n (\n {\n value,\n minValue = 0,\n maxValue = 100,\n isIndeterminate = false,\n label,\n showValueLabel = true,\n valueLabel,\n formatOptions,\n labelPosition = 'top',\n variant = 'default',\n size = 'default',\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const labelId = useId();\n\n // Determine if we should show the value label\n const shouldShowValueLabel = showValueLabel && !isIndeterminate;\n\n return (\n <AriaProgressBar\n ref={ref}\n value={isIndeterminate ? undefined : value}\n minValue={minValue}\n maxValue={maxValue}\n isIndeterminate={isIndeterminate}\n formatOptions={formatOptions ?? { style: 'percent' }}\n aria-label={ariaLabel}\n aria-labelledby={label ? labelId : ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n className={cn(progressContainerVariants({ labelPosition }), className)}\n {...props}\n >\n {({ percentage, valueText }) => (\n <>\n {/* Label row with optional value display */}\n {(label || shouldShowValueLabel) && (\n <div className=\"flex justify-between text-sm\">\n {label && (\n <span\n id={labelId}\n className=\"font-medium text-[var(--content-foreground)]\"\n >\n {label}\n </span>\n )}\n {shouldShowValueLabel && (\n <span\n aria-hidden=\"true\"\n className=\"text-[var(--menu-muted)]\"\n >\n {valueLabel ?? valueText}\n </span>\n )}\n </div>\n )}\n\n {/* Progress track and indicator */}\n <div className={progressTrackVariants({ size })}>\n <div\n className={cn(\n progressIndicatorVariants({ variant }),\n isIndeterminate && 'motion-safe:animate-pulse'\n )}\n style={{\n width: isIndeterminate ? '100%' : `${percentage ?? 0}%`,\n }}\n />\n </div>\n </>\n )}\n </AriaProgressBar>\n );\n }\n )\n);\n\nProgress.displayName = 'Progress';\n\nexport {\n Progress,\n progressTrackVariants,\n progressIndicatorVariants,\n progressContainerVariants,\n};\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\n\n/**\n * Progress props schema extending BaseComponentProps\n *\n * @see React Aria ProgressBar: https://react-aria.adobe.com/ProgressBar\n * @see ShadCN Progress: https://ui.shadcn.com/docs/components/progress\n * @see tasks.md Phase 1.1 (Type System)\n * @see spec.md FR-009 (WCAG 2.2 AAA - 7:1 contrast ratio)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const ProgressPropsSchema = BaseComponentPropsSchema.extend({\n // Value props\n /** Current progress value (0-100 by default) */\n value: z.number().optional(),\n /** Minimum value (default: 0) */\n minValue: z.number().optional().default(0),\n /** Maximum value (default: 100) */\n maxValue: z.number().optional().default(100),\n /** When true, shows indeterminate animation (unknown progress) */\n isIndeterminate: z.boolean().optional(),\n\n // Label props\n /** Label text displayed above or beside the progress bar */\n label: z.string().optional(),\n /** Show/hide the value label (default: true) */\n showValueLabel: z.boolean().optional().default(true),\n /** Custom value label text (overrides formatted value) */\n valueLabel: z.string().optional(),\n /** Label position relative to progress bar */\n labelPosition: z.enum(['top', 'side']).optional().default('top'),\n\n // Note: formatOptions is Intl.NumberFormatOptions which can't be validated by Zod\n // It's handled in the TypeScript interface instead\n\n // Variants\n /** Color variant for semantic meaning */\n variant: z\n .enum(['default', 'success', 'warning', 'destructive'])\n .optional()\n .default('default'),\n /** Size variant controlling track height */\n size: z.enum(['sm', 'default', 'lg']).optional().default('default'),\n});\n\nexport type ProgressProps = z.infer<typeof ProgressPropsSchema> & {\n /** Number format options for value display (default: { style: 'percent' }) */\n formatOptions?: Intl.NumberFormatOptions;\n};\n\n/**\n * Progress variant type for CVA\n */\nexport type ProgressVariant = NonNullable<ProgressProps['variant']>;\n\n/**\n * Progress size type for CVA\n */\nexport type ProgressSize = NonNullable<ProgressProps['size']>;\n\n/**\n * Progress label position type\n */\nexport type ProgressLabelPosition = NonNullable<ProgressProps['labelPosition']>;\n"]}
|