@rescui/select 0.9.4 → 0.10.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.
- package/lib/index.css +1298 -688
- package/lib/parts/common-select.p.module.css.js +12 -1
- package/lib/parts/foldable.d.ts +0 -1
- package/lib/parts/foldable.js +2 -1
- package/lib/parts/form-trigger-wrapper.d.ts +2 -1
- package/lib/parts/form-trigger-wrapper.js +18 -18
- package/lib/parts/form-trigger.p.module.css.js +9 -10
- package/lib/parts/multiselect.js +76 -46
- package/lib/parts/native-select.js +6 -5
- package/lib/parts/native-select.p.module.css.js +6 -6
- package/lib/parts/trigger.js +11 -28
- package/lib/parts/trigger.p.module.css.js +27 -27
- package/lib/parts/use-observable-force-rerender.d.ts +2 -0
- package/lib/parts/use-observable-force-rerender.js +23 -0
- package/lib/public-api.p.css +2308 -0
- package/lib/public-api.pcss +2308 -0
- package/lib/select.js +79 -50
- package/package.json +13 -13
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
var styles = {
|
|
2
|
-
"
|
|
2
|
+
"sizeS": "_sizeS_14ojgis_3",
|
|
3
|
+
"sizeM": "_sizeM_14ojgis_6",
|
|
4
|
+
"sizeL": "_sizeL_14ojgis_9",
|
|
5
|
+
"menu": "_menu_14ojgis_13",
|
|
6
|
+
"menuSizeS": "_menuSizeS_14ojgis_26",
|
|
7
|
+
"menuSizeM": "_menuSizeM_14ojgis_30",
|
|
8
|
+
"menuSizeL": "_menuSizeL_14ojgis_34",
|
|
9
|
+
"withGroupsLabel": "_withGroupsLabel_14ojgis_40",
|
|
10
|
+
"lastOption": "_lastOption_14ojgis_39",
|
|
11
|
+
"divider": "_divider_14ojgis_45",
|
|
12
|
+
"checkIcon": "_checkIcon_14ojgis_51",
|
|
13
|
+
"observable": "_observable_14ojgis_56"
|
|
3
14
|
};
|
|
4
15
|
export { styles as default };
|
package/lib/parts/foldable.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import React, { Component } from 'react';
|
|
|
2
2
|
export declare type FoldableProps = {
|
|
3
3
|
className?: string;
|
|
4
4
|
children: React.ReactNode;
|
|
5
|
-
gap?: number;
|
|
6
5
|
renderHiddenCounter?: (num: number, ref: React.Ref<HTMLElement>) => React.ReactNode;
|
|
7
6
|
};
|
|
8
7
|
declare type FoldableState = {
|
package/lib/parts/foldable.js
CHANGED
|
@@ -140,7 +140,8 @@ var Foldable = /*#__PURE__*/function (_Component) {
|
|
|
140
140
|
plusNWidth = measureElement(plusNRef.current).width;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
var
|
|
143
|
+
var containerStyles = getComputedStyle(containerRef.current);
|
|
144
|
+
var gap = parseInt(containerStyles.getPropertyValue('--_rs-select-trigger-foldable-gap'), 10) || 0;
|
|
144
145
|
|
|
145
146
|
var _lastVisibleIndex = lastVisibleIndex(_this.childrenWidths, containerWidth, gap, plusNWidth + gap + 1),
|
|
146
147
|
_lastVisibleIndex2 = _slicedToArray(_lastVisibleIndex, 2),
|
|
@@ -10,6 +10,7 @@ export declare type FormTriggerWrapperProps = {
|
|
|
10
10
|
note?: React.ReactNode;
|
|
11
11
|
onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
|
|
12
12
|
boldLabel?: boolean;
|
|
13
|
+
children?: React.ReactNode;
|
|
13
14
|
};
|
|
14
|
-
declare const FormTriggerWrapper: React.
|
|
15
|
+
declare const FormTriggerWrapper: React.ForwardRefExoticComponent<FormTriggerWrapperProps & React.RefAttributes<HTMLDivElement>>;
|
|
15
16
|
export default FormTriggerWrapper;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import "core-js/modules/es.string.bold.js";
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import cn from 'classnames';
|
|
4
|
-
import {
|
|
3
|
+
import { useThemeWithUndefined } from '@rescui/ui-contexts';
|
|
5
4
|
import styles from './form-trigger.p.module.css.js';
|
|
6
5
|
var SIZE_STYLES = {
|
|
7
6
|
l: styles.sizeL,
|
|
@@ -15,19 +14,19 @@ var THEME_STYLES = {
|
|
|
15
14
|
|
|
16
15
|
var Label = function Label(_ref) {
|
|
17
16
|
var children = _ref.children,
|
|
18
|
-
size = _ref.size,
|
|
19
17
|
boldLabel = _ref.boldLabel;
|
|
20
18
|
|
|
21
19
|
if (!children) {
|
|
22
20
|
return null;
|
|
23
21
|
} else {
|
|
24
22
|
return /*#__PURE__*/React.createElement("div", {
|
|
25
|
-
className:
|
|
23
|
+
className: styles.label,
|
|
24
|
+
"data-rs-internal": boldLabel ? 'select-form-trigger-wrapper__bold-label' : 'select-form-trigger-wrapper__label'
|
|
26
25
|
}, children);
|
|
27
26
|
}
|
|
28
27
|
};
|
|
29
28
|
|
|
30
|
-
var FormTriggerWrapper = function
|
|
29
|
+
var FormTriggerWrapper = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
31
30
|
var size = _ref2.size,
|
|
32
31
|
themeFromProps = _ref2.theme,
|
|
33
32
|
className = _ref2.className,
|
|
@@ -37,22 +36,23 @@ var FormTriggerWrapper = function FormTriggerWrapper(_ref2) {
|
|
|
37
36
|
children = _ref2.children,
|
|
38
37
|
onKeyDown = _ref2.onKeyDown,
|
|
39
38
|
boldLabel = _ref2.boldLabel;
|
|
40
|
-
var theme =
|
|
41
|
-
return /*#__PURE__*/React.createElement(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"data-
|
|
39
|
+
var theme = useThemeWithUndefined(themeFromProps);
|
|
40
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
41
|
+
className: cn(className, styles.main, SIZE_STYLES[size], THEME_STYLES[theme]),
|
|
42
|
+
ref: ref,
|
|
43
|
+
"data-test": "select-wrapper",
|
|
44
|
+
"data-rs-internal": 'select-form-trigger-wrapper'
|
|
46
45
|
}, /*#__PURE__*/React.createElement(Label, {
|
|
47
|
-
boldLabel: boldLabel
|
|
48
|
-
size: size
|
|
46
|
+
boldLabel: boldLabel
|
|
49
47
|
}, label), /*#__PURE__*/React.createElement("div", {
|
|
50
48
|
onKeyDown: onKeyDown
|
|
51
49
|
}, children), error && /*#__PURE__*/React.createElement("div", {
|
|
52
|
-
className: styles.errorMessage
|
|
50
|
+
className: styles.errorMessage,
|
|
51
|
+
"data-rs-internal": 'select-form-trigger-wrapper__error-message'
|
|
53
52
|
}, error), note && /*#__PURE__*/React.createElement("div", {
|
|
54
|
-
className: styles.note
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
|
|
53
|
+
className: styles.note,
|
|
54
|
+
"data-rs-internal": 'select-form-trigger-wrapper__note'
|
|
55
|
+
}, note));
|
|
56
|
+
});
|
|
57
|
+
FormTriggerWrapper.displayName = 'FormTriggerWrapper';
|
|
58
58
|
export { FormTriggerWrapper as default };
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
var styles = {
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"bold": "_bold_1jznt74_77"
|
|
2
|
+
"themeLight": "_themeLight_1o997ry_7",
|
|
3
|
+
"themeDark": "_themeDark_1o997ry_10",
|
|
4
|
+
"sizeS": "_sizeS_1o997ry_14",
|
|
5
|
+
"sizeM": "_sizeM_1o997ry_17",
|
|
6
|
+
"sizeL": "_sizeL_1o997ry_20",
|
|
7
|
+
"main": "_main_1o997ry_24",
|
|
8
|
+
"label": "_label_1o997ry_28",
|
|
9
|
+
"errorMessage": "_errorMessage_1o997ry_36",
|
|
10
|
+
"note": "_note_1o997ry_43"
|
|
12
11
|
};
|
|
13
12
|
export { styles as default };
|
package/lib/parts/multiselect.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
|
2
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
|
3
|
+
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
|
4
|
+
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
|
1
5
|
import _toConsumableArray from "@babel/runtime-corejs3/helpers/esm/toConsumableArray";
|
|
2
6
|
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
3
7
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
|
@@ -11,43 +15,35 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
11
15
|
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
|
12
16
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
13
17
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
|
14
|
-
import
|
|
15
|
-
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
|
16
|
-
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
|
17
|
-
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
|
18
|
+
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
|
18
19
|
import "core-js/modules/es.object.to-string.js";
|
|
19
20
|
import "core-js/modules/web.dom-collections.for-each.js";
|
|
20
21
|
import "core-js/modules/es.function.name.js";
|
|
21
|
-
import React, {
|
|
22
|
+
import React, { useState, useRef, useEffect, useMemo, useCallback } from 'react';
|
|
22
23
|
import PropTypes from 'prop-types';
|
|
24
|
+
import cn from 'classnames';
|
|
23
25
|
import scrollIntoView from 'scroll-into-view-if-needed';
|
|
24
26
|
import { CheckIcon } from '@rescui/icons';
|
|
25
27
|
import { Dropdown } from '@rescui/dropdown';
|
|
26
28
|
import { Menu, MenuItem, Divider, GroupHeader } from '@rescui/menu';
|
|
27
|
-
import {
|
|
28
|
-
import { useStrongMemo, getDefaultCursorIndex, isGroupsEmpty, getOptionValue, getMovedCursorIndex, shouldOpenSelect, isIndexMatchCursor,
|
|
29
|
+
import { useThemeWithUndefined } from '@rescui/ui-contexts';
|
|
30
|
+
import { useStrongMemo, getDefaultCursorIndex, isGroupsEmpty, getOptionValue, getMovedCursorIndex, shouldOpenSelect, isIndexMatchCursor, withoutGroupsLabel, getPlainOptionsFromGroups, getEmptyMessage, OptionGroupTypes, convertToOptionGroupsIfNeeded, calculateMaxHeight } from '../utils.js';
|
|
29
31
|
import { optionType, optionsGroupType, noOptionsMessageType } from '../common-prop-types.js';
|
|
30
32
|
import { ARROW_DOWN, ARROW_UP, ENTER, SPACE, TAB, ESCAPE, BACKSPACE } from '../key-codes.js';
|
|
31
33
|
import SelectTrigger from './trigger.js';
|
|
32
34
|
import FormTriggerWrapper from './form-trigger-wrapper.js';
|
|
35
|
+
import { useObservableForceRerender } from './use-observable-force-rerender.js';
|
|
33
36
|
import styles from './common-select.p.module.css.js'; // eslint-disable-next-line complexity
|
|
34
37
|
|
|
35
38
|
var Option = function Option(_ref) {
|
|
36
|
-
var
|
|
37
|
-
selected = _ref.selected,
|
|
39
|
+
var selected = _ref.selected,
|
|
38
40
|
cursorIndex = _ref.cursorIndex,
|
|
39
|
-
size = _ref.size,
|
|
40
41
|
item = _ref.item,
|
|
41
42
|
isSingleLine = _ref.isSingleLine,
|
|
42
43
|
isLastItem = _ref.isLastItem,
|
|
43
44
|
highlightedItemRef = _ref.highlightedItemRef,
|
|
44
45
|
handleHighlightIndex = _ref.handleHighlightIndex,
|
|
45
46
|
handleSelectIndex = _ref.handleSelectIndex;
|
|
46
|
-
var marginInPx = withoutGroupsLabel(groups) ? 0 : {
|
|
47
|
-
l: 12,
|
|
48
|
-
m: 6,
|
|
49
|
-
s: 0
|
|
50
|
-
}[size];
|
|
51
47
|
|
|
52
48
|
if (item.type === OptionGroupTypes.OPTION) {
|
|
53
49
|
var index = item.index,
|
|
@@ -58,7 +54,7 @@ var Option = function Option(_ref) {
|
|
|
58
54
|
}));
|
|
59
55
|
var isHighlighted = isIndexMatchCursor(cursorIndex, index);
|
|
60
56
|
var icon = isSingleLine && isItemSelected ? /*#__PURE__*/React.createElement(CheckIcon, {
|
|
61
|
-
|
|
57
|
+
className: styles.checkIcon
|
|
62
58
|
}) : null;
|
|
63
59
|
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
64
60
|
selected: isItemSelected,
|
|
@@ -70,18 +66,14 @@ var Option = function Option(_ref) {
|
|
|
70
66
|
onClick: function onClick() {
|
|
71
67
|
return handleSelectIndex(index);
|
|
72
68
|
},
|
|
73
|
-
|
|
74
|
-
marginBottom: isLastItem ? "".concat(marginInPx, "px") : ''
|
|
75
|
-
},
|
|
69
|
+
className: cn(isLastItem && styles.lastOption),
|
|
76
70
|
icon: icon
|
|
77
71
|
}, label);
|
|
78
72
|
}
|
|
79
73
|
|
|
80
74
|
if (item.type === OptionGroupTypes.DIVIDER) {
|
|
81
75
|
return /*#__PURE__*/React.createElement(Divider, {
|
|
82
|
-
|
|
83
|
-
marginTop: "".concat(marginInPx, "px")
|
|
84
|
-
}
|
|
76
|
+
className: styles.divider
|
|
85
77
|
});
|
|
86
78
|
}
|
|
87
79
|
|
|
@@ -159,8 +151,19 @@ var NativeSelectedOptions = function NativeSelectedOptions(_ref2) {
|
|
|
159
151
|
}));
|
|
160
152
|
};
|
|
161
153
|
|
|
154
|
+
var SIZE_STYLES = {
|
|
155
|
+
s: styles.sizeS,
|
|
156
|
+
m: styles.sizeM,
|
|
157
|
+
l: styles.sizeL
|
|
158
|
+
};
|
|
159
|
+
var MENU_SIZE_STYLES = {
|
|
160
|
+
s: styles.menuSizeS,
|
|
161
|
+
m: styles.menuSizeM,
|
|
162
|
+
l: styles.menuSizeL
|
|
163
|
+
}; // eslint-disable-next-line complexity
|
|
164
|
+
|
|
162
165
|
var Multiselect = function Multiselect(_ref4) {
|
|
163
|
-
var
|
|
166
|
+
var _context5;
|
|
164
167
|
|
|
165
168
|
var options = _ref4.options,
|
|
166
169
|
_ref4$size = _ref4.size,
|
|
@@ -188,14 +191,19 @@ var Multiselect = function Multiselect(_ref4) {
|
|
|
188
191
|
boldLabel = _ref4.boldLabel,
|
|
189
192
|
restProps = _objectWithoutProperties(_ref4, _excluded);
|
|
190
193
|
|
|
194
|
+
var _useState = useState(null),
|
|
195
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
196
|
+
triggerFormWrapperRef = _useState2[0],
|
|
197
|
+
setTriggerFormWrapperRef = _useState2[1];
|
|
198
|
+
|
|
191
199
|
var dropdownRef = useRef(null);
|
|
192
200
|
var highlightedItemRef = useRef();
|
|
193
|
-
var theme =
|
|
201
|
+
var theme = useThemeWithUndefined(themeFromProps);
|
|
194
202
|
|
|
195
|
-
var
|
|
196
|
-
|
|
197
|
-
isKeyboardNavigating =
|
|
198
|
-
setIsKeyboardNavigating =
|
|
203
|
+
var _useState3 = useState(false),
|
|
204
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
205
|
+
isKeyboardNavigating = _useState4[0],
|
|
206
|
+
setIsKeyboardNavigating = _useState4[1];
|
|
199
207
|
|
|
200
208
|
var skipScrollingRef = useRef(false);
|
|
201
209
|
var groups = useStrongMemo(function () {
|
|
@@ -209,17 +217,17 @@ var Multiselect = function Multiselect(_ref4) {
|
|
|
209
217
|
return filterSelected(groups, value);
|
|
210
218
|
}, [isSingleLine, value, groups]);
|
|
211
219
|
|
|
212
|
-
var
|
|
213
|
-
|
|
214
|
-
menuIsOpen =
|
|
215
|
-
setMenuIsOpen =
|
|
220
|
+
var _useState5 = useState(false),
|
|
221
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
222
|
+
menuIsOpen = _useState6[0],
|
|
223
|
+
setMenuIsOpen = _useState6[1];
|
|
216
224
|
|
|
217
|
-
var
|
|
225
|
+
var _useState7 = useState(function () {
|
|
218
226
|
return getDefaultCursorIndex(filteredGroups);
|
|
219
227
|
}),
|
|
220
|
-
|
|
221
|
-
cursorIndex =
|
|
222
|
-
setCursorIndex =
|
|
228
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
229
|
+
cursorIndex = _useState8[0],
|
|
230
|
+
setCursorIndex = _useState8[1];
|
|
223
231
|
|
|
224
232
|
useEffect(function () {
|
|
225
233
|
setCursorIndex(getDefaultCursorIndex(filteredGroups));
|
|
@@ -379,8 +387,29 @@ var Multiselect = function Multiselect(_ref4) {
|
|
|
379
387
|
if (!isIndexMatchCursor(cursorIndex, index)) {
|
|
380
388
|
setCursorIndex(index);
|
|
381
389
|
}
|
|
382
|
-
}, [cursorIndex]);
|
|
383
|
-
|
|
390
|
+
}, [cursorIndex]); // We use invisible and "untouchable" dummy element to observe `size` changes from css to trigger force rerenders
|
|
391
|
+
|
|
392
|
+
var observableRef = useObservableForceRerender();
|
|
393
|
+
var sizeFromCss = null;
|
|
394
|
+
|
|
395
|
+
if (triggerFormWrapperRef && menuIsOpen) {
|
|
396
|
+
var _context4;
|
|
397
|
+
|
|
398
|
+
// In theory this part of the code might cause issues with SSR.
|
|
399
|
+
// But in this specific context, because of checking ref "triggerFormWrapperRef",
|
|
400
|
+
// we are sure that the value will still be "null" on the first render.
|
|
401
|
+
// Therefore, the first render on the client will be the same as on the server.
|
|
402
|
+
// Also, there will be no layout shifts on the following renders because
|
|
403
|
+
// it's a dropdown-content and in most cases it opens only on-demand.
|
|
404
|
+
// In additional, we use "observable" el to watch size changes between rerenders (@media query case).
|
|
405
|
+
var triggerFormWrapperStyles = getComputedStyle(triggerFormWrapperRef);
|
|
406
|
+
var rawSizeFromCss = triggerFormWrapperStyles.getPropertyValue('--_rs-select-size');
|
|
407
|
+
sizeFromCss = _includesInstanceProperty(_context4 = ['s', 'm', 'l']).call(_context4, rawSizeFromCss) ? rawSizeFromCss : null;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
var actualSize = sizeFromCss || size;
|
|
411
|
+
var maxHeight = calculateMaxHeight(actualSize);
|
|
412
|
+
var withGroupsLabel = !withoutGroupsLabel(filteredGroups);
|
|
384
413
|
return /*#__PURE__*/React.createElement(Dropdown, {
|
|
385
414
|
theme: theme,
|
|
386
415
|
onRequestClose: handleClose,
|
|
@@ -396,7 +425,8 @@ var Multiselect = function Multiselect(_ref4) {
|
|
|
396
425
|
trigger: function trigger(_ref5) {
|
|
397
426
|
var ref = _ref5.ref;
|
|
398
427
|
return /*#__PURE__*/React.createElement(FormTriggerWrapper, {
|
|
399
|
-
|
|
428
|
+
ref: setTriggerFormWrapperRef,
|
|
429
|
+
className: cn(className, SIZE_STYLES[size]),
|
|
400
430
|
theme: theme,
|
|
401
431
|
size: size,
|
|
402
432
|
error: restProps.error,
|
|
@@ -404,7 +434,10 @@ var Multiselect = function Multiselect(_ref4) {
|
|
|
404
434
|
note: restProps.note,
|
|
405
435
|
onKeyDown: handleTriggerKeyDown,
|
|
406
436
|
boldLabel: boldLabel
|
|
407
|
-
},
|
|
437
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
438
|
+
ref: observableRef,
|
|
439
|
+
className: styles.observable
|
|
440
|
+
}), restProps.name && /*#__PURE__*/React.createElement(NativeSelectedOptions, {
|
|
408
441
|
name: restProps.name,
|
|
409
442
|
selected: value
|
|
410
443
|
}), /*#__PURE__*/React.createElement(SelectTrigger, {
|
|
@@ -430,19 +463,16 @@ var Multiselect = function Multiselect(_ref4) {
|
|
|
430
463
|
isOpen: menuIsOpen
|
|
431
464
|
}, /*#__PURE__*/React.createElement(Menu, {
|
|
432
465
|
"data-test": "option-list",
|
|
433
|
-
size:
|
|
434
|
-
|
|
466
|
+
size: actualSize,
|
|
467
|
+
className: cn(styles.menu, withGroupsLabel && styles.withGroupsLabel, MENU_SIZE_STYLES[actualSize]),
|
|
435
468
|
disableCursor: isKeyboardNavigating,
|
|
436
469
|
iconPlacement: 'right',
|
|
437
|
-
className: styles.menu,
|
|
438
470
|
enableKeyboardNavigation: false
|
|
439
|
-
}, !isEmptyMenu ? _mapInstanceProperty(
|
|
471
|
+
}, !isEmptyMenu ? _mapInstanceProperty(_context5 = getPlainOptionsFromGroups(filteredGroups)).call(_context5, function (item, i, collection) {
|
|
440
472
|
return /*#__PURE__*/React.createElement(Option, {
|
|
441
473
|
key: getOptionKey(item, i),
|
|
442
|
-
groups: filteredGroups,
|
|
443
474
|
selected: value,
|
|
444
475
|
cursorIndex: cursorIndex,
|
|
445
|
-
size: size,
|
|
446
476
|
item: item,
|
|
447
477
|
isSingleLine: isSingleLine,
|
|
448
478
|
isLastItem: i === collection.length - 1,
|
|
@@ -20,7 +20,7 @@ import "core-js/modules/es.function.name.js";
|
|
|
20
20
|
import React, { useState } from 'react';
|
|
21
21
|
import PropTypes from 'prop-types';
|
|
22
22
|
import cn from 'classnames';
|
|
23
|
-
import {
|
|
23
|
+
import { useThemeWithUndefined } from '@rescui/ui-contexts';
|
|
24
24
|
import { optionType, optionsGroupType, noOptionsMessageType } from '../common-prop-types.js';
|
|
25
25
|
import SelectTrigger from './trigger.js';
|
|
26
26
|
import FormTriggerWrapper from './form-trigger-wrapper.js';
|
|
@@ -173,7 +173,7 @@ var NativeSelect = function NativeSelect(_ref7) {
|
|
|
173
173
|
noOptionsMessage = _ref7.noOptionsMessage,
|
|
174
174
|
name = _ref7.name,
|
|
175
175
|
boldLabel = _ref7.boldLabel;
|
|
176
|
-
var theme =
|
|
176
|
+
var theme = useThemeWithUndefined(themeFromProps);
|
|
177
177
|
|
|
178
178
|
var _useState = useState(false),
|
|
179
179
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -222,7 +222,7 @@ var NativeSelect = function NativeSelect(_ref7) {
|
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
return /*#__PURE__*/React.createElement(FormTriggerWrapper, {
|
|
225
|
-
className: className,
|
|
225
|
+
className: cn(className, styles.main, SIZE_STYLES[size]),
|
|
226
226
|
theme: theme,
|
|
227
227
|
size: size,
|
|
228
228
|
error: error,
|
|
@@ -233,7 +233,7 @@ var NativeSelect = function NativeSelect(_ref7) {
|
|
|
233
233
|
},
|
|
234
234
|
boldLabel: boldLabel
|
|
235
235
|
}, /*#__PURE__*/React.createElement("div", {
|
|
236
|
-
className: styles.
|
|
236
|
+
className: styles.wrapper,
|
|
237
237
|
onMouseEnter: function onMouseEnter() {
|
|
238
238
|
return setHovered(true);
|
|
239
239
|
},
|
|
@@ -244,7 +244,8 @@ var NativeSelect = function NativeSelect(_ref7) {
|
|
|
244
244
|
"data-test": "native-select"
|
|
245
245
|
}, _trigger, /*#__PURE__*/React.createElement("select", {
|
|
246
246
|
"data-test": "native-select_select",
|
|
247
|
-
|
|
247
|
+
"data-rs-internal": 'select-native__select',
|
|
248
|
+
className: styles.select,
|
|
248
249
|
disabled: isDisabled ? true : undefined,
|
|
249
250
|
onChange: handleChange,
|
|
250
251
|
name: name,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var styles = {
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"sizeL": "
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
2
|
+
"sizeS": "_sizeS_1gll3u9_6",
|
|
3
|
+
"sizeM": "_sizeM_1gll3u9_9",
|
|
4
|
+
"sizeL": "_sizeL_1gll3u9_12",
|
|
5
|
+
"main": "_main_1gll3u9_16",
|
|
6
|
+
"wrapper": "_wrapper_1gll3u9_20",
|
|
7
|
+
"select": "_select_1gll3u9_24"
|
|
8
8
|
};
|
|
9
9
|
export { styles as default };
|
package/lib/parts/trigger.js
CHANGED
|
@@ -19,7 +19,7 @@ import React, { useRef, useState } from 'react';
|
|
|
19
19
|
import PropTypes from 'prop-types';
|
|
20
20
|
import cn from 'classnames';
|
|
21
21
|
import { RemovableTag, Tag, presets } from '@rescui/tag';
|
|
22
|
-
import {
|
|
22
|
+
import { useThemeWithUndefined } from '@rescui/ui-contexts';
|
|
23
23
|
import { DownIcon, LoadingIcon, CloseIcon } from '@rescui/icons';
|
|
24
24
|
import { optionType } from '../common-prop-types.js';
|
|
25
25
|
import { reverseTheme } from '../utils.js';
|
|
@@ -39,11 +39,6 @@ var SIZE_STYLES = {
|
|
|
39
39
|
var MODE_STYLES = {
|
|
40
40
|
classic: styles.classic,
|
|
41
41
|
rock: styles.rock
|
|
42
|
-
};
|
|
43
|
-
var TAG_SIZE = {
|
|
44
|
-
s: 'xs',
|
|
45
|
-
m: 's',
|
|
46
|
-
l: 'm'
|
|
47
42
|
}; // eslint-disable-next-line complexity
|
|
48
43
|
|
|
49
44
|
var SelectTrigger = /*#__PURE__*/React.memo(function (props) {
|
|
@@ -68,7 +63,7 @@ var SelectTrigger = /*#__PURE__*/React.memo(function (props) {
|
|
|
68
63
|
error = props.error,
|
|
69
64
|
restProps = _objectWithoutProperties(props, _excluded);
|
|
70
65
|
|
|
71
|
-
var theme =
|
|
66
|
+
var theme = useThemeWithUndefined(themeFromProps);
|
|
72
67
|
var inputRef = useRef(null);
|
|
73
68
|
|
|
74
69
|
var _useState = useState(false),
|
|
@@ -120,10 +115,10 @@ var SelectTrigger = /*#__PURE__*/React.memo(function (props) {
|
|
|
120
115
|
return setIsFocused(false);
|
|
121
116
|
},
|
|
122
117
|
ref: triggerRef,
|
|
123
|
-
"data-test": "select"
|
|
118
|
+
"data-test": "select",
|
|
119
|
+
"data-rs-internal": 'select-trigger'
|
|
124
120
|
}, restProps), isMulti ? /*#__PURE__*/React.createElement(MultiselectOptions, {
|
|
125
121
|
selected: selected,
|
|
126
|
-
size: size,
|
|
127
122
|
isDisabled: isDisabled,
|
|
128
123
|
isSingleLine: isSingleLine,
|
|
129
124
|
onItemClearClick: onItemClearClick,
|
|
@@ -146,10 +141,8 @@ var SelectTrigger = /*#__PURE__*/React.memo(function (props) {
|
|
|
146
141
|
isDisabled: isDisabled,
|
|
147
142
|
isClearable: isClearable,
|
|
148
143
|
onClearClick: onClearClick,
|
|
149
|
-
selected: selected
|
|
150
|
-
size: size
|
|
144
|
+
selected: selected
|
|
151
145
|
}), /*#__PURE__*/React.createElement(DownIcon, {
|
|
152
|
-
size: size,
|
|
153
146
|
className: styles.toggle,
|
|
154
147
|
"data-test": "down-icon"
|
|
155
148
|
})));
|
|
@@ -160,7 +153,6 @@ var MultiselectOptions = function MultiselectOptions(_ref) {
|
|
|
160
153
|
var isSingleLine = _ref.isSingleLine,
|
|
161
154
|
selected = _ref.selected,
|
|
162
155
|
isThemeReversed = _ref.isThemeReversed,
|
|
163
|
-
size = _ref.size,
|
|
164
156
|
isDisabled = _ref.isDisabled,
|
|
165
157
|
onItemClearClick = _ref.onItemClearClick,
|
|
166
158
|
theme = _ref.theme;
|
|
@@ -175,7 +167,7 @@ var MultiselectOptions = function MultiselectOptions(_ref) {
|
|
|
175
167
|
onRemoveClick: function onRemoveClick() {
|
|
176
168
|
return onItemClearClick(s);
|
|
177
169
|
},
|
|
178
|
-
|
|
170
|
+
"data-rs-internal": 'select-trigger__removable-tag',
|
|
179
171
|
wrap: !isSingleLine,
|
|
180
172
|
theme: isThemeReversed ? reverseTheme(theme) : theme
|
|
181
173
|
}, s.label);
|
|
@@ -192,14 +184,9 @@ var MultiselectOptions = function MultiselectOptions(_ref) {
|
|
|
192
184
|
className: styles.tag,
|
|
193
185
|
key: "+",
|
|
194
186
|
ref: ref,
|
|
195
|
-
|
|
187
|
+
"data-rs-internal": 'select-trigger__tag'
|
|
196
188
|
}, presets["filled-".concat(tagTheme)]), "+".concat(n));
|
|
197
|
-
}
|
|
198
|
-
gap: {
|
|
199
|
-
l: 8,
|
|
200
|
-
m: 4,
|
|
201
|
-
s: 4
|
|
202
|
-
}[size]
|
|
189
|
+
}
|
|
203
190
|
}, selectedOptions) : /*#__PURE__*/React.createElement("div", {
|
|
204
191
|
className: styles.tagsContainer
|
|
205
192
|
}, selectedOptions));
|
|
@@ -229,7 +216,7 @@ var SelectedOption = function SelectedOption(_ref2) {
|
|
|
229
216
|
return /*#__PURE__*/React.createElement("div", {
|
|
230
217
|
className: styles.labelWrapper
|
|
231
218
|
}, /*#__PURE__*/React.createElement("div", {
|
|
232
|
-
className: cn(styles.label, isSelectedEmpty(selected) && styles.
|
|
219
|
+
className: cn(styles.label, isSelectedEmpty(selected) && styles.labelNotSelected),
|
|
233
220
|
"data-test": "select-content"
|
|
234
221
|
}, searchInput === '' ? selected && selected.label ? selected.label : placeholder : ''), isSearchable && !isDisabled && /*#__PURE__*/React.createElement("input", {
|
|
235
222
|
ref: inputRef,
|
|
@@ -253,15 +240,13 @@ var ClearOrLoading = function ClearOrLoading(_ref3) {
|
|
|
253
240
|
isLoading = _ref3.isLoading,
|
|
254
241
|
isDisabled = _ref3.isDisabled,
|
|
255
242
|
onClearClick = _ref3.onClearClick,
|
|
256
|
-
selected = _ref3.selected
|
|
257
|
-
size = _ref3.size;
|
|
243
|
+
selected = _ref3.selected;
|
|
258
244
|
|
|
259
245
|
if (isLoading) {
|
|
260
246
|
return /*#__PURE__*/React.createElement(LoadingIcon, {
|
|
261
247
|
style: {
|
|
262
248
|
pointerEvents: 'none'
|
|
263
249
|
},
|
|
264
|
-
size: size,
|
|
265
250
|
className: styles.icon,
|
|
266
251
|
"data-test": "loading-icon"
|
|
267
252
|
});
|
|
@@ -274,9 +259,7 @@ var ClearOrLoading = function ClearOrLoading(_ref3) {
|
|
|
274
259
|
e.stopPropagation();
|
|
275
260
|
onClearClick();
|
|
276
261
|
}
|
|
277
|
-
}, /*#__PURE__*/React.createElement(CloseIcon,
|
|
278
|
-
size: size
|
|
279
|
-
}));
|
|
262
|
+
}, /*#__PURE__*/React.createElement(CloseIcon, null));
|
|
280
263
|
} else {
|
|
281
264
|
return null;
|
|
282
265
|
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
var styles = {
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"error": "
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"labelWrapper": "
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"icon": "
|
|
28
|
-
"clearIcon": "
|
|
2
|
+
"themeLight": "_themeLight_afq23v_27",
|
|
3
|
+
"themeDark": "_themeDark_afq23v_30",
|
|
4
|
+
"sizeS": "_sizeS_afq23v_34",
|
|
5
|
+
"sizeM": "_sizeM_afq23v_37",
|
|
6
|
+
"sizeL": "_sizeL_afq23v_40",
|
|
7
|
+
"classic": "_classic_afq23v_44",
|
|
8
|
+
"rock": "_rock_afq23v_47",
|
|
9
|
+
"main": "_main_afq23v_51",
|
|
10
|
+
"open": "_open_afq23v_73",
|
|
11
|
+
"focused": "_focused_afq23v_77",
|
|
12
|
+
"searchFocused": "_searchFocused_afq23v_78",
|
|
13
|
+
"error": "_error_afq23v_80",
|
|
14
|
+
"searchKeyFocused": "_searchKeyFocused_afq23v_85",
|
|
15
|
+
"enabled": "_enabled_afq23v_89",
|
|
16
|
+
"disabled": "_disabled_afq23v_95",
|
|
17
|
+
"isMulti": "_isMulti_afq23v_125",
|
|
18
|
+
"iconsWrapper": "_iconsWrapper_afq23v_143",
|
|
19
|
+
"labelWrapper": "_labelWrapper_afq23v_168",
|
|
20
|
+
"label": "_label_afq23v_168",
|
|
21
|
+
"labelNotSelected": "_labelNotSelected_afq23v_218",
|
|
22
|
+
"searchInput": "_searchInput_afq23v_231",
|
|
23
|
+
"multi": "_multi_afq23v_271",
|
|
24
|
+
"tagsContainer": "_tagsContainer_afq23v_291",
|
|
25
|
+
"tag": "_tag_afq23v_291",
|
|
26
|
+
"toggle": "_toggle_afq23v_313",
|
|
27
|
+
"icon": "_icon_afq23v_143",
|
|
28
|
+
"clearIcon": "_clearIcon_afq23v_380"
|
|
29
29
|
};
|
|
30
30
|
export { styles as default };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
2
|
+
import { useRef, useState } from 'react';
|
|
3
|
+
import { useResizeObserver } from '@rescui/use-resize-observer';
|
|
4
|
+
|
|
5
|
+
var useObservableForceRerender = function useObservableForceRerender() {
|
|
6
|
+
var observableRef = useRef(null);
|
|
7
|
+
|
|
8
|
+
var _useState = useState(false),
|
|
9
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
10
|
+
setDummyState = _useState2[1];
|
|
11
|
+
|
|
12
|
+
useResizeObserver(observableRef, function () {
|
|
13
|
+
//force rerender
|
|
14
|
+
setDummyState(function (s) {
|
|
15
|
+
return !s;
|
|
16
|
+
});
|
|
17
|
+
}, {
|
|
18
|
+
ignoreFirstCall: true
|
|
19
|
+
});
|
|
20
|
+
return observableRef;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { useObservableForceRerender };
|