@vkontakte/vkui 6.5.2 → 6.5.4

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 (70) hide show
  1. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +12 -2
  2. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  3. package/dist/cjs/components/CustomSelect/CustomSelect.js +68 -43
  4. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  5. package/dist/cjs/components/CustomSelect/CustomSelectInput.d.ts +1 -3
  6. package/dist/cjs/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  7. package/dist/cjs/components/CustomSelect/CustomSelectInput.js +24 -19
  8. package/dist/cjs/components/CustomSelect/CustomSelectInput.js.map +1 -1
  9. package/dist/cjs/components/ImageBase/ImageBase.js +4 -1
  10. package/dist/cjs/components/ImageBase/ImageBase.js.map +1 -1
  11. package/dist/components/CustomSelect/CustomSelect.d.ts +12 -2
  12. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  13. package/dist/components/CustomSelect/CustomSelect.js +60 -35
  14. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  15. package/dist/components/CustomSelect/CustomSelectInput.d.ts +1 -3
  16. package/dist/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  17. package/dist/components/CustomSelect/CustomSelectInput.js +24 -19
  18. package/dist/components/CustomSelect/CustomSelectInput.js.map +1 -1
  19. package/dist/components/ImageBase/ImageBase.js +4 -1
  20. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  21. package/dist/components.css +2 -2
  22. package/dist/components.css.map +1 -1
  23. package/dist/components.js.tmp +100 -148
  24. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +12 -2
  25. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  26. package/dist/cssm/components/CustomSelect/CustomSelect.js +57 -34
  27. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  28. package/dist/cssm/components/CustomSelect/CustomSelectInput.d.ts +1 -3
  29. package/dist/cssm/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  30. package/dist/cssm/components/CustomSelect/CustomSelectInput.js +21 -16
  31. package/dist/cssm/components/CustomSelect/CustomSelectInput.js.map +1 -1
  32. package/dist/cssm/components/CustomSelect/CustomSelectInput.module.css +40 -74
  33. package/dist/cssm/components/ImageBase/ImageBase.js +4 -1
  34. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  35. package/dist/cssm/components/ImageBase/ImageBase.module.css +13 -2
  36. package/dist/vkui.css +2 -2
  37. package/dist/vkui.css.map +1 -1
  38. package/dist/vkui.js.tmp +100 -148
  39. package/package.json +1 -1
  40. package/src/components/CustomSelect/CustomSelect.tsx +98 -47
  41. package/src/components/CustomSelect/CustomSelectInput.module.css +35 -55
  42. package/src/components/CustomSelect/CustomSelectInput.tsx +35 -24
  43. package/src/components/ImageBase/ImageBase.module.css +13 -2
  44. package/src/components/ImageBase/ImageBase.tsx +1 -1
  45. package/dist/cjs/components/CustomSelect/helpers.d.ts +0 -8
  46. package/dist/cjs/components/CustomSelect/helpers.d.ts.map +0 -1
  47. package/dist/cjs/components/CustomSelect/helpers.js +0 -76
  48. package/dist/cjs/components/CustomSelect/helpers.js.map +0 -1
  49. package/dist/cjs/components/CustomSelect/types.d.ts +0 -12
  50. package/dist/cjs/components/CustomSelect/types.d.ts.map +0 -1
  51. package/dist/cjs/components/CustomSelect/types.js +0 -6
  52. package/dist/cjs/components/CustomSelect/types.js.map +0 -1
  53. package/dist/components/CustomSelect/helpers.d.ts +0 -8
  54. package/dist/components/CustomSelect/helpers.d.ts.map +0 -1
  55. package/dist/components/CustomSelect/helpers.js +0 -48
  56. package/dist/components/CustomSelect/helpers.js.map +0 -1
  57. package/dist/components/CustomSelect/types.d.ts +0 -12
  58. package/dist/components/CustomSelect/types.d.ts.map +0 -1
  59. package/dist/components/CustomSelect/types.js +0 -3
  60. package/dist/components/CustomSelect/types.js.map +0 -1
  61. package/dist/cssm/components/CustomSelect/helpers.d.ts +0 -8
  62. package/dist/cssm/components/CustomSelect/helpers.d.ts.map +0 -1
  63. package/dist/cssm/components/CustomSelect/helpers.js +0 -44
  64. package/dist/cssm/components/CustomSelect/helpers.js.map +0 -1
  65. package/dist/cssm/components/CustomSelect/types.d.ts +0 -12
  66. package/dist/cssm/components/CustomSelect/types.d.ts.map +0 -1
  67. package/dist/cssm/components/CustomSelect/types.js +0 -3
  68. package/dist/cssm/components/CustomSelect/types.js.map +0 -1
  69. package/src/components/CustomSelect/helpers.tsx +0 -61
  70. package/src/components/CustomSelect/types.ts +0 -15
@@ -2,12 +2,22 @@ import * as React from 'react';
2
2
  import { type FilterFn } from '../../lib/select';
