@rescui/select 0.18.2 → 0.18.3

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.
@@ -236,7 +236,8 @@ function Multiselect(_ref) {
236
236
  selectedMap,
237
237
  highlightedIndex,
238
238
  getItemProps,
239
- menuProps
239
+ menuProps,
240
+ isMulti: true
240
241
  };
241
242
  return /*#__PURE__*/React.createElement("div", {
242
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
  }));
@@ -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,
@@ -99,9 +98,14 @@ function SelectBasic(_ref) {
99
98
  return item && item.disabled;
100
99
  }
101
100
 
102
- }); // Downshift composes the ref into a callback ref without reading it during render.
101
+ });
102
+
103
+ const reset = () => {
104
+ onChange?.(null);
105
+ }; // Downshift composes the ref into a callback ref without reading it during render.
103
106
  // eslint-disable-next-line react-hooks/refs
104
107
 
108
+
105
109
  const menuProps = getMenuProps({
106
110
  ref: menuRef
107
111
  }, {
@@ -142,7 +146,8 @@ function SelectBasic(_ref) {
142
146
  selectedMap,
143
147
  highlightedIndex,
144
148
  getItemProps,
145
- menuProps
149
+ menuProps,
150
+ isMulti: false
146
151
  };
147
152
  return /*#__PURE__*/React.createElement(FormTriggerWrapper, {
148
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
 
@@ -147,9 +148,15 @@ function SelectSearchable(_ref) {
147
148
  }
148
149
  }
149
150
 
150
- }); // Downshift composes the ref into a callback ref without reading it during render.
151
+ });
152
+
153
+ const reset = () => {
154
+ setInputValue('');
155
+ onChange?.(null);
156
+ }; // Downshift composes the ref into a callback ref without reading it during render.
151
157
  // eslint-disable-next-line react-hooks/refs
152
158
 
