@rescui/select 0.9.4 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,15 @@
1
1
  var styles = {
2
- "menu": "_menu_16fx7i9_1"
2
+ "sizeS": "_sizeS_1wcbmgg_3",
3
+ "sizeM": "_sizeM_1wcbmgg_6",
4
+ "sizeL": "_sizeL_1wcbmgg_9",
5
+ "menu": "_menu_1wcbmgg_13",
6
+ "menuSizeS": "_menuSizeS_1wcbmgg_26",
7
+ "menuSizeM": "_menuSizeM_1wcbmgg_30",
8
+ "menuSizeL": "_menuSizeL_1wcbmgg_34",
9
+ "withGroupsLabel": "_withGroupsLabel_1wcbmgg_40",
10
+ "lastOption": "_lastOption_1wcbmgg_39",
11
+ "divider": "_divider_1wcbmgg_45",
12
+ "checkIcon": "_checkIcon_1wcbmgg_51",
13
+ "observable": "_observable_1wcbmgg_56"
3
14
  };
4
15
  export { styles as default };
@@ -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 = {
@@ -140,7 +140,8 @@ var Foldable = /*#__PURE__*/function (_Component) {
140
140
  plusNWidth = measureElement(plusNRef.current).width;
141
141
  }
142
142
 
143
- var gap = _this.props.gap || 0;
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.FC<FormTriggerWrapperProps>;
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 { useTheme, ThemeProvider } from '@rescui/ui-contexts';
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: cn(styles.label, boldLabel && styles.bold)
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 FormTriggerWrapper(_ref2) {
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 = useTheme(themeFromProps);
41
- return /*#__PURE__*/React.createElement(ThemeProvider, {
42
- theme: theme
43
- }, /*#__PURE__*/React.createElement("div", {
44
- className: cn(className, SIZE_STYLES[size], THEME_STYLES[theme]),
45
- "data-test": "select-wrapper"
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
- }, note)));
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
- "errorMessage": "_errorMessage_1jznt74_4",
3
- "sizeL": "_sizeL_1jznt74_8",
4
- "label": "_label_1jznt74_9",
5
- "note": "_note_1jznt74_12",
6
- "sizeM": "_sizeM_1jznt74_17",
7
- "sizeS": "_sizeS_1jznt74_26",
8
- "themeLight": "_themeLight_1jznt74_36",
9
- "themeDark": "_themeDark_1jznt74_40",
10
- "rs-reset-letter-spacing": "_rs-reset-letter-spacing_1jznt74_1",
11
- "bold": "_bold_1jznt74_77"
2
+ "themeLight": "_themeLight_72ccy2_7",
3
+ "themeDark": "_themeDark_72ccy2_10",
4
+ "sizeS": "_sizeS_72ccy2_14",
5
+ "sizeM": "_sizeM_72ccy2_17",
6
+ "sizeL": "_sizeL_72ccy2_20",
7
+ "main": "_main_72ccy2_24",
8
+ "label": "_label_72ccy2_28",
9
+ "errorMessage": "_errorMessage_72ccy2_36",
10
+ "note": "_note_72ccy2_43"
12
11
  };
13
12
  export { styles as default };
