@hi-ui/dropdown 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/lib/cjs/Dropdown.js +71 -121
- package/lib/cjs/context.js +0 -9
- package/lib/cjs/index.js +0 -4
- package/lib/cjs/styles/index.scss.js +0 -3
- package/lib/cjs/types.js +0 -3
- package/lib/cjs/use-dropdown.js +30 -68
- package/lib/cjs/utils/index.js +1 -7
- package/lib/esm/Dropdown.js +53 -77
- package/lib/esm/context.js +0 -4
- package/lib/esm/styles/index.scss.js +0 -2
- package/lib/esm/use-dropdown.js +30 -52
- package/lib/esm/utils/index.js +1 -2
- package/package.json +16 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @hi-ui/dropdown
|
|
2
2
|
|
|
3
|
+
## 4.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2672](https://github.com/XiaoMi/hiui/pull/2672) [`1ebe27830`](https://github.com/XiaoMi/hiui/commit/1ebe2783098b3a8cd980bd10076d67635463800e) Thanks [@zyprepare](https://github.com/zyprepare)! - build: 升级到 rollup3,重新构建发布组件
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`1ebe27830`](https://github.com/XiaoMi/hiui/commit/1ebe2783098b3a8cd980bd10076d67635463800e)]:
|
|
10
|
+
- @hi-ui/core@4.0.6
|
|
11
|
+
- @hi-ui/use-latest@4.0.2
|
|
12
|
+
- @hi-ui/use-timeout@4.0.2
|
|
13
|
+
- @hi-ui/use-toggle@4.0.2
|
|
14
|
+
- @hi-ui/use-unmount-effect@4.0.2
|
|
15
|
+
- @hi-ui/icons@4.0.16
|
|
16
|
+
- @hi-ui/button@4.0.7
|
|
17
|
+
- @hi-ui/popper@4.1.1
|
|
18
|
+
- @hi-ui/classname@4.0.2
|
|
19
|
+
- @hi-ui/dom-utils@4.0.5
|
|
20
|
+
- @hi-ui/env@4.0.2
|
|
21
|
+
- @hi-ui/react-utils@4.0.2
|
|
22
|
+
- @hi-ui/type-assertion@4.0.2
|
|
23
|
+
|
|
3
24
|
## 4.1.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/lib/cjs/Dropdown.js
CHANGED
|
@@ -9,97 +9,63 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
13
|
-
|
|
14
|
-
Object.defineProperty(exports, '__esModule', {
|
|
15
|
-
value: true
|
|
16
|
-
});
|
|
17
|
-
|
|
18
12
|
var tslib = require('tslib');
|
|
19
|
-
|
|
20
13
|
var React = require('react');
|
|
21
|
-
|
|
22
14
|
var classname = require('@hi-ui/classname');
|
|
23
|
-
|
|
24
15
|
var env = require('@hi-ui/env');
|
|
25
|
-
|
|
26
16
|
var popper = require('@hi-ui/popper');
|
|
27
|
-
|
|
28
17
|
var context = require('./context.js');
|
|
29
|
-
|
|
30
18
|
var useDropdown = require('./use-dropdown.js');
|
|
31
|
-
|
|
32
19
|
var typeAssertion = require('@hi-ui/type-assertion');
|
|
33
|
-
|
|
34
20
|
var Button = require('@hi-ui/button');
|
|
35
|
-
|
|
36
21
|
var icons = require('@hi-ui/icons');
|
|
37
|
-
|
|
38
|
-
function _interopDefaultLegacy(e) {
|
|
39
|
-
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
40
|
-
'default': e
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
45
|
-
|
|
46
|
-
var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
|
|
47
|
-
|
|
48
22
|
var _role = 'dropdown';
|
|
49
|
-
|
|
50
23
|
var _prefix = classname.getPrefixCls(_role);
|
|
51
|
-
|
|
52
24
|
var DEFAULT_DATA = [];
|
|
53
25
|
/**
|
|
54
26
|
* 下拉菜单
|
|
55
27
|
*/
|
|
56
|
-
|
|
57
28
|
var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
58
29
|
var _a$prefixCls = _a.prefixCls,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
30
|
+
prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
|
|
31
|
+
_a$role = _a.role,
|
|
32
|
+
role = _a$role === void 0 ? _role : _a$role,
|
|
33
|
+
className = _a.className,
|
|
34
|
+
triggerButton = _a.children,
|
|
35
|
+
_a$data = _a.data,
|
|
36
|
+
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
|
37
|
+
title = _a.title,
|
|
38
|
+
_a$type = _a.type,
|
|
39
|
+
type = _a$type === void 0 ? 'text' : _a$type,
|
|
40
|
+
_onClick = _a.onClick,
|
|
41
|
+
onButtonClick = _a.onButtonClick,
|
|
42
|
+
overlayClassName = _a.overlayClassName,
|
|
43
|
+
_a$size = _a.size,
|
|
44
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
|
45
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "data", "title", "type", "onClick", "onButtonClick", "overlayClassName", "size"]);
|
|
76
46
|
var _b = useDropdown.useDropdown(rest),
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
47
|
+
rootProps = _b.rootProps,
|
|
48
|
+
providedValue = tslib.__rest(_b, ["rootProps"]);
|
|
80
49
|
var getMenuProps = providedValue.getMenuProps,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
50
|
+
getTriggerProps = providedValue.getTriggerProps,
|
|
51
|
+
disabled = providedValue.disabled,
|
|
52
|
+
menuVisibleAction = providedValue.menuVisibleAction;
|
|
84
53
|
var cls = classname.cx(prefixCls, className, disabled && prefixCls + "--disabled");
|
|
85
|
-
|
|
86
54
|
var dig = function dig(treeData) {
|
|
87
55
|
return treeData.map(function (item) {
|
|
88
|
-
var menu = typeAssertion.isArrayNonEmpty(item.children) ? /*#__PURE__*/
|
|
56
|
+
var menu = typeAssertion.isArrayNonEmpty(item.children) ? /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
89
57
|
overlay: {
|
|
90
58
|
gutterGap: 16
|
|
91
59
|
},
|
|
92
60
|
size: size
|
|
93
61
|
}, dig(item.children)) : null;
|
|
94
|
-
|
|
95
62
|
if (item.split) {
|
|
96
|
-
return /*#__PURE__*/
|
|
63
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
97
64
|
key: item.id,
|
|
98
65
|
className: prefixCls + "-divider"
|
|
99
66
|
});
|
|
100
67
|
}
|
|
101
|
-
|
|
102
|
-
return /*#__PURE__*/React__default["default"].createElement(DropdownMenuItem, {
|
|
68
|
+
return /*#__PURE__*/React.createElement(DropdownMenuItem, {
|
|
103
69
|
key: item.id,
|
|
104
70
|
disabled: item.disabled,
|
|
105
71
|
href: item.href,
|
|
@@ -109,7 +75,6 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
109
75
|
onClick: function onClick() {
|
|
110
76
|
if (item.disabled) return;
|
|
111
77
|
_onClick === null || _onClick === void 0 ? void 0 : _onClick(item.id);
|
|
112
|
-
|
|
113
78
|
if (!typeAssertion.isArray(item.children)) {
|
|
114
79
|
menuVisibleAction.off();
|
|
115
80
|
}
|
|
@@ -117,43 +82,38 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
117
82
|
}, item.title);
|
|
118
83
|
});
|
|
119
84
|
};
|
|
120
|
-
|
|
121
85
|
var renderButton = function renderButton() {
|
|
122
86
|
if (triggerButton) {
|
|
123
87
|
// @ts-ignore
|
|
124
88
|
return /*#__PURE__*/React.cloneElement(triggerButton, getTriggerProps(triggerButton.props, triggerButton.ref));
|
|
125
89
|
}
|
|
126
|
-
|
|
127
90
|
if (type === 'text' || type === 'button') {
|
|
128
|
-
return /*#__PURE__*/
|
|
91
|
+
return /*#__PURE__*/React.createElement(Button, Object.assign({}, getTriggerProps(), {
|
|
129
92
|
appearance: type === 'button' ? 'filled' : 'link'
|
|
130
|
-
}), title, /*#__PURE__*/
|
|
93
|
+
}), title, /*#__PURE__*/React.createElement(icons.DownOutlined, {
|
|
131
94
|
style: {
|
|
132
95
|
marginInlineStart: 2
|
|
133
96
|
}
|
|
134
97
|
}));
|
|
135
98
|
}
|
|
136
|
-
|
|
137
99
|
if (type === 'group') {
|
|
138
|
-
return /*#__PURE__*/
|
|
100
|
+
return /*#__PURE__*/React.createElement(Button.ButtonGroup, null, /*#__PURE__*/React.createElement(Button, {
|
|
139
101
|
onClick: onButtonClick
|
|
140
|
-
}, title), /*#__PURE__*/
|
|
102
|
+
}, title), /*#__PURE__*/React.createElement(Button, Object.assign({
|
|
141
103
|
className: classname.cx(prefixCls + "__icon", prefixCls + "__icon-btn-wrap")
|
|
142
104
|
}, getTriggerProps(), {
|
|
143
|
-
icon: /*#__PURE__*/
|
|
105
|
+
icon: /*#__PURE__*/React.createElement(icons.DownOutlined, null)
|
|
144
106
|
})));
|
|
145
107
|
}
|
|
146
|
-
|
|
147
108
|
return null;
|
|
148
109
|
};
|
|
149
|
-
|
|
150
|
-
return /*#__PURE__*/React__default["default"].createElement(context.DropDownProvider, {
|
|
110
|
+
return /*#__PURE__*/React.createElement(context.DropDownProvider, {
|
|
151
111
|
value: providedValue
|
|
152
|
-
}, /*#__PURE__*/
|
|
112
|
+
}, /*#__PURE__*/React.createElement("div", Object.assign({
|
|
153
113
|
ref: ref,
|
|
154
114
|
role: role,
|
|
155
115
|
className: cls
|
|
156
|
-
}, rootProps), renderButton(), typeAssertion.isArrayNonEmpty(data) ? /*#__PURE__*/
|
|
116
|
+
}, rootProps), renderButton(), typeAssertion.isArrayNonEmpty(data) ? /*#__PURE__*/React.createElement(DropdownMenu, Object.assign({}, getMenuProps({
|
|
157
117
|
overlay: {
|
|
158
118
|
disabledPortal: false,
|
|
159
119
|
className: overlayClassName
|
|
@@ -162,88 +122,78 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
162
122
|
size: size
|
|
163
123
|
}), dig(data)) : null));
|
|
164
124
|
});
|
|
165
|
-
|
|
166
125
|
if (env.__DEV__) {
|
|
167
126
|
Dropdown.displayName = 'Dropdown';
|
|
168
127
|
}
|
|
169
|
-
|
|
170
128
|
var dropdownMenuPrefix = classname.getPrefixCls('dropdown-menu');
|
|
171
129
|
var DropdownMenu = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
172
130
|
var _a$prefixCls2 = _a.prefixCls,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
131
|
+
prefixCls = _a$prefixCls2 === void 0 ? dropdownMenuPrefix : _a$prefixCls2,
|
|
132
|
+
overlay = _a.overlay,
|
|
133
|
+
parents = _a.parents,
|
|
134
|
+
className = _a.className,
|
|
135
|
+
children = _a.children,
|
|
136
|
+
_a$size2 = _a.size,
|
|
137
|
+
size = _a$size2 === void 0 ? 'lg' : _a$size2,
|
|
138
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "overlay", "parents", "className", "children", "size"]);
|
|
182
139
|
var cls = classname.cx(prefixCls, className, prefixCls + "--size-" + size);
|
|
183
|
-
return /*#__PURE__*/
|
|
140
|
+
return /*#__PURE__*/React.createElement(popper.Popper, Object.assign({}, overlay), /*#__PURE__*/React.createElement("ul", Object.assign({
|
|
184
141
|
ref: ref,
|
|
185
142
|
className: cls
|
|
186
|
-
}, rest), children ?
|
|
143
|
+
}, rest), children ? React.Children.map(children, function (child) {
|
|
187
144
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
188
145
|
parents: parents
|
|
189
146
|
});
|
|
190
147
|
}) : children));
|
|
191
148
|
});
|
|
192
|
-
|
|
193
149
|
if (env.__DEV__) {
|
|
194
150
|
DropdownMenu.displayName = 'DropdownMenu';
|
|
195
151
|
}
|
|
196
|
-
|
|
197
152
|
var dropdownMenuItemPrefix = classname.getPrefixCls('dropdown-menu-item');
|
|
198
153
|
var DropdownMenuItem = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
199
154
|
var _a$prefixCls3 = _a.prefixCls,
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
155
|
+
prefixCls = _a$prefixCls3 === void 0 ? dropdownMenuItemPrefix : _a$prefixCls3,
|
|
156
|
+
className = _a.className,
|
|
157
|
+
children = _a.children,
|
|
158
|
+
href = _a.href,
|
|
159
|
+
target = _a.target,
|
|
160
|
+
disabled = _a.disabled,
|
|
161
|
+
parentsProp = _a.parents,
|
|
162
|
+
menu = _a.menu,
|
|
163
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "href", "value", "target", "disabled", "parents", "menu"]);
|
|
210
164
|
var _useDropDownContext = context.useDropDownContext(),
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
165
|
+
triggerMethods = _useDropDownContext.triggerMethods,
|
|
166
|
+
width = _useDropDownContext.width;
|
|
214
167
|
var _useDropdown = useDropdown.useDropdown(Object.assign(Object.assign({
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
168
|
+
overlay: {
|
|
169
|
+
placement: 'right-start',
|
|
170
|
+
disabledPortal: true
|
|
171
|
+
},
|
|
172
|
+
width: width
|
|
173
|
+
}, rest), {
|
|
174
|
+
trigger: triggerMethods,
|
|
175
|
+
parents: parentsProp
|
|
176
|
+
})),
|
|
177
|
+
menuVisible = _useDropdown.menuVisible,
|
|
178
|
+
rootProps = _useDropdown.rootProps,
|
|
179
|
+
getTriggerProps = _useDropdown.getTriggerProps,
|
|
180
|
+
getMenuProps = _useDropdown.getMenuProps;
|
|
229
181
|
var cls = classname.cx(prefixCls, className, menuVisible && prefixCls + "--active", disabled && prefixCls + "--disabled");
|
|
230
182
|
var shouldUseLink = href && !disabled;
|
|
231
|
-
return /*#__PURE__*/
|
|
183
|
+
return /*#__PURE__*/React.createElement("li", Object.assign({
|
|
232
184
|
ref: ref,
|
|
233
185
|
className: cls
|
|
234
|
-
}, rootProps), /*#__PURE__*/
|
|
186
|
+
}, rootProps), /*#__PURE__*/React.createElement("div", Object.assign({
|
|
235
187
|
className: prefixCls + "__trigger"
|
|
236
|
-
}, getTriggerProps()), shouldUseLink ? /*#__PURE__*/
|
|
188
|
+
}, getTriggerProps()), shouldUseLink ? /*#__PURE__*/React.createElement("a", {
|
|
237
189
|
className: prefixCls + "__link",
|
|
238
190
|
href: href,
|
|
239
191
|
target: target
|
|
240
|
-
}, children) : children, menu ? /*#__PURE__*/
|
|
192
|
+
}, children) : children, menu ? /*#__PURE__*/React.createElement("span", {
|
|
241
193
|
className: prefixCls + "__arrow"
|
|
242
|
-
}, /*#__PURE__*/
|
|
194
|
+
}, /*#__PURE__*/React.createElement(icons.DownOutlined, null)) : null), menu ? /*#__PURE__*/React.cloneElement(menu, Object.assign({}, getMenuProps(menu.props))) : null);
|
|
243
195
|
});
|
|
244
|
-
|
|
245
196
|
if (env.__DEV__) {
|
|
246
197
|
DropdownMenuItem.displayName = 'DropdownMenuItem';
|
|
247
198
|
}
|
|
248
|
-
|
|
249
199
|
exports.Dropdown = Dropdown;
|
package/lib/cjs/context.js
CHANGED
|
@@ -9,24 +9,15 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
Object.defineProperty(exports, '__esModule', {
|
|
13
|
-
value: true
|
|
14
|
-
});
|
|
15
|
-
|
|
16
12
|
var React = require('react');
|
|
17
|
-
|
|
18
13
|
var dropDownContext = /*#__PURE__*/React.createContext(null);
|
|
19
14
|
var DropDownProvider = dropDownContext.Provider;
|
|
20
|
-
|
|
21
15
|
var useDropDownContext = function useDropDownContext() {
|
|
22
16
|
var context = React.useContext(dropDownContext);
|
|
23
|
-
|
|
24
17
|
if (!context) {
|
|
25
18
|
throw new Error('The dropDownContext is not defined, Maybe it should be wrapped in Dropdown.');
|
|
26
19
|
}
|
|
27
|
-
|
|
28
20
|
return context;
|
|
29
21
|
};
|
|
30
|
-
|
|
31
22
|
exports.DropDownProvider = DropDownProvider;
|
|
32
23
|
exports.useDropDownContext = useDropDownContext;
|
package/lib/cjs/index.js
CHANGED
|
@@ -12,13 +12,9 @@
|
|
|
12
12
|
Object.defineProperty(exports, '__esModule', {
|
|
13
13
|
value: true
|
|
14
14
|
});
|
|
15
|
-
|
|
16
15
|
require('./styles/index.scss.js');
|
|
17
|
-
|
|
18
16
|
var Dropdown = require('./Dropdown.js');
|
|
19
|
-
|
|
20
17
|
var types = require('./types.js');
|
|
21
|
-
|
|
22
18
|
exports.Dropdown = Dropdown.Dropdown;
|
|
23
19
|
exports["default"] = Dropdown.Dropdown;
|
|
24
20
|
exports.DropdownTriggerActionEnum = types.DropdownTriggerActionEnum;
|
|
@@ -13,9 +13,6 @@ Object.defineProperty(exports, '__esModule', {
|
|
|
13
13
|
value: true
|
|
14
14
|
});
|
|
15
15
|
var css_248z = ".hi-v4-dropdown {display: inline-block;}.hi-v4-dropdown-menu {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;background-color: var(--hi-v4-color-static-white, #fff);border-radius: var(--hi-v4-border-radius-md, 4px);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: var(--hi-v4-dropdown-menu-width, 180px);}.hi-v4-dropdown-menu-item {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;list-style: none;margin: 0;box-sizing: border-box;overflow: visible;}.hi-v4-dropdown-menu-item__link {color: var(--hi-v4-color-gray-700, #1f2733);width: 100%;text-decoration: none;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-dropdown-menu-item__arrow {-webkit-transform: rotate(-90deg);transform: rotate(-90deg);}.hi-v4-dropdown-menu-item__trigger {-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;height: 100%;cursor: pointer;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;-webkit-box-pack: justify;-ms-flex-pack: justify;justify-content: space-between;}.hi-v4-dropdown-menu--size-lg .hi-v4-dropdown-menu-item__trigger {padding: var(--hi-v4-spacing-5, 10px) var(--hi-v4-spacing-5, 10px);}.hi-v4-dropdown-menu--size-md .hi-v4-dropdown-menu-item__trigger {padding: var(--hi-v4-spacing-4, 8px) var(--hi-v4-spacing-4, 8px);}.hi-v4-dropdown-menu--size-sm .hi-v4-dropdown-menu-item__trigger {padding: var(--hi-v4-spacing-3, 6px) var(--hi-v4-spacing-3, 6px);}.hi-v4-dropdown-menu-item:not(.hi-v4-dropdown-menu-item--disabled) > .hi-v4-dropdown-menu-item__trigger:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-dropdown-menu-item--active:not(.hi-v4-dropdown-menu-item--disabled) > .hi-v4-dropdown-menu-item__trigger {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-dropdown-menu-item--disabled > .hi-v4-dropdown-menu-item__trigger {cursor: not-allowed;color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-dropdown-divider {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;list-style: none;background-color: var(--hi-v4-color-gray-200, #ebedf0);width: 100%;height: 1px;margin: var(--hi-v4-spacing-4, 8px) 0;}";
|
|
16
|
-
|
|
17
16
|
var __styleInject__ = require('style-inject')["default"];
|
|
18
|
-
|
|
19
17
|
__styleInject__(css_248z);
|
|
20
|
-
|
|
21
18
|
exports["default"] = css_248z;
|
package/lib/cjs/types.js
CHANGED
package/lib/cjs/use-dropdown.js
CHANGED
|
@@ -9,95 +9,70 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
Object.defineProperty(exports, '__esModule', {
|
|
13
|
-
value: true
|
|
14
|
-
});
|
|
15
|
-
|
|
16
12
|
var tslib = require('tslib');
|
|
17
|
-
|
|
18
13
|
var React = require('react');
|
|
19
|
-
|
|
20
14
|
var types = require('./types.js');
|
|
21
|
-
|
|
22
15
|
var index = require('./utils/index.js');
|
|
23
|
-
|
|
24
16
|
var useToggle = require('@hi-ui/use-toggle');
|
|
25
|
-
|
|
26
17
|
var useLatest = require('@hi-ui/use-latest');
|
|
27
|
-
|
|
28
18
|
var useTimeout = require('@hi-ui/use-timeout');
|
|
29
|
-
|
|
30
19
|
var useUnmountEffect = require('@hi-ui/use-unmount-effect');
|
|
31
|
-
|
|
32
20
|
var classname = require('@hi-ui/classname');
|
|
33
|
-
|
|
34
21
|
var reactUtils = require('@hi-ui/react-utils');
|
|
35
|
-
|
|
36
22
|
var domUtils = require('@hi-ui/dom-utils');
|
|
37
|
-
|
|
38
23
|
var typeAssertion = require('@hi-ui/type-assertion');
|
|
39
|
-
|
|
40
24
|
var NOOP_ARRAY = [];
|
|
41
|
-
|
|
42
25
|
var useDropdown = function useDropdown(props) {
|
|
43
26
|
var _props$trigger = props.trigger,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
27
|
+
triggerProp = _props$trigger === void 0 ? types.DropdownTriggerActionEnum.HOVER : _props$trigger,
|
|
28
|
+
_props$disabled = props.disabled,
|
|
29
|
+
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
|
30
|
+
_props$parents = props.parents,
|
|
31
|
+
parents = _props$parents === void 0 ? NOOP_ARRAY : _props$parents,
|
|
32
|
+
width = props.width,
|
|
33
|
+
overlay = props.overlay,
|
|
34
|
+
rest = tslib.__rest(props, ["trigger", "disabled", "parents", "width", "overlay"]);
|
|
53
35
|
var triggerElementRef = React.useRef(null);
|
|
54
36
|
var popperElementRef = React.useRef(null);
|
|
55
37
|
/**
|
|
56
38
|
* 抹平数组或字符串结构,同时 memo 处理,减少重渲染
|
|
57
39
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
40
|
+
var trigger = index.normalizeTrigger(triggerProp);
|
|
41
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
61
42
|
var triggerMethods = React.useMemo(function () {
|
|
62
43
|
return trigger;
|
|
63
44
|
}, trigger);
|
|
64
|
-
|
|
65
45
|
var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
46
|
+
defaultVisible: false,
|
|
47
|
+
disabled: disabled
|
|
48
|
+
}),
|
|
49
|
+
menuVisible = _useUncontrolledToggl[0],
|
|
50
|
+
menuVisibleAction = _useUncontrolledToggl[1];
|
|
71
51
|
/**
|
|
72
52
|
* 维护 trigger 元素 或 tooltip 弹出层元素的 hover 态
|
|
73
53
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
54
|
var hoveringRef = React.useRef(false);
|
|
77
|
-
|
|
78
55
|
var _useTimeout = useTimeout.useTimeout(function () {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
56
|
+
if (disabled) return;
|
|
57
|
+
menuVisibleAction.on();
|
|
58
|
+
}, 0),
|
|
59
|
+
startOpenTimer = _useTimeout.start,
|
|
60
|
+
clearOpenTimer = _useTimeout.clear;
|
|
85
61
|
var _useTimeout2 = useTimeout.useTimeout(function () {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
62
|
+
if (disabled) return;
|
|
63
|
+
if (hoveringRef.current) return;
|
|
64
|
+
menuVisibleAction.off();
|
|
65
|
+
}, 100),
|
|
66
|
+
startCloseTimer = _useTimeout2.start,
|
|
67
|
+
clearCloseTimer = _useTimeout2.clear;
|
|
93
68
|
var clearToggleTimer = React.useCallback(function () {
|
|
94
69
|
clearOpenTimer();
|
|
95
70
|
clearCloseTimer();
|
|
96
71
|
}, [clearOpenTimer, clearCloseTimer]);
|
|
97
72
|
useUnmountEffect.useUnmountEffect(clearToggleTimer);
|
|
98
73
|
var handlePopperLeave = useLatest.useLatestCallback(function (evt) {
|
|
99
|
-
hoveringRef.current = false;
|
|
100
|
-
|
|
74
|
+
hoveringRef.current = false;
|
|
75
|
+
// if (triggerElementRef.current?.contains(evt.target as HTMLElement)) return
|
|
101
76
|
clearOpenTimer();
|
|
102
77
|
startCloseTimer();
|
|
103
78
|
});
|
|
@@ -110,11 +85,9 @@ var useDropdown = function useDropdown(props) {
|
|
|
110
85
|
if (props === void 0) {
|
|
111
86
|
props = {};
|
|
112
87
|
}
|
|
113
|
-
|
|
114
88
|
if (ref === void 0) {
|
|
115
89
|
ref = null;
|
|
116
90
|
}
|
|
117
|
-
|
|
118
91
|
var triggerProps = {
|
|
119
92
|
ref: reactUtils.mergeRefs(triggerElementRef, ref),
|
|
120
93
|
disabled: disabled
|
|
@@ -123,26 +96,22 @@ var useDropdown = function useDropdown(props) {
|
|
|
123
96
|
* 事件收集
|
|
124
97
|
* 'click' | 'contextmenu' | 'hover'
|
|
125
98
|
*/
|
|
126
|
-
|
|
127
99
|
triggerMethods.reduce(function (acc, cur) {
|
|
128
100
|
switch (cur) {
|
|
129
101
|
case types.DropdownTriggerActionEnum.HOVER:
|
|
130
102
|
acc.onMouseEnter = domUtils.mockDefaultHandlers(props.onMouseEnter, handlePopperEnter);
|
|
131
103
|
acc.onMouseLeave = domUtils.mockDefaultHandlers(props.onMouseLeave, handlePopperLeave);
|
|
132
104
|
break;
|
|
133
|
-
|
|
134
105
|
case types.DropdownTriggerActionEnum.CONTEXTMENU:
|
|
135
106
|
acc.onContextMenu = domUtils.mockDefaultHandlers(props.onContextMenu, function (evt) {
|
|
136
107
|
evt.preventDefault();
|
|
137
108
|
menuVisibleAction.not();
|
|
138
109
|
});
|
|
139
110
|
break;
|
|
140
|
-
|
|
141
111
|
case types.DropdownTriggerActionEnum.CLICK:
|
|
142
112
|
acc.onClick = domUtils.mockDefaultHandlers(props.onClick, menuVisibleAction.not);
|
|
143
113
|
break;
|
|
144
114
|
}
|
|
145
|
-
|
|
146
115
|
return acc;
|
|
147
116
|
}, triggerProps);
|
|
148
117
|
return triggerProps;
|
|
@@ -150,15 +119,12 @@ var useDropdown = function useDropdown(props) {
|
|
|
150
119
|
var rootProps = rest;
|
|
151
120
|
var getMenuProps = useLatest.useLatestCallback(function (props, ref) {
|
|
152
121
|
var _Object$assign;
|
|
153
|
-
|
|
154
122
|
if (props === void 0) {
|
|
155
123
|
props = {};
|
|
156
124
|
}
|
|
157
|
-
|
|
158
125
|
if (ref === void 0) {
|
|
159
126
|
ref = null;
|
|
160
127
|
}
|
|
161
|
-
|
|
162
128
|
var menuParents = parents.concat(triggerElementRef);
|
|
163
129
|
var menuProps = Object.assign(Object.assign({}, props), {
|
|
164
130
|
ref: reactUtils.mergeRefs(popperElementRef, ref),
|
|
@@ -171,17 +137,14 @@ var useDropdown = function useDropdown(props) {
|
|
|
171
137
|
onClose: menuVisibleAction.off
|
|
172
138
|
})
|
|
173
139
|
});
|
|
174
|
-
|
|
175
140
|
if (triggerMethods.includes(types.DropdownTriggerActionEnum.HOVER)) {
|
|
176
141
|
// @ts-ignore
|
|
177
142
|
menuProps.onMouseEnter = function () {
|
|
178
143
|
hoveringRef.current = true;
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
|
|
144
|
+
};
|
|
145
|
+
// @ts-ignore
|
|
182
146
|
menuProps.onMouseLeave = handlePopperLeave;
|
|
183
147
|
}
|
|
184
|
-
|
|
185
148
|
return menuProps;
|
|
186
149
|
});
|
|
187
150
|
return {
|
|
@@ -196,5 +159,4 @@ var useDropdown = function useDropdown(props) {
|
|
|
196
159
|
getMenuProps: getMenuProps
|
|
197
160
|
};
|
|
198
161
|
};
|
|
199
|
-
|
|
200
162
|
exports.useDropdown = useDropdown;
|
package/lib/cjs/utils/index.js
CHANGED
|
@@ -9,21 +9,15 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
Object.defineProperty(exports, '__esModule', {
|
|
13
|
-
value: true
|
|
14
|
-
});
|
|
15
|
-
|
|
16
12
|
var typeAssertion = require('@hi-ui/type-assertion');
|
|
13
|
+
|
|
17
14
|
/**
|
|
18
15
|
* 抹平 trigger 结构为数组
|
|
19
16
|
*
|
|
20
17
|
* @param trigger
|
|
21
18
|
* @returns
|
|
22
19
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
20
|
var normalizeTrigger = function normalizeTrigger(trigger) {
|
|
26
21
|
return typeAssertion.isArray(trigger) ? Array.from(new Set(trigger)) : [trigger];
|
|
27
22
|
};
|
|
28
|
-
|
|
29
23
|
exports.normalizeTrigger = normalizeTrigger;
|
package/lib/esm/Dropdown.js
CHANGED
|
@@ -18,43 +18,37 @@ import { isArrayNonEmpty, isArray } from '@hi-ui/type-assertion';
|
|
|
18
18
|
import Button, { ButtonGroup } from '@hi-ui/button';
|
|
19
19
|
import { DownOutlined } from '@hi-ui/icons';
|
|
20
20
|
var _role = 'dropdown';
|
|
21
|
-
|
|
22
21
|
var _prefix = getPrefixCls(_role);
|
|
23
|
-
|
|
24
22
|
var DEFAULT_DATA = [];
|
|
25
23
|
/**
|
|
26
24
|
* 下拉菜单
|
|
27
25
|
*/
|
|
28
|
-
|
|
29
26
|
var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
30
27
|
var _a$prefixCls = _a.prefixCls,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
28
|
+
prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
|
|
29
|
+
_a$role = _a.role,
|
|
30
|
+
role = _a$role === void 0 ? _role : _a$role,
|
|
31
|
+
className = _a.className,
|
|
32
|
+
triggerButton = _a.children,
|
|
33
|
+
_a$data = _a.data,
|
|
34
|
+
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
|
35
|
+
title = _a.title,
|
|
36
|
+
_a$type = _a.type,
|
|
37
|
+
type = _a$type === void 0 ? 'text' : _a$type,
|
|
38
|
+
_onClick = _a.onClick,
|
|
39
|
+
onButtonClick = _a.onButtonClick,
|
|
40
|
+
overlayClassName = _a.overlayClassName,
|
|
41
|
+
_a$size = _a.size,
|
|
42
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
|
43
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "data", "title", "type", "onClick", "onButtonClick", "overlayClassName", "size"]);
|
|
48
44
|
var _b = useDropdown(rest),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
rootProps = _b.rootProps,
|
|
46
|
+
providedValue = __rest(_b, ["rootProps"]);
|
|
52
47
|
var getMenuProps = providedValue.getMenuProps,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
getTriggerProps = providedValue.getTriggerProps,
|
|
49
|
+
disabled = providedValue.disabled,
|
|
50
|
+
menuVisibleAction = providedValue.menuVisibleAction;
|
|
56
51
|
var cls = cx(prefixCls, className, disabled && prefixCls + "--disabled");
|
|
57
|
-
|
|
58
52
|
var dig = function dig(treeData) {
|
|
59
53
|
return treeData.map(function (item) {
|
|
60
54
|
var menu = isArrayNonEmpty(item.children) ? /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
@@ -63,14 +57,12 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
63
57
|
},
|
|
64
58
|
size: size
|
|
65
59
|
}, dig(item.children)) : null;
|
|
66
|
-
|
|
67
60
|
if (item.split) {
|
|
68
61
|
return /*#__PURE__*/React.createElement("li", {
|
|
69
62
|
key: item.id,
|
|
70
63
|
className: prefixCls + "-divider"
|
|
71
64
|
});
|
|
72
65
|
}
|
|
73
|
-
|
|
74
66
|
return /*#__PURE__*/React.createElement(DropdownMenuItem, {
|
|
75
67
|
key: item.id,
|
|
76
68
|
disabled: item.disabled,
|
|
@@ -81,7 +73,6 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
81
73
|
onClick: function onClick() {
|
|
82
74
|
if (item.disabled) return;
|
|
83
75
|
_onClick === null || _onClick === void 0 ? void 0 : _onClick(item.id);
|
|
84
|
-
|
|
85
76
|
if (!isArray(item.children)) {
|
|
86
77
|
menuVisibleAction.off();
|
|
87
78
|
}
|
|
@@ -89,13 +80,11 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
89
80
|
}, item.title);
|
|
90
81
|
});
|
|
91
82
|
};
|
|
92
|
-
|
|
93
83
|
var renderButton = function renderButton() {
|
|
94
84
|
if (triggerButton) {
|
|
95
85
|
// @ts-ignore
|
|
96
86
|
return /*#__PURE__*/cloneElement(triggerButton, getTriggerProps(triggerButton.props, triggerButton.ref));
|
|
97
87
|
}
|
|
98
|
-
|
|
99
88
|
if (type === 'text' || type === 'button') {
|
|
100
89
|
return /*#__PURE__*/React.createElement(Button, Object.assign({}, getTriggerProps(), {
|
|
101
90
|
appearance: type === 'button' ? 'filled' : 'link'
|
|
@@ -105,7 +94,6 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
105
94
|
}
|
|
106
95
|
}));
|
|
107
96
|
}
|
|
108
|
-
|
|
109
97
|
if (type === 'group') {
|
|
110
98
|
return /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(Button, {
|
|
111
99
|
onClick: onButtonClick
|
|
@@ -115,10 +103,8 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
115
103
|
icon: /*#__PURE__*/React.createElement(DownOutlined, null)
|
|
116
104
|
})));
|
|
117
105
|
}
|
|
118
|
-
|
|
119
106
|
return null;
|
|
120
107
|
};
|
|
121
|
-
|
|
122
108
|
return /*#__PURE__*/React.createElement(DropDownProvider, {
|
|
123
109
|
value: providedValue
|
|
124
110
|
}, /*#__PURE__*/React.createElement("div", Object.assign({
|
|
@@ -134,23 +120,20 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
134
120
|
size: size
|
|
135
121
|
}), dig(data)) : null));
|
|
136
122
|
});
|
|
137
|
-
|
|
138
123
|
if (__DEV__) {
|
|
139
124
|
Dropdown.displayName = 'Dropdown';
|
|
140
125
|
}
|
|
141
|
-
|
|
142
126
|
var dropdownMenuPrefix = getPrefixCls('dropdown-menu');
|
|
143
127
|
var DropdownMenu = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
144
128
|
var _a$prefixCls2 = _a.prefixCls,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
129
|
+
prefixCls = _a$prefixCls2 === void 0 ? dropdownMenuPrefix : _a$prefixCls2,
|
|
130
|
+
overlay = _a.overlay,
|
|
131
|
+
parents = _a.parents,
|
|
132
|
+
className = _a.className,
|
|
133
|
+
children = _a.children,
|
|
134
|
+
_a$size2 = _a.size,
|
|
135
|
+
size = _a$size2 === void 0 ? 'lg' : _a$size2,
|
|
136
|
+
rest = __rest(_a, ["prefixCls", "role", "overlay", "parents", "className", "children", "size"]);
|
|
154
137
|
var cls = cx(prefixCls, className, prefixCls + "--size-" + size);
|
|
155
138
|
return /*#__PURE__*/React.createElement(Popper, Object.assign({}, overlay), /*#__PURE__*/React.createElement("ul", Object.assign({
|
|
156
139
|
ref: ref,
|
|
@@ -161,43 +144,38 @@ var DropdownMenu = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
161
144
|
});
|
|
162
145
|
}) : children));
|
|
163
146
|
});
|
|
164
|
-
|
|
165
147
|
if (__DEV__) {
|
|
166
148
|
DropdownMenu.displayName = 'DropdownMenu';
|
|
167
149
|
}
|
|
168
|
-
|
|
169
150
|
var dropdownMenuItemPrefix = getPrefixCls('dropdown-menu-item');
|
|
170
151
|
var DropdownMenuItem = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
171
152
|
var _a$prefixCls3 = _a.prefixCls,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
153
|
+
prefixCls = _a$prefixCls3 === void 0 ? dropdownMenuItemPrefix : _a$prefixCls3,
|
|
154
|
+
className = _a.className,
|
|
155
|
+
children = _a.children,
|
|
156
|
+
href = _a.href,
|
|
157
|
+
target = _a.target,
|
|
158
|
+
disabled = _a.disabled,
|
|
159
|
+
parentsProp = _a.parents,
|
|
160
|
+
menu = _a.menu,
|
|
161
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "href", "value", "target", "disabled", "parents", "menu"]);
|
|
182
162
|
var _useDropDownContext = useDropDownContext(),
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
163
|
+
triggerMethods = _useDropDownContext.triggerMethods,
|
|
164
|
+
width = _useDropDownContext.width;
|
|
186
165
|
var _useDropdown = useDropdown(Object.assign(Object.assign({
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
166
|
+
overlay: {
|
|
167
|
+
placement: 'right-start',
|
|
168
|
+
disabledPortal: true
|
|
169
|
+
},
|
|
170
|
+
width: width
|
|
171
|
+
}, rest), {
|
|
172
|
+
trigger: triggerMethods,
|
|
173
|
+
parents: parentsProp
|
|
174
|
+
})),
|
|
175
|
+
menuVisible = _useDropdown.menuVisible,
|
|
176
|
+
rootProps = _useDropdown.rootProps,
|
|
177
|
+
getTriggerProps = _useDropdown.getTriggerProps,
|
|
178
|
+
getMenuProps = _useDropdown.getMenuProps;
|
|
201
179
|
var cls = cx(prefixCls, className, menuVisible && prefixCls + "--active", disabled && prefixCls + "--disabled");
|
|
202
180
|
var shouldUseLink = href && !disabled;
|
|
203
181
|
return /*#__PURE__*/React.createElement("li", Object.assign({
|
|
@@ -213,9 +191,7 @@ var DropdownMenuItem = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
213
191
|
className: prefixCls + "__arrow"
|
|
214
192
|
}, /*#__PURE__*/React.createElement(DownOutlined, null)) : null), menu ? /*#__PURE__*/cloneElement(menu, Object.assign({}, getMenuProps(menu.props))) : null);
|
|
215
193
|
});
|
|
216
|
-
|
|
217
194
|
if (__DEV__) {
|
|
218
195
|
DropdownMenuItem.displayName = 'DropdownMenuItem';
|
|
219
196
|
}
|
|
220
|
-
|
|
221
197
|
export { Dropdown };
|
package/lib/esm/context.js
CHANGED
|
@@ -10,15 +10,11 @@
|
|
|
10
10
|
import { useContext, createContext } from 'react';
|
|
11
11
|
var dropDownContext = /*#__PURE__*/createContext(null);
|
|
12
12
|
var DropDownProvider = dropDownContext.Provider;
|
|
13
|
-
|
|
14
13
|
var useDropDownContext = function useDropDownContext() {
|
|
15
14
|
var context = useContext(dropDownContext);
|
|
16
|
-
|
|
17
15
|
if (!context) {
|
|
18
16
|
throw new Error('The dropDownContext is not defined, Maybe it should be wrapped in Dropdown.');
|
|
19
17
|
}
|
|
20
|
-
|
|
21
18
|
return context;
|
|
22
19
|
};
|
|
23
|
-
|
|
24
20
|
export { DropDownProvider, useDropDownContext };
|
|
@@ -9,7 +9,5 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import __styleInject__ from 'style-inject';
|
|
11
11
|
var css_248z = ".hi-v4-dropdown {display: inline-block;}.hi-v4-dropdown-menu {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;background-color: var(--hi-v4-color-static-white, #fff);border-radius: var(--hi-v4-border-radius-md, 4px);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: var(--hi-v4-dropdown-menu-width, 180px);}.hi-v4-dropdown-menu-item {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;list-style: none;margin: 0;box-sizing: border-box;overflow: visible;}.hi-v4-dropdown-menu-item__link {color: var(--hi-v4-color-gray-700, #1f2733);width: 100%;text-decoration: none;-webkit-box-sizing: border-box;box-sizing: border-box;}.hi-v4-dropdown-menu-item__arrow {-webkit-transform: rotate(-90deg);transform: rotate(-90deg);}.hi-v4-dropdown-menu-item__trigger {-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;height: 100%;cursor: pointer;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;-webkit-box-pack: justify;-ms-flex-pack: justify;justify-content: space-between;}.hi-v4-dropdown-menu--size-lg .hi-v4-dropdown-menu-item__trigger {padding: var(--hi-v4-spacing-5, 10px) var(--hi-v4-spacing-5, 10px);}.hi-v4-dropdown-menu--size-md .hi-v4-dropdown-menu-item__trigger {padding: var(--hi-v4-spacing-4, 8px) var(--hi-v4-spacing-4, 8px);}.hi-v4-dropdown-menu--size-sm .hi-v4-dropdown-menu-item__trigger {padding: var(--hi-v4-spacing-3, 6px) var(--hi-v4-spacing-3, 6px);}.hi-v4-dropdown-menu-item:not(.hi-v4-dropdown-menu-item--disabled) > .hi-v4-dropdown-menu-item__trigger:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-dropdown-menu-item--active:not(.hi-v4-dropdown-menu-item--disabled) > .hi-v4-dropdown-menu-item__trigger {background-color: var(--hi-v4-color-gray-100, #f2f4f7);}.hi-v4-dropdown-menu-item--disabled > .hi-v4-dropdown-menu-item__trigger {cursor: not-allowed;color: var(--hi-v4-color-gray-500, #929aa6);}.hi-v4-dropdown-divider {-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;list-style: none;background-color: var(--hi-v4-color-gray-200, #ebedf0);width: 100%;height: 1px;margin: var(--hi-v4-spacing-4, 8px) 0;}";
|
|
12
|
-
|
|
13
12
|
__styleInject__(css_248z);
|
|
14
|
-
|
|
15
13
|
export { css_248z as default };
|
package/lib/esm/use-dropdown.js
CHANGED
|
@@ -20,66 +20,57 @@ import { mergeRefs } from '@hi-ui/react-utils';
|
|
|
20
20
|
import { mockDefaultHandlers } from '@hi-ui/dom-utils';
|
|
21
21
|
import { isNumeric } from '@hi-ui/type-assertion';
|
|
22
22
|
var NOOP_ARRAY = [];
|
|
23
|
-
|
|
24
23
|
var useDropdown = function useDropdown(props) {
|
|
25
24
|
var _props$trigger = props.trigger,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
triggerProp = _props$trigger === void 0 ? DropdownTriggerActionEnum.HOVER : _props$trigger,
|
|
26
|
+
_props$disabled = props.disabled,
|
|
27
|
+
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
|
28
|
+
_props$parents = props.parents,
|
|
29
|
+
parents = _props$parents === void 0 ? NOOP_ARRAY : _props$parents,
|
|
30
|
+
width = props.width,
|
|
31
|
+
overlay = props.overlay,
|
|
32
|
+
rest = __rest(props, ["trigger", "disabled", "parents", "width", "overlay"]);
|
|
35
33
|
var triggerElementRef = useRef(null);
|
|
36
34
|
var popperElementRef = useRef(null);
|
|
37
35
|
/**
|
|
38
36
|
* 抹平数组或字符串结构,同时 memo 处理,减少重渲染
|
|
39
37
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
var trigger = normalizeTrigger(triggerProp);
|
|
39
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
43
40
|
var triggerMethods = useMemo(function () {
|
|
44
41
|
return trigger;
|
|
45
42
|
}, trigger);
|
|
46
|
-
|
|
47
43
|
var _useUncontrolledToggl = useUncontrolledToggle({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
defaultVisible: false,
|
|
45
|
+
disabled: disabled
|
|
46
|
+
}),
|
|
47
|
+
menuVisible = _useUncontrolledToggl[0],
|
|
48
|
+
menuVisibleAction = _useUncontrolledToggl[1];
|
|
53
49
|
/**
|
|
54
50
|
* 维护 trigger 元素 或 tooltip 弹出层元素的 hover 态
|
|
55
51
|
*/
|
|
56
|
-
|
|
57
|
-
|
|
58
52
|
var hoveringRef = useRef(false);
|
|
59
|
-
|
|
60
53
|
var _useTimeout = useTimeout(function () {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
if (disabled) return;
|
|
55
|
+
menuVisibleAction.on();
|
|
56
|
+
}, 0),
|
|
57
|
+
startOpenTimer = _useTimeout.start,
|
|
58
|
+
clearOpenTimer = _useTimeout.clear;
|
|
67
59
|
var _useTimeout2 = useTimeout(function () {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
if (disabled) return;
|
|
61
|
+
if (hoveringRef.current) return;
|
|
62
|
+
menuVisibleAction.off();
|
|
63
|
+
}, 100),
|
|
64
|
+
startCloseTimer = _useTimeout2.start,
|
|
65
|
+
clearCloseTimer = _useTimeout2.clear;
|
|
75
66
|
var clearToggleTimer = useCallback(function () {
|
|
76
67
|
clearOpenTimer();
|
|
77
68
|
clearCloseTimer();
|
|
78
69
|
}, [clearOpenTimer, clearCloseTimer]);
|
|
79
70
|
useUnmountEffect(clearToggleTimer);
|
|
80
71
|
var handlePopperLeave = useLatestCallback(function (evt) {
|
|
81
|
-
hoveringRef.current = false;
|
|
82
|
-
|
|
72
|
+
hoveringRef.current = false;
|
|
73
|
+
// if (triggerElementRef.current?.contains(evt.target as HTMLElement)) return
|
|
83
74
|
clearOpenTimer();
|
|
84
75
|
startCloseTimer();
|
|
85
76
|
});
|
|
@@ -92,11 +83,9 @@ var useDropdown = function useDropdown(props) {
|
|
|
92
83
|
if (props === void 0) {
|
|
93
84
|
props = {};
|
|
94
85
|
}
|
|
95
|
-
|
|
96
86
|
if (ref === void 0) {
|
|
97
87
|
ref = null;
|
|
98
88
|
}
|
|
99
|
-
|
|
100
89
|
var triggerProps = {
|
|
101
90
|
ref: mergeRefs(triggerElementRef, ref),
|
|
102
91
|
disabled: disabled
|
|
@@ -105,26 +94,22 @@ var useDropdown = function useDropdown(props) {
|
|
|
105
94
|
* 事件收集
|
|
106
95
|
* 'click' | 'contextmenu' | 'hover'
|
|
107
96
|
*/
|
|
108
|
-
|
|
109
97
|
triggerMethods.reduce(function (acc, cur) {
|
|
110
98
|
switch (cur) {
|
|
111
99
|
case DropdownTriggerActionEnum.HOVER:
|
|
112
100
|
acc.onMouseEnter = mockDefaultHandlers(props.onMouseEnter, handlePopperEnter);
|
|
113
101
|
acc.onMouseLeave = mockDefaultHandlers(props.onMouseLeave, handlePopperLeave);
|
|
114
102
|
break;
|
|
115
|
-
|
|
116
103
|
case DropdownTriggerActionEnum.CONTEXTMENU:
|
|
117
104
|
acc.onContextMenu = mockDefaultHandlers(props.onContextMenu, function (evt) {
|
|
118
105
|
evt.preventDefault();
|
|
119
106
|
menuVisibleAction.not();
|
|
120
107
|
});
|
|
121
108
|
break;
|
|
122
|
-
|
|
123
109
|
case DropdownTriggerActionEnum.CLICK:
|
|
124
110
|
acc.onClick = mockDefaultHandlers(props.onClick, menuVisibleAction.not);
|
|
125
111
|
break;
|
|
126
112
|
}
|
|
127
|
-
|
|
128
113
|
return acc;
|
|
129
114
|
}, triggerProps);
|
|
130
115
|
return triggerProps;
|
|
@@ -132,15 +117,12 @@ var useDropdown = function useDropdown(props) {
|
|
|
132
117
|
var rootProps = rest;
|
|
133
118
|
var getMenuProps = useLatestCallback(function (props, ref) {
|
|
134
119
|
var _Object$assign;
|
|
135
|
-
|
|
136
120
|
if (props === void 0) {
|
|
137
121
|
props = {};
|
|
138
122
|
}
|
|
139
|
-
|
|
140
123
|
if (ref === void 0) {
|
|
141
124
|
ref = null;
|
|
142
125
|
}
|
|
143
|
-
|
|
144
126
|
var menuParents = parents.concat(triggerElementRef);
|
|
145
127
|
var menuProps = Object.assign(Object.assign({}, props), {
|
|
146
128
|
ref: mergeRefs(popperElementRef, ref),
|
|
@@ -153,17 +135,14 @@ var useDropdown = function useDropdown(props) {
|
|
|
153
135
|
onClose: menuVisibleAction.off
|
|
154
136
|
})
|
|
155
137
|
});
|
|
156
|
-
|
|
157
138
|
if (triggerMethods.includes(DropdownTriggerActionEnum.HOVER)) {
|
|
158
139
|
// @ts-ignore
|
|
159
140
|
menuProps.onMouseEnter = function () {
|
|
160
141
|
hoveringRef.current = true;
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
|
|
142
|
+
};
|
|
143
|
+
// @ts-ignore
|
|
164
144
|
menuProps.onMouseLeave = handlePopperLeave;
|
|
165
145
|
}
|
|
166
|
-
|
|
167
146
|
return menuProps;
|
|
168
147
|
});
|
|
169
148
|
return {
|
|
@@ -178,5 +157,4 @@ var useDropdown = function useDropdown(props) {
|
|
|
178
157
|
getMenuProps: getMenuProps
|
|
179
158
|
};
|
|
180
159
|
};
|
|
181
|
-
|
|
182
160
|
export { useDropdown };
|
package/lib/esm/utils/index.js
CHANGED
|
@@ -8,15 +8,14 @@
|
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
9
|
*/
|
|
10
10
|
import { isArray } from '@hi-ui/type-assertion';
|
|
11
|
+
|
|
11
12
|
/**
|
|
12
13
|
* 抹平 trigger 结构为数组
|
|
13
14
|
*
|
|
14
15
|
* @param trigger
|
|
15
16
|
* @returns
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
18
|
var normalizeTrigger = function normalizeTrigger(trigger) {
|
|
19
19
|
return isArray(trigger) ? Array.from(new Set(trigger)) : [trigger];
|
|
20
20
|
};
|
|
21
|
-
|
|
22
21
|
export { normalizeTrigger };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hi-ui/dropdown",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.2",
|
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "HiUI <mi-hiui@xiaomi.com>",
|
|
@@ -43,27 +43,27 @@
|
|
|
43
43
|
"url": "https://github.com/XiaoMi/hiui/issues"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@hi-ui/button": "^4.0.
|
|
47
|
-
"@hi-ui/classname": "^4.0.
|
|
48
|
-
"@hi-ui/dom-utils": "^4.0.
|
|
49
|
-
"@hi-ui/env": "^4.0.
|
|
50
|
-
"@hi-ui/icons": "^4.0.
|
|
51
|
-
"@hi-ui/popper": "^4.
|
|
52
|
-
"@hi-ui/react-utils": "^4.0.
|
|
53
|
-
"@hi-ui/type-assertion": "^4.0.
|
|
54
|
-
"@hi-ui/use-latest": "^4.0.
|
|
55
|
-
"@hi-ui/use-timeout": "^4.0.
|
|
56
|
-
"@hi-ui/use-toggle": "^4.0.
|
|
57
|
-
"@hi-ui/use-unmount-effect": "^4.0.
|
|
46
|
+
"@hi-ui/button": "^4.0.7",
|
|
47
|
+
"@hi-ui/classname": "^4.0.2",
|
|
48
|
+
"@hi-ui/dom-utils": "^4.0.5",
|
|
49
|
+
"@hi-ui/env": "^4.0.2",
|
|
50
|
+
"@hi-ui/icons": "^4.0.16",
|
|
51
|
+
"@hi-ui/popper": "^4.1.1",
|
|
52
|
+
"@hi-ui/react-utils": "^4.0.2",
|
|
53
|
+
"@hi-ui/type-assertion": "^4.0.2",
|
|
54
|
+
"@hi-ui/use-latest": "^4.0.2",
|
|
55
|
+
"@hi-ui/use-timeout": "^4.0.2",
|
|
56
|
+
"@hi-ui/use-toggle": "^4.0.2",
|
|
57
|
+
"@hi-ui/use-unmount-effect": "^4.0.2"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
|
-
"@hi-ui/core": ">=4.0.
|
|
60
|
+
"@hi-ui/core": ">=4.0.6",
|
|
61
61
|
"react": ">=16.8.6",
|
|
62
62
|
"react-dom": ">=16.8.6"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@hi-ui/core": "^4.0.
|
|
66
|
-
"@hi-ui/core-css": "^4.1.
|
|
65
|
+
"@hi-ui/core": "^4.0.6",
|
|
66
|
+
"@hi-ui/core-css": "^4.1.3",
|
|
67
67
|
"react": "^17.0.1",
|
|
68
68
|
"react-dom": "^17.0.1"
|
|
69
69
|
}
|