@vkontakte/vkui 6.5.1 → 6.5.2

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 (112) hide show
  1. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +9 -9
  2. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  3. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  4. package/dist/cjs/components/CustomSelect/CustomSelect.js +2 -2
  5. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  6. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  7. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  8. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js +2 -14
  9. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  10. package/dist/cjs/components/Footer/Footer.d.ts +1 -1
  11. package/dist/cjs/components/Footer/Footer.d.ts.map +1 -1
  12. package/dist/cjs/components/Footer/Footer.js +7 -3
  13. package/dist/cjs/components/Footer/Footer.js.map +1 -1
  14. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
  15. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
  16. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  17. package/dist/cjs/components/RootComponent/RootComponent.d.ts +1 -1
  18. package/dist/cjs/components/RootComponent/RootComponent.d.ts.map +1 -1
  19. package/dist/cjs/components/RootComponent/RootComponent.js +1 -1
  20. package/dist/cjs/components/RootComponent/RootComponent.js.map +1 -1
  21. package/dist/cjs/components/Search/Search.d.ts.map +1 -1
  22. package/dist/cjs/components/Search/Search.js +1 -0
  23. package/dist/cjs/components/Search/Search.js.map +1 -1
  24. package/dist/cjs/hooks/useEnsuredControl.d.ts.map +1 -1
  25. package/dist/cjs/hooks/useEnsuredControl.js +27 -3
  26. package/dist/cjs/hooks/useEnsuredControl.js.map +1 -1
  27. package/dist/cjs/hooks/useIsClient.d.ts +1 -1
  28. package/dist/cjs/hooks/useIsClient.js.map +1 -1
  29. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  30. package/dist/components/ChipsSelect/ChipsSelect.js +9 -9
  31. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  32. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  33. package/dist/components/CustomSelect/CustomSelect.js +2 -2
  34. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  35. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  36. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  37. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +2 -14
  38. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  39. package/dist/components/Footer/Footer.d.ts +1 -1
  40. package/dist/components/Footer/Footer.d.ts.map +1 -1
  41. package/dist/components/Footer/Footer.js +7 -3
  42. package/dist/components/Footer/Footer.js.map +1 -1
  43. package/dist/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
  44. package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
  45. package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  46. package/dist/components/RootComponent/RootComponent.d.ts +1 -1
  47. package/dist/components/RootComponent/RootComponent.d.ts.map +1 -1
  48. package/dist/components/RootComponent/RootComponent.js +1 -1
  49. package/dist/components/RootComponent/RootComponent.js.map +1 -1
  50. package/dist/components/Search/Search.d.ts.map +1 -1
  51. package/dist/components/Search/Search.js +1 -0
  52. package/dist/components/Search/Search.js.map +1 -1
  53. package/dist/components.css +2 -2
  54. package/dist/components.css.map +1 -1
  55. package/dist/components.js.tmp +52 -85
  56. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +9 -9
  57. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  58. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  59. package/dist/cssm/components/CustomSelect/CustomSelect.js +2 -2
  60. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  61. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  62. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  63. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +2 -13
  64. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  65. package/dist/cssm/components/Footer/Footer.d.ts +1 -1
  66. package/dist/cssm/components/Footer/Footer.d.ts.map +1 -1
  67. package/dist/cssm/components/Footer/Footer.js +4 -2
  68. package/dist/cssm/components/Footer/Footer.js.map +1 -1
  69. package/dist/cssm/components/FormField/FormField.module.css +36 -23
  70. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
  71. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
  72. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  73. package/dist/cssm/components/RootComponent/RootComponent.d.ts +1 -1
  74. package/dist/cssm/components/RootComponent/RootComponent.d.ts.map +1 -1
  75. package/dist/cssm/components/RootComponent/RootComponent.js +2 -1
  76. package/dist/cssm/components/RootComponent/RootComponent.js.map +1 -1
  77. package/dist/cssm/components/RootComponent/RootComponent.module.css +10 -0
  78. package/dist/cssm/components/Search/Search.d.ts.map +1 -1
  79. package/dist/cssm/components/Search/Search.js +1 -0
  80. package/dist/cssm/components/Search/Search.js.map +1 -1
  81. package/dist/cssm/hooks/useEnsuredControl.d.ts.map +1 -1
  82. package/dist/cssm/hooks/useEnsuredControl.js +27 -3
  83. package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
  84. package/dist/cssm/hooks/useIsClient.d.ts +1 -1
  85. package/dist/cssm/hooks/useIsClient.js +1 -1
  86. package/dist/cssm/hooks/useIsClient.js.map +1 -1
  87. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  88. package/dist/cssm/styles/constants.css +2 -2
  89. package/dist/hooks/useEnsuredControl.d.ts.map +1 -1
  90. package/dist/hooks/useEnsuredControl.js +27 -3
  91. package/dist/hooks/useEnsuredControl.js.map +1 -1
  92. package/dist/hooks/useIsClient.d.ts +1 -1
  93. package/dist/hooks/useIsClient.js +1 -1
  94. package/dist/hooks/useIsClient.js.map +1 -1
  95. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  96. package/dist/vkui.css +2 -2
  97. package/dist/vkui.css.map +1 -1
  98. package/dist/vkui.js.tmp +52 -85
  99. package/package.json +1 -1
  100. package/src/components/ChipsSelect/ChipsSelect.tsx +12 -12
  101. package/src/components/CustomSelect/CustomSelect.tsx +4 -6
  102. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +3 -17
  103. package/src/components/Footer/Footer.tsx +14 -2
  104. package/src/components/FormField/FormField.module.css +32 -21
  105. package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +1 -5
  106. package/src/components/RootComponent/RootComponent.module.css +10 -0
  107. package/src/components/RootComponent/RootComponent.tsx +12 -2
  108. package/src/components/Search/Search.tsx +1 -0
  109. package/src/hooks/useEnsuredControl.ts +38 -4
  110. package/src/hooks/useIsClient.ts +1 -1
  111. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
  112. package/src/styles/constants.css +2 -2
@@ -126,6 +126,13 @@ const ChipsSelect = (_param)=>{
126
126
  const inputRef = (0, _useExternRef.useExternRef)(getRef, inputRefHook);
127
127
  // Связано с CustomSelectDropdownProps
128
128
  const [dropdownVerticalPlacement, setDropdownVerticalPlacement] = _react.useState(placementProp);
129
+ const onDropdownPlacementChange = _react.useCallback((placement)=>{
130
+ if (placement.startsWith('top')) {
131
+ setDropdownVerticalPlacement('top');
132
+ } else if (placement.startsWith('bottom')) {
133
+ setDropdownVerticalPlacement('bottom');
134
+ }
135
+ }, []);
129
136
  const dropdownId = _react.useId();
130
137
  const dropdownCurrentItemId = focusedOptionIndex !== null ? `${dropdownId}-${focusedOptionIndex}` : undefined;
131
138
  const dropdownScrollBoxRef = _react.useRef(null);
@@ -253,13 +260,6 @@ const ChipsSelect = (_param)=>{
253
260
  focusedOptionIndex,
254
261
  setFocusedOption
255
262
  ]);
