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 };