import { ReactNode, HTMLAttributes, ReactElement } from 'react'; import { DropLayer } from 'bloko/blocks/drop/constants'; import CustomSelectOption, { CustomSelectOptionProps } from 'bloko/blocks/customSelect/CustomSelectOption'; import CustomSelectOptionSecondaryText from 'bloko/blocks/customSelect/CustomSelectOptionSecondaryText'; import { dataQa } from 'bloko/blocks/customSelect/constants'; import { AsyncFilterFunctionType } from 'bloko/blocks/customSelect/hooks/useFilteredOptions'; export type CustomSelectValue = string | number; export type CustomSelectOptionOrArray = ReactElement> | ReactElement>[]; export interface CustomSelectProps { /** Список [CustomSelectOption](/#customSelectOption) */ children: CustomSelectOptionOrArray; /** Значение выбранного option для controlled компонента*/ value?: T; /** Атрибут name */ name?: string; /** Значение выбранного option для uncontrolled компонента*/ defaultValue?: T; /** Обработчик onChange, в качестве аргумента передает value */ onChange?: (value: T) => void; /** Функция рендера плейсхолдера выбранного */ placeholderTemplate?: (value: T) => ReactNode; /** Флаг неактивности */ disabled?: boolean; /** Флаг невалидности */ invalid?: boolean; /** Флаг отсутсвия рамок */ light?: boolean; /** Флаг размера контрола, размер по контенту */ flexible?: boolean; /** Флаг состояния селекта - закрыт/открыт */ expanded?: boolean; /** Автоматическое закрытие при клике вне селекта */ autoClose?: boolean; /** Колбек при открытии селекта */ onOpen?: () => void; /** Колбек при закрытии селекта */ onClose?: () => void; /** Колбек при фокусе */ onFocus?: () => void; /** Колбек при потере фокуса */ onBlur?: () => void; /** Свойства обертки CustomSelect */ wrapperProps?: HTMLAttributes; /** z-index слой контента селекта */ layer?: DropLayer; /** Поиск по вариантам выбора */ search?: boolean; /** Плейсхолдер поиска */ searchPlaceholder?: string; /** Функция для фильтрации */ searchFilterFunction?: AsyncFilterFunctionType; /** Задержка для фильтрации */ searchFilterThrottleMs?: number; /** Плейсхолдер пустого состояния */ emptyPlaceholder?: string; /** Функция рендера блока после списка вариантов */ afterOptionsTemplate?: () => ReactNode; /** Заголовок меню для XS. Отображается если передан */ title?: string; /** Указывает на строку с компонентом в исходном коде в режиме разработки. Генерируется babel-plugin-react-source */ source?: string; } declare const CustomSelect: ({ value: controlledValue, defaultValue, onChange: onChangeProp, wrapperProps, layer, disabled, invalid, light, flexible, expanded, autoClose, children, source, search, onOpen, onClose, onFocus, onBlur, searchPlaceholder, emptyPlaceholder, placeholderTemplate, afterOptionsTemplate, searchFilterFunction, searchFilterThrottleMs, title, ...selectProps }: CustomSelectProps) => ReactElement | null; export default CustomSelect; export { CustomSelectOption, CustomSelectOptionSecondaryText, dataQa, DropLayer as CustomSelectLayer };