159
+
153
160
  const menuProps = getMenuProps({
154
161
  ref: menuRef
155
162
  }, {
@@ -178,7 +185,8 @@ function SelectSearchable(_ref) {
178
185
  selectedMap,
179
186
  highlightedIndex,
180
187
  getItemProps,
181
- menuProps
188
+ menuProps,
189
+ isMulti: false
182
190
  };
183
191
  return /*#__PURE__*/React.createElement(FormTriggerWrapper, {
184
192
  theme: theme,
@@ -219,6 +227,10 @@ function SelectSearchable(_ref) {
219
227
  className: styles.triggerContainer,
220
228
  "data-open": isOpen,
221
229
  "data-label-focused": isFocusedByLabel
230
+ }, /*#__PURE__*/React.createElement("div", {
231
+ className: styles.trigger,
232
+ "data-test": "select__trigger",
233
+ ref: triggerRefForDropdown
222
234
  }, /*#__PURE__*/React.createElement("input", { ...rest,
223
235
  ...mergeProps(fieldProps, // aria-invalid & aria-describedby, rest are overridden by inputProps,
224
236
  inputProps, labelFocusForTriggerProps),
@@ -226,25 +238,17 @@ function SelectSearchable(_ref) {
226
238
  className: styles.searchInput,
227
239
  placeholder: placeholder,
228
240
  "data-test": "select__trigger_input"
229
- }), /*#__PURE__*/React.createElement("div", {
230
- role: "button",
231
- ...mergeProps(getToggleButtonProps(), {
232
- ref: triggerRefForDropdown,
233
- onFocus: () => {
234
- inputRef.current?.focus();
235
- }
236
- }),
237
- tabIndex: undefined,
238
- className: styles.trigger,
239
- "data-test": "select__trigger"
240
- }, /*#__PURE__*/React.createElement(Icons, {
241
+ }), /*#__PURE__*/React.createElement(Icons, {
241
242
  isLoading: isLoading,
242
243
  canHaveClearIcon: isClearable && !isDisabled && hasValue,
243
244
  onClear: () => {
244
245
  reset();
245
246
  inputRef.current?.focus();
246
247
  },
247
- triggerId: inputProps.id
248
+ triggerId: inputProps.id,
249
+ ...mergeProps(getToggleButtonProps(), {
250
+ role: 'button'
251
+ })
248
252
  })));
249
253
  }
250
254
  }));
@@ -1,32 +1,32 @@
1
1
  var styles = {
2
- "themeLight": "_themeLight_j38uw6_6",
3
- "themeDark": "_themeDark_j38uw6_9",
4
- "sizeS": "_sizeS_j38uw6_13",
5
- "sizeM": "_sizeM_j38uw6_16",
6
- "sizeL": "_sizeL_j38uw6_19",
7
- "classic": "_classic_j38uw6_23",
8
- "rock": "_rock_j38uw6_26",
9
- "root": "_root_j38uw6_30",
10
- "triggerContainer": "_triggerContainer_j38uw6_36",
11
- "disabled": "_disabled_j38uw6_41",
12
- "trigger": "_trigger_j38uw6_36",
13
- "error": "_error_j38uw6_78",
14
- "enabled": "_enabled_j38uw6_83",
15
- "searchable": "_searchable_j38uw6_98",
16
- "canBeMultiline": "_canBeMultiline_j38uw6_125",
17
- "triggerText": "_triggerText_j38uw6_129",
18
- "searchInput": "_searchInput_j38uw6_130",
19
- "labelNotSelected": "_labelNotSelected_j38uw6_161",
20
- "multi": "_multi_j38uw6_217",
21
- "tagsContainer": "_tagsContainer_j38uw6_234",
22
- "tag": "_tag_j38uw6_234",
23
- "filledTag": "_filledTag_j38uw6_256",
24
- "iconsWrapper": "_iconsWrapper_j38uw6_264",
25
- "toggle": "_toggle_j38uw6_282",
26
- "icon": "_icon_j38uw6_264",
27
- "clearIcon": "_clearIcon_j38uw6_356",
28
- "visuallyHidden": "_visuallyHidden_j38uw6_416",
29
- "select": "_select_j38uw6_433",
30
- "observable": "_observable_j38uw6_455"
2
+ "themeLight": "_themeLight_ua4ue1_6",
3
+ "themeDark": "_themeDark_ua4ue1_9",
4
+ "sizeS": "_sizeS_ua4ue1_13",
5
+ "sizeM": "_sizeM_ua4ue1_16",
6
+ "sizeL": "_sizeL_ua4ue1_19",
7
+ "classic": "_classic_ua4ue1_23",
8
+ "rock": "_rock_ua4ue1_26",
9
+ "root": "_root_ua4ue1_30",
10
+ "triggerContainer": "_triggerContainer_ua4ue1_36",
11
+ "disabled": "_disabled_ua4ue1_41",
12
+ "trigger": "_trigger_ua4ue1_36",
13
+ "error": "_error_ua4ue1_78",
14
+ "enabled": "_enabled_ua4ue1_83",
15
+ "searchable": "_searchable_ua4ue1_98",
16
+ "canBeMultiline": "_canBeMultiline_ua4ue1_124",
17
+ "triggerText": "_triggerText_ua4ue1_128",
18
+ "searchInput": "_searchInput_ua4ue1_129",
19
+ "labelNotSelected": "_labelNotSelected_ua4ue1_159",
20
+ "multi": "_multi_ua4ue1_212",
21
+ "tagsContainer": "_tagsContainer_ua4ue1_227",
22
+ "tag": "_tag_ua4ue1_227",
23
+ "filledTag": "_filledTag_ua4ue1_249",
24
+ "iconsWrapper": "_iconsWrapper_ua4ue1_257",
25
+ "toggle": "_toggle_ua4ue1_275",
26
+ "icon": "_icon_ua4ue1_257",
27
+ "clearIcon": "_clearIcon_ua4ue1_360",
28
+ "visuallyHidden": "_visuallyHidden_ua4ue1_422",
29
+ "select": "_select_ua4ue1_439",
30
+ "observable": "_observable_ua4ue1_461"
31
31
  };
32
32
  export { styles as default };
@@ -1,15 +1,15 @@
1
1
  var styles = {
2
- "themeLight": "_themeLight_19sugsm_6",
3
- "themeDark": "_themeDark_19sugsm_9",
4
- "sizeS": "_sizeS_19sugsm_13",
5
- "sizeM": "_sizeM_19sugsm_16",
6
- "sizeL": "_sizeL_19sugsm_19",
7
- "main": "_main_19sugsm_23",
8
- "label": "_label_19sugsm_27",
9
- "disabled": "_disabled_19sugsm_33",
10
- "footer": "_footer_19sugsm_38",
11
- "errorMessage": "_errorMessage_19sugsm_45",
12
- "error": "_error_19sugsm_45",
13
- "note": "_note_19sugsm_54"
2
+ "themeLight": "_themeLight_nw01ar_6",
3
+ "themeDark": "_themeDark_nw01ar_9",
4
+ "sizeS": "_sizeS_nw01ar_13",
5
+ "sizeM": "_sizeM_nw01ar_16",
6
+ "sizeL": "_sizeL_nw01ar_19",
7
+ "main": "_main_nw01ar_23",
8
+ "label": "_label_nw01ar_27",
9
+ "disabled": "_disabled_nw01ar_33",
10
+ "footer": "_footer_nw01ar_38",
11
+ "errorMessage": "_errorMessage_nw01ar_45",
12
+ "error": "_error_nw01ar_45",
13
+ "note": "_note_nw01ar_54"
14
14
  };
15
15
  export { styles as default };
@@ -1,16 +1,16 @@
1
1
  var styles = {
2
- "sizeS": "_sizeS_19q54es_6",
3
- "sizeM": "_sizeM_19q54es_9",
4
- "sizeL": "_sizeL_19q54es_12",
5
- "classic": "_classic_19q54es_16",
6
- "rock": "_rock_19q54es_26",
7
- "listBox": "_listBox_19q54es_37",
8
- "item": "_item_19q54es_53",
9
- "selected": "_selected_19q54es_91",
10
- "disabled": "_disabled_19q54es_105",
11
- "checkIcon": "_checkIcon_19q54es_112",
12
- "visible": "_visible_19q54es_119",
13
- "divider": "_divider_19q54es_126",
14
- "groupHeader": "_groupHeader_19q54es_140"
2
+ "sizeS": "_sizeS_l04t41_6",
3
+ "sizeM": "_sizeM_l04t41_9",
4
+ "sizeL": "_sizeL_l04t41_12",
5
+ "classic": "_classic_l04t41_16",
6
+ "rock": "_rock_l04t41_26",
7
+ "listBox": "_listBox_l04t41_37",
8
+ "item": "_item_l04t41_53",
9
+ "selected": "_selected_l04t41_91",
10
+ "disabled": "_disabled_l04t41_105",
11
+ "checkIcon": "_checkIcon_l04t41_112",
12
+ "visible": "_visible_l04t41_119",
13
+ "divider": "_divider_l04t41_126",
14
+ "groupHeader": "_groupHeader_l04t41_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.2",
3
+ "version": "0.18.3",
4
4
  "description": "",
5
5
  "license": "Apache-2.0",
6
6
  "author": "JetBrains",
@@ -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": "3711cbfc0c797014395421b008aa5331d6d47c6e"
45
+ "gitHead": "4b290b9eda00d47cec248ca0cb8eef2201f5c79c"
46
46
  }