import React from 'react';
import { Theme } from '../cn';
import { FormatCharacters } from '../masked-input/mask';
import MaskedInput from '../masked-input/masked-input';
export declare type 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>
     * @default 'text'
     */
    type?: 'number' | 'card' | 'email' | 'file' | 'hidden' | 'money' | 'password' | 'tel' | 'text';
    /**
     * Тип инпута (filled только на белом фоне в размере m)
     * @default 'default'
     */
    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;
    /**
     * Разрешает ставить пробелы в инпуте, если они указаны в форматтере, заданном свойством `maskFormatCharacters`.
     * Не оказывает влияния, если не установлено свойство `maskFormatCharacters`
     */
    useWhitespacesInMask?: boolean;
    /**
     * Кастомные форматтеры символов маски, использует формат formatCharacters из `inputmask-core`
     */
    maskFormatCharacters?: FormatCharacters;
    /**
     * Стандартное ствойство HTMLInputElement 'pattern'. Может быть использовано для показа корректной клавиатуры на мобильных устройствах.
     */
    pattern?: string;
    /**
     * Управление встроенной проверкой данных введённых пользователем в поле на корректность
     * @default false
     */
    formNoValidate?: boolean;
    /**
     * Добавление дополнительных элементов к инпуту слева
     */
    leftAddons?: React.ReactNode;
    /**
     * Добавление дополнительных элементов к инпуту справа
     */
    rightAddons?: React.ReactNode;
    /**
     * Лейбл для поля
     */
    label?: React.ReactNode;
    /**
     * Подсказка в поле
     */
    placeholder?: string;
    /**
     * Подсказка под полем
     */
    hint?: React.ReactNode;
    /**
     * Отображение ошибки
     */
    error?: React.ReactNode;
    /**
     * Сброс ошибки при установке фокуса
     * @default true
     */
    resetError?: boolean;
    /**
     * Размер компонента
     * @default 'm'
     */
    size?: 's' | 'm' | 'l' | 'xl';
    /**
     * Тема компонента
     */
    theme?: Theme;
    /**
     * Дополнительный класс
     */
    className?: string;
    /**
     * Тултип, который появляется при наведении
     */
    title?: string;
    /**
     * Проброс ref для `input` элемента.
     */
    inputRef?: React.Ref<HTMLInputElement>;
    /**
     * Обработчик изменения значения 'value'
     */
    onChange?: (value?: string, event?: React.ChangeEvent<any>) => 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;
};
declare type InputState = {
    /**
     * Состояние фокуса в поле
     */
    focused: boolean;
    /**
     * Ошибка
     */
    error: InputProps['error'] | null;
    /**
     * Содержимое поля ввода
     */
    value: string;
};
/**
 * Компонент текстового поля ввода.
 */
export declare class Input extends React.PureComponent<InputProps, InputState> {
    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<InputProps>;
    componentDidUpdate(prevProps: InputProps): void;
    state: {
        focused: boolean;
        error: {};
        value: string;
    };
    /**
     * @type {HTMLSpanElement}
     */
    private root;
    /**
     * @type {HTMLSpanElement}
     */
    private box;
    /**
     * @type {HTMLInputElement}
     */
    private control;
    render(): JSX.Element;
    renderContent(): JSX.Element;
    renderIcon(): JSX.Element;
    private handleFocus;
    private handleClick;
    private handleBlur;
    private handleChange;
    private handleClearClick;
    private handleKeyDown;
    private handleKeyUp;
    private handlePaste;
    private handleTouchStart;
    private handleTouchEnd;
    private handleTouchMove;
    private handleTouchCancel;
    private getAutoCompleteValue;
    /**
     * Разблокирует возможность скролла в поле ввода
     *
     */
    enableMouseWheel(): void;
    /**
     * Блокирует возможность скролла в поле ввода
     */
    disableMouseWheel(): void;
    /**
     * Возвращает корневой `HTMLElement` компонента.
     */
    getNode(): any;
    /**
     * Возвращает ссылку на инстанс контейнера для контрола.
     */
    getBoxNode(): any;
    /**
     * Возвращает ссылку на HTMLElement инпута.
     */
    getControl(): HTMLInputElement;
    /**
     * Возвращает ссылку на инстанс MaskedInput.
     * Если маска не была установлена, возвращает null.
     */
    getMaskedInputInstance(): MaskedInput | null;
    /**
     * Устанавливает фокус на поле ввода.
     */
    focus(): void;
    /**
     * Убирает фокус с поля ввода.
     */
    blur(): void;
    /**
     * Скроллит страницу до поля ввода.
     */
    scrollTo(): void;
    /**
     * Устанавливает начальное и конечное положение выделения текста в элементе.
     * @param start Индекс первого выделенного символа.
     * @param end Индекс символа после последнего выделенного символа.
     */
    setSelectionRange(start?: number, end?: number): void;
    /**
     * Изменяет текущение значение поля ввода и генерирует событие об этом.
     *
     * @param value Новое значение
     * @param event React SyntheticEvent
     */
    changeValue(value: string, event: React.ChangeEvent): void;
    /**
     * Возвращает состояние фокуса.
     */
    private getFocused;
    /**
     * Сбрасывает состояние ошибки.
     */
    private resetError;
}
declare const _default: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<Input>> & Input;
export default _default;
