@qsxy/element-plus-react 1.0.0-next.21 → 1.0.0-next.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/Breadcrumb/BreadcrumbItem.js +7 -4
  2. package/dist/DateTimePicker/DateTimePicker.d.ts +1 -1
  3. package/dist/Menu/Menu.d.ts +4 -0
  4. package/dist/Menu/Menu.js +231 -0
  5. package/dist/Menu/MenuCollapseTransition.d.ts +6 -0
  6. package/dist/Menu/MenuCollapseTransition.js +40 -0
  7. package/dist/Menu/MenuContext.d.ts +16 -0
  8. package/dist/Menu/MenuContext.js +18 -0
  9. package/dist/Menu/MenuItem.d.ts +4 -0
  10. package/dist/Menu/MenuItem.js +76 -0
  11. package/dist/Menu/MenuItemGroup.d.ts +4 -0
  12. package/dist/Menu/MenuItemGroup.js +44 -0
  13. package/dist/Menu/SubMenu.d.ts +4 -0
  14. package/dist/Menu/SubMenu.js +242 -0
  15. package/dist/Menu/SubMenuCollapseTransition.d.ts +6 -0
  16. package/dist/Menu/SubMenuCollapseTransition.js +52 -0
  17. package/dist/Menu/index.d.ts +5 -0
  18. package/dist/Menu/index.js +4 -0
  19. package/dist/Menu/typings.d.ts +121 -0
  20. package/dist/Menu/typings.js +1 -0
  21. package/dist/Menu/useEllipsis.d.ts +6 -0
  22. package/dist/Menu/useEllipsis.js +82 -0
  23. package/dist/Popper/Popper.js +9 -4
  24. package/dist/Popper/popperOptions.d.ts +2 -2
  25. package/dist/Popper/popperOptions.js +41 -2
  26. package/dist/Radio/Radio.js +4 -3
  27. package/dist/Radio/RadioButton.d.ts +1 -1
  28. package/dist/Radio/RadioButton.js +3 -2
  29. package/dist/Radio/typings.d.ts +1 -1
  30. package/dist/Tooltip/Tooltip.js +3 -1
  31. package/dist/Transition/CssTransiton.d.ts +15 -0
  32. package/dist/Transition/CssTransiton.js +29 -0
  33. package/dist/Transition/Transition.d.ts +2 -0
  34. package/dist/Transition/Transition.js +7 -2
  35. package/dist/hooks/useCssTransiton.d.ts +27 -0
  36. package/dist/hooks/useCssTransiton.js +87 -0
  37. package/dist/hooks/useResizeObserver.d.ts +42 -0
  38. package/dist/hooks/useResizeObserver.js +42 -0
  39. package/dist/index.css +1 -1
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.js +1 -0
  42. package/dist/types/common.d.ts +2 -2
  43. package/package.json +4 -3
  44. package/theme-chalk/common/transition.scss +142 -0
  45. package/theme-chalk/index.scss +3 -0
  46. package/theme-chalk/menu-item-group.scss +0 -0
  47. package/theme-chalk/menu-item.scss +0 -0
  48. package/theme-chalk/menu.scss +352 -0
