import React from 'react';
import { Theme } from '../cn';
import { FormatCharacters } from '../masked-input/mask';
import { MenuItem } from '../menu-item/menu-item';
import { InputProps } from '../input/input';
export declare type InputAutocompleteProps = InputProps & {
    /**
     * Тип поля.
     * Внимание, тип 'number' не умеет работать с масками, в том числе с 'selectionStart' и 'selectionEnd'.
     * Подробнее: <a href="http://w3c.github.io/html/sec-forms.html#does-not-apply" target="_blank">http://w3c.github.io/html/sec-forms.html#does-not-apply</a>
     */
    type?: 'number' | 'card' | 'email' | 'file' | 'hidden' | 'money' | 'password' | 'tel' | 'text';
    /**
     * Тип инпута (filled только на белом фоне в размере m)
     */
    view?: 'default' | 'filled';
    /**
     * Управление возможностью компонента занимать всю ширину родителя
     */
    width?: 'default' | 'available';
    /**
     * Управление автозаполнением компонента. В случае передачи `true` или `false` подставляет `on` или `off`.
     * Строка подставляется как есть.
     */
    autocomplete?: boolean | string;
    /**
     * Управление возможностью изменения атрибута компонента, установка
     * соответствующего класса-модификатора для оформления
     */
    disabled?: boolean;
    /**
     * Управление возможностью изменения атрибута компонента (без установки класса-модификатора для оформления)
     */
    disabledAttr?: boolean;
    /**
     * Управление возможностью изменения класса-модификатора компонента
     */
    focused?: boolean;
    /**
     * Максимальное число символов
     */
    maxLength?: number;
    /**
     * Иконка компонента
     */
    icon?: React.ReactNode;
    /**
     * Управление наличием крестика, сбрасывающего значение 'value'
     */
    clear?: boolean;
    /**
     * Уникальный идентификатор блока
     */
    id?: string;
    /**
     * Уникальное имя блока
     */
    name?: string;
    /**
     * Содержимое поля ввода
     */
    value?: string;
    /**
     * Содержимое поля ввода, указанное по умолчанию
     */
    defaultValue?: string;
    /**
     * Последовательность перехода между контролами при нажатии на Tab
     */
    tabIndex?: number;
    /**
     * Определяет маску для ввода значений. <a href="https://github.com/insin/inputmask-core#pattern" target="_blank">Шаблон маски</a>
     */
    mask?: string;
    /**
     * Позволяет использовать пробелы в маске
     */
    useWhitespacesInMask?: boolean;
    /**
     * Кастомные форматтеры символов маски, использует формат formatCharacters из `inputmask-core`
     */
    maskFormatCharacters?: FormatCharacters;
    /**
     * Стандартное ствойство HTMLInputElement 'pattern'. Может быть использовано для показа корректной клавиатуры на мобильных устройствах.
     */
    pattern?: string;
    /**
     * Управление встроенной проверкой данных введённых пользователем в поле на корректность
     */
    formNoValidate?: boolean;
    /**
     * Добавление дополнительных элементов к инпуту слева
     */
    leftAddons?: React.ReactNode;
    /**
     * Добавление дополнительных элементов к инпуту справа
     */
    rightAddons?: React.ReactNode;
    /**
     * Лейбл для поля
     */
    label?: React.ReactNode;
    /**
     * Подсказка в поле
     */
    placeholder?: string;
    /**
     * Подсказка под полем
     */
    hint?: React.ReactNode;
    /**
     * Отображение ошибки
     */
    error?: React.ReactNode;
    /**
     * Сброс ошибки при установке фокуса
     */
    resetError?: boolean;
    /**
     * Размер компонента
     */
    size?: 's' | 'm' | 'l' | 'xl';
    /**
     * Тема компонента
     */
    theme?: Theme;
    /**
     * Дополнительный класс
     */
    className?: string;
    /**
     * Тултип, который появляется при наведении
     */
    title?: string;
    /**
     * Обработчик изменения значения 'value'
     */
    onChange?: (value?: string) => void;
    /**
     * Обработчик фокуса поля
     */
    onFocus?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик клика по полю
     */
    onClick?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик снятия фокуса с поля
     */
    onBlur?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик клика по крестику сбрасываещему значение 'value'
     */
    onClearClick?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события нажатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyDown?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик события отжатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyUp?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик события вставки текста в поле
     */
    onPaste?: (event?: React.ClipboardEvent<any>) => void;
    /**
     * Обработчик события касания по полю
     */
    onTouchStart?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик события прекращения касания по полю
     */
    onTouchEnd?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик события перемещения при касании по полю
     */
    onTouchMove?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик события прерывания касания по полю
     */
    onTouchCancel?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик, вызываемый перед началом ввода в маскированное поле
     */
    onProcessMaskInputEvent?: (event?: React.ChangeEvent<any>) => void;
    /**
     * Идентификатор для систем автоматизированного тестирования
     */
    'data-test-id'?: string;
    /**
     * Список вариантов выбора
     */
    options?: ReadonlyArray<{
        /**
         * Тип списка вариантов
         */
        type?: 'item' | 'group';
        /**
         * Уникальное значение, которое будет отправлено на сервер, если вариант выбран
         */
        value?: string;
        /**
         * Отображение варианта
         */
        description?: React.ReactNode;
        /**
         * Текст, который должен быть записан в текстовое поле при выборе варианта
         */
        text?: string;
        /**
         * Список вариантов, только для type='group'
         */
        content?: any[];
        /**
         * Только для type='item': свойства для компонента [MenuItem](#!/MenuItem)
         */
        props?: object;
    }>;
    /**
     * Управление видимостью выпадающего списка
     */
    opened?: boolean;
    /**
     * Ширинa выпадающего списка равна ширине инпута
     */
    equalPopupWidth?: boolean;
    /**
     * Определяет нужно или нет обновлять значение текстового поля при выборе варианта
     */
    updateValueOnItemSelect?: boolean;
    /**
     * Направления, в которые может открываться попап компонента
     */
    directions?: ReadonlyArray<'top-left' | 'top-center' | 'top-right' | 'left-top' | 'left-center' | 'left-bottom' | 'right-top' | 'right-center' | 'right-bottom' | 'bottom-left' | 'bottom-center' | 'bottom-right'>;
    /**
     * Вставляет попап со списком только если элемент активен
     */
    renderPopupOnFocus?: boolean;
    /**
     * Обработчик выбора пункта в выпадающем меню
     */
    onItemSelect?: (checkedItem?: any) => void;
    /**
     * Закрытие выпадающего списка в случае, если произошел выбор элемента
     */
    closeOnSelect?: boolean;
    /**
     * Максимальная высота выпадающего списка опций
     */
    popupMaxHeight?: number;
    /**
     * Название класса попапа с опциями
     */
    popupClassName?: string;
};
declare type InputAutocompleteState = {
    value: string;
    inputFocused: boolean;
    menuFocused: boolean;
    popupStyles: React.CSSProperties;
    highlightedItem: MenuItem | null;
};
/**
 * Компонент поля для ввода с автокомплитом.
 *
 * @extends Input
 */
