@rescui/select 0.18.4 → 0.19.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.
Files changed (37) hide show
  1. package/lib/_virtual/check-outline.js +294 -63
  2. package/lib/_virtual/close-outline.js +294 -63
  3. package/lib/_virtual/down-outline.js +294 -63
  4. package/lib/_virtual/index.css.js +12 -12
  5. package/lib/_virtual/loading-outline.js +310 -79
  6. package/lib/hooks/use-a11y.d.ts +2 -2
  7. package/lib/hooks/use-a11y.js +124 -36
  8. package/lib/hooks/use-actual-size-from-css.d.ts +3 -4
  9. package/lib/hooks/use-actual-size-from-css.js +47 -18
  10. package/lib/hooks/use-focus.js +54 -10
  11. package/lib/hooks/use-hover.js +54 -10
  12. package/lib/hooks/use-label-focus.js +45 -15
  13. package/lib/hooks/use-multi-handlers.js +113 -38
  14. package/lib/hooks/use-options.d.ts +2 -1
  15. package/lib/hooks/use-options.js +92 -56
  16. package/lib/hooks/use-primary-contrast-css-var-transfer.d.ts +2 -3
  17. package/lib/hooks/use-primary-contrast-css-var-transfer.js +45 -15
  18. package/lib/index.css +194 -194
  19. package/lib/multiselect.js +527 -174
  20. package/lib/native-select.js +416 -118
  21. package/lib/parts/form-trigger-wrapper.js +159 -39
  22. package/lib/parts/hidden-select.js +105 -29
  23. package/lib/parts/icons.js +191 -49
  24. package/lib/parts/list-box.js +277 -74
  25. package/lib/parts/multi-trigger.d.ts +2 -2
  26. package/lib/parts/multi-trigger.js +125 -48
  27. package/lib/parts/native-select-options-with-groups.js +154 -52
  28. package/lib/parts/popup-content.d.ts +3 -3
  29. package/lib/parts/popup-content.js +146 -46
  30. package/lib/select-basic.js +456 -147
  31. package/lib/select-searchable.js +448 -155
  32. package/lib/select.js +228 -56
  33. package/lib/styles/common.p.module.css.js +29 -29
  34. package/lib/styles/form-trigger.p.module.css.js +12 -12
  35. package/lib/styles/list-box.p.module.css.js +13 -13
  36. package/lib/utils/get-text-from-nodes.js +1 -1
  37. package/package.json +13 -12
@@ -1,5 +1,7 @@
1
1
  "use client";
2
- import React from 'react';
2
+ import _extends from '@babel/runtime-corejs3/helpers/esm/extends';
3
+ import { c } from 'react-compiler-runtime';
4
+ import React, { useState } from 'react';
3
5
  import PropTypes from 'prop-types';
4
6
  import cn from 'classnames';
5
7
  import { useThemeWithUndefined } from '@rescui/ui-contexts';
@@ -46,143 +48,439 @@ const THEME_STYLES = {
46
48
  dark: styles.themeDark
47
49
  }; // eslint-disable-next-line complexity
48
50
 