@@ -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 _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
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, { useRef, useState, useEffect, useMemo, useCallback } from '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 { useTheme } from '@rescui/ui-contexts';
28
- import { useStrongMemo, getDefaultCursorIndex, isGroupsEmpty, getOptionValue, getMovedCursorIndex, shouldOpenSelect, isIndexMatchCursor, reverseTheme, getPlainOptionsFromGroups, getEmptyMessage, withoutGroupsLabel, OptionGroupTypes, convertToOptionGroupsIfNeeded, calculateMaxHeight } from '../utils.js';
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 groups = _ref.groups,
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
- size: size
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
- style: {
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
- style: {
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 _context4;
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 = useTheme(themeFromProps);
201
+ var theme = useThemeWithUndefined(themeFromProps);
194
202
 
195
- var _useState = useState(false),
196
- _useState2 = _slicedToArray(_useState, 2),
197
- isKeyboardNavigating = _useState2[0],
198
- setIsKeyboardNavigating = _useState2[1];
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 _useState3 = useState(false),
213
- _useState4 = _slicedToArray(_useState3, 2),
214
- menuIsOpen = _useState4[0],
215
- setMenuIsOpen = _useState4[1];
220
+ var _useState5 = useState(false),
221
+ _useState6 = _slicedToArray(_useState5, 2),
222
+ menuIsOpen = _useState6[0],
223
+ setMenuIsOpen = _useState6[1];
216
224
 
217
- var _useState5 = useState(function () {
225
+ var _useState7 = useState(function () {
218
226
  return getDefaultCursorIndex(filteredGroups);
219
227
  }),
220
- _useState6 = _slicedToArray(_useState5, 2),
221
- cursorIndex = _useState6[0],
222
- setCursorIndex = _useState6[1];
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
- var maxHeight = calculateMaxHeight(size);
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
- className: className,
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
- }, restProps.name && /*#__PURE__*/React.createElement(NativeSelectedOptions, {
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: size,
434
- theme: mode === 'rock' ? reverseTheme(theme) : theme,
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(_context4 = getPlainOptionsFromGroups(filteredGroups)).call(_context4, function (item, i, collection) {
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 { useTheme } from '@rescui/ui-contexts';
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 = useTheme(themeFromProps);
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.main,
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
- className: cn(styles.select, SIZE_STYLES[size]),
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
- "main": "_main_vh650b_3",
3
- "select": "_select_vh650b_7",
4
- "sizeL": "_sizeL_vh650b_19",
5
- "rs-reset-letter-spacing": "_rs-reset-letter-spacing_vh650b_1",
6
- "sizeM": "_sizeM_vh650b_23",
7
- "sizeS": "_sizeS_vh650b_27"
2
+ "sizeS": "_sizeS_6puso5_6",
3
+ "sizeM": "_sizeM_6puso5_9",
4
+ "sizeL": "_sizeL_6puso5_12",
5
+ "main": "_main_6puso5_16",
6
+ "wrapper": "_wrapper_6puso5_20",
7
+ "select": "_select_6puso5_24"
8
8
  };
9
9
  export { styles as default };
@@ -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 { useTheme } from '@rescui/ui-contexts';
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 = useTheme(themeFromProps);
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
- size: TAG_SIZE[size],
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
- size: TAG_SIZE[size]
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.notSelected),
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
- "main": "_main_qhbyjk_24",
3
- "open": "_open_qhbyjk_36",
4
- "enabled": "_enabled_qhbyjk_41",
5
- "disabled": "_disabled_qhbyjk_45",
6
- "focused": "_focused_qhbyjk_49",
7
- "searchFocused": "_searchFocused_qhbyjk_50",
8
- "sizeL": "_sizeL_qhbyjk_56",
9
- "sizeM": "_sizeM_qhbyjk_59",
10
- "rs-reset-letter-spacing": "_rs-reset-letter-spacing_qhbyjk_1",
11
- "sizeS": "_sizeS_qhbyjk_62",
12
- "isMulti": "_isMulti_qhbyjk_136",
13
- "error": "_error_qhbyjk_69",
14
- "notSelected": "_notSelected_qhbyjk_144",
15
- "themeLight": "_themeLight_qhbyjk_148",
16
- "searchKeyFocused": "_searchKeyFocused_qhbyjk_154",
17
- "rock": "_rock_qhbyjk_168",
18
- "toggle": "_toggle_qhbyjk_173",
19
- "labelWrapper": "_labelWrapper_qhbyjk_177",
20
- "themeDark": "_themeDark_qhbyjk_199",
21
- "label": "_label_qhbyjk_177",
22
- "iconsWrapper": "_iconsWrapper_qhbyjk_285",
23
- "searchInput": "_searchInput_qhbyjk_340",
24
- "multi": "_multi_qhbyjk_366",
25
- "tagsContainer": "_tagsContainer_qhbyjk_375",
26
- "tag": "_tag_qhbyjk_375",
27
- "icon": "_icon_qhbyjk_285",
28
- "clearIcon": "_clearIcon_qhbyjk_490"
2
+ "themeLight": "_themeLight_d1n327_27",
3
+ "themeDark": "_themeDark_d1n327_30",
4
+ "sizeS": "_sizeS_d1n327_34",
5
+ "sizeM": "_sizeM_d1n327_37",
6
+ "sizeL": "_sizeL_d1n327_40",
7
+ "classic": "_classic_d1n327_44",
8
+ "rock": "_rock_d1n327_47",
9
+ "main": "_main_d1n327_51",
10
+ "open": "_open_d1n327_73",
11
+ "focused": "_focused_d1n327_77",
12
+ "searchFocused": "_searchFocused_d1n327_78",
13
+ "error": "_error_d1n327_80",
14
+ "searchKeyFocused": "_searchKeyFocused_d1n327_85",
15
+ "enabled": "_enabled_d1n327_89",
16
+ "disabled": "_disabled_d1n327_95",
17
+ "isMulti": "_isMulti_d1n327_125",
18
+ "iconsWrapper": "_iconsWrapper_d1n327_143",
19
+ "labelWrapper": "_labelWrapper_d1n327_168",
20
+ "label": "_label_d1n327_168",
21
+ "labelNotSelected": "_labelNotSelected_d1n327_218",
22
+ "searchInput": "_searchInput_d1n327_231",
23
+ "multi": "_multi_d1n327_271",
24
+ "tagsContainer": "_tagsContainer_d1n327_291",
25
+ "tag": "_tag_d1n327_291",
26
+ "toggle": "_toggle_d1n327_313",
27
+ "icon": "_icon_d1n327_143",
28
+ "clearIcon": "_clearIcon_d1n327_380"
29
29
  };
30
30
  export { styles as default };
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const useObservableForceRerender: () => import("react").MutableRefObject<HTMLDivElement>;
@@ -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 };