@rescui/select 0.18.1 → 0.18.3-RUI-308-Fix-select-issues-405b9fa40.12

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.
@@ -176,12 +176,16 @@ function Multiselect(_ref) {
176
176
  }
177
177
 
178
178
  });
179
- const menuProps = getMenuProps({
179
+ const menuProps = getMenuProps( // Downshift composes the ref into a callback ref without reading it during render.
180
+ // eslint-disable-next-line react-hooks/refs
181
+ {
180
182
  ref: menuRef,
181
183
  'aria-multiselectable': isListBoxEmpty ? undefined : 'true'
182
184
  }, {
183
185
  suppressRefError: true
184
- });
186
+ }); // Downshift composes the ref into a callback ref without reading it during render.
187
+ // eslint-disable-next-line react-hooks/refs
188
+
185
189
  const triggerProps = getToggleButtonProps({
186
190
  ref: triggerRef,
187
191
  // eslint-disable-next-line complexity
@@ -232,7 +236,8 @@ function Multiselect(_ref) {
232
236
  selectedMap,
233
237
  highlightedIndex,
234
238
  getItemProps,
235
- menuProps
239
+ menuProps,
240
+ isMulti: true
236
241
  };
237
242
  return /*#__PURE__*/React.createElement("div", {
238
243
  className: cn(className, styles.root, THEME_STYLES[theme], SIZE_STYLES[size], MODE_STYLES[mode], isDisabled ? styles.disabled : styles.enabled, Boolean(error) && styles.error),
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
2
  import styles from '../styles/common.p.module.css.js';
3
3
 
4
+ const shouldRenderOption = option => 'value' in option && String(option.value);
5
+
4
6
  const HiddenSelect = _ref => {
5
7
  let {
6
8
  name,
@@ -29,7 +31,7 @@ const HiddenSelect = _ref => {
29
31
  const arrayValue = isMultiple ? value : [value]; // merge options with value in case the provided value is not included in options
30
32
 
31
33
  const allItems = Array.from( // map will deduplicate options by values
32
- new Map((!value ? options : [...options, ...arrayValue]).map(item => [item.value, item])).values());
34
+ new Map((!value ? options : [...options, ...arrayValue]).map(item => [item.value, item])).values()).filter(shouldRenderOption);
33
35
  return /*#__PURE__*/React.createElement("div", {
34
36
  className: styles.visuallyHidden
35
37
  }, /*#__PURE__*/React.createElement("select", { ...selectProps
@@ -13,5 +13,5 @@ export type IconsProps = {
13
13
  onClear?: () => void;
14
14
  triggerId?: string;
15
15
  };
16
- export declare const Icons: ({ isLoading, canHaveClearIcon, onClear, triggerId }: IconsProps) => React.JSX.Element;
16
+ export declare const Icons: ({ isLoading, canHaveClearIcon, onClear, triggerId, ...restProps }: IconsProps) => React.JSX.Element;
17
17
  export {};
@@ -50,10 +50,12 @@ const Icons = _ref2 => {
50
50
  isLoading,
51
51
  canHaveClearIcon,
52
52
  onClear,
53
- triggerId
53
+ triggerId,
54
+ ...restProps
54
55
  } = _ref2;
55
56
  return /*#__PURE__*/React.createElement("div", {
56
- className: styles.iconsWrapper
57
+ className: styles.iconsWrapper,
58
+ ...restProps
57
59
  }, /*#__PURE__*/React.createElement(ClearOrLoading, {
58
60
  isLoading: isLoading,
59
61
  canHaveClearIcon: canHaveClearIcon,
@@ -25,12 +25,14 @@ function Option(_ref) {
25
25
  const {
26
26
  selectedMap,
27
27
  getItemProps,
28
- highlightedIndex
28
+ highlightedIndex,
29
+ isMulti
29
30
  } = state;
30
31
  const index = item.index;
31
32
  const isSelected = selectedMap.has(item.key);
32
33
  const isHighlighted = highlightedIndex === item.index;
33
34
  const isDisabled = item.disabled;
35
+ const shouldRenderCheckIcon = isMulti || isSelected;
34
36
  return /*#__PURE__*/React.createElement("li", { ...getItemProps({
35
37
  item,
36
38
  index,
@@ -42,7 +44,7 @@ function Option(_ref) {
42
44
  "data-rs-internal": "select-list-box__item",
43
45
  "data-focused": isHighlighted,
44
46
  "data-test": `select-options-list__item_${item.key}`
45
- }, /*#__PURE__*/React.createElement("span", null, item.label), /*#__PURE__*/React.createElement(CheckOutlineIcon, {
47
+ }, /*#__PURE__*/React.createElement("span", null, item.label), shouldRenderCheckIcon && /*#__PURE__*/React.createElement(CheckOutlineIcon, {
46
48
  "data-rs-internal": "select-list-box__check-icon",
47
49
  className: cn(styles.checkIcon, isSelected && styles.visible)
48
50
  }));
@@ -1,3 +1,8 @@
1
+ @property --_rs-theme-dark-coefficient{
2
+ syntax:'<number>';
3
+ inherits:true;
4
+ initial-value:0;
5
+ }
1
6
  @define-mixin rs-select-size-s{
2
7
  &[class]{
3
8
  --_rs-select-size:s;
@@ -1,3 +1,8 @@
1
+ @property --_rs-theme-dark-coefficient{
2
+ syntax:'<number>';
3
+ inherits:true;
4
+ initial-value:0;
5
+ }
1
6
  @define-mixin rs-select-size-s{
2
7
  &[class]{
3
8
  --_rs-select-size:s;
@@ -71,8 +71,7 @@ function SelectBasic(_ref) {
71
71
  getLabelProps,
72
72
  getMenuProps,
73
73
  highlightedIndex,
74
- getItemProps,
75
- reset
74
+ getItemProps
76
75
  } = useSelect({
77
76
  items: flattenedOptions,
78
77
  itemToString,
@@ -100,11 +99,20 @@ function SelectBasic(_ref) {
100
99
  }
101
100
 
102
101
  });
102
+
103
+ const reset = () => {
104
+ onChange?.(null);
105
+ }; // Downshift composes the ref into a callback ref without reading it during render.
106
+ // eslint-disable-next-line react-hooks/refs
107
+
108
+
103
109
  const menuProps = getMenuProps({
104
110
  ref: menuRef
105
111
  }, {
106
112
  suppressRefError: true
107
- });
113
+ }); // Downshift composes the ref into a callback ref without reading it during render.
114
+ // eslint-disable-next-line react-hooks/refs
115
+
108
116
  const triggerProps = getToggleButtonProps({
109
117
  ref: triggerRef,
110
118
  onKeyDown: event => {
@@ -138,7 +146,8 @@ function SelectBasic(_ref) {
138
146
  selectedMap,
139
147
  highlightedIndex,
140
148
  getItemProps,
141
- menuProps
149
+ menuProps,
150
+ isMulti: false
142
151
  };
143
152
  return /*#__PURE__*/React.createElement(FormTriggerWrapper, {
144
153
  theme: theme,
@@ -76,7 +76,6 @@ function SelectSearchable(_ref) {
76
76
  getInputProps,
77
77
  highlightedIndex,
78
78
  getItemProps,
79
- reset,
80
79
  setInputValue
81
80
  } = useCombobox({
82
81
  onInputValueChange(_ref2) {
@@ -118,13 +117,15 @@ function SelectSearchable(_ref) {
118
117
  onIsOpenChange(_ref4) {
119
118
  let {
120
119
  isOpen: newIsOpen,
121
- selectedItem: newSelectedItem
120
+ selectedItem: newSelectedItem,
121
+ inputValue: newInputValue
122
122
  } = _ref4;
123
+ const inputValueFromSelectedItem = itemToString(newSelectedItem);
123
124
 
124
125
  if (newIsOpen) {
125
126
  setFilterString('');
126
- } else {
127
- setInputValue(itemToString(newSelectedItem));
127
+ } else if (newInputValue !== inputValueFromSelectedItem) {
128
+ setInputValue(inputValueFromSelectedItem);
128
129
  }
129
130
  },
130
131
 
@@ -148,11 +149,21 @@ function SelectSearchable(_ref) {
148
149
  }
149
150
 
150
151
  });
152
+
153
+ const reset = () => {
154
+ setInputValue('');
155
+ onChange?.(null);
156
+ }; // Downshift composes the ref into a callback ref without reading it during render.
157
+ // eslint-disable-next-line react-hooks/refs
158
+
159
+
151
160
  const menuProps = getMenuProps({
152
161
  ref: menuRef
153
162
  }, {
154
163
  suppressRefError: true
155
- });
164
+ }); // Downshift composes the ref into a callback ref without reading it during render.
165
+ // eslint-disable-next-line react-hooks/refs
166
+
156
167
  const inputProps = getInputProps({
157
168
  ref: inputRef,
158
169
  // fix screen-reader focus on an opened popup with an empty list
@@ -174,7 +185,8 @@ function SelectSearchable(_ref) {
174
185
  selectedMap,
175
186
  highlightedIndex,
176
187
  getItemProps,
177
- menuProps
188
+ menuProps,
189
+ isMulti: false
178
190
  };
179
191
  return /*#__PURE__*/React.createElement(FormTriggerWrapper, {
180
192
  theme: theme,
@@ -215,6 +227,10 @@ function SelectSearchable(_ref) {
215
227
  className: styles.triggerContainer,
216
228
  "data-open": isOpen,
217
229
  "data-label-focused": isFocusedByLabel
230
+ }, /*#__PURE__*/React.createElement("div", {
231
+ className: styles.trigger,
232
+ "data-test": "select__trigger",
233
+ ref: triggerRefForDropdown
218
234
  }, /*#__PURE__*/React.createElement("input", { ...rest,
219
235
  ...mergeProps(fieldProps, // aria-invalid & aria-describedby, rest are overridden by inputProps,
220
236
  inputProps, labelFocusForTriggerProps),
@@ -222,25 +238,17 @@ function SelectSearchable(_ref) {
222
238
  className: styles.searchInput,
223
239
  placeholder: placeholder,
224
240
  "data-test": "select__trigger_input"
225
- }), /*#__PURE__*/React.createElement("div", {
226
- role: "button",
227
- ...mergeProps(getToggleButtonProps(), {
228
- ref: triggerRefForDropdown,
229
- onFocus: () => {
230
- inputRef.current?.focus();
231
- }
232
- }),
233
- tabIndex: undefined,
234
- className: styles.trigger,
235
- "data-test": "select__trigger"
236
- }, /*#__PURE__*/React.createElement(Icons, {
241
+ }), /*#__PURE__*/React.createElement(Icons, {
237
242
  isLoading: isLoading,
238
243
  canHaveClearIcon: isClearable && !isDisabled && hasValue,
239
244
  onClear: () => {
240
245
  reset();
241
246
  inputRef.current?.focus();
242
247
  },
243
- triggerId: inputProps.id
248
+ triggerId: inputProps.id,
249
+ ...mergeProps(getToggleButtonProps(), {
250
+ role: 'button'
251
+ })
244
252
  })));
245
253
  }
246
254
  }));
@@ -1,32 +1,32 @@
1
1
  var styles = {
2
- "themeLight": "_themeLight_ln30te_6",
3
- "themeDark": "_themeDark_ln30te_9",
4
- "sizeS": "_sizeS_ln30te_13",
5
- "sizeM": "_sizeM_ln30te_16",
6
- "sizeL": "_sizeL_ln30te_19",
7
- "classic": "_classic_ln30te_23",
8
- "rock": "_rock_ln30te_26",
9
- "root": "_root_ln30te_30",
10
- "triggerContainer": "_triggerContainer_ln30te_36",
11
- "disabled": "_disabled_ln30te_41",
12
- "trigger": "_trigger_ln30te_36",
13
- "error": "_error_ln30te_78",
14
- "enabled": "_enabled_ln30te_83",
15
- "searchable": "_searchable_ln30te_98",
16
- "canBeMultiline": "_canBeMultiline_ln30te_125",
17
- "triggerText": "_triggerText_ln30te_129",
18
- "searchInput": "_searchInput_ln30te_130",
19
- "labelNotSelected": "_labelNotSelected_ln30te_161",
20
- "multi": "_multi_ln30te_217",
21
- "tagsContainer": "_tagsContainer_ln30te_234",
22
- "tag": "_tag_ln30te_234",
23
- "filledTag": "_filledTag_ln30te_256",
24
- "iconsWrapper": "_iconsWrapper_ln30te_264",
25
- "toggle": "_toggle_ln30te_282",
26
- "icon": "_icon_ln30te_264",
27
- "clearIcon": "_clearIcon_ln30te_356",
28
- "visuallyHidden": "_visuallyHidden_ln30te_416",
29
- "select": "_select_ln30te_433",
30
- "observable": "_observable_ln30te_455"
2
+ "themeLight": "_themeLight_b7lwf6_6",
3
+ "themeDark": "_themeDark_b7lwf6_9",
4
+ "sizeS": "_sizeS_b7lwf6_13",
5
+ "sizeM": "_sizeM_b7lwf6_16",
6
+ "sizeL": "_sizeL_b7lwf6_19",
7
+ "classic": "_classic_b7lwf6_23",
8
+ "rock": "_rock_b7lwf6_26",
9
+ "root": "_root_b7lwf6_30",
10
+ "triggerContainer": "_triggerContainer_b7lwf6_36",
11
+ "disabled": "_disabled_b7lwf6_41",
12
+ "trigger": "_trigger_b7lwf6_36",
13
+ "error": "_error_b7lwf6_78",
14
+ "enabled": "_enabled_b7lwf6_83",
15
+ "searchable": "_searchable_b7lwf6_98",
16
+ "canBeMultiline": "_canBeMultiline_b7lwf6_124",
17
+ "triggerText": "_triggerText_b7lwf6_128",
18
+ "searchInput": "_searchInput_b7lwf6_129",
19
+ "labelNotSelected": "_labelNotSelected_b7lwf6_159",
20
+ "multi": "_multi_b7lwf6_212",
21
+ "tagsContainer": "_tagsContainer_b7lwf6_227",
22
+ "tag": "_tag_b7lwf6_227",
23
+ "filledTag": "_filledTag_b7lwf6_249",
24
+ "iconsWrapper": "_iconsWrapper_b7lwf6_257",
25
+ "toggle": "_toggle_b7lwf6_275",
26
+ "icon": "_icon_b7lwf6_257",
27
+ "clearIcon": "_clearIcon_b7lwf6_360",
28
+ "visuallyHidden": "_visuallyHidden_b7lwf6_422",
29
+ "select": "_select_b7lwf6_439",
30
+ "observable": "_observable_b7lwf6_461"
31
31
  };
32
32
  export { styles as default };
@@ -1,15 +1,15 @@
1
1
  var styles = {
2
- "themeLight": "_themeLight_mwctxe_6",
3
- "themeDark": "_themeDark_mwctxe_9",
4
- "sizeS": "_sizeS_mwctxe_13",
5
- "sizeM": "_sizeM_mwctxe_16",
6
- "sizeL": "_sizeL_mwctxe_19",
7
- "main": "_main_mwctxe_23",
8
- "label": "_label_mwctxe_27",
9
- "disabled": "_disabled_mwctxe_33",
10
- "footer": "_footer_mwctxe_38",
11
- "errorMessage": "_errorMessage_mwctxe_45",
12
- "error": "_error_mwctxe_45",
13
- "note": "_note_mwctxe_54"
2
+ "themeLight": "_themeLight_xu4mx4_6",
3
+ "themeDark": "_themeDark_xu4mx4_9",
4
+ "sizeS": "_sizeS_xu4mx4_13",
5
+ "sizeM": "_sizeM_xu4mx4_16",
6
+ "sizeL": "_sizeL_xu4mx4_19",
7
+ "main": "_main_xu4mx4_23",
8
+ "label": "_label_xu4mx4_27",
9
+ "disabled": "_disabled_xu4mx4_33",
10
+ "footer": "_footer_xu4mx4_38",
11
+ "errorMessage": "_errorMessage_xu4mx4_45",
12
+ "error": "_error_xu4mx4_45",
13
+ "note": "_note_xu4mx4_54"
14
14
  };
15
15
  export { styles as default };
@@ -1,16 +1,16 @@
1
1
  var styles = {
2
- "sizeS": "_sizeS_1foz4kw_6",
3
- "sizeM": "_sizeM_1foz4kw_9",
4
- "sizeL": "_sizeL_1foz4kw_12",
5
- "classic": "_classic_1foz4kw_16",
6
- "rock": "_rock_1foz4kw_19",
7
- "listBox": "_listBox_1foz4kw_23",
8
- "item": "_item_1foz4kw_39",
9
- "selected": "_selected_1foz4kw_77",
10
- "disabled": "_disabled_1foz4kw_91",
11
- "checkIcon": "_checkIcon_1foz4kw_98",
12
- "visible": "_visible_1foz4kw_105",
13
- "divider": "_divider_1foz4kw_112",
14
- "groupHeader": "_groupHeader_1foz4kw_126"
2
+ "sizeS": "_sizeS_1nom7ru_6",
3
+ "sizeM": "_sizeM_1nom7ru_9",
4
+ "sizeL": "_sizeL_1nom7ru_12",
5
+ "classic": "_classic_1nom7ru_16",
6
+ "rock": "_rock_1nom7ru_26",
7
+ "listBox": "_listBox_1nom7ru_37",
8
+ "item": "_item_1nom7ru_53",
9
+ "selected": "_selected_1nom7ru_91",
10
+ "disabled": "_disabled_1nom7ru_105",
11
+ "checkIcon": "_checkIcon_1nom7ru_112",
12
+ "visible": "_visible_1nom7ru_119",
13
+ "divider": "_divider_1nom7ru_126",
14
+ "groupHeader": "_groupHeader_1nom7ru_140"
15
15
  };
16
16
  export { styles as default };
package/lib/types.d.ts CHANGED
@@ -34,6 +34,7 @@ export type ListBoxState = {
34
34
  highlightedIndex: number;
35
35
  selectedMap: Map<Key, SelectOption>;
36
36
  menuRef?: React.RefObject<HTMLUListElement>;
37
+ isMulti?: boolean;
37
38
  };
38
39
  export type NativeSelectOption = {
39
40
  label: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rescui/select",
3
- "version": "0.18.1",
3
+ "version": "0.18.3-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
4
4
  "description": "",
5
5
  "license": "Apache-2.0",
6
6
  "author": "JetBrains",
@@ -17,10 +17,10 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@babel/runtime-corejs3": "^7.26.0",
20
- "@rescui/dropdown": "^0.11.1",
21
- "@rescui/form-field": "^0.1.6",
22
- "@rescui/tag": "^0.13.12",
23
- "@rescui/use-resize-observer": "^0.3.3",
20
+ "@rescui/dropdown": "0.11.3-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
21
+ "@rescui/form-field": "0.1.8-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
22
+ "@rescui/tag": "0.13.14-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
23
+ "@rescui/use-resize-observer": "0.3.5-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
24
24
  "classnames": "^2.2.6",
25
25
  "downshift": "^9.3.2",
26
26
  "scroll-into-view-if-needed": "3.1.0"
@@ -31,10 +31,10 @@
31
31
  "react": ">=16.8.0 <20"
32
32
  },
33
33
  "devDependencies": {
34
- "@rescui/colors": "^0.3.2",
35
- "@rescui/scripts": "^0.5.2",
36
- "@rescui/typography": "^0.27.3",
37
- "@rescui/visual-regression": "^0.1.4",
34
+ "@rescui/colors": "0.3.4-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
35
+ "@rescui/scripts": "0.5.2",
36
+ "@rescui/typography": "0.27.5-RUI-308-Fix-select-issues-405b9fa40.12+405b9fa40",
37
+ "@rescui/visual-regression": "0.1.4",
38
38
  "sniffr": "^1.2.0"
39
39
  },
40
40
  "scripts": {
@@ -42,5 +42,5 @@
42
42
  "build-pcss-api": "rescui-scripts build-pcss-api --file public-api.p.css"
43
43
  },
44
44
  "nx": {},
45
- "gitHead": "7614b4519a4716fbf1151d94c97fda48eab60800"
45
+ "gitHead": "405b9fa40886b0ab6709c9185e8214599d2d792e"
46
46
  }