49
- const NativeSelect = _ref => {
50
- let {
51
- options = [],
52
- size = 'm',
53
- theme: themeFromProps,
54
- className = null,
55
- id,
56
- style,
57
- value,
58
- onChange,
59
- placeholder,
60
- isLoading = false,
61
- isDisabled = false,
62
- isClearable = false,
63
- trigger,
64
- label,
65
- note,
66
- error,
67
- reserveErrorLine = false,
68
- noOptionsMessage,
69
- name,
70
- boldLabel = true,
71
- ...rest
72
- } = _ref;
73
- const triggerRef = React.useRef(null);
51
+ const NativeSelect = t0 => {
52
+ const $ = c(104);
53
+ let error;
54
+ let id;
55
+ let label;
56
+ let name;
57
+ let noOptionsMessage;
58
+ let note;
59
+ let onChange;
60
+ let placeholder;
61
+ let rest;
62
+ let style;
63
+ let t1;
64
+ let t2;
65
+ let t3;
66
+ let t4;
67
+ let t5;
68
+ let t6;
69
+ let t7;
70
+ let t8;
71
+ let themeFromProps;
72
+ let trigger;
73
+ let value;
74
+
75
+ if ($[0] !== t0) {
76
+ ({
77
+ options: t1,
78
+ size: t2,
79
+ theme: themeFromProps,
80
+ className: t3,
81
+ id,
82
+ style,
83
+ value,
84
+ onChange,
85
+ placeholder,
86
+ isLoading: t4,
87
+ isDisabled: t5,
88
+ isClearable: t6,
89
+ trigger,
90
+ label,
91
+ note,
92
+ error,
93
+ reserveErrorLine: t7,
94
+ noOptionsMessage,
95
+ name,
96
+ boldLabel: t8,
97
+ ...rest
98
+ } = t0);
99
+ $[0] = t0;
100
+ $[1] = error;
101
+ $[2] = id;
102
+ $[3] = label;
103
+ $[4] = name;
104
+ $[5] = noOptionsMessage;
105
+ $[6] = note;
106
+ $[7] = onChange;
107
+ $[8] = placeholder;
108
+ $[9] = rest;
109
+ $[10] = style;
110
+ $[11] = t1;
111
+ $[12] = t2;
112
+ $[13] = t3;
113
+ $[14] = t4;
114
+ $[15] = t5;
115
+ $[16] = t6;
116
+ $[17] = t7;
117
+ $[18] = t8;
118
+ $[19] = themeFromProps;
119
+ $[20] = trigger;
120
+ $[21] = value;
121
+ } else {
122
+ error = $[1];
123
+ id = $[2];
124
+ label = $[3];
125
+ name = $[4];
126
+ noOptionsMessage = $[5];
127
+ note = $[6];
128
+ onChange = $[7];
129
+ placeholder = $[8];
130
+ rest = $[9];
131
+ style = $[10];
132
+ t1 = $[11];
133
+ t2 = $[12];
134
+ t3 = $[13];
135
+ t4 = $[14];
136
+ t5 = $[15];
137
+ t6 = $[16];
138
+ t7 = $[17];
139
+ t8 = $[18];
140
+ themeFromProps = $[19];
141
+ trigger = $[20];
142
+ value = $[21];
143
+ }
144
+
145
+ let t9;
146
+
147
+ if ($[22] !== t1) {
148
+ t9 = t1 === undefined ? [] : t1;
149
+ $[22] = t1;
150
+ $[23] = t9;
151
+ } else {
152
+ t9 = $[23];
153
+ }
154
+
155
+ const options = t9;
156
+ const size = t2 === undefined ? "m" : t2;
157
+ const className = t3 === undefined ? null : t3;
158
+ const isLoading = t4 === undefined ? false : t4;
159
+ const isDisabled = t5 === undefined ? false : t5;
160
+ const isClearable = t6 === undefined ? false : t6;
161
+ const reserveErrorLine = t7 === undefined ? false : t7;
162
+ const boldLabel = t8 === undefined ? true : t8;
163
+ const [triggerEl, setTriggerEl] = useState(null);
164
+ let t10;
165
+
166
+ if ($[24] !== error || $[25] !== isDisabled || $[26] !== label || $[27] !== note || $[28] !== triggerEl) {
167
+ t10 = {
168
+ prefix: "native-select",
169
+ error,
170
+ description: note,
171
+ label,
172
+ fieldEl: triggerEl,
173
+ isDisabled
174
+ };
175
+ $[24] = error;
176
+ $[25] = isDisabled;
177
+ $[26] = label;
178
+ $[27] = note;
179
+ $[28] = triggerEl;
180
+ $[29] = t10;
181
+ } else {
182
+ t10 = $[29];
183
+ }
184
+
74
185
  const {
75
186
  labelProps,
76
187
  fieldProps,
77
188
  errorMessageProps,
78
189
  descriptionProps
79
- } = useA11y({
80
- prefix: 'native-select',
81
- error,
82
- description: note,
83
- label,
84
- fieldRef: triggerRef,
85
- isDisabled
86
- });
190
+ } = useA11y(t10);
191
+ let t11;
192
+
193
+ if ($[30] !== onChange) {
194
+ t11 = () => onChange(null);
87
195
 
88
- const reset = () => onChange(null);
196
+ $[30] = onChange;
197
+ $[31] = t11;
198
+ } else {
199
+ t11 = $[31];
200
+ }
89
201
 
202
+ const reset = t11;
90
203
  const theme = useThemeWithUndefined(themeFromProps);
204
+ let t12;
91
205
 
92
- const handleChange = event => {
93
- const newValue = event.target.value;
94
- const selectedOption = findSelectedOption(options, newValue);
206
+ if ($[32] !== onChange || $[33] !== options) {
207
+ t12 = event => {
208
+ const newValue = event.target.value;
209
+ const selectedOption = findSelectedOption(options, newValue);
95
210
 
96
- if (onChange) {
97
- onChange(selectedOption);
98
- }
99
- }; // delete it when triggerFunc is migrated to the css-states instead of js-props for hover/focus
100
- // replace it with ":focus + &" selector in that case
211
+ if (onChange) {
212
+ onChange(selectedOption);
213
+ }
214
+ };
101
215
 
216
+ $[32] = onChange;
217
+ $[33] = options;
218
+ $[34] = t12;
219
+ } else {
220
+ t12 = $[34];
221
+ }
222
+
223
+ const handleChange = t12;
224
+ let t13;
225
+
226
+ if ($[35] !== isDisabled) {
227
+ t13 = {
228
+ isDisabled
229
+ };
230
+ $[35] = isDisabled;
231
+ $[36] = t13;
232
+ } else {
233
+ t13 = $[36];
234
+ }
102
235
 
103
236
  const {
104
237
  isFocused,
105
238
  focusProps
106
- } = useFocus({
107
- isDisabled
108
- }); // same as above, could be replaced with ":hover + &" selector
239
+ } = useFocus(t13);
240
+ let t14;
241
+
242
+ if ($[37] !== isDisabled) {
243
+ t14 = {
244
+ isDisabled
245
+ };
246
+ $[37] = isDisabled;
247
+ $[38] = t14;
248
+ } else {
249
+ t14 = $[38];
250
+ }
109
251
 
