@redsift/design-system 11.6.0-muiv5-alpha.5 → 11.6.0-muiv5-alpha.6

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 (269) hide show
  1. package/_internal/Alert.d2.ts +54 -0
  2. package/_internal/Alert2.js +182 -39
  3. package/_internal/AppBar.d.ts +37 -0
  4. package/_internal/AppBar.js +240 -29
  5. package/_internal/AppContainer.d.ts +96 -0
  6. package/_internal/AppContainer.js +132 -86
  7. package/_internal/AppContent.d.ts +25 -0
  8. package/_internal/AppContent.js +84 -17
  9. package/_internal/Badge.d2.ts +9 -0
  10. package/_internal/Badge2.js +137 -4
  11. package/_internal/BreadcrumbItem.d.ts +9 -0
  12. package/_internal/BreadcrumbItem.js +85 -3
  13. package/_internal/Breadcrumbs.d2.ts +29 -0
  14. package/_internal/Breadcrumbs2.js +86 -21
  15. package/_internal/Button.d2.ts +30 -0
  16. package/_internal/Button2.js +81 -20
  17. package/_internal/ButtonGroup.d.ts +41 -0
  18. package/_internal/ButtonGroup.js +165 -25
  19. package/_internal/ButtonLink.d.ts +28 -0
  20. package/_internal/ButtonLink.js +74 -18
  21. package/_internal/Card.d2.ts +35 -0
  22. package/_internal/Card2.js +151 -29
  23. package/_internal/CardActions.d.ts +9 -0
  24. package/_internal/CardActions.js +38 -3
  25. package/_internal/CardBody.d.ts +9 -0
  26. package/_internal/CardBody.js +36 -3
  27. package/_internal/CardHeader.d.ts +9 -0
  28. package/_internal/CardHeader.js +77 -3
  29. package/_internal/Checkbox.d2.ts +68 -0
  30. package/_internal/Checkbox2.js +234 -58
  31. package/_internal/CheckboxGroup.d.ts +10 -0
  32. package/_internal/CheckboxGroup.js +182 -4
  33. package/_internal/ConditionalWrapper.d.ts +14 -0
  34. package/_internal/ConditionalWrapper.js +11 -12
  35. package/_internal/DetailedCard.d.ts +52 -0
  36. package/_internal/DetailedCard.js +6912 -48
  37. package/_internal/DetailedCardCollapsibleSectionItems.d.ts +9 -0
  38. package/_internal/DetailedCardCollapsibleSectionItems.js +58 -3
  39. package/_internal/DetailedCardHeader.d.ts +9 -0
  40. package/_internal/DetailedCardHeader.js +61 -3
  41. package/_internal/DetailedCardSection.d.ts +9 -0
  42. package/_internal/DetailedCardSection.js +166 -3
  43. package/_internal/DetailedCardSectionItem.d.ts +9 -0
  44. package/_internal/DetailedCardSectionItem.js +88 -3
  45. package/_internal/Flexbox.d2.ts +30 -0
  46. package/_internal/Flexbox2.js +85 -22
  47. package/_internal/Grid.d2.ts +32 -0
  48. package/_internal/Grid2.js +87 -24
  49. package/_internal/GridItem.d.ts +9 -0
  50. package/_internal/GridItem.js +34 -3
  51. package/_internal/Heading.d2.ts +9 -0
  52. package/_internal/Heading2.js +107 -3
  53. package/_internal/Icon.d2.ts +10 -0
  54. package/_internal/Icon2.js +206 -5
  55. package/_internal/IconButton.d.ts +12 -0
  56. package/_internal/IconButton.js +71 -3
  57. package/_internal/IconButtonLink.d.ts +28 -0
  58. package/_internal/IconButtonLink.js +65 -18
  59. package/_internal/Item.d2.ts +82 -0
  60. package/_internal/Item2.js +390 -73
  61. package/_internal/Link.d2.ts +26 -0
  62. package/_internal/Link2.js +56 -15
  63. package/_internal/LinkButton.d.ts +23 -0
  64. package/_internal/LinkButton.js +56 -13
  65. package/_internal/Number.d2.ts +69 -0
  66. package/_internal/Number2.js +103 -61
  67. package/_internal/NumberField.d.ts +80 -0
  68. package/_internal/NumberField.js +3959 -65
  69. package/_internal/Pill.d2.ts +9 -0
  70. package/_internal/Pill2.js +400 -4
  71. package/_internal/ProgressBar.d.ts +26 -0
  72. package/_internal/ProgressBar.js +61 -18
  73. package/_internal/Radio.d2.ts +66 -0
  74. package/_internal/Radio2.js +227 -56
  75. package/_internal/RadioGroup.d.ts +10 -0
  76. package/_internal/RadioGroup.js +170 -4
  77. package/_internal/Shield.d2.ts +9 -0
  78. package/_internal/Shield2.js +220 -4
  79. package/_internal/SideNavigationMenu.d.ts +9 -0
  80. package/_internal/SideNavigationMenu.js +586 -4
  81. package/_internal/{SideNavigationMenuBar.js → SideNavigationMenuBar.d.ts} +1 -1
  82. package/_internal/SideNavigationMenuItem.d.ts +9 -0
  83. package/_internal/SideNavigationMenuItem.js +299 -4
  84. package/_internal/Skeleton.d2.ts +15 -0
  85. package/_internal/Skeleton2.js +36 -9
  86. package/_internal/SkeletonCircle.d.ts +9 -0
  87. package/_internal/SkeletonCircle.js +52 -3
  88. package/_internal/SkeletonText.d.ts +9 -0
  89. package/_internal/SkeletonText.js +71 -3
  90. package/_internal/Spinner.d2.ts +43 -0
  91. package/_internal/Spinner2.js +319 -29
  92. package/_internal/Switch.d2.ts +66 -0
  93. package/_internal/Switch2.js +310 -56
  94. package/_internal/SwitchGroup.d.ts +10 -0
  95. package/_internal/SwitchGroup.js +182 -4
  96. package/_internal/Text.d2.ts +9 -0
  97. package/_internal/Text2.js +45 -3
  98. package/_internal/TextArea.d.ts +34 -0
  99. package/_internal/TextArea.js +430 -20
  100. package/_internal/TextField.d.ts +29 -0
  101. package/_internal/TextField.js +463 -19
  102. package/_internal/alert.d.ts +5 -0
  103. package/_internal/alert.js +2 -5
  104. package/_internal/app-bar.d.ts +8 -0
  105. package/_internal/app-bar.js +2 -8
  106. package/_internal/app-container.d.ts +9 -0
  107. package/_internal/app-container.js +3 -9
  108. package/_internal/app-content.d.ts +5 -0
  109. package/_internal/app-content.js +2 -5
  110. package/_internal/app-side-panel.d.ts +11 -0
  111. package/_internal/app-side-panel.js +3 -11
  112. package/_internal/badge.d.ts +6 -0
  113. package/_internal/badge.js +2 -6
  114. package/_internal/breadcrumb-item.d.ts +5 -0
  115. package/_internal/breadcrumb-item.js +1 -4
  116. package/_internal/breadcrumbs.d.ts +6 -0
  117. package/_internal/breadcrumbs.js +2 -6
  118. package/_internal/button-group.d.ts +5 -0
  119. package/_internal/button-group.js +2 -5
  120. package/_internal/button-link.d.ts +8 -0
  121. package/_internal/button-link.js +2 -8
  122. package/_internal/button.d.ts +8 -0
  123. package/_internal/button.js +3 -8
  124. package/_internal/card-actions.d.ts +5 -0
  125. package/_internal/card-actions.js +1 -4
  126. package/_internal/card-body.d.ts +5 -0
  127. package/_internal/card-body.js +1 -4
  128. package/_internal/card-header.d.ts +9 -0
  129. package/_internal/card-header.js +1 -8
  130. package/_internal/card.d.ts +11 -0
  131. package/_internal/card.js +2 -11
  132. package/_internal/checkbox-group.d.ts +6 -0
  133. package/_internal/checkbox-group.js +2 -6
  134. package/_internal/checkbox.d.ts +6 -0
  135. package/_internal/checkbox.js +2 -6
  136. package/_internal/colors.d.ts +102 -0
  137. package/_internal/colors.js +87 -91
  138. package/_internal/conditional-wrapper.d.ts +2 -0
  139. package/_internal/conditional-wrapper.js +2 -2
  140. package/_internal/detailed-card-collapsible-section-items.d.ts +4 -0
  141. package/_internal/detailed-card-collapsible-section-items.js +1 -3
  142. package/_internal/detailed-card-header.d.ts +8 -0
  143. package/_internal/detailed-card-header.js +1 -7
  144. package/_internal/detailed-card-section-item.d.ts +11 -0
  145. package/_internal/detailed-card-section-item.js +1 -10
  146. package/_internal/detailed-card-section.d.ts +7 -0
  147. package/_internal/detailed-card-section.js +1 -6
  148. package/_internal/detailed-card.d.ts +16 -0
  149. package/_internal/detailed-card.js +2 -16
  150. package/_internal/flexbox.d.ts +5 -0
  151. package/_internal/flexbox.js +2 -5
  152. package/_internal/focus-within-group.d.ts +3 -0
  153. package/_internal/focus-within-group.js +3 -3
  154. package/_internal/fonts.d.ts +12 -0
  155. package/_internal/fonts.js +4 -6
  156. package/_internal/gradient-border.d.ts +19 -0
  157. package/_internal/gradient-border.js +35 -16
  158. package/_internal/grid-item.d.ts +5 -0
  159. package/_internal/grid-item.js +1 -4
  160. package/_internal/grid.d.ts +6 -0
  161. package/_internal/grid.js +2 -6
  162. package/_internal/heading.d.ts +7 -0
  163. package/_internal/heading.js +2 -6
  164. package/_internal/icon-button-link.d.ts +8 -0
  165. package/_internal/icon-button-link.js +2 -8
  166. package/_internal/icon-button.d.ts +7 -0
  167. package/_internal/icon-button.js +2 -6
  168. package/_internal/icon.d.ts +6 -0
  169. package/_internal/icon.js +2 -6
  170. package/_internal/item.d.ts +8 -0
  171. package/_internal/item.js +2 -8
  172. package/_internal/link-button.d.ts +8 -0
  173. package/_internal/link-button.js +2 -8
  174. package/_internal/link.d.ts +8 -0
  175. package/_internal/link.js +3 -8
  176. package/_internal/listbox.d.ts +6 -0
  177. package/_internal/listbox.js +3 -6
  178. package/_internal/number-field.d.ts +9 -0
  179. package/_internal/number-field.js +2 -9
  180. package/_internal/number.d.ts +7 -0
  181. package/_internal/number.js +2 -7
  182. package/_internal/pill.d.ts +6 -0
  183. package/_internal/pill.js +2 -6
  184. package/_internal/progress-bar.d.ts +5 -0
  185. package/_internal/progress-bar.js +2 -5
  186. package/_internal/radio-group.d.ts +6 -0
  187. package/_internal/radio-group.js +2 -6
  188. package/_internal/radio.d.ts +6 -0
  189. package/_internal/radio.js +2 -6
  190. package/_internal/shared.d.ts +5 -0
  191. package/_internal/shared.js +2 -5
  192. package/_internal/shield.d.ts +6 -0
  193. package/_internal/shield.js +2 -6
  194. package/_internal/side-navigation-menu-bar.d.ts +9 -0
  195. package/_internal/side-navigation-menu-bar.js +3 -9
  196. package/_internal/side-navigation-menu-item.d.ts +8 -0
  197. package/_internal/side-navigation-menu-item.js +2 -8
  198. package/_internal/side-navigation-menu.d.ts +8 -0
  199. package/_internal/side-navigation-menu.js +2 -8
  200. package/_internal/skeleton-circle.d.ts +7 -0
  201. package/_internal/skeleton-circle.js +1 -6
  202. package/_internal/skeleton-text.d.ts +7 -0
  203. package/_internal/skeleton-text.js +2 -6
  204. package/_internal/skeleton.d.ts +8 -0
  205. package/_internal/skeleton.js +1 -7
  206. package/_internal/spinner.d.ts +5 -0
  207. package/_internal/spinner.js +2 -5
  208. package/_internal/styles.d.ts +17 -0
  209. package/_internal/styles.d2.ts +283 -0
  210. package/_internal/styles.js +235 -17
  211. package/_internal/styles2.js +44 -280
  212. package/_internal/switch-group.d.ts +6 -0
  213. package/_internal/switch-group.js +2 -6
  214. package/_internal/switch.d.ts +6 -0
  215. package/_internal/switch.js +2 -6
  216. package/_internal/text-area.d.ts +9 -0
  217. package/_internal/text-area.js +2 -9
  218. package/_internal/text-field.d.ts +10 -0
  219. package/_internal/text-field.js +2 -10
  220. package/_internal/text.d.ts +7 -0
  221. package/_internal/text.js +2 -6
  222. package/_internal/theme.d.ts +4 -0
  223. package/_internal/theme.js +1 -3
  224. package/_internal/types.d.ts +39 -0
  225. package/_internal/{types10.js → types.d10.ts} +1 -1
  226. package/_internal/{types11.js → types.d11.ts} +1 -1
  227. package/_internal/{types12.js → types.d12.ts} +4 -4
  228. package/_internal/{types14.js → types.d14.ts} +1 -1
  229. package/_internal/{types15.js → types.d15.ts} +1 -1
  230. package/_internal/{types16.js → types.d16.ts} +2 -2
  231. package/_internal/{types17.js → types.d17.ts} +1 -1
  232. package/_internal/{types18.js → types.d18.ts} +2 -2
  233. package/_internal/{types19.js → types.d19.ts} +2 -2
  234. package/_internal/types.d2.ts +37 -0
  235. package/_internal/{types20.js → types.d20.ts} +1 -1
  236. package/_internal/{types21.js → types.d21.ts} +1 -1
  237. package/_internal/{types22.js → types.d22.ts} +1 -1
  238. package/_internal/{types23.js → types.d23.ts} +2 -2
  239. package/_internal/{types24.js → types.d24.ts} +1 -1
  240. package/_internal/{types25.js → types.d25.ts} +1 -1
  241. package/_internal/{types26.js → types.d26.ts} +1 -1
  242. package/_internal/{types27.js → types.d27.ts} +1 -1
  243. package/_internal/{types28.js → types.d28.ts} +1 -1
  244. package/_internal/{types29.js → types.d29.ts} +4 -4
  245. package/_internal/types.d3.ts +23 -0
  246. package/_internal/{types4.js → types.d4.ts} +2 -2
  247. package/_internal/{types5.js → types.d5.ts} +1 -1
  248. package/_internal/{types6.js → types.d6.ts} +1 -1
  249. package/_internal/{types7.js → types.d7.ts} +3 -3
  250. package/_internal/{types8.js → types.d8.ts} +1 -1
  251. package/_internal/types.js +7 -31
  252. package/_internal/types2.js +18 -29
  253. package/_internal/types3.js +15 -18
  254. package/_internal/useAppSidePanel.d.ts +12 -0
  255. package/_internal/useAppSidePanel.js +331 -6
  256. package/_internal/useFocusOnList.d.ts +83 -0
  257. package/_internal/useFocusOnList.js +502 -44
  258. package/_internal/useListboxItem.d.ts +32 -0
  259. package/_internal/useListboxItem.js +120 -23
  260. package/_internal/useSideNavigationMenuBar.d.ts +9 -0
  261. package/_internal/useSideNavigationMenuBar.js +371 -7
  262. package/_internal/useTheme.d.ts +13 -0
  263. package/_internal/useTheme.js +10 -8
  264. package/index.d.ts +1738 -0
  265. package/index.js +523 -1674
  266. package/package.json +2 -2
  267. /package/_internal/{helpers.js → helpers.d.ts} +0 -0
  268. /package/_internal/{types13.js → types.d13.ts} +0 -0
  269. /package/_internal/{types9.js → types.d9.ts} +0 -0
