@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,466 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk3YOY2VJ6_js = require('./chunk-3YOY2VJ6.js');
|
|
4
|
+
var chunkVIREG536_js = require('./chunk-VIREG536.js');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var reactAria = require('react-aria');
|
|
7
|
+
var reactStately = require('react-stately');
|
|
8
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
9
|
+
var lucideReact = require('lucide-react');
|
|
10
|
+
var zod = require('zod');
|
|
11
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
12
|
+
|
|
13
|
+
var DismissReasonSchema = zod.z.enum(["timeout", "user", "programmatic"]);
|
|
14
|
+
var ToastVariantSchema = zod.z.enum([
|
|
15
|
+
"default",
|
|
16
|
+
"primary",
|
|
17
|
+
"destructive",
|
|
18
|
+
"accent"
|
|
19
|
+
]);
|
|
20
|
+
var ToasterPositionSchema = zod.z.enum([
|
|
21
|
+
"top-left",
|
|
22
|
+
"top-center",
|
|
23
|
+
"top-right",
|
|
24
|
+
"bottom-left",
|
|
25
|
+
"bottom-center",
|
|
26
|
+
"bottom-right"
|
|
27
|
+
]);
|
|
28
|
+
var ToastOptionsSchema = zod.z.object({
|
|
29
|
+
/**
|
|
30
|
+
* Visual variant determining background and foreground colors
|
|
31
|
+
* @default 'default'
|
|
32
|
+
*/
|
|
33
|
+
variant: ToastVariantSchema.default("default"),
|
|
34
|
+
/**
|
|
35
|
+
* Auto-dismiss timeout in milliseconds
|
|
36
|
+
* - Values 1-4999ms are clamped to 5000ms (WCAG 2.2 timing requirement)
|
|
37
|
+
* - Set to 0 for persistent toasts (no auto-dismiss)
|
|
38
|
+
* @default 5000
|
|
39
|
+
*/
|
|
40
|
+
timeout: zod.z.number().min(0).default(5e3),
|
|
41
|
+
/**
|
|
42
|
+
* Callback fired when toast is dismissed
|
|
43
|
+
* @param key - Unique identifier of the toast
|
|
44
|
+
* @param reason - Why the toast was dismissed ('timeout' | 'user' | 'programmatic')
|
|
45
|
+
*/
|
|
46
|
+
onClose: zod.z.function().optional()
|
|
47
|
+
});
|
|
48
|
+
var ToastProviderPropsSchema = zod.z.object({
|
|
49
|
+
/**
|
|
50
|
+
* Maximum number of toasts visible at once
|
|
51
|
+
* Additional toasts are queued and shown as others dismiss
|
|
52
|
+
* @default 3
|
|
53
|
+
*/
|
|
54
|
+
maxVisibleToasts: zod.z.number().min(1).default(3)
|
|
55
|
+
});
|
|
56
|
+
var ToasterPropsSchema = zod.z.object({
|
|
57
|
+
/**
|
|
58
|
+
* Position of the toast region on screen
|
|
59
|
+
* @default 'bottom-right'
|
|
60
|
+
*/
|
|
61
|
+
position: ToasterPositionSchema.default("bottom-right"),
|
|
62
|
+
/**
|
|
63
|
+
* Accessible label for the toast region landmark
|
|
64
|
+
* Used by screen readers to identify the notification area
|
|
65
|
+
* @default 'Notifications'
|
|
66
|
+
*/
|
|
67
|
+
"aria-label": zod.z.string().default("Notifications"),
|
|
68
|
+
/**
|
|
69
|
+
* Additional CSS classes for the toast region
|
|
70
|
+
*/
|
|
71
|
+
className: zod.z.string().optional()
|
|
72
|
+
});
|
|
73
|
+
var toastVariants = classVarianceAuthority.cva(
|
|
74
|
+
[
|
|
75
|
+
// Fixed width for consistent appearance
|
|
76
|
+
"pointer-events-auto relative flex w-[356px] items-center justify-between",
|
|
77
|
+
"space-x-4 overflow-hidden rounded-lg border p-4 pr-12 shadow-lg",
|
|
78
|
+
// Animations with reduced-motion support
|
|
79
|
+
"transition-all duration-300",
|
|
80
|
+
"motion-reduce:transition-none motion-reduce:animate-none",
|
|
81
|
+
"data-[entering]:animate-in data-[entering]:slide-in-from-left",
|
|
82
|
+
"data-[exiting]:animate-out data-[exiting]:slide-out-to-right-full",
|
|
83
|
+
"data-[exiting]:fade-out-80",
|
|
84
|
+
// Touch interaction for swipe
|
|
85
|
+
"touch-pan-y"
|
|
86
|
+
],
|
|
87
|
+
{
|
|
88
|
+
variants: {
|
|
89
|
+
variant: {
|
|
90
|
+
default: [
|
|
91
|
+
"bg-[var(--content-background)]",
|
|
92
|
+
"text-[var(--content-foreground)]",
|
|
93
|
+
"border-[var(--border)]"
|
|
94
|
+
],
|
|
95
|
+
primary: [
|
|
96
|
+
"bg-[var(--primary)]",
|
|
97
|
+
"text-[var(--primary-foreground)]",
|
|
98
|
+
"border-[var(--primary)]"
|
|
99
|
+
],
|
|
100
|
+
destructive: [
|
|
101
|
+
"bg-[var(--destructive-background)]",
|
|
102
|
+
"text-[var(--destructive-foreground)]",
|
|
103
|
+
"border-[var(--destructive-background)]"
|
|
104
|
+
],
|
|
105
|
+
accent: [
|
|
106
|
+
"bg-[var(--accent-background)]",
|
|
107
|
+
"text-[var(--accent-foreground)]",
|
|
108
|
+
"border-[var(--accent-background)]"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
defaultVariants: {
|
|
113
|
+
variant: "default"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
var toasterVariants = classVarianceAuthority.cva(
|
|
118
|
+
[
|
|
119
|
+
"fixed z-50 flex flex-col gap-2 p-4",
|
|
120
|
+
"pointer-events-none",
|
|
121
|
+
"max-h-screen overflow-hidden"
|
|
122
|
+
],
|
|
123
|
+
{
|
|
124
|
+
variants: {
|
|
125
|
+
position: {
|
|
126
|
+
"top-left": "top-0 left-0 items-start",
|
|
127
|
+
"top-center": "top-0 left-1/2 -translate-x-1/2 items-center",
|
|
128
|
+
"top-right": "top-0 right-0 items-end",
|
|
129
|
+
"bottom-left": "bottom-0 left-0 items-start",
|
|
130
|
+
"bottom-center": "bottom-0 left-1/2 -translate-x-1/2 items-center",
|
|
131
|
+
"bottom-right": "bottom-0 right-0 items-end"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
defaultVariants: {
|
|
135
|
+
position: "bottom-right"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
var CloseButton = react.memo(
|
|
140
|
+
react.forwardRef(
|
|
141
|
+
({ variant = "default", className, onPress }, ref) => {
|
|
142
|
+
const hoverStyles = variant === "default" ? "hover:bg-[var(--accent-background)]/20" : "hover:bg-white/20";
|
|
143
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
144
|
+
chunk3YOY2VJ6_js.Button,
|
|
145
|
+
{
|
|
146
|
+
ref,
|
|
147
|
+
variant: "ghost",
|
|
148
|
+
visualSize: "icon",
|
|
149
|
+
onPress,
|
|
150
|
+
className: chunkVIREG536_js.cn(
|
|
151
|
+
"absolute right-2 top-2",
|
|
152
|
+
hoverStyles,
|
|
153
|
+
className
|
|
154
|
+
),
|
|
155
|
+
"aria-label": "Dismiss notification",
|
|
156
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4", "aria-hidden": "true" })
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
);
|
|
162
|
+
CloseButton.displayName = "CloseButton";
|
|
163
|
+
var internalQueue = new reactStately.ToastQueue({
|
|
164
|
+
maxVisibleToasts: 3
|
|
165
|
+
});
|
|
166
|
+
var totalActiveToasts = 0;
|
|
167
|
+
var toastCountListeners = /* @__PURE__ */ new Set();
|
|
168
|
+
function incrementTotalToasts() {
|
|
169
|
+
totalActiveToasts++;
|
|
170
|
+
toastCountListeners.forEach((fn) => fn());
|
|
171
|
+
}
|
|
172
|
+
function decrementTotalToasts() {
|
|
173
|
+
totalActiveToasts = Math.max(0, totalActiveToasts - 1);
|
|
174
|
+
toastCountListeners.forEach((fn) => fn());
|
|
175
|
+
}
|
|
176
|
+
function getTotalActiveToasts() {
|
|
177
|
+
return totalActiveToasts;
|
|
178
|
+
}
|
|
179
|
+
function subscribeToTotalCount(fn) {
|
|
180
|
+
toastCountListeners.add(fn);
|
|
181
|
+
return () => toastCountListeners.delete(fn);
|
|
182
|
+
}
|
|
183
|
+
var toastQueue = {
|
|
184
|
+
/**
|
|
185
|
+
* Add a toast to the queue
|
|
186
|
+
*/
|
|
187
|
+
add: (content, options) => internalQueue.add(content, options),
|
|
188
|
+
/**
|
|
189
|
+
* Close a specific toast by key
|
|
190
|
+
*/
|
|
191
|
+
close: (key) => {
|
|
192
|
+
internalQueue.close(key);
|
|
193
|
+
},
|
|
194
|
+
/**
|
|
195
|
+
* Close all toasts (visible and queued)
|
|
196
|
+
*/
|
|
197
|
+
closeAll: () => {
|
|
198
|
+
internalQueue.visibleToasts.forEach((toast2) => {
|
|
199
|
+
internalQueue.close(toast2.key);
|
|
200
|
+
});
|
|
201
|
+
},
|
|
202
|
+
/**
|
|
203
|
+
* Pause all toast timers
|
|
204
|
+
*/
|
|
205
|
+
pauseAll: () => {
|
|
206
|
+
internalQueue.pauseAll();
|
|
207
|
+
},
|
|
208
|
+
/**
|
|
209
|
+
* Resume all toast timers
|
|
210
|
+
*/
|
|
211
|
+
resumeAll: () => {
|
|
212
|
+
internalQueue.resumeAll();
|
|
213
|
+
},
|
|
214
|
+
/**
|
|
215
|
+
* Get the visible toasts
|
|
216
|
+
*/
|
|
217
|
+
get visibleToasts() {
|
|
218
|
+
return internalQueue.visibleToasts;
|
|
219
|
+
},
|
|
220
|
+
/**
|
|
221
|
+
* Subscribe to queue changes
|
|
222
|
+
*/
|
|
223
|
+
subscribe: (fn) => internalQueue.subscribe(fn),
|
|
224
|
+
/**
|
|
225
|
+
* Get total active toasts (visible + queued)
|
|
226
|
+
*/
|
|
227
|
+
get totalCount() {
|
|
228
|
+
return totalActiveToasts;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
function getInternalQueue() {
|
|
232
|
+
return internalQueue;
|
|
233
|
+
}
|
|
234
|
+
function enforceMinTimeout(timeout) {
|
|
235
|
+
if (timeout === 0) return 0;
|
|
236
|
+
return Math.max(timeout, 5e3);
|
|
237
|
+
}
|
|
238
|
+
function toast(content, options) {
|
|
239
|
+
const validated = ToastOptionsSchema.parse(options ?? {});
|
|
240
|
+
const timeout = enforceMinTimeout(validated.timeout);
|
|
241
|
+
const dismissReason = "timeout";
|
|
242
|
+
incrementTotalToasts();
|
|
243
|
+
const key = toastQueue.add(
|
|
244
|
+
{
|
|
245
|
+
key: "",
|
|
246
|
+
// Will be set by queue
|
|
247
|
+
content,
|
|
248
|
+
variant: validated.variant,
|
|
249
|
+
timeout,
|
|
250
|
+
onClose: validated.onClose
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
timeout,
|
|
254
|
+
onClose: () => {
|
|
255
|
+
decrementTotalToasts();
|
|
256
|
+
if (validated.onClose) {
|
|
257
|
+
validated.onClose(
|
|
258
|
+
key,
|
|
259
|
+
dismissReason
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
);
|
|
265
|
+
return key;
|
|
266
|
+
}
|
|
267
|
+
var ToastItem = react.memo(
|
|
268
|
+
react.forwardRef(({ toast: toast2, state }, forwardedRef) => {
|
|
269
|
+
const internalRef = react.useRef(null);
|
|
270
|
+
const ref = forwardedRef || internalRef;
|
|
271
|
+
const { toastProps, contentProps } = reactAria.useToast(
|
|
272
|
+
{ toast: toast2 },
|
|
273
|
+
state,
|
|
274
|
+
ref
|
|
275
|
+
);
|
|
276
|
+
const [touchStart, setTouchStart] = react.useState(null);
|
|
277
|
+
const [translateX, setTranslateX] = react.useState(0);
|
|
278
|
+
const SWIPE_THRESHOLD = 50;
|
|
279
|
+
const handleTouchStart = react.useCallback((e) => {
|
|
280
|
+
const touch = e.touches[0];
|
|
281
|
+
if (touch) {
|
|
282
|
+
setTouchStart(touch.clientX);
|
|
283
|
+
}
|
|
284
|
+
}, []);
|
|
285
|
+
const handleTouchMove = react.useCallback(
|
|
286
|
+
(e) => {
|
|
287
|
+
if (touchStart === null) return;
|
|
288
|
+
const touch = e.touches[0];
|
|
289
|
+
if (!touch) return;
|
|
290
|
+
const diff = touch.clientX - touchStart;
|
|
291
|
+
if (diff > 0) {
|
|
292
|
+
setTranslateX(diff);
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
[touchStart]
|
|
296
|
+
);
|
|
297
|
+
const handleTouchEnd = react.useCallback(() => {
|
|
298
|
+
if (translateX > SWIPE_THRESHOLD) {
|
|
299
|
+
state.close(toast2.key);
|
|
300
|
+
}
|
|
301
|
+
setTranslateX(0);
|
|
302
|
+
setTouchStart(null);
|
|
303
|
+
}, [translateX, state, toast2.key]);
|
|
304
|
+
const handleCloseClick = react.useCallback(() => {
|
|
305
|
+
state.close(toast2.key);
|
|
306
|
+
}, [state, toast2.key]);
|
|
307
|
+
const { content } = toast2;
|
|
308
|
+
const variant = content.variant ?? "default";
|
|
309
|
+
const accessibleName = typeof content.content === "string" ? content.content : "Notification";
|
|
310
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
311
|
+
"div",
|
|
312
|
+
{
|
|
313
|
+
...toastProps,
|
|
314
|
+
ref,
|
|
315
|
+
className: chunkVIREG536_js.cn(toastVariants({ variant })),
|
|
316
|
+
"aria-label": accessibleName,
|
|
317
|
+
style: {
|
|
318
|
+
transform: translateX > 0 ? `translateX(${translateX}px)` : void 0,
|
|
319
|
+
opacity: translateX > 0 ? 1 - translateX / 200 : void 0
|
|
320
|
+
},
|
|
321
|
+
onTouchStart: handleTouchStart,
|
|
322
|
+
onTouchMove: handleTouchMove,
|
|
323
|
+
onTouchEnd: handleTouchEnd,
|
|
324
|
+
children: [
|
|
325
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ...contentProps, className: "flex-1 min-w-0", children: typeof content.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: content.content }) : content.content }),
|
|
326
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
327
|
+
CloseButton,
|
|
328
|
+
{
|
|
329
|
+
variant,
|
|
330
|
+
onPress: handleCloseClick
|
|
331
|
+
}
|
|
332
|
+
)
|
|
333
|
+
]
|
|
334
|
+
}
|
|
335
|
+
);
|
|
336
|
+
})
|
|
337
|
+
);
|
|
338
|
+
ToastItem.displayName = "ToastItem";
|
|
339
|
+
var ToastContext = react.createContext(null);
|
|
340
|
+
function ToastProvider({
|
|
341
|
+
children,
|
|
342
|
+
maxVisibleToasts = 3
|
|
343
|
+
}) {
|
|
344
|
+
ToastProviderPropsSchema.parse({ maxVisibleToasts });
|
|
345
|
+
const queue = react.useMemo(() => {
|
|
346
|
+
return getInternalQueue();
|
|
347
|
+
}, []);
|
|
348
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ToastContext.Provider, { value: queue, children });
|
|
349
|
+
}
|
|
350
|
+
ToastProvider.displayName = "ToastProvider";
|
|
351
|
+
function StackedToastIndicator({ queuedCount }) {
|
|
352
|
+
if (queuedCount <= 0) return null;
|
|
353
|
+
const stackLayers = Math.min(queuedCount, 2);
|
|
354
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-[356px] pointer-events-none", "aria-hidden": "true", children: [
|
|
355
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
356
|
+
"div",
|
|
357
|
+
{
|
|
358
|
+
className: chunkVIREG536_js.cn(
|
|
359
|
+
"absolute left-1/2 -translate-x-1/2 w-[340px] h-4 rounded-lg shadow-lg",
|
|
360
|
+
"bg-[var(--content-background)] border border-[var(--border)]",
|
|
361
|
+
"opacity-60",
|
|
362
|
+
"transition-all duration-200"
|
|
363
|
+
),
|
|
364
|
+
style: { top: 0 }
|
|
365
|
+
}
|
|
366
|
+
),
|
|
367
|
+
stackLayers >= 2 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
368
|
+
"div",
|
|
369
|
+
{
|
|
370
|
+
className: chunkVIREG536_js.cn(
|
|
371
|
+
"absolute left-1/2 -translate-x-1/2 w-[324px] h-2 rounded-b-lg shadow-lg",
|
|
372
|
+
"bg-[var(--content-background)] border border-t-0 border-[var(--border)]",
|
|
373
|
+
"opacity-40",
|
|
374
|
+
"transition-all duration-200"
|
|
375
|
+
),
|
|
376
|
+
style: { top: 14 }
|
|
377
|
+
}
|
|
378
|
+
),
|
|
379
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4" }),
|
|
380
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
381
|
+
"div",
|
|
382
|
+
{
|
|
383
|
+
className: "text-sm text-[var(--content-foreground)] opacity-70 text-center py-2 pointer-events-auto",
|
|
384
|
+
"aria-live": "polite",
|
|
385
|
+
children: [
|
|
386
|
+
"+",
|
|
387
|
+
queuedCount,
|
|
388
|
+
" more notification",
|
|
389
|
+
queuedCount > 1 ? "s" : ""
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
)
|
|
393
|
+
] });
|
|
394
|
+
}
|
|
395
|
+
var Toaster = react.memo(
|
|
396
|
+
react.forwardRef((props, forwardedRef) => {
|
|
397
|
+
const validated = ToasterPropsSchema.parse(props);
|
|
398
|
+
const {
|
|
399
|
+
position = "bottom-right",
|
|
400
|
+
"aria-label": ariaLabel = "Notifications",
|
|
401
|
+
className
|
|
402
|
+
} = validated;
|
|
403
|
+
const internalRef = react.useRef(null);
|
|
404
|
+
const ref = forwardedRef || internalRef;
|
|
405
|
+
const internalQueueRef = getInternalQueue();
|
|
406
|
+
const state = reactStately.useToastQueue(internalQueueRef);
|
|
407
|
+
const totalCount = react.useSyncExternalStore(
|
|
408
|
+
subscribeToTotalCount,
|
|
409
|
+
getTotalActiveToasts,
|
|
410
|
+
getTotalActiveToasts
|
|
411
|
+
);
|
|
412
|
+
const { regionProps } = reactAria.useToastRegion(
|
|
413
|
+
{ "aria-label": ariaLabel },
|
|
414
|
+
state,
|
|
415
|
+
ref
|
|
416
|
+
);
|
|
417
|
+
const queuedCount = Math.max(0, totalCount - state.visibleToasts.length);
|
|
418
|
+
const handleClearAll = react.useCallback(() => {
|
|
419
|
+
state.visibleToasts.forEach((toast2) => {
|
|
420
|
+
state.close(toast2.key);
|
|
421
|
+
});
|
|
422
|
+
}, [state]);
|
|
423
|
+
if (state.visibleToasts.length === 0) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
427
|
+
"div",
|
|
428
|
+
{
|
|
429
|
+
...regionProps,
|
|
430
|
+
ref,
|
|
431
|
+
className: chunkVIREG536_js.cn(toasterVariants({ position }), className),
|
|
432
|
+
children: [
|
|
433
|
+
state.visibleToasts.map((toast2) => /* @__PURE__ */ jsxRuntime.jsx(ToastItem, { toast: toast2, state }, toast2.key)),
|
|
434
|
+
/* @__PURE__ */ jsxRuntime.jsx(StackedToastIndicator, { queuedCount }),
|
|
435
|
+
state.visibleToasts.length >= 2 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
436
|
+
chunk3YOY2VJ6_js.Button,
|
|
437
|
+
{
|
|
438
|
+
variant: "secondary",
|
|
439
|
+
visualSize: "sm",
|
|
440
|
+
onPress: handleClearAll,
|
|
441
|
+
"aria-label": "Clear all notifications",
|
|
442
|
+
className: "mt-2 pointer-events-auto",
|
|
443
|
+
children: "Clear All"
|
|
444
|
+
}
|
|
445
|
+
)
|
|
446
|
+
]
|
|
447
|
+
}
|
|
448
|
+
);
|
|
449
|
+
})
|
|
450
|
+
);
|
|
451
|
+
Toaster.displayName = "Toaster";
|
|
452
|
+
|
|
453
|
+
exports.DismissReasonSchema = DismissReasonSchema;
|
|
454
|
+
exports.ToastOptionsSchema = ToastOptionsSchema;
|
|
455
|
+
exports.ToastProvider = ToastProvider;
|
|
456
|
+
exports.ToastProviderPropsSchema = ToastProviderPropsSchema;
|
|
457
|
+
exports.ToastVariantSchema = ToastVariantSchema;
|
|
458
|
+
exports.Toaster = Toaster;
|
|
459
|
+
exports.ToasterPositionSchema = ToasterPositionSchema;
|
|
460
|
+
exports.ToasterPropsSchema = ToasterPropsSchema;
|
|
461
|
+
exports.toast = toast;
|
|
462
|
+
exports.toastQueue = toastQueue;
|
|
463
|
+
exports.toastVariants = toastVariants;
|
|
464
|
+
exports.toasterVariants = toasterVariants;
|
|
465
|
+
//# sourceMappingURL=chunk-R7XUIV25.js.map
|
|
466
|
+
//# sourceMappingURL=chunk-R7XUIV25.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/elements/Toast/Toast.types.ts","../src/elements/Toast/Toast.tsx","../src/elements/Toast/ToastProvider.tsx","../src/elements/Toast/Toaster.tsx"],"names":["z","cva","memo","forwardRef","jsx","Button","cn","X","ToastQueue","toast","useRef","useToast","useState","useCallback","jsxs","createContext","useMemo","useAriaToastQueue","useSyncExternalStore","useToastRegion"],"mappings":"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","file":"chunk-R7XUIV25.js","sourcesContent":["import { z } from 'zod';\nimport type { ReactNode } from 'react';\n\n/**\n * Toast Component Type Definitions\n *\n * @see toast-prd.md - Product Requirements Document\n * @see plan.md - Implementation Plan\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\n// =============================================================================\n// Enums and Primitives\n// =============================================================================\n\n/**\n * Reason why a toast was dismissed\n * - 'timeout': Auto-dismissed after timeout period\n * - 'user': User clicked close button or swiped to dismiss\n * - 'programmatic': Closed via toastQueue.close() or toastQueue.closeAll()\n */\nexport const DismissReasonSchema = z.enum(['timeout', 'user', 'programmatic']);\nexport type DismissReason = z.infer<typeof DismissReasonSchema>;\n\n/**\n * Toast visual variants matching the Themis theme system\n * Each variant maps to specific theme tokens for background/foreground colors\n *\n * @see toast-prd.md Variant Token Mapping table\n */\nexport const ToastVariantSchema = z.enum([\n 'default',\n 'primary',\n 'destructive',\n 'accent',\n]);\nexport type ToastVariant = z.infer<typeof ToastVariantSchema>;\n\n/**\n * Toast region positioning options\n * Toasts appear in a fixed position on the viewport\n */\nexport const ToasterPositionSchema = z.enum([\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n]);\nexport type ToasterPosition = z.infer<typeof ToasterPositionSchema>;\n\n// =============================================================================\n// Toast Options Schema\n// =============================================================================\n\n/**\n * Options for creating a toast notification\n *\n * @example\n * ```tsx\n * toast(\"Message\", {\n * variant: \"primary\",\n * timeout: 8000,\n * onClose: (key, reason) => console.log(`Toast ${key} closed: ${reason}`)\n * });\n * ```\n */\nexport const ToastOptionsSchema = z.object({\n /**\n * Visual variant determining background and foreground colors\n * @default 'default'\n */\n variant: ToastVariantSchema.default('default'),\n\n /**\n * Auto-dismiss timeout in milliseconds\n * - Values 1-4999ms are clamped to 5000ms (WCAG 2.2 timing requirement)\n * - Set to 0 for persistent toasts (no auto-dismiss)\n * @default 5000\n */\n timeout: z.number().min(0).default(5000),\n\n /**\n * Callback fired when toast is dismissed\n * @param key - Unique identifier of the toast\n * @param reason - Why the toast was dismissed ('timeout' | 'user' | 'programmatic')\n */\n onClose: z.function().optional(),\n});\n\n/**\n * Inferred type from Zod schema\n * Note: onClose is typed as generic function in Zod, but we override with proper signature below\n */\ntype ToastOptionsBase = z.infer<typeof ToastOptionsSchema>;\n\n/**\n * Toast options with properly typed onClose callback\n */\nexport type ToastOptions = Omit<ToastOptionsBase, 'onClose'> & {\n /**\n * Callback fired when toast is dismissed\n * @param key - Unique identifier of the toast\n * @param reason - Why the toast was dismissed\n */\n onClose?: (key: string, reason: DismissReason) => void;\n};\n\n// =============================================================================\n// Provider Props Schema\n// =============================================================================\n\n/**\n * Props for the ToastProvider component\n * Wraps the application to provide toast queue context\n *\n * @example\n * ```tsx\n * <ToastProvider maxVisibleToasts={3}>\n * <App />\n * <Toaster position=\"bottom-right\" />\n * </ToastProvider>\n * ```\n */\nexport const ToastProviderPropsSchema = z.object({\n /**\n * Maximum number of toasts visible at once\n * Additional toasts are queued and shown as others dismiss\n * @default 3\n */\n maxVisibleToasts: z.number().min(1).default(3),\n});\n\nexport type ToastProviderProps = z.infer<typeof ToastProviderPropsSchema> & {\n /** Child components that can trigger toasts */\n children: ReactNode;\n};\n\n// =============================================================================\n// Toaster Props Schema\n// =============================================================================\n\n/**\n * Props for the Toaster component (toast region container)\n * Renders the toast region with positioning and accessibility attributes\n *\n * @example\n * ```tsx\n * <Toaster\n * position=\"bottom-right\"\n * aria-label=\"Notifications\"\n * className=\"custom-toast-region\"\n * />\n * ```\n */\nexport const ToasterPropsSchema = z.object({\n /**\n * Position of the toast region on screen\n * @default 'bottom-right'\n */\n position: ToasterPositionSchema.default('bottom-right'),\n\n /**\n * Accessible label for the toast region landmark\n * Used by screen readers to identify the notification area\n * @default 'Notifications'\n */\n 'aria-label': z.string().default('Notifications'),\n\n /**\n * Additional CSS classes for the toast region\n */\n className: z.string().optional(),\n});\n\nexport type ToasterProps = z.infer<typeof ToasterPropsSchema>;\n\n// =============================================================================\n// Internal Types (not exported from index.ts)\n// =============================================================================\n\n/**\n * Internal toast state stored in the queue\n * Contains all information needed to render and manage a toast\n */\nexport interface ToastState {\n /** Unique identifier for the toast */\n key: string;\n\n /** Content to render inside the toast (ReactNode or string) */\n content: ReactNode;\n\n /** Visual variant for styling */\n variant: ToastVariant;\n\n /** Auto-dismiss timeout in milliseconds (0 = persistent) */\n timeout: number;\n\n /** Callback fired when toast is dismissed */\n onClose?: (key: string, reason: DismissReason) => void;\n}\n\n/**\n * Toast content type - fully customizable by developer\n * Can be a simple string or complex ReactNode with custom layout\n */\nexport type ToastContent = ReactNode;\n\n/**\n * Props for the internal ToastItem component\n */\nexport interface ToastItemProps {\n /** Toast state from the queue */\n toast: {\n key: string;\n content: ToastState;\n animation: 'entering' | 'queued' | 'exiting';\n priority: number;\n };\n\n /** Toast queue state for managing dismissal */\n state: {\n close: (key: string) => void;\n };\n}\n\n// =============================================================================\n// Toast Queue API Types\n// =============================================================================\n\n/**\n * Public API for the toast queue\n * Allows programmatic control of toasts from anywhere in the app\n */\nexport interface ToastQueueAPI {\n /**\n * Add a new toast to the queue\n * @param content - Content to display in the toast\n * @param options - Toast configuration options\n * @returns Unique key for the created toast\n */\n add: (content: ToastContent, options?: Partial<ToastOptions>) => string;\n\n /**\n * Close a specific toast by key\n * @param key - Unique identifier of the toast to close\n */\n close: (key: string) => void;\n\n /**\n * Close all toasts (visible and queued)\n */\n closeAll: () => void;\n\n /**\n * Pause all toast timers\n * Useful when user is interacting with the toast region\n */\n pauseAll: () => void;\n\n /**\n * Resume all paused toast timers\n */\n resumeAll: () => void;\n}\n\n// =============================================================================\n// Utility Types\n// =============================================================================\n\n/**\n * Configuration for the toast() function\n * Partial version of ToastOptions for convenience\n */\nexport type ToastConfig = Partial<ToastOptions>;\n\n/**\n * Return type of the toast() function\n */\nexport type ToastKey = string;\n","'use client';\n\n/**\n * Toast Component - Accessible notification system\n * Built with React Aria toast primitives and CVA styling\n *\n * @see toast-prd.md - Product Requirements Document\n * @see plan.md - Implementation Plan\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport {\n forwardRef,\n memo,\n useRef,\n useState,\n useCallback,\n type TouchEvent as ReactTouchEvent,\n} from 'react';\nimport { useToast } from 'react-aria';\nimport { ToastQueue, type QueuedToast, type ToastState as AriaToastState } from 'react-stately';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport type {\n ToastVariant,\n ToastContent,\n ToastState,\n DismissReason,\n ToastConfig,\n} from './Toast.types';\nimport { ToastOptionsSchema } from './Toast.types';\n\n// =============================================================================\n// CVA Variants\n// =============================================================================\n\n/**\n * Toast container variants with theme-aligned styling\n * Fixed 356px width for consistent appearance across all toasts\n */\nexport const toastVariants = cva(\n [\n // Fixed width for consistent appearance\n 'pointer-events-auto relative flex w-[356px] items-center justify-between',\n 'space-x-4 overflow-hidden rounded-lg border p-4 pr-12 shadow-lg',\n // Animations with reduced-motion support\n 'transition-all duration-300',\n 'motion-reduce:transition-none motion-reduce:animate-none',\n 'data-[entering]:animate-in data-[entering]:slide-in-from-left',\n 'data-[exiting]:animate-out data-[exiting]:slide-out-to-right-full',\n 'data-[exiting]:fade-out-80',\n // Touch interaction for swipe\n 'touch-pan-y',\n ],\n {\n variants: {\n variant: {\n default: [\n 'bg-[var(--content-background)]',\n 'text-[var(--content-foreground)]',\n 'border-[var(--border)]',\n ],\n primary: [\n 'bg-[var(--primary)]',\n 'text-[var(--primary-foreground)]',\n 'border-[var(--primary)]',\n ],\n destructive: [\n 'bg-[var(--destructive-background)]',\n 'text-[var(--destructive-foreground)]',\n 'border-[var(--destructive-background)]',\n ],\n accent: [\n 'bg-[var(--accent-background)]',\n 'text-[var(--accent-foreground)]',\n 'border-[var(--accent-background)]',\n ],\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\n/**\n * Toaster position variants for the toast region container\n */\nexport const toasterVariants = cva(\n [\n 'fixed z-50 flex flex-col gap-2 p-4',\n 'pointer-events-none',\n 'max-h-screen overflow-hidden',\n ],\n {\n variants: {\n position: {\n 'top-left': 'top-0 left-0 items-start',\n 'top-center': 'top-0 left-1/2 -translate-x-1/2 items-center',\n 'top-right': 'top-0 right-0 items-end',\n 'bottom-left': 'bottom-0 left-0 items-start',\n 'bottom-center': 'bottom-0 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-0 right-0 items-end',\n },\n },\n defaultVariants: {\n position: 'bottom-right',\n },\n }\n);\n\n// =============================================================================\n// Close Button Component\n// =============================================================================\n\ninterface CloseButtonProps {\n variant?: ToastVariant;\n className?: string;\n onPress?: () => void;\n}\n\n/**\n * Close button component with 44x44px touch target\n * WCAG 2.2 AAA compliant touch target size\n */\nconst CloseButton = memo(\n forwardRef<HTMLButtonElement, CloseButtonProps>(\n ({ variant = 'default', className, onPress}, ref) => {\n // Variant-aware hover styles\n const hoverStyles =\n variant === 'default'\n ? 'hover:bg-[var(--accent-background)]/20'\n : 'hover:bg-white/20';\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n visualSize=\"icon\"\n onPress={onPress}\n className={cn(\n 'absolute right-2 top-2',\n hoverStyles,\n className\n )}\n aria-label=\"Dismiss notification\"\n >\n <X className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n );\n }\n )\n);\n\nCloseButton.displayName = 'CloseButton';\n\n// =============================================================================\n// Global Toast Queue\n// =============================================================================\n\n/**\n * Internal toast queue instance\n */\nconst internalQueue = new ToastQueue<ToastState>({\n maxVisibleToasts: 3,\n});\n\n/**\n * Track total active toasts (visible + queued)\n * React Stately doesn't expose queued toasts, so we track manually\n */\nlet totalActiveToasts = 0;\nconst toastCountListeners = new Set<() => void>();\n\nfunction incrementTotalToasts(): void {\n totalActiveToasts++;\n toastCountListeners.forEach((fn) => fn());\n}\n\nfunction decrementTotalToasts(): void {\n totalActiveToasts = Math.max(0, totalActiveToasts - 1);\n toastCountListeners.forEach((fn) => fn());\n}\n\n/**\n * Get the total number of active toasts (visible + queued)\n */\nexport function getTotalActiveToasts(): number {\n return totalActiveToasts;\n}\n\n/**\n * Subscribe to total toast count changes\n */\nexport function subscribeToTotalCount(fn: () => void): () => void {\n toastCountListeners.add(fn);\n return () => toastCountListeners.delete(fn);\n}\n\n/**\n * Enhanced toast queue API with additional methods\n * Provides closeAll, pauseAll, resumeAll on top of base ToastQueue\n */\nexport const toastQueue = {\n /**\n * Add a toast to the queue\n */\n add: (content: ToastState, options?: { timeout?: number; onClose?: () => void }) =>\n internalQueue.add(content, options),\n\n /**\n * Close a specific toast by key\n */\n close: (key: string) => {\n internalQueue.close(key);\n },\n\n /**\n * Close all toasts (visible and queued)\n */\n closeAll: () => {\n // Close all visible toasts\n internalQueue.visibleToasts.forEach((toast) => {\n internalQueue.close(toast.key);\n });\n },\n\n /**\n * Pause all toast timers\n */\n pauseAll: () => {\n internalQueue.pauseAll();\n },\n\n /**\n * Resume all toast timers\n */\n resumeAll: () => {\n internalQueue.resumeAll();\n },\n\n /**\n * Get the visible toasts\n */\n get visibleToasts() {\n return internalQueue.visibleToasts;\n },\n\n /**\n * Subscribe to queue changes\n */\n subscribe: (fn: () => void) => internalQueue.subscribe(fn),\n\n /**\n * Get total active toasts (visible + queued)\n */\n get totalCount() {\n return totalActiveToasts;\n },\n};\n\n/**\n * Get the internal queue for use in components\n */\nexport function getInternalQueue(): ToastQueue<ToastState> {\n return internalQueue;\n}\n\n// =============================================================================\n// Toast Function (Programmatic API)\n// =============================================================================\n\n/**\n * Enforce minimum timeout of 5000ms for accessibility\n * WCAG 2.2 timing guidelines require sufficient time for reading\n * Timeout of 0 bypasses this (persistent toast)\n */\nfunction enforceMinTimeout(timeout: number): number {\n if (timeout === 0) return 0; // Persistent toast\n return Math.max(timeout, 5000);\n}\n\n/**\n * Add a toast notification programmatically\n *\n * @param content - Content to display (string or ReactNode)\n * @param options - Toast configuration options\n * @returns Unique key for the created toast\n *\n * @example\n * ```tsx\n * // Simple string\n * toast(\"Message saved!\");\n *\n * // With variant\n * toast(\"Error occurred\", { variant: \"destructive\" });\n *\n * // With callback\n * toast(\"Action completed\", {\n * variant: \"primary\",\n * onClose: (key, reason) => console.log(`Closed: ${reason}`)\n * });\n * ```\n */\nexport function toast(content: ToastContent, options?: ToastConfig): string {\n // Parse and validate options with Zod schema\n const validated = ToastOptionsSchema.parse(options ?? {});\n\n // Enforce minimum timeout for accessibility\n const timeout = enforceMinTimeout(validated.timeout);\n\n // Track dismissal reason for callback\n const dismissReason: DismissReason = 'timeout';\n\n // Increment total toast count\n incrementTotalToasts();\n\n const key = toastQueue.add(\n {\n key: '', // Will be set by queue\n content,\n variant: validated.variant as ToastVariant,\n timeout,\n onClose: validated.onClose as\n | ((key: string, reason: DismissReason) => void)\n | undefined,\n },\n {\n timeout,\n onClose: () => {\n // Decrement total toast count\n decrementTotalToasts();\n\n // Fire the user's onClose callback with reason\n if (validated.onClose) {\n (validated.onClose as (key: string, reason: DismissReason) => void)(\n key,\n dismissReason\n );\n }\n },\n }\n );\n\n return key;\n}\n\n// =============================================================================\n// Toast Item Component\n// =============================================================================\n\nexport interface ToastItemProps {\n /** Toast from the queue */\n toast: QueuedToast<ToastState>;\n /** Toast state for managing dismissal */\n state: AriaToastState<ToastState>;\n}\n\n/**\n * Individual toast notification component\n * Uses React Aria useToast hook for accessibility\n */\nexport const ToastItem = memo(\n forwardRef<HTMLDivElement, ToastItemProps>(({ toast, state }, forwardedRef) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const ref = (forwardedRef as React.RefObject<HTMLDivElement>) || internalRef;\n\n // React Aria toast hook for accessibility\n const { toastProps, contentProps } = useToast(\n { toast },\n state,\n ref\n );\n\n // Swipe-to-dismiss state\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [translateX, setTranslateX] = useState(0);\n\n const SWIPE_THRESHOLD = 50; // Minimum swipe distance to dismiss\n\n const handleTouchStart = useCallback((e: ReactTouchEvent) => {\n const touch = e.touches[0];\n if (touch) {\n setTouchStart(touch.clientX);\n }\n }, []);\n\n const handleTouchMove = useCallback(\n (e: ReactTouchEvent) => {\n if (touchStart === null) return;\n const touch = e.touches[0];\n if (!touch) return;\n const diff = touch.clientX - touchStart;\n // Only allow right swipe (positive diff)\n if (diff > 0) {\n setTranslateX(diff);\n }\n },\n [touchStart]\n );\n\n const handleTouchEnd = useCallback(() => {\n if (translateX > SWIPE_THRESHOLD) {\n // Dismiss the toast\n state.close(toast.key);\n }\n // Reset swipe state\n setTranslateX(0);\n setTouchStart(null);\n }, [translateX, state, toast.key]);\n\n const handleCloseClick = useCallback(() => {\n state.close(toast.key);\n }, [state, toast.key]);\n\n const { content } = toast;\n const variant = content.variant ?? 'default';\n\n // Generate accessible name for the toast\n const accessibleName = typeof content.content === 'string'\n ? content.content\n : 'Notification';\n\n return (\n <div\n {...toastProps}\n ref={ref}\n className={cn(toastVariants({ variant }))}\n aria-label={accessibleName}\n style={{\n transform: translateX > 0 ? `translateX(${translateX}px)` : undefined,\n opacity: translateX > 0 ? 1 - translateX / 200 : undefined,\n }}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {/* Toast content */}\n <div {...contentProps} className=\"flex-1 min-w-0\">\n {typeof content.content === 'string' ? (\n <p className=\"text-sm font-medium\">{content.content}</p>\n ) : (\n content.content\n )}\n </div>\n\n {/* Close button */}\n <CloseButton\n variant={variant}\n onPress={handleCloseClick}\n />\n </div>\n );\n })\n);\n\nToastItem.displayName = 'ToastItem';\n\n// =============================================================================\n// Export Types\n// =============================================================================\n\nexport type { VariantProps };\n","'use client';\n\n/**\n * ToastProvider Component\n * Provides toast queue context for the application\n *\n * @see toast-prd.md - Product Requirements Document\n * @see plan.md - Implementation Plan\n */\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport { ToastQueue } from 'react-stately';\nimport type { ToastState, ToastProviderProps } from './Toast.types';\nimport { ToastProviderPropsSchema } from './Toast.types';\nimport { getInternalQueue } from './Toast';\n\n// =============================================================================\n// Context\n// =============================================================================\n\n/**\n * Context for the toast queue\n * Allows child components to access the toast queue state\n */\nexport const ToastContext = createContext<ToastQueue<ToastState> | null>(null);\n\n/**\n * Hook to access the toast queue from context\n * @returns The toast queue instance\n * @throws Error if used outside ToastProvider\n */\nexport function useToastQueue(): ToastQueue<ToastState> {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToastQueue must be used within a ToastProvider');\n }\n return context;\n}\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\n/**\n * ToastProvider - Wraps application to provide toast functionality\n *\n * @example\n * ```tsx\n * <ToastProvider maxVisibleToasts={3}>\n * <App />\n * <Toaster position=\"bottom-right\" />\n * </ToastProvider>\n * ```\n */\nexport function ToastProvider({\n children,\n maxVisibleToasts = 3,\n}: ToastProviderProps): ReactNode {\n // Validate props with Zod schema (throws on invalid input)\n ToastProviderPropsSchema.parse({ maxVisibleToasts });\n\n // Create queue with configured maxVisibleToasts\n // Note: We use the global toastQueue for now for simplicity\n // In a more complex setup, we could create a new queue per provider\n const queue = useMemo(() => {\n // Get the internal queue instance\n // Note: maxVisibleToasts is set on the global queue, not per-provider\n return getInternalQueue();\n }, []);\n\n return (\n <ToastContext.Provider value={queue}>{children}</ToastContext.Provider>\n );\n}\n\nToastProvider.displayName = 'ToastProvider';\n","'use client';\n\n/**\n * Toaster Component - Toast region container\n * Renders visible toasts with positioning and accessibility attributes\n *\n * @see toast-prd.md - Product Requirements Document\n * @see plan.md - Implementation Plan\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport { forwardRef, useRef, memo, useCallback, useSyncExternalStore, type ReactElement } from 'react';\nimport { useToastRegion } from 'react-aria';\nimport { useToastQueue as useAriaToastQueue } from 'react-stately';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { toasterVariants, getInternalQueue, ToastItem, getTotalActiveToasts, subscribeToTotalCount } from './Toast';\nimport type { ToasterProps } from './Toast.types';\nimport { ToasterPropsSchema } from './Toast.types';\n\n// =============================================================================\n// Stacked Toast Visual Effect\n// =============================================================================\n\ninterface StackedToastIndicatorProps {\n queuedCount: number;\n}\n\n/**\n * Visual stacking effect showing ghost toasts behind visible ones\n * Creates depth perception for queued notifications\n */\nfunction StackedToastIndicator({ queuedCount }: StackedToastIndicatorProps): ReactElement | null {\n if (queuedCount <= 0) return null;\n\n // Show up to 2 visual stack layers\n const stackLayers = Math.min(queuedCount, 2);\n\n return (\n <div className=\"relative w-[356px] pointer-events-none\" aria-hidden=\"true\">\n {/* Stack layer 1 (closest to visible toasts) */}\n <div\n className={cn(\n 'absolute left-1/2 -translate-x-1/2 w-[340px] h-4 rounded-lg shadow-lg',\n 'bg-[var(--content-background)] border border-[var(--border)]',\n 'opacity-60',\n 'transition-all duration-200'\n )}\n style={{ top: 0 }}\n />\n\n {/* Stack layer 2 (further back, if 2+ queued) */}\n {stackLayers >= 2 && (\n <div\n className={cn(\n 'absolute left-1/2 -translate-x-1/2 w-[324px] h-2 rounded-b-lg shadow-lg',\n 'bg-[var(--content-background)] border border-t-0 border-[var(--border)]',\n 'opacity-40',\n 'transition-all duration-200'\n )}\n style={{ top: 14 }}\n />\n )}\n\n {/* Spacer to account for stack height */}\n <div className=\"h-4\" />\n\n {/* Text indicator */}\n <div\n className=\"text-sm text-[var(--content-foreground)] opacity-70 text-center py-2 pointer-events-auto\"\n aria-live=\"polite\"\n >\n +{queuedCount} more notification{queuedCount > 1 ? 's' : ''}\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// Toaster Component\n// =============================================================================\n\n/**\n * Toaster - Toast region container\n * Renders the toast notification area with proper ARIA attributes\n *\n * @example\n * ```tsx\n * <ToastProvider>\n * <App />\n * <Toaster position=\"bottom-right\" aria-label=\"Notifications\" />\n * </ToastProvider>\n * ```\n */\nexport const Toaster = memo(\n forwardRef<HTMLDivElement, ToasterProps>((props, forwardedRef) => {\n // Validate props with Zod schema\n const validated = ToasterPropsSchema.parse(props);\n const {\n position = 'bottom-right',\n 'aria-label': ariaLabel = 'Notifications',\n className,\n } = validated;\n\n const internalRef = useRef<HTMLDivElement>(null);\n const ref = (forwardedRef as React.RefObject<HTMLDivElement>) || internalRef;\n\n // Use the global toast queue state\n const internalQueueRef = getInternalQueue();\n const state = useAriaToastQueue(internalQueueRef);\n\n // Subscribe to total toast count (includes queued toasts)\n const totalCount = useSyncExternalStore(\n subscribeToTotalCount,\n getTotalActiveToasts,\n getTotalActiveToasts\n );\n\n // React Aria toast region hook for accessibility\n const { regionProps } = useToastRegion(\n { 'aria-label': ariaLabel },\n state,\n ref\n );\n\n // Calculate queued toast count for collapsed stack indicator\n // totalCount = all toasts (visible + queued), visibleToasts.length = currently shown\n const queuedCount = Math.max(0, totalCount - state.visibleToasts.length);\n\n // Handle \"Clear All\" button click\n const handleClearAll = useCallback(() => {\n // Close all visible toasts\n state.visibleToasts.forEach((toast) => {\n state.close(toast.key);\n });\n }, [state]);\n\n // Don't render if no toasts\n if (state.visibleToasts.length === 0) {\n return null;\n }\n\n return (\n <div\n {...regionProps}\n ref={ref}\n className={cn(toasterVariants({ position }), className)}\n >\n {/* Toast list */}\n {state.visibleToasts.map((toast) => (\n <ToastItem key={toast.key} toast={toast} state={state} />\n ))}\n\n {/* Visual stacking effect with ghost toasts */}\n <StackedToastIndicator queuedCount={queuedCount} />\n\n {/* \"Clear All\" button (when 2+ toasts visible) */}\n {state.visibleToasts.length >= 2 && (\n <Button\n variant=\"secondary\"\n visualSize=\"sm\"\n onPress={handleClearAll}\n aria-label=\"Clear all notifications\"\n className=\"mt-2 pointer-events-auto\"\n >\n Clear All\n </Button>\n )}\n </div>\n );\n })\n);\n\nToaster.displayName = 'Toaster';\n"]}
|