@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.
@@ -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,4CAiSzD,CAAC;AAEF,eAAe,QAAQ,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,
@@ -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,kHA4IT,CAAC;AAEF,eAAe,IAAI,CAAC"}
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: props.defaultOpenKeys,
85
+ defaultOpenKeys: mergedDefaultOpenKeys,
59
86
  openKeys: props.openKeys,
60
87
  onOpenChange: props.onOpenChange
61
88
  }),
@@ -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,4CAiSzD,CAAC;AAEF,eAAe,QAAQ,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,
@@ -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,kHA4IT,CAAC;AAEF,eAAe,IAAI,CAAC"}
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: props.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",
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.3",
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"