@spaced-out/ui-design-system 0.1.46 → 0.1.48-beta.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.
@@ -1,20 +1,36 @@
1
- @value ( size34, size60, sizeFluid, sizeFullViewportHeight) from '../../styles/variables/_size.css';
1
+ @value ( size34, size60, size300, sizeFluid, sizeFullViewportHeight) from '../../styles/variables/_size.css';
2
2
 
3
3
  @value (
4
4
  colorFillNone,
5
5
  colorFillPrimary,
6
6
  colorFocusPrimary,
7
+ colorNeutralDark,
7
8
  colorNeutralDarkest,
8
9
  colorTextInverseSecondary,
9
10
  colorTextInversePrimary,
10
11
  colorSubMenuBackgroundDefault,
12
+ colorSideMenuIconDefault,
11
13
  colorSideMenuIconActive,
12
14
  colorSuccess,
13
15
  colorFocusDanger
14
- ) from '../../styles/variables/_color.css';
15
- @value ( spaceNone, spaceXXSmall, spaceXSmall, spaceSmall, spaceMedium ) from '../../styles/variables/_space.css';
16
+ ) from '../../styles/variables/_color.css';
16
17
 
17
- @value ( borderWidthTertiary, borderRadiusSmall, borderWidthPrimary, borderRadiusMedium, borderWidthNone) from '../../styles/variables/_border.css';
18
+ @value (
19
+ spaceNone,
20
+ spaceXXSmall,
21
+ spaceXSmall,
22
+ spaceSmall,
23
+ spaceMedium,
24
+ spaceLarge
25
+ ) from '../../styles/variables/_space.css';
26
+
27
+ @value (
28
+ borderWidthPrimary,
29
+ borderWidthTertiary,
30
+ borderWidthNone,
31
+ borderRadiusSmall,
32
+ borderRadiusNone
33
+ ) from '../../styles/variables/_border.css';
18
34
 
19
35
  .subMenuWrapper {
20
36
  background: colorSubMenuBackgroundDefault;
@@ -27,10 +43,19 @@
27
43
  }
28
44
 
29
45
  .subMenuTitleAndButton {
46
+ height: size60;
30
47
  display: flex;
31
48
  align-items: center;
32
49
  justify-content: space-between;
33
50
  border-bottom: borderWidthPrimary solid colorNeutralDarkest;
51
+ margin: spaceNone spaceNone spaceXXSmall spaceXXSmall;
52
+ }
53
+
54
+ .subMenuTitleWrapper {
55
+ display: flex;
56
+ flex-direction: row;
57
+ align-items: center;
58
+ padding: spaceSmall;
34
59
  }
35
60
 
36
61
  .subMenuCloseButton {
@@ -50,26 +75,34 @@
50
75
  display: flex;
51
76
  flex-direction: row;
52
77
  align-items: center;
53
- padding: spaceMedium;
78
+ padding: spaceMedium spaceXSmall;
54
79
  }
55
80
 
56
81
  .menuChildWrap {
57
82
  margin: spaceNone spaceSmall;
58
- border-bottom: borderWidthPrimary solid colorNeutralDarkest;
59
83
  }
60
84
 
61
85
  .menuChildWrap:last-child {
62
86
  border-bottom: none;
63
87
  }
64
88
 
