@redsift/design-system 11.5.0 → 11.6.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/_internal/Alert2.js +197 -0
  2. package/_internal/Alert2.js.map +1 -0
  3. package/_internal/AppBar.js +248 -0
  4. package/_internal/AppBar.js.map +1 -0
  5. package/_internal/AppContainer.js +142 -0
  6. package/_internal/AppContainer.js.map +1 -0
  7. package/_internal/AppContent.js +92 -0
  8. package/_internal/AppContent.js.map +1 -0
  9. package/_internal/Badge2.js +142 -0
  10. package/_internal/Badge2.js.map +1 -0
  11. package/_internal/BreadcrumbItem.js +91 -0
  12. package/_internal/BreadcrumbItem.js.map +1 -0
  13. package/_internal/Breadcrumbs2.js +94 -0
  14. package/_internal/Breadcrumbs2.js.map +1 -0
  15. package/_internal/Button2.js +91 -0
  16. package/_internal/Button2.js.map +1 -0
  17. package/_internal/ButtonGroup.js +181 -0
  18. package/_internal/ButtonGroup.js.map +1 -0
  19. package/_internal/ButtonLink.js +84 -0
  20. package/_internal/ButtonLink.js.map +1 -0
  21. package/_internal/Card2.js +157 -0
  22. package/_internal/Card2.js.map +1 -0
  23. package/_internal/CardActions.js +44 -0
  24. package/_internal/CardActions.js.map +1 -0
  25. package/_internal/CardBody.js +42 -0
  26. package/_internal/CardBody.js.map +1 -0
  27. package/_internal/CardHeader.js +83 -0
  28. package/_internal/CardHeader.js.map +1 -0
  29. package/_internal/Checkbox2.js +244 -0
  30. package/_internal/Checkbox2.js.map +1 -0
  31. package/_internal/CheckboxGroup.js +188 -0
  32. package/_internal/CheckboxGroup.js.map +1 -0
  33. package/_internal/ConditionalWrapper.js +13 -0
  34. package/_internal/ConditionalWrapper.js.map +1 -0
  35. package/_internal/DetailedCard.js +6916 -0
  36. package/_internal/DetailedCard.js.map +1 -0
  37. package/_internal/DetailedCardCollapsibleSectionItems.js +64 -0
  38. package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -0
  39. package/_internal/DetailedCardHeader.js +67 -0
  40. package/_internal/DetailedCardHeader.js.map +1 -0
  41. package/_internal/DetailedCardSection.js +172 -0
  42. package/_internal/DetailedCardSection.js.map +1 -0
  43. package/_internal/DetailedCardSectionItem.js +94 -0
  44. package/_internal/DetailedCardSectionItem.js.map +1 -0
  45. package/_internal/Flexbox2.js +93 -0
  46. package/_internal/Flexbox2.js.map +1 -0
  47. package/_internal/Grid2.js +95 -0
  48. package/_internal/Grid2.js.map +1 -0
  49. package/_internal/GridItem.js +40 -0
  50. package/_internal/GridItem.js.map +1 -0
  51. package/_internal/Heading2.js +113 -0
  52. package/_internal/Heading2.js.map +1 -0
  53. package/_internal/Icon2.js +211 -0
  54. package/_internal/Icon2.js.map +1 -0
  55. package/_internal/IconButton.js +80 -0
  56. package/_internal/IconButton.js.map +1 -0
  57. package/_internal/IconButtonLink.js +75 -0
  58. package/_internal/IconButtonLink.js.map +1 -0
  59. package/_internal/Item2.js +399 -0
  60. package/_internal/Item2.js.map +1 -0
  61. package/_internal/Link2.js +67 -0
  62. package/_internal/Link2.js.map +1 -0
  63. package/_internal/LinkButton.js +66 -0
  64. package/_internal/LinkButton.js.map +1 -0
  65. package/_internal/Listbox2.js +274 -0
  66. package/_internal/Listbox2.js.map +1 -0
  67. package/_internal/Number2.js +111 -0
  68. package/_internal/Number2.js.map +1 -0
  69. package/_internal/NumberField.js +3974 -0
  70. package/_internal/NumberField.js.map +1 -0
  71. package/_internal/Pill2.js +405 -0
  72. package/_internal/Pill2.js.map +1 -0
  73. package/_internal/ProgressBar.js +69 -0
  74. package/_internal/ProgressBar.js.map +1 -0
  75. package/_internal/Radio2.js +237 -0
  76. package/_internal/Radio2.js.map +1 -0
  77. package/_internal/RadioGroup.js +176 -0
  78. package/_internal/RadioGroup.js.map +1 -0
  79. package/_internal/Shield2.js +225 -0
  80. package/_internal/Shield2.js.map +1 -0
  81. package/_internal/SideNavigationMenu.js +591 -0
  82. package/_internal/SideNavigationMenu.js.map +1 -0
  83. package/_internal/SideNavigationMenuItem.js +304 -0
  84. package/_internal/SideNavigationMenuItem.js.map +1 -0
  85. package/_internal/Skeleton2.js +42 -0
  86. package/_internal/Skeleton2.js.map +1 -0
  87. package/_internal/SkeletonCircle.js +58 -0
  88. package/_internal/SkeletonCircle.js.map +1 -0
  89. package/_internal/SkeletonText.js +77 -0
  90. package/_internal/SkeletonText.js.map +1 -0
  91. package/_internal/Spinner2.js +333 -0
  92. package/_internal/Spinner2.js.map +1 -0
  93. package/_internal/Switch2.js +320 -0
  94. package/_internal/Switch2.js.map +1 -0
  95. package/_internal/SwitchGroup.js +188 -0
  96. package/_internal/SwitchGroup.js.map +1 -0
  97. package/_internal/Text2.js +51 -0
  98. package/_internal/Text2.js.map +1 -0
  99. package/_internal/TextArea.js +444 -0
  100. package/_internal/TextArea.js.map +1 -0
  101. package/_internal/TextField.js +473 -0
  102. package/_internal/TextField.js.map +1 -0
  103. package/_internal/_rollupPluginBabelHelpers.js +133 -0
  104. package/_internal/_rollupPluginBabelHelpers.js.map +1 -0
  105. package/_internal/alert.js +2 -0
  106. package/_internal/alert.js.map +1 -0
  107. package/_internal/app-bar.js +2 -0
  108. package/_internal/app-bar.js.map +1 -0
  109. package/_internal/app-container.js +3 -0
  110. package/_internal/app-container.js.map +1 -0
  111. package/_internal/app-content.js +2 -0
  112. package/_internal/app-content.js.map +1 -0
  113. package/_internal/app-side-panel.js +3 -0
  114. package/_internal/app-side-panel.js.map +1 -0
  115. package/_internal/badge.js +2 -0
  116. package/_internal/badge.js.map +1 -0
  117. package/_internal/breadcrumb-item.js +2 -0
  118. package/_internal/breadcrumb-item.js.map +1 -0
  119. package/_internal/breadcrumbs.js +2 -0
  120. package/_internal/breadcrumbs.js.map +1 -0
  121. package/_internal/button-group.js +2 -0
  122. package/_internal/button-group.js.map +1 -0
  123. package/_internal/button-link.js +2 -0
  124. package/_internal/button-link.js.map +1 -0
  125. package/_internal/button.js +3 -0
  126. package/_internal/button.js.map +1 -0
  127. package/_internal/card-actions.js +2 -0
  128. package/_internal/card-actions.js.map +1 -0
  129. package/_internal/card-body.js +2 -0
  130. package/_internal/card-body.js.map +1 -0
  131. package/_internal/card-header.js +2 -0
  132. package/_internal/card-header.js.map +1 -0
  133. package/_internal/card.js +2 -0
  134. package/_internal/card.js.map +1 -0
  135. package/_internal/checkbox-group.js +2 -0
  136. package/_internal/checkbox-group.js.map +1 -0
  137. package/_internal/checkbox.js +2 -0
  138. package/_internal/checkbox.js.map +1 -0
  139. package/_internal/colors.js +98 -0
  140. package/_internal/colors.js.map +1 -0
  141. package/_internal/conditional-wrapper.js +2 -0
  142. package/_internal/conditional-wrapper.js.map +1 -0
  143. package/_internal/context.js +6 -0
  144. package/_internal/context.js.map +1 -0
  145. package/_internal/context2.js +300 -0
  146. package/_internal/context2.js.map +1 -0
  147. package/_internal/context3.js +6 -0
  148. package/_internal/context3.js.map +1 -0
  149. package/_internal/context4.js +6 -0
  150. package/_internal/context4.js.map +1 -0
  151. package/_internal/context5.js +6 -0
  152. package/_internal/context5.js.map +1 -0
  153. package/_internal/detailed-card-collapsible-section-items.js +2 -0
  154. package/_internal/detailed-card-collapsible-section-items.js.map +1 -0
  155. package/_internal/detailed-card-header.js +2 -0
  156. package/_internal/detailed-card-header.js.map +1 -0
  157. package/_internal/detailed-card-section-item.js +2 -0
  158. package/_internal/detailed-card-section-item.js.map +1 -0
  159. package/_internal/detailed-card-section.js +2 -0
  160. package/_internal/detailed-card-section.js.map +1 -0
  161. package/_internal/detailed-card.js +2 -0
  162. package/_internal/detailed-card.js.map +1 -0
  163. package/_internal/filterComponents.js +24 -0
  164. package/_internal/filterComponents.js.map +1 -0
  165. package/_internal/flexbox.js +2 -0
  166. package/_internal/flexbox.js.map +1 -0
  167. package/_internal/focus-within-group.js +3 -0
  168. package/_internal/focus-within-group.js.map +1 -0
  169. package/_internal/fonts.js +10 -0
  170. package/_internal/fonts.js.map +1 -0
  171. package/_internal/gradient-border.js +38 -0
  172. package/_internal/gradient-border.js.map +1 -0
  173. package/_internal/grid-item.js +2 -0
  174. package/_internal/grid-item.js.map +1 -0
  175. package/_internal/grid.js +2 -0
  176. package/_internal/grid.js.map +1 -0
  177. package/_internal/heading.js +3 -0
  178. package/_internal/heading.js.map +1 -0
  179. package/_internal/icon-button-link.js +2 -0
  180. package/_internal/icon-button-link.js.map +1 -0
  181. package/_internal/icon-button.js +3 -0
  182. package/_internal/icon-button.js.map +1 -0
  183. package/_internal/icon.js +2 -0
  184. package/_internal/icon.js.map +1 -0
  185. package/_internal/isComponent.js +15 -0
  186. package/_internal/isComponent.js.map +1 -0
  187. package/_internal/item.js +2 -0
  188. package/_internal/item.js.map +1 -0
  189. package/_internal/link-button.js +2 -0
  190. package/_internal/link-button.js.map +1 -0
  191. package/_internal/link.js +3 -0
  192. package/_internal/link.js.map +1 -0
  193. package/_internal/listbox.js +3 -0
  194. package/_internal/listbox.js.map +1 -0
  195. package/_internal/number-field.js +2 -0
  196. package/_internal/number-field.js.map +1 -0
  197. package/_internal/number.js +2 -0
  198. package/_internal/number.js.map +1 -0
  199. package/_internal/partitionComponents.js +26 -0
  200. package/_internal/partitionComponents.js.map +1 -0
  201. package/_internal/pill.js +2 -0
  202. package/_internal/pill.js.map +1 -0
  203. package/_internal/progress-bar.js +2 -0
  204. package/_internal/progress-bar.js.map +1 -0
  205. package/_internal/radio-group.js +2 -0
  206. package/_internal/radio-group.js.map +1 -0
  207. package/_internal/radio.js +2 -0
  208. package/_internal/radio.js.map +1 -0
  209. package/_internal/redsift-design-tokens.js +1391 -0
  210. package/_internal/redsift-design-tokens.js.map +1 -0
  211. package/_internal/shared.js +2 -0
  212. package/_internal/shared.js.map +1 -0
  213. package/_internal/shield.js +2 -0
  214. package/_internal/shield.js.map +1 -0
  215. package/_internal/side-navigation-menu-bar.js +3 -0
  216. package/_internal/side-navigation-menu-bar.js.map +1 -0
  217. package/_internal/side-navigation-menu-item.js +2 -0
  218. package/_internal/side-navigation-menu-item.js.map +1 -0
  219. package/_internal/side-navigation-menu.js +2 -0
  220. package/_internal/side-navigation-menu.js.map +1 -0
  221. package/_internal/skeleton-circle.js +2 -0
  222. package/_internal/skeleton-circle.js.map +1 -0
  223. package/_internal/skeleton-text.js +3 -0
  224. package/_internal/skeleton-text.js.map +1 -0
  225. package/_internal/skeleton.js +2 -0
  226. package/_internal/skeleton.js.map +1 -0
  227. package/_internal/spinner.js +2 -0
  228. package/_internal/spinner.js.map +1 -0
  229. package/_internal/styles.js +235 -0
  230. package/_internal/styles.js.map +1 -0
  231. package/_internal/styles2.js +47 -0
  232. package/_internal/styles2.js.map +1 -0
  233. package/_internal/styles3.js +145 -0
  234. package/_internal/styles3.js.map +1 -0
  235. package/_internal/styles4.js +250 -0
  236. package/_internal/styles4.js.map +1 -0
  237. package/_internal/styles5.js +143 -0
  238. package/_internal/styles5.js.map +1 -0
  239. package/_internal/styles6.js +84 -0
  240. package/_internal/styles6.js.map +1 -0
  241. package/_internal/switch-group.js +2 -0
  242. package/_internal/switch-group.js.map +1 -0
  243. package/_internal/switch.js +2 -0
  244. package/_internal/switch.js.map +1 -0
  245. package/_internal/text-area.js +2 -0
  246. package/_internal/text-area.js.map +1 -0
  247. package/_internal/text-field.js +2 -0
  248. package/_internal/text-field.js.map +1 -0
  249. package/_internal/text.js +3 -0
  250. package/_internal/text.js.map +1 -0
  251. package/_internal/theme.js +2 -0
  252. package/_internal/theme.js.map +1 -0
  253. package/_internal/types.js +15 -0
  254. package/_internal/types.js.map +1 -0
  255. package/_internal/types2.js +26 -0
  256. package/_internal/types2.js.map +1 -0
  257. package/_internal/types3.js +20 -0
  258. package/_internal/types3.js.map +1 -0
  259. package/_internal/useAppSidePanel.js +337 -0
  260. package/_internal/useAppSidePanel.js.map +1 -0
  261. package/_internal/useFocusOnList.js +541 -0
  262. package/_internal/useFocusOnList.js.map +1 -0
  263. package/_internal/useFocusOnListItem.js +203 -0
  264. package/_internal/useFocusOnListItem.js.map +1 -0
  265. package/_internal/useFocusRing.js +669 -0
  266. package/_internal/useFocusRing.js.map +1 -0
  267. package/_internal/useId.js +42 -0
  268. package/_internal/useId.js.map +1 -0
  269. package/_internal/useIsLoaded.js +14 -0
  270. package/_internal/useIsLoaded.js.map +1 -0
  271. package/_internal/useListboxItem.js +129 -0
  272. package/_internal/useListboxItem.js.map +1 -0
  273. package/_internal/useMessageFormatter.js +143 -0
  274. package/_internal/useMessageFormatter.js.map +1 -0
  275. package/_internal/useNumberFormatter.js +239 -0
  276. package/_internal/useNumberFormatter.js.map +1 -0
  277. package/_internal/useSideNavigationMenuBar.js +373 -0
  278. package/_internal/useSideNavigationMenuBar.js.map +1 -0
  279. package/_internal/useTheme.js +15 -0
  280. package/_internal/useTheme.js.map +1 -0
  281. package/_internal/warnIfNoAccessibleLabelFound.js +20 -0
  282. package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -0
  283. package/index.js +315 -24243
  284. package/index.js.map +1 -1
  285. package/package.json +3 -3
