import React, { ChangeEventHandler, Component, CSSProperties, FormEventHandler, ReactNode } from 'react';
import PropTypes from 'prop-types';
import Group from './Group';
import Search from './Search';
import TextArea from './TextArea';
import { Size } from '../_util/enum';
import { ConfigContextValue } from '../config-provider/ConfigContext';
export interface AbstractInputProps {
    prefixCls?: string;
    className?: string;
    defaultValue?: any;
    value?: any;
    tabIndex?: number;
    style?: CSSProperties;
    label?: ReactNode;
    showLengthInfo?: boolean;
    showPasswordEye?: boolean;
}
export interface InputProps extends AbstractInputProps {
    placeholder?: string;
    copy?: boolean;
    type?: string;
    id?: string;
    name?: string;
    size?: Size;
    maxLength?: number;
    disabled?: boolean;
    readOnly?: boolean;
    addonBefore?: ReactNode;
    addonAfter?: ReactNode;
    onPressEnter?: FormEventHandler<HTMLInputElement>;
    onKeyDown?: FormEventHandler<HTMLInputElement>;
    onKeyUp?: FormEventHandler<HTMLInputElement>;
    onChange?: ChangeEventHandler<HTMLInputElement>;
    onClick?: FormEventHandler<HTMLInputElement>;
    onFocus?: FormEventHandler<HTMLInputElement>;
    onBlur?: FormEventHandler<HTMLInputElement>;
    onInput?: FormEventHandler<HTMLInputElement>;
    onCopy?: (value: any) => void;
    autoComplete?: string;
    prefix?: ReactNode;
    suffix?: ReactNode;
    spellCheck?: boolean;
    autoFocus?: boolean;
    focused?: boolean;
    border?: boolean;
}
export interface InputState {
    value?: any;
    focused?: boolean;
    showPasswordEye?: boolean;
    showPassword?: boolean;
}
export default class Input extends Component<InputProps, any> {
    static displayName: string;
    static get contextType(): React.Context<ConfigContextValue>;
    static Group: typeof Group;
    static Search: typeof Search;
    static TextArea: typeof TextArea;
    static defaultProps: {
        type: string;
        disabled: boolean;
        readOnly: boolean;
        showLengthInfo: boolean;
        showPasswordEye: boolean;
        border: boolean;
    };
    static propTypes: {
        type: PropTypes.Requireable<string>;
        id: PropTypes.Requireable<string | number>;
        label: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        size: PropTypes.Requireable<Size>;
        maxLength: PropTypes.Requireable<string | number>;
        disabled: PropTypes.Requireable<boolean>;
        value: PropTypes.Requireable<any>;
        defaultValue: PropTypes.Requireable<any>;
        className: PropTypes.Requireable<string>;
        addonBefore: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        prefixCls: PropTypes.Requireable<string>;
        autosize: PropTypes.Requireable<boolean | object>;
        onPressEnter: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyUp: PropTypes.Requireable<(...args: any[]) => any>;
        onFocus: PropTypes.Requireable<(...args: any[]) => any>;
        onBlur: PropTypes.Requireable<(...args: any[]) => any>;
        prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        suffix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        copy: PropTypes.Requireable<boolean>;
        onCopy: PropTypes.Requireable<(...args: any[]) => any>;
        readOnly: PropTypes.Requireable<boolean>;
        focused: PropTypes.Requireable<boolean>;
        border: PropTypes.Requireable<boolean>;
        showLengthInfo: PropTypes.Requireable<boolean>;
        showPasswordEye: PropTypes.Requireable<boolean>;
    };
    context: ConfigContextValue;
    state: InputState;
    input: HTMLInputElement;
    rendered: HTMLDivElement;
    prefix: HTMLSpanElement;
    suffix: HTMLSpanElement;
    constructor(props: any, context: ConfigContextValue);
    handleKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;
    componentDidMount(): void;
    componentWillReceiveProps(nextProps: InputProps): void;
    componentDidUpdate(): void;
    setRenderedStyle(): void;
    handleFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
    handleBlur: (e: React.FocusEvent<HTMLInputElement>) => void;
    handleChange: (e: any) => void;
    handleCopy: () => void;
    handleTogglePassword: () => void;
    saveInput: (node: HTMLInputElement) => void;
    saveRenderedRef: (node: HTMLDivElement) => void;
    savePrefix: (node: HTMLSpanElement) => void;
    saveSuffix: (node: HTMLSpanElement) => void;
    focus(): void;
    blur(): void;
    getPrefixCls(): string;
    getInputClassName(): string;
    renderCopyIcon(): JSX.Element | null;
    renderShowPassword(): JSX.Element | null;
    renderInput(): JSX.Element;
    getLengthInfo(): JSX.Element | null;
    getLabel(): {} | null | undefined;
    renderFloatLabel(): ReactNode;
    getSizeClassName(name: string): string;
    hasValue(): boolean;
    renderPlaceholder(): JSX.Element | undefined;
    render(): JSX.Element;
}