110
252
  const {
111
253
  isHovered,
112
254
  hoverProps
113
- } = useHover({
114
- isDisabled
115
- });
116
- const emptyListMessage = getEmptyMessage({
117
- isLoading,
118
- isNothingFound: false,
119
- noOptionsMessage
120
- });
121
- return /*#__PURE__*/React.createElement("div", {
122
- className: cn(className, styles.root, SIZE_STYLES[size], THEME_STYLES[theme], styles.classic, isDisabled ? styles.disabled : styles.enabled, Boolean(error) && styles.error),
123
- id: id,
124
- style: style,
125
- "data-test": "native-select"
126
- }, /*#__PURE__*/React.createElement(FormTriggerWrapper, {
127
- theme: theme,
128
- size: size,
129
- disabled: isDisabled,
130
- label: label,
131
- labelProps: mergeProps(labelProps),
132
- boldLabel: boldLabel,
133
- error: error,
134
- errorMessageProps: errorMessageProps,
135
- reserveErrorLine: reserveErrorLine,
136
- note: note,
137
- descriptionProps: descriptionProps
138
- }, /*#__PURE__*/React.createElement("div", {
139
- className: styles.triggerContainer
140
- }, /*#__PURE__*/React.createElement("select", { ...rest,
141
- ...mergeProps(fieldProps, focusProps, hoverProps, {
142
- onKeyDown: event => {
143
- // backspace and backspace removing the last selected item (when popup is closed)
144
- if (isClearable && (event.key === 'Backspace' || event.key === 'Delete')) {
145
- reset();
146
- }
255
+ } = useHover(t14);
256
+ let t15;
257
+
258
+ if ($[39] !== isLoading || $[40] !== noOptionsMessage) {
259
+ t15 = getEmptyMessage({
260
+ isLoading,
261
+ isNothingFound: false,
262
+ noOptionsMessage
263
+ });
264
+ $[39] = isLoading;
265
+ $[40] = noOptionsMessage;
266
+ $[41] = t15;
267
+ } else {
268
+ t15 = $[41];
269
+ }
270
+
271
+ const emptyListMessage = t15;
272
+ const t16 = SIZE_STYLES[size];
273
+ const t17 = THEME_STYLES[theme];
274
+ const t18 = isDisabled ? styles.disabled : styles.enabled;
275
+ const t19 = Boolean(error) && styles.error;
276
+ let t20;
277
+
278
+ if ($[42] !== className || $[43] !== t16 || $[44] !== t17 || $[45] !== t18 || $[46] !== t19) {
279
+ t20 = cn(className, styles.root, t16, t17, styles.classic, t18, t19);
280
+ $[42] = className;
281
+ $[43] = t16;
282
+ $[44] = t17;
283
+ $[45] = t18;
284
+ $[46] = t19;
285
+ $[47] = t20;
286
+ } else {
287
+ t20 = $[47];
288
+ }
289
+
290
+ let t21;
291
+
292
+ if ($[48] !== labelProps) {
293
+ t21 = mergeProps(labelProps);
294
+ $[48] = labelProps;
295
+ $[49] = t21;
296
+ } else {
297
+ t21 = $[49];
298
+ }
299
+
300
+ let t22;
301
+
302
+ if ($[50] !== isClearable || $[51] !== reset) {
303
+ t22 = event_0 => {
304
+ if (isClearable && (event_0.key === "Backspace" || event_0.key === "Delete")) {
305
+ reset();
147
306
  }
148
- }),
149
- ref: triggerRef,
150
- "data-test": "native-select_select",
151
- "data-rs-internal": 'select-native__select',
152
- className: styles.select,
153
- disabled: isDisabled ? true : undefined,
154
- onChange: handleChange,
155
- name: name,
156
- value: value?.value ?? ''
157
- }, /*#__PURE__*/React.createElement(NativeSelectOptionsWithGroups, {
158
- optionsWithGroups: options,
159
- placeholder: placeholder,
160
- emptyListMessage: emptyListMessage
161
- })), trigger ? trigger({
162
- focused: isFocused,
163
- hovered: isHovered,
164
- selectedLabel: value?.label,
165
- selectedValue: value?.value,
166
- placeholder
167
- }) : /*#__PURE__*/React.createElement("div", {
168
- className: cn(styles.trigger),
169
- "data-test": 'native-select_trigger',
170
- "data-rs-internal": 'select-native-trigger'
171
- }, /*#__PURE__*/React.createElement("span", {
172
- className: cn(styles.triggerText, !value?.value && styles.labelNotSelected),
173
- "data-test": 'native-select_trigger_text',
174
- "aria-hidden": "true"
175
- }, value?.label ?? placeholder), /*#__PURE__*/React.createElement(Icons, {
176
- isLoading: isLoading,
177
- triggerId: fieldProps.id,
178
- onClear: () => {
179
- reset();
180
- triggerRef.current?.focus({
181
- focusVisible: false
182
- });
183
- },
184
- canHaveClearIcon: isClearable && !isDisabled && Boolean(value?.value)
185
- })))));
307
+ };
308
+
309
+ $[50] = isClearable;
310
+ $[51] = reset;
311
+ $[52] = t22;
312
+ } else {
313
+ t22 = $[52];
314
+ }
315
+
316
+ let t23;
317
+
318
+ if ($[53] !== fieldProps || $[54] !== focusProps || $[55] !== hoverProps || $[56] !== t22) {
319
+ t23 = mergeProps(fieldProps, focusProps, hoverProps, {
320
+ onKeyDown: t22
321
+ });
322
+ $[53] = fieldProps;
323
+ $[54] = focusProps;
324
+ $[55] = hoverProps;
325
+ $[56] = t22;
326
+ $[57] = t23;
327
+ } else {
328
+ t23 = $[57];
329
+ }
330
+
331
+ const t24 = isDisabled ? true : undefined;
332
+ const t25 = value?.value ?? "";
333
+ let t26;
334
+
335
+ if ($[58] !== emptyListMessage || $[59] !== options || $[60] !== placeholder) {
336
+ t26 = /*#__PURE__*/React.createElement(NativeSelectOptionsWithGroups, {
337
+ optionsWithGroups: options,
338
+ placeholder: placeholder,
339
+ emptyListMessage: emptyListMessage
340
+ });
341
+ $[58] = emptyListMessage;
342
+ $[59] = options;
343
+ $[60] = placeholder;
344
+ $[61] = t26;
345
+ } else {
346
+ t26 = $[61];
347
+ }
348
+
349
+ let t27;
350
+
351
+ if ($[62] !== handleChange || $[63] !== name || $[64] !== rest || $[65] !== t23 || $[66] !== t24 || $[67] !== t25 || $[68] !== t26) {
352
+ t27 = /*#__PURE__*/React.createElement("select", _extends({}, rest, t23, {
353
+ ref: setTriggerEl,
354
+ "data-test": "native-select_select",
355
+ "data-rs-internal": "select-native__select",
356
+ className: styles.select,
357
+ disabled: t24,
358
+ onChange: handleChange,
359
+ name: name,
360
+ value: t25
361
+ }), t26);
362
+ $[62] = handleChange;
363
+ $[63] = name;
364
+ $[64] = rest;
365
+ $[65] = t23;
366
+ $[66] = t24;
367
+ $[67] = t25;
368
+ $[68] = t26;
369
+ $[69] = t27;
370
+ } else {
371
+ t27 = $[69];
372
+ }
373
+
374
+ let t28;
375
+
376
+ if ($[70] !== fieldProps || $[71] !== isClearable || $[72] !== isDisabled || $[73] !== isFocused || $[74] !== isHovered || $[75] !== isLoading || $[76] !== placeholder || $[77] !== reset || $[78] !== trigger || $[79] !== triggerEl || $[80] !== value?.label || $[81] !== value?.value) {
377
+ t28 = trigger ? trigger({
378
+ focused: isFocused,
379
+ hovered: isHovered,
380
+ selectedLabel: value?.label,
381
+ selectedValue: value?.value,
382
+ placeholder
383
+ }) : /*#__PURE__*/React.createElement("div", {
384
+ className: cn(styles.trigger),
385
+ "data-test": "native-select_trigger",
386
+ "data-rs-internal": "select-native-trigger"
387
+ }, /*#__PURE__*/React.createElement("span", {
388
+ className: cn(styles.triggerText, !value?.value && styles.labelNotSelected),
389
+ "data-test": "native-select_trigger_text",
390
+ "aria-hidden": "true"
391
+ }, value?.label ?? placeholder), /*#__PURE__*/React.createElement(Icons, {
392
+ isLoading: isLoading,
393
+ triggerId: fieldProps.id,
394
+ onClear: () => {
395
+ reset();
396
+ triggerEl?.focus({
397
+ focusVisible: false
398
+ });
399
+ },
400
+ canHaveClearIcon: isClearable && !isDisabled && Boolean(value?.value)
401
+ }));
402
+ $[70] = fieldProps;
403
+ $[71] = isClearable;
404
+ $[72] = isDisabled;
405
+ $[73] = isFocused;
406
+ $[74] = isHovered;
407
+ $[75] = isLoading;
408
+ $[76] = placeholder;
409
+ $[77] = reset;
410
+ $[78] = trigger;
411
+ $[79] = triggerEl;
412
+ $[80] = value?.label;
413
+ $[81] = value?.value;
414
+ $[82] = t28;
415
+ } else {
416
+ t28 = $[82];
417
+ }
418
+
419
+ let t29;
420
+
421
+ if ($[83] !== t27 || $[84] !== t28) {
422
+ t29 = /*#__PURE__*/React.createElement("div", {
423
+ className: styles.triggerContainer
424
+ }, t27, t28);
425
+ $[83] = t27;
426
+ $[84] = t28;
427
+ $[85] = t29;
428
+ } else {
429
+ t29 = $[85];
430
+ }
431
+
432
+ let t30;
433
+
434
+ if ($[86] !== boldLabel || $[87] !== descriptionProps || $[88] !== error || $[89] !== errorMessageProps || $[90] !== isDisabled || $[91] !== label || $[92] !== note || $[93] !== reserveErrorLine || $[94] !== size || $[95] !== t21 || $[96] !== t29 || $[97] !== theme) {
435
+ t30 = /*#__PURE__*/React.createElement(FormTriggerWrapper, {
436
+ theme: theme,
437
+ size: size,
438
+ disabled: isDisabled,
439
+ label: label,
440
+ labelProps: t21,
441
+ boldLabel: boldLabel,
442
+ error: error,
443
+ errorMessageProps: errorMessageProps,
444
+ reserveErrorLine: reserveErrorLine,
445
+ note: note,
446
+ descriptionProps: descriptionProps
447
+ }, t29);
448
+ $[86] = boldLabel;
449
+ $[87] = descriptionProps;
450
+ $[88] = error;
451
+ $[89] = errorMessageProps;
452
+ $[90] = isDisabled;
453
+ $[91] = label;
454
+ $[92] = note;
455
+ $[93] = reserveErrorLine;
456
+ $[94] = size;
457
+ $[95] = t21;
458
+ $[96] = t29;
459
+ $[97] = theme;
460
+ $[98] = t30;
461
+ } else {
462
+ t30 = $[98];
463
+ }
464
+
465
+ let t31;
466
+
467
+ if ($[99] !== id || $[100] !== style || $[101] !== t20 || $[102] !== t30) {
468
+ t31 = /*#__PURE__*/React.createElement("div", {
469
+ className: t20,
470
+ id: id,
471
+ style: style,
472
+ "data-test": "native-select"
473
+ }, t30);
474
+ $[99] = id;
475
+ $[100] = style;
476
+ $[101] = t20;
477
+ $[102] = t30;
478
+ $[103] = t31;
479
+ } else {
480
+ t31 = $[103];
481
+ }
482
+
483
+ return t31;
186
484
  };
187
485
 
188
486
  NativeSelect.propTypes = {