@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.
Files changed (254) hide show
  1. package/README.md +330 -0
  2. package/dist/AppSelectionMenu/components/Item/Item.styles.d.ts +1 -1
  3. package/dist/Banner/components/Message/Message.style.d.ts +2 -1
  4. package/dist/Button/TextButton/TextButton.cjs +2 -0
  5. package/dist/Button/TextButton/TextButton.js +2 -0
  6. package/dist/Button/TextButton/TextButton.style.cjs +9 -3
  7. package/dist/Button/TextButton/TextButton.style.d.ts +1 -1
  8. package/dist/Button/TextButton/TextButton.style.js +9 -3
  9. package/dist/Button/TextButton/TextButton.types.d.ts +2 -0
  10. package/dist/Button/ToggleButton/ToggleButton.style.cjs +1 -1
  11. package/dist/Button/ToggleButton/ToggleButton.style.js +1 -1
  12. package/dist/Checkbox/components/Label/Label.style.d.ts +2 -1
  13. package/dist/ChipList/Components/ExtraItem.cjs +8 -7
  14. package/dist/ChipList/Components/ExtraItem.js +8 -7
  15. package/dist/ChipList/Components/ExtraItem.style.d.ts +2 -1
  16. package/dist/Drawer/components/Description/components/Text/Text.style.d.ts +2 -1
  17. package/dist/Drawer/components/Header/components/Title/Title.style.d.ts +2 -1
  18. package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.cjs +2 -2
  19. package/dist/Filters/components/MultiSelectFilter/MultiSelectFilter.js +2 -2
  20. package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.cjs +2 -2
  21. package/dist/Filters/components/MultiTreeSelectFilter/MultiTreeSelectFilter.js +2 -2
  22. package/dist/FormField/FormField.context.cjs +4 -0
  23. package/dist/FormField/FormField.context.d.ts +3 -0
  24. package/dist/FormField/FormField.context.js +4 -0
  25. package/dist/FormField/components/AdditionalText/AdditionalText.style.d.ts +2 -1
  26. package/dist/FormField/components/Nested/Nested.cjs +4 -2
  27. package/dist/FormField/components/Nested/Nested.js +5 -3
  28. package/dist/Helpers/css.utils.cjs +4 -0
  29. package/dist/Helpers/css.utils.js +4 -0
  30. package/dist/Inputs/Input/Input.d.ts +1 -1
  31. package/dist/Inputs/NumericInput/NumericInput.d.ts +1 -1
  32. package/dist/Inputs/QuantityCounter/QuantityCounter.d.ts +1 -1
  33. package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.style.d.ts +2 -1
  34. package/dist/Inputs/TextArea/TextArea.d.ts +1 -1
  35. package/dist/Inputs/TextArea/components/Compose/Compose.style.d.ts +1 -1
  36. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.cjs +6 -2
  37. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.js +7 -3
  38. package/dist/Inputs/components/Compose/CommonCompose.cjs +16 -14
  39. package/dist/Inputs/components/Compose/CommonCompose.js +17 -15
  40. package/dist/Inputs/components/Compose/Compose.style.d.ts +2 -1
  41. package/dist/Inputs/components/Context/InputValue.context.cjs +13 -9
  42. package/dist/Inputs/components/Context/InputValue.context.d.ts +270 -4
  43. package/dist/Inputs/components/Context/InputValue.context.js +13 -9
  44. package/dist/Inputs/components/Context/InputValueProvider.cjs +7 -2
  45. package/dist/Inputs/components/Context/InputValueProvider.js +8 -3
  46. package/dist/Inputs/components/Context/NumericInputValueProvider.cjs +6 -1
  47. package/dist/Inputs/components/Context/NumericInputValueProvider.js +7 -2
  48. package/dist/Inputs/components/InputTag/InputTag.cjs +6 -3
  49. package/dist/Inputs/components/InputTag/InputTag.js +7 -4
  50. package/dist/Inputs/components/InputTag/InputTag.style.cjs +1 -1
  51. package/dist/Inputs/components/InputTag/InputTag.style.js +1 -1
  52. package/dist/Inputs/components/ResetButton/ResetButton.cjs +7 -4
  53. package/dist/Inputs/components/ResetButton/ResetButton.js +7 -4
  54. package/dist/Label/components/Optional/Optional.style.d.ts +2 -1
  55. package/dist/Label/components/Required/Required.cjs +8 -8
  56. package/dist/Label/components/Required/Required.js +8 -8
  57. package/dist/Label/components/Required/Required.style.d.ts +2 -1
  58. package/dist/Label/components/Text/Text.style.d.ts +2 -1
  59. package/dist/Layouts/FlexDivider/FlexDivider.cjs +22 -0
  60. package/dist/Layouts/FlexDivider/FlexDivider.d.ts +2 -0
  61. package/dist/Layouts/FlexDivider/FlexDivider.js +22 -0
  62. package/dist/Layouts/FlexDivider/FlexDivider.style.cjs +46 -0
  63. package/dist/Layouts/FlexDivider/FlexDivider.style.d.ts +6 -0
  64. package/dist/Layouts/FlexDivider/FlexDivider.style.js +44 -0
  65. package/dist/Layouts/FlexDivider/FlexDivider.types.d.ts +15 -0
  66. package/dist/Layouts/FlexGroup/FlexGroup.cjs +20 -0
  67. package/dist/Layouts/FlexGroup/FlexGroup.d.ts +2 -0
  68. package/dist/Layouts/FlexGroup/FlexGroup.js +20 -0
  69. package/dist/Layouts/FlexGroup/FlexGroup.style.cjs +20 -0
  70. package/dist/Layouts/FlexGroup/FlexGroup.style.d.ts +9 -0
  71. package/dist/Layouts/FlexGroup/FlexGroup.style.js +18 -0
  72. package/dist/Layouts/FlexGroup/FlexGroup.types.d.ts +19 -0
  73. package/dist/Layouts/FlexItem/FlexItem.cjs +16 -0
  74. package/dist/Layouts/FlexItem/FlexItem.d.ts +2 -0
  75. package/dist/Layouts/FlexItem/FlexItem.js +16 -0
  76. package/dist/Layouts/FlexItem/FlexItem.style.cjs +14 -0
  77. package/dist/Layouts/FlexItem/FlexItem.style.d.ts +5 -0
  78. package/dist/Layouts/FlexItem/FlexItem.style.js +12 -0
  79. package/dist/Layouts/FlexItem/FlexItem.types.d.ts +14 -0
  80. package/dist/Layouts/FlexSplit/FlexSplit.cjs +10 -0
  81. package/dist/Layouts/FlexSplit/FlexSplit.d.ts +2 -0
  82. package/dist/Layouts/FlexSplit/FlexSplit.js +10 -0
  83. package/dist/Layouts/FlexSplit/FlexSplit.style.cjs +27 -0
  84. package/dist/Layouts/FlexSplit/FlexSplit.style.d.ts +8 -0
  85. package/dist/Layouts/FlexSplit/FlexSplit.style.js +25 -0
  86. package/dist/Layouts/FlexSplit/FlexSplit.types.d.ts +8 -0
  87. package/dist/Layouts/index.d.ts +8 -0
  88. package/dist/Link/Link.style.d.ts +2 -1
  89. package/dist/Menu/components/Content/components/Item/Components/SubHead/SubHead.style.d.ts +2 -1
  90. package/dist/Menu/components/Content/components/Label/components/Text/Text.style.d.ts +2 -1
  91. package/dist/MidBar/MidBar.cjs +30 -0
  92. package/dist/MidBar/MidBar.d.ts +22 -0
  93. package/dist/MidBar/MidBar.js +30 -0
  94. package/dist/MidBar/MidBar.types.d.ts +6 -0
  95. package/dist/MidBar/components/Header/Header.cjs +32 -0
  96. package/dist/MidBar/components/Header/Header.d.ts +15 -0
  97. package/dist/MidBar/components/Header/Header.js +32 -0
  98. package/dist/MidBar/components/Header/Header.types.d.ts +13 -0
  99. package/dist/MidBar/components/Header/components/Compose/Compose.cjs +8 -0
  100. package/dist/MidBar/components/Header/components/Compose/Compose.d.ts +3 -0
  101. package/dist/MidBar/components/Header/components/Compose/Compose.js +8 -0
  102. package/dist/MidBar/components/Header/components/Compose/Compose.style.cjs +31 -0
  103. package/dist/MidBar/components/Header/components/Compose/Compose.style.d.ts +1 -0
  104. package/dist/MidBar/components/Header/components/Compose/Compose.style.js +29 -0
  105. package/dist/MidBar/components/Header/components/Compose/Compose.types.d.ts +2 -0
  106. package/dist/MidBar/components/Header/components/Group/Group.cjs +12 -0
  107. package/dist/MidBar/components/Header/components/Group/Group.d.ts +3 -0
  108. package/dist/MidBar/components/Header/components/Group/Group.js +12 -0
  109. package/dist/MidBar/components/Header/components/Group/Group.style.cjs +22 -0
  110. package/dist/MidBar/components/Header/components/Group/Group.style.d.ts +4 -0
  111. package/dist/MidBar/components/Header/components/Group/Group.style.js +20 -0
  112. package/dist/MidBar/components/Header/components/Group/Group.types.d.ts +5 -0
  113. package/dist/MidBar/index.d.ts +2 -0
  114. package/dist/Modal/components/Content/components/Body/components/Text/Text.style.d.ts +2 -1
  115. package/dist/Modal/components/Content/components/Description/components/Text/Text.style.d.ts +2 -1
  116. package/dist/Modal/components/Content/components/Header/components/Title/Title.style.d.ts +2 -1
  117. package/dist/MoreInfoIcon/MoreInfoIcon.style.cjs +1 -1
  118. package/dist/MoreInfoIcon/MoreInfoIcon.style.js +1 -1
  119. package/dist/Pagination/Pagination.d.ts +3 -2
  120. package/dist/Popover/Popover.d.ts +2 -2
  121. package/dist/Popover/components/Content/Content.d.ts +1 -1
  122. package/dist/Popover/components/Content/components/Body/components/BodyText/BodyText.styles.d.ts +2 -1
  123. package/dist/Popover/components/Content/components/Header/components/HeaderTitle/HeaderTitle.styles.d.ts +2 -1
  124. package/dist/Popover/components/Content/components/Text/Text.styles.d.ts +2 -1
  125. package/dist/Popover/components/Content/components/WindowBar/WindowBar.d.ts +1 -1
  126. package/dist/Popover/components/Content/components/WindowBar/WindowBar.style.d.ts +2 -1
  127. package/dist/Popover/components/PopoverCard/PopoverCard.d.ts +1 -1
  128. package/dist/ProgressBar/ProgressBar.styles.d.ts +1 -1
  129. package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.cjs +5 -7
  130. package/dist/SearchBar/components/SearchSection/components/Actions/components/ColumnSelector/ColumnSelector.js +5 -7
  131. package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.cjs +11 -9
  132. package/dist/SearchBar/components/SearchSection/components/Actions/components/FiltersToggle/FiltersToggle.js +11 -9
  133. package/dist/Section/components/Header/components/CategoryValueList/CategoryValueList.style.d.ts +2 -1
  134. package/dist/Section/components/Header/components/CategoryValueList/components/CategoryValueChip/CategoryValueChip.style.d.ts +3 -2
  135. package/dist/Section/components/Header/components/Label/Label.style.d.ts +2 -1
  136. package/dist/Select/components/Context/Context.cjs +6 -4
  137. package/dist/Select/components/Context/Context.js +7 -5
  138. package/dist/Select/components/Trigger/components/Compose/Compose.cjs +5 -0
  139. package/dist/Select/components/Trigger/components/Compose/Compose.js +6 -1
  140. package/dist/Select/components/Trigger/components/Compose/Compose.style.cjs +5 -0
  141. package/dist/Select/components/Trigger/components/Compose/Compose.style.js +5 -0
  142. package/dist/SideBar/components/Footer/components/Text/Text.style.d.ts +2 -1
  143. package/dist/SideBar/components/Item/components/Text/Text.style.d.ts +2 -1
  144. package/dist/Stepper/Stepper.context.cjs +5 -10
  145. package/dist/Stepper/Stepper.context.d.ts +1 -2
  146. package/dist/Stepper/Stepper.context.js +5 -10
  147. package/dist/Stepper/Stepper.d.ts +4 -4
  148. package/dist/Stepper/components/Compose/Compose.cjs +6 -1
  149. package/dist/Stepper/components/Compose/Compose.d.ts +2 -2
  150. package/dist/Stepper/components/Compose/Compose.js +7 -2
  151. package/dist/Stepper/components/Step/Step.context.cjs +5 -10
  152. package/dist/Stepper/components/Step/Step.context.d.ts +1 -2
  153. package/dist/Stepper/components/Step/Step.context.js +5 -10
  154. package/dist/Stepper/components/Step/Step.d.ts +2 -3
  155. package/dist/Stepper/components/Step/components/Compose/Compose.cjs +1 -3
  156. package/dist/Stepper/components/Step/components/Compose/Compose.d.ts +1 -1
  157. package/dist/Stepper/components/Step/components/Compose/Compose.js +2 -4
  158. package/dist/Stepper/components/Step/components/Compose/Compose.style.cjs +2 -5
  159. package/dist/Stepper/components/Step/components/Compose/Compose.style.js +4 -7
  160. package/dist/Stepper/components/Step/components/Label/Label.style.d.ts +2 -1
  161. package/dist/Stepper/components/Step/components/Label/Label.types.d.ts +2 -3
  162. package/dist/Stepper/hooks/useStepperFocusing.cjs +31 -0
  163. package/dist/Stepper/hooks/useStepperFocusing.d.ts +16 -0
  164. package/dist/Stepper/hooks/useStepperFocusing.js +31 -0
  165. package/dist/Stepper/hooks/useStepperInteractive.cjs +30 -37
  166. package/dist/Stepper/hooks/useStepperInteractive.d.ts +2 -3
  167. package/dist/Stepper/hooks/useStepperInteractive.js +30 -37
  168. package/dist/Switch/components/Title/Title.style.d.ts +2 -1
  169. package/dist/Switch/components/Title/Title.types.d.ts +4 -4
  170. package/dist/TableHeading/TableHeading.style.cjs +1 -1
  171. package/dist/TableHeading/TableHeading.style.js +1 -1
  172. package/dist/Tabs/components/TabBar/utils/theme.utils.d.ts +2 -2
  173. package/dist/ThemeModeSwitch/ThemeModeSwitch.cjs +64 -0
  174. package/dist/ThemeModeSwitch/ThemeModeSwitch.d.ts +2 -0
  175. package/dist/ThemeModeSwitch/ThemeModeSwitch.js +64 -0
  176. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.cjs +38 -0
  177. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.d.ts +4 -0
  178. package/dist/ThemeModeSwitch/ThemeModeSwitch.style.js +36 -0
  179. package/dist/ThemeModeSwitch/ThemeModeSwitch.types.d.ts +7 -0
  180. package/dist/ThemeModeSwitch/index.d.ts +3 -0
  181. package/dist/ThemeModeSwitch/useThemeModeSwitch.cjs +37 -0
  182. package/dist/ThemeModeSwitch/useThemeModeSwitch.d.ts +8 -0
  183. package/dist/ThemeModeSwitch/useThemeModeSwitch.js +37 -0
  184. package/dist/Toast/Toaster.cjs +4 -6
  185. package/dist/Toast/Toaster.d.ts +2 -1
  186. package/dist/Toast/Toaster.js +4 -6
  187. package/dist/Toast/Toaster.style.cjs +2 -2
  188. package/dist/Toast/Toaster.style.d.ts +2 -2
  189. package/dist/Toast/Toaster.style.js +3 -3
  190. package/dist/Toast/components/Content/components/Description/Description.style.d.ts +2 -1
  191. package/dist/Toast/components/Content/components/Message/Message.style.d.ts +2 -1
  192. package/dist/Toast/core/core.d.ts +3 -3
  193. package/dist/Toast/core/mapping.helpers.cjs +18 -2
  194. package/dist/Toast/core/mapping.helpers.d.ts +4 -3
  195. package/dist/Toast/core/mapping.helpers.js +22 -6
  196. package/dist/Toast/core/mapping.types.d.ts +3 -2
  197. package/dist/Tooltip/components/Content/components/Text/Text.styles.d.ts +2 -1
  198. package/dist/TreeView/components/TreeItem/components/Checkbox/Checkbox.style.d.ts +2 -1
  199. package/dist/Typography/Typography.cjs +3 -1
  200. package/dist/Typography/Typography.d.ts +5 -3
  201. package/dist/Typography/Typography.js +8 -6
  202. package/dist/Typography/components/Base/Base.cjs +18 -0
  203. package/dist/Typography/components/Base/Base.d.ts +4 -0
  204. package/dist/Typography/components/Base/Base.js +18 -0
  205. package/dist/Typography/components/Base/Base.style.cjs +16 -0
  206. package/dist/Typography/components/Base/Base.style.d.ts +3 -0
  207. package/dist/Typography/components/Base/Base.style.js +14 -0
  208. package/dist/Typography/components/Base/Base.types.d.ts +7 -0
  209. package/dist/Typography/components/Body/Body.cjs +11 -12
  210. package/dist/Typography/components/Body/Body.d.ts +3 -2
  211. package/dist/Typography/components/Body/Body.js +12 -13
  212. package/dist/Typography/components/Body/Body.style.cjs +5 -10
  213. package/dist/Typography/components/Body/Body.style.d.ts +2 -3
  214. package/dist/Typography/components/Body/Body.style.js +5 -10
  215. package/dist/Typography/components/Body/Body.types.d.ts +2 -5
  216. package/dist/Typography/components/Code/Code.cjs +11 -11
  217. package/dist/Typography/components/Code/Code.d.ts +3 -2
  218. package/dist/Typography/components/Code/Code.js +12 -12
  219. package/dist/Typography/components/Code/Code.style.cjs +5 -10
  220. package/dist/Typography/components/Code/Code.style.d.ts +1 -2
  221. package/dist/Typography/components/Code/Code.style.js +5 -10
  222. package/dist/Typography/components/Code/Code.types.d.ts +2 -5
  223. package/dist/Typography/components/Heading/Heading.cjs +11 -20
  224. package/dist/Typography/components/Heading/Heading.d.ts +3 -2
  225. package/dist/Typography/components/Heading/Heading.js +11 -20
  226. package/dist/Typography/components/Heading/Heading.style.cjs +4 -10
  227. package/dist/Typography/components/Heading/Heading.style.d.ts +2 -2
  228. package/dist/Typography/components/Heading/Heading.style.js +4 -10
  229. package/dist/Typography/components/Heading/Heading.types.d.ts +2 -5
  230. package/dist/Typography/components/Heading/Heading.utils.cjs +12 -0
  231. package/dist/Typography/components/Heading/Heading.utils.d.ts +2 -0
  232. package/dist/Typography/components/Heading/Heading.utils.js +12 -0
  233. package/dist/Typography/hooks/useEllipsisTooltip.cjs +7 -4
  234. package/dist/Typography/hooks/useEllipsisTooltip.d.ts +3 -8
  235. package/dist/Typography/hooks/useEllipsisTooltip.js +7 -4
  236. package/dist/Typography/index.d.ts +1 -0
  237. package/dist/index.cjs +1092 -1
  238. package/dist/index.d.ts +3 -0
  239. package/dist/index.js +1139 -48
  240. package/dist/node_modules/clsx/dist/clsx.cjs +17 -0
  241. package/dist/node_modules/clsx/dist/clsx.js +17 -0
  242. package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.cjs +320 -0
  243. package/dist/packages/components/node_modules/react-toastify/dist/react-toastify.esm.js +318 -0
  244. package/dist/packages/icons/dist/multicolor/LoaderLarge.cjs +2 -2
  245. package/dist/packages/icons/dist/multicolor/LoaderLarge.js +2 -2
  246. package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.cjs +3 -8
  247. package/dist/packages/icons/dist/multicolor/dark/LoaderLarge.js +3 -8
  248. package/dist/packages/icons/dist/multicolor/light/LoaderLarge.cjs +3 -8
  249. package/dist/packages/icons/dist/multicolor/light/LoaderLarge.js +3 -8
  250. package/package.json +4 -4
  251. package/dist/node_modules/clsx/dist/clsx.m.cjs +0 -15
  252. package/dist/node_modules/clsx/dist/clsx.m.js +0 -15
  253. package/dist/node_modules/react-toastify/dist/react-toastify.esm.cjs +0 -300
  254. 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<({ size, variant, color, component, ellipsis, ...restProps }: import("../../../Typography").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
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
- export declare const Message: import("styled-components").StyledComponent<({ size, variant, color, component, ellipsis, ...restProps }: import("../../../Typography").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
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
- })(["", ";height:", ";line-height:", ";gap:", ";", ";", ";"], Button_style.baseButtonStyle, () => redisUiStyles.useTheme().components.textButton.height, () => redisUiStyles.useTheme().components.textButton.lineHeight, () => redisUiStyles.useTheme().components.textButton.gap, () => Body_style.useBodyStyles(), ({
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
- })(["", ";height:", ";line-height:", ";gap:", ";", ";", ";"], baseButtonStyle, () => useTheme().components.textButton.height, () => useTheme().components.textButton.lineHeight, () => useTheme().components.textButton.gap, () => useBodyStyles(), ({
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([data-state='on'])){", "}&:where([data-state='on']){", "}&: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);
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([data-state='on'])){", "}&:where([data-state='on']){", "}&: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);
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<({ size, variant, color, component, ellipsis, ...restProps }: import("../../../Typography").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
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(Chip.default, {
43
- text: `+${chips.length}`,
44
- disabled,
45
- size,
46
- variant
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(Chip, {
41
- text: `+${chips.length}`,
42
- disabled,
43
- size,
44
- variant
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<({ size, variant, color, component, ellipsis, ...restProps }: import("../../Typography").TypographyBodyProps) => import("react/jsx-runtime").JSX.Element, any, {
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
- export declare const Text: import("styled-components").StyledComponent<({ size, ellipsis, color, variant, component, ...restProps }: import("../../../../..").TypographyHeadingProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
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
- export declare const Title: import("styled-components").StyledComponent<({ size, ellipsis, color, variant, component, ...restProps }: import("../../../../..").TypographyHeadingProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
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(Menu.default.Trigger, {
36
- children: jsxRuntime.jsxRuntimeExports.jsx(MultiSelectFilter_styles.MenuTriggerContainer, {
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(Menu.Trigger, {
34
- children: jsxRuntimeExports.jsx(MenuTriggerContainer, {
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(Menu.default.Trigger, {
46
- children: jsxRuntime.jsxRuntimeExports.jsx(MultiSelectFilter_styles.MenuTriggerContainer, {
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(Menu.Trigger, {
44
- children: jsxRuntimeExports.jsx(MenuTriggerContainer, {
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;