@sheinx/base 3.9.10-beta.3 → 3.9.10-beta.4
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/item.d.ts.map +1 -1
- package/cjs/menu/item.js +11 -0
- package/cjs/menu/menu.d.ts.map +1 -1
- package/cjs/menu/menu.js +28 -1
- package/esm/menu/item.d.ts.map +1 -1
- package/esm/menu/item.js +11 -0
- package/esm/menu/menu.d.ts.map +1 -1
- package/esm/menu/menu.js +29 -2
- package/package.json +2 -2
package/cjs/menu/item.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,QAAQ,UAAW,mBAAmB,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,QAAQ,UAAW,mBAAmB,aAAa,CAAC,4CA4SzD,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/cjs/menu/item.js
CHANGED
|
@@ -84,6 +84,12 @@ var MenuItem = function MenuItem(props) {
|
|
|
84
84
|
handleMouseEnter = _useMenuItem.handleMouseEnter,
|
|
85
85
|
handleMouseLeave = _useMenuItem.handleMouseLeave;
|
|
86
86
|
|
|
87
|
+
// inline 模式懒渲染:跟踪子菜单是否曾被展开过
|
|
88
|
+
var hasBeenOpened = (0, _react.useRef)(isOpen);
|
|
89
|
+
if (isOpen) {
|
|
90
|
+
hasBeenOpened.current = true;
|
|
91
|
+
}
|
|
92
|
+
|
|
87
93
|
// 为 inline 模式添加折叠动画(仅当 inlineAnimate 为 true 时启用)
|
|
88
94
|
var _useCollapseAnimation = (0, _hooks.useCollapseAnimation)(childrenRef, {
|
|
89
95
|
isOpen: isOpen,
|
|
@@ -119,6 +125,11 @@ var MenuItem = function MenuItem(props) {
|
|
|
119
125
|
return null;
|
|
120
126
|
}
|
|
121
127
|
}
|
|
128
|
+
|
|
129
|
+
// inline 模式懒渲染:未曾展开过的子菜单不渲染 DOM
|
|
130
|
+
if (!shoudPop && !isOpen && !hasBeenOpened.current) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
122
133
|
var content = function content(close) {
|
|
123
134
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
|
|
124
135
|
ref: childrenRef,
|
package/cjs/menu/menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["menu.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,QAAA,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["menu.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,QAAA,MAAM,IAAI,kHAmKT,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/cjs/menu/menu.js
CHANGED
|
@@ -16,6 +16,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
16
16
|
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; }
|
|
17
17
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
18
18
|
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); }
|
|
19
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
20
|
+
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."); }
|
|
21
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
22
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
19
23
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
20
24
|
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."); }
|
|
21
25
|
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); }
|
|
@@ -52,10 +56,33 @@ var Menu = function Menu(props) {
|
|
|
52
56
|
_useState2 = _slicedToArray(_useState, 2),
|
|
53
57
|
hasOpen = _useState2[0],
|
|
54
58
|
setHasOpen = _useState2[1];
|
|
59
|
+
|
|
60
|
+
// 当使用 active 函数且 openKeys 非受控时,自动展开激活项的父级菜单
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
+
var mergedDefaultOpenKeys = (0, _react.useMemo)(function () {
|
|
63
|
+
if (props.openKeys !== undefined || !props.active) return props.defaultOpenKeys;
|
|
64
|
+
var parentKeys = [];
|
|
65
|
+
var walk = function walk(items, ancestors) {
|
|
66
|
+
items.forEach(function (item, index) {
|
|
67
|
+
var _item$children;
|
|
68
|
+
var key = _hooks.util.getKey(props.keygen, item, index);
|
|
69
|
+
if (props.active(item)) {
|
|
70
|
+
parentKeys.push.apply(parentKeys, _toConsumableArray(ancestors));
|
|
71
|
+
}
|
|
72
|
+
if ((_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length) {
|
|
73
|
+
walk(item.children, [].concat(_toConsumableArray(ancestors), [key]));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
walk(data, []);
|
|
78
|
+
if (!parentKeys.length) return props.defaultOpenKeys;
|
|
79
|
+
var merged = new Set([].concat(_toConsumableArray(props.defaultOpenKeys || []), parentKeys));
|
|
80
|
+
return Array.from(merged);
|
|
81
|
+
}, []);
|
|
55
82
|
var _useMenu = (0, _hooks.useMenu)({
|
|
56
83
|
data: data,
|
|
57
84
|
active: props.active,
|
|
58
|
-
defaultOpenKeys:
|
|
85
|
+
defaultOpenKeys: mergedDefaultOpenKeys,
|
|
59
86
|
openKeys: props.openKeys,
|
|
60
87
|
onOpenChange: props.onOpenChange
|
|
61
88
|
}),
|
package/esm/menu/item.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,QAAQ,UAAW,mBAAmB,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,QAAQ,UAAW,mBAAmB,aAAa,CAAC,4CA4SzD,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/esm/menu/item.js
CHANGED
|
@@ -78,6 +78,12 @@ var MenuItem = function MenuItem(props) {
|
|
|
78
78
|
handleMouseEnter = _useMenuItem.handleMouseEnter,
|
|
79
79
|
handleMouseLeave = _useMenuItem.handleMouseLeave;
|
|
80
80
|
|
|
81
|
+
// inline 模式懒渲染:跟踪子菜单是否曾被展开过
|
|
82
|
+
var hasBeenOpened = useRef(isOpen);
|
|
83
|
+
if (isOpen) {
|
|
84
|
+
hasBeenOpened.current = true;
|
|
85
|
+
}
|
|
86
|
+
|
|
81
87
|
// 为 inline 模式添加折叠动画(仅当 inlineAnimate 为 true 时启用)
|
|
82
88
|
var _useCollapseAnimation = useCollapseAnimation(childrenRef, {
|
|
83
89
|
isOpen: isOpen,
|
|
@@ -113,6 +119,11 @@ var MenuItem = function MenuItem(props) {
|
|
|
113
119
|
return null;
|
|
114
120
|
}
|
|
115
121
|
}
|
|
122
|
+
|
|
123
|
+
// inline 模式懒渲染:未曾展开过的子菜单不渲染 DOM
|
|
124
|
+
if (!shoudPop && !isOpen && !hasBeenOpened.current) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
116
127
|
var content = function content(close) {
|
|
117
128
|
return /*#__PURE__*/_jsx("ul", {
|
|
118
129
|
ref: childrenRef,
|
package/esm/menu/menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["menu.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,QAAA,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["menu.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,QAAA,MAAM,IAAI,kHAmKT,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/esm/menu/menu.js
CHANGED
|
@@ -4,13 +4,17 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
4
4
|
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; }
|
|
5
5
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
6
|
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); }
|
|
7
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
8
|
+
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."); }
|
|
9
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
10
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
7
11
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
12
|
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."); }
|
|
9
13
|
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); }
|
|
10
14
|
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; }
|
|
11
15
|
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; } }
|
|
12
16
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
-
import { useEffect, useRef, useState } from 'react';
|
|
17
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
14
18
|
import { useMenu, util, useRender } from '@sheinx/hooks';
|
|
15
19
|
import Item from "./item";
|
|
16
20
|
import classNames from 'classnames';
|
|
@@ -47,10 +51,33 @@ var Menu = function Menu(props) {
|
|
|
47
51
|
_useState2 = _slicedToArray(_useState, 2),
|
|
48
52
|
hasOpen = _useState2[0],
|
|
49
53
|
setHasOpen = _useState2[1];
|
|
54
|
+
|
|
55
|
+
// 当使用 active 函数且 openKeys 非受控时,自动展开激活项的父级菜单
|
|
56
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
57
|
+
var mergedDefaultOpenKeys = useMemo(function () {
|
|
58
|
+
if (props.openKeys !== undefined || !props.active) return props.defaultOpenKeys;
|
|
59
|
+
var parentKeys = [];
|
|
60
|
+
var walk = function walk(items, ancestors) {
|
|
61
|
+
items.forEach(function (item, index) {
|
|
62
|
+
var _item$children;
|
|
63
|
+
var key = util.getKey(props.keygen, item, index);
|
|
64
|
+
if (props.active(item)) {
|
|
65
|
+
parentKeys.push.apply(parentKeys, _toConsumableArray(ancestors));
|
|
66
|
+
}
|
|
67
|
+
if ((_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length) {
|
|
68
|
+
walk(item.children, [].concat(_toConsumableArray(ancestors), [key]));
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
walk(data, []);
|
|
73
|
+
if (!parentKeys.length) return props.defaultOpenKeys;
|
|
74
|
+
var merged = new Set([].concat(_toConsumableArray(props.defaultOpenKeys || []), parentKeys));
|
|
75
|
+
return Array.from(merged);
|
|
76
|
+
}, []);
|
|
50
77
|
var _useMenu = useMenu({
|
|
51
78
|
data: data,
|
|
52
79
|
active: props.active,
|
|
53
|
-
defaultOpenKeys:
|
|
80
|
+
defaultOpenKeys: mergedDefaultOpenKeys,
|
|
54
81
|
openKeys: props.openKeys,
|
|
55
82
|
onOpenChange: props.onOpenChange
|
|
56
83
|
}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sheinx/base",
|
|
3
|
-
"version": "3.9.10-beta.
|
|
3
|
+
"version": "3.9.10-beta.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"module": "./esm/index.js",
|
|
11
11
|
"typings": "./cjs/index.d.ts",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@sheinx/hooks": "3.9.10-beta.
|
|
13
|
+
"@sheinx/hooks": "3.9.10-beta.4",
|
|
14
14
|
"immer": "^10.0.0",
|
|
15
15
|
"classnames": "^2.0.0",
|
|
16
16
|
"@shined/reactive": "^0.3.3"
|