@hi-ui/menu 4.0.0-beta.3 → 4.0.0-beta.30

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/lib/esm/Menu.js CHANGED
@@ -8,7 +8,7 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import { __rest } from 'tslib';
11
- import React, { forwardRef, useState, useEffect, useCallback } from 'react';
11
+ import React, { forwardRef, useState, useEffect, useCallback, useMemo, useLayoutEffect } from 'react';
12
12
  import { getPrefixCls, cx } from '@hi-ui/classname';
13
13
  import { MenuUnfoldOutlined, MenuFoldOutlined } from '@hi-ui/icons';
14
14
  import { __DEV__ } from '@hi-ui/env';
@@ -16,83 +16,199 @@ import { MenuItem } from './MenuItem.js';
16
16
  import MenuContext from './context.js';
17
17
  import { getAncestorIds } from './util.js';
18
18
  import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
19
+ import Tooltip from '@hi-ui/tooltip';
20
+ import { useUncontrolledToggle } from '@hi-ui/use-toggle';
21
+ import { getTreeNodesWithChildren } from '@hi-ui/tree-utils';
22
+ import { isArrayNonEmpty, isFunction } from '@hi-ui/type-assertion';
23
+ import { useResizeObserver } from '@hi-ui/use-resize-observer';
24
+ import { useMergeRefs } from '@hi-ui/use-merge-refs';
19
25
  var MENU_PREFIX = getPrefixCls('menu');
26
+ var DEFAULT_EXPANDED_IDS = [];
27
+ var NOOP_ARRAY = [];
28
+ var MIN_WIDTH = 56;
20
29
  /**
21
30
  * TODO: What is Menu
22
31
  */
23
32
 
24
33
  var Menu = /*#__PURE__*/forwardRef(function (_a, ref) {
25
- var _cx;
26
-
27
34
  var _a$prefixCls = _a.prefixCls,
28
35
  prefixCls = _a$prefixCls === void 0 ? MENU_PREFIX : _a$prefixCls,
29
36
  _a$role = _a.role,
30
37
  role = _a$role === void 0 ? 'menu' : _a$role,
31
38
  className = _a.className,
32
- data = _a.data,
39
+ _a$data = _a.data,
40
+ data = _a$data === void 0 ? NOOP_ARRAY : _a$data,
33
41
  _a$placement = _a.placement,
34
42
  placement = _a$placement === void 0 ? 'vertical' : _a$placement,
35
- showCollapse = _a.showCollapse,
43
+ _a$showCollapse = _a.showCollapse,
44
+ showCollapse = _a$showCollapse === void 0 ? false : _a$showCollapse,
36
45
  _a$expandedType = _a.expandedType,
37
46
  expandedType = _a$expandedType === void 0 ? 'collapse' : _a$expandedType,
38
47
  _a$showAllSubMenus = _a.showAllSubMenus,
39
48
  showAllSubMenus = _a$showAllSubMenus === void 0 ? false : _a$showAllSubMenus,
40
- defaultExpandedIds = _a.defaultExpandedIds,
41
- defaultActiveId = _a.defaultActiveId,
42
- activeId = _a.activeId,
49
+ _a$defaultExpandedAll = _a.defaultExpandedAll,
50
+ defaultExpandedAll = _a$defaultExpandedAll === void 0 ? false : _a$defaultExpandedAll,
51
+ _a$defaultExpandedIds = _a.defaultExpandedIds,
52
+ defaultExpandedIds = _a$defaultExpandedIds === void 0 ? DEFAULT_EXPANDED_IDS : _a$defaultExpandedIds,
53
+ expandedIdsProp = _a.expandedIds,
54
+ onExpand = _a.onExpand,
55
+ _a$defaultActiveId = _a.defaultActiveId,
56
+ defaultActiveId = _a$defaultActiveId === void 0 ? '' : _a$defaultActiveId,
57
+ activeIdProp = _a.activeId,
43
58
  onClickSubMenu = _a.onClickSubMenu,
59
+ collapsed = _a.collapsed,
60
+ _a$defaultCollapsed = _a.defaultCollapsed,
61
+ defaultCollapsed = _a$defaultCollapsed === void 0 ? false : _a$defaultCollapsed,
62
+ onCollapse = _a.onCollapse,
63
+ footerRender = _a.footerRender,
44
64
  onClick = _a.onClick,
45
- rest = __rest(_a, ["prefixCls", "role", "className", "data", "placement", "showCollapse", "expandedType", "showAllSubMenus", "defaultExpandedIds", "defaultActiveId", "activeId", "onClickSubMenu", "onClick"]);
65
+ rest = __rest(_a, ["prefixCls", "role", "className", "data", "placement", "showCollapse", "expandedType", "showAllSubMenus", "defaultExpandedAll", "defaultExpandedIds", "expandedIds", "onExpand", "defaultActiveId", "activeId", "onClickSubMenu", "collapsed", "defaultCollapsed", "onCollapse", "footerRender", "onClick"]);
46
66
 
47
- var _useUncontrolledState = useUncontrolledState(defaultActiveId || '', activeId, onClick),
48
- _activeId = _useUncontrolledState[0],
67
+ var _useUncontrolledState = useUncontrolledState(defaultActiveId, activeIdProp, onClick),
68
+ activeId = _useUncontrolledState[0],
49
69
  updateActiveId = _useUncontrolledState[1];
50
70
 
51
- var _useState = useState(getAncestorIds(_activeId, data)),
71
+ var _useState = useState(function () {
72
+ return getAncestorIds(activeId, data);
73
+ }),
52
74
  activeParents = _useState[0],
53
75
  updateActiveParents = _useState[1];
54
76
 
55
77
  useEffect(function () {
56
- updateActiveParents(getAncestorIds(_activeId, data));
57
- }, [_activeId, data]);
78
+ updateActiveParents(getAncestorIds(activeId, data));
79
+ }, [activeId, data]);
58
80
 
