@recursica/adapter-mantine-v8 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 +688 -0
- package/LICENSE +21 -0
- package/OVERSTYLING.md +56 -0
- package/README.md +70 -0
- package/SETUP.md +93 -0
- package/USAGE.md +57 -0
- package/dist/adapter-mantine-v8.cjs +12 -0
- package/dist/adapter-mantine-v8.cjs.map +1 -0
- package/dist/adapter-mantine-v8.css +1 -0
- package/dist/adapter-mantine-v8.js +5759 -0
- package/dist/adapter-mantine-v8.js.map +1 -0
- package/dist/index.d.ts +2095 -0
- package/dist/test.html +1 -0
- package/dist/vite.svg +1 -0
- package/docs/PHILOSOPHY.md +39 -0
- package/llms.txt +74 -0
- package/package.json +131 -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 +154 -0
- package/src/OverStyling.tsx +79 -0
- package/src/Version.tsx +44 -0
- package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +72 -0
- package/src/components/Accordion/Accordion.module.css +367 -0
- package/src/components/Accordion/Accordion.stories.tsx +189 -0
- package/src/components/Accordion/Accordion.test.tsx +1 -0
- package/src/components/Accordion/Accordion.tsx +220 -0
- package/src/components/Accordion/USAGE.md +51 -0
- package/src/components/Accordion/index.ts +1 -0
- package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +45 -0
- package/src/components/AssistiveElement/AssistiveElement.module.css +111 -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 +93 -0
- package/src/components/AssistiveElement/USAGE.md +36 -0
- package/src/components/AutoComplete/AUTOCOMPLETE_IMPLEMENTATION_NOTES.md +42 -0
- package/src/components/AutoComplete/AutoComplete.module.css +430 -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 +179 -0
- package/src/components/AutoComplete/USAGE.md +80 -0
- package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +34 -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 +108 -0
- package/src/components/Avatar/USAGE.md +38 -0
- package/src/components/Avatar/index.ts +1 -0
- package/src/components/Badge/BADGE_IMPLEMENTATION_NOTES.md +18 -0
- package/src/components/Badge/Badge.module.css +127 -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 +64 -0
- package/src/components/Badge/USAGE.md +56 -0
- package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +47 -0
- package/src/components/Breadcrumb/Breadcrumb.module.css +48 -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 +85 -0
- package/src/components/Breadcrumb/USAGE.md +55 -0
- package/src/components/Breadcrumb/markCurrentPageItem.test.ts +49 -0
- package/src/components/Button/Button.module.css +446 -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 +184 -0
- package/src/components/Button/IMPLEMENTATION_NOTES.md +109 -0
- package/src/components/Button/USAGE.md +80 -0
- package/src/components/Button/index.ts +1 -0
- package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +17 -0
- package/src/components/Card/Card.module.css +119 -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 +248 -0
- package/src/components/Card/USAGE.md +63 -0
- package/src/components/Checkbox/CHECKBOX_IMPLEMENTATION_NOTES.md +25 -0
- package/src/components/Checkbox/Checkbox.module.css +267 -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 +151 -0
- package/src/components/Checkbox/CheckboxGroup.stories.tsx +139 -0
- package/src/components/Checkbox/CheckboxGroup.tsx +147 -0
- package/src/components/Checkbox/USAGE.md +48 -0
- package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +110 -0
- package/src/components/Chip/Chip.module.css +288 -0
- package/src/components/Chip/Chip.stories.tsx +128 -0
- package/src/components/Chip/Chip.test.tsx +1 -0
- package/src/components/Chip/Chip.tsx +157 -0
- package/src/components/Chip/USAGE.md +55 -0
- package/src/components/Container/CONTAINER_IMPLEMENTATION_NOTES.md +4 -0
- package/src/components/Container/Container.module.css +7 -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 +69 -0
- package/src/components/Container/USAGE.md +47 -0
- package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +31 -0
- package/src/components/DatePicker/DatePicker.icons.tsx +27 -0
- package/src/components/DatePicker/DatePicker.module.css +566 -0
- package/src/components/DatePicker/DatePicker.stories.tsx +158 -0
- package/src/components/DatePicker/DatePicker.test.tsx +1 -0
- package/src/components/DatePicker/DatePicker.tsx +218 -0
- package/src/components/DatePicker/USAGE.md +49 -0
- package/src/components/Dropdown/BareDropdown.tsx +97 -0
- package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +12 -0
- package/src/components/Dropdown/Dropdown.module.css +477 -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 +213 -0
- package/src/components/Dropdown/USAGE.md +69 -0
- package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +153 -0
- package/src/components/FileInput/FileInput.module.css +280 -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 +417 -0
- package/src/components/FileInput/USAGE.md +145 -0
- package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +244 -0
- package/src/components/FileUpload/FileUpload.module.css +205 -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 +354 -0
- package/src/components/FileUpload/USAGE.md +199 -0
- package/src/components/Flex/FLEX_IMPLEMENTATION_NOTES.md +4 -0
- package/src/components/Flex/Flex.module.css +7 -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 +75 -0
- package/src/components/Flex/USAGE.md +48 -0
- package/src/components/FormControlLayout/FormControlLayout.module.css +90 -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 +74 -0
- package/src/components/FormControlLayout/USAGE.md +40 -0
- package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +32 -0
- package/src/components/FormControlWrapper/FormControlWrapper.module.css +75 -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 +151 -0
- package/src/components/FormControlWrapper/USAGE.md +47 -0
- package/src/components/Grid/GRID_IMPLEMENTATION_NOTES.md +18 -0
- package/src/components/Grid/Grid.module.css +11 -0
- package/src/components/Grid/Grid.stories.tsx +206 -0
- package/src/components/Grid/Grid.test.tsx +1 -0
- package/src/components/Grid/Grid.tsx +140 -0
- package/src/components/Grid/USAGE.md +47 -0
- package/src/components/Group/GROUP_IMPLEMENTATION_NOTES.md +4 -0
- package/src/components/Group/Group.module.css +7 -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 +60 -0
- package/src/components/Group/USAGE.md +48 -0
- package/src/components/Heading/HEADING_IMPLEMENTATION_NOTES.md +18 -0
- package/src/components/Heading/Heading.module.css +13 -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 +52 -0
- package/src/components/Heading/USAGE.md +36 -0
- package/src/components/HoverCard/HOVERCARD_IMPLEMENTATION_NOTES.md +77 -0
- package/src/components/HoverCard/HoverCard.module.css +90 -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 +133 -0
- package/src/components/HoverCard/USAGE.md +52 -0
- package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +48 -0
- package/src/components/Label/Label.module.css +141 -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 +113 -0
- package/src/components/Label/USAGE.md +47 -0
- package/src/components/Label/index.ts +1 -0
- package/src/components/Layer/USAGE.md +54 -0
- package/src/components/Link/IMPLEMENTATION_NOTES.md +19 -0
- package/src/components/Link/Link.module.css +110 -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 +67 -0
- package/src/components/Link/USAGE.md +56 -0
- package/src/components/Link/index.ts +1 -0
- package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +24 -0
- package/src/components/Loader/Loader.animate.dom.test.tsx +82 -0
- package/src/components/Loader/Loader.module.css +63 -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 +69 -0
- package/src/components/Loader/USAGE.md +44 -0
- package/src/components/Menu/MENU_IMPLEMENTATION_NOTES.md +88 -0
- package/src/components/Menu/Menu.module.css +280 -0
- package/src/components/Menu/Menu.stories.tsx +371 -0
- package/src/components/Menu/Menu.test.tsx +1 -0
- package/src/components/Menu/Menu.tsx +373 -0
- package/src/components/Menu/USAGE.md +55 -0
- package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +32 -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 +368 -0
- package/src/components/Modal/USAGE.md +58 -0
- package/src/components/Modal/index.ts +1 -0
- package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +24 -0
- package/src/components/NumberInput/NumberInput.module.css +302 -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 +157 -0
- package/src/components/NumberInput/USAGE.md +52 -0
- package/src/components/Pagination/IMPLEMENTATION_NOTES.md +16 -0
- package/src/components/Pagination/Pagination.icons.tsx +66 -0
- package/src/components/Pagination/Pagination.module.css +188 -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 +265 -0
- package/src/components/Pagination/USAGE.md +36 -0
- package/src/components/Pagination/index.ts +5 -0
- package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +116 -0
- package/src/components/Panel/Panel.module.css +209 -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 +269 -0
- package/src/components/Panel/USAGE.md +56 -0
- package/src/components/Popover/IMPLEMENTATION_NOTES.md +77 -0
- package/src/components/Popover/Popover.module.css +86 -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 +142 -0
- package/src/components/Popover/USAGE.md +61 -0
- package/src/components/Popover/index.ts +1 -0
- package/src/components/Radio/Radio.module.css +231 -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 +168 -0
- package/src/components/Radio/RadioGroup.stories.tsx +117 -0
- package/src/components/Radio/RadioGroup.tsx +124 -0
- package/src/components/Radio/USAGE.md +36 -0
- package/src/components/ReadOnlyField/READ_ONLY_FIELD_IMPLEMENTATION_NOTES.md +15 -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 +114 -0
- package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
- package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
- package/src/components/ReadOnlyField/USAGE.md +44 -0
- package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
- package/src/components/ReadOnlyField/index.ts +5 -0
- package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
- package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +25 -0
- package/src/components/SegmentedControl/SegmentedControl.module.css +185 -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 +110 -0
- package/src/components/SegmentedControl/USAGE.md +55 -0
- package/src/components/Slider/IMPLEMENTATION_NOTES.md +92 -0
- package/src/components/Slider/Slider.module.css +588 -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 +391 -0
- package/src/components/Slider/USAGE.md +56 -0
- package/src/components/Stack/STACK_IMPLEMENTATION_NOTES.md +4 -0
- package/src/components/Stack/Stack.module.css +7 -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 +62 -0
- package/src/components/Stack/USAGE.md +48 -0
- package/src/components/Stepper/IMPLEMENTATION_NOTES.md +28 -0
- package/src/components/Stepper/Stepper.module.css +404 -0
- package/src/components/Stepper/Stepper.stories.tsx +148 -0
- package/src/components/Stepper/Stepper.test.tsx +1 -0
- package/src/components/Stepper/Stepper.tsx +93 -0
- package/src/components/Stepper/USAGE.md +41 -0
- package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +64 -0
- package/src/components/Switch/Switch.module.css +279 -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 +177 -0
- package/src/components/Switch/SwitchGroup.stories.tsx +132 -0
- package/src/components/Switch/SwitchGroup.tsx +127 -0
- package/src/components/Switch/USAGE.md +42 -0
- package/src/components/Table/TABLE_IMPLEMENTATION_NOTES.md +78 -0
- package/src/components/Table/Table.icons.tsx +40 -0
- package/src/components/Table/Table.module.css +444 -0
- package/src/components/Table/Table.stories.tsx +140 -0
- package/src/components/Table/Table.test.tsx +1 -0
- package/src/components/Table/Table.tsx +243 -0
- package/src/components/Table/USAGE.md +78 -0
- package/src/components/Tabs/IMPLEMENTATION_NOTES.md +27 -0
- package/src/components/Tabs/Tabs.module.css +591 -0
- package/src/components/Tabs/Tabs.stories.tsx +154 -0
- package/src/components/Tabs/Tabs.test.tsx +1 -0
- package/src/components/Tabs/Tabs.tsx +114 -0
- package/src/components/Tabs/USAGE.md +45 -0
- package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +12 -0
- package/src/components/Text/Text.module.css +13 -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 +53 -0
- package/src/components/Text/USAGE.md +40 -0
- package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +7 -0
- package/src/components/TextArea/TextArea.module.css +183 -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 +137 -0
- package/src/components/TextArea/USAGE.md +48 -0
- package/src/components/TextField/TEXTFIELD_IMPLEMENTATION_NOTES.md +19 -0
- package/src/components/TextField/TextField.module.css +264 -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 +139 -0
- package/src/components/TextField/USAGE.md +44 -0
- package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +119 -0
- package/src/components/TimePicker/TimePicker.module.css +291 -0
- package/src/components/TimePicker/TimePicker.stories.tsx +141 -0
- package/src/components/TimePicker/TimePicker.test.tsx +1 -0
- package/src/components/TimePicker/TimePicker.tsx +304 -0
- package/src/components/TimePicker/USAGE.md +57 -0
- package/src/components/Timeline/TIMELINE_IMPLEMENTATION_NOTES.md +13 -0
- package/src/components/Timeline/Timeline.module.css +373 -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 +73 -0
- package/src/components/Timeline/TimelineItem.tsx +79 -0
- package/src/components/Timeline/USAGE.md +49 -0
- package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +39 -0
- package/src/components/Toast/Toast.module.css +184 -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 +82 -0
- package/src/components/Toast/USAGE.md +50 -0
- package/src/components/Toast/index.ts +1 -0
- package/src/components/Tooltip/TOOLTIP_IMPLEMENTATION_NOTES.md +85 -0
- package/src/components/Tooltip/Tooltip.module.css +91 -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 +117 -0
- package/src/components/Tooltip/USAGE.md +80 -0
- package/src/components/TransferList/TRANSFERLIST_IMPLEMENTATION_NOTES.md +111 -0
- package/src/components/TransferList/TransferList.module.css +182 -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/Tree/IMPLEMENTATION_NOTES.md +48 -0
- package/src/components/Tree/Tree.module.css +232 -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 +220 -0
- package/src/components/Tree/USAGE.md +96 -0
- package/src/components/Tree/index.ts +1 -0
- package/src/components/index.ts +52 -0
- package/src/env.d.ts +7 -0
- package/src/index.ts +179 -0
- package/src/types/index.ts +9 -0
- package/src/types/mantine.d.ts +7 -0
- package/src/types/scss-modules.d.ts +9 -0
- package/src/utils/ColorSchemeWrapper.tsx +27 -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 +150 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/renderRichOption.tsx +65 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { Switch } from "./Switch";
|
|
3
|
+
import { SwitchGroup } from "./SwitchGroup";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { formControlArgTypes } from "../../../.storybook/commonArgTypes";
|
|
6
|
+
|
|
7
|
+
const meta: Meta<typeof SwitchGroup> = {
|
|
8
|
+
title: "UI-Kit/SwitchGroup",
|
|
9
|
+
component: SwitchGroup,
|
|
10
|
+
tags: ["autodocs"],
|
|
11
|
+
parameters: {
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: `
|
|
15
|
+
The \`SwitchGroup\` component is the mandatory organizational wrapper for orchestrating \`Switch\` primitives into macro form layouts. It inherently leverages the \`FormControlWrapper\`, granting native access to structural alignments, assistive descriptions, and strict flex arrays.
|
|
16
|
+
|
|
17
|
+
### Supported Layout Vectors
|
|
18
|
+
- **\`formLayout="stacked"\`**: Top-to-bottom layout cascading the Label bounding box down vertically into a standard stacked switch array.
|
|
19
|
+
- **\`formLayout="side-by-side"\`**: Flow architecture pulling the grouping Label dynamically to the left while structurally organizing the internal switches cleanly alongside it horizontally.
|
|
20
|
+
|
|
21
|
+
> [!IMPORTANT]
|
|
22
|
+
> If you require a solitary \`Switch\` field to natively accept an overarching form label, assistive text, or align with other side-by-side components in a form column, you must wrap it inside a \`Switch.Group\` to trigger the \`FormControlWrapper\` mapping.
|
|
23
|
+
`,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
argTypes: {
|
|
28
|
+
...formControlArgTypes,
|
|
29
|
+
readOnly: {
|
|
30
|
+
control: "boolean",
|
|
31
|
+
description:
|
|
32
|
+
"Passes read-only lock natively down mapping inner switches into explicitly disabled states.",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default meta;
|
|
38
|
+
|
|
39
|
+
type Story = StoryObj<typeof SwitchGroup>;
|
|
40
|
+
|
|
41
|
+
export const Default: Story = {
|
|
42
|
+
args: {
|
|
43
|
+
formLayout: "stacked",
|
|
44
|
+
label: "Standard Group",
|
|
45
|
+
},
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
47
|
+
render: function StoryRender({ withLayer, layer, ...args }: any) {
|
|
48
|
+
const [value, setValue] = useState<string[]>([]);
|
|
49
|
+
return (
|
|
50
|
+
<SwitchGroup {...args} value={value} onChange={setValue}>
|
|
51
|
+
<Switch value="1" label="Option 1" />
|
|
52
|
+
<Switch value="2" label="Option 2" />
|
|
53
|
+
</SwitchGroup>
|
|
54
|
+
);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const StackedLayout: Story = {
|
|
59
|
+
args: {
|
|
60
|
+
formLayout: "stacked",
|
|
61
|
+
label: "Notification Settings",
|
|
62
|
+
description: "Manage your preferences.",
|
|
63
|
+
assistiveText: "We recommend turning these on.",
|
|
64
|
+
error: "",
|
|
65
|
+
required: true,
|
|
66
|
+
},
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
68
|
+
render: function StoryRender({ withLayer, layer, ...args }: any) {
|
|
69
|
+
const [value, setValue] = useState<string[]>(["email"]);
|
|
70
|
+
return (
|
|
71
|
+
<SwitchGroup {...args} value={value} onChange={setValue}>
|
|
72
|
+
<Switch value="email" label="Email Alerts" />
|
|
73
|
+
<Switch value="push" label="Push Notifications" />
|
|
74
|
+
<Switch value="sms" label="SMS Messages" />
|
|
75
|
+
</SwitchGroup>
|
|
76
|
+
);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const SideBySideLayout: Story = {
|
|
81
|
+
args: {
|
|
82
|
+
...StackedLayout.args,
|
|
83
|
+
formLayout: "side-by-side",
|
|
84
|
+
labelSize: "default",
|
|
85
|
+
labelAlignment: "left",
|
|
86
|
+
},
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
88
|
+
render: function StoryRender({ withLayer, layer, ...args }: any) {
|
|
89
|
+
const [value, setValue] = useState<string[]>([]);
|
|
90
|
+
return (
|
|
91
|
+
<SwitchGroup {...args} value={value} onChange={setValue}>
|
|
92
|
+
<Switch value="weekly" label="Weekly Digest" />
|
|
93
|
+
<Switch value="marketing" label="Marketing Emails" />
|
|
94
|
+
</SwitchGroup>
|
|
95
|
+
);
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export const SolitaryFormControl: Story = {
|
|
100
|
+
args: {
|
|
101
|
+
formLayout: "side-by-side",
|
|
102
|
+
label: "Enable Backups",
|
|
103
|
+
description: "Automatically back up your data nightly.",
|
|
104
|
+
},
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
106
|
+
render: function StoryRender({ withLayer, layer, ...args }: any) {
|
|
107
|
+
const [value, setValue] = useState<string[]>(["auto"]);
|
|
108
|
+
return (
|
|
109
|
+
<SwitchGroup {...args} value={value} onChange={setValue}>
|
|
110
|
+
<Switch value="auto" label="Auto-backup" />
|
|
111
|
+
</SwitchGroup>
|
|
112
|
+
);
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export const ReadOnly: Story = {
|
|
117
|
+
args: {
|
|
118
|
+
...StackedLayout.args,
|
|
119
|
+
readOnly: true,
|
|
120
|
+
},
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
122
|
+
render: function StoryRender({ withLayer, layer, ...args }: any) {
|
|
123
|
+
const [value, setValue] = useState<string[]>(["email", "sms"]);
|
|
124
|
+
return (
|
|
125
|
+
<SwitchGroup {...args} value={value} onChange={setValue}>
|
|
126
|
+
<Switch value="email" label="Email Alerts" />
|
|
127
|
+
<Switch value="push" label="Push Notifications" />
|
|
128
|
+
<Switch value="sms" label="SMS Messages" />
|
|
129
|
+
</SwitchGroup>
|
|
130
|
+
);
|
|
131
|
+
},
|
|
132
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import React, { forwardRef } from "react";
|
|
3
|
+
import {
|
|
4
|
+
Switch as MantineSwitch,
|
|
5
|
+
type SwitchGroupProps as MantineSwitchGroupProps,
|
|
6
|
+
} from "@mantine/core";
|
|
7
|
+
import { type ReadOnlyControlProps } from "@recursica/adapter-common";
|
|
8
|
+
import {
|
|
9
|
+
filterStylingProps,
|
|
10
|
+
omitUnsupportedProps,
|
|
11
|
+
type RecursicaOverStyled,
|
|
12
|
+
} from "../../utils/filterStylingProps";
|
|
13
|
+
import { type RecursicaFormControlWrapperProps } from "../FormControlWrapper/FormControlWrapper";
|
|
14
|
+
import { WithReadOnlyWrapper } from "../ReadOnlyField/WithReadOnlyWrapper";
|
|
15
|
+
import styles from "./Switch.module.css";
|
|
16
|
+
|
|
17
|
+
import { type RecursicaSwitchGroupProps as BaseRecursicaSwitchGroupProps } from "@recursica/adapter-common";
|
|
18
|
+
|
|
19
|
+
export interface RecursicaSwitchGroupProps
|
|
20
|
+
extends Omit<
|
|
21
|
+
MantineSwitchGroupProps,
|
|
22
|
+
"size" | "labelProps" | "defaultValue" | "value"
|
|
23
|
+
>,
|
|
24
|
+
Omit<
|
|
25
|
+
RecursicaFormControlWrapperProps,
|
|
26
|
+
"controlMaxWidth" | "controlMinWidth"
|
|
27
|
+
>,
|
|
28
|
+
ReadOnlyControlProps,
|
|
29
|
+
BaseRecursicaSwitchGroupProps {}
|
|
30
|
+
|
|
31
|
+
export type SwitchGroupProps = RecursicaOverStyled<RecursicaSwitchGroupProps>;
|
|
32
|
+
|
|
33
|
+
export const SwitchGroup = forwardRef<HTMLDivElement, SwitchGroupProps>(
|
|
34
|
+
function SwitchGroup(props, ref) {
|
|
35
|
+
const {
|
|
36
|
+
overStyled = false,
|
|
37
|
+
formLayout = "stacked",
|
|
38
|
+
|
|
39
|
+
// Label Wrappers
|
|
40
|
+
labelSize,
|
|
41
|
+
labelAlignment,
|
|
42
|
+
labelOptionalText,
|
|
43
|
+
labelWithEditIcon,
|
|
44
|
+
onLabelEditClick,
|
|
45
|
+
|
|
46
|
+
// Base Mantine Extracted Attributes
|
|
47
|
+
label,
|
|
48
|
+
description,
|
|
49
|
+
assistiveText,
|
|
50
|
+
assistiveWithIcon,
|
|
51
|
+
error,
|
|
52
|
+
required,
|
|
53
|
+
withAsterisk,
|
|
54
|
+
id,
|
|
55
|
+
className,
|
|
56
|
+
style,
|
|
57
|
+
children,
|
|
58
|
+
readOnly,
|
|
59
|
+
readOnlyComponent,
|
|
60
|
+
emptyValueComponent,
|
|
61
|
+
value,
|
|
62
|
+
defaultValue,
|
|
63
|
+
...rest
|
|
64
|
+
} = props;
|
|
65
|
+
// Props this component intentionally doesn't support — deleted at runtime so they can't leak
|
|
66
|
+
// through even if a caller forces them via plain JavaScript, bypassing the `Omit<>` above.
|
|
67
|
+
const UNSUPPORTED_PROPS = [
|
|
68
|
+
"size", // Recursica controls sizing via Switch.module.css variables, not Mantine's native size scale.
|
|
69
|
+
] as const satisfies readonly (keyof MantineSwitchGroupProps)[];
|
|
70
|
+
|
|
71
|
+
const sanitizedProps = omitUnsupportedProps(
|
|
72
|
+
filterStylingProps(rest, overStyled) as Record<string, unknown>,
|
|
73
|
+
UNSUPPORTED_PROPS,
|
|
74
|
+
) as Partial<typeof rest>;
|
|
75
|
+
const restRecord = sanitizedProps as Record<string, unknown>;
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<WithReadOnlyWrapper
|
|
79
|
+
className={className}
|
|
80
|
+
style={style as React.CSSProperties}
|
|
81
|
+
// No group-level max-width: switch-item label-max-width (200px) caps a single switch's
|
|
82
|
+
// own label text, not the whole group — reusing it here made the side-by-side label
|
|
83
|
+
// column (fixed 224px) wider than its container, so it always wrapped onto its own line.
|
|
84
|
+
controlMaxWidth={undefined}
|
|
85
|
+
controlMinWidth={undefined}
|
|
86
|
+
overStyled={overStyled as true}
|
|
87
|
+
labelElement="div" // Strictly override. ARIA grouping prohibits interactive switches nested natively inside <label>.
|
|
88
|
+
formLayout={formLayout}
|
|
89
|
+
labelSize={labelSize}
|
|
90
|
+
labelAlignment={labelAlignment}
|
|
91
|
+
labelOptionalText={labelOptionalText}
|
|
92
|
+
labelWithEditIcon={labelWithEditIcon}
|
|
93
|
+
onLabelEditClick={onLabelEditClick}
|
|
94
|
+
label={label}
|
|
95
|
+
description={description}
|
|
96
|
+
assistiveText={assistiveText}
|
|
97
|
+
assistiveWithIcon={assistiveWithIcon}
|
|
98
|
+
error={error}
|
|
99
|
+
required={required}
|
|
100
|
+
withAsterisk={withAsterisk}
|
|
101
|
+
id={id}
|
|
102
|
+
readOnly={readOnly && !!readOnlyComponent}
|
|
103
|
+
readOnlyComponent={readOnlyComponent}
|
|
104
|
+
emptyValueComponent={emptyValueComponent}
|
|
105
|
+
readOnlyType="text"
|
|
106
|
+
readOnlyValue={value !== undefined ? value : defaultValue}
|
|
107
|
+
readOnlyNativeProps={props}
|
|
108
|
+
activeComponent={
|
|
109
|
+
<MantineSwitch.Group
|
|
110
|
+
ref={ref}
|
|
111
|
+
/* Natively bind local disabled lock dynamically */
|
|
112
|
+
{...(sanitizedProps as unknown as MantineSwitchGroupProps)}
|
|
113
|
+
disabled={readOnly || (restRecord as any).disabled}
|
|
114
|
+
value={value}
|
|
115
|
+
defaultValue={defaultValue}
|
|
116
|
+
>
|
|
117
|
+
<div className={styles.groupRoot} data-layout={formLayout}>
|
|
118
|
+
{children}
|
|
119
|
+
</div>
|
|
120
|
+
</MantineSwitch.Group>
|
|
121
|
+
}
|
|
122
|
+
/>
|
|
123
|
+
);
|
|
124
|
+
},
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
SwitchGroup.displayName = "SwitchGroup";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Switch - Usage Guide
|
|
2
|
+
|
|
3
|
+
This document describes how to integrate and use the `Switch` component in your projects using `@recursica/adapter-mantine-v8`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Import Reference
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Switch } from "@recursica/adapter-mantine-v8";
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Basic Example
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import React from "react";
|
|
19
|
+
import { Switch } from "@recursica/adapter-mantine-v8";
|
|
20
|
+
|
|
21
|
+
export default function Demo() {
|
|
22
|
+
return <Switch label="Enable notifications" defaultChecked />;
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 3. Design System Integration
|
|
29
|
+
|
|
30
|
+
All Recursica components in the `@recursica/adapter-mantine-v8` package adhere strictly to design system spacing, scaling, and behavior patterns.
|
|
31
|
+
|
|
32
|
+
> [!IMPORTANT]
|
|
33
|
+
>
|
|
34
|
+
> - **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.
|
|
35
|
+
> - **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.
|
|
36
|
+
> - **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.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 4. Key Integration Features & Constraints
|
|
41
|
+
|
|
42
|
+
The `size`, `color`, and `radius` props are not available on this component, since appearance is fully controlled by the design system tokens. When `readOnly` is set, the switch renders as a read-only label instead of an interactive control. There is currently no distinct hover color for the track; it falls back to the standard unselected background.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Table — Implementation Notes (Internal)
|
|
2
|
+
|
|
3
|
+
## Background
|
|
4
|
+
|
|
5
|
+
Table.module.css already had full CSS for header/cell/footer sorted, disabled, currency, and
|
|
6
|
+
selected states, keyed off `data-sorted`/`data-disabled`/`data-currency`/`data-selected`
|
|
7
|
+
attributes — but nothing in Table.tsx ever set those attributes, so the states were unreachable
|
|
8
|
+
and their tokens showed as "unused" in the token analyzer. This pass adds the props that
|
|
9
|
+
actually set them; it does not add any new CSS selectors for those states.
|
|
10
|
+
|
|
11
|
+
## Why not the 4-component split from the Forge reference implementation
|
|
12
|
+
|
|
13
|
+
Forge's Mantine Table reference (reviewed 2026-08-22) splits `Table`/`TableHeader`/`TableCell`/
|
|
14
|
+
`TableFooter` into four separate top-level components, each computing CSS custom properties in
|
|
15
|
+
JS and injecting them via inline `style`. We deliberately did not port that:
|
|
16
|
+
|
|
17
|
+
- It bypasses `filterStylingProps`/`overStyled` and computes styling values in TSX instead of
|
|
18
|
+
referencing tokens directly in the CSS module — both are hard "no" per
|
|
19
|
+
`adapter-common/docs/COMPONENT_DEV_GUIDE.md` (§1 "No custom properties set from TSX for
|
|
20
|
+
styling", §3.1 `overStyled`/`filterStylingProps`).
|
|
21
|
+
- It uses a `layer`-scoped token naming convention (`properties_colors_layer-0_...`) that
|
|
22
|
+
doesn't exist in this repo's tokens and isn't the sanctioned way to handle layers here (layer
|
|
23
|
+
is set only by wrapping in `<Layer>`, never a component prop — see the canonical guide's
|
|
24
|
+
"Layers" section).
|
|
25
|
+
- Per direction from Matt (2026-08-22): keep the existing dot-notation composition
|
|
26
|
+
(`Table.Th`/`Table.Td`/`Table.Tr`/`Table.Tfoot`/etc., mirroring Mantine's own API) rather than
|
|
27
|
+
introducing new component names — "align with the underlying UI-kit's components, but style
|
|
28
|
+
with Recursica."
|
|
29
|
+
|
|
30
|
+
Instead, `Table.Th`/`Table.Td`/`Table.Tr` gained real Recursica props (`sorted`, `disabled`,
|
|
31
|
+
`variant`, `selected`) that set `data-*` attributes on themselves, activating the CSS that was
|
|
32
|
+
already there.
|
|
33
|
+
|
|
34
|
+
## Footer cells reuse `Table.Td`, not a new component
|
|
35
|
+
|
|
36
|
+
There's no separate "footer cell" component. A `Table.Td` nested inside `Table.Tfoot` picks up
|
|
37
|
+
the footer-specific CSS automatically via the existing `.root tfoot td` structural selector in
|
|
38
|
+
Table.module.css — `variant="currency"` and `disabled` work identically whether the `Table.Td`
|
|
39
|
+
is in `Table.Tbody` or `Table.Tfoot`.
|
|
40
|
+
|
|
41
|
+
## Sort icon is rendered by `Table.Th` itself, not composed by the consumer
|
|
42
|
+
|
|
43
|
+
Mantine's `Table` has no sortable-header primitive (unlike MUI's `TableSortLabel`), so
|
|
44
|
+
`Table.Th` renders its own chevron (`Table.icons.tsx`, plain inline SVGs — no icon package
|
|
45
|
+
dependency, same convention as `DatePicker.icons.tsx`) when `sorted` is `"asc"`/`"desc"`, sized
|
|
46
|
+
via the existing `.sortIcon` CSS rule. Also sets `aria-sort` for accessibility (Mantine doesn't
|
|
47
|
+
set this itself). This is intentionally asymmetric with `mui-adapter`, where sorting is composed
|
|
48
|
+
via `Table.SortLabel` instead — see that adapter's own implementation notes.
|
|
49
|
+
|
|
50
|
+
## Selectable rows (checkboxes)
|
|
51
|
+
|
|
52
|
+
Neither Mantine's `Table` nor `@mui/material`'s `Table` has a built-in checkbox-driven row
|
|
53
|
+
selection feature (confirmed 2026-08-22 — MUI's own docs treat it as a compose-it-yourself
|
|
54
|
+
recipe with a plain `Checkbox`; the only MUI product with built-in selection is
|
|
55
|
+
`@mui/x-data-grid`, not installed here). `Table.Tr`'s `selected` prop only controls the
|
|
56
|
+
selected-row background/token state; wiring an actual checkbox column is a separate,
|
|
57
|
+
not-yet-scoped ask.
|
|
58
|
+
|
|
59
|
+
## Currency alignment on header/footer reuses the table-cell token
|
|
60
|
+
|
|
61
|
+
`--recursica_ui-kit_components_table-cell_properties_currency-style_text-align` (`right`) is the
|
|
62
|
+
only currency-style text-align token the UI Kit exports — there's no
|
|
63
|
+
`table-header_properties_currency-style_*` block at all, and the
|
|
64
|
+
`table-footer_properties_currency-style_*` block skips `text-align` specifically. `Table.module.css`
|
|
65
|
+
reuses the table-cell token for both `thead th[data-currency="true"]` and
|
|
66
|
+
`tfoot td[data-currency="true"]` so header/footer currency cells stay right-aligned in step with
|
|
67
|
+
the body. `Table.Th` gained a `variant` prop (mirroring `Table.Td`) to set `data-currency` since
|
|
68
|
+
header cells had no way to opt into this before.
|
|
69
|
+
|
|
70
|
+
## Deliberately not changed
|
|
71
|
+
|
|
72
|
+
- **No wrapper divs** — Forge wraps the table in two divs to get a scrollable bordered
|
|
73
|
+
container. The canonical guide forbids wrapper divs; `Table.ScrollContainer` (already wraps
|
|
74
|
+
Mantine's own `Table.ScrollContainer`) is the sanctioned way to get a scrolling table.
|
|
75
|
+
- **Hover compositing, striping direction/row parity, row-padding semantics** — Forge diverges
|
|
76
|
+
from our current CSS on these (see the 2026-08-22 review), but none of them are confirmed
|
|
77
|
+
bugs vs. intentional design choices already baked into Figma's tokens. Left as-is; flag to
|
|
78
|
+
design if a change is wanted.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sort-direction indicators for `Table.Th`. Sized/colored entirely via the `.sortIcon` rule in
|
|
5
|
+
* Table.module.css (currentColor + the header's own text-color token) — no width/height/color
|
|
6
|
+
* hardcoded here on purpose, same convention as DatePicker.icons.tsx.
|
|
7
|
+
*/
|
|
8
|
+
export function ChevronUpIcon(props: React.SVGProps<SVGSVGElement>) {
|
|
9
|
+
return (
|
|
10
|
+
<svg
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
fill="none"
|
|
13
|
+
stroke="currentColor"
|
|
14
|
+
strokeWidth="2"
|
|
15
|
+
strokeLinecap="round"
|
|
16
|
+
strokeLinejoin="round"
|
|
17
|
+
aria-hidden
|
|
18
|
+
{...props}
|
|
19
|
+
>
|
|
20
|
+
<polyline points="18 15 12 9 6 15" />
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function ChevronDownIcon(props: React.SVGProps<SVGSVGElement>) {
|
|
26
|
+
return (
|
|
27
|
+
<svg
|
|
28
|
+
viewBox="0 0 24 24"
|
|
29
|
+
fill="none"
|
|
30
|
+
stroke="currentColor"
|
|
31
|
+
strokeWidth="2"
|
|
32
|
+
strokeLinecap="round"
|
|
33
|
+
strokeLinejoin="round"
|
|
34
|
+
aria-hidden
|
|
35
|
+
{...props}
|
|
36
|
+
>
|
|
37
|
+
<polyline points="6 9 12 15 18 9" />
|
|
38
|
+
</svg>
|
|
39
|
+
);
|
|
40
|
+
}
|