@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,41 @@
|
|
|
1
|
+
# Timeline - Usage Guide
|
|
2
|
+
|
|
3
|
+
This document describes how to integrate and use the `Timeline` component in your projects using `@recursica/adapter-mui-v7`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Import Reference
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Timeline } from "@recursica/adapter-mui-v7";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Basic Example
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import React from "react";
|
|
19
|
+
import { Timeline } from "@recursica/adapter-mui-v7";
|
|
20
|
+
|
|
21
|
+
export default function Demo() {
|
|
22
|
+
return (
|
|
23
|
+
<Timeline active={1}>
|
|
24
|
+
<Timeline.Item title="Step 1">Created branch</Timeline.Item>
|
|
25
|
+
<Timeline.Item title="Step 2">Pushed changes</Timeline.Item>
|
|
26
|
+
</Timeline>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 3. Design System Integration
|
|
34
|
+
|
|
35
|
+
All Recursica components in the `@recursica/adapter-mui-v7` package adhere strictly to design system spacing, scaling, and behavior patterns.
|
|
36
|
+
|
|
37
|
+
> [!IMPORTANT]
|
|
38
|
+
>
|
|
39
|
+
> - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
|
|
40
|
+
> - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
|
|
41
|
+
> - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Toast – Implementation Notes
|
|
2
|
+
|
|
3
|
+
Decisions and design tweaks tailored for the UI Kit's Toast wrapped against `@mui/material`'s `Alert` component.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. No default icon (source-of-truth audit, 2026-08-30)
|
|
8
|
+
|
|
9
|
+
**Decision:** `icon` defaults to suppressed (no icon) when the caller doesn't supply one, matching mantine-adapter's `Notification`-based Toast, which never renders an icon unless explicitly given one (see its own `TOAST_IMPLEMENTATION_NOTES.md` §3).
|
|
10
|
+
|
|
11
|
+
**Implementation:** MUI's `Alert` falls back to its own built-in severity icon (a checkmark, since MUI's default `severity` is `"success"`) whenever its `icon` prop is left `undefined` — `icon={false}` is the only way to render no icon at all. `Toast` now passes `icon={icon ?? false}` instead of `icon={icon}` so an unset `icon` prop renders nothing, not MUI's own default. Found via the `adapter-tester:source-of-truth` divergence check: mui's `Default` story rendered a leading checkmark icon mantine's golden never had.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Doubled vertical padding (source-of-truth audit, 2026-08-30)
|
|
16
|
+
|
|
17
|
+
**Symptom:** `ui-kit-toast--default` (and `with-icon`) rendered visibly taller than mantine's —
|
|
18
|
+
confirmed via computed styles: mui's `.MuiAlert-root` measured 93.7px tall vs mantine's
|
|
19
|
+
`.mantine-Notification-root` at 76.8px, for identical content and an identical
|
|
20
|
+
`--recursica_ui-kit_components_toast_properties_vertical-padding`/`horizontal-padding` on
|
|
21
|
+
`.root` in both (`8px 16px` either way — the CSS files are otherwise byte-identical).
|
|
22
|
+
|
|
23
|
+
**Root cause:** MUI's `Alert` renders internal wrapper `<div>`s for its icon/message/action
|
|
24
|
+
slots (`.MuiAlert-message`, `.MuiAlert-icon`, `.MuiAlert-action`), and each of those ships its
|
|
25
|
+
own non-zero default padding (`8px 0`, `7px 0`, and `4px 0 0 16px` respectively, straight from
|
|
26
|
+
MUI's own `Alert.js` source) that stacks on top of `.root`'s own padding token — doubling the
|
|
27
|
+
effective vertical padding. Mantine's `Notification` has no equivalent built-in padding on its
|
|
28
|
+
`body`/`icon`/`close` slots, so `.root`'s token is already the sole source of padding there;
|
|
29
|
+
that's "the correct var mantine uses" — mui just wasn't the only thing applying it.
|
|
30
|
+
|
|
31
|
+
**Fix:** Added `padding: 0 !important;` to `.body` (→ `.MuiAlert-message`), `.icon` (→
|
|
32
|
+
`.MuiAlert-icon`), and `.closeButton` (→ `.MuiAlert-action`) in `Toast.module.css`, so
|
|
33
|
+
`.root`'s own `vertical-padding`/`horizontal-padding` tokens are the only padding applied,
|
|
34
|
+
matching mantine exactly. `!important` follows the same pattern already used on `.icon`'s other
|
|
35
|
+
overrides in this file (MUI's own emotion-generated class can win the cascade depending on
|
|
36
|
+
`<style>` injection order otherwise). Verified via computed styles after the fix: mui's root
|
|
37
|
+
measured 77.7px vs mantine's 76.8px — the ~1px residual is font-metric noise, not padding.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/* HARDCODED VALUES:
|
|
2
|
+
- border-style: solid. Baseline so the per-variant border-color tokens actually render.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/* ======================================
|
|
6
|
+
TOAST / NOTIFICATION ROOT
|
|
7
|
+
====================================== */
|
|
8
|
+
|
|
9
|
+
.root {
|
|
10
|
+
border-radius: var(
|
|
11
|
+
--recursica_ui-kit_components_toast_properties_border-radius
|
|
12
|
+
);
|
|
13
|
+
border-width: var(--recursica_ui-kit_components_toast_properties_border-size);
|
|
14
|
+
border-style: solid; /* HARDCODE: baseline so border-color tokens render */
|
|
15
|
+
border-color: var(
|
|
16
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_border-color
|
|
17
|
+
);
|
|
18
|
+
box-shadow: var(
|
|
19
|
+
--recursica_ui-kit_components_toast_properties_elevation_layer-0
|
|
20
|
+
);
|
|
21
|
+
padding: var(--recursica_ui-kit_components_toast_properties_vertical-padding)
|
|
22
|
+
var(--recursica_ui-kit_components_toast_properties_horizontal-padding);
|
|
23
|
+
min-width: var(--recursica_ui-kit_components_toast_properties_min-width);
|
|
24
|
+
max-width: var(--recursica_ui-kit_components_toast_properties_max-width);
|
|
25
|
+
min-height: var(--recursica_ui-kit_components_toast_properties_min-height);
|
|
26
|
+
|
|
27
|
+
/* Default Variant (Base) */
|
|
28
|
+
background-color: var(
|
|
29
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_background-color
|
|
30
|
+
);
|
|
31
|
+
gap: var(--recursica_ui-kit_components_toast_properties_spacing);
|
|
32
|
+
|
|
33
|
+
/* Hide Mantine's native colored vertical line */
|
|
34
|
+
&::before {
|
|
35
|
+
display: none;
|
|
36
|
+
content: none;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
& .icon {
|
|
40
|
+
width: var(--recursica_ui-kit_components_toast_properties_icon) !important;
|
|
41
|
+
height: var(--recursica_ui-kit_components_toast_properties_icon) !important;
|
|
42
|
+
margin-right: 0 !important; /* Override Mantine's native spacing in favor of flex gap */
|
|
43
|
+
background-color: transparent !important; /* Remove Mantine's native circle background */
|
|
44
|
+
/* MUI's `.MuiAlert-icon` ships its own default `padding: 7px 0`, stacking on top of
|
|
45
|
+
`--recursica_ui-kit_components_toast_properties_vertical-padding` already applied to
|
|
46
|
+
`.root` below — zero it for the same reason as `.body`'s padding override. */
|
|
47
|
+
padding: 0 !important;
|
|
48
|
+
|
|
49
|
+
color: var(
|
|
50
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text-color
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
& .loader {
|
|
55
|
+
margin-right: 0 !important; /* Override native spacing */
|
|
56
|
+
}
|
|
57
|
+
& .title,
|
|
58
|
+
& .description {
|
|
59
|
+
color: var(
|
|
60
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text-color
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
& .closeButton {
|
|
64
|
+
color: var(
|
|
65
|
+
--recursica_ui-kit_components_toast_variants_styles_default_properties_colors_button
|
|
66
|
+
);
|
|
67
|
+
/* MUI's `.MuiAlert-action` ships its own default `padding: 4px 0 0 16px`, adding vertical
|
|
68
|
+
space beyond `.root`'s own vertical-padding token (mantine's close button has no built-in
|
|
69
|
+
padding to conflict with it) — zero it so `.root`'s padding is the single source of
|
|
70
|
+
truth, same as `.body` below. `margin-left: auto` (MUI's own default, untouched) still
|
|
71
|
+
keeps it pinned to the row's end. */
|
|
72
|
+
padding: 0 !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Error Variant styling */
|
|
76
|
+
&[data-variant="error"] {
|
|
77
|
+
background-color: var(
|
|
78
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_background-color
|
|
79
|
+
);
|
|
80
|
+
border-color: var(
|
|
81
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_border-color
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
& .icon {
|
|
85
|
+
color: var(
|
|
86
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text-color
|
|
87
|
+
) !important;
|
|
88
|
+
}
|
|
89
|
+
& .title,
|
|
90
|
+
& .description {
|
|
91
|
+
color: var(
|
|
92
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text-color
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
& .closeButton {
|
|
96
|
+
color: var(
|
|
97
|
+
--recursica_ui-kit_components_toast_variants_styles_error_properties_colors_button
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Success Variant styling */
|
|
103
|
+
&[data-variant="success"] {
|
|
104
|
+
background-color: var(
|
|
105
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_background-color
|
|
106
|
+
);
|
|
107
|
+
border-color: var(
|
|
108
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_border-color
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
& .icon {
|
|
112
|
+
color: var(
|
|
113
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text-color
|
|
114
|
+
) !important;
|
|
115
|
+
}
|
|
116
|
+
& .title,
|
|
117
|
+
& .description {
|
|
118
|
+
color: var(
|
|
119
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text-color
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
& .closeButton {
|
|
123
|
+
color: var(
|
|
124
|
+
--recursica_ui-kit_components_toast_variants_styles_success_properties_colors_button
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* ======================================
|
|
131
|
+
TOAST BODY
|
|
132
|
+
====================================== */
|
|
133
|
+
|
|
134
|
+
.body {
|
|
135
|
+
/* No extra gap here, root handles icon-to-text, body can handle title-to-description if needed */
|
|
136
|
+
/* MUI's `.MuiAlert-message` ships its own default `padding: 8px 0`, doubling up on top of
|
|
137
|
+
`--recursica_ui-kit_components_toast_properties_vertical-padding` already applied to
|
|
138
|
+
`.root` above (mantine's Notification body has no built-in padding to conflict with the
|
|
139
|
+
same token — confirmed via computed styles: mui's root measured 93.7px tall vs mantine's
|
|
140
|
+
76.8px for identical content). Zero it so `.root`'s own padding is the single source of
|
|
141
|
+
truth, matching mantine exactly. */
|
|
142
|
+
padding: 0 !important;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.title {
|
|
146
|
+
font-family: var(
|
|
147
|
+
--recursica_ui-kit_components_toast_properties_text_font-family
|
|
148
|
+
);
|
|
149
|
+
font-size: var(--recursica_ui-kit_components_toast_properties_text_font-size);
|
|
150
|
+
font-style: var(
|
|
151
|
+
--recursica_ui-kit_components_toast_properties_text_font-style
|
|
152
|
+
);
|
|
153
|
+
font-weight: var(
|
|
154
|
+
--recursica_ui-kit_components_toast_properties_text_font-weight
|
|
155
|
+
);
|
|
156
|
+
letter-spacing: var(
|
|
157
|
+
--recursica_ui-kit_components_toast_properties_text_letter-spacing
|
|
158
|
+
);
|
|
159
|
+
line-height: var(
|
|
160
|
+
--recursica_ui-kit_components_toast_properties_text_line-height
|
|
161
|
+
);
|
|
162
|
+
text-decoration: var(
|
|
163
|
+
--recursica_ui-kit_components_toast_properties_text_text-decoration
|
|
164
|
+
);
|
|
165
|
+
text-transform: var(
|
|
166
|
+
--recursica_ui-kit_components_toast_properties_text_text-transform
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.description {
|
|
171
|
+
font-family: var(
|
|
172
|
+
--recursica_ui-kit_components_toast_properties_text_font-family
|
|
173
|
+
);
|
|
174
|
+
font-size: var(--recursica_ui-kit_components_toast_properties_text_font-size);
|
|
175
|
+
font-style: var(
|
|
176
|
+
--recursica_ui-kit_components_toast_properties_text_font-style
|
|
177
|
+
);
|
|
178
|
+
font-weight: var(
|
|
179
|
+
--recursica_ui-kit_components_toast_properties_text_font-weight
|
|
180
|
+
);
|
|
181
|
+
letter-spacing: var(
|
|
182
|
+
--recursica_ui-kit_components_toast_properties_text_letter-spacing
|
|
183
|
+
);
|
|
184
|
+
line-height: var(
|
|
185
|
+
--recursica_ui-kit_components_toast_properties_text_line-height
|
|
186
|
+
);
|
|
187
|
+
text-decoration: var(
|
|
188
|
+
--recursica_ui-kit_components_toast_properties_text_text-decoration
|
|
189
|
+
);
|
|
190
|
+
text-transform: var(
|
|
191
|
+
--recursica_ui-kit_components_toast_properties_text_text-transform
|
|
192
|
+
);
|
|
193
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { Toast } from "./Toast";
|
|
3
|
+
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
type ToastStoryArgs = Record<string, any>;
|
|
6
|
+
|
|
7
|
+
const meta = {
|
|
8
|
+
title: "UI-Kit/Toast",
|
|
9
|
+
component: Toast,
|
|
10
|
+
tags: ["autodocs"],
|
|
11
|
+
parameters: {
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component:
|
|
15
|
+
"The `Toast` component is a standalone visual component wrapping Mui's `Alert`. Note that this component is visually decoupled from `@mui/material/Snackbar` and is meant to be used when you need to render a static or manually-controlled notification panel.",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
argTypes: {
|
|
20
|
+
title: {
|
|
21
|
+
control: "text",
|
|
22
|
+
description: "Title displayed above the message body",
|
|
23
|
+
},
|
|
24
|
+
children: {
|
|
25
|
+
control: "text",
|
|
26
|
+
description: "Main notification message",
|
|
27
|
+
},
|
|
28
|
+
withCloseButton: {
|
|
29
|
+
control: "boolean",
|
|
30
|
+
description: "Whether the close button is visible",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
} satisfies Meta<typeof Toast>;
|
|
34
|
+
|
|
35
|
+
export default meta;
|
|
36
|
+
type Story = StoryObj<typeof meta>;
|
|
37
|
+
|
|
38
|
+
export const Default: Story = {
|
|
39
|
+
args: {
|
|
40
|
+
variant: "default",
|
|
41
|
+
title: "Update Available",
|
|
42
|
+
children:
|
|
43
|
+
"A new version of the application is available to download. Please restart your browser to apply the latest security patches and feature updates. If you ignore this message, the update will automatically install during your next session.",
|
|
44
|
+
withCloseButton: true,
|
|
45
|
+
},
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
47
|
+
render: ({ withLayer, layer, ...args }: ToastStoryArgs) => {
|
|
48
|
+
return <Toast {...args} />;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const WithIcon: Story = {
|
|
53
|
+
args: {
|
|
54
|
+
variant: "default",
|
|
55
|
+
title: "Action Required",
|
|
56
|
+
children:
|
|
57
|
+
"You must complete your profile setup before accessing this feature.",
|
|
58
|
+
icon: "⚠️",
|
|
59
|
+
},
|
|
60
|
+
parameters: {
|
|
61
|
+
controls: { disable: true },
|
|
62
|
+
},
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
64
|
+
render: ({ withLayer, layer, ...args }: ToastStoryArgs) => {
|
|
65
|
+
return <Toast {...args} />;
|
|
66
|
+
},
|
|
67
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// Placeholder for future Toast component tests. Add tests here if/when needed.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
Alert as MuiAlert,
|
|
4
|
+
AlertTitle as MuiAlertTitle,
|
|
5
|
+
IconButton as MuiIconButton,
|
|
6
|
+
type AlertProps as MuiAlertProps,
|
|
7
|
+
} from "@mui/material";
|
|
8
|
+
import {
|
|
9
|
+
filterStylingProps,
|
|
10
|
+
mergeClassNames,
|
|
11
|
+
type RecursicaOverStyled,
|
|
12
|
+
} from "../../utils/filterStylingProps";
|
|
13
|
+
import styles from "./Toast.module.css";
|
|
14
|
+
|
|
15
|
+
import { type RecursicaToastProps as BaseRecursicaToastProps } from "@recursica/adapter-common";
|
|
16
|
+
|
|
17
|
+
export interface RecursicaToastProps extends BaseRecursicaToastProps {
|
|
18
|
+
withCloseButton?: boolean;
|
|
19
|
+
title?: React.ReactNode;
|
|
20
|
+
icon?: React.ReactNode;
|
|
21
|
+
onClose?: () => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Toast component wrapping Mui's Alert.
|
|
26
|
+
*
|
|
27
|
+
* Can be used as a standalone visual component to display a notification or message.
|
|
28
|
+
*/
|
|
29
|
+
export type ToastProps = RecursicaOverStyled<
|
|
30
|
+
Omit<MuiAlertProps, "color" | "radius" | "variant" | "onClose"> &
|
|
31
|
+
RecursicaToastProps
|
|
32
|
+
>;
|
|
33
|
+
|
|
34
|
+
const CloseIcon = () => (
|
|
35
|
+
<svg
|
|
36
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
37
|
+
width="20"
|
|
38
|
+
height="20"
|
|
39
|
+
viewBox="0 0 24 24"
|
|
40
|
+
fill="none"
|
|
41
|
+
stroke="currentColor"
|
|
42
|
+
strokeWidth="2"
|
|
43
|
+
strokeLinecap="round"
|
|
44
|
+
strokeLinejoin="round"
|
|
45
|
+
>
|
|
46
|
+
<path d="M18 6L6 18M6 6l12 12" />
|
|
47
|
+
</svg>
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
export const Toast = React.forwardRef<HTMLDivElement, ToastProps>(
|
|
51
|
+
function Toast(
|
|
52
|
+
{
|
|
53
|
+
overStyled = false,
|
|
54
|
+
variant = "default",
|
|
55
|
+
withCloseButton = true,
|
|
56
|
+
title,
|
|
57
|
+
icon,
|
|
58
|
+
children,
|
|
59
|
+
onClose,
|
|
60
|
+
className,
|
|
61
|
+
...rest
|
|
62
|
+
},
|
|
63
|
+
ref,
|
|
64
|
+
) {
|
|
65
|
+
const sanitizedProps = filterStylingProps(rest, overStyled);
|
|
66
|
+
|
|
67
|
+
// Note MUI's actual prop is "classes", not "classNames" (that's Mantine's naming) — this
|
|
68
|
+
// used to read the wrong key, silently no-op-ing any caller-supplied classes.
|
|
69
|
+
const mergedClassNames = mergeClassNames(
|
|
70
|
+
{
|
|
71
|
+
root: styles.root,
|
|
72
|
+
message: styles.body,
|
|
73
|
+
icon: styles.icon,
|
|
74
|
+
action: styles.closeButton,
|
|
75
|
+
},
|
|
76
|
+
(sanitizedProps as Record<string, unknown>).classes as
|
|
77
|
+
| Partial<Record<string, string>>
|
|
78
|
+
| undefined,
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const handleClose = () => {
|
|
82
|
+
if (onClose) onClose();
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<MuiAlert
|
|
87
|
+
ref={ref}
|
|
88
|
+
{...(sanitizedProps as unknown as Omit<
|
|
89
|
+
MuiAlertProps,
|
|
90
|
+
"color" | "radius" | "variant" | "onClose"
|
|
91
|
+
>)}
|
|
92
|
+
// MUI's Alert falls back to its own built-in severity icon (default severity is
|
|
93
|
+
// "success", hence a checkmark) when `icon` is left `undefined` — `icon={false}`
|
|
94
|
+
// is required to render no icon at all, which is Recursica's own default.
|
|
95
|
+
icon={icon ?? false}
|
|
96
|
+
data-variant={variant}
|
|
97
|
+
className={`${className || ""}`}
|
|
98
|
+
classes={mergedClassNames}
|
|
99
|
+
action={
|
|
100
|
+
withCloseButton ? (
|
|
101
|
+
<MuiIconButton
|
|
102
|
+
size="small"
|
|
103
|
+
aria-label="close"
|
|
104
|
+
color="inherit"
|
|
105
|
+
onClick={handleClose}
|
|
106
|
+
>
|
|
107
|
+
<CloseIcon />
|
|
108
|
+
</MuiIconButton>
|
|
109
|
+
) : undefined
|
|
110
|
+
}
|
|
111
|
+
>
|
|
112
|
+
{title && (
|
|
113
|
+
<MuiAlertTitle className={styles.title}>{title}</MuiAlertTitle>
|
|
114
|
+
)}
|
|
115
|
+
<div className={styles.description}>{children}</div>
|
|
116
|
+
</MuiAlert>
|
|
117
|
+
);
|
|
118
|
+
},
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
Toast.displayName = "Toast";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Toast - Usage Guide
|
|
2
|
+
|
|
3
|
+
This document describes how to integrate and use the `Toast` component in your projects using `@recursica/adapter-mui-v7`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Import Reference
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Toast } from "@recursica/adapter-mui-v7";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Basic Example
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import React from "react";
|
|
19
|
+
import { Toast } from "@recursica/adapter-mui-v7";
|
|
20
|
+
|
|
21
|
+
export default function Demo() {
|
|
22
|
+
return (
|
|
23
|
+
<Toast
|
|
24
|
+
title="Success"
|
|
25
|
+
message="Your action completed successfully"
|
|
26
|
+
state="success"
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 3. Design System Integration
|
|
35
|
+
|
|
36
|
+
All Recursica components in the `@recursica/adapter-mui-v7` package adhere strictly to design system spacing, scaling, and behavior patterns.
|
|
37
|
+
|
|
38
|
+
> [!IMPORTANT]
|
|
39
|
+
>
|
|
40
|
+
> - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
|
|
41
|
+
> - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
|
|
42
|
+
> - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Toast";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* HARDCODED VALUES:
|
|
2
|
+
- border-style: solid. Structural rendering rule for the tooltip border (Mantine uses Box
|
|
3
|
+
which may not set border-style natively). Same pattern as Menu / HoverCard.
|
|
4
|
+
- arrowSize defaults to 16 in Tooltip.tsx. Mantine uses arrowSize for inline width/height
|
|
5
|
+
and positioning (-arrowSize/2) calculations that cannot be CSS-driven. The default matches
|
|
6
|
+
the Recursica beak-size token (16px). See COMPONENT_ISSUES.md for details.
|
|
7
|
+
- All structural layout (display, position, overflow) is deferred to Mantine's native
|
|
8
|
+
behavior. We only override visual design tokens (colors, typography, spacing, borders).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* ======================================
|
|
12
|
+
TOOLTIP CONTAINER
|
|
13
|
+
====================================== */
|
|
14
|
+
|
|
15
|
+
.tooltip {
|
|
16
|
+
background-color: var(
|
|
17
|
+
--recursica_ui-kit_components_tooltip_properties_colors_background-color
|
|
18
|
+
);
|
|
19
|
+
border-style: solid; /* HARDCODE: Mantine Box does not set border-style natively */
|
|
20
|
+
border-width: var(
|
|
21
|
+
--recursica_ui-kit_components_tooltip_properties_border-size
|
|
22
|
+
);
|
|
23
|
+
border-color: var(
|
|
24
|
+
--recursica_ui-kit_components_tooltip_properties_colors_border-color
|
|
25
|
+
);
|
|
26
|
+
border-radius: var(
|
|
27
|
+
--recursica_ui-kit_components_tooltip_properties_border-radius
|
|
28
|
+
);
|
|
29
|
+
box-shadow: var(--recursica_ui-kit_components_tooltip_properties_elevation);
|
|
30
|
+
|
|
31
|
+
min-width: var(--recursica_ui-kit_components_tooltip_properties_min-width);
|
|
32
|
+
min-height: var(--recursica_ui-kit_components_tooltip_properties_min-height);
|
|
33
|
+
max-width: var(--recursica_ui-kit_components_tooltip_properties_max-width);
|
|
34
|
+
|
|
35
|
+
padding: var(
|
|
36
|
+
--recursica_ui-kit_components_tooltip_properties_vertical-padding
|
|
37
|
+
)
|
|
38
|
+
var(--recursica_ui-kit_components_tooltip_properties_horizontal-padding);
|
|
39
|
+
|
|
40
|
+
/* Vertically center text within min-height container */
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
|
|
44
|
+
/* Typography */
|
|
45
|
+
font-family: var(
|
|
46
|
+
--recursica_ui-kit_components_tooltip_properties_text_font-family
|
|
47
|
+
);
|
|
48
|
+
font-size: var(
|
|
49
|
+
--recursica_ui-kit_components_tooltip_properties_text_font-size
|
|
50
|
+
);
|
|
51
|
+
font-style: var(
|
|
52
|
+
--recursica_ui-kit_components_tooltip_properties_text_font-style
|
|
53
|
+
);
|
|
54
|
+
font-weight: var(
|
|
55
|
+
--recursica_ui-kit_components_tooltip_properties_text_font-weight
|
|
56
|
+
);
|
|
57
|
+
letter-spacing: var(
|
|
58
|
+
--recursica_ui-kit_components_tooltip_properties_text_letter-spacing
|
|
59
|
+
);
|
|
60
|
+
line-height: var(
|
|
61
|
+
--recursica_ui-kit_components_tooltip_properties_text_line-height
|
|
62
|
+
);
|
|
63
|
+
text-decoration: var(
|
|
64
|
+
--recursica_ui-kit_components_tooltip_properties_text_text-decoration
|
|
65
|
+
);
|
|
66
|
+
text-transform: var(
|
|
67
|
+
--recursica_ui-kit_components_tooltip_properties_text_text-transform
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
color: var(
|
|
71
|
+
--recursica_ui-kit_components_tooltip_properties_colors_text-color
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* ======================================
|
|
76
|
+
ARROW / BEAK
|
|
77
|
+
====================================== */
|
|
78
|
+
|
|
79
|
+
.arrow {
|
|
80
|
+
border-color: var(
|
|
81
|
+
--recursica_ui-kit_components_tooltip_properties_colors_border-color
|
|
82
|
+
);
|
|
83
|
+
}
|