import * as React from 'react'; import { type FilterFn } from '../../lib/select'; import type { HasDataAttribute, HasRootRef } from '../../types'; import { type CustomSelectDropdownProps } from '../CustomSelectDropdown/CustomSelectDropdown'; import type { FormFieldProps } from '../FormField/FormField'; import { type NativeSelectProps } from '../NativeSelect/NativeSelect'; import type { CustomSelectClearButtonProps } from './CustomSelectClearButton'; import { type CustomSelectInputProps } from './CustomSelectInput/CustomSelectInput'; import type { CustomSelectOptionInterface, CustomSelectRenderOption, PopupDirection } from './types'; export type { CustomSelectClearButtonProps }; export interface SelectProps extends Omit, Omit, Pick, Pick { /** * Свойства, которые можно прокинуть внутрь компонента: * - `root`: свойства для прокидывания в корень компонента; * - `select`: свойства для прокидывания в нативный `select`; * - `input`: свойства для прокидывания в нативный `input`. */ slotProps?: (NativeSelectProps['slotProps'] & { input?: (React.InputHTMLAttributes & HasDataAttribute & HasRootRef) | undefined; }) | undefined; /** * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`. * * Ref на внутрений компонент input. */ getSelectInputRef?: React.Ref | undefined; /** * Если `true`, то при нажатии на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск * производится по `option.label`. */ searchable?: boolean | undefined; /** * Текст, который будет отображен, если приходит пустой `options`. */ emptyText?: string | undefined; /** * Событие изменения текстового поля. */ onInputChange?: ((e: React.ChangeEvent) => void) | undefined; /** * Список опций в списке. */ options: OptionInterfaceT[]; /** * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`. */ filterFn?: false | FilterFn | undefined; /** * Направление раскрытия выпадающего списка. */ popupDirection?: PopupDirection | undefined; /** * Рендер-проп для кастомного рендера опции. * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api). * * > ⚠️ Важно: свойство опции `disabled` должно выставляться только через проп `options`. * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии * опции. */ renderOption?: (props: CustomSelectRenderOption) => React.ReactNode | undefined; /** * Рендер-проп для кастомного рендера содержимого дропдауна. * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока. */ renderDropdown?: ({ defaultDropdownContent, }: { defaultDropdownContent: React.ReactNode; }) => React.ReactNode; /** * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true` * "победит" `renderDropdown`. */ fetching?: boolean | undefined; /** * Обработчик закрытия выпадающего списка. */ onClose?: VoidFunction | undefined; /** * Обработчик открытия выпадающего списка. */ onOpen?: VoidFunction | undefined; /** * Кастомная кнопка для очистки значения. * Должна принимать обязательное свойство `onClick`. */ ClearButton?: React.ComponentType | undefined; /** * Если `true`, то справа будет отображаться кнопка для очистки значения. */ allowClearButton?: boolean | undefined; /** * Передает атрибут `data-testid` для кнопки очистки. */ clearButtonTestId?: string | undefined; /** * Отступ от выпадающего списка. */ dropdownOffsetDistance?: number | undefined; /** * Ширина раскрывающегося списка зависит от контента. */ dropdownAutoWidth?: boolean | undefined; /** * Использовать Portal для рендеринга выпадающего списка. */ forceDropdownPortal?: boolean | undefined; /** * Отключает максимальную высоту по умолчанию. */ noMaxHeight?: boolean | undefined; /** * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер. */ labelTextTestId?: string | undefined; /** * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ select: { 'data-testid': ... } }`. * * Передает атрибут `data-testid` для нативного элемента `select`. */ nativeSelectTestId?: string | undefined; /** * Обработчик события `keyDown` в поле ввода. */ onInputKeyDown?: ((e: React.KeyboardEvent, isOpen: boolean) => void) | undefined; /** * @deprecated Since 8.0.0. Будет удалено в 9.0.0. * * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно. * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса. */ accessible?: boolean | undefined; /** * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `"Список опций загружается..."`. */ fetchingInProgressLabel?: string | undefined; /** * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `"Загружено опций: ${options.length}"`. */ fetchingCompletedLabel?: string | ((optionsCount: number) => string) | undefined; /** * @deprecated Будет удалено в 10.0.0, используйте `selectType`. * * Режим отображения. * * - `default` — показывает фон, обводку и, при наличии, текст-подсказку. * - `plain` — показывает только текст-подсказку. */ mode?: 'default' | 'plain' | undefined; } /** * @see https://vkui.io/components/custom-select */ export declare function CustomSelect(props: SelectProps): React.ReactNode; //# sourceMappingURL=CustomSelect.d.ts.map