import { ChangeEvent, FocusEventHandler, HTMLAttributes, InputHTMLAttributes, KeyboardEventHandler, MutableRefObject, ReactNode, RefCallback } from 'react';
import { InfoIcon, Label, MessageWithIcon, RequiredIndicator, Unit } from './components';
export type TextInputChangeReason = 'clear' | 'change';
export type TextInputNextProps = {
    label?: ReactNode;
    value?: string | number;
    size?: 'small' | 'medium' | 'large';
    labelPlacement?: 'top' | 'start' | 'end';
    /**
     * Change handler. `TextInputChangeReason` utility type is provided
     * @param value
     * @param changeReason
     * @param event is not present when input is cleared via clear button
     */
    onChange?: (value: string, changeReason: TextInputChangeReason, event?: ChangeEvent<HTMLInputElement>) => void;
    disabled?: boolean;
    /**
     * Underlying `input`'s element `type` attribute
     */
    inputType?: 'text' | 'email' | 'password' | 'number' | 'phone' | 'url' | 'search';
    /**
     * Input mode that hints at the type of data that might be entered by the user while editing the element or its contents. This allows a browser to display an appropriate virtual keyboard.
     */
    inputMode?: HTMLAttributes<HTMLInputElement>['inputMode'];
    status?: 'error' | 'loading';
    message?: ReactNode;
    onFocus?: FocusEventHandler<HTMLInputElement>;
    onBlur?: FocusEventHandler;
    onKeyDown?: KeyboardEventHandler;
    onKeyUp?: KeyboardEventHandler;
    clearable?: boolean;
    /**
     * Controls if the field should keep/gain focus after "Clear" button is clicked
     */
    focusOnClear?: boolean;
    placeholder?: string;
    prefix?: ReactNode;
    suffix?: ReactNode;
    /**
     * Ref to an underlying `input` element
     */
    inputRef?: RefCallback<HTMLInputElement | null> | MutableRefObject<HTMLInputElement | null> | null;
    /**
     * Ref to input container that contains `input` and its affixes
     * Useful for positioning of popovers
     */
    inputContainerRef?: RefCallback<HTMLDivElement | null> | MutableRefObject<HTMLDivElement | null> | null;
    readOnly?: boolean;
    /**
     * If `true` will focus on the field on render. Useful for modals, but may be detrimental to a11y
     */
    autoFocus?: boolean;
    /**
     * Escape hatch to provide arbitrary html attributes to `input`
     */
    htmlAttributes?: Omit<Partial<InputHTMLAttributes<HTMLInputElement>>, 'type' | 'onFocus' | 'onBlur' | 'onKeyDown' | 'onKeyUp' | 'placeholder' | 'readOnly' | 'disabled' | 'value' | 'onChange' | 'inputMode' | 'autoFocus'>;
    /**
     * An escape hatch to tweak styling of internal elements
     */
    elementsClassNames?: Partial<{
        label: string;
        input: string;
        inputContainer: string;
        prefix: string;
        suffix: string;
        message: string;
        numberStepButtons: string;
    }>;
    className?: string;
    testId?: string;
};
declare const TextInputBase: import("react").ForwardRefExoticComponent<TextInputNextProps & import("react").RefAttributes<HTMLLabelElement>>;
type TextInputNextType = typeof TextInputBase & {
    InfoIcon: typeof InfoIcon;
    MessageWithIcon: typeof MessageWithIcon;
    RequiredIndicator: typeof RequiredIndicator;
    Unit: typeof Unit;
    Label: typeof Label;
};
export declare const TextInputNext: TextInputNextType;
export {};
//# sourceMappingURL=TextInputNext.d.ts.map