@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,801 @@
|
|
|
1
|
+
/* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
|
|
2
|
+
* Outline variant's baseline-patch trick needs an opaque paint (active background is transparent by design); borrows Layer 0's surface as the default ambient layer absent a wrapping <Layer> (see IMPLEMENTATION_NOTES.md 'Outline selected-tab border'). Schema gap: no generic 'current ambient layer' token exists — flagged for the token-schema owner.
|
|
3
|
+
* recursica-allow-brand: --recursica_brand_layer_0_properties_surface
|
|
4
|
+
* 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).
|
|
5
|
+
* recursica-allow-brand: --recursica_brand_states_disabled
|
|
6
|
+
* recursica-allow-brand: --recursica_brand_states_hover_color
|
|
7
|
+
* recursica-allow-brand: --recursica_brand_states_hover_opacity
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
Recursica Tabs CSS module natively binding to Figma variables.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/* Unlike Mantine's .root (which internally wraps List+Panel and always spans its parent),
|
|
15
|
+
MUI's .root is only the tablist — it sits beside the panel in the consumer's own flex row for
|
|
16
|
+
vertical orientation. Stretching it to 100% width there fights the panel for space and drags
|
|
17
|
+
the border-right rail/indicator away from the tab content, so only horizontal gets full width;
|
|
18
|
+
vertical sizes to its content instead, same as Mantine's vertical .list does. */
|
|
19
|
+
.root[data-orientation="horizontal"] {
|
|
20
|
+
width: 100%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* `inverted` (RecursicaTabsProps): "tabs list at the bottom ... instead of top". USAGE.md
|
|
24
|
+
already requires wrapping `Tabs`+`TabPanel` in a column-direction Flex, since `TabPanel`
|
|
25
|
+
renders as this component's actual flex sibling (not nested inside it, unlike Mantine) — so
|
|
26
|
+
`order` on this root alone reorders them visually with no DOM change needed. `.list`'s
|
|
27
|
+
margin-bottom (tabs-content-gap, see below) collapses through this root's bottom edge in the
|
|
28
|
+
default order; flip it to margin-top so the same gap lands between the (now-preceding) panel
|
|
29
|
+
and this now-trailing root instead. Scoped to horizontal only — vertical's "instead of left"
|
|
30
|
+
flip isn't exercised by any story yet. See IMPLEMENTATION_NOTES.md. */
|
|
31
|
+
.root[data-orientation="horizontal"][data-inverted] {
|
|
32
|
+
order: 1;
|
|
33
|
+
}
|
|
34
|
+
.root[data-orientation="horizontal"][data-inverted] .list {
|
|
35
|
+
margin-bottom: 0;
|
|
36
|
+
margin-top: var(--tabs-content-gap);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Mantine's vertical .list stretches to the root's full height via flex align-items, so a
|
|
40
|
+
border-right divider on it spans the whole rail. MUI's scroller (the .list's parent) is a plain
|
|
41
|
+
block for vertical, not a flex container, so .list sizes to its own content (just the stacked
|
|
42
|
+
tabs) and a divider on it stops short at the last tab instead of running the full height —
|
|
43
|
+
spell the stretch out explicitly instead. */
|
|
44
|
+
.root[data-orientation="vertical"] .list {
|
|
45
|
+
height: 100%;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Vertical `inverted`: "instead of left" — the list moves to the right, panel to the left.
|
|
49
|
+
Mirrors the horizontal[data-inverted] flip above, rotated 90°: `order: 1` pushes the list after
|
|
50
|
+
the panel in the consumer's row Flex, and the content-gap margin flips from the trailing edge
|
|
51
|
+
(margin-right, spacing the panel that used to follow) to the leading edge (margin-left, spacing
|
|
52
|
+
the panel that now precedes it). Divider/indicator side-flip lives in SELECTION INDICATOR &
|
|
53
|
+
BASELINE and BORDER RADIUS GEOMETRY below (only default/outline draw a divider; pills has
|
|
54
|
+
neither). */
|
|
55
|
+
.root[data-orientation="vertical"][data-inverted] {
|
|
56
|
+
order: 1;
|
|
57
|
+
}
|
|
58
|
+
.root[data-orientation="vertical"][data-inverted] .list {
|
|
59
|
+
margin-right: 0;
|
|
60
|
+
margin-left: var(--tabs-content-gap);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
Mantine Tabs Anatomy:
|
|
65
|
+
.root
|
|
66
|
+
.list (container for tabs)
|
|
67
|
+
.tab (individual tab)
|
|
68
|
+
.panel (content)
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
/* ---------------------------------
|
|
72
|
+
VARIANTS
|
|
73
|
+
Sizing, geometry, colors, and typography are all scoped per style (default/outline/pills) in
|
|
74
|
+
the token schema now — nothing is shared flat across variants anymore. Content-alignment,
|
|
75
|
+
space-between-tabs, and the tabs-content-gap remain additionally scoped per orientation.
|
|
76
|
+
--------------------------------- */
|
|
77
|
+
|
|
78
|
+
.root[data-variant="default"][data-orientation] {
|
|
79
|
+
--tabs-element-gap: var(
|
|
80
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_element-gap
|
|
81
|
+
);
|
|
82
|
+
--tabs-horizontal-padding: var(
|
|
83
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_horizontal-padding
|
|
84
|
+
);
|
|
85
|
+
--tabs-vertical-padding: var(
|
|
86
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_vertical-padding
|
|
87
|
+
);
|
|
88
|
+
--tabs-icon-size: var(
|
|
89
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_icon-size
|
|
90
|
+
);
|
|
91
|
+
--tabs-min-width: var(
|
|
92
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_min-width
|
|
93
|
+
);
|
|
94
|
+
--tabs-max-width: var(
|
|
95
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_max-width
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
--tabs-active-border-size: var(
|
|
99
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_border-size
|
|
100
|
+
) !important;
|
|
101
|
+
--tabs-inactive-border-size: var(
|
|
102
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_border-size
|
|
103
|
+
) !important;
|
|
104
|
+
--tabs-border-radius: var(
|
|
105
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_properties_border-radius
|
|
106
|
+
) !important;
|
|
107
|
+
--tabs-border-color: var(
|
|
108
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_colors_border-color
|
|
109
|
+
) !important;
|
|
110
|
+
--tabs-color: var(
|
|
111
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_colors_border-color
|
|
112
|
+
) !important;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.root[data-variant="default"][data-orientation="horizontal"] {
|
|
116
|
+
--tabs-content-alignment: var(
|
|
117
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_orientation_horizontal_properties_tab-content-alignment
|
|
118
|
+
);
|
|
119
|
+
--tabs-space-between-tabs: var(
|
|
120
|
+
--recursica_ui-kit_components_tabs_variants_styles_default_variants_orientation_horizontal_properties_space-between-tabs
|
|
121
|
+
);
|
|
122
|
+
--tabs-content-gap: var(
|
|
123
|
+
--recursica_ui-kit_components_tabs_variants_styles_default_variants_orientation_horizontal_properties_tabs-content-gap
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
.root[data-variant="default"][data-orientation="horizontal"] .list {
|
|
127
|
+
gap: var(--tabs-space-between-tabs);
|
|
128
|
+
width: 100%;
|
|
129
|
+
margin-bottom: var(--tabs-content-gap);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.root[data-variant="default"][data-orientation="vertical"] {
|
|
133
|
+
--tabs-content-alignment: var(
|
|
134
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_orientation_vertical_properties_tab-content-alignment
|
|
135
|
+
);
|
|
136
|
+
--tabs-space-between-tabs: var(
|
|
137
|
+
--recursica_ui-kit_components_tabs_variants_styles_default_variants_orientation_vertical_properties_space-between-tabs
|
|
138
|
+
);
|
|
139
|
+
--tabs-content-gap: var(
|
|
140
|
+
--recursica_ui-kit_components_tabs_variants_styles_default_variants_orientation_vertical_properties_tabs-content-gap
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
.root[data-variant="default"][data-orientation="vertical"] .list {
|
|
144
|
+
gap: var(--tabs-space-between-tabs);
|
|
145
|
+
margin-right: var(--tabs-content-gap);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* Outline Variant */
|
|
149
|
+
.root[data-variant="outline"][data-orientation] {
|
|
150
|
+
--tabs-element-gap: var(
|
|
151
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_element-gap
|
|
152
|
+
);
|
|
153
|
+
--tabs-horizontal-padding: var(
|
|
154
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_horizontal-padding
|
|
155
|
+
);
|
|
156
|
+
--tabs-vertical-padding: var(
|
|
157
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_vertical-padding
|
|
158
|
+
);
|
|
159
|
+
--tabs-icon-size: var(
|
|
160
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_icon-size
|
|
161
|
+
);
|
|
162
|
+
--tabs-min-width: var(
|
|
163
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_min-width
|
|
164
|
+
);
|
|
165
|
+
--tabs-max-width: var(
|
|
166
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_max-width
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
--tabs-active-border-size: var(
|
|
170
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_border-size
|
|
171
|
+
) !important;
|
|
172
|
+
--tabs-inactive-border-size: var(
|
|
173
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_border-size
|
|
174
|
+
) !important;
|
|
175
|
+
--tabs-border-radius: var(
|
|
176
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_properties_border-radius
|
|
177
|
+
) !important;
|
|
178
|
+
--tabs-border-color: var(
|
|
179
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_colors_border-color
|
|
180
|
+
) !important;
|
|
181
|
+
--tabs-color: var(
|
|
182
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_colors_border-color
|
|
183
|
+
) !important;
|
|
184
|
+
--tabs-active-bg: var(
|
|
185
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_colors_background-color
|
|
186
|
+
);
|
|
187
|
+
/* The active tab's own background-color token above is transparent by design (it's meant to
|
|
188
|
+
let whichever ambient Layer surface sits behind the Tabs show through). That means it can't
|
|
189
|
+
double as an opaque "eraser" for the baseline-patch trick below, which needs a real paint to
|
|
190
|
+
replace, not reveal-through. Layer 0 is the default/outermost surface a Tabs instance sits
|
|
191
|
+
on absent a wrapping <Layer>; see OUTLINE SELECTION BORDER below for why this is needed. */
|
|
192
|
+
--tabs-baseline-patch-bg: var(--recursica_brand_layer_0_properties_surface);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.root[data-variant="outline"][data-orientation="horizontal"] {
|
|
196
|
+
--tabs-content-alignment: var(
|
|
197
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_orientation_horizontal_properties_tab-content-alignment
|
|
198
|
+
);
|
|
199
|
+
--tabs-space-between-tabs: var(
|
|
200
|
+
--recursica_ui-kit_components_tabs_variants_styles_outline_variants_orientation_horizontal_properties_space-between-tabs
|
|
201
|
+
);
|
|
202
|
+
--tabs-content-gap: var(
|
|
203
|
+
--recursica_ui-kit_components_tabs_variants_styles_outline_variants_orientation_horizontal_properties_tabs-content-gap
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
.root[data-variant="outline"][data-orientation="horizontal"] .list {
|
|
207
|
+
gap: var(--tabs-space-between-tabs);
|
|
208
|
+
width: 100%;
|
|
209
|
+
margin-bottom: var(--tabs-content-gap);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.root[data-variant="outline"][data-orientation="vertical"] {
|
|
213
|
+
--tabs-content-alignment: var(
|
|
214
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_orientation_vertical_properties_tab-content-alignment
|
|
215
|
+
);
|
|
216
|
+
--tabs-space-between-tabs: var(
|
|
217
|
+
--recursica_ui-kit_components_tabs_variants_styles_outline_variants_orientation_vertical_properties_space-between-tabs
|
|
218
|
+
);
|
|
219
|
+
--tabs-content-gap: var(
|
|
220
|
+
--recursica_ui-kit_components_tabs_variants_styles_outline_variants_orientation_vertical_properties_tabs-content-gap
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
.root[data-variant="outline"][data-orientation="vertical"] .list {
|
|
224
|
+
gap: var(--tabs-space-between-tabs);
|
|
225
|
+
margin-right: var(--tabs-content-gap);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* Pills Variant */
|
|
229
|
+
.root[data-variant="pills"][data-orientation] {
|
|
230
|
+
--tabs-element-gap: var(
|
|
231
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_element-gap
|
|
232
|
+
);
|
|
233
|
+
--tabs-horizontal-padding: var(
|
|
234
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_horizontal-padding
|
|
235
|
+
);
|
|
236
|
+
--tabs-vertical-padding: var(
|
|
237
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_vertical-padding
|
|
238
|
+
);
|
|
239
|
+
--tabs-icon-size: var(
|
|
240
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_icon-size
|
|
241
|
+
);
|
|
242
|
+
--tabs-min-width: var(
|
|
243
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_min-width
|
|
244
|
+
);
|
|
245
|
+
--tabs-max-width: var(
|
|
246
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_max-width
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
--tabs-active-border-size: var(
|
|
250
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_border-size
|
|
251
|
+
);
|
|
252
|
+
--tabs-inactive-border-size: var(
|
|
253
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_border-size
|
|
254
|
+
);
|
|
255
|
+
--tabs-border-radius: var(
|
|
256
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_properties_border-radius
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.root[data-variant="pills"][data-orientation="horizontal"] {
|
|
261
|
+
--tabs-content-alignment: var(
|
|
262
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_orientation_horizontal_properties_tab-content-alignment
|
|
263
|
+
);
|
|
264
|
+
--tabs-space-between-tabs: var(
|
|
265
|
+
--recursica_ui-kit_components_tabs_variants_styles_pills_variants_orientation_horizontal_properties_space-between-tabs
|
|
266
|
+
);
|
|
267
|
+
--tabs-content-gap: var(
|
|
268
|
+
--recursica_ui-kit_components_tabs_variants_styles_pills_variants_orientation_horizontal_properties_tabs-content-gap
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
.root[data-variant="pills"][data-orientation="horizontal"] .list {
|
|
272
|
+
gap: var(--tabs-space-between-tabs);
|
|
273
|
+
width: 100%;
|
|
274
|
+
margin-bottom: var(--tabs-content-gap);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.root[data-variant="pills"][data-orientation="vertical"] {
|
|
278
|
+
--tabs-content-alignment: var(
|
|
279
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_orientation_vertical_properties_tab-content-alignment
|
|
280
|
+
);
|
|
281
|
+
--tabs-space-between-tabs: var(
|
|
282
|
+
--recursica_ui-kit_components_tabs_variants_styles_pills_variants_orientation_vertical_properties_space-between-tabs
|
|
283
|
+
);
|
|
284
|
+
--tabs-content-gap: var(
|
|
285
|
+
--recursica_ui-kit_components_tabs_variants_styles_pills_variants_orientation_vertical_properties_tabs-content-gap
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
.root[data-variant="pills"][data-orientation="vertical"] .list {
|
|
289
|
+
gap: var(--tabs-space-between-tabs);
|
|
290
|
+
margin-right: var(--tabs-content-gap);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/* ---------------------------------
|
|
294
|
+
SELECTION INDICATOR & BASELINE
|
|
295
|
+
Mantine draws the active-tab underline natively off the shared --tabs-color var above. MUI has
|
|
296
|
+
no equivalent built-in, so we drive its own indicator slot (classes.indicator, wired in
|
|
297
|
+
Tabs.tsx) and the list's baseline border explicitly from the same vars. Pills has no underline
|
|
298
|
+
indicator — selection shows via the pill's own background/border (see COLORS & TYPOGRAPHY
|
|
299
|
+
below). Outline repurposes the indicator as a baseline patch rather than an underline (see
|
|
300
|
+
below).
|
|
301
|
+
--------------------------------- */
|
|
302
|
+
.root[data-variant="default"] .indicator {
|
|
303
|
+
background-color: var(--tabs-color) !important;
|
|
304
|
+
}
|
|
305
|
+
.root[data-variant="default"][data-orientation="horizontal"] .indicator {
|
|
306
|
+
height: var(--tabs-active-border-size) !important;
|
|
307
|
+
}
|
|
308
|
+
/* MUI's Tabs root has no border/padding of its own, so the list's margin-bottom (the
|
|
309
|
+
tabs-content-gap, used to space the panel below) collapses into the root's auto height instead
|
|
310
|
+
of stopping at the list's own border edge. The indicator is absolutely positioned against that
|
|
311
|
+
inflated root box, so without this offset it renders content-gap pixels below the baseline
|
|
312
|
+
instead of flush against it. */
|
|
313
|
+
.root[data-variant="default"][data-orientation="horizontal"]:not(
|
|
314
|
+
[data-inverted]
|
|
315
|
+
)
|
|
316
|
+
.indicator {
|
|
317
|
+
bottom: var(
|
|
318
|
+
--recursica_ui-kit_components_tabs_variants_styles_default_variants_orientation_horizontal_properties_tabs-content-gap
|
|
319
|
+
) !important;
|
|
320
|
+
}
|
|
321
|
+
/* width: same reasoning as the horizontal height above, rotated 90°.
|
|
322
|
+
right: same reasoning as the horizontal bottom offset above, rotated 90° — the list's
|
|
323
|
+
margin-right (this orientation's tabs-content-gap, spacing the panel to its right) inflates the
|
|
324
|
+
root's auto width past the list's own border-right edge. The indicator is absolutely positioned
|
|
325
|
+
against that wider box, so without this offset it renders content-gap pixels to the right of the
|
|
326
|
+
divider instead of flush against it. */
|
|
327
|
+
.root[data-variant="default"][data-orientation="vertical"] .indicator {
|
|
328
|
+
width: var(--tabs-active-border-size) !important;
|
|
329
|
+
right: var(--tabs-content-gap) !important;
|
|
330
|
+
}
|
|
331
|
+
.root[data-variant="default"][data-orientation="horizontal"][data-inverted]
|
|
332
|
+
.indicator {
|
|
333
|
+
bottom: auto !important;
|
|
334
|
+
top: 0 !important;
|
|
335
|
+
}
|
|
336
|
+
/* Vertical inverted mirror of the above: the list's content-gap margin moved from right to left
|
|
337
|
+
(see .root[data-orientation="vertical"][data-inverted] .list above), so the indicator's offset
|
|
338
|
+
has to track the same edge. */
|
|
339
|
+
.root[data-variant="default"][data-orientation="vertical"][data-inverted]
|
|
340
|
+
.indicator {
|
|
341
|
+
right: auto !important;
|
|
342
|
+
left: var(--tabs-content-gap) !important;
|
|
343
|
+
}
|
|
344
|
+
.root[data-variant="pills"] .indicator {
|
|
345
|
+
display: none !important;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* Outline has no sliding underline of its own, but reuses the indicator element (already
|
|
349
|
+
positioned/sized by MUI to exactly track the selected tab, no matter which one) as a baseline
|
|
350
|
+
patch instead of hiding it — see OUTLINE SELECTION BORDER below for why a patch is needed at
|
|
351
|
+
all, and why it has to live here (in the scroller) rather than on the tab itself. */
|
|
352
|
+
.root[data-variant="outline"] .indicator {
|
|
353
|
+
background-color: var(--tabs-baseline-patch-bg) !important;
|
|
354
|
+
}
|
|
355
|
+
.root[data-variant="outline"][data-orientation="horizontal"]:not(
|
|
356
|
+
[data-inverted]
|
|
357
|
+
)
|
|
358
|
+
.indicator {
|
|
359
|
+
height: var(--tabs-inactive-border-size) !important;
|
|
360
|
+
bottom: var(
|
|
361
|
+
--recursica_ui-kit_components_tabs_variants_styles_outline_variants_orientation_horizontal_properties_tabs-content-gap
|
|
362
|
+
) !important;
|
|
363
|
+
}
|
|
364
|
+
.root[data-variant="outline"][data-orientation="horizontal"][data-inverted]
|
|
365
|
+
.indicator {
|
|
366
|
+
height: var(--tabs-inactive-border-size) !important;
|
|
367
|
+
bottom: auto !important;
|
|
368
|
+
top: calc(-1 * var(--tabs-inactive-border-size)) !important;
|
|
369
|
+
}
|
|
370
|
+
.root[data-variant="outline"][data-orientation="vertical"] .indicator {
|
|
371
|
+
width: var(--tabs-inactive-border-size) !important;
|
|
372
|
+
right: calc(-1 * var(--tabs-inactive-border-size)) !important;
|
|
373
|
+
}
|
|
374
|
+
.root[data-variant="outline"][data-orientation="vertical"][data-inverted]
|
|
375
|
+
.indicator {
|
|
376
|
+
right: auto !important;
|
|
377
|
+
left: calc(-1 * var(--tabs-inactive-border-size)) !important;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.root[data-variant="default"][data-orientation="horizontal"] .list,
|
|
381
|
+
.root[data-variant="outline"][data-orientation="horizontal"] .list {
|
|
382
|
+
border-bottom: var(--tabs-inactive-border-size) solid var(--tabs-border-color);
|
|
383
|
+
}
|
|
384
|
+
.root[data-variant="default"][data-orientation="horizontal"][data-inverted]
|
|
385
|
+
.list,
|
|
386
|
+
.root[data-variant="outline"][data-orientation="horizontal"][data-inverted]
|
|
387
|
+
.list {
|
|
388
|
+
border-bottom: none;
|
|
389
|
+
border-top: var(--tabs-inactive-border-size) solid var(--tabs-border-color);
|
|
390
|
+
}
|
|
391
|
+
.root[data-variant="default"][data-orientation="vertical"] .list,
|
|
392
|
+
.root[data-variant="outline"][data-orientation="vertical"] .list {
|
|
393
|
+
border-right: var(--tabs-inactive-border-size) solid var(--tabs-border-color);
|
|
394
|
+
}
|
|
395
|
+
.root[data-variant="default"][data-orientation="vertical"][data-inverted] .list,
|
|
396
|
+
.root[data-variant="outline"][data-orientation="vertical"][data-inverted]
|
|
397
|
+
.list {
|
|
398
|
+
border-right: none;
|
|
399
|
+
border-left: var(--tabs-inactive-border-size) solid var(--tabs-border-color);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* ---------------------------------
|
|
403
|
+
TAB ELEMENT
|
|
404
|
+
--------------------------------- */
|
|
405
|
+
.root .tab {
|
|
406
|
+
/* MUI defaults icon+label tabs to a 72px min-height; Mantine's tab height is purely
|
|
407
|
+
content/padding-driven (auto), so without this reset MUI's row is visibly taller. */
|
|
408
|
+
min-height: auto !important;
|
|
409
|
+
min-width: var(--tabs-min-width);
|
|
410
|
+
max-width: var(--tabs-max-width);
|
|
411
|
+
padding: var(--tabs-vertical-padding) var(--tabs-horizontal-padding);
|
|
412
|
+
gap: var(--tabs-element-gap);
|
|
413
|
+
display: flex;
|
|
414
|
+
align-items: center;
|
|
415
|
+
justify-content: var(--tabs-content-alignment);
|
|
416
|
+
cursor: pointer;
|
|
417
|
+
position: relative;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* Hover effect (moved to bottom for specificity, see end of file) */
|
|
421
|
+
|
|
422
|
+
/* Icon support */
|
|
423
|
+
.root .tab svg {
|
|
424
|
+
width: var(--tabs-icon-size);
|
|
425
|
+
height: var(--tabs-icon-size);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/* Disabled State */
|
|
429
|
+
.root .tab[data-disabled] {
|
|
430
|
+
opacity: var(--recursica_brand_states_disabled);
|
|
431
|
+
cursor: not-allowed;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* ---------------------------------
|
|
435
|
+
BORDER RADIUS GEOMETRY
|
|
436
|
+
--------------------------------- */
|
|
437
|
+
|
|
438
|
+
/* Pills get full radius on all sides */
|
|
439
|
+
.root[data-variant="pills"] .tab {
|
|
440
|
+
border-radius: var(--tabs-border-radius);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/* Default & Outline Horizontal get top radius only so they sit flush on the panel */
|
|
444
|
+
.root[data-variant="default"][data-orientation="horizontal"]:not(
|
|
445
|
+
[data-inverted]
|
|
446
|
+
)
|
|
447
|
+
.tab,
|
|
448
|
+
.root[data-variant="outline"][data-orientation="horizontal"]:not(
|
|
449
|
+
[data-inverted]
|
|
450
|
+
)
|
|
451
|
+
.tab {
|
|
452
|
+
border-radius: var(--tabs-border-radius) var(--tabs-border-radius) 0 0;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* Inverted horizontal tabs hang downwards, so bottom corners are rounded */
|
|
456
|
+
.root[data-variant="default"][data-orientation="horizontal"][data-inverted]
|
|
457
|
+
.tab,
|
|
458
|
+
.root[data-variant="outline"][data-orientation="horizontal"][data-inverted]
|
|
459
|
+
.tab {
|
|
460
|
+
border-radius: 0 0 var(--tabs-border-radius) var(--tabs-border-radius);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/* Default & Outline Vertical get left radius only so they sit flush against the right-side panel */
|
|
464
|
+
.root[data-variant="default"][data-orientation="vertical"]:not([data-inverted])
|
|
465
|
+
.tab,
|
|
466
|
+
.root[data-variant="outline"][data-orientation="vertical"]:not([data-inverted])
|
|
467
|
+
.tab {
|
|
468
|
+
border-radius: var(--tabs-border-radius) 0 0 var(--tabs-border-radius);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/* Inverted vertical tabs sit to the right of the panel, so the flush edge — and the rounded
|
|
472
|
+
corners — flip to the right side. */
|
|
473
|
+
.root[data-variant="default"][data-orientation="vertical"][data-inverted] .tab,
|
|
474
|
+
.root[data-variant="outline"][data-orientation="vertical"][data-inverted] .tab {
|
|
475
|
+
border-radius: 0 var(--tabs-border-radius) var(--tabs-border-radius) 0;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/* ---------------------------------
|
|
479
|
+
OUTLINE SELECTION BORDER
|
|
480
|
+
Mantine's outline tab marks selection with a bordered box left open on the edge that touches
|
|
481
|
+
the list's own baseline, so the box visually connects to it instead of floating above it.
|
|
482
|
+
Every tab keeps the border geometry (transparent by default) so selecting a tab doesn't shift
|
|
483
|
+
layout; only the color changes on selection. The open edge here has 0 border-width, which
|
|
484
|
+
leaves the list's own baseline border showing straight through underneath — see the indicator
|
|
485
|
+
patch in SELECTION INDICATOR & BASELINE above, which covers just that segment. (A pseudo-element
|
|
486
|
+
on the tab itself can't do this: MUI clips tab content to its own bounds for ripple containment,
|
|
487
|
+
so anything extending past the tab's box to reach the list's border gets clipped away.)
|
|
488
|
+
--------------------------------- */
|
|
489
|
+
.root[data-variant="outline"] .tab {
|
|
490
|
+
border-style: solid;
|
|
491
|
+
border-color: transparent;
|
|
492
|
+
}
|
|
493
|
+
.root[data-variant="outline"][data-orientation="horizontal"]:not(
|
|
494
|
+
[data-inverted]
|
|
495
|
+
)
|
|
496
|
+
.tab {
|
|
497
|
+
border-width: var(--tabs-inactive-border-size)
|
|
498
|
+
var(--tabs-inactive-border-size) 0 var(--tabs-inactive-border-size);
|
|
499
|
+
}
|
|
500
|
+
.root[data-variant="outline"][data-orientation="horizontal"][data-inverted]
|
|
501
|
+
.tab {
|
|
502
|
+
border-width: 0 var(--tabs-inactive-border-size)
|
|
503
|
+
var(--tabs-inactive-border-size) var(--tabs-inactive-border-size);
|
|
504
|
+
}
|
|
505
|
+
.root[data-variant="outline"][data-orientation="vertical"] .tab {
|
|
506
|
+
border-width: var(--tabs-inactive-border-size) 0
|
|
507
|
+
var(--tabs-inactive-border-size) var(--tabs-inactive-border-size);
|
|
508
|
+
}
|
|
509
|
+
.root[data-variant="outline"][data-orientation="vertical"][data-inverted] .tab {
|
|
510
|
+
border-width: var(--tabs-inactive-border-size)
|
|
511
|
+
var(--tabs-inactive-border-size) var(--tabs-inactive-border-size) 0;
|
|
512
|
+
}
|
|
513
|
+
.root[data-variant="outline"] .tab:global(.Mui-selected) {
|
|
514
|
+
border-color: var(--tabs-color) !important;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/* ---------------------------------
|
|
518
|
+
COLORS & TYPOGRAPHY
|
|
519
|
+
Because colors are defined per-layer and theme via generic variable structures,
|
|
520
|
+
we rely on Mantine injecting the correct data-variant attributes, but we must
|
|
521
|
+
map the colors in our CSS. Recursica handles dark/light automatically via root.
|
|
522
|
+
Typography is now scoped per style (not shared flat across variants), so each
|
|
523
|
+
variant repeats its own inactive/active text rules.
|
|
524
|
+
--------------------------------- */
|
|
525
|
+
|
|
526
|
+
/* Default Variant Colors & Typography */
|
|
527
|
+
.root[data-variant="default"] .tab {
|
|
528
|
+
background-color: var(
|
|
529
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_colors_background-color
|
|
530
|
+
);
|
|
531
|
+
color: var(
|
|
532
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_colors_text-color
|
|
533
|
+
);
|
|
534
|
+
|
|
535
|
+
font-family: var(
|
|
536
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_font-family
|
|
537
|
+
);
|
|
538
|
+
font-size: var(
|
|
539
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_font-size
|
|
540
|
+
);
|
|
541
|
+
font-style: var(
|
|
542
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_font-style
|
|
543
|
+
);
|
|
544
|
+
font-weight: var(
|
|
545
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_font-weight
|
|
546
|
+
);
|
|
547
|
+
letter-spacing: var(
|
|
548
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_letter-spacing
|
|
549
|
+
);
|
|
550
|
+
line-height: var(
|
|
551
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_line-height
|
|
552
|
+
);
|
|
553
|
+
text-decoration: var(
|
|
554
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_text-decoration
|
|
555
|
+
);
|
|
556
|
+
text-transform: var(
|
|
557
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_text_text-transform
|
|
558
|
+
);
|
|
559
|
+
}
|
|
560
|
+
.root[data-variant="default"] .tab svg {
|
|
561
|
+
color: var(
|
|
562
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_inactive_properties_colors_icon-color
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
.root[data-variant="default"] .tab:global(.Mui-selected) {
|
|
567
|
+
background-color: var(
|
|
568
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_colors_background-color
|
|
569
|
+
) !important;
|
|
570
|
+
color: var(
|
|
571
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_colors_text-color
|
|
572
|
+
) !important;
|
|
573
|
+
|
|
574
|
+
font-family: var(
|
|
575
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_font-family
|
|
576
|
+
) !important;
|
|
577
|
+
font-size: var(
|
|
578
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_font-size
|
|
579
|
+
) !important;
|
|
580
|
+
font-style: var(
|
|
581
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_font-style
|
|
582
|
+
) !important;
|
|
583
|
+
font-weight: var(
|
|
584
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_font-weight
|
|
585
|
+
) !important;
|
|
586
|
+
letter-spacing: var(
|
|
587
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_letter-spacing
|
|
588
|
+
) !important;
|
|
589
|
+
line-height: var(
|
|
590
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_line-height
|
|
591
|
+
) !important;
|
|
592
|
+
text-decoration: var(
|
|
593
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_text-decoration
|
|
594
|
+
) !important;
|
|
595
|
+
text-transform: var(
|
|
596
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_text_text-transform
|
|
597
|
+
) !important;
|
|
598
|
+
}
|
|
599
|
+
.root[data-variant="default"] .tab:global(.Mui-selected) svg {
|
|
600
|
+
color: var(
|
|
601
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_default_variants_selection-states_active_properties_colors_icon-color
|
|
602
|
+
) !important;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/* Outline Variant Colors & Typography */
|
|
606
|
+
.root[data-variant="outline"] .tab {
|
|
607
|
+
background-color: var(
|
|
608
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_colors_background-color
|
|
609
|
+
);
|
|
610
|
+
color: var(
|
|
611
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_colors_text-color
|
|
612
|
+
);
|
|
613
|
+
|
|
614
|
+
font-family: var(
|
|
615
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_font-family
|
|
616
|
+
);
|
|
617
|
+
font-size: var(
|
|
618
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_font-size
|
|
619
|
+
);
|
|
620
|
+
font-style: var(
|
|
621
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_font-style
|
|
622
|
+
);
|
|
623
|
+
font-weight: var(
|
|
624
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_font-weight
|
|
625
|
+
);
|
|
626
|
+
letter-spacing: var(
|
|
627
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_letter-spacing
|
|
628
|
+
);
|
|
629
|
+
line-height: var(
|
|
630
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_line-height
|
|
631
|
+
);
|
|
632
|
+
text-decoration: var(
|
|
633
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_text-decoration
|
|
634
|
+
);
|
|
635
|
+
text-transform: var(
|
|
636
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_text_text-transform
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
.root[data-variant="outline"] .tab svg {
|
|
640
|
+
color: var(
|
|
641
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_inactive_properties_colors_icon-color
|
|
642
|
+
);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
.root[data-variant="outline"] .tab:global(.Mui-selected) {
|
|
646
|
+
background-color: var(--tabs-active-bg) !important;
|
|
647
|
+
color: var(
|
|
648
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_colors_text-color
|
|
649
|
+
) !important;
|
|
650
|
+
|
|
651
|
+
font-family: var(
|
|
652
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_font-family
|
|
653
|
+
) !important;
|
|
654
|
+
font-size: var(
|
|
655
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_font-size
|
|
656
|
+
) !important;
|
|
657
|
+
font-style: var(
|
|
658
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_font-style
|
|
659
|
+
) !important;
|
|
660
|
+
font-weight: var(
|
|
661
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_font-weight
|
|
662
|
+
) !important;
|
|
663
|
+
letter-spacing: var(
|
|
664
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_letter-spacing
|
|
665
|
+
) !important;
|
|
666
|
+
line-height: var(
|
|
667
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_line-height
|
|
668
|
+
) !important;
|
|
669
|
+
text-decoration: var(
|
|
670
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_text-decoration
|
|
671
|
+
) !important;
|
|
672
|
+
text-transform: var(
|
|
673
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_text_text-transform
|
|
674
|
+
) !important;
|
|
675
|
+
}
|
|
676
|
+
.root[data-variant="outline"] .tab:global(.Mui-selected) svg {
|
|
677
|
+
color: var(
|
|
678
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_outline_variants_selection-states_active_properties_colors_icon-color
|
|
679
|
+
) !important;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/* Pills Variant Colors & Typography */
|
|
683
|
+
.root[data-variant="pills"] .tab {
|
|
684
|
+
background-color: var(
|
|
685
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_colors_background-color
|
|
686
|
+
);
|
|
687
|
+
color: var(
|
|
688
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_colors_text-color
|
|
689
|
+
);
|
|
690
|
+
border: var(--tabs-inactive-border-size) solid
|
|
691
|
+
var(
|
|
692
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_colors_border-color
|
|
693
|
+
);
|
|
694
|
+
|
|
695
|
+
font-family: var(
|
|
696
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_font-family
|
|
697
|
+
);
|
|
698
|
+
font-size: var(
|
|
699
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_font-size
|
|
700
|
+
);
|
|
701
|
+
font-style: var(
|
|
702
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_font-style
|
|
703
|
+
);
|
|
704
|
+
font-weight: var(
|
|
705
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_font-weight
|
|
706
|
+
);
|
|
707
|
+
letter-spacing: var(
|
|
708
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_letter-spacing
|
|
709
|
+
);
|
|
710
|
+
line-height: var(
|
|
711
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_line-height
|
|
712
|
+
);
|
|
713
|
+
text-decoration: var(
|
|
714
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_text-decoration
|
|
715
|
+
);
|
|
716
|
+
text-transform: var(
|
|
717
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_text_text-transform
|
|
718
|
+
);
|
|
719
|
+
}
|
|
720
|
+
.root[data-variant="pills"] .tab svg {
|
|
721
|
+
color: var(
|
|
722
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_inactive_properties_colors_icon-color
|
|
723
|
+
);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.root[data-variant="pills"] .tab:global(.Mui-selected) {
|
|
727
|
+
background-color: var(
|
|
728
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_colors_background-color
|
|
729
|
+
) !important;
|
|
730
|
+
color: var(
|
|
731
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_colors_text-color
|
|
732
|
+
) !important;
|
|
733
|
+
border: var(--tabs-active-border-size) solid
|
|
734
|
+
var(
|
|
735
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_colors_border-color
|
|
736
|
+
) !important;
|
|
737
|
+
|
|
738
|
+
font-family: var(
|
|
739
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_font-family
|
|
740
|
+
) !important;
|
|
741
|
+
font-size: var(
|
|
742
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_font-size
|
|
743
|
+
) !important;
|
|
744
|
+
font-style: var(
|
|
745
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_font-style
|
|
746
|
+
) !important;
|
|
747
|
+
font-weight: var(
|
|
748
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_font-weight
|
|
749
|
+
) !important;
|
|
750
|
+
letter-spacing: var(
|
|
751
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_letter-spacing
|
|
752
|
+
) !important;
|
|
753
|
+
line-height: var(
|
|
754
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_line-height
|
|
755
|
+
) !important;
|
|
756
|
+
text-decoration: var(
|
|
757
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_text-decoration
|
|
758
|
+
) !important;
|
|
759
|
+
text-transform: var(
|
|
760
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_text_text-transform
|
|
761
|
+
) !important;
|
|
762
|
+
}
|
|
763
|
+
.root[data-variant="pills"] .tab:global(.Mui-selected) svg {
|
|
764
|
+
color: var(
|
|
765
|
+
--recursica_ui-kit_components_tabs-item_variants_styles_pills_variants_selection-states_active_properties_colors_icon-color
|
|
766
|
+
) !important;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* Content panel
|
|
770
|
+
Note: unlike .list (MUI's internal flexContainer, a true descendant of .root), TabPanel
|
|
771
|
+
renders as a DOM sibling of <Tabs>, not nested inside it — `.root .panel` would never match.
|
|
772
|
+
Scope directly off the CSS-module-scoped class name instead. */
|
|
773
|
+
.panel {
|
|
774
|
+
/* Recursica doesn't define panel colors intrinsically, leaves it to child content */
|
|
775
|
+
/* MUI's TabPanel defaults to theme.spacing(3) padding; Mantine's Tabs.Panel has none, and
|
|
776
|
+
the tab-to-content gap is already carried by the list's own margin (tabs-content-gap) */
|
|
777
|
+
padding: 0 !important;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
/* Hover state uses a pseudo-element to apply opacity to the background without fading the text.
|
|
781
|
+
No per-variant hover-color/hover-opacity tokens exist anymore; use the generic overlay tokens
|
|
782
|
+
shared across components instead. */
|
|
783
|
+
.root[data-variant] .tab:not(:global(.Mui-selected)):hover::before {
|
|
784
|
+
content: "";
|
|
785
|
+
position: absolute;
|
|
786
|
+
inset: 0;
|
|
787
|
+
border-radius: inherit;
|
|
788
|
+
background-color: var(--recursica_brand_states_hover_color);
|
|
789
|
+
opacity: var(--recursica_brand_states_hover_opacity);
|
|
790
|
+
pointer-events: none;
|
|
791
|
+
z-index: 0;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
/* Ensure tab content sits above the hover background. Excludes MuiTouchRipple-root: it relies on
|
|
795
|
+
its native position:absolute to stay out of flow, and forcing it to position:relative here
|
|
796
|
+
turns it into a real flex item — inserting an extra element-gap into the tab's flex row (and
|
|
797
|
+
growing the tab's width) the first time it's clicked, permanently shifting later siblings. */
|
|
798
|
+
.root .tab > *:not(:global(.MuiTouchRipple-root)) {
|
|
799
|
+
z-index: 1;
|
|
800
|
+
position: relative;
|
|
801
|
+
}
|