import type { AriaAttributes, HTMLAttributes, JSX, ReactElement } from 'react';
import React from 'react';
import type { Override } from '../../typings/utility-types.js';
import type { CommonProps } from '../../internal/CommonWrapper/index.js';
import type { TGetRootNode } from '../../lib/rootNode/index.js';
import type { SizeProp } from '../../lib/types/props.js';
import type { InputElementProps } from './Input.typings.js';
export declare const inputTypes: readonly ["password", "text", "number", "tel", "search", "time", "date", "url", "email"];
export type InputAlign = 'left' | 'center' | 'right';
export type ShowClearIcon = 'auto' | 'always' | 'never';
export type InputType = (typeof inputTypes)[number];
export type InputIconType = React.ReactNode | (() => React.ReactNode);
export declare const selectionAllowedTypes: InputType[];
export declare const selectionErrorMessage: (type: InputType, allowedTypes?: InputType[]) => string;
export declare const calculateClearCrossShowedState: ({ showClearIcon, notEmptyValue, focused, hovered, }: {
    showClearIcon: ShowClearIcon;
    notEmptyValue: boolean;
    focused?: boolean;
    hovered?: boolean;
}) => boolean;
export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, 'role'>, Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label'>, Override<React.InputHTMLAttributes<HTMLInputElement>, {
    /** Показывает иконку очистки значения в заполненном поле.
     * @default never */
    showClearIcon?: ShowClearIcon;
    /** Добавляет иконку слева.
     * При использовании `ReactNode` применяются дефолтные стили для иконки.
     * При использовании `() => ReactNode` применяются только стили для позиционирования. */
    leftIcon?: InputIconType;
    /** Добавляет иконку справа.
     * При использовании `ReactNode` применяются дефолтные стили для иконки.
     * При использовании `() => ReactNode` применяются только стили для позиционирования. */
    rightIcon?: InputIconType;
    /** Меняет визуальное отображение поля на состояние «ошибка». Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */
    error?: boolean;
    /** Меняет визуальное отображение поля на состояние «предупреждение». Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */
    warning?: boolean;
    /** Убирает обводку поля. */
    borderless?: boolean;
    /** Выравнивает контент внутри поля. */
    align?: InputAlign;
    /** Размер поля.
     * @default small
     */
    size?: SizeProp;
    /** Событие изменения значения `value` в поле. */
    onValueChange?: (value: string) => void;
    /** @ignore */
    onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;
    /** @ignore */
    onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;
    /** @ignore */
    onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;
    /** Тип поля ввода. */
    type?: InputType;
    /** Значение внутри поля. */
    value?: string;
    /** Устанавливает префикс `ReactNode` перед значением, но после иконки. */
    prefix?: React.ReactNode;
    /** Устанавливает суффикс `ReactNode` после значения, но перед правой иконкой. */
    suffix?: React.ReactNode;
    /** Выделяет введённое значение при фокусе в поле. Работает с типами `text`, `password`, `tel`, `search`, `url`. */
    selectAllOnFocus?: boolean;
    /** Устанавливает обработчик на случай некорректного ввода.
     * Если передан onUnexpectedInput, он будет вызван при ошибке, а эффект мигания можно запустить вручную через публичный метод blink.
     * @param {string} value - значение поля. */
    onUnexpectedInput?: (value: string) => void;
    /** Устанавливает радиус скруглений углов.
     * @ignore */
    corners?: Partial<Pick<React.CSSProperties, 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'>>;
    /** Устанавливает элемент, заменяющий нативный input. Должен иметь пропсы `InputElementProps` и тип `InputElement`. */
    element?: ReactElement<InputElementProps>;
}> {
}
export interface InputState {
    focused: boolean;
    hovered: boolean;
    clearCrossShowed: boolean;
}
export declare const InputDataTids: {
    readonly root: "Input__root";
    readonly clearCross: "Input__clearCross";
};
type DefaultProps = Required<Pick<InputProps, 'type' | 'showClearIcon'>>;
/**
 * Поле ввода позволяет ввести или отредактировать значение.
 */
export declare class Input extends React.Component<InputProps, InputState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static defaultProps: DefaultProps;
    private size;
    private getProps;
    private selectAllId;
    private globalObject;
    private emotion;
    private cx;
    private styles;
    private theme;
    input: HTMLInputElement | null;
    labelRef: React.RefObject<HTMLLabelElement | null>;
    getRootNode: TGetRootNode;
    private setRootNode;
    private getClearCrossShowed;
    state: InputState;
    componentWillUnmount(): void;
    /** Программно устанавливает фокус на поле.
     * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.
     * @public
     */
    focus(): void;
    /** Программно снимает фокус с поля.
     * @public
     */
    blur(): void;
    /** Возвращает DOM-узел поля ввода.
     * @public
     */
    getNode(): HTMLInputElement | null;
    /** Кратковременно визуально подсвечивает поле ввода, чтобы привлечь внимание пользователя.
     * @public
     */
    blink(): void;
    /** start - инициирует последовательное изменение числового значения: начинает повторяющееся увеличение/уменьшение, обычно используется при удерживании кнопки «+» или «−» для числового Input. end - останавливает ранее запущенное числоизменение, инициируемое numberStart.
     * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)
     * @public
     * @param {number} start
     * @param {number} end
     */
    setSelectionRange(start: number, end: number): void;
    render(): JSX.Element;
    /**
     * Переводит фокус в поле (если ещё не в фокусе) и выделяет весь текст в нём.
     * Работает с типами `text`, `password`, `tel`, `search`, `url`.
     * @public
     */
    selectAll: () => void;
    delaySelectAll: () => number | null;
    private _selectAll;
    private cancelDelayedSelectAll;
    private getInput;
    private renderMain;
    private getSizeClassName;
    private refInput;
    private handleClearInput;
    private handleChange;
    private handleMouseEnter;
    private handleMouseLeave;
    private handleFocus;
    private handleKeyDown;
    private handleKeyPress;
    private handleUnexpectedInput;
    private resetFocus;
    private handleBlur;
}
export {};
