@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,203 @@
|
|
|
1
|
+
/* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
|
|
2
|
+
* Global hover/focus/disabled state tokens (recursica_variables_scoped.css header, 'Hover & Focus states' / 'Disabled state' — implicit rule for every interactive element; components must not define their own per-component treatment).
|
|
3
|
+
* recursica-allow-brand: --recursica_brand_states_focus_blur
|
|
4
|
+
* recursica-allow-brand: --recursica_brand_states_focus_border-size
|
|
5
|
+
* recursica-allow-brand: --recursica_brand_states_focus_color
|
|
6
|
+
* recursica-allow-brand: --recursica_brand_states_focus_margin
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* LAYOUT SPACING OVERRIDES:
|
|
10
|
+
- Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens.
|
|
11
|
+
- Also sets the --textarea-control-{max,min}-width hooks consumed inline in TextArea.tsx, since
|
|
12
|
+
the token schema no longer provides a single layout-agnostic min/max width. */
|
|
13
|
+
.layoutOverride {
|
|
14
|
+
--form-control-margin-bottom: var(
|
|
15
|
+
--recursica_ui-kit_components_textarea_variants_layouts_stacked_properties_top-bottom-margin
|
|
16
|
+
);
|
|
17
|
+
--textarea-control-max-width: var(
|
|
18
|
+
--recursica_ui-kit_components_textarea_variants_layouts_stacked_properties_max-width
|
|
19
|
+
);
|
|
20
|
+
--textarea-control-min-width: var(
|
|
21
|
+
--recursica_ui-kit_components_textarea_variants_layouts_stacked_properties_min-width
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.layoutOverride[data-form-layout="side-by-side"] {
|
|
26
|
+
--form-control-margin-bottom: var(
|
|
27
|
+
--recursica_ui-kit_components_textarea_variants_layouts_side-by-side_properties_top-bottom-margin
|
|
28
|
+
);
|
|
29
|
+
--textarea-control-max-width: var(
|
|
30
|
+
--recursica_ui-kit_components_textarea_variants_layouts_side-by-side_properties_max-width
|
|
31
|
+
);
|
|
32
|
+
--textarea-control-min-width: var(
|
|
33
|
+
--recursica_ui-kit_components_textarea_variants_layouts_side-by-side_properties_min-width
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* HARDCODED VALUES:
|
|
38
|
+
- border-width: 1px. Native geometric boundary for the input box.
|
|
39
|
+
- border-style: solid. Native structural rendering rule.
|
|
40
|
+
- outline: none. Bypassing browser focus rings to rely strictly on Recursica focus states natively.
|
|
41
|
+
- flex/layout: display: flex on the root wrapper safely encapsulating internal section rendering.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
.root {
|
|
45
|
+
display: flex;
|
|
46
|
+
position: relative;
|
|
47
|
+
width: 100%;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.input {
|
|
51
|
+
/* Structural Overrides */
|
|
52
|
+
width: 100%;
|
|
53
|
+
box-sizing: border-box;
|
|
54
|
+
margin: 0;
|
|
55
|
+
|
|
56
|
+
/* Sizing driven by rows token */
|
|
57
|
+
min-height: calc(
|
|
58
|
+
var(--recursica_ui-kit_components_textarea_properties_rows) *
|
|
59
|
+
var(--recursica_ui-kit_components_textarea_properties_text_line-height) +
|
|
60
|
+
2 *
|
|
61
|
+
var(--recursica_ui-kit_components_textarea_properties_vertical-padding) +
|
|
62
|
+
2px
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
/* Box Geometry */
|
|
66
|
+
padding-top: var(
|
|
67
|
+
--recursica_ui-kit_components_textarea_properties_vertical-padding
|
|
68
|
+
);
|
|
69
|
+
padding-bottom: var(
|
|
70
|
+
--recursica_ui-kit_components_textarea_properties_vertical-padding
|
|
71
|
+
);
|
|
72
|
+
padding-left: var(
|
|
73
|
+
--recursica_ui-kit_components_textarea_properties_horizontal-padding
|
|
74
|
+
);
|
|
75
|
+
padding-right: var(
|
|
76
|
+
--recursica_ui-kit_components_textarea_properties_horizontal-padding
|
|
77
|
+
);
|
|
78
|
+
border-radius: var(
|
|
79
|
+
--recursica_ui-kit_components_textarea_properties_border-radius
|
|
80
|
+
);
|
|
81
|
+
border-width: 1px;
|
|
82
|
+
border-style: solid;
|
|
83
|
+
|
|
84
|
+
/* Strict Typography Unification */
|
|
85
|
+
font-family: var(
|
|
86
|
+
--recursica_ui-kit_components_textarea_properties_text_font-family
|
|
87
|
+
);
|
|
88
|
+
font-size: var(
|
|
89
|
+
--recursica_ui-kit_components_textarea_properties_text_font-size
|
|
90
|
+
);
|
|
91
|
+
font-style: var(
|
|
92
|
+
--recursica_ui-kit_components_textarea_properties_text_font-style
|
|
93
|
+
);
|
|
94
|
+
font-weight: var(
|
|
95
|
+
--recursica_ui-kit_components_textarea_properties_text_font-weight
|
|
96
|
+
);
|
|
97
|
+
letter-spacing: var(
|
|
98
|
+
--recursica_ui-kit_components_textarea_properties_text_letter-spacing
|
|
99
|
+
);
|
|
100
|
+
line-height: var(
|
|
101
|
+
--recursica_ui-kit_components_textarea_properties_text_line-height
|
|
102
|
+
);
|
|
103
|
+
text-decoration: var(
|
|
104
|
+
--recursica_ui-kit_components_textarea_properties_text_text-decoration
|
|
105
|
+
);
|
|
106
|
+
text-transform: var(
|
|
107
|
+
--recursica_ui-kit_components_textarea_properties_text_text-transform
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
/* Base State Default Execution */
|
|
111
|
+
background-color: var(
|
|
112
|
+
--recursica_ui-kit_components_textarea_properties_colors_background-color
|
|
113
|
+
);
|
|
114
|
+
border-color: var(
|
|
115
|
+
--recursica_ui-kit_components_textarea_properties_colors_border-color
|
|
116
|
+
);
|
|
117
|
+
color: var(
|
|
118
|
+
--recursica_ui-kit_components_textarea_properties_colors_text-color
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
outline: none;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.input::placeholder {
|
|
125
|
+
opacity: var(
|
|
126
|
+
--recursica_ui-kit_components_textarea_properties_placeholder-opacity
|
|
127
|
+
);
|
|
128
|
+
color: inherit;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* MUI always renders multiline inputs through TextareaAutosize, which sets an inline `height`
|
|
132
|
+
that otherwise wins over the min-height above. Pin the height to the same rows-based formula
|
|
133
|
+
when autosize isn't requested, so it matches the plain (non-autosizing) textarea Mantine renders. */
|
|
134
|
+
.root:not([data-autosize]) .input {
|
|
135
|
+
height: calc(
|
|
136
|
+
var(--recursica_ui-kit_components_textarea_properties_rows) *
|
|
137
|
+
var(--recursica_ui-kit_components_textarea_properties_text_line-height) +
|
|
138
|
+
2 *
|
|
139
|
+
var(--recursica_ui-kit_components_textarea_properties_vertical-padding) +
|
|
140
|
+
2px
|
|
141
|
+
) !important;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* TextareaAutosize measures natural content height using a second, aria-hidden shadow
|
|
145
|
+
<textarea> that shares this exact className (see @mui/material/TextareaAutosize). Our
|
|
146
|
+
min-height above is meant only as the visible textarea's cosmetic floor; left on the shadow
|
|
147
|
+
node it forces every measured "row" up to that same floor, which corrupts the
|
|
148
|
+
minRows-based-on-singleRowHeight calculation and roughly doubles the real, computed height.
|
|
149
|
+
Neutralizing it here restores accurate content measurement — the visible textarea still gets
|
|
150
|
+
the min-height floor applied to it directly. */
|
|
151
|
+
.input[aria-hidden="true"] {
|
|
152
|
+
min-height: 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* -------------------------------------
|
|
156
|
+
STATE CASCADE ARCHITECTURE
|
|
157
|
+
-------------------------------------- */
|
|
158
|
+
|
|
159
|
+
/* Focus State Mapping (Triggered internally via browser focus rules) */
|
|
160
|
+
/* The token schema no longer provides per-component focus colors; apply the generic focus ring
|
|
161
|
+
tokens as a box-shadow ring instead of a color swap. */
|
|
162
|
+
.input:focus-within,
|
|
163
|
+
.input:focus {
|
|
164
|
+
box-shadow:
|
|
165
|
+
0 0 0 var(--recursica_brand_states_focus_border-size)
|
|
166
|
+
var(--recursica_brand_states_focus_color),
|
|
167
|
+
0 0 var(--recursica_brand_states_focus_blur)
|
|
168
|
+
var(--recursica_brand_states_focus_margin)
|
|
169
|
+
var(--recursica_brand_states_focus_color);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Error State Mapping
|
|
173
|
+
MUI only stamps the global `Mui-error` state class onto the InputBase root slot (not the
|
|
174
|
+
input element itself), so the error trigger is scoped from `.root` down to `.input`. */
|
|
175
|
+
.root:global(.Mui-error) .input {
|
|
176
|
+
border-color: var(
|
|
177
|
+
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_border-color
|
|
178
|
+
) !important;
|
|
179
|
+
background-color: var(
|
|
180
|
+
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_background-color
|
|
181
|
+
) !important;
|
|
182
|
+
color: var(
|
|
183
|
+
--recursica_ui-kit_components_textarea_variants_states_error_properties_colors_text-color
|
|
184
|
+
) !important;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* Disabled State Mapping
|
|
188
|
+
MUI stamps `Mui-disabled` onto both the root slot and the input element directly. */
|
|
189
|
+
.input:global(.Mui-disabled) {
|
|
190
|
+
border-color: var(
|
|
191
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_border-color
|
|
192
|
+
) !important;
|
|
193
|
+
background-color: var(
|
|
194
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_background-color
|
|
195
|
+
) !important;
|
|
196
|
+
color: var(
|
|
197
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_colors_text-color
|
|
198
|
+
) !important;
|
|
199
|
+
opacity: var(
|
|
200
|
+
--recursica_ui-kit_components_textarea_variants_states_disabled_properties_opacity
|
|
201
|
+
) !important;
|
|
202
|
+
cursor: not-allowed;
|
|
203
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
3
|
+
import { TextArea } from "./TextArea";
|
|
4
|
+
import { formControlArgTypes } from "../../../.storybook/commonArgTypes";
|
|
5
|
+
|
|
6
|
+
type TextAreaStoryProps = React.ComponentProps<typeof TextArea>;
|
|
7
|
+
|
|
8
|
+
const meta: Meta<TextAreaStoryProps> = {
|
|
9
|
+
title: "UI-Kit/TextArea",
|
|
10
|
+
component: TextArea,
|
|
11
|
+
tags: ["autodocs"],
|
|
12
|
+
parameters: {
|
|
13
|
+
docs: {
|
|
14
|
+
description: {
|
|
15
|
+
component:
|
|
16
|
+
"TextArea provides a multi-line input field, mapping layout explicitly over the standardized FormControlWrapper.",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
label: "Description",
|
|
22
|
+
assistiveText: "Enter your full description here.",
|
|
23
|
+
disabled: false,
|
|
24
|
+
required: false,
|
|
25
|
+
readOnly: false,
|
|
26
|
+
autosize: false,
|
|
27
|
+
},
|
|
28
|
+
argTypes: {
|
|
29
|
+
disabled: {
|
|
30
|
+
control: "boolean",
|
|
31
|
+
},
|
|
32
|
+
...formControlArgTypes,
|
|
33
|
+
readOnly: {
|
|
34
|
+
control: "boolean",
|
|
35
|
+
},
|
|
36
|
+
autosize: {
|
|
37
|
+
control: "boolean",
|
|
38
|
+
},
|
|
39
|
+
minRows: {
|
|
40
|
+
control: "number",
|
|
41
|
+
},
|
|
42
|
+
maxRows: {
|
|
43
|
+
control: "number",
|
|
44
|
+
},
|
|
45
|
+
value: {
|
|
46
|
+
control: "text",
|
|
47
|
+
},
|
|
48
|
+
placeholder: {
|
|
49
|
+
control: "text",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default meta;
|
|
55
|
+
|
|
56
|
+
type Story = StoryObj<TextAreaStoryProps>;
|
|
57
|
+
|
|
58
|
+
export const Default: Story = {
|
|
59
|
+
args: {
|
|
60
|
+
placeholder: "Type something long...",
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const Autosize: Story = {
|
|
65
|
+
args: {
|
|
66
|
+
label: "Auto-sizing TextArea",
|
|
67
|
+
autosize: true,
|
|
68
|
+
minRows: 2,
|
|
69
|
+
maxRows: 6,
|
|
70
|
+
placeholder: "Type multiple lines here. Watch it grow!",
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export const StaticError: Story = {
|
|
75
|
+
args: {
|
|
76
|
+
error: "This field requires a detailed explanation.",
|
|
77
|
+
value: "Some bad input.",
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const StaticDisabled: Story = {
|
|
82
|
+
args: {
|
|
83
|
+
disabled: true,
|
|
84
|
+
value: "This content is locked.",
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export const StaticReadOnly: Story = {
|
|
89
|
+
args: {
|
|
90
|
+
label: "Read Only View",
|
|
91
|
+
readOnly: true,
|
|
92
|
+
value: "This text is safely frozen in read-only form.",
|
|
93
|
+
},
|
|
94
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// Placeholder for future TextArea component tests. Add tests here if/when needed.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import React, { forwardRef } from "react";
|
|
2
|
+
import {
|
|
3
|
+
TextField as MuiTextarea,
|
|
4
|
+
type TextFieldProps as MuiTextareaProps,
|
|
5
|
+
} from "@mui/material";
|
|
6
|
+
import { type ReadOnlyControlProps } from "@recursica/adapter-common";
|
|
7
|
+
// Removed unused TextField import
|
|
8
|
+
import {
|
|
9
|
+
filterStylingProps,
|
|
10
|
+
omitUnsupportedProps,
|
|
11
|
+
mergeClassNames,
|
|
12
|
+
type RecursicaOverStyled,
|
|
13
|
+
} from "../../utils/filterStylingProps";
|
|
14
|
+
import { type RecursicaFormControlWrapperProps } from "../FormControlWrapper/FormControlWrapper";
|
|
15
|
+
import { WithReadOnlyWrapper } from "../ReadOnlyField/WithReadOnlyWrapper";
|
|
16
|
+
import styles from "./TextArea.module.css";
|
|
17
|
+
|
|
18
|
+
import { type RecursicaTextAreaProps as BaseRecursicaTextAreaProps } from "@recursica/adapter-common";
|
|
19
|
+
|
|
20
|
+
export interface RecursicaTextAreaProps
|
|
21
|
+
extends Omit<
|
|
22
|
+
MuiTextareaProps,
|
|
23
|
+
| keyof React.HTMLAttributes<HTMLDivElement>
|
|
24
|
+
| "size"
|
|
25
|
+
| "variant"
|
|
26
|
+
| "radius"
|
|
27
|
+
| "wrapperProps"
|
|
28
|
+
| "maxRows"
|
|
29
|
+
| "minRows"
|
|
30
|
+
| "classes"
|
|
31
|
+
| "error"
|
|
32
|
+
>,
|
|
33
|
+
Omit<
|
|
34
|
+
RecursicaFormControlWrapperProps,
|
|
35
|
+
"controlMaxWidth" | "controlMinWidth"
|
|
36
|
+
>,
|
|
37
|
+
ReadOnlyControlProps,
|
|
38
|
+
BaseRecursicaTextAreaProps {}
|
|
39
|
+
|
|
40
|
+
export type TextAreaProps = RecursicaOverStyled<RecursicaTextAreaProps>;
|
|
41
|
+
|
|
42
|
+
export const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
43
|
+
function TextArea(props, ref) {
|
|
44
|
+
const {
|
|
45
|
+
overStyled = false,
|
|
46
|
+
formLayout = "stacked",
|
|
47
|
+
|
|
48
|
+
// Label & Wrapper Maps
|
|
49
|
+
labelSize,
|
|
50
|
+
labelAlignment,
|
|
51
|
+
labelOptionalText,
|
|
52
|
+
labelWithEditIcon,
|
|
53
|
+
onLabelEditClick,
|
|
54
|
+
|
|
55
|
+
label,
|
|
56
|
+
assistiveText,
|
|
57
|
+
assistiveWithIcon,
|
|
58
|
+
error,
|
|
59
|
+
required,
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
61
|
+
withAsterisk,
|
|
62
|
+
id,
|
|
63
|
+
className,
|
|
64
|
+
style,
|
|
65
|
+
disabled,
|
|
66
|
+
readOnly,
|
|
67
|
+
readOnlyComponent,
|
|
68
|
+
emptyValueComponent,
|
|
69
|
+
value,
|
|
70
|
+
defaultValue,
|
|
71
|
+
autosize,
|
|
72
|
+
...rest
|
|
73
|
+
} = props;
|
|
74
|
+
|
|
75
|
+
// Props this component intentionally doesn't support — deleted at runtime so they can't leak
|
|
76
|
+
// through even if a caller forces them via plain JavaScript, bypassing the Omit<> above.
|
|
77
|
+
const UNSUPPORTED_PROPS = [
|
|
78
|
+
"size", // Recursica controls sizing via design tokens, not MUI's native small/medium size
|
|
79
|
+
"variant", // Recursica styles the naked textarea directly; MUI's standard/filled/outlined unused
|
|
80
|
+
] as const satisfies readonly (keyof MuiTextareaProps)[];
|
|
81
|
+
|
|
82
|
+
const sanitizedProps = omitUnsupportedProps(
|
|
83
|
+
filterStylingProps(rest, overStyled),
|
|
84
|
+
UNSUPPORTED_PROPS,
|
|
85
|
+
);
|
|
86
|
+
const restRecord = sanitizedProps as Record<string, unknown>;
|
|
87
|
+
|
|
88
|
+
// The `slotProps` prop is NOT omitted from this component's public type, so a caller can
|
|
89
|
+
// legitimately supply it — merge it (rather than letting our own `slotProps.input` spread
|
|
90
|
+
// after theirs and clobber `disableUnderline`/`classes`/`data-autosize` wholesale).
|
|
91
|
+
const callerSlotProps = restRecord.slotProps as
|
|
92
|
+
| { input?: Record<string, unknown> }
|
|
93
|
+
| undefined;
|
|
94
|
+
const mergedInputClasses = mergeClassNames(
|
|
95
|
+
{ root: styles.root, input: styles.input },
|
|
96
|
+
callerSlotProps?.input?.classes as
|
|
97
|
+
| Partial<Record<string, string>>
|
|
98
|
+
| undefined,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const wrapperClass = className
|
|
102
|
+
? `${styles.layoutOverride} ${className}`
|
|
103
|
+
: styles.layoutOverride;
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<WithReadOnlyWrapper
|
|
107
|
+
className={wrapperClass}
|
|
108
|
+
style={style as React.CSSProperties}
|
|
109
|
+
controlMaxWidth="var(--textarea-control-max-width)"
|
|
110
|
+
controlMinWidth="var(--textarea-control-min-width)"
|
|
111
|
+
overStyled={overStyled as true}
|
|
112
|
+
formLayout={formLayout}
|
|
113
|
+
labelSize={labelSize}
|
|
114
|
+
labelAlignment={labelAlignment}
|
|
115
|
+
labelOptionalText={labelOptionalText}
|
|
116
|
+
labelWithEditIcon={labelWithEditIcon}
|
|
117
|
+
onLabelEditClick={onLabelEditClick}
|
|
118
|
+
label={label}
|
|
119
|
+
assistiveText={assistiveText}
|
|
120
|
+
assistiveWithIcon={assistiveWithIcon}
|
|
121
|
+
error={error}
|
|
122
|
+
required={required}
|
|
123
|
+
id={id}
|
|
124
|
+
readOnly={readOnly}
|
|
125
|
+
readOnlyComponent={readOnlyComponent}
|
|
126
|
+
emptyValueComponent={emptyValueComponent}
|
|
127
|
+
readOnlyType="text"
|
|
128
|
+
readOnlyValue={value !== undefined ? value : defaultValue}
|
|
129
|
+
readOnlyNativeProps={props}
|
|
130
|
+
activeComponent={
|
|
131
|
+
/* Naked Input execution safely decoupled from Mui's macro Input.Wrapper DOM hooks */
|
|
132
|
+
<MuiTextarea
|
|
133
|
+
{...(sanitizedProps as unknown as MuiTextareaProps)}
|
|
134
|
+
multiline
|
|
135
|
+
variant="standard"
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
+
inputRef={ref as any}
|
|
138
|
+
disabled={disabled}
|
|
139
|
+
value={value}
|
|
140
|
+
defaultValue={defaultValue}
|
|
141
|
+
label={undefined}
|
|
142
|
+
error={!!error}
|
|
143
|
+
required={undefined}
|
|
144
|
+
slotProps={{
|
|
145
|
+
...callerSlotProps,
|
|
146
|
+
input: {
|
|
147
|
+
...callerSlotProps?.input,
|
|
148
|
+
disableUnderline: true,
|
|
149
|
+
classes: mergedInputClasses,
|
|
150
|
+
...({
|
|
151
|
+
"data-autosize": autosize ? "true" : undefined,
|
|
152
|
+
} as Record<string, unknown>),
|
|
153
|
+
},
|
|
154
|
+
}}
|
|
155
|
+
/>
|
|
156
|
+
}
|
|
157
|
+
/>
|
|
158
|
+
);
|
|
159
|
+
},
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
TextArea.displayName = "TextArea";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# TextArea - Usage Guide
|
|
2
|
+
|
|
3
|
+
This document describes how to integrate and use the `TextArea` component in your projects using `@recursica/adapter-mui-v7`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Import Reference
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { TextArea } from "@recursica/adapter-mui-v7";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Basic Example
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import React from "react";
|
|
19
|
+
import { TextArea } from "@recursica/adapter-mui-v7";
|
|
20
|
+
|
|
21
|
+
export default function Demo() {
|
|
22
|
+
return (
|
|
23
|
+
<TextArea label="Comments" placeholder="Leave your comments here..." />
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 3. Design System Integration
|
|
31
|
+
|
|
32
|
+
All Recursica components in the `@recursica/adapter-mui-v7` package adhere strictly to design system spacing, scaling, and behavior patterns.
|
|
33
|
+
|
|
34
|
+
> [!IMPORTANT]
|
|
35
|
+
>
|
|
36
|
+
> - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
|
|
37
|
+
> - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
|
|
38
|
+
> - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./TextArea";
|