export declare class InputAutocomplete extends React.Component<InputAutocompleteProps, InputAutocompleteState> {
    protected cn: (this: void | {
        props?: Record<string, unknown>;
    }, elementNameOrMods?: string | {
        [key: string]: string | number | boolean;
    }, mods?: {
        [key: string]: string | number | boolean;
    }) => string;
    static defaultProps: Partial<InputAutocompleteProps>;
    state: {
        value: string;
        inputFocused: boolean;
        menuFocused: boolean;
        popupStyles: {};
        highlightedItem: any;
    };
    private input;
    private popup;
    private menu;
    private blurTimeout;
    private inputFocusTimeout;
    componentDidMount(): void;
    componentDidUpdate(): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    private renderPopup;
    private handleItemCheck;
    private handleChange;
    private handleInputFocus;
    private handleInputBlur;
    private handleMenuFocus;
    private handleMenuBlur;
    private handleClickOutside;
    private handleKeyDown;
    private handleHighlightedItem;
    private handleMenuKeyDown;
    /**
     * Устанавливает фокус на поле ввода.
     */
    focus(): void;
    /**
     * Убирает фокус с поля ввода.
     */
    blur(): void;
    /**
     * Скроллит страницу до поля ввода.
     */
    scrollTo(): void;
    /**
     * Определяет является ли весь компонент в фокусе на событиях onFocus/onBlur.
     *
     * @param event Событие focus/blur, которое будет проброшено в обработчик onFocus/onBlur
     */
    private solveFocused;
    private formatOptionsList;
    private getCheckedOption;
    private updatePopupStyles;
    private updatePopupTarget;
    /**
     * @param highlightedItem Выбранный пункт меню
     */
    private syncKeyboardNavigationWithScroll;
}
declare const _default: React.ForwardRefExoticComponent<InputProps & {
    /**
     * Тип поля.
     * Внимание, тип 'number' не умеет работать с масками, в том числе с 'selectionStart' и 'selectionEnd'.
     * Подробнее: <a href="http://w3c.github.io/html/sec-forms.html#does-not-apply" target="_blank">http://w3c.github.io/html/sec-forms.html#does-not-apply</a>
     */
    type?: "number" | "text" | "file" | "card" | "email" | "hidden" | "money" | "password" | "tel";
    /**
     * Тип инпута (filled только на белом фоне в размере m)
     */
    view?: "default" | "filled";
    /**
     * Управление возможностью компонента занимать всю ширину родителя
     */
    width?: "default" | "available";
    /**
     * Управление автозаполнением компонента. В случае передачи `true` или `false` подставляет `on` или `off`.
     * Строка подставляется как есть.
     */
    autocomplete?: string | boolean;
    /**
     * Управление возможностью изменения атрибута компонента, установка
     * соответствующего класса-модификатора для оформления
     */
    disabled?: boolean;
    /**
     * Управление возможностью изменения атрибута компонента (без установки класса-модификатора для оформления)
     */
    disabledAttr?: boolean;
    /**
     * Управление возможностью изменения класса-модификатора компонента
     */
    focused?: boolean;
    /**
     * Максимальное число символов
     */
    maxLength?: number;
    /**
     * Иконка компонента
     */
    icon?: React.ReactNode;
    /**
     * Управление наличием крестика, сбрасывающего значение 'value'
     */
    clear?: boolean;
    /**
     * Уникальный идентификатор блока
     */
    id?: string;
    /**
     * Уникальное имя блока
     */
    name?: string;
    /**
     * Содержимое поля ввода
     */
    value?: string;
    /**
     * Содержимое поля ввода, указанное по умолчанию
     */
    defaultValue?: string;
    /**
     * Последовательность перехода между контролами при нажатии на Tab
     */
    tabIndex?: number;
    /**
     * Определяет маску для ввода значений. <a href="https://github.com/insin/inputmask-core#pattern" target="_blank">Шаблон маски</a>
     */
    mask?: string;
    /**
     * Позволяет использовать пробелы в маске
     */
    useWhitespacesInMask?: boolean;
    /**
     * Кастомные форматтеры символов маски, использует формат formatCharacters из `inputmask-core`
     */
    maskFormatCharacters?: FormatCharacters;
    /**
     * Стандартное ствойство HTMLInputElement 'pattern'. Может быть использовано для показа корректной клавиатуры на мобильных устройствах.
     */
    pattern?: string;
    /**
     * Управление встроенной проверкой данных введённых пользователем в поле на корректность
     */
    formNoValidate?: boolean;
    /**
     * Добавление дополнительных элементов к инпуту слева
     */
    leftAddons?: React.ReactNode;
    /**
     * Добавление дополнительных элементов к инпуту справа
     */
    rightAddons?: React.ReactNode;
    /**
     * Лейбл для поля
     */
    label?: React.ReactNode;
    /**
     * Подсказка в поле
     */
    placeholder?: string;
    /**
     * Подсказка под полем
     */
    hint?: React.ReactNode;
    /**
     * Отображение ошибки
     */
    error?: React.ReactNode;
    /**
     * Сброс ошибки при установке фокуса
     */
    resetError?: boolean;
    /**
     * Размер компонента
     */
    size?: "s" | "m" | "l" | "xl";
    /**
     * Тема компонента
     */
    theme?: Theme;
    /**
     * Дополнительный класс
     */
    className?: string;
    /**
     * Тултип, который появляется при наведении
     */
    title?: string;
    /**
     * Обработчик изменения значения 'value'
     */
    onChange?: (value?: string) => void;
    /**
     * Обработчик фокуса поля
     */
    onFocus?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик клика по полю
     */
    onClick?: (event?: React.MouseEvent<any, MouseEvent>) => void;
    /**
     * Обработчик снятия фокуса с поля
     */
    onBlur?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик клика по крестику сбрасываещему значение 'value'
     */
    onClearClick?: (event?: React.MouseEvent<any, MouseEvent>) => void;
    /**
     * Обработчик события нажатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyDown?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик события отжатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyUp?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик события вставки текста в поле
     */
    onPaste?: (event?: React.ClipboardEvent<any>) => void;
    /**
     * Обработчик события касания по полю
     */
    onTouchStart?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик события прекращения касания по полю
     */
    onTouchEnd?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик события перемещения при касании по полю
     */
    onTouchMove?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик события прерывания касания по полю
     */
    onTouchCancel?: (event?: React.TouchEvent<any>) => void;
    /**
     * Обработчик, вызываемый перед началом ввода в маскированное поле
     */
    onProcessMaskInputEvent?: (event?: React.ChangeEvent<any>) => void;
    /**
     * Идентификатор для систем автоматизированного тестирования
     */
    'data-test-id'?: string;
    /**
     * Список вариантов выбора
     */
    options?: readonly {
        /**
         * Тип списка вариантов
         */
        type?: "group" | "item";
        /**
         * Уникальное значение, которое будет отправлено на сервер, если вариант выбран
         */
        value?: string;
        /**
         * Отображение варианта
         */
        description?: React.ReactNode;
        /**
         * Текст, который должен быть записан в текстовое поле при выборе варианта
         */
        text?: string;
        /**
         * Список вариантов, только для type='group'
         */
        content?: any[];
        /**
         * Только для type='item': свойства для компонента [MenuItem](#!/MenuItem)
         */
        props?: object;
    }[];
    /**
     * Управление видимостью выпадающего списка
     */
    opened?: boolean;
    /**
     * Ширинa выпадающего списка равна ширине инпута
     */
    equalPopupWidth?: boolean;
    /**
     * Определяет нужно или нет обновлять значение текстового поля при выборе варианта
     */
    updateValueOnItemSelect?: boolean;
    /**
     * Направления, в которые может открываться попап компонента
     */
    directions?: readonly ("top-left" | "top-center" | "top-right" | "left-top" | "left-center" | "left-bottom" | "right-top" | "right-center" | "right-bottom" | "bottom-left" | "bottom-center" | "bottom-right")[];
    /**
     * Вставляет попап со списком только если элемент активен
     */
    renderPopupOnFocus?: boolean;
    /**
     * Обработчик выбора пункта в выпадающем меню
     */
    onItemSelect?: (checkedItem?: any) => void;
    /**
     * Закрытие выпадающего списка в случае, если произошел выбор элемента
     */
    closeOnSelect?: boolean;
    /**
     * Максимальная высота выпадающего списка опций
     */
    popupMaxHeight?: number;
    /**
     * Название класса попапа с опциями
     */
    popupClassName?: string;
} & React.RefAttributes<InputAutocomplete>> & InputAutocomplete;
export default _default;