@@ -0,0 +1,591 @@
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';
251
+
252
+ /**
253
+ * The SideNavigationMenu component.
254
+ */
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;
589
+
590
+ export { SideNavigationMenuReducerActionType as S, SideNavigationMenu as a };
591
+ //# sourceMappingURL=SideNavigationMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavigationMenu.js","sources":["../../src/components/side-navigation-menu/types.ts","../../src/components/side-navigation-menu/styles.ts","../../src/components/side-navigation-menu/reducer.ts","../../src/components/side-navigation-menu/SideNavigationMenu.tsx"],"sourcesContent":["import { ComponentProps, MutableRefObject } from 'react';\nimport { IconProps } from '../icon';\nimport { SideNavigationMenuBarVariant } from '../side-navigation-menu-bar';\nimport { Theme } from '@redsift/design-system/types';\nimport { BadgeProps } from '../badge';\n\n/**\n * Context props.\n */\nexport type SideNavigationMenuContextProps = {\n menuItems: Set<HTMLAnchorElement | HTMLButtonElement>;\n};\n\n/**\n * Reducer props.\n */\nexport type SideNavigationMenuReducerState = {\n isExpanded: boolean;\n currentIndex: number;\n previousIndex: number;\n};\n\nexport enum SideNavigationMenuReducerActionType {\n Expand = 'expand',\n Collapse = 'collapse',\n Move = 'move',\n}\n\nexport type SideNavigationMenuReducerAction = {\n type: SideNavigationMenuReducerActionType;\n index?: number;\n};\n\n/**\n * Component props.\n */\nexport interface SideNavigationMenuProps extends ComponentProps<'div'> {\n /** Custom props to pass to the button. */\n buttonProps?: ComponentProps<'button'>;\n /** Custom ref to pass to the button. */\n buttonRef?: MutableRefObject<HTMLButtonElement>;\n /** Custom props to pass to the Badge component, if any. */\n badgeProps?: Omit<BadgeProps, 'ref'>;\n /** Whether or not the menu contains children that have a badge. */\n hasBadge?: boolean;\n /**\n * Can be a string or an array of strings containing `d` property of the `path` SVG element.<br />\n * Can also be a ReactElement.\n */\n icon?: IconProps['icon'];\n /** Custom props to pass to the Icon component. */\n iconProps?: Omit<IconProps, 'ref' | 'icon'>;\n /** Custom ref to pass to the Icon component. */\n iconRef?: MutableRefObject<HTMLElement>;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the menu is expanded or not. */\n isExpanded?: boolean;\n /** By default, the badge is hidden when the menu is expanded. This prop controls this behavior. */\n keepBadgeVisible?: boolean;\n /** Custom props to pass to the menu. */\n menuProps?: ComponentProps<'ul'>;\n /** Custom ref to pass to the menu. */\n menuRef?: MutableRefObject<HTMLUListElement>;\n /** Theme. */\n theme?: Theme;\n}\n\nexport type StyledSideNavigationMenuProps = Omit<SideNavigationMenuProps, 'isDisabled' | 'isExpanded'> & {\n $isDisabled: SideNavigationMenuProps['isDisabled'];\n $isExpanded: SideNavigationMenuProps['isExpanded'];\n $numberOfChildren: number;\n $variant: SideNavigationMenuBarVariant;\n $theme: SideNavigationMenuProps['theme'];\n};\n","import styled, { css } from 'styled-components';\nimport { StyledSideNavigationMenuProps } from './types';\nimport { SideNavigationMenuBarVariant } from '../side-navigation-menu-bar';\n\n/**\n * Component style.\n */\nexport const StyledSideNavigationMenu = styled.div<StyledSideNavigationMenuProps>`\n .redsift-side-navigation-menu__current-indicator-container {\n min-width: 4px;\n }\n\n .redsift-side-navigation-menu__menu-container {\n width: 100%;\n }\n\n .redsift-badge {\n margin-left: 8px;\n }\n\n ${({ $isDisabled, $variant, $theme }) => css`\n .redsift-side-navigation-menu__menu-container > button {\n ${!$isDisabled\n ? css`\n & {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);\n }\n `\n : css`\n & {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);\n }\n `}\n align-items: center;\n background-color: var(--redsift-color-${$theme}-components-side-navigation-background);\n border: none;\n border-radius: 0 4px 4px 0;\n display: flex;\n font-family: var(--redsift-typography-body-font-family);\n font-size: 14px;\n font-weight: var(--redsift-typography-body-font-weight);\n gap: 0;\n height: 40px;\n line-height: var(--redsift-typography-body-line-height);\n margin-left: -4px;\n transition: padding 300ms ease-out;\n padding: 0 16px 0 ${$variant === SideNavigationMenuBarVariant.shrinked ? '16px' : '16px'};\n text-decoration: none;\n text-transform: uppercase;\n width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});\n\n :hover,\n :focus-visible {\n outline: none;\n\n ${!$isDisabled\n ? css`\n background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-hover);\n &,\n .redsift-icon.first,\n .redsift-side-navigation-menu__expand-icon {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-hover);\n }\n cursor: pointer;\n `\n : ''}\n }\n\n :active {\n ${!$isDisabled\n ? css`\n background-color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-background-active);\n `\n : ''}\n }\n\n @media (prefers-reduced-motion: no-preference) {\n :focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n outline: 2px solid var(--redsift-color-primary-n);\n transition: outline-offset 75ms ease-out;\n }\n\n :not(:active):focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n transition-duration: 0.25s;\n }\n }\n }\n\n :not(:active):focus-visible {\n > span${$variant === SideNavigationMenuBarVariant.shrinked ? '.first' : '.content'} {\n outline-offset: 0.25rem;\n }\n }\n }\n }\n\n .content {\n transition: opacity 300ms ease-out;\n opacity: ${$variant === SideNavigationMenuBarVariant.shrinked ? '0' : '1'};\n overflow: hidden;\n white-space: nowrap;\n }\n `}\n\n .first {\n box-sizing: unset;\n margin-right: 8px;\n }\n\n .redsift-side-navigation-menu__expand-icon {\n transition: transform 300ms ease-out;\n ${({ $isDisabled, $theme }) =>\n !$isDisabled\n ? css`\n &,\n .redsift-icon.first {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-resting);\n }\n `\n : css`\n &,\n .redsift-icon.first {\n color: var(--redsift-color-${$theme}-components-side-navigation-menu-item-text-disabled);\n }\n `}\n ${({ $isExpanded }) =>\n !$isExpanded\n ? css`\n transform: rotate(0);\n `\n : css`\n transform: rotate(-180deg);\n `}\n margin-left: auto;\n\n transition: opacity 300ms ease-out;\n opacity: ${({ $variant }) => ($variant === SideNavigationMenuBarVariant.standard ? '1' : '0')};\n }\n\n [dir='rtl'] & {\n .redsift-side-navigation-menu__expand-icon {\n margin-left: unset;\n margin-right: auto;\n }\n }\n\n /**\n * Display children or not\n */\n\n .redsift-side-navigation-menu__menu-container > ul {\n list-style: none;\n margin: unset;\n padding: unset;\n margin-left: -4px;\n\n ${({ $variant }) => css`\n width: calc(100% + ${$variant === SideNavigationMenuBarVariant.shrinked ? '0px' : '4px'});\n `}\n margin-bottom: 4px;\n max-width: 241px;\n transition: height 300ms ease-out;\n overflow: hidden;\n ${({ $isExpanded, $numberOfChildren }) =>\n $isExpanded\n ? css`\n height: ${$numberOfChildren * 32}px;\n `\n : css`\n height: 0;\n `};\n }\n`;\n","import {\n SideNavigationMenuReducerState,\n SideNavigationMenuReducerAction,\n SideNavigationMenuReducerActionType,\n} from './types';\n\nexport const SideNavigationMenuReducer = (\n state: SideNavigationMenuReducerState,\n action: SideNavigationMenuReducerAction\n): SideNavigationMenuReducerState => {\n switch (action.type) {\n case SideNavigationMenuReducerActionType.Expand:\n return { ...state, isExpanded: true };\n case SideNavigationMenuReducerActionType.Collapse:\n return {\n isExpanded: false,\n currentIndex: null!,\n previousIndex: null!,\n };\n case SideNavigationMenuReducerActionType.Move:\n return {\n ...state,\n isExpanded: true,\n currentIndex: action.index!,\n previousIndex: state.currentIndex,\n };\n }\n};\n","import React, {\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { mdiChevronDown } from '@redsift/icons';\nimport { Comp } from '../../types';\nimport { SideNavigationMenuItem } from '../side-navigation-menu-item';\nimport { Icon, IconSize } from '../icon';\nimport { Badge } from '../badge';\nimport { StyledSideNavigationMenu } from './styles';\nimport { SideNavigationMenuContextProps, SideNavigationMenuProps, SideNavigationMenuReducerActionType } from './types';\nimport { SideNavigationMenuContext } from './context';\nimport { SideNavigationMenuReducer } from './reducer';\nimport { SideNavigationMenuBarContext } from '../side-navigation-menu-bar/context';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { filterComponents } from '../../utils/filterComponents';\nimport { Flexbox } from '../flexbox';\nimport { StyledSideNavigationMenuItemIndicator } from '../side-navigation-menu-item/styles';\nimport { AppContainerContext } from '../app-container';\nimport { AppSidePanelVariant } from '../app-side-panel';\nimport { ThemeProvider, useTheme } from '../theme';\nimport { useId } from '../../utils';\n\nconst COMPONENT_NAME = 'SideNavigationMenu';\nconst CLASSNAME = 'redsift-side-navigation-menu';\n\n/**\n * The SideNavigationMenu component.\n */\nexport const SideNavigationMenu: Comp<SideNavigationMenuProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n 'aria-label': ariaLabel,\n buttonProps = {},\n buttonRef = useRef<HTMLButtonElement>() as MutableRefObject<HTMLButtonElement>,\n children,\n className,\n badgeProps,\n hasBadge,\n icon,\n iconProps,\n iconRef = useRef<HTMLElement>(),\n id: propsId,\n isDisabled,\n isExpanded: propsIsExpanded,\n keepBadgeVisible,\n menuProps = {},\n menuRef = useRef<HTMLUListElement>(),\n tabIndex,\n theme: propsTheme,\n ...forwardedProps\n } = props;\n const [_id] = useId();\n const id = propsId ?? _id;\n\n warnIfNoAccessibleLabelFound(props, undefined, 'SideNavigationMenu');\n\n const appContainerState = useContext(AppContainerContext);\n const sideNavigationMenuBarContext = useContext(SideNavigationMenuBarContext);\n const theme = useTheme(propsTheme);\n const [isFirstChild, setIsFirstChild] = useState(false);\n const currentPosition = useRef(-1);\n const { menuItems: menubarItems } = sideNavigationMenuBarContext || {};\n\n useEffect(() => {\n currentPosition.current = -1;\n });\n\n /**\n * Create an array containing only valid children which can only be SideNavigationMenuItem.\n * This prevent the navigation menubar to have more than two levels.\n */\n const childArray = filterComponents(SideNavigationMenuItem)(children);\n const renderedMenuItems = childArray.map((child, index) => {\n if (child.props.isCurrent) {\n currentPosition.current = index;\n }\n return (\n <li key={child.key ?? index} role=\"none\">\n {React.cloneElement(child, {\n isDisabled: child.props.isDisabled || isDisabled || undefined,\n isSecondLevel: true,\n key: child.key ?? index,\n })}\n </li>\n );\n });\n\n const menuItems = useRef<Set<HTMLAnchorElement | HTMLButtonElement>>(new Set()).current;\n const [state, dispatch] = useReducer(SideNavigationMenuReducer, {\n currentIndex: null!,\n isExpanded: Boolean(propsIsExpanded),\n previousIndex: null!,\n });\n const { isExpanded, currentIndex, previousIndex } = state;\n\n const first = useCallback(() => dispatch({ type: SideNavigationMenuReducerActionType.Move, index: 0 }), []);\n\n const last = useCallback(\n () =>\n dispatch({\n type: SideNavigationMenuReducerActionType.Move,\n index: menuItems.size - 1,\n }),\n [menuItems.size]\n );\n\n const move = useCallback((index: number) => dispatch({ type: SideNavigationMenuReducerActionType.Move, index }), []);\n\n const open = useCallback(() => {\n sideNavigationMenuBarContext?.setCurrentOpenMenuId?.(id);\n dispatch({ type: SideNavigationMenuReducerActionType.Expand });\n appContainerState?.expandSidePanel();\n }, []);\n\n const close = useCallback(\n (focusButton?: boolean) => {\n if (isExpanded) {\n if (focusButton) {\n buttonRef.current.focus();\n }\n\n dispatch({ type: SideNavigationMenuReducerActionType.Collapse });\n }\n },\n [isExpanded]\n );\n\n useEffect(() => {\n if (sideNavigationMenuBarContext?.currentOpenMenuId && sideNavigationMenuBarContext.currentOpenMenuId !== id) {\n close();\n }\n }, [sideNavigationMenuBarContext?.currentOpenMenuId]);\n\n const previous = () => {\n const index = currentIndex === 0 ? menuItems.size - 1 : currentIndex - 1;\n move(index);\n };\n\n const next = () => {\n const index = currentIndex === menuItems.size - 1 ? 0 : currentIndex + 1;\n move(index);\n };\n\n const match = (e: React.KeyboardEvent<HTMLUListElement>) => {\n const items = Array.from(menuItems);\n\n // Reorder the array, starting with the currentNode\n const reorderedItems = [...items.slice(currentIndex), ...items.slice(0, currentIndex)];\n\n // Find all nodes that begin with the pressed letter\n const matches = reorderedItems.filter((menuItem) => {\n const { textContent } = menuItem;\n // istanbul ignore next\n const firstLetter = textContent?.toLowerCase().charAt(0);\n return e.key === firstLetter;\n });\n\n // Exit early if there are no matches\n if (!matches.length) {\n return;\n }\n\n // If the focused item is a match, focus the next match.\n // Otherwise, focus the first match\n const currentNode = items[currentIndex];\n const nextMatch = matches.includes(currentNode) ? matches[1] : matches[0];\n const index = items.findIndex((item) => {\n return item === nextMatch;\n });\n\n move(index);\n };\n\n useEffect(() => {\n if (appContainerState && appContainerState?.sidePanelVariant === AppSidePanelVariant.shrinked && isExpanded) {\n close();\n }\n }, [appContainerState?.sidePanelVariant]);\n\n const value = useMemo<SideNavigationMenuContextProps>(() => ({ menuItems }), [menuItems]);\n\n useEffect(() => {\n const items = Array.from(menuItems);\n\n if (currentIndex !== previousIndex) {\n const currentNode = items[currentIndex] as HTMLElement;\n currentNode?.focus();\n }\n }, [menuItems, currentIndex, previousIndex]);\n\n useEffect(() => {\n if (!sideNavigationMenuBarContext) {\n setIsFirstChild(true);\n return;\n }\n\n const menuItemNode = (buttonRef as MutableRefObject<HTMLButtonElement>).current;\n\n if (menuItemNode) {\n menubarItems.add(menuItemNode);\n }\n\n return () => {\n menubarItems.delete(menuItemNode);\n };\n }, [menubarItems]);\n\n const keyDownOnButton = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n const currentNode = e.target as HTMLUListElement;\n\n switch (e.code) {\n case 'Enter':\n case 'Space':\n e.stopPropagation();\n currentNode.click();\n first();\n break;\n case 'ArrowRight':\n e.stopPropagation();\n first();\n break;\n case 'ArrowLeft':\n last();\n break;\n default:\n break;\n }\n };\n\n const buttonEventHandler = {\n onClick: (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n buttonProps.onClick?.(event);\n event.stopPropagation();\n if (isExpanded) {\n close();\n } else {\n open();\n }\n },\n onKeyDown: (event: KeyboardEvent<HTMLButtonElement>) => {\n buttonProps.onKeyDown?.(event);\n keyDownOnButton(event);\n },\n };\n\n const keyDownOnMenuItemList = (e: KeyboardEvent<HTMLUListElement>) => {\n const currentNode = e.target as HTMLUListElement;\n\n switch (e.code) {\n case 'ArrowUp':\n e.stopPropagation();\n e.preventDefault();\n previous();\n break;\n case 'ArrowDown':\n e.stopPropagation();\n e.preventDefault();\n next();\n break;\n case 'ArrowLeft':\n e.preventDefault();\n e.stopPropagation();\n close(true);\n break;\n case 'ArrowRight':\n e.preventDefault();\n close(!sideNavigationMenuBarContext);\n break;\n case 'Home':\n e.stopPropagation();\n e.preventDefault();\n first();\n break;\n case 'End':\n e.stopPropagation();\n e.preventDefault();\n last();\n break;\n case 'Enter':\n case 'Space':\n e.preventDefault();\n currentNode.click();\n break;\n case 'Escape':\n e.stopPropagation();\n e.preventDefault();\n close(true);\n break;\n default:\n e.stopPropagation();\n match(e);\n break;\n }\n };\n\n const menuItemListEventHandler = {\n onKeyDown: (event: KeyboardEvent<HTMLUListElement>) => {\n menuProps.onKeyDown?.(event);\n keyDownOnMenuItemList(event);\n },\n onClick: (event: MouseEvent<HTMLUListElement>) => {\n if (isDisabled) {\n return;\n }\n menuProps.onClick?.(event);\n },\n };\n\n const sideNavigationVariant = sideNavigationMenuBarContext?.sideNavigationMenuBarVariant;\n\n return (\n <ThemeProvider value={{ theme }}>\n <StyledSideNavigationMenu\n {...forwardedProps}\n $isDisabled={isDisabled}\n $isExpanded={isExpanded}\n $numberOfChildren={renderedMenuItems.length}\n $theme={theme}\n $variant={sideNavigationVariant}\n className={classNames(SideNavigationMenu.className, className)}\n id={id}\n ref={ref as MutableRefObject<HTMLDivElement>}\n tabIndex={undefined}\n >\n <SideNavigationMenuContext.Provider value={value}>\n <Flexbox flexDirection=\"row\" gap=\"0px\">\n <div className={`${SideNavigationMenu.className}__current-indicator-container`}>\n {currentPosition.current !== -1 ? (\n <StyledSideNavigationMenuItemIndicator\n $theme={theme}\n style={{\n position: 'relative',\n top: isExpanded ? `${32 + currentPosition.current * 32}px` : 0,\n transition: 'top 300ms ease-out',\n }}\n />\n ) : null}\n </div>\n <div className={`${SideNavigationMenu.className}__menu-container`}>\n <button\n {...buttonProps}\n aria-disabled={isDisabled}\n aria-expanded={isExpanded ? 'true' : 'false'}\n aria-haspopup=\"true\"\n ref={buttonRef as MutableRefObject<HTMLButtonElement>}\n role=\"menuitem\"\n tabIndex={tabIndex !== undefined ? tabIndex : isFirstChild ? 0 : -1}\n type=\"button\"\n {...buttonEventHandler}\n >\n <Icon\n color={`var(--redsift-side-navigation-color-menu-item-text-${isDisabled ? 'disabled' : 'resting'})`}\n {...iconProps}\n icon={icon!}\n ref={iconRef as MutableRefObject<HTMLElement>}\n className={classNames(iconProps?.className, 'first')}\n size={IconSize.medium}\n />\n <span className=\"content\">{ariaLabel}</span>\n {hasBadge && (!isExpanded || keepBadgeVisible) ? <Badge color=\"error\" {...badgeProps} /> : null}\n <Icon\n icon={mdiChevronDown}\n className={`${SideNavigationMenu.className}__expand-icon`}\n size={IconSize.medium}\n />\n </button>\n <ul\n {...menuProps}\n aria-label={ariaLabel}\n aria-orientation=\"vertical\"\n ref={menuRef as MutableRefObject<HTMLUListElement>}\n role=\"menu\"\n {...menuItemListEventHandler}\n >\n {renderedMenuItems}\n </ul>\n </div>\n </Flexbox>\n </SideNavigationMenuContext.Provider>\n </StyledSideNavigationMenu>\n </ThemeProvider>\n );\n});\nSideNavigationMenu.className = CLASSNAME;\nSideNavigationMenu.displayName = COMPONENT_NAME;\n"],"names":["SideNavigationMenuReducerActionType","StyledSideNavigationMenu","styled","div","_ref","$isDisabled","$variant","$theme","css","SideNavigationMenuBarVariant","shrinked","_ref2","_ref3","$isExpanded","_ref4","standard","_ref5","_ref6","$numberOfChildren","SideNavigationMenuReducer","state","action","type","Expand","_objectSpread","isExpanded","Collapse","currentIndex","previousIndex","Move","index","COMPONENT_NAME","CLASSNAME","SideNavigationMenu","forwardRef","props","ref","ariaLabel","buttonProps","buttonRef","useRef","children","className","badgeProps","hasBadge","icon","iconProps","iconRef","id","propsId","isDisabled","propsIsExpanded","keepBadgeVisible","menuProps","menuRef","tabIndex","theme","propsTheme","forwardedProps","_objectWithoutProperties","_excluded","_id","useId","warnIfNoAccessibleLabelFound","undefined","appContainerState","useContext","AppContainerContext","sideNavigationMenuBarContext","SideNavigationMenuBarContext","useTheme","isFirstChild","setIsFirstChild","useState","currentPosition","menuItems","menubarItems","useEffect","current","childArray","filterComponents","SideNavigationMenuItem","renderedMenuItems","map","child","_child$key","_child$key2","isCurrent","React","createElement","key","role","cloneElement","isSecondLevel","Set","dispatch","useReducer","Boolean","first","useCallback","last","size","move","open","_sideNavigationMenuBa","setCurrentOpenMenuId","call","expandSidePanel","close","focusButton","focus","currentOpenMenuId","previous","next","match","e","items","Array","from","reorderedItems","slice","matches","filter","menuItem","textContent","firstLetter","toLowerCase","charAt","length","currentNode","nextMatch","includes","findIndex","item","sidePanelVariant","AppSidePanelVariant","value","useMemo","menuItemNode","add","delete","keyDownOnButton","target","code","stopPropagation","click","buttonEventHandler","onClick","event","_buttonProps$onClick","onKeyDown","_buttonProps$onKeyDow","keyDownOnMenuItemList","preventDefault","menuItemListEventHandler","_menuProps$onKeyDown","_menuProps$onClick","sideNavigationVariant","sideNavigationMenuBarVariant","ThemeProvider","_extends","classNames","SideNavigationMenuContext","Provider","Flexbox","flexDirection","gap","StyledSideNavigationMenuItemIndicator","style","position","top","transition","Icon","color","IconSize","medium","Badge","mdiChevronDown","displayName"],"mappings":"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"}