@@ -1,9 +1,591 @@
1
- import { l as SideNavigationMenuProps } from './types23.js';
2
- import { C as Comp } from './helpers.js';
1
+ import { _ as _objectSpread2, b as _objectWithoutProperties, c as _extends } from './_rollupPluginBabelHelpers.js';
2
+ import React__default, { forwardRef, useRef, useContext, useState, useEffect, useReducer, useCallback, useMemo } from 'react';
3
+ import classNames from 'classnames';
4
+ import { mdiChevronDown } from '@redsift/icons';
5
+ import styled, { css } from 'styled-components';
6
+ import { S as SideNavigationMenuBarVariant, b as SideNavigationMenuBarContext, c as SideNavigationMenuContext, d as StyledSideNavigationMenuItemIndicator, a as SideNavigationMenuItem } from './SideNavigationMenuItem.js';
7
+ import { w as warnIfNoAccessibleLabelFound } from './warnIfNoAccessibleLabelFound.js';
8
+ import { f as filterComponents } from './filterComponents.js';
9
+ import { u as useId } from './useId.js';
10
+ import { A as AppContainerContext } from './context.js';
11
+ import { u as useTheme, a as ThemeProvider } from './useTheme.js';
12
+ import { A as AppSidePanelVariant } from './types.js';
13
+ import { F as Flexbox } from './Flexbox2.js';
14
+ import { a as Icon, I as IconSize } from './Icon2.js';
15
+ import { a as Badge } from './Badge2.js';
16
+
17
+ /**
18
+ * Context props.
19
+ */
20
+
21
+ /**
22
+ * Reducer props.
23
+ */
24
+
25
+ let SideNavigationMenuReducerActionType = /*#__PURE__*/function (SideNavigationMenuReducerActionType) {
26
+ SideNavigationMenuReducerActionType["Expand"] = "expand";
27
+ SideNavigationMenuReducerActionType["Collapse"] = "collapse";
28
+ SideNavigationMenuReducerActionType["Move"] = "move";
29
+ return SideNavigationMenuReducerActionType;
30
+ }({});
31
+
32
+ /**
33
+ * Component props.
34
+ */
35
+
36
+ /**
37
+ * Component style.
38
+ */
39
+ const StyledSideNavigationMenu = styled.div`
40
+ .redsift-side-navigation-menu__current-indicator-container {
41
+ min-width: 4px;
42
+ }
43
+
44
+ .redsift-side-navigation-menu__menu-container {
45
+ width: 100%;
46
+ }
47
+
48
+ .redsift-badge {
49
+ margin-left: 8px;
50
+ }
51
+
52
+ ${_ref => {
53
+ let {
54
+ $isDisabled,
55
+ $variant,
56
+ $theme
57
+ } = _ref;
58
+ return css`
59
+ .redsift-side-navigation-menu__menu-container > button {
60
+ ${!$isDisabled ? css`
61
+ & {
62
+ color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);
63
+ }
64
+ ` : css`
65
+ & {
66
+ color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);
67
+ }
68
+ `}
69
+ align-items: center;
70
+ background-color: var(--redsift-color-${$theme}-components-side-navigation-background);
71
+ border: none;
72
+ border-radius: 0 4px 4px 0;
73
+ display: flex;
74
+ font-family: var(--redsift-typography-body-font-family);
75
+ font-size: 14px;
76
+ font-weight: var(--redsift-typography-body-font-weight);
77
+ gap: 0;
78
+ height: 40px;
79
+ line-height: var(--redsift-typography-body-line-height);
80
+ margin-left: -4px;
81
+ transition: padding 300ms ease-out;
82
+ padding: 0 16px 0 ${$variant === SideNavigationMenuBarVariant.shrinked ? '16px' : '16px'};
83
+ text-decoration: none;
84
+ text-transform: uppercase;
85
+ width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});
86
+
87
+ :hover,
88
+ :focus-visible {
89
+ outline: none;
90
+
91
+ ${!$isDisabled ? css`
92
+ background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-hover);
93
+ &,
94
+ .redsift-icon.first,
95
+ .redsift-side-navigation-menu__expand-icon {
96
+ color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-hover);
97
+ }
98
+ cursor: pointer;
99
+ ` : ''}
100
+ }
101
+
102
+ :active {
103
+ ${!$isDisabled ? css`
104
+ background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-active);
105
+ ` : ''}
106
+ }
107
+
108
+ @media (prefers-reduced-motion: no-preference) {
109
+ :focus-visible {
110
+ > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {
111
+ outline: 2px solid var(--redsift-color-primary-n);
112
+ transition: outline-offset 75ms ease-out;
113
+ }
114
+
115
+ :not(:active):focus-visible {
116
+ > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {
117
+ transition-duration: 0.25s;
118
+ }
119
+ }
120
+ }
121
+
122
+ :not(:active):focus-visible {
123
+ > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {
124
+ outline-offset: 0.25rem;
125
+ }
126
+ }
127
+ }
128
+ }
129
+
130
+ .content {
131
+ transition: opacity 300ms ease-out;
132
+ opacity: ${$variant === SideNavigationMenuBarVariant.shrinked ? '0' : '1'};
133
+ overflow: hidden;
134
+ white-space: nowrap;
135
+ }
136
+ `;
137
+ }}
138
+
139
+ .first {
140
+ box-sizing: unset;
141
+ margin-right: 8px;
142
+ }
143
+
144
+ .redsift-side-navigation-menu__expand-icon {
145
+ transition: transform 300ms ease-out;
146
+ ${_ref2 => {
147
+ let {
148
+ $isDisabled,
149
+ $theme
150
+ } = _ref2;
151
+ return !$isDisabled ? css`
152
+ &,
153
+ .redsift-icon.first {
154
+ color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);
155
+ }
156
+ ` : css`
157
+ &,
158
+ .redsift-icon.first {
159
+ color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);
160
+ }
161
+ `;
162
+ }}
163
+ ${_ref3 => {
164
+ let {
165
+ $isExpanded
166
+ } = _ref3;
167
+ return !$isExpanded ? css`
168
+ transform: rotate(0);
169
+ ` : css`
170
+ transform: rotate(-180deg);
171
+ `;
172
+ }}
173
+ margin-left: auto;
174
+
175
+ transition: opacity 300ms ease-out;
176
+ opacity: ${_ref4 => {
177
+ let {
178
+ $variant
179
+ } = _ref4;
180
+ return $variant === SideNavigationMenuBarVariant.standard ? '1' : '0';
181
+ }};
182
+ }
183
+
184
+ [dir='rtl'] & {
185
+ .redsift-side-navigation-menu__expand-icon {
186
+ margin-left: unset;
187
+ margin-right: auto;
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Display children or not
193
+ */
194
+
195
+ .redsift-side-navigation-menu__menu-container > ul {
196
+ list-style: none;
197
+ margin: unset;
198
+ padding: unset;
199
+ margin-left: -4px;
200
+
201
+ ${_ref5 => {
202
+ let {
203
+ $variant
204
+ } = _ref5;
205
+ return css`
206
+ width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});
207
+ `;
208
+ }}
209
+ margin-bottom: 4px;
210
+ max-width: 241px;
211
+ transition: height 300ms ease-out;
212
+ overflow: hidden;
213
+ ${_ref6 => {
214
+ let {
215
+ $isExpanded,
216
+ $numberOfChildren
217
+ } = _ref6;
218
+ return $isExpanded ? css`
219
+ height: ${$numberOfChildren * 32}px;
220
+ ` : css`
221
+ height: 0;
222
+ `;
223
+ }};
224
+ }
225
+ `;
226
+
227
+ const SideNavigationMenuReducer = (state, action) => {
228
+ switch (action.type) {
229
+ case SideNavigationMenuReducerActionType.Expand:
230
+ return _objectSpread2(_objectSpread2({}, state), {}, {
231
+ isExpanded: true
232
+ });
233
+ case SideNavigationMenuReducerActionType.Collapse:
234
+ return {
235
+ isExpanded: false,
236
+ currentIndex: null,
237
+ previousIndex: null
238
+ };
239
+ case SideNavigationMenuReducerActionType.Move:
240
+ return _objectSpread2(_objectSpread2({}, state), {}, {
241
+ isExpanded: true,
242
+ currentIndex: action.index,
243
+ previousIndex: state.currentIndex
244
+ });
245
+ }
246
+ };
247
+
248
+ const _excluded = ["aria-label", "buttonProps", "buttonRef", "children", "className", "badgeProps", "hasBadge", "icon", "iconProps", "iconRef", "id", "isDisabled", "isExpanded", "keepBadgeVisible", "menuProps", "menuRef", "tabIndex", "theme"];
249
+ const COMPONENT_NAME = 'SideNavigationMenu';
250
+ const CLASSNAME = 'redsift-side-navigation-menu';
3
251
 
