@tribepad/themis 1.0.0 → 1.0.2
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/dist/elements/Accordion/index.js +2 -77
- package/dist/elements/Accordion/index.js.map +1 -1
- package/dist/elements/Accordion/index.mjs +2 -4
- package/dist/elements/Accordion/index.mjs.map +1 -1
- package/dist/elements/AlertDialog/AlertDialog.d.ts +43 -0
- package/dist/elements/AlertDialog/AlertDialog.d.ts.map +1 -0
- package/dist/elements/AlertDialog/AlertDialog.styles.d.ts +15 -0
- package/dist/elements/AlertDialog/AlertDialog.styles.d.ts.map +1 -0
- package/dist/elements/AlertDialog/AlertDialog.types.d.ts +72 -0
- package/dist/elements/AlertDialog/AlertDialog.types.d.ts.map +1 -0
- package/dist/elements/AlertDialog/index.d.ts +25 -0
- package/dist/elements/AlertDialog/index.d.ts.map +1 -0
- package/dist/elements/AlertDialog/index.js +3 -0
- package/dist/elements/AlertDialog/index.js.map +1 -0
- package/dist/elements/AlertDialog/index.mjs +3 -0
- package/dist/elements/AlertDialog/index.mjs.map +1 -0
- package/dist/elements/Avatar/index.js +2 -53
- package/dist/elements/Avatar/index.js.map +1 -1
- package/dist/elements/Avatar/index.mjs +2 -4
- package/dist/elements/Avatar/index.mjs.map +1 -1
- package/dist/elements/Badge/index.js +2 -42
- package/dist/elements/Badge/index.js.map +1 -1
- package/dist/elements/Badge/index.mjs +2 -5
- package/dist/elements/Badge/index.mjs.map +1 -1
- package/dist/elements/Breadcrumbs/index.js +2 -53
- package/dist/elements/Breadcrumbs/index.js.map +1 -1
- package/dist/elements/Breadcrumbs/index.mjs +2 -8
- package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
- package/dist/elements/Button/Button.d.ts +26 -81
- package/dist/elements/Button/Button.d.ts.map +1 -1
- package/dist/elements/Button/Button.styles.d.ts +35 -0
- package/dist/elements/Button/Button.styles.d.ts.map +1 -0
- package/dist/elements/Button/Button.types.d.ts +20 -8
- package/dist/elements/Button/Button.types.d.ts.map +1 -1
- package/dist/elements/Button/index.js +2 -26
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/index.mjs +2 -5
- package/dist/elements/Button/index.mjs.map +1 -1
- package/dist/elements/ButtonGroup/index.js +2 -65
- package/dist/elements/ButtonGroup/index.js.map +1 -1
- package/dist/elements/ButtonGroup/index.mjs +2 -4
- package/dist/elements/ButtonGroup/index.mjs.map +1 -1
- package/dist/elements/Card/Card.d.ts.map +1 -1
- package/dist/elements/Card/index.js +2 -84
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/Card/index.mjs +2 -7
- package/dist/elements/Card/index.mjs.map +1 -1
- package/dist/elements/Carousel/Carousel.d.ts +1 -11
- package/dist/elements/Carousel/Carousel.d.ts.map +1 -1
- package/dist/elements/Carousel/LazyCarousel.d.ts +1 -1
- package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -1
- package/dist/elements/Carousel/index.js +2 -22
- package/dist/elements/Carousel/index.js.map +1 -1
- package/dist/elements/Carousel/index.mjs +2 -9
- package/dist/elements/Carousel/index.mjs.map +1 -1
- package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
- package/dist/elements/Chart/index.js +2 -46
- package/dist/elements/Chart/index.js.map +1 -1
- package/dist/elements/Chart/index.mjs +2 -5
- package/dist/elements/Chart/index.mjs.map +1 -1
- package/dist/elements/Checkbox/index.js +2 -46
- package/dist/elements/Checkbox/index.js.map +1 -1
- package/dist/elements/Checkbox/index.mjs +2 -5
- package/dist/elements/Checkbox/index.mjs.map +1 -1
- package/dist/elements/CheckboxGroup/index.js +2 -70
- package/dist/elements/CheckboxGroup/index.js.map +1 -1
- package/dist/elements/CheckboxGroup/index.mjs +2 -5
- package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
- package/dist/elements/Combobox/Combobox.d.ts +56 -0
- package/dist/elements/Combobox/Combobox.d.ts.map +1 -0
- package/dist/elements/Combobox/Combobox.styles.d.ts +29 -0
- package/dist/elements/Combobox/Combobox.styles.d.ts.map +1 -0
- package/dist/elements/Combobox/Combobox.types.d.ts +67 -0
- package/dist/elements/Combobox/Combobox.types.d.ts.map +1 -0
- package/dist/elements/Combobox/index.d.ts +20 -0
- package/dist/elements/Combobox/index.d.ts.map +1 -0
- package/dist/elements/Combobox/index.js +3 -0
- package/dist/elements/Combobox/index.js.map +1 -0
- package/dist/elements/Combobox/index.mjs +3 -0
- package/dist/elements/Combobox/index.mjs.map +1 -0
- package/dist/elements/DatePicker/DatePicker.d.ts +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/index.js +2 -122
- package/dist/elements/DatePicker/index.js.map +1 -1
- package/dist/elements/DatePicker/index.mjs +2 -5
- package/dist/elements/DatePicker/index.mjs.map +1 -1
- package/dist/elements/Dropdown/Dropdown.d.ts +7 -15
- package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/elements/Dropdown/Dropdown.styles.d.ts +22 -0
- package/dist/elements/Dropdown/Dropdown.styles.d.ts.map +1 -0
- package/dist/elements/Dropdown/index.d.ts +1 -0
- package/dist/elements/Dropdown/index.d.ts.map +1 -1
- package/dist/elements/Dropdown/index.js +2 -40
- package/dist/elements/Dropdown/index.js.map +1 -1
- package/dist/elements/Dropdown/index.mjs +2 -3
- package/dist/elements/Dropdown/index.mjs.map +1 -1
- package/dist/elements/FileField/index.js +2 -137
- package/dist/elements/FileField/index.js.map +1 -1
- package/dist/elements/FileField/index.mjs +2 -8
- package/dist/elements/FileField/index.mjs.map +1 -1
- package/dist/elements/FormLayout/index.js +2 -16
- package/dist/elements/FormLayout/index.js.map +1 -1
- package/dist/elements/FormLayout/index.mjs +2 -3
- package/dist/elements/FormLayout/index.mjs.map +1 -1
- package/dist/elements/Modal/Modal.d.ts +9 -14
- package/dist/elements/Modal/Modal.d.ts.map +1 -1
- package/dist/elements/Modal/Modal.styles.d.ts +29 -0
- package/dist/elements/Modal/Modal.styles.d.ts.map +1 -0
- package/dist/elements/Modal/index.d.ts +1 -0
- package/dist/elements/Modal/index.d.ts.map +1 -1
- package/dist/elements/Modal/index.js +2 -51
- package/dist/elements/Modal/index.js.map +1 -1
- package/dist/elements/Modal/index.mjs +2 -2
- package/dist/elements/Modal/index.mjs.map +1 -1
- package/dist/elements/NumberField/index.js +2 -56
- package/dist/elements/NumberField/index.js.map +1 -1
- package/dist/elements/NumberField/index.mjs +2 -7
- package/dist/elements/NumberField/index.mjs.map +1 -1
- package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -1
- package/dist/elements/OTPInput/index.js +2 -12
- package/dist/elements/OTPInput/index.js.map +1 -1
- package/dist/elements/OTPInput/index.mjs +2 -3
- package/dist/elements/OTPInput/index.mjs.map +1 -1
- package/dist/elements/Pagination/Pagination.d.ts +45 -0
- package/dist/elements/Pagination/Pagination.d.ts.map +1 -0
- package/dist/elements/Pagination/Pagination.styles.d.ts +10 -0
- package/dist/elements/Pagination/Pagination.styles.d.ts.map +1 -0
- package/dist/elements/Pagination/Pagination.types.d.ts +55 -0
- package/dist/elements/Pagination/Pagination.types.d.ts.map +1 -0
- package/dist/elements/Pagination/index.d.ts +21 -0
- package/dist/elements/Pagination/index.d.ts.map +1 -0
- package/dist/elements/Pagination/index.js +3 -0
- package/dist/elements/Pagination/index.js.map +1 -0
- package/dist/elements/Pagination/index.mjs +3 -0
- package/dist/elements/Pagination/index.mjs.map +1 -0
- package/dist/elements/Panel/index.js +2 -32
- package/dist/elements/Panel/index.js.map +1 -1
- package/dist/elements/Panel/index.mjs +2 -3
- package/dist/elements/Panel/index.mjs.map +1 -1
- package/dist/elements/PasswordField/PasswordField.d.ts +27 -0
- package/dist/elements/PasswordField/PasswordField.d.ts.map +1 -0
- package/dist/elements/PasswordField/PasswordField.styles.d.ts +32 -0
- package/dist/elements/PasswordField/PasswordField.styles.d.ts.map +1 -0
- package/dist/elements/PasswordField/PasswordField.types.d.ts +100 -0
- package/dist/elements/PasswordField/PasswordField.types.d.ts.map +1 -0
- package/dist/elements/PasswordField/index.css +2 -0
- package/dist/elements/PasswordField/index.css.map +1 -0
- package/dist/elements/PasswordField/index.d.ts +20 -0
- package/dist/elements/PasswordField/index.d.ts.map +1 -0
- package/dist/elements/PasswordField/index.js +3 -0
- package/dist/elements/PasswordField/index.js.map +1 -0
- package/dist/elements/PasswordField/index.mjs +3 -0
- package/dist/elements/PasswordField/index.mjs.map +1 -0
- package/dist/elements/Progress/index.js +2 -29
- package/dist/elements/Progress/index.js.map +1 -1
- package/dist/elements/Progress/index.mjs +2 -4
- package/dist/elements/Progress/index.mjs.map +1 -1
- package/dist/elements/RadioGroup/index.js +2 -46
- package/dist/elements/RadioGroup/index.js.map +1 -1
- package/dist/elements/RadioGroup/index.mjs +2 -5
- package/dist/elements/RadioGroup/index.mjs.map +1 -1
- package/dist/elements/Resizable/components/ResizableHandle.d.ts +0 -8
- package/dist/elements/Resizable/components/ResizableHandle.d.ts.map +1 -1
- package/dist/elements/Resizable/components/ResizablePanel.d.ts +0 -8
- package/dist/elements/Resizable/components/ResizablePanel.d.ts.map +1 -1
- package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts +0 -8
- package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts.map +1 -1
- package/dist/elements/Resizable/components/ResizablePopover.d.ts +0 -8
- package/dist/elements/Resizable/components/ResizablePopover.d.ts.map +1 -1
- package/dist/elements/Resizable/index.js +2 -64
- package/dist/elements/Resizable/index.js.map +1 -1
- package/dist/elements/Resizable/index.mjs +2 -7
- package/dist/elements/Resizable/index.mjs.map +1 -1
- package/dist/elements/SearchField/SearchField.d.ts +27 -0
- package/dist/elements/SearchField/SearchField.d.ts.map +1 -0
- package/dist/elements/SearchField/SearchField.styles.d.ts +32 -0
- package/dist/elements/SearchField/SearchField.styles.d.ts.map +1 -0
- package/dist/elements/SearchField/SearchField.types.d.ts +45 -0
- package/dist/elements/SearchField/SearchField.types.d.ts.map +1 -0
- package/dist/elements/SearchField/index.css +2 -0
- package/dist/elements/SearchField/index.css.map +1 -0
- package/dist/elements/SearchField/index.d.ts +21 -0
- package/dist/elements/SearchField/index.d.ts.map +1 -0
- package/dist/elements/SearchField/index.js +3 -0
- package/dist/elements/SearchField/index.js.map +1 -0
- package/dist/elements/SearchField/index.mjs +3 -0
- package/dist/elements/SearchField/index.mjs.map +1 -0
- package/dist/elements/Select/Select.d.ts +19 -48
- package/dist/elements/Select/Select.d.ts.map +1 -1
- package/dist/elements/Select/Select.styles.d.ts +55 -0
- package/dist/elements/Select/Select.styles.d.ts.map +1 -0
- package/dist/elements/Select/index.js +2 -32
- package/dist/elements/Select/index.js.map +1 -1
- package/dist/elements/Select/index.mjs +2 -3
- package/dist/elements/Select/index.mjs.map +1 -1
- package/dist/elements/Skeleton/index.js +2 -21
- package/dist/elements/Skeleton/index.js.map +1 -1
- package/dist/elements/Skeleton/index.mjs +2 -4
- package/dist/elements/Skeleton/index.mjs.map +1 -1
- package/dist/elements/Switch/index.js +2 -48
- package/dist/elements/Switch/index.js.map +1 -1
- package/dist/elements/Switch/index.mjs +2 -30
- package/dist/elements/Switch/index.mjs.map +1 -1
- package/dist/elements/Table/Table.d.ts +3 -24
- package/dist/elements/Table/Table.d.ts.map +1 -1
- package/dist/elements/Table/Table.styles.d.ts +24 -0
- package/dist/elements/Table/Table.styles.d.ts.map +1 -0
- package/dist/elements/Table/index.js +2 -75
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Table/index.mjs +2 -6
- package/dist/elements/Table/index.mjs.map +1 -1
- package/dist/elements/Tabs/index.js +2 -73
- package/dist/elements/Tabs/index.js.map +1 -1
- package/dist/elements/Tabs/index.mjs +2 -4
- package/dist/elements/Tabs/index.mjs.map +1 -1
- package/dist/elements/TextField/TextField.d.ts +6 -42
- package/dist/elements/TextField/TextField.d.ts.map +1 -1
- package/dist/elements/TextField/TextField.hooks.d.ts +63 -0
- package/dist/elements/TextField/TextField.hooks.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.icons.d.ts +19 -0
- package/dist/elements/TextField/TextField.icons.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.styles.d.ts +37 -0
- package/dist/elements/TextField/TextField.styles.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.types.d.ts +3 -0
- package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
- package/dist/elements/TextField/index.css +1 -22
- package/dist/elements/TextField/index.css.map +1 -1
- package/dist/elements/TextField/index.js +2 -259
- package/dist/elements/TextField/index.js.map +1 -1
- package/dist/elements/TextField/index.mjs +2 -206
- package/dist/elements/TextField/index.mjs.map +1 -1
- package/dist/elements/TimeField/index.js +2 -44
- package/dist/elements/TimeField/index.js.map +1 -1
- package/dist/elements/TimeField/index.mjs +2 -3
- package/dist/elements/TimeField/index.mjs.map +1 -1
- package/dist/elements/Toast/Toast.d.ts +0 -22
- package/dist/elements/Toast/Toast.d.ts.map +1 -1
- package/dist/elements/Toast/index.js +2 -59
- package/dist/elements/Toast/index.js.map +1 -1
- package/dist/elements/Toast/index.mjs +2 -6
- package/dist/elements/Toast/index.mjs.map +1 -1
- package/dist/elements/Tooltip/index.js +2 -58
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Tooltip/index.mjs +2 -5
- package/dist/elements/Tooltip/index.mjs.map +1 -1
- package/dist/elements/index.css +1 -22
- package/dist/elements/index.css.map +1 -1
- package/dist/elements/index.d.ts +13 -1
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +2 -838
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/index.mjs +2 -41
- package/dist/elements/index.mjs.map +1 -1
- package/dist/index.css +1 -22
- package/dist/index.css.map +1 -1
- package/dist/index.js +3 -864
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -43
- package/dist/index.mjs.map +1 -1
- package/dist/schemas/index.js +2 -28
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/index.mjs +2 -3
- package/dist/schemas/index.mjs.map +1 -1
- package/dist/styles/defaults.css +151 -0
- package/dist/styles/index.js +1 -152
- package/dist/styles/index.js.map +1 -1
- package/dist/styles/index.mjs +1 -3
- package/dist/styles/index.mjs.map +1 -1
- package/dist/utils/index.js +1 -12
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -3
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +9 -7
- package/src/elements/Accordion/Accordion.stories.tsx +1 -1
- package/src/elements/AlertDialog/AlertDialog.stories.tsx +124 -0
- package/src/elements/Avatar/Avatar.stories.tsx +1 -1
- package/src/elements/Badge/Badge.stories.tsx +1 -1
- package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +1 -1
- package/src/elements/Button/Button.stories.tsx +1 -1
- package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +1 -1
- package/src/elements/Card/Card.stories.tsx +1 -1
- package/src/elements/Carousel/Carousel.stories.tsx +1 -1
- package/src/elements/Chart/Chart.stories.tsx +1 -1
- package/src/elements/Checkbox/Checkbox.stories.tsx +1 -1
- package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1 -1
- package/src/elements/Combobox/Combobox.stories.tsx +133 -0
- package/src/elements/DatePicker/DatePicker.stories.tsx +1 -1
- package/src/elements/Dropdown/Dropdown.stories.tsx +1 -1
- package/src/elements/FileField/FileField.stories.tsx +1 -1
- package/src/elements/FileField/FileProgress.stories.tsx +1 -1
- package/src/elements/FormLayout/FormLayout.stories.tsx +1 -1
- package/src/elements/Modal/Modal.stories.tsx +1 -1
- package/src/elements/NumberField/NumberField.stories.tsx +1 -1
- package/src/elements/OTPInput/OTPInput.stories.tsx +1 -1
- package/src/elements/Pagination/Pagination.stories.tsx +203 -0
- package/src/elements/Panel/Panel.stories.tsx +1 -1
- package/src/elements/PasswordField/PasswordField.stories.tsx +167 -0
- package/src/elements/Progress/Progress.stories.tsx +1 -1
- package/src/elements/RadioGroup/RadioGroup.stories.tsx +1 -1
- package/src/elements/Resizable/Resizable.stories.tsx +1 -1
- package/src/elements/SearchField/SearchField.stories.tsx +146 -0
- package/src/elements/Select/Select.stories.tsx +1 -1
- package/src/elements/Skeleton/Skeleton.stories.tsx +1 -1
- package/src/elements/Switch/Switch.stories.tsx +1 -1
- package/src/elements/Table/Table.stories.tsx +1 -1
- package/src/elements/Tabs/Tabs.stories.tsx +1 -1
- package/src/elements/TextField/TextField.stories.tsx +1 -1
- package/src/elements/TimeField/TimeField.stories.tsx +1 -1
- package/src/elements/Toast/Toast.stories.tsx +1 -1
- package/src/elements/Tooltip/Tooltip.stories.tsx +1 -1
- package/dist/Carousel-NTZX5TOW.js +0 -16
- package/dist/Carousel-NTZX5TOW.js.map +0 -1
- package/dist/Carousel-YH3DOQJU.mjs +0 -7
- package/dist/Carousel-YH3DOQJU.mjs.map +0 -1
- package/dist/chunk-2HIUTHMU.mjs +0 -234
- package/dist/chunk-2HIUTHMU.mjs.map +0 -1
- package/dist/chunk-34GTFTDO.js +0 -431
- package/dist/chunk-34GTFTDO.js.map +0 -1
- package/dist/chunk-3H7ASYR7.js +0 -250
- package/dist/chunk-3H7ASYR7.js.map +0 -1
- package/dist/chunk-3IEN7JOP.js +0 -316
- package/dist/chunk-3IEN7JOP.js.map +0 -1
- package/dist/chunk-3JHN4GAL.js +0 -326
- package/dist/chunk-3JHN4GAL.js.map +0 -1
- package/dist/chunk-3MJPASQU.js +0 -232
- package/dist/chunk-3MJPASQU.js.map +0 -1
- package/dist/chunk-3XD2JUL3.js +0 -572
- package/dist/chunk-3XD2JUL3.js.map +0 -1
- package/dist/chunk-3YOY2VJ6.js +0 -189
- package/dist/chunk-3YOY2VJ6.js.map +0 -1
- package/dist/chunk-4DU5JSXB.js +0 -408
- package/dist/chunk-4DU5JSXB.js.map +0 -1
- package/dist/chunk-4E4E2GSS.js +0 -352
- package/dist/chunk-4E4E2GSS.js.map +0 -1
- package/dist/chunk-4NHAP4AN.mjs +0 -3
- package/dist/chunk-4NHAP4AN.mjs.map +0 -1
- package/dist/chunk-4S33J5NY.mjs +0 -415
- package/dist/chunk-4S33J5NY.mjs.map +0 -1
- package/dist/chunk-5SMGRT3G.mjs +0 -354
- package/dist/chunk-5SMGRT3G.mjs.map +0 -1
- package/dist/chunk-5SVLJN2C.mjs +0 -22
- package/dist/chunk-5SVLJN2C.mjs.map +0 -1
- package/dist/chunk-66WTU4EB.mjs +0 -299
- package/dist/chunk-66WTU4EB.mjs.map +0 -1
- package/dist/chunk-6S25NMOT.mjs +0 -335
- package/dist/chunk-6S25NMOT.mjs.map +0 -1
- package/dist/chunk-6SP7UB3D.js +0 -4
- package/dist/chunk-6SP7UB3D.js.map +0 -1
- package/dist/chunk-6TYWWQHM.mjs +0 -565
- package/dist/chunk-6TYWWQHM.mjs.map +0 -1
- package/dist/chunk-A3YUJA6W.mjs +0 -384
- package/dist/chunk-A3YUJA6W.mjs.map +0 -1
- package/dist/chunk-A6KEDVUR.js +0 -61
- package/dist/chunk-A6KEDVUR.js.map +0 -1
- package/dist/chunk-A77RUEWL.js +0 -730
- package/dist/chunk-A77RUEWL.js.map +0 -1
- package/dist/chunk-AA4IKMPE.mjs +0 -3
- package/dist/chunk-AA4IKMPE.mjs.map +0 -1
- package/dist/chunk-AKIA6GW6.mjs +0 -163
- package/dist/chunk-AKIA6GW6.mjs.map +0 -1
- package/dist/chunk-AL6P275L.mjs +0 -435
- package/dist/chunk-AL6P275L.mjs.map +0 -1
- package/dist/chunk-AZ3RJYTB.js +0 -37
- package/dist/chunk-AZ3RJYTB.js.map +0 -1
- package/dist/chunk-B5Q4UPL6.js +0 -32
- package/dist/chunk-B5Q4UPL6.js.map +0 -1
- package/dist/chunk-B6DHPMDP.mjs +0 -335
- package/dist/chunk-B6DHPMDP.mjs.map +0 -1
- package/dist/chunk-BDXKKMBZ.mjs +0 -184
- package/dist/chunk-BDXKKMBZ.mjs.map +0 -1
- package/dist/chunk-BL6E2DLZ.mjs +0 -52
- package/dist/chunk-BL6E2DLZ.mjs.map +0 -1
- package/dist/chunk-CGFDS4XS.mjs +0 -121
- package/dist/chunk-CGFDS4XS.mjs.map +0 -1
- package/dist/chunk-CJIW5TKI.js +0 -139
- package/dist/chunk-CJIW5TKI.js.map +0 -1
- package/dist/chunk-CKNISJOQ.js +0 -314
- package/dist/chunk-CKNISJOQ.js.map +0 -1
- package/dist/chunk-D6CBOECS.mjs +0 -1757
- package/dist/chunk-D6CBOECS.mjs.map +0 -1
- package/dist/chunk-DDWEVC2S.js +0 -166
- package/dist/chunk-DDWEVC2S.js.map +0 -1
- package/dist/chunk-DZ556D2F.mjs +0 -176
- package/dist/chunk-DZ556D2F.mjs.map +0 -1
- package/dist/chunk-E2KQFV3O.mjs +0 -10
- package/dist/chunk-E2KQFV3O.mjs.map +0 -1
- package/dist/chunk-EMMLADSC.js +0 -126
- package/dist/chunk-EMMLADSC.js.map +0 -1
- package/dist/chunk-EP4WOI5D.mjs +0 -926
- package/dist/chunk-EP4WOI5D.mjs.map +0 -1
- package/dist/chunk-FJRXLJC2.mjs +0 -160
- package/dist/chunk-FJRXLJC2.mjs.map +0 -1
- package/dist/chunk-FKQI434R.js +0 -345
- package/dist/chunk-FKQI434R.js.map +0 -1
- package/dist/chunk-FPKEAJRZ.mjs +0 -100
- package/dist/chunk-FPKEAJRZ.mjs.map +0 -1
- package/dist/chunk-FWQYB22U.js +0 -183
- package/dist/chunk-FWQYB22U.js.map +0 -1
- package/dist/chunk-GD5GHTMA.js +0 -189
- package/dist/chunk-GD5GHTMA.js.map +0 -1
- package/dist/chunk-GE5XTSDZ.js +0 -447
- package/dist/chunk-GE5XTSDZ.js.map +0 -1
- package/dist/chunk-GVE47ZAX.mjs +0 -32
- package/dist/chunk-GVE47ZAX.mjs.map +0 -1
- package/dist/chunk-HK46BT5U.mjs +0 -18
- package/dist/chunk-HK46BT5U.mjs.map +0 -1
- package/dist/chunk-HQVRMR6N.js +0 -365
- package/dist/chunk-HQVRMR6N.js.map +0 -1
- package/dist/chunk-HSGBJPJO.mjs +0 -398
- package/dist/chunk-HSGBJPJO.mjs.map +0 -1
- package/dist/chunk-I3AUTOMZ.mjs +0 -125
- package/dist/chunk-I3AUTOMZ.mjs.map +0 -1
- package/dist/chunk-IEI5LD5C.mjs +0 -1161
- package/dist/chunk-IEI5LD5C.mjs.map +0 -1
- package/dist/chunk-IIPTC2X7.mjs +0 -118
- package/dist/chunk-IIPTC2X7.mjs.map +0 -1
- package/dist/chunk-J7TLHF2Q.js +0 -4
- package/dist/chunk-J7TLHF2Q.js.map +0 -1
- package/dist/chunk-JJOWXFXQ.mjs +0 -765
- package/dist/chunk-JJOWXFXQ.mjs.map +0 -1
- package/dist/chunk-JPTSS2OA.mjs +0 -3
- package/dist/chunk-JPTSS2OA.mjs.map +0 -1
- package/dist/chunk-KFXXRLTP.js +0 -396
- package/dist/chunk-KFXXRLTP.js.map +0 -1
- package/dist/chunk-KPRRBSG6.mjs +0 -272
- package/dist/chunk-KPRRBSG6.mjs.map +0 -1
- package/dist/chunk-NFSBGRDB.mjs +0 -57
- package/dist/chunk-NFSBGRDB.mjs.map +0 -1
- package/dist/chunk-NGJVCFTM.js +0 -219
- package/dist/chunk-NGJVCFTM.js.map +0 -1
- package/dist/chunk-NSQ6MZJ6.mjs +0 -728
- package/dist/chunk-NSQ6MZJ6.mjs.map +0 -1
- package/dist/chunk-NYQYHT76.mjs +0 -296
- package/dist/chunk-NYQYHT76.mjs.map +0 -1
- package/dist/chunk-OLJJGI5B.js +0 -1193
- package/dist/chunk-OLJJGI5B.js.map +0 -1
- package/dist/chunk-Q3572X2J.js +0 -292
- package/dist/chunk-Q3572X2J.js.map +0 -1
- package/dist/chunk-QH7N7D4I.mjs +0 -210
- package/dist/chunk-QH7N7D4I.mjs.map +0 -1
- package/dist/chunk-R7XUIV25.js +0 -466
- package/dist/chunk-R7XUIV25.js.map +0 -1
- package/dist/chunk-RFFO4KPM.js +0 -135
- package/dist/chunk-RFFO4KPM.js.map +0 -1
- package/dist/chunk-RFX7QKA7.mjs +0 -180
- package/dist/chunk-RFX7QKA7.mjs.map +0 -1
- package/dist/chunk-SN5LFAP3.js +0 -940
- package/dist/chunk-SN5LFAP3.js.map +0 -1
- package/dist/chunk-T4COXKQ3.js +0 -24
- package/dist/chunk-T4COXKQ3.js.map +0 -1
- package/dist/chunk-TS54QM27.js +0 -125
- package/dist/chunk-TS54QM27.js.map +0 -1
- package/dist/chunk-UE2S4PCX.mjs +0 -220
- package/dist/chunk-UE2S4PCX.mjs.map +0 -1
- package/dist/chunk-UTW3QX2A.mjs +0 -282
- package/dist/chunk-UTW3QX2A.mjs.map +0 -1
- package/dist/chunk-V74LGMAE.js +0 -1767
- package/dist/chunk-V74LGMAE.js.map +0 -1
- package/dist/chunk-VIREG536.js +0 -12
- package/dist/chunk-VIREG536.js.map +0 -1
- package/dist/chunk-VY7M7346.js +0 -4
- package/dist/chunk-VY7M7346.js.map +0 -1
- package/dist/chunk-W3TJOO7H.mjs +0 -319
- package/dist/chunk-W3TJOO7H.mjs.map +0 -1
- package/dist/chunk-WIUOB36M.js +0 -54
- package/dist/chunk-WIUOB36M.js.map +0 -1
- package/dist/chunk-WJGLM4CY.js +0 -291
- package/dist/chunk-WJGLM4CY.js.map +0 -1
- package/dist/chunk-WNURH5OO.mjs +0 -453
- package/dist/chunk-WNURH5OO.mjs.map +0 -1
- package/dist/chunk-X25TNRSD.mjs +0 -364
- package/dist/chunk-X25TNRSD.mjs.map +0 -1
- package/dist/chunk-Y3GT7ETK.js +0 -108
- package/dist/chunk-Y3GT7ETK.js.map +0 -1
- package/dist/chunk-Z4FRNOF6.mjs +0 -115
- package/dist/chunk-Z4FRNOF6.mjs.map +0 -1
- package/dist/chunk-ZMYLD3BN.js +0 -166
- package/dist/chunk-ZMYLD3BN.js.map +0 -1
- package/dist/chunk-ZP2KV6EX.js +0 -815
- package/dist/chunk-ZP2KV6EX.js.map +0 -1
- package/dist/chunk-ZVKXFELU.js +0 -366
- package/dist/chunk-ZVKXFELU.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/cn.ts","../../../src/styles/interaction-states.ts","../../../src/elements/Checkbox/Checkbox.tsx","../../../src/schemas/BaseComponentProps.ts","../../../src/elements/Checkbox/Checkbox.types.ts"],"names":["cn","inputs","twMerge","clsx","FOCUS_STYLES","HIGH_CONTRAST_FOCUS","checkboxContainerVariants","cva","checkboxIndicatorVariants","checkmarkVariants","CheckmarkIcon","className","props","jsx","MinusIcon","Checkbox","forwardRef","isSelected","defaultSelected","isDisabled","isReadOnly","isIndeterminate","isInvalid","isRequired","onChange","onFocusChange","value","name","size","variant","label","description","selectedIcon","id","ariaLabel","ariaLabelledby","ariaDescribedby","dataTestId","slot","ref","computedIsDisabled","computedIsReadOnly","computedIsIndeterminate","renderIcon","isChecked","isIndet","iconClassName","dataSelected","dataIndeterminate","isValidElement","iconElement","cloneElement","AriaCheckbox","renderProps","jsxs","Fragment","BaseComponentPropsSchema","z","CheckboxSizeSchema","CheckboxVariantSchema","CheckboxPropsSchema"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n","\"use client\";\n\n/**\n * Checkbox Component\n * Standalone accessible checkbox with React Aria primitives and CVA styling\n *\n * Key Features:\n * - Standalone checkbox (not requiring CheckboxGroup)\n * - 44px+ touch targets (WCAG 2.2 AAA)\n * - 2 variants: default, destructive\n * - 3 sizes: sm, default, lg\n * - Indeterminate state support\n * - Spring animation for checkmark\n * - RTL support\n * - Works with React Aria slot system (for Table integration)\n *\n * @see React Aria Checkbox: https://react-spectrum.adobe.com/react-aria/Checkbox.html\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport {\n forwardRef,\n cloneElement,\n isValidElement,\n type ReactNode,\n type ReactElement,\n} from 'react';\nimport { Checkbox as AriaCheckbox } from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { FOCUS_STYLES, HIGH_CONTRAST_FOCUS } from '../../styles/interaction-states';\nimport type { CheckboxProps } from './Checkbox.types';\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * Checkbox container variants\n * Controls the overall checkbox layout with touch target\n */\nconst checkboxContainerVariants = cva(\n [\n \"group inline-flex items-center gap-2 cursor-pointer\",\n \"transition-colors duration-200\",\n \"rtl:flex-row-reverse\",\n FOCUS_STYLES,\n HIGH_CONTRAST_FOCUS,\n ].join(\" \"),\n {\n variants: {\n size: {\n sm: \"min-h-[44px] text-sm\",\n default: \"min-h-[44px] text-sm\",\n lg: \"min-h-[48px] text-base\",\n },\n isDisabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isDisabled: false,\n },\n }\n);\n\n/**\n * Checkbox indicator (the box) variants\n */\nconst checkboxIndicatorVariants = cva(\n \"flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200\",\n {\n variants: {\n variant: {\n default: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--primary)]\",\n \"data-[selected]:bg-[var(--primary)]\",\n \"data-[indeterminate]:border-[var(--primary)]\",\n \"data-[indeterminate]:bg-[var(--primary)]\",\n ].join(\" \"),\n destructive: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--destructive)]\",\n \"data-[selected]:bg-[var(--destructive)]\",\n \"data-[indeterminate]:border-[var(--destructive)]\",\n \"data-[indeterminate]:bg-[var(--destructive)]\",\n ].join(\" \"),\n },\n size: {\n sm: \"h-4 w-4\",\n default: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n },\n isInvalid: {\n true: \"border-[var(--destructive)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n isInvalid: false,\n },\n }\n);\n\n/**\n * Checkmark icon variants with spring animation\n */\nconst checkmarkVariants = cva(\n [\n \"transition-transform duration-200\",\n \"[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]\",\n \"motion-reduce:transition-none\",\n \"scale-0 data-[selected]:scale-100 data-[indeterminate]:scale-100\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: \"text-[var(--primary-foreground)]\",\n destructive: \"text-[var(--destructive-foreground)]\",\n },\n size: {\n sm: \"h-3 w-3\",\n default: \"h-3.5 w-3.5\",\n lg: \"h-4 w-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\n/**\n * Checkmark SVG icon\n */\nfunction CheckmarkIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean; 'data-indeterminate'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n/**\n * Minus (indeterminate) SVG icon\n */\nfunction MinusIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean; 'data-indeterminate'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n}\n\n// ============================================================================\n// Checkbox Component\n// ============================================================================\n\n/**\n * Standalone Checkbox component\n * Accessible checkbox that can be used independently or within Table\n */\nconst Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n (\n {\n isSelected,\n defaultSelected,\n isDisabled,\n isReadOnly,\n isIndeterminate,\n isInvalid = false,\n isRequired = false,\n onChange,\n onFocusChange,\n value,\n name,\n size = 'default',\n variant = 'default',\n label,\n description,\n selectedIcon,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'data-testid': dataTestId,\n slot,\n },\n ref\n ) => {\n // Only set these props when explicitly true to allow slot system to control them\n // (e.g., Table's selection slot injects isIndeterminate for partial selection)\n const computedIsDisabled = isDisabled || undefined;\n const computedIsReadOnly = isReadOnly || undefined;\n const computedIsIndeterminate = isIndeterminate || undefined;\n // Render the icon based on state\n const renderIcon = (isChecked: boolean, isIndet: boolean) => {\n const iconClassName = cn(checkmarkVariants({ variant, size }));\n const dataSelected = isChecked || undefined;\n const dataIndeterminate = isIndet || undefined;\n\n // For indeterminate state, always show minus\n if (isIndet) {\n return (\n <MinusIcon\n className={iconClassName}\n data-selected={dataSelected}\n data-indeterminate={dataIndeterminate}\n />\n );\n }\n\n // Custom icon support\n if (selectedIcon && isChecked) {\n if (isValidElement(selectedIcon)) {\n const iconElement = selectedIcon as ReactElement<{ className?: string; 'data-selected'?: boolean }>;\n return cloneElement(iconElement, {\n className: cn(iconClassName, iconElement.props.className),\n 'data-selected': dataSelected,\n });\n }\n return <span className={iconClassName} data-selected={dataSelected}>{selectedIcon}</span>;\n }\n\n // Default checkmark\n return (\n <CheckmarkIcon\n className={iconClassName}\n data-selected={dataSelected}\n data-indeterminate={dataIndeterminate}\n />\n );\n };\n\n return (\n <AriaCheckbox\n ref={ref}\n id={id}\n isSelected={isSelected}\n defaultSelected={defaultSelected}\n isDisabled={computedIsDisabled}\n isReadOnly={computedIsReadOnly}\n isIndeterminate={computedIsIndeterminate}\n isInvalid={isInvalid}\n isRequired={isRequired}\n onChange={onChange}\n onFocusChange={onFocusChange}\n value={value}\n name={name}\n slot={slot}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-describedby={ariaDescribedby}\n data-testid={dataTestId}\n className={(renderProps) =>\n cn(\n checkboxContainerVariants({\n size,\n isDisabled: renderProps.isDisabled,\n }),\n className\n )\n }\n >\n {(renderProps) => (\n <>\n {/* Checkbox indicator (the box) */}\n <div\n className={checkboxIndicatorVariants({\n variant,\n size,\n isInvalid: renderProps.isInvalid,\n })}\n data-selected={renderProps.isSelected || undefined}\n data-indeterminate={renderProps.isIndeterminate || undefined}\n >\n {renderIcon(renderProps.isSelected, renderProps.isIndeterminate)}\n </div>\n\n {/* Label and description */}\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className=\"font-medium text-[var(--content-foreground)]\">\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-sm text-[var(--menu-muted)]\">\n {description}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaCheckbox>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n Checkbox,\n checkboxContainerVariants,\n checkboxIndicatorVariants,\n checkmarkVariants,\n CheckmarkIcon,\n MinusIcon,\n};\n","import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","/**\n * Checkbox Component Types\n * Standalone accessible checkbox with Zod schema validation\n *\n * @see React Aria Checkbox: https://react-spectrum.adobe.com/react-aria/Checkbox.html\n * @see constitution.md Principle II (Type Safety - Zod schema validation)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { CheckboxProps as AriaCheckboxProps } from 'react-aria-components';\n\n/**\n * Checkbox size schema\n * All sizes maintain 44px minimum height for WCAG 2.2 AAA compliance\n */\nexport const CheckboxSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type CheckboxSize = z.infer<typeof CheckboxSizeSchema>;\n\n/**\n * Checkbox variant schema\n * 2 variants: default and destructive\n */\nexport const CheckboxVariantSchema = z.enum(['default', 'destructive']);\nexport type CheckboxVariant = z.infer<typeof CheckboxVariantSchema>;\n\n/**\n * Checkbox props schema extending BaseComponentProps\n *\n * Note: We use .optional() without .default() to allow the component to handle defaults.\n * This ensures compatibility with React Aria's type system and allows partial props.\n *\n * @see React Aria Checkbox: https://react-spectrum.adobe.com/react-aria/Checkbox.html\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const CheckboxPropsSchema = BaseComponentPropsSchema.extend({\n // State management (controlled/uncontrolled)\n isSelected: z.boolean().optional(),\n defaultSelected: z.boolean().optional(),\n onChange: z.custom<(isSelected: boolean) => void>().optional(),\n\n // Variants (matching Switch/Button pattern)\n variant: CheckboxVariantSchema.optional(),\n size: CheckboxSizeSchema.optional(),\n\n // States\n isDisabled: z.boolean().optional(),\n isReadOnly: z.boolean().optional(),\n isIndeterminate: z.boolean().optional(),\n isInvalid: z.boolean().optional(),\n isRequired: z.boolean().optional(),\n\n // Labels (optional built-in labeling)\n label: z.string().optional(),\n description: z.string().optional(),\n\n // Form integration\n value: z.string().optional(),\n name: z.string().optional(),\n\n // Custom icon\n selectedIcon: z.any().optional(), // ReactNode\n\n // React Aria slot integration (e.g., for Table)\n slot: z.string().optional(),\n\n // React Aria CheckboxProps integration\n onFocus: z.custom<() => void>().optional(),\n onBlur: z.custom<() => void>().optional(),\n onFocusChange: z.custom<(isFocused: boolean) => void>().optional(),\n autoFocus: z.boolean().optional(),\n});\n\nexport type CheckboxProps = z.infer<typeof CheckboxPropsSchema> &\n Omit<AriaCheckboxProps, keyof z.infer<typeof CheckboxPropsSchema>>;\n"]}
|
|
@@ -1,71 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var chunk34GTFTDO_js = require('../../chunk-34GTFTDO.js');
|
|
4
|
-
require('../../chunk-B5Q4UPL6.js');
|
|
5
|
-
require('../../chunk-VIREG536.js');
|
|
6
|
-
require('../../chunk-T4COXKQ3.js');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, "Checkbox", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () { return chunk34GTFTDO_js.Checkbox; }
|
|
13
|
-
});
|
|
14
|
-
Object.defineProperty(exports, "CheckboxDescriptionPropsSchema", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: function () { return chunk34GTFTDO_js.CheckboxDescriptionPropsSchema; }
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "CheckboxGroup", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () { return chunk34GTFTDO_js.CheckboxGroup; }
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(exports, "CheckboxGroupOrientationSchema", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
get: function () { return chunk34GTFTDO_js.CheckboxGroupOrientationSchema; }
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(exports, "CheckboxGroupPropsSchema", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
get: function () { return chunk34GTFTDO_js.CheckboxGroupPropsSchema; }
|
|
29
|
-
});
|
|
30
|
-
Object.defineProperty(exports, "CheckboxGroupSizeSchema", {
|
|
31
|
-
enumerable: true,
|
|
32
|
-
get: function () { return chunk34GTFTDO_js.CheckboxGroupSizeSchema; }
|
|
33
|
-
});
|
|
34
|
-
Object.defineProperty(exports, "CheckboxGroupVariantSchema", {
|
|
35
|
-
enumerable: true,
|
|
36
|
-
get: function () { return chunk34GTFTDO_js.CheckboxGroupVariantSchema; }
|
|
37
|
-
});
|
|
38
|
-
Object.defineProperty(exports, "CheckboxLabelPropsSchema", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () { return chunk34GTFTDO_js.CheckboxLabelPropsSchema; }
|
|
41
|
-
});
|
|
42
|
-
Object.defineProperty(exports, "CheckboxPropsSchema", {
|
|
43
|
-
enumerable: true,
|
|
44
|
-
get: function () { return chunk34GTFTDO_js.CheckboxPropsSchema; }
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(exports, "CheckmarkIcon", {
|
|
47
|
-
enumerable: true,
|
|
48
|
-
get: function () { return chunk34GTFTDO_js.CheckmarkIcon; }
|
|
49
|
-
});
|
|
50
|
-
Object.defineProperty(exports, "TimesIcon", {
|
|
51
|
-
enumerable: true,
|
|
52
|
-
get: function () { return chunk34GTFTDO_js.TimesIcon; }
|
|
53
|
-
});
|
|
54
|
-
Object.defineProperty(exports, "checkboxGroupVariants", {
|
|
55
|
-
enumerable: true,
|
|
56
|
-
get: function () { return chunk34GTFTDO_js.checkboxGroupVariants; }
|
|
57
|
-
});
|
|
58
|
-
Object.defineProperty(exports, "checkboxIndicatorVariants", {
|
|
59
|
-
enumerable: true,
|
|
60
|
-
get: function () { return chunk34GTFTDO_js.checkboxIndicatorVariants; }
|
|
61
|
-
});
|
|
62
|
-
Object.defineProperty(exports, "checkboxItemVariants", {
|
|
63
|
-
enumerable: true,
|
|
64
|
-
get: function () { return chunk34GTFTDO_js.checkboxItemVariants; }
|
|
65
|
-
});
|
|
66
|
-
Object.defineProperty(exports, "checkmarkVariants", {
|
|
67
|
-
enumerable: true,
|
|
68
|
-
get: function () { return chunk34GTFTDO_js.checkmarkVariants; }
|
|
69
|
-
});
|
|
70
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';var zod=require('zod'),react=require('react'),reactAriaComponents=require('react-aria-components'),classVarianceAuthority=require('class-variance-authority'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');var P=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var T=zod.z.enum(["default","destructive"]),I=zod.z.enum(["sm","default","lg"]),O=zod.z.enum(["vertical","horizontal"]),se=P.extend({label:zod.z.string().optional(),description:zod.z.string().optional(),errorMessage:zod.z.string().optional(),value:zod.z.array(zod.z.string()).optional(),defaultValue:zod.z.array(zod.z.string()).optional(),isDisabled:zod.z.boolean().optional().default(false),isReadOnly:zod.z.boolean().optional().default(false),isRequired:zod.z.boolean().optional().default(false),isInvalid:zod.z.boolean().optional().default(false),orientation:O.optional().default("vertical"),variant:T.optional().default("default"),size:I.optional().default("default"),name:zod.z.string().optional(),onChange:zod.z.custom().optional(),onFocusChange:zod.z.custom().optional(),children:zod.z.custom()}),ne=P.extend({value:zod.z.string(),isDisabled:zod.z.boolean().optional().default(false),children:zod.z.custom(),className:zod.z.string().optional(),selectedIcon:zod.z.custom().optional()}),ce=zod.z.object({children:zod.z.custom(),className:zod.z.string().optional()}),le=zod.z.object({children:zod.z.custom(),className:zod.z.string().optional()});function d(...o){return tailwindMerge.twMerge(clsx.clsx(o))}var S="data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2";var m="hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground";var A=react.createContext({variant:"default",size:"default",isInvalid:false,isDisabled:false,isReadOnly:false}),w=classVarianceAuthority.cva("flex",{variants:{orientation:{vertical:"flex-col gap-2",horizontal:"flex-row flex-wrap gap-2"}},defaultVariants:{orientation:"vertical"}}),$=classVarianceAuthority.cva(["flex items-center gap-3 rounded-md border cursor-pointer","transition-colors duration-200","rtl:flex-row-reverse",S,m].join(" "),{variants:{variant:{default:["border-[var(--border)]","data-[hovered]:bg-[var(--accent)]/10","data-[selected]:border-[var(--primary)]","data-[selected]:bg-[var(--primary)]/10"].join(" "),destructive:["border-[var(--border)]","data-[hovered]:bg-[var(--destructive)]/10","data-[selected]:border-[var(--destructive)]","data-[selected]:bg-[var(--destructive)]/10"].join(" ")},size:{sm:"min-h-[44px] py-2 px-3 text-sm",default:"min-h-[48px] py-3 px-4 text-sm",lg:"min-h-[56px] py-4 px-5 text-base"},isDisabled:{true:"opacity-50 cursor-not-allowed",false:""},isReadOnly:{true:"cursor-default",false:""},isInvalid:{true:"border-[var(--destructive)]",false:""}},defaultVariants:{variant:"default",size:"default",isDisabled:false,isReadOnly:false,isInvalid:false}}),j=classVarianceAuthority.cva("flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200",{variants:{variant:{default:["border-[var(--border)]","data-[selected]:border-[var(--primary)]","data-[selected]:bg-[var(--primary)]"].join(" "),destructive:["border-[var(--border)]","data-[selected]:border-[var(--destructive)]","data-[selected]:bg-[var(--destructive)]"].join(" ")},size:{sm:"h-4 w-4",default:"h-5 w-5",lg:"h-6 w-6"}},defaultVariants:{variant:"default",size:"default"}}),H=classVarianceAuthority.cva(["transition-transform duration-200","[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]","motion-reduce:transition-none","scale-0 data-[selected]:scale-100"].join(" "),{variants:{variant:{default:"text-[var(--primary-foreground)]",destructive:"text-[var(--destructive-foreground)]"},size:{sm:"h-3 w-3",default:"h-3.5 w-3.5",lg:"h-4 w-4"}},defaultVariants:{variant:"default",size:"default"}});function F({className:o,...t}){return jsxRuntime.jsx("svg",{className:o,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...t,children:jsxRuntime.jsx("polyline",{points:"20 6 9 17 4 12"})})}function Ne({className:o,...t}){return jsxRuntime.jsxs("svg",{className:o,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...t,children:[jsxRuntime.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntime.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function B({children:o,className:t}){return jsxRuntime.jsx("span",{className:d("font-medium text-[var(--content-foreground)]",t),children:o})}B.displayName="Checkbox.Label";function Y({children:o,className:t}){return jsxRuntime.jsx("span",{className:d("text-sm text-[var(--menu-muted)]",t),children:o})}Y.displayName="Checkbox.Description";function Pe({value:o,isDisabled:t,children:n,className:p,selectedIcon:s}){let{variant:c,size:u,isInvalid:N,isDisabled:C,isReadOnly:k}=react.useContext(A),b=t||C,l=i=>{let h=d(H({variant:c,size:u})),x=i||void 0;if(s){if(react.isValidElement(s)){let v=s;return react.cloneElement(v,{className:d(h,v.props.className),"data-selected":x})}return jsxRuntime.jsx("span",{className:h,"data-selected":x,children:s})}return jsxRuntime.jsx(F,{className:h,"data-selected":x})};return jsxRuntime.jsx(reactAriaComponents.Checkbox,{value:o,isDisabled:b,className:i=>d($({variant:c,size:u,isDisabled:i.isDisabled,isReadOnly:k,isInvalid:N}),p),children:i=>jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:j({variant:c,size:u}),"data-selected":i.isSelected||void 0,children:l(i.isSelected)}),jsxRuntime.jsx("div",{className:"flex-1 flex flex-col",children:n})]})})}var U=Object.assign(Pe,{Label:B,Description:Y});U.displayName="Checkbox";function _(o,t){if(!o)return o;let n=[...new Set(o)];return process.env.NODE_ENV!=="production"&&n.length!==o.length&&console.warn(`[${t}] Received duplicate values in value/defaultValue prop. Original: [${o.join(", ")}], Deduplicated: [${n.join(", ")}]. Duplicate values are automatically removed.`),n}var q=react.forwardRef(function(t,n){let{label:p,description:s,errorMessage:c,value:u,defaultValue:N,isDisabled:C=false,isReadOnly:k=false,isRequired:b=false,isInvalid:l=false,orientation:i="vertical",variant:h="default",size:x="default",name:v,onChange:M,onFocusChange:W,className:J,children:K,id:Q,"aria-label":X,"aria-labelledby":Z,"aria-describedby":R,"data-testid":ee,...oe}=t,ae=react.useId(),y=Q??ae,D=`${y}-label`,V=`${y}-description`,E=`${y}-error`,f=[];R&&f.push(R),s&&f.push(V),l&&c&&f.push(E);let te=f.length>0?f.join(" "):void 0,re=_(u,"CheckboxGroup"),ie=_(N,"CheckboxGroup");return jsxRuntime.jsx(A.Provider,{value:{variant:h,size:x,isInvalid:l,isDisabled:C,isReadOnly:k},children:jsxRuntime.jsxs(reactAriaComponents.CheckboxGroup,{ref:n,id:y,name:v,value:re,defaultValue:ie,isDisabled:C,isReadOnly:k,isRequired:b,isInvalid:l,onChange:M,onFocusChange:W,"aria-label":X,"aria-labelledby":p?D:Z,"aria-describedby":te,"aria-orientation":i,"aria-required":b||void 0,"aria-invalid":l||void 0,"data-testid":ee,className:d("flex flex-col gap-1.5",J),...oe,children:[p&&jsxRuntime.jsxs(reactAriaComponents.Label,{id:D,className:"text-sm font-medium text-[var(--content-foreground)]",children:[p,b&&jsxRuntime.jsx("span",{className:"ml-1 text-[var(--destructive)]","aria-hidden":"true",children:"*"})]}),s&&jsxRuntime.jsx(reactAriaComponents.Text,{id:V,slot:"description",className:"text-sm text-[var(--menu-muted)]",children:s}),jsxRuntime.jsx("div",{className:w({orientation:i}),children:K}),l&&c&&jsxRuntime.jsx(reactAriaComponents.FieldError,{id:E,className:"text-sm text-[var(--destructive)]",children:jsxRuntime.jsx("span",{role:"alert",children:c})})]})})});q.displayName="CheckboxGroup";exports.Checkbox=U;exports.CheckboxDescriptionPropsSchema=le;exports.CheckboxGroup=q;exports.CheckboxGroupOrientationSchema=O;exports.CheckboxGroupPropsSchema=se;exports.CheckboxGroupSizeSchema=I;exports.CheckboxGroupVariantSchema=T;exports.CheckboxLabelPropsSchema=ce;exports.CheckboxPropsSchema=ne;exports.CheckmarkIcon=F;exports.TimesIcon=Ne;exports.checkboxGroupVariants=w;exports.checkboxIndicatorVariants=j;exports.checkboxItemVariants=$;exports.checkmarkVariants=H;//# sourceMappingURL=index.js.map
|
|
71
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/schemas/BaseComponentProps.ts","../../../src/elements/CheckboxGroup/CheckboxGroup.types.ts","../../../src/utils/cn.ts","../../../src/styles/interaction-states.ts","../../../src/elements/CheckboxGroup/CheckboxGroup.tsx"],"names":["BaseComponentPropsSchema","z","CheckboxGroupVariantSchema","CheckboxGroupSizeSchema","CheckboxGroupOrientationSchema","CheckboxGroupPropsSchema","CheckboxPropsSchema","CheckboxLabelPropsSchema","CheckboxDescriptionPropsSchema","cn","inputs","twMerge","clsx","FOCUS_STYLES","HIGH_CONTRAST_FOCUS","CheckboxGroupContext","createContext","checkboxGroupVariants","cva","checkboxItemVariants","checkboxIndicatorVariants","checkmarkVariants","CheckmarkIcon","className","props","jsx","TimesIcon","jsxs","CheckboxLabel","children","CheckboxDescription","CheckboxComponent","value","isDisabled","selectedIcon","variant","size","isInvalid","groupDisabled","isReadOnly","useContext","effectiveDisabled","renderSelectedIcon","isSelected","iconClassName","dataSelected","isValidElement","iconElement","cloneElement","AriaCheckbox","renderProps","Fragment","Checkbox","dedupeWithWarning","values","componentName","uniqueValues","CheckboxGroup","forwardRef","ref","label","description","errorMessage","defaultValue","isRequired","orientation","name","onChange","onFocusChange","id","ariaLabel","ariaLabelledby","ariaDescribedby","dataTestId","restProps","generatedId","useId","checkboxGroupId","labelId","descriptionId","errorId","describedByParts","computedAriaDescribedBy","dedupedValue","dedupedDefaultValue","AriaCheckboxGroup","Label","Text","FieldError"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\nimport type {\n CheckboxGroupProps as AriaCheckboxGroupProps,\n CheckboxProps as AriaCheckboxProps,\n} from 'react-aria-components';\n\n/**\n * CheckboxGroup variant schema\n * Only 2 variants: default and destructive (matching RadioGroup)\n *\n * @see checkboxgroup-prd.md US-2 (Style Variants)\n */\nexport const CheckboxGroupVariantSchema = z.enum(['default', 'destructive']);\nexport type CheckboxGroupVariant = z.infer<typeof CheckboxGroupVariantSchema>;\n\n/**\n * CheckboxGroup size schema\n * All sizes maintain 44px minimum height for WCAG 2.2 AAA compliance\n *\n * @see checkboxgroup-prd.md US-3 (Size Variants)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const CheckboxGroupSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type CheckboxGroupSize = z.infer<typeof CheckboxGroupSizeSchema>;\n\n/**\n * CheckboxGroup orientation schema\n *\n * @see checkboxgroup-prd.md US-5 (Orientation Support)\n */\nexport const CheckboxGroupOrientationSchema = z.enum(['vertical', 'horizontal']);\nexport type CheckboxGroupOrientation = z.infer<typeof CheckboxGroupOrientationSchema>;\n\n/**\n * CheckboxGroup root component props schema\n *\n * Key difference from RadioGroup: value is string[] (multi-select)\n *\n * @see checkboxgroup-prd.md US-1 (Basic Multi-Selection)\n * @see checkboxgroup-prd.md US-4 (Labels, Descriptions, Errors)\n * @see checkboxgroup-prd.md US-6 (Validation States)\n */\nexport const CheckboxGroupPropsSchema = BaseComponentPropsSchema.extend({\n // Display props (US-4)\n label: z.string().optional(),\n description: z.string().optional(),\n errorMessage: z.string().optional(),\n\n // Selection props (US-1) - array for multi-select (key difference from RadioGroup)\n value: z.array(z.string()).optional(),\n defaultValue: z.array(z.string()).optional(),\n\n // State props (US-6)\n isDisabled: z.boolean().optional().default(false),\n isReadOnly: z.boolean().optional().default(false),\n isRequired: z.boolean().optional().default(false),\n isInvalid: z.boolean().optional().default(false),\n\n // Layout props (US-5)\n orientation: CheckboxGroupOrientationSchema.optional().default('vertical'),\n\n // Variant props (US-2, US-3)\n variant: CheckboxGroupVariantSchema.optional().default('default'),\n size: CheckboxGroupSizeSchema.optional().default('default'),\n\n // Form props (US-6)\n name: z.string().optional(),\n\n // Event handlers\n onChange: z.custom<(value: string[]) => void>().optional(),\n onFocusChange: z.custom<(isFocused: boolean) => void>().optional(),\n\n // Children (Checkbox components)\n children: z.custom<ReactNode>(),\n});\n\nexport type CheckboxGroupProps = z.infer<typeof CheckboxGroupPropsSchema> &\n Omit<AriaCheckboxGroupProps, keyof z.infer<typeof CheckboxGroupPropsSchema>>;\n\n/**\n * Checkbox item component props schema\n *\n * @see checkboxgroup-prd.md US-1 (Basic Multi-Selection)\n * @see checkboxgroup-prd.md US-7 (Rich Content Support)\n */\nexport const CheckboxPropsSchema = BaseComponentPropsSchema.extend({\n // Item value (required)\n value: z.string(),\n\n // Disabled state (individual item)\n isDisabled: z.boolean().optional().default(false),\n\n // Item content - accepts any ReactNode for flexible children\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n\n // Custom icon to display when selected (defaults to checkmark)\n // Useful for destructive variants where an X icon may be more appropriate\n selectedIcon: z.custom<ReactNode>().optional(),\n});\n\nexport type CheckboxProps = z.infer<typeof CheckboxPropsSchema> &\n Omit<AriaCheckboxProps, keyof z.infer<typeof CheckboxPropsSchema>>;\n\n/**\n * Checkbox.Label sub-component props schema\n * Helper component for styled label within Checkbox item\n *\n * @see checkboxgroup-prd.md US-7 (Rich Content Support)\n */\nexport const CheckboxLabelPropsSchema = z.object({\n // Label content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type CheckboxLabelProps = z.infer<typeof CheckboxLabelPropsSchema>;\n\n/**\n * Checkbox.Description sub-component props schema\n * Helper component for styled description within Checkbox item (muted text)\n *\n * @see checkboxgroup-prd.md US-7 (Rich Content Support)\n */\nexport const CheckboxDescriptionPropsSchema = z.object({\n // Description content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type CheckboxDescriptionProps = z.infer<typeof CheckboxDescriptionPropsSchema>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type CheckboxGroupVariantType = CheckboxGroupVariant;\nexport type CheckboxGroupSizeType = CheckboxGroupSize;\nexport type CheckboxGroupOrientationType = CheckboxGroupOrientation;\n","/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n","\"use client\";\n\n/**\n * CheckboxGroup Component\n * Accessible multi-selection checkbox group with React Aria primitives and CVA styling\n *\n * Key Features:\n * - Bordered container design with explicit 44px+ touch targets\n * - 2 variants: default, destructive (no outline per clarification)\n * - 3 sizes: sm (44px), default (48px), lg (56px)\n * - Tab moves focus between checkboxes, Space toggles (standard checkbox behavior)\n * - Error styling on ALL items (cognitive accessibility)\n * - Spring animation for checkmark indicator\n * - RTL support (indicator auto-flips)\n * - Checkbox.Label and Checkbox.Description sub-components\n * - value: string[] for multi-select (key difference from RadioGroup)\n *\n * @see checkboxgroup-prd.md (Product Requirements)\n * @see plan.md (12 Key Clarifications)\n * @see React Aria CheckboxGroup: https://react-spectrum.adobe.com/react-aria/CheckboxGroup.html\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n useId,\n cloneElement,\n isValidElement,\n type ReactNode,\n type ForwardedRef,\n type ReactElement,\n} from 'react';\nimport {\n CheckboxGroup as AriaCheckboxGroup,\n Checkbox as AriaCheckbox,\n Label,\n Text,\n FieldError,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { FOCUS_STYLES, HIGH_CONTRAST_FOCUS } from '../../styles/interaction-states';\nimport type {\n CheckboxGroupProps,\n CheckboxProps,\n CheckboxLabelProps,\n CheckboxDescriptionProps,\n CheckboxGroupVariant,\n CheckboxGroupSize,\n} from './CheckboxGroup.types';\n\n// ============================================================================\n// Context\n// ============================================================================\n\n/**\n * CheckboxGroup context value\n * Includes isDisabled and isReadOnly per clarification (plan.md #10)\n */\ninterface CheckboxGroupContextValue {\n variant: CheckboxGroupVariant;\n size: CheckboxGroupSize;\n isInvalid: boolean;\n isDisabled: boolean;\n isReadOnly: boolean;\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue>({\n variant: 'default',\n size: 'default',\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n});\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * CheckboxGroup container variants\n * Controls orientation and spacing (gap-2 = 8px per clarification)\n */\nconst checkboxGroupVariants = cva(\n // Base: flex container\n \"flex\",\n {\n variants: {\n orientation: {\n vertical: \"flex-col gap-2\",\n horizontal: \"flex-row flex-wrap gap-2\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n);\n\n/**\n * Checkbox item bordered container variants\n * Bordered container design with explicit touch targets\n * All sizes maintain 44px minimum height (WCAG 2.2 AAA)\n * All sizes use rounded-md (6px) per clarification\n */\nconst checkboxItemVariants = cva(\n // Base: bordered container with flex layout, RTL support\n [\n \"flex items-center gap-3 rounded-md border cursor-pointer\",\n \"transition-colors duration-200\",\n \"rtl:flex-row-reverse\", // RTL: indicator flips to right\n // Focus ring on entire container\n FOCUS_STYLES,\n HIGH_CONTRAST_FOCUS,\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: [\n \"border-[var(--border)]\",\n \"data-[hovered]:bg-[var(--accent)]/10\",\n \"data-[selected]:border-[var(--primary)]\",\n \"data-[selected]:bg-[var(--primary)]/10\",\n ].join(\" \"),\n destructive: [\n \"border-[var(--border)]\",\n \"data-[hovered]:bg-[var(--destructive)]/10\",\n \"data-[selected]:border-[var(--destructive)]\",\n \"data-[selected]:bg-[var(--destructive)]/10\",\n ].join(\" \"),\n },\n size: {\n sm: \"min-h-[44px] py-2 px-3 text-sm\",\n default: \"min-h-[48px] py-3 px-4 text-sm\",\n lg: \"min-h-[56px] py-4 px-5 text-base\",\n },\n isDisabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n isReadOnly: {\n // Subtle visual cue per clarification\n true: \"cursor-default\",\n false: \"\",\n },\n isInvalid: {\n // Error: ALL items get destructive border (cognitive accessibility)\n true: \"border-[var(--destructive)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n isDisabled: false,\n isReadOnly: false,\n isInvalid: false,\n },\n }\n);\n\n/**\n * Square indicator (checkbox box) variants\n * Uses rounded-sm (2px) for square appearance (unlike RadioGroup's circle)\n */\nconst checkboxIndicatorVariants = cva(\n // Base: square with border, flex-shrink-0 to prevent squishing\n \"flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200\",\n {\n variants: {\n variant: {\n default: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--primary)]\",\n \"data-[selected]:bg-[var(--primary)]\",\n ].join(\" \"),\n destructive: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--destructive)]\",\n \"data-[selected]:bg-[var(--destructive)]\",\n ].join(\" \"),\n },\n size: {\n sm: \"h-4 w-4\",\n default: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n/**\n * Checkmark SVG variants\n * Spring animation: cubic-bezier(0.34, 1.56, 0.64, 1) with slight overshoot\n */\nconst checkmarkVariants = cva(\n // Base: centered checkmark with spring animation\n [\n \"transition-transform duration-200\",\n // Spring animation with overshoot\n \"[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]\",\n // Respect reduced motion preference\n \"motion-reduce:transition-none\",\n // Scale from 0 to 1 on selection\n \"scale-0 data-[selected]:scale-100\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: \"text-[var(--primary-foreground)]\",\n destructive: \"text-[var(--destructive-foreground)]\",\n },\n size: {\n sm: \"h-3 w-3\",\n default: \"h-3.5 w-3.5\",\n lg: \"h-4 w-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\n/**\n * Checkmark SVG icon (default)\n * Used inside the checkbox indicator when selected\n */\nfunction CheckmarkIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n/**\n * Times (X) SVG icon\n * Alternative icon for destructive or exclusion selections\n * @example <Checkbox value=\"exclude\" selectedIcon={<TimesIcon />}>Exclude this item</Checkbox>\n */\nfunction TimesIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\n/**\n * Checkbox.Label - Styled label for checkbox item content\n */\nfunction CheckboxLabel({ children, className }: CheckboxLabelProps): ReactNode {\n return (\n <span className={cn(\"font-medium text-[var(--content-foreground)]\", className)}>\n {children}\n </span>\n );\n}\n\nCheckboxLabel.displayName = \"Checkbox.Label\";\n\n/**\n * Checkbox.Description - Styled description for checkbox item content (muted)\n */\nfunction CheckboxDescription({ children, className }: CheckboxDescriptionProps): ReactNode {\n return (\n <span className={cn(\"text-sm text-[var(--menu-muted)]\", className)}>\n {children}\n </span>\n );\n}\n\nCheckboxDescription.displayName = \"Checkbox.Description\";\n\n// ============================================================================\n// Checkbox Component\n// ============================================================================\n\n/**\n * Checkbox item component with bordered container design\n */\nfunction CheckboxComponent({ value, isDisabled, children, className, selectedIcon }: CheckboxProps): ReactNode {\n const { variant, size, isInvalid, isDisabled: groupDisabled, isReadOnly } = useContext(CheckboxGroupContext);\n\n // Individual isDisabled OR group isDisabled\n const effectiveDisabled = isDisabled || groupDisabled;\n\n // Render the selected icon - use custom icon if provided, otherwise default CheckmarkIcon\n const renderSelectedIcon = (isSelected: boolean) => {\n const iconClassName = cn(checkmarkVariants({ variant, size }));\n const dataSelected = isSelected || undefined;\n\n if (selectedIcon) {\n // Clone the custom icon element to add our styling classes\n if (isValidElement(selectedIcon)) {\n const iconElement = selectedIcon as ReactElement<{ className?: string; 'data-selected'?: boolean }>;\n return cloneElement(iconElement, {\n className: cn(iconClassName, iconElement.props.className),\n 'data-selected': dataSelected,\n });\n }\n // If it's not a valid element (e.g., just text), wrap it\n return <span className={iconClassName} data-selected={dataSelected}>{selectedIcon}</span>;\n }\n\n // Default: CheckmarkIcon\n return (\n <CheckmarkIcon\n className={iconClassName}\n data-selected={dataSelected}\n />\n );\n };\n\n return (\n <AriaCheckbox\n value={value}\n isDisabled={effectiveDisabled}\n className={(renderProps) =>\n cn(\n checkboxItemVariants({\n variant,\n size,\n isDisabled: renderProps.isDisabled,\n isReadOnly,\n isInvalid,\n }),\n className\n )\n }\n >\n {(renderProps) => (\n <>\n {/* Square indicator */}\n <div\n className={checkboxIndicatorVariants({ variant, size })}\n data-selected={renderProps.isSelected || undefined}\n >\n {/* Icon with spring animation */}\n {renderSelectedIcon(renderProps.isSelected)}\n </div>\n\n {/* Children content (flexible - text, icons, complex layouts) */}\n <div className=\"flex-1 flex flex-col\">\n {children}\n </div>\n </>\n )}\n </AriaCheckbox>\n );\n}\n\n// Attach sub-components\nconst Checkbox = Object.assign(CheckboxComponent, {\n Label: CheckboxLabel,\n Description: CheckboxDescription,\n}) as typeof CheckboxComponent & {\n Label: typeof CheckboxLabel;\n Description: typeof CheckboxDescription;\n displayName: string;\n};\n\nCheckbox.displayName = \"Checkbox\";\n\n// ============================================================================\n// Duplicate Value Warning\n// ============================================================================\n\n/**\n * Deduplicates array and warns in development mode\n * Per clarification: dedupe internally + console.warn in development\n */\nfunction dedupeWithWarning(values: string[] | undefined, componentName: string): string[] | undefined {\n if (!values) return values;\n\n const uniqueValues = [...new Set(values)];\n\n if (process.env.NODE_ENV !== 'production' && uniqueValues.length !== values.length) {\n console.warn(\n `[${componentName}] Received duplicate values in value/defaultValue prop. ` +\n `Original: [${values.join(', ')}], Deduplicated: [${uniqueValues.join(', ')}]. ` +\n `Duplicate values are automatically removed.`\n );\n }\n\n return uniqueValues;\n}\n\n// ============================================================================\n// CheckboxGroup Component\n// ============================================================================\n\n/**\n * CheckboxGroup root component\n * Accessible multi-selection control with bordered container design\n */\nconst CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n function CheckboxGroup(props: CheckboxGroupProps, ref: ForwardedRef<HTMLDivElement>) {\n const {\n // Display props\n label,\n description,\n errorMessage,\n // Selection props (string[] for multi-select)\n value,\n defaultValue,\n // State props\n isDisabled = false,\n isReadOnly = false,\n isRequired = false,\n isInvalid = false,\n // Layout props\n orientation = 'vertical',\n // Variant props\n variant = 'default',\n size = 'default',\n // Form props\n name,\n // Event handlers\n onChange,\n onFocusChange,\n // Standard props\n className,\n children,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'data-testid': dataTestId,\n ...restProps\n } = props;\n\n // Generate unique IDs for accessibility\n const generatedId = useId();\n const checkboxGroupId = id ?? generatedId;\n const labelId = `${checkboxGroupId}-label`;\n const descriptionId = `${checkboxGroupId}-description`;\n const errorId = `${checkboxGroupId}-error`;\n\n // Build aria-describedby from description and error\n const describedByParts: string[] = [];\n if (ariaDescribedby) describedByParts.push(ariaDescribedby);\n if (description) describedByParts.push(descriptionId);\n if (isInvalid && errorMessage) describedByParts.push(errorId);\n const computedAriaDescribedBy = describedByParts.length > 0\n ? describedByParts.join(' ')\n : undefined;\n\n // Dedupe values with warning in development\n const dedupedValue = dedupeWithWarning(value, 'CheckboxGroup');\n const dedupedDefaultValue = dedupeWithWarning(defaultValue, 'CheckboxGroup');\n\n return (\n <CheckboxGroupContext.Provider value={{ variant, size, isInvalid, isDisabled, isReadOnly }}>\n <AriaCheckboxGroup\n ref={ref}\n id={checkboxGroupId}\n name={name}\n value={dedupedValue}\n defaultValue={dedupedDefaultValue}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n isInvalid={isInvalid}\n onChange={onChange}\n onFocusChange={onFocusChange}\n aria-label={ariaLabel}\n aria-labelledby={label ? labelId : ariaLabelledby}\n aria-describedby={computedAriaDescribedBy}\n aria-orientation={orientation}\n aria-required={isRequired || undefined}\n aria-invalid={isInvalid || undefined}\n data-testid={dataTestId}\n className={cn(\"flex flex-col gap-1.5\", className)}\n {...restProps}\n >\n {/* Label with optional required asterisk */}\n {label && (\n <Label id={labelId} className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n {isRequired && (\n <span className=\"ml-1 text-[var(--destructive)]\" aria-hidden=\"true\">\n *\n </span>\n )}\n </Label>\n )}\n\n {/* Description */}\n {description && (\n <Text\n id={descriptionId}\n slot=\"description\"\n className=\"text-sm text-[var(--menu-muted)]\"\n >\n {description}\n </Text>\n )}\n\n {/* Checkbox items container with orientation */}\n <div className={checkboxGroupVariants({ orientation })}>\n {children}\n </div>\n\n {/* Error message with role=\"alert\" for screen reader announcements */}\n {isInvalid && errorMessage && (\n <FieldError\n id={errorId}\n className=\"text-sm text-[var(--destructive)]\"\n >\n <span role=\"alert\">{errorMessage}</span>\n </FieldError>\n )}\n </AriaCheckboxGroup>\n </CheckboxGroupContext.Provider>\n );\n }\n);\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n CheckboxGroup,\n Checkbox,\n checkboxGroupVariants,\n checkboxItemVariants,\n checkboxIndicatorVariants,\n checkmarkVariants,\n // Icon exports for custom selectedIcon usage\n CheckmarkIcon,\n TimesIcon,\n};\n"]}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
import '
|
|
3
|
-
import '../../chunk-E2KQFV3O.mjs';
|
|
4
|
-
import '../../chunk-5SVLJN2C.mjs';
|
|
5
|
-
//# sourceMappingURL=index.mjs.map
|
|
1
|
+
"use client";
|
|
2
|
+
import {z}from'zod';import {createContext,forwardRef,useId,useContext,isValidElement,cloneElement}from'react';import {CheckboxGroup,Label,Text,FieldError,Checkbox}from'react-aria-components';import {cva}from'class-variance-authority';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var P=z.object({className:z.string().optional(),children:z.any().optional(),id:z.string().optional(),"aria-label":z.string().optional(),"aria-labelledby":z.string().optional(),"aria-describedby":z.string().optional(),"aria-live":z.enum(["off","polite","assertive"]).optional(),"aria-hidden":z.boolean().optional(),"data-testid":z.string().optional()});var T=z.enum(["default","destructive"]),I=z.enum(["sm","default","lg"]),O=z.enum(["vertical","horizontal"]),se=P.extend({label:z.string().optional(),description:z.string().optional(),errorMessage:z.string().optional(),value:z.array(z.string()).optional(),defaultValue:z.array(z.string()).optional(),isDisabled:z.boolean().optional().default(false),isReadOnly:z.boolean().optional().default(false),isRequired:z.boolean().optional().default(false),isInvalid:z.boolean().optional().default(false),orientation:O.optional().default("vertical"),variant:T.optional().default("default"),size:I.optional().default("default"),name:z.string().optional(),onChange:z.custom().optional(),onFocusChange:z.custom().optional(),children:z.custom()}),ne=P.extend({value:z.string(),isDisabled:z.boolean().optional().default(false),children:z.custom(),className:z.string().optional(),selectedIcon:z.custom().optional()}),ce=z.object({children:z.custom(),className:z.string().optional()}),le=z.object({children:z.custom(),className:z.string().optional()});function d(...o){return twMerge(clsx(o))}var S="data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2";var m="hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground";var A=createContext({variant:"default",size:"default",isInvalid:false,isDisabled:false,isReadOnly:false}),w=cva("flex",{variants:{orientation:{vertical:"flex-col gap-2",horizontal:"flex-row flex-wrap gap-2"}},defaultVariants:{orientation:"vertical"}}),$=cva(["flex items-center gap-3 rounded-md border cursor-pointer","transition-colors duration-200","rtl:flex-row-reverse",S,m].join(" "),{variants:{variant:{default:["border-[var(--border)]","data-[hovered]:bg-[var(--accent)]/10","data-[selected]:border-[var(--primary)]","data-[selected]:bg-[var(--primary)]/10"].join(" "),destructive:["border-[var(--border)]","data-[hovered]:bg-[var(--destructive)]/10","data-[selected]:border-[var(--destructive)]","data-[selected]:bg-[var(--destructive)]/10"].join(" ")},size:{sm:"min-h-[44px] py-2 px-3 text-sm",default:"min-h-[48px] py-3 px-4 text-sm",lg:"min-h-[56px] py-4 px-5 text-base"},isDisabled:{true:"opacity-50 cursor-not-allowed",false:""},isReadOnly:{true:"cursor-default",false:""},isInvalid:{true:"border-[var(--destructive)]",false:""}},defaultVariants:{variant:"default",size:"default",isDisabled:false,isReadOnly:false,isInvalid:false}}),j=cva("flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200",{variants:{variant:{default:["border-[var(--border)]","data-[selected]:border-[var(--primary)]","data-[selected]:bg-[var(--primary)]"].join(" "),destructive:["border-[var(--border)]","data-[selected]:border-[var(--destructive)]","data-[selected]:bg-[var(--destructive)]"].join(" ")},size:{sm:"h-4 w-4",default:"h-5 w-5",lg:"h-6 w-6"}},defaultVariants:{variant:"default",size:"default"}}),H=cva(["transition-transform duration-200","[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]","motion-reduce:transition-none","scale-0 data-[selected]:scale-100"].join(" "),{variants:{variant:{default:"text-[var(--primary-foreground)]",destructive:"text-[var(--destructive-foreground)]"},size:{sm:"h-3 w-3",default:"h-3.5 w-3.5",lg:"h-4 w-4"}},defaultVariants:{variant:"default",size:"default"}});function F({className:o,...t}){return jsx("svg",{className:o,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...t,children:jsx("polyline",{points:"20 6 9 17 4 12"})})}function Ne({className:o,...t}){return jsxs("svg",{className:o,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...t,children:[jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function B({children:o,className:t}){return jsx("span",{className:d("font-medium text-[var(--content-foreground)]",t),children:o})}B.displayName="Checkbox.Label";function Y({children:o,className:t}){return jsx("span",{className:d("text-sm text-[var(--menu-muted)]",t),children:o})}Y.displayName="Checkbox.Description";function Pe({value:o,isDisabled:t,children:n,className:p,selectedIcon:s}){let{variant:c,size:u,isInvalid:N,isDisabled:C,isReadOnly:k}=useContext(A),b=t||C,l=i=>{let h=d(H({variant:c,size:u})),x=i||void 0;if(s){if(isValidElement(s)){let v=s;return cloneElement(v,{className:d(h,v.props.className),"data-selected":x})}return jsx("span",{className:h,"data-selected":x,children:s})}return jsx(F,{className:h,"data-selected":x})};return jsx(Checkbox,{value:o,isDisabled:b,className:i=>d($({variant:c,size:u,isDisabled:i.isDisabled,isReadOnly:k,isInvalid:N}),p),children:i=>jsxs(Fragment,{children:[jsx("div",{className:j({variant:c,size:u}),"data-selected":i.isSelected||void 0,children:l(i.isSelected)}),jsx("div",{className:"flex-1 flex flex-col",children:n})]})})}var U=Object.assign(Pe,{Label:B,Description:Y});U.displayName="Checkbox";function _(o,t){if(!o)return o;let n=[...new Set(o)];return process.env.NODE_ENV!=="production"&&n.length!==o.length&&console.warn(`[${t}] Received duplicate values in value/defaultValue prop. Original: [${o.join(", ")}], Deduplicated: [${n.join(", ")}]. Duplicate values are automatically removed.`),n}var q=forwardRef(function(t,n){let{label:p,description:s,errorMessage:c,value:u,defaultValue:N,isDisabled:C=false,isReadOnly:k=false,isRequired:b=false,isInvalid:l=false,orientation:i="vertical",variant:h="default",size:x="default",name:v,onChange:M,onFocusChange:W,className:J,children:K,id:Q,"aria-label":X,"aria-labelledby":Z,"aria-describedby":R,"data-testid":ee,...oe}=t,ae=useId(),y=Q??ae,D=`${y}-label`,V=`${y}-description`,E=`${y}-error`,f=[];R&&f.push(R),s&&f.push(V),l&&c&&f.push(E);let te=f.length>0?f.join(" "):void 0,re=_(u,"CheckboxGroup"),ie=_(N,"CheckboxGroup");return jsx(A.Provider,{value:{variant:h,size:x,isInvalid:l,isDisabled:C,isReadOnly:k},children:jsxs(CheckboxGroup,{ref:n,id:y,name:v,value:re,defaultValue:ie,isDisabled:C,isReadOnly:k,isRequired:b,isInvalid:l,onChange:M,onFocusChange:W,"aria-label":X,"aria-labelledby":p?D:Z,"aria-describedby":te,"aria-orientation":i,"aria-required":b||void 0,"aria-invalid":l||void 0,"data-testid":ee,className:d("flex flex-col gap-1.5",J),...oe,children:[p&&jsxs(Label,{id:D,className:"text-sm font-medium text-[var(--content-foreground)]",children:[p,b&&jsx("span",{className:"ml-1 text-[var(--destructive)]","aria-hidden":"true",children:"*"})]}),s&&jsx(Text,{id:V,slot:"description",className:"text-sm text-[var(--menu-muted)]",children:s}),jsx("div",{className:w({orientation:i}),children:K}),l&&c&&jsx(FieldError,{id:E,className:"text-sm text-[var(--destructive)]",children:jsx("span",{role:"alert",children:c})})]})})});q.displayName="CheckboxGroup";export{U as Checkbox,le as CheckboxDescriptionPropsSchema,q as CheckboxGroup,O as CheckboxGroupOrientationSchema,se as CheckboxGroupPropsSchema,I as CheckboxGroupSizeSchema,T as CheckboxGroupVariantSchema,ce as CheckboxLabelPropsSchema,ne as CheckboxPropsSchema,F as CheckmarkIcon,Ne as TimesIcon,w as checkboxGroupVariants,j as checkboxIndicatorVariants,$ as checkboxItemVariants,H as checkmarkVariants};//# sourceMappingURL=index.mjs.map
|
|
6
3
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
|
1
|
+
{"version":3,"sources":["../../../src/schemas/BaseComponentProps.ts","../../../src/elements/CheckboxGroup/CheckboxGroup.types.ts","../../../src/utils/cn.ts","../../../src/styles/interaction-states.ts","../../../src/elements/CheckboxGroup/CheckboxGroup.tsx"],"names":["BaseComponentPropsSchema","z","CheckboxGroupVariantSchema","CheckboxGroupSizeSchema","CheckboxGroupOrientationSchema","CheckboxGroupPropsSchema","CheckboxPropsSchema","CheckboxLabelPropsSchema","CheckboxDescriptionPropsSchema","cn","inputs","twMerge","clsx","FOCUS_STYLES","HIGH_CONTRAST_FOCUS","CheckboxGroupContext","createContext","checkboxGroupVariants","cva","checkboxItemVariants","checkboxIndicatorVariants","checkmarkVariants","CheckmarkIcon","className","props","jsx","TimesIcon","jsxs","CheckboxLabel","children","CheckboxDescription","CheckboxComponent","value","isDisabled","selectedIcon","variant","size","isInvalid","groupDisabled","isReadOnly","useContext","effectiveDisabled","renderSelectedIcon","isSelected","iconClassName","dataSelected","isValidElement","iconElement","cloneElement","AriaCheckbox","renderProps","Fragment","Checkbox","dedupeWithWarning","values","componentName","uniqueValues","CheckboxGroup","forwardRef","ref","label","description","errorMessage","defaultValue","isRequired","orientation","name","onChange","onFocusChange","id","ariaLabel","ariaLabelledby","ariaDescribedby","dataTestId","restProps","generatedId","useId","checkboxGroupId","labelId","descriptionId","errorId","describedByParts","computedAriaDescribedBy","dedupedValue","dedupedDefaultValue","AriaCheckboxGroup","Label","Text","FieldError"],"mappings":"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","file":"index.mjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * Base props schema for all Themis components\n * Ensures consistent accessibility and styling APIs across the library\n *\n * @see spec.md FR-009 to FR-014 (Accessibility Requirements)\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\nexport const BaseComponentPropsSchema = z.object({\n // Styling\n className: z.string().optional(),\n\n // React\n children: z.any().optional(), // ReactNode not directly supported by Zod\n id: z.string().optional(),\n\n // Accessibility (WCAG 2.2 AA requirements)\n 'aria-label': z.string().optional(),\n 'aria-labelledby': z.string().optional(),\n 'aria-describedby': z.string().optional(),\n 'aria-live': z.enum(['off', 'polite', 'assertive']).optional(),\n 'aria-hidden': z.boolean().optional(),\n\n // Testing & Development\n 'data-testid': z.string().optional(),\n});\n\nexport type BaseComponentProps = z.infer<typeof BaseComponentPropsSchema>;\n","import { z } from 'zod';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\nimport type { ReactNode } from 'react';\nimport type {\n CheckboxGroupProps as AriaCheckboxGroupProps,\n CheckboxProps as AriaCheckboxProps,\n} from 'react-aria-components';\n\n/**\n * CheckboxGroup variant schema\n * Only 2 variants: default and destructive (matching RadioGroup)\n *\n * @see checkboxgroup-prd.md US-2 (Style Variants)\n */\nexport const CheckboxGroupVariantSchema = z.enum(['default', 'destructive']);\nexport type CheckboxGroupVariant = z.infer<typeof CheckboxGroupVariantSchema>;\n\n/**\n * CheckboxGroup size schema\n * All sizes maintain 44px minimum height for WCAG 2.2 AAA compliance\n *\n * @see checkboxgroup-prd.md US-3 (Size Variants)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const CheckboxGroupSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type CheckboxGroupSize = z.infer<typeof CheckboxGroupSizeSchema>;\n\n/**\n * CheckboxGroup orientation schema\n *\n * @see checkboxgroup-prd.md US-5 (Orientation Support)\n */\nexport const CheckboxGroupOrientationSchema = z.enum(['vertical', 'horizontal']);\nexport type CheckboxGroupOrientation = z.infer<typeof CheckboxGroupOrientationSchema>;\n\n/**\n * CheckboxGroup root component props schema\n *\n * Key difference from RadioGroup: value is string[] (multi-select)\n *\n * @see checkboxgroup-prd.md US-1 (Basic Multi-Selection)\n * @see checkboxgroup-prd.md US-4 (Labels, Descriptions, Errors)\n * @see checkboxgroup-prd.md US-6 (Validation States)\n */\nexport const CheckboxGroupPropsSchema = BaseComponentPropsSchema.extend({\n // Display props (US-4)\n label: z.string().optional(),\n description: z.string().optional(),\n errorMessage: z.string().optional(),\n\n // Selection props (US-1) - array for multi-select (key difference from RadioGroup)\n value: z.array(z.string()).optional(),\n defaultValue: z.array(z.string()).optional(),\n\n // State props (US-6)\n isDisabled: z.boolean().optional().default(false),\n isReadOnly: z.boolean().optional().default(false),\n isRequired: z.boolean().optional().default(false),\n isInvalid: z.boolean().optional().default(false),\n\n // Layout props (US-5)\n orientation: CheckboxGroupOrientationSchema.optional().default('vertical'),\n\n // Variant props (US-2, US-3)\n variant: CheckboxGroupVariantSchema.optional().default('default'),\n size: CheckboxGroupSizeSchema.optional().default('default'),\n\n // Form props (US-6)\n name: z.string().optional(),\n\n // Event handlers\n onChange: z.custom<(value: string[]) => void>().optional(),\n onFocusChange: z.custom<(isFocused: boolean) => void>().optional(),\n\n // Children (Checkbox components)\n children: z.custom<ReactNode>(),\n});\n\nexport type CheckboxGroupProps = z.infer<typeof CheckboxGroupPropsSchema> &\n Omit<AriaCheckboxGroupProps, keyof z.infer<typeof CheckboxGroupPropsSchema>>;\n\n/**\n * Checkbox item component props schema\n *\n * @see checkboxgroup-prd.md US-1 (Basic Multi-Selection)\n * @see checkboxgroup-prd.md US-7 (Rich Content Support)\n */\nexport const CheckboxPropsSchema = BaseComponentPropsSchema.extend({\n // Item value (required)\n value: z.string(),\n\n // Disabled state (individual item)\n isDisabled: z.boolean().optional().default(false),\n\n // Item content - accepts any ReactNode for flexible children\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n\n // Custom icon to display when selected (defaults to checkmark)\n // Useful for destructive variants where an X icon may be more appropriate\n selectedIcon: z.custom<ReactNode>().optional(),\n});\n\nexport type CheckboxProps = z.infer<typeof CheckboxPropsSchema> &\n Omit<AriaCheckboxProps, keyof z.infer<typeof CheckboxPropsSchema>>;\n\n/**\n * Checkbox.Label sub-component props schema\n * Helper component for styled label within Checkbox item\n *\n * @see checkboxgroup-prd.md US-7 (Rich Content Support)\n */\nexport const CheckboxLabelPropsSchema = z.object({\n // Label content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type CheckboxLabelProps = z.infer<typeof CheckboxLabelPropsSchema>;\n\n/**\n * Checkbox.Description sub-component props schema\n * Helper component for styled description within Checkbox item (muted text)\n *\n * @see checkboxgroup-prd.md US-7 (Rich Content Support)\n */\nexport const CheckboxDescriptionPropsSchema = z.object({\n // Description content\n children: z.custom<ReactNode>(),\n\n // Optional className for custom styling\n className: z.string().optional(),\n});\n\nexport type CheckboxDescriptionProps = z.infer<typeof CheckboxDescriptionPropsSchema>;\n\n/**\n * CVA variant configuration types\n * Used for class-variance-authority integration\n */\nexport type CheckboxGroupVariantType = CheckboxGroupVariant;\nexport type CheckboxGroupSizeType = CheckboxGroupSize;\nexport type CheckboxGroupOrientationType = CheckboxGroupOrientation;\n","/**\n * Class Name Utility\n * Merges Tailwind CSS classes with conflict resolution\n *\n * Combines clsx for conditional classes and tailwind-merge for deduplication\n *\n * @example\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4' (px-4 overrides px-2)\n * cn('text-red-500', condition && 'text-blue-500') // => conditional application\n */\n\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n","\"use client\";\n\n/**\n * CheckboxGroup Component\n * Accessible multi-selection checkbox group with React Aria primitives and CVA styling\n *\n * Key Features:\n * - Bordered container design with explicit 44px+ touch targets\n * - 2 variants: default, destructive (no outline per clarification)\n * - 3 sizes: sm (44px), default (48px), lg (56px)\n * - Tab moves focus between checkboxes, Space toggles (standard checkbox behavior)\n * - Error styling on ALL items (cognitive accessibility)\n * - Spring animation for checkmark indicator\n * - RTL support (indicator auto-flips)\n * - Checkbox.Label and Checkbox.Description sub-components\n * - value: string[] for multi-select (key difference from RadioGroup)\n *\n * @see checkboxgroup-prd.md (Product Requirements)\n * @see plan.md (12 Key Clarifications)\n * @see React Aria CheckboxGroup: https://react-spectrum.adobe.com/react-aria/CheckboxGroup.html\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AAA)\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n useId,\n cloneElement,\n isValidElement,\n type ReactNode,\n type ForwardedRef,\n type ReactElement,\n} from 'react';\nimport {\n CheckboxGroup as AriaCheckboxGroup,\n Checkbox as AriaCheckbox,\n Label,\n Text,\n FieldError,\n} from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { FOCUS_STYLES, HIGH_CONTRAST_FOCUS } from '../../styles/interaction-states';\nimport type {\n CheckboxGroupProps,\n CheckboxProps,\n CheckboxLabelProps,\n CheckboxDescriptionProps,\n CheckboxGroupVariant,\n CheckboxGroupSize,\n} from './CheckboxGroup.types';\n\n// ============================================================================\n// Context\n// ============================================================================\n\n/**\n * CheckboxGroup context value\n * Includes isDisabled and isReadOnly per clarification (plan.md #10)\n */\ninterface CheckboxGroupContextValue {\n variant: CheckboxGroupVariant;\n size: CheckboxGroupSize;\n isInvalid: boolean;\n isDisabled: boolean;\n isReadOnly: boolean;\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue>({\n variant: 'default',\n size: 'default',\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n});\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * CheckboxGroup container variants\n * Controls orientation and spacing (gap-2 = 8px per clarification)\n */\nconst checkboxGroupVariants = cva(\n // Base: flex container\n \"flex\",\n {\n variants: {\n orientation: {\n vertical: \"flex-col gap-2\",\n horizontal: \"flex-row flex-wrap gap-2\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n);\n\n/**\n * Checkbox item bordered container variants\n * Bordered container design with explicit touch targets\n * All sizes maintain 44px minimum height (WCAG 2.2 AAA)\n * All sizes use rounded-md (6px) per clarification\n */\nconst checkboxItemVariants = cva(\n // Base: bordered container with flex layout, RTL support\n [\n \"flex items-center gap-3 rounded-md border cursor-pointer\",\n \"transition-colors duration-200\",\n \"rtl:flex-row-reverse\", // RTL: indicator flips to right\n // Focus ring on entire container\n FOCUS_STYLES,\n HIGH_CONTRAST_FOCUS,\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: [\n \"border-[var(--border)]\",\n \"data-[hovered]:bg-[var(--accent)]/10\",\n \"data-[selected]:border-[var(--primary)]\",\n \"data-[selected]:bg-[var(--primary)]/10\",\n ].join(\" \"),\n destructive: [\n \"border-[var(--border)]\",\n \"data-[hovered]:bg-[var(--destructive)]/10\",\n \"data-[selected]:border-[var(--destructive)]\",\n \"data-[selected]:bg-[var(--destructive)]/10\",\n ].join(\" \"),\n },\n size: {\n sm: \"min-h-[44px] py-2 px-3 text-sm\",\n default: \"min-h-[48px] py-3 px-4 text-sm\",\n lg: \"min-h-[56px] py-4 px-5 text-base\",\n },\n isDisabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n isReadOnly: {\n // Subtle visual cue per clarification\n true: \"cursor-default\",\n false: \"\",\n },\n isInvalid: {\n // Error: ALL items get destructive border (cognitive accessibility)\n true: \"border-[var(--destructive)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n isDisabled: false,\n isReadOnly: false,\n isInvalid: false,\n },\n }\n);\n\n/**\n * Square indicator (checkbox box) variants\n * Uses rounded-sm (2px) for square appearance (unlike RadioGroup's circle)\n */\nconst checkboxIndicatorVariants = cva(\n // Base: square with border, flex-shrink-0 to prevent squishing\n \"flex-shrink-0 rounded-sm border-2 flex items-center justify-center transition-colors duration-200\",\n {\n variants: {\n variant: {\n default: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--primary)]\",\n \"data-[selected]:bg-[var(--primary)]\",\n ].join(\" \"),\n destructive: [\n \"border-[var(--border)]\",\n \"data-[selected]:border-[var(--destructive)]\",\n \"data-[selected]:bg-[var(--destructive)]\",\n ].join(\" \"),\n },\n size: {\n sm: \"h-4 w-4\",\n default: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n/**\n * Checkmark SVG variants\n * Spring animation: cubic-bezier(0.34, 1.56, 0.64, 1) with slight overshoot\n */\nconst checkmarkVariants = cva(\n // Base: centered checkmark with spring animation\n [\n \"transition-transform duration-200\",\n // Spring animation with overshoot\n \"[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)]\",\n // Respect reduced motion preference\n \"motion-reduce:transition-none\",\n // Scale from 0 to 1 on selection\n \"scale-0 data-[selected]:scale-100\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: \"text-[var(--primary-foreground)]\",\n destructive: \"text-[var(--destructive-foreground)]\",\n },\n size: {\n sm: \"h-3 w-3\",\n default: \"h-3.5 w-3.5\",\n lg: \"h-4 w-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\n/**\n * Checkmark SVG icon (default)\n * Used inside the checkbox indicator when selected\n */\nfunction CheckmarkIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n/**\n * Times (X) SVG icon\n * Alternative icon for destructive or exclusion selections\n * @example <Checkbox value=\"exclude\" selectedIcon={<TimesIcon />}>Exclude this item</Checkbox>\n */\nfunction TimesIcon({ className, ...props }: { className?: string; 'data-selected'?: boolean }): ReactNode {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\n/**\n * Checkbox.Label - Styled label for checkbox item content\n */\nfunction CheckboxLabel({ children, className }: CheckboxLabelProps): ReactNode {\n return (\n <span className={cn(\"font-medium text-[var(--content-foreground)]\", className)}>\n {children}\n </span>\n );\n}\n\nCheckboxLabel.displayName = \"Checkbox.Label\";\n\n/**\n * Checkbox.Description - Styled description for checkbox item content (muted)\n */\nfunction CheckboxDescription({ children, className }: CheckboxDescriptionProps): ReactNode {\n return (\n <span className={cn(\"text-sm text-[var(--menu-muted)]\", className)}>\n {children}\n </span>\n );\n}\n\nCheckboxDescription.displayName = \"Checkbox.Description\";\n\n// ============================================================================\n// Checkbox Component\n// ============================================================================\n\n/**\n * Checkbox item component with bordered container design\n */\nfunction CheckboxComponent({ value, isDisabled, children, className, selectedIcon }: CheckboxProps): ReactNode {\n const { variant, size, isInvalid, isDisabled: groupDisabled, isReadOnly } = useContext(CheckboxGroupContext);\n\n // Individual isDisabled OR group isDisabled\n const effectiveDisabled = isDisabled || groupDisabled;\n\n // Render the selected icon - use custom icon if provided, otherwise default CheckmarkIcon\n const renderSelectedIcon = (isSelected: boolean) => {\n const iconClassName = cn(checkmarkVariants({ variant, size }));\n const dataSelected = isSelected || undefined;\n\n if (selectedIcon) {\n // Clone the custom icon element to add our styling classes\n if (isValidElement(selectedIcon)) {\n const iconElement = selectedIcon as ReactElement<{ className?: string; 'data-selected'?: boolean }>;\n return cloneElement(iconElement, {\n className: cn(iconClassName, iconElement.props.className),\n 'data-selected': dataSelected,\n });\n }\n // If it's not a valid element (e.g., just text), wrap it\n return <span className={iconClassName} data-selected={dataSelected}>{selectedIcon}</span>;\n }\n\n // Default: CheckmarkIcon\n return (\n <CheckmarkIcon\n className={iconClassName}\n data-selected={dataSelected}\n />\n );\n };\n\n return (\n <AriaCheckbox\n value={value}\n isDisabled={effectiveDisabled}\n className={(renderProps) =>\n cn(\n checkboxItemVariants({\n variant,\n size,\n isDisabled: renderProps.isDisabled,\n isReadOnly,\n isInvalid,\n }),\n className\n )\n }\n >\n {(renderProps) => (\n <>\n {/* Square indicator */}\n <div\n className={checkboxIndicatorVariants({ variant, size })}\n data-selected={renderProps.isSelected || undefined}\n >\n {/* Icon with spring animation */}\n {renderSelectedIcon(renderProps.isSelected)}\n </div>\n\n {/* Children content (flexible - text, icons, complex layouts) */}\n <div className=\"flex-1 flex flex-col\">\n {children}\n </div>\n </>\n )}\n </AriaCheckbox>\n );\n}\n\n// Attach sub-components\nconst Checkbox = Object.assign(CheckboxComponent, {\n Label: CheckboxLabel,\n Description: CheckboxDescription,\n}) as typeof CheckboxComponent & {\n Label: typeof CheckboxLabel;\n Description: typeof CheckboxDescription;\n displayName: string;\n};\n\nCheckbox.displayName = \"Checkbox\";\n\n// ============================================================================\n// Duplicate Value Warning\n// ============================================================================\n\n/**\n * Deduplicates array and warns in development mode\n * Per clarification: dedupe internally + console.warn in development\n */\nfunction dedupeWithWarning(values: string[] | undefined, componentName: string): string[] | undefined {\n if (!values) return values;\n\n const uniqueValues = [...new Set(values)];\n\n if (process.env.NODE_ENV !== 'production' && uniqueValues.length !== values.length) {\n console.warn(\n `[${componentName}] Received duplicate values in value/defaultValue prop. ` +\n `Original: [${values.join(', ')}], Deduplicated: [${uniqueValues.join(', ')}]. ` +\n `Duplicate values are automatically removed.`\n );\n }\n\n return uniqueValues;\n}\n\n// ============================================================================\n// CheckboxGroup Component\n// ============================================================================\n\n/**\n * CheckboxGroup root component\n * Accessible multi-selection control with bordered container design\n */\nconst CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n function CheckboxGroup(props: CheckboxGroupProps, ref: ForwardedRef<HTMLDivElement>) {\n const {\n // Display props\n label,\n description,\n errorMessage,\n // Selection props (string[] for multi-select)\n value,\n defaultValue,\n // State props\n isDisabled = false,\n isReadOnly = false,\n isRequired = false,\n isInvalid = false,\n // Layout props\n orientation = 'vertical',\n // Variant props\n variant = 'default',\n size = 'default',\n // Form props\n name,\n // Event handlers\n onChange,\n onFocusChange,\n // Standard props\n className,\n children,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'data-testid': dataTestId,\n ...restProps\n } = props;\n\n // Generate unique IDs for accessibility\n const generatedId = useId();\n const checkboxGroupId = id ?? generatedId;\n const labelId = `${checkboxGroupId}-label`;\n const descriptionId = `${checkboxGroupId}-description`;\n const errorId = `${checkboxGroupId}-error`;\n\n // Build aria-describedby from description and error\n const describedByParts: string[] = [];\n if (ariaDescribedby) describedByParts.push(ariaDescribedby);\n if (description) describedByParts.push(descriptionId);\n if (isInvalid && errorMessage) describedByParts.push(errorId);\n const computedAriaDescribedBy = describedByParts.length > 0\n ? describedByParts.join(' ')\n : undefined;\n\n // Dedupe values with warning in development\n const dedupedValue = dedupeWithWarning(value, 'CheckboxGroup');\n const dedupedDefaultValue = dedupeWithWarning(defaultValue, 'CheckboxGroup');\n\n return (\n <CheckboxGroupContext.Provider value={{ variant, size, isInvalid, isDisabled, isReadOnly }}>\n <AriaCheckboxGroup\n ref={ref}\n id={checkboxGroupId}\n name={name}\n value={dedupedValue}\n defaultValue={dedupedDefaultValue}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n isInvalid={isInvalid}\n onChange={onChange}\n onFocusChange={onFocusChange}\n aria-label={ariaLabel}\n aria-labelledby={label ? labelId : ariaLabelledby}\n aria-describedby={computedAriaDescribedBy}\n aria-orientation={orientation}\n aria-required={isRequired || undefined}\n aria-invalid={isInvalid || undefined}\n data-testid={dataTestId}\n className={cn(\"flex flex-col gap-1.5\", className)}\n {...restProps}\n >\n {/* Label with optional required asterisk */}\n {label && (\n <Label id={labelId} className=\"text-sm font-medium text-[var(--content-foreground)]\">\n {label}\n {isRequired && (\n <span className=\"ml-1 text-[var(--destructive)]\" aria-hidden=\"true\">\n *\n </span>\n )}\n </Label>\n )}\n\n {/* Description */}\n {description && (\n <Text\n id={descriptionId}\n slot=\"description\"\n className=\"text-sm text-[var(--menu-muted)]\"\n >\n {description}\n </Text>\n )}\n\n {/* Checkbox items container with orientation */}\n <div className={checkboxGroupVariants({ orientation })}>\n {children}\n </div>\n\n {/* Error message with role=\"alert\" for screen reader announcements */}\n {isInvalid && errorMessage && (\n <FieldError\n id={errorId}\n className=\"text-sm text-[var(--destructive)]\"\n >\n <span role=\"alert\">{errorMessage}</span>\n </FieldError>\n )}\n </AriaCheckboxGroup>\n </CheckboxGroupContext.Provider>\n );\n }\n);\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n CheckboxGroup,\n Checkbox,\n checkboxGroupVariants,\n checkboxItemVariants,\n checkboxIndicatorVariants,\n checkmarkVariants,\n // Icon exports for custom selectedIcon usage\n CheckmarkIcon,\n TimesIcon,\n};\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type ReactElement } from 'react';
|
|
2
|
+
import type { ComboboxItemProps, ComboboxSectionProps } from './Combobox.types';
|
|
3
|
+
/**
|
|
4
|
+
* Combobox Component
|
|
5
|
+
*
|
|
6
|
+
* A filterable select/autocomplete component built on React Aria's ComboBox.
|
|
7
|
+
* Supports type-to-filter, keyboard navigation, and optional custom values.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Combobox label="Framework">
|
|
12
|
+
* <ComboboxItem id="react">React</ComboboxItem>
|
|
13
|
+
* <ComboboxItem id="vue">Vue</ComboboxItem>
|
|
14
|
+
* <ComboboxItem id="angular">Angular</ComboboxItem>
|
|
15
|
+
* </Combobox>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const Combobox: import("react").ForwardRefExoticComponent<{
|
|
19
|
+
size: "default" | "sm" | "lg";
|
|
20
|
+
allowsCustomValue: boolean;
|
|
21
|
+
menuTrigger: "input" | "focus" | "manual";
|
|
22
|
+
className?: string | undefined;
|
|
23
|
+
children?: any;
|
|
24
|
+
id?: string | undefined;
|
|
25
|
+
'aria-label'?: string | undefined;
|
|
26
|
+
'aria-labelledby'?: string | undefined;
|
|
27
|
+
'aria-describedby'?: string | undefined;
|
|
28
|
+
'aria-live'?: "off" | "polite" | "assertive" | undefined;
|
|
29
|
+
'aria-hidden'?: boolean | undefined;
|
|
30
|
+
'data-testid'?: string | undefined;
|
|
31
|
+
label?: string | undefined;
|
|
32
|
+
description?: string | undefined;
|
|
33
|
+
errorMessage?: string | undefined;
|
|
34
|
+
placeholder?: string | undefined;
|
|
35
|
+
isRequired?: boolean | undefined;
|
|
36
|
+
isDisabled?: boolean | undefined;
|
|
37
|
+
isReadOnly?: boolean | undefined;
|
|
38
|
+
name?: string | undefined;
|
|
39
|
+
defaultInputValue?: string | undefined;
|
|
40
|
+
inputValue?: string | undefined;
|
|
41
|
+
defaultSelectedKey?: string | number | undefined;
|
|
42
|
+
selectedKey?: string | number | null | undefined;
|
|
43
|
+
} & Omit<import("react-aria-components").ComboBoxProps<object>, "className" | "children" | "id" | "aria-label" | "aria-labelledby" | "aria-describedby" | "aria-live" | "aria-hidden" | "data-testid" | "isDisabled" | "name" | "size" | "label" | "isReadOnly" | "isRequired" | "description" | "errorMessage" | "placeholder" | "selectedKey" | "defaultSelectedKey" | "allowsCustomValue" | "menuTrigger" | "defaultInputValue" | "inputValue"> & {
|
|
44
|
+
children: import("react").ReactNode;
|
|
45
|
+
onInputChange?: (value: string) => void;
|
|
46
|
+
onSelectionChange?: (key: string | number | null) => void;
|
|
47
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
48
|
+
export declare function ComboboxItem({ children, className, textValue, ...props }: ComboboxItemProps): ReactElement;
|
|
49
|
+
export declare namespace ComboboxItem {
|
|
50
|
+
var displayName: string;
|
|
51
|
+
}
|
|
52
|
+
export declare function ComboboxSection({ header, children, className, }: ComboboxSectionProps): ReactElement;
|
|
53
|
+
export declare namespace ComboboxSection {
|
|
54
|
+
var displayName: string;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=Combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/Combobox.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAetD,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAoB1B;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAoGpB,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,SAAS,EACT,GAAG,KAAK,EACT,EAAE,iBAAiB,GAAG,YAAY,CAoBlC;yBAzBe,YAAY;;;AAiC5B,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,GAAG,YAAY,CAWrC;yBAfe,eAAe"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const comboboxVariants: (props?: ({
|
|
2
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
3
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
4
|
+
export declare const comboboxLabelVariants: (props?: ({
|
|
5
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
|
+
export declare const comboboxInputVariants: (props?: ({
|
|
8
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
export declare const comboboxTriggerWrapperVariants: (props?: ({
|
|
11
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
12
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
|
+
export declare const comboboxButtonVariants: (props?: ({
|
|
14
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
15
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
16
|
+
export declare const comboboxPopoverVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
17
|
+
export declare const comboboxListBoxVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
18
|
+
export declare const comboboxItemVariants: (props?: ({
|
|
19
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
20
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
21
|
+
export declare const comboboxSectionVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
22
|
+
export declare const comboboxSectionHeaderVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
23
|
+
export declare const comboboxDescriptionVariants: (props?: ({
|
|
24
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
25
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
26
|
+
export declare const comboboxErrorVariants: (props?: ({
|
|
27
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
28
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
29
|
+
//# sourceMappingURL=Combobox.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/Combobox.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;;8EAY5B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;8EAYjC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;8EAgBjC,CAAC;AAEF,eAAO,MAAM,8BAA8B;;8EAoB1C,CAAC;AAEF,eAAO,MAAM,sBAAsB;;8EAkBlC,CAAC;AAEF,eAAO,MAAM,uBAAuB,oFASnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,oFAEnC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;8EAmBhC,CAAC;AAEF,eAAO,MAAM,uBAAuB,oFAAc,CAAC;AAEnD,eAAO,MAAM,6BAA6B,oFAEzC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;8EAYvC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;8EAYjC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
import type { ComboBoxProps as AriaComboBoxProps } from 'react-aria-components';
|
|
4
|
+
export declare const ComboboxSizeSchema: z.ZodEnum<{
|
|
5
|
+
default: "default";
|
|
6
|
+
sm: "sm";
|
|
7
|
+
lg: "lg";
|
|
8
|
+
}>;
|
|
9
|
+
export type ComboboxSize = z.infer<typeof ComboboxSizeSchema>;
|
|
10
|
+
export declare const ComboboxPropsSchema: z.ZodObject<{
|
|
11
|
+
className: z.ZodOptional<z.ZodString>;
|
|
12
|
+
children: z.ZodOptional<z.ZodAny>;
|
|
13
|
+
id: z.ZodOptional<z.ZodString>;
|
|
14
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
15
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
16
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
17
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
18
|
+
off: "off";
|
|
19
|
+
polite: "polite";
|
|
20
|
+
assertive: "assertive";
|
|
21
|
+
}>>;
|
|
22
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
23
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
24
|
+
label: z.ZodOptional<z.ZodString>;
|
|
25
|
+
description: z.ZodOptional<z.ZodString>;
|
|
26
|
+
errorMessage: z.ZodOptional<z.ZodString>;
|
|
27
|
+
size: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
28
|
+
default: "default";
|
|
29
|
+
sm: "sm";
|
|
30
|
+
lg: "lg";
|
|
31
|
+
}>>>;
|
|
32
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
33
|
+
isRequired: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
isDisabled: z.ZodOptional<z.ZodBoolean>;
|
|
35
|
+
isReadOnly: z.ZodOptional<z.ZodBoolean>;
|
|
36
|
+
name: z.ZodOptional<z.ZodString>;
|
|
37
|
+
allowsCustomValue: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
38
|
+
menuTrigger: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
39
|
+
input: "input";
|
|
40
|
+
focus: "focus";
|
|
41
|
+
manual: "manual";
|
|
42
|
+
}>>>;
|
|
43
|
+
defaultInputValue: z.ZodOptional<z.ZodString>;
|
|
44
|
+
inputValue: z.ZodOptional<z.ZodString>;
|
|
45
|
+
defaultSelectedKey: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
46
|
+
selectedKey: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodNull]>>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
export type ComboboxProps = z.infer<typeof ComboboxPropsSchema> & Omit<AriaComboBoxProps<object>, keyof z.infer<typeof ComboboxPropsSchema>> & {
|
|
49
|
+
children: ReactNode;
|
|
50
|
+
onInputChange?: (value: string) => void;
|
|
51
|
+
onSelectionChange?: (key: string | number | null) => void;
|
|
52
|
+
};
|
|
53
|
+
export declare const ComboboxItemPropsSchema: z.ZodObject<{
|
|
54
|
+
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
55
|
+
textValue: z.ZodOptional<z.ZodString>;
|
|
56
|
+
isDisabled: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
58
|
+
className: z.ZodOptional<z.ZodString>;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
export type ComboboxItemProps = z.infer<typeof ComboboxItemPropsSchema>;
|
|
61
|
+
export declare const ComboboxSectionPropsSchema: z.ZodObject<{
|
|
62
|
+
header: z.ZodOptional<z.ZodString>;
|
|
63
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
64
|
+
className: z.ZodOptional<z.ZodString>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
export type ComboboxSectionProps = z.infer<typeof ComboboxSectionPropsSchema>;
|
|
67
|
+
//# sourceMappingURL=Combobox.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.types.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/Combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,eAAO,MAAM,kBAAkB;;;;EAAkC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6C9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAC7D,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC,GAAG;IAC3E,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3D,CAAC;AAEJ,eAAO,MAAM,uBAAuB;;;;;;iBAUlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,0BAA0B;;;;iBAMrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combobox Component Exports
|
|
3
|
+
*
|
|
4
|
+
* A filterable select/autocomplete built on React Aria ComboBox.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* import { Combobox, ComboboxItem } from '@tribepad/themis/elements/Combobox';
|
|
9
|
+
*
|
|
10
|
+
* <Combobox label="Framework" placeholder="Select a framework">
|
|
11
|
+
* <ComboboxItem id="react">React</ComboboxItem>
|
|
12
|
+
* <ComboboxItem id="vue">Vue</ComboboxItem>
|
|
13
|
+
* </Combobox>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export { Combobox, ComboboxItem, ComboboxSection } from './Combobox';
|
|
17
|
+
export type { ComboboxProps, ComboboxItemProps, ComboboxSectionProps, ComboboxSize, } from './Combobox.types';
|
|
18
|
+
export { ComboboxPropsSchema, ComboboxItemPropsSchema, ComboboxSectionPropsSchema, ComboboxSizeSchema, } from './Combobox.types';
|
|
19
|
+
export { comboboxVariants, comboboxLabelVariants, comboboxInputVariants, comboboxTriggerWrapperVariants, comboboxButtonVariants, comboboxPopoverVariants, comboboxListBoxVariants, comboboxItemVariants, comboboxSectionVariants, comboboxSectionHeaderVariants, comboboxDescriptionVariants, comboboxErrorVariants, } from './Combobox.styles';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,EAC9B,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|