import React from 'react';
import PropTypes from 'prop-types';
import InputFoundation from '@douyinfe/semi-foundation/lib/es/input/foundation';
import BaseComponent from '../_base/baseComponent';
import '@douyinfe/semi-foundation/lib/es/input/input.css';
export type { InputGroupProps } from './inputGroup';
export type { TextAreaProps } from './textarea';
export type InputSize = 'small' | 'large' | 'default';
export type InputMode = 'password';
export type ValidateStatus = "default" | "error" | "warning" | "success";
export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'prefix' | 'size' | 'placeholder' | 'onFocus' | 'onBlur'> {
    'aria-label'?: React.AriaAttributes['aria-label'];
    'aria-describedby'?: React.AriaAttributes['aria-describedby'];
    'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
    'aria-invalid'?: React.AriaAttributes['aria-invalid'];
    'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
    'aria-required'?: React.AriaAttributes['aria-required'];
    addonBefore?: React.ReactNode;
    addonAfter?: React.ReactNode;
    borderless?: boolean;
    prefix?: React.ReactNode;
    suffix?: React.ReactNode;
    mode?: InputMode;
    value?: React.ReactText;
    defaultValue?: React.ReactText;
    disabled?: boolean;
    readonly?: boolean;
    type?: string;
    showClear?: boolean;
    hideSuffix?: boolean;
    placeholder?: React.ReactText;
    insetLabel?: React.ReactNode;
    insetLabelId?: string;
    size?: InputSize;
    className?: string;
    clearIcon?: React.ReactNode;
    style?: React.CSSProperties;
    validateStatus?: ValidateStatus;
    onClear?: (e: React.MouseEvent<HTMLDivElement>) => void;
    onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement>) => void;
    onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
    onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;
    onInput?: (e: React.MouseEvent<HTMLInputElement>) => void;
    onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
    onKeyUp?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
    onKeyPress?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
    onEnterPress?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
    inputStyle?: React.CSSProperties;
    getValueLength?: (value: string) => number;
    forwardRef?: ((instance: any) => void) | React.MutableRefObject<any> | null;
    preventScroll?: boolean;
    /** internal prop, DatePicker use it */
    showClearIgnoreDisabled?: boolean;
    onlyBorder?: number;
    /** Whether to enable composition mode. When enabled, onChange will not be triggered during IME composition, and will only be triggered once after composition ends */
    composition?: boolean;
}
export interface InputState {
    value: React.ReactText;
    cachedValue: React.ReactText;
    disabled: boolean;
    props: Record<string, any>;
    isFocus: boolean;
    isHovering: boolean;
    eyeClosed: boolean;
    minLength: number;
}
declare class Input extends BaseComponent<InputProps, InputState> {
    static propTypes: {
        'aria-label': PropTypes.Requireable<string>;
        'aria-labelledby': PropTypes.Requireable<string>;
        'aria-invalid': PropTypes.Requireable<boolean>;
        'aria-errormessage': PropTypes.Requireable<string>;
        'aria-describedby': PropTypes.Requireable<string>;
        'aria-required': PropTypes.Requireable<boolean>;
        addonBefore: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        clearIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        suffix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        mode: PropTypes.Requireable<"password">;
        value: PropTypes.Requireable<any>;
        defaultValue: PropTypes.Requireable<any>;
        disabled: PropTypes.Requireable<boolean>;
        readonly: PropTypes.Requireable<boolean>;
        autoFocus: PropTypes.Requireable<boolean>;
        type: PropTypes.Requireable<string>;
        showClear: PropTypes.Requireable<boolean>;
        hideSuffix: PropTypes.Requireable<boolean>;
        placeholder: PropTypes.Requireable<any>;
        size: PropTypes.Requireable<"default" | "small" | "large">;
        className: PropTypes.Requireable<string>;
        style: PropTypes.Requireable<object>;
        validateStatus: PropTypes.Requireable<"default" | "error" | "warning" | "success">;
        onClear: PropTypes.Requireable<(...args: any[]) => any>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onBlur: PropTypes.Requireable<(...args: any[]) => any>;
        onFocus: PropTypes.Requireable<(...args: any[]) => any>;
        onInput: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyUp: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyPress: PropTypes.Requireable<(...args: any[]) => any>;
        onEnterPress: PropTypes.Requireable<(...args: any[]) => any>;
        onCompositionStart: PropTypes.Requireable<(...args: any[]) => any>;
        onCompositionEnd: PropTypes.Requireable<(...args: any[]) => any>;
        onCompositionUpdate: PropTypes.Requireable<(...args: any[]) => any>;
        insetLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        insetLabelId: PropTypes.Requireable<string>;
        inputStyle: PropTypes.Requireable<object>;
        getValueLength: PropTypes.Requireable<(...args: any[]) => any>;
        preventScroll: PropTypes.Requireable<boolean>;
        borderless: PropTypes.Requireable<boolean>;
        composition: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        addonBefore: string;
        addonAfter: string;
        prefix: string;
        suffix: string;
        readonly: boolean;
        type: string;
        showClear: boolean;
        hideSuffix: boolean;
        placeholder: string;
        size: string;
        className: string;
        onClear: (...args: any[]) => void;
        onChange: (...args: any[]) => void;
        onBlur: (...args: any[]) => void;
        onFocus: (...args: any[]) => void;
        onInput: (...args: any[]) => void;
        onKeyDown: (...args: any[]) => void;
        onKeyUp: (...args: any[]) => void;
        onKeyPress: (...args: any[]) => void;
        onEnterPress: (...args: any[]) => void;
        onCompositionStart: (...args: any[]) => void;
        onCompositionEnd: (...args: any[]) => void;
        onCompositionUpdate: (...args: any[]) => void;
        validateStatus: string;
        borderless: boolean;
        composition: boolean;
    };
    inputRef: React.RefObject<HTMLInputElement>;
    prefixRef: React.RefObject<React.ReactNode>;
    suffixRef: React.RefObject<React.ReactNode>;
    foundation: InputFoundation;
    constructor(props: InputProps);
    get adapter(): {
        setValue: (value: string) => void;
        setEyeClosed: (value: boolean) => void;
        toggleFocusing: (isFocus: boolean) => void;
        focusInput: () => void;
        toggleHovering: (isHovering: boolean) => void;
        getIfFocusing: () => boolean;
        notifyChange: (cbValue: string, e: React.ChangeEvent<HTMLInputElement>) => void;
        notifyBlur: (val: string, e: React.FocusEvent<HTMLInputElement>) => void;
        notifyFocus: (val: string, e: React.FocusEvent<HTMLInputElement>) => void;
        notifyInput: (e: React.MouseEvent<HTMLInputElement>) => void;
        notifyKeyPress: (e: React.KeyboardEvent<HTMLInputElement>) => void;
        notifyKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;
        notifyKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;
        notifyEnterPress: (e: React.KeyboardEvent<HTMLInputElement>) => void;
        notifyClear: (e: React.MouseEvent<HTMLDivElement>) => void;
        notifyCompositionStart: (e: React.CompositionEvent<HTMLInputElement>) => void;
        notifyCompositionEnd: (e: React.CompositionEvent<HTMLInputElement>) => void;
        notifyCompositionUpdate: (e: React.CompositionEvent<HTMLInputElement>) => void;
        setMinLength: (minLength: number) => void;
        isEventTarget: (e: React.MouseEvent) => boolean;
        getContext(key: string): any;
        getContexts(): any;
        getProp(key: string): any;
        getProps(): InputProps;
        getState(key: string): any;
        getStates(): InputState;
        setState<K extends keyof InputState>(s: Pick<InputState, K>, callback?: any): void;
        getCache(c: string): any;
        getCaches(): any;
        setCache(key: any, value: any): void;
        stopPropagation(e: any): void;
        persistEvent: (event: any) => void;
    };
    static getDerivedStateFromProps(props: InputProps, state: InputState): Partial<InputState>;
    componentDidUpdate(prevProps: InputProps): void;
    componentDidMount(): void;
    handleClear: (e: React.MouseEvent<HTMLInputElement>) => void;
    handleClick: (e: React.MouseEvent<HTMLDivElement>) => void;
    handleMouseOver: (e: React.MouseEvent<HTMLDivElement>) => void;
    handleMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => void;
    handleModeChange: (mode: string) => void;
    handleClickEye: (e: React.MouseEvent<HTMLInputElement>) => void;
    handleMouseDown: (e: React.MouseEvent<HTMLInputElement>) => void;
    handleMouseUp: (e: React.MouseEvent<HTMLInputElement>) => void;
    handleModeEnterPress: (e: React.KeyboardEvent<HTMLDivElement>) => void;
    handleClickPrefixOrSuffix: (e: React.MouseEvent<HTMLInputElement>) => void;
    handlePreventMouseDown: (e: React.MouseEvent<HTMLInputElement>) => void;
    renderPrepend(): React.JSX.Element;
    renderAppend(): React.JSX.Element;
    renderClearBtn(): React.JSX.Element;
    renderModeBtn(): React.JSX.Element;
    renderPrefix(): React.JSX.Element;
    renderSuffix(suffixAllowClear: boolean): React.JSX.Element;
    getInputRef(): React.MutableRefObject<any> | React.RefObject<HTMLInputElement> | ((node: HTMLInputElement) => void);
    render(): React.JSX.Element;
}
declare const ForwardInput: React.ForwardRefExoticComponent<Omit<InputProps, "forwardRef"> & React.RefAttributes<HTMLInputElement>>;
export default ForwardInput;
export { Input };