@@ -0,0 +1,242 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
3
+ var _excluded = ["activeIndex", "parentIndex", "mode", "menuTrigger", "onOpen", "onClose", "addItems", "addSubMenu", "handleSubMenuClick", "showTimeout", "hideTimeout", "themeStyle", "popperOffset"];
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
8
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
9
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
10
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
11
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
13
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
14
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
18
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
19
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
21
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
22
+ import classNames from 'classnames';
23
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
24
+ import Icon from "../Icon/Icon";
25
+ import Tooltip from "../Tooltip/Tooltip";
26
+ import Transition from "../Transition/Transition";
27
+ import { mergeDefaultProps } from "../Util";
28
+ import { useClassNames } from "../hooks";
29
+ import { MenuContext, useMenuContext } from "./MenuContext";
30
+ import { afterEnter, afterLeave, beforeEnter, beforeLeave, onEnter, onLeave } from "./SubMenuCollapseTransition";
31
+ var SubMenu = function SubMenu(props) {
32
+ props = mergeDefaultProps({
33
+ popperOffset: 5
34
+ }, props);
35
+ var _props = props,
36
+ _props$classPrefix = _props.classPrefix,
37
+ classPrefix = _props$classPrefix === void 0 ? 'sub-menu' : _props$classPrefix,
38
+ title = _props.title,
39
+ index = _props.index,
40
+ popperClass = _props.popperClass,
41
+ disabled = _props.disabled;
42
+ var _useClassNames = useClassNames('menu'),
43
+ mb = _useClassNames.b,
44
+ mm = _useClassNames.m;
45
+ var _useClassNames2 = useClassNames(classPrefix),
46
+ b = _useClassNames2.b,
47
+ e = _useClassNames2.e,
48
+ is = _useClassNames2.is;
49
+ var _useMenuContext = useMenuContext(),
50
+ activeIndex = _useMenuContext.activeIndex,
51
+ parentIndex = _useMenuContext.parentIndex,
52
+ mode = _useMenuContext.mode,
53
+ menuTrigger = _useMenuContext.menuTrigger,
54
+ onOpen = _useMenuContext.onOpen,
55
+ onClose = _useMenuContext.onClose,
56
+ addItems = _useMenuContext.addItems,
57
+ addSubMenu = _useMenuContext.addSubMenu,
58
+ handleSubMenuClick = _useMenuContext.handleSubMenuClick,
59
+ showTimeout = _useMenuContext.showTimeout,
60
+ hideTimeout = _useMenuContext.hideTimeout,
61
+ themeStyle = _useMenuContext.themeStyle,
62
+ popperOffset = _useMenuContext.popperOffset,
63
+ ohter = _objectWithoutProperties(_useMenuContext, _excluded);
64
+ var _useState = useState(false),
65
+ _useState2 = _slicedToArray(_useState, 2),
66
+ open = _useState2[0],
67
+ setOpen = _useState2[1];
68
+ var indexPath = useMemo(function () {
69
+ return [].concat(_toConsumableArray(parentIndex), [index]);
70
+ }, [index, parentIndex]);
71
+ var level = useMemo(function () {
72
+ return indexPath.length;
73
+ }, [indexPath.length]);
74
+ var tooltipRef = useRef();
75
+ var ulRef = useRef(null);
76
+ var inited = useRef(false);
77
+ var handleMouseEnter = useCallback(function () {
78
+ setOpen(true);
79
+ }, []);
80
+ var handleMouseLeave = useCallback(function () {
81
+ setOpen(false);
82
+ }, []);
83
+
84
+ /**
85
+ * 隐藏子菜单的回调函数
86
+ * 该函数用于处理子菜单的隐藏逻辑,包括触发子菜单点击处理和隐藏工具提示
87
+ *
88
+ * @remarks
89
+ * 依赖项: handleSubMenuClick - 子菜单点击处理函数
90
+ *
91
+ * @returns {void}
92
+ */
93
+ var hideSubMenu = useCallback(function () {
94
+ var _tooltipRef$current;
95
+ (_tooltipRef$current = tooltipRef.current) === null || _tooltipRef$current === void 0 || _tooltipRef$current.hide();
96
+ handleSubMenuClick === null || handleSubMenuClick === void 0 || handleSubMenuClick();
97
+ }, [handleSubMenuClick]);
98
+ var handleSubMenuItemClick = useCallback(function (evt) {
99
+ evt.stopPropagation();
100
+ if (disabled) {
101
+ return;
102
+ }
103
+ if (mode === 'vertical') {
104
+ setOpen(!open);
105
+ if (!open) {
106
+ onOpen === null || onOpen === void 0 || onOpen(index, indexPath, {
107
+ index: index,
108
+ indexPath: indexPath
109
+ });
110
+ } else {
111
+ onClose === null || onClose === void 0 || onClose(index, indexPath, {
112
+ index: index,
113
+ indexPath: indexPath
114
+ });
115
+ }
116
+ }
117
+ }, [disabled, index, indexPath, mode, onClose, onOpen, open]);
118
+ useEffect(function () {
119
+ if (!inited.current) {
120
+ inited.current = true;
121
+ addItems({
122
+ index: index,
123
+ indexPath: indexPath
124
+ });
125
+ addSubMenu({
126
+ index: index,
127
+ indexPath: indexPath,
128
+ openMenu: function openMenu(index, indexPath) {
129
+ // if (mode === 'horizontal') {
130
+ // tooltipRef.current?.onOpen();
131
+ // }
132
+ setOpen(true);
133
+ },
134
+ closeMenu: function closeMenu(index, indexPath) {
135
+ // if (mode === 'horizontal') {
136
+ // tooltipRef.current?.hide();
137
+ // }
138
+ setOpen(false);
139
+ }
140
+ });
141
+ }
142
+ });
143
+ return /*#__PURE__*/React.createElement("li", {
144
+ className: classNames(b(), is({
145
+ disabled: disabled,
146
+ opened: open,
147
+ active: activeIndex.includes(index)
148
+ }), _defineProperty({}, e(_templateObject || (_templateObject = _taggedTemplateLiteral(["hide-arrow"]))), index === '__el__more'), props.className),
149
+ onClick: handleSubMenuItemClick,
150
+ style: props.style,
151
+ role: "menuitem"
152
+ }, mode === 'horizontal' ? /*#__PURE__*/React.createElement(Tooltip, {
153
+ ref: tooltipRef,
154
+ disabled: disabled,
155
+ className: e(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["title"]))),
156
+ trigger: level > 1 ? 'hover' : menuTrigger,
157
+ popperClass: classNames(is('pure'), popperClass),
158
+ popperStyle: themeStyle,
159
+ offset: popperOffset !== null && popperOffset !== void 0 ? popperOffset : props.popperOffset,
160
+ showAfter: level > 1 ? 0 : showTimeout !== null && showTimeout !== void 0 ? showTimeout : props.showTimeout,
161
+ hideAfter: hideTimeout !== null && hideTimeout !== void 0 ? hideTimeout : props.hideTimeout,
162
+ unmountOnExit: false,
163
+ onMouseEnter: handleMouseEnter,
164
+ onMouseLeave: handleMouseLeave,
165
+ content: /*#__PURE__*/React.createElement(MenuContext.Provider, {
166
+ value: _objectSpread({
167
+ activeIndex: activeIndex,
168
+ parentIndex: [].concat(_toConsumableArray(parentIndex), [index]),
169
+ mode: mode,
170
+ menuTrigger: menuTrigger,
171
+ handleSubMenuClick: hideSubMenu,
172
+ addItems: addItems,
173
+ addSubMenu: addSubMenu,
174
+ showTimeout: showTimeout,
175
+ hideTimeout: hideTimeout,
176
+ themeStyle: themeStyle,
177
+ popperOffset: popperOffset
178
+ }, ohter)
179
+ }, /*#__PURE__*/React.createElement("div", {
180
+ className: classNames(mm(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["horizontal"]))), mm(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["popup-container"]))))
181
+ }, /*#__PURE__*/React.createElement("ul", {
182
+ className: "el-menu el-menu--popup el-menu--popup-bottom-start",
183
+ style: {
184
+ '--el-menu-level': level
185
+ }
186
+ }, props.children))),
187
+ showArrow: false,
188
+ placement: level > 1 ? 'right-start' : 'bottom-start',
189
+ effect: "light"
190
+ }, /*#__PURE__*/React.createElement("div", null, title, /*#__PURE__*/React.createElement(Icon, {
191
+ className: e(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["icon-arrow"]))),
192
+ name: level > 1 ? 'angle-right' : 'angle-down',
193
+ prefix: "fal",
194
+ style: {
195
+ transform: open ? 'rotateZ(180deg)' : 'none'
196
+ }
197
+ }))) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
198
+ className: classNames(e(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["title"]))))
199
+ }, title, /*#__PURE__*/React.createElement(Icon, {
200
+ className: e(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["icon-arrow"]))),
201
+ name: "angle-down",
202
+ prefix: "fal",
203
+ style: {
204
+ transform: open ? 'rotateZ(180deg)' : 'none'
205
+ }
206
+ })), /*#__PURE__*/React.createElement(Transition, {
207
+ name: "el-menu-collapse",
208
+ nodeRef: ulRef,
209
+ disabled: disabled,
210
+ duration: 300,
211
+ visible: open,
212
+ beforeEnter: beforeEnter,
213
+ onEnter: onEnter,
214
+ afterEnter: afterEnter,
215
+ beforeLeave: beforeLeave,
216
+ onLeave: onLeave,
217
+ afterLeave: afterLeave
218
+ }, /*#__PURE__*/React.createElement("ul", {
219
+ ref: ulRef,
220
+ className: classNames(mb(), mm(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["inline"])))),
221
+ style: {
222
+ '--el-menu-level': level
223
+ }
224
+ }, /*#__PURE__*/React.createElement(MenuContext.Provider, {
225
+ value: _objectSpread({
226
+ activeIndex: activeIndex,
227
+ parentIndex: [].concat(_toConsumableArray(parentIndex), [index]),
228
+ mode: mode,
229
+ menuTrigger: menuTrigger,
230
+ onOpen: onOpen,
231
+ onClose: onClose,
232
+ addItems: addItems,
233
+ addSubMenu: addSubMenu,
234
+ handleSubMenuClick: hideSubMenu,
235
+ showTimeout: showTimeout,
236
+ hideTimeout: hideTimeout,
237
+ themeStyle: themeStyle,
238
+ popperOffset: popperOffset
239
+ }, ohter)
240
+ }, props.children)))));
241
+ };
242
+ export default SubMenu;
@@ -0,0 +1,6 @@
1
+ export declare const beforeEnter: (el: any) => void;
2
+ export declare const onEnter: (el: HTMLElement) => void;
3
+ export declare const afterEnter: (el: HTMLElement) => void;
4
+ export declare const beforeLeave: (el: any) => void;
5
+ export declare const onLeave: (el: any) => void;
6
+ export declare const afterLeave: (el: any) => void;
@@ -0,0 +1,52 @@
1
+ import { addClass, removeClass } from 'dom-lib';
2
+ export var beforeEnter = function beforeEnter(el) {
3
+ el.style.height = '0';
4
+ el.style.opacity = '0';
5
+ };
6
+ export var onEnter = function onEnter(el) {
7
+ addClass(el, 'collapse-transition');
8
+ el.dataset.oldOverflow = el.style.overflow;
9
+ if (el.scrollHeight !== 0) {
10
+ el.style.height = "".concat(el.scrollHeight, "px");
11
+ } else {
12
+ el.style.height = '';
13
+ }
14
+ el.style.overflow = 'hidden';
15
+ el.style.opacity = '1';
16
+ addClass(closest(el, 'li'), 'open');
17
+ };
18
+ export var afterEnter = function afterEnter(el) {
19
+ removeClass(el, 'collapse-transition');
20
+ el.style.height = '';
21
+ el.style.overflow = el.dataset.oldOverflow;
22
+ };
23
+ export var beforeLeave = function beforeLeave(el) {
24
+ addClass(el, 'collapse-transition');
25
+ if (!el.dataset) {
26
+ el.dataset = {};
27
+ }
28
+ el.dataset.oldOverflow = el.style.overflow;
29
+ el.style.height = "".concat(el.scrollHeight, "px");
30
+ el.style.overflow = 'hidden';
31
+ el.style.margin = 0;
32
+ };
33
+ export var onLeave = function onLeave(el) {
34
+ el.style.transitionProperty = 'height';
35
+ el.style.height = 0;
36
+ };
37
+ export var afterLeave = function afterLeave(el) {
38
+ el.style.height = '';
39
+ el.style.overflow = el.dataset.oldOverflow;
40
+ el.style.display = '';
41
+ removeClass(closest(el, 'li'), 'open');
42
+ };
43
+ var closest = function closest(el, selector) {
44
+ var matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
45
+ while (el) {
46
+ if (matchesSelector.call(el, selector)) {
47
+ break;
48
+ }
49
+ el = el.parentElement;
50
+ }
51
+ return el;
52
+ };
@@ -0,0 +1,5 @@
1
+ export { default as Menu } from './Menu';
2
+ export { default as MenuItem } from './MenuItem';
3
+ export { default as MenuItemGroup } from './MenuItemGroup';
4
+ export { default as SubMenu } from './SubMenu';
5
+ export type { MenuCloseEvent, MenuItemClicked, MenuItemGroupProps, MenuItemProps, MenuItemRegistered, MenuOpenEvent, MenuProps, MenuRef, MenuSelectEvent, SubMenuProps, } from './typings';
@@ -0,0 +1,4 @@
1
+ export { default as Menu } from "./Menu";
2
+ export { default as MenuItem } from "./MenuItem";
3
+ export { default as MenuItemGroup } from "./MenuItemGroup";
4
+ export { default as SubMenu } from "./SubMenu";
@@ -0,0 +1,121 @@
1
+ import React from 'react';
2
+ import { IconName } from '../Icon';
3
+ import { BaseProps, NativeProps } from '../types/common';
4
+ export interface MenuRef {
5
+ open: MenuOpenEvent;
6
+ close: MenuCloseEvent;
7
+ }
8
+ export interface MenuProps extends BaseProps, NativeProps<'--el-menu-active-color' | '--el-menu-text-color' | '--el-menu-hover-text-color' | '--el-menu-bg-color' | '--el-menu-hover-bg-color' | '--el-menu-item-height' | '--el-menu-sub-item-height' | '--el-menu-horizontal-height' | '--el-menu-horizontal-sub-item-height' | '--el-menu-item-font-size' | '--el-menu-item-hover-fill' | '--el-menu-border-color' | '--el-menu-base-level-padding' | '--el-menu-level-padding' | '--el-menu-icon-width'> {
9
+ /** 菜单展示模式 */
10
+ mode?: 'horizontal' | 'vertical';
11
+ /** 页面加载时默认激活菜单的 index */
12
+ defaultActive?: string;
13
+ /** 是否水平折叠收起菜单(仅在 mode 为 vertical 时可用) */
14
+ collapse?: boolean;
15
+ /** 是否省略多余的子项(仅在横向模式生效) */
16
+ ellipsis?: boolean;
17
+ /** 自定义省略图标 (仅在水平模式下可用) */
18
+ ellipsisIcon?: string | React.ReactElement;
19
+ /** 弹出层的偏移量(对所有子菜单有效) */
20
+ popperOffset?: number;
21
+ /** 默认打开的 subMenu 的 index 的数组 */
22
+ defaultOpeneds?: string[];
23
+ /** 是否只保持一个子菜单的展开 */
24
+ uniqueOpened?: boolean;
25
+ /** 子菜单打开的触发方式,只在 mode 为 horizontal 时有效 */
26
+ menuTrigger?: 'hover' | 'click';
27
+ /** 是否启用 vue-router 模式。 启用该模式会在激活导航时以 index 作为 path 进行路由跳转 使用 defaultActive 来设置加载时的激活项。 */
28
+ router?: boolean;
29
+ /** 是否开启折叠动画 */
30
+ collapseTransition?: boolean;
31
+ /** 是Tooltip 主题,内置了 dark / light 两种主题,当菜单折叠时生效。 */
32
+ popperEffect?: 'dark' | 'light' | string;
33
+ /** 可选,单击外部时是否折叠菜单 */
34
+ closeOnClickOutside?: boolean;
35
+ /** 为 popper 添加类名 */
36
+ popperClass?: string;
37
+ /** 菜单出现前的延迟 */
38
+ showTimeout?: number;
39
+ /** 菜单消失前的延迟 */
40
+ hideTimeout?: number;
41
+ /** 菜单激活回调 */
42
+ onSelect?: MenuSelectEvent;
43
+ /** sub-menu 展开的回调 */
44
+ onOpen?: MenuSelectEvent;
45
+ /** sub-menu 收起的回调 */
46
+ onClose?: MenuSelectEvent;
47
+ }
48
+ export interface SubMenuProps extends BaseProps, NativeProps {
49
+ /** 唯一标志 */
50
+ index: string;
51
+ title: string | React.ReactElement;
52
+ /** 为 popper 添加类名 */
53
+ popperClass?: string;
54
+ /** 子菜单出现之前的延迟,(继承 menu 的 `showTimeout` 配置) */
55
+ showTimeout?: number;
56
+ /** 子菜单消失之前的延迟,(继承 menu 的 `hideTimeout` 配置) */
57
+ hideTimeout?: number;
58
+ /** 是否禁用 */
59
+ disabled?: boolean;
60
+ /** 是否将弹出菜单挂载到 body 上,第一级 SubMenu 默认值为 true,其他 SubMenus 的值为 false */
61
+ appendToBody?: boolean;
62
+ /** 弹出窗口的偏移量 (覆盖 `popper`的菜单) */
63
+ popperOffset?: number;
64
+ /** 父菜单展开且子菜单关闭时的图标, `expandCloseIcon` 和 `expandOpenIcon` 需要一起配置才能生效 */
65
+ expandCloseIcon?: IconName | React.ReactElement;
66
+ /** 父菜单展开且子菜单打开时的图标, `expandOpenIcon` 和 `expandCloseIcon` 需要一起配置才能生效 */
67
+ expandOpenIcon?: IconName | React.ReactElement;
68
+ /** 父菜单收起且子菜单关闭时的图标, `collapseCloseIcon` 和 `collapseOpenIcon` 需要一起配置才能生效 */
69
+ collapseCloseIcon?: IconName | React.ReactElement;
70
+ /** 父菜单收起且子菜单打开时的图标, `collapseOpenIcon` 和 `collapseCloseIcon` 需要一起配置才能生效 */
71
+ collapseOpenIcon?: IconName | React.ReactElement;
72
+ }
73
+ export interface MenuItemProps extends BaseProps, NativeProps {
74
+ /** 唯一标志 */
75
+ index: string;
76
+ /** 是否禁用 */
77
+ disabled?: boolean;
78
+ /** react-router-dom 路由位置参数 */
79
+ route?: string;
80
+ /** 点击菜单项时回调函数, 参数为菜单项实例 */
81
+ onClick?: (item: MenuItemRegistered) => void;
82
+ }
83
+ export interface MenuItemGroupProps extends BaseProps, NativeProps {
84
+ /** 组标题 */
85
+ title: string;
86
+ }
87
+ /**
88
+ * @param index index of activated menu
89
+ * @param indexPath index path of activated menu
90
+ * @param item the selected menu item
91
+ * @param routerResult result returned by `vue-router` if `router` is enabled
92
+ */
93
+ export type MenuSelectEvent = (index: string, indexPath: string[], item: MenuItemClicked) => void;
94
+ /**
95
+ * @param index index of expanded sub-menu
96
+ * @param indexPath index path of expanded sub-menu
97
+ */
98
+ export type MenuOpenEvent = (index: string, indexPath: string[]) => void;
99
+ /**
100
+ * @param index index of collapsed sub-menu
101
+ * @param indexPath index path of collapsed sub-menu
102
+ */
103
+ export type MenuCloseEvent = (index: string, indexPath: string[]) => void;
104
+ export interface MenuItemRegistered {
105
+ index: string;
106
+ indexPath: string[];
107
+ active?: boolean;
108
+ }
109
+ export interface MenuItemClicked {
110
+ index: string;
111
+ indexPath: string[];
112
+ route?: string;
113
+ }
114
+ export interface SubMenuProvider {
115
+ index: string;
116
+ indexPath: string[];
117
+ /** 打开菜单 */
118
+ openMenu: MenuOpenEvent;
119
+ /** 关闭菜单 */
120
+ closeMenu: MenuCloseEvent;
121
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { RefObject } from 'react';
2
+ import { MenuProps } from './typings';
3
+ declare const useEllipsis: (menuRef: RefObject<HTMLUListElement | null>, props: MenuProps) => {
4
+ sliceIndex: number;
5
+ };
6
+ export default useEllipsis;
@@ -0,0 +1,82 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { useEffect, useRef, useState } from 'react';
8
+ import { useResizeObserver } from "../hooks/useResizeObserver";
9
+ var useEllipsis = function useEllipsis(menuRef, props) {
10
+ var _useState = useState(-1),
11
+ _useState2 = _slicedToArray(_useState, 2),
12
+ sliceIndex = _useState2[0],
13
+ setSliceIndex = _useState2[1];
14
+ var isFirstTimeRender = useRef(true);
15
+ var calcMenuItemWidth = function calcMenuItemWidth(menuItem) {
16
+ var computedStyle = getComputedStyle(menuItem);
17
+ var marginLeft = Number.parseInt(computedStyle.marginLeft, 10);
18
+ var marginRight = Number.parseInt(computedStyle.marginRight, 10);
19
+ return menuItem.offsetWidth + marginLeft + marginRight || 0;
20
+ };
21
+ var calcSliceIndex = function calcSliceIndex() {
22
+ var _menuRef$current$chil, _menuRef$current;
23
+ if (!menuRef.current) {
24
+ return -1;
25
+ }
26
+ var items = Array.from((_menuRef$current$chil = (_menuRef$current = menuRef.current) === null || _menuRef$current === void 0 ? void 0 : _menuRef$current.childNodes) !== null && _menuRef$current$chil !== void 0 ? _menuRef$current$chil : []).filter(function (item) {
27
+ return item.nodeName !== '#text' || item.nodeValue;
28
+ });
29
+ var moreItemWidth = 64;
30
+ var computedMenuStyle = getComputedStyle(menuRef.current);
31
+ var paddingLeft = Number.parseInt(computedMenuStyle.paddingLeft, 10);
32
+ var paddingRight = Number.parseInt(computedMenuStyle.paddingRight, 10);
33
+ var menuWidth = menuRef.current.clientWidth - paddingLeft - paddingRight;
34
+ var calcWidth = 0;
35
+ var _sliceIndex = 0;
36
+ items.forEach(function (item, index) {
37
+ if (item.nodeName === '#comment') {
38
+ return;
39
+ }
40
+ calcWidth += calcMenuItemWidth(item);
41
+ if (calcWidth <= menuWidth - moreItemWidth) {
42
+ _sliceIndex = index + 1;
43
+ }
44
+ });
45
+ return _sliceIndex === items.length ? -1 : _sliceIndex;
46
+ };
47
+ var debounce = function debounce(fn) {
48
+ var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 33.34;
49
+ var timmer;
50
+ return function () {
51
+ timmer && clearTimeout(timmer);
52
+ timmer = setTimeout(function () {
53
+ fn();
54
+ }, wait);
55
+ };
56
+ };
57
+ var handleResize = function handleResize() {
58
+ if (props.mode === 'horizontal' && props.ellipsis) {
59
+ // if (sliceIndex === calcSliceIndex()) {
60
+ // return;
61
+ // }
62
+ var callback = function callback() {
63
+ setSliceIndex(-1);
64
+ requestAnimationFrame(function () {
65
+ setSliceIndex(calcSliceIndex());
66
+ });
67
+ };
68
+ // execute callback directly when first time resize to avoid shaking
69
+ isFirstTimeRender.current ? callback() : debounce(callback)();
70
+ isFirstTimeRender.current = false;
71
+ }
72
+ };
73
+ var _useResizeObserver = useResizeObserver(menuRef, handleResize),
74
+ resizeStopper = _useResizeObserver.stop;
75
+ useEffect(function () {
76
+ return resizeStopper;
77
+ }, []);
78
+ return {
79
+ sliceIndex: sliceIndex
80
+ };
81
+ };
82
+ export default useEllipsis;
@@ -1,6 +1,6 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
2
  var _templateObject;
3
- var _excluded = ["id", "visible", "onDestroy", "referenceElement", "children", "appendToBody", "appendTo", "className", "popperClass", "showArrow", "popperStyle", "popperInstRef", "onMouseEnter", "onMouseLeave", "effect"];
3
+ var _excluded = ["visible", "onDestroy", "referenceElement", "children", "appendToBody", "appendTo", "className", "popperClass", "showArrow", "popperStyle", "popperInstRef", "onMouseEnter", "onMouseLeave", "effect"];
4
4
  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); }
