import React, { InputHTMLAttributes, ReactNode } from "react";
import { UiBaseProps } from "../types";
export interface InputUIProps extends Omit<UiBaseProps<never>, "value" | "onChange"> {
    className?: string;
    error?: string;
    controlId?: string;
    labelId?: string;
    descriptionId?: string;
    errorId?: string;
    required?: boolean;
    children: React.ReactNode;
}
export interface InputControlRenderProps {
    controlClassName?: string;
}
export interface InputControlProps {
    className?: string;
    endAdornment?: ReactNode;
    endAdornmentClassName?: string;
    endAdornmentWidth?: string;
    children: (props: InputControlRenderProps) => ReactNode;
}
export interface InputClearButtonProps {
    onClick?: () => void;
    disabled?: boolean;
    className?: string;
    ariaLabel?: string;
}
export declare function InputLoadingFrame(): React.JSX.Element;
export declare function InputUIFrame({ label, description, size, disabled, isLoading, className }: Pick<InputUIProps, "label" | "description" | "size" | "disabled" | "className"> & {
    isLoading?: boolean;
}): React.JSX.Element;
export declare function InputUILoading(props: Pick<InputUIProps, "label" | "description" | "size" | "disabled" | "className">): React.JSX.Element;
/**
 * Низкоуровневая оболочка поля ввода с общими элементами оформления.
 */
export declare function InputUI({ label, description, disabled, className, error, size, controlId, labelId, descriptionId, errorId, required, children }: InputUIProps): React.JSX.Element;
export declare function InputControl({ className, endAdornment, endAdornmentClassName, endAdornmentWidth, children }: InputControlProps): React.JSX.Element;
export declare function InputClearButton({ onClick, disabled, className, ariaLabel }: InputClearButtonProps): React.JSX.Element;
export interface BaseInputProps<T extends number | string | undefined, V = T> extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "value" | "type" | "defaultValue" | "onChange">, UiBaseProps<T, V> {
    onClear?: () => void;
    error?: string;
    onClearError?: () => void;
    defaultValue?: T;
    endAdornment?: ReactNode;
    endAdornmentClassName?: string;
    endAdornmentWidth?: string;
}
export interface InputTextProps extends BaseInputProps<string> {
    type?: "email" | "password" | "search" | "tel" | "text" | "url";
    /**
     * Регулярное выражение для валидации всего введённого значения.
     * При несоответствии поле подсвечивается как невалидное, но текст не удаляется.
     * Пример: `/^\d*$/`
     */
    allowedPattern?: RegExp;
}
/**
 * Базовое текстовое поле ввода для строковых значений.
 */
export declare function InputText({ label, description, disabled, className, onClear, error, onClearError, onChange, value, size, allowedPattern, endAdornment, endAdornmentClassName, endAdornmentWidth, type, ...props }: InputTextProps): React.JSX.Element;
/**
 * Числовое поле ввода с нормализацией значения и защитой от промежуточного невалидного ввода.
 */
export declare function InputNumber({ label, description, disabled, className, onClear, error, onClearError, onChange, value, size, endAdornment, endAdornmentClassName, endAdornmentWidth, ...props }: BaseInputProps<number | undefined>): React.JSX.Element;
/**
 * Совместимый алиас для `InputText`.
 */
export declare const Input: typeof InputText;
//# sourceMappingURL=Input.d.ts.map