import type { AriaAttributes, ReactNode } from 'react';
import React from 'react';
import type { Nullable, 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 { InputAlign } from '../Input/index.js';
export declare const DEFAULT_WIDTH = 250;
export interface TextareaProps extends Pick<AriaAttributes, 'aria-controls' | 'aria-label'>, CommonProps, Override<React.TextareaHTMLAttributes<HTMLTextAreaElement>, {
    /** Меняет визуальное отображение поля на состояние ошибки. */
    error?: boolean;
    /** Меняет визуальное отображение поля на состояние предупреждения. */
    warning?: boolean;
    /** Блокирует поле. */
    disabled?: boolean;
    /** Размер многострочного поля. */
    size?: SizeProp;
    /** Выполняет автоматический ресайз в зависимости от количества текста в поле. Связан с пропом `extraRow`, который всегда добавляет дополнительную пустую строку. */
    autoResize?: boolean;
    /** Высота поля — число видимых строк. При превышении этой высоты появляется скролл. */
    rows?: number;
    /** Максимальное число видимых строк при автоматическом ресайзе. */
    maxRows?: string | number;
    /** Направление ресайза поля.
     * Попадает в `style`. Описание всех значений смотрите [в документации MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/resize). */
    resize?: React.CSSProperties['resize'];
    /** Ширина многострочного поля. */
    width?: React.CSSProperties['width'];
    /** Событие изменения `value`. */
    onValueChange?: (value: string) => void;
    /** Выделяет введённое значение при фокусе в поле. Работает с типами `text`, `password`, `tel`, `search`, `url`. */
    selectAllOnFocus?: boolean;
    /** Отображает счётчик введённых символов. */
    showLengthCounter?: boolean;
    /** Допустимое количество символов в поле. Отображается в счётчике символов.
     * @default maxLength */
    lengthCounter?: number;
    /** Добавляет подсказку к счётчику символов.
     * По умолчанию - тултип с содержимым из пропа, если передан `ReactNode`.
     * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой.
     * @example
     * ```
     * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}
     * ``` */
    counterHelp?: ReactNode | (() => ReactNode);
    /** Добавляет дополнительную свободную строку при автоматическом ресайзе.
     * @see https://guides.kontur.ru/components/textarea/#04 */
    extraRow?: boolean;
    /** Отключает анимацию при автоматическом ресайзе. Автоматически отключается, когда в `extraRow` передан `false`. */
    disableAnimations?: boolean;
    /** Выравнивание текста в поле. */
    align?: InputAlign;
}> {
}
export interface TextareaState {
    needsPolyfillPlaceholder: boolean;
    isCounterVisible: boolean;
}
export declare const TextareaDataTids: {
    readonly root: "Textarea__root";
    readonly counter: "TextareaCounter__root";
    readonly helpIcon: "TextareaCounter__helpIcon";
};
type DefaultProps = Required<Pick<TextareaProps, 'rows' | 'maxRows' | 'extraRow' | 'disableAnimations'>>;
/**
 * Многострочное поле — это поле ввода, в котором текст отображается в несколько строк.
 */
export declare class Textarea extends React.Component<TextareaProps, TextareaState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static defaultProps: DefaultProps;
    clear: () => void;
    private getProps;
    private getRootSizeClassName;
    private getTextareaSizeClassName;
    state: {
        needsPolyfillPlaceholder: boolean;
        isCounterVisible: boolean;
    };
    private size;
    private reflowCounter;
    private styles;
    private emotion;
    private cx;
    private globalObject;
    private theme;
    private selectAllId;
    private node;
    private fakeNode;
    private counter;
    private layoutEvents;
    private textareaObserver;
    getRootNode: TGetRootNode;
    private setRootNode;
    private getAutoResizeThrottleWait;
    private isAnimationsDisabled;
    componentDidMount(): void;
    componentWillUnmount(): void;
    componentDidUpdate(prevProps: TextareaProps): void;
    render(): React.JSX.Element;
    /** Программно устанавливает фокус на поле.
     * @public
     */
    focus(): void;
    /** Программно снимает фокус с поля.
     * @public
     */
    blur(): void;
    getNode(): Nullable<HTMLTextAreaElement>;
    /** start - инициирует последовательное изменение числового значения: начинает повторяющееся увеличение/уменьшение, обычно используется при удерживании кнопки «+» или «−» для числового Input. end - останавливает ранее запущенное числоизменение, инициируемое numberStart.
     * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)
     * @public
     */
    setSelectionRange: (start: number, end: number) => void;
    /** Переводит фокус в поле (если ещё не в фокусе) и выделяет весь текст в нём.
     * Работает с типами `text`, `password`, `tel`, `search`, `url`.
     * @public
     */
    selectAll: () => void;
    private cancelDelayedSelectAll;
    private renderMain;
    private handleCloseCounterHelp;
    private handleKeyDown;
    private handleChange;
    private ref;
    private refFake;
    private refCounter;
    private autoResizeHandler;
    private autoResize;
    private handleCut;
    private handlePaste;
    private handleFocus;
}
export {};
