@redis-ui/components 42.8.0 → 43.2.1

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 (228) hide show
  1. package/dist/AutoCompleteSelect/AutoCompleteSelect.cjs +7 -1
  2. package/dist/AutoCompleteSelect/AutoCompleteSelect.js +7 -1
  3. package/dist/AutoCompleteSelect/hooks/useAutoCompleteSelect.cjs +7 -1
  4. package/dist/AutoCompleteSelect/hooks/useAutoCompleteSelect.d.ts +8 -1
  5. package/dist/AutoCompleteSelect/hooks/useAutoCompleteSelect.js +7 -1
  6. package/dist/BoxSelectionGroup/components/Item/components/BoxStateIndicator/BoxStateIndicator.cjs +8 -4
  7. package/dist/BoxSelectionGroup/components/Item/components/BoxStateIndicator/BoxStateIndicator.js +8 -4
  8. package/dist/BoxSelectionGroup/components/Item/components/Compose/Compose.style.cjs +18 -4
  9. package/dist/BoxSelectionGroup/components/Item/components/Compose/Compose.style.js +18 -4
  10. package/dist/BoxSelectionGroup/hooks/useBoxSelectionGroup.cjs +3 -1
  11. package/dist/BoxSelectionGroup/hooks/useBoxSelectionGroup.js +3 -1
  12. package/dist/Button/Button.style.cjs +4 -1
  13. package/dist/Button/Button.style.js +4 -1
  14. package/dist/Button/Button.style.utils.cjs +16 -1
  15. package/dist/Button/Button.style.utils.js +16 -1
  16. package/dist/Button/Button.types.cjs +1 -1
  17. package/dist/Button/Button.types.d.ts +1 -1
  18. package/dist/Button/Button.types.js +1 -1
  19. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.cjs +59 -0
  20. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.d.ts +4 -0
  21. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.js +57 -0
  22. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.style.cjs +40 -0
  23. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.style.d.ts +8 -0
  24. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.style.js +38 -0
  25. package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.types.d.ts +5 -0
  26. package/dist/Button/TextButton/TextButton.style.cjs +4 -1
  27. package/dist/Button/TextButton/TextButton.style.js +4 -1
  28. package/dist/Button/TextButton/TextButton.types.cjs +1 -1
  29. package/dist/Button/TextButton/TextButton.types.d.ts +1 -1
  30. package/dist/Button/TextButton/TextButton.types.js +1 -1
  31. package/dist/Button/index.d.ts +2 -0
  32. package/dist/Checkbox/components/Label/Label.style.cjs +15 -3
  33. package/dist/Checkbox/components/Label/Label.style.js +15 -3
  34. package/dist/Chip/components/CloseButton/CloseButton.cjs +3 -1
  35. package/dist/Chip/components/CloseButton/CloseButton.js +3 -1
  36. package/dist/Chip/components/Compose/Compose.style.cjs +4 -1
  37. package/dist/Chip/components/Compose/Compose.style.js +4 -1
  38. package/dist/Drawer/components/Description/Description.cjs +3 -1
  39. package/dist/Drawer/components/Description/Description.js +3 -1
  40. package/dist/Helpers/contexts/Popper/PopperCollisionBoundaryManager.cjs +3 -1
  41. package/dist/Helpers/contexts/Popper/PopperCollisionBoundaryManager.js +3 -1
  42. package/dist/Helpers/contexts/PrimitiveContextState.cjs +28 -16
  43. package/dist/Helpers/contexts/PrimitiveContextState.js +28 -16
  44. package/dist/Helpers/contexts/SharedId.context.cjs +9 -5
  45. package/dist/Helpers/contexts/SharedId.context.js +9 -5
  46. package/dist/Helpers/css.utils.cjs +18 -4
  47. package/dist/Helpers/css.utils.d.ts +15 -3
  48. package/dist/Helpers/css.utils.js +18 -4
  49. package/dist/Helpers/hooks/useScrollable.cjs +3 -1
  50. package/dist/Helpers/hooks/useScrollable.js +3 -1
  51. package/dist/Helpers/react.utils.cjs +6 -2
  52. package/dist/Helpers/react.utils.js +6 -2
  53. package/dist/HighlightedIcon/HighlightedIcon.cjs +26 -0
  54. package/dist/HighlightedIcon/HighlightedIcon.d.ts +3 -0
  55. package/dist/HighlightedIcon/HighlightedIcon.js +26 -0
  56. package/dist/HighlightedIcon/HighlightedIcon.style.cjs +49 -0
  57. package/dist/HighlightedIcon/HighlightedIcon.style.d.ts +5 -0
  58. package/dist/HighlightedIcon/HighlightedIcon.style.js +47 -0
  59. package/dist/HighlightedIcon/HighlightedIcon.types.d.ts +8 -0
  60. package/dist/HighlightedIcon/index.d.ts +3 -0
  61. package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.cjs +9 -5
  62. package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.js +9 -5
  63. package/dist/Inputs/components/Compose/Compose.style.cjs +29 -6
  64. package/dist/Inputs/components/Compose/Compose.style.js +29 -6
  65. package/dist/Inputs/hooks/numericInput/numericInput.utils.cjs +12 -4
  66. package/dist/Inputs/hooks/numericInput/numericInput.utils.js +12 -4
  67. package/dist/Inputs/hooks/numericInput/useNumericInput.cjs +15 -3
  68. package/dist/Inputs/hooks/numericInput/useNumericInput.js +15 -3
  69. package/dist/Loader/Loader.cjs +1 -0
  70. package/dist/Loader/Loader.js +1 -0
  71. package/dist/Menu/components/Content/components/Item/Components/Compose/Compose.style.cjs +19 -4
  72. package/dist/Menu/components/Content/components/Item/Components/Compose/Compose.style.js +19 -4
  73. package/dist/Menu/components/Content/components/Label/components/Compose/Compose.style.cjs +4 -1
  74. package/dist/Menu/components/Content/components/Label/components/Compose/Compose.style.js +4 -1
  75. package/dist/Modal/components/Content/components/Compose/Compose.cjs +3 -1
  76. package/dist/Modal/components/Content/components/Compose/Compose.js +3 -1
  77. package/dist/Modal/components/Content/components/Description/Description.cjs +3 -1
  78. package/dist/Modal/components/Content/components/Description/Description.js +3 -1
  79. package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.cjs +3 -1
  80. package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.js +3 -1
  81. package/dist/MultiSelect/components/Trigger/components/MultiValue/MultiValue.cjs +3 -1
  82. package/dist/MultiSelect/components/Trigger/components/MultiValue/MultiValue.js +3 -1
  83. package/dist/Overflow/Overflow.cjs +3 -1
  84. package/dist/Overflow/Overflow.js +3 -1
  85. package/dist/Overflow/Overflow.utils.cjs +15 -6
  86. package/dist/Overflow/Overflow.utils.js +15 -6
  87. package/dist/Overflow/components/OverflowContainer/OverflowContainer.cjs +3 -1
  88. package/dist/Overflow/components/OverflowContainer/OverflowContainer.js +3 -1
  89. package/dist/Pagination/components/PageSizeSelect.cjs +3 -1
  90. package/dist/Pagination/components/PageSizeSelect.js +3 -1
  91. package/dist/Popover/components/Content/Content.cjs +3 -1
  92. package/dist/Popover/components/Content/Content.js +3 -1
  93. package/dist/Popover/components/Content/components/Footer/Footer.cjs +3 -1
  94. package/dist/Popover/components/Content/components/Footer/Footer.js +3 -1
  95. package/dist/RadioGroup/components/Item/components/Label/Label.style.cjs +15 -3
  96. package/dist/RadioGroup/components/Item/components/Label/Label.style.js +15 -3
  97. package/dist/ScreenReaderAnnounce/ScreenReaderAnnounce.cjs +3 -1
  98. package/dist/ScreenReaderAnnounce/ScreenReaderAnnounce.js +3 -1
  99. package/dist/Section/components/Header/components/CollapseButton/CollapseButton.cjs +3 -1
  100. package/dist/Section/components/Header/components/CollapseButton/CollapseButton.js +3 -1
  101. package/dist/Select/components/Content/components/Option/components/Compose/Compose.style.cjs +16 -4
  102. package/dist/Select/components/Content/components/Option/components/Compose/Compose.style.js +16 -4
  103. package/dist/Select/components/Content/components/OptionList/OptionList.cjs +6 -4
  104. package/dist/Select/components/Content/components/OptionList/OptionList.js +6 -4
  105. package/dist/Select/components/Content/components/OptionList/Virtual.cjs +9 -5
  106. package/dist/Select/components/Content/components/OptionList/Virtual.js +9 -5
  107. package/dist/Select/components/Context/hooks/useSearch.cjs +3 -1
  108. package/dist/Select/components/Context/hooks/useSearch.js +3 -1
  109. package/dist/Select/components/Trigger/components/Compose/Compose.style.cjs +33 -7
  110. package/dist/Select/components/Trigger/components/Compose/Compose.style.js +33 -7
  111. package/dist/SideBar/components/Item/Item.style.cjs +14 -3
  112. package/dist/SideBar/components/Item/Item.style.js +14 -3
  113. package/dist/Skeleton/components/Circle/Circle.cjs +1 -1
  114. package/dist/Skeleton/components/Circle/Circle.js +1 -1
  115. package/dist/Skeleton/components/Square/Square.cjs +1 -1
  116. package/dist/Skeleton/components/Square/Square.js +1 -1
  117. package/dist/Slider/components/Label/Compose/Compose.cjs +3 -1
  118. package/dist/Slider/components/Label/Compose/Compose.js +3 -1
  119. package/dist/Slider/components/Mark/Compose/Compose.cjs +3 -1
  120. package/dist/Slider/components/Mark/Compose/Compose.js +3 -1
  121. package/dist/Slider/hooks/useOffset.cjs +3 -1
  122. package/dist/Slider/hooks/useOffset.js +3 -1
  123. package/dist/Stepper/Stepper.cjs +14 -5
  124. package/dist/Stepper/Stepper.d.ts +2 -0
  125. package/dist/Stepper/Stepper.js +14 -5
  126. package/dist/Stepper/Stepper.utils.cjs +12 -0
  127. package/dist/Stepper/Stepper.utils.d.ts +2 -0
  128. package/dist/Stepper/Stepper.utils.js +12 -0
  129. package/dist/Stepper/components/Compose/Compose.d.ts +1 -0
  130. package/dist/Stepper/components/Step/Step.cjs +2 -0
  131. package/dist/Stepper/components/Step/Step.d.ts +1 -0
  132. package/dist/Stepper/components/Step/Step.js +2 -0
  133. package/dist/Stepper/components/Step/components/Compose/Compose.cjs +5 -10
  134. package/dist/Stepper/components/Step/components/Compose/Compose.js +5 -10
  135. package/dist/Stepper/components/Step/components/Separator/Separator.cjs +15 -0
  136. package/dist/Stepper/components/Step/components/Separator/Separator.d.ts +3 -0
  137. package/dist/Stepper/components/Step/components/Separator/Separator.js +15 -0
  138. package/dist/Stepper/components/Step/components/Separator/Separator.style.cjs +24 -0
  139. package/dist/Stepper/components/Step/components/Separator/Separator.style.d.ts +1 -0
  140. package/dist/Stepper/components/Step/components/Separator/Separator.style.js +22 -0
  141. package/dist/Stepper/components/Step/components/Separator/Separator.types.d.ts +5 -0
  142. package/dist/Stepper/hooks/useStepperInteractive.cjs +12 -4
  143. package/dist/Stepper/hooks/useStepperInteractive.js +12 -4
  144. package/dist/Switch/components/Switcher/Switcher.cjs +3 -1
  145. package/dist/Switch/components/Switcher/Switcher.js +3 -1
  146. package/dist/Switch/components/Switcher/Switcher.style.cjs +31 -8
  147. package/dist/Switch/components/Switcher/Switcher.style.js +31 -8
  148. package/dist/Tabs/components/TabBar/components/Trigger/components/Marker/Marker.style.cjs +24 -5
  149. package/dist/Tabs/components/TabBar/components/Trigger/components/Marker/Marker.style.js +24 -5
  150. package/dist/Tabs/components/TabBar/components/Trigger/components/Tab/Tab.style.cjs +24 -5
  151. package/dist/Tabs/components/TabBar/components/Trigger/components/Tab/Tab.style.js +24 -5
  152. package/dist/ThemeModeSwitch/useThemeModeSwitch.cjs +6 -2
  153. package/dist/ThemeModeSwitch/useThemeModeSwitch.js +6 -2
  154. package/dist/Toast/core/content.helper.cjs +8 -4
  155. package/dist/Toast/core/content.helper.js +8 -4
  156. package/dist/Tooltip/components/Content/Content.cjs +3 -1
  157. package/dist/Tooltip/components/Content/Content.js +3 -1
  158. package/dist/TreeView/TreeView.cjs +3 -1
  159. package/dist/TreeView/TreeView.js +3 -1
  160. package/dist/TreeView/components/TreeItem/components/Compose/Compose.cjs +6 -4
  161. package/dist/TreeView/components/TreeItem/components/Compose/Compose.js +6 -4
  162. package/dist/Typography/Typography.types.cjs +4 -0
  163. package/dist/Typography/Typography.types.d.ts +2 -1
  164. package/dist/Typography/Typography.types.js +4 -0
  165. package/dist/index.cjs +8 -0
  166. package/dist/index.d.ts +1 -0
  167. package/dist/index.js +98 -90
  168. package/package.json +10 -9
  169. package/skills/redis-ui-components/SKILL.md +126 -0
  170. package/skills/redis-ui-components/references/ActionIconButton.md +96 -0
  171. package/skills/redis-ui-components/references/AppBar.md +161 -0
  172. package/skills/redis-ui-components/references/AppSelectionMenu.md +184 -0
  173. package/skills/redis-ui-components/references/AutoCompleteSelect.md +193 -0
  174. package/skills/redis-ui-components/references/Badge.md +77 -0
  175. package/skills/redis-ui-components/references/Banner.md +563 -0
  176. package/skills/redis-ui-components/references/BoxSelectionGroup.md +487 -0
  177. package/skills/redis-ui-components/references/Breadcrumbs.md +214 -0
  178. package/skills/redis-ui-components/references/Button.md +169 -0
  179. package/skills/redis-ui-components/references/ButtonGroup.md +126 -0
  180. package/skills/redis-ui-components/references/Card.md +56 -0
  181. package/skills/redis-ui-components/references/Checkbox.md +171 -0
  182. package/skills/redis-ui-components/references/Chip.md +154 -0
  183. package/skills/redis-ui-components/references/ChipList.md +307 -0
  184. package/skills/redis-ui-components/references/CopyToClipboardButton.md +47 -0
  185. package/skills/redis-ui-components/references/CountryFlag.md +57 -0
  186. package/skills/redis-ui-components/references/Drawer.md +298 -0
  187. package/skills/redis-ui-components/references/Filters.md +162 -0
  188. package/skills/redis-ui-components/references/FlexDivider.md +152 -0
  189. package/skills/redis-ui-components/references/FlexGroup.md +149 -0
  190. package/skills/redis-ui-components/references/FlexItem.md +58 -0
  191. package/skills/redis-ui-components/references/FlexSplit.md +37 -0
  192. package/skills/redis-ui-components/references/FormField.md +678 -0
  193. package/skills/redis-ui-components/references/IconButton.md +63 -0
  194. package/skills/redis-ui-components/references/Input.md +295 -0
  195. package/skills/redis-ui-components/references/KeyValueList.md +501 -0
  196. package/skills/redis-ui-components/references/Label.md +238 -0
  197. package/skills/redis-ui-components/references/Link.md +402 -0
  198. package/skills/redis-ui-components/references/Loader.md +100 -0
  199. package/skills/redis-ui-components/references/Menu.md +988 -0
  200. package/skills/redis-ui-components/references/MidBar.md +358 -0
  201. package/skills/redis-ui-components/references/Modal.md +525 -0
  202. package/skills/redis-ui-components/references/MoreInfoIcon.md +119 -0
  203. package/skills/redis-ui-components/references/MultiSelect.md +558 -0
  204. package/skills/redis-ui-components/references/NumericInput.md +322 -0
  205. package/skills/redis-ui-components/references/Overflow.md +127 -0
  206. package/skills/redis-ui-components/references/Pagination.md +151 -0
  207. package/skills/redis-ui-components/references/PasswordInput.md +262 -0
  208. package/skills/redis-ui-components/references/Popover.md +868 -0
  209. package/skills/redis-ui-components/references/ProfileIcon.md +65 -0
  210. package/skills/redis-ui-components/references/ProgressBar.md +103 -0
  211. package/skills/redis-ui-components/references/QuantityCounter.md +555 -0
  212. package/skills/redis-ui-components/references/RadioGroup.md +265 -0
  213. package/skills/redis-ui-components/references/ScreenReaderAnnounce.md +147 -0
  214. package/skills/redis-ui-components/references/SearchBar.md +242 -0
  215. package/skills/redis-ui-components/references/SearchInput.md +213 -0
  216. package/skills/redis-ui-components/references/Section.md +349 -0
  217. package/skills/redis-ui-components/references/Select.md +517 -0
  218. package/skills/redis-ui-components/references/SideBar.md +468 -0
  219. package/skills/redis-ui-components/references/Slider.md +398 -0
  220. package/skills/redis-ui-components/references/Stepper.md +288 -0
  221. package/skills/redis-ui-components/references/Switch.md +193 -0
  222. package/skills/redis-ui-components/references/Tabs.md +383 -0
  223. package/skills/redis-ui-components/references/TextArea.md +139 -0
  224. package/skills/redis-ui-components/references/TextButton.md +217 -0
  225. package/skills/redis-ui-components/references/Toast.md +399 -0
  226. package/skills/redis-ui-components/references/ToggleButton.md +163 -0
  227. package/skills/redis-ui-components/references/Tooltip.md +636 -0
  228. package/skills/redis-ui-components/references/Typography.md +323 -0