59
- var _useState2 = useState(defaultExpandedIds || []),
60
- _expandedIds = _useState2[0],
61
- updateExpanedIds = _useState2[1];
81
+ var _useUncontrolledState2 = useUncontrolledState(function () {
82
+ return defaultExpandedAll ? getTreeNodesWithChildren(data).map(function (node) {
83
+ return node.id;
84
+ }) : defaultExpandedIds;
85
+ }, expandedIdsProp, onExpand),
86
+ expandedIds = _useUncontrolledState2[0],
87
+ updateExpandedIds = _useUncontrolledState2[1];
62
88
 
63
- var clickMenu = useCallback(function (id) {
64
- updateActiveId(id);
89
+ var clickMenu = useCallback(function (id, raw) {
90
+ updateActiveId(id, raw);
65
91
  }, [updateActiveId]);
66
92
  var clickSubMenu = useCallback(function (id) {
67
- var expandedIds = _expandedIds.includes(id) ? _expandedIds.filter(function (expandedid) {
68
- return expandedid !== id;
69
- }) : _expandedIds.concat(id);
70
- updateExpanedIds(expandedIds);
93
+ var nextExpandedIds = expandedIds.includes(id) ? expandedIds.filter(function (expandedId) {
94
+ return expandedId !== id;
95
+ }) : expandedIds.concat(id);
96
+ updateExpandedIds(nextExpandedIds);
71
97
 
72
98
  if (onClickSubMenu) {
73
- onClickSubMenu(id, expandedIds);
99
+ onClickSubMenu(id, nextExpandedIds);
74
100
  }
75
- }, [onClickSubMenu, _expandedIds]);
101
+ }, [onClickSubMenu, expandedIds, updateExpandedIds]);
76
102
  var closePopper = useCallback(function (id) {
77
- updateExpanedIds(_expandedIds.filter(function (expandedid) {
78
- return expandedid !== id;
103
+ updateExpandedIds(expandedIds.filter(function (expandedId) {
104
+ return expandedId !== id;
79
105
  }));
80
- }, [_expandedIds]);
106
+ }, [expandedIds, updateExpandedIds]);
81
107
  var closeAllPopper = useCallback(function () {
82
- updateExpanedIds([]);
83
- }, []);
84
-
85
- var _useState3 = useState(false),
86
- mini = _useState3[0],
87
- setMini = _useState3[1];
88
-
89
- var cls = cx(prefixCls, className, prefixCls + "--" + placement, (_cx = {}, _cx[prefixCls + "--mini"] = mini, _cx));
90
- var onToggle = useCallback(function () {
91
- setMini(!mini);
92
- closeAllPopper();
93
- }, [mini, closeAllPopper]);
108
+ updateExpandedIds([]);
109
+ }, [updateExpandedIds]);
110
+
111
+ var _useUncontrolledToggl = useUncontrolledToggle({
112
+ defaultVisible: defaultCollapsed,
113
+ visible: collapsed,
114
+ onToggle: onCollapse
115
+ }),
116
+ mini = _useUncontrolledToggl[0],
117
+ miniToggleAction = _useUncontrolledToggl[1];
118
+
119
+ var showVertical = placement === 'vertical';
120
+ var canToggle = showVertical && showCollapse;
121
+ var showMini = showVertical && mini;
122
+
123
+ var _useState2 = useState(null),
124
+ containerElement = _useState2[0],
125
+ setContainerElement = _useState2[1];
126
+
127
+ var _useState3 = useState(),
128
+ _useState3$ = _useState3[0],
129
+ containerWidth = _useState3$ === void 0 ? 0 : _useState3$,
130
+ setContainerWidth = _useState3[1];
131
+
132
+ useResizeObserver({
133
+ element: containerElement,
134
+ disabled: showVertical,
135
+ getSize: function getSize(element) {
136
+ var itemRect = element.getBoundingClientRect();
137
+ return itemRect.width;
138
+ },
139
+ onResize: function onResize(el, width) {
140
+ setContainerWidth(width);
141
+ }
142
+ });
143
+
144
+ var _useState4 = useState(0),
145
+ tagMaxCount = _useState4[0],
146
+ setTagMaxCount = _useState4[1];
147
+
148
+ var mergedTagList = useMemo(function () {
149
+ if (showVertical) return data;
150
+ if (containerWidth < MIN_WIDTH) return data;
151
+ return data.slice(0, Math.min(data.length, containerWidth / MIN_WIDTH));
152
+ }, [showVertical, data, containerWidth]);
153
+ var restTagList = useMemo(function () {
154
+ if (tagMaxCount > 0) return data.slice(tagMaxCount);
155
+ return [];
156
+ }, [data, tagMaxCount]);
157
+ var getTagWidth = useCallback(function (index) {
158
+ if (!containerElement) return MIN_WIDTH;
159
+ var elements = containerElement.getElementsByClassName('hi-v4-menu-item');
160
+ var element = elements && elements[index];
161
+ if (!element) return MIN_WIDTH;
162
+ return element.getBoundingClientRect().width;
163
+ }, [containerElement]);
164
+ useLayoutEffect(function () {
165
+ if (showVertical) return;
166
+ var tagMaxCount = 0;
167
+
168
+ if (isArrayNonEmpty(mergedTagList)) {
169
+ var len = mergedTagList.length;
170
+ var lastIndex = len - 1;
171
+ var totalWidth = 72; // 更多
172
+
173
+ for (var i = 0; i < len; ++i) {
174
+ var currentTagWidth = getTagWidth(i);
175
+
176
+ if (currentTagWidth === undefined) {
177
+ break;
178
+ }
179
+
180
+ totalWidth += currentTagWidth;
181
+
182
+ if (lastIndex === 0 && totalWidth <= containerWidth || i === lastIndex - 1 && totalWidth + getTagWidth(lastIndex) <= containerWidth) {
183
+ tagMaxCount = lastIndex;
184
+ break;
185
+ } else if (totalWidth > containerWidth) {
186
+ tagMaxCount = i - 1;
187
+ break;
188
+ }
189
+ }
190
+ } else {
191
+ tagMaxCount = 0;
192
+ } // 保底要展示 1 个
193
+
194
+
195
+ setTagMaxCount(isArrayNonEmpty(mergedTagList) && tagMaxCount < 1 ? 1 : tagMaxCount + 1);
196
+ }, [showVertical, getTagWidth, containerWidth, mergedTagList]);
197
+
198
+ var renderFooter = function renderFooter() {
199
+ var collapseNode = canToggle ? /*#__PURE__*/React.createElement("div", {
200
+ className: cx(prefixCls + "__toggle"),
201
+ onClick: miniToggleAction.not
202
+ }, mini ? /*#__PURE__*/React.createElement(MenuUnfoldOutlined, null) : /*#__PURE__*/React.createElement(MenuFoldOutlined, null)) : null;
203
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isFunction(footerRender) ? footerRender({
204
+ collapsed: showMini,
205
+ collapseNode: collapseNode
206
+ }) : collapseNode);
207
+ };
208
+
209
+ var cls = cx(prefixCls, className, prefixCls + "--" + placement, mini && prefixCls + "--mini", (expandedType === 'pop' || showAllSubMenus || mini) && prefixCls + "--popup");
94
210
  return /*#__PURE__*/React.createElement("div", Object.assign({
95
- ref: ref,
211
+ ref: useMergeRefs(ref, setContainerElement),
96
212
  role: role,
97
213
  className: cls
98
214
  }, rest), /*#__PURE__*/React.createElement(MenuContext.Provider, {
@@ -106,25 +222,55 @@ var Menu = /*#__PURE__*/forwardRef(function (_a, ref) {
106
222
  closePopper: closePopper,
107
223
  closeAllPopper: closeAllPopper,
108
224
  activeParents: activeParents,
109
- activeId: _activeId,
110
- expandedIds: _expandedIds
225
+ activeId: activeId,
226
+ expandedIds: expandedIds
111
227
  }
112
228
  }, /*#__PURE__*/React.createElement("ul", {
113
229
  className: cx(prefixCls + "__wrapper")
114
- }, data.map(function (d) {
115
- return /*#__PURE__*/React.createElement(MenuItem, Object.assign({}, d, {
116
- key: d.id,
117
- level: 1
230
+ }, mergedTagList.map(function (item, index) {
231
+ return showMini ? /*#__PURE__*/React.createElement(Tooltip, {
232
+ title: item.title,
233
+ key: item.id,
234
+ placement: "right"
235
+ }, /*#__PURE__*/React.createElement(MenuItem, Object.assign({}, item, {
236
+ level: 1,
237
+ render: renderMenuItemMini,
238
+ raw: item
239
+ }))) : /*#__PURE__*/React.createElement(MenuItem, Object.assign({
240
+ hidden: !showVertical && index >= tagMaxCount
241
+ }, item, {
242
+ key: item.id,
243
+ level: 1,
244
+ raw: item
118
245
  }));
119
- })), placement === 'vertical' && showCollapse && /*#__PURE__*/React.createElement("div", {
120
- className: cx(prefixCls + "__toggle"),
121
- onClick: onToggle
122
- }, mini ? /*#__PURE__*/React.createElement(MenuUnfoldOutlined, null) : /*#__PURE__*/React.createElement(MenuFoldOutlined, null))));
246
+ }), /*#__PURE__*/React.createElement(MenuItem, {
247
+ hidden: showVertical || restTagList.length === 0,
248
+ id: "hi-v4-menu-more",
249
+ title: "\u66F4\u591A",
250
+ children: restTagList
251
+ })), /*#__PURE__*/React.createElement("div", {
252
+ className: prefixCls + "__footer"
253
+ }, renderFooter())));
123
254
  });
