@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,769 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel Component - Storybook Stories
|
|
3
|
+
*
|
|
4
|
+
* Interactive examples and documentation for the Panel component
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: The Panel component must be a SIBLING of <main>, not a child.
|
|
7
|
+
* This allows it to participate in the CSS Grid layout and appear beside
|
|
8
|
+
* the main content, not inside it.
|
|
9
|
+
*
|
|
10
|
+
* @see panel-prd.md DOC-002 (Storybook Stories Requirements)
|
|
11
|
+
* @see ADR 0007 (Accessibility Decisions)
|
|
12
|
+
* @see Storybook (when running)
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { useState, type ReactElement } from 'react';
|
|
16
|
+
import type { Meta, StoryObj } from '@storybook/nextjs';
|
|
17
|
+
import { Panel } from './Panel';
|
|
18
|
+
import { Button } from '../Button';
|
|
19
|
+
|
|
20
|
+
const meta = {
|
|
21
|
+
title: 'Elements/Panel',
|
|
22
|
+
component: Panel,
|
|
23
|
+
tags: ['autodocs'],
|
|
24
|
+
parameters: {
|
|
25
|
+
layout: 'fullscreen',
|
|
26
|
+
docs: {
|
|
27
|
+
description: {
|
|
28
|
+
component:
|
|
29
|
+
'Accessible non-modal sidebar panel using the disclosure pattern with a complementary region for WCAG 2.2 AAA compliance. Designed for master-detail patterns where panel content supplements main content without blocking interaction.\n\n**Important:** The Panel must be a sibling of your main content in the grid layout, not nested inside it.',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
argTypes: {
|
|
34
|
+
position: {
|
|
35
|
+
control: 'select',
|
|
36
|
+
options: ['left', 'right'],
|
|
37
|
+
description: 'Panel position (left or right side)',
|
|
38
|
+
},
|
|
39
|
+
width: {
|
|
40
|
+
control: 'select',
|
|
41
|
+
options: ['sm', 'md', 'lg', 'xl', 'auto'],
|
|
42
|
+
description:
|
|
43
|
+
'Panel width: sm=300px, md=400px, lg=500px, xl=600px, auto=content',
|
|
44
|
+
},
|
|
45
|
+
defaultOpen: {
|
|
46
|
+
control: 'boolean',
|
|
47
|
+
description: 'Default open state (uncontrolled mode)',
|
|
48
|
+
},
|
|
49
|
+
mobileBreakpoint: {
|
|
50
|
+
control: 'number',
|
|
51
|
+
description: 'Width in pixels below which panel renders as modal',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
} satisfies Meta<typeof Panel>;
|
|
55
|
+
|
|
56
|
+
export default meta;
|
|
57
|
+
type Story = StoryObj<typeof meta>;
|
|
58
|
+
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// Default Story
|
|
61
|
+
// ============================================================================
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Default Panel
|
|
65
|
+
* Basic panel with trigger, header, body, and footer.
|
|
66
|
+
* Note: Panel is a sibling of main in the grid, with trigger inside main.
|
|
67
|
+
*/
|
|
68
|
+
export const Default: Story = {
|
|
69
|
+
render: function DefaultPanel(): ReactElement {
|
|
70
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
74
|
+
<main className="p-4">
|
|
75
|
+
<h1 className="text-2xl font-bold mb-4">Main Content</h1>
|
|
76
|
+
<p className="text-[var(--muted-foreground)] mb-4">
|
|
77
|
+
Click the button to open the panel. The panel renders beside this
|
|
78
|
+
content, not over it.
|
|
79
|
+
</p>
|
|
80
|
+
<Button onClick={() => setIsOpen(true)}>Open Panel</Button>
|
|
81
|
+
</main>
|
|
82
|
+
<Panel isOpen={isOpen} onOpenChange={setIsOpen}>
|
|
83
|
+
<Panel.Content>
|
|
84
|
+
<Panel.Header>
|
|
85
|
+
<Panel.Title>Panel Title</Panel.Title>
|
|
86
|
+
<Panel.Description>
|
|
87
|
+
This is a description of the panel content.
|
|
88
|
+
</Panel.Description>
|
|
89
|
+
</Panel.Header>
|
|
90
|
+
<Panel.Body>
|
|
91
|
+
<p>Panel body content goes here. This area is scrollable.</p>
|
|
92
|
+
</Panel.Body>
|
|
93
|
+
<Panel.Footer>
|
|
94
|
+
<Panel.Close>
|
|
95
|
+
<Button variant="outline">Cancel</Button>
|
|
96
|
+
</Panel.Close>
|
|
97
|
+
<Button>Save</Button>
|
|
98
|
+
</Panel.Footer>
|
|
99
|
+
</Panel.Content>
|
|
100
|
+
</Panel>
|
|
101
|
+
</div>
|
|
102
|
+
);
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// Position Variants
|
|
108
|
+
// ============================================================================
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Position Left
|
|
112
|
+
* Panel appears on the left side
|
|
113
|
+
*/
|
|
114
|
+
export const PositionLeft: Story = {
|
|
115
|
+
render: () => (
|
|
116
|
+
<div className="grid min-h-[400px] grid-cols-[auto_1fr]">
|
|
117
|
+
<Panel position="left" defaultOpen>
|
|
118
|
+
<Panel.Content>
|
|
119
|
+
<Panel.Header>
|
|
120
|
+
<Panel.Title>Left Panel</Panel.Title>
|
|
121
|
+
<Panel.Description>
|
|
122
|
+
This panel opens on the left side.
|
|
123
|
+
</Panel.Description>
|
|
124
|
+
</Panel.Header>
|
|
125
|
+
<Panel.Body>
|
|
126
|
+
<p>Content for the left-positioned panel.</p>
|
|
127
|
+
</Panel.Body>
|
|
128
|
+
</Panel.Content>
|
|
129
|
+
</Panel>
|
|
130
|
+
<main className="p-4">
|
|
131
|
+
<h1 className="text-2xl font-bold mb-4">Main Content</h1>
|
|
132
|
+
<p className="text-[var(--muted-foreground)]">
|
|
133
|
+
The panel is on the left side of this content.
|
|
134
|
+
</p>
|
|
135
|
+
</main>
|
|
136
|
+
</div>
|
|
137
|
+
),
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// ============================================================================
|
|
141
|
+
// Width Variants
|
|
142
|
+
// ============================================================================
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Width Small (300px)
|
|
146
|
+
*/
|
|
147
|
+
export const WidthSmall: Story = {
|
|
148
|
+
render: () => (
|
|
149
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
150
|
+
<main className="p-4">
|
|
151
|
+
<h1 className="text-2xl font-bold mb-4">Small Width Panel</h1>
|
|
152
|
+
<p className="text-[var(--muted-foreground)]">
|
|
153
|
+
The panel on the right is 300px wide.
|
|
154
|
+
</p>
|
|
155
|
+
</main>
|
|
156
|
+
<Panel width="sm" defaultOpen>
|
|
157
|
+
<Panel.Content>
|
|
158
|
+
<Panel.Header>
|
|
159
|
+
<Panel.Title>Small Panel</Panel.Title>
|
|
160
|
+
</Panel.Header>
|
|
161
|
+
<Panel.Body>
|
|
162
|
+
<p>300px width panel content.</p>
|
|
163
|
+
</Panel.Body>
|
|
164
|
+
</Panel.Content>
|
|
165
|
+
</Panel>
|
|
166
|
+
</div>
|
|
167
|
+
),
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Width Large (500px)
|
|
172
|
+
*/
|
|
173
|
+
export const WidthLarge: Story = {
|
|
174
|
+
render: () => (
|
|
175
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
176
|
+
<main className="p-4">
|
|
177
|
+
<h1 className="text-2xl font-bold mb-4">Large Width Panel</h1>
|
|
178
|
+
<p className="text-[var(--muted-foreground)]">
|
|
179
|
+
The panel on the right is 500px wide.
|
|
180
|
+
</p>
|
|
181
|
+
</main>
|
|
182
|
+
<Panel width="lg" defaultOpen>
|
|
183
|
+
<Panel.Content>
|
|
184
|
+
<Panel.Header>
|
|
185
|
+
<Panel.Title>Large Panel</Panel.Title>
|
|
186
|
+
</Panel.Header>
|
|
187
|
+
<Panel.Body>
|
|
188
|
+
<p>500px width panel content.</p>
|
|
189
|
+
</Panel.Body>
|
|
190
|
+
</Panel.Content>
|
|
191
|
+
</Panel>
|
|
192
|
+
</div>
|
|
193
|
+
),
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Width Extra Large (600px)
|
|
198
|
+
*/
|
|
199
|
+
export const WidthXLarge: Story = {
|
|
200
|
+
render: () => (
|
|
201
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
202
|
+
<main className="p-4">
|
|
203
|
+
<h1 className="text-2xl font-bold mb-4">Extra Large Width Panel</h1>
|
|
204
|
+
<p className="text-[var(--muted-foreground)]">
|
|
205
|
+
The panel on the right is 600px wide.
|
|
206
|
+
</p>
|
|
207
|
+
</main>
|
|
208
|
+
<Panel width="xl" defaultOpen>
|
|
209
|
+
<Panel.Content>
|
|
210
|
+
<Panel.Header>
|
|
211
|
+
<Panel.Title>Extra Large Panel</Panel.Title>
|
|
212
|
+
</Panel.Header>
|
|
213
|
+
<Panel.Body>
|
|
214
|
+
<p>600px width panel content.</p>
|
|
215
|
+
</Panel.Body>
|
|
216
|
+
</Panel.Content>
|
|
217
|
+
</Panel>
|
|
218
|
+
</div>
|
|
219
|
+
),
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
// ============================================================================
|
|
223
|
+
// Controlled Mode
|
|
224
|
+
// ============================================================================
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Controlled Mode
|
|
228
|
+
* External state management with isOpen and onOpenChange
|
|
229
|
+
*/
|
|
230
|
+
export const Controlled: Story = {
|
|
231
|
+
render: function ControlledPanel(): ReactElement {
|
|
232
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
233
|
+
|
|
234
|
+
return (
|
|
235
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
236
|
+
<main className="p-4">
|
|
237
|
+
<h1 className="text-2xl font-bold mb-4">Controlled Panel</h1>
|
|
238
|
+
<p className="mb-4 text-[var(--muted-foreground)]">
|
|
239
|
+
Panel state: {isOpen ? 'Open' : 'Closed'}
|
|
240
|
+
</p>
|
|
241
|
+
<div className="flex gap-2">
|
|
242
|
+
<Button onClick={() => setIsOpen(true)}>Open Panel</Button>
|
|
243
|
+
<Button variant="outline" onClick={() => setIsOpen(false)}>
|
|
244
|
+
Close Panel
|
|
245
|
+
</Button>
|
|
246
|
+
</div>
|
|
247
|
+
</main>
|
|
248
|
+
<Panel
|
|
249
|
+
isOpen={isOpen}
|
|
250
|
+
onOpenChange={setIsOpen}
|
|
251
|
+
onClose={() => console.log('Panel closed!')}
|
|
252
|
+
>
|
|
253
|
+
<Panel.Content>
|
|
254
|
+
<Panel.Header>
|
|
255
|
+
<Panel.Title>Controlled Panel</Panel.Title>
|
|
256
|
+
<Panel.Description>
|
|
257
|
+
This panel is controlled externally.
|
|
258
|
+
</Panel.Description>
|
|
259
|
+
</Panel.Header>
|
|
260
|
+
<Panel.Body>
|
|
261
|
+
<p>State managed outside the component.</p>
|
|
262
|
+
</Panel.Body>
|
|
263
|
+
<Panel.Footer>
|
|
264
|
+
<Panel.Close>
|
|
265
|
+
<Button>Done</Button>
|
|
266
|
+
</Panel.Close>
|
|
267
|
+
</Panel.Footer>
|
|
268
|
+
</Panel.Content>
|
|
269
|
+
</Panel>
|
|
270
|
+
</div>
|
|
271
|
+
);
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
// ============================================================================
|
|
276
|
+
// No Close Button
|
|
277
|
+
// ============================================================================
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* No Close Button
|
|
281
|
+
* Panel without the built-in close button
|
|
282
|
+
*/
|
|
283
|
+
export const NoCloseButton: Story = {
|
|
284
|
+
render: function NoCloseButtonPanel(): ReactElement {
|
|
285
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
286
|
+
|
|
287
|
+
return (
|
|
288
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
289
|
+
<main className="p-4">
|
|
290
|
+
<h1 className="text-2xl font-bold mb-4">Panel Without Close Button</h1>
|
|
291
|
+
<p className="text-[var(--muted-foreground)] mb-4">
|
|
292
|
+
Use the button below or press Escape to toggle.
|
|
293
|
+
</p>
|
|
294
|
+
<Button onClick={() => setIsOpen(!isOpen)}>Toggle Panel</Button>
|
|
295
|
+
</main>
|
|
296
|
+
<Panel isOpen={isOpen} onOpenChange={setIsOpen}>
|
|
297
|
+
<Panel.Content showClose={false}>
|
|
298
|
+
<Panel.Header>
|
|
299
|
+
<Panel.Title>No Close Button</Panel.Title>
|
|
300
|
+
<Panel.Description>
|
|
301
|
+
Use the trigger or footer button to close.
|
|
302
|
+
</Panel.Description>
|
|
303
|
+
</Panel.Header>
|
|
304
|
+
<Panel.Body>
|
|
305
|
+
<p>
|
|
306
|
+
This panel has no built-in close button. Press Escape or click
|
|
307
|
+
the trigger to close.
|
|
308
|
+
</p>
|
|
309
|
+
</Panel.Body>
|
|
310
|
+
<Panel.Footer>
|
|
311
|
+
<Panel.Close>
|
|
312
|
+
<Button variant="outline">Close</Button>
|
|
313
|
+
</Panel.Close>
|
|
314
|
+
</Panel.Footer>
|
|
315
|
+
</Panel.Content>
|
|
316
|
+
</Panel>
|
|
317
|
+
</div>
|
|
318
|
+
);
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// ============================================================================
|
|
323
|
+
// Content Variants
|
|
324
|
+
// ============================================================================
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* With Header
|
|
328
|
+
* Panel with title and description in header
|
|
329
|
+
*/
|
|
330
|
+
export const WithHeader: Story = {
|
|
331
|
+
render: () => (
|
|
332
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
333
|
+
<main className="p-4">
|
|
334
|
+
<h1 className="text-2xl font-bold mb-4">Panel with Header</h1>
|
|
335
|
+
<p className="text-[var(--muted-foreground)]">
|
|
336
|
+
The panel shows a header with title and description.
|
|
337
|
+
</p>
|
|
338
|
+
</main>
|
|
339
|
+
<Panel defaultOpen>
|
|
340
|
+
<Panel.Content>
|
|
341
|
+
<Panel.Header>
|
|
342
|
+
<Panel.Title>Panel Header</Panel.Title>
|
|
343
|
+
<Panel.Description>
|
|
344
|
+
The header contains the title and an optional description. It
|
|
345
|
+
provides context for the panel content.
|
|
346
|
+
</Panel.Description>
|
|
347
|
+
</Panel.Header>
|
|
348
|
+
<Panel.Body>
|
|
349
|
+
<p>Main panel content here.</p>
|
|
350
|
+
</Panel.Body>
|
|
351
|
+
</Panel.Content>
|
|
352
|
+
</Panel>
|
|
353
|
+
</div>
|
|
354
|
+
),
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* With Footer
|
|
359
|
+
* Panel with action buttons in footer
|
|
360
|
+
*/
|
|
361
|
+
export const WithFooter: Story = {
|
|
362
|
+
render: () => (
|
|
363
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
364
|
+
<main className="p-4">
|
|
365
|
+
<h1 className="text-2xl font-bold mb-4">Panel with Footer</h1>
|
|
366
|
+
<p className="text-[var(--muted-foreground)]">
|
|
367
|
+
The panel has action buttons in the footer.
|
|
368
|
+
</p>
|
|
369
|
+
</main>
|
|
370
|
+
<Panel defaultOpen>
|
|
371
|
+
<Panel.Content>
|
|
372
|
+
<Panel.Header>
|
|
373
|
+
<Panel.Title>Footer Actions</Panel.Title>
|
|
374
|
+
</Panel.Header>
|
|
375
|
+
<Panel.Body>
|
|
376
|
+
<p>Panel content with action buttons below.</p>
|
|
377
|
+
</Panel.Body>
|
|
378
|
+
<Panel.Footer>
|
|
379
|
+
<Panel.Close>
|
|
380
|
+
<Button variant="outline">Cancel</Button>
|
|
381
|
+
</Panel.Close>
|
|
382
|
+
<Button variant="destructive">Delete</Button>
|
|
383
|
+
<Button>Save</Button>
|
|
384
|
+
</Panel.Footer>
|
|
385
|
+
</Panel.Content>
|
|
386
|
+
</Panel>
|
|
387
|
+
</div>
|
|
388
|
+
),
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Full Structure
|
|
393
|
+
* Panel with header, body, and footer
|
|
394
|
+
*/
|
|
395
|
+
export const FullStructure: Story = {
|
|
396
|
+
render: () => (
|
|
397
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto]">
|
|
398
|
+
<main className="p-4">
|
|
399
|
+
<h1 className="text-2xl font-bold mb-4">Full Panel Structure</h1>
|
|
400
|
+
<p className="text-[var(--muted-foreground)]">
|
|
401
|
+
The panel demonstrates header, body, and footer components.
|
|
402
|
+
</p>
|
|
403
|
+
</main>
|
|
404
|
+
<Panel defaultOpen>
|
|
405
|
+
<Panel.Content>
|
|
406
|
+
<Panel.Header>
|
|
407
|
+
<Panel.Title>Complete Panel</Panel.Title>
|
|
408
|
+
<Panel.Description>
|
|
409
|
+
This panel demonstrates all structural components.
|
|
410
|
+
</Panel.Description>
|
|
411
|
+
</Panel.Header>
|
|
412
|
+
<Panel.Body>
|
|
413
|
+
<div className="space-y-4">
|
|
414
|
+
<p>
|
|
415
|
+
The body contains the main content of the panel. It can include
|
|
416
|
+
any elements.
|
|
417
|
+
</p>
|
|
418
|
+
<ul className="list-disc pl-4 space-y-2">
|
|
419
|
+
<li>Lists</li>
|
|
420
|
+
<li>Forms</li>
|
|
421
|
+
<li>Images</li>
|
|
422
|
+
<li>Tables</li>
|
|
423
|
+
</ul>
|
|
424
|
+
</div>
|
|
425
|
+
</Panel.Body>
|
|
426
|
+
<Panel.Footer>
|
|
427
|
+
<Panel.Close>
|
|
428
|
+
<Button variant="outline">Cancel</Button>
|
|
429
|
+
</Panel.Close>
|
|
430
|
+
<Button>Confirm</Button>
|
|
431
|
+
</Panel.Footer>
|
|
432
|
+
</Panel.Content>
|
|
433
|
+
</Panel>
|
|
434
|
+
</div>
|
|
435
|
+
),
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
// ============================================================================
|
|
439
|
+
// Scrollable Content
|
|
440
|
+
// ============================================================================
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Scrollable Content
|
|
444
|
+
* Panel with long scrollable body content
|
|
445
|
+
*/
|
|
446
|
+
export const ScrollableContent: Story = {
|
|
447
|
+
render: () => (
|
|
448
|
+
<div className="grid h-[500px] grid-cols-[1fr_auto]">
|
|
449
|
+
<main className="p-4 overflow-auto">
|
|
450
|
+
<h1 className="text-2xl font-bold mb-4">Scrollable Panel</h1>
|
|
451
|
+
<p className="text-[var(--muted-foreground)]">
|
|
452
|
+
The panel body scrolls when content exceeds available height.
|
|
453
|
+
</p>
|
|
454
|
+
</main>
|
|
455
|
+
<Panel defaultOpen>
|
|
456
|
+
<Panel.Content>
|
|
457
|
+
<Panel.Header>
|
|
458
|
+
<Panel.Title>Scrollable Body</Panel.Title>
|
|
459
|
+
</Panel.Header>
|
|
460
|
+
<Panel.Body>
|
|
461
|
+
<div className="space-y-4">
|
|
462
|
+
{Array.from({ length: 20 }, (_, i) => (
|
|
463
|
+
<div key={i} className="p-4 border rounded">
|
|
464
|
+
<h3 className="font-semibold">Item {i + 1}</h3>
|
|
465
|
+
<p className="text-[var(--muted-foreground)]">
|
|
466
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
467
|
+
</p>
|
|
468
|
+
</div>
|
|
469
|
+
))}
|
|
470
|
+
</div>
|
|
471
|
+
</Panel.Body>
|
|
472
|
+
<Panel.Footer>
|
|
473
|
+
<Button>Done</Button>
|
|
474
|
+
</Panel.Footer>
|
|
475
|
+
</Panel.Content>
|
|
476
|
+
</Panel>
|
|
477
|
+
</div>
|
|
478
|
+
),
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
// ============================================================================
|
|
482
|
+
// Form Content
|
|
483
|
+
// ============================================================================
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Form Content
|
|
487
|
+
* Panel with form elements inside
|
|
488
|
+
*/
|
|
489
|
+
export const FormContent: Story = {
|
|
490
|
+
render: () => (
|
|
491
|
+
<div className="grid min-h-[500px] grid-cols-[1fr_auto]">
|
|
492
|
+
<main className="p-4">
|
|
493
|
+
<h1 className="text-2xl font-bold mb-4">Panel with Form</h1>
|
|
494
|
+
<p className="text-[var(--muted-foreground)]">
|
|
495
|
+
The panel contains a form for editing settings.
|
|
496
|
+
</p>
|
|
497
|
+
</main>
|
|
498
|
+
<Panel defaultOpen>
|
|
499
|
+
<Panel.Content>
|
|
500
|
+
<Panel.Header>
|
|
501
|
+
<Panel.Title>Edit Settings</Panel.Title>
|
|
502
|
+
<Panel.Description>
|
|
503
|
+
Make changes to your settings here.
|
|
504
|
+
</Panel.Description>
|
|
505
|
+
</Panel.Header>
|
|
506
|
+
<Panel.Body>
|
|
507
|
+
<form
|
|
508
|
+
id="settings-form"
|
|
509
|
+
onSubmit={(e) => {
|
|
510
|
+
e.preventDefault();
|
|
511
|
+
alert('Form submitted!');
|
|
512
|
+
}}
|
|
513
|
+
>
|
|
514
|
+
<div className="space-y-4">
|
|
515
|
+
<div>
|
|
516
|
+
<label
|
|
517
|
+
htmlFor="name"
|
|
518
|
+
className="block text-sm font-medium mb-1"
|
|
519
|
+
>
|
|
520
|
+
Name
|
|
521
|
+
</label>
|
|
522
|
+
<input
|
|
523
|
+
id="name"
|
|
524
|
+
type="text"
|
|
525
|
+
className="w-full px-3 py-2 border rounded-md bg-[var(--background)] border-[var(--border)]"
|
|
526
|
+
defaultValue="John Smith"
|
|
527
|
+
/>
|
|
528
|
+
</div>
|
|
529
|
+
<div>
|
|
530
|
+
<label
|
|
531
|
+
htmlFor="email"
|
|
532
|
+
className="block text-sm font-medium mb-1"
|
|
533
|
+
>
|
|
534
|
+
Email
|
|
535
|
+
</label>
|
|
536
|
+
<input
|
|
537
|
+
id="email"
|
|
538
|
+
type="email"
|
|
539
|
+
className="w-full px-3 py-2 border rounded-md bg-[var(--background)] border-[var(--border)]"
|
|
540
|
+
defaultValue="john@example.com"
|
|
541
|
+
/>
|
|
542
|
+
</div>
|
|
543
|
+
<div>
|
|
544
|
+
<label
|
|
545
|
+
htmlFor="role"
|
|
546
|
+
className="block text-sm font-medium mb-1"
|
|
547
|
+
>
|
|
548
|
+
Role
|
|
549
|
+
</label>
|
|
550
|
+
<select
|
|
551
|
+
id="role"
|
|
552
|
+
className="w-full px-3 py-2 border rounded-md bg-[var(--background)] border-[var(--border)]"
|
|
553
|
+
>
|
|
554
|
+
<option>Admin</option>
|
|
555
|
+
<option>User</option>
|
|
556
|
+
<option>Guest</option>
|
|
557
|
+
</select>
|
|
558
|
+
</div>
|
|
559
|
+
</div>
|
|
560
|
+
</form>
|
|
561
|
+
</Panel.Body>
|
|
562
|
+
<Panel.Footer>
|
|
563
|
+
<Panel.Close>
|
|
564
|
+
<Button variant="outline">Cancel</Button>
|
|
565
|
+
</Panel.Close>
|
|
566
|
+
<Button type="submit" form="settings-form">
|
|
567
|
+
Save Changes
|
|
568
|
+
</Button>
|
|
569
|
+
</Panel.Footer>
|
|
570
|
+
</Panel.Content>
|
|
571
|
+
</Panel>
|
|
572
|
+
</div>
|
|
573
|
+
),
|
|
574
|
+
};
|
|
575
|
+
|
|
576
|
+
// ============================================================================
|
|
577
|
+
// Master-Detail Pattern
|
|
578
|
+
// ============================================================================
|
|
579
|
+
|
|
580
|
+
interface Candidate {
|
|
581
|
+
id: string;
|
|
582
|
+
name: string;
|
|
583
|
+
role: string;
|
|
584
|
+
status: string;
|
|
585
|
+
email: string;
|
|
586
|
+
phone: string;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const candidates: Candidate[] = [
|
|
590
|
+
{
|
|
591
|
+
id: '1',
|
|
592
|
+
name: 'John Smith',
|
|
593
|
+
role: 'Software Engineer',
|
|
594
|
+
status: 'Interview',
|
|
595
|
+
email: 'john@example.com',
|
|
596
|
+
phone: '+1 555-0101',
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
id: '2',
|
|
600
|
+
name: 'Jane Doe',
|
|
601
|
+
role: 'Product Manager',
|
|
602
|
+
status: 'Screening',
|
|
603
|
+
email: 'jane@example.com',
|
|
604
|
+
phone: '+1 555-0102',
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
id: '3',
|
|
608
|
+
name: 'Bob Wilson',
|
|
609
|
+
role: 'UX Designer',
|
|
610
|
+
status: 'Offer',
|
|
611
|
+
email: 'bob@example.com',
|
|
612
|
+
phone: '+1 555-0103',
|
|
613
|
+
},
|
|
614
|
+
];
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Candidate Profile (Master-Detail)
|
|
618
|
+
* Real-world example: clicking a candidate shows their profile in panel
|
|
619
|
+
*/
|
|
620
|
+
export const CandidateProfile: Story = {
|
|
621
|
+
render: function CandidateProfilePanel(): ReactElement {
|
|
622
|
+
const [selected, setSelected] = useState<Candidate | null>(null);
|
|
623
|
+
|
|
624
|
+
return (
|
|
625
|
+
<div className="grid min-h-[500px] grid-cols-[1fr_auto]">
|
|
626
|
+
<main className="p-4">
|
|
627
|
+
<h1 className="text-2xl font-bold mb-4">Candidates</h1>
|
|
628
|
+
<p className="text-[var(--muted-foreground)] mb-4">
|
|
629
|
+
Click a candidate to view their profile. The panel opens beside the
|
|
630
|
+
list without covering it.
|
|
631
|
+
</p>
|
|
632
|
+
<div className="space-y-2">
|
|
633
|
+
{candidates.map((candidate) => (
|
|
634
|
+
<div
|
|
635
|
+
key={candidate.id}
|
|
636
|
+
className="p-4 border rounded cursor-pointer hover:bg-[var(--accent)]"
|
|
637
|
+
onClick={() => setSelected(candidate)}
|
|
638
|
+
>
|
|
639
|
+
<div className="font-semibold">{candidate.name}</div>
|
|
640
|
+
<div className="text-sm text-[var(--muted-foreground)]">
|
|
641
|
+
{candidate.role} - {candidate.status}
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
))}
|
|
645
|
+
</div>
|
|
646
|
+
</main>
|
|
647
|
+
<Panel
|
|
648
|
+
isOpen={!!selected}
|
|
649
|
+
onOpenChange={(open) => !open && setSelected(null)}
|
|
650
|
+
>
|
|
651
|
+
<Panel.Content>
|
|
652
|
+
<Panel.Header>
|
|
653
|
+
<Panel.Title>{selected?.name ?? 'Candidate'}</Panel.Title>
|
|
654
|
+
<Panel.Description>{selected?.role}</Panel.Description>
|
|
655
|
+
</Panel.Header>
|
|
656
|
+
<Panel.Body>
|
|
657
|
+
{selected && (
|
|
658
|
+
<div className="space-y-4">
|
|
659
|
+
<div>
|
|
660
|
+
<div className="text-sm font-medium text-[var(--muted-foreground)]">
|
|
661
|
+
Status
|
|
662
|
+
</div>
|
|
663
|
+
<div>{selected.status}</div>
|
|
664
|
+
</div>
|
|
665
|
+
<div>
|
|
666
|
+
<div className="text-sm font-medium text-[var(--muted-foreground)]">
|
|
667
|
+
Email
|
|
668
|
+
</div>
|
|
669
|
+
<div>{selected.email}</div>
|
|
670
|
+
</div>
|
|
671
|
+
<div>
|
|
672
|
+
<div className="text-sm font-medium text-[var(--muted-foreground)]">
|
|
673
|
+
Phone
|
|
674
|
+
</div>
|
|
675
|
+
<div>{selected.phone}</div>
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
)}
|
|
679
|
+
</Panel.Body>
|
|
680
|
+
<Panel.Footer>
|
|
681
|
+
<Panel.Close>
|
|
682
|
+
<Button variant="outline">Close</Button>
|
|
683
|
+
</Panel.Close>
|
|
684
|
+
<Button>Send Email</Button>
|
|
685
|
+
</Panel.Footer>
|
|
686
|
+
</Panel.Content>
|
|
687
|
+
</Panel>
|
|
688
|
+
</div>
|
|
689
|
+
);
|
|
690
|
+
},
|
|
691
|
+
};
|
|
692
|
+
|
|
693
|
+
// ============================================================================
|
|
694
|
+
// Grid Layout
|
|
695
|
+
// ============================================================================
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Grid Layout
|
|
699
|
+
* Panel in CSS Grid layout demonstrating Focus Not Obscured (WCAG 2.4.12)
|
|
700
|
+
*/
|
|
701
|
+
export const GridLayout: Story = {
|
|
702
|
+
render: () => (
|
|
703
|
+
<div className="grid min-h-[400px] grid-cols-[1fr_auto] gap-4 p-4 bg-[var(--background)]">
|
|
704
|
+
<main className="border border-dashed border-[var(--border)] p-4 rounded">
|
|
705
|
+
<h2 className="font-bold mb-2">Main Content Area</h2>
|
|
706
|
+
<p className="text-[var(--muted-foreground)] mb-4">
|
|
707
|
+
The panel is a CSS Grid sibling, not an overlay. Both areas remain
|
|
708
|
+
fully interactive.
|
|
709
|
+
</p>
|
|
710
|
+
<Button variant="outline">Focusable Button</Button>
|
|
711
|
+
</main>
|
|
712
|
+
<Panel defaultOpen>
|
|
713
|
+
<Panel.Content>
|
|
714
|
+
<Panel.Header>
|
|
715
|
+
<Panel.Title>Side Panel</Panel.Title>
|
|
716
|
+
</Panel.Header>
|
|
717
|
+
<Panel.Body>
|
|
718
|
+
<p>
|
|
719
|
+
This panel participates in the grid layout. Main content is never
|
|
720
|
+
obscured.
|
|
721
|
+
</p>
|
|
722
|
+
</Panel.Body>
|
|
723
|
+
</Panel.Content>
|
|
724
|
+
</Panel>
|
|
725
|
+
</div>
|
|
726
|
+
),
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
// ============================================================================
|
|
730
|
+
// All Themes
|
|
731
|
+
// ============================================================================
|
|
732
|
+
|
|
733
|
+
/**
|
|
734
|
+
* All Themes
|
|
735
|
+
* Preview panel in all 4 themes
|
|
736
|
+
*/
|
|
737
|
+
export const AllThemes: Story = {
|
|
738
|
+
parameters: {
|
|
739
|
+
layout: 'padded',
|
|
740
|
+
},
|
|
741
|
+
render: () => (
|
|
742
|
+
<div className="grid grid-cols-2 gap-8">
|
|
743
|
+
{(['light', 'dark', 'highContrast', 'colorblind'] as const).map(
|
|
744
|
+
(theme) => (
|
|
745
|
+
<div
|
|
746
|
+
key={theme}
|
|
747
|
+
data-theme={theme}
|
|
748
|
+
className="p-4 border rounded bg-[var(--background)] text-[var(--foreground)]"
|
|
749
|
+
>
|
|
750
|
+
<h3 className="font-bold mb-2 capitalize">{theme} Theme</h3>
|
|
751
|
+
<div className="grid grid-cols-[1fr_auto] min-h-[200px]">
|
|
752
|
+
<div className="p-2 text-sm">Main content</div>
|
|
753
|
+
<Panel defaultOpen width="sm">
|
|
754
|
+
<Panel.Content>
|
|
755
|
+
<Panel.Header>
|
|
756
|
+
<Panel.Title as="h4">Panel</Panel.Title>
|
|
757
|
+
</Panel.Header>
|
|
758
|
+
<Panel.Body>
|
|
759
|
+
<p className="text-sm">Theme: {theme}</p>
|
|
760
|
+
</Panel.Body>
|
|
761
|
+
</Panel.Content>
|
|
762
|
+
</Panel>
|
|
763
|
+
</div>
|
|
764
|
+
</div>
|
|
765
|
+
)
|
|
766
|
+
)}
|
|
767
|
+
</div>
|
|
768
|
+
),
|
|
769
|
+
};
|