4
252
  /**
5
253
  * The SideNavigationMenu component.
6
254
  */
7
- declare const SideNavigationMenu: Comp<SideNavigationMenuProps, HTMLDivElement>;
255
+ const SideNavigationMenu = /*#__PURE__*/forwardRef((props, ref) => {
256
+ const {
257
+ 'aria-label': ariaLabel,
258
+ buttonProps = {},
259
+ buttonRef = useRef(),
260
+ children,
261
+ className,
262
+ badgeProps,
263
+ hasBadge,
264
+ icon,
265
+ iconProps,
266
+ iconRef = useRef(),
267
+ id: propsId,
268
+ isDisabled,
269
+ isExpanded: propsIsExpanded,
270
+ keepBadgeVisible,
271
+ menuProps = {},
272
+ menuRef = useRef(),
273
+ tabIndex,
274
+ theme: propsTheme
275
+ } = props,
276
+ forwardedProps = _objectWithoutProperties(props, _excluded);
277
+ const [_id] = useId();
278
+ const id = propsId !== null && propsId !== void 0 ? propsId : _id;
279
+ warnIfNoAccessibleLabelFound(props, undefined, 'SideNavigationMenu');
280
+ const appContainerState = useContext(AppContainerContext);
281
+ const sideNavigationMenuBarContext = useContext(SideNavigationMenuBarContext);
282
+ const theme = useTheme(propsTheme);
283
+ const [isFirstChild, setIsFirstChild] = useState(false);
284
+ const currentPosition = useRef(-1);
285
+ const {
286
+ menuItems: menubarItems
287
+ } = sideNavigationMenuBarContext || {};
288
+ useEffect(() => {
289
+ currentPosition.current = -1;
290
+ });
291
+
292
+ /**
293
+ * Create an array containing only valid children which can only be SideNavigationMenuItem.
294
+ * This prevent the navigation menubar to have more than two levels.
295
+ */
296
+ const childArray = filterComponents(SideNavigationMenuItem)(children);
297
+ const renderedMenuItems = childArray.map((child, index) => {
298
+ var _child$key, _child$key2;
299
+ if (child.props.isCurrent) {
300
+ currentPosition.current = index;
301
+ }
302
+ return /*#__PURE__*/React__default.createElement("li", {
303
+ key: (_child$key = child.key) !== null && _child$key !== void 0 ? _child$key : index,
304
+ role: "none"
305
+ }, /*#__PURE__*/React__default.cloneElement(child, {
306
+ isDisabled: child.props.isDisabled || isDisabled || undefined,
307
+ isSecondLevel: true,
308
+ key: (_child$key2 = child.key) !== null && _child$key2 !== void 0 ? _child$key2 : index
309
+ }));
310
+ });
311
+ const menuItems = useRef(new Set()).current;
312
+ const [state, dispatch] = useReducer(SideNavigationMenuReducer, {
313
+ currentIndex: null,
314
+ isExpanded: Boolean(propsIsExpanded),
315
+ previousIndex: null
316
+ });
317
+ const {
318
+ isExpanded,
319
+ currentIndex,
320
+ previousIndex
321
+ } = state;
322
+ const first = useCallback(() => dispatch({
323
+ type: SideNavigationMenuReducerActionType.Move,
324
+ index: 0
325
+ }), []);
326
+ const last = useCallback(() => dispatch({
327
+ type: SideNavigationMenuReducerActionType.Move,
328
+ index: menuItems.size - 1
329
+ }), [menuItems.size]);
330
+ const move = useCallback(index => dispatch({
331
+ type: SideNavigationMenuReducerActionType.Move,
332
+ index
333
+ }), []);
334
+ const open = useCallback(() => {
335
+ var _sideNavigationMenuBa;
336
+ sideNavigationMenuBarContext === null || sideNavigationMenuBarContext === void 0 ? void 0 : (_sideNavigationMenuBa = sideNavigationMenuBarContext.setCurrentOpenMenuId) === null || _sideNavigationMenuBa === void 0 ? void 0 : _sideNavigationMenuBa.call(sideNavigationMenuBarContext, id);
337
+ dispatch({
338
+ type: SideNavigationMenuReducerActionType.Expand
339
+ });
340
+ appContainerState === null || appContainerState === void 0 ? void 0 : appContainerState.expandSidePanel();
341
+ }, []);
342
+ const close = useCallback(focusButton => {
343
+ if (isExpanded) {
344
+ if (focusButton) {
345
+ buttonRef.current.focus();
346
+ }
347
+ dispatch({
348
+ type: SideNavigationMenuReducerActionType.Collapse
349
+ });
350
+ }
351
+ }, [isExpanded]);
352
+ useEffect(() => {
353
+ if (sideNavigationMenuBarContext !== null && sideNavigationMenuBarContext !== void 0 && sideNavigationMenuBarContext.currentOpenMenuId && sideNavigationMenuBarContext.currentOpenMenuId !== id) {
354
+ close();
355
+ }
356
+ }, [sideNavigationMenuBarContext === null || sideNavigationMenuBarContext === void 0 ? void 0 : sideNavigationMenuBarContext.currentOpenMenuId]);
357
+ const previous = () => {
358
+ const index = currentIndex === 0 ? menuItems.size - 1 : currentIndex - 1;
359
+ move(index);
360
+ };
361
+ const next = () => {
362
+ const index = currentIndex === menuItems.size - 1 ? 0 : currentIndex + 1;
363
+ move(index);
364
+ };
365
+ const match = e => {
366
+ const items = Array.from(menuItems);
367
+
368
+ // Reorder the array, starting with the currentNode
369
+ const reorderedItems = [...items.slice(currentIndex), ...items.slice(0, currentIndex)];
370
+
371
+ // Find all nodes that begin with the pressed letter
372
+ const matches = reorderedItems.filter(menuItem => {
373
+ const {
374
+ textContent
375
+ } = menuItem;
376
+ // istanbul ignore next
377
+ const firstLetter = textContent === null || textContent === void 0 ? void 0 : textContent.toLowerCase().charAt(0);
378
+ return e.key === firstLetter;
379
+ });
380
+
381
+ // Exit early if there are no matches
382
+ if (!matches.length) {
383
+ return;
384
+ }
385
+
386
+ // If the focused item is a match, focus the next match.
387
+ // Otherwise, focus the first match
388
+ const currentNode = items[currentIndex];
389
+ const nextMatch = matches.includes(currentNode) ? matches[1] : matches[0];
390
+ const index = items.findIndex(item => {
391
+ return item === nextMatch;
392
+ });
393
+ move(index);
394
+ };
395
+ useEffect(() => {
396
+ if (appContainerState && (appContainerState === null || appContainerState === void 0 ? void 0 : appContainerState.sidePanelVariant) === AppSidePanelVariant.shrinked && isExpanded) {
397
+ close();
398
+ }
399
+ }, [appContainerState === null || appContainerState === void 0 ? void 0 : appContainerState.sidePanelVariant]);
400
+ const value = useMemo(() => ({
401
+ menuItems
402
+ }), [menuItems]);
403
+ useEffect(() => {
404
+ const items = Array.from(menuItems);
405
+ if (currentIndex !== previousIndex) {
406
+ const currentNode = items[currentIndex];
407
+ currentNode === null || currentNode === void 0 ? void 0 : currentNode.focus();
408
+ }
409
+ }, [menuItems, currentIndex, previousIndex]);
410
+ useEffect(() => {
411
+ if (!sideNavigationMenuBarContext) {
412
+ setIsFirstChild(true);
413
+ return;
414
+ }
415
+ const menuItemNode = buttonRef.current;
416
+ if (menuItemNode) {
417
+ menubarItems.add(menuItemNode);
418
+ }
419
+ return () => {
420
+ menubarItems.delete(menuItemNode);
421
+ };
422
+ }, [menubarItems]);
423
+ const keyDownOnButton = e => {
424
+ if (isDisabled) {
425
+ return;
426
+ }
427
+ const currentNode = e.target;
428
+ switch (e.code) {
429
+ case 'Enter':
430
+ case 'Space':
431
+ e.stopPropagation();
432
+ currentNode.click();
433
+ first();
434
+ break;
435
+ case 'ArrowRight':
436
+ e.stopPropagation();
437
+ first();
438
+ break;
439
+ case 'ArrowLeft':
440
+ last();
441
+ break;
442
+ }
443
+ };
444
+ const buttonEventHandler = {
445
+ onClick: event => {
446
+ var _buttonProps$onClick;
447
+ if (isDisabled) {
448
+ return;
449
+ }
450
+ (_buttonProps$onClick = buttonProps.onClick) === null || _buttonProps$onClick === void 0 ? void 0 : _buttonProps$onClick.call(buttonProps, event);
451
+ event.stopPropagation();
452
+ if (isExpanded) {
453
+ close();
454
+ } else {
455
+ open();
456
+ }
457
+ },
458
+ onKeyDown: event => {
459
+ var _buttonProps$onKeyDow;
460
+ (_buttonProps$onKeyDow = buttonProps.onKeyDown) === null || _buttonProps$onKeyDow === void 0 ? void 0 : _buttonProps$onKeyDow.call(buttonProps, event);
461
+ keyDownOnButton(event);
462
+ }
463
+ };
464
+ const keyDownOnMenuItemList = e => {
465
+ const currentNode = e.target;
466
+ switch (e.code) {
467
+ case 'ArrowUp':
468
+ e.stopPropagation();
469
+ e.preventDefault();
470
+ previous();
471
+ break;
472
+ case 'ArrowDown':
473
+ e.stopPropagation();
474
+ e.preventDefault();
475
+ next();
476
+ break;
477
+ case 'ArrowLeft':
478
+ e.preventDefault();
479
+ e.stopPropagation();
480
+ close(true);
481
+ break;
482
+ case 'ArrowRight':
483
+ e.preventDefault();
484
+ close(!sideNavigationMenuBarContext);
485
+ break;
486
+ case 'Home':
487
+ e.stopPropagation();
488
+ e.preventDefault();
489
+ first();
490
+ break;
491
+ case 'End':
492
+ e.stopPropagation();
493
+ e.preventDefault();
494
+ last();
495
+ break;
496
+ case 'Enter':
497
+ case 'Space':
498
+ e.preventDefault();
499
+ currentNode.click();
500
+ break;
501
+ case 'Escape':
502
+ e.stopPropagation();
503
+ e.preventDefault();
504
+ close(true);
505
+ break;
506
+ default:
507
+ e.stopPropagation();
508
+ match(e);
509
+ break;
510
+ }
511
+ };
512
+ const menuItemListEventHandler = {
513
+ onKeyDown: event => {
514
+ var _menuProps$onKeyDown;
515
+ (_menuProps$onKeyDown = menuProps.onKeyDown) === null || _menuProps$onKeyDown === void 0 ? void 0 : _menuProps$onKeyDown.call(menuProps, event);
516
+ keyDownOnMenuItemList(event);
517
+ },
518
+ onClick: event => {
519
+ var _menuProps$onClick;
520
+ if (isDisabled) {
521
+ return;
522
+ }
523
+ (_menuProps$onClick = menuProps.onClick) === null || _menuProps$onClick === void 0 ? void 0 : _menuProps$onClick.call(menuProps, event);
524
+ }
525
+ };
526
+ const sideNavigationVariant = sideNavigationMenuBarContext === null || sideNavigationMenuBarContext === void 0 ? void 0 : sideNavigationMenuBarContext.sideNavigationMenuBarVariant;
527
+ return /*#__PURE__*/React__default.createElement(ThemeProvider, {
528
+ value: {
529
+ theme
530
+ }
531
+ }, /*#__PURE__*/React__default.createElement(StyledSideNavigationMenu, _extends({}, forwardedProps, {
532
+ $isDisabled: isDisabled,
533
+ $isExpanded: isExpanded,
534
+ $numberOfChildren: renderedMenuItems.length,
535
+ $theme: theme,
536
+ $variant: sideNavigationVariant,
537
+ className: classNames(SideNavigationMenu.className, className),
538
+ id: id,
539
+ ref: ref,
540
+ tabIndex: undefined
541
+ }), /*#__PURE__*/React__default.createElement(SideNavigationMenuContext.Provider, {
542
+ value: value
543
+ }, /*#__PURE__*/React__default.createElement(Flexbox, {
544
+ flexDirection: "row",
545
+ gap: "0px"
546
+ }, /*#__PURE__*/React__default.createElement("div", {
547
+ className: `${SideNavigationMenu.className}__current-indicator-container`
548
+ }, currentPosition.current !== -1 ? /*#__PURE__*/React__default.createElement(StyledSideNavigationMenuItemIndicator, {
549
+ $theme: theme,
550
+ style: {
551
+ position: 'relative',
552
+ top: isExpanded ? `${32 + currentPosition.current * 32}px` : 0,
553
+ transition: 'top 300ms ease-out'
554
+ }
555
+ }) : null), /*#__PURE__*/React__default.createElement("div", {
556
+ className: `${SideNavigationMenu.className}__menu-container`
557
+ }, /*#__PURE__*/React__default.createElement("button", _extends({}, buttonProps, {
558
+ "aria-disabled": isDisabled,
559
+ "aria-expanded": isExpanded ? 'true' : 'false',
560
+ "aria-haspopup": "true",
561
+ ref: buttonRef,
562
+ role: "menuitem",
563
+ tabIndex: tabIndex !== undefined ? tabIndex : isFirstChild ? 0 : -1,
564
+ type: "button"
565
+ }, buttonEventHandler), /*#__PURE__*/React__default.createElement(Icon, _extends({
566
+ color: `var(--redsift-side-navigation-color-menu-item-text-${isDisabled ? 'disabled' : 'resting'})`
567
+ }, iconProps, {
568
+ icon: icon,
569
+ ref: iconRef,
570
+ className: classNames(iconProps === null || iconProps === void 0 ? void 0 : iconProps.className, 'first'),
571
+ size: IconSize.medium
572
+ })), /*#__PURE__*/React__default.createElement("span", {
573
+ className: "content"
574
+ }, ariaLabel), hasBadge && (!isExpanded || keepBadgeVisible) ? /*#__PURE__*/React__default.createElement(Badge, _extends({
575
+ color: "error"
576
+ }, badgeProps)) : null, /*#__PURE__*/React__default.createElement(Icon, {
577
+ icon: mdiChevronDown,
578
+ className: `${SideNavigationMenu.className}__expand-icon`,
579
+ size: IconSize.medium
580
+ })), /*#__PURE__*/React__default.createElement("ul", _extends({}, menuProps, {
581
+ "aria-label": ariaLabel,
582
+ "aria-orientation": "vertical",
583
+ ref: menuRef,
584
+ role: "menu"
585
+ }, menuItemListEventHandler), renderedMenuItems))))));
586
+ });
587
+ SideNavigationMenu.className = CLASSNAME;
588
+ SideNavigationMenu.displayName = COMPONENT_NAME;
8
589
 
9
- export { SideNavigationMenu as S };
590
+ export { SideNavigationMenuReducerActionType as S, SideNavigationMenu as a };
591
+ //# sourceMappingURL=SideNavigationMenu.js.map
@@ -1,4 +1,4 @@
1
- import { b as SideNavigationMenuBarProps } from './types23.js';
1
+ import { b as SideNavigationMenuBarProps } from './types.d23.ts';
2
2
  import { C as Comp } from './helpers.js';
3
3
 
4
4
  /**
@@ -0,0 +1,9 @@
1
+ import { f as SideNavigationMenuItemProps } from './types.d23.ts';
2
+ import { C as Comp } from './helpers.js';
3
+
4
+ /**
5
+ * The SideNavigationMenuItem component.
6
+ */
7
+ declare const SideNavigationMenuItem: Comp<SideNavigationMenuItemProps, HTMLAnchorElement>;
8
+
9
+ export { SideNavigationMenuItem as S };