@redis-ui/components 41.3.7 → 41.11.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/README.md +330 -0
- package/dist/AppSelectionMenu/components/Item/Item.styles.d.ts +1 -1
- package/dist/Banner/components/Message/Message.style.d.ts +2 -1
- package/dist/Button/TextButton/TextButton.cjs +2 -0
- package/dist/Button/TextButton/TextButton.js +2 -0
- package/dist/Button/TextButton/TextButton.style.cjs +9 -3
- package/dist/Button/TextButton/TextButton.style.d.ts +1 -1
- package/dist/Button/TextButton/TextButton.style.js +9 -3
- package/dist/Button/TextButton/TextButton.types.d.ts +2 -0
- package/dist/Button/ToggleButton/ToggleButton.style.cjs +1 -1
- package/dist/Button/ToggleButton/ToggleButton.style.js +1 -1
- package/dist/Checkbox/components/Label/Label.style.d.ts +2 -1
- package/dist/ChipList/Components/ExtraItem.cjs +8 -7
- package/dist/ChipList/Components/ExtraItem.js +8 -7
- package/dist/ChipList/Components/ExtraItem.style.d.ts +2 -1
- package/dist/Drawer/components/Description/components/Text/Text.style.d.ts +2 -1
- package/dist/Drawer/components/Header/components/Title/Title.style.d.ts +2 -1
- package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.cjs +2 -2
- package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.js +2 -2
- package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.cjs +2 -2
- package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.js +2 -2
- package/dist/FormField/FormField.context.cjs +4 -0
- package/dist/FormField/FormField.context.d.ts +3 -0
- package/dist/FormField/FormField.context.js +4 -0
- package/dist/FormField/components/AdditionalText/AdditionalText.style.d.ts +2 -1
- package/dist/FormField/components/Nested/Nested.cjs +4 -2
- package/dist/FormField/components/Nested/Nested.js +5 -3
- package/dist/Helpers/css.utils.cjs +4 -0
- package/dist/Helpers/css.utils.js +4 -0
- package/dist/Inputs/Input/Input.d.ts +1 -1
- package/dist/Inputs/NumericInput/NumericInput.d.ts +1 -1
- package/dist/Inputs/QuantityCounter/QuantityCounter.d.ts +1 -1
- package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.style.d.ts +2 -1
- package/dist/Inputs/TextArea/TextArea.d.ts +1 -1
- package/dist/Inputs/TextArea/components/Compose/Compose.style.d.ts +1 -1
- package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.cjs +6 -2
- package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.js +7 -3
- package/dist/Inputs/components/Compose/CommonCompose.cjs +16 -14
- package/dist/Inputs/components/Compose/CommonCompose.js +17 -15
- package/dist/Inputs/components/Compose/Compose.style.d.ts +2 -1
- package/dist/Inputs/components/Context/InputValue.context.cjs +13 -9
- package/dist/Inputs/components/Context/InputValue.context.d.ts +270 -4
- package/dist/Inputs/components/Context/InputValue.context.js +13 -9
- package/dist/Inputs/components/Context/InputValueProvider.cjs +7 -2
- package/dist/Inputs/components/Context/InputValueProvider.js +8 -3
- package/dist/Inputs/components/Context/NumericInputValueProvider.cjs +6 -1
- package/dist/Inputs/components/Context/NumericInputValueProvider.js +7 -2
- package/dist/Inputs/components/InputTag/InputTag.cjs +6 -3
- package/dist/Inputs/components/InputTag/InputTag.js +7 -4
- package/dist/Inputs/components/InputTag/InputTag.style.cjs +1 -1
- package/dist/Inputs/components/InputTag/InputTag.style.js +1 -1
- package/dist/Inputs/components/ResetButton/ResetButton.cjs +7 -4
- package/dist/Inputs/components/ResetButton/ResetButton.js +7 -4
- package/dist/Label/components/Optional/Optional.style.d.ts +2 -1
- package/dist/Label/components/Required/Required.cjs +8 -8
- package/dist/Label/components/Required/Required.js +8 -8
- package/dist/Label/components/Required/Required.style.d.ts +2 -1
- package/dist/Label/components/Text/Text.style.d.ts +2 -1
- package/dist/Layouts/FlexDivider/FlexDivider.cjs +22 -0
- package/dist/Layouts/FlexDivider/FlexDivider.d.ts +2 -0
- package/dist/Layouts/FlexDivider/FlexDivider.js +22 -0
- package/dist/Layouts/FlexDivider/FlexDivider.style.cjs +46 -0
- package/dist/Layouts/FlexDivider/FlexDivider.style.d.ts +6 -0
- package/dist/Layouts/FlexDivider/FlexDivider.style.js +44 -0
- package/dist/Layouts/FlexDivider/FlexDivider.types.d.ts +15 -0
- package/dist/Layouts/FlexGroup/FlexGroup.cjs +20 -0
- package/dist/Layouts/FlexGroup/FlexGroup.d.ts +2 -0
- package/dist/Layouts/FlexGroup/FlexGroup.js +20 -0
- package/dist/Layouts/FlexGroup/FlexGroup.style.cjs +20 -0
- package/dist/Layouts/FlexGroup/FlexGroup.style.d.ts +9 -0
- package/dist/Layouts/FlexGroup/FlexGroup.style.js +18 -0
- package/dist/Layouts/FlexGroup/FlexGroup.types.d.ts +19 -0
- package/dist/Layouts/FlexItem/FlexItem.cjs +16 -0
- package/dist/Layouts/FlexItem/FlexItem.d.ts +2 -0
- package/dist/Layouts/FlexItem/FlexItem.js +16 -0
- package/dist/Layouts/FlexItem/FlexItem.style.cjs +14 -0
- package/dist/Layouts/FlexItem/FlexItem.style.d.ts +5 -0
- package/dist/Layouts/FlexItem/FlexItem.style.js +12 -0
- package/dist/Layouts/FlexItem/FlexItem.types.d.ts +14 -0
- package/dist/Layouts/FlexSplit/FlexSplit.cjs +10 -0
- package/dist/Layouts/FlexSplit/FlexSplit.d.ts +2 -0
- package/dist/Layouts/FlexSplit/FlexSplit.js +10 -0
- package/dist/Layouts/FlexSplit/FlexSplit.style.cjs +27 -0
- package/dist/Layouts/FlexSplit/FlexSplit.style.d.ts +8 -0
- package/dist/Layouts/FlexSplit/FlexSplit.style.js +25 -0
- package/dist/Layouts/FlexSplit/FlexSplit.types.d.ts +8 -0
- package/dist/Layouts/index.d.ts +8 -0
- package/dist/Link/Link.style.d.ts +2 -1
- package/dist/Menu/components/Content/components/Item/Components/SubHead/SubHead.style.d.ts +2 -1
- package/dist/Menu/components/Content/components/Label/components/Text/Text.style.d.ts +2 -1
- package/dist/MidBar/MidBar.cjs +30 -0
- package/dist/MidBar/MidBar.d.ts +22 -0
- package/dist/MidBar/MidBar.js +30 -0
- package/dist/MidBar/MidBar.types.d.ts +6 -0
- package/dist/MidBar/components/Header/Header.cjs +32 -0
- package/dist/MidBar/components/Header/Header.d.ts +15 -0
- package/dist/MidBar/components/Header/Header.js +32 -0
- package/dist/MidBar/components/Header/Header.types.d.ts +13 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.cjs +8 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.d.ts +3 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.js +8 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.style.cjs +31 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.style.d.ts +1 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.style.js +29 -0
- package/dist/MidBar/components/Header/components/Compose/Compose.types.d.ts +2 -0
- package/dist/MidBar/components/Header/components/Group/Group.cjs +12 -0
- package/dist/MidBar/components/Header/components/Group/Group.d.ts +3 -0
- package/dist/MidBar/components/Header/components/Group/Group.js +12 -0
- package/dist/MidBar/components/Header/components/Group/Group.style.cjs +22 -0
- package/dist/MidBar/components/Header/components/Group/Group.style.d.ts +4 -0
- package/dist/MidBar/components/Header/components/Group/Group.style.js +20 -0
- package/dist/MidBar/components/Header/components/Group/Group.types.d.ts +5 -0
- package/dist/MidBar/index.d.ts +2 -0
- package/dist/Modal/components/Content/components/Body/components/Text/Text.style.d.ts +2 -1
- package/dist/Modal/components/Content/components/Description/components/Text/Text.style.d.ts +2 -1
- package/dist/Modal/components/Content/components/Header/components/Title/Title.style.d.ts +2 -1
- package/dist/MoreInfoIcon/MoreInfoIcon.style.cjs +1 -1
- package/dist/MoreInfoIcon/MoreInfoIcon.style.js +1 -1
- package/dist/Pagination/Pagination.d.ts +3 -2
- package/dist/Popover/Popover.d.ts +2 -2
- package/dist/Popover/components/Content/Content.d.ts +1 -1
- package/dist/Popover/components/Content/components/Body/components/BodyText/BodyText.styles.d.ts +2 -1
- package/dist/Popover/components/Content/components/Header/components/HeaderTitle/HeaderTitle.styles.d.ts +2 -1
- package/dist/Popover/components/Content/components/Text/Text.styles.d.ts +2 -1
- package/dist/Popover/components/Content/components/WindowBar/WindowBar.d.ts +1 -1
- package/dist/Popover/components/Content/components/WindowBar/WindowBar.style.d.ts +2 -1
- package/dist/Popover/components/PopoverCard/PopoverCard.d.ts +1 -1
- package/dist/ProgressBar/ProgressBar.styles.d.ts +1 -1
- package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.cjs +5 -7
- package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.js +5 -7
- package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.cjs +11 -9
- package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.js +11 -9
- package/dist/Section/components/Header/components/CategoryValueList/CategoryValueList.style.d.ts +2 -1
- package/dist/Section/components/Header/components/CategoryValueList/components/CategoryValueChip/CategoryValueChip.style.d.ts +3 -2
- package/dist/Section/components/Header/components/Label/Label.style.d.ts +2 -1
- package/dist/Select/components/Context/Context.cjs +6 -4
- package/dist/Select/components/Context/Context.js +7 -5
- package/dist/Select/components/Trigger/components/Compose/Compose.cjs +5 -0
- package/dist/Select/components/Trigger/components/Compose/Compose.js +6 -1
- package/dist/Select/components/Trigger/components/Compose/Compose.style.cjs +5 -0
- package/dist/Select/components/Trigger/components/Compose/Compose.style.js +5 -0
- package/dist/SideBar/components/Footer/components/Text/Text.style.d.ts +2 -1
- package/dist/SideBar/components/Item/components/Text/Text.style.d.ts +2 -1
- package/dist/Stepper/Stepper.context.cjs +5 -10
- package/dist/Stepper/Stepper.context.d.ts +1 -2
- package/dist/Stepper/Stepper.context.js +5 -10
- package/dist/Stepper/Stepper.d.ts +4 -4
- package/dist/Stepper/components/Compose/Compose.cjs +6 -1
- package/dist/Stepper/components/Compose/Compose.d.ts +2 -2
- package/dist/Stepper/components/Compose/Compose.js +7 -2
- package/dist/Stepper/components/Step/Step.context.cjs +5 -10
- package/dist/Stepper/components/Step/Step.context.d.ts +1 -2
- package/dist/Stepper/components/Step/Step.context.js +5 -10
- package/dist/Stepper/components/Step/Step.d.ts +2 -3
- package/dist/Stepper/components/Step/components/Compose/Compose.cjs +1 -3
- package/dist/Stepper/components/Step/components/Compose/Compose.d.ts +1 -1
- package/dist/Stepper/components/Step/components/Compose/Compose.js +2 -4
- package/dist/Stepper/components/Step/components/Compose/Compose.style.cjs +2 -5
- package/dist/Stepper/components/Step/components/Compose/Compose.style.js +4 -7
- package/dist/Stepper/components/Step/components/Label/Label.style.d.ts +2 -1
- package/dist/Stepper/components/Step/components/Label/Label.types.d.ts +2 -3
- package/dist/Stepper/hooks/useStepperFocusing.cjs +31 -0
- package/dist/Stepper/hooks/useStepperFocusing.d.ts +16 -0
- package/dist/Stepper/hooks/useStepperFocusing.js +31 -0
- package/dist/Stepper/hooks/useStepperInteractive.cjs +30 -37
- package/dist/Stepper/hooks/useStepperInteractive.d.ts +2 -3
- package/dist/Stepper/hooks/useStepperInteractive.js +30 -37
- package/dist/Switch/components/Title/Title.style.d.ts +2 -1
- package/dist/Switch/components/Title/Title.types.d.ts +4 -4
- package/dist/TableHeading/TableHeading.style.cjs +1 -1
- package/dist/TableHeading/TableHeading.style.js +1 -1
- package/dist/Tabs/components/TabBar/utils/theme.utils.d.ts +2 -2
- package/dist/ThemeModeSwitch/ThemeModeSwitch.cjs +64 -0
- package/dist/ThemeModeSwitch/ThemeModeSwitch.d.ts +2 -0
- package/dist/ThemeModeSwitch/ThemeModeSwitch.js +64 -0
- package/dist/ThemeModeSwitch/ThemeModeSwitch.style.cjs +38 -0
- package/dist/ThemeModeSwitch/ThemeModeSwitch.style.d.ts +4 -0
- package/dist/ThemeModeSwitch/ThemeModeSwitch.style.js +36 -0
- package/dist/ThemeModeSwitch/ThemeModeSwitch.types.d.ts +7 -0
- package/dist/ThemeModeSwitch/index.d.ts +3 -0
- package/dist/ThemeModeSwitch/useThemeModeSwitch.cjs +37 -0
- package/dist/ThemeModeSwitch/useThemeModeSwitch.d.ts +8 -0
- package/dist/ThemeModeSwitch/useThemeModeSwitch.js +37 -0
- package/dist/Toast/Toaster.cjs +4 -6
- package/dist/Toast/Toaster.d.ts +2 -1
- package/dist/Toast/Toaster.js +4 -6
- package/dist/Toast/Toaster.style.cjs +2 -2
- package/dist/Toast/Toaster.style.d.ts +2 -2
- package/dist/Toast/Toaster.style.js +3 -3
- package/dist/Toast/components/Content/components/Description/Description.style.d.ts +2 -1
- package/dist/Toast/components/Content/components/Message/Message.style.d.ts +2 -1
- package/dist/Toast/core/core.d.ts +3 -3
- package/dist/Toast/core/mapping.helpers.cjs +18 -2
- package/dist/Toast/core/mapping.helpers.d.ts +4 -3
- package/dist/Toast/core/mapping.helpers.js +22 -6
- package/dist/Toast/core/mapping.types.d.ts +3 -2
- package/dist/Tooltip/components/Content/components/Text/Text.styles.d.ts +2 -1
- package/dist/TreeView/components/TreeItem/components/Checkbox/Checkbox.style.d.ts +2 -1
- package/dist/Typography/Typography.cjs +3 -1
- package/dist/Typography/Typography.d.ts +5 -3
- package/dist/Typography/Typography.js +8 -6
- package/dist/Typography/components/Base/Base.cjs +18 -0
- package/dist/Typography/components/Base/Base.d.ts +4 -0
- package/dist/Typography/components/Base/Base.js +18 -0
- package/dist/Typography/components/Base/Base.style.cjs +16 -0
- package/dist/Typography/components/Base/Base.style.d.ts +3 -0
- package/dist/Typography/components/Base/Base.style.js +14 -0
- package/dist/Typography/components/Base/Base.types.d.ts +7 -0
- package/dist/Typography/components/Body/Body.cjs +11 -12
- package/dist/Typography/components/Body/Body.d.ts +3 -2
- package/dist/Typography/components/Body/Body.js +12 -13
- package/dist/Typography/components/Body/Body.style.cjs +5 -10
- package/dist/Typography/components/Body/Body.style.d.ts +2 -3
- package/dist/Typography/components/Body/Body.style.js +5 -10
- package/dist/Typography/components/Body/Body.types.d.ts +2 -5
- package/dist/Typography/components/Code/Code.cjs +11 -11
- package/dist/Typography/components/Code/Code.d.ts +3 -2
- package/dist/Typography/components/Code/Code.js +12 -12
- package/dist/Typography/components/Code/Code.style.cjs +5 -10
- package/dist/Typography/components/Code/Code.style.d.ts +1 -2
- package/dist/Typography/components/Code/Code.style.js +5 -10
- package/dist/Typography/components/Code/Code.types.d.ts +2 -5
- package/dist/Typography/components/Heading/Heading.cjs +11 -20
- package/dist/Typography/components/Heading/Heading.d.ts +3 -2
- package/dist/Typography/components/Heading/Heading.js +11 -20
- package/dist/Typography/components/Heading/Heading.style.cjs +4 -10
- package/dist/Typography/components/Heading/Heading.style.d.ts +2 -2
- package/dist/Typography/components/Heading/Heading.style.js +4 -10
- package/dist/Typography/components/Heading/Heading.types.d.ts +2 -5
- package/dist/Typography/components/Heading/Heading.utils.cjs +12 -0
- package/dist/Typography/components/Heading/Heading.utils.d.ts +2 -0
- package/dist/Typography/components/Heading/Heading.utils.js +12 -0
- package/dist/Typography/hooks/useEllipsisTooltip.cjs +7 -4
- package/dist/Typography/hooks/useEllipsisTooltip.d.ts +3 -8
- package/dist/Typography/hooks/useEllipsisTooltip.js +7 -4
- package/dist/Typography/index.d.ts +1 -0
- package/dist/index.cjs +1092 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1139 -48
- package/dist/node_modules/clsx/dist/clsx.cjs +17 -0
- package/dist/node_modules/clsx/dist/clsx.js +17 -0
- package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.cjs +320 -0
- package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.js +318 -0
- package/dist/packages/icons/dist/multicolor/LoaderLarge.cjs +2 -2
- package/dist/packages/icons/dist/multicolor/LoaderLarge.js +2 -2
- package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.cjs +3 -8
- package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.js +3 -8
- package/dist/packages/icons/dist/multicolor/light/LoaderLarge.cjs +3 -8
- package/dist/packages/icons/dist/multicolor/light/LoaderLarge.js +3 -8
- package/package.json +4 -4
- package/dist/node_modules/clsx/dist/clsx.m.cjs +0 -15
- package/dist/node_modules/clsx/dist/clsx.m.js +0 -15
- package/dist/node_modules/react-toastify/dist/react-toastify.esm.cjs +0 -300
- package/dist/node_modules/react-toastify/dist/react-toastify.esm.js +0 -298
package/README.md
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Creating New Components Guide
|
|
2
|
+
|
|
3
|
+
This guide covers best practices, conventions, and patterns for creating new components in the `@redislabsdev/redis-ui-components` library.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Radix UI Foundation](#radix-ui-foundation)
|
|
8
|
+
- [Component Structure](#component-structure)
|
|
9
|
+
- [File Organization](#file-organization)
|
|
10
|
+
- [Component Composition](#component-composition)
|
|
11
|
+
- [Testing](#testing)
|
|
12
|
+
|
|
13
|
+
## Radix UI Foundation
|
|
14
|
+
|
|
15
|
+
This component library is built on top of [Radix UI](https://www.radix-ui.com/), a low-level UI component library that provides unstyled, accessible primitives for building high-quality design systems and web applications.
|
|
16
|
+
|
|
17
|
+
> **Note:** Not all components need Radix. Simple presentational components (like Button, Badge, Card) can be built from scratch using styled-components.
|
|
18
|
+
|
|
19
|
+
> **Note:** When using Radix, or any other external library for that matter, make sure you don't expose Radix types in public API. Always wrap them in our own types.
|
|
20
|
+
|
|
21
|
+
## Component Structure
|
|
22
|
+
|
|
23
|
+
### Basic Component Anatomy
|
|
24
|
+
|
|
25
|
+
Every component should follow this folder structure:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
src/ComponentName/
|
|
29
|
+
├── ComponentName.tsx # Main component implementation
|
|
30
|
+
├── ComponentName.types.ts # Types and interfaces
|
|
31
|
+
├── ComponentName.style.ts # Styles
|
|
32
|
+
├── ComponentName.test.tsx # Unit tests
|
|
33
|
+
├── index.ts # Public exports
|
|
34
|
+
└── components/ # Sub-components (if needed)
|
|
35
|
+
└── SubComponent/
|
|
36
|
+
├── SubComponent.tsx
|
|
37
|
+
├── SubComponent.types.ts
|
|
38
|
+
└── SubComponent.style.ts
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The tree is recurisve, so you can have sub-components inside sub-components, etc.
|
|
42
|
+
|
|
43
|
+
### Example: Simple Component
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
// Card.tsx
|
|
47
|
+
import * as S from './Card.style';
|
|
48
|
+
import { CardProps } from './Card.types';
|
|
49
|
+
|
|
50
|
+
const Card = (props: CardProps) => <S.Card {...props} />;
|
|
51
|
+
|
|
52
|
+
export default Card;
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## File Organization
|
|
59
|
+
|
|
60
|
+
### 1. Component File (`ComponentName.tsx`)
|
|
61
|
+
|
|
62
|
+
**✅ DO:**
|
|
63
|
+
- Use `React.forwardRef` when the component wraps a DOM element
|
|
64
|
+
- Provide default props for optional parameters
|
|
65
|
+
- Import styles as `* as S` for namespacing
|
|
66
|
+
- Keep the main component focused and delegate to sub-components
|
|
67
|
+
|
|
68
|
+
**❌ DON'T:**
|
|
69
|
+
- Mix business logic with presentation
|
|
70
|
+
- Hardcode theme values
|
|
71
|
+
|
|
72
|
+
### 2. Types File (`ComponentName.types.ts`)
|
|
73
|
+
|
|
74
|
+
**Conventions:**
|
|
75
|
+
- Always use separate file for types
|
|
76
|
+
- Extend HTML element attributes when wrapping native elements
|
|
77
|
+
- Use generics for flexible, reusable components
|
|
78
|
+
- If there are sub-components, create separate types file for each of them and compose the styles at the root level
|
|
79
|
+
- Use fully qualified names for exported types
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
// Button.types.ts
|
|
83
|
+
import { ButtonHTMLAttributes } from 'react';
|
|
84
|
+
|
|
85
|
+
export const buttonSizes = ['large', 'medium', 'small'] as const;
|
|
86
|
+
export const buttonVariants = ['primary', 'destructive', 'secondary-fill'] as const;
|
|
87
|
+
|
|
88
|
+
export type ButtonSizes = (typeof buttonSizes)[number];
|
|
89
|
+
export type ButtonVariants = (typeof buttonVariants)[number];
|
|
90
|
+
|
|
91
|
+
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
92
|
+
size?: ButtonSizes;
|
|
93
|
+
variant?: ButtonVariants;
|
|
94
|
+
disabled?: boolean;
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 3. Style File (`ComponentName.style.ts`)
|
|
99
|
+
|
|
100
|
+
**✅ DO:**
|
|
101
|
+
- Access theme values via `useTheme().components.componentName`
|
|
102
|
+
- Use token maps for consistent styling
|
|
103
|
+
- Use fully qualified names for exported styled components
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
// Button.style.ts
|
|
107
|
+
import styled, { css } from 'styled-components/macro';
|
|
108
|
+
import { getFocusStyle, useTheme } from '@redislabsdev/redis-ui-styles';
|
|
109
|
+
import { ButtonProps } from './Button.types';
|
|
110
|
+
|
|
111
|
+
export const baseButtonStyle = css`
|
|
112
|
+
border: 0;
|
|
113
|
+
display: inline-flex;
|
|
114
|
+
justify-content: center;
|
|
115
|
+
align-items: center;
|
|
116
|
+
cursor: pointer;
|
|
117
|
+
|
|
118
|
+
${getFocusStyle()};
|
|
119
|
+
|
|
120
|
+
&:disabled {
|
|
121
|
+
cursor: not-allowed;
|
|
122
|
+
}
|
|
123
|
+
`;
|
|
124
|
+
|
|
125
|
+
export const Button = styled.button<Required<Pick<ButtonProps, 'size' | 'variant'>>>`
|
|
126
|
+
${baseButtonStyle};
|
|
127
|
+
gap: ${() => useTheme().components.button.gap};
|
|
128
|
+
padding: ${({ size }) => useTheme().components.button.sizes[size].padding};
|
|
129
|
+
background-color: ${({ variant }) => useTheme().components.button.variants[variant].bgColor};
|
|
130
|
+
`;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**❌ DON'T:**
|
|
134
|
+
- Hardcode colors, spacing, or other design tokens
|
|
135
|
+
- Use inline styles
|
|
136
|
+
|
|
137
|
+
### 4. Index File (`index.ts`)
|
|
138
|
+
|
|
139
|
+
**Conventions:**
|
|
140
|
+
- Export the default component
|
|
141
|
+
- Export all types using `export *`
|
|
142
|
+
- Export styles as namespace if needed for external customization
|
|
143
|
+
- Export utility hooks/functions if applicable
|
|
144
|
+
|
|
145
|
+
## Component Composition
|
|
146
|
+
|
|
147
|
+
> **Note:** It’s best to discuss whether composition is appropriate early on, ideally during the design phase. By the time a PR is under review, changing this decision will involve substantial changes. Feel free to reach out to FE Infra team for advice.
|
|
148
|
+
|
|
149
|
+
### Object.assign Pattern
|
|
150
|
+
|
|
151
|
+
For components with sub-components, use `Object.assign`:
|
|
152
|
+
|
|
153
|
+
```tsx
|
|
154
|
+
// Tabs.tsx
|
|
155
|
+
import { TabsProps } from './Tabs.types';
|
|
156
|
+
import ContentPane from './components/ContentPane/ContentPane';
|
|
157
|
+
import TabBar from './components/TabBar/TabBar';
|
|
158
|
+
import Compose from './components/Compose/Compose';
|
|
159
|
+
|
|
160
|
+
const Tabs = Object.assign(
|
|
161
|
+
({ tabs, variant, ...restProps }: TabsProps) => (
|
|
162
|
+
<Tabs.Compose {...restProps}>
|
|
163
|
+
<Tabs.TabBar tabs={tabs} variant={variant} />
|
|
164
|
+
<Tabs.ContentPane tabs={tabs} />
|
|
165
|
+
</Tabs.Compose>
|
|
166
|
+
),
|
|
167
|
+
{ Compose, TabBar, ContentPane }
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
export default Tabs;
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Benefits:**
|
|
174
|
+
- Allows both simple and advanced usage patterns. Note that composed components should also provide simple props for non-advanced usage.
|
|
175
|
+
- Provides flexibility for custom layouts
|
|
176
|
+
- Maintains clean API surface
|
|
177
|
+
|
|
178
|
+
### Context Pattern
|
|
179
|
+
|
|
180
|
+
For sharing state between parent and children:
|
|
181
|
+
|
|
182
|
+
```tsx
|
|
183
|
+
// Component.context.ts
|
|
184
|
+
import { createContext, useContext } from 'react';
|
|
185
|
+
|
|
186
|
+
export const ComponentContext = createContext<ComponentContextParams>({
|
|
187
|
+
variant: 'default',
|
|
188
|
+
size: 'medium'
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
export const useComponentParams = (
|
|
192
|
+
customParams: Partial<ComponentContextParams> = {}
|
|
193
|
+
): ComponentContextParams => {
|
|
194
|
+
const context = useContext(ComponentContext);
|
|
195
|
+
return customParams ? assignWith({}, context, customParams, skipUndefined) : context;
|
|
196
|
+
};
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**✅ DO:**
|
|
200
|
+
- Use context for deeply nested component communication
|
|
201
|
+
- Memoize context values to prevent unnecessary re-renders
|
|
202
|
+
- Provide sensible defaults
|
|
203
|
+
|
|
204
|
+
**❌ DON'T:**
|
|
205
|
+
- Overuse context for simple prop drilling
|
|
206
|
+
- Forget to memoize context values
|
|
207
|
+
|
|
208
|
+
## Testing
|
|
209
|
+
|
|
210
|
+
### Test File Structure
|
|
211
|
+
|
|
212
|
+
```tsx
|
|
213
|
+
// Component.test.tsx
|
|
214
|
+
import { render, screen } from '@testing-library/react';
|
|
215
|
+
import Component from './Component';
|
|
216
|
+
|
|
217
|
+
describe('Component', () => {
|
|
218
|
+
describe('Basic rendering', () => {
|
|
219
|
+
it('should render with default props', () => {
|
|
220
|
+
render(<Component>Test content</Component>);
|
|
221
|
+
expect(screen.getByText('Test content')).toBeInTheDocument();
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
describe('Variants', () => {
|
|
226
|
+
it('should render primary variant', () => {
|
|
227
|
+
render(<Component variant="primary">Primary</Component>);
|
|
228
|
+
expect(screen.getByText('Primary')).toBeInTheDocument();
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('Composition mode', () => {
|
|
233
|
+
it('should render with composition components', () => {
|
|
234
|
+
render(
|
|
235
|
+
<Component.Compose>
|
|
236
|
+
<Component.Header>Header</Component.Header>
|
|
237
|
+
<Component.Body>Body</Component.Body>
|
|
238
|
+
</Component.Compose>
|
|
239
|
+
);
|
|
240
|
+
expect(screen.getByText('Header')).toBeInTheDocument();
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### **Testing Library Queries**
|
|
247
|
+
|
|
248
|
+
Prefer queries in this order:
|
|
249
|
+
1. `getByRole` (most accessible)
|
|
250
|
+
2. `getByLabelText`
|
|
251
|
+
3. `getByPlaceholderText`
|
|
252
|
+
4. `getByText`
|
|
253
|
+
5. `getByTestId` (last resort)
|
|
254
|
+
|
|
255
|
+
You can find more info in [Testing Library docs](https://testing-library.com/docs/queries/about/).
|
|
256
|
+
|
|
257
|
+
## Tips & Tricks
|
|
258
|
+
|
|
259
|
+
### 1. **Transient Props in Styled Components**
|
|
260
|
+
|
|
261
|
+
Use `$` prefix for transient props:
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
// ✅ Good - won't pass $variant to DOM
|
|
265
|
+
const Button = styled.button<{ $variant: string }>`
|
|
266
|
+
color: ${({ $variant }) => $variant === 'primary' ? 'blue' : 'gray'};
|
|
267
|
+
`;
|
|
268
|
+
|
|
269
|
+
// ❌ Bad - will pass variant to DOM and cause warnings
|
|
270
|
+
const Button = styled.button<{ variant: string }>`
|
|
271
|
+
color: ${({ variant }) => variant === 'primary' ? 'blue' : 'gray'};
|
|
272
|
+
`;
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 2. **Theme Type Safety**
|
|
276
|
+
|
|
277
|
+
Create theme types for your component in `packages/styles`:
|
|
278
|
+
|
|
279
|
+
```tsx
|
|
280
|
+
// packages/styles/src/themes/types/theme/components/myComponent.types.ts
|
|
281
|
+
export type MyComponentTheme = {
|
|
282
|
+
padding: string;
|
|
283
|
+
gap: string;
|
|
284
|
+
variants: {
|
|
285
|
+
primary: { bgColor: string; textColor: string };
|
|
286
|
+
secondary: { bgColor: string; textColor: string };
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Then add to all theme files (light, dark, light2, dark2).
|
|
292
|
+
|
|
293
|
+
### 3. **Composition Helpers**
|
|
294
|
+
|
|
295
|
+
Use helper types from `Helpers`:
|
|
296
|
+
|
|
297
|
+
```tsx
|
|
298
|
+
import { ComposeElementProps, ChildFree } from '../Helpers';
|
|
299
|
+
|
|
300
|
+
// ComposeElementProps: Standard props for composition components
|
|
301
|
+
// ChildFree: Omits children from props
|
|
302
|
+
type MyProps = ChildFree<ComposeElementProps>;
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### 4. **Storybook Integration**
|
|
306
|
+
|
|
307
|
+
Create stories in `docs/stories/ComponentName/`:
|
|
308
|
+
|
|
309
|
+
```tsx
|
|
310
|
+
// ComponentName.stories.tsx
|
|
311
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
312
|
+
import { ComponentName } from '@redislabsdev/redis-ui-components';
|
|
313
|
+
|
|
314
|
+
const meta: Meta<typeof ComponentName> = {
|
|
315
|
+
component: ComponentName,
|
|
316
|
+
title: 'Components/ComponentName'
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
export default meta;
|
|
320
|
+
type Story = StoryObj<typeof ComponentName>;
|
|
321
|
+
|
|
322
|
+
export const Playground: Story = {
|
|
323
|
+
args: {
|
|
324
|
+
variant: 'primary',
|
|
325
|
+
size: 'medium'
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
> **Note:** For composition components, create a separate `ComponentNameCompose.mdx` file.
|
|
@@ -3,4 +3,4 @@ export declare const AppSelectorItem: import("styled-components").StyledComponen
|
|
|
3
3
|
export declare const AppSelectionMenuItem: import("styled-components").StyledComponent<"div", any, {
|
|
4
4
|
disabled?: boolean | undefined;
|
|
5
5
|
}, never>;
|
|
6
|
-
export declare const Label: import("styled-components").StyledComponent<(
|
|
6
|
+
export declare const Label: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../../Typography").TypographyBodyProps & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Message: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../../Typography").TypographyBodyProps & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
|
|
@@ -7,6 +7,7 @@ const Button_context = require("../Button.context.cjs");
|
|
|
7
7
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
8
8
|
const React__default = /* @__PURE__ */ _interopDefault(React);
|
|
9
9
|
const TextButton = React__default.default.forwardRef(({
|
|
10
|
+
size = "M",
|
|
10
11
|
variant = "primary",
|
|
11
12
|
children,
|
|
12
13
|
...restProps
|
|
@@ -16,6 +17,7 @@ const TextButton = React__default.default.forwardRef(({
|
|
|
16
17
|
children: jsxRuntime.jsxRuntimeExports.jsx(TextButton_style.TextButton, {
|
|
17
18
|
type: "button",
|
|
18
19
|
variant,
|
|
20
|
+
size,
|
|
19
21
|
ref,
|
|
20
22
|
...restProps,
|
|
21
23
|
children
|
|
@@ -3,6 +3,7 @@ import React__default from "react";
|
|
|
3
3
|
import { TextButton as TextButton$2 } from "./TextButton.style.js";
|
|
4
4
|
import { ButtonContext } from "../Button.context.js";
|
|
5
5
|
const TextButton = React__default.forwardRef(({
|
|
6
|
+
size = "M",
|
|
6
7
|
variant = "primary",
|
|
7
8
|
children,
|
|
8
9
|
...restProps
|
|
@@ -12,6 +13,7 @@ const TextButton = React__default.forwardRef(({
|
|
|
12
13
|
children: jsxRuntimeExports.jsx(TextButton$2, {
|
|
13
14
|
type: "button",
|
|
14
15
|
variant,
|
|
16
|
+
size,
|
|
15
17
|
ref,
|
|
16
18
|
...restProps,
|
|
17
19
|
children
|
|
@@ -4,23 +4,29 @@ const _styled = require("styled-components");
|
|
|
4
4
|
const redisUiStyles = require("@redislabsdev/redis-ui-styles");
|
|
5
5
|
const Button_style = require("../Button.style.cjs");
|
|
6
6
|
const Body_style = require("../../Typography/components/Body/Body.style.cjs");
|
|
7
|
+
const css_utils = require("../../Helpers/css.utils.cjs");
|
|
7
8
|
const Button_style_utils = require("../Button.style.utils.cjs");
|
|
8
9
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
9
10
|
const _styled__default = /* @__PURE__ */ _interopDefault(_styled);
|
|
10
11
|
const getVariantStyle = (variant) => (theme) => {
|
|
11
12
|
const themeVariant = variant ? theme.components.textButton.variants[variant] : null;
|
|
12
13
|
return themeVariant ? _styled.css`
|
|
13
|
-
padding: ${themeVariant.padding};
|
|
14
|
-
border-radius: ${themeVariant.borderRadius};
|
|
15
14
|
border: 1px solid transparent;
|
|
16
15
|
box-sizing: border-box;
|
|
17
16
|
${Button_style_utils.getButtonStatesStyle(themeVariant.states, [Button_style_utils.bgColorMap, Button_style_utils.textColorMap, Button_style_utils.borderColorMap])};
|
|
18
17
|
` : null;
|
|
19
18
|
};
|
|
19
|
+
const sizeTokenMaps = [css_utils.tokenMaps.borderRadius, css_utils.tokenMaps.padding, css_utils.tokenMaps.height, css_utils.tokenMaps.lineHeight, css_utils.tokenMaps.gap];
|
|
20
20
|
const TextButton = _styled__default.default.button.withConfig({
|
|
21
21
|
displayName: "TextButtonstyle__TextButton",
|
|
22
22
|
componentId: "RedisUI__sc-1t8veic-0"
|
|
23
|
-
})(["", ";
|
|
23
|
+
})(["", ";", ";", ";", ";vertical-align:unset;"], Button_style.baseButtonStyle, ({
|
|
24
|
+
size,
|
|
25
|
+
variant
|
|
26
|
+
}) => {
|
|
27
|
+
const layout = variant.includes("inline") ? "inline" : "block";
|
|
28
|
+
return css_utils.styleFromTokens(sizeTokenMaps, redisUiStyles.useTheme().components.textButton.layouts[layout].sizes[size]);
|
|
29
|
+
}, () => Body_style.useBodyStyles(), ({
|
|
24
30
|
variant
|
|
25
31
|
}) => getVariantStyle(variant)(redisUiStyles.useTheme()));
|
|
26
32
|
exports.TextButton = TextButton;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { TextButtonProps } from './TextButton.types';
|
|
2
|
-
export declare const TextButton: import("styled-components").StyledComponent<"button", any, Required<Pick<TextButtonProps, "variant">>, never>;
|
|
2
|
+
export declare const TextButton: import("styled-components").StyledComponent<"button", any, Required<Pick<TextButtonProps, "variant" | "size">>, never>;
|
|
@@ -2,21 +2,27 @@ import _styled, { css } from "styled-components";
|
|
|
2
2
|
import { useTheme } from "@redislabsdev/redis-ui-styles";
|
|
3
3
|
import { baseButtonStyle } from "../Button.style.js";
|
|
4
4
|
import { useBodyStyles } from "../../Typography/components/Body/Body.style.js";
|
|
5
|
+
import { styleFromTokens, tokenMaps } from "../../Helpers/css.utils.js";
|
|
5
6
|
import { getButtonStatesStyle, bgColorMap, textColorMap, borderColorMap } from "../Button.style.utils.js";
|
|
6
7
|
const getVariantStyle = (variant) => (theme) => {
|
|
7
8
|
const themeVariant = variant ? theme.components.textButton.variants[variant] : null;
|
|
8
9
|
return themeVariant ? css`
|
|
9
|
-
padding: ${themeVariant.padding};
|
|
10
|
-
border-radius: ${themeVariant.borderRadius};
|
|
11
10
|
border: 1px solid transparent;
|
|
12
11
|
box-sizing: border-box;
|
|
13
12
|
${getButtonStatesStyle(themeVariant.states, [bgColorMap, textColorMap, borderColorMap])};
|
|
14
13
|
` : null;
|
|
15
14
|
};
|
|
15
|
+
const sizeTokenMaps = [tokenMaps.borderRadius, tokenMaps.padding, tokenMaps.height, tokenMaps.lineHeight, tokenMaps.gap];
|
|
16
16
|
const TextButton = _styled.button.withConfig({
|
|
17
17
|
displayName: "TextButtonstyle__TextButton",
|
|
18
18
|
componentId: "RedisUI__sc-1t8veic-0"
|
|
19
|
-
})(["", ";
|
|
19
|
+
})(["", ";", ";", ";", ";vertical-align:unset;"], baseButtonStyle, ({
|
|
20
|
+
size,
|
|
21
|
+
variant
|
|
22
|
+
}) => {
|
|
23
|
+
const layout = variant.includes("inline") ? "inline" : "block";
|
|
24
|
+
return styleFromTokens(sizeTokenMaps, useTheme().components.textButton.layouts[layout].sizes[size]);
|
|
25
|
+
}, () => useBodyStyles(), ({
|
|
20
26
|
variant
|
|
21
27
|
}) => getVariantStyle(variant)(useTheme()));
|
|
22
28
|
export {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ButtonHTMLAttributes } from 'react';
|
|
2
|
+
export type TextButtonSizes = 'M';
|
|
2
3
|
export declare const textButtonVariants: readonly ["primary", "destructive", "primary-inline", "destructive-inline"];
|
|
3
4
|
export type TextButtonVariants = (typeof textButtonVariants)[number];
|
|
4
5
|
export interface TextButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
6
|
+
size?: TextButtonSizes;
|
|
5
7
|
variant?: TextButtonVariants;
|
|
6
8
|
}
|
|
@@ -11,5 +11,5 @@ const _styled__default = /* @__PURE__ */ _interopDefault(_styled);
|
|
|
11
11
|
const ToggleButton = _styled__default.default.button.withConfig({
|
|
12
12
|
displayName: "ToggleButtonstyle__ToggleButton",
|
|
13
13
|
componentId: "RedisUI__sc-1o8wm2j-0"
|
|
14
|
-
})(["", ";height:", ";line-height:", ";gap:", ";", ";padding:", ";border-radius:", ";border:1px solid transparent;&:where(:not([
|
|
14
|
+
})(["", ";height:", ";line-height:", ";gap:", ";", ";padding:", ";border-radius:", ";border:1px solid transparent;&:where(:not([aria-pressed='true'])){", "}&:where([aria-pressed='true']){", "}&:disabled ", "{opacity:", ";}"], Button_style.baseButtonStyle, () => redisUiStyles.useTheme().components.toggleButton.height, () => redisUiStyles.useTheme().components.toggleButton.lineHeight, () => redisUiStyles.useTheme().components.toggleButton.gap, () => Body_style.useBodyStyles(), () => redisUiStyles.useTheme().components.toggleButton.padding, () => redisUiStyles.useTheme().components.toggleButton.borderRadius, () => Button_style_utils.getButtonStatesStyle(redisUiStyles.useTheme().components.toggleButton.toggleStates.off, [Button_style_utils.bgColorMap, Button_style_utils.textColorMap, Button_style_utils.borderColorMap]), () => Button_style_utils.getButtonStatesStyle(redisUiStyles.useTheme().components.toggleButton.toggleStates.on, [Button_style_utils.bgColorMap, Button_style_utils.textColorMap, Button_style_utils.borderColorMap]), IndicatorCount_style.IndicatorCount, () => redisUiStyles.useTheme().components.toggleButton.counter.disabledOpacity);
|
|
15
15
|
exports.ToggleButton = ToggleButton;
|
|
@@ -7,7 +7,7 @@ import { IndicatorCount } from "./components/IndicatorCount/IndicatorCount.style
|
|
|
7
7
|
const ToggleButton = _styled.button.withConfig({
|
|
8
8
|
displayName: "ToggleButtonstyle__ToggleButton",
|
|
9
9
|
componentId: "RedisUI__sc-1o8wm2j-0"
|
|
10
|
-
})(["", ";height:", ";line-height:", ";gap:", ";", ";padding:", ";border-radius:", ";border:1px solid transparent;&:where(:not([
|
|
10
|
+
})(["", ";height:", ";line-height:", ";gap:", ";", ";padding:", ";border-radius:", ";border:1px solid transparent;&:where(:not([aria-pressed='true'])){", "}&:where([aria-pressed='true']){", "}&:disabled ", "{opacity:", ";}"], baseButtonStyle, () => useTheme().components.toggleButton.height, () => useTheme().components.toggleButton.lineHeight, () => useTheme().components.toggleButton.gap, () => useBodyStyles(), () => useTheme().components.toggleButton.padding, () => useTheme().components.toggleButton.borderRadius, () => getButtonStatesStyle(useTheme().components.toggleButton.toggleStates.off, [bgColorMap, textColorMap, borderColorMap]), () => getButtonStatesStyle(useTheme().components.toggleButton.toggleStates.on, [bgColorMap, textColorMap, borderColorMap]), IndicatorCount, () => useTheme().components.toggleButton.counter.disabledOpacity);
|
|
11
11
|
export {
|
|
12
12
|
ToggleButton
|
|
13
13
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import { CheckboxVariants, CheckedType } from '../Compose/Compose.types';
|
|
2
3
|
export declare const CheckboxLabel: import("styled-components").StyledComponent<"label", any, {
|
|
3
4
|
$checked: CheckedType;
|
|
4
5
|
$variant: CheckboxVariants;
|
|
5
6
|
}, never>;
|
|
6
|
-
export declare const TypographyBody: import("styled-components").StyledComponent<(
|
|
7
|
+
export declare const TypographyBody: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../../Typography").TypographyBodyProps & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
|
|
@@ -31,19 +31,20 @@ const ExtraItem = ({
|
|
|
31
31
|
children: jsxRuntime.jsxRuntimeExports.jsx(Tooltip.default, {
|
|
32
32
|
onOpenChange,
|
|
33
33
|
interactive,
|
|
34
|
-
disableInteractionHelper: true,
|
|
35
|
-
withButton: true,
|
|
36
34
|
placement: "right",
|
|
37
35
|
backgroundColor: theme.components.chipList.popupList.bgColor,
|
|
38
36
|
content: content && jsxRuntime.jsxRuntimeExports.jsx(ExtraItem_style.ExtraListContainer, {
|
|
39
37
|
ref: tooltipScrollContainerRef,
|
|
40
38
|
children: content
|
|
41
39
|
}),
|
|
42
|
-
children: jsxRuntime.jsxRuntimeExports.jsx(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
children: jsxRuntime.jsxRuntimeExports.jsx("span", {
|
|
41
|
+
tabIndex: 0,
|
|
42
|
+
children: jsxRuntime.jsxRuntimeExports.jsx(Chip.default, {
|
|
43
|
+
text: `+${chips.length}`,
|
|
44
|
+
disabled,
|
|
45
|
+
size,
|
|
46
|
+
variant
|
|
47
|
+
})
|
|
47
48
|
})
|
|
48
49
|
})
|
|
49
50
|
});
|
|
@@ -29,19 +29,20 @@ const ExtraItem = ({
|
|
|
29
29
|
children: jsxRuntimeExports.jsx(Tooltip, {
|
|
30
30
|
onOpenChange,
|
|
31
31
|
interactive,
|
|
32
|
-
disableInteractionHelper: true,
|
|
33
|
-
withButton: true,
|
|
34
32
|
placement: "right",
|
|
35
33
|
backgroundColor: theme.components.chipList.popupList.bgColor,
|
|
36
34
|
content: content && jsxRuntimeExports.jsx(ExtraListContainer, {
|
|
37
35
|
ref: tooltipScrollContainerRef,
|
|
38
36
|
children: content
|
|
39
37
|
}),
|
|
40
|
-
children: jsxRuntimeExports.jsx(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
children: jsxRuntimeExports.jsx("span", {
|
|
39
|
+
tabIndex: 0,
|
|
40
|
+
children: jsxRuntimeExports.jsx(Chip, {
|
|
41
|
+
text: `+${chips.length}`,
|
|
42
|
+
disabled,
|
|
43
|
+
size,
|
|
44
|
+
variant
|
|
45
|
+
})
|
|
45
46
|
})
|
|
46
47
|
})
|
|
47
48
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
export declare const ExtraListContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
2
|
-
export declare const ExtraListItem: import("styled-components").StyledComponent<(
|
|
3
|
+
export declare const ExtraListItem: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../Typography").TypographyBodyProps & import("react").RefAttributes<HTMLElement>>, any, {
|
|
3
4
|
$disabled?: boolean | undefined;
|
|
4
5
|
}, never>;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Text: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../../../..").TypographyHeadingProps & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Title: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("../../../../..").TypographyHeadingProps & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
|
|
@@ -32,8 +32,8 @@ const MultiSelectFilter = ({
|
|
|
32
32
|
...restProps,
|
|
33
33
|
open: isMenuOpen,
|
|
34
34
|
onOpenChange,
|
|
35
|
-
children: [jsxRuntime.jsxRuntimeExports.jsx(
|
|
36
|
-
children: jsxRuntime.jsxRuntimeExports.jsx(
|
|
35
|
+
children: [jsxRuntime.jsxRuntimeExports.jsx(MultiSelectFilter_styles.MenuTriggerContainer, {
|
|
36
|
+
children: jsxRuntime.jsxRuntimeExports.jsx(Menu.default.Trigger, {
|
|
37
37
|
children: jsxRuntime.jsxRuntimeExports.jsxs(MultiSelectFilter_styles.FilterToggleButton, {
|
|
38
38
|
pressed: isMenuOpen,
|
|
39
39
|
children: [filter.label, activeOptionsNum > 0 && jsxRuntime.jsxRuntimeExports.jsx(ToggleButton.default.IndicatorCount, {
|
|
@@ -30,8 +30,8 @@ const MultiSelectFilter = ({
|
|
|
30
30
|
...restProps,
|
|
31
31
|
open: isMenuOpen,
|
|
32
32
|
onOpenChange,
|
|
33
|
-
children: [jsxRuntimeExports.jsx(
|
|
34
|
-
children: jsxRuntimeExports.jsx(
|
|
33
|
+
children: [jsxRuntimeExports.jsx(MenuTriggerContainer, {
|
|
34
|
+
children: jsxRuntimeExports.jsx(Menu.Trigger, {
|
|
35
35
|
children: jsxRuntimeExports.jsxs(FilterToggleButton, {
|
|
36
36
|
pressed: isMenuOpen,
|
|
37
37
|
children: [filter.label, activeOptionsNum > 0 && jsxRuntimeExports.jsx(ToggleButton.IndicatorCount, {
|
|
@@ -42,8 +42,8 @@ const MultiTreeSelectFilter = ({
|
|
|
42
42
|
...restProps,
|
|
43
43
|
open: isMenuOpen,
|
|
44
44
|
onOpenChange,
|
|
45
|
-
children: [jsxRuntime.jsxRuntimeExports.jsx(
|
|
46
|
-
children: jsxRuntime.jsxRuntimeExports.jsx(
|
|
45
|
+
children: [jsxRuntime.jsxRuntimeExports.jsx(MultiSelectFilter_styles.MenuTriggerContainer, {
|
|
46
|
+
children: jsxRuntime.jsxRuntimeExports.jsx(Menu.default.Trigger, {
|
|
47
47
|
children: jsxRuntime.jsxRuntimeExports.jsxs(MultiSelectFilter_styles.FilterToggleButton, {
|
|
48
48
|
pressed: isMenuOpen,
|
|
49
49
|
children: [filter.label, activeOptionsNum > 0 && jsxRuntime.jsxRuntimeExports.jsx(ToggleButton.default.IndicatorCount, {
|
|
@@ -40,8 +40,8 @@ const MultiTreeSelectFilter = ({
|
|
|
40
40
|
...restProps,
|
|
41
41
|
open: isMenuOpen,
|
|
42
42
|
onOpenChange,
|
|
43
|
-
children: [jsxRuntimeExports.jsx(
|
|
44
|
-
children: jsxRuntimeExports.jsx(
|
|
43
|
+
children: [jsxRuntimeExports.jsx(MenuTriggerContainer, {
|
|
44
|
+
children: jsxRuntimeExports.jsx(Menu.Trigger, {
|
|
45
45
|
children: jsxRuntimeExports.jsxs(FilterToggleButton, {
|
|
46
46
|
pressed: isMenuOpen,
|
|
47
47
|
children: [filter.label, activeOptionsNum > 0 && jsxRuntimeExports.jsx(ToggleButton.IndicatorCount, {
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const PrimitiveContextState = require("../Helpers/contexts/PrimitiveContextState.cjs");
|
|
4
4
|
const [useFieldStatus, FieldStatusProvider, FieldStatusTransProvider] = PrimitiveContextState.createPrimitiveContextState();
|
|
5
|
+
const [useFieldRequired, FieldRequiredProvider, FieldRequiredTransProvider] = PrimitiveContextState.createPrimitiveContextState();
|
|
5
6
|
const [useFieldReadonly, FieldReadonlyProvider, FieldReadonlyTransProvider] = PrimitiveContextState.createPrimitiveContextState();
|
|
6
7
|
exports.FieldReadonlyProvider = FieldReadonlyProvider;
|
|
7
8
|
exports.FieldReadonlyTransProvider = FieldReadonlyTransProvider;
|
|
9
|
+
exports.FieldRequiredProvider = FieldRequiredProvider;
|
|
10
|
+
exports.FieldRequiredTransProvider = FieldRequiredTransProvider;
|
|
8
11
|
exports.FieldStatusProvider = FieldStatusProvider;
|
|
9
12
|
exports.FieldStatusTransProvider = FieldStatusTransProvider;
|
|
10
13
|
exports.useFieldReadonly = useFieldReadonly;
|
|
14
|
+
exports.useFieldRequired = useFieldRequired;
|
|
11
15
|
exports.useFieldStatus = useFieldStatus;
|
|
@@ -3,6 +3,9 @@ import { FieldStatus } from './FormField.types';
|
|
|
3
3
|
export declare const useFieldStatus: (value?: FieldStatus | undefined) => FieldStatus | undefined, FieldStatusProvider: ({ value, children }: Partial<import("react").ProviderProps<FieldStatus>>) => import("react/jsx-runtime").JSX.Element, FieldStatusTransProvider: ({ value, passOnlyStateDown, children }: Partial<import("react").ProviderProps<FieldStatus>> & {
|
|
4
4
|
passOnlyStateDown?: FieldStatus | ((state: FieldStatus) => boolean) | undefined;
|
|
5
5
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare const useFieldRequired: (value?: boolean | undefined) => boolean | undefined, FieldRequiredProvider: ({ value, children }: Partial<import("react").ProviderProps<boolean>>) => import("react/jsx-runtime").JSX.Element, FieldRequiredTransProvider: ({ value, passOnlyStateDown, children }: Partial<import("react").ProviderProps<boolean>> & {
|
|
7
|
+
passOnlyStateDown?: boolean | ((state: boolean) => boolean) | undefined;
|
|
8
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
6
9
|
export declare const useFieldReadonly: (value?: boolean | undefined) => boolean | undefined, FieldReadonlyProvider: ({ value, children }: Partial<import("react").ProviderProps<boolean>>) => import("react/jsx-runtime").JSX.Element, FieldReadonlyTransProvider: ({ value, passOnlyStateDown, children }: Partial<import("react").ProviderProps<boolean>> & {
|
|
7
10
|
passOnlyStateDown?: boolean | ((state: boolean) => boolean) | undefined;
|
|
8
11
|
}) => import("react/jsx-runtime").JSX.Element;
|