124
255
 
125
256
  if (__DEV__) {
126
257
  Menu.displayName = 'Menu';
127
258
  }
259
+ /**
260
+ * Mini 模式下渲染 item
261
+ */
262
+
263
+
264
+ var renderMenuItemMini = function renderMenuItemMini(menu) {
265
+ if (typeof menu.icon !== 'undefined') {
266
+ return menu.icon;
267
+ }
268
+
269
+ if (typeof menu.title === 'string') {
270
+ return menu.title.substring(0, 1);
271
+ }
272
+
273
+ return menu.title;
274
+ };
128
275
 
129
276
  export { Menu };
130
- //# sourceMappingURL=Menu.js.map
@@ -7,28 +7,44 @@
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
- import React, { useRef, useContext } from 'react';
10
+ import { __rest } from 'tslib';
11
+ import React, { forwardRef, useRef, useContext } from 'react';
11
12
  import { getPrefixCls, cx } from '@hi-ui/classname';
12
13
  import { __DEV__ } from '@hi-ui/env';
13
- import { UpOutlined, DownOutlined, RightOutlined } from '@hi-ui/icons';
14
+ import { RightOutlined, DownOutlined, UpOutlined } from '@hi-ui/icons';
14
15
  import MenuContext from './context.js';
15
- import { PopperPortal, Popper } from '@hi-ui/popper';
16
+ import Popper from '@hi-ui/popper';
16
17
  import { Expander } from './Expander.js';
