@rescui/select 0.15.1-RUI-280-Update-select-component-downshift-cd2a98813.66 → 0.15.1-RUI-280-Update-select-component-downshift-2f40ef205.67

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.
@@ -2,7 +2,6 @@ import React from 'react';
2
2
  import cn from 'classnames';
3
3
  import { Dropdown } from '@rescui/dropdown';
4
4
  import { useSelect } from 'downshift';
5
- import { useFocusRing } from '@react-aria/focus';
6
5
  import scrollIntoView from 'scroll-into-view-if-needed';
7
6
  import { useLabelFocus } from './hooks/use-label-focus.js';
8
7
  import { useOptions } from './hooks/use-options.js';
@@ -115,13 +114,6 @@ function SelectBasic(_ref) {
115
114
  ...(isOpen && isListBoxEmpty ? {
116
115
  'aria-activedescendant': menuProps.id
117
116
  } : {})
118
- }); // use it instead of ":has(:focus-visible), :focus-visible"
119
-
120
- const {
121
- isFocusVisible,
122
- focusProps
123
- } = useFocusRing({
124
- within: true
125
117
  });
126
118
  const {
127
119
  isFocusedByLabel,
@@ -171,15 +163,16 @@ function SelectBasic(_ref) {
171
163
  let {
172
164
  ref: triggerRefForDropdown
173
165
  } = _ref3;
174
- return /*#__PURE__*/React.createElement("div", { ...rest,
166
+ return /*#__PURE__*/React.createElement("div", {
167
+ className: styles.triggerContainer,
168
+ "data-open": isOpen,
169
+ "data-label-focused": isFocusedByLabel
170
+ }, /*#__PURE__*/React.createElement("div", { ...rest,
175
171
  ...mergeProps(fieldProps, // aria-invalid & aria-describedby, rest are overridden by triggerProps
176
- triggerProps, focusProps, labelFocusForTriggerProps, {
172
+ triggerProps, labelFocusForTriggerProps, {
177
173
  ref: triggerRefForDropdown
178
174
  }),
179
175
  className: styles.trigger,
180
- "data-open": isOpen,
181
- "data-has-focus-visible": isFocusVisible,
182
- "data-label-focused": isFocusedByLabel,
183
176
  "data-test": "select__trigger"
184
177
  }, /*#__PURE__*/React.createElement("span", {
185
178
  className: cn(styles.triggerText, !hasValue && styles.labelNotSelected),
@@ -196,7 +189,7 @@ function SelectBasic(_ref) {
196
189
  });
197
190
  },
198
191
  triggerId: triggerProps.id
199
- }));
192
+ })));
200
193
  }