5
5
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
6
6
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -40,8 +40,6 @@ var Popper = /*#__PURE__*/forwardRef(function (props, ref) {
40
40
  strategy: 'absolute'
41
41
  }, props);
42
42
  var _props = props,
43
- _props$id = _props.id,
44
- id = _props$id === void 0 ? randomCode(5) : _props$id,
45
43
  visible = _props.visible,
46
44
  onDestroy = _props.onDestroy,
47
45
  referenceElement = _props.referenceElement,
@@ -62,6 +60,13 @@ var Popper = /*#__PURE__*/forwardRef(function (props, ref) {
62
60
  var _partitionAnimationPr = partitionAnimationProps(rest),
63
61
  _partitionAnimationPr2 = _slicedToArray(_partitionAnimationPr, 1),
64
62
  transitionProps = _partitionAnimationPr2[0];
63
+ var id = useMemo(function () {
64
+ var _props$id;
65
+ return (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : randomCode(5);
66
+ }, [props.id]);
67
+ var zIndex = useMemo(function () {
68
+ return PopupManager.nextZIndex();
69
+ }, []);
65
70
  var _useClassNames = useClassNames('popper'),
66
71
  b = _useClassNames.b,
67
72
  e = _useClassNames.e,
@@ -150,7 +155,7 @@ var Popper = /*#__PURE__*/forwardRef(function (props, ref) {
150
155
  onMouseEnter: onMouseEnter,
151
156
  onMouseLeave: onMouseLeave,
152
157
  style: _objectSpread(_objectSpread(_objectSpread({}, styles.popper), popperStyle), {}, {
153
- zIndex: PopupManager.nextZIndex()
158
+ zIndex: zIndex
154
159
  })
155
160
  }, attributes.popper, {
156
161
  ref: setPopperElement
@@ -1,4 +1,4 @@
1
- import { Options, Placement, StrictModifiers } from '@popperjs/core';
1
+ import { Options, Placement, State, StrictModifiers } from '@popperjs/core';
2
2
  interface IUsePopperProps {
3
3
  popperOptions?: Options;
4
4
  arrowOffset?: number;
@@ -17,7 +17,7 @@ export default function usePopperOptions(props: IUsePopperProps, arrowElement: a
17
17
  modifiers: StrictModifiers[];
18
18
  placement: Placement;
19
19
  strategy: import("@popperjs/core").PositioningStrategy;
20
- onFirstUpdate?: (arg0: Partial<import("@popperjs/core").State>) => void;
20
+ onFirstUpdate?: (arg0: Partial<State>) => void;
21
21
  };
22
22
  export declare function buildModifier(props: ModifierProps, externalModifiers?: StrictModifiers[]): StrictModifiers[];
23
23
  export {};
@@ -10,6 +10,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
10
10
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
11
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
12
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
+ import fromPairs from 'lodash/fromPairs';
13
14
  import { useMemo } from 'react';
14
15
  export default function usePopperOptions(props, arrowElement) {
15
16
  return useMemo(function () {
@@ -28,6 +29,32 @@ export default function usePopperOptions(props, arrowElement) {
28
29
  });
29
30
  }, [arrowElement, props.arrowOffset, props.gpuAcceleration, props.offset, props.placement, props.popperOptions]);
30
31
  }
32
+ function deriveState(state) {
33
+ var elements = Object.keys(state.elements);
34
+ var styles = fromPairs(elements.map(function (element) {
35
+ return [element, state.styles[element] || {}];
36
+ }));
37
+ var attributes = fromPairs(elements.map(function (element) {
38
+ return [element, state.attributes[element]];
39
+ }));
40
+ return {
41
+ styles: styles,
42
+ attributes: attributes
43
+ };
44
+ }
45
+ var states = {
46
+ styles: {
47
+ popper: {
48
+ position: 'absolute',
49
+ left: '0',
50
+ top: '0'
51
+ },
52
+ arrow: {
53
+ position: 'absolute'
54
+ }
55
+ },
56
+ attributes: {}
57
+ };
31
58
  export function buildModifier(props) {
32
59
  var externalModifiers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
33
60
  var arrow = props.arrow,
@@ -50,6 +77,16 @@ export function buildModifier(props) {
50
77
  right: 5
51
78
  }
52
79
  }
80
+ }, {
81
+ name: 'updateState',
82
+ enabled: true,
83
+ phase: 'write',
84
+ fn: function fn(_ref) {
85
+ var state = _ref.state;
86
+ var derivedState = deriveState(state);
87
+ Object.assign(states, derivedState);
88
+ },
89
+ requires: ['computeStyles']
53
90
  }, {
54
91
  name: 'flip',
55
92
  options: {
@@ -67,11 +104,13 @@ export function buildModifier(props) {
67
104
  gpuAcceleration: gpuAcceleration,
68
105
  adaptive: gpuAcceleration
69
106
  }
70
- }, {
107
+ },
108
+ // { name: 'applyStyles', enabled: false },
109
+ {
71
110
  name: 'eventListeners',
72
111
  enabled: true,
73
112
  options: {
74
- scroll: true,
113
+ scroll: false,
75
114
  resize: true
76
115
  }
77
116
  }