18
+ import { isArrayNonEmpty, isFunction } from '@hi-ui/type-assertion';
19
+ import { times } from '@hi-ui/array-utils';
20
+ import { useMergeRefs } from '@hi-ui/use-merge-refs';
17
21
  var MENU_PREFIX = getPrefixCls('menu');
18
-
19
- var MenuItem = function MenuItem(_ref) {
22
+ var hiddenStyle = {
23
+ position: 'absolute',
24
+ opacity: 0,
25
+ order: 9999,
26
+ visibility: 'hidden'
27
+ };
28
+ var MenuItem = /*#__PURE__*/forwardRef(function (_a, ref) {
20
29
  var _cx, _cx2;
21
30
 
22
- var _ref$prefixCls = _ref.prefixCls,
23
- prefixCls = _ref$prefixCls === void 0 ? MENU_PREFIX : _ref$prefixCls,
24
- icon = _ref.icon,
25
- title = _ref.title,
26
- disabled = _ref.disabled,
27
- id = _ref.id,
28
- _ref$level = _ref.level,
29
- level = _ref$level === void 0 ? 1 : _ref$level,
30
- children = _ref.children,
31
- parentIds = _ref.parentIds;
31
+ var _a$prefixCls = _a.prefixCls,
32
+ prefixCls = _a$prefixCls === void 0 ? MENU_PREFIX : _a$prefixCls,
33
+ className = _a.className,
34
+ icon = _a.icon,
35
+ title = _a.title,
36
+ disabled = _a.disabled,
37
+ id = _a.id,
38
+ _a$level = _a.level,
39
+ level = _a$level === void 0 ? 1 : _a$level,
40
+ children = _a.children,
41
+ parentIds = _a.parentIds,
42
+ _a$hidden = _a.hidden,
43
+ hidden = _a$hidden === void 0 ? false : _a$hidden,
44
+ render = _a.render,
45
+ raw = _a.raw,
46
+ rest = __rest(_a, ["prefixCls", "className", "icon", "title", "disabled", "id", "level", "children", "parentIds", "hidden", "render", "raw"]);
47
+
32
48
  var itemRef = useRef(null);
33
49
 
34
50
  var _useContext = useContext(MenuContext),
@@ -46,40 +62,60 @@ var MenuItem = function MenuItem(_ref) {
46
62
 
47
63
  var _parentIds = (parentIds || []).concat(id);
48
64
 
49
- return /*#__PURE__*/React.createElement("li", {
50
- ref: itemRef,
51
- className: cx(prefixCls + "-item", (_cx = {}, _cx[prefixCls + "-item--disabled"] = disabled, _cx[prefixCls + "-item--active"] = placement === 'horizontal' && (activeId === id || (activeParents === null || activeParents === void 0 ? void 0 : activeParents.includes(id))) && level === 1, _cx))
52
- }, /*#__PURE__*/React.createElement("div", {
53
- className: cx(prefixCls + "-item__inner", (_cx2 = {}, _cx2[prefixCls + "-item__inner--mini"] = mini, _cx2[prefixCls + "-item__inner--active"] = activeId === id, _cx2[prefixCls + "-item__inner--active-p"] = activeParents === null || activeParents === void 0 ? void 0 : activeParents.includes(id), _cx2)),
65
+ var hasChildren = isArrayNonEmpty(children);
66
+ var mergedRef = useMergeRefs(itemRef, ref);
67
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("li", Object.assign({
68
+ ref: mergedRef,
69
+ className: cx(prefixCls + "-item", (_cx = {}, _cx[prefixCls + "-item__inner--mini"] = mini, _cx[prefixCls + "-item--disabled"] = disabled, _cx[prefixCls + "-item--active"] = placement === 'horizontal' && (activeId === id || (activeParents === null || activeParents === void 0 ? void 0 : activeParents.includes(id))) && level === 1, _cx), className),
70
+ style: hidden ? hiddenStyle : undefined
71
+ }, rest), /*#__PURE__*/React.createElement("div", {
72
+ className: cx(prefixCls + "-item__inner", (_cx2 = {}, _cx2[prefixCls + "-item__inner--active"] = activeId === id, _cx2[prefixCls + "-item__inner--active-p"] = activeParents === null || activeParents === void 0 ? void 0 : activeParents.includes(id), _cx2[prefixCls + "-item__inner--expanded"] = expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id), _cx2)),
54
73
  onClick: function onClick() {
55
- if (children === null || children === void 0 ? void 0 : children.length) {
74
+ if (isArrayNonEmpty(children)) {
56
75
  if (clickSubMenu) {
57
76
  clickSubMenu(id);
58
77
  }
59
78
  } else {
60
79
  if (clickMenu) {
61
- clickMenu(id);
80
+ // @ts-ignore
81
+ clickMenu(id, raw);
62
82
  }
63
83
 
64
84
  if (closeAllPopper && !(placement === 'vertical' && expandedType === 'collapse' && mini === false)) {
65
85
  closeAllPopper();
66
86
  }
67
87
  }
68
- },
69
- style: placement === 'vertical' && expandedType === 'collapse' && !mini ? {
70
- paddingLeft: level > 1 ? 12 + (level - 1 > 0 ? 1 : 0) * 20 + (level - 2 || 0) * 16 : 12
71
- } : {}
72
- }, icon, /*#__PURE__*/React.createElement("span", {
73
- className: prefixCls + "-item__content"
74
- }, title), (children === null || children === void 0 ? void 0 : children.length) && !mini && placement === 'vertical' && expandedType === 'collapse' && !showAllSubMenus && ((expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? /*#__PURE__*/React.createElement(UpOutlined, null) : /*#__PURE__*/React.createElement(DownOutlined, null)), (children === null || children === void 0 ? void 0 : children.length) && mini && level > 1 && placement === 'vertical' && /*#__PURE__*/React.createElement(RightOutlined, null), (children === null || children === void 0 ? void 0 : children.length) && !mini && placement === 'vertical' && (expandedType === 'pop' || showAllSubMenus) && /*#__PURE__*/React.createElement(RightOutlined, null), (children === null || children === void 0 ? void 0 : children.length) && placement === 'horizontal' && level > 1 && /*#__PURE__*/React.createElement(RightOutlined, null), (children === null || children === void 0 ? void 0 : children.length) && placement === 'horizontal' && level === 1 && ((expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? /*#__PURE__*/React.createElement(UpOutlined, {
75
- style: {
76
- marginLeft: 4
77
- }
78
- }) : /*#__PURE__*/React.createElement(DownOutlined, {
79
- style: {
80
- marginLeft: 4
81
88
  }
82
- }))), (children === null || children === void 0 ? void 0 : children.length) && placement === 'vertical' && !mini && !showAllSubMenus && expandedType === 'collapse' && /*#__PURE__*/React.createElement(Expander, {
89
+ }, placement === 'vertical' && expandedType === 'collapse' && !mini ? renderIndent({
90
+ prefixCls: prefixCls + "-item",
91
+ depth: level - 1
92
+ }) : null, icon ? /*#__PURE__*/React.createElement("span", {
93
+ className: prefixCls + "-item__icon"
94
+ }, icon) : null, /*#__PURE__*/React.createElement("span", {
95
+ className: prefixCls + "-item__content"
96
+ }, isFunction(render) ? render({
97
+ id: id,
98
+ icon: icon,
99
+ title: title
100
+ }) : title), hasChildren && !mini && placement === 'vertical' && expandedType === 'collapse' && !showAllSubMenus && ((expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? /*#__PURE__*/React.createElement(Arrow, {
101
+ prefixCls: prefixCls + "-item",
102
+ direction: "up"
103
+ }) : /*#__PURE__*/React.createElement(Arrow, {
104
+ prefixCls: prefixCls + "-item",
105
+ direction: "down"
106
+ })), hasChildren && mini && level > 1 && placement === 'vertical' ? /*#__PURE__*/React.createElement(Arrow, {
107
+ prefixCls: prefixCls + "-item"
108
+ }) : null, hasChildren && !mini && placement === 'vertical' && (expandedType === 'pop' || showAllSubMenus) ? /*#__PURE__*/React.createElement(Arrow, {
109
+ prefixCls: prefixCls + "-item"
110
+ }) : null, hasChildren && placement === 'horizontal' && level > 1 ? /*#__PURE__*/React.createElement(Arrow, {
111
+ prefixCls: prefixCls + "-item"
112
+ }) : null, hasChildren && placement === 'horizontal' && level === 1 && ((expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? /*#__PURE__*/React.createElement(Arrow, {
113
+ prefixCls: prefixCls + "-item",
114
+ direction: "up"
115
+ }) : /*#__PURE__*/React.createElement(Arrow, {
116
+ prefixCls: prefixCls + "-item",
117
+ direction: "down"
118
+ }))), hasChildren && placement === 'vertical' && !mini && !showAllSubMenus && expandedType === 'collapse' ? /*#__PURE__*/React.createElement(Expander, {
83
119
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id))
84
120
  }, /*#__PURE__*/React.createElement("ul", {
85
121
  className: prefixCls + "-submenu"
@@ -87,9 +123,10 @@ var MenuItem = function MenuItem(_ref) {
87
123
  return /*#__PURE__*/React.createElement(MenuItem, Object.assign({}, child, {
88
124
  key: child.id,
89
125
  level: level + 1,
90
- parentIds: _parentIds
126
+ parentIds: _parentIds,
127
+ raw: child
91
128
  }));
92
- }))), (children === null || children === void 0 ? void 0 : children.length) && placement === 'vertical' && mini && !showAllSubMenus && expandedType === 'collapse' && (level === 1 ? /*#__PURE__*/React.createElement(PopperPortal, {
129
+ }))) : null), hasChildren && placement === 'vertical' && mini && !showAllSubMenus && expandedType === 'collapse' && (level === 1 ? /*#__PURE__*/React.createElement(Popper, {
93
130
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
94
131
  attachEl: itemRef.current,
95
132
  placement: 'right-start',
@@ -112,6 +149,7 @@ var MenuItem = function MenuItem(_ref) {
112
149
  attachEl: itemRef.current,
113
150
  placement: 'right-start',
114
151
  gutterGap: 16,
152
+ disabledPortal: true,
115
153
  onClose: function onClose() {
116
154
  if (closePopper) {
117
155
  closePopper(id);
@@ -125,7 +163,7 @@ var MenuItem = function MenuItem(_ref) {
125
163
  level: level + 1,
126
164
  parentIds: _parentIds
127
165
  }));
128
- })))), (children === null || children === void 0 ? void 0 : children.length) && placement === 'vertical' && !showAllSubMenus && expandedType === 'pop' && (level === 1 ? /*#__PURE__*/React.createElement(PopperPortal, {
166
+ })))), hasChildren && placement === 'vertical' && !showAllSubMenus && expandedType === 'pop' && (level === 1 ? /*#__PURE__*/React.createElement(Popper, {
129
167
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
130
168
  attachEl: itemRef.current,
131
169
  placement: 'right-start',
@@ -146,6 +184,7 @@ var MenuItem = function MenuItem(_ref) {
146
184
  }))) : /*#__PURE__*/React.createElement(Popper, {
147
185
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
148
186
  attachEl: itemRef.current,
187
+ disabledPortal: true,
149
188
  placement: 'right-start',
150
189
  gutterGap: 16,
151
190
  onClose: function onClose() {
@@ -161,7 +200,7 @@ var MenuItem = function MenuItem(_ref) {
161
200
  level: level + 1,
162
201
  parentIds: _parentIds
163
202
  }));
164
- })))), (children === null || children === void 0 ? void 0 : children.length) && placement === 'vertical' && showAllSubMenus && /*#__PURE__*/React.createElement(PopperPortal, {
203
+ })))), hasChildren && placement === 'vertical' && showAllSubMenus ? /*#__PURE__*/React.createElement(Popper, {
165
204
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
166
205
  attachEl: itemRef.current,
167
206
  placement: 'right-start',
@@ -174,20 +213,18 @@ var MenuItem = function MenuItem(_ref) {
174
213
  }, /*#__PURE__*/React.createElement("div", {
175
214
  className: prefixCls + "-fat-menu"
176
215
  }, children.map(function (child) {
177
- var _a;
178
-
179
216
  return /*#__PURE__*/React.createElement("div", {
180
217
  key: child.id,
181
218
  className: prefixCls + "-fat-menu__group"
182
219
  }, /*#__PURE__*/React.createElement("div", {
183
220
  className: prefixCls + "-group-item"
184
- }, child.title), ((_a = child === null || child === void 0 ? void 0 : child.children) === null || _a === void 0 ? void 0 : _a.length) && /*#__PURE__*/React.createElement("ul", null, child.children.map(function (item) {
221
+ }, child.title), child && isArrayNonEmpty(child.children) ? /*#__PURE__*/React.createElement("ul", null, child.children.map(function (item) {
185
222
  var _cx3;
186
223
 
187
224
  return /*#__PURE__*/React.createElement("div", {
188
225
  onClick: function onClick() {
189
226
  if (clickMenu) {
190
- clickMenu(item.id);
227
+ clickMenu(item.id, item);
191
228
  }
192
229
 
193
230
  if (closePopper) {
@@ -197,8 +234,8 @@ var MenuItem = function MenuItem(_ref) {
197
234
  className: cx(prefixCls + "-item", (_cx3 = {}, _cx3[prefixCls + "-item--active"] = activeId === item.id, _cx3)),
198
235
  key: item.id
199
236
  }, item.title);
200
- })));
201
- }))), (children === null || children === void 0 ? void 0 : children.length) && placement === 'horizontal' && !showAllSubMenus && (level === 1 ? /*#__PURE__*/React.createElement(PopperPortal, {
237
+ })) : null);
238
+ }))) : null, hasChildren && placement === 'horizontal' && !showAllSubMenus && (level === 1 ? /*#__PURE__*/React.createElement(Popper, {
202
239
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
203
240
  attachEl: itemRef.current,
204
241
  placement: level === 1 ? 'bottom-start' : 'right-start',
@@ -219,6 +256,7 @@ var MenuItem = function MenuItem(_ref) {
219
256
  }))) : /*#__PURE__*/React.createElement(Popper, {
220
257
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
221
258
  attachEl: itemRef.current,
259
+ disabledPortal: true,
222
260
  placement: level === 1 ? 'bottom-start' : 'right-start',
223
261
  gutterGap: level === 1 ? 8 : 16,
224
262
  onClose: function onClose() {
@@ -234,7 +272,7 @@ var MenuItem = function MenuItem(_ref) {
234
272
  level: level + 1,
235
273
  parentIds: _parentIds
236
274
  }));
237
- })))), (children === null || children === void 0 ? void 0 : children.length) && placement === 'horizontal' && showAllSubMenus && /*#__PURE__*/React.createElement(PopperPortal, {
275
+ })))), hasChildren && placement === 'horizontal' && showAllSubMenus ? /*#__PURE__*/React.createElement(Popper, {
238
276
  visible: !!(expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)),
239
277
  attachEl: itemRef.current,
240
278
  placement: 'bottom-start',
@@ -247,21 +285,19 @@ var MenuItem = function MenuItem(_ref) {
247
285
  }, /*#__PURE__*/React.createElement("div", {
248
286
  className: prefixCls + "-fat-menu"
249
287
  }, children.map(function (child) {
250
- var _a;
251
-
252
288
  return /*#__PURE__*/React.createElement("div", {
253
289
  key: child.id,
254
290
  className: prefixCls + "-fat-menu__group"
255
291
  }, /*#__PURE__*/React.createElement("div", {
256
292
  className: prefixCls + "-group-item"
257
- }, child.title), ((_a = child === null || child === void 0 ? void 0 : child.children) === null || _a === void 0 ? void 0 : _a.length) && /*#__PURE__*/React.createElement("ul", null, child.children.map(function (item) {
293
+ }, child.title), child && isArrayNonEmpty(child.children) ? /*#__PURE__*/React.createElement("ul", null, child.children.map(function (item) {
258
294
  var _cx4;
259
295
 
260
296
  return /*#__PURE__*/React.createElement("div", {
261
297
  className: cx(prefixCls + "-item", (_cx4 = {}, _cx4[prefixCls + "-item--active"] = activeId === item.id, _cx4)),
262
298
  onClick: function onClick() {
263
299
  if (clickMenu) {
264
- clickMenu(item.id);
300
+ clickMenu(item.id, item);
265
301
  }
266
302
 
267
303
  if (closePopper) {
@@ -270,13 +306,50 @@ var MenuItem = function MenuItem(_ref) {
270
306
  },
271
307
  key: item.id
272
308
  }, item.title);
273
- })));
274
- }))));
275
- };
309
+ })) : null);
310
+ }))) : null);
311
+ });
276
312
 