256
- const onDropdownPlacementChange = _react.useCallback((placement)=>{
257
- /* istanbul ignore next: */ if (placement.startsWith('top')) {
258
- setDropdownVerticalPlacement('top');
259
- } else if (placement.startsWith('bottom')) {
260
- setDropdownVerticalPlacement('bottom');
261
- }
262
- }, []);
263
263
  const onDropdownMouseLeave = _react.useCallback(()=>{
264
264
  setFocusedOptionIndex(null);
265
265
  }, [
@@ -271,7 +271,7 @@ const ChipsSelect = (_param)=>{
271
271
  setOpened
272
272
  ]);
273
273
  (0, _useGlobalOnClickOutside.useGlobalOnClickOutside)(handleClickOutside, opened ? rootRef : null, opened ? dropdownScrollBoxRef : null);
274
- const openedClassNames = _react.useMemo(()=>opened && dropdownOffsetDistance === 0 && ((dropdownVerticalPlacement === null || dropdownVerticalPlacement === void 0 ? void 0 : dropdownVerticalPlacement.includes('top')) ? "vkuiChipsSelect--pop-up" : "vkuiChipsSelect--pop-down") || undefined, [
274
+ const openedClassNames = _react.useMemo(()=>opened && dropdownOffsetDistance === 0 && (dropdownVerticalPlacement.includes('top') ? "vkuiChipsSelect--pop-up" : "vkuiChipsSelect--pop-down") || undefined, [
275
275
  dropdownOffsetDistance,
276
276
  opened,
277
277
  dropdownVerticalPlacement
@@ -317,7 +317,7 @@ const ChipsSelect = (_param)=>{
317
317
  opened && /*#__PURE__*/ (0, _jsxruntime.jsx)(_CustomSelectDropdown.CustomSelectDropdown, {
318
318
  "data-testid": dropdownTestId,
319
319
  targetRef: rootRef,
320
- placement: placementProp,
320
+ placement: dropdownVerticalPlacement,
321
321
  scrollBoxRef: dropdownScrollBoxRef,
322
322
  onPlacementChange: onDropdownPlacementChange,
323
323
  onMouseLeave: onDropdownMouseLeave,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalOnClickOutside } from '../../hooks/useGlobalOnClickOutside';\nimport { Keys } from '../../lib/accessibility';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipsInputBase } from '../ChipsInputBase/ChipsInputBase';\nimport {\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n renderChipDefault,\n} from '../ChipsInputBase/constants';\nimport type { ChipOption, ChipsInputBaseProps } from '../ChipsInputBase/types';\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 type { FormFieldProps } from '../FormField/FormField';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n DEFAULT_EMPTY_TEXT,\n DEFAULT_SELECTED_BEHAVIOR,\n FOCUS_ACTION_NEXT,\n FOCUS_ACTION_PREV,\n isCreateNewOptionPreset,\n isEmptyOptionPreset,\n isNotServicePreset,\n renderOptionDefault,\n} from './constants';\nimport type { FocusActionType, OptionPreset } from './types';\nimport { useChipsSelect, type UseChipsSelectProps } from './useChipsSelect';\nimport styles from './ChipsSelect.module.css';\n\nconst findIndexAfter = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\n startIndex = -1,\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex(\n (option, i) => i > startIndex && (!isNotServicePreset(option) || !option.disabled),\n );\n};\n\nconst findIndexBefore = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\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 (!isNotServicePreset(option) || !option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nexport interface ChipsSelectProps<O extends ChipOption>\n extends ChipsInputBaseProps<O>,\n UseChipsSelectProps<O>,\n Pick<FormFieldProps, 'status' | 'mode' | 'before'>,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n placement?: 'top' | 'bottom';\n /**\n * Отрисовка Spinner вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n /**\n * Принудительно использовать портал.\n */\n forceDropdownPortal?: boolean;\n /**\n * Передача `data-testid`.\n */\n dropdownTestId?: string;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Добавляет значение в список на событие `onBlur` (использовать вместе с `creatable`)\n */\n addOnBlur?: boolean;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n\n renderOption?: (props: CustomSelectOptionProps, option: O) => React.ReactNode;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (event: React.MouseEvent | React.KeyboardEvent, option: O) => void;\n\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>({\n // FormFieldProps\n id: labelledbyId,\n getRootRef,\n className,\n status = 'default',\n icon: dropdownIconProp,\n onChangeStart,\n\n // CustomSelectDropdownProps\n options: optionsProp,\n placement: placementProp = 'bottom',\n closeAfterSelect = true,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n emptyText = DEFAULT_EMPTY_TEXT,\n creatable = false,\n fetching = false,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight = false,\n filterFn = defaultFilterFn,\n dropdownTestId,\n onClose,\n onOpen,\n overscrollBehavior,\n\n // ChipsInputProps\n getRef,\n value: valueProp,\n defaultValue,\n inputValue: inputValueProp,\n defaultInputValue,\n disabled,\n readOnly,\n getOptionValue = getOptionValueDefault,\n getOptionLabel = getOptionLabelDefault,\n getNewOptionData = getNewOptionDataDefault,\n renderChip = renderChipDefault,\n renderOption = renderOptionDefault,\n onChange,\n onFocus: onFocusProp,\n onInputChange: onInputChangeProp,\n onBlur: onBlurProp,\n onKeyDown: onKeyDownProp,\n dropdownOffsetDistance = 0,\n allowClearButton,\n clearButtonTestId,\n ...restProps\n}: ChipsSelectProps<Option>): React.ReactNode => {\n const {\n // Связано с ChipsInputProps\n // option\n value,\n addOptionFromInput,\n addOption,\n removeOption,\n clearOptions,\n // input\n inputRef: inputRefHook,\n inputValue,\n clearInput,\n onInputChange,\n\n // Связано с CustomSelectDropdownProps\n options,\n opened,\n setOpened,\n focusedOption,\n focusedOptionIndex,\n setFocusedOption,\n setFocusedOptionIndex,\n } = useChipsSelect({\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionValue,\n getOptionLabel,\n getNewOptionData,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange: onInputChangeProp,\n\n // dropdown\n options: optionsProp,\n emptyText,\n creatable,\n filterFn,\n selectedBehavior,\n onClose,\n onOpen,\n\n // other\n disabled,\n });\n\n // Связано с ChipsInputProps\n const rootRef = useExternRef(getRootRef);\n const inputRef = useExternRef(getRef, inputRefHook);\n\n // Связано с CustomSelectDropdownProps\n const [dropdownVerticalPlacement, setDropdownVerticalPlacement] = React.useState<\n Extract<Placement, 'top' | 'bottom'> | undefined\n >(placementProp);\n const dropdownId = React.useId();\n const dropdownCurrentItemId =\n focusedOptionIndex !== null ? `${dropdownId}-${focusedOptionIndex}` : undefined;\n const dropdownScrollBoxRef = React.useRef<HTMLDivElement>(null);\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onFocusProp) {\n onFocusProp(event);\n }\n\n if (!readOnly) {\n setOpened(true);\n setFocusedOptionIndex(null);\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlurProp) {\n onBlurProp(event);\n }\n\n // Не добавляем значение, если его нужно выбрать строго из списка\n if (!readOnly && !event.defaultPrevented && !creatable) {\n event.preventDefault();\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = dropdownScrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\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 /* istanbul ignore next: нет представления как воспроизвести */\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 = (index: number, oldIndex: number | null) => {\n if (index === oldIndex) {\n /* istanbul ignore next: нет представления как воспроизвести */\n return;\n }\n\n const option = options[index];\n\n if (isNotServicePreset(option) && option.disabled) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === FOCUS_ACTION_PREV) {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (onKeyDownProp) {\n onKeyDownProp(event);\n }\n\n if (event.defaultPrevented || readOnly) {\n return;\n }\n\n switch (event.key) {\n case Keys.ARROW_UP:\n case Keys.ARROW_DOWN:\n event.preventDefault();\n\n if (!opened) {\n setOpened(true);\n focusOption(null, FOCUS_ACTION_NEXT);\n } else {\n focusOption(\n focusedOptionIndex,\n event.key === Keys.ARROW_UP ? FOCUS_ACTION_PREV : FOCUS_ACTION_NEXT,\n );\n }\n break;\n case Keys.ENTER: {\n if (!opened) {\n break;\n }\n if (focusedOptionIndex != null) {\n const foundOption = options[focusedOptionIndex];\n if (foundOption && isNotServicePreset(foundOption)) {\n event.preventDefault();\n\n if (onChangeStart) {\n onChangeStart(event, foundOption);\n }\n\n addOption(foundOption);\n setFocusedOptionIndex(null);\n clearInput();\n if (closeAfterSelect) {\n setOpened(false);\n }\n\n break;\n }\n }\n\n if (!creatable) {\n event.preventDefault();\n }\n break;\n }\n case Keys.ESCAPE:\n case Keys.TAB:\n if (opened) {\n setOpened(false);\n }\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex === null) {\n setFocusedOption(null);\n } else {\n const foundFocusedOptionIndex = options[focusedOptionIndex];\n\n if (foundFocusedOptionIndex && isNotServicePreset(foundFocusedOptionIndex)) {\n setFocusedOption(foundFocusedOptionIndex);\n }\n }\n }, [options, focusedOptionIndex, setFocusedOption]);\n\n const onDropdownPlacementChange = React.useCallback((placement: Placement) => {\n /* istanbul ignore next: */\n if (placement.startsWith('top')) {\n setDropdownVerticalPlacement('top');\n } else if (placement.startsWith('bottom')) {\n setDropdownVerticalPlacement('bottom');\n }\n }, []);\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const handleClickOutside = React.useCallback(() => {\n setOpened(false);\n }, [setOpened]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n opened ? rootRef : null,\n opened ? dropdownScrollBoxRef : null,\n );\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (dropdownVerticalPlacement?.includes('top')\n ? styles['ChipsSelect--pop-up']\n : styles['ChipsSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, dropdownVerticalPlacement],\n );\n\n const clearButtonShown = allowClearButton && (!!value.length || !!inputValue.length);\n\n return (\n <>\n <ChipsInputBase\n {...restProps}\n disabled={disabled}\n readOnly={readOnly}\n clearButtonShown={clearButtonShown}\n clearButtonTestId={clearButtonTestId}\n // FormFieldProps\n id={labelledbyId}\n getRootRef={rootRef}\n className={classNames(styles['ChipsSelect'], openedClassNames, className)}\n status={status}\n after={\n dropdownIconProp || (\n <DropdownIcon\n opened={opened}\n className={clearButtonShown ? styles['ChipsSelect__dropdown-icon'] : undefined}\n />\n )\n }\n // option\n value={value}\n onAddChipOption={addOptionFromInput}\n onRemoveChipOption={removeOption}\n renderChip={renderChip}\n onClear={clearOptions}\n // input\n getRef={inputRef}\n inputValue={inputValue}\n onInputChange={onInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n // a11y\n role=\"combobox\"\n aria-expanded={opened}\n aria-autocomplete=\"list\"\n aria-controls={opened ? dropdownId : undefined}\n aria-activedescendant={opened ? dropdownCurrentItemId : undefined}\n aria-haspopup=\"listbox\"\n />\n {opened && (\n <CustomSelectDropdown\n data-testid={dropdownTestId}\n targetRef={rootRef}\n placement={placementProp}\n scrollBoxRef={dropdownScrollBoxRef}\n onPlacementChange={onDropdownPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n offsetDistance={dropdownOffsetDistance}\n overscrollBehavior={overscrollBehavior}\n // a11y\n id={dropdownId}\n role=\"listbox\"\n aria-labelledby={labelledbyId}\n >\n {options.map((option, index) => {\n const dropdownItemId = `${dropdownId}-${index}`;\n\n if (isEmptyOptionPreset(option)) {\n return (\n <Footnote key=\"empty-text\" className={styles['ChipsSelect__empty']}>\n {option.placeholder}\n </Footnote>\n );\n }\n if (isCreateNewOptionPreset(option)) {\n return (\n <CustomSelectOption\n key=\"create-new-option\"\n id={dropdownItemId}\n hovered={focusedOptionIndex === index}\n onMouseDown={() => addOptionFromInput(inputValue)}\n onMouseEnter={() => setFocusedOptionIndex(index)}\n >\n {option.actionText}\n </CustomSelectOption>\n );\n }\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOption(\n {\n id: dropdownItemId,\n disabled: option.disabled,\n hovered: focusedOption\n ? getOptionValue(option) === getOptionValue(focusedOption)\n : false,\n children: option.label,\n selected: !!value.find(\n (selectedOption: Option) =>\n getOptionValue(selectedOption) === getOptionValue(option),\n ),\n getRootRef(node) {\n if (node) {\n chipsSelectOptions[index] = node;\n }\n },\n onMouseDown(event: React.MouseEvent<HTMLDivElement>) {\n if (option.disabled) {\n return;\n }\n if (onChangeStart) {\n onChangeStart(event, option);\n }\n\n if (!event.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter() {\n setFocusedOptionIndex(index);\n },\n },\n option,\n )}\n </React.Fragment>\n );\n })}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["ChipsSelect","findIndexAfter","options","startIndex","length","findIndex","option","i","isNotServicePreset","disabled","findIndexBefore","endIndex","result","id","labelledbyId","getRootRef","className","status","icon","dropdownIconProp","onChangeStart","optionsProp","placement","placementProp","closeAfterSelect","selectedBehavior","DEFAULT_SELECTED_BEHAVIOR","emptyText","DEFAULT_EMPTY_TEXT","creatable","fetching","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","filterFn","defaultFilterFn","dropdownTestId","onClose","onOpen","overscrollBehavior","getRef","value","valueProp","defaultValue","inputValue","inputValueProp","defaultInputValue","readOnly","getOptionValue","getOptionValueDefault","getOptionLabel","getOptionLabelDefault","getNewOptionData","getNewOptionDataDefault","renderChip","renderChipDefault","renderOption","renderOptionDefault","onChange","onFocus","onFocusProp","onInputChange","onInputChangeProp","onBlur","onBlurProp","onKeyDown","onKeyDownProp","dropdownOffsetDistance","allowClearButton","clearButtonTestId","restProps","addOptionFromInput","addOption","removeOption","clearOptions","inputRef","inputRefHook","clearInput","opened","setOpened","focusedOption","focusedOptionIndex","setFocusedOption","setFocusedOptionIndex","useChipsSelect","rootRef","useExternRef","dropdownVerticalPlacement","setDropdownVerticalPlacement","React","useState","dropdownId","useId","dropdownCurrentItemId","undefined","dropdownScrollBoxRef","useRef","handleFocus","event","handleBlur","defaultPrevented","preventDefault","chipsSelectOptions","current","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","beforeIndex","handleKeyDown","key","Keys","ARROW_UP","ARROW_DOWN","ENTER","foundOption","ESCAPE","TAB","useEffect","foundFocusedOptionIndex","onDropdownPlacementChange","useCallback","startsWith","onDropdownMouseLeave","handleClickOutside","useGlobalOnClickOutside","openedClassNames","useMemo","includes","clearButtonShown","ChipsInputBase","classNames","after","DropdownIcon","onAddChipOption","onRemoveChipOption","onClear","role","aria-expanded","aria-autocomplete","aria-controls","aria-activedescendant","aria-haspopup","CustomSelectDropdown","data-testid","targetRef","scrollBoxRef","onPlacementChange","onMouseLeave","autoWidth","forcePortal","offsetDistance","aria-labelledby","map","dropdownItemId","isEmptyOptionPreset","Footnote","placeholder","isCreateNewOptionPreset","CustomSelectOption","hovered","onMouseDown","onMouseEnter","actionText","Fragment","children","label","selected","find","selectedOption","node"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalOnClickOutside } from '../../hooks/useGlobalOnClickOutside';\nimport { Keys } from '../../lib/accessibility';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipsInputBase } from '../ChipsInputBase/ChipsInputBase';\nimport {\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n renderChipDefault,\n} from '../ChipsInputBase/constants';\nimport type { ChipOption, ChipsInputBaseProps } from '../ChipsInputBase/types';\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 type { FormFieldProps } from '../FormField/FormField';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n DEFAULT_EMPTY_TEXT,\n DEFAULT_SELECTED_BEHAVIOR,\n FOCUS_ACTION_NEXT,\n FOCUS_ACTION_PREV,\n isCreateNewOptionPreset,\n isEmptyOptionPreset,\n isNotServicePreset,\n renderOptionDefault,\n} from './constants';\nimport type { FocusActionType, OptionPreset } from './types';\nimport { useChipsSelect, type UseChipsSelectProps } from './useChipsSelect';\nimport styles from './ChipsSelect.module.css';\n\nconst findIndexAfter = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\n startIndex = -1,\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex(\n (option, i) => i > startIndex && (!isNotServicePreset(option) || !option.disabled),\n );\n};\n\nconst findIndexBefore = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\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 (!isNotServicePreset(option) || !option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nexport interface ChipsSelectProps<O extends ChipOption>\n extends ChipsInputBaseProps<O>,\n UseChipsSelectProps<O>,\n Pick<FormFieldProps, 'status' | 'mode' | 'before'>,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n placement?: 'top' | 'bottom';\n /**\n * Отрисовка Spinner вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n /**\n * Принудительно использовать портал.\n */\n forceDropdownPortal?: boolean;\n /**\n * Передача `data-testid`.\n */\n dropdownTestId?: string;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Добавляет значение в список на событие `onBlur` (использовать вместе с `creatable`)\n */\n addOnBlur?: boolean;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n\n renderOption?: (props: CustomSelectOptionProps, option: O) => React.ReactNode;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (event: React.MouseEvent | React.KeyboardEvent, option: O) => void;\n\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>({\n // FormFieldProps\n id: labelledbyId,\n getRootRef,\n className,\n status = 'default',\n icon: dropdownIconProp,\n onChangeStart,\n\n // CustomSelectDropdownProps\n options: optionsProp,\n placement: placementProp = 'bottom',\n closeAfterSelect = true,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n emptyText = DEFAULT_EMPTY_TEXT,\n creatable = false,\n fetching = false,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight = false,\n filterFn = defaultFilterFn,\n dropdownTestId,\n onClose,\n onOpen,\n overscrollBehavior,\n\n // ChipsInputProps\n getRef,\n value: valueProp,\n defaultValue,\n inputValue: inputValueProp,\n defaultInputValue,\n disabled,\n readOnly,\n getOptionValue = getOptionValueDefault,\n getOptionLabel = getOptionLabelDefault,\n getNewOptionData = getNewOptionDataDefault,\n renderChip = renderChipDefault,\n renderOption = renderOptionDefault,\n onChange,\n onFocus: onFocusProp,\n onInputChange: onInputChangeProp,\n onBlur: onBlurProp,\n onKeyDown: onKeyDownProp,\n dropdownOffsetDistance = 0,\n allowClearButton,\n clearButtonTestId,\n ...restProps\n}: ChipsSelectProps<Option>): React.ReactNode => {\n const {\n // Связано с ChipsInputProps\n // option\n value,\n addOptionFromInput,\n addOption,\n removeOption,\n clearOptions,\n // input\n inputRef: inputRefHook,\n inputValue,\n clearInput,\n onInputChange,\n\n // Связано с CustomSelectDropdownProps\n options,\n opened,\n setOpened,\n focusedOption,\n focusedOptionIndex,\n setFocusedOption,\n setFocusedOptionIndex,\n } = useChipsSelect({\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionValue,\n getOptionLabel,\n getNewOptionData,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange: onInputChangeProp,\n\n // dropdown\n options: optionsProp,\n emptyText,\n creatable,\n filterFn,\n selectedBehavior,\n onClose,\n onOpen,\n\n // other\n disabled,\n });\n\n // Связано с ChipsInputProps\n const rootRef = useExternRef(getRootRef);\n const inputRef = useExternRef(getRef, inputRefHook);\n\n // Связано с CustomSelectDropdownProps\n const [dropdownVerticalPlacement, setDropdownVerticalPlacement] = React.useState<\n 'top' | 'bottom'\n >(placementProp);\n\n const onDropdownPlacementChange = React.useCallback((placement: Placement) => {\n if (placement.startsWith('top')) {\n setDropdownVerticalPlacement('top');\n } else if (placement.startsWith('bottom')) {\n setDropdownVerticalPlacement('bottom');\n }\n }, []);\n\n const dropdownId = React.useId();\n const dropdownCurrentItemId =\n focusedOptionIndex !== null ? `${dropdownId}-${focusedOptionIndex}` : undefined;\n const dropdownScrollBoxRef = React.useRef<HTMLDivElement>(null);\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onFocusProp) {\n onFocusProp(event);\n }\n\n if (!readOnly) {\n setOpened(true);\n setFocusedOptionIndex(null);\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlurProp) {\n onBlurProp(event);\n }\n\n // Не добавляем значение, если его нужно выбрать строго из списка\n if (!readOnly && !event.defaultPrevented && !creatable) {\n event.preventDefault();\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = dropdownScrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\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 /* istanbul ignore next: нет представления как воспроизвести */\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 = (index: number, oldIndex: number | null) => {\n if (index === oldIndex) {\n /* istanbul ignore next: нет представления как воспроизвести */\n return;\n }\n\n const option = options[index];\n\n if (isNotServicePreset(option) && option.disabled) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === FOCUS_ACTION_PREV) {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (onKeyDownProp) {\n onKeyDownProp(event);\n }\n\n if (event.defaultPrevented || readOnly) {\n return;\n }\n\n switch (event.key) {\n case Keys.ARROW_UP:\n case Keys.ARROW_DOWN:\n event.preventDefault();\n\n if (!opened) {\n setOpened(true);\n focusOption(null, FOCUS_ACTION_NEXT);\n } else {\n focusOption(\n focusedOptionIndex,\n event.key === Keys.ARROW_UP ? FOCUS_ACTION_PREV : FOCUS_ACTION_NEXT,\n );\n }\n break;\n case Keys.ENTER: {\n if (!opened) {\n break;\n }\n if (focusedOptionIndex != null) {\n const foundOption = options[focusedOptionIndex];\n if (foundOption && isNotServicePreset(foundOption)) {\n event.preventDefault();\n\n if (onChangeStart) {\n onChangeStart(event, foundOption);\n }\n\n addOption(foundOption);\n setFocusedOptionIndex(null);\n clearInput();\n if (closeAfterSelect) {\n setOpened(false);\n }\n\n break;\n }\n }\n\n if (!creatable) {\n event.preventDefault();\n }\n break;\n }\n case Keys.ESCAPE:\n case Keys.TAB:\n if (opened) {\n setOpened(false);\n }\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex === null) {\n setFocusedOption(null);\n } else {\n const foundFocusedOptionIndex = options[focusedOptionIndex];\n\n if (foundFocusedOptionIndex && isNotServicePreset(foundFocusedOptionIndex)) {\n setFocusedOption(foundFocusedOptionIndex);\n }\n }\n }, [options, focusedOptionIndex, setFocusedOption]);\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const handleClickOutside = React.useCallback(() => {\n setOpened(false);\n }, [setOpened]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n opened ? rootRef : null,\n opened ? dropdownScrollBoxRef : null,\n );\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (dropdownVerticalPlacement.includes('top')\n ? styles['ChipsSelect--pop-up']\n : styles['ChipsSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, dropdownVerticalPlacement],\n );\n\n const clearButtonShown = allowClearButton && (!!value.length || !!inputValue.length);\n\n return (\n <>\n <ChipsInputBase\n {...restProps}\n disabled={disabled}\n readOnly={readOnly}\n clearButtonShown={clearButtonShown}\n clearButtonTestId={clearButtonTestId}\n // FormFieldProps\n id={labelledbyId}\n getRootRef={rootRef}\n className={classNames(styles['ChipsSelect'], openedClassNames, className)}\n status={status}\n after={\n dropdownIconProp || (\n <DropdownIcon\n opened={opened}\n className={clearButtonShown ? styles['ChipsSelect__dropdown-icon'] : undefined}\n />\n )\n }\n // option\n value={value}\n onAddChipOption={addOptionFromInput}\n onRemoveChipOption={removeOption}\n renderChip={renderChip}\n onClear={clearOptions}\n // input\n getRef={inputRef}\n inputValue={inputValue}\n onInputChange={onInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n // a11y\n role=\"combobox\"\n aria-expanded={opened}\n aria-autocomplete=\"list\"\n aria-controls={opened ? dropdownId : undefined}\n aria-activedescendant={opened ? dropdownCurrentItemId : undefined}\n aria-haspopup=\"listbox\"\n />\n {opened && (\n <CustomSelectDropdown\n data-testid={dropdownTestId}\n targetRef={rootRef}\n placement={dropdownVerticalPlacement}\n scrollBoxRef={dropdownScrollBoxRef}\n onPlacementChange={onDropdownPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n offsetDistance={dropdownOffsetDistance}\n overscrollBehavior={overscrollBehavior}\n // a11y\n id={dropdownId}\n role=\"listbox\"\n aria-labelledby={labelledbyId}\n >\n {options.map((option, index) => {\n const dropdownItemId = `${dropdownId}-${index}`;\n\n if (isEmptyOptionPreset(option)) {\n return (\n <Footnote key=\"empty-text\" className={styles['ChipsSelect__empty']}>\n {option.placeholder}\n </Footnote>\n );\n }\n if (isCreateNewOptionPreset(option)) {\n return (\n <CustomSelectOption\n key=\"create-new-option\"\n id={dropdownItemId}\n hovered={focusedOptionIndex === index}\n onMouseDown={() => addOptionFromInput(inputValue)}\n onMouseEnter={() => setFocusedOptionIndex(index)}\n >\n {option.actionText}\n </CustomSelectOption>\n );\n }\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOption(\n {\n id: dropdownItemId,\n disabled: option.disabled,\n hovered: focusedOption\n ? getOptionValue(option) === getOptionValue(focusedOption)\n : false,\n children: option.label,\n selected: !!value.find(\n (selectedOption: Option) =>\n getOptionValue(selectedOption) === getOptionValue(option),\n ),\n getRootRef(node) {\n if (node) {\n chipsSelectOptions[index] = node;\n }\n },\n onMouseDown(event: React.MouseEvent<HTMLDivElement>) {\n if (option.disabled) {\n return;\n }\n if (onChangeStart) {\n onChangeStart(event, option);\n }\n\n if (!event.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter() {\n setFocusedOptionIndex(index);\n },\n },\n option,\n )}\n </React.Fragment>\n );\n })}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["ChipsSelect","findIndexAfter","options","startIndex","length","findIndex","option","i","isNotServicePreset","disabled","findIndexBefore","endIndex","result","id","labelledbyId","getRootRef","className","status","icon","dropdownIconProp","onChangeStart","optionsProp","placement","placementProp","closeAfterSelect","selectedBehavior","DEFAULT_SELECTED_BEHAVIOR","emptyText","DEFAULT_EMPTY_TEXT","creatable","fetching","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","filterFn","defaultFilterFn","dropdownTestId","onClose","onOpen","overscrollBehavior","getRef","value","valueProp","defaultValue","inputValue","inputValueProp","defaultInputValue","readOnly","getOptionValue","getOptionValueDefault","getOptionLabel","getOptionLabelDefault","getNewOptionData","getNewOptionDataDefault","renderChip","renderChipDefault","renderOption","renderOptionDefault","onChange","onFocus","onFocusProp","onInputChange","onInputChangeProp","onBlur","onBlurProp","onKeyDown","onKeyDownProp","dropdownOffsetDistance","allowClearButton","clearButtonTestId","restProps","addOptionFromInput","addOption","removeOption","clearOptions","inputRef","inputRefHook","clearInput","opened","setOpened","focusedOption","focusedOptionIndex","setFocusedOption","setFocusedOptionIndex","useChipsSelect","rootRef","useExternRef","dropdownVerticalPlacement","setDropdownVerticalPlacement","React","useState","onDropdownPlacementChange","useCallback","startsWith","dropdownId","useId","dropdownCurrentItemId","undefined","dropdownScrollBoxRef","useRef","handleFocus","event","handleBlur","defaultPrevented","preventDefault","chipsSelectOptions","current","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","beforeIndex","handleKeyDown","key","Keys","ARROW_UP","ARROW_DOWN","ENTER","foundOption","ESCAPE","TAB","useEffect","foundFocusedOptionIndex","onDropdownMouseLeave","handleClickOutside","useGlobalOnClickOutside","openedClassNames","useMemo","includes","clearButtonShown","ChipsInputBase","classNames","after","DropdownIcon","onAddChipOption","onRemoveChipOption","onClear","role","aria-expanded","aria-autocomplete","aria-controls","aria-activedescendant","aria-haspopup","CustomSelectDropdown","data-testid","targetRef","scrollBoxRef","onPlacementChange","onMouseLeave","autoWidth","forcePortal","offsetDistance","aria-labelledby","map","dropdownItemId","isEmptyOptionPreset","Footnote","placeholder","isCreateNewOptionPreset","CustomSelectOption","hovered","onMouseDown","onMouseEnter","actionText","Fragment","children","label","selected","find","selectedOption","node"],"mappings":"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"}
@@ -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,CAmsBjB"}
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"}
@@ -132,7 +132,7 @@ function CustomSelect(props) {
132
132
  options,
133
133
  selectedOptionIndex
134
134
  ]);
135
- const openedClassNames = _react.useMemo(()=>opened && dropdownOffsetDistance === 0 && ((popperPlacement === null || popperPlacement === void 0 ? void 0 : popperPlacement.includes('top')) ? "vkuiCustomSelect--pop-up" : "vkuiCustomSelect--pop-down") || undefined, [
135
+ const openedClassNames = _react.useMemo(()=>opened && dropdownOffsetDistance === 0 && (popperPlacement.includes('top') ? "vkuiCustomSelect--pop-up" : "vkuiCustomSelect--pop-down") || undefined, [
136
136
  dropdownOffsetDistance,
137
137
  opened,
138
138
  popperPlacement
@@ -669,7 +669,7 @@ function CustomSelect(props) {
669
669
  }),
670
670
  opened && /*#__PURE__*/ (0, _jsxruntime.jsx)(_CustomSelectDropdown.CustomSelectDropdown, {
671
671
  targetRef: containerRef,
672
- placement: popupDirection,
672
+ placement: popperPlacement,
673
673
  scrollBoxRef: setScrollBoxRef,
674
674
  onPlacementChange: setPopperPlacement,
675
675
  onMouseLeave: resetFocusedOption,
@@ -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 { PlacementWithAuto } 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<PlacementWithAuto | undefined>(\n popupDirection,\n );\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={popupDirection}\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 { 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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"}
@@ -20,5 +20,5 @@ export interface CustomSelectDropdownProps extends HTMLAttributesWithRootRef<HTM
20
20
  */
21
21
  noMaxHeight?: boolean;
22
22
  }
23
- export declare const CustomSelectDropdown: ({ children, targetRef, scrollBoxRef, placement, fetching, onPlacementChange: parentOnPlacementChange, offsetDistance, autoWidth, forcePortal, autoHideScrollbar, autoHideScrollbarDelay, className, noMaxHeight, overscrollBehavior, ...restProps }: CustomSelectDropdownProps) => React.ReactNode;
23
+ export declare const CustomSelectDropdown: ({ children, targetRef, scrollBoxRef, placement, fetching, offsetDistance, autoWidth, forcePortal, autoHideScrollbar, autoHideScrollbarDelay, className, noMaxHeight, overscrollBehavior, ...restProps }: CustomSelectDropdownProps) => React.ReactNode;
24
24
  //# sourceMappingURL=CustomSelectDropdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelectDropdown/CustomSelectDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAoB,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAK/E,MAAM,WAAW,yBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,IAAI,CACF,qBAAqB,EACrB,oBAAoB,GAAG,mBAAmB,GAAG,wBAAwB,CACtE,EACD,mBAAmB;IACrB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAID,eAAO,MAAM,oBAAoB,wPAiB9B,yBAAyB,KAAG,KAAK,CAAC,SAqDpC,CAAC"}
1
+ {"version":3,"file":"CustomSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelectDropdown/CustomSelectDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAoB,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAK/E,MAAM,WAAW,yBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,IAAI,CACF,qBAAqB,EACrB,oBAAoB,GAAG,mBAAmB,GAAG,wBAAwB,CACtE,EACD,mBAAmB;IACrB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,4MAgB9B,yBAAyB,KAAG,KAAK,CAAC,SA0CpC,CAAC"}
@@ -18,16 +18,14 @@ const _vkjs = require("@vkontakte/vkjs");
18
18
  const _CustomScrollView = require("../CustomScrollView/CustomScrollView");
19
19
  const _Popper = require("../Popper/Popper");
20
20
  const _Spinner = require("../Spinner/Spinner");
21
- const calcIsTop = (placement)=>placement.startsWith('top');
22
21
  const CustomSelectDropdown = (_param)=>{
23
- var { children, targetRef, scrollBoxRef, placement = 'bottom', fetching, onPlacementChange: parentOnPlacementChange, offsetDistance = 0, autoWidth = false, forcePortal = true, autoHideScrollbar, autoHideScrollbarDelay, className, noMaxHeight = false, // CustomScrollView
22
+ var { children, targetRef, scrollBoxRef, placement = 'bottom', fetching, offsetDistance = 0, autoWidth = false, forcePortal = true, autoHideScrollbar, autoHideScrollbarDelay, className, noMaxHeight = false, // CustomScrollView
24
23
  overscrollBehavior } = _param, restProps = _object_without_properties._(_param, [
25
24
  "children",
26
25
  "targetRef",
27
26
  "scrollBoxRef",
28
27
  "placement",
29
28
  "fetching",
30
- "onPlacementChange",
31
29
  "offsetDistance",
32
30
  "autoWidth",
33
31
  "forcePortal",
@@ -37,22 +35,12 @@ const CustomSelectDropdown = (_param)=>{
37
35
  "noMaxHeight",
38
36
  "overscrollBehavior"
39
37
  ]);
40
- const [isTop, setIsTop] = _react.useState(()=>calcIsTop(placement));
41
- const onPlacementChange = _react.useCallback((placement)=>{
42
- setIsTop(calcIsTop(placement));
43
- if (parentOnPlacementChange) {
44
- parentOnPlacementChange(placement);
45
- }
46
- }, [
47
- parentOnPlacementChange
48
- ]);
49
38
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Popper.Popper, _object_spread_props._(_object_spread._({
50
39
  targetRef: targetRef,
51
40
  offsetByMainAxis: offsetDistance,
52
41
  sameWidth: !autoWidth,
53
- onPlacementChange: onPlacementChange,
54
42
  placement: placement,
55
- className: (0, _vkjs.classNames)("vkuiCustomSelectDropdown", 'vkuiInternalCustomSelectDropdown', offsetDistance === 0 && (isTop ? "vkuiCustomSelectDropdown--top" : "vkuiCustomSelectDropdown--bottom"), autoWidth && (0, _vkjs.classNames)("vkuiCustomSelectDropdown--wide", 'vkuiInternalCustomSelectDropdown--wide'), className),
43
+ className: (0, _vkjs.classNames)("vkuiCustomSelectDropdown", 'vkuiInternalCustomSelectDropdown', offsetDistance === 0 && (placement.includes('top') ? "vkuiCustomSelectDropdown--top" : "vkuiCustomSelectDropdown--bottom"), autoWidth && (0, _vkjs.classNames)("vkuiCustomSelectDropdown--wide", 'vkuiInternalCustomSelectDropdown--wide'), className),
56
44
  usePortal: forcePortal,
57
45
  autoUpdateOnTargetResize: true
58
46
  }, restProps), {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CustomSelectDropdown/CustomSelectDropdown.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { Placement } from '../../lib/floating';\nimport { HTMLAttributesWithRootRef } from '../../types';\nimport { CustomScrollView, CustomScrollViewProps } from '../CustomScrollView/CustomScrollView';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { Popper } from '../Popper/Popper';\nimport { Spinner } from '../Spinner/Spinner';\nimport styles from './CustomSelectDropdown.module.css';\n\nexport interface CustomSelectDropdownProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<\n CustomScrollViewProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n >,\n TrackerOptionsProps {\n targetRef: React.RefObject<HTMLElement>;\n placement?: Placement;\n scrollBoxRef?: React.Ref<HTMLDivElement>;\n fetching?: boolean;\n offsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n autoWidth?: boolean;\n forcePortal?: boolean;\n onPlacementChange?: (placement: Placement) => void;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n}\n\nconst calcIsTop = (placement: Placement) => placement.startsWith('top');\n\nexport const CustomSelectDropdown = ({\n children,\n targetRef,\n scrollBoxRef,\n placement = 'bottom',\n fetching,\n onPlacementChange: parentOnPlacementChange,\n offsetDistance = 0,\n autoWidth = false,\n forcePortal = true,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n className,\n noMaxHeight = false,\n // CustomScrollView\n overscrollBehavior,\n ...restProps\n}: CustomSelectDropdownProps): React.ReactNode => {\n const [isTop, setIsTop] = React.useState(() => calcIsTop(placement));\n\n const onPlacementChange = React.useCallback(\n (placement: Placement) => {\n setIsTop(calcIsTop(placement));\n if (parentOnPlacementChange) {\n parentOnPlacementChange(placement);\n }\n },\n [parentOnPlacementChange],\n );\n\n return (\n <Popper\n targetRef={targetRef}\n offsetByMainAxis={offsetDistance}\n sameWidth={!autoWidth}\n onPlacementChange={onPlacementChange}\n placement={placement}\n className={classNames(\n styles['CustomSelectDropdown'],\n 'vkuiInternalCustomSelectDropdown',\n offsetDistance === 0 &&\n (isTop ? styles['CustomSelectDropdown--top'] : styles['CustomSelectDropdown--bottom']),\n autoWidth &&\n classNames(\n styles['CustomSelectDropdown--wide'],\n 'vkuiInternalCustomSelectDropdown--wide',\n ),\n className,\n )}\n usePortal={forcePortal}\n autoUpdateOnTargetResize\n {...restProps}\n >\n <CustomScrollView\n boxRef={scrollBoxRef}\n className={noMaxHeight ? undefined : styles['CustomSelectDropdown__in--withMaxHeight']}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n overscrollBehavior={overscrollBehavior}\n >\n {fetching ? (\n <div className={styles['CustomSelectDropdown__fetching']}>\n <Spinner size=\"small\" />\n </div>\n ) : (\n children\n )}\n </CustomScrollView>\n </Popper>\n );\n};\n"],"names":["CustomSelectDropdown","calcIsTop","placement","startsWith","children","targetRef","scrollBoxRef","fetching","onPlacementChange","parentOnPlacementChange","offsetDistance","autoWidth","forcePortal","autoHideScrollbar","autoHideScrollbarDelay","className","noMaxHeight","overscrollBehavior","restProps","isTop","setIsTop","React","useState","useCallback","Popper","offsetByMainAxis","sameWidth","classNames","usePortal","autoUpdateOnTargetResize","CustomScrollView","boxRef","undefined","div","Spinner","size"],"mappings":";;;;+BAoCaA;;;eAAAA;;;;;;;;iEApCU;sBACI;kCAG6B;wBAEjC;yBACC;AA2BxB,MAAMC,YAAY,CAACC,YAAyBA,UAAUC,UAAU,CAAC;AAE1D,MAAMH,uBAAuB;QAAC,EACnCI,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZJ,YAAY,QAAQ,EACpBK,QAAQ,EACRC,mBAAmBC,uBAAuB,EAC1CC,iBAAiB,CAAC,EAClBC,YAAY,KAAK,EACjBC,cAAc,IAAI,EAClBC,iBAAiB,EACjBC,sBAAsB,EACtBC,SAAS,EACTC,cAAc,KAAK,EACnB,mBAAmB;IACnBC,kBAAkB,EAEQ,WADvBC;QAfHd;QACAC;QACAC;QACAJ;QACAK;QACAC;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAEAC;;IAGA,MAAM,CAACE,OAAOC,SAAS,GAAGC,OAAMC,QAAQ,CAAC,IAAMrB,UAAUC;IAEzD,MAAMM,oBAAoBa,OAAME,WAAW,CACzC,CAACrB;QACCkB,SAASnB,UAAUC;QACnB,IAAIO,yBAAyB;YAC3BA,wBAAwBP;QAC1B;IACF,GACA;QAACO;KAAwB;IAG3B,qBACE,qBAACe,cAAM;QACLnB,WAAWA;QACXoB,kBAAkBf;QAClBgB,WAAW,CAACf;QACZH,mBAAmBA;QACnBN,WAAWA;QACXa,WAAWY,IAAAA,gBAAU,8BAEnB,oCACAjB,mBAAmB,KAChBS,CAAAA,4EAAmF,GACtFR,aACEgB,IAAAA,gBAAU,oCAER,2CAEJZ;QAEFa,WAAWhB;QACXiB,wBAAwB;OACpBX;kBAEJ,cAAA,qBAACY,kCAAgB;YACfC,QAAQzB;YACRS,WAAWC,cAAcgB;YACzBnB,mBAAmBA;YACnBC,wBAAwBA;YACxBG,oBAAoBA;sBAEnBV,yBACC,qBAAC0B;gBAAIlB,SAAS;0BACZ,cAAA,qBAACmB,gBAAO;oBAACC,MAAK;;iBAGhB/B;;;AAKV"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelectDropdown/CustomSelectDropdown.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { Placement } from '../../lib/floating';\nimport { HTMLAttributesWithRootRef } from '../../types';\nimport { CustomScrollView, CustomScrollViewProps } from '../CustomScrollView/CustomScrollView';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { Popper } from '../Popper/Popper';\nimport { Spinner } from '../Spinner/Spinner';\nimport styles from './CustomSelectDropdown.module.css';\n\nexport interface CustomSelectDropdownProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<\n CustomScrollViewProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n >,\n TrackerOptionsProps {\n targetRef: React.RefObject<HTMLElement>;\n placement?: Placement;\n scrollBoxRef?: React.Ref<HTMLDivElement>;\n fetching?: boolean;\n offsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n autoWidth?: boolean;\n forcePortal?: boolean;\n onPlacementChange?: (placement: Placement) => void;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n}\n\nexport const CustomSelectDropdown = ({\n children,\n targetRef,\n scrollBoxRef,\n placement = 'bottom',\n fetching,\n offsetDistance = 0,\n autoWidth = false,\n forcePortal = true,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n className,\n noMaxHeight = false,\n // CustomScrollView\n overscrollBehavior,\n ...restProps\n}: CustomSelectDropdownProps): React.ReactNode => {\n return (\n <Popper\n targetRef={targetRef}\n offsetByMainAxis={offsetDistance}\n sameWidth={!autoWidth}\n placement={placement}\n className={classNames(\n styles['CustomSelectDropdown'],\n 'vkuiInternalCustomSelectDropdown',\n offsetDistance === 0 &&\n (placement.includes('top')\n ? styles['CustomSelectDropdown--top']\n : styles['CustomSelectDropdown--bottom']),\n autoWidth &&\n classNames(\n styles['CustomSelectDropdown--wide'],\n 'vkuiInternalCustomSelectDropdown--wide',\n ),\n className,\n )}\n usePortal={forcePortal}\n autoUpdateOnTargetResize\n {...restProps}\n >\n <CustomScrollView\n boxRef={scrollBoxRef}\n className={noMaxHeight ? undefined : styles['CustomSelectDropdown__in--withMaxHeight']}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n overscrollBehavior={overscrollBehavior}\n >\n {fetching ? (\n <div className={styles['CustomSelectDropdown__fetching']}>\n <Spinner size=\"small\" />\n </div>\n ) : (\n children\n )}\n </CustomScrollView>\n </Popper>\n );\n};\n"],"names":["CustomSelectDropdown","children","targetRef","scrollBoxRef","placement","fetching","offsetDistance","autoWidth","forcePortal","autoHideScrollbar","autoHideScrollbarDelay","className","noMaxHeight","overscrollBehavior","restProps","Popper","offsetByMainAxis","sameWidth","classNames","includes","usePortal","autoUpdateOnTargetResize","CustomScrollView","boxRef","undefined","div","Spinner","size"],"mappings":";;;;+BAkCaA;;;eAAAA;;;;;;;;iEAlCU;sBACI;kCAG6B;wBAEjC;yBACC;AA2BjB,MAAMA,uBAAuB;QAAC,EACnCC,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,YAAY,QAAQ,EACpBC,QAAQ,EACRC,iBAAiB,CAAC,EAClBC,YAAY,KAAK,EACjBC,cAAc,IAAI,EAClBC,iBAAiB,EACjBC,sBAAsB,EACtBC,SAAS,EACTC,cAAc,KAAK,EACnB,mBAAmB;IACnBC,kBAAkB,EAEQ,WADvBC;QAdHb;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAEAC;;IAGA,qBACE,qBAACE,cAAM;QACLb,WAAWA;QACXc,kBAAkBV;QAClBW,WAAW,CAACV;QACZH,WAAWA;QACXO,WAAWO,IAAAA,gBAAU,8BAEnB,oCACAZ,mBAAmB,KAChBF,CAAAA,UAAUe,QAAQ,CAAC,6EAEqB,GAC3CZ,aACEW,IAAAA,gBAAU,oCAER,2CAEJP;QAEFS,WAAWZ;QACXa,wBAAwB;OACpBP;kBAEJ,cAAA,qBAACQ,kCAAgB;YACfC,QAAQpB;YACRQ,WAAWC,cAAcY;YACzBf,mBAAmBA;YACnBC,wBAAwBA;YACxBG,oBAAoBA;sBAEnBR,yBACC,qBAACoB;gBAAId,SAAS;0BACZ,cAAA,qBAACe,gBAAO;oBAACC,MAAK;;iBAGhB1B;;;AAKV"}
@@ -4,5 +4,5 @@ export type FooterProps = React.AllHTMLAttributes<HTMLElement> & HasComponent;
4
4
  /**
5
5
  * @see https://vkcom.github.io/VKUI/#/Footer
6
6
  */
7
- export declare const Footer: ({ children, className, ...restProps }: FooterProps) => React.ReactNode;
7
+ export declare const Footer: ({ children, className, Component, role: roleProp, ...restProps }: FooterProps) => React.ReactNode;
8
8
  //# sourceMappingURL=Footer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/components/Footer/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,MAAM,0CAA2C,WAAW,KAAG,KAAK,CAAC,SAMjF,CAAC"}
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/components/Footer/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,MAAM,qEAMhB,WAAW,KAAG,KAAK,CAAC,SAYtB,CAAC"}
@@ -17,12 +17,16 @@ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
17
  const _vkjs = require("@vkontakte/vkjs");
18
18
  const _Footnote = require("../Typography/Footnote/Footnote");
19
19
  const Footer = (_param)=>{
20
- var { children, className } = _param, restProps = _object_without_properties._(_param, [
20
+ var { children, className, Component = 'footer', role: roleProp } = _param, restProps = _object_without_properties._(_param, [
21
21
  "children",
22
- "className"
22
+ "className",
23
+ "Component",
24
+ "role"
23
25
  ]);
26
+ const role = roleProp !== null && roleProp !== void 0 ? roleProp : Component === 'footer' ? 'contentinfo' : undefined;
24
27
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Footnote.Footnote, _object_spread_props._(_object_spread._({
25
- Component: "footer"
28
+ Component: Component,
29
+ role: role
26
30
  }, restProps), {
27
31
  className: (0, _vkjs.classNames)("vkuiFooter", className),
28
32
  children: children