@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/Chart/chart.variants.ts","../src/elements/Chart/chart.constants.ts","../src/elements/Chart/useChartDimensions.ts","../src/elements/Chart/useRovingTabIndex.ts","../src/elements/Chart/ChartContext.tsx","../src/elements/Chart/ChartGrid.tsx","../src/elements/Chart/ChartAxis.tsx","../src/elements/Chart/ChartDataPoint.tsx","../src/elements/Chart/ChartBarSeries.tsx","../src/elements/Chart/ChartLineSeries.tsx","../src/elements/Chart/ChartSVG.tsx","../src/elements/Chart/ChartTooltip.tsx","../src/elements/Chart/ChartLegend.tsx","../src/elements/Chart/ChartAnnouncer.tsx","../src/elements/Chart/ChartDataTable.tsx","../src/elements/Chart/useChartKeyboard.ts","../src/elements/Chart/Chart.tsx","../src/elements/Chart/Chart.types.ts"],"names":["useState","useMemo","useCallback","value","jsx","useEffect","jsxs","useRef","VisuallyHidden"],"mappings":"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","file":"chunk-D6CBOECS.mjs","sourcesContent":["/**\n * Chart Component CVA Variants\n *\n * Defines class-variance-authority variants for chart styling.\n * Implements responsive, theme-aware styling via CSS variables.\n *\n * @see plan.md CVA Variants section\n * @see chart-prd.md FR-013 (Theme Integration)\n */\n\nimport { cva, type VariantProps } from 'class-variance-authority';\n\n// ============================================================================\n// Chart Container Variants\n// ============================================================================\n\n/**\n * Chart container variants\n * Applies to the outer figure element\n */\nexport const chartVariants = cva(\n // Base classes\n 'relative w-full overflow-hidden rounded-lg border',\n {\n variants: {\n variant: {\n default: 'border-[var(--border)] bg-[var(--content-background)]',\n muted: 'border-[var(--accent-background)] bg-[var(--accent-background)]/50',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport type ChartVariants = VariantProps<typeof chartVariants>;\n\n// ============================================================================\n// Data Point Variants\n// ============================================================================\n\n/**\n * Data point variants\n * Applies to individual bar rects or line circles\n * Note: Fill/stroke colors are applied dynamically via getSeriesColor\n */\nexport const dataPointVariants = cva(\n // Base classes\n 'cursor-pointer focus-visible:outline-none',\n {\n variants: {\n type: {\n bar: '', // Fill color set dynamically per series\n line: 'stroke-2', // Stroke color set dynamically per series\n },\n state: {\n default: '',\n focused: '', // Focus ring provides visual feedback, no scale needed for data points\n selected: 'opacity-80',\n },\n },\n defaultVariants: {\n type: 'bar',\n state: 'default',\n },\n }\n);\n\nexport type DataPointVariants = VariantProps<typeof dataPointVariants>;\n\n// ============================================================================\n// Focus Ring Variants\n// ============================================================================\n\n/**\n * Focus ring variants for keyboard navigation\n * Applied to SVG elements that receive keyboard focus\n */\nexport const focusRingVariants = cva(\n // Base classes\n 'pointer-events-none',\n {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n },\n defaultVariants: {\n visible: false,\n },\n }\n);\n\nexport type FocusRingVariants = VariantProps<typeof focusRingVariants>;\n\n// ============================================================================\n// Legend Variants\n// ============================================================================\n\n/**\n * Legend variants\n * Applied to the legend container below the chart\n */\nexport const legendVariants = cva(\n // Base classes - horizontal flex layout below chart\n 'flex flex-wrap items-center justify-center gap-4 px-4 py-2',\n {\n variants: {\n visible: {\n true: '',\n false: 'hidden',\n },\n },\n defaultVariants: {\n visible: true,\n },\n }\n);\n\nexport type LegendVariants = VariantProps<typeof legendVariants>;\n\n/*\n * High Contrast Mode Support\n *\n * These styles are applied via CSS when forced-colors is active.\n * Add to a global CSS file or component styles:\n *\n * @media (forced-colors: active) {\n * .chart-data-point {\n * forced-color-adjust: none;\n * stroke: CanvasText;\n * stroke-width: 2px;\n * }\n * .chart-bar {\n * fill: Highlight;\n * stroke: CanvasText;\n * }\n * .chart-line {\n * stroke: LinkText;\n * }\n * .chart-focus-ring {\n * stroke: Highlight;\n * stroke-width: 3px;\n * }\n * }\n */\n","/**\n * Chart Component Constants\n *\n * Defines constants and defaults for chart dimensions, styling, and algorithms.\n * All values follow WCAG 2.2 AAA guidelines where applicable.\n *\n * @see plan.md Constants & Defaults section\n */\n\n// ============================================================================\n// Aspect Ratio & Dimensions\n// ============================================================================\n\n/**\n * Chart aspect ratio (16:9 landscape)\n * Height = width * CHART_ASPECT_RATIO\n */\nexport const CHART_ASPECT_RATIO = 9 / 16; // 0.5625\n\n/**\n * Padding around the plot area (in pixels)\n * Provides space for axes, labels, and legend\n */\nexport const CHART_PADDING = {\n top: 20, // Space for title overflow\n right: 20, // Space for y-axis label\n bottom: 60, // Space for x-axis labels + legend\n left: 60, // Space for y-axis labels\n} as const;\n\n/**\n * Minimum chart dimensions to ensure readability\n */\nexport const MIN_CHART_WIDTH = 300;\nexport const MIN_CHART_HEIGHT = 169; // 300 * 9/16\n\n// ============================================================================\n// Bar Chart Constants\n// ============================================================================\n\n/**\n * Bar layout constants for grouped bar charts\n */\nexport const BAR_GROUP_PADDING = 0.2; // 20% of group width as gap between groups\nexport const BAR_PADDING = 0.1; // 10% of bar width as gap between bars in group\nexport const MIN_BAR_WIDTH = 20; // Minimum bar width in pixels\nexport const BAR_RADIUS = 4; // Border radius for bar tops\n\n// ============================================================================\n// Line Chart Constants\n// ============================================================================\n\n/**\n * Line rendering constants\n */\nexport const LINE_STROKE_WIDTH = 2;\nexport const POINT_RADIUS = 6;\nexport const POINT_HOVER_RADIUS = 8;\n\n/**\n * Stroke dash arrays for line patterns (accessibility feature)\n * Different patterns help distinguish series for colorblind users\n */\nexport const LINE_PATTERNS = {\n solid: 'none',\n dashed: '8 4', // 8px dash, 4px gap\n dotted: '2 4', // 2px dot, 4px gap\n} as const;\n\n// ============================================================================\n// Grid & Axis Constants\n// ============================================================================\n\n/**\n * Grid line constants\n */\nexport const GRID_LINE_COUNT = 5; // Number of horizontal grid lines\nexport const GRID_COLOR = 'var(--border)'; // With 70% opacity via stroke-opacity\nexport const GRID_STROKE_WIDTH = 1;\nexport const GRID_STROKE_OPACITY = 0.7;\n\n/**\n * Axis constants\n */\nexport const AXIS_COLOR = 'var(--border)';\nexport const AXIS_STROKE_WIDTH = 1;\nexport const AXIS_TICK_SIZE = 6;\nexport const AXIS_LABEL_FONT_SIZE = 12;\n\n// ============================================================================\n// Accessibility Constants\n// ============================================================================\n\n/**\n * Touch target constants (WCAG 2.2 AAA: minimum 44x44px)\n */\nexport const MIN_TOUCH_TARGET = 44;\nexport const FOCUS_RING_OFFSET = 4; // Gap between element and focus ring\nexport const FOCUS_RING_WIDTH = 2;\n\n// ============================================================================\n// Series Colors\n// ============================================================================\n\n/**\n * Default series colors using CSS variables with fallbacks\n * Maps to --chart-1 through --chart-5 if defined, otherwise uses accessible defaults\n */\nexport const DEFAULT_SERIES_COLORS = [\n 'var(--chart-1, hsl(221 83% 53%))', // Series 0 - Blue\n 'var(--chart-2, hsl(142 71% 45%))', // Series 1 - Green\n 'var(--chart-3, hsl(38 92% 50%))', // Series 2 - Orange\n 'var(--chart-4, hsl(262 83% 58%))', // Series 3 - Purple\n 'var(--chart-5, hsl(0 84% 60%))', // Series 4 - Red\n] as const;\n\n// ============================================================================\n// Y-Axis Nice Numbers Algorithm\n// ============================================================================\n\n/**\n * Calculate nice round numbers for axis labels\n * Based on \"Nice Numbers for Graph Labels\" algorithm by Paul Heckbert\n *\n * @param range - The data range (max - min)\n * @param round - Whether to round to nearest nice number\n * @returns A nice round number suitable for axis ticks\n */\nexport function niceNum(range: number, round: boolean): number {\n const exponent = Math.floor(Math.log10(range));\n const fraction = range / Math.pow(10, exponent);\n let niceFraction: number;\n\n if (round) {\n if (fraction < 1.5) niceFraction = 1;\n else if (fraction < 3) niceFraction = 2;\n else if (fraction < 7) niceFraction = 5;\n else niceFraction = 10;\n } else {\n if (fraction <= 1) niceFraction = 1;\n else if (fraction <= 2) niceFraction = 2;\n else if (fraction <= 5) niceFraction = 5;\n else niceFraction = 10;\n }\n\n return niceFraction * Math.pow(10, exponent);\n}\n\n/**\n * Calculate nice tick values for Y-axis\n *\n * @param minValue - Minimum data value\n * @param maxValue - Maximum data value\n * @param tickCount - Target number of ticks (default: 5)\n * @returns Array of nice tick values\n */\nexport function calculateYAxisTicks(\n minValue: number,\n maxValue: number,\n tickCount = 5\n): number[] {\n // Handle edge case where min equals max\n if (minValue === maxValue) {\n if (minValue === 0) {\n return [0, 25, 50, 75, 100];\n }\n // Add padding around the single value\n minValue = minValue * 0.9;\n maxValue = maxValue * 1.1;\n }\n\n const range = niceNum(maxValue - minValue, false);\n const tickSpacing = niceNum(range / (tickCount - 1), true);\n const niceMin = Math.floor(minValue / tickSpacing) * tickSpacing;\n const niceMax = Math.ceil(maxValue / tickSpacing) * tickSpacing;\n\n const ticks: number[] = [];\n for (let tick = niceMin; tick <= niceMax; tick += tickSpacing) {\n ticks.push(tick);\n }\n\n return ticks;\n}\n\n/**\n * Calculate bar layout for grouped bar charts\n *\n * @param plotWidth - Available width for the plot area\n * @param labelCount - Number of labels (x-axis categories)\n * @param seriesCount - Number of series (bars per group)\n * @param plotX - X offset of the plot area (default: 0)\n * @returns Bar layout calculations\n */\nexport function calculateBarLayout(\n plotWidth: number,\n labelCount: number,\n seriesCount: number,\n plotX = 0\n): {\n barWidth: number;\n groupWidth: number;\n getBarX: (labelIdx: number, seriesIdx: number) => number;\n} {\n // Total width per group (one group per label)\n const groupWidth = plotWidth / labelCount;\n\n // Width available for bars after group padding\n const availableWidth = groupWidth * (1 - BAR_GROUP_PADDING);\n\n // Width per bar after bar padding\n const barWidth = Math.max(\n MIN_BAR_WIDTH,\n (availableWidth / seriesCount) * (1 - BAR_PADDING)\n );\n\n // Calculate X position for a specific bar (centered within group)\n const getBarX = (labelIdx: number, seriesIdx: number): number => {\n // Center of the group for this label\n const groupCenter = plotX + groupWidth * labelIdx + groupWidth / 2;\n\n // Total width of all bars in the group (with padding between them)\n const totalBarsWidth = seriesCount * barWidth + (seriesCount - 1) * (BAR_PADDING * barWidth);\n\n // Start position of the first bar (centered in group)\n const barsStart = groupCenter - totalBarsWidth / 2;\n\n // Position for this specific bar\n return barsStart + seriesIdx * (barWidth + BAR_PADDING * barWidth);\n };\n\n return { barWidth, groupWidth, getBarX };\n}\n","'use client';\n\n/**\n * useChartDimensions Hook\n *\n * Responsive container sizing using ResizeObserver.\n * Maintains 16:9 aspect ratio and calculates plot area dimensions.\n *\n * @see plan.md Implementation Details - Responsive Container Sizing\n */\n\nimport { useState, useEffect, type RefObject } from 'react';\nimport type { ChartDimensions } from './Chart.types';\nimport {\n CHART_ASPECT_RATIO,\n CHART_PADDING,\n MIN_CHART_WIDTH,\n MIN_CHART_HEIGHT,\n} from './chart.constants';\n\n/**\n * Hook for responsive chart dimensions\n *\n * @param containerRef - Ref to the chart container element\n * @returns ChartDimensions object with width, height, padding, and plotArea\n */\nexport function useChartDimensions(\n containerRef: RefObject<HTMLElement | null>\n): ChartDimensions {\n const [dimensions, setDimensions] = useState<ChartDimensions>({\n width: MIN_CHART_WIDTH,\n height: MIN_CHART_HEIGHT,\n padding: CHART_PADDING,\n plotArea: {\n x: CHART_PADDING.left,\n y: CHART_PADDING.top,\n width: MIN_CHART_WIDTH - CHART_PADDING.left - CHART_PADDING.right,\n height: MIN_CHART_HEIGHT - CHART_PADDING.top - CHART_PADDING.bottom,\n },\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const updateDimensions = (width: number): void => {\n // Enforce minimum width\n const constrainedWidth = Math.max(width, MIN_CHART_WIDTH);\n // Calculate height from aspect ratio\n const height = Math.max(\n constrainedWidth * CHART_ASPECT_RATIO,\n MIN_CHART_HEIGHT\n );\n\n // Calculate plot area (inner dimensions excluding padding)\n const plotArea = {\n x: CHART_PADDING.left,\n y: CHART_PADDING.top,\n width: constrainedWidth - CHART_PADDING.left - CHART_PADDING.right,\n height: height - CHART_PADDING.top - CHART_PADDING.bottom,\n };\n\n setDimensions({\n width: constrainedWidth,\n height,\n padding: CHART_PADDING,\n plotArea,\n });\n };\n\n // Create ResizeObserver to track container width changes\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n // Use contentRect.width for the actual content width\n updateDimensions(entry.contentRect.width);\n });\n\n // Initial measurement\n updateDimensions(container.getBoundingClientRect().width);\n\n // Start observing\n observer.observe(container);\n\n // Cleanup\n return () => {\n observer.disconnect();\n };\n }, [containerRef]);\n\n return dimensions;\n}\n","'use client';\n\n/**\n * useRovingTabIndex Hook\n *\n * 2D roving tabindex pattern for keyboard navigation in grid-like widgets.\n * Supports navigation between series (rows) and points (columns).\n *\n * @see plan.md Decision 2: Keyboard Navigation Pattern\n * @see https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */\n\nimport { useState, useCallback, useMemo } from 'react';\n\nexport interface RovingTabIndexState {\n /** Currently focused row (series index) */\n focusedRow: number;\n /** Currently focused column (point index) */\n focusedCol: number;\n}\n\nexport interface RovingTabIndexActions {\n /** Move focus right (next point) */\n moveRight: () => void;\n /** Move focus left (previous point) */\n moveLeft: () => void;\n /** Move focus down (next series) */\n moveDown: () => void;\n /** Move focus up (previous series) */\n moveUp: () => void;\n /** Move to first point in current series */\n moveToStart: () => void;\n /** Move to last point in current series */\n moveToEnd: () => void;\n /** Set focus to specific position */\n setFocus: (row: number, col: number) => void;\n /** Get tabIndex for a specific cell */\n getTabIndex: (row: number, col: number) => 0 | -1;\n}\n\nexport interface UseRovingTabIndex2DOptions {\n /** Number of rows (series count) */\n rows: number;\n /** Number of columns (points per series) - can vary per row */\n cols: number | ((row: number) => number);\n /** Initial focused row */\n initialRow?: number;\n /** Initial focused column */\n initialCol?: number;\n /** Wrap at boundaries */\n wrap?: boolean;\n /** Callback when focus changes */\n onFocusChange?: (row: number, col: number) => void;\n}\n\n/**\n * Hook for 2D roving tabindex navigation\n *\n * @param options - Configuration options\n * @returns State and actions for managing 2D focus\n */\nexport function useRovingTabIndex2D(\n options: UseRovingTabIndex2DOptions\n): RovingTabIndexState & RovingTabIndexActions {\n const {\n rows,\n cols,\n initialRow = 0,\n initialCol = 0,\n wrap = false,\n onFocusChange,\n } = options;\n\n const [focusedRow, setFocusedRow] = useState(initialRow);\n const [focusedCol, setFocusedCol] = useState(initialCol);\n\n // Get column count for a specific row\n const getColCount = useCallback(\n (row: number): number => {\n return typeof cols === 'function' ? cols(row) : cols;\n },\n [cols]\n );\n\n // Notify on focus change\n const notifyFocusChange = useCallback(\n (row: number, col: number): void => {\n onFocusChange?.(row, col);\n },\n [onFocusChange]\n );\n\n // Move right (next column)\n const moveRight = useCallback((): void => {\n setFocusedCol((currentCol) => {\n const maxCol = getColCount(focusedRow) - 1;\n let newCol = currentCol + 1;\n\n if (newCol > maxCol) {\n newCol = wrap ? 0 : maxCol;\n }\n\n if (newCol !== currentCol) {\n notifyFocusChange(focusedRow, newCol);\n }\n return newCol;\n });\n }, [focusedRow, getColCount, wrap, notifyFocusChange]);\n\n // Move left (previous column)\n const moveLeft = useCallback((): void => {\n setFocusedCol((currentCol) => {\n let newCol = currentCol - 1;\n const maxCol = getColCount(focusedRow) - 1;\n\n if (newCol < 0) {\n newCol = wrap ? maxCol : 0;\n }\n\n if (newCol !== currentCol) {\n notifyFocusChange(focusedRow, newCol);\n }\n return newCol;\n });\n }, [focusedRow, getColCount, wrap, notifyFocusChange]);\n\n // Move down (next row)\n const moveDown = useCallback((): void => {\n setFocusedRow((currentRow) => {\n let newRow = currentRow + 1;\n\n if (newRow >= rows) {\n newRow = wrap ? 0 : rows - 1;\n }\n\n if (newRow !== currentRow) {\n // Constrain column to new row's bounds\n const newMaxCol = getColCount(newRow) - 1;\n setFocusedCol((col) => {\n const constrainedCol = Math.min(col, newMaxCol);\n notifyFocusChange(newRow, constrainedCol);\n return constrainedCol;\n });\n }\n return newRow;\n });\n }, [rows, getColCount, wrap, notifyFocusChange]);\n\n // Move up (previous row)\n const moveUp = useCallback((): void => {\n setFocusedRow((currentRow) => {\n let newRow = currentRow - 1;\n\n if (newRow < 0) {\n newRow = wrap ? rows - 1 : 0;\n }\n\n if (newRow !== currentRow) {\n // Constrain column to new row's bounds\n const newMaxCol = getColCount(newRow) - 1;\n setFocusedCol((col) => {\n const constrainedCol = Math.min(col, newMaxCol);\n notifyFocusChange(newRow, constrainedCol);\n return constrainedCol;\n });\n }\n return newRow;\n });\n }, [rows, getColCount, wrap, notifyFocusChange]);\n\n // Move to first column\n const moveToStart = useCallback((): void => {\n setFocusedCol(0);\n notifyFocusChange(focusedRow, 0);\n }, [focusedRow, notifyFocusChange]);\n\n // Move to last column\n const moveToEnd = useCallback((): void => {\n const maxCol = getColCount(focusedRow) - 1;\n setFocusedCol(maxCol);\n notifyFocusChange(focusedRow, maxCol);\n }, [focusedRow, getColCount, notifyFocusChange]);\n\n // Set focus to specific position\n const setFocus = useCallback(\n (row: number, col: number): void => {\n const constrainedRow = Math.max(0, Math.min(row, rows - 1));\n const maxCol = getColCount(constrainedRow) - 1;\n const constrainedCol = Math.max(0, Math.min(col, maxCol));\n\n setFocusedRow(constrainedRow);\n setFocusedCol(constrainedCol);\n notifyFocusChange(constrainedRow, constrainedCol);\n },\n [rows, getColCount, notifyFocusChange]\n );\n\n // Get tabIndex for a specific cell\n const getTabIndex = useCallback(\n (row: number, col: number): 0 | -1 => {\n return row === focusedRow && col === focusedCol ? 0 : -1;\n },\n [focusedRow, focusedCol]\n );\n\n return useMemo(\n () => ({\n focusedRow,\n focusedCol,\n moveRight,\n moveLeft,\n moveDown,\n moveUp,\n moveToStart,\n moveToEnd,\n setFocus,\n getTabIndex,\n }),\n [\n focusedRow,\n focusedCol,\n moveRight,\n moveLeft,\n moveDown,\n moveUp,\n moveToStart,\n moveToEnd,\n setFocus,\n getTabIndex,\n ]\n );\n}\n","'use client';\n\n/**\n * Chart Context\n *\n * React context for sharing chart state between components.\n * Manages focus, selection, tooltips, dimensions, and scales.\n *\n * @see plan.md Context API section\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n type ReactNode,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport type {\n ChartContextValue,\n DataSeries,\n ChartType,\n ChartDimensions,\n ScaleInfo,\n} from './Chart.types';\nimport { useChartDimensions } from './useChartDimensions';\nimport { useRovingTabIndex2D } from './useRovingTabIndex';\nimport {\n DEFAULT_SERIES_COLORS,\n calculateYAxisTicks,\n} from './chart.constants';\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ChartContext = createContext<ChartContextValue | null>(null);\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook to access chart context\n * @throws Error if used outside ChartProvider\n */\nexport function useChartContext(): ChartContextValue {\n const context = useContext(ChartContext);\n if (!context) {\n throw new Error('useChartContext must be used within a ChartProvider');\n }\n return context;\n}\n\n// ============================================================================\n// Provider Props\n// ============================================================================\n\nexport interface ChartProviderProps {\n children: ReactNode;\n containerRef: RefObject<HTMLElement | null>;\n data: DataSeries[];\n type: ChartType;\n title: string;\n description: string;\n xAxisLabel: string;\n yAxisLabel: string;\n showTooltip: boolean;\n showGrid: boolean;\n showLegend: boolean;\n announceTrends: boolean;\n /** ICU format string for upward trend (use {percent} placeholder) */\n trendUpFormat: string;\n /** ICU format string for downward trend (use {percent} placeholder) */\n trendDownFormat: string;\n startAtZero: boolean;\n /** Whether to reduce/disable animations for accessibility */\n reducedMotion?: boolean;\n onPointFocus?: (\n point: { label: string; value: number },\n seriesIndex: number,\n pointIndex: number\n ) => void;\n onPointSelect?: (\n point: { label: string; value: number },\n seriesIndex: number,\n pointIndex: number\n ) => void;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Calculate union of all labels across series\n */\nfunction getAllLabels(data: DataSeries[]): string[] {\n const labelSet = new Set<string>();\n data.forEach((series) => {\n series.data.forEach((point) => {\n labelSet.add(point.label);\n });\n });\n return Array.from(labelSet);\n}\n\n/**\n * Calculate scales from data and dimensions\n */\nfunction calculateScales(\n data: DataSeries[],\n dimensions: ChartDimensions,\n startAtZero: boolean\n): ScaleInfo {\n const allLabels = getAllLabels(data);\n const { plotArea } = dimensions;\n\n // Find min/max values across all series\n let dataMin = Infinity;\n let dataMax = -Infinity;\n\n data.forEach((series) => {\n series.data.forEach((point) => {\n dataMin = Math.min(dataMin, point.value);\n dataMax = Math.max(dataMax, point.value);\n });\n });\n\n // Handle edge case of no data\n if (!isFinite(dataMin) || !isFinite(dataMax)) {\n dataMin = 0;\n dataMax = 100;\n }\n\n // Apply startAtZero\n const yMin = startAtZero ? Math.min(0, dataMin) : dataMin;\n\n // Calculate nice tick values\n const yTicks = calculateYAxisTicks(yMin, dataMax);\n const yMax = yTicks[yTicks.length - 1] || dataMax;\n const adjustedYMin = yTicks[0] || yMin;\n\n // X scale: distribute labels evenly across plot width\n const xScale = (labelIndex: number): number => {\n if (allLabels.length <= 1) return plotArea.x + plotArea.width / 2;\n const step = plotArea.width / (allLabels.length);\n return plotArea.x + step * labelIndex + step / 2;\n };\n\n // Y scale: map values to plot height (inverted: higher values = lower y)\n const yRange = yMax - adjustedYMin || 1;\n const yScale = (value: number): number => {\n const normalized = (value - adjustedYMin) / yRange;\n return plotArea.y + plotArea.height * (1 - normalized);\n };\n\n return {\n allLabels,\n xScale,\n yScale,\n yMin: adjustedYMin,\n yMax,\n yTicks,\n };\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\nexport function ChartProvider({\n children,\n containerRef,\n data,\n type,\n title,\n description,\n xAxisLabel,\n yAxisLabel,\n showTooltip,\n showGrid,\n showLegend,\n announceTrends,\n trendUpFormat,\n trendDownFormat,\n startAtZero,\n reducedMotion = true,\n onPointFocus: onPointFocusProp,\n onPointSelect: onPointSelectProp,\n}: ChartProviderProps): ReactElement {\n // State\n const [selectedPoint, setSelectedPoint] = useState<{\n series: number;\n point: number;\n } | null>(null);\n const [announcement, setAnnouncement] = useState('');\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n const [tooltipPoint, setTooltipPoint] = useState<{\n series: number;\n point: number;\n } | null>(null);\n const [currentTrend, setCurrentTrend] = useState<string | null>(null);\n const [currentTrendDirection, setCurrentTrendDirection] = useState<\n 'up' | 'down' | null\n >(null);\n\n // Get dimensions from container\n const dimensions = useChartDimensions(containerRef);\n\n // Calculate scales\n const scales = useMemo(\n () => calculateScales(data, dimensions, startAtZero),\n [data, dimensions, startAtZero]\n );\n\n // Max points per series - available for future roving tabindex\n void useMemo(\n () => Math.max(...data.map((s) => s.data.length)),\n [data]\n );\n\n // Helper to format trend text using ICU format string\n const formatTrendText = useCallback(\n (percent: number, isUp: boolean): string => {\n const format = isUp ? trendUpFormat : trendDownFormat;\n return format.replace('{percent}', String(percent));\n },\n [trendUpFormat, trendDownFormat]\n );\n\n // Helper to calculate trend info - defined before roving hook\n // Returns both text and direction for setting state\n const getTrendInfo = (\n seriesIndex: number,\n pointIndex: number\n ): { text: string; direction: 'up' | 'down' } | null => {\n if (!announceTrends || pointIndex <= 0) return null;\n\n const series = data[seriesIndex];\n if (!series) return null;\n\n const currentPoint = series.data[pointIndex];\n const previousPoint = series.data[pointIndex - 1];\n\n if (!currentPoint || !previousPoint || previousPoint.value === 0) {\n return null;\n }\n\n const change =\n ((currentPoint.value - previousPoint.value) /\n Math.abs(previousPoint.value)) *\n 100;\n const isUp = change >= 0;\n const percent = Math.abs(Math.round(change));\n return {\n text: formatTrendText(percent, isUp),\n direction: isUp ? 'up' : 'down',\n };\n };\n\n // Roving tabindex for 2D navigation\n const roving = useRovingTabIndex2D({\n rows: data.length,\n cols: (row) => data[row]?.data.length || 0,\n onFocusChange: (seriesIndex, pointIndex) => {\n const series = data[seriesIndex];\n const point = series?.data[pointIndex];\n if (!series || !point) return;\n\n // Calculate trend for this specific point\n const trendInfo = getTrendInfo(seriesIndex, pointIndex);\n\n // Store trend for tooltip display\n setCurrentTrend(trendInfo?.text ?? null);\n setCurrentTrendDirection(trendInfo?.direction ?? null);\n\n // Build announcement (include trend with comma prefix for screen reader)\n const position = `${pointIndex + 1} of ${series.data.length}`;\n const seriesInfo = data.length > 1 ? `${series.name}: ` : '';\n const formattedValue = formatValue(point.value);\n const announcementTrend = trendInfo ? `, ${trendInfo.text}` : '';\n\n setAnnouncement(\n `${seriesInfo}${point.label}, ${formattedValue}${announcementTrend}. ${position}.`\n );\n\n // Show tooltip\n if (showTooltip) {\n setIsTooltipVisible(true);\n setTooltipPoint({ series: seriesIndex, point: pointIndex });\n }\n\n // Call external callback\n onPointFocusProp?.(point, seriesIndex, pointIndex);\n },\n });\n\n // Format value using Intl.NumberFormat\n const formatValue = useCallback((value: number): string => {\n const locale =\n typeof navigator !== 'undefined' ? navigator.language : 'en-US';\n return new Intl.NumberFormat(locale).format(value);\n }, []);\n\n // Calculate trend for a specific point - returns text and direction\n const calculateTrendForPoint = useCallback(\n (\n seriesIndex: number,\n pointIndex: number\n ): { text: string; direction: 'up' | 'down' } | null => {\n if (!announceTrends) return null;\n if (pointIndex <= 0) return null; // No previous point to compare\n\n const series = data[seriesIndex];\n if (!series) return null;\n\n const currentPoint = series.data[pointIndex];\n const previousPoint = series.data[pointIndex - 1];\n\n if (!currentPoint || !previousPoint || previousPoint.value === 0) {\n return null;\n }\n\n const change =\n ((currentPoint.value - previousPoint.value) /\n Math.abs(previousPoint.value)) *\n 100;\n const isUp = change >= 0;\n const percent = Math.abs(Math.round(change));\n return {\n text: formatTrendText(percent, isUp),\n direction: isUp ? 'up' : 'down',\n };\n },\n [data, announceTrends, formatTrendText]\n );\n\n // Get series color\n const getSeriesColor = useCallback((seriesIndex: number): string => {\n return DEFAULT_SERIES_COLORS[seriesIndex % DEFAULT_SERIES_COLORS.length] ?? 'var(--chart-1)';\n }, []);\n\n // Get point coordinates\n const getPointCoordinates = useCallback(\n (seriesIndex: number, pointIndex: number): { x: number; y: number } | null => {\n const series = data[seriesIndex];\n const point = series?.data[pointIndex];\n if (!series || !point) return null;\n\n const labelIndex = scales.allLabels.indexOf(point.label);\n if (labelIndex === -1) return null;\n\n return {\n x: scales.xScale(labelIndex),\n y: scales.yScale(point.value),\n };\n },\n [data, scales]\n );\n\n // Actions\n const setFocus = useCallback(\n (series: number, point: number): void => {\n roving.setFocus(series, point);\n },\n [roving]\n );\n\n const selectPoint = useCallback(\n (series: number, point: number): void => {\n setSelectedPoint({ series, point });\n const seriesData = data[series];\n const pointData = seriesData?.data[point];\n if (seriesData && pointData) {\n onPointSelectProp?.(pointData, series, point);\n }\n },\n [data, onPointSelectProp]\n );\n\n const clearSelection = useCallback((): void => {\n setSelectedPoint(null);\n }, []);\n\n const announce = useCallback((message: string): void => {\n setAnnouncement(message);\n }, []);\n\n const showTooltipAt = useCallback(\n (series: number, point: number): void => {\n if (showTooltip) {\n setIsTooltipVisible(true);\n setTooltipPoint({ series, point });\n // Calculate and set trend for this specific point\n const trendResult = calculateTrendForPoint(series, point);\n setCurrentTrend(trendResult?.text ?? null);\n setCurrentTrendDirection(trendResult?.direction ?? null);\n }\n },\n [showTooltip, calculateTrendForPoint]\n );\n\n const hideTooltip = useCallback((): void => {\n setIsTooltipVisible(false);\n setTooltipPoint(null);\n }, []);\n\n // Context value\n const value = useMemo<ChartContextValue>(\n () => ({\n // State\n focusedSeries: roving.focusedRow,\n focusedPoint: roving.focusedCol,\n selectedPoint,\n announcement,\n isTooltipVisible,\n tooltipPoint,\n currentTrend,\n currentTrendDirection,\n\n // Computed\n dimensions,\n scales,\n\n // Props passthrough\n data,\n type,\n title,\n description,\n xAxisLabel,\n yAxisLabel,\n showTooltip,\n showGrid,\n showLegend,\n announceTrends,\n trendUpFormat,\n trendDownFormat,\n startAtZero,\n reducedMotion,\n\n // Actions\n setFocus,\n selectPoint,\n clearSelection,\n announce,\n showTooltipAt,\n hideTooltip,\n\n // Helpers\n getTabIndex: roving.getTabIndex,\n formatValue,\n getSeriesColor,\n getPointCoordinates,\n }),\n [\n roving.focusedRow,\n roving.focusedCol,\n roving.getTabIndex,\n selectedPoint,\n announcement,\n isTooltipVisible,\n tooltipPoint,\n currentTrend,\n currentTrendDirection,\n dimensions,\n scales,\n data,\n type,\n title,\n description,\n xAxisLabel,\n yAxisLabel,\n showTooltip,\n showGrid,\n showLegend,\n announceTrends,\n trendUpFormat,\n trendDownFormat,\n startAtZero,\n reducedMotion,\n setFocus,\n selectPoint,\n clearSelection,\n announce,\n showTooltipAt,\n hideTooltip,\n formatValue,\n getSeriesColor,\n getPointCoordinates,\n ]\n );\n\n return (\n <ChartContext.Provider value={value}>{children}</ChartContext.Provider>\n );\n}\n","'use client';\n\n/**\n * ChartGrid Component\n *\n * Renders optional grid lines behind the chart data.\n * Uses horizontal lines aligned with Y-axis ticks.\n *\n * @see plan.md ChartGrid section\n */\n\nimport { type ReactElement } from 'react';\nimport {\n GRID_COLOR,\n GRID_STROKE_WIDTH,\n GRID_STROKE_OPACITY,\n} from './chart.constants';\n\nexport interface ChartGridProps {\n /** Y-axis tick values for grid line positions */\n yTicks: number[];\n /** Y-scale function to convert values to coordinates */\n yScale: (value: number) => number;\n /** Plot area x position */\n plotX: number;\n /** Plot area width */\n plotWidth: number;\n /** Whether to show grid lines */\n visible: boolean;\n}\n\n/**\n * ChartGrid - Optional background grid lines\n *\n * Renders horizontal grid lines aligned with Y-axis ticks.\n * Uses low opacity for subtle visual guidance.\n */\nexport function ChartGrid({\n yTicks,\n yScale,\n plotX,\n plotWidth,\n visible,\n}: ChartGridProps): ReactElement | null {\n if (!visible) {\n return null;\n }\n\n return (\n <g className=\"chart-grid\" aria-hidden=\"true\" data-testid=\"chart-grid\">\n {yTicks.map((tick) => {\n const y = yScale(tick);\n return (\n <line\n key={tick}\n x1={plotX}\n y1={y}\n x2={plotX + plotWidth}\n y2={y}\n stroke={GRID_COLOR}\n strokeWidth={GRID_STROKE_WIDTH}\n strokeOpacity={GRID_STROKE_OPACITY}\n />\n );\n })}\n </g>\n );\n}\n\nChartGrid.displayName = 'ChartGrid';\n","'use client';\n\n/**\n * ChartAxis Component\n *\n * Renders X and Y axes with labels and tick marks.\n *\n * @see plan.md ChartAxis section\n */\n\nimport { type ReactElement } from 'react';\nimport {\n AXIS_COLOR,\n AXIS_STROKE_WIDTH,\n AXIS_TICK_SIZE,\n AXIS_LABEL_FONT_SIZE,\n} from './chart.constants';\n\nexport interface ChartAxisProps {\n /** All labels for X-axis */\n allLabels: string[];\n /** Y-axis tick values */\n yTicks: number[];\n /** X-scale function */\n xScale: (labelIndex: number) => number;\n /** Y-scale function */\n yScale: (value: number) => number;\n /** Plot area dimensions */\n plotArea: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** X-axis label text */\n xAxisLabel: string;\n /** Y-axis label text */\n yAxisLabel: string;\n /** Value formatter for Y-axis ticks */\n formatValue: (value: number) => string;\n}\n\n/**\n * ChartAxis - X and Y axes rendering\n *\n * Renders axis lines, tick marks, tick labels, and axis titles.\n * Uses semantic tokens for theme-aware styling.\n */\nexport function ChartAxis({\n allLabels,\n yTicks,\n xScale,\n yScale,\n plotArea,\n xAxisLabel,\n yAxisLabel,\n formatValue,\n}: ChartAxisProps): ReactElement {\n const { x: plotX, y: plotY, width: plotWidth, height: plotHeight } = plotArea;\n\n return (\n <g className=\"chart-axis\" aria-hidden=\"true\" data-testid=\"chart-axis\">\n {/* X-axis line */}\n <line\n x1={plotX}\n y1={plotY + plotHeight}\n x2={plotX + plotWidth}\n y2={plotY + plotHeight}\n stroke={AXIS_COLOR}\n strokeWidth={AXIS_STROKE_WIDTH}\n />\n\n {/* Y-axis line */}\n <line\n x1={plotX}\n y1={plotY}\n x2={plotX}\n y2={plotY + plotHeight}\n stroke={AXIS_COLOR}\n strokeWidth={AXIS_STROKE_WIDTH}\n />\n\n {/* X-axis tick marks and labels */}\n {allLabels.map((label, index) => {\n const x = xScale(index);\n const y = plotY + plotHeight;\n\n return (\n <g key={label}>\n {/* Tick mark */}\n <line\n x1={x}\n y1={y}\n x2={x}\n y2={y + AXIS_TICK_SIZE}\n stroke={AXIS_COLOR}\n strokeWidth={AXIS_STROKE_WIDTH}\n />\n {/* Label */}\n <text\n x={x}\n y={y + AXIS_TICK_SIZE + AXIS_LABEL_FONT_SIZE}\n textAnchor=\"middle\"\n fontSize={AXIS_LABEL_FONT_SIZE}\n fill=\"currentColor\"\n className=\"text-[var(--content-foreground)]\"\n >\n {label}\n </text>\n </g>\n );\n })}\n\n {/* Y-axis tick marks and labels */}\n {yTicks.map((tick) => {\n const x = plotX;\n const y = yScale(tick);\n\n return (\n <g key={tick}>\n {/* Tick mark */}\n <line\n x1={x - AXIS_TICK_SIZE}\n y1={y}\n x2={x}\n y2={y}\n stroke={AXIS_COLOR}\n strokeWidth={AXIS_STROKE_WIDTH}\n />\n {/* Label */}\n <text\n x={x - AXIS_TICK_SIZE - 4}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={AXIS_LABEL_FONT_SIZE}\n fill=\"currentColor\"\n className=\"text-[var(--content-foreground)]\"\n >\n {formatValue(tick)}\n </text>\n </g>\n );\n })}\n\n {/* X-axis title */}\n <text\n x={plotX + plotWidth / 2}\n y={plotY + plotHeight + 45}\n textAnchor=\"middle\"\n fontSize={AXIS_LABEL_FONT_SIZE}\n fill=\"currentColor\"\n className=\"text-[var(--content-foreground)] font-medium\"\n >\n {xAxisLabel}\n </text>\n\n {/* Y-axis title (rotated) */}\n <text\n x={15}\n y={plotY + plotHeight / 2}\n textAnchor=\"middle\"\n fontSize={AXIS_LABEL_FONT_SIZE}\n fill=\"currentColor\"\n className=\"text-[var(--content-foreground)] font-medium\"\n transform={`rotate(-90, 15, ${plotY + plotHeight / 2})`}\n >\n {yAxisLabel}\n </text>\n </g>\n );\n}\n\nChartAxis.displayName = 'ChartAxis';\n","'use client';\n\n/**\n * ChartDataPoint Component\n *\n * Focusable data point with keyboard navigation support.\n * Includes invisible hit area for touch targets (44x44px minimum).\n *\n * @see plan.md Implementation Details - Touch Target Pattern\n */\n\nimport {\n type ReactElement,\n type KeyboardEvent,\n type FocusEvent,\n type MouseEvent,\n useRef,\n useEffect,\n} from 'react';\nimport { useFocusRing } from 'react-aria';\nimport { dataPointVariants } from './chart.variants';\nimport {\n MIN_TOUCH_TARGET,\n FOCUS_RING_OFFSET,\n FOCUS_RING_WIDTH,\n BAR_RADIUS,\n POINT_RADIUS,\n} from './chart.constants';\n\nexport interface ChartDataPointProps {\n /** Type of data point (bar or circle) */\n type: 'bar' | 'line';\n /** X coordinate */\n x: number;\n /** Y coordinate */\n y: number;\n /** Width (for bars) */\n width?: number;\n /** Height (for bars) */\n height?: number;\n /** Fill/stroke color */\n color: string;\n /** Series index */\n seriesIndex: number;\n /** Point index within series */\n pointIndex: number;\n /** tabIndex for roving focus */\n tabIndex: 0 | -1;\n /** Accessible label */\n label: string;\n /** Whether this point is selected */\n isSelected?: boolean;\n /** Callback on focus */\n onFocus?: (seriesIndex: number, pointIndex: number) => void;\n /** Callback on blur */\n onBlur?: () => void;\n /** Callback on hover */\n onHover?: (seriesIndex: number, pointIndex: number) => void;\n /** Callback on hover end */\n onHoverEnd?: () => void;\n /** Callback on keydown */\n onKeyDown?: (event: KeyboardEvent) => void;\n}\n\n/**\n * ChartDataPoint - Focusable data point element\n *\n * Renders either a bar (rect) or circle with:\n * - Invisible hit area for 44x44px touch targets\n * - Focus ring on keyboard focus\n * - Keyboard and mouse event handling\n */\nexport function ChartDataPoint({\n type,\n x,\n y,\n width = POINT_RADIUS * 2,\n height = POINT_RADIUS * 2,\n color,\n seriesIndex,\n pointIndex,\n tabIndex,\n label,\n isSelected = false,\n onFocus,\n onBlur,\n onHover,\n onHoverEnd,\n onKeyDown,\n}: ChartDataPointProps): ReactElement {\n const ref = useRef<SVGGElement>(null);\n const { isFocusVisible, focusProps } = useFocusRing();\n\n // Auto-focus when tabIndex becomes 0\n useEffect(() => {\n if (tabIndex === 0 && ref.current) {\n // Check if focus should move to this element\n const activeElement = document.activeElement;\n const isChartFocused =\n activeElement?.closest('[role=\"graphics-document\"]') !== null;\n if (isChartFocused) {\n ref.current.focus();\n }\n }\n }, [tabIndex]);\n\n // Calculate hit area dimensions (minimum 44x44px)\n const hitAreaSize = Math.max(MIN_TOUCH_TARGET, width, height);\n const hitX = type === 'bar' ? x - (hitAreaSize - width) / 2 : x - hitAreaSize / 2;\n const hitY = type === 'bar' ? y - (hitAreaSize - height) / 2 : y - hitAreaSize / 2;\n\n // Handle focus\n const handleFocus = (event: FocusEvent<SVGGElement>): void => {\n focusProps.onFocus?.(event);\n onFocus?.(seriesIndex, pointIndex);\n };\n\n // Handle blur\n const handleBlur = (event: FocusEvent<SVGGElement>): void => {\n focusProps.onBlur?.(event);\n onBlur?.();\n };\n\n // Handle mouse enter\n const handleMouseEnter = (_event: MouseEvent<SVGGElement>): void => {\n onHover?.(seriesIndex, pointIndex);\n };\n\n // Handle mouse leave\n const handleMouseLeave = (_event: MouseEvent<SVGGElement>): void => {\n onHoverEnd?.();\n };\n\n // Determine state for variants\n const state = isSelected ? 'selected' : isFocusVisible ? 'focused' : 'default';\n\n return (\n <g\n ref={ref}\n role=\"listitem\"\n tabIndex={tabIndex}\n aria-label={label}\n className={dataPointVariants({ type, state })}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onKeyDown={onKeyDown}\n data-testid={`chart-point-${seriesIndex}-${pointIndex}`}\n >\n {/* Invisible hit area for touch/click */}\n <rect\n x={hitX}\n y={hitY}\n width={hitAreaSize}\n height={hitAreaSize}\n fill=\"transparent\"\n className=\"cursor-pointer\"\n />\n\n {/* Visual element */}\n {type === 'bar' ? (\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n rx={BAR_RADIUS}\n ry={BAR_RADIUS}\n fill={color}\n className=\"chart-bar\"\n />\n ) : (\n <circle\n cx={x}\n cy={y}\n r={POINT_RADIUS}\n fill={color}\n className=\"chart-point\"\n />\n )}\n\n {/* Focus ring (only when keyboard focused) */}\n {isFocusVisible && (\n type === 'bar' ? (\n <rect\n x={x - FOCUS_RING_OFFSET}\n y={y - FOCUS_RING_OFFSET}\n width={width + FOCUS_RING_OFFSET * 2}\n height={height + FOCUS_RING_OFFSET * 2}\n rx={BAR_RADIUS + FOCUS_RING_OFFSET}\n ry={BAR_RADIUS + FOCUS_RING_OFFSET}\n fill=\"none\"\n stroke=\"var(--ring)\"\n strokeWidth={FOCUS_RING_WIDTH}\n className=\"chart-focus-ring\"\n />\n ) : (\n <circle\n cx={x}\n cy={y}\n r={POINT_RADIUS + FOCUS_RING_OFFSET}\n fill=\"none\"\n stroke=\"var(--ring)\"\n strokeWidth={FOCUS_RING_WIDTH}\n className=\"chart-focus-ring\"\n />\n )\n )}\n </g>\n );\n}\n\nChartDataPoint.displayName = 'ChartDataPoint';\n","'use client';\n\n/**\n * ChartBarSeries Component\n *\n * Renders a series of bars for bar charts.\n * Handles multi-series grouped bar layout.\n *\n * @see plan.md ChartBarSeries section\n */\n\nimport { type ReactElement, type KeyboardEvent } from 'react';\nimport { ChartDataPoint } from './ChartDataPoint';\nimport type { DataSeries, ScaleInfo, ChartDimensions } from './Chart.types';\nimport { calculateBarLayout } from './chart.constants';\n\nexport interface ChartBarSeriesProps {\n /** Series data */\n series: DataSeries;\n /** Series index */\n seriesIndex: number;\n /** Total number of series */\n totalSeries: number;\n /** Chart dimensions */\n dimensions: ChartDimensions;\n /** Scale information */\n scales: ScaleInfo;\n /** Series color */\n color: string;\n /** Get tabIndex for a point */\n getTabIndex: (seriesIndex: number, pointIndex: number) => 0 | -1;\n /** Selected point */\n selectedPoint: { series: number; point: number } | null;\n /** Callback on point focus */\n onPointFocus?: (seriesIndex: number, pointIndex: number) => void;\n /** Callback on point blur */\n onPointBlur?: () => void;\n /** Callback on point hover */\n onPointHover?: (seriesIndex: number, pointIndex: number) => void;\n /** Callback on point hover end */\n onPointHoverEnd?: () => void;\n /** Callback on keydown */\n onKeyDown?: (event: KeyboardEvent) => void;\n /** Value formatter */\n formatValue: (value: number) => string;\n}\n\n/**\n * ChartBarSeries - Bar chart series rendering\n *\n * Renders bars for each data point in the series.\n * Handles grouped bar layout for multi-series charts.\n */\nexport function ChartBarSeries({\n series,\n seriesIndex,\n totalSeries,\n dimensions,\n scales,\n color,\n getTabIndex,\n selectedPoint,\n onPointFocus,\n onPointBlur,\n onPointHover,\n onPointHoverEnd,\n onKeyDown,\n formatValue,\n}: ChartBarSeriesProps): ReactElement {\n const { plotArea } = dimensions;\n const { allLabels, xScale: _xScale, yScale, yMin } = scales;\n\n // Calculate bar layout (pass plotArea.x for correct positioning)\n const { barWidth, getBarX } = calculateBarLayout(\n plotArea.width,\n allLabels.length,\n totalSeries,\n plotArea.x\n );\n\n // Y position of the baseline (where bars start)\n const baselineY = yScale(Math.max(0, yMin));\n\n return (\n <g\n className=\"chart-bar-series\"\n role=\"list\"\n aria-label={`${series.name} series`}\n data-testid={`chart-series-${seriesIndex}`}\n >\n {series.data.map((point, pointIndex) => {\n // Find the label index in allLabels for correct positioning\n const labelIndex = allLabels.indexOf(point.label);\n if (labelIndex === -1) return null; // Skip if label not found\n\n // Calculate bar position\n const barX = getBarX(labelIndex, seriesIndex);\n const barY = yScale(point.value);\n const barHeight = Math.abs(baselineY - barY);\n\n // For negative values, bar extends downward from baseline\n const finalBarY = point.value >= 0 ? barY : baselineY;\n\n // Check if this point is selected\n const isSelected =\n selectedPoint?.series === seriesIndex &&\n selectedPoint?.point === pointIndex;\n\n // Create accessible label\n const accessibleLabel = `${series.name}: ${point.label}, ${formatValue(point.value)}`;\n\n return (\n <ChartDataPoint\n key={`${point.label}-${pointIndex}`}\n type=\"bar\"\n x={barX}\n y={finalBarY}\n width={barWidth}\n height={barHeight}\n color={color}\n seriesIndex={seriesIndex}\n pointIndex={pointIndex}\n tabIndex={getTabIndex(seriesIndex, pointIndex)}\n label={accessibleLabel}\n isSelected={isSelected}\n onFocus={onPointFocus}\n onBlur={onPointBlur}\n onHover={onPointHover}\n onHoverEnd={onPointHoverEnd}\n onKeyDown={onKeyDown}\n />\n );\n })}\n </g>\n );\n}\n\nChartBarSeries.displayName = 'ChartBarSeries';\n","'use client';\n\n/**\n * ChartLineSeries Component\n *\n * Renders a series of connected line with data points.\n * Supports solid, dashed, and dotted line patterns.\n *\n * @see plan.md ChartLineSeries section\n */\n\nimport { type ReactElement, type KeyboardEvent, useMemo } from 'react';\nimport { ChartDataPoint } from './ChartDataPoint';\nimport type { DataSeries, ScaleInfo, LinePattern } from './Chart.types';\nimport { LINE_STROKE_WIDTH, LINE_PATTERNS } from './chart.constants';\n\nexport interface ChartLineSeriesProps {\n /** Series data */\n series: DataSeries;\n /** Series index */\n seriesIndex: number;\n /** Scale information */\n scales: ScaleInfo;\n /** Series color */\n color: string;\n /** Line pattern */\n pattern: LinePattern;\n /** Get tabIndex for a point */\n getTabIndex: (seriesIndex: number, pointIndex: number) => 0 | -1;\n /** Selected point */\n selectedPoint: { series: number; point: number } | null;\n /** Callback on point focus */\n onPointFocus?: (seriesIndex: number, pointIndex: number) => void;\n /** Callback on point blur */\n onPointBlur?: () => void;\n /** Callback on point hover */\n onPointHover?: (seriesIndex: number, pointIndex: number) => void;\n /** Callback on point hover end */\n onPointHoverEnd?: () => void;\n /** Callback on keydown */\n onKeyDown?: (event: KeyboardEvent) => void;\n /** Value formatter */\n formatValue: (value: number) => string;\n}\n\n/**\n * ChartLineSeries - Line chart series rendering\n *\n * Renders a path connecting all data points with circles at each point.\n * Supports different line patterns for accessibility.\n */\nexport function ChartLineSeries({\n series,\n seriesIndex,\n scales,\n color,\n pattern,\n getTabIndex,\n selectedPoint,\n onPointFocus,\n onPointBlur,\n onPointHover,\n onPointHoverEnd,\n onKeyDown,\n formatValue,\n}: ChartLineSeriesProps): ReactElement {\n const { allLabels, xScale, yScale } = scales;\n\n // Calculate point coordinates\n const points = useMemo(() => {\n return series.data\n .map((point, pointIndex) => {\n const labelIndex = allLabels.indexOf(point.label);\n if (labelIndex === -1) return null;\n\n return {\n x: xScale(labelIndex),\n y: yScale(point.value),\n point,\n pointIndex,\n labelIndex,\n };\n })\n .filter((p): p is NonNullable<typeof p> => p !== null)\n .sort((a, b) => a.labelIndex - b.labelIndex); // Sort by x position\n }, [series.data, allLabels, xScale, yScale]);\n\n // Generate SVG path\n const pathD = useMemo(() => {\n if (points.length === 0) return '';\n\n return points\n .map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x} ${p.y}`)\n .join(' ');\n }, [points]);\n\n // Get stroke-dasharray for pattern\n const strokeDasharray =\n LINE_PATTERNS[pattern] === 'none' ? undefined : LINE_PATTERNS[pattern];\n\n return (\n <g\n className=\"chart-line-series\"\n role=\"list\"\n aria-label={`${series.name} series`}\n data-testid={`chart-series-${seriesIndex}`}\n >\n {/* Line path (behind points) */}\n <path\n d={pathD}\n fill=\"none\"\n stroke={color}\n strokeWidth={LINE_STROKE_WIDTH}\n strokeDasharray={strokeDasharray}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"chart-line\"\n aria-hidden=\"true\"\n />\n\n {/* Data points */}\n {points.map(({ x, y, point, pointIndex }) => {\n // Check if this point is selected\n const isSelected =\n selectedPoint?.series === seriesIndex &&\n selectedPoint?.point === pointIndex;\n\n // Create accessible label\n const accessibleLabel = `${series.name}: ${point.label}, ${formatValue(point.value)}`;\n\n return (\n <ChartDataPoint\n key={`${point.label}-${pointIndex}`}\n type=\"line\"\n x={x}\n y={y}\n color={color}\n seriesIndex={seriesIndex}\n pointIndex={pointIndex}\n tabIndex={getTabIndex(seriesIndex, pointIndex)}\n label={accessibleLabel}\n isSelected={isSelected}\n onFocus={onPointFocus}\n onBlur={onPointBlur}\n onHover={onPointHover}\n onHoverEnd={onPointHoverEnd}\n onKeyDown={onKeyDown}\n />\n );\n })}\n </g>\n );\n}\n\nChartLineSeries.displayName = 'ChartLineSeries';\n","'use client';\n\n/**\n * ChartSVG Component\n *\n * Main SVG container with keyboard handling and accessibility attributes.\n * Composes grid, axes, and series components.\n *\n * @see plan.md ChartSVG section\n */\n\nimport { type ReactElement, type KeyboardEvent } from 'react';\nimport { ChartGrid } from './ChartGrid';\nimport { ChartAxis } from './ChartAxis';\nimport { ChartBarSeries } from './ChartBarSeries';\nimport { ChartLineSeries } from './ChartLineSeries';\nimport type {\n DataSeries,\n ChartType,\n ChartDimensions,\n ScaleInfo,\n LinePattern,\n} from './Chart.types';\n\nexport interface ChartSVGProps {\n /** Chart type */\n type: ChartType;\n /** Chart data series */\n data: DataSeries[];\n /** Chart dimensions */\n dimensions: ChartDimensions;\n /** Scale information */\n scales: ScaleInfo;\n /** Title ID for aria-labelledby */\n titleId: string;\n /** Description ID for aria-describedby */\n descId: string;\n /** Show grid lines */\n showGrid: boolean;\n /** X-axis label */\n xAxisLabel: string;\n /** Y-axis label */\n yAxisLabel: string;\n /** Get series color */\n getSeriesColor: (seriesIndex: number) => string;\n /** Get tabIndex for a point */\n getTabIndex: (seriesIndex: number, pointIndex: number) => 0 | -1;\n /** Selected point */\n selectedPoint: { series: number; point: number } | null;\n /** Value formatter */\n formatValue: (value: number) => string;\n /** Keyboard event handler */\n onKeyDown: (event: KeyboardEvent) => void;\n /** Point focus handler */\n onPointFocus: (seriesIndex: number, pointIndex: number) => void;\n /** Point blur handler */\n onPointBlur: () => void;\n /** Point hover handler */\n onPointHover: (seriesIndex: number, pointIndex: number) => void;\n /** Point hover end handler */\n onPointHoverEnd: () => void;\n}\n\n/**\n * ChartSVG - Main SVG container\n *\n * Sets up the SVG with proper accessibility attributes and\n * composes the grid, axes, and data series.\n */\nexport function ChartSVG({\n type,\n data,\n dimensions,\n scales,\n titleId,\n descId,\n showGrid,\n xAxisLabel,\n yAxisLabel,\n getSeriesColor,\n getTabIndex,\n selectedPoint,\n formatValue,\n onKeyDown,\n onPointFocus,\n onPointBlur,\n onPointHover,\n onPointHoverEnd,\n}: ChartSVGProps): ReactElement {\n const { width, height, plotArea } = dimensions;\n const { allLabels, xScale, yScale, yTicks } = scales;\n\n return (\n <svg\n role=\"graphics-document\"\n aria-roledescription={`${type} chart`}\n aria-labelledby={titleId}\n aria-describedby={descId}\n viewBox={`0 0 ${width} ${height}`}\n className=\"h-full w-full\"\n style={{ maxHeight: height }}\n data-testid=\"chart-svg\"\n >\n {/* Grid lines (behind everything) */}\n <ChartGrid\n yTicks={yTicks}\n yScale={yScale}\n plotX={plotArea.x}\n plotWidth={plotArea.width}\n visible={showGrid}\n />\n\n {/* Axes */}\n <ChartAxis\n allLabels={allLabels}\n yTicks={yTicks}\n xScale={xScale}\n yScale={yScale}\n plotArea={plotArea}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n formatValue={formatValue}\n />\n\n {/* Data series */}\n {data.map((series, seriesIndex) => {\n const color = series.color || getSeriesColor(seriesIndex);\n const pattern: LinePattern = series.pattern || 'solid';\n\n if (type === 'bar') {\n return (\n <ChartBarSeries\n key={series.name}\n series={series}\n seriesIndex={seriesIndex}\n totalSeries={data.length}\n dimensions={dimensions}\n scales={scales}\n color={color}\n getTabIndex={getTabIndex}\n selectedPoint={selectedPoint}\n onPointFocus={onPointFocus}\n onPointBlur={onPointBlur}\n onPointHover={onPointHover}\n onPointHoverEnd={onPointHoverEnd}\n onKeyDown={onKeyDown}\n formatValue={formatValue}\n />\n );\n }\n\n return (\n <ChartLineSeries\n key={series.name}\n series={series}\n seriesIndex={seriesIndex}\n scales={scales}\n color={color}\n pattern={pattern}\n getTabIndex={getTabIndex}\n selectedPoint={selectedPoint}\n onPointFocus={onPointFocus}\n onPointBlur={onPointBlur}\n onPointHover={onPointHover}\n onPointHoverEnd={onPointHoverEnd}\n onKeyDown={onKeyDown}\n formatValue={formatValue}\n />\n );\n })}\n </svg>\n );\n}\n\nChartSVG.displayName = 'ChartSVG';\n","'use client';\n\n/**\n * ChartTooltip Component\n *\n * Floating tooltip that appears on focus/hover.\n * Reuses styling from Themis Tooltip component for consistency.\n * Positioned above the data point with boundary handling.\n *\n * @see plan.md Decision 4: Tooltip Behavior\n * @see plan.md Decision 14: Tooltip Positioning\n */\n\nimport { type ReactElement, useRef, useEffect, useState } from 'react';\nimport { tooltipContentVariants } from '../Tooltip/Tooltip';\n\nexport interface ChartTooltipProps {\n /** Whether the tooltip is visible */\n visible: boolean;\n /** Point X coordinate */\n x: number;\n /** Point Y coordinate */\n y: number;\n /** Series name */\n seriesName: string;\n /** Point label */\n label: string;\n /** Formatted value */\n value: string;\n /** Chart width for boundary checks */\n chartWidth: number;\n /** Chart height for boundary checks */\n chartHeight: number;\n /** Optional trend text (e.g., \"up 15% from previous\") */\n trend?: string | null;\n /** Trend direction for icon display */\n trendDirection?: 'up' | 'down' | null;\n}\n\nconst TOOLTIP_GAP = 8;\n\n/**\n * ChartTooltip - Focus/hover tooltip\n *\n * Shows data point information on keyboard focus and mouse hover.\n * Uses Themis Tooltip styling for visual consistency.\n * Positions above the point by default, flips below if near top edge.\n */\nexport function ChartTooltip({\n visible,\n x,\n y,\n seriesName,\n label,\n value,\n chartWidth,\n chartHeight,\n trend,\n trendDirection,\n}: ChartTooltipProps): ReactElement | null {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ left: 0, top: 0 });\n const [side, setSide] = useState<'top' | 'bottom'>('top');\n\n // Suppress unused variable warning\n void chartHeight;\n\n useEffect(() => {\n if (!visible || !tooltipRef.current) return;\n\n const tooltip = tooltipRef.current;\n const tooltipRect = tooltip.getBoundingClientRect();\n const tooltipWidth = tooltipRect.width || 120;\n const tooltipHeight = tooltipRect.height || 50;\n\n // Calculate position (centered above point)\n let left = x - tooltipWidth / 2;\n let top = y - tooltipHeight - TOOLTIP_GAP;\n let newSide: 'top' | 'bottom' = 'top';\n\n // Boundary checks\n // Flip below if near top\n if (top < 0) {\n top = y + TOOLTIP_GAP + 16; // 16px offset for focus ring\n newSide = 'bottom';\n }\n\n // Clamp left edge\n if (left < 0) {\n left = 0;\n }\n\n // Clamp right edge\n if (left + tooltipWidth > chartWidth) {\n left = chartWidth - tooltipWidth;\n }\n\n setPosition({ left, top });\n setSide(newSide);\n }, [visible, x, y, chartWidth]);\n\n if (!visible) {\n return null;\n }\n\n return (\n <div\n ref={tooltipRef}\n aria-hidden=\"true\"\n className={tooltipContentVariants({ side })}\n style={{\n position: 'absolute',\n left: position.left,\n top: position.top,\n pointerEvents: 'none',\n }}\n data-testid=\"chart-tooltip\"\n >\n <div className=\"font-medium\">{seriesName}</div>\n <div className=\"opacity-80\">\n {label}: <span className=\"font-semibold\">{value}</span>\n </div>\n {trend && (\n <div className=\"text-xs opacity-70 mt-1 flex items-center gap-1\">\n {trendDirection === 'up' ? (\n <svg\n aria-hidden=\"true\"\n className=\"h-3 w-3 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 17a.75.75 0 01-.75-.75V5.612L5.29 9.77a.75.75 0 01-1.08-1.04l5.25-5.5a.75.75 0 011.08 0l5.25 5.5a.75.75 0 11-1.08 1.04l-3.96-4.158V16.25A.75.75 0 0110 17z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : trendDirection === 'down' ? (\n <svg\n aria-hidden=\"true\"\n className=\"h-3 w-3 text-red-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 3a.75.75 0 01.75.75v10.638l3.96-4.158a.75.75 0 111.08 1.04l-5.25 5.5a.75.75 0 01-1.08 0l-5.25-5.5a.75.75 0 111.08-1.04l3.96 4.158V3.75A.75.75 0 0110 3z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : null}\n <span>{trend}</span>\n </div>\n )}\n </div>\n );\n}\n\nChartTooltip.displayName = 'ChartTooltip';\n","'use client';\n\n/**\n * ChartLegend Component\n *\n * Series legend displayed below the chart.\n * Shows color swatches and series names.\n *\n * @see plan.md Decision 9: ChartLegend Export (internal only)\n * @see plan.md Decision 12: Legend Position (below chart)\n */\n\nimport { type ReactElement } from 'react';\nimport type { DataSeries, LinePattern } from './Chart.types';\nimport { legendVariants } from './chart.variants';\nimport { LINE_PATTERNS } from './chart.constants';\n\nexport interface ChartLegendProps {\n /** Chart data series */\n data: DataSeries[];\n /** Whether the legend is visible */\n visible: boolean;\n /** Chart type (affects pattern display) */\n type: 'bar' | 'line';\n /** Function to get series color */\n getSeriesColor: (seriesIndex: number) => string;\n}\n\n/**\n * ChartLegend - Series legend (internal component)\n *\n * Displays legend items below the chart with color swatches.\n * For line charts, also shows line pattern indicators.\n */\nexport function ChartLegend({\n data,\n visible,\n type,\n getSeriesColor,\n}: ChartLegendProps): ReactElement | null {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n className={legendVariants({ visible })}\n role=\"list\"\n aria-label=\"Chart legend\"\n data-testid=\"chart-legend\"\n >\n {data.map((series, index) => {\n const color = series.color || getSeriesColor(index);\n const pattern = series.pattern || 'solid';\n\n return (\n <div\n key={series.name}\n role=\"listitem\"\n className=\"flex items-center gap-2\"\n >\n {/* Color swatch */}\n {type === 'bar' ? (\n <div\n className=\"h-3 w-3 rounded-sm\"\n style={{ backgroundColor: color }}\n data-testid={`legend-color-${index}`}\n aria-hidden=\"true\"\n />\n ) : (\n <svg\n width=\"24\"\n height=\"12\"\n aria-hidden=\"true\"\n data-testid={`legend-color-${index}`}\n >\n <line\n x1=\"0\"\n y1=\"6\"\n x2=\"24\"\n y2=\"6\"\n stroke={color}\n strokeWidth=\"2\"\n strokeDasharray={\n LINE_PATTERNS[pattern as LinePattern] === 'none'\n ? undefined\n : LINE_PATTERNS[pattern as LinePattern]\n }\n />\n </svg>\n )}\n\n {/* Series name */}\n <span className=\"text-sm text-[var(--content-foreground)]\">\n {series.name}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nChartLegend.displayName = 'ChartLegend';\n","'use client';\n\n/**\n * ChartAnnouncer Component\n *\n * aria-live region for screen reader announcements.\n * Provides polite announcements for focus changes and data values.\n *\n * @see plan.md Decision 3: Screen Reader Announcements\n */\n\nimport { type ReactElement } from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nexport interface ChartAnnouncerProps {\n /** Current announcement text */\n announcement: string;\n}\n\n/**\n * ChartAnnouncer - aria-live region for screen reader announcements\n *\n * Uses polite mode to avoid interrupting current speech.\n * Atomic ensures the entire region is announced when changed.\n */\nexport function ChartAnnouncer({\n announcement,\n}: ChartAnnouncerProps): ReactElement {\n return (\n <VisuallyHidden>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-testid=\"chart-announcer\"\n >\n {announcement}\n </div>\n </VisuallyHidden>\n );\n}\n\nChartAnnouncer.displayName = 'ChartAnnouncer';\n","'use client';\n\n/**\n * ChartDataTable Component\n *\n * Hidden accessible data table as fallback for screen readers.\n * Provides full data access in a familiar table format.\n *\n * @see plan.md ChartDataTable section\n */\n\nimport { type ReactElement } from 'react';\nimport { VisuallyHidden } from 'react-aria';\nimport type { DataSeries } from './Chart.types';\n\nexport interface ChartDataTableProps {\n /** Chart data series */\n data: DataSeries[];\n /** Chart title for table caption */\n title: string;\n /** X-axis label (used as first column header) */\n xAxisLabel: string;\n /** Y-axis label (used for value columns) */\n yAxisLabel: string;\n /** Value formatter function */\n formatValue: (value: number) => string;\n /** All labels across series (for consistent rows) */\n allLabels: string[];\n}\n\n/**\n * ChartDataTable - Hidden accessible data table\n *\n * Renders chart data in a table format accessible to screen readers.\n * The table is visually hidden but fully accessible.\n */\nexport function ChartDataTable({\n data,\n title,\n xAxisLabel,\n yAxisLabel,\n formatValue,\n allLabels,\n}: ChartDataTableProps): ReactElement {\n // For single series, show simple two-column table\n // For multi-series, show label + one column per series\n const isSingleSeries = data.length === 1;\n\n return (\n <VisuallyHidden>\n <table data-testid=\"chart-data-table\">\n <caption>{title} data table</caption>\n <thead>\n <tr>\n <th scope=\"col\">{xAxisLabel}</th>\n {isSingleSeries ? (\n <th scope=\"col\">{yAxisLabel}</th>\n ) : (\n data.map((series) => (\n <th key={series.name} scope=\"col\">\n {series.name} ({yAxisLabel})\n </th>\n ))\n )}\n </tr>\n </thead>\n <tbody>\n {allLabels.map((label) => (\n <tr key={label}>\n <th scope=\"row\">{label}</th>\n {data.map((series) => {\n const point = series.data.find((p) => p.label === label);\n return (\n <td key={series.name}>\n {point ? formatValue(point.value) : '—'}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </VisuallyHidden>\n );\n}\n\nChartDataTable.displayName = 'ChartDataTable';\n","'use client';\n\n/**\n * useChartKeyboard Hook\n *\n * Keyboard event handling for chart navigation and selection.\n * Integrates with roving tabindex for 2D navigation.\n *\n * @see plan.md Decision 2: Keyboard Navigation Pattern\n */\n\nimport { useCallback, type KeyboardEvent } from 'react';\nimport type { RovingTabIndexActions } from './useRovingTabIndex';\n\nexport interface UseChartKeyboardOptions {\n /** Roving tabindex actions */\n roving: RovingTabIndexActions;\n /** Callback when a point is selected (Enter/Space) */\n onSelect?: () => void;\n /** Callback when selection is cleared (Escape) */\n onClear?: () => void;\n /** Whether the chart is disabled */\n disabled?: boolean;\n}\n\nexport interface ChartKeyboardProps {\n /** Keyboard event handler to spread on the chart element */\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\n/**\n * Hook for chart keyboard event handling\n *\n * Supported keys:\n * - ArrowRight: Move to next point\n * - ArrowLeft: Move to previous point\n * - ArrowDown: Move to next series\n * - ArrowUp: Move to previous series\n * - Home: Move to first point in series\n * - End: Move to last point in series\n * - Enter/Space: Select current point\n * - Escape: Clear selection\n *\n * @param options - Configuration options\n * @returns Keyboard props to spread on the chart element\n */\nexport function useChartKeyboard(\n options: UseChartKeyboardOptions\n): ChartKeyboardProps {\n const { roving, onSelect, onClear, disabled = false } = options;\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n if (disabled) return;\n\n // Handle navigation and selection keys\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n roving.moveRight();\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n roving.moveLeft();\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n roving.moveDown();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n roving.moveUp();\n break;\n\n case 'Home':\n event.preventDefault();\n roving.moveToStart();\n break;\n\n case 'End':\n event.preventDefault();\n roving.moveToEnd();\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n onSelect?.();\n break;\n\n case 'Escape':\n event.preventDefault();\n onClear?.();\n break;\n\n default:\n // Let other keys propagate\n break;\n }\n },\n [roving, onSelect, onClear, disabled]\n );\n\n return { onKeyDown };\n}\n","'use client';\n\n/**\n * Chart Component\n *\n * Accessible, keyboard-interactive chart component supporting bar and line types.\n * Features 2D keyboard navigation, screen reader announcements, and WCAG 2.2 AAA compliance.\n *\n * @see chart-prd.md (Product Requirements)\n * @see plan.md (Implementation Plan)\n */\n\nimport {\n forwardRef,\n memo,\n useRef,\n useCallback,\n useMemo,\n useId,\n type ReactElement,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { chartVariants } from './chart.variants';\nimport { ChartProvider, useChartContext } from './ChartContext';\nimport { ChartSVG } from './ChartSVG';\nimport { ChartTooltip } from './ChartTooltip';\nimport { ChartLegend } from './ChartLegend';\nimport { ChartAnnouncer } from './ChartAnnouncer';\nimport { ChartDataTable } from './ChartDataTable';\nimport { useChartKeyboard } from './useChartKeyboard';\nimport { useRovingTabIndex2D } from './useRovingTabIndex';\nimport type { ChartProps } from './Chart.types';\n\n// ============================================================================\n// Inner Chart Component (has access to context)\n// ============================================================================\n\ninterface ChartInnerProps {\n chartId: string;\n}\n\nfunction ChartInner({ chartId }: ChartInnerProps): ReactElement {\n const ctx = useChartContext();\n const {\n data,\n type,\n title,\n xAxisLabel,\n yAxisLabel,\n showTooltip,\n showGrid,\n showLegend,\n dimensions,\n scales,\n announcement,\n isTooltipVisible,\n tooltipPoint,\n currentTrend,\n currentTrendDirection,\n selectedPoint,\n getTabIndex,\n formatValue,\n getSeriesColor,\n getPointCoordinates,\n setFocus,\n selectPoint,\n clearSelection,\n showTooltipAt,\n hideTooltip,\n } = ctx;\n\n const titleId = `${chartId}-title`;\n const descId = `${chartId}-desc`;\n\n // Roving tabindex for keyboard navigation\n const roving = useRovingTabIndex2D({\n rows: data.length,\n cols: (row) => data[row]?.data.length || 0,\n onFocusChange: (seriesIndex, pointIndex) => {\n setFocus(seriesIndex, pointIndex);\n },\n });\n\n // Keyboard handler\n const { onKeyDown } = useChartKeyboard({\n roving,\n onSelect: () => {\n selectPoint(roving.focusedRow, roving.focusedCol);\n },\n onClear: () => {\n clearSelection();\n },\n });\n\n // Point focus handler\n const handlePointFocus = useCallback(\n (seriesIndex: number, pointIndex: number): void => {\n roving.setFocus(seriesIndex, pointIndex);\n showTooltipAt(seriesIndex, pointIndex);\n },\n [roving, showTooltipAt]\n );\n\n // Point blur handler\n const handlePointBlur = useCallback((): void => {\n // Don't hide tooltip immediately - let it stay visible during keyboard nav\n }, []);\n\n // Point hover handler\n const handlePointHover = useCallback(\n (seriesIndex: number, pointIndex: number): void => {\n showTooltipAt(seriesIndex, pointIndex);\n },\n [showTooltipAt]\n );\n\n // Point hover end handler\n const handlePointHoverEnd = useCallback((): void => {\n hideTooltip();\n }, [hideTooltip]);\n\n // Memoized tooltip position to prevent recalculation on every render\n const tooltipPosition = useMemo((): { x: number; y: number } => {\n if (!tooltipPoint) return { x: 0, y: 0 };\n const coords = getPointCoordinates(tooltipPoint.series, tooltipPoint.point);\n return coords || { x: 0, y: 0 };\n }, [tooltipPoint, getPointCoordinates]);\n\n // Memoized tooltip data derivations\n const tooltipSeries = useMemo(\n () => (tooltipPoint ? data[tooltipPoint.series] : null),\n [tooltipPoint, data]\n );\n const tooltipPointData = useMemo(\n () => (tooltipPoint ? tooltipSeries?.data[tooltipPoint.point] : null),\n [tooltipPoint, tooltipSeries]\n );\n\n // Memoized legend visibility check\n const shouldShowLegend = useMemo(\n () => showLegend ?? data.length > 1,\n [showLegend, data.length]\n );\n\n return (\n <>\n {/* Screen reader announcer */}\n <ChartAnnouncer announcement={announcement} />\n\n {/* Chart container with proper stacking context */}\n <div className=\"relative\">\n {/* Main SVG chart - z-0 base layer */}\n <div className=\"relative z-0\">\n <ChartSVG\n type={type}\n data={data}\n dimensions={dimensions}\n scales={scales}\n titleId={titleId}\n descId={descId}\n showGrid={showGrid}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n getSeriesColor={getSeriesColor}\n getTabIndex={getTabIndex}\n selectedPoint={selectedPoint}\n formatValue={formatValue}\n onKeyDown={onKeyDown}\n onPointFocus={handlePointFocus}\n onPointBlur={handlePointBlur}\n onPointHover={handlePointHover}\n onPointHoverEnd={handlePointHoverEnd}\n />\n </div>\n\n {/* Tooltip - z-50 above chart */}\n {showTooltip && tooltipPointData && tooltipSeries && (\n <ChartTooltip\n visible={isTooltipVisible}\n x={tooltipPosition.x}\n y={tooltipPosition.y}\n seriesName={tooltipSeries.name}\n label={tooltipPointData.label}\n value={formatValue(tooltipPointData.value)}\n chartWidth={dimensions.width}\n chartHeight={dimensions.height}\n trend={currentTrend}\n trendDirection={currentTrendDirection}\n />\n )}\n </div>\n\n {/* Legend */}\n <ChartLegend\n data={data}\n visible={shouldShowLegend}\n type={type}\n getSeriesColor={getSeriesColor}\n />\n\n {/* Hidden data table for screen readers */}\n <ChartDataTable\n data={data}\n title={title}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n formatValue={formatValue}\n allLabels={scales.allLabels}\n />\n </>\n );\n}\n\n// ============================================================================\n// Main Chart Component\n// ============================================================================\n\nconst ChartComponent = forwardRef<HTMLElement, ChartProps>(\n (\n {\n data,\n type,\n title,\n description,\n xAxisLabel,\n yAxisLabel,\n variant = 'default',\n className,\n showTooltip = true,\n showGrid = true,\n showLegend,\n announceTrends = false,\n trendUpFormat = 'up {percent}% from previous',\n trendDownFormat = 'down {percent}% from previous',\n startAtZero = true,\n reducedMotion,\n onPointFocus,\n onPointSelect,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'data-testid': dataTestId,\n ...rest\n },\n ref\n ): ReactElement => {\n // Container ref for dimensions\n const containerRef = useRef<HTMLElement>(null);\n\n // Generate unique IDs for accessibility (stable across SSR/hydration)\n const generatedId = useId();\n const chartId = id || `chart-${generatedId}`;\n const titleId = `${chartId}-title`;\n const descId = `${chartId}-desc`;\n\n // Determine if legend should be shown\n const shouldShowLegend = showLegend ?? data.length > 1;\n\n return (\n <figure\n ref={(node) => {\n // Handle both refs\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n (containerRef as React.MutableRefObject<HTMLElement | null>).current = node;\n }}\n id={chartId}\n role=\"figure\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby || titleId}\n aria-describedby={ariaDescribedby || descId}\n data-testid={dataTestId}\n className={cn(chartVariants({ variant }), 'p-4', className)}\n {...rest}\n >\n <figcaption className=\"sr-only\">\n <span id={titleId}>{title}</span>\n <span id={descId}>{description}</span>\n </figcaption>\n\n <ChartProvider\n containerRef={containerRef}\n data={data}\n type={type}\n title={title}\n description={description}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n showTooltip={showTooltip}\n showGrid={showGrid}\n showLegend={shouldShowLegend}\n announceTrends={announceTrends}\n trendUpFormat={trendUpFormat}\n trendDownFormat={trendDownFormat}\n startAtZero={startAtZero}\n reducedMotion={reducedMotion}\n onPointFocus={onPointFocus}\n onPointSelect={onPointSelect}\n >\n <ChartInner chartId={chartId} />\n </ChartProvider>\n </figure>\n );\n }\n);\n\nChartComponent.displayName = 'Chart';\n\n/**\n * Memoized Chart component for performance\n */\nexport const Chart = memo(ChartComponent);\nChart.displayName = 'Chart';\n","/**\n * Chart Component Types and Schemas\n *\n * Defines Zod schemas and TypeScript types for the Chart component.\n * Implements data validation, props schema, and internal state types.\n *\n * @see chart-prd.md (Product Requirements)\n * @see plan.md (Implementation Plan)\n */\n\nimport { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\n\n// ============================================================================\n// Data Point Schema\n// ============================================================================\n\n/**\n * Schema for individual data point in a chart series\n */\nexport const DataPointSchema = z.object({\n /** X-axis label (e.g., \"January\", \"Q1 2024\") */\n label: z.string().min(1, 'Label is required'),\n /** Y-axis value */\n value: z.number(),\n /** Extended description for screen readers */\n description: z.string().optional(),\n});\n\nexport type DataPoint = z.infer<typeof DataPointSchema>;\n\n// ============================================================================\n// Data Series Schema\n// ============================================================================\n\n/**\n * Line pattern options for line charts (accessibility feature)\n */\nexport const LinePatternSchema = z.enum(['solid', 'dashed', 'dotted']);\nexport type LinePattern = z.infer<typeof LinePatternSchema>;\n\n/**\n * Schema for a data series (one line or set of bars)\n */\nexport const DataSeriesSchema = z.object({\n /** Series name for legend and announcements */\n name: z.string().min(1, 'Series name is required'),\n /** CSS color (defaults to --chart-1 through --chart-5) */\n color: z.string().optional(),\n /** Line pattern for accessibility (defaults to solid) */\n pattern: LinePatternSchema.optional().default('solid'),\n /** Data points in this series */\n data: z.array(DataPointSchema).min(1, 'At least one data point required'),\n});\n\nexport type DataSeries = z.infer<typeof DataSeriesSchema>;\n\n// ============================================================================\n// Chart Type Schema\n// ============================================================================\n\n/**\n * Supported chart types\n */\nexport const ChartTypeSchema = z.enum(['bar', 'line']);\nexport type ChartType = z.infer<typeof ChartTypeSchema>;\n\n// ============================================================================\n// Chart Variant Schema\n// ============================================================================\n\n/**\n * Visual variants for the chart container\n */\nexport const ChartVariantSchema = z.enum(['default', 'muted']);\nexport type ChartVariant = z.infer<typeof ChartVariantSchema>;\n\n// ============================================================================\n// Callback Types\n// ============================================================================\n\n/**\n * Callback for when a data point receives focus\n */\nexport type ChartPointFocusCallback = (\n point: { label: string; value: number },\n seriesIndex: number,\n pointIndex: number\n) => void;\n\n/**\n * Callback for when a data point is selected (Enter/Space)\n */\nexport type ChartPointSelectCallback = (\n point: { label: string; value: number },\n seriesIndex: number,\n pointIndex: number\n) => void;\n\n// ============================================================================\n// Chart Props Schema\n// ============================================================================\n\n/**\n * Main Chart component props schema\n * Maximum 5 series allowed (Decision 11)\n * Note: Callbacks use z.unknown() since Zod can't validate function signatures at runtime\n */\nexport const ChartPropsSchema = BaseComponentPropsSchema.extend({\n // Required props\n /** Chart data - maximum 5 series (Decision 11) */\n data: z\n .array(DataSeriesSchema)\n .min(1, 'At least one data series required')\n .max(5, 'Maximum 5 series allowed'),\n /** Chart type: bar or line */\n type: ChartTypeSchema,\n /** Chart title (displayed and used for accessibility) */\n title: z.string().min(1, 'Title is required'),\n /** Chart description (displayed and used for accessibility) */\n description: z.string().min(1, 'Description is required'),\n /** X-axis label */\n xAxisLabel: z.string().min(1, 'X-axis label is required'),\n /** Y-axis label */\n yAxisLabel: z.string().min(1, 'Y-axis label is required'),\n\n // Optional - Styling\n /** Visual variant */\n variant: ChartVariantSchema.optional().default('default'),\n\n // Optional - Features\n /** Show tooltip on focus/hover (default: true) */\n showTooltip: z.boolean().optional().default(true),\n /** Show grid lines (default: true) */\n showGrid: z.boolean().optional().default(true),\n /** Show legend (auto: shown when >1 series) */\n showLegend: z.boolean().optional(),\n /** Announce trend percentages (default: false) */\n announceTrends: z.boolean().optional().default(false),\n /** ICU format string for upward trend (use {percent} placeholder) */\n trendUpFormat: z.string().optional().default('up {percent}% from previous'),\n /** ICU format string for downward trend (use {percent} placeholder) */\n trendDownFormat: z.string().optional().default('down {percent}% from previous'),\n /** Y-axis starts at zero (default: true) - Decision 6 */\n startAtZero: z.boolean().optional().default(true),\n\n // Optional - Accessibility\n /** Override reduced motion preference */\n reducedMotion: z.boolean().optional(),\n\n // Optional - Events (use z.unknown() since Zod can't validate function types at runtime)\n /** Called when a data point receives focus */\n onPointFocus: z.unknown().optional(),\n /** Called when a data point is selected (Enter/Space) */\n onPointSelect: z.unknown().optional(),\n});\n\n/**\n * Zod-inferred props type (base)\n */\ntype ChartPropsBase = z.infer<typeof ChartPropsSchema>;\n\n/**\n * Chart component props with proper callback types\n */\nexport type ChartProps = Omit<ChartPropsBase, 'onPointFocus' | 'onPointSelect'> & {\n onPointFocus?: ChartPointFocusCallback;\n onPointSelect?: ChartPointSelectCallback;\n};\n\n// ============================================================================\n// Internal State Types\n// ============================================================================\n\n/**\n * Chart focus/selection state\n */\nexport interface ChartState {\n /** Currently focused series index */\n focusedSeries: number;\n /** Currently focused point index within series */\n focusedPoint: number;\n /** Selected point (if any) */\n selectedPoint: { series: number; point: number } | null;\n /** Whether tooltip is visible */\n isTooltipVisible: boolean;\n /** Current screen reader announcement */\n announcement: string;\n}\n\n/**\n * Chart dimension calculations\n */\nexport interface ChartDimensions {\n /** Total chart width */\n width: number;\n /** Total chart height */\n height: number;\n /** Padding around plot area */\n padding: {\n top: number;\n right: number;\n bottom: number;\n left: number;\n };\n /** Inner plot area dimensions */\n plotArea: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\n/**\n * Scale information for rendering\n */\nexport interface ScaleInfo {\n /** Union of all series labels for label matching (Decision 7) */\n allLabels: string[];\n /** Convert label index to X coordinate */\n xScale: (labelIndex: number) => number;\n /** Convert value to Y coordinate */\n yScale: (value: number) => number;\n /** Minimum Y value (0 if startAtZero) */\n yMin: number;\n /** Maximum Y value (nice number) */\n yMax: number;\n /** Nice tick values for Y axis */\n yTicks: number[];\n}\n\n/**\n * Chart context value shared between components\n */\nexport interface ChartContextValue {\n // State\n focusedSeries: number;\n focusedPoint: number;\n selectedPoint: { series: number; point: number } | null;\n announcement: string;\n isTooltipVisible: boolean;\n tooltipPoint: { series: number; point: number } | null;\n /** Current trend text for tooltip display (e.g., \"up 15% from previous\") */\n currentTrend: string | null;\n /** Current trend direction for tooltip icon display */\n currentTrendDirection: 'up' | 'down' | null;\n\n // Computed\n dimensions: ChartDimensions;\n scales: ScaleInfo;\n\n // Props passthrough\n data: DataSeries[];\n type: ChartType;\n title: string;\n description: string;\n xAxisLabel: string;\n yAxisLabel: string;\n showTooltip: boolean;\n showGrid: boolean;\n showLegend: boolean;\n announceTrends: boolean;\n trendUpFormat: string;\n trendDownFormat: string;\n startAtZero: boolean;\n /** Whether to reduce/disable animations for accessibility */\n reducedMotion: boolean;\n\n // Actions\n setFocus: (series: number, point: number) => void;\n selectPoint: (series: number, point: number) => void;\n clearSelection: () => void;\n announce: (message: string) => void;\n showTooltipAt: (series: number, point: number) => void;\n hideTooltip: () => void;\n\n // Helpers\n getTabIndex: (series: number, point: number) => 0 | -1;\n formatValue: (value: number) => string;\n getSeriesColor: (seriesIndex: number) => string;\n getPointCoordinates: (\n series: number,\n point: number\n ) => { x: number; y: number } | null;\n}\n"]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkVIREG536_js = require('./chunk-VIREG536.js');
|
|
4
|
+
var chunkT4COXKQ3_js = require('./chunk-T4COXKQ3.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var reactAriaComponents = require('react-aria-components');
|
|
7
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
var zod = require('zod');
|
|
10
|
+
|
|
11
|
+
var progressTrackVariants = classVarianceAuthority.cva(
|
|
12
|
+
// Base styles - track container
|
|
13
|
+
"relative w-full overflow-hidden rounded-full bg-[var(--accent-background)]",
|
|
14
|
+
{
|
|
15
|
+
variants: {
|
|
16
|
+
size: {
|
|
17
|
+
sm: "h-1",
|
|
18
|
+
// 4px
|
|
19
|
+
default: "h-2",
|
|
20
|
+
// 8px
|
|
21
|
+
lg: "h-3"
|
|
22
|
+
// 12px
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
size: "default"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
var progressIndicatorVariants = classVarianceAuthority.cva(
|
|
31
|
+
// Base styles - indicator with smooth transition
|
|
32
|
+
"h-full rounded-full transition-all duration-300 ease-out",
|
|
33
|
+
{
|
|
34
|
+
variants: {
|
|
35
|
+
variant: {
|
|
36
|
+
default: "bg-[var(--primary)]",
|
|
37
|
+
success: "bg-[var(--success,hsl(142,76%,36%))]",
|
|
38
|
+
warning: "bg-[var(--warning,hsl(38,92%,50%))]",
|
|
39
|
+
destructive: "bg-[var(--destructive)]"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
defaultVariants: {
|
|
43
|
+
variant: "default"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
var progressContainerVariants = classVarianceAuthority.cva("flex w-full gap-2", {
|
|
48
|
+
variants: {
|
|
49
|
+
labelPosition: {
|
|
50
|
+
top: "flex-col",
|
|
51
|
+
side: "flex-row items-center"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
defaultVariants: {
|
|
55
|
+
labelPosition: "top"
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
var Progress = react.memo(
|
|
59
|
+
react.forwardRef(
|
|
60
|
+
({
|
|
61
|
+
value,
|
|
62
|
+
minValue = 0,
|
|
63
|
+
maxValue = 100,
|
|
64
|
+
isIndeterminate = false,
|
|
65
|
+
label,
|
|
66
|
+
showValueLabel = true,
|
|
67
|
+
valueLabel,
|
|
68
|
+
formatOptions,
|
|
69
|
+
labelPosition = "top",
|
|
70
|
+
variant = "default",
|
|
71
|
+
size = "default",
|
|
72
|
+
className,
|
|
73
|
+
"aria-label": ariaLabel,
|
|
74
|
+
"aria-labelledby": ariaLabelledBy,
|
|
75
|
+
"aria-describedby": ariaDescribedBy,
|
|
76
|
+
...props
|
|
77
|
+
}, ref) => {
|
|
78
|
+
const labelId = react.useId();
|
|
79
|
+
const shouldShowValueLabel = showValueLabel && !isIndeterminate;
|
|
80
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
81
|
+
reactAriaComponents.ProgressBar,
|
|
82
|
+
{
|
|
83
|
+
ref,
|
|
84
|
+
value: isIndeterminate ? void 0 : value,
|
|
85
|
+
minValue,
|
|
86
|
+
maxValue,
|
|
87
|
+
isIndeterminate,
|
|
88
|
+
formatOptions: formatOptions ?? { style: "percent" },
|
|
89
|
+
"aria-label": ariaLabel,
|
|
90
|
+
"aria-labelledby": label ? labelId : ariaLabelledBy,
|
|
91
|
+
"aria-describedby": ariaDescribedBy,
|
|
92
|
+
className: chunkVIREG536_js.cn(progressContainerVariants({ labelPosition }), className),
|
|
93
|
+
...props,
|
|
94
|
+
children: ({ percentage, valueText }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
95
|
+
(label || shouldShowValueLabel) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
96
|
+
label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
97
|
+
"span",
|
|
98
|
+
{
|
|
99
|
+
id: labelId,
|
|
100
|
+
className: "font-medium text-[var(--content-foreground)]",
|
|
101
|
+
children: label
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
shouldShowValueLabel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
105
|
+
"span",
|
|
106
|
+
{
|
|
107
|
+
"aria-hidden": "true",
|
|
108
|
+
className: "text-[var(--menu-muted)]",
|
|
109
|
+
children: valueLabel ?? valueText
|
|
110
|
+
}
|
|
111
|
+
)
|
|
112
|
+
] }),
|
|
113
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: progressTrackVariants({ size }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
className: chunkVIREG536_js.cn(
|
|
117
|
+
progressIndicatorVariants({ variant }),
|
|
118
|
+
isIndeterminate && "motion-safe:animate-pulse"
|
|
119
|
+
),
|
|
120
|
+
style: {
|
|
121
|
+
width: isIndeterminate ? "100%" : `${percentage ?? 0}%`
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
) })
|
|
125
|
+
] })
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
);
|
|
131
|
+
Progress.displayName = "Progress";
|
|
132
|
+
var ProgressPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
|
|
133
|
+
// Value props
|
|
134
|
+
/** Current progress value (0-100 by default) */
|
|
135
|
+
value: zod.z.number().optional(),
|
|
136
|
+
/** Minimum value (default: 0) */
|
|
137
|
+
minValue: zod.z.number().optional().default(0),
|
|
138
|
+
/** Maximum value (default: 100) */
|
|
139
|
+
maxValue: zod.z.number().optional().default(100),
|
|
140
|
+
/** When true, shows indeterminate animation (unknown progress) */
|
|
141
|
+
isIndeterminate: zod.z.boolean().optional(),
|
|
142
|
+
// Label props
|
|
143
|
+
/** Label text displayed above or beside the progress bar */
|
|
144
|
+
label: zod.z.string().optional(),
|
|
145
|
+
/** Show/hide the value label (default: true) */
|
|
146
|
+
showValueLabel: zod.z.boolean().optional().default(true),
|
|
147
|
+
/** Custom value label text (overrides formatted value) */
|
|
148
|
+
valueLabel: zod.z.string().optional(),
|
|
149
|
+
/** Label position relative to progress bar */
|
|
150
|
+
labelPosition: zod.z.enum(["top", "side"]).optional().default("top"),
|
|
151
|
+
// Note: formatOptions is Intl.NumberFormatOptions which can't be validated by Zod
|
|
152
|
+
// It's handled in the TypeScript interface instead
|
|
153
|
+
// Variants
|
|
154
|
+
/** Color variant for semantic meaning */
|
|
155
|
+
variant: zod.z.enum(["default", "success", "warning", "destructive"]).optional().default("default"),
|
|
156
|
+
/** Size variant controlling track height */
|
|
157
|
+
size: zod.z.enum(["sm", "default", "lg"]).optional().default("default")
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
exports.Progress = Progress;
|
|
161
|
+
exports.ProgressPropsSchema = ProgressPropsSchema;
|
|
162
|
+
exports.progressContainerVariants = progressContainerVariants;
|
|
163
|
+
exports.progressIndicatorVariants = progressIndicatorVariants;
|
|
164
|
+
exports.progressTrackVariants = progressTrackVariants;
|
|
165
|
+
//# sourceMappingURL=chunk-DDWEVC2S.js.map
|
|
166
|
+
//# sourceMappingURL=chunk-DDWEVC2S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/elements/Progress/Progress.tsx","../src/elements/Progress/Progress.types.ts"],"names":["cva","memo","forwardRef","useId","jsx","AriaProgressBar","cn","jsxs","Fragment","BaseComponentPropsSchema","z"],"mappings":"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","file":"chunk-DDWEVC2S.js","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"]}
|