@elliemae/ds-menu 1.60.0 → 2.0.0-alpha.12
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.
- package/cjs/Menu.js +191 -39
- package/cjs/MenuCombobox.js +38 -80
- package/cjs/MenuContext.js +1 -2
- package/cjs/MenuItems/CheckboxGroup.js +17 -10
- package/cjs/MenuItems/MenuItem.js +199 -36
- package/cjs/MenuItems/MenuItemCheckable.js +114 -35
- package/cjs/MenuItems/MenuItemCheckbox.js +39 -34
- package/cjs/MenuItems/MenuItemRadio.js +36 -35
- package/cjs/MenuItems/RadioGroup.js +17 -10
- package/cjs/MenuItems/SearchableGroup.js +49 -57
- package/cjs/MenuItems/SearchableList.js +35 -51
- package/cjs/MenuItems/SelectionGroup.js +103 -36
- package/cjs/MenuItems/Separator.js +17 -16
- package/cjs/MenuItems/SubMenu.js +199 -36
- package/cjs/MenuItems/menuItemFactory.js +67 -36
- package/cjs/VirtualMenuList.js +27 -23
- package/cjs/index.js +27 -48
- package/cjs/utils/useHeightByAmountOfItems.js +8 -9
- package/esm/Menu.js +180 -31
- package/esm/MenuCombobox.js +33 -74
- package/esm/MenuContext.js +0 -1
- package/esm/MenuItems/CheckboxGroup.js +15 -7
- package/esm/MenuItems/MenuItem.js +191 -31
- package/esm/MenuItems/MenuItemCheckable.js +107 -30
- package/esm/MenuItems/MenuItemCheckbox.js +33 -30
- package/esm/MenuItems/MenuItemRadio.js +31 -30
- package/esm/MenuItems/RadioGroup.js +15 -7
- package/esm/MenuItems/SearchableGroup.js +48 -55
- package/esm/MenuItems/SearchableList.js +34 -47
- package/esm/MenuItems/SelectionGroup.js +97 -31
- package/esm/MenuItems/Separator.js +14 -13
- package/esm/MenuItems/SubMenu.js +190 -31
- package/esm/MenuItems/menuItemFactory.js +62 -31
- package/esm/VirtualMenuList.js +25 -21
- package/esm/index.js +7 -28
- package/esm/utils/useHeightByAmountOfItems.js +8 -9
- package/package.json +109 -21
- package/types/Menu.d.ts +28 -0
- package/types/MenuCombobox.d.ts +28 -0
- package/types/MenuContext.d.ts +3 -0
- package/types/MenuItems/CheckboxGroup.d.ts +32 -0
- package/types/MenuItems/MenuItem.d.ts +79 -0
- package/types/MenuItems/MenuItemCheckable.d.ts +86 -0
- package/types/MenuItems/MenuItemCheckbox.d.ts +6 -0
- package/types/MenuItems/MenuItemRadio.d.ts +37 -0
- package/types/MenuItems/RadioGroup.d.ts +26 -0
- package/types/MenuItems/SearchableGroup.d.ts +18 -0
- package/types/MenuItems/SearchableList.d.ts +106 -0
- package/types/MenuItems/SelectionGroup.d.ts +98 -0
- package/types/MenuItems/Separator.d.ts +34 -0
- package/types/MenuItems/SubMenu.d.ts +122 -0
- package/types/MenuItems/menuItemFactory.d.ts +3 -0
- package/types/VirtualMenuList.d.ts +8 -0
- package/types/index.d.ts +13 -0
- package/types/tests/Menu.test.d.ts +1 -0
- package/types/tests/MenuItem.test.d.ts +1 -0
- package/types/utils/useHeightByAmountOfItems.d.ts +5 -0
- package/Menu/package.json +0 -10
- package/MenuCombobox/package.json +0 -10
- package/MenuContext/package.json +0 -10
- package/MenuItems/CheckboxGroup/package.json +0 -10
- package/MenuItems/MenuItem/package.json +0 -10
- package/MenuItems/MenuItemCheckable/package.json +0 -10
- package/MenuItems/MenuItemCheckbox/package.json +0 -10
- package/MenuItems/MenuItemRadio/package.json +0 -10
- package/MenuItems/RadioGroup/package.json +0 -10
- package/MenuItems/SearchableGroup/package.json +0 -10
- package/MenuItems/SearchableList/package.json +0 -10
- package/MenuItems/SelectionGroup/package.json +0 -10
- package/MenuItems/Separator/package.json +0 -10
- package/MenuItems/SubMenu/package.json +0 -10
- package/MenuItems/menuItemFactory/package.json +0 -10
- package/VirtualMenuList/package.json +0 -10
- package/cjs/Menu.js.map +0 -1
- package/cjs/MenuCombobox.js.map +0 -1
- package/cjs/MenuContext.js.map +0 -1
- package/cjs/MenuItems/CheckboxGroup.js.map +0 -1
- package/cjs/MenuItems/MenuItem.js.map +0 -1
- package/cjs/MenuItems/MenuItemCheckable.js.map +0 -1
- package/cjs/MenuItems/MenuItemCheckbox.js.map +0 -1
- package/cjs/MenuItems/MenuItemRadio.js.map +0 -1
- package/cjs/MenuItems/RadioGroup.js.map +0 -1
- package/cjs/MenuItems/SearchableGroup.js.map +0 -1
- package/cjs/MenuItems/SearchableList.js.map +0 -1
- package/cjs/MenuItems/SelectionGroup.js.map +0 -1
- package/cjs/MenuItems/Separator.js.map +0 -1
- package/cjs/MenuItems/SubMenu.js.map +0 -1
- package/cjs/MenuItems/menuItemFactory.js.map +0 -1
- package/cjs/SubMenu-22be0a18.js +0 -806
- package/cjs/SubMenu-22be0a18.js.map +0 -1
- package/cjs/VirtualMenuList.js.map +0 -1
- package/cjs/index.js.map +0 -1
- package/cjs/utils/useHeightByAmountOfItems.js.map +0 -1
- package/esm/Menu.js.map +0 -1
- package/esm/MenuCombobox.js.map +0 -1
- package/esm/MenuContext.js.map +0 -1
- package/esm/MenuItems/CheckboxGroup.js.map +0 -1
- package/esm/MenuItems/MenuItem.js.map +0 -1
- package/esm/MenuItems/MenuItemCheckable.js.map +0 -1
- package/esm/MenuItems/MenuItemCheckbox.js.map +0 -1
- package/esm/MenuItems/MenuItemRadio.js.map +0 -1
- package/esm/MenuItems/RadioGroup.js.map +0 -1
- package/esm/MenuItems/SearchableGroup.js.map +0 -1
- package/esm/MenuItems/SearchableList.js.map +0 -1
- package/esm/MenuItems/SelectionGroup.js.map +0 -1
- package/esm/MenuItems/Separator.js.map +0 -1
- package/esm/MenuItems/SubMenu.js.map +0 -1
- package/esm/MenuItems/menuItemFactory.js.map +0 -1
- package/esm/SubMenu-a25e69ec.js +0 -778
- package/esm/SubMenu-a25e69ec.js.map +0 -1
- package/esm/VirtualMenuList.js.map +0 -1
- package/esm/index.js.map +0 -1
- package/esm/utils/useHeightByAmountOfItems.js.map +0 -1
- package/utils/useHeightByAmountOfItems/package.json +0 -10
package/esm/SubMenu-a25e69ec.js
DELETED
|
@@ -1,778 +0,0 @@
|
|
|
1
|
-
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
-
import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
|
|
3
|
-
import React, { useMemo, useContext, useRef, useEffect, useState, useCallback } from 'react';
|
|
4
|
-
import { PropTypes, describe } from 'react-desc';
|
|
5
|
-
import { Checkmark, MoreOptionsVert, ChevronSmallRight } from '@elliemae/ds-icons';
|
|
6
|
-
import { useFocusGroupItem, focusGroupManagerHoc, FocusGroupContext } from '@elliemae/ds-shared/FocusGroup';
|
|
7
|
-
import { useHiddenTransition, useHiddenController } from '@elliemae/ds-hidden';
|
|
8
|
-
import DSButton, { BUTTON_VARIANT } from '@elliemae/ds-button';
|
|
9
|
-
import DSPopper, { interactions } from '@elliemae/ds-popper';
|
|
10
|
-
import styled from 'styled-components';
|
|
11
|
-
import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
|
|
12
|
-
import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
|
|
13
|
-
import { omit } from 'lodash';
|
|
14
|
-
import { aggregatedClasses } from '@elliemae/ds-classnames';
|
|
15
|
-
import { animated } from 'react-spring/web.cjs';
|
|
16
|
-
import { isFunction, mergeRefs, runAll, useOnClickOutside } from '@elliemae/ds-utilities';
|
|
17
|
-
import DSTruncatedTooltipText from '@elliemae/ds-truncated-tooltip-text';
|
|
18
|
-
import MenuSeparator from './MenuItems/Separator.js';
|
|
19
|
-
import { useCheckableGroup } from '@elliemae/ds-shared/CheckableGroup';
|
|
20
|
-
import SearchableGroup from './MenuItems/SearchableGroup.js';
|
|
21
|
-
import VirtualMenuList from './VirtualMenuList.js';
|
|
22
|
-
import { DSCheckbox } from '@elliemae/ds-form';
|
|
23
|
-
import MenuContext from './MenuContext.js';
|
|
24
|
-
import CheckboxGroup from './MenuItems/CheckboxGroup.js';
|
|
25
|
-
import RadioGroup from './MenuItems/RadioGroup.js';
|
|
26
|
-
|
|
27
|
-
var noop$2 = function noop() {
|
|
28
|
-
return null;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
function SelectionGroup(_ref) {
|
|
32
|
-
var _ref$multi = _ref.multi,
|
|
33
|
-
multi = _ref$multi === void 0 ? false : _ref$multi,
|
|
34
|
-
_ref$searchable = _ref.searchable,
|
|
35
|
-
searchable = _ref$searchable === void 0 ? false : _ref$searchable,
|
|
36
|
-
_ref$focusOnOpen = _ref.focusOnOpen,
|
|
37
|
-
focusOnOpen = _ref$focusOnOpen === void 0 ? false : _ref$focusOnOpen,
|
|
38
|
-
_ref$onSelect = _ref.onSelect,
|
|
39
|
-
onSelect = _ref$onSelect === void 0 ? noop$2 : _ref$onSelect,
|
|
40
|
-
children = _ref.children,
|
|
41
|
-
_ref$items = _ref.items,
|
|
42
|
-
items = _ref$items === void 0 ? undefined : _ref$items,
|
|
43
|
-
_ref$active = _ref.active,
|
|
44
|
-
active = _ref$active === void 0 ? multi ? [] : '' : _ref$active,
|
|
45
|
-
width = _ref.width,
|
|
46
|
-
height = _ref.height;
|
|
47
|
-
var renderedItems = useMemo(function () {
|
|
48
|
-
return items && items.map(function (item) {
|
|
49
|
-
var Component = menuItemFactory(multi ? 'checkbox' : 'radio');
|
|
50
|
-
return /*#__PURE__*/React.createElement(Component, _extends({}, item, {
|
|
51
|
-
key: item.name || item.id || item.key,
|
|
52
|
-
item: item,
|
|
53
|
-
name: item.id || item.name
|
|
54
|
-
}));
|
|
55
|
-
});
|
|
56
|
-
}, [items]);
|
|
57
|
-
var decoratedGroupChildren = useCheckableGroup({
|
|
58
|
-
children: renderedItems || children,
|
|
59
|
-
multi: multi,
|
|
60
|
-
active: active,
|
|
61
|
-
onCheck: onSelect
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
if (searchable) {
|
|
65
|
-
return /*#__PURE__*/React.createElement(SearchableGroup, {
|
|
66
|
-
focusOnOpen: focusOnOpen,
|
|
67
|
-
height: height,
|
|
68
|
-
items: items,
|
|
69
|
-
width: width
|
|
70
|
-
}, decoratedGroupChildren);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return /*#__PURE__*/React.createElement(VirtualMenuList, {
|
|
74
|
-
height: height,
|
|
75
|
-
items: decoratedGroupChildren,
|
|
76
|
-
width: width
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
var props$5 = {
|
|
81
|
-
/** toggle on multi select */
|
|
82
|
-
multi: PropTypes.bool.description('toggle on multi select'),
|
|
83
|
-
|
|
84
|
-
/** toggle on searchable behavior */
|
|
85
|
-
searchable: PropTypes.bool.description('toggle on searchable behavior'),
|
|
86
|
-
|
|
87
|
-
/** toggle to focus component on open */
|
|
88
|
-
focusOnOpen: PropTypes.bool.description('toggle to focus component on open'),
|
|
89
|
-
|
|
90
|
-
/** callback that triggers when select happens */
|
|
91
|
-
onSelect: PropTypes.func.description('callback that triggers when select happens'),
|
|
92
|
-
children: PropTypes.node.description(''),
|
|
93
|
-
|
|
94
|
-
/** selection group items */
|
|
95
|
-
items: PropTypes.array.description('selection group items'),
|
|
96
|
-
|
|
97
|
-
/** array of values for multi and string for single selection */
|
|
98
|
-
active: PropTypes.oneOfType([PropTypes.string, PropTypes.array]).description('array of values for multi and string for single selection'),
|
|
99
|
-
|
|
100
|
-
/** selection group width */
|
|
101
|
-
width: PropTypes.number.description('selection group width'),
|
|
102
|
-
|
|
103
|
-
/** selection group height */
|
|
104
|
-
height: PropTypes.number.description('selection group height')
|
|
105
|
-
};
|
|
106
|
-
SelectionGroup.propTypes = props$5;
|
|
107
|
-
var DSMenuSelectionGroupWithSchema = describe(SelectionGroup);
|
|
108
|
-
DSMenuSelectionGroupWithSchema.propTypes = props$5;
|
|
109
|
-
|
|
110
|
-
var _excluded$3 = ["checked"];
|
|
111
|
-
|
|
112
|
-
function MenuItemCheckbox(_ref) {
|
|
113
|
-
var checked = _ref.checked,
|
|
114
|
-
rest = _objectWithoutProperties(_ref, _excluded$3);
|
|
115
|
-
|
|
116
|
-
return /*#__PURE__*/React.createElement(MenuItemCheckable, _extends({}, rest, {
|
|
117
|
-
leftAddon: /*#__PURE__*/React.createElement(DSCheckbox, {
|
|
118
|
-
checked: checked
|
|
119
|
-
}),
|
|
120
|
-
role: "menuitemcheckbox"
|
|
121
|
-
}));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
var itemTypes = {
|
|
125
|
-
separator: MenuSeparator,
|
|
126
|
-
menuitem: MenuItem,
|
|
127
|
-
radio: MenuItemRadio,
|
|
128
|
-
checkbox: MenuItemCheckbox,
|
|
129
|
-
submenu: SubMenu,
|
|
130
|
-
'selection-group': SelectionGroup
|
|
131
|
-
};
|
|
132
|
-
var fallback = {
|
|
133
|
-
SelectionGroup: 'selection-group'
|
|
134
|
-
};
|
|
135
|
-
function menuItemFactory() {
|
|
136
|
-
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
137
|
-
var items = arguments.length > 1 ? arguments[1] : undefined;
|
|
138
|
-
var defaultItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : itemTypes.menuitem;
|
|
139
|
-
var itemsObject = items || itemTypes;
|
|
140
|
-
var parsedType = fallback[type] || type.toLowerCase();
|
|
141
|
-
return itemsObject[parsedType] || defaultItem;
|
|
142
|
-
}
|
|
143
|
-
function renderMenuItems(options) {
|
|
144
|
-
var factory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : menuItemFactory;
|
|
145
|
-
return options.map(function (option, index) {
|
|
146
|
-
if (isFunction(option.renderer)) {
|
|
147
|
-
return option.renderer({
|
|
148
|
-
key: option.id,
|
|
149
|
-
item: option
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
var ItemComponent = factory(option.type);
|
|
154
|
-
var children = option.subItems && renderMenuItems(option.subItems, factory);
|
|
155
|
-
return /*#__PURE__*/React.createElement(ItemComponent, _extends({}, option, {
|
|
156
|
-
key: option.id || index,
|
|
157
|
-
item: option,
|
|
158
|
-
onClick: null,
|
|
159
|
-
onMouseDown: option.onClick // onClick callback called in onMouseDown due to events order issue
|
|
160
|
-
|
|
161
|
-
}), children);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
var _excluded$2 = ["innerRef", "as", "role", "leftAddon", "rightAddon", "disabledAddonInactive", "label", "children", "tabIndex", "onKeyDown", "fixedItem", "noAddon", "disabled", "customRenderer", "maxOption", "closeMenu", "style"];
|
|
166
|
-
|
|
167
|
-
var noop$1 = function noop() {
|
|
168
|
-
return null;
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
var blockName$1 = 'menu-item';
|
|
172
|
-
var Content = aggregatedClasses('div')(blockName$1, 'content');
|
|
173
|
-
var Addon = aggregatedClasses('div')(blockName$1, 'addon', function (_ref) {
|
|
174
|
-
var empty = _ref.empty,
|
|
175
|
-
fixedItem = _ref.fixedItem;
|
|
176
|
-
return {
|
|
177
|
-
empty: empty,
|
|
178
|
-
fixedItem: fixedItem
|
|
179
|
-
};
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
var renderAddon = function renderAddon(addon, fixedItem, addonId) {
|
|
183
|
-
return /*#__PURE__*/React.createElement(Addon, {
|
|
184
|
-
key: addonId,
|
|
185
|
-
classProps: {
|
|
186
|
-
fixedItem: fixedItem
|
|
187
|
-
}
|
|
188
|
-
}, addon);
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
var renderAddons = function renderAddons(addons, fixedItem) {
|
|
192
|
-
return Array.isArray(addons) ? addons.map(renderAddon) : renderAddon(addons, fixedItem);
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
var Wrapper = aggregatedClasses('li')(blockName$1, null, function (_ref2) {
|
|
196
|
-
var disabled = _ref2.disabled,
|
|
197
|
-
disabledAddonInactive = _ref2.disabledAddonInactive,
|
|
198
|
-
customRenderer = _ref2.customRenderer,
|
|
199
|
-
fixedItem = _ref2.fixedItem,
|
|
200
|
-
type = _ref2.type;
|
|
201
|
-
return _defineProperty({
|
|
202
|
-
disabled: disabled,
|
|
203
|
-
disabledAddonInactive: disabledAddonInactive,
|
|
204
|
-
customRenderer: customRenderer,
|
|
205
|
-
fixedItem: fixedItem
|
|
206
|
-
}, "menu-type-".concat(type), type);
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
var calculateSize = function calculateSize() {
|
|
210
|
-
var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
211
|
-
if (length > 45) return 45 * 7;
|
|
212
|
-
return length * 7;
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
function MenuItem(props) {
|
|
216
|
-
var innerRef = props.innerRef,
|
|
217
|
-
_props$as = props.as,
|
|
218
|
-
as = _props$as === void 0 ? 'li' : _props$as,
|
|
219
|
-
_props$role = props.role,
|
|
220
|
-
role = _props$role === void 0 ? 'menuitem' : _props$role,
|
|
221
|
-
_props$leftAddon = props.leftAddon,
|
|
222
|
-
leftAddon = _props$leftAddon === void 0 ? null : _props$leftAddon,
|
|
223
|
-
_props$rightAddon = props.rightAddon,
|
|
224
|
-
rightAddon = _props$rightAddon === void 0 ? undefined : _props$rightAddon,
|
|
225
|
-
_props$disabledAddonI = props.disabledAddonInactive,
|
|
226
|
-
disabledAddonInactive = _props$disabledAddonI === void 0 ? undefined : _props$disabledAddonI,
|
|
227
|
-
_props$label = props.label,
|
|
228
|
-
label = _props$label === void 0 ? undefined : _props$label,
|
|
229
|
-
children = props.children,
|
|
230
|
-
_props$tabIndex = props.tabIndex,
|
|
231
|
-
tabIndex = _props$tabIndex === void 0 ? -1 : _props$tabIndex,
|
|
232
|
-
_props$onKeyDown = props.onKeyDown,
|
|
233
|
-
onKeyDown = _props$onKeyDown === void 0 ? noop$1 : _props$onKeyDown,
|
|
234
|
-
_props$fixedItem = props.fixedItem,
|
|
235
|
-
fixedItem = _props$fixedItem === void 0 ? false : _props$fixedItem,
|
|
236
|
-
noAddon = props.noAddon,
|
|
237
|
-
_props$disabled = props.disabled,
|
|
238
|
-
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
|
239
|
-
customRenderer = props.customRenderer,
|
|
240
|
-
maxOption = props.maxOption;
|
|
241
|
-
props.closeMenu;
|
|
242
|
-
var style = props.style,
|
|
243
|
-
otherProps = _objectWithoutProperties(props, _excluded$2);
|
|
244
|
-
|
|
245
|
-
var menuCxt = useContext(MenuContext);
|
|
246
|
-
var ref = useRef(null);
|
|
247
|
-
useFocusGroupItem(ref);
|
|
248
|
-
|
|
249
|
-
if (otherProps.subItems) {
|
|
250
|
-
return /*#__PURE__*/React.createElement(SubMenu, _extends({}, props, {
|
|
251
|
-
closeMenu: menuCxt.closeMenu
|
|
252
|
-
}), renderMenuItems(otherProps.subItems));
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
var wrapperProps = useMemo(function () {
|
|
256
|
-
return omit(otherProps, ['icon']);
|
|
257
|
-
}, [otherProps]);
|
|
258
|
-
|
|
259
|
-
var onClick = function onClick() {
|
|
260
|
-
if (wrapperProps.onClick) wrapperProps.onClick.apply(wrapperProps, arguments);
|
|
261
|
-
|
|
262
|
-
if (wrapperProps.closeOnClick && menuCxt.closeMenu) {
|
|
263
|
-
menuCxt.closeMenu.apply(menuCxt, arguments);
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
return /*#__PURE__*/React.createElement(Wrapper, _extends({
|
|
268
|
-
as: as,
|
|
269
|
-
classProps: {
|
|
270
|
-
disabled: disabled,
|
|
271
|
-
disabledAddonInactive: disabledAddonInactive,
|
|
272
|
-
customRenderer: customRenderer,
|
|
273
|
-
fixedItem: fixedItem,
|
|
274
|
-
type: otherProps.type
|
|
275
|
-
},
|
|
276
|
-
id: otherProps.id,
|
|
277
|
-
innerRef: otherProps.type !== 'disabled' ? mergeRefs(innerRef, ref) : innerRef,
|
|
278
|
-
onKeyDown: !fixedItem && runAll(function (e) {
|
|
279
|
-
if (e.key === ' ' || e.key === 'Enter') {
|
|
280
|
-
e.preventDefault();
|
|
281
|
-
e.target.dispatchEvent(new MouseEvent('click', {
|
|
282
|
-
view: window,
|
|
283
|
-
bubbles: true,
|
|
284
|
-
cancelable: false
|
|
285
|
-
}));
|
|
286
|
-
}
|
|
287
|
-
}, onKeyDown),
|
|
288
|
-
role: role,
|
|
289
|
-
style: style,
|
|
290
|
-
tabIndex: tabIndex
|
|
291
|
-
}, wrapperProps, {
|
|
292
|
-
onClick: onClick
|
|
293
|
-
}), !noAddon && renderAddons(leftAddon, fixedItem), label && /*#__PURE__*/React.createElement(Content, {
|
|
294
|
-
style: maxOption > 0 ? {
|
|
295
|
-
width: "".concat(calculateSize(maxOption), "px"),
|
|
296
|
-
maxWidth: "".concat(calculateSize(maxOption), "px")
|
|
297
|
-
} : undefined
|
|
298
|
-
}, /*#__PURE__*/React.createElement(DSTruncatedTooltipText, {
|
|
299
|
-
value: label
|
|
300
|
-
})), customRenderer, rightAddon && renderAddons(rightAddon), children);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
var props$4 = {
|
|
304
|
-
/** Renders the MenuItem with a specific html element */
|
|
305
|
-
as: PropTypes.element.description('Renders the MenuItem with a specific html element'),
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* reference to the component
|
|
309
|
-
*/
|
|
310
|
-
innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
|
|
311
|
-
current: PropTypes.any
|
|
312
|
-
})]).description('reference to the component'),
|
|
313
|
-
|
|
314
|
-
/** Renders the passed element to the left */
|
|
315
|
-
leftAddon: PropTypes.element.description('Renders the passed element to the left'),
|
|
316
|
-
|
|
317
|
-
/** Renders the passed element to the right */
|
|
318
|
-
rightAddon: PropTypes.element.description('Renders the passed element to the right'),
|
|
319
|
-
|
|
320
|
-
/** Label for the menu item */
|
|
321
|
-
label: PropTypes.string.description('Label for the menu item'),
|
|
322
|
-
|
|
323
|
-
/** style object for menu item wrapper */
|
|
324
|
-
style: PropTypes.object.description('style object for menu item wrapper'),
|
|
325
|
-
|
|
326
|
-
/** disable menu item */
|
|
327
|
-
disabled: PropTypes.bool.description('disable menu item'),
|
|
328
|
-
|
|
329
|
-
/** HTML tabindex to manage focus order */
|
|
330
|
-
tabindex: PropTypes.number.description('HTML tabindex to manage focus order'),
|
|
331
|
-
|
|
332
|
-
/** a11y role */
|
|
333
|
-
role: PropTypes.string.description('a11y role')
|
|
334
|
-
};
|
|
335
|
-
MenuItem.propTypes = props$4;
|
|
336
|
-
var DSMenuItemWithSchema = describe(MenuItem);
|
|
337
|
-
DSMenuItemWithSchema.propTypes = props$4;
|
|
338
|
-
|
|
339
|
-
var _excluded$1 = ["role", "checked", "name", "checkIcon", "children", "leftAddon", "item"];
|
|
340
|
-
|
|
341
|
-
function useCheckable(_ref) {
|
|
342
|
-
var checked = _ref.checked;
|
|
343
|
-
return {
|
|
344
|
-
checked: checked,
|
|
345
|
-
'aria-checked': checked
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Reuses the same props as the MenuItem
|
|
350
|
-
*
|
|
351
|
-
* @param root0
|
|
352
|
-
* @param root0.role
|
|
353
|
-
* @param root0.checked
|
|
354
|
-
* @param root0.name
|
|
355
|
-
* @param root0.checkIcon
|
|
356
|
-
* @param root0.children
|
|
357
|
-
* @param root0.leftAddon
|
|
358
|
-
* @param root0.item
|
|
359
|
-
*/
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
function MenuItemCheckable(_ref2) {
|
|
363
|
-
var _ref2$role = _ref2.role,
|
|
364
|
-
role = _ref2$role === void 0 ? 'menuitemcheckbox' : _ref2$role,
|
|
365
|
-
_ref2$checked = _ref2.checked,
|
|
366
|
-
checked = _ref2$checked === void 0 ? false : _ref2$checked,
|
|
367
|
-
_ref2$name = _ref2.name,
|
|
368
|
-
name = _ref2$name === void 0 ? '' : _ref2$name,
|
|
369
|
-
_ref2$checkIcon = _ref2.checkIcon,
|
|
370
|
-
checkIcon = _ref2$checkIcon === void 0 ? /*#__PURE__*/React.createElement(Checkmark, {
|
|
371
|
-
color: ['brand-primary', 600]
|
|
372
|
-
}) : _ref2$checkIcon;
|
|
373
|
-
_ref2.children;
|
|
374
|
-
var leftAddon = _ref2.leftAddon,
|
|
375
|
-
_ref2$item = _ref2.item,
|
|
376
|
-
item = _ref2$item === void 0 ? undefined : _ref2$item,
|
|
377
|
-
otherProps = _objectWithoutProperties(_ref2, _excluded$1);
|
|
378
|
-
|
|
379
|
-
var checkableProps = useCheckable({
|
|
380
|
-
checked: checked,
|
|
381
|
-
name: name
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
var handleClick = function handleClick() {
|
|
385
|
-
return runAll(otherProps.onClick, checkableProps.onClick)({
|
|
386
|
-
target: {
|
|
387
|
-
value: name,
|
|
388
|
-
checked: checked
|
|
389
|
-
}
|
|
390
|
-
}, item);
|
|
391
|
-
};
|
|
392
|
-
|
|
393
|
-
var checkAddon = leftAddon || (checkableProps.checked ? /*#__PURE__*/React.createElement("div", {
|
|
394
|
-
className: "checkable-mark"
|
|
395
|
-
}, checkIcon) : /*#__PURE__*/React.createElement("div", null));
|
|
396
|
-
return /*#__PURE__*/React.createElement(MenuItem, _extends({}, item, otherProps, checkableProps, {
|
|
397
|
-
customRenderer: item && item.customRenderer ? item.customRenderer : function () {},
|
|
398
|
-
items: otherProps.subItems,
|
|
399
|
-
leftAddon: checkAddon,
|
|
400
|
-
onClick: handleClick,
|
|
401
|
-
role: role
|
|
402
|
-
}));
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
var props$3 = {
|
|
406
|
-
/** Whether the item is checked or not */
|
|
407
|
-
checked: PropTypes.bool.description('Whether the item is checked or not'),
|
|
408
|
-
|
|
409
|
-
/** A custom item when the item is checked */
|
|
410
|
-
checkIcon: PropTypes.element.description('A custom item when the item is checked'),
|
|
411
|
-
|
|
412
|
-
/** form field name */
|
|
413
|
-
name: PropTypes.string.description('form field name'),
|
|
414
|
-
|
|
415
|
-
/** menu item object props */
|
|
416
|
-
item: PropTypes.object.description('menu item object props'),
|
|
417
|
-
|
|
418
|
-
/** a11y role */
|
|
419
|
-
role: PropTypes.string.description('a11y role'),
|
|
420
|
-
|
|
421
|
-
/** left addon component */
|
|
422
|
-
leftAddon: PropTypes.node.description('left addon component')
|
|
423
|
-
};
|
|
424
|
-
MenuItemCheckable.propTypes = props$3;
|
|
425
|
-
var DSMenuItemCheckeableWithSchema = describe(MenuItemCheckable);
|
|
426
|
-
DSMenuItemCheckeableWithSchema.propTypes = props$3;
|
|
427
|
-
|
|
428
|
-
function MenuItemRadio(props) {
|
|
429
|
-
return /*#__PURE__*/React.createElement(MenuItemCheckable, _extends({}, props, {
|
|
430
|
-
role: "menuitemradio"
|
|
431
|
-
}));
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
var props$2 = {
|
|
435
|
-
/** Whether the item is checked or not */
|
|
436
|
-
checked: PropTypes.bool.description('Whether the item is checked or not'),
|
|
437
|
-
|
|
438
|
-
/** A custom item when the item is checked */
|
|
439
|
-
checkIcon: PropTypes.element.description('A custom item when the item is checked')
|
|
440
|
-
};
|
|
441
|
-
MenuItemRadio.propTypes = props$2;
|
|
442
|
-
var DSMenuItemRadioWithSchema = describe(MenuItemCheckable);
|
|
443
|
-
DSMenuItemRadioWithSchema.propTypes = props$2;
|
|
444
|
-
|
|
445
|
-
var _excluded = ["containerProps", "innerRef", "as", "children", "onClickOutside", "visible", "focusOnOpen", "maxOption", "style", "minWidth", "maxWidth", "closeMenu", "responsiveHeight"],
|
|
446
|
-
_excluded2 = ["destroyed"];
|
|
447
|
-
|
|
448
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
449
|
-
|
|
450
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
451
|
-
var RESPONSIVE_HEIHGT_MARGIN = 120;
|
|
452
|
-
var blockName = 'menu';
|
|
453
|
-
|
|
454
|
-
var noop = function noop() {};
|
|
455
|
-
|
|
456
|
-
var MenuComponent = aggregatedClasses('div')(blockName, '', function (_ref) {
|
|
457
|
-
var menuComboBox = _ref.menuComboBox,
|
|
458
|
-
type = _ref.type;
|
|
459
|
-
return _defineProperty({
|
|
460
|
-
'menu-combo-box': menuComboBox
|
|
461
|
-
}, "type-".concat(type), type);
|
|
462
|
-
});
|
|
463
|
-
/**
|
|
464
|
-
* todo: -- IDEA -- each menu could have an overlay based on an overlay stack context so we can
|
|
465
|
-
* capture the context of the clicks on very nested components
|
|
466
|
-
*/
|
|
467
|
-
|
|
468
|
-
var isChildOfType = function isChildOfType(child, type) {
|
|
469
|
-
return child.type.name === type;
|
|
470
|
-
};
|
|
471
|
-
|
|
472
|
-
function DSMenu(_ref3) {
|
|
473
|
-
var _ref3$containerProps = _ref3.containerProps,
|
|
474
|
-
containerProps = _ref3$containerProps === void 0 ? {} : _ref3$containerProps,
|
|
475
|
-
innerRef = _ref3.innerRef,
|
|
476
|
-
_ref3$as = _ref3.as,
|
|
477
|
-
MenuTag = _ref3$as === void 0 ? animated.ul : _ref3$as,
|
|
478
|
-
_ref3$children = _ref3.children,
|
|
479
|
-
children = _ref3$children === void 0 ? undefined : _ref3$children,
|
|
480
|
-
_ref3$onClickOutside = _ref3.onClickOutside,
|
|
481
|
-
onClickOutside = _ref3$onClickOutside === void 0 ? noop : _ref3$onClickOutside,
|
|
482
|
-
_ref3$visible = _ref3.visible,
|
|
483
|
-
visible = _ref3$visible === void 0 ? undefined : _ref3$visible,
|
|
484
|
-
_ref3$focusOnOpen = _ref3.focusOnOpen,
|
|
485
|
-
focusOnOpen = _ref3$focusOnOpen === void 0 ? false : _ref3$focusOnOpen,
|
|
486
|
-
_ref3$maxOption = _ref3.maxOption,
|
|
487
|
-
maxOption = _ref3$maxOption === void 0 ? 0 : _ref3$maxOption,
|
|
488
|
-
_ref3$style = _ref3.style,
|
|
489
|
-
style = _ref3$style === void 0 ? {} : _ref3$style,
|
|
490
|
-
_ref3$minWidth = _ref3.minWidth,
|
|
491
|
-
minWidth = _ref3$minWidth === void 0 ? undefined : _ref3$minWidth,
|
|
492
|
-
_ref3$maxWidth = _ref3.maxWidth,
|
|
493
|
-
maxWidth = _ref3$maxWidth === void 0 ? undefined : _ref3$maxWidth,
|
|
494
|
-
closeMenu = _ref3.closeMenu,
|
|
495
|
-
_ref3$responsiveHeigh = _ref3.responsiveHeight,
|
|
496
|
-
responsiveHeight = _ref3$responsiveHeigh === void 0 ? false : _ref3$responsiveHeigh,
|
|
497
|
-
otherProps = _objectWithoutProperties(_ref3, _excluded);
|
|
498
|
-
|
|
499
|
-
var menuRef = useRef(null);
|
|
500
|
-
|
|
501
|
-
var _useContext = useContext(FocusGroupContext),
|
|
502
|
-
focusFirst = _useContext.focusFirst;
|
|
503
|
-
|
|
504
|
-
var _useHiddenTransition = useHiddenTransition({
|
|
505
|
-
visible: visible,
|
|
506
|
-
style: style
|
|
507
|
-
});
|
|
508
|
-
_useHiddenTransition.destroyed;
|
|
509
|
-
var hiddenProps = _objectWithoutProperties(_useHiddenTransition, _excluded2); // force no addon to the children if the menu doesn't have any item with leftAddon like SelectionGroup
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
var nextChildren = useMemo(function () {
|
|
513
|
-
var forceLeftAddon = React.Children.toArray(children).some(function (child) {
|
|
514
|
-
return isChildOfType(child, 'SelectionGroup') || isChildOfType(child, 'MenuItemCheckbox') || isChildOfType(child, 'MenuItemRadio') || child.props.leftAddon;
|
|
515
|
-
});
|
|
516
|
-
return React.Children.map(children, function (child) {
|
|
517
|
-
return child && /*#__PURE__*/React.cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {
|
|
518
|
-
noAddon: !forceLeftAddon ? true : undefined,
|
|
519
|
-
maxOption: maxOption,
|
|
520
|
-
closeMenu: closeMenu
|
|
521
|
-
}));
|
|
522
|
-
});
|
|
523
|
-
}, [children]);
|
|
524
|
-
useOnClickOutside(menuRef, onClickOutside);
|
|
525
|
-
useEffect(function () {
|
|
526
|
-
if (focusOnOpen && visible) {
|
|
527
|
-
setTimeout(function () {
|
|
528
|
-
focusFirst();
|
|
529
|
-
}, 0);
|
|
530
|
-
}
|
|
531
|
-
}, [visible, focusOnOpen]); // todo: find out a better approach to this
|
|
532
|
-
|
|
533
|
-
return !hiddenProps.destroyed ? /*#__PURE__*/React.createElement(MenuContext.Provider, {
|
|
534
|
-
value: {
|
|
535
|
-
visible: visible,
|
|
536
|
-
closeMenu: closeMenu
|
|
537
|
-
}
|
|
538
|
-
}, /*#__PURE__*/React.createElement(MenuComponent, _extends({
|
|
539
|
-
"data-testid": containerProps !== null && containerProps !== void 0 && containerProps['data-testid'] ? containerProps['data-testid'] : "em-ds-menu"
|
|
540
|
-
}, containerProps, {
|
|
541
|
-
as: MenuTag,
|
|
542
|
-
classProps: _objectSpread(_objectSpread({}, otherProps.classProps || {}), {}, {
|
|
543
|
-
type: otherProps.type
|
|
544
|
-
}),
|
|
545
|
-
innerRef: mergeRefs(innerRef, menuRef),
|
|
546
|
-
role: "menu"
|
|
547
|
-
}, omit(otherProps, ['scheduleUpdate']), hiddenProps), /*#__PURE__*/React.createElement("div", {
|
|
548
|
-
className: "menu-component-internal-wrapper",
|
|
549
|
-
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
550
|
-
minWidth: minWidth,
|
|
551
|
-
maxWidth: maxWidth
|
|
552
|
-
}, responsiveHeight ? {
|
|
553
|
-
overflowY: 'scroll',
|
|
554
|
-
maxHeight: responsiveHeight ? "".concat(window.innerHeight - RESPONSIVE_HEIHGT_MARGIN, "px") : undefined
|
|
555
|
-
} : {})
|
|
556
|
-
}, nextChildren))) : null;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
var Menu = focusGroupManagerHoc(DSMenu, {
|
|
560
|
-
loop: true
|
|
561
|
-
});
|
|
562
|
-
var props$1 = {
|
|
563
|
-
/** Injected props to wrapper element of component */
|
|
564
|
-
containerProps: PropTypes.object.description('Injected props to wrapper element of component'),
|
|
565
|
-
|
|
566
|
-
/** Renders the menu with a specific html element */
|
|
567
|
-
as: PropTypes.element.description('Renders the menu with a specific html element'),
|
|
568
|
-
|
|
569
|
-
/** Handler when a user clicks outside the menu */
|
|
570
|
-
onClickOutside: PropTypes.func.description('Handler when a user clicks outside the menu'),
|
|
571
|
-
|
|
572
|
-
/** Whether the menu is visible or not */
|
|
573
|
-
visible: PropTypes.bool.description('Whether the menu is visible or not'),
|
|
574
|
-
|
|
575
|
-
/** When set to true, it's going to focus the first item */
|
|
576
|
-
focusOnOpen: PropTypes.bool.description("When set to true, it's going to focus the first item"),
|
|
577
|
-
|
|
578
|
-
/** Customize menu minWidth. Can be undefined or 'number' */
|
|
579
|
-
minWidth: PropTypes.number.description("Customize menu minWidth. Can be undefined or 'number'"),
|
|
580
|
-
|
|
581
|
-
/** Customize menu maxWidth. Can be undefined or 'number' */
|
|
582
|
-
maxWidth: PropTypes.number.description("Customize menu maxWidth. Can be undefined or 'number'")
|
|
583
|
-
};
|
|
584
|
-
DSMenu.propTypes = props$1;
|
|
585
|
-
var DSMenuWithSchema = describe(DSMenu);
|
|
586
|
-
DSMenuWithSchema.propTypes = props$1; // todo: add a handler to get this kind of exports for documentation
|
|
587
|
-
|
|
588
|
-
Menu.Item = MenuItem;
|
|
589
|
-
Menu.ItemCheckbox = MenuItemCheckbox;
|
|
590
|
-
Menu.ItemRadio = MenuItemRadio;
|
|
591
|
-
Menu.SubMenu = SubMenu;
|
|
592
|
-
Menu.Separator = MenuSeparator;
|
|
593
|
-
Menu.CheckboxGroup = CheckboxGroup;
|
|
594
|
-
Menu.RadioGroup = RadioGroup;
|
|
595
|
-
Menu.SearchableGroup = SearchableGroup;
|
|
596
|
-
Menu.SelectionGroup = SelectionGroup;
|
|
597
|
-
|
|
598
|
-
var ChevronRightComp = /*#__PURE__*/styled.div.withConfig({
|
|
599
|
-
componentId: "sc-1qhp1z-0"
|
|
600
|
-
})(["display:flex;justify-content:center;align-items:center;width:28px;"]);
|
|
601
|
-
|
|
602
|
-
function SubMenu(_ref) {
|
|
603
|
-
var noAddon = _ref.noAddon,
|
|
604
|
-
_ref$leftAddon = _ref.leftAddon,
|
|
605
|
-
leftAddon = _ref$leftAddon === void 0 ? undefined : _ref$leftAddon,
|
|
606
|
-
_ref$label = _ref.label,
|
|
607
|
-
label = _ref$label === void 0 ? undefined : _ref$label,
|
|
608
|
-
_ref$interactionType = _ref.interactionType,
|
|
609
|
-
interactionType = _ref$interactionType === void 0 ? 'hover' : _ref$interactionType,
|
|
610
|
-
subitems = _ref.children,
|
|
611
|
-
rightAddonType = _ref.rightAddonType,
|
|
612
|
-
disabledAddonInactive = _ref.disabledAddonInactive,
|
|
613
|
-
_ref$checkableProps = _ref.checkableProps,
|
|
614
|
-
checkableProps = _ref$checkableProps === void 0 ? {} : _ref$checkableProps,
|
|
615
|
-
customRenderer = _ref.customRenderer,
|
|
616
|
-
onClick = _ref.onClick,
|
|
617
|
-
closeMenu = _ref.closeMenu,
|
|
618
|
-
id = _ref.id;
|
|
619
|
-
var itemRef = useRef(null);
|
|
620
|
-
var focusOnOpen = useRef(false);
|
|
621
|
-
|
|
622
|
-
var _useState = useState(false),
|
|
623
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
624
|
-
isAddonHovered = _useState2[0],
|
|
625
|
-
setIsAddonHovered = _useState2[1];
|
|
626
|
-
|
|
627
|
-
var _useHiddenController = useHiddenController(undefined, {
|
|
628
|
-
interaction: 'click'
|
|
629
|
-
}),
|
|
630
|
-
_useHiddenController$ = _useHiddenController.visible,
|
|
631
|
-
visible = _useHiddenController$ === void 0 ? false : _useHiddenController$,
|
|
632
|
-
onShow = _useHiddenController.onShow,
|
|
633
|
-
onHide = _useHiddenController.onHide;
|
|
634
|
-
|
|
635
|
-
var interaction = rightAddonType === 'elipsis' ? 'click' : 'hover';
|
|
636
|
-
|
|
637
|
-
var _useFocusGroupItem = useFocusGroupItem(),
|
|
638
|
-
focusItemByNode = _useFocusGroupItem.focusItemByNode; // todo: create a menu state to handle all related menu things
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
var handleShowSubItemsWithMouse = function handleShowSubItemsWithMouse(e) {
|
|
642
|
-
e.stopPropagation();
|
|
643
|
-
onShow();
|
|
644
|
-
focusOnOpen.current = true;
|
|
645
|
-
};
|
|
646
|
-
|
|
647
|
-
var handleShowWithMouse = function handleShowWithMouse(e) {
|
|
648
|
-
if (onClick) onClick(e);
|
|
649
|
-
};
|
|
650
|
-
|
|
651
|
-
var handleShowWithMouseHover = function handleShowWithMouseHover() {
|
|
652
|
-
setIsAddonHovered(true);
|
|
653
|
-
onShow();
|
|
654
|
-
focusOnOpen.current = false;
|
|
655
|
-
};
|
|
656
|
-
|
|
657
|
-
var handleShowWithKeyboard = function handleShowWithKeyboard() {
|
|
658
|
-
onShow();
|
|
659
|
-
focusOnOpen.current = true;
|
|
660
|
-
};
|
|
661
|
-
|
|
662
|
-
var handleOnMouseEnter = useCallback(function () {
|
|
663
|
-
setIsAddonHovered(true);
|
|
664
|
-
}, []);
|
|
665
|
-
var handleOnMouseLeave = useCallback(function () {
|
|
666
|
-
setIsAddonHovered(false);
|
|
667
|
-
}, []);
|
|
668
|
-
var hoverHandlers = interaction === 'hover' ? {
|
|
669
|
-
onMouseEnter: handleShowWithMouseHover,
|
|
670
|
-
onMouseLeave: function onMouseLeave() {
|
|
671
|
-
onHide();
|
|
672
|
-
setIsAddonHovered(false);
|
|
673
|
-
}
|
|
674
|
-
} : {
|
|
675
|
-
onClick: handleShowWithMouse
|
|
676
|
-
};
|
|
677
|
-
var rightAddon = rightAddonType === 'elipsis' ? /*#__PURE__*/React.createElement(DSButton, {
|
|
678
|
-
"aria-label": "vertical-elipsis",
|
|
679
|
-
"data-testid": "vertical-elipsis",
|
|
680
|
-
buttonType: "text",
|
|
681
|
-
leftIcon: /*#__PURE__*/React.createElement(MoreOptionsVert, {
|
|
682
|
-
className: "submenu-arrow",
|
|
683
|
-
color: visible || isAddonHovered ? ['brand-primary', 800] : ['neutral', 500],
|
|
684
|
-
size: "s"
|
|
685
|
-
}),
|
|
686
|
-
onClick: function onClick(e) {
|
|
687
|
-
return handleShowSubItemsWithMouse(e);
|
|
688
|
-
},
|
|
689
|
-
size: "m",
|
|
690
|
-
variant: BUTTON_VARIANT.DEFAULT
|
|
691
|
-
}) : /*#__PURE__*/React.createElement(ChevronRightComp, null, /*#__PURE__*/React.createElement(ChevronSmallRight, {
|
|
692
|
-
"data-testid": "chevron-right",
|
|
693
|
-
className: "submenu-arrow",
|
|
694
|
-
color: visible || isAddonHovered ? ['brand-primary', 800] : ['neutral', 500],
|
|
695
|
-
size: "sm"
|
|
696
|
-
}));
|
|
697
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DSPopper, {
|
|
698
|
-
contentComponent: /*#__PURE__*/React.createElement(Menu, _extends({
|
|
699
|
-
focusKeyBindings: {
|
|
700
|
-
ArrowLeft: [function () {
|
|
701
|
-
return focusItemByNode(itemRef.current);
|
|
702
|
-
}, 'exit']
|
|
703
|
-
},
|
|
704
|
-
focusOnOpen: focusOnOpen.current,
|
|
705
|
-
onExitFocusGroup: onHide
|
|
706
|
-
}, hoverHandlers, {
|
|
707
|
-
closeMenu: closeMenu,
|
|
708
|
-
visible: visible
|
|
709
|
-
}), subitems),
|
|
710
|
-
interactionType: interactionType,
|
|
711
|
-
isOpen: visible,
|
|
712
|
-
onOpen: function onOpen(opening) {
|
|
713
|
-
return opening ? onShow() : onHide();
|
|
714
|
-
},
|
|
715
|
-
placement: "right-start",
|
|
716
|
-
showArrow: false,
|
|
717
|
-
triggerComponent: /*#__PURE__*/React.createElement(MenuItem, _extends({
|
|
718
|
-
customRenderer: customRenderer,
|
|
719
|
-
disabledAddonInactive: disabledAddonInactive,
|
|
720
|
-
id: id,
|
|
721
|
-
innerRef: itemRef,
|
|
722
|
-
label: label,
|
|
723
|
-
leftAddon: leftAddon,
|
|
724
|
-
noAddon: noAddon,
|
|
725
|
-
onFocus: handleOnMouseEnter,
|
|
726
|
-
onBlur: handleOnMouseLeave,
|
|
727
|
-
onMouseEnter: handleOnMouseEnter,
|
|
728
|
-
onMouseLeave: handleOnMouseLeave
|
|
729
|
-
}, hoverHandlers, {
|
|
730
|
-
onKeyDown: function onKeyDown(e) {
|
|
731
|
-
if (e.key === 'ArrowRight' || e.key === 'Enter' || e.keyCode === 32) {
|
|
732
|
-
handleShowWithKeyboard();
|
|
733
|
-
}
|
|
734
|
-
},
|
|
735
|
-
rightAddon: rightAddon
|
|
736
|
-
}, checkableProps))
|
|
737
|
-
}));
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
var props = {
|
|
741
|
-
/** dont show addon for submenu */
|
|
742
|
-
noAddon: PropTypes.bool.description('dont show addon for submenu'),
|
|
743
|
-
|
|
744
|
-
/** left addon */
|
|
745
|
-
leftAddon: PropTypes.node.description('left addon'),
|
|
746
|
-
|
|
747
|
-
/** submenu label */
|
|
748
|
-
label: PropTypes.string.description('submenu label'),
|
|
749
|
-
|
|
750
|
-
/** A type indicating how to open/close the tooltip */
|
|
751
|
-
interactionType: PropTypes.oneOf(interactions).description('A type indicating how to open/close the tooltip'),
|
|
752
|
-
|
|
753
|
-
/** sub menu items */
|
|
754
|
-
children: PropTypes.oneOfType([PropTypes.array, PropTypes.node]).description('sub menu items'),
|
|
755
|
-
|
|
756
|
-
/** right addon, ellipsis or undefined */
|
|
757
|
-
rightAddonType: PropTypes.oneOf(['ellipsis']).description('right addon, ellipsis or undefined'),
|
|
758
|
-
disabledAddonInactive: PropTypes.bool.description(''),
|
|
759
|
-
|
|
760
|
-
/** props passed to MenuItem component */
|
|
761
|
-
checkableProps: PropTypes.object.description('props passed to MenuItem component'),
|
|
762
|
-
|
|
763
|
-
/** custom renderer for menu item */
|
|
764
|
-
customRenderer: PropTypes.func.description('custom renderer for menu item'),
|
|
765
|
-
|
|
766
|
-
/** on click handler */
|
|
767
|
-
onClick: PropTypes.func.description('on click handler'),
|
|
768
|
-
closeMenu: PropTypes.any.description(''),
|
|
769
|
-
|
|
770
|
-
/** component id */
|
|
771
|
-
id: PropTypes.string.description('component id')
|
|
772
|
-
};
|
|
773
|
-
SubMenu.propTypes = props;
|
|
774
|
-
var DSSubMenuWithSchema = describe(SubMenu);
|
|
775
|
-
DSSubMenuWithSchema.propTypes = props;
|
|
776
|
-
|
|
777
|
-
export { DSMenuItemWithSchema as D, Menu as M, SelectionGroup as S, DSSubMenuWithSchema as a, DSMenuItemCheckeableWithSchema as b, DSMenuItemRadioWithSchema as c, DSMenuSelectionGroupWithSchema as d, DSMenuWithSchema as e, MenuItemCheckbox as f, MenuItem as g, MenuItemCheckable as h, MenuItemRadio as i, SubMenu as j, menuItemFactory as m, renderMenuItems as r };
|
|
778
|
-
//# sourceMappingURL=SubMenu-a25e69ec.js.map
|