277
313
  if (__DEV__) {
278
314
  MenuItem.displayName = 'MenuItem';
279
315
  }
280
316
 
317
+ var Arrow = function Arrow(_ref) {
318
+ var prefixCls = _ref.prefixCls,
319
+ direction = _ref.direction;
320
+ var icon = null;
321
+
322
+ switch (direction) {
323
+ case 'up':
324
+ icon = /*#__PURE__*/React.createElement(UpOutlined, null);
325
+ break;
326
+
327
+ case 'down':
328
+ icon = /*#__PURE__*/React.createElement(DownOutlined, null);
329
+ break;
330
+
331
+ default:
332
+ icon = /*#__PURE__*/React.createElement(RightOutlined, null);
333
+ }
334
+
335
+ return /*#__PURE__*/React.createElement("span", {
336
+ className: prefixCls + "__arrow"
337
+ }, icon);
338
+ };
339
+ /**
340
+ * 渲染空白占位
341
+ */
342
+
343
+
344
+ var renderIndent = function renderIndent(_ref2) {
345
+ var prefixCls = _ref2.prefixCls,
346
+ depth = _ref2.depth;
347
+ return times(depth, function (index) {
348
+ return /*#__PURE__*/React.createElement("span", {
349
+ className: prefixCls + "__indent",
350
+ key: index
351
+ });
352
+ });
353
+ };
354
+
281
355
  export { MenuItem };
282
- //# sourceMappingURL=MenuItem.js.map
@@ -9,5 +9,4 @@
9
9
  */
10
10
  import { createContext } from 'react';
11
11
  var MenuContext = /*#__PURE__*/createContext({});
12
- export default MenuContext;
13
- //# sourceMappingURL=context.js.map
12
+ export { MenuContext as default };
package/lib/esm/index.js CHANGED
@@ -9,4 +9,3 @@
9
9
  */
10
10
  import './styles/index.scss.js';
11
11
  export { Menu, Menu as default } from './Menu.js';
12
- //# sourceMappingURL=index.js.map