@@ -0,0 +1,468 @@
1
+ # SideBar
2
+
3
+ Collapsible sidebar navigation with a header toggle, grouped items, scrollable middle content, and a footer area. The component is designed as a compound API so the header, items, splitters, and footer pieces can be composed as needed.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { SideBar } from '@redislabsdev/redis-ui-components';
9
+ ```
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Default | Description |
14
+ |------|------|---------|-------------|
15
+ | isExpanded | `boolean` | *required* | Controls whether the sidebar is expanded or collapsed |
16
+
17
+ The component also accepts all `FlexGroupProps` except `direction`, which is fixed to a vertical sidebar layout.
18
+
19
+ ## Sub-components
20
+
21
+ - `SideBar.SideBarLogo` - Renders the logo icon used inside the sidebar header.
22
+ - `SideBar.Header` - Header row with the expand/collapse toggle button and accessibility announcement.
23
+ - `SideBar.ItemsContainer` - Column container for sidebar items.
24
+ - `SideBar.ScrollContainer` - Flexible scrollable container for sidebar content.
25
+ - `SideBar.Split` - Flexible spacer used to distribute remaining vertical space.
26
+ - `SideBar.Divider` - Visual separator line.
27
+ - `SideBar.Button` - Root collapsible action button shown in the sidebar.
28
+ - `SideBar.Item` - Navigation item with tooltip support when collapsed.
29
+ - `SideBar.Item.Icon` - Icon slot for a sidebar item.
30
+ - `SideBar.Item.Text` - Text slot for a sidebar item.
31
+ - `SideBar.Item.Button` - Compact action button that is shown only when the sidebar is expanded.
32
+ - `SideBar.Footer` - Footer wrapper for metadata, links, and text.
33
+ - `SideBar.Footer.MetaData` - Footer metadata container.
34
+ - `SideBar.Footer.Link` - Footer link rendered as body text.
35
+ - `SideBar.Footer.Text` - Small footer text.
36
+
37
+ ### SideBar.Header Props
38
+
39
+ | Prop | Type | Default | Description |
40
+ |------|------|---------|-------------|
41
+ | onToggle | `() => void` | *required* | Called when the header toggle button is pressed |
42
+
43
+ The header also accepts standard `HTMLAttributes<HTMLDivElement>`.
44
+
45
+ ### SideBar.SideBarLogo Props
46
+
47
+ | Prop | Type | Default | Description |
48
+ |------|------|---------|-------------|
49
+ | logoIcon | `IconType` | *required* | Logo icon rendered inside the header |
50
+
51
+ The logo also accepts standard `HTMLAttributes<HTMLSpanElement>` except `children`.
52
+
53
+ ### SideBar.ItemsContainer Props
54
+
55
+ This component inherits `FlexGroupProps` except `direction`. It renders a column list container with `gap="0"`, `flex="none"`, and `selfAlign="stretch"`.
56
+
57
+ ### SideBar.ScrollContainer Props
58
+
59
+ This component inherits `FlexGroupProps` except `direction`. It renders a flexible column container with `gap="0"`, `flex="1"`, and `selfAlign="stretch"`.
60
+
61
+ ### SideBar.Divider Props
62
+
63
+ | Prop | Type | Default | Description |
64
+ |------|------|---------|-------------|
65
+ | fullWidthWhenExpanded | `boolean` | - | Expands the divider to full width when the sidebar is expanded |
66
+ | noMargin | `boolean` | - | Removes vertical margins |
67
+ | fullWidth | `boolean` | - | Makes the divider span the full width |
68
+
69
+ The divider also accepts standard `HTMLAttributes<HTMLDivElement>` except `children`.
70
+
71
+ ### SideBar.Item Props
72
+
73
+ | Prop | Type | Default | Description |
74
+ |------|------|---------|-------------|
75
+ | tooltipProps | `SideBarTooltipProps` | *required* | Tooltip configuration used when the sidebar is collapsed |
76
+ | isActive | `boolean` | `false` | Marks the item as the active route/item |
77
+
78
+ The item also accepts standard `HTMLAttributes<HTMLLIElement>`.
79
+ The tooltip text is used as the collapsed label and tooltip placement defaults to `right`.
80
+
81
+ ### SideBar.Item.Icon Props
82
+
83
+ | Prop | Type | Default | Description |
84
+ |------|------|---------|-------------|
85
+ | icon | `IconType` | *required* | Icon rendered inside the item |
86
+
87
+ ### SideBar.Item.Text Props
88
+
89
+ This slot inherits `TypographyBodyProps`. It renders a `Typography.Body` element with `component="span"`, `ellipsis`, and `tooltipOnEllipsis` enabled.
90
+
91
+ ### SideBar.Item.Button Props
92
+
93
+ This slot inherits all `ActionIconButtonProps`, defaults `size` to `M`, and renders only while the sidebar is expanded.
94
+
95
+ ### SideBar.Button Props
96
+
97
+ | Prop | Type | Default | Description |
98
+ |------|------|---------|-------------|
99
+ | tooltipProps | `SideBarTooltipProps` | *required* | Tooltip configuration used when the sidebar is collapsed |
100
+ | buttonExpandedContent | `React.ReactNode` | *required* | Content displayed while the sidebar is expanded |
101
+ | buttonCollapsedIcon | `IconType` | `PlusIcon` | Icon shown while the sidebar is collapsed |
102
+
103
+ The root button also inherits all `ButtonProps` from the base `Button` component.
104
+ The tooltip text is used as the collapsed label and tooltip placement defaults to `right`.
105
+
106
+ ### SideBar.Footer Props
107
+
108
+ This footer wrapper inherits `ComposeElementProps`.
109
+
110
+ ### SideBar.Footer.MetaData Props
111
+
112
+ | Prop | Type | Default | Description |
113
+ |------|------|---------|-------------|
114
+ | children | `React.ReactNode` | *required* | Footer metadata content |
115
+
116
+ The metadata container also accepts standard `HTMLAttributes<HTMLDivElement>` except `children`.
117
+
118
+ ### SideBar.Footer.Link Props
119
+
120
+ | Prop | Type | Default | Description |
121
+ |------|------|---------|-------------|
122
+ | children | `React.ReactNode` | *required* | Footer link text |
123
+
124
+ The link also accepts standard `AnchorHTMLAttributes<HTMLAnchorElement>` except `children`.
125
+
126
+ ### SideBar.Footer.Text Props
127
+
128
+ | Prop | Type | Default | Description |
129
+ |------|------|---------|-------------|
130
+ | children | `React.ReactNode` | *required* | Footer text content |
131
+
132
+ This slot inherits `TypographyBodyProps` except `children` and renders a small body-text footer line.
133
+
134
+ ## Examples
135
+
136
+ ### Playground
137
+
138
+ ```tsx
139
+ import { SideBar } from '@redislabsdev/redis-ui-components';
140
+ import { ShardIcon } from '@redislabsdev/redis-ui-icons';
141
+ import { RedisIcon } from '@redislabsdev/redis-ui-icons/multicolor';
142
+ import { useArgState } from '../../helpers/useArgState';
143
+
144
+ const [expanded, onToggle] = useArgState({ arg: true, getNewState: (arg) => !arg });
145
+
146
+ <SideBar isExpanded={expanded}>
147
+ <SideBar.Header onToggle={onToggle}>
148
+ <SideBar.SideBarLogo logoIcon={RedisIcon} />
149
+ </SideBar.Header>
150
+ <SideBar.Item tooltipProps={{ text: 'tooltip' }}>
151
+ <SideBar.Item.Icon icon={ShardIcon} />
152
+ <SideBar.Item.Text>Item Text</SideBar.Item.Text>
153
+ </SideBar.Item>
154
+ <SideBar.Divider fullWidth />
155
+ <SideBar.Footer>
156
+ <SideBar.Footer.MetaData>Footer</SideBar.Footer.MetaData>
157
+ </SideBar.Footer>
158
+ </SideBar>
159
+ ```
160
+
161
+ ### ComplexBar
162
+
163
+ > Complex example of application sidebar with most of the features.
164
+ > For details on the use of parts, please refer to the relevant documents.
165
+
166
+ ```tsx
167
+ import { SideBar } from '@redislabsdev/redis-ui-components';
168
+ import { PlusIcon } from '@redislabsdev/redis-ui-icons';
169
+ import { useState } from 'react';
170
+ import { RedisIcon } from '@redislabsdev/redis-ui-icons/multicolor';
171
+ import { items } from './SideBar.data';
172
+
173
+ const [expanded, setExpanded] = useState(true);
174
+ const [activeLink, setActiveLink] = useState(items.top[0].content);
175
+
176
+ <SideBar isExpanded={expanded} style={{ maxHeight: '55rem', height: 'calc(100vh - 2rem)' }}>
177
+ <SideBar.Header onToggle={() => setExpanded(!expanded)}>
178
+ <SideBar.SideBarLogo logoIcon={RedisIcon} />
179
+ </SideBar.Header>
180
+ <SideBar.ScrollContainer>
181
+ <SideBar.ItemsContainer>
182
+ {items.top.map((item) => (
183
+ <SideBar.Item
184
+ isActive={item.content === activeLink}
185
+ onClick={() => setActiveLink(item.content)}
186
+ key={item.content}
187
+ tooltipProps={{ text: item.content, placement: 'right' }}
188
+ >
189
+ <SideBar.Item.Icon icon={item.icon} />
190
+ <SideBar.Item.Text>{item.content}</SideBar.Item.Text>
191
+ {item.hasButton && (
192
+ <SideBar.Item.Button
193
+ icon={PlusIcon}
194
+ variant="primary"
195
+ onClick={(e) => {
196
+ e.stopPropagation();
197
+ }}
198
+ title="New database"
199
+ />
200
+ )}
201
+ </SideBar.Item>
202
+ ))}
203
+
204
+ <SideBar.Divider />
205
+
206
+ {items.middle.map((item) => (
207
+ <SideBar.Item
208
+ isActive={item.content === activeLink}
209
+ onClick={() => setActiveLink(item.content)}
210
+ key={item.content}
211
+ tooltipProps={{ text: item.content, placement: 'right' }}
212
+ >
213
+ <SideBar.Item.Icon icon={item.icon} />
214
+ <SideBar.Item.Text>{item.content}</SideBar.Item.Text>
215
+ </SideBar.Item>
216
+ ))}
217
+ </SideBar.ItemsContainer>
218
+ <SideBar.Split />
219
+ <SideBar.Divider fullWidth />
220
+ <SideBar.ItemsContainer>
221
+ {items.bottom.map((item) => (
222
+ <SideBar.Item
223
+ isActive={item.content === activeLink}
224
+ onClick={() => {
225
+ setActiveLink(item.content);
226
+ }}
227
+ key={item.content}
228
+ tooltipProps={{ text: item.content, placement: 'right' }}
229
+ >
230
+ <SideBar.Item.Icon icon={item.icon} />
231
+ <SideBar.Item.Text>{item.content}</SideBar.Item.Text>
232
+ </SideBar.Item>
233
+ ))}
234
+ </SideBar.ItemsContainer>
235
+ </SideBar.ScrollContainer>
236
+ <SideBar.Footer>
237
+ <SideBar.Divider fullWidth />
238
+ <SideBar.Footer.MetaData>
239
+ <div>
240
+ <SideBar.Footer.Link href="/" target="_blank">
241
+ Terms
242
+ </SideBar.Footer.Link>
243
+ {' | '}
244
+ <SideBar.Footer.Link>Privacy</SideBar.Footer.Link>
245
+ </div>
246
+ <SideBar.Footer.Text>© 2022 Redis</SideBar.Footer.Text>
247
+ </SideBar.Footer.MetaData>
248
+ </SideBar.Footer>
249
+ </SideBar>
250
+ ```
251
+
252
+ ### HeaderAndFooter
253
+
254
+ > `Header` includes toggle button and. Set `onToggle` handler to switch expanded state.
255
+ > Add `SideBar.SideBarLogo` icon to show it in the `Header`.
256
+ >
257
+ > `Footer` can have any custom content, but default is `Footer.MetaData` container
258
+ > with optional `Footer.Link` and `Footer.Text` inside. Metadata is hidden in collapsed state.
259
+
260
+ ```tsx
261
+ import { SideBar } from '@redislabsdev/redis-ui-components';
262
+ import { useState } from 'react';
263
+ import { RedisIcon } from '@redislabsdev/redis-ui-icons/multicolor';
264
+ import { StoryHList } from '../../helpers/Story.style';
265
+
266
+ const [expanded, setExpanded] = useState(true);
267
+
268
+ const content = (
269
+ <>
270
+ <SideBar.Header onToggle={() => setExpanded((val) => !val)}>
271
+ <SideBar.SideBarLogo logoIcon={RedisIcon} />
272
+ </SideBar.Header>
273
+ <SideBar.Footer>
274
+ <SideBar.Footer.MetaData>
275
+ <SideBar.Footer.Link>SideBar.Footer.Link</SideBar.Footer.Link>
276
+ <SideBar.Footer.Text>SideBar.Footer.Text</SideBar.Footer.Text>
277
+ </SideBar.Footer.MetaData>
278
+ </SideBar.Footer>
279
+ </>
280
+ );
281
+
282
+ <StoryHList $gap="3rem">
283
+ <SideBar isExpanded={expanded}>{content}</SideBar>
284
+ <SideBar isExpanded={!expanded}>{content}</SideBar>
285
+ </StoryHList>
286
+ ```
287
+
288
+ ### ScrollContainer
289
+
290
+ > `ScrollContainer` allows to scroll necessary parts of the bar content,
291
+ > when not enough vertical space.
292
+ > Regularly that are items between `Header` and `Footer`.
293
+ > Sometimes user can also want to include `Footer` to scrolling.
294
+ >
295
+ > It worth to use only one `ScrollContainer` in the bar.
296
+
297
+ ```tsx
298
+ import { SideBar } from '@redislabsdev/redis-ui-components';
299
+ import { StoryHList } from '../../helpers/Story.style';
300
+ import { items } from './SideBar.data';
301
+
302
+ const simpleItemRender = (item, i) => (
303
+ <SideBar.Item key={item.content} tooltipProps={{ text: item.content, placement: 'right' }} isActive={!i}>
304
+ <SideBar.Item.Icon icon={item.icon} />
305
+ <SideBar.Item.Text>{item.content}</SideBar.Item.Text>
306
+ </SideBar.Item>
307
+ );
308
+
309
+ <StoryHList $gap="3rem" $align="start">
310
+ <SideBar isExpanded style={{ height: '10rem' }}>
311
+ <SideBar.ScrollContainer>
312
+ <SideBar.ItemsContainer>{items.top.map(simpleItemRender)}</SideBar.ItemsContainer>
313
+ </SideBar.ScrollContainer>
314
+ </SideBar>
315
+ <SideBar isExpanded style={{ height: '30rem' }}>
316
+ <SideBar.ScrollContainer>
317
+ <SideBar.ItemsContainer>{items.top.map(simpleItemRender)}</SideBar.ItemsContainer>
318
+ </SideBar.ScrollContainer>
319
+ </SideBar>
320
+ </StoryHList>
321
+ ```
322
+
323
+ ### SplitAndItemsContainer
324
+
325
+ > When too much vertical space is in the bar and user want to align part of the bar to the bottom,
326
+ > then `Split` can be used.
327
+ > If more than one `Split` is used, then all spaces are distributed equally.
328
+ >
329
+ > `Split` can be used under `SideBar` or under `ScrollContainer` without mixing.
330
+ >
331
+ > `ItemsContainer` simplifies grouping items and other elements.
332
+
333
+ ```tsx
334
+ import { SideBar } from '@redislabsdev/redis-ui-components';
335
+ import { StoryHList } from '../../helpers/Story.style';
336
+ import { items } from './SideBar.data';
337
+
338
+ const simpleItemRender = (item, i) => (
339
+ <SideBar.Item key={item.content} tooltipProps={{ text: item.content, placement: 'right' }} isActive={!i}>
340
+ <SideBar.Item.Icon icon={item.icon} />
341
+ <SideBar.Item.Text>{item.content}</SideBar.Item.Text>
342
+ </SideBar.Item>
343
+ );
344
+
345
+ <StoryHList $gap="3rem" $align="stretch" style={{ height: '40rem' }}>
346
+ <SideBar isExpanded>
347
+ <SideBar.ScrollContainer>
348
+ <SideBar.ItemsContainer>{items.top.map(simpleItemRender)}</SideBar.ItemsContainer>
349
+ <SideBar.Split />
350
+ <SideBar.ItemsContainer>{items.bottom.map(simpleItemRender)}</SideBar.ItemsContainer>
351
+ </SideBar.ScrollContainer>
352
+ </SideBar>
353
+ <SideBar isExpanded>
354
+ <SideBar.ItemsContainer>{items.top.slice(0, 2).map(simpleItemRender)}</SideBar.ItemsContainer>
355
+ <SideBar.Split />
356
+ <SideBar.ItemsContainer>{items.middle.map(simpleItemRender)}</SideBar.ItemsContainer>
357
+ <SideBar.Split />
358
+ <SideBar.ItemsContainer>{items.bottom.map(simpleItemRender)}</SideBar.ItemsContainer>
359
+ </SideBar>
360
+ <SideBar isExpanded>
361
+ <SideBar.ScrollContainer>
362
+ <SideBar.ItemsContainer>{items.top.map(simpleItemRender)}</SideBar.ItemsContainer>
363
+ <SideBar.ItemsContainer>{items.bottom.map(simpleItemRender)}</SideBar.ItemsContainer>
364
+ </SideBar.ScrollContainer>
365
+ </SideBar>
366
+ </StoryHList>
367
+ ```
368
+
369
+ ### Button
370
+
371
+ > Collapsible `Button` can be used instead of `Item`
372
+
373
+ ```tsx
374
+ import { SideBar } from '@redislabsdev/redis-ui-components';
375
+ import { ShardIcon } from '@redislabsdev/redis-ui-icons';
376
+ import { StoryHList } from '../../helpers/Story.style';
377
+
378
+ const button = (
379
+ <SideBar.Button
380
+ tooltipProps={{ text: 'Tooltip text' }}
381
+ buttonExpandedContent="Button text"
382
+ buttonCollapsedIcon={ShardIcon}
383
+ />
384
+ );
385
+
386
+ <StoryHList $gap="3rem">
387
+ <SideBar isExpanded>
388
+ <SideBar.Divider fullWidth />
389
+ {button}
390
+ <SideBar.Divider fullWidth />
391
+ </SideBar>
392
+ <SideBar isExpanded={false}>
393
+ <SideBar.Divider fullWidth />
394
+ {button}
395
+ <SideBar.Divider fullWidth />
396
+ </SideBar>
397
+ </StoryHList>
398
+ ```
399
+
400
+ ### Divider
401
+
402
+ > Collapsible `Divider` can have vertical margins and take full width
403
+
404
+ ```tsx
405
+ import { SideBar } from '@redislabsdev/redis-ui-components';
406
+ import { StoryHList } from '../../helpers/Story.style';
407
+
408
+ const content = (
409
+ <>
410
+ <SideBar.Item tooltipProps={{}}>
411
+ <SideBar.Item.Text>No vertical margins:</SideBar.Item.Text>
412
+ </SideBar.Item>
413
+ <SideBar.Divider noMargin />
414
+ <SideBar.Item tooltipProps={{}}>
415
+ <SideBar.Item.Text>Side padding (default):</SideBar.Item.Text>
416
+ </SideBar.Item>
417
+ <SideBar.Divider />
418
+ <SideBar.Item tooltipProps={{}}>
419
+ <SideBar.Item.Text>Full width:</SideBar.Item.Text>
420
+ </SideBar.Item>
421
+ <SideBar.Divider fullWidth />
422
+ <SideBar.Item tooltipProps={{}}>
423
+ <SideBar.Item.Text>Full width if expanded:</SideBar.Item.Text>
424
+ </SideBar.Item>
425
+ <SideBar.Divider fullWidthWhenExpanded />
426
+ </>
427
+ );
428
+
429
+ <StoryHList $gap="3rem">
430
+ <SideBar isExpanded>{content}</SideBar>
431
+ <SideBar isExpanded={false}>{content}</SideBar>
432
+ </StoryHList>
433
+ ```
434
+
435
+ ### Item Playground
436
+
437
+ ```tsx
438
+ import { SideBar } from '@redislabsdev/redis-ui-components';
439
+ import { PlusIcon, ShardIcon } from '@redislabsdev/redis-ui-icons';
440
+ import { useState } from 'react';
441
+
442
+ const [expanded, setExpanded] = useState(true);
443
+
444
+ <SideBar isExpanded={expanded}>
445
+ <SideBar.Header onToggle={() => setExpanded((val) => !val)} />
446
+ <SideBar.Item tooltipProps={{ text: 'tooltip', placement: 'right' }} isActive={false}>
447
+ <SideBar.Item.Icon icon={ShardIcon} />
448
+ <SideBar.Item.Text>Item text</SideBar.Item.Text>
449
+ <SideBar.Item.Button
450
+ icon={PlusIcon}
451
+ onClick={(e) => e.stopPropagation()}
452
+ title="Plus button"
453
+ />
454
+ </SideBar.Item>
455
+ </SideBar>
456
+ ```
457
+
458
+ ## Notes
459
+
460
+ - `SideBar` is a collapsible navigation shell with a fixed header/footer layout and grouped content in the middle.
461
+ - `SideBar.Header` needs an `onToggle` handler and should usually render `SideBar.SideBarLogo` inside it.
462
+ - `SideBar.Footer` is typically used with `Footer.MetaData`; that metadata area is hidden when the sidebar is collapsed.
463
+ - `SideBar.ScrollContainer` is intended for the middle content when vertical space is constrained, and the docs recommend using only one per sidebar.
464
+ - `SideBar.Split` can be used either directly under `SideBar` or under `SideBar.ScrollContainer`, but the two patterns should not be mixed.
465
+ - `SideBar.Divider` supports `noMargin`, `fullWidth`, and `fullWidthWhenExpanded` for layout tuning.
466
+ - `SideBar.Item` wraps collapsed items in a tooltip and exposes `Item.Icon`, `Item.Text`, and `Item.Button` for composition.
467
+ - `SideBar.Item.Button` only renders while the sidebar is expanded and defaults its size to `M`.
468
+ - `SideBar.Button` is the root collapsible action button, and it defaults to `PlusIcon` when no collapsed icon is provided.