201
194
  }, /*#__PURE__*/React.createElement(ListBox, {
202
195
  state: listBoxState,
@@ -1,7 +1,6 @@
1
- import React, { useRef, useState } from 'react';
1
+ import React, { useRef } from 'react';
2
2
  import { Dropdown } from '@rescui/dropdown';
3
3
  import { useCombobox } from 'downshift';
4
- import { useFocusRing } from '@react-aria/focus';
5
4
  import scrollIntoView from 'scroll-into-view-if-needed';
6
5
  import { useLabelFocus } from './hooks/use-label-focus.js';
7
6
  import { useOptions } from './hooks/use-options.js';
@@ -43,11 +42,9 @@ function SelectSearchable(_ref) {
43
42
  placeholder,
44
43
  ...rest
45
44
  } = _ref;
46
- const triggerRef = useRef(null);
45
+ const inputRef = useRef(null);
47
46
  const dropdownRef = useRef(null);
48
- const menuRef = React.useRef(null); // use it instead of :has(.searchInput:focus)
49
-
50
- const [inputFocused, setInputFocused] = useState(false);
47
+ const menuRef = useRef(null);
51
48
  const {
52
49
  flattenedOptions,
53
50
  listBoxItems,
@@ -60,11 +57,13 @@ function SelectSearchable(_ref) {
60
57
  fieldProps,
61
58
  errorMessageProps,
62
59
  descriptionProps,
63
- baseId
60
+ baseId,
61
+ labelProps
64
62
  } = useA11y({
65
63
  prefix: 'select',
66
64
  error,
67
- description: note
65
+ description: note,
66
+ fieldRef: inputRef
68
67
  });
69
68
  const {
70
69
  isOpen,
@@ -150,19 +149,12 @@ function SelectSearchable(_ref) {
150
149
  }, {
151
150
  suppressRefError: true
152
151
  });
153
- const triggerProps = getToggleButtonProps({
154
- ref: triggerRef,
152
+ const inputProps = getInputProps({
153
+ ref: inputRef,
155
154
  // fix screen-reader focus on an opened popup with an empty list
156
155
  ...(isOpen && isListBoxEmpty ? {
157
156
  'aria-activedescendant': menuProps.id
158
157
  } : {})
159
- }); // use it instead of ":has(:focus-visible), :focus-visible"
160
-
161
- const {
162
- isFocusVisible,
163
- focusProps
164
- } = useFocusRing({
165
- within: true
166
158
  });
167
159
  const {
168
160
  isFocusedByLabel,
@@ -186,7 +178,7 @@ function SelectSearchable(_ref) {
186
178
  size: size,
187
179
  disabled: isDisabled,
188
180
  label: label,
189
- labelProps: mergeProps(getLabelProps(), labelClickProps),
181
+ labelProps: mergeProps(labelProps, getLabelProps(), labelClickProps),
190
182
  boldLabel: boldLabel,
191
183
  error: error,
192
184
  reserveErrorLine: reserveErrorLine,
@@ -212,39 +204,39 @@ function SelectSearchable(_ref) {
212
204
  let {
213
205
  ref: triggerRefForDropdown
214
206
  } = _ref5;
215
- return /*#__PURE__*/React.createElement("div", { ...rest,
216
- ...mergeProps(fieldProps, // aria-invalid & aria-describedby, rest are overridden by triggerProps
217
- triggerProps, focusProps, labelFocusForTriggerProps, {
218
- ref: triggerRefForDropdown
219
- }),
220
- className: styles.trigger,
207
+ return /*#__PURE__*/React.createElement("div", {
208
+ className: styles.triggerContainer,
221
209
  "data-open": isOpen,
222
- "data-has-focus-visible": isFocusVisible || inputFocused,
223
- "data-label-focused": isFocusedByLabel,
224
- "data-test": "select__trigger"
225
- }, /*#__PURE__*/React.createElement("input", { ...getInputProps({
226
- onFocus: () => setInputFocused(true),
227
- onBlur: () => setInputFocused(false)
228
- }),
229
- // by the downshift spec, it's expected to place input near the trigger and not nest them,
230
- // but we try to keep basic select and searchable similar, so that's a little hack to nest these elements
231
- onClick: () => {},
210
+ "data-label-focused": isFocusedByLabel
211
+ }, /*#__PURE__*/React.createElement("input", { ...rest,
212
+ ...mergeProps(fieldProps, // aria-invalid & aria-describedby, rest are overridden by inputProps,
213
+ inputProps, labelFocusForTriggerProps),
232
214
  className: styles.searchInput,
233
215
  placeholder: placeholder,
234
216
  "data-test": "select__trigger_input"
235
- }), /*#__PURE__*/React.createElement(Icons, {
217
+ }), /*#__PURE__*/React.createElement("div", {
218
+ role: "button",
219
+ ...mergeProps(getToggleButtonProps(), {
220
+ ref: triggerRefForDropdown,
221
+ onFocus: () => {
222
+ var _inputRef$current;
223
+
224
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
225
+ }
226
+ }),
227
+ className: styles.trigger,
228
+ "data-test": "select__trigger"
229
+ }, /*#__PURE__*/React.createElement(Icons, {
236
230
  isLoading: isLoading,
237
231
  canHaveClearIcon: isClearable && !isDisabled && hasValue,
238
232
  onClear: () => {
239
- var _triggerRef$current;
233
+ var _inputRef$current2;
240
234
 
241
235
  reset();
242
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 || _triggerRef$current.focus({
243
- focusVisible: false
244
- });
236
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.focus();
245
237
  },
246
- triggerId: triggerProps.id
247
- }));
238
+ triggerId: inputProps.id
239
+ })));
248
240
  }
249
241
  }, /*#__PURE__*/React.createElement(ListBox, {
250
242
  state: listBoxState,
package/lib/select.js CHANGED
@@ -50,7 +50,7 @@ const Select = _ref => {
50
50
  const theme = useThemeWithUndefined(themeFromProps);
51
51
  const InnerSingleComponent = isSearchable ? SelectSearchable : SelectBasic;
52
52
  return /*#__PURE__*/React.createElement("div", {
53
- className: cn(className, styles.root, THEME_STYLES[theme], SIZE_STYLES[size], MODE_STYLES[mode], isDisabled ? styles.disabled : styles.enabled, Boolean(error) && styles.error),
53
+ className: cn(className, styles.root, THEME_STYLES[theme], SIZE_STYLES[size], MODE_STYLES[mode], isDisabled ? styles.disabled : styles.enabled, Boolean(error) && styles.error, isSearchable && styles.searchable),
54
54
  id: id,
55
55
  style: style,
56
56
  "data-test": "select"
@@ -1,28 +1,31 @@
1
1
  var styles = {
2
- "themeLight": "_themeLight_kb0k7d_6",
3
- "themeDark": "_themeDark_kb0k7d_9",
4
- "sizeS": "_sizeS_kb0k7d_13",
5
- "sizeM": "_sizeM_kb0k7d_16",
6
- "sizeL": "_sizeL_kb0k7d_19",
7
- "classic": "_classic_kb0k7d_23",
8
- "rock": "_rock_kb0k7d_26",
9
- "root": "_root_kb0k7d_30",
10
- "trigger": "_trigger_kb0k7d_36",
11
- "error": "_error_kb0k7d_69",
12
- "enabled": "_enabled_kb0k7d_74",
13
- "disabled": "_disabled_kb0k7d_78",
14
- "canBeMultiline": "_canBeMultiline_kb0k7d_115",
15
- "iconsWrapper": "_iconsWrapper_kb0k7d_119",
16
- "triggerText": "_triggerText_kb0k7d_134",
17
- "searchInput": "_searchInput_kb0k7d_140",
18
- "labelNotSelected": "_labelNotSelected_kb0k7d_184",
19
- "multi": "_multi_kb0k7d_198",
20
- "tagsContainer": "_tagsContainer_kb0k7d_214",
21
- "tag": "_tag_kb0k7d_214",
22
- "filledTag": "_filledTag_kb0k7d_236",
23
- "toggle": "_toggle_kb0k7d_244",
24
- "icon": "_icon_kb0k7d_119",
25
- "clearIcon": "_clearIcon_kb0k7d_311",
26
- "hiddenSelect": "_hiddenSelect_kb0k7d_368"
2
+ "themeLight": "_themeLight_buyj66_6",
3
+ "themeDark": "_themeDark_buyj66_9",
4
+ "sizeS": "_sizeS_buyj66_13",
5
+ "sizeM": "_sizeM_buyj66_16",
6
+ "sizeL": "_sizeL_buyj66_19",
7
+ "classic": "_classic_buyj66_23",
8
+ "rock": "_rock_buyj66_26",
9
+ "root": "_root_buyj66_30",
10
+ "trigger": "_trigger_buyj66_36",
11
+ "error": "_error_buyj66_70",
12
+ "enabled": "_enabled_buyj66_75",
13
+ "disabled": "_disabled_buyj66_79",
14
+ "searchable": "_searchable_buyj66_92",
15
+ "canBeMultiline": "_canBeMultiline_buyj66_119",
16
+ "triggerContainer": "_triggerContainer_buyj66_123",
17
+ "triggerText": "_triggerText_buyj66_127",
18
+ "searchInput": "_searchInput_buyj66_128",
19
+ "labelNotSelected": "_labelNotSelected_buyj66_159",
20
+ "multi": "_multi_buyj66_213",
21
+ "tagsContainer": "_tagsContainer_buyj66_230",
22
+ "tag": "_tag_buyj66_230",
23
+ "filledTag": "_filledTag_buyj66_252",
24
+ "iconsWrapper": "_iconsWrapper_buyj66_260",
25
+ "toggle": "_toggle_buyj66_278",
26
+ "icon": "_icon_buyj66_260",
27
+ "clearIcon": "_clearIcon_buyj66_352",
28
+ "visuallyHidden": "_visuallyHidden_buyj66_412",
29
+ "select": "_select_buyj66_429"
27
30
  };
28
31
  export { styles as default };
@@ -1,15 +1,15 @@
1
1
  var styles = {
2
- "themeLight": "_themeLight_lkq6p4_6",
3
- "themeDark": "_themeDark_lkq6p4_9",
4
- "sizeS": "_sizeS_lkq6p4_13",
5
- "sizeM": "_sizeM_lkq6p4_16",
6
- "sizeL": "_sizeL_lkq6p4_19",
7
- "main": "_main_lkq6p4_23",
8
- "label": "_label_lkq6p4_27",
9
- "disabled": "_disabled_lkq6p4_33",
10
- "footer": "_footer_lkq6p4_38",
11
- "errorMessage": "_errorMessage_lkq6p4_45",
12
- "error": "_error_lkq6p4_45",
13
- "note": "_note_lkq6p4_54"
2
+ "themeLight": "_themeLight_lyv0k_6",
3
+ "themeDark": "_themeDark_lyv0k_9",
4
+ "sizeS": "_sizeS_lyv0k_13",
5
+ "sizeM": "_sizeM_lyv0k_16",
6
+ "sizeL": "_sizeL_lyv0k_19",
7
+ "main": "_main_lyv0k_23",
8
+ "label": "_label_lyv0k_27",
9
+ "disabled": "_disabled_lyv0k_33",
10
+ "footer": "_footer_lyv0k_38",
11
+ "errorMessage": "_errorMessage_lyv0k_45",
12
+ "error": "_error_lyv0k_45",
13
+ "note": "_note_lyv0k_54"
14
14
  };
15
15
  export { styles as default };
@@ -1,14 +1,14 @@
1
1
  var styles = {
2
- "sizeS": "_sizeS_nz7l8y_6",
3
- "sizeM": "_sizeM_nz7l8y_9",
4
- "sizeL": "_sizeL_nz7l8y_12",
5
- "listBox": "_listBox_nz7l8y_16",
6
- "item": "_item_nz7l8y_30",
7
- "selected": "_selected_nz7l8y_76",
8
- "disabled": "_disabled_nz7l8y_87",
9
- "checkIcon": "_checkIcon_nz7l8y_94",
10
- "visible": "_visible_nz7l8y_101",
11
- "divider": "_divider_nz7l8y_108",
12
- "groupHeader": "_groupHeader_nz7l8y_122"
2
+ "sizeS": "_sizeS_tuv1by_6",
3
+ "sizeM": "_sizeM_tuv1by_9",
4
+ "sizeL": "_sizeL_tuv1by_12",
5
+ "listBox": "_listBox_tuv1by_16",
6
+ "item": "_item_tuv1by_30",
7
+ "selected": "_selected_tuv1by_76",
8
+ "disabled": "_disabled_tuv1by_87",
9
+ "checkIcon": "_checkIcon_tuv1by_94",
10
+ "visible": "_visible_tuv1by_101",
11
+ "divider": "_divider_tuv1by_108",
12
+ "groupHeader": "_groupHeader_tuv1by_122"
13
13
  };
14
14
  export { styles as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rescui/select",
3
- "version": "0.15.1-RUI-280-Update-select-component-downshift-cd2a98813.66+cd2a98813",
3
+ "version": "0.15.1-RUI-280-Update-select-component-downshift-2f40ef205.67+2f40ef205",
4
4
  "description": "",
5
5
  "license": "Apache-2.0",
6
6
  "author": "JetBrains",
@@ -16,15 +16,12 @@
16
16
  },
17
17
  "dependencies": {
18
18
  "@babel/runtime-corejs3": "^7.26.0",
19
- "@react-aria/focus": "^3.22.0",
20
- "@rescui/dropdown": "0.9.5-RUI-280-Update-select-component-downshift-cd2a98813.66+cd2a98813",
21
- "@rescui/form-field": "0.1.1-RUI-280-Update-select-component-downshift-cd2a98813.66+cd2a98813",
22
- "@rescui/tag": "0.13.5-RUI-280-Update-select-component-downshift-cd2a98813.66+cd2a98813",
23
- "@rescui/use-resize-observer": "0.3.1-RUI-280-Update-select-component-downshift-cd2a98813.178+cd2a98813",
19
+ "@rescui/dropdown": "0.9.5-RUI-280-Update-select-component-downshift-2f40ef205.67+2f40ef205",
20
+ "@rescui/form-field": "0.1.1-RUI-280-Update-select-component-downshift-2f40ef205.67+2f40ef205",
21
+ "@rescui/tag": "0.13.5-RUI-280-Update-select-component-downshift-2f40ef205.67+2f40ef205",
22
+ "@rescui/use-resize-observer": "0.3.1-RUI-280-Update-select-component-downshift-2f40ef205.179+2f40ef205",
24
23
  "classnames": "^2.2.6",
25
24
  "downshift": "^9.3.2",
26
- "react-aria": "^3.47.0",
27
- "react-stately": "^3.45.0",
28
25
  "scroll-into-view-if-needed": "3.1.0"
29
26
  },
30
27
  "peerDependencies": {
@@ -33,9 +30,9 @@
33
30
  "react": ">=16.8.0 <20"
34
31
  },
35
32
  "devDependencies": {
36
- "@rescui/colors": "0.3.1-RUI-280-Update-select-component-downshift-cd2a98813.66+cd2a98813",
33
+ "@rescui/colors": "0.3.1-RUI-280-Update-select-component-downshift-2f40ef205.67+2f40ef205",
37
34
  "@rescui/scripts": "0.5.1",
38
- "@rescui/typography": "0.24.5-RUI-280-Update-select-component-downshift-cd2a98813.66+cd2a98813",
35
+ "@rescui/typography": "0.24.5-RUI-280-Update-select-component-downshift-2f40ef205.67+2f40ef205",
39
36
  "@rescui/visual-regression": "0.1.4",
40
37
  "sniffr": "^1.2.0"
41
38
  },
@@ -44,5 +41,5 @@
44
41
  "build-pcss-api": "rescui-scripts build-pcss-api --file public-api.p.css"
45
42
  },
46
43
  "nx": {},
47
- "gitHead": "cd2a98813d37db8b46393317febfce4e91592516"
44
+ "gitHead": "2f40ef205f94c200019ec963e3fd0ca47fe1cdcb"
48
45
  }
@@ -1,16 +0,0 @@
1
- /// <reference types="react" />
2
- import type { Theme } from '@rescui/ui-contexts';
3
- import { NativeSelectOption, SelectSize } from '../types';
4
- export declare type NativeSelectDefaultTriggerProps = {
5
- isLoading: boolean;
6
- isDisabled: boolean;
7
- isClearable: boolean;
8
- size: SelectSize;
9
- theme?: Theme;
10
- hasError: boolean;
11
- placeholder?: string;
12
- value: NativeSelectOption;
13
- onClear?: () => void;
14
- triggerId?: string;
15
- };
16
- export declare const NativeSelectTrigger: ({ isLoading, isDisabled, isClearable, hasError, size, theme, placeholder, value, onClear, triggerId }: NativeSelectDefaultTriggerProps) => JSX.Element;
@@ -1,45 +0,0 @@
1
- import cn from 'classnames';
2
- import React from 'react';
3
- import styles from '../styles/native-select-trigger.p.module.css.js';
4
- import { Icons } from './icons.js';
5
- const SIZE_STYLES = {
6
- s: styles.sizeS,
7
- m: styles.sizeM,
8
- l: styles.sizeL
9
- };
10
- const THEME_STYLES = {
11
- light: styles.themeLight,
12
- dark: styles.themeDark
13
- };
14
-
15
- const NativeSelectTrigger = _ref => {
16
- let {
17
- isLoading,
18
- isDisabled,
19
- isClearable,
20
- hasError,
21
- size,
22
- theme,
23
- placeholder,
24
- value,
25
- onClear,
26
- triggerId
27
- } = _ref;
28
- return /*#__PURE__*/React.createElement("div", {
29
- className: cn(styles.trigger, SIZE_STYLES[size], THEME_STYLES[theme], isDisabled ? styles.disabled : styles.enabled, hasError && styles.error),
30
- "data-test": 'native-select_trigger',
31
- "data-rs-internal": 'select-native-trigger'
32
- }, /*#__PURE__*/React.createElement("span", {
33
- className: cn(styles.triggerText, !(value !== null && value !== void 0 && value.value) && styles.labelNotSelected),
34
- "data-test": 'native-select_trigger_text',
35
- "aria-hidden": "true"
36
- }, (value === null || value === void 0 ? void 0 : value.label) ?? placeholder), /*#__PURE__*/React.createElement(Icons, {
37
- isLoading: isLoading,
38
- triggerId: triggerId,
39
- onClear: onClear,
40
- canHaveClearIcon: isClearable && !isDisabled && Boolean(value === null || value === void 0 ? void 0 : value.value),
41
- customStylesMap: styles
42
- }));
43
- };
44
-
45
- export { NativeSelectTrigger };
@@ -1,18 +0,0 @@
1
- var styles = {
2
- "themeLight": "_themeLight_3v0lc_6",
3
- "themeDark": "_themeDark_3v0lc_9",
4
- "sizeS": "_sizeS_3v0lc_13",
5
- "sizeM": "_sizeM_3v0lc_16",
6
- "sizeL": "_sizeL_3v0lc_19",
7
- "trigger": "_trigger_3v0lc_23",
8
- "error": "_error_3v0lc_61",
9
- "enabled": "_enabled_3v0lc_66",
10
- "disabled": "_disabled_3v0lc_70",
11
- "iconsWrapper": "_iconsWrapper_3v0lc_104",
12
- "triggerText": "_triggerText_3v0lc_119",
13
- "labelNotSelected": "_labelNotSelected_3v0lc_145",
14
- "toggle": "_toggle_3v0lc_156",
15
- "icon": "_icon_3v0lc_104",
16
- "clearIcon": "_clearIcon_3v0lc_218"
17
- };
18
- export { styles as default };
@@ -1,9 +0,0 @@
1
- var styles = {
2
- "sizeS": "_sizeS_ngrfhd_6",
3
- "sizeM": "_sizeM_ngrfhd_9",
4
- "sizeL": "_sizeL_ngrfhd_12",
5
- "main": "_main_ngrfhd_16",
6
- "wrapper": "_wrapper_ngrfhd_20",
7
- "select": "_select_ngrfhd_24"
8
- };
9
- export { styles as default };