@hi-ui/menu 4.1.7 → 4.2.0-alpha.1

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.
@@ -80,7 +80,7 @@ var MenuItem = /*#__PURE__*/React.forwardRef(function (_a, ref) {
80
80
  className: 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),
81
81
  style: hidden ? hiddenStyle : undefined
82
82
  }, rest), /*#__PURE__*/React__default["default"].createElement("div", {
83
- className: 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)),
83
+ className: 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[prefixCls + "-item__inner--hasIcon"] = icon, _cx2)),
84
84
  onClick: function onClick() {
85
85
  if (typeAssertion.isArrayNonEmpty(children)) {
86
86
  !disabled && (clickSubMenu === null || clickSubMenu === void 0 ? void 0 : clickSubMenu(id));
@@ -98,11 +98,11 @@ var MenuItem = /*#__PURE__*/React.forwardRef(function (_a, ref) {
98
98
  className: prefixCls + "-item__icon"
99
99
  }, icon) : null, /*#__PURE__*/React__default["default"].createElement("span", {
100
100
  className: prefixCls + "-item__content"
101
- }, typeAssertion.isFunction(render) ? render({
101
+ }, typeAssertion.isFunction(render) ? render(Object.assign(Object.assign({}, raw), {
102
102
  id: id,
103
103
  icon: icon,
104
104
  title: title
105
- }, level) : title), hasChildren && !mini && placement === 'vertical' && expandedType === 'collapse' && !showAllSubMenus && (!disabled && (expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? ( /*#__PURE__*/React__default["default"].createElement(Arrow, {
105
+ }), level) : title), hasChildren && !mini && placement === 'vertical' && expandedType === 'collapse' && !showAllSubMenus && (!disabled && (expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? ( /*#__PURE__*/React__default["default"].createElement(Arrow, {
106
106
  prefixCls: prefixCls + "-item",
107
107
  direction: "up"
108
108
  })) : ( /*#__PURE__*/React__default["default"].createElement(Arrow, {
@@ -0,0 +1,181 @@
1
+ /** @LICENSE
2
+ * @hi-ui/menu
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/menu#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ var _typeof = require("@babel/runtime/helpers/typeof");
13
+ Object.defineProperty(exports, '__esModule', {
14
+ value: true
15
+ });
16
+ var React = require('react');
17
+ var classname = require('@hi-ui/classname');
18
+ var icons = require('@hi-ui/icons');
19
+ var env = require('@hi-ui/env');
20
+ var useUncontrolledState = require('@hi-ui/use-uncontrolled-state');
21
+ var useToggle = require('@hi-ui/use-toggle');
22
+ var typeAssertion = require('@hi-ui/type-assertion');
23
+ var util = require('./util.js');
24
+ var Menu = require('./Menu.js');
25
+ function _interopDefaultCompat(e) {
26
+ return e && _typeof(e) === 'object' && 'default' in e ? e : {
27
+ 'default': e
28
+ };
29
+ }
30
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
31
+ var SIDEBAR_PREFIX = classname.getPrefixCls('sidebar');
32
+ var NOOP_ARRAY = [];
33
+ /**
34
+ * 侧边栏菜单
35
+ */
36
+ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
37
+ var _ref$prefixCls = _ref.prefixCls,
38
+ prefixCls = _ref$prefixCls === void 0 ? SIDEBAR_PREFIX : _ref$prefixCls,
39
+ _ref$role = _ref.role,
40
+ role = _ref$role === void 0 ? 'sidebar' : _ref$role,
41
+ _ref$data = _ref.data,
42
+ data = _ref$data === void 0 ? NOOP_ARRAY : _ref$data,
43
+ _ref$showCollapse = _ref.showCollapse,
44
+ showCollapse = _ref$showCollapse === void 0 ? true : _ref$showCollapse,
45
+ _ref$defaultActiveId = _ref.defaultActiveId,
46
+ defaultActiveId = _ref$defaultActiveId === void 0 ? '' : _ref$defaultActiveId,
47
+ activeIdProp = _ref.activeId,
48
+ collapsed = _ref.collapsed,
49
+ _ref$defaultCollapsed = _ref.defaultCollapsed,
50
+ defaultCollapsed = _ref$defaultCollapsed === void 0 ? false : _ref$defaultCollapsed,
51
+ onCollapse = _ref.onCollapse,
52
+ _render = _ref.render,
53
+ extraHeader = _ref.extraHeader,
54
+ onClick = _ref.onClick,
55
+ _ref$showMenuArrow = _ref.showMenuArrow,
56
+ showMenuArrow = _ref$showMenuArrow === void 0 ? false : _ref$showMenuArrow,
57
+ _ref$menuWidth = _ref.menuWidth,
58
+ menuWidth = _ref$menuWidth === void 0 ? 180 : _ref$menuWidth;
59
+ var _useUncontrolledState = useUncontrolledState.useUncontrolledState(defaultActiveId, activeIdProp, onClick),
60
+ activeId = _useUncontrolledState[0],
61
+ updateActiveId = _useUncontrolledState[1];
62
+ var _useState = React.useState(function () {
63
+ return util.getAncestorIds(activeId, data);
64
+ }),
65
+ activeParents = _useState[0],
66
+ updateActiveParents = _useState[1];
67
+ // 用于更新菜单
68
+ var _useState2 = React.useState(0),
69
+ menuKey = _useState2[0],
70
+ setMenuKey = _useState2[1];
71
+ var wrapperRef = React.useRef(null);
72
+ var sidebarActiveId = React.useMemo(function () {
73
+ var _a;
74
+ return (_a = activeParents[activeParents.length - 1]) !== null && _a !== void 0 ? _a : activeId;
75
+ }, [activeParents]);
76
+ var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
77
+ defaultVisible: defaultCollapsed,
78
+ visible: collapsed,
79
+ onToggle: onCollapse
80
+ }),
81
+ showMenu = _useUncontrolledToggl[0],
82
+ menuToggleAction = _useUncontrolledToggl[1];
83
+ React.useEffect(function () {
84
+ var _a;
85
+ var newActiveParents = (_a = util.getAncestorIds(activeId, data)) !== null && _a !== void 0 ? _a : '';
86
+ updateActiveParents(newActiveParents);
87
+ }, [activeId, data, updateActiveId]);
88
+ React.useLayoutEffect(function () {
89
+ var _a;
90
+ menuWidth !== undefined && ((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty('--sidebar-menu-width', String(menuWidth)));
91
+ }, [menuWidth]);
92
+ var menuDataMemo = React.useMemo(function () {
93
+ var _a, _b;
94
+ var menuData = (_b = (_a = data.find(function (item) {
95
+ return item.id === sidebarActiveId;
96
+ })) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];
97
+ if (menuData.length > 0) {
98
+ menuToggleAction.on();
99
+ } else {
100
+ menuToggleAction.off();
101
+ }
102
+ return menuData;
103
+ }, [sidebarActiveId, data, menuToggleAction]);
104
+ React.useEffect(function () {
105
+ // 每次菜单数据变化时重新渲染下菜单,否则defaultExpandAll不生效
106
+ setMenuKey(menuKey + 1);
107
+ }, [menuDataMemo]);
108
+ var clickSidebar = React.useCallback(function (id, raw) {
109
+ if (sidebarActiveId === id) {
110
+ return;
111
+ }
112
+ updateActiveId(id, raw);
113
+ }, [sidebarActiveId, updateActiveId]);
114
+ var clickMenu = React.useCallback(function (id, raw) {
115
+ updateActiveId(id, raw);
116
+ }, [updateActiveId]);
117
+ var cls = classname.cx(prefixCls + "-wrapper", showMenu && prefixCls + "-wrapper--showMenu", showMenuArrow && prefixCls + "-wrapper--showMenuArrow");
118
+ return /*#__PURE__*/React__default["default"].createElement("div", {
119
+ className: cls,
120
+ ref: wrapperRef
121
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
122
+ className: "" + prefixCls,
123
+ ref: ref,
124
+ role: role
125
+ }, /*#__PURE__*/React__default["default"].createElement("ul", {
126
+ className: prefixCls + "-list"
127
+ }, data.map(function (item) {
128
+ return /*#__PURE__*/React__default["default"].createElement(SidebarItem, Object.assign({}, item, {
129
+ className: item.id === sidebarActiveId ? prefixCls + "-item--active" : '',
130
+ render: function render() {
131
+ return _render === null || _render === void 0 ? void 0 : _render(item, 0);
132
+ },
133
+ key: item.id,
134
+ onClick: function onClick() {
135
+ return clickSidebar(item.id, item);
136
+ }
137
+ }));
138
+ }))), /*#__PURE__*/React__default["default"].createElement("div", {
139
+ className: classname.cx(prefixCls + "-menu-wrapper")
140
+ }, /*#__PURE__*/React__default["default"].createElement(Menu.Menu, {
141
+ key: menuKey,
142
+ activeId: activeId,
143
+ data: menuDataMemo,
144
+ defaultExpandAll: true,
145
+ onClick: clickMenu,
146
+ style: {
147
+ width: menuWidth
148
+ },
149
+ extraHeader: extraHeader,
150
+ render: _render
151
+ })), menuDataMemo.length > 0 && showCollapse && ( /*#__PURE__*/React__default["default"].createElement("div", {
152
+ className: prefixCls + "-toggle",
153
+ onClick: menuToggleAction.not
154
+ }, /*#__PURE__*/React__default["default"].createElement(icons.RightOutlined, null))));
155
+ });
156
+ if (env.__DEV__) {
157
+ Sidebar.displayName = 'Sidebar';
158
+ }
159
+ var SIDEBAR_ITEM_PREFIX = classname.getPrefixCls('sidebar-item');
160
+ var SidebarItem = function SidebarItem(data) {
161
+ var title = data.title,
162
+ icon = data.icon,
163
+ render = data.render,
164
+ level = data.level,
165
+ className = data.className,
166
+ onClick = data.onClick;
167
+ var prefixCls = SIDEBAR_ITEM_PREFIX;
168
+ var cls = classname.cx(prefixCls, className);
169
+ var renderTitle = React.useCallback(function (data) {
170
+ return typeAssertion.isFunction(render) ? render(data, level) : title;
171
+ }, [level, render, title]);
172
+ return /*#__PURE__*/React__default["default"].createElement("li", {
173
+ className: cls,
174
+ onClick: onClick
175
+ }, icon && /*#__PURE__*/React__default["default"].createElement("div", {
176
+ className: prefixCls + "__icon"
177
+ }, icon), /*#__PURE__*/React__default["default"].createElement("div", {
178
+ className: prefixCls + "__title"
179
+ }, /*#__PURE__*/React__default["default"].createElement("span", null, renderTitle(data))));
180
+ };
181
+ exports.Sidebar = Sidebar;
package/lib/cjs/index.js CHANGED
@@ -14,5 +14,9 @@ Object.defineProperty(exports, '__esModule', {
14
14
  });
15
15
  require('./styles/index.scss.js');
16
16
  var Menu = require('./Menu.js');
17
+ var Sidebar = require('./Sidebar.js');
18
+ var util = require('./util.js');
17
19
  exports.Menu = Menu.Menu;
18
20
  exports["default"] = Menu.Menu;
21
+ exports.Sidebar = Sidebar.Sidebar;
22
+ exports.filterTreeData = util.filterTreeData;
@@ -12,7 +12,7 @@
12
12
  Object.defineProperty(exports, '__esModule', {
13
13
  value: true
14
14
  });
15
- var css_248z = ".hi-v4-menu-fat-menu {background-color: var(--hi-v4-color-static-white, #fff);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);display: -webkit-box;display: -ms-flexbox;display: flex;color: var(--hi-v4-color-gray-700, #1f2733);border-radius: var(--hi-v4-border-radius-md, 4px);-ms-flex-wrap: wrap;flex-wrap: wrap;}.hi-v4-menu-fat-menu__group:not(:last-of-type) {margin-right: var(--hi-v4-spacing-18, 36px);}.hi-v4-menu-fat-menu .hi-v4-menu-group-item {height: 40px;margin: 0;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-6, 12px);color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-menu-fat-menu .hi-v4-menu-item {height: 40px;margin: 0;border-radius: var(--hi-v4-border-radius-md, 4px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);}.hi-v4-menu-fat-menu .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-fat-menu .hi-v4-menu-item:not(.hi-v4-menu-item--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-fat-menu .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-fat-menu ul {padding: 0;margin: 0;}.hi-v4-menu-fat-menu ul li {list-style-type: none;}.hi-v4-menu-popmenu {background-color: var(--hi-v4-color-static-white, #fff);border-radius: var(--hi-v4-border-radius-md, 4px);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);color: var(--hi-v4-color-gray-700, #1f2733);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu-popmenu .hi-v4-menu-item {height: 40px;margin: 0;}.hi-v4-menu-popmenu .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;height: 40px;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-popmenu .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;padding-right: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu {background-color: var(--hi-v4-color-static-white, #fff);color: var(--hi-v4-color-gray-700, #1f2733);font-size: var(--hi-v4-text-size-md, 0.875rem);line-height: var(--hi-v4-text-lineheight-md, 1.375rem);-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu ul {margin: 0;padding: 0;}.hi-v4-menu-item {list-style: none;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: pointer;-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-500, #929aa6);-webkit-margin-end: var(--hi-v4-spacing-4, 8px);margin-inline-end: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu-item__icon svg[class^=hi-v4-icon] {font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__arrow {color: var(--hi-v4-color-gray-500, #929aa6);font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__indent {display: inline-block;width: 24px;height: 100%;-ms-flex-negative: 0;flex-shrink: 0;}.hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu__wrapper {padding: 0;margin: 0;}.hi-v4-menu--horizontal {width: 100%;overflow: hidden;}.hi-v4-menu--horizontal .hi-v4-menu__wrapper {display: -webkit-box;display: -ms-flexbox;display: flex;overflow: visible;width: -webkit-max-content;width: -moz-max-content;width: max-content;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu--horizontal .hi-v4-menu-item {padding: 0 var(--hi-v4-spacing-10, 20px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;height: 56px;border: none;font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu--horizontal .hi-v4-menu-item__arrow {-webkit-margin-start: var(--hi-v4-spacing-2, 4px);margin-inline-start: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--horizontal .hi-v4-menu-item:hover {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item:hover .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__inner {height: 100%;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-sizing: border-box;box-sizing: border-box;border-bottom: 2px solid transparent;}.hi-v4-menu--horizontal .hi-v4-menu-item__inner--expanded {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;white-space: nowrap;max-width: none;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled:hover .hi-v4-menu-item__inner {border-color: var(--hi-v4-color-static-white, #fff);}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled .hi-v4-menu-item__content {color: var(--hi-v4-color-gray-400, #b5bcc7);}.hi-v4-menu--vertical {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;padding: var(--hi-v4-spacing-4, 8px);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;height: 100%;-webkit-transition: width 0.3s;transition: width 0.3s;}.hi-v4-menu--vertical .hi-v4-menu__wrapper {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: auto;}.hi-v4-menu--vertical .hi-v4-menu__wrapper > .hi-v4-menu-item:last-child .hi-v4-menu-item__inner {margin-bottom: 0;}.hi-v4-menu--vertical.hi-v4-menu--mini {width: 56px;overflow-x: hidden;}.hi-v4-menu--vertical.hi-v4-menu--popup .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu__toggle {width: var(--hi-v4-height-10, 40px);height: var(--hi-v4-height-10, 40px);margin-top: var(--hi-v4-spacing-4, 8px);cursor: pointer;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;border-radius: var(--hi-v4-border-radius-md, 4px);color: var(--hi-v4-color-gray-500, #929aa6);-ms-flex-negative: 0;flex-shrink: 0;-webkit-transition-duration: var(--hi-v4-motion-duration-normal, 200ms);transition-duration: var(--hi-v4-motion-duration-normal, 200ms);-webkit-transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));-webkit-transition-property: background-color;transition-property: background-color;}.hi-v4-menu--vertical .hi-v4-menu__toggle:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;text-indent: 0.5px;}.hi-v4-menu--vertical .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--vertical.hi-v4-menu--size-lg .hi-v4-menu-item__inner {height: var(--hi-v4-height-10, 40px);margin-bottom: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu--vertical.hi-v4-menu--size-md .hi-v4-menu-item__inner {height: var(--hi-v4-height-9, 36px);margin-bottom: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--vertical.hi-v4-menu--size-sm .hi-v4-menu-item__inner {height: var(--hi-v4-height-8, 32px);margin-bottom: var(--hi-v4-spacing-1, 2px);}";
15
+ var css_248z = ".hi-v4-menu-fat-menu {background-color: var(--hi-v4-color-static-white, #fff);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);display: -webkit-box;display: -ms-flexbox;display: flex;color: var(--hi-v4-color-gray-700, #1f2733);border-radius: var(--hi-v4-border-radius-md, 4px);-ms-flex-wrap: wrap;flex-wrap: wrap;}.hi-v4-menu-fat-menu__group:not(:last-of-type) {margin-right: var(--hi-v4-spacing-18, 36px);}.hi-v4-menu-fat-menu .hi-v4-menu-group-item {height: 40px;margin: 0;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-6, 12px);color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-menu-fat-menu .hi-v4-menu-item {height: 40px;margin: 0;border-radius: var(--hi-v4-border-radius-md, 4px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);}.hi-v4-menu-fat-menu .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-fat-menu .hi-v4-menu-item:not(.hi-v4-menu-item--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-fat-menu .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-fat-menu ul {padding: 0;margin: 0;}.hi-v4-menu-fat-menu ul li {list-style-type: none;}.hi-v4-menu-popmenu {background-color: var(--hi-v4-color-static-white, #fff);border-radius: var(--hi-v4-border-radius-md, 4px);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);color: var(--hi-v4-color-gray-700, #1f2733);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu-popmenu .hi-v4-menu-item {height: 40px;margin: 0;}.hi-v4-menu-popmenu .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;height: 40px;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-popmenu .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;padding-right: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu {background-color: var(--hi-v4-color-static-white, #fff);color: var(--hi-v4-color-gray-700, #1f2733);font-size: var(--hi-v4-text-size-md, 0.875rem);line-height: var(--hi-v4-text-lineheight-md, 1.375rem);-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu ul {margin: 0;padding: 0;}.hi-v4-menu-item {list-style: none;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: pointer;-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-500, #929aa6);-webkit-margin-end: var(--hi-v4-spacing-4, 8px);margin-inline-end: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu-item__icon svg[class^=hi-v4-icon] {font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__arrow {color: var(--hi-v4-color-gray-500, #929aa6);font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__indent {display: inline-block;width: 24px;height: 100%;-ms-flex-negative: 0;flex-shrink: 0;}.hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu__wrapper {padding: 0;margin: 0;}.hi-v4-menu--horizontal {width: 100%;overflow: hidden;}.hi-v4-menu--horizontal .hi-v4-menu__wrapper {display: -webkit-box;display: -ms-flexbox;display: flex;overflow: visible;width: -webkit-max-content;width: -moz-max-content;width: max-content;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu--horizontal .hi-v4-menu-item {padding: 0 var(--hi-v4-spacing-10, 20px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;height: 56px;border: none;font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu--horizontal .hi-v4-menu-item__arrow {-webkit-margin-start: var(--hi-v4-spacing-2, 4px);margin-inline-start: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--horizontal .hi-v4-menu-item:hover {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item:hover .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__inner {height: 100%;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-sizing: border-box;box-sizing: border-box;border-bottom: 2px solid transparent;}.hi-v4-menu--horizontal .hi-v4-menu-item__inner--expanded {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;white-space: nowrap;max-width: none;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled:hover .hi-v4-menu-item__inner {border-color: var(--hi-v4-color-static-white, #fff);}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled .hi-v4-menu-item__content {color: var(--hi-v4-color-gray-400, #b5bcc7);}.hi-v4-menu--vertical {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;padding: var(--hi-v4-spacing-4, 8px);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;height: 100%;-webkit-transition: width 0.3s;transition: width 0.3s;}.hi-v4-menu--vertical .hi-v4-menu__wrapper {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: auto;}.hi-v4-menu--vertical .hi-v4-menu__wrapper > .hi-v4-menu-item:last-child .hi-v4-menu-item__inner {margin-bottom: 0;}.hi-v4-menu--vertical.hi-v4-menu--mini {width: 56px;overflow-x: hidden;}.hi-v4-menu--vertical.hi-v4-menu--popup .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu__toggle {width: var(--hi-v4-height-10, 40px);height: var(--hi-v4-height-10, 40px);margin-top: var(--hi-v4-spacing-4, 8px);cursor: pointer;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;border-radius: var(--hi-v4-border-radius-md, 4px);color: var(--hi-v4-color-gray-500, #929aa6);-ms-flex-negative: 0;flex-shrink: 0;-webkit-transition-duration: var(--hi-v4-motion-duration-normal, 200ms);transition-duration: var(--hi-v4-motion-duration-normal, 200ms);-webkit-transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));-webkit-transition-property: background-color;transition-property: background-color;}.hi-v4-menu--vertical .hi-v4-menu__toggle:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;text-indent: 0.5px;}.hi-v4-menu--vertical .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--vertical.hi-v4-menu--size-lg .hi-v4-menu-item__inner {height: var(--hi-v4-height-10, 40px);margin-bottom: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu--vertical.hi-v4-menu--size-md .hi-v4-menu-item__inner {height: var(--hi-v4-height-9, 36px);margin-bottom: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--vertical.hi-v4-menu--size-sm .hi-v4-menu-item__inner {height: var(--hi-v4-height-8, 32px);margin-bottom: var(--hi-v4-spacing-1, 2px);}.hi-v4-sidebar-wrapper {--sidebar-menu-width: 180px;position: relative;display: -webkit-box;display: -ms-flexbox;display: flex;width: -webkit-fit-content;width: -moz-fit-content;width: fit-content;height: 100%;}.hi-v4-sidebar-wrapper:not(.hi-v4-sidebar-wrapper-showMenuArrow) .hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__arrow {display: none;}.hi-v4-sidebar-wrapper--showMenu .hi-v4-sidebar-menu-wrapper {width: var(--sidebar-menu-width);border-right: 1px solid var(--hi-v4-color-gray-300, #dfe2e8);}.hi-v4-sidebar-wrapper--showMenu .hi-v4-sidebar-toggle svg[class^=hi-v4-icon] {-webkit-transform: rotate(180deg);transform: rotate(180deg);}.hi-v4-sidebar {-webkit-box-sizing: border-box;box-sizing: border-box;width: 64px;height: 100%;padding: var(--hi-v4-spacing-4, 8px) var(--hi-v4-spacing-3, 6px);overflow: auto;border-right: 1px solid var(--hi-v4-color-gray-300, #dfe2e8);background-color: #fff;}.hi-v4-sidebar-list {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;}.hi-v4-sidebar-item {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;list-style: none;margin-top: var(--hi-v4-spacing-6, 12px);padding: var(--hi-v4-spacing-3, 6px) var(--hi-v4-spacing-1, 2px);width: 52px;overflow: hidden;text-align: center;border-radius: var(--hi-v4-border-radius-md, 4px);}.hi-v4-sidebar-item:first-child {margin-top: 0;}.hi-v4-sidebar-item:hover {cursor: pointer;}.hi-v4-sidebar-item:not(.hi-v4-sidebar-item--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-sidebar-item--active {background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-sidebar-item--active .hi-v4-sidebar-item__icon, .hi-v4-sidebar-item--active .hi-v4-sidebar-item__title {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-sidebar-item__icon {height: 20px;color: var(--hi-v4-color-gray-600, #5f6a7a);}.hi-v4-sidebar-item__icon svg[class^=hi-v4-icon] {width: 20px;height: 20px;}.hi-v4-sidebar-item__title {font-size: var(--hi-v4-text-size-sm, 0.75rem);line-height: 20px;color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-sidebar-menu-wrapper {width: 0;border-right: none;overflow: hidden;-webkit-transition: width 0.3s;transition: width 0.3s;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item .hi-v4-menu-item__inner {height: var(--hi-v4-height-8, 32px);margin-bottom: 0;padding: 0 var(--hi-v4-spacing-4, 8px);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item .hi-v4-menu-item__inner--hasIcon + div .hi-v4-menu-submenu .hi-v4-menu-item__indent {display: block;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-600, #5f6a7a);-webkit-margin-end: var(--hi-v4-spacing-2, 4px);margin-inline-end: var(--hi-v4-spacing-2, 4px);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__indent {width: 20px;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__content {font-weight: var(--hi-v4-text-weight-medium, 500);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-gray-700, #1f2733);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__inner--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-600, #5f6a7a);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-submenu .hi-v4-menu-item__inner .hi-v4-menu-item__content {font-size: var(--hi-v4-text-size-sm, 0.75rem);font-weight: var(--hi-v4-text-weight-normal, 400);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-submenu .hi-v4-menu-item__inner .hi-v4-menu-item__indent {display: none;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu__wrapper > .hi-v4-menu-item {margin-top: var(--hi-v4-spacing-4, 8px);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu__wrapper > .hi-v4-menu-item:first-child {margin-top: 0;}.hi-v4-sidebar-toggle {position: absolute;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;width: 12px;height: 60px;right: -12px;top: 50%;-webkit-transform: translateY(-50%);transform: translateY(-50%);border-start-end-radius: 16px 8px;border-end-end-radius: 16px 8px;border: 1px solid var(--hi-v4-color-gray-300, #dfe2e8);border-left: none;cursor: pointer;color: var(--hi-v4-color-gray-600, #5f6a7a);background-color: #fff;}";
16
16
  var __styleInject__ = require('style-inject')["default"];
17
17
  __styleInject__(css_248z);
18
18
  exports["default"] = css_248z;
package/lib/cjs/util.js CHANGED
@@ -12,6 +12,7 @@
12
12
  Object.defineProperty(exports, '__esModule', {
13
13
  value: true
14
14
  });
15
+ var treeUtils = require('@hi-ui/tree-utils');
15
16
 
16
17
  // 寻找某一节点的父节点
17
18
  var getParentId = function getParentId(id, data) {
@@ -40,5 +41,34 @@ var getAncestorIds = function getAncestorIds(id, data, arr) {
40
41
  }
41
42
  return arr;
42
43
  };
44
+ var filterTreeData = function filterTreeData(treeData, searchKey, activeId, level) {
45
+ if (level === void 0) {
46
+ level = 1;
47
+ }
48
+ var _a, _b;
49
+ if (searchKey === '') {
50
+ return [];
51
+ }
52
+ var activeParents = getAncestorIds(activeId, treeData);
53
+ var clonedData = treeUtils.cloneTree(treeData);
54
+ var sidebarActiveId = (_a = activeParents[activeParents.length - 1]) !== null && _a !== void 0 ? _a : activeId;
55
+ // 获取当前选中的树节点
56
+ var currentTree = clonedData.find(function (d) {
57
+ return d.id === sidebarActiveId;
58
+ });
59
+ if (!currentTree) {
60
+ return [];
61
+ }
62
+ var result = treeUtils.filterTree((_b = currentTree === null || currentTree === void 0 ? void 0 : currentTree.children) !== null && _b !== void 0 ? _b : [], function (d) {
63
+ return d.title.includes(searchKey);
64
+ });
65
+ if (level === 1) {
66
+ currentTree.children = result;
67
+ return clonedData;
68
+ } else {
69
+ return result;
70
+ }
71
+ };
72
+ exports.filterTreeData = filterTreeData;
43
73
  exports.getAncestorIds = getAncestorIds;
44
74
  exports.getParentId = getParentId;
@@ -67,7 +67,7 @@ var MenuItem = /*#__PURE__*/forwardRef(function (_a, ref) {
67
67
  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),
68
68
  style: hidden ? hiddenStyle : undefined
69
69
  }, rest), /*#__PURE__*/React.createElement("div", {
70
- 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)),
70
+ 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[prefixCls + "-item__inner--hasIcon"] = icon, _cx2)),
71
71
  onClick: function onClick() {
72
72
  if (isArrayNonEmpty(children)) {
73
73
  !disabled && (clickSubMenu === null || clickSubMenu === void 0 ? void 0 : clickSubMenu(id));
@@ -85,11 +85,11 @@ var MenuItem = /*#__PURE__*/forwardRef(function (_a, ref) {
85
85
  className: prefixCls + "-item__icon"
86
86
  }, icon) : null, /*#__PURE__*/React.createElement("span", {
87
87
  className: prefixCls + "-item__content"
88
- }, isFunction(render) ? render({
88
+ }, isFunction(render) ? render(Object.assign(Object.assign({}, raw), {
89
89
  id: id,
90
90
  icon: icon,
91
91
  title: title
92
- }, level) : title), hasChildren && !mini && placement === 'vertical' && expandedType === 'collapse' && !showAllSubMenus && (!disabled && (expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? ( /*#__PURE__*/React.createElement(Arrow, {
92
+ }), level) : title), hasChildren && !mini && placement === 'vertical' && expandedType === 'collapse' && !showAllSubMenus && (!disabled && (expandedIds === null || expandedIds === void 0 ? void 0 : expandedIds.includes(id)) ? ( /*#__PURE__*/React.createElement(Arrow, {
93
93
  prefixCls: prefixCls + "-item",
94
94
  direction: "up"
95
95
  })) : ( /*#__PURE__*/React.createElement(Arrow, {
@@ -0,0 +1,169 @@
1
+ /** @LICENSE
2
+ * @hi-ui/menu
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/menu#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import React, { forwardRef, useState, useRef, useMemo, useEffect, useLayoutEffect, useCallback } from 'react';
11
+ import { getPrefixCls, cx } from '@hi-ui/classname';
12
+ import { RightOutlined } from '@hi-ui/icons';
13
+ import { __DEV__ } from '@hi-ui/env';
14
+ import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
15
+ import { useUncontrolledToggle } from '@hi-ui/use-toggle';
16
+ import { isFunction } from '@hi-ui/type-assertion';
17
+ import { getAncestorIds } from './util.js';
18
+ import { Menu } from './Menu.js';
19
+ var SIDEBAR_PREFIX = getPrefixCls('sidebar');
20
+ var NOOP_ARRAY = [];
21
+ /**
22
+ * 侧边栏菜单
23
+ */
24
+ var Sidebar = /*#__PURE__*/forwardRef(function (_ref, ref) {
25
+ var _ref$prefixCls = _ref.prefixCls,
26
+ prefixCls = _ref$prefixCls === void 0 ? SIDEBAR_PREFIX : _ref$prefixCls,
27
+ _ref$role = _ref.role,
28
+ role = _ref$role === void 0 ? 'sidebar' : _ref$role,
29
+ _ref$data = _ref.data,
30
+ data = _ref$data === void 0 ? NOOP_ARRAY : _ref$data,
31
+ _ref$showCollapse = _ref.showCollapse,
32
+ showCollapse = _ref$showCollapse === void 0 ? true : _ref$showCollapse,
33
+ _ref$defaultActiveId = _ref.defaultActiveId,
34
+ defaultActiveId = _ref$defaultActiveId === void 0 ? '' : _ref$defaultActiveId,
35
+ activeIdProp = _ref.activeId,
36
+ collapsed = _ref.collapsed,
37
+ _ref$defaultCollapsed = _ref.defaultCollapsed,
38
+ defaultCollapsed = _ref$defaultCollapsed === void 0 ? false : _ref$defaultCollapsed,
39
+ onCollapse = _ref.onCollapse,
40
+ _render = _ref.render,
41
+ extraHeader = _ref.extraHeader,
42
+ onClick = _ref.onClick,
43
+ _ref$showMenuArrow = _ref.showMenuArrow,
44
+ showMenuArrow = _ref$showMenuArrow === void 0 ? false : _ref$showMenuArrow,
45
+ _ref$menuWidth = _ref.menuWidth,
46
+ menuWidth = _ref$menuWidth === void 0 ? 180 : _ref$menuWidth;
47
+ var _useUncontrolledState = useUncontrolledState(defaultActiveId, activeIdProp, onClick),
48
+ activeId = _useUncontrolledState[0],
49
+ updateActiveId = _useUncontrolledState[1];
50
+ var _useState = useState(function () {
51
+ return getAncestorIds(activeId, data);
52
+ }),
53
+ activeParents = _useState[0],
54
+ updateActiveParents = _useState[1];
55
+ // 用于更新菜单
56
+ var _useState2 = useState(0),
57
+ menuKey = _useState2[0],
58
+ setMenuKey = _useState2[1];
59
+ var wrapperRef = useRef(null);
60
+ var sidebarActiveId = useMemo(function () {
61
+ var _a;
62
+ return (_a = activeParents[activeParents.length - 1]) !== null && _a !== void 0 ? _a : activeId;
63
+ }, [activeParents]);
64
+ var _useUncontrolledToggl = useUncontrolledToggle({
65
+ defaultVisible: defaultCollapsed,
66
+ visible: collapsed,
67
+ onToggle: onCollapse
68
+ }),
69
+ showMenu = _useUncontrolledToggl[0],
70
+ menuToggleAction = _useUncontrolledToggl[1];
71
+ useEffect(function () {
72
+ var _a;
73
+ var newActiveParents = (_a = getAncestorIds(activeId, data)) !== null && _a !== void 0 ? _a : '';
74
+ updateActiveParents(newActiveParents);
75
+ }, [activeId, data, updateActiveId]);
76
+ useLayoutEffect(function () {
77
+ var _a;
78
+ menuWidth !== undefined && ((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty('--sidebar-menu-width', String(menuWidth)));
79
+ }, [menuWidth]);
80
+ var menuDataMemo = useMemo(function () {
81
+ var _a, _b;
82
+ var menuData = (_b = (_a = data.find(function (item) {
83
+ return item.id === sidebarActiveId;
84
+ })) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];
85
+ if (menuData.length > 0) {
86
+ menuToggleAction.on();
87
+ } else {
88
+ menuToggleAction.off();
89
+ }
90
+ return menuData;
91
+ }, [sidebarActiveId, data, menuToggleAction]);
92
+ useEffect(function () {
93
+ // 每次菜单数据变化时重新渲染下菜单,否则defaultExpandAll不生效
94
+ setMenuKey(menuKey + 1);
95
+ }, [menuDataMemo]);
96
+ var clickSidebar = useCallback(function (id, raw) {
97
+ if (sidebarActiveId === id) {
98
+ return;
99
+ }
100
+ updateActiveId(id, raw);
101
+ }, [sidebarActiveId, updateActiveId]);
102
+ var clickMenu = useCallback(function (id, raw) {
103
+ updateActiveId(id, raw);
104
+ }, [updateActiveId]);
105
+ var cls = cx(prefixCls + "-wrapper", showMenu && prefixCls + "-wrapper--showMenu", showMenuArrow && prefixCls + "-wrapper--showMenuArrow");
106
+ return /*#__PURE__*/React.createElement("div", {
107
+ className: cls,
108
+ ref: wrapperRef
109
+ }, /*#__PURE__*/React.createElement("div", {
110
+ className: "" + prefixCls,
111
+ ref: ref,
112
+ role: role
113
+ }, /*#__PURE__*/React.createElement("ul", {
114
+ className: prefixCls + "-list"
115
+ }, data.map(function (item) {
116
+ return /*#__PURE__*/React.createElement(SidebarItem, Object.assign({}, item, {
117
+ className: item.id === sidebarActiveId ? prefixCls + "-item--active" : '',
118
+ render: function render() {
119
+ return _render === null || _render === void 0 ? void 0 : _render(item, 0);
120
+ },
121
+ key: item.id,
122
+ onClick: function onClick() {
123
+ return clickSidebar(item.id, item);
124
+ }
125
+ }));
126
+ }))), /*#__PURE__*/React.createElement("div", {
127
+ className: cx(prefixCls + "-menu-wrapper")
128
+ }, /*#__PURE__*/React.createElement(Menu, {
129
+ key: menuKey,
130
+ activeId: activeId,
131
+ data: menuDataMemo,
132
+ defaultExpandAll: true,
133
+ onClick: clickMenu,
134
+ style: {
135
+ width: menuWidth
136
+ },
137
+ extraHeader: extraHeader,
138
+ render: _render
139
+ })), menuDataMemo.length > 0 && showCollapse && ( /*#__PURE__*/React.createElement("div", {
140
+ className: prefixCls + "-toggle",
141
+ onClick: menuToggleAction.not
142
+ }, /*#__PURE__*/React.createElement(RightOutlined, null))));
143
+ });
144
+ if (__DEV__) {
145
+ Sidebar.displayName = 'Sidebar';
146
+ }
147
+ var SIDEBAR_ITEM_PREFIX = getPrefixCls('sidebar-item');
148
+ var SidebarItem = function SidebarItem(data) {
149
+ var title = data.title,
150
+ icon = data.icon,
151
+ render = data.render,
152
+ level = data.level,
153
+ className = data.className,
154
+ onClick = data.onClick;
155
+ var prefixCls = SIDEBAR_ITEM_PREFIX;
156
+ var cls = cx(prefixCls, className);
157
+ var renderTitle = useCallback(function (data) {
158
+ return isFunction(render) ? render(data, level) : title;
159
+ }, [level, render, title]);
160
+ return /*#__PURE__*/React.createElement("li", {
161
+ className: cls,
162
+ onClick: onClick
163
+ }, icon && /*#__PURE__*/React.createElement("div", {
164
+ className: prefixCls + "__icon"
165
+ }, icon), /*#__PURE__*/React.createElement("div", {
166
+ className: prefixCls + "__title"
167
+ }, /*#__PURE__*/React.createElement("span", null, renderTitle(data))));
168
+ };
169
+ export { Sidebar };
package/lib/esm/index.js CHANGED
@@ -9,3 +9,5 @@
9
9
  */
10
10
  import './styles/index.scss.js';
11
11
  export { Menu, Menu as default } from './Menu.js';
12
+ export { Sidebar } from './Sidebar.js';
13
+ export { filterTreeData } from './util.js';
@@ -8,6 +8,6 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import __styleInject__ from 'style-inject';
11
- var css_248z = ".hi-v4-menu-fat-menu {background-color: var(--hi-v4-color-static-white, #fff);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);display: -webkit-box;display: -ms-flexbox;display: flex;color: var(--hi-v4-color-gray-700, #1f2733);border-radius: var(--hi-v4-border-radius-md, 4px);-ms-flex-wrap: wrap;flex-wrap: wrap;}.hi-v4-menu-fat-menu__group:not(:last-of-type) {margin-right: var(--hi-v4-spacing-18, 36px);}.hi-v4-menu-fat-menu .hi-v4-menu-group-item {height: 40px;margin: 0;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-6, 12px);color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-menu-fat-menu .hi-v4-menu-item {height: 40px;margin: 0;border-radius: var(--hi-v4-border-radius-md, 4px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);}.hi-v4-menu-fat-menu .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-fat-menu .hi-v4-menu-item:not(.hi-v4-menu-item--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-fat-menu .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-fat-menu ul {padding: 0;margin: 0;}.hi-v4-menu-fat-menu ul li {list-style-type: none;}.hi-v4-menu-popmenu {background-color: var(--hi-v4-color-static-white, #fff);border-radius: var(--hi-v4-border-radius-md, 4px);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);color: var(--hi-v4-color-gray-700, #1f2733);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu-popmenu .hi-v4-menu-item {height: 40px;margin: 0;}.hi-v4-menu-popmenu .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;height: 40px;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-popmenu .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;padding-right: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu {background-color: var(--hi-v4-color-static-white, #fff);color: var(--hi-v4-color-gray-700, #1f2733);font-size: var(--hi-v4-text-size-md, 0.875rem);line-height: var(--hi-v4-text-lineheight-md, 1.375rem);-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu ul {margin: 0;padding: 0;}.hi-v4-menu-item {list-style: none;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: pointer;-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-500, #929aa6);-webkit-margin-end: var(--hi-v4-spacing-4, 8px);margin-inline-end: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu-item__icon svg[class^=hi-v4-icon] {font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__arrow {color: var(--hi-v4-color-gray-500, #929aa6);font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__indent {display: inline-block;width: 24px;height: 100%;-ms-flex-negative: 0;flex-shrink: 0;}.hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu__wrapper {padding: 0;margin: 0;}.hi-v4-menu--horizontal {width: 100%;overflow: hidden;}.hi-v4-menu--horizontal .hi-v4-menu__wrapper {display: -webkit-box;display: -ms-flexbox;display: flex;overflow: visible;width: -webkit-max-content;width: -moz-max-content;width: max-content;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu--horizontal .hi-v4-menu-item {padding: 0 var(--hi-v4-spacing-10, 20px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;height: 56px;border: none;font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu--horizontal .hi-v4-menu-item__arrow {-webkit-margin-start: var(--hi-v4-spacing-2, 4px);margin-inline-start: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--horizontal .hi-v4-menu-item:hover {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item:hover .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__inner {height: 100%;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-sizing: border-box;box-sizing: border-box;border-bottom: 2px solid transparent;}.hi-v4-menu--horizontal .hi-v4-menu-item__inner--expanded {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;white-space: nowrap;max-width: none;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled:hover .hi-v4-menu-item__inner {border-color: var(--hi-v4-color-static-white, #fff);}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled .hi-v4-menu-item__content {color: var(--hi-v4-color-gray-400, #b5bcc7);}.hi-v4-menu--vertical {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;padding: var(--hi-v4-spacing-4, 8px);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;height: 100%;-webkit-transition: width 0.3s;transition: width 0.3s;}.hi-v4-menu--vertical .hi-v4-menu__wrapper {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: auto;}.hi-v4-menu--vertical .hi-v4-menu__wrapper > .hi-v4-menu-item:last-child .hi-v4-menu-item__inner {margin-bottom: 0;}.hi-v4-menu--vertical.hi-v4-menu--mini {width: 56px;overflow-x: hidden;}.hi-v4-menu--vertical.hi-v4-menu--popup .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu__toggle {width: var(--hi-v4-height-10, 40px);height: var(--hi-v4-height-10, 40px);margin-top: var(--hi-v4-spacing-4, 8px);cursor: pointer;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;border-radius: var(--hi-v4-border-radius-md, 4px);color: var(--hi-v4-color-gray-500, #929aa6);-ms-flex-negative: 0;flex-shrink: 0;-webkit-transition-duration: var(--hi-v4-motion-duration-normal, 200ms);transition-duration: var(--hi-v4-motion-duration-normal, 200ms);-webkit-transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));-webkit-transition-property: background-color;transition-property: background-color;}.hi-v4-menu--vertical .hi-v4-menu__toggle:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;text-indent: 0.5px;}.hi-v4-menu--vertical .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--vertical.hi-v4-menu--size-lg .hi-v4-menu-item__inner {height: var(--hi-v4-height-10, 40px);margin-bottom: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu--vertical.hi-v4-menu--size-md .hi-v4-menu-item__inner {height: var(--hi-v4-height-9, 36px);margin-bottom: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--vertical.hi-v4-menu--size-sm .hi-v4-menu-item__inner {height: var(--hi-v4-height-8, 32px);margin-bottom: var(--hi-v4-spacing-1, 2px);}";
11
+ var css_248z = ".hi-v4-menu-fat-menu {background-color: var(--hi-v4-color-static-white, #fff);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);display: -webkit-box;display: -ms-flexbox;display: flex;color: var(--hi-v4-color-gray-700, #1f2733);border-radius: var(--hi-v4-border-radius-md, 4px);-ms-flex-wrap: wrap;flex-wrap: wrap;}.hi-v4-menu-fat-menu__group:not(:last-of-type) {margin-right: var(--hi-v4-spacing-18, 36px);}.hi-v4-menu-fat-menu .hi-v4-menu-group-item {height: 40px;margin: 0;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-6, 12px);color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-menu-fat-menu .hi-v4-menu-item {height: 40px;margin: 0;border-radius: var(--hi-v4-border-radius-md, 4px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);}.hi-v4-menu-fat-menu .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-fat-menu .hi-v4-menu-item:not(.hi-v4-menu-item--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-fat-menu .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-fat-menu ul {padding: 0;margin: 0;}.hi-v4-menu-fat-menu ul li {list-style-type: none;}.hi-v4-menu-popmenu {background-color: var(--hi-v4-color-static-white, #fff);border-radius: var(--hi-v4-border-radius-md, 4px);margin: 0;font-size: var(--hi-v4-text-size-md, 0.875rem);padding: var(--hi-v4-spacing-4, 8px);color: var(--hi-v4-color-gray-700, #1f2733);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu-popmenu .hi-v4-menu-item {height: 40px;margin: 0;}.hi-v4-menu-popmenu .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;height: 40px;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu-popmenu .hi-v4-menu-item__inner--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu-popmenu .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;padding-right: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu {background-color: var(--hi-v4-color-static-white, #fff);color: var(--hi-v4-color-gray-700, #1f2733);font-size: var(--hi-v4-text-size-md, 0.875rem);line-height: var(--hi-v4-text-lineheight-md, 1.375rem);-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu ul {margin: 0;padding: 0;}.hi-v4-menu-item {list-style: none;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: pointer;-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-500, #929aa6);-webkit-margin-end: var(--hi-v4-spacing-4, 8px);margin-inline-end: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu-item__icon svg[class^=hi-v4-icon] {font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__arrow {color: var(--hi-v4-color-gray-500, #929aa6);font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu-item__indent {display: inline-block;width: 24px;height: 100%;-ms-flex-negative: 0;flex-shrink: 0;}.hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu__wrapper {padding: 0;margin: 0;}.hi-v4-menu--horizontal {width: 100%;overflow: hidden;}.hi-v4-menu--horizontal .hi-v4-menu__wrapper {display: -webkit-box;display: -ms-flexbox;display: flex;overflow: visible;width: -webkit-max-content;width: -moz-max-content;width: max-content;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-menu--horizontal .hi-v4-menu-item {padding: 0 var(--hi-v4-spacing-10, 20px);display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;height: 56px;border: none;font-size: var(--hi-v4-text-size-lg, 1rem);}.hi-v4-menu--horizontal .hi-v4-menu-item__arrow {-webkit-margin-start: var(--hi-v4-spacing-2, 4px);margin-inline-start: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--horizontal .hi-v4-menu-item:hover {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item:hover .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__inner {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__inner {height: 100%;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-sizing: border-box;box-sizing: border-box;border-bottom: 2px solid transparent;}.hi-v4-menu--horizontal .hi-v4-menu-item__inner--expanded {border-bottom: 2px solid var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--horizontal .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;white-space: nowrap;max-width: none;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled:hover .hi-v4-menu-item__inner {border-color: var(--hi-v4-color-static-white, #fff);}.hi-v4-menu--horizontal .hi-v4-menu-item--disabled .hi-v4-menu-item__content {color: var(--hi-v4-color-gray-400, #b5bcc7);}.hi-v4-menu--vertical {display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;padding: var(--hi-v4-spacing-4, 8px);width: 216px;-webkit-box-sizing: border-box;box-sizing: border-box;height: 100%;-webkit-transition: width 0.3s;transition: width 0.3s;}.hi-v4-menu--vertical .hi-v4-menu__wrapper {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: auto;}.hi-v4-menu--vertical .hi-v4-menu__wrapper > .hi-v4-menu-item:last-child .hi-v4-menu-item__inner {margin-bottom: 0;}.hi-v4-menu--vertical.hi-v4-menu--mini {width: 56px;overflow-x: hidden;}.hi-v4-menu--vertical.hi-v4-menu--popup .hi-v4-menu-item__inner--expanded {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu__toggle {width: var(--hi-v4-height-10, 40px);height: var(--hi-v4-height-10, 40px);margin-top: var(--hi-v4-spacing-4, 8px);cursor: pointer;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;border-radius: var(--hi-v4-border-radius-md, 4px);color: var(--hi-v4-color-gray-500, #929aa6);-ms-flex-negative: 0;flex-shrink: 0;-webkit-transition-duration: var(--hi-v4-motion-duration-normal, 200ms);transition-duration: var(--hi-v4-motion-duration-normal, 200ms);-webkit-transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));transition-timing-function: var(--hi-v4-motion-bezier-easing, cubic-bezier(0.37, 0.02, 0.34, 1));-webkit-transition-property: background-color;transition-property: background-color;}.hi-v4-menu--vertical .hi-v4-menu__toggle:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__inner {-webkit-box-sizing: border-box;box-sizing: border-box;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;padding: 0 var(--hi-v4-spacing-4, 8px) 0 var(--hi-v4-spacing-6, 12px);border-radius: var(--hi-v4-border-radius-md, 4px);-webkit-transition: all 0.3s;transition: all 0.3s;}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-menu--vertical .hi-v4-menu-item__inner:not(.hi-v4-menu-item__inner--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-menu--vertical .hi-v4-menu-item__content {-webkit-box-flex: 1;-ms-flex: 1 1;flex: 1 1;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;text-indent: 0.5px;}.hi-v4-menu--vertical .hi-v4-menu-item--disabled {color: var(--hi-v4-color-gray-400, #b5bcc7);cursor: not-allowed;}.hi-v4-menu--vertical.hi-v4-menu--size-lg .hi-v4-menu-item__inner {height: var(--hi-v4-height-10, 40px);margin-bottom: var(--hi-v4-spacing-4, 8px);}.hi-v4-menu--vertical.hi-v4-menu--size-md .hi-v4-menu-item__inner {height: var(--hi-v4-height-9, 36px);margin-bottom: var(--hi-v4-spacing-2, 4px);}.hi-v4-menu--vertical.hi-v4-menu--size-sm .hi-v4-menu-item__inner {height: var(--hi-v4-height-8, 32px);margin-bottom: var(--hi-v4-spacing-1, 2px);}.hi-v4-sidebar-wrapper {--sidebar-menu-width: 180px;position: relative;display: -webkit-box;display: -ms-flexbox;display: flex;width: -webkit-fit-content;width: -moz-fit-content;width: fit-content;height: 100%;}.hi-v4-sidebar-wrapper:not(.hi-v4-sidebar-wrapper-showMenuArrow) .hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__arrow {display: none;}.hi-v4-sidebar-wrapper--showMenu .hi-v4-sidebar-menu-wrapper {width: var(--sidebar-menu-width);border-right: 1px solid var(--hi-v4-color-gray-300, #dfe2e8);}.hi-v4-sidebar-wrapper--showMenu .hi-v4-sidebar-toggle svg[class^=hi-v4-icon] {-webkit-transform: rotate(180deg);transform: rotate(180deg);}.hi-v4-sidebar {-webkit-box-sizing: border-box;box-sizing: border-box;width: 64px;height: 100%;padding: var(--hi-v4-spacing-4, 8px) var(--hi-v4-spacing-3, 6px);overflow: auto;border-right: 1px solid var(--hi-v4-color-gray-300, #dfe2e8);background-color: #fff;}.hi-v4-sidebar-list {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;}.hi-v4-sidebar-item {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;list-style: none;margin-top: var(--hi-v4-spacing-6, 12px);padding: var(--hi-v4-spacing-3, 6px) var(--hi-v4-spacing-1, 2px);width: 52px;overflow: hidden;text-align: center;border-radius: var(--hi-v4-border-radius-md, 4px);}.hi-v4-sidebar-item:first-child {margin-top: 0;}.hi-v4-sidebar-item:hover {cursor: pointer;}.hi-v4-sidebar-item:not(.hi-v4-sidebar-item--active):hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-sidebar-item--active {background-color: var(--hi-v4-color-primary-50, var(--hi-v4-color-brandblue-50, #e2f3fe));}.hi-v4-sidebar-item--active .hi-v4-sidebar-item__icon, .hi-v4-sidebar-item--active .hi-v4-sidebar-item__title {color: var(--hi-v4-color-primary-500, var(--hi-v4-color-brandblue-500, #237ffa));}.hi-v4-sidebar-item__icon {height: 20px;color: var(--hi-v4-color-gray-600, #5f6a7a);}.hi-v4-sidebar-item__icon svg[class^=hi-v4-icon] {width: 20px;height: 20px;}.hi-v4-sidebar-item__title {font-size: var(--hi-v4-text-size-sm, 0.75rem);line-height: 20px;color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-sidebar-menu-wrapper {width: 0;border-right: none;overflow: hidden;-webkit-transition: width 0.3s;transition: width 0.3s;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item .hi-v4-menu-item__inner {height: var(--hi-v4-height-8, 32px);margin-bottom: 0;padding: 0 var(--hi-v4-spacing-4, 8px);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item .hi-v4-menu-item__inner--hasIcon + div .hi-v4-menu-submenu .hi-v4-menu-item__indent {display: block;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-600, #5f6a7a);-webkit-margin-end: var(--hi-v4-spacing-2, 4px);margin-inline-end: var(--hi-v4-spacing-2, 4px);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__indent {width: 20px;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__content {font-weight: var(--hi-v4-text-weight-medium, 500);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__inner--active-p {color: var(--hi-v4-color-gray-700, #1f2733);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-item__inner--active-p .hi-v4-menu-item__icon {color: var(--hi-v4-color-gray-600, #5f6a7a);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-submenu .hi-v4-menu-item__inner .hi-v4-menu-item__content {font-size: var(--hi-v4-text-size-sm, 0.75rem);font-weight: var(--hi-v4-text-weight-normal, 400);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu-submenu .hi-v4-menu-item__inner .hi-v4-menu-item__indent {display: none;}.hi-v4-sidebar-menu-wrapper .hi-v4-menu__wrapper > .hi-v4-menu-item {margin-top: var(--hi-v4-spacing-4, 8px);}.hi-v4-sidebar-menu-wrapper .hi-v4-menu__wrapper > .hi-v4-menu-item:first-child {margin-top: 0;}.hi-v4-sidebar-toggle {position: absolute;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center;-ms-flex-pack: center;justify-content: center;width: 12px;height: 60px;right: -12px;top: 50%;-webkit-transform: translateY(-50%);transform: translateY(-50%);border-start-end-radius: 16px 8px;border-end-end-radius: 16px 8px;border: 1px solid var(--hi-v4-color-gray-300, #dfe2e8);border-left: none;cursor: pointer;color: var(--hi-v4-color-gray-600, #5f6a7a);background-color: #fff;}";
12
12
  __styleInject__(css_248z);
13
13
  export { css_248z as default };
package/lib/esm/util.js CHANGED
@@ -7,6 +7,8 @@
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 { cloneTree, filterTree } from '@hi-ui/tree-utils';
11
+
10
12
  // 寻找某一节点的父节点
11
13
  var getParentId = function getParentId(id, data) {
12
14
  var parentId = '';
@@ -34,4 +36,32 @@ var getAncestorIds = function getAncestorIds(id, data, arr) {
34
36
  }
35
37
  return arr;
36
38
  };
37
- export { getAncestorIds, getParentId };
39
+ var filterTreeData = function filterTreeData(treeData, searchKey, activeId, level) {
40
+ if (level === void 0) {
41
+ level = 1;
42
+ }
43
+ var _a, _b;
44
+ if (searchKey === '') {
45
+ return [];
46
+ }
47
+ var activeParents = getAncestorIds(activeId, treeData);
48
+ var clonedData = cloneTree(treeData);
49
+ var sidebarActiveId = (_a = activeParents[activeParents.length - 1]) !== null && _a !== void 0 ? _a : activeId;
50
+ // 获取当前选中的树节点
51
+ var currentTree = clonedData.find(function (d) {
52
+ return d.id === sidebarActiveId;
53
+ });
54
+ if (!currentTree) {
55
+ return [];
56
+ }
57
+ var result = filterTree((_b = currentTree === null || currentTree === void 0 ? void 0 : currentTree.children) !== null && _b !== void 0 ? _b : [], function (d) {
58
+ return d.title.includes(searchKey);
59
+ });
60
+ if (level === 1) {
61
+ currentTree.children = result;
62
+ return clonedData;
63
+ } else {
64
+ return result;
65
+ }
66
+ };
67
+ export { filterTreeData, getAncestorIds, getParentId };
@@ -0,0 +1,74 @@
1
+ import React from 'react';
2
+ import { HiBaseHTMLProps } from '@hi-ui/core';
3
+ import { MenuDataItem, MenuFooterRenderProps } from './types';
4
+ /**
5
+ * 侧边栏菜单
6
+ */
7
+ export declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement | null>>;
8
+ export interface SidebarProps extends Omit<HiBaseHTMLProps<'div'>, 'onClick'> {
9
+ /**
10
+ * 菜单项数据列表
11
+ */
12
+ data: MenuDataItem[];
13
+ /**
14
+ * 默认激活的菜单项 id
15
+ */
16
+ defaultActiveId?: React.ReactText;
17
+ /**
18
+ * 激活的菜单项 id
19
+ */
20
+ activeId?: React.ReactText;
21
+ /**
22
+ * 是否显示收缩开关,菜单垂直展示时有效
23
+ */
24
+ showCollapse?: boolean;
25
+ /**
26
+ * 首次渲染默认展开所有菜单项,为非受控模式
27
+ */
28
+ defaultExpandAll?: boolean;
29
+ /**
30
+ * 默认是否收起子菜单,菜单垂直展示时有效
31
+ */
32
+ defaultCollapsed?: boolean;
33
+ /**
34
+ * 是否收起子菜单,菜单垂直展示时有效
35
+ */
36
+ collapsed?: boolean;
37
+ /**
38
+ * 展开菜单时回调
39
+ */
40
+ onExpand?: (expandedIds: React.ReactText[]) => void;
41
+ /**
42
+ * 点击菜单选项时的回调
43
+ */
44
+ onClick?: (menuId: React.ReactText, menuItem: MenuDataItem) => void;
45
+ /**
46
+ * 点击父菜单项时的回调
47
+ */
48
+ onClickSubMenu?: (subMenuId: React.ReactText, expandedIds: React.ReactText[]) => void;
49
+ /**
50
+ * 点击收缩开关时的回调
51
+ */
52
+ onCollapse?: (collapsed: boolean) => void;
53
+ /**
54
+ * 底部渲染器
55
+ */
56
+ footerRender?: (props: MenuFooterRenderProps) => React.ReactNode;
57
+ /**
58
+ * 自定义渲染菜单项
59
+ */
60
+ render?: (menuItem: MenuDataItem, level?: number) => React.ReactNode;
61
+ /**
62
+ * 额外的头部内容
63
+ */
64
+ extraHeader?: React.ReactNode;
65
+ /**
66
+ * 是否显示菜单箭头
67
+ * @default false
68
+ */
69
+ showMenuArrow?: boolean;
70
+ /**
71
+ * 设置菜单宽度
72
+ */
73
+ menuWidth?: number | string;
74
+ }
@@ -1,4 +1,6 @@
1
1
  import './styles/index.scss';
2
2
  export * from './Menu';
3
3
  export { Menu as default } from './Menu';
4
+ export * from './Sidebar';
5
+ export { filterTreeData } from './util';
4
6
  export * from './types';
@@ -1,2 +1,4 @@
1
+ import { MenuDataItem } from './types';
1
2
  export declare const getParentId: (id: string | number, data: Record<string, any>[]) => string | number;
2
3
  export declare const getAncestorIds: (id: string | number, data: Record<string, any>[], arr?: (string | number)[]) => (string | number)[];
4
+ export declare const filterTreeData: (treeData: MenuDataItem[], searchKey: string, activeId: string | number, level?: number) => MenuDataItem[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/menu",
3
- "version": "4.1.7",
3
+ "version": "4.2.0-alpha.1",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HiUI <mi-hiui@xiaomi.com>",
@@ -50,7 +50,7 @@
50
50
  "@hi-ui/popper": "^4.1.4",
51
51
  "@hi-ui/times": "^4.0.4",
52
52
  "@hi-ui/tooltip": "^4.0.10",
53
- "@hi-ui/tree-utils": "^4.1.4",
53
+ "@hi-ui/tree-utils": "^4.1.5-alpha.0",
54
54
  "@hi-ui/type-assertion": "^4.0.4",
55
55
  "@hi-ui/use-id": "^4.0.4",
56
56
  "@hi-ui/use-merge-refs": "^4.0.4",