@rescui/select 0.11.7 → 0.11.9-RUI-226-Update-card-cn-6e43cc89.60
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/lib/_virtual/check.js +90 -21
- package/lib/_virtual/close.js +90 -21
- package/lib/_virtual/down.js +90 -21
- package/lib/_virtual/index.css.js +12 -7
- package/lib/_virtual/loading.js +106 -29
- package/lib/_virtual/warning.js +90 -21
- package/lib/common-prop-types.js +6 -6
- package/lib/index.css +287 -303
- package/lib/key-codes.js +7 -7
- package/lib/parts/common-select.p.module.css.js +12 -12
- package/lib/parts/foldable.js +158 -220
- package/lib/parts/form-trigger-wrapper.js +22 -17
- package/lib/parts/form-trigger.p.module.css.js +10 -10
- package/lib/parts/multiselect.js +132 -202
- package/lib/parts/native-select.js +85 -117
- package/lib/parts/native-select.p.module.css.js +6 -6
- package/lib/parts/throttle.js +9 -12
- package/lib/parts/trigger.js +94 -122
- package/lib/parts/trigger.p.module.css.js +27 -27
- package/lib/parts/use-observable-force-rerender.js +5 -12
- package/lib/public-api.p.css +181 -112
- package/lib/public-api.pcss +181 -112
- package/lib/select.js +118 -195
- package/lib/utils.js +44 -90
- package/package.json +12 -12
package/lib/parts/trigger.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
|
-
import "core-js/modules/es.object.to-string.js";
|
|
2
|
-
import "core-js/modules/web.dom-collections.for-each.js";
|
|
3
|
-
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
|
4
|
-
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
|
5
|
-
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
|
6
|
-
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
|
7
|
-
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
|
8
|
-
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
|
9
|
-
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
10
|
-
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
|
11
|
-
var _excluded = ["size", "mode", "theme", "className", "triggerRef", "isOpen", "selected", "placeholder", "isClearable", "isLoading", "isDisabled", "isSingleLine", "searchInput", "isSearchable", "onClearClick", "onItemClearClick", "onSearchChange", "error"];
|
|
12
|
-
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
13
|
-
|
|
14
|
-
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
-
|
|
16
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? Object.defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
|
-
|
|
18
1
|
import React, { useRef, useState } from 'react';
|
|
19
|
-
import PropTypes from 'prop-types';
|
|
20
2
|
import cn from 'classnames';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
21
4
|
import { RemovableTag, Tag, presets } from '@rescui/tag';
|
|
22
5
|
import { useThemeWithUndefined } from '@rescui/ui-contexts';
|
|
23
6
|
import DownIcon from '../_virtual/down.js';
|
|
@@ -29,97 +12,83 @@ import Foldable from './foldable.js';
|
|
|
29
12
|
import styles from './trigger.p.module.css.js';
|
|
30
13
|
/* eslint-disable no-nested-ternary */
|
|
31
14
|
|
|
32
|
-
|
|
15
|
+
const THEME_STYLES = {
|
|
33
16
|
light: styles.themeLight,
|
|
34
17
|
dark: styles.themeDark
|
|
35
18
|
};
|
|
36
|
-
|
|
19
|
+
const SIZE_STYLES = {
|
|
37
20
|
s: styles.sizeS,
|
|
38
21
|
m: styles.sizeM,
|
|
39
22
|
l: styles.sizeL
|
|
40
23
|
};
|
|
41
|
-
|
|
24
|
+
const MODE_STYLES = {
|
|
42
25
|
classic: styles.classic,
|
|
43
26
|
rock: styles.rock
|
|
44
27
|
}; // eslint-disable-next-line complexity
|
|
45
28
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
setIsSearchFocused = _useState2[1];
|
|
75
|
-
|
|
76
|
-
var _useState3 = useState(false),
|
|
77
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
78
|
-
isFocused = _useState4[0],
|
|
79
|
-
setIsFocused = _useState4[1];
|
|
80
|
-
|
|
81
|
-
var _useState5 = useState(false),
|
|
82
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
83
|
-
isSearchKeyFocused = _useState6[0],
|
|
84
|
-
setIsSearchKeyFocused = _useState6[1];
|
|
29
|
+
const SelectTrigger = /*#__PURE__*/React.memo(props => {
|
|
30
|
+
const {
|
|
31
|
+
size,
|
|
32
|
+
mode,
|
|
33
|
+
theme: themeFromProps,
|
|
34
|
+
className,
|
|
35
|
+
triggerRef,
|
|
36
|
+
isOpen,
|
|
37
|
+
selected = null,
|
|
38
|
+
placeholder,
|
|
39
|
+
isClearable,
|
|
40
|
+
isLoading,
|
|
41
|
+
isDisabled,
|
|
42
|
+
isSingleLine,
|
|
43
|
+
searchInput,
|
|
44
|
+
isSearchable,
|
|
45
|
+
onClearClick,
|
|
46
|
+
onItemClearClick,
|
|
47
|
+
onSearchChange,
|
|
48
|
+
error,
|
|
49
|
+
...restProps
|
|
50
|
+
} = props;
|
|
51
|
+
const theme = useThemeWithUndefined(themeFromProps);
|
|
52
|
+
const inputRef = useRef(null);
|
|
53
|
+
const [isSearchFocused, setIsSearchFocused] = useState(false);
|
|
54
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
55
|
+
const [isSearchKeyFocused, setIsSearchKeyFocused] = useState(false);
|
|
56
|
+
const isMulti = selected ? Boolean(selected.length) : false;
|
|
85
57
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
var handleChange = function handleChange(event) {
|
|
89
|
-
var newValue = event.target.value;
|
|
58
|
+
const handleChange = event => {
|
|
59
|
+
const newValue = event.target.value;
|
|
90
60
|
onSearchChange(newValue);
|
|
91
61
|
};
|
|
92
62
|
|
|
93
|
-
|
|
63
|
+
const handleBlur = () => {
|
|
94
64
|
if (isSearchable && inputRef.current) {
|
|
95
65
|
setIsSearchFocused(false);
|
|
96
66
|
setIsSearchKeyFocused(false);
|
|
97
67
|
}
|
|
98
68
|
};
|
|
99
69
|
|
|
100
|
-
|
|
70
|
+
const handleFocus = e => {
|
|
101
71
|
if (isSearchable && inputRef.current) {
|
|
102
72
|
setIsSearchFocused(true);
|
|
103
|
-
|
|
73
|
+
const target = e.target;
|
|
104
74
|
setIsSearchKeyFocused(target.getAttribute('data-focus-method') === 'key');
|
|
105
75
|
}
|
|
106
76
|
};
|
|
107
77
|
|
|
108
|
-
|
|
109
|
-
return /*#__PURE__*/React.createElement("div",
|
|
78
|
+
const isThemeReversed = mode === 'rock' && (isSearchFocused || isFocused || isOpen);
|
|
79
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
110
80
|
tabIndex: isSearchable || isDisabled ? -1 : 0,
|
|
111
81
|
className: cn(styles.main, SIZE_STYLES[size], MODE_STYLES[mode], THEME_STYLES[theme], isMulti && styles.isMulti, isSearchFocused && styles.searchFocused, isSearchKeyFocused && styles.searchKeyFocused, isOpen && styles.open, isDisabled ? styles.disabled : styles.enabled, Boolean(error) && styles.error, isFocused && styles.focused, className),
|
|
112
|
-
onFocus:
|
|
113
|
-
|
|
82
|
+
onFocus: e => {
|
|
83
|
+
const target = e.target;
|
|
114
84
|
setIsFocused(target.getAttribute('data-focus-method') === 'key');
|
|
115
85
|
},
|
|
116
|
-
onBlur:
|
|
117
|
-
return setIsFocused(false);
|
|
118
|
-
},
|
|
86
|
+
onBlur: () => setIsFocused(false),
|
|
119
87
|
ref: triggerRef,
|
|
120
88
|
"data-test": "select",
|
|
121
|
-
"data-rs-internal": 'select-trigger'
|
|
122
|
-
|
|
89
|
+
"data-rs-internal": 'select-trigger',
|
|
90
|
+
...restProps
|
|
91
|
+
}, isMulti ? /*#__PURE__*/React.createElement(MultiselectOptions, {
|
|
123
92
|
selected: selected,
|
|
124
93
|
isDisabled: isDisabled,
|
|
125
94
|
isSingleLine: isSingleLine,
|
|
@@ -146,49 +115,47 @@ var SelectTrigger = /*#__PURE__*/React.memo(function (props) {
|
|
|
146
115
|
selected: selected
|
|
147
116
|
}), /*#__PURE__*/React.createElement(DownIcon, {
|
|
148
117
|
className: styles.toggle,
|
|
149
|
-
"data-test": "down-icon"
|
|
118
|
+
"data-test": "down-icon",
|
|
119
|
+
"data-render-all-sizes": true
|
|
150
120
|
})));
|
|
151
121
|
});
|
|
152
122
|
SelectTrigger.displayName = 'SelectTrigger';
|
|
153
123
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
124
|
+
const MultiselectOptions = _ref => {
|
|
125
|
+
let {
|
|
126
|
+
isSingleLine,
|
|
127
|
+
selected,
|
|
128
|
+
isThemeReversed,
|
|
129
|
+
isDisabled,
|
|
130
|
+
onItemClearClick,
|
|
131
|
+
theme
|
|
132
|
+
} = _ref;
|
|
133
|
+
const selectedOptions = selected.map(s => {
|
|
134
|
+
const key = s.value ? s.value : s.label;
|
|
164
135
|
return /*#__PURE__*/React.createElement(RemovableTag, {
|
|
165
136
|
key: key,
|
|
166
|
-
"data-test":
|
|
137
|
+
"data-test": `selected-tag-${key}`,
|
|
167
138
|
className: styles.tag,
|
|
168
139
|
disabled: isDisabled,
|
|
169
|
-
onRemoveClick:
|
|
170
|
-
return onItemClearClick(s);
|
|
171
|
-
},
|
|
140
|
+
onRemoveClick: () => onItemClearClick(s),
|
|
172
141
|
"data-rs-internal": 'select-trigger__removable-tag',
|
|
173
142
|
wrap: !isSingleLine,
|
|
174
143
|
theme: isThemeReversed ? reverseTheme(theme) : theme
|
|
175
144
|
}, s.label);
|
|
176
145
|
});
|
|
177
|
-
|
|
178
|
-
var tagTheme = isThemeReversed ? reverseTheme(theme) : theme;
|
|
146
|
+
const tagTheme = isThemeReversed ? reverseTheme(theme) : theme;
|
|
179
147
|
return /*#__PURE__*/React.createElement("div", {
|
|
180
148
|
className: styles.multi,
|
|
181
149
|
"data-test": "multi"
|
|
182
150
|
}, isSingleLine ? /*#__PURE__*/React.createElement(Foldable, {
|
|
183
151
|
className: styles.tagsContainer,
|
|
184
|
-
renderHiddenCounter:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
152
|
+
renderHiddenCounter: (n, ref) => /*#__PURE__*/React.createElement(Tag, {
|
|
153
|
+
className: styles.tag,
|
|
154
|
+
key: "+",
|
|
155
|
+
ref: ref,
|
|
156
|
+
"data-rs-internal": 'select-trigger__tag',
|
|
157
|
+
...presets[`filled-${tagTheme}`]
|
|
158
|
+
}, `+${n}`)
|
|
192
159
|
}, selectedOptions) : /*#__PURE__*/React.createElement("div", {
|
|
193
160
|
className: styles.tagsContainer
|
|
194
161
|
}, selectedOptions));
|
|
@@ -203,18 +170,18 @@ function isSelectedEmpty(selected) {
|
|
|
203
170
|
} // eslint-disable-next-line complexity
|
|
204
171
|
|
|
205
172
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
173
|
+
const SelectedOption = _ref2 => {
|
|
174
|
+
let {
|
|
175
|
+
selected,
|
|
176
|
+
searchInput = '',
|
|
177
|
+
placeholder = '',
|
|
178
|
+
isSearchable,
|
|
179
|
+
isDisabled,
|
|
180
|
+
inputRef,
|
|
181
|
+
handleBlur,
|
|
182
|
+
handleFocus,
|
|
183
|
+
handleChange
|
|
184
|
+
} = _ref2;
|
|
218
185
|
return /*#__PURE__*/React.createElement("div", {
|
|
219
186
|
className: styles.labelWrapper
|
|
220
187
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -237,12 +204,14 @@ var SelectedOption = function SelectedOption(_ref2) {
|
|
|
237
204
|
}));
|
|
238
205
|
};
|
|
239
206
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
207
|
+
const ClearOrLoading = _ref3 => {
|
|
208
|
+
let {
|
|
209
|
+
isClearable,
|
|
210
|
+
isLoading,
|
|
211
|
+
isDisabled,
|
|
212
|
+
onClearClick,
|
|
213
|
+
selected
|
|
214
|
+
} = _ref3;
|
|
246
215
|
|
|
247
216
|
if (isLoading) {
|
|
248
217
|
return /*#__PURE__*/React.createElement(LoadingIcon, {
|
|
@@ -250,18 +219,21 @@ var ClearOrLoading = function ClearOrLoading(_ref3) {
|
|
|
250
219
|
pointerEvents: 'none'
|
|
251
220
|
},
|
|
252
221
|
className: styles.icon,
|
|
253
|
-
"data-test": "loading-icon"
|
|
222
|
+
"data-test": "loading-icon",
|
|
223
|
+
"data-render-all-sizes": true
|
|
254
224
|
});
|
|
255
225
|
} else if (isClearable && !isDisabled && !isSelectedEmpty(selected)) {
|
|
256
226
|
return /*#__PURE__*/React.createElement("button", {
|
|
257
227
|
type: "button",
|
|
258
228
|
className: cn(styles.icon, styles.clearIcon),
|
|
259
229
|
"data-test": "clear-icon",
|
|
260
|
-
onClick:
|
|
230
|
+
onClick: e => {
|
|
261
231
|
e.stopPropagation();
|
|
262
232
|
onClearClick();
|
|
263
233
|
}
|
|
264
|
-
}, /*#__PURE__*/React.createElement(CloseIcon,
|
|
234
|
+
}, /*#__PURE__*/React.createElement(CloseIcon, {
|
|
235
|
+
"data-render-all-sizes": true
|
|
236
|
+
}));
|
|
265
237
|
} else {
|
|
266
238
|
return null;
|
|
267
239
|
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
var styles = {
|
|
2
|
-
"themeLight": "
|
|
3
|
-
"themeDark": "
|
|
4
|
-
"sizeS": "
|
|
5
|
-
"sizeM": "
|
|
6
|
-
"sizeL": "
|
|
7
|
-
"classic": "
|
|
8
|
-
"rock": "
|
|
9
|
-
"main": "
|
|
10
|
-
"open": "
|
|
11
|
-
"focused": "
|
|
12
|
-
"searchFocused": "
|
|
13
|
-
"error": "
|
|
14
|
-
"searchKeyFocused": "
|
|
15
|
-
"enabled": "
|
|
16
|
-
"disabled": "
|
|
17
|
-
"isMulti": "
|
|
18
|
-
"iconsWrapper": "
|
|
19
|
-
"labelWrapper": "
|
|
20
|
-
"label": "
|
|
21
|
-
"labelNotSelected": "
|
|
22
|
-
"searchInput": "
|
|
23
|
-
"multi": "
|
|
24
|
-
"tagsContainer": "
|
|
25
|
-
"tag": "
|
|
26
|
-
"toggle": "
|
|
27
|
-
"icon": "
|
|
28
|
-
"clearIcon": "
|
|
2
|
+
"themeLight": "_themeLight_v48skc_27",
|
|
3
|
+
"themeDark": "_themeDark_v48skc_30",
|
|
4
|
+
"sizeS": "_sizeS_v48skc_34",
|
|
5
|
+
"sizeM": "_sizeM_v48skc_37",
|
|
6
|
+
"sizeL": "_sizeL_v48skc_40",
|
|
7
|
+
"classic": "_classic_v48skc_44",
|
|
8
|
+
"rock": "_rock_v48skc_47",
|
|
9
|
+
"main": "_main_v48skc_51",
|
|
10
|
+
"open": "_open_v48skc_73",
|
|
11
|
+
"focused": "_focused_v48skc_77",
|
|
12
|
+
"searchFocused": "_searchFocused_v48skc_78",
|
|
13
|
+
"error": "_error_v48skc_80",
|
|
14
|
+
"searchKeyFocused": "_searchKeyFocused_v48skc_85",
|
|
15
|
+
"enabled": "_enabled_v48skc_89",
|
|
16
|
+
"disabled": "_disabled_v48skc_95",
|
|
17
|
+
"isMulti": "_isMulti_v48skc_125",
|
|
18
|
+
"iconsWrapper": "_iconsWrapper_v48skc_143",
|
|
19
|
+
"labelWrapper": "_labelWrapper_v48skc_168",
|
|
20
|
+
"label": "_label_v48skc_168",
|
|
21
|
+
"labelNotSelected": "_labelNotSelected_v48skc_218",
|
|
22
|
+
"searchInput": "_searchInput_v48skc_231",
|
|
23
|
+
"multi": "_multi_v48skc_271",
|
|
24
|
+
"tagsContainer": "_tagsContainer_v48skc_291",
|
|
25
|
+
"tag": "_tag_v48skc_291",
|
|
26
|
+
"toggle": "_toggle_v48skc_313",
|
|
27
|
+
"icon": "_icon_v48skc_143",
|
|
28
|
+
"clearIcon": "_clearIcon_v48skc_380"
|
|
29
29
|
};
|
|
30
30
|
export { styles as default };
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
2
1
|
import { useRef, useState } from 'react';
|
|
3
2
|
import { useResizeObserver } from '@rescui/use-resize-observer';
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
10
|
-
setDummyState = _useState2[1];
|
|
11
|
-
|
|
12
|
-
useResizeObserver(observableRef, function () {
|
|
4
|
+
const useObservableForceRerender = () => {
|
|
5
|
+
const observableRef = useRef(null);
|
|
6
|
+
const [, setDummyState] = useState(false);
|
|
7
|
+
useResizeObserver(observableRef, () => {
|
|
13
8
|
//force rerender
|
|
14
|
-
setDummyState(
|
|
15
|
-
return !s;
|
|
16
|
-
});
|
|
9
|
+
setDummyState(s => !s);
|
|
17
10
|
}, {
|
|
18
11
|
ignoreFirstCall: true
|
|
19
12
|
});
|