@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,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLOBAL EXEMPTIONS
|
|
3
|
+
*
|
|
4
|
+
* This file hosts global, brand, and layout variables that are defined in
|
|
5
|
+
* recursica_variables_scoped.css but are not used by any specific component.
|
|
6
|
+
* Isolating them here keeps individual component stylesheets clean and focused.
|
|
7
|
+
*/
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { Meta } from "@storybook/react-vite";
|
|
2
|
+
import { AdaptersContent, MuiLogo } from "@recursica/storybook-template";
|
|
3
|
+
import { VersionInfo } from "./Version";
|
|
4
|
+
import { OverStylingInfo } from "./OverStyling";
|
|
5
|
+
|
|
6
|
+
const DOCS_URL = "https://recursica.com";
|
|
7
|
+
const FORGE_URL = "https://forge.recursica.com";
|
|
8
|
+
|
|
9
|
+
import { Box } from "@mui/material";
|
|
10
|
+
import { Container, Group, Heading, Text, Link } from "./components";
|
|
11
|
+
|
|
12
|
+
function IntroductionContent() {
|
|
13
|
+
return (
|
|
14
|
+
<Container size="md" style={{ padding: "32px 0", maxWidth: 640 }}>
|
|
15
|
+
<Group gap="rec-md" mb={2}>
|
|
16
|
+
<MuiLogo width={40} height={40} />
|
|
17
|
+
<Box>
|
|
18
|
+
<Heading order={1} m={0}>
|
|
19
|
+
Recursica Design System (MUI Adapter)
|
|
20
|
+
</Heading>
|
|
21
|
+
<Link href="https://mui.com" target="_blank" rel="noreferrer">
|
|
22
|
+
mui.com
|
|
23
|
+
</Link>
|
|
24
|
+
</Box>
|
|
25
|
+
</Group>
|
|
26
|
+
<Text mb={4}>
|
|
27
|
+
This Storybook showcases the Recursica design system implemented for the{" "}
|
|
28
|
+
<strong>Material UI (MUI) Kit</strong>. It provides reusable components
|
|
29
|
+
that map our design tokens to MUI's robust component layer.
|
|
30
|
+
</Text>
|
|
31
|
+
|
|
32
|
+
<Box component="section" sx={{ mb: 4 }}>
|
|
33
|
+
<Heading order={2} mb={1}>
|
|
34
|
+
Looking for another UI Kit?
|
|
35
|
+
</Heading>
|
|
36
|
+
<Text>
|
|
37
|
+
Are you using a different UI Kit (like Mantine)? Recursica provides
|
|
38
|
+
multiple adapters for different frameworks.
|
|
39
|
+
</Text>
|
|
40
|
+
<Box sx={{ mt: 2 }}>
|
|
41
|
+
<a
|
|
42
|
+
href="./?path=/story/introduction--adapters"
|
|
43
|
+
target="_parent"
|
|
44
|
+
className="adapter-btn"
|
|
45
|
+
style={{
|
|
46
|
+
display: "inline-flex",
|
|
47
|
+
alignItems: "center",
|
|
48
|
+
justifyContent: "center",
|
|
49
|
+
backgroundColor:
|
|
50
|
+
"var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_background)",
|
|
51
|
+
color:
|
|
52
|
+
"var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text)",
|
|
53
|
+
textDecoration: "none",
|
|
54
|
+
borderRadius:
|
|
55
|
+
"var(--recursica_ui-kit_components_button_variants_sizes_default_properties_border-radius)",
|
|
56
|
+
height:
|
|
57
|
+
"var(--recursica_ui-kit_components_button_variants_sizes_default_properties_height)",
|
|
58
|
+
padding:
|
|
59
|
+
"0 var(--recursica_ui-kit_components_button_variants_sizes_default_properties_horizontal-padding)",
|
|
60
|
+
fontFamily:
|
|
61
|
+
"var(--recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-family)",
|
|
62
|
+
fontSize:
|
|
63
|
+
"var(--recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-size)",
|
|
64
|
+
fontWeight:
|
|
65
|
+
"var(--recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-weight)",
|
|
66
|
+
boxShadow:
|
|
67
|
+
"var(--recursica_ui-kit_components_button_variants_styles_solid_properties_elevation)",
|
|
68
|
+
border:
|
|
69
|
+
"var(--recursica_ui-kit_components_button_variants_styles_solid_properties_border-size) solid var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_border-color)",
|
|
70
|
+
transition: "opacity 0.2s ease",
|
|
71
|
+
}}
|
|
72
|
+
onMouseOver={(e) => {
|
|
73
|
+
e.currentTarget.style.opacity = "0.85";
|
|
74
|
+
e.currentTarget.style.color =
|
|
75
|
+
"var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text-hover)";
|
|
76
|
+
}}
|
|
77
|
+
onMouseOut={(e) => {
|
|
78
|
+
e.currentTarget.style.opacity = "1";
|
|
79
|
+
e.currentTarget.style.color =
|
|
80
|
+
"var(--recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text)";
|
|
81
|
+
}}
|
|
82
|
+
>
|
|
83
|
+
View Supported Adapters
|
|
84
|
+
</a>
|
|
85
|
+
</Box>
|
|
86
|
+
</Box>
|
|
87
|
+
|
|
88
|
+
<Box component="section" sx={{ mb: 4 }}>
|
|
89
|
+
<Heading order={2} mb={1}>
|
|
90
|
+
Installation
|
|
91
|
+
</Heading>
|
|
92
|
+
<Text>To install the MUI adapter in your project, run:</Text>
|
|
93
|
+
<Box
|
|
94
|
+
component="pre"
|
|
95
|
+
sx={{
|
|
96
|
+
p: 1.5,
|
|
97
|
+
bgcolor: "grey.100",
|
|
98
|
+
borderRadius: 1,
|
|
99
|
+
fontSize: 13,
|
|
100
|
+
mt: 1,
|
|
101
|
+
}}
|
|
102
|
+
>
|
|
103
|
+
<code>
|
|
104
|
+
npm install @recursica/adapter-mui-v7 @mui/material @emotion/react
|
|
105
|
+
@emotion/styled
|
|
106
|
+
</code>
|
|
107
|
+
</Box>
|
|
108
|
+
</Box>
|
|
109
|
+
|
|
110
|
+
<Box component="section" sx={{ mb: 4 }}>
|
|
111
|
+
<Heading order={2} mb={1}>
|
|
112
|
+
Tokens
|
|
113
|
+
</Heading>
|
|
114
|
+
<Text>
|
|
115
|
+
Raw design tokens (colors, sizes, font weights, opacities, etc.) that
|
|
116
|
+
feed the theme and components. These are the primitive values defined
|
|
117
|
+
in your token set and exposed as CSS custom properties.
|
|
118
|
+
</Text>
|
|
119
|
+
</Box>
|
|
120
|
+
|
|
121
|
+
<Box component="section" sx={{ mb: 4 }}>
|
|
122
|
+
<Heading order={2} mb={1}>
|
|
123
|
+
Theme
|
|
124
|
+
</Heading>
|
|
125
|
+
<Text>
|
|
126
|
+
Brand and theme layer built on top of tokens. Typography types,
|
|
127
|
+
dimensions, and layout grids are defined here. Theme uses the tokens
|
|
128
|
+
and exposes both CSS variables and helper classes (e.g. typography
|
|
129
|
+
classes) for consistent styling across the product.
|
|
130
|
+
</Text>
|
|
131
|
+
</Box>
|
|
132
|
+
|
|
133
|
+
<Box component="section" sx={{ mb: 4 }}>
|
|
134
|
+
<Heading order={2} mb={1}>
|
|
135
|
+
Configuring Recursica
|
|
136
|
+
</Heading>
|
|
137
|
+
<Text>
|
|
138
|
+
To modify the Recursica configuration (tokens, brand, theme), go to{" "}
|
|
139
|
+
<Link href={FORGE_URL} target="_blank" rel="noopener noreferrer">
|
|
140
|
+
{FORGE_URL}
|
|
141
|
+
</Link>
|
|
142
|
+
. Changes there drive the tokens and theme you see in this Storybook.
|
|
143
|
+
</Text>
|
|
144
|
+
</Box>
|
|
145
|
+
|
|
146
|
+
<Box component="section" sx={{ mb: 4 }}>
|
|
147
|
+
<Heading order={2} mb={1}>
|
|
148
|
+
Documentation
|
|
149
|
+
</Heading>
|
|
150
|
+
<Text>
|
|
151
|
+
For full documentation, guides, and API reference, visit{" "}
|
|
152
|
+
<Link href={DOCS_URL} target="_blank" rel="noopener noreferrer">
|
|
153
|
+
{DOCS_URL}
|
|
154
|
+
</Link>
|
|
155
|
+
.
|
|
156
|
+
</Text>
|
|
157
|
+
</Box>
|
|
158
|
+
</Container>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const meta = {
|
|
163
|
+
title: "Introduction",
|
|
164
|
+
} satisfies Meta;
|
|
165
|
+
|
|
166
|
+
export default meta;
|
|
167
|
+
|
|
168
|
+
export const Welcome = {
|
|
169
|
+
render: () => <IntroductionContent />,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export const Adapters = {
|
|
173
|
+
render: () => <AdaptersContent />,
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export const OverStyling = {
|
|
177
|
+
name: "Over Styling",
|
|
178
|
+
render: () => <OverStylingInfo />,
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export const VersionInfoStory = {
|
|
182
|
+
name: "Version Info",
|
|
183
|
+
render: () => <VersionInfo />,
|
|
184
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import ReactMarkdown from "react-markdown";
|
|
2
|
+
import { Box, Paper, Divider } from "@mui/material";
|
|
3
|
+
import {
|
|
4
|
+
Container,
|
|
5
|
+
Stack,
|
|
6
|
+
Text as RawText,
|
|
7
|
+
Heading,
|
|
8
|
+
Switch as RawSwitch,
|
|
9
|
+
} from "./components";
|
|
10
|
+
import { Button as RawButton } from "./components/Button/Button";
|
|
11
|
+
import {
|
|
12
|
+
useGlobalOverStyled,
|
|
13
|
+
toggleGlobalOverStyled,
|
|
14
|
+
wrapComponent,
|
|
15
|
+
} from "@recursica/adapter-common";
|
|
16
|
+
import overStylingDoc from "../OVERSTYLING.md?raw";
|
|
17
|
+
|
|
18
|
+
const Button = wrapComponent(RawButton);
|
|
19
|
+
const Text = wrapComponent(RawText);
|
|
20
|
+
const Switch = wrapComponent(RawSwitch);
|
|
21
|
+
|
|
22
|
+
export const OverStylingInfo = () => {
|
|
23
|
+
const isHighlightActive = useGlobalOverStyled();
|
|
24
|
+
return (
|
|
25
|
+
<Container size="md" style={{ padding: "32px 0" }}>
|
|
26
|
+
<Paper variant="outlined" sx={{ p: 4, borderRadius: 2 }}>
|
|
27
|
+
<Box className="markdown-body">
|
|
28
|
+
<ReactMarkdown>{overStylingDoc}</ReactMarkdown>
|
|
29
|
+
</Box>
|
|
30
|
+
|
|
31
|
+
<Divider sx={{ my: 4 }} />
|
|
32
|
+
|
|
33
|
+
<Heading order={6} mb={2}>
|
|
34
|
+
Try It Yourself
|
|
35
|
+
</Heading>
|
|
36
|
+
|
|
37
|
+
<Stack direction="row" alignItems="center" spacing="rec-sm" mb="rec-md">
|
|
38
|
+
<Switch
|
|
39
|
+
label="Highlight Over-Styled Components"
|
|
40
|
+
checked={isHighlightActive}
|
|
41
|
+
onChange={() => toggleGlobalOverStyled()}
|
|
42
|
+
/>
|
|
43
|
+
</Stack>
|
|
44
|
+
|
|
45
|
+
<Text mb={4}>
|
|
46
|
+
Below is a side-by-side comparison. The first is a standard Recursica
|
|
47
|
+
Button protected by the design tokens mapping. The second flagrantly
|
|
48
|
+
forces <code>overStyled={`{true}`}</code>, allowing MUI's native
|
|
49
|
+
styling generics to punch right through the sandbox layout.
|
|
50
|
+
</Text>
|
|
51
|
+
|
|
52
|
+
<Stack direction="row" spacing="rec-default">
|
|
53
|
+
<Box>
|
|
54
|
+
<Text
|
|
55
|
+
variant="caption"
|
|
56
|
+
overStyled
|
|
57
|
+
sx={{ color: "text.secondary", mb: 1, display: "block" }}
|
|
58
|
+
>
|
|
59
|
+
Strict Baseline (Default)
|
|
60
|
+
</Text>
|
|
61
|
+
<Button>Standard UI Kit Button</Button>
|
|
62
|
+
</Box>
|
|
63
|
+
<Box>
|
|
64
|
+
<Text
|
|
65
|
+
variant="caption"
|
|
66
|
+
overStyled
|
|
67
|
+
sx={{ color: "text.secondary", mb: 1, display: "block" }}
|
|
68
|
+
>
|
|
69
|
+
overStyled={`{true}`}
|
|
70
|
+
</Text>
|
|
71
|
+
<Button
|
|
72
|
+
overStyled={true}
|
|
73
|
+
style={{
|
|
74
|
+
backgroundColor: "pink",
|
|
75
|
+
color: "black",
|
|
76
|
+
borderRadius: "24px",
|
|
77
|
+
padding: "8px 16px",
|
|
78
|
+
}}
|
|
79
|
+
>
|
|
80
|
+
Unsafe Pink Marketing Button
|
|
81
|
+
</Button>
|
|
82
|
+
</Box>
|
|
83
|
+
</Stack>
|
|
84
|
+
</Paper>
|
|
85
|
+
</Container>
|
|
86
|
+
);
|
|
87
|
+
};
|
package/src/Version.tsx
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ReactMarkdown from "react-markdown";
|
|
2
|
+
import { Paper, Divider, Box } from "@mui/material";
|
|
3
|
+
import { Container, Heading, Group, Link } from "./components";
|
|
4
|
+
import pkg from "../package.json";
|
|
5
|
+
import changelog from "../CHANGELOG.md?raw";
|
|
6
|
+
|
|
7
|
+
export const VersionInfo = () => {
|
|
8
|
+
return (
|
|
9
|
+
<Container size="md" style={{ padding: "32px 0" }}>
|
|
10
|
+
<Paper variant="outlined" sx={{ p: 4, borderRadius: 2 }}>
|
|
11
|
+
<Heading order={1} mb={1}>
|
|
12
|
+
MUI Adapter v{pkg.version}
|
|
13
|
+
</Heading>
|
|
14
|
+
<Group mb={4} gap="rec-md">
|
|
15
|
+
<Link
|
|
16
|
+
href="https://github.com/borderux/recursica"
|
|
17
|
+
target="_blank"
|
|
18
|
+
rel="noopener noreferrer"
|
|
19
|
+
>
|
|
20
|
+
GitHub Repository
|
|
21
|
+
</Link>
|
|
22
|
+
<Link
|
|
23
|
+
href="https://recursica.com"
|
|
24
|
+
target="_blank"
|
|
25
|
+
rel="noopener noreferrer"
|
|
26
|
+
>
|
|
27
|
+
Documentation & Website
|
|
28
|
+
</Link>
|
|
29
|
+
</Group>
|
|
30
|
+
<Divider sx={{ mb: 4 }} />
|
|
31
|
+
<Box className="markdown-body">
|
|
32
|
+
<ReactMarkdown>{changelog}</ReactMarkdown>
|
|
33
|
+
</Box>
|
|
34
|
+
</Paper>
|
|
35
|
+
</Container>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Accordion – implementation notes
|
|
2
|
+
|
|
3
|
+
Decisions and design tweaks specific to the UI Kit's Accordion wrapped against `@mui/material`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Context-based container (no native MUI equivalent)
|
|
8
|
+
|
|
9
|
+
**Decision:** MUI has no group-level `Accordion` — its own `Accordion` component _is_ the
|
|
10
|
+
item, controlled individually via `expanded`/`onChange`. Recursica's container/group model
|
|
11
|
+
(single `value`, `multiple`, cascading `chevron`) is reimplemented with a React context
|
|
12
|
+
(`AccordionContext`) that each `AccordionItem`/`AccordionControl` reads from.
|
|
13
|
+
**Implementation:** `AccordionBase` owns the controlled/uncontrolled `value` state and hands
|
|
14
|
+
`{ value, onChange, chevron }` down via context; `AccordionItem` derives its own `expanded`
|
|
15
|
+
from that context instead of taking it as a prop.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 2. Prop-contract Omits protect the context wiring
|
|
20
|
+
|
|
21
|
+
**Decision:** Because `AccordionItem`/`AccordionControl` are thin wrappers around real MUI
|
|
22
|
+
components (`MuiAccordion`/`MuiAccordionSummary`), their native `expanded`/`onChange`/
|
|
23
|
+
`expandIcon` props would otherwise collide with the values these wrappers compute from
|
|
24
|
+
context.
|
|
25
|
+
**Implementation:** `AccordionItemWrapperProps` omits `expanded`/`onChange`/`defaultExpanded`
|
|
26
|
+
from `MuiAccordionProps`; `AccordionControlWrapperProps` omits `expandIcon` from
|
|
27
|
+
`MuiAccordionSummaryProps`. Neither is exposed on `RecursicaAccordionItemProps`/
|
|
28
|
+
`RecursicaAccordionControlProps`, so passing them is a compile error, not a silent override.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 3. `disabled` is a formally supported, shared prop
|
|
33
|
+
|
|
34
|
+
**Decision:** `RecursicaAccordionItemProps.disabled` is shared as-is with MUI's native
|
|
35
|
+
`Accordion.disabled` — same name, same shape, no reshaping needed. MUI already blocks
|
|
36
|
+
click/keyboard interaction on the control internally once `disabled` is set (its `AccordionSummary`
|
|
37
|
+
renders as a real disabled `<button>`); the visual dim is Recursica's own, not MUI's default.
|
|
38
|
+
**Implementation:** `AccordionItem` destructures `disabled` explicitly (rather than letting it
|
|
39
|
+
ride through in `...rest`) so it can also drive `data-disabled` on the item root for the dim.
|
|
40
|
+
MUI's own default disabled treatment — a separate hardcoded background/opacity on both the
|
|
41
|
+
item root and the control (`.Mui-disabled`) — is neutralized in `Accordion.module.css` so the
|
|
42
|
+
token-driven `.item[data-disabled]` dim is the single source of truth.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 4. Chevron via `expandIcon` wrapper
|
|
47
|
+
|
|
48
|
+
**Decision:** MUI's expand indicator is set through `AccordionSummary.expandIcon`, not a
|
|
49
|
+
child. Recursica's container-level `chevron` (or the default arrow) is threaded through
|
|
50
|
+
context and rendered into that slot.
|
|
51
|
+
**Implementation:** `AccordionControl` resolves `ctx?.chevron ?? <ChevronIcon />` and passes
|
|
52
|
+
it as `expandIcon={<span className={styles.chevron}>{resolvedChevron}</span>}`.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 5. Transparent background for `Layer` overrides
|
|
57
|
+
|
|
58
|
+
**Decision:** Same reasoning as the Mantine adapter's hover-fix note — MUI's `Paper`-derived
|
|
59
|
+
`Accordion` root ships its own background; Recursica needs it transparent so ambient `Layer`
|
|
60
|
+
tokens can apply.
|
|
61
|
+
**Implementation:** `AccordionItem` merges `backgroundColor: "transparent"` into `style`
|
|
62
|
+
ahead of any caller-supplied `style`, and forces `disableGutters`/`elevation={0}`/`square` to
|
|
63
|
+
strip MUI's own spacing/elevation/border-radius defaults.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 6. Chevron double-rotation (source-of-truth audit, 2026-08-30)
|
|
68
|
+
|
|
69
|
+
**Decision:** Don't rotate `.chevron` ourselves on expand — let MUI's own wrapper handle it.
|
|
70
|
+
|
|
71
|
+
**Implementation:** `expandIcon`'s `<span className={styles.chevron}>` gets placed _inside_
|
|
72
|
+
MUI's own `.MuiAccordionSummary-expandIconWrapper`, which already rotates 180deg on
|
|
73
|
+
`.Mui-expanded` (MUI's own stable, documented behavior). `Accordion.module.css` also had
|
|
74
|
+
`.item:global(.Mui-expanded) .chevron { transform: rotate(180deg); }`, rotating the same span
|
|
75
|
+
a _second_ time — the two 180deg rotations canceled out, so the chevron visually never
|
|
76
|
+
appeared to move even though the accordion state was correct. Found via the
|
|
77
|
+
`adapter-tester:source-of-truth` divergence check comparing against mantine's golden. Removed
|
|
78
|
+
the redundant `transform` from that rule; kept the icon-color swap it also carries.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 7. Long title wrapped instead of truncating (source-of-truth audit, 2026-08-30)
|
|
83
|
+
|
|
84
|
+
**Symptom:** `ui-kit-accordion--long-title-truncation`'s header label wrapped onto multiple
|
|
85
|
+
lines (pushing the chevron down) instead of truncating to a single line with an ellipsis, like
|
|
86
|
+
mantine's does.
|
|
87
|
+
|
|
88
|
+
**Root cause:** Two missing pieces, both present in mantine's identically-purposed `.label`
|
|
89
|
+
rule but absent from mui's:
|
|
90
|
+
|
|
91
|
+
1. `.label` itself had no `white-space: nowrap`/`text-overflow: ellipsis`/`overflow` at all —
|
|
92
|
+
it was never told to truncate in the first place.
|
|
93
|
+
2. Even after adding those, truncation still didn't take effect: `.control
|
|
94
|
+
:global(.MuiAccordionSummary-content)` — the MUI-native flex wrapper sitting between
|
|
95
|
+
`.control`'s flex row and `.label` — had `flex: 1` but no `min-width: 0`. A flex item's
|
|
96
|
+
automatic minimum width defaults to its content's min-content size; once `.label`'s text is
|
|
97
|
+
`white-space: nowrap`, that min-content size becomes the entire unwrapped title width, which
|
|
98
|
+
propagated up through this intermediate flex item and prevented it (and `.label` inside it)
|
|
99
|
+
from ever shrinking below the full title width, so `text-overflow: ellipsis` had no room to
|
|
100
|
+
apply.
|
|
101
|
+
|
|
102
|
+
**Fix:** Added `min-width: 0`, `overflow: clip` (+ `overflow-clip-margin: 0.35em`, not plain
|
|
103
|
+
`hidden`, to avoid clipping descenders — see Chip/FileInput's implementation notes for the
|
|
104
|
+
original discovery), `white-space: nowrap`, and `text-overflow: ellipsis` to `.label` (matching
|
|
105
|
+
mantine's rule exactly), plus `min-width: 0` on the intermediate `.MuiAccordionSummary-content`
|
|
106
|
+
wrapper so the shrink constraint actually reaches `.label`. Verified live against mantine's
|
|
107
|
+
`LongTitleTruncation` story — both truncate to a single line with a trailing ellipsis.
|