65
- .subMenuGroupWrapper {
89
+ .subMenuGroupWrapper,
90
+ .subMenuLinkWrapper {
66
91
  display: flex;
67
92
  flex-direction: column;
68
- padding: spaceXSmall spaceNone;
93
+ margin: spaceXXSmall spaceNone;
69
94
  flex: auto;
70
95
  }
71
96
 
72
- .subMenuGroupHeader {
97
+ .subMenuGroupWrapper {
98
+ background: colorNeutralDarkest;
99
+ border-radius: borderRadiusSmall;
100
+ }
101
+
102
+ .subMenuGroupHeader,
103
+ .subMenuLink {
104
+ color: colorSideMenuIconDefault;
105
+ background: colorSubMenuBackgroundDefault;
73
106
  display: flex;
74
107
  flex-direction: row;
75
108
  justify-content: space-between;
@@ -78,24 +111,85 @@
78
111
  border-radius: borderRadiusSmall;
79
112
  }
80
113
 
81
- .subMenuGroupHeader:focus-visible {
114
+ .subMenuGroupHeader:hover,
115
+ .subMenuLink:hover {
116
+ background: colorNeutralDarkest;
117
+ .groupTitle,
118
+ .menuLinkTitle {
119
+ color: colorTextInversePrimary;
120
+ }
121
+ }
122
+
123
+ .subMenuGroupHeader:focus-visible,
124
+ .subMenuGroup:focus-visible,
125
+ .subMenuLink:focus-visible {
82
126
  outline: none;
83
127
  }
84
128
 
85
- .subMenuGroupHeader.collapsible:focus {
129
+ .subMenuGroupHeader.collapsible:focus,
130
+ .subMenuLink:focus {
86
131
  box-shadow: borderWidthNone borderWidthNone borderWidthNone
87
132
  borderWidthTertiary colorFocusPrimary;
88
133
  }
89
134
 
90
- .groupTitle {
91
- text-transform: uppercase;
135
+ .subMenuGroupHeader.collapsed,
136
+ .subMenuLink.collapsed {
137
+ background: colorNeutralDarkest;
92
138
  }
93
139
 
94
- .subMenuGroup {
140
+ .subMenuGroupHeader.highlightedMenu {
141
+ border: borderWidthPrimary solid colorNeutralDark;
142
+ margin: calc(-1 * (borderWidthPrimary));
143
+ .groupTitle {
144
+ color: colorTextInversePrimary;
145
+ }
146
+ }
147
+
148
+ .subMenuLink.highlightedMenu {
149
+ background: colorNeutralDarkest;
150
+ .menuLinkTitle {
151
+ color: colorTextInversePrimary;
152
+ }
153
+ }
154
+
155
+ .groupTitleWrapper {
156
+ display: flex;
157
+ gap: spaceXXSmall;
158
+ }
159
+
160
+ .groupIconWrapper {
161
+ display: flex;
162
+ position: relative;
163
+ padding-right: spaceXSmall;
164
+ }
165
+
166
+ .statusIndicatorWrapper {
167
+ position: absolute;
168
+ top: calc(-1 * (spaceXXSmall));
169
+ right: spaceNone;
170
+ }
171
+
172
+ .groupTitle,
173
+ .menuLinkTitle {
174
+ color: colorTextInverseSecondary;
175
+ }
176
+
177
+ .menuLinkIcon {
178
+ margin-right: spaceXSmall;
179
+ }
180
+
181
+ .subMenuGroup,
182
+ .subMenuFocusWrapper {
183
+ outline: none;
95
184
  display: flex;
96
185
  flex-direction: column;
97
- margin-top: spaceXSmall;
186
+ }
187
+
188
+ .subMenuGroup {
189
+ margin: spaceXSmall spaceXXSmall;
98
190
  gap: spaceXXSmall;
191
+ background: colorNeutralDarkest;
192
+ border-radius: borderRadiusSmall;
99
193
  }
100
194
 
101
195
  .subMenuGroup.collapsed {
@@ -105,19 +199,18 @@
105
199
  .menuItem {
106
200
  display: flex;
107
201
  flex-direction: row;
108
- background: colorSubMenuBackgroundDefault;
109
202
  color: colorTextInverseSecondary;
110
203
  flex-direction: row;
111
- gap: spaceXSmall;
112
204
  justify-content: space-between;
205
+ gap: spaceXSmall;
113
206
  align-items: center;
114
207
  flex: auto;
115
208
  height: size34;
116
209
  min-height: size34;
117
210
  border-radius: borderRadiusSmall;
118
- width: sizeFluid;
119
211
  cursor: pointer;
120
- padding: spaceXSmall;
212
+ padding: spaceXXSmall;
213
+ margin: spaceXXSmall;
121
214
  box-sizing: border-box;
122
215
  }
123
216
 
@@ -130,7 +223,6 @@
130
223
  }
131
224
 
132
225
  .menuItem:focus {
133
- background: colorNeutralDarkest;
134
226
  box-shadow: borderWidthNone borderWidthNone borderWidthNone
135
227
  borderWidthTertiary colorFocusPrimary;
136
228
  }
@@ -140,10 +232,18 @@
140
232
  }
141
233
 
142
234
  .menuItem.selected {
143
- background: colorNeutralDarkest;
144
235
  color: colorTextInversePrimary;
145
236
  }
146
237
 
238
+ .menuItem.selected::before {
239
+ position: absolute;
240
+ content: '';
241
+ border-radius: borderRadiusSmall;
242
+ background-color: colorFillPrimary;
243
+ width: spaceXXSmall;
244
+ height: spaceMedium;
245
+ }
246
+
147
247
  .menuItem.disabled {
148
248
  pointer-events: none;
149
249
  }
@@ -151,15 +251,17 @@
151
251
  .menuIconName {
152
252
  display: flex;
153
253
  flex-direction: row;
154
- gap: spaceSmall;
254
+ align-items: center;
255
+ gap: spaceXXSmall;
256
+ padding-left: spaceSmall;
257
+ margin-left: spaceXXSmall;
155
258
  }
156
259
 
157
260
  .subMenuItemText {
158
261
  color: inherit;
159
- margin-right: spaceSmall;
160
262
  }
161
263
 
162
- .subMenuItemAction {
264
+ .subMenuItemBadges {
163
265
  display: flex;
164
- flex-direction: row;
266
+ align-items: center;
165
267
  }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SubMenuGroup = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _classify = _interopRequireDefault(require("../../utils/classify"));
9
+ var _FocusManagerWithArrowKeyNavigation = require("../FocusManagerWithArrowKeyNavigation");
10
+ var _Icon = require("../Icon");
11
+ var _StatusIndicator = require("../StatusIndicator");
12
+ var _Text = require("../Text");
13
+ var _SubMenuModule = _interopRequireDefault(require("./SubMenu.module.css"));
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ const SubMenuGroup = _ref => {
19
+ let {
20
+ children,
21
+ groupTitle,
22
+ groupIcon,
23
+ groupIconSize,
24
+ groupIconType,
25
+ collapsible = false,
26
+ disabled = false,
27
+ onChange,
28
+ selectedMenuKey,
29
+ status,
30
+ classNames
31
+ } = _ref;
32
+ const isSubMenuGroupChildSelected = React.Children.toArray(children).some(child => child.props.menuKey === selectedMenuKey);
33
+ const [collapsed, setCollapsed] = React.useState(!isSubMenuGroupChildSelected);
34
+ const collapseHandler = () => {
35
+ collapsible && setCollapsed(!collapsed);
36
+ };
37
+ const onMenuItemChangeHandler = value => {
38
+ onChange && onChange(value);
39
+ };
40
+ const onKeyDownHandlerHeader = e => {
41
+ if (e.key === 'Enter') {
42
+ collapseHandler();
43
+ }
44
+ };
45
+ const childrenWithProps = React.Children.map(children, child => {
46
+ if ( /*#__PURE__*/React.isValidElement(child)) {
47
+ const {
48
+ disabled: disabledChild
49
+ } = child.props;
50
+ return /*#__PURE__*/React.cloneElement(child, {
51
+ selectedMenuKey,
52
+ onChange: onMenuItemChangeHandler,
53
+ disabled: disabledChild || disabled
54
+ });
55
+ }
56
+ return child;
57
+ });
58
+ React.useEffect(() => {
59
+ setCollapsed(!isSubMenuGroupChildSelected);
60
+ }, [selectedMenuKey]);
61
+ return /*#__PURE__*/React.createElement("div", {
62
+ className: (0, _classify.default)(_SubMenuModule.default.subMenuGroupWrapper, classNames?.wrapper)
63
+ }, /*#__PURE__*/React.createElement("div", {
64
+ className: (0, _classify.default)(_SubMenuModule.default.subMenuGroupHeader, {
65
+ [_SubMenuModule.default.collapsible]: collapsible
66
+ }, {
67
+ [_SubMenuModule.default.highlightedMenu]: isSubMenuGroupChildSelected
68
+ }, {
69
+ [_SubMenuModule.default.collapsed]: !collapsed
70
+ }, classNames?.groupHeader),
71
+ onClick: collapseHandler,
72
+ onKeyDown: onKeyDownHandlerHeader,
73
+ tabIndex: disabled ? '-1' : 0
74
+ }, /*#__PURE__*/React.createElement("div", {
75
+ className: _SubMenuModule.default.groupTitleWrapper
76
+ }, (!!groupIcon || !!status) && /*#__PURE__*/React.createElement("div", {
77
+ className: _SubMenuModule.default.groupIconWrapper
78
+ }, !!groupIcon && /*#__PURE__*/React.createElement(_Icon.Icon, {
79
+ color: _Text.TEXT_COLORS.inverseSecondary,
80
+ name: groupIcon,
81
+ type: groupIconType,
82
+ size: groupIconSize,
83
+ className: _SubMenuModule.default.groupIcon
84
+ }), !!status && collapsed && /*#__PURE__*/React.createElement("div", {
85
+ className: (0, _classify.default)(_SubMenuModule.default.statusIndicatorWrapper)
86
+ }, /*#__PURE__*/React.createElement(_StatusIndicator.StatusIndicator, {
87
+ status: status,
88
+ className: _SubMenuModule.default.statusIndicatorWrapper
89
+ }))), /*#__PURE__*/React.createElement(_Text.ButtonTextMedium, {
90
+ color: _Text.TEXT_COLORS.inverseSecondary,
91
+ className: _SubMenuModule.default.groupTitle
92
+ }, groupTitle)), collapsible && /*#__PURE__*/React.createElement(_Icon.Icon, {
93
+ color: _Text.TEXT_COLORS.inverseSecondary,
94
+ name: collapsed ? 'chevron-down' : 'chevron-up',
95
+ size: "small"
96
+ })), /*#__PURE__*/React.createElement("div", {
97
+ className: (0, _classify.default)(_SubMenuModule.default.subMenuGroup, {
98
+ [_SubMenuModule.default.collapsed]: collapsible && collapsed
99
+ }, classNames?.menuGroup)
100
+ }, /*#__PURE__*/React.createElement(_FocusManagerWithArrowKeyNavigation.FocusManagerWithArrowKeyNavigation, {
101
+ classNames: {
102
+ wrapper: (0, _classify.default)(_SubMenuModule.default.subMenuFocusWrapper)
103
+ },
104
+ focusItemOnOpen: true,
105
+ loop: true
106
+ }, childrenWithProps)));
107
+ };
108
+ exports.SubMenuGroup = SubMenuGroup;
@@ -0,0 +1,156 @@
1
+ //@flow strict
2
+
3
+ import * as React from 'react';
4
+
5
+ import classify from '../../utils/classify';
6
+ import {FocusManagerWithArrowKeyNavigation} from '../FocusManagerWithArrowKeyNavigation';
7
+ import type {IconSize, IconType} from '../Icon';
8
+ import {Icon} from '../Icon';
9
+ import type {StatusSemanticType} from '../StatusIndicator';
10
+ import {StatusIndicator} from '../StatusIndicator';
11
+ import {ButtonTextMedium, TEXT_COLORS} from '../Text';
12
+
13
+ import css from './SubMenu.module.css';
14
+
15
+
16
+ type ClassNames = $ReadOnly<{
17
+ wrapper?: string,
18
+ groupHeader?: string,
19
+ menuGroup?: string,
20
+ }>;
21
+
22
+ export type SubMenuGroupProps = {
23
+ children?: React.Node,
24
+ groupTitle?: string,
25
+ groupIcon?: string,
26
+ groupIconSize?: IconSize,
27
+ groupIconType?: IconType,
28
+ collapsible?: boolean,
29
+ disabled?: boolean,
30
+ onChange?: (value: string) => mixed,
31
+ selectedMenuKey?: string,
32
+ status?: StatusSemanticType,
33
+ classNames?: ClassNames,
34
+ };
35
+
36
+ export const SubMenuGroup = ({
37
+ children,
38
+ groupTitle,
39
+ groupIcon,
40
+ groupIconSize,
41
+ groupIconType,
42
+ collapsible = false,
43
+ disabled = false,
44
+ onChange,
45
+ selectedMenuKey,
46
+ status,
47
+ classNames,
48
+ }: SubMenuGroupProps): React.Node => {
49
+ const isSubMenuGroupChildSelected = React.Children.toArray(children).some(
50
+ (child) => child.props.menuKey === selectedMenuKey,
51
+ );
52
+
53
+ const [collapsed, setCollapsed] = React.useState(
54
+ !isSubMenuGroupChildSelected,
55
+ );
56
+
57
+ const collapseHandler = () => {
58
+ collapsible && setCollapsed(!collapsed);
59
+ };
60
+ const onMenuItemChangeHandler = (value) => {
61
+ onChange && onChange(value);
62
+ };
63
+ const onKeyDownHandlerHeader = (e) => {
64
+ if (e.key === 'Enter') {
65
+ collapseHandler();
66
+ }
67
+ };
68
+ const childrenWithProps = React.Children.map(children, (child) => {
69
+ if (React.isValidElement(child)) {
70
+ const {disabled: disabledChild} = child.props;
71
+ return React.cloneElement(child, {
72
+ selectedMenuKey,
73
+ onChange: onMenuItemChangeHandler,
74
+ disabled: disabledChild || disabled,
75
+ });
76
+ }
77
+ return child;
78
+ });
79
+
80
+ React.useEffect(() => {
81
+ setCollapsed(!isSubMenuGroupChildSelected);
82
+ }, [selectedMenuKey]);
83
+
84
+ return (
85
+ <div className={classify(css.subMenuGroupWrapper, classNames?.wrapper)}>
86
+ <div
87
+ className={classify(
88
+ css.subMenuGroupHeader,
89
+ {[css.collapsible]: collapsible},
90
+ {[css.highlightedMenu]: isSubMenuGroupChildSelected},
91
+ {[css.collapsed]: !collapsed},
92
+ classNames?.groupHeader,
93
+ )}
94
+ onClick={collapseHandler}
95
+ onKeyDown={onKeyDownHandlerHeader}
96
+ tabIndex={disabled ? '-1' : 0}
97
+ >
98
+ <div className={css.groupTitleWrapper}>
99
+ {(!!groupIcon || !!status) && (
100
+ <div className={css.groupIconWrapper}>
101
+ {!!groupIcon && (
102
+ <Icon
103
+ color={TEXT_COLORS.inverseSecondary}
104
+ name={groupIcon}
105
+ type={groupIconType}
106
+ size={groupIconSize}
107
+ className={css.groupIcon}
108
+ />
109
+ )}
110
+ {!!status && collapsed && (
111
+ <div className={classify(css.statusIndicatorWrapper)}>
112
+ <StatusIndicator
113
+ status={status}
114
+ className={css.statusIndicatorWrapper}
115
+ />
116
+ </div>
117
+ )}
118
+ </div>
119
+ )}
120
+ <ButtonTextMedium
121
+ color={TEXT_COLORS.inverseSecondary}
122
+ className={css.groupTitle}
123
+ >
124
+ {groupTitle}
125
+ </ButtonTextMedium>
126
+ </div>
127
+ {collapsible && (
128
+ <Icon
129
+ color={TEXT_COLORS.inverseSecondary}
130
+ name={collapsed ? 'chevron-down' : 'chevron-up'}
131
+ size="small"
132
+ />
133
+ )}
134
+ </div>
135
+ <div
136
+ className={classify(
137
+ css.subMenuGroup,
138
+ {
139
+ [css.collapsed]: collapsible && collapsed,
140
+ },
141
+ classNames?.menuGroup,
142
+ )}
143
+ >
144
+ <FocusManagerWithArrowKeyNavigation
145
+ classNames={{
146
+ wrapper: classify(css.subMenuFocusWrapper),
147
+ }}
148
+ focusItemOnOpen={true}
149
+ loop={true}
150
+ >
151
+ {childrenWithProps}
152
+ </FocusManagerWithArrowKeyNavigation>
153
+ </div>
154
+ </div>
155
+ );
156
+ };
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SubMenuItemText = exports.SubMenuItemIcon = exports.SubMenuItemBadges = exports.SubMenuItemAction = exports.SubMenuItem = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _classify = _interopRequireDefault(require("../../utils/classify"));
9
+ var _Icon = require("../Icon");
10
+ var _Text = require("../Text");
11
+ var _Truncate = require("../Truncate");
12
+ var _SubMenuModule = _interopRequireDefault(require("./SubMenu.module.css"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+ const SubMenuItemIcon = _ref => {
18
+ let {
19
+ className,
20
+ ...props
21
+ } = _ref;
22
+ return /*#__PURE__*/React.createElement(_Icon.Icon, _extends({}, props, {
23
+ size: "small",
24
+ color: _Text.TEXT_COLORS.inverseSecondary,
25
+ className: (0, _classify.default)(_SubMenuModule.default.menuIcon, className)
26
+ }));
27
+ };
28
+ exports.SubMenuItemIcon = SubMenuItemIcon;
29
+ SubMenuItemIcon.displayName = 'SubMenuItemIcon';
30
+ const SubMenuItemText = _ref2 => {
31
+ let {
32
+ children,
33
+ className,
34
+ ...props
35
+ } = _ref2;
36
+ return /*#__PURE__*/React.createElement(_Text.ButtonTextMedium, _extends({}, props, {
37
+ className: (0, _classify.default)(_SubMenuModule.default.subMenuItemText, className),
38
+ color: _Text.TEXT_COLORS.inversePrimary
39
+ }), /*#__PURE__*/React.createElement(_Truncate.Truncate, {
40
+ showFullTextOnHover: true
41
+ }, children));
42
+ };
43
+ exports.SubMenuItemText = SubMenuItemText;
44
+ SubMenuItemText.displayName = 'SubMenuItemText';
45
+ const SubMenuItemBadges = _ref3 => {
46
+ let {
47
+ children,
48
+ className,
49
+ ...props
50
+ } = _ref3;
51
+ return /*#__PURE__*/React.createElement("div", _extends({}, props, {
52
+ className: (0, _classify.default)(_SubMenuModule.default.subMenuItemBadges, className)
53
+ }), children);
54
+ };
55
+ exports.SubMenuItemBadges = SubMenuItemBadges;
56
+ SubMenuItemBadges.displayName = 'SubMenuItemBadges';
57
+ const SubMenuItemAction = _ref4 => {
58
+ let {
59
+ children,
60
+ className,
61
+ ...props
62
+ } = _ref4;
63
+ return /*#__PURE__*/React.createElement("div", _extends({}, props, {
64
+ className: (0, _classify.default)(_SubMenuModule.default.actionItems, className)
65
+ }), children);
66
+ };
67
+ exports.SubMenuItemAction = SubMenuItemAction;
68
+ SubMenuItemAction.displayName = 'SubMenuItemAction';
69
+ const SubMenuItem = /*#__PURE__*/React.forwardRef((_ref5, ref) => {
70
+ let {
71
+ children,
72
+ selectedMenuKey,
73
+ disabled,
74
+ classNames,
75
+ onChange,
76
+ menuKey,
77
+ ...props
78
+ } = _ref5;
79
+ const onChangeHandler = () => {
80
+ if (!disabled) {
81
+ onChange?.(menuKey);
82
+ }
83
+ };
84
+ const onKeyDownHandler = e => {
85
+ if (e.key === 'Enter') {
86
+ onChangeHandler();
87
+ }
88
+ };
89
+ const selected = selectedMenuKey === menuKey;
90
+ const getNamedComp = comp => {
91
+ const childrenArray = React.Children.toArray(children);
92
+ if (childrenArray.length) {
93
+ const nodes = [];
94
+ for (const child of childrenArray) {
95
+ if (child?.type?.displayName === comp) {
96
+ nodes.push( /*#__PURE__*/React.cloneElement(child, {
97
+ selected,
98
+ disabled
99
+ }));
100
+ }
101
+ }
102
+ return nodes.length > 1 ? nodes : nodes[0];
103
+ }
104
+ return null;
105
+ };
106
+ return /*#__PURE__*/React.createElement("div", _extends({}, props, {
107
+ className: (0, _classify.default)(_SubMenuModule.default.menuItem, {
108
+ [_SubMenuModule.default.selected]: selected,
109
+ [_SubMenuModule.default.disabled]: disabled
110
+ }, classNames?.wrapper),
111
+ onKeyDown: onKeyDownHandler,
112
+ onClick: onChangeHandler,
113
+ tabIndex: disabled ? '-1' : 0,
114
+ disabled: disabled,
115
+ ref: ref
116
+ }), /*#__PURE__*/React.createElement("div", {
117
+ className: _SubMenuModule.default.menuIconName
118
+ }, getNamedComp('SubMenuItemIcon'), getNamedComp('SubMenuItemText'), getNamedComp('SubMenuItemBadges')), getNamedComp('SubMenuItemAction'));
119
+ });
120
+ exports.SubMenuItem = SubMenuItem;