@recursica/adapter-mui-v7 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/commonArgTypes.ts +148 -0
- package/ARCHITECTURE.md +18 -0
- package/CHANGELOG.md +582 -0
- package/LICENSE +21 -0
- package/OVERSTYLING.md +59 -0
- package/README.md +70 -0
- package/SETUP.md +92 -0
- package/USAGE.md +57 -0
- package/dist/adapter-mui-v7.cjs +292 -0
- package/dist/adapter-mui-v7.cjs.map +1 -0
- package/dist/adapter-mui-v7.css +1 -0
- package/dist/adapter-mui-v7.js +40757 -0
- package/dist/adapter-mui-v7.js.map +1 -0
- package/dist/index.d.ts +2350 -0
- package/dist/vite.svg +1 -0
- package/docs/PHILOSOPHY.md +39 -0
- package/llms.txt +76 -0
- package/package.json +151 -0
- package/recursica_brand.json +2677 -0
- package/recursica_tokens.json +799 -0
- package/recursica_ui-kit.json +14981 -0
- package/recursica_variables_scoped.css +30489 -0
- package/src/GlobalExemptions.modules.css +7 -0
- package/src/Introduction.stories.tsx +184 -0
- package/src/OverStyling.tsx +87 -0
- package/src/Version.tsx +37 -0
- package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +107 -0
- package/src/components/Accordion/Accordion.module.css +362 -0
- package/src/components/Accordion/Accordion.stories.tsx +198 -0
- package/src/components/Accordion/Accordion.test.tsx +1 -0
- package/src/components/Accordion/Accordion.tsx +285 -0
- package/src/components/Accordion/USAGE.md +43 -0
- package/src/components/Accordion/index.ts +1 -0
- package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +59 -0
- package/src/components/AssistiveElement/AssistiveElement.module.css +121 -0
- package/src/components/AssistiveElement/AssistiveElement.stories.tsx +68 -0
- package/src/components/AssistiveElement/AssistiveElement.test.tsx +1 -0
- package/src/components/AssistiveElement/AssistiveElement.tsx +94 -0
- package/src/components/AssistiveElement/USAGE.md +36 -0
- package/src/components/AssistiveElement/index.ts +1 -0
- package/src/components/AutoComplete/AutoComplete.module.css +456 -0
- package/src/components/AutoComplete/AutoComplete.stories.tsx +336 -0
- package/src/components/AutoComplete/AutoComplete.test.tsx +1 -0
- package/src/components/AutoComplete/AutoComplete.tsx +266 -0
- package/src/components/AutoComplete/IMPLEMENTATION_NOTES.md +37 -0
- package/src/components/AutoComplete/USAGE.md +68 -0
- package/src/components/AutoComplete/index.ts +1 -0
- package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +36 -0
- package/src/components/Avatar/Avatar.module.css +336 -0
- package/src/components/Avatar/Avatar.stories.tsx +92 -0
- package/src/components/Avatar/Avatar.test.tsx +1 -0
- package/src/components/Avatar/Avatar.tsx +88 -0
- package/src/components/Avatar/USAGE.md +38 -0
- package/src/components/Avatar/index.ts +1 -0
- package/src/components/Badge/Badge.module.css +115 -0
- package/src/components/Badge/Badge.stories.tsx +78 -0
- package/src/components/Badge/Badge.test.tsx +1 -0
- package/src/components/Badge/Badge.tsx +61 -0
- package/src/components/Badge/USAGE.md +40 -0
- package/src/components/Badge/index.ts +1 -0
- package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +51 -0
- package/src/components/Breadcrumb/Breadcrumb.module.css +51 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +114 -0
- package/src/components/Breadcrumb/Breadcrumb.test.tsx +1 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +70 -0
- package/src/components/Breadcrumb/USAGE.md +42 -0
- package/src/components/Breadcrumb/index.ts +1 -0
- package/src/components/Button/BUTTON_IMPLEMENTATION_NOTES.md +123 -0
- package/src/components/Button/Button.module.css +413 -0
- package/src/components/Button/Button.stories.tsx +196 -0
- package/src/components/Button/Button.styleIsolation.dom.test.tsx +98 -0
- package/src/components/Button/Button.tsx +156 -0
- package/src/components/Button/USAGE.md +46 -0
- package/src/components/Button/index.ts +1 -0
- package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +15 -0
- package/src/components/Card/Card.module.css +155 -0
- package/src/components/Card/Card.stories.tsx +131 -0
- package/src/components/Card/Card.test.tsx +1 -0
- package/src/components/Card/Card.tsx +202 -0
- package/src/components/Card/USAGE.md +57 -0
- package/src/components/Card/index.ts +1 -0
- package/src/components/Checkbox/CHECKBOX_IMPLEMENTATION_NOTES.md +14 -0
- package/src/components/Checkbox/Checkbox.module.css +286 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +97 -0
- package/src/components/Checkbox/Checkbox.test.tsx +1 -0
- package/src/components/Checkbox/Checkbox.tsx +259 -0
- package/src/components/Checkbox/CheckboxGroup.stories.tsx +139 -0
- package/src/components/Checkbox/CheckboxGroup.tsx +148 -0
- package/src/components/Checkbox/USAGE.md +36 -0
- package/src/components/Checkbox/index.ts +6 -0
- package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +102 -0
- package/src/components/Chip/Chip.module.css +283 -0
- package/src/components/Chip/Chip.stories.tsx +154 -0
- package/src/components/Chip/Chip.test.tsx +1 -0
- package/src/components/Chip/Chip.tsx +168 -0
- package/src/components/Chip/USAGE.md +55 -0
- package/src/components/Chip/index.ts +1 -0
- package/src/components/Container/Container.stories.tsx +118 -0
- package/src/components/Container/Container.test.tsx +1 -0
- package/src/components/Container/Container.tsx +51 -0
- package/src/components/Container/IMPLEMENTATION_NOTES.md +5 -0
- package/src/components/Container/USAGE.md +48 -0
- package/src/components/Container/index.ts +1 -0
- package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +29 -0
- package/src/components/DatePicker/DatePicker.icons.tsx +35 -0
- package/src/components/DatePicker/DatePicker.module.css +464 -0
- package/src/components/DatePicker/DatePicker.stories.tsx +163 -0
- package/src/components/DatePicker/DatePicker.test.tsx +1 -0
- package/src/components/DatePicker/DatePicker.tsx +229 -0
- package/src/components/DatePicker/USAGE.md +49 -0
- package/src/components/DatePicker/index.ts +1 -0
- package/src/components/Dropdown/BareDropdown.tsx +168 -0
- package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +45 -0
- package/src/components/Dropdown/Dropdown.icons.tsx +33 -0
- package/src/components/Dropdown/Dropdown.module.css +535 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +252 -0
- package/src/components/Dropdown/Dropdown.test.tsx +1 -0
- package/src/components/Dropdown/Dropdown.tsx +319 -0
- package/src/components/Dropdown/USAGE.md +68 -0
- package/src/components/Dropdown/index.ts +1 -0
- package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +153 -0
- package/src/components/FileInput/FileInput.module.css +268 -0
- package/src/components/FileInput/FileInput.stories.tsx +313 -0
- package/src/components/FileInput/FileInput.test.tsx +1 -0
- package/src/components/FileInput/FileInput.tsx +415 -0
- package/src/components/FileInput/USAGE.md +145 -0
- package/src/components/FileInput/index.ts +1 -0
- package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +249 -0
- package/src/components/FileUpload/FileUpload.module.css +200 -0
- package/src/components/FileUpload/FileUpload.stories.tsx +362 -0
- package/src/components/FileUpload/FileUpload.test.tsx +1 -0
- package/src/components/FileUpload/FileUpload.tsx +352 -0
- package/src/components/FileUpload/USAGE.md +199 -0
- package/src/components/FileUpload/index.ts +1 -0
- package/src/components/Flex/Flex.stories.tsx +128 -0
- package/src/components/Flex/Flex.test.tsx +1 -0
- package/src/components/Flex/Flex.tsx +89 -0
- package/src/components/Flex/USAGE.md +41 -0
- package/src/components/Flex/index.ts +1 -0
- package/src/components/FormControlLayout/FormControlLayout.module.css +92 -0
- package/src/components/FormControlLayout/FormControlLayout.stories.tsx +118 -0
- package/src/components/FormControlLayout/FormControlLayout.test.tsx +1 -0
- package/src/components/FormControlLayout/FormControlLayout.tsx +72 -0
- package/src/components/FormControlLayout/USAGE.md +40 -0
- package/src/components/FormControlLayout/index.ts +1 -0
- package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +35 -0
- package/src/components/FormControlWrapper/FormControlWrapper.module.css +87 -0
- package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +129 -0
- package/src/components/FormControlWrapper/FormControlWrapper.test.tsx +1 -0
- package/src/components/FormControlWrapper/FormControlWrapper.tsx +149 -0
- package/src/components/FormControlWrapper/USAGE.md +40 -0
- package/src/components/FormControlWrapper/index.ts +1 -0
- package/src/components/Grid/Grid.module.css +72 -0
- package/src/components/Grid/Grid.stories.tsx +161 -0
- package/src/components/Grid/Grid.test.tsx +1 -0
- package/src/components/Grid/Grid.tsx +155 -0
- package/src/components/Grid/IMPLEMENTATION_NOTES.md +24 -0
- package/src/components/Grid/USAGE.md +53 -0
- package/src/components/Grid/index.ts +1 -0
- package/src/components/Group/Group.stories.tsx +120 -0
- package/src/components/Group/Group.test.tsx +1 -0
- package/src/components/Group/Group.tsx +116 -0
- package/src/components/Group/USAGE.md +41 -0
- package/src/components/Group/index.ts +1 -0
- package/src/components/Heading/Heading.stories.tsx +50 -0
- package/src/components/Heading/Heading.test.tsx +1 -0
- package/src/components/Heading/Heading.tsx +28 -0
- package/src/components/Heading/USAGE.md +36 -0
- package/src/components/Heading/index.ts +1 -0
- package/src/components/HoverCard/HoverCard.module.css +107 -0
- package/src/components/HoverCard/HoverCard.stories.tsx +172 -0
- package/src/components/HoverCard/HoverCard.test.tsx +1 -0
- package/src/components/HoverCard/HoverCard.tsx +145 -0
- package/src/components/HoverCard/USAGE.md +45 -0
- package/src/components/HoverCard/index.ts +1 -0
- package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +27 -0
- package/src/components/Label/Label.module.css +169 -0
- package/src/components/Label/Label.stories.tsx +131 -0
- package/src/components/Label/Label.test.tsx +1 -0
- package/src/components/Label/Label.tsx +96 -0
- package/src/components/Label/USAGE.md +36 -0
- package/src/components/Label/index.ts +1 -0
- package/src/components/Layer/USAGE.md +50 -0
- package/src/components/Link/LINK_IMPLEMENTATION_NOTES.md +9 -0
- package/src/components/Link/Link.module.css +105 -0
- package/src/components/Link/Link.stories.tsx +58 -0
- package/src/components/Link/Link.test.tsx +1 -0
- package/src/components/Link/Link.tsx +45 -0
- package/src/components/Link/USAGE.md +40 -0
- package/src/components/Link/index.ts +1 -0
- package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +25 -0
- package/src/components/Loader/Loader.animate.dom.test.tsx +72 -0
- package/src/components/Loader/Loader.module.css +175 -0
- package/src/components/Loader/Loader.stories.tsx +123 -0
- package/src/components/Loader/Loader.test.tsx +1 -0
- package/src/components/Loader/Loader.tsx +72 -0
- package/src/components/Loader/USAGE.md +42 -0
- package/src/components/Loader/index.ts +1 -0
- package/src/components/Menu/IMPLEMENTATION_NOTES.md +5 -0
- package/src/components/Menu/Menu.module.css +283 -0
- package/src/components/Menu/Menu.stories.tsx +405 -0
- package/src/components/Menu/Menu.test.tsx +1 -0
- package/src/components/Menu/Menu.tsx +103 -0
- package/src/components/Menu/USAGE.md +53 -0
- package/src/components/Menu/index.ts +1 -0
- package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +31 -0
- package/src/components/Modal/Modal.module.css +302 -0
- package/src/components/Modal/Modal.stories.tsx +105 -0
- package/src/components/Modal/Modal.test.tsx +1 -0
- package/src/components/Modal/Modal.tsx +231 -0
- package/src/components/Modal/USAGE.md +40 -0
- package/src/components/Modal/index.ts +1 -0
- package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +93 -0
- package/src/components/NumberInput/NumberInput.module.css +303 -0
- package/src/components/NumberInput/NumberInput.stories.tsx +96 -0
- package/src/components/NumberInput/NumberInput.test.tsx +1 -0
- package/src/components/NumberInput/NumberInput.tsx +273 -0
- package/src/components/NumberInput/USAGE.md +36 -0
- package/src/components/NumberInput/index.ts +1 -0
- package/src/components/Pagination/IMPLEMENTATION_NOTES.md +40 -0
- package/src/components/Pagination/Pagination.icons.tsx +66 -0
- package/src/components/Pagination/Pagination.module.css +197 -0
- package/src/components/Pagination/Pagination.stories.tsx +48 -0
- package/src/components/Pagination/Pagination.test.tsx +1 -0
- package/src/components/Pagination/Pagination.tsx +123 -0
- package/src/components/Pagination/USAGE.md +36 -0
- package/src/components/Pagination/index.ts +1 -0
- package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +133 -0
- package/src/components/Panel/Panel.module.css +231 -0
- package/src/components/Panel/Panel.stories.tsx +227 -0
- package/src/components/Panel/Panel.test.tsx +1 -0
- package/src/components/Panel/Panel.tsx +186 -0
- package/src/components/Panel/USAGE.md +46 -0
- package/src/components/Panel/index.ts +1 -0
- package/src/components/Popover/IMPLEMENTATION_NOTES.md +22 -0
- package/src/components/Popover/Popover.module.css +118 -0
- package/src/components/Popover/Popover.stories.tsx +133 -0
- package/src/components/Popover/Popover.test.tsx +1 -0
- package/src/components/Popover/Popover.tsx +267 -0
- package/src/components/Popover/USAGE.md +69 -0
- package/src/components/Popover/index.ts +1 -0
- package/src/components/Radio/RADIO_IMPLEMENTATION_NOTES.md +12 -0
- package/src/components/Radio/Radio.module.css +247 -0
- package/src/components/Radio/Radio.stories.tsx +93 -0
- package/src/components/Radio/Radio.test.tsx +1 -0
- package/src/components/Radio/Radio.tsx +223 -0
- package/src/components/Radio/RadioGroup.stories.tsx +117 -0
- package/src/components/Radio/RadioGroup.tsx +122 -0
- package/src/components/Radio/USAGE.md +36 -0
- package/src/components/Radio/index.ts +2 -0
- package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
- package/src/components/ReadOnlyField/ReadOnlyField.module.css +54 -0
- package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +163 -0
- package/src/components/ReadOnlyField/ReadOnlyField.test.tsx +1 -0
- package/src/components/ReadOnlyField/ReadOnlyField.tsx +108 -0
- package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
- package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
- package/src/components/ReadOnlyField/USAGE.md +36 -0
- package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
- package/src/components/ReadOnlyField/index.ts +2 -0
- package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
- package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +14 -0
- package/src/components/SegmentedControl/SegmentedControl.module.css +201 -0
- package/src/components/SegmentedControl/SegmentedControl.stories.tsx +106 -0
- package/src/components/SegmentedControl/SegmentedControl.test.tsx +1 -0
- package/src/components/SegmentedControl/SegmentedControl.tsx +149 -0
- package/src/components/SegmentedControl/USAGE.md +49 -0
- package/src/components/SegmentedControl/index.ts +1 -0
- package/src/components/Slider/IMPLEMENTATION_NOTES.md +55 -0
- package/src/components/Slider/Slider.module.css +635 -0
- package/src/components/Slider/Slider.stories.tsx +282 -0
- package/src/components/Slider/Slider.test.tsx +1 -0
- package/src/components/Slider/Slider.tsx +435 -0
- package/src/components/Slider/USAGE.md +56 -0
- package/src/components/Slider/index.ts +1 -0
- package/src/components/Stack/Stack.stories.tsx +108 -0
- package/src/components/Stack/Stack.test.tsx +1 -0
- package/src/components/Stack/Stack.tsx +43 -0
- package/src/components/Stack/USAGE.md +41 -0
- package/src/components/Stack/index.ts +1 -0
- package/src/components/Stepper/IMPLEMENTATION_NOTES.md +120 -0
- package/src/components/Stepper/Stepper.module.css +474 -0
- package/src/components/Stepper/Stepper.stories.tsx +157 -0
- package/src/components/Stepper/Stepper.test.tsx +1 -0
- package/src/components/Stepper/Stepper.tsx +240 -0
- package/src/components/Stepper/USAGE.md +45 -0
- package/src/components/Stepper/index.ts +1 -0
- package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +147 -0
- package/src/components/Switch/Switch.module.css +346 -0
- package/src/components/Switch/Switch.stories.tsx +114 -0
- package/src/components/Switch/Switch.test.tsx +1 -0
- package/src/components/Switch/Switch.tsx +294 -0
- package/src/components/Switch/SwitchGroup.stories.tsx +132 -0
- package/src/components/Switch/SwitchGroup.tsx +156 -0
- package/src/components/Switch/USAGE.md +36 -0
- package/src/components/Switch/index.ts +2 -0
- package/src/components/Table/TABLE_IMPLEMENTATION_NOTES.md +75 -0
- package/src/components/Table/Table.module.css +462 -0
- package/src/components/Table/Table.stories.tsx +154 -0
- package/src/components/Table/Table.test.tsx +1 -0
- package/src/components/Table/Table.tsx +250 -0
- package/src/components/Table/USAGE.md +90 -0
- package/src/components/Table/index.ts +1 -0
- package/src/components/Tabs/IMPLEMENTATION_NOTES.md +76 -0
- package/src/components/Tabs/Tabs.module.css +801 -0
- package/src/components/Tabs/Tabs.stories.tsx +174 -0
- package/src/components/Tabs/Tabs.test.tsx +1 -0
- package/src/components/Tabs/Tabs.tsx +103 -0
- package/src/components/Tabs/USAGE.md +61 -0
- package/src/components/Tabs/index.ts +1 -0
- package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +10 -0
- package/src/components/Text/Text.stories.tsx +75 -0
- package/src/components/Text/Text.test.tsx +1 -0
- package/src/components/Text/Text.tsx +19 -0
- package/src/components/Text/USAGE.md +40 -0
- package/src/components/Text/index.ts +1 -0
- package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +42 -0
- package/src/components/TextArea/TextArea.module.css +203 -0
- package/src/components/TextArea/TextArea.stories.tsx +94 -0
- package/src/components/TextArea/TextArea.test.tsx +1 -0
- package/src/components/TextArea/TextArea.tsx +162 -0
- package/src/components/TextArea/USAGE.md +38 -0
- package/src/components/TextArea/index.ts +1 -0
- package/src/components/TextField/TextField.module.css +271 -0
- package/src/components/TextField/TextField.stories.tsx +162 -0
- package/src/components/TextField/TextField.test.tsx +1 -0
- package/src/components/TextField/TextField.tsx +182 -0
- package/src/components/TextField/USAGE.md +38 -0
- package/src/components/TextField/index.ts +1 -0
- package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +89 -0
- package/src/components/TimePicker/TimePicker.module.css +262 -0
- package/src/components/TimePicker/TimePicker.stories.tsx +155 -0
- package/src/components/TimePicker/TimePicker.test.tsx +1 -0
- package/src/components/TimePicker/TimePicker.tsx +277 -0
- package/src/components/TimePicker/USAGE.md +61 -0
- package/src/components/TimePicker/index.ts +1 -0
- package/src/components/Timeline/IMPLEMENTATION_NOTES.md +42 -0
- package/src/components/Timeline/Timeline.module.css +363 -0
- package/src/components/Timeline/Timeline.stories.tsx +128 -0
- package/src/components/Timeline/Timeline.test.tsx +1 -0
- package/src/components/Timeline/Timeline.tsx +90 -0
- package/src/components/Timeline/TimelineItem.tsx +95 -0
- package/src/components/Timeline/USAGE.md +41 -0
- package/src/components/Timeline/index.ts +2 -0
- package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +37 -0
- package/src/components/Toast/Toast.module.css +193 -0
- package/src/components/Toast/Toast.stories.tsx +67 -0
- package/src/components/Toast/Toast.test.tsx +1 -0
- package/src/components/Toast/Toast.tsx +121 -0
- package/src/components/Toast/USAGE.md +42 -0
- package/src/components/Toast/index.ts +1 -0
- package/src/components/Tooltip/Tooltip.module.css +83 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +165 -0
- package/src/components/Tooltip/Tooltip.test.tsx +1 -0
- package/src/components/Tooltip/Tooltip.tsx +78 -0
- package/src/components/Tooltip/USAGE.md +40 -0
- package/src/components/Tooltip/index.ts +1 -0
- package/src/components/TransferList/TRANSFERLIST_IMPLEMENTATION_NOTES.md +140 -0
- package/src/components/TransferList/TransferList.module.css +174 -0
- package/src/components/TransferList/TransferList.stories.tsx +121 -0
- package/src/components/TransferList/TransferList.test.tsx +1 -0
- package/src/components/TransferList/TransferList.tsx +419 -0
- package/src/components/TransferList/USAGE.md +77 -0
- package/src/components/TransferList/index.ts +1 -0
- package/src/components/Tree/IMPLEMENTATION_NOTES.md +53 -0
- package/src/components/Tree/Tree.module.css +272 -0
- package/src/components/Tree/Tree.stories.tsx +104 -0
- package/src/components/Tree/Tree.test.tsx +1 -0
- package/src/components/Tree/Tree.tsx +298 -0
- package/src/components/Tree/USAGE.md +99 -0
- package/src/components/Tree/index.ts +1 -0
- package/src/components/Typography/TYPOGRAPHY_IMPLEMENTATION_NOTES.md +17 -0
- package/src/components/Typography/Typography.module.css +13 -0
- package/src/components/Typography/Typography.test.tsx +1 -0
- package/src/components/Typography/Typography.tsx +43 -0
- package/src/components/Typography/USAGE.md +40 -0
- package/src/components/Typography/index.ts +1 -0
- package/src/components/index.ts +50 -0
- package/src/env.d.ts +7 -0
- package/src/index.ts +194 -0
- package/src/types/index.ts +9 -0
- package/src/types/scss-modules.d.ts +9 -0
- package/src/utils/ColorSchemeWrapper.tsx +23 -0
- package/src/utils/RequireAccessibleLabel.ts +1 -0
- package/src/utils/copyToClipboard.ts +36 -0
- package/src/utils/filterStylingProps.test.ts +85 -0
- package/src/utils/filterStylingProps.ts +143 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/renderRichOption.tsx +51 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
|
|
2
|
+
* Global hover/focus/disabled state tokens (recursica_variables_scoped.css header, 'Hover & Focus states' / 'Disabled state' — implicit rule for every interactive element; components must not define their own per-component treatment).
|
|
3
|
+
* recursica-allow-brand: --recursica_brand_states_focus_blur
|
|
4
|
+
* recursica-allow-brand: --recursica_brand_states_focus_border-size
|
|
5
|
+
* recursica-allow-brand: --recursica_brand_states_focus_color
|
|
6
|
+
* recursica-allow-brand: --recursica_brand_states_focus_margin
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* HARDCODED VALUES
|
|
10
|
+
*
|
|
11
|
+
* 1. track border: none; (we do not use border for the switch track)
|
|
12
|
+
* 2. thumb border: none; (we do not use border for the thumb)
|
|
13
|
+
* 3. .switchBase background-color: transparent; (cancels MUI's built-in primary-color
|
|
14
|
+
* hover/focus circle so only our tokens and our own explicit focus ring show — see
|
|
15
|
+
* SWITCH_IMPLEMENTATION_NOTES.md #5)
|
|
16
|
+
* 4. .track opacity: 1; (cancels MUI's own always-on track opacity — 0.38 unchecked, 0.5
|
|
17
|
+
* checked, both MUI defaults with no equivalent in our tokens; our disabled-state opacity
|
|
18
|
+
* rules below are the only intended dimming)
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
.root {
|
|
22
|
+
/* Provide a stable cursor when not disabled */
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.root:has(input:disabled) {
|
|
27
|
+
cursor: not-allowed;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Sizes MUI's actual switch root span (mapped via classes.root — MUI requires that exact key,
|
|
31
|
+
but the class name it points to is ours). Kept separate from .root above: when a label is
|
|
32
|
+
present, .root is applied to *this component's own outer wrapper div* (switch + label side
|
|
33
|
+
by side), not to the switch itself — giving both the same box-model rules would squeeze that
|
|
34
|
+
wrapper (and the label inside it) down to the track's own width. See
|
|
35
|
+
SWITCH_IMPLEMENTATION_NOTES.md #5. */
|
|
36
|
+
.switchRoot {
|
|
37
|
+
/* Cancel MUI's own hardcoded root box (width: 58px, height: 38px, padding: 12px,
|
|
38
|
+
overflow: hidden for the medium size) — without this the track/thumb tokens below get
|
|
39
|
+
clipped/shrunk to MUI's default geometry instead of driving the real size. */
|
|
40
|
+
width: var(--recursica_ui-kit_components_switch_properties_track-width);
|
|
41
|
+
height: calc(
|
|
42
|
+
var(--recursica_ui-kit_components_switch_properties_thumb-height) +
|
|
43
|
+
(
|
|
44
|
+
var(
|
|
45
|
+
--recursica_ui-kit_components_switch_properties_track-inner-padding
|
|
46
|
+
) *
|
|
47
|
+
2
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
padding: 0;
|
|
51
|
+
overflow: visible;
|
|
52
|
+
|
|
53
|
+
--switch-track-padding: var(
|
|
54
|
+
--recursica_ui-kit_components_switch_properties_track-inner-padding
|
|
55
|
+
);
|
|
56
|
+
--switch-thumb-width: var(
|
|
57
|
+
--recursica_ui-kit_components_switch_properties_thumb-width
|
|
58
|
+
);
|
|
59
|
+
--switch-thumb-height: var(
|
|
60
|
+
--recursica_ui-kit_components_switch_properties_thumb-height
|
|
61
|
+
);
|
|
62
|
+
--switch-track-width: var(
|
|
63
|
+
--recursica_ui-kit_components_switch_properties_track-width
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Track/thumb dim per selection state; label dims via its own (single, state-agnostic) token */
|
|
68
|
+
/* In mantine-adapter, .thumb nests inside .track, so dimming .track's opacity visually dims
|
|
69
|
+
the thumb too "for free". MUI's DOM has .track and .thumb as siblings (documented
|
|
70
|
+
structural difference, see SWITCH_IMPLEMENTATION_NOTES.md), so the same selector only dimmed
|
|
71
|
+
the track — the thumb stayed at full color/opacity. Each selector targets both explicitly. */
|
|
72
|
+
.root:has(input:checked:disabled) .track,
|
|
73
|
+
.root:has(input:checked:disabled) .thumb {
|
|
74
|
+
opacity: var(
|
|
75
|
+
--recursica_ui-kit_components_switch_variants_selection-states_selected_variants_states_disabled_properties_opacity
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
.root:has(input:disabled):not(:has(input:checked)) .track,
|
|
79
|
+
.root:has(input:disabled):not(:has(input:checked)) .thumb {
|
|
80
|
+
opacity: var(
|
|
81
|
+
--recursica_ui-kit_components_switch_variants_selection-states_unselected_variants_states_disabled_properties_opacity
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.body {
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
gap: var(--recursica_ui-kit_components_switch-item_properties_label-gap);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* HARDCODE: disable native hover color transitions applied by Mantine */
|
|
92
|
+
.track:hover {
|
|
93
|
+
background-color: var(
|
|
94
|
+
--recursica_ui-kit_components_switch_variants_selection-states_unselected_properties_colors_track-color
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
.root:has(input:checked) .track:hover {
|
|
98
|
+
background-color: var(
|
|
99
|
+
--recursica_ui-kit_components_switch_variants_selection-states_selected_properties_colors_track-color
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.track {
|
|
104
|
+
width: var(--switch-track-width);
|
|
105
|
+
height: calc(var(--switch-thumb-height) + (var(--switch-track-padding) * 2));
|
|
106
|
+
border-radius: var(
|
|
107
|
+
--recursica_ui-kit_components_switch_properties_track-border-radius
|
|
108
|
+
);
|
|
109
|
+
background-color: var(
|
|
110
|
+
--recursica_ui-kit_components_switch_variants_selection-states_unselected_properties_colors_track-color
|
|
111
|
+
);
|
|
112
|
+
box-shadow: var(
|
|
113
|
+
--recursica_ui-kit_components_switch_properties_track-elevation
|
|
114
|
+
);
|
|
115
|
+
border: none; /* HARDCODE */
|
|
116
|
+
opacity: 1; /* HARDCODE */
|
|
117
|
+
box-sizing: border-box;
|
|
118
|
+
transition: background-color 150ms ease;
|
|
119
|
+
cursor: inherit;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.root:has(input:checked) .track {
|
|
123
|
+
background-color: var(
|
|
124
|
+
--recursica_ui-kit_components_switch_variants_selection-states_selected_properties_colors_track-color
|
|
125
|
+
);
|
|
126
|
+
border-color: transparent;
|
|
127
|
+
/* HARDCODE #4: MUI's own checked-state selector (`.Mui-checked + .track { opacity: 0.5 }`)
|
|
128
|
+
is more specific than the base .track rule above, so it still wins there — needs its own
|
|
129
|
+
override here too. */
|
|
130
|
+
opacity: 1;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Positions/sizes the thumb's clickable hit area (MUI's internal SwitchBase). MUI's own
|
|
134
|
+
defaults here (padding: 9px; top/left: 0) are calibrated for its own hardcoded 20px thumb
|
|
135
|
+
and 58x38 root — meaningless against our tokens, so every dimension is replaced. The thumb
|
|
136
|
+
itself (the visible circle) renders as this element's only child, sized by .thumb below;
|
|
137
|
+
with padding: 0 and matching width/height, .switchBase and .thumb become the same box, so
|
|
138
|
+
the thumb sits flush inside the track's own inner padding. See
|
|
139
|
+
SWITCH_IMPLEMENTATION_NOTES.md #5. */
|
|
140
|
+
.switchBase {
|
|
141
|
+
top: var(--switch-track-padding);
|
|
142
|
+
left: var(--switch-track-padding);
|
|
143
|
+
width: var(--switch-thumb-width);
|
|
144
|
+
height: var(--switch-thumb-height);
|
|
145
|
+
padding: 0;
|
|
146
|
+
box-sizing: border-box;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.switchBase:hover,
|
|
150
|
+
.switchBase:global(.Mui-focusVisible) {
|
|
151
|
+
background-color: transparent; /* HARDCODE */
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* Focus ring reads on the whole visible track (the pill), not the thumb's small 20x20 hit-area
|
|
155
|
+
circle .switchBase actually is — .switchBase and .track are siblings under .switchRoot (in
|
|
156
|
+
that DOM order), so the ring is drawn on .track via the general sibling combinator when the
|
|
157
|
+
hit area is focus-visible. */
|
|
158
|
+
.switchBase:global(.Mui-focusVisible) ~ .track {
|
|
159
|
+
outline: var(--recursica_brand_states_focus_border-size) solid
|
|
160
|
+
var(--recursica_brand_states_focus_color);
|
|
161
|
+
outline-offset: var(--recursica_brand_states_focus_margin);
|
|
162
|
+
box-shadow: 0 0 var(--recursica_brand_states_focus_blur)
|
|
163
|
+
var(--recursica_brand_states_focus_color);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Moves the thumb from resting-left to resting-right. MUI hardcodes this same transform to
|
|
167
|
+
translateX(20px) for its own default thumb; ours is calculated from our tokens instead —
|
|
168
|
+
the exact distance between the thumb's checked and unchecked resting positions inside the
|
|
169
|
+
track's inner padding. .Mui-checked is MUI's own global state class (not a CSS Modules
|
|
170
|
+
local class), so it must be wrapped in :global() — same as Accordion's .Mui-expanded and
|
|
171
|
+
Button's .Mui-disabled — or the build hashes/scopes it into a name that never matches the
|
|
172
|
+
real DOM. */
|
|
173
|
+
.switchBase:global(.Mui-checked) {
|
|
174
|
+
transform: translateX(
|
|
175
|
+
calc(
|
|
176
|
+
var(--switch-track-width) - var(--switch-thumb-width) -
|
|
177
|
+
(var(--switch-track-padding) * 2)
|
|
178
|
+
)
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.thumb {
|
|
183
|
+
width: var(--switch-thumb-width);
|
|
184
|
+
height: var(--switch-thumb-height);
|
|
185
|
+
border-radius: var(
|
|
186
|
+
--recursica_ui-kit_components_switch_properties_thumb-border-radius
|
|
187
|
+
);
|
|
188
|
+
background-color: var(
|
|
189
|
+
--recursica_ui-kit_components_switch_variants_selection-states_unselected_properties_colors_thumb-color
|
|
190
|
+
);
|
|
191
|
+
box-shadow: var(
|
|
192
|
+
--recursica_ui-kit_components_switch_properties_thumb-elevation
|
|
193
|
+
);
|
|
194
|
+
border: none; /* HARDCODE */
|
|
195
|
+
|
|
196
|
+
transition: background-color 150ms ease;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.root:has(input:checked) .thumb {
|
|
200
|
+
background-color: var(
|
|
201
|
+
--recursica_ui-kit_components_switch_variants_selection-states_selected_properties_colors_thumb-color
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.thumbIconWrapper {
|
|
206
|
+
display: flex;
|
|
207
|
+
align-items: center;
|
|
208
|
+
justify-content: center;
|
|
209
|
+
width: 100%;
|
|
210
|
+
height: 100%;
|
|
211
|
+
position: relative;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.checkIcon,
|
|
215
|
+
.closeIcon {
|
|
216
|
+
width: var(--recursica_ui-kit_components_switch_properties_thumb-icon-size);
|
|
217
|
+
height: var(--recursica_ui-kit_components_switch_properties_thumb-icon-size);
|
|
218
|
+
position: absolute;
|
|
219
|
+
transition:
|
|
220
|
+
opacity 150ms ease,
|
|
221
|
+
transform 150ms ease;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* Unchecked state */
|
|
225
|
+
.checkIcon {
|
|
226
|
+
opacity: 0;
|
|
227
|
+
transform: scale(0.5);
|
|
228
|
+
color: var(
|
|
229
|
+
--recursica_ui-kit_components_switch_variants_selection-states_selected_properties_colors_icon-color
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.closeIcon {
|
|
234
|
+
opacity: 1;
|
|
235
|
+
transform: scale(1);
|
|
236
|
+
color: var(
|
|
237
|
+
--recursica_ui-kit_components_switch_variants_selection-states_unselected_properties_colors_icon-color
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* Checked state — same :has() scoping already used for track/thumb color above; .thumb isn't
|
|
242
|
+
a sibling of input here (MUI nests both under switchBase), but :has() only needs input:checked
|
|
243
|
+
to be a descendant of .root, so this still scopes correctly. */
|
|
244
|
+
.root:has(input:checked) .thumb .checkIcon {
|
|
245
|
+
opacity: 1;
|
|
246
|
+
transform: scale(1);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.root:has(input:checked) .thumb .closeIcon {
|
|
250
|
+
opacity: 0;
|
|
251
|
+
transform: scale(0.5);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.labelWrapper {
|
|
255
|
+
display: flex;
|
|
256
|
+
flex-direction: column;
|
|
257
|
+
max-width: var(
|
|
258
|
+
--recursica_ui-kit_components_switch-item_properties_label-max-width
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
.root:has(input:disabled) .labelWrapper {
|
|
262
|
+
opacity: var(
|
|
263
|
+
--recursica_ui-kit_components_switch-item_variants_states_disabled_properties_opacity
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.label {
|
|
268
|
+
font-family: var(
|
|
269
|
+
--recursica_ui-kit_components_switch-item_properties_text_font-family
|
|
270
|
+
);
|
|
271
|
+
font-size: var(
|
|
272
|
+
--recursica_ui-kit_components_switch-item_properties_text_font-size
|
|
273
|
+
);
|
|
274
|
+
font-weight: var(
|
|
275
|
+
--recursica_ui-kit_components_switch-item_properties_text_font-weight
|
|
276
|
+
);
|
|
277
|
+
font-style: var(
|
|
278
|
+
--recursica_ui-kit_components_switch-item_properties_text_font-style
|
|
279
|
+
);
|
|
280
|
+
line-height: var(
|
|
281
|
+
--recursica_ui-kit_components_switch-item_properties_text_line-height
|
|
282
|
+
);
|
|
283
|
+
letter-spacing: var(
|
|
284
|
+
--recursica_ui-kit_components_switch-item_properties_text_letter-spacing
|
|
285
|
+
);
|
|
286
|
+
text-transform: var(
|
|
287
|
+
--recursica_ui-kit_components_switch-item_properties_text_text-transform
|
|
288
|
+
);
|
|
289
|
+
text-decoration: var(
|
|
290
|
+
--recursica_ui-kit_components_switch-item_properties_text_text-decoration
|
|
291
|
+
);
|
|
292
|
+
color: var(
|
|
293
|
+
--recursica_ui-kit_components_switch-item_properties_colors_text-color
|
|
294
|
+
);
|
|
295
|
+
cursor: inherit;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.root:has(input:disabled) .label {
|
|
299
|
+
color: var(
|
|
300
|
+
--recursica_ui-kit_components_switch-item_properties_colors_disabled-text
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* description/error text renders via AssistiveElement directly (see Switch.tsx) —
|
|
305
|
+
it owns its own tokenized styling. AssistiveElement has no disabled state and
|
|
306
|
+
must never dim. */
|
|
307
|
+
|
|
308
|
+
/* --- GROUP STYLES --- */
|
|
309
|
+
.groupRoot {
|
|
310
|
+
display: flex;
|
|
311
|
+
flex-direction: column;
|
|
312
|
+
align-items: flex-start;
|
|
313
|
+
padding: var(--recursica_ui-kit_components_switch-group_properties_padding);
|
|
314
|
+
gap: var(--recursica_ui-kit_components_switch-group_properties_item-gap);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* SideBySide Variant */
|
|
318
|
+
.groupRoot[data-layout="side-by-side"] {
|
|
319
|
+
flex-direction: column;
|
|
320
|
+
gap: var(
|
|
321
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_side-by-side_properties_gutter
|
|
322
|
+
);
|
|
323
|
+
padding-top: var(
|
|
324
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_side-by-side_properties_vertical-padding
|
|
325
|
+
);
|
|
326
|
+
padding-bottom: var(
|
|
327
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_side-by-side_properties_vertical-padding
|
|
328
|
+
);
|
|
329
|
+
margin-top: var(
|
|
330
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_side-by-side_properties_top-bottom-margin
|
|
331
|
+
);
|
|
332
|
+
margin-bottom: var(
|
|
333
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_side-by-side_properties_top-bottom-margin
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* Stacked Variant */
|
|
338
|
+
.groupRoot[data-layout="stacked"] {
|
|
339
|
+
flex-direction: column;
|
|
340
|
+
margin-top: var(
|
|
341
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_stacked_properties_label-field-gap
|
|
342
|
+
);
|
|
343
|
+
margin-bottom: var(
|
|
344
|
+
--recursica_ui-kit_components_switch-group_variants_layouts_stacked_properties_top-bottom-margin
|
|
345
|
+
);
|
|
346
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { Switch } from "./Switch";
|
|
3
|
+
import { Stack } from "../Stack/Stack";
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof Switch> = {
|
|
6
|
+
title: "UI-Kit/Switch",
|
|
7
|
+
component: Switch,
|
|
8
|
+
tags: ["autodocs"],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: `
|
|
13
|
+
The \`Switch\` component is an atomic form primitive representing boolean states, natively aligned to the Recursica design system.
|
|
14
|
+
|
|
15
|
+
> [!IMPORTANT]
|
|
16
|
+
> Unlike \`Checkbox\`, the \`Switch\` is typically used for standalone settings toggles. It fully supports the universal \`ReadOnlyField\` boundaries when passed the \`readOnly\` attribute.
|
|
17
|
+
|
|
18
|
+
### Usage
|
|
19
|
+
To render a standard switch:
|
|
20
|
+
\`\`\`tsx
|
|
21
|
+
<Switch label="Enable Notifications" defaultChecked />
|
|
22
|
+
\`\`\`
|
|
23
|
+
`,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
argTypes: {
|
|
28
|
+
checked: {
|
|
29
|
+
control: "boolean",
|
|
30
|
+
},
|
|
31
|
+
disabled: {
|
|
32
|
+
control: "boolean",
|
|
33
|
+
},
|
|
34
|
+
required: {
|
|
35
|
+
control: "boolean",
|
|
36
|
+
},
|
|
37
|
+
error: {
|
|
38
|
+
control: "boolean",
|
|
39
|
+
},
|
|
40
|
+
defaultChecked: {
|
|
41
|
+
control: "boolean",
|
|
42
|
+
},
|
|
43
|
+
readOnly: {
|
|
44
|
+
control: "boolean",
|
|
45
|
+
description:
|
|
46
|
+
"Toggles structural read-only data presentation bypassing interaction boundaries completely.",
|
|
47
|
+
},
|
|
48
|
+
controlMaxWidth: { table: { disable: true } },
|
|
49
|
+
controlMinWidth: { table: { disable: true } },
|
|
50
|
+
emptyValueComponent: { table: { disable: true } },
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default meta;
|
|
55
|
+
|
|
56
|
+
type Story = StoryObj<typeof Switch>;
|
|
57
|
+
|
|
58
|
+
export const Default: Story = {
|
|
59
|
+
args: {
|
|
60
|
+
disabled: false,
|
|
61
|
+
label: "Standard Switch",
|
|
62
|
+
},
|
|
63
|
+
// We explicitly destructure global Storybook injected arguments so they do not leak into the DOM natively.
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
65
|
+
render: ({ withLayer, layer, ...args }: any) => <Switch {...args} />,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const SideBySideLayout: Story = {
|
|
69
|
+
args: {
|
|
70
|
+
label: "Opt-in form alignment",
|
|
71
|
+
formLayout: "side-by-side",
|
|
72
|
+
},
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
74
|
+
render: ({ withLayer, layer, ...args }: any) => <Switch {...args} />,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const StaticVariations: Story = {
|
|
78
|
+
args: {},
|
|
79
|
+
render: () => (
|
|
80
|
+
<Stack spacing="rec-xl">
|
|
81
|
+
<Switch label="Default Unchecked State" />
|
|
82
|
+
<Switch label="Checked State" defaultChecked />
|
|
83
|
+
<Switch label="Disabled Unchecked" disabled />
|
|
84
|
+
<Switch label="Disabled Checked" defaultChecked disabled />
|
|
85
|
+
</Stack>
|
|
86
|
+
),
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const ReadOnly: Story = {
|
|
90
|
+
args: {
|
|
91
|
+
...Default.args,
|
|
92
|
+
readOnly: true,
|
|
93
|
+
},
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
95
|
+
render: ({ withLayer, layer, ...args }: any) => <Switch {...args} />,
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export const CustomReadOnly: Story = {
|
|
99
|
+
args: {
|
|
100
|
+
...Default.args,
|
|
101
|
+
readOnly: true,
|
|
102
|
+
},
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
104
|
+
render: ({ withLayer, layer, ...args }: any) => (
|
|
105
|
+
<Switch
|
|
106
|
+
{...args}
|
|
107
|
+
readOnlyComponent={({ checked, label }) => (
|
|
108
|
+
<span style={{ fontWeight: "bold", color: checked ? "green" : "red" }}>
|
|
109
|
+
{label} {checked ? "ENABLED" : "DISABLED"}
|
|
110
|
+
</span>
|
|
111
|
+
)}
|
|
112
|
+
/>
|
|
113
|
+
),
|
|
114
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// Placeholder for future Switch component tests. Add tests here if/when needed.
|