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

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 (150) hide show
  1. package/_internal/Alert2.js +182 -39
  2. package/_internal/AppBar.js +240 -29
  3. package/_internal/AppContainer.js +132 -86
  4. package/_internal/AppContent.js +84 -17
  5. package/_internal/Badge2.js +137 -4
  6. package/_internal/BreadcrumbItem.js +85 -3
  7. package/_internal/Breadcrumbs2.js +86 -21
  8. package/_internal/Button2.js +81 -20
  9. package/_internal/ButtonGroup.js +165 -25
  10. package/_internal/ButtonLink.js +74 -18
  11. package/_internal/Card2.js +151 -29
  12. package/_internal/CardActions.js +38 -3
  13. package/_internal/CardBody.js +36 -3
  14. package/_internal/CardHeader.js +77 -3
  15. package/_internal/Checkbox2.js +234 -58
  16. package/_internal/CheckboxGroup.js +182 -4
  17. package/_internal/ConditionalWrapper.js +11 -12
  18. package/_internal/DetailedCard.js +6912 -48
  19. package/_internal/DetailedCardCollapsibleSectionItems.js +58 -3
  20. package/_internal/DetailedCardHeader.js +61 -3
  21. package/_internal/DetailedCardSection.js +166 -3
  22. package/_internal/DetailedCardSectionItem.js +88 -3
  23. package/_internal/Flexbox2.js +85 -22
  24. package/_internal/Grid2.js +87 -24
  25. package/_internal/GridItem.js +34 -3
  26. package/_internal/Heading2.js +107 -3
  27. package/_internal/Icon2.js +206 -5
  28. package/_internal/IconButton.js +71 -3
  29. package/_internal/IconButtonLink.js +65 -18
  30. package/_internal/Item2.js +390 -73
  31. package/_internal/Link2.js +56 -15
  32. package/_internal/LinkButton.js +56 -13
  33. package/_internal/Number2.js +103 -61
  34. package/_internal/NumberField.js +3959 -65
  35. package/_internal/Pill2.js +400 -4
  36. package/_internal/ProgressBar.js +61 -18
  37. package/_internal/Radio2.js +227 -56
  38. package/_internal/RadioGroup.js +170 -4
  39. package/_internal/Shield2.js +220 -4
  40. package/_internal/SideNavigationMenu.js +586 -4
  41. package/_internal/SideNavigationMenuItem.js +299 -4
  42. package/_internal/Skeleton2.js +36 -9
  43. package/_internal/SkeletonCircle.js +52 -3
  44. package/_internal/SkeletonText.js +71 -3
  45. package/_internal/Spinner2.js +319 -29
  46. package/_internal/Switch2.js +310 -56
  47. package/_internal/SwitchGroup.js +182 -4
  48. package/_internal/Text2.js +45 -3
  49. package/_internal/TextArea.js +430 -20
  50. package/_internal/TextField.js +463 -19
  51. package/_internal/alert.js +2 -5
  52. package/_internal/app-bar.js +2 -8
  53. package/_internal/app-container.js +3 -9
  54. package/_internal/app-content.js +2 -5
  55. package/_internal/app-side-panel.js +3 -11
  56. package/_internal/badge.js +2 -6
  57. package/_internal/breadcrumb-item.js +1 -4
  58. package/_internal/breadcrumbs.js +2 -6
  59. package/_internal/button-group.js +2 -5
  60. package/_internal/button-link.js +2 -8
  61. package/_internal/button.js +3 -8
  62. package/_internal/card-actions.js +1 -4
  63. package/_internal/card-body.js +1 -4
  64. package/_internal/card-header.js +1 -8
  65. package/_internal/card.js +2 -11
  66. package/_internal/checkbox-group.js +2 -6
  67. package/_internal/checkbox.js +2 -6
  68. package/_internal/colors.js +87 -91
  69. package/_internal/conditional-wrapper.js +2 -2
  70. package/_internal/detailed-card-collapsible-section-items.js +1 -3
  71. package/_internal/detailed-card-header.js +1 -7
  72. package/_internal/detailed-card-section-item.js +1 -10
  73. package/_internal/detailed-card-section.js +1 -6
  74. package/_internal/detailed-card.js +2 -16
  75. package/_internal/flexbox.js +2 -5
  76. package/_internal/focus-within-group.js +3 -3
  77. package/_internal/fonts.js +4 -6
  78. package/_internal/gradient-border.js +35 -16
  79. package/_internal/grid-item.js +1 -4
  80. package/_internal/grid.js +2 -6
  81. package/_internal/heading.js +2 -6
  82. package/_internal/icon-button-link.js +2 -8
  83. package/_internal/icon-button.js +2 -6
  84. package/_internal/icon.js +2 -6
  85. package/_internal/item.js +2 -8
  86. package/_internal/link-button.js +2 -8
  87. package/_internal/link.js +3 -8
  88. package/_internal/listbox.js +3 -6
  89. package/_internal/number-field.js +2 -9
  90. package/_internal/number.js +2 -7
  91. package/_internal/pill.js +2 -6
  92. package/_internal/progress-bar.js +2 -5
  93. package/_internal/radio-group.js +2 -6
  94. package/_internal/radio.js +2 -6
  95. package/_internal/shared.js +2 -5
  96. package/_internal/shield.js +2 -6
  97. package/_internal/side-navigation-menu-bar.js +3 -9
  98. package/_internal/side-navigation-menu-item.js +2 -8
  99. package/_internal/side-navigation-menu.js +2 -8
  100. package/_internal/skeleton-circle.js +1 -6
  101. package/_internal/skeleton-text.js +2 -6
  102. package/_internal/skeleton.js +1 -7
  103. package/_internal/spinner.js +2 -5
  104. package/_internal/styles.js +235 -17
  105. package/_internal/styles2.js +44 -280
  106. package/_internal/switch-group.js +2 -6
  107. package/_internal/switch.js +2 -6
  108. package/_internal/text-area.js +2 -9
  109. package/_internal/text-field.js +2 -10
  110. package/_internal/text.js +2 -6
  111. package/_internal/theme.js +1 -3
  112. package/_internal/types.js +7 -31
  113. package/_internal/types2.js +18 -29
  114. package/_internal/types3.js +15 -18
  115. package/_internal/useAppSidePanel.js +331 -6
  116. package/_internal/useFocusOnList.js +502 -44
  117. package/_internal/useListboxItem.js +120 -23
  118. package/_internal/useSideNavigationMenuBar.js +371 -7
  119. package/_internal/useTheme.js +10 -8
  120. package/index.d.ts +4667 -0
  121. package/index.js +523 -1674
  122. package/package.json +2 -2
  123. package/_internal/SideNavigationMenuBar.js +0 -9
  124. package/_internal/helpers.js +0 -23
  125. package/_internal/types10.js +0 -20
  126. package/_internal/types11.js +0 -27
  127. package/_internal/types12.js +0 -35
  128. package/_internal/types13.js +0 -143
  129. package/_internal/types14.js +0 -11
  130. package/_internal/types15.js +0 -62
  131. package/_internal/types16.js +0 -56
  132. package/_internal/types17.js +0 -57
  133. package/_internal/types18.js +0 -40
  134. package/_internal/types19.js +0 -101
  135. package/_internal/types20.js +0 -47
  136. package/_internal/types21.js +0 -68
  137. package/_internal/types22.js +0 -52
  138. package/_internal/types23.js +0 -174
  139. package/_internal/types24.js +0 -18
  140. package/_internal/types25.js +0 -12
  141. package/_internal/types26.js +0 -36
  142. package/_internal/types27.js +0 -72
  143. package/_internal/types28.js +0 -73
  144. package/_internal/types29.js +0 -99
  145. package/_internal/types4.js +0 -67
  146. package/_internal/types5.js +0 -11
  147. package/_internal/types6.js +0 -11
  148. package/_internal/types7.js +0 -28
  149. package/_internal/types8.js +0 -72
  150. package/_internal/types9.js +0 -16
@@ -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