3
3
  import { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';
4
4
  import { CustomSelectDropdownProps } from '../CustomSelectDropdown/CustomSelectDropdown';
5
+ import { type CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';
5
6
  import { FormFieldProps } from '../FormField/FormField';
6
7
  import { NativeSelectProps } from '../NativeSelect/NativeSelect';
7
8
  import { SelectType } from '../Select/Select';
8
9
  import { type CustomSelectClearButtonProps } from './CustomSelectClearButton';
9
- import type { CustomSelectOptionInterface, CustomSelectRenderOption } from './types';
10
- export type { CustomSelectClearButtonProps, CustomSelectOptionInterface, CustomSelectRenderOption };
10
+ type SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];
11
+ export interface CustomSelectOptionInterface {
12
+ value: SelectValue;
13
+ label: React.ReactElement | string;
14
+ disabled?: boolean;
15
+ [index: string]: any;
16
+ }
17
+ export interface CustomSelectRenderOption<T extends CustomSelectOptionInterface> extends CustomSelectOptionProps {
18
+ option: T;
19
+ }
20
+ export type { CustomSelectClearButtonProps };
11
21
  export interface SelectProps<OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface> extends NativeSelectProps, Omit<FormFieldProps, 'maxHeight'>, TrackerOptionsProps, Pick<CustomSelectDropdownProps, 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'> {
12
22
  /**
13
23
  * ref на внутрений компонент input
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAEL,yBAAyB,EAC1B,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AASnC,OAAO,KAAK,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAiCrF,YAAY,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,CAAC;AAEpG,MAAM,WAAW,WAAW,CAC1B,gBAAgB,SAAS,2BAA2B,GAAG,2BAA2B,CAClF,SAAQ,iBAAiB,EACvB,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EACjC,mBAAmB,EACnB,IAAI,CACF,yBAAyB,EACzB,oBAAoB,GAAG,mBAAmB,GAAG,wBAAwB,CACtE;IACH;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtF;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,EAChB,sBAAsB,GACvB,EAAE;QACD,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;KACzC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;IAChE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,gBAAgB,SAAS,2BAA2B,EAC/E,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GACnC,KAAK,CAAC,SAAS,CAisBjB"}
1
+ {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
@@ -17,35 +17,73 @@ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
17
  const _vkjs = require("@vkontakte/vkjs");
18
18
  const _useAdaptivity = require("../../hooks/useAdaptivity");
19
19
  const _useExternRef = require("../../hooks/useExternRef");
20
+ const _useFocusWithin = require("../../hooks/useFocusWithin");
20
21
  const _dom = require("../../lib/dom");
21
22
  const _select = require("../../lib/select");
22
23
  const _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
23
24
  const _warnOnce = require("../../lib/warnOnce");
24
25
  const _CustomSelectDropdown = require("../CustomSelectDropdown/CustomSelectDropdown");
26
+ const _CustomSelectOption = require("../CustomSelectOption/CustomSelectOption");
25
27
  const _DropdownIcon = require("../DropdownIcon/DropdownIcon");
26
28
  const _Footnote = require("../Typography/Footnote/Footnote");
29
+ const _VisuallyHidden = require("../VisuallyHidden/VisuallyHidden");
27
30
  const _CustomSelectClearButton = require("./CustomSelectClearButton");
28
31
  const _CustomSelectInput = require("./CustomSelectInput");
29
- const _helpers = require("./helpers");
30
32
  const sizeYClassNames = {
31
33
  none: "vkuiCustomSelect--sizeY-none",
32
34
  ['compact']: "vkuiCustomSelect--sizeY-compact"
33
35
  };
36
+ const findIndexAfter = (options = [], startIndex = -1)=>{
37
+ if (startIndex >= options.length - 1) {
38
+ return -1;
39
+ }
40
+ return options.findIndex((option, i)=>i > startIndex && !option.disabled);
41
+ };
42
+ const findIndexBefore = (options = [], endIndex = options.length)=>{
43
+ let result = -1;
44
+ if (endIndex <= 0) {
45
+ return result;
46
+ }
47
+ for(let i = endIndex - 1; i >= 0; i--){
48
+ let option = options[i];
49
+ if (!option.disabled) {
50
+ result = i;
51
+ break;
52
+ }
53
+ }
54
+ return result;
55
+ };
34
56
  const warn = (0, _warnOnce.warnOnce)('CustomSelect');
35
57
  const checkOptionsValueType = (options)=>{
36
58
  if (new Set(options.map((item)=>typeof item.value)).size > 1) {
37
59
  warn('Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.', 'error');
38
60
  }
39
61
  };
62
+ function defaultRenderOptionFn(_param) {
63
+ var { option } = _param, props = _object_without_properties._(_param, [
64
+ "option"
65
+ ]);
66
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_CustomSelectOption.CustomSelectOption, _object_spread._({}, props));
67
+ }
40
68
  const handleOptionDown = (e)=>{
41
69
  e.preventDefault();
42
70
  };
71
+ function findSelectedIndex(options = [], value, withClear) {
72
+ if (withClear && value === '') {
73
+ return -1;
74
+ }
75
+ var _options_findIndex;
76
+ return (_options_findIndex = options.findIndex((item)=>{
77
+ value = typeof item.value === 'number' ? Number(value) : value;
78
+ return item.value === value;
79
+ })) !== null && _options_findIndex !== void 0 ? _options_findIndex : -1;
80
+ }
43
81
  const filter = (options, inputValue, filterFn)=>{
44
82
  return typeof filterFn === 'function' ? options.filter((option)=>filterFn(inputValue, option)) : options;
45
83
  };
46
84
  function CustomSelect(props) {
47
85
  const [opened, setOpened] = _react.useState(false);
48
- const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, onInputChange: onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', autoHideScrollbar, autoHideScrollbarDelay, searchable = false, renderOption: renderOptionProp = _helpers.defaultRenderOptionFn, options: optionsProp, emptyText = 'Ничего не найдено', filterFn = _select.defaultFilterFn, icon: iconProp, ClearButton = _CustomSelectClearButton.CustomSelectClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, ['aria-labelledby']: ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior } = props, restProps = _object_without_properties._(props, [
86
+ const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, onInputChange: onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', autoHideScrollbar, autoHideScrollbarDelay, searchable = false, renderOption: renderOptionProp = defaultRenderOptionFn, options: optionsProp, emptyText = 'Ничего не найдено', filterFn = _select.defaultFilterFn, icon: iconProp, ClearButton = _CustomSelectClearButton.CustomSelectClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, ['aria-labelledby']: ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior } = props, restProps = _object_without_properties._(props, [
49
87
  "before",
50
88
  "name",
51
89
  "className",
@@ -94,15 +132,15 @@ function CustomSelect(props) {
94
132
  const optionsWrapperRef = _react.useRef(null);
95
133
  const [focusedOptionIndex, setFocusedOptionIndex] = _react.useState(-1);
96
134
  const [isControlledOutside, setIsControlledOutside] = _react.useState(props.value !== undefined);
135
+ const [inputValue, setInputValue] = _react.useState('');
97
136
  const [nativeSelectValue, setNativeSelectValue] = _react.useState(()=>{
98
137
  var _props_value, _ref;
99
138
  return (_ref = (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : defaultValue) !== null && _ref !== void 0 ? _ref : allowClearButton ? '' : undefined;
100
139
  });
101
- const [inputValue, setInputValue] = _react.useState(()=>(0, _helpers.calculateInputValueFromOptions)(optionsProp, nativeSelectValue));
102
140
  const [popperPlacement, setPopperPlacement] = _react.useState(popupDirection);
103
141
  const [options, setOptions] = _react.useState(optionsProp);
104
142
  var _props_value;
105
- const [selectedOptionIndex, setSelectedOptionIndex] = _react.useState((0, _helpers.findSelectedIndex)(optionsProp, (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : defaultValue, allowClearButton));
143
+ const [selectedOptionIndex, setSelectedOptionIndex] = _react.useState(findSelectedIndex(optionsProp, (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : defaultValue, allowClearButton));
106
144
  _react.useEffect(()=>{
107
145
  setIsControlledOutside(props.value !== undefined);
108
146
  setNativeSelectValue((nativeSelectValue)=>{
@@ -216,6 +254,7 @@ function CustomSelect(props) {
216
254
  * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.
217
255
  */ const close = _react.useCallback(()=>{
218
256
  resetKeyboardInput();
257
+ setInputValue('');
219
258
  setOpened(false);
220
259
  resetFocusedOption();
221
260
  onClose === null || onClose === void 0 ? void 0 : onClose();
@@ -226,8 +265,8 @@ function CustomSelect(props) {
226
265
  ]);
227
266
  const selectOption = _react.useCallback((index)=>{
228
267
  const item = options[index];
229
- close();
230
268
  setNativeSelectValue(item === null || item === void 0 ? void 0 : item.value);
269
+ close();
231
270
  const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside && props.value !== nativeSelectValue && nativeSelectValue === (item === null || item === void 0 ? void 0 : item.value);
232
271
  if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {
233
272
  var _selectElRef_current;
@@ -271,12 +310,9 @@ function CustomSelect(props) {
271
310
  bubbles: true
272
311
  });
273
312
  (_selectElRef_current = selectElRef.current) === null || _selectElRef_current === void 0 ? void 0 : _selectElRef_current.dispatchEvent(event);
274
- setInputValue((0, _helpers.calculateInputValueFromOptions)(optionsProp, nativeSelectValue));
275
313
  }, [
276
314
  close,
277
- selectElRef,
278
- optionsProp,
279
- nativeSelectValue
315
+ selectElRef
280
316
  ]);
281
317
  const onFocus = _react.useCallback(()=>{
282
318
  var _selectElRef_current;
@@ -304,11 +340,11 @@ function CustomSelect(props) {
304
340
  const focusOption = _react.useCallback((type)=>{
305
341
  let index = focusedOptionIndex;
306
342
  if (type === 'next') {
307
- const nextIndex = (0, _helpers.findIndexAfter)(options, index);
308
- index = nextIndex === -1 ? (0, _helpers.findIndexAfter)(options) : nextIndex; // Следующий за index или первый валидный до index
343
+ const nextIndex = findIndexAfter(options, index);
344
+ index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index
309
345
  } else if (type === 'prev') {
310
- const beforeIndex = (0, _helpers.findIndexBefore)(options, index);
311
- index = beforeIndex === -1 ? (0, _helpers.findIndexBefore)(options) : beforeIndex; // Предшествующий index или последний валидный после index
346
+ const beforeIndex = findIndexBefore(options, index);
347
+ index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index
312
348
  }
313
349
  focusOptionByIndex(index);
314
350
  }, [
@@ -316,41 +352,24 @@ function CustomSelect(props) {
316
352
  focusedOptionIndex,
317
353
  options
318
354
  ]);
319
- _react.useEffect(function filterOptions() {
355
+ _react.useEffect(function updateOptionsAndSelectedOptionIndex() {
356
+ var _props_value, _ref;
357
+ const value = (_ref = (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : nativeSelectValue) !== null && _ref !== void 0 ? _ref : defaultValue;
320
358
  const options = searchable && inputValue !== undefined ? filter(optionsProp, inputValue, filterFn) : optionsProp;
321
359
  setOptions(options);
360
+ setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));
322
361
  }, [
323
362
  filterFn,
324
363
  inputValue,
364
+ nativeSelectValue,
325
365
  optionsProp,
326
- searchable
327
- ]);
328
- var _props_value1, _ref;
329
- const selectValue = (_ref = (_props_value1 = props.value) !== null && _props_value1 !== void 0 ? _props_value1 : nativeSelectValue) !== null && _ref !== void 0 ? _ref : defaultValue;
330
- _react.useEffect(function updateSelectedOptionIndexOnValueChange() {
331
- setSelectedOptionIndex((0, _helpers.findSelectedIndex)(options, selectValue, allowClearButton));
332
- }, [
333
- selectValue,
334
- allowClearButton,
335
- options
336
- ]);
337
- const prevSelectValueRef = _react.useRef(selectValue);
338
- _react.useEffect(function updateInputValueOnSelectValueChange() {
339
- if (prevSelectValueRef.current === selectValue) {
340
- return;
341
- }
342
- setInputValue((0, _helpers.calculateInputValueFromOptions)(optionsProp, selectValue));
343
- }, [
344
- selectValue,
345
- optionsProp
346
- ]);
347
- _react.useEffect(function updatePrevSelectValue() {
348
- prevSelectValueRef.current = selectValue;
349
- }, [
350
- selectValue
366
+ defaultValue,
367
+ props.value,
368
+ searchable,
369
+ allowClearButton
351
370
  ]);
352
371
  const onNativeSelectChange = (e)=>{
353
- const newSelectedOptionIndex = (0, _helpers.findSelectedIndex)(options, e.currentTarget.value, allowClearButton);
372
+ const newSelectedOptionIndex = findSelectedIndex(options, e.currentTarget.value, allowClearButton);
354
373
  if (selectedOptionIndex !== newSelectedOptionIndex) {
355
374
  if (!isControlledOutside) {
356
375
  setSelectedOptionIndex(newSelectedOptionIndex);
@@ -362,7 +381,7 @@ function CustomSelect(props) {
362
381
  onInputChangeProp && onInputChangeProp(e);
363
382
  const options = filter(optionsProp, e.target.value, filterFn);
364
383
  setOptions(options);
365
- setSelectedOptionIndex((0, _helpers.findSelectedIndex)(options, nativeSelectValue, allowClearButton));
384
+ setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));
366
385
  setInputValue(e.target.value);
367
386
  }, [
368
387
  filterFn,
@@ -611,12 +630,14 @@ function CustomSelect(props) {
611
630
  const selectInputAriaProps = {
612
631
  'role': 'combobox',
613
632
  'aria-controls': popupAriaId,
633
+ 'aria-owns': popupAriaId,
614
634
  'aria-expanded': opened,
615
635
  ['aria-activedescendant']: ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,
616
636
  'aria-labelledby': ariaLabelledBy,
617
637
  'aria-haspopup': 'listbox',
618
638
  'aria-autocomplete': 'none'
619
639
  };
640
+ const focusWithin = (0, _useFocusWithin.useFocusWithin)(handleRootRef);
620
641
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
621
642
  className: (0, _vkjs.classNames)("vkuiCustomSelect", sizeY !== 'regular' && sizeYClassNames[sizeY], className),
622
643
  style: style,
@@ -624,6 +645,10 @@ function CustomSelect(props) {
624
645
  onClick: passClickAndFocusToInputOnClick,
625
646
  onMouseDown: preventInputBlurWhenClickInsideFocusedSelectArea,
626
647
  children: [
648
+ focusWithin && selected && !opened && /*#__PURE__*/ (0, _jsxruntime.jsx)(_VisuallyHidden.VisuallyHidden, {
649
+ "aria-live": "polite",
650
+ children: selected.label
651
+ }),
627
652
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_CustomSelectInput.CustomSelectInput, _object_spread_props._(_object_spread._({
628
653
  autoComplete: "off",
629
654
  autoCapitalize: "none",
@@ -634,7 +659,7 @@ function CustomSelect(props) {
634
659
  onFocus: onFocus,
635
660
  onBlur: onBlur,
636
661
  className: openedClassNames,
637
- searchable: searchable,
662
+ readOnly: !searchable,
638
663
  fetching: fetching,
639
664
  value: inputValue,
640
665
  onKeyUp: handleKeyUp,
@@ -644,7 +669,7 @@ function CustomSelect(props) {
644
669
  before: before,
645
670
  after: afterIcons,
646
671
  selectType: selectType,
647
- selectedOptionLabel: selected === null || selected === void 0 ? void 0 : selected.label
672
+ children: selected === null || selected === void 0 ? void 0 : selected.label
648
673
  })),
649
674
  /*#__PURE__*/ (0, _jsxruntime.jsxs)("select", {
650
675
  ref: selectElRef,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport {\n calculateInputValueFromOptions,\n defaultRenderOptionFn,\n findIndexAfter,\n findIndexBefore,\n findSelectedIndex,\n} from './helpers';\nimport type { CustomSelectOptionInterface, CustomSelectRenderOption } from './types';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nexport type { CustomSelectClearButtonProps, CustomSelectOptionInterface, CustomSelectRenderOption };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n\n const [inputValue, setInputValue] = React.useState(() =>\n calculateInputValueFromOptions(optionsProp, nativeSelectValue),\n );\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n close();\n setNativeSelectValue(item?.value);\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n\n setInputValue(calculateInputValueFromOptions(optionsProp, nativeSelectValue));\n }, [close, selectElRef, optionsProp, nativeSelectValue]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function filterOptions() {\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n },\n [filterFn, inputValue, optionsProp, searchable],\n );\n\n const selectValue = props.value ?? nativeSelectValue ?? defaultValue;\n React.useEffect(\n function updateSelectedOptionIndexOnValueChange() {\n setSelectedOptionIndex(findSelectedIndex(options, selectValue, allowClearButton));\n },\n [selectValue, allowClearButton, options],\n );\n\n const prevSelectValueRef = React.useRef(selectValue);\n React.useEffect(\n function updateInputValueOnSelectValueChange() {\n if (prevSelectValueRef.current === selectValue) {\n return;\n }\n setInputValue(calculateInputValueFromOptions(optionsProp, selectValue));\n },\n [selectValue, optionsProp],\n );\n React.useEffect(\n function updatePrevSelectValue() {\n prevSelectValueRef.current = selectValue;\n },\n [selectValue],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n searchable={searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n selectedOptionLabel={selected?.label}\n />\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","warn","warnOnce","checkOptionsValueType","options","Set","map","item","value","size","handleOptionDown","e","preventDefault","filter","inputValue","filterFn","option","props","opened","setOpened","React","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","defaultRenderOptionFn","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","useAdaptivity","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","nativeSelectValue","setNativeSelectValue","setInputValue","calculateInputValueFromOptions","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","findSelectedIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","length","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","disabled","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","findIndexAfter","beforeIndex","findIndexBefore","filterOptions","selectValue","updateSelectedOptionIndexOnValueChange","prevSelectValueRef","updateInputValueOnSelectValueChange","updatePrevSelectValue","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","Footnote","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","DropdownIcon","afterIcons","document","useDOM","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","classNames","CustomSelectInput","autoComplete","autoCapitalize","autoCorrect","spellCheck","onKeyUp","onKeyDown","after","selectedOptionLabel","select","aria-hidden","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","opened","setOpened","React","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","useAdaptivity","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","Footnote","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","DropdownIcon","afterIcons","document","useDOM","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","useFocusWithin","classNames","VisuallyHidden","aria-live","CustomSelectInput","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":";;;;+BAmOgBA;;;eAAAA;;;;;;;;iEAnOO;sBACc;+BACP;8BACD;gCACE;qBACR;wBAEwB;2CACL;0BACjB;sCAKlB;oCAIA;8BACsB;0BAIJ;gCACM;yCAIxB;mCAC2B;AAGlC,MAAMC,kBAAkB;IACtBC,IAAI;IACJ,CAAC,UAAU;AACb;AAEA,MAAMC,iBAAiB,CAACC,UAAyC,EAAE,EAAEC,aAAa,CAAC,CAAC;IAClF,IAAIA,cAAcD,QAAQE,MAAM,GAAG,GAAG;QACpC,OAAO,CAAC;IACV;IACA,OAAOF,QAAQG,SAAS,CAAC,CAACC,QAAQC,IAAMA,IAAIJ,cAAc,CAACG,OAAOE,QAAQ;AAC5E;AAEA,MAAMC,kBAAkB,CACtBP,UAAyC,EAAE,EAC3CQ,WAAmBR,QAAQE,MAAM;IAEjC,IAAIO,SAAS,CAAC;IACd,IAAID,YAAY,GAAG;QACjB,OAAOC;IACT;IACA,IAAK,IAAIJ,IAAIG,WAAW,GAAGH,KAAK,GAAGA,IAAK;QACtC,IAAID,SAASJ,OAAO,CAACK,EAAE;QAEvB,IAAI,CAACD,OAAOE,QAAQ,EAAE;YACpBG,SAASJ;YACT;QACF;IACF;IACA,OAAOI;AACT;AAEA,MAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAEtB,MAAMC,wBAAwB,CAAwCZ;IACpE,IAAI,IAAIa,IAAIb,QAAQc,GAAG,CAAC,CAACC,OAAS,OAAOA,KAAKC,KAAK,GAAGC,IAAI,GAAG,GAAG;QAC9DP,KACE,+FACA;IAEJ;AACF;AAEA,SAASQ,sBAA6D;QAAA,EACpEd,MAAM,EAEsB,GAHwC,QAEjEe,qCAFiE;QACpEf;;IAGA,qBAAO,qBAACgB,sCAAkB,uBAAKD;AACjC;AAEA,MAAME,mBAAsC,CAACC;IAC3CA,EAAEC,cAAc;AAClB;AAEA,SAASC,kBACPxB,UAAe,EAAE,EACjBgB,KAAkB,EAClBS,SAAkB;IAElB,IAAIA,aAAaT,UAAU,IAAI;QAC7B,OAAO,CAAC;IACV;QAEEhB;IADF,OACEA,CAAAA,qBAAAA,QAAQG,SAAS,CAAC,CAACY;QACjBC,QAAQ,OAAOD,KAAKC,KAAK,KAAK,WAAWU,OAAOV,SAASA;QACzD,OAAOD,KAAKC,KAAK,KAAKA;IACxB,gBAHAhB,gCAAAA,qBAGM,CAAC;AAEX;AAEA,MAAM2B,SAAS,CACb3B,SACA4B,YACAC;IAEA,OAAO,OAAOA,aAAa,aACvB7B,QAAQ2B,MAAM,CAAC,CAACvB,SAAWyB,SAASD,YAAYxB,WAChDJ;AACN;AAsHO,SAASJ,aACduB,KAAoC;IAEpC,MAAM,CAACW,QAAQC,UAAU,GAAGC,OAAMC,QAAQ,CAAC;IAC3C,MAAM,EACJC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,iBAAiB,QAAQ,EACzBC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,eAAeC,iBAAiB,EAChCC,cAAc,EACdC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,mBAAmB,EACnBC,aAAa,SAAS,EACtBC,iBAAiB,EACjBC,sBAAsB,EACtBC,aAAa,KAAK,EAClBC,cAAcC,mBAAmBrC,qBAAqB,EACtDlB,SAASwD,WAAW,EACpBC,YAAY,mBAAmB,EAC/B5B,WAAW6B,uBAAe,EAC1BC,MAAMC,QAAQ,EACdC,cAAcC,gDAAuB,EACrCC,mBAAmB,KAAK,EACxBC,yBAAyB,CAAC,EAC1BC,oBAAoB,KAAK,EACzBC,cAAc,KAAK,EACnB,CAAC,kBAAkB,EAAEC,cAAc,EACnCC,iBAAiB,EACjBC,kBAAkB,EAClBC,YAAY,EACZC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAEnB,GAAGtD,OADCuD,yCACDvD;QArCFe;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAtD;QACAyD;QACA5B;QACA8B;QACAE;QACAE;QACAC;QACAC;QACAC;QACC;QACDE;QACAC;QACAC;QACAC;QACAC;QACAC;;IAIF,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CjE,sBAAsB4C;IACxB;IAEA,MAAM,EAAEsB,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IAExC,MAAMC,eAAehD,OAAMiD,MAAM,CAAiB;IAClD,MAAMC,gBAAgBC,IAAAA,0BAAY,EAACH,cAAc1C;IACjD,MAAM8C,eAAepD,OAAMiD,MAAM,CAAwB;IACzD,MAAMI,cAAcF,IAAAA,0BAAY,EAAC9C;IACjC,MAAMiD,oBAAoBtD,OAAMiD,MAAM,CAAiB;IAEvD,MAAM,CAACM,oBAAoBC,sBAAsB,GAAGxD,OAAMC,QAAQ,CAAqB,CAAC;IACxF,MAAM,CAACwD,qBAAqBC,uBAAuB,GAAG1D,OAAMC,QAAQ,CAACd,MAAMH,KAAK,KAAK2E;IACrF,MAAM,CAAC/D,YAAYgE,cAAc,GAAG5D,OAAMC,QAAQ,CAAC;IACnD,MAAM,CAAC4D,mBAAmBC,qBAAqB,GAAG9D,OAAMC,QAAQ,CAC9D;YAAMd,cAAAA;eAAAA,CAAAA,OAAAA,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAemD,0BAAfnD,kBAAAA,OAAgC4C,mBAAmB,KAAK4B;;IAGhE,MAAM,CAACI,iBAAiBC,mBAAmB,GAAGhE,OAAMC,QAAQ,CAAYM;IACxE,MAAM,CAACvC,SAASiG,WAAW,GAAGjE,OAAMC,QAAQ,CAACuB;QAEZrC;IADjC,MAAM,CAAC+E,qBAAqBC,uBAAuB,GAAGnE,OAAMC,QAAQ,CAClET,kBAAkBgC,aAAarC,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAemD,cAAcP;IAG9D/B,OAAMoE,SAAS,CAAC;QACdV,uBAAuBvE,MAAMH,KAAK,KAAK2E;QACvCG,qBAAqB,CAACD;gBAAsB1E;mBAAAA,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAe0E;;IAC7D,GAAG;QAAC1E,MAAMH,KAAK;KAAC;IAEhBqF,IAAAA,oDAAyB,EAAC;QACxB,IACErG,QAAQsG,IAAI,CAAC,CAAC,EAAEtF,KAAK,EAAE,GAAK6E,sBAAsB7E,UACjD+C,oBAAoB8B,sBAAsB,IAC3C;gBAGAR;YAFA,MAAMkB,QAAQ,IAAIC,MAAM,UAAU;gBAAEC,SAAS;YAAK;aAElDpB,uBAAAA,YAAYqB,OAAO,cAAnBrB,2CAAAA,qBAAqBsB,aAAa,CAACJ;QACrC;IACF,GAAG;QAACV;KAAkB;IAEtB,MAAMe,WAAW5E,OAAM6E,OAAO,CAAC;QAC7B,IAAI,CAAC7G,QAAQE,MAAM,EAAE;YACnB,OAAO;QACT;QAEA,OAAOgG,wBAAwBP,YAAY3F,OAAO,CAACkG,oBAAoB,GAAGP;IAC5E,GAAG;QAAC3F;QAASkG;KAAoB;IAEjC,MAAMY,mBAAmB9E,OAAM6E,OAAO,CACpC,IACE,AAAC/E,UACCkC,2BAA2B,KAC1B+B,CAAAA,gBAAgBgB,QAAQ,CAAC,kEAES,KACrCpB,WACF;QAAC3B;QAAwBlC;QAAQiE;KAAgB;IAGnD,MAAMiB,kBAAkBhF,OAAMiF,WAAW,CAAC,CAACC,OAAeC,SAAS,KAAK;QACtE,MAAMC,WAAWhC,aAAasB,OAAO;QACrC,MAAMW,iBAAiB/B,kBAAkBoB,OAAO;QAChD,MAAM3F,OACJqG,YAAYC,iBAAkBA,eAAe3E,QAAQ,CAACwE,MAAM,GAAmB;QAEjF,IAAI,CAACnG,QAAQ,CAACqG,UAAU;YACtB;QACF;QAEA,MAAME,iBAAiBF,SAASG,YAAY;QAC5C,MAAMC,YAAYJ,SAASI,SAAS;QACpC,MAAMC,UAAU1G,KAAK2G,SAAS;QAC9B,MAAMC,aAAa5G,KAAKwG,YAAY;QAEpC,IAAIJ,QAAQ;YACVC,SAASI,SAAS,GAAGC,UAAUH,iBAAiB,IAAIK,aAAa;QACnE,OAAO,IAAIF,UAAUE,aAAaL,iBAAiBE,WAAW;YAC5DJ,SAASI,SAAS,GAAGC,UAAUH,iBAAiBK;QAClD,OAAO,IAAIF,UAAUD,WAAW;YAC9BJ,SAASI,SAAS,GAAGC;QACvB;IACF,GAAG,EAAE;IAEL,MAAMG,qBAAqB5F,OAAMiF,WAAW,CAC1C,CAACC,OAA2BW,WAAW,IAAI;YACQ7H;QAAjD,IAAIkH,UAAUvB,aAAauB,QAAQ,KAAKA,QAAQ,AAAClH,CAAAA,CAAAA,kBAAAA,QAAQE,MAAM,cAAdF,6BAAAA,kBAAkB,CAAA,IAAK,GAAG;YACzE;QACF;QAEA,MAAMI,SAASJ,OAAO,CAACkH,MAAM;QAE7B,IAAI9G,mBAAAA,6BAAAA,OAAQE,QAAQ,EAAE;YACpB;QACF;QAEA,IAAIuH,UAAU;YACZb,gBAAgBE;QAClB;QAEA,mDAAmD;QACnD1B,sBAAsB,CAACD,qBACrBA,uBAAuB2B,QAAQA,QAAQ3B;IAE3C,GACA;QAACvF;QAASgH;KAAgB;IAG5B,MAAMc,eAAe9F,OAAMiF,WAAW,CACpC,CAACC;YAC+BlH;QAA9B,OAAOkH,SAAS,KAAKA,QAASlH,CAAAA,CAAAA,kBAAAA,QAAQE,MAAM,cAAdF,6BAAAA,kBAAkB,CAAA;IAClD,GACA;QAACA,QAAQE,MAAM;KAAC;IAGlB,MAAM6H,kBAAkB/F,OAAMiF,WAAW,CACvC,CAACe;QACC5C,aAAasB,OAAO,GAAGsB;QAEvB,IAAIA,OAAO9B,wBAAwBP,aAAamC,aAAa5B,sBAAsB;YACjF;gBACEc,gBAAgBd,qBAAqB;YACvC;QACF;IACF,GACA;QAAC4B;QAAcd;QAAiBd;KAAoB;IAGtD,MAAM,CAAC+B,eAAeC,iBAAiB,GAAGlG,OAAMC,QAAQ,CAAC;IACzD,MAAMkG,qBAAqBnG,OAAMiF,WAAW,CAAC;QAC3CiB,iBAAiB;IACnB,GAAG,EAAE;IAEL,MAAME,qBAAqBpG,OAAMiF,WAAW,CAAC;QAC3CzB,sBAAsB,CAAC;IACzB,GAAG,EAAE;IAEL,MAAM6C,kBAAkBrG,OAAMiF,WAAW,CACvC,CAACqB;QACC,IAAI,CAACxG,QAAQ;YACXC,UAAU;QACZ;QACAqG;QACA,MAAMG,YAAYN,gBAAgBK;QAElCJ,iBAAiBK;IACnB,GACA;QAACN;QAAenG;QAAQsG;KAAmB;IAG7C;;;GAGC,GACD,MAAMI,QAAQxG,OAAMiF,WAAW,CAAC;QAC9BkB;QAEAvC,cAAc;QACd7D,UAAU;QACVqG;QACArF,oBAAAA,8BAAAA;IACF,GAAG;QAACA;QAASoF;QAAoBC;KAAmB;IAEpD,MAAMK,eAAezG,OAAMiF,WAAW,CACpC,CAACC;QACC,MAAMnG,OAAOf,OAAO,CAACkH,MAAM;QAE3BpB,qBAAqB/E,iBAAAA,2BAAAA,KAAMC,KAAK;QAChCwH;QAEA,MAAME,8DACJjD,uBACAtE,MAAMH,KAAK,KAAK6E,qBAChBA,uBAAsB9E,iBAAAA,2BAAAA,KAAMC,KAAK;QAEnC,IAAI0H,6DAA6D;gBAE/DrD;YADA,MAAMkB,QAAQ,IAAIC,MAAM,UAAU;gBAAEC,SAAS;YAAK;aAClDpB,uBAAAA,YAAYqB,OAAO,cAAnBrB,2CAAAA,qBAAqBsB,aAAa,CAACJ;QACrC;IACF,GACA;QAACiC;QAAOxI;QAASqF;QAAaI;QAAqBtE,MAAMH,KAAK;QAAE6E;KAAkB;IAGpF,MAAM8C,gBAAgB3G,OAAMiF,WAAW,CAAC;QACtC,IAAI1B,uBAAuBI,aAAa,CAACmC,aAAavC,qBAAqB;YACzE;QACF;QAEAkD,aAAalD;IACf,GAAG;QAACA;QAAoBuC;QAAcW;KAAa;IAEnD,MAAMG,OAAO5G,OAAMiF,WAAW,CAAC;QAC7BlF,UAAU;QACVyD,sBAAsBU;QAEtB,IAAI,OAAOpD,WAAW,YAAY;YAChCA;QACF;IACF,GAAG;QAACA;QAAQoD;KAAoB;IAEhC,MAAM2C,SAAS7G,OAAMiF,WAAW,CAAC;YAG/B5B;QAFAmD;QACA,MAAMjC,QAAQ,IAAIC,MAAM,YAAY;YAAEC,SAAS;QAAK;SACpDpB,uBAAAA,YAAYqB,OAAO,cAAnBrB,2CAAAA,qBAAqBsB,aAAa,CAACJ;IACrC,GAAG;QAACiC;QAAOnD;KAAY;IAEvB,MAAMyD,UAAU9G,OAAMiF,WAAW,CAAC;YAEhC5B;QADA,MAAMkB,QAAQ,IAAIC,MAAM,WAAW;YAAEC,SAAS;QAAK;SACnDpB,uBAAAA,YAAYqB,OAAO,cAAnBrB,2CAAAA,qBAAqBsB,aAAa,CAACJ;IACrC,GAAG;QAAClB;KAAY;IAEhB,MAAM0D,UAAU/G,OAAMiF,WAAW,CAAC;QAChC,IAAInF,QAAQ;YACV0G;QACF,OAAO;YACLI;QACF;IACF,GAAG;QAACJ;QAAOI;QAAM9G;KAAO;IAExB,MAAMkH,cAAchH,OAAM6E,OAAO,CAAC,IAAMoC,IAAAA,cAAQ,EAACd,oBAAoB,OAAO;QAACA;KAAmB;IAEhG,MAAMe,cAAclH,OAAMiF,WAAW,CACnC,CAACkC;QACC,IAAIjC,QAAQ3B;QAEZ,IAAI4D,SAAS,QAAQ;YACnB,MAAMC,YAAYrJ,eAAeC,SAASkH;YAC1CA,QAAQkC,cAAc,CAAC,IAAIrJ,eAAeC,WAAWoJ,WAAW,kDAAkD;QACpH,OAAO,IAAID,SAAS,QAAQ;YAC1B,MAAME,cAAc9I,gBAAgBP,SAASkH;YAC7CA,QAAQmC,gBAAgB,CAAC,IAAI9I,gBAAgBP,WAAWqJ,aAAa,0DAA0D;QACjI;QAEAzB,mBAAmBV;IACrB,GACA;QAACU;QAAoBrC;QAAoBvF;KAAQ;IAGnDgC,OAAMoE,SAAS,CACb,SAASkD;YACOnI,cAAAA;QAAd,MAAMH,QAAQG,CAAAA,OAAAA,CAAAA,eAAAA,MAAMH,KAAK,cAAXG,0BAAAA,eAAe0E,+BAAf1E,kBAAAA,OAAoCmD;QAElD,MAAMtE,UACJqD,cAAczB,eAAe+D,YACzBhE,OAAO6B,aAAa5B,YAAYC,YAChC2B;QAENyC,WAAWjG;QACXmG,uBAAuB3E,kBAAkBxB,SAASgB,OAAO+C;IAC3D,GACA;QACElC;QACAD;QACAiE;QACArC;QACAc;QACAnD,MAAMH,KAAK;QACXqC;QACAU;KACD;IAGH,MAAMwF,uBAAoE,CAACjI;QACzE,MAAMkI,yBAAyBhI,kBAC7BxB,SACAsB,EAAEmI,aAAa,CAACzI,KAAK,EACrB+C;QAGF,IAAImC,wBAAwBsD,wBAAwB;YAClD,IAAI,CAAC/D,qBAAqB;gBACxBU,uBAAuBqD;YACzB;YACA/G,qBAAAA,+BAAAA,SAAWnB;QACb;IACF;IAEA,MAAMqB,gBAA4DX,OAAMiF,WAAW,CACjF,CAAC3F;QACCsB,qBAAqBA,kBAAkBtB;QAEvC,MAAMtB,UAAU2B,OAAO6B,aAAalC,EAAEoI,MAAM,CAAC1I,KAAK,EAAEa;QACpDoE,WAAWjG;QACXmG,uBAAuB3E,kBAAkBxB,SAAS6F,mBAAmB9B;QAErE6B,cAActE,EAAEoI,MAAM,CAAC1I,KAAK;IAC9B,GACA;QAACa;QAAUgE;QAAmBjD;QAAmBY;QAAaO;KAAiB;IAGjF,MAAM4F,kBAAkB3H,OAAMiF,WAAW,CAAC;QACxC,OAAO7B,aAAasB,OAAO,KAAK;IAClC,GAAG,EAAE;IAEL,MAAMkD,sBAAsB5H,OAAMiF,WAAW,CAC3C,CAACV;QACC,IAAIA,MAAM+B,GAAG,CAACpI,MAAM,KAAK,KAAKqG,MAAM+B,GAAG,KAAK,KAAK;YAC/CD,gBAAgB9B,MAAM+B,GAAG;YACzB;QACF;QAEA;YAAC;YAAW;YAAa;YAAU;SAAQ,CAACvB,QAAQ,CAACR,MAAM+B,GAAG,KAC5DqB,qBACApD,MAAMhF,cAAc;QAEtB,OAAQgF,MAAM+B,GAAG;YACf,KAAK;gBACH,IAAIxG,QAAQ;oBACV6H,qBAAqBT,YAAY;gBACnC,OAAO;oBACLN;gBACF;gBACA;YACF,KAAK;gBACH,IAAI9G,QAAQ;oBACV6H,qBAAqBT,YAAY;gBACnC,OAAO;oBACLN;gBACF;gBACA;YACF,KAAK;gBACHJ;gBACA;YACF,KAAK;YACL,KAAK;gBAAU;oBACb,IAAI,CAAC1G,QAAQ;wBACXC,UAAU;oBACZ;oBACAqG;oBAEA;gBACF;YACA,KAAK;YACL,KAAK;YACL,KAAK;gBACH,IAAItG,QAAQ;oBACV6H,qBAAqBhB;gBACvB,OAAO;oBACLC;gBACF;gBACA;QACJ;IACF,GACA;QACEe;QACAnB;QACAU;QACAb;QACAO;QACA9G;QACA6G;QACAP;KACD;IAGH,MAAMyB,oBAAoB7H,OAAMiF,WAAW,CACzC,CAAC3F;YAEGA;QADF,MAAM4F,QAAQ4C,MAAMC,SAAS,CAACC,OAAO,CAACC,IAAI,EACxC3I,8BAAAA,EAAEmI,aAAa,CAACS,UAAU,cAA1B5I,kDAAAA,4BAA4BoB,QAAQ,EACpCpB,EAAEmI,aAAa;QAEjB,MAAMrJ,SAASJ,OAAO,CAACkH,MAAM;QAE7B,IAAI9G,UAAU,CAACA,OAAOE,QAAQ,EAAE;YAC9BmI,aAAavB;QACf;IACF,GACA;QAAClH;QAASyI;KAAa;IAGzB,MAAM0B,uBAAuBnI,OAAMiD,MAAM,CAGtC;QAAEmF,GAAG;QAAGC,GAAG;IAAE;IAChB,MAAMC,yBAAyBtI,OAAMiF,WAAW,CAC9C,CAAC3F,GAAkC4F;QACjC,MAAMqD,yBACJC,KAAKC,GAAG,CAACN,qBAAqBzD,OAAO,CAAC0D,CAAC,GAAG9I,EAAEoJ,OAAO,KAAK,KACxDF,KAAKC,GAAG,CAACN,qBAAqBzD,OAAO,CAAC2D,CAAC,GAAG/I,EAAEqJ,OAAO,KAAK;QAE1D,IAAIJ,wBAAwB;YAC1B3C,mBAAmBV,OAAO;QAC5B;QAEAiD,qBAAqBzD,OAAO,GAAG;YAAE0D,GAAG9I,EAAEoJ,OAAO;YAAEL,GAAG/I,EAAEqJ,OAAO;QAAC;IAC9D,GACA;QAAC/C;KAAmB;IAGtB,MAAMgD,cAAc5I,OAAM6I,KAAK;IAC/B,MAAMvH,eAAetB,OAAMiF,WAAW,CACpC,CAAC7G,QAA0B8G;QACzB,MAAM4D,UAAU5D,UAAU3B;QAC1B,MAAMqB,WAAWM,UAAUhB;QAE3B,qBACE,qBAAClE,OAAM+I,QAAQ;sBACZxH,iBAAiB;gBAChBnD;gBACA0K;gBACApI,UAAUtC,OAAO4K,KAAK;gBACtBpE;gBACAtG,UAAUF,OAAOE,QAAQ;gBACzByI,SAASc;gBACToB,aAAa5J;gBACb,8DAA8D;gBAC9D,+DAA+D;gBAC/D,8FAA8F;gBAC9F,yIAAyI;gBACzI,sFAAsF;gBACtF,8EAA8E;gBAC9E,6IAA6I;gBAC7I6J,aAAa,CAAC5J,IAAMgJ,uBAAuBhJ,GAAG4F;gBAC9CiE,IAAI,CAAC,EAAEP,YAAY,CAAC,EAAExK,OAAOY,KAAK,CAAC,CAAC;YACtC;WAlBmB,CAAC,EAAE,OAAOZ,OAAOY,KAAK,CAAC,CAAC,EAAEZ,OAAOY,KAAK,CAAC,CAAC;IAqBjE,GACA;QACEuE;QACAsE;QACAS;QACA/G;QACA2C;QACA0E;KACD;IAGH,MAAMQ,kBAAkBpJ,OAAM6E,OAAO,CAAC;QACpC,MAAMwE,yBACJrL,QAAQE,MAAM,GAAG,kBACf,qBAACoL;YAAItD,KAAK1C;sBAAoBtF,QAAQc,GAAG,CAACwC;2BAE1C,qBAACiI,kBAAQ;YAACnJ,SAAS;sBAAkCqB;;QAGzD,IAAI,OAAOZ,mBAAmB,YAAY;YACxC,OAAOA,eAAe;gBAAEwI;YAAuB;QACjD,OAAO;YACL,OAAOA;QACT;IACF,GAAG;QAAC5H;QAAWzD;QAAS6C;QAAgBS;KAAa;IAErD,MAAMkI,iBAAiBrG,IAAAA,0BAAY,EAACX;IACpC,MAAMiH,uBAAuBzJ,OAAMiD,MAAM;IACzC,MAAMyG,eAAe1J,OAAMiF,WAAW,CAAC;QACrC0E,aAAaF,qBAAqB/E,OAAO;QAEzC+E,qBAAqB/E,OAAO,GAAGkF,WAAW;YACxCJ,eAAe9E,OAAO,IAAI8E,eAAe9E,OAAO,CAACmF,KAAK;QACxD,GAAG;IACL,GAAG;QAACL;KAAe;IACnBnF,IAAAA,oDAAyB,EAAC,SAASyF;QACjC,OAAO;YACLH,aAAaF,qBAAqB/E,OAAO;QAC3C;IACF,GAAG,EAAE;IAEL,MAAMqF,qBAAqBtG,uBAAuBtE,MAAMH,KAAK,KAAK;IAClE,MAAMgL,uBAAuB,CAACvG,uBAAuBI,sBAAsB;IAC3E,MAAMoG,mBACJlI,oBAAoB,CAACjC,UAAWiK,CAAAA,sBAAsBC,oBAAmB;IAE3E,MAAME,cAAclK,OAAM6E,OAAO,CAAC;QAChC,IAAI,CAACoF,kBAAkB;YACrB,OAAO;QACT;QAEA,qBACE,qBAACpI;YACCzB,WAAWwB,aAAa+B,6CAAiDA;YACzEoD,SAAS,SAASoD;gBAChBrG,qBAAqB;gBACrBF,cAAc;gBACd8F;YACF;YACApL,UAAUoE,UAAUpE,QAAQ;YAC5B8L,eAAahI;;IAGnB,GAAG;QACD6H;QACApI;QACAD;QACAc,UAAUpE,QAAQ;QAClB8D;QACAsH;KACD;IAED,MAAM/H,OAAO3B,OAAM6E,OAAO,CAAC;QACzB,IAAIjD,aAAa+B,WAAW;YAC1B,OAAO/B;QACT;QAEA,qBACE,qBAACyI,0BAAY;YACXjK,WAAW6J,uDAA2DtG;YACtE7D,QAAQA;;IAGd,GAAG;QAACmK;QAAkBrI;QAAU9B;KAAO;IAEvC,MAAMwK,aAAa,AAAC3I,CAAAA,QAAQsI,gBAAe,mBACzC,sBAACjK,OAAM+I,QAAQ;;YACZmB;YACAvI;;;IAIL,MAAM,EAAE4I,QAAQ,EAAE,GAAGC,IAAAA,WAAM;IAC3B,MAAMC,kCAAkCzK,OAAMiF,WAAW,CACvD,CAAC3F;QACC,yGAAyG;QACzG,kGAAkG;QAClG,qHAAqH;QACrH,8EAA8E;QAC9E,8EAA8E;QAC9E,mGAAmG;QACnG,2FAA2F;QAC3F,8FAA8F;QAE9F,IAAI,CAACkK,eAAe9E,OAAO,IAAI,CAAC6F,UAAU;YACxC;QACF;QAEA,MAAMG,0BAA0BpL,EAAEoI,MAAM,KAAK8B,eAAe9E,OAAO;QACnE,IAAIgG,yBAAyB;YAC3BlB,eAAe9E,OAAO,CAACiG,KAAK;YAE5B,MAAMC,oBAAoBL,SAASM,aAAa,KAAKrB,eAAe9E,OAAO;YAC3E,IAAIkG,mBAAmB;gBACrBlB;YACF;QACF;IACF,GACA;QAACa;QAAUb;QAAcF;KAAe;IAG1C,MAAMsB,mDAAmD,CACvDxL;QAEA,gFAAgF;QAChF,8EAA8E;QAC9E,sFAAsF;QACtF,MAAMyL,iBAAiBR,YAAYA,SAASM,aAAa,KAAKrB,eAAe9E,OAAO;QACpF,IAAIqG,gBAAgB;YAClBzL,EAAEC,cAAc;QAClB;IACF;IAEA,MAAMyL,kCACJzH,uBAAuB,CAAC,IAAIA,qBAAqBI;IACnD,MAAMsH,yBACJD,oCAAoCrH,YAChC3F,OAAO,CAACgN,gCAAgC,IAAIhN,OAAO,CAACgN,gCAAgC,CAAChM,KAAK,GAC1F;IAEN,MAAMkM,uBAA0D;QAC9D,QAAQ;QACR,iBAAiBtC;QACjB,aAAaA;QACb,iBAAiB9I;QACjB,CAAC,wBAAwB,EACvBmL,0BAA0BnL,SAAS,CAAC,EAAE8I,YAAY,CAAC,EAAEqC,uBAAuB,CAAC,GAAGtH;QAClF,mBAAmBxB;QACnB,iBAAiB;QACjB,qBAAqB;IACvB;IAEA,MAAMgJ,cAAcC,IAAAA,8BAAc,EAAClI;IAEnC,qBACE,sBAACoG;QACClJ,WAAWiL,IAAAA,gBAAU,sBAEnBvI,UAAU,aAAajF,eAAe,CAACiF,MAAM,EAC7C1C;QAEFI,OAAOA;QACPwF,KAAK9C;QACL6D,SAAS0D;QACTxB,aAAa6B;;YAEZK,eAAevG,YAAY,CAAC9E,wBAC3B,qBAACwL,8BAAc;gBAACC,aAAU;0BAAU3G,SAASoE,KAAK;;0BAEpD,qBAACwC,oCAAiB;gBAChBC,cAAa;gBACbC,gBAAe;gBACfC,aAAY;gBACZC,YAAW;eACPlJ,WACAwI;gBACJ7K,QAAQmJ;gBACR1C,SAASA;gBACTD,QAAQA;gBACRzG,WAAW0E;gBACX+G,UAAU,CAACxK;gBACXL,UAAUA;gBACVhC,OAAOY;gBACPkM,SAAS9E;gBACT+E,WAAWnE;gBACXnH,UAAUE;gBACVoG,SAASA;gBACT7G,QAAQA;gBACR8L,OAAO1B;gBACPpJ,YAAYA;0BAEX0D,qBAAAA,+BAAAA,SAAUoE,KAAK;;0BAElB,sBAACiD;gBACCjG,KAAK3C;gBACLlD,MAAMA;gBACNM,UAAU8G;gBACVV,QAAQ1H,MAAM0H,MAAM;gBACpBC,SAAS3H,MAAM2H,OAAO;gBACtBC,SAAS5H,MAAM4H,OAAO;gBACtB/H,OAAO6E;gBACPqI,aAAW;gBACX9L,SAAS;gBACTgK,eAAa/H;gBACbE,UAAUA;;oBAETR,kCAAoB,qBAAC3D;wBAAcY,OAAM;uBAAT;oBAChCwC,YAAY1C,GAAG,CAAC,CAACC,qBAChB,qBAACX;4BAA6BY,OAAOD,KAAKC,KAAK;2BAAlC,CAAC,EAAED,KAAKC,KAAK,CAAC,CAAC;;;YAG/Bc,wBACC,qBAACqM,0CAAoB;gBACnBC,WAAWpJ;gBACXqJ,WAAWtI;gBACXX,cAAc2C;gBACduG,mBAAmBtI;gBACnBuI,cAAcnG;gBACdpF,UAAUA;gBACVyB,oBAAoBA;gBACpB+J,gBAAgBxK;gBAChByK,WAAWxK;gBACXyK,aAAazL;gBACbE,mBAAmBA;gBACnBC,wBAAwBA;gBACxBc,aAAaA;gBACbyK,MAAK;gBACLxD,IAAIP;gBACJgE,mBAAiBzK;gBACjB0K,UAAU,CAAC;0BAEVzD;;;;AAKX"}
@@ -7,12 +7,10 @@ export interface CustomSelectInputProps extends React.InputHTMLAttributes<HTMLIn
7
7
  multiline?: boolean;
8
8
  labelTextTestId?: string;
9
9
  fetching?: boolean;
10
- searchable?: boolean;
11
- selectedOptionLabel?: React.ReactElement | string;
12
10
  }
13
11
  /**
14
12
  * @since 5.10.0
15
13
  * @private
16
14
  */
17
- export declare const CustomSelectInput: ({ align, getRef, className, getRootRef, style, before, after, status, selectedOptionLabel, selectType, multiline, disabled, fetching, labelTextTestId, searchable, ...restInputProps }: CustomSelectInputProps) => React.ReactNode;
15
+ export declare const CustomSelectInput: ({ align, getRef, className, getRootRef, style, before, after, status, children, placeholder, selectType, multiline, disabled, fetching, labelTextTestId, ...restProps }: CustomSelectInputProps) => React.ReactNode;
18
16
  //# sourceMappingURL=CustomSelectInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelectInput.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelectInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAa,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUnD,MAAM,WAAW,sBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;CACnD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,2LAiB3B,sBAAsB,KAAG,KAAK,CAAC,SAmEjC,CAAC"}
1
+ {"version":3,"file":"CustomSelectInput.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelectInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAa,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD,MAAM,WAAW,sBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,4KAiB3B,sBAAsB,KAAG,KAAK,CAAC,SA8EjC,CAAC"}