/** @module @airtable/blocks/ui: Input */ /** */
import * as PropTypes from 'prop-types';
import * as React from 'react';
import { EnumType } from '../private_utils';
import { MaxWidthProps, MinWidthProps, WidthProps, FlexItemSetProps, PositionSetProps, MarginProps } from './system';
import { TooltipAnchorProps } from './types/tooltip_anchor_props';
import { ControlSizeProp } from './control_sizes';
export declare const ValidInputType: {
    number: "number";
    search: "search";
    email: "email";
    time: "time";
    text: "text";
    url: "url";
    date: "date";
    week: "week";
    month: "month";
    "datetime-local": "datetime-local";
    password: "password";
    tel: "tel";
};
/**
 * Style props shared between the {@link Input} and {@link InputSynced} components. Accepts:
 * * {@link FlexItemSetProps}
 * * {@link MarginProps}
 * * {@link MaxWidthProps}
 * * {@link MinWidthProps}
 * * {@link PositionSetProps}
 * * {@link WidthProps}
 *
 * @noInheritDoc
 */
export interface InputStyleProps extends MaxWidthProps, MinWidthProps, WidthProps, FlexItemSetProps, PositionSetProps, MarginProps {
}
export declare const inputStylePropTypes: {
    [x: string]: PropTypes.Validator<any>;
};
/**
 * Props shared between the {@link Input} and {@link InputSynced} components.
 *
 * @noInheritDoc
 */
export interface SharedInputProps extends InputStyleProps, TooltipAnchorProps<HTMLInputElement> {
    /** The size of the input. Defaults to `default`. */
    size?: ControlSizeProp;
    /** The `type` for the input. Defaults to `text`. */
    type?: EnumType<typeof SupportedInputType>;
    /** The `disabled` attribute. */
    disabled?: boolean;
    /** The `required` attribute. */
    required?: boolean;
    /** The `spellcheck` attribute. */
    spellCheck?: boolean;
    /** The `tabindex` attribute. */
    tabIndex?: number;
    /** The `name` attribute. */
    name?: string;
    /** The `id` attribute. */
    id?: string;
    /** The `autoFocus` attribute. */
    autoFocus?: boolean;
    /** The `max` attribute. */
    max?: number | string;
    /** The `maxLength` attribute. */
    maxLength?: number;
    /** The placeholder for the input. */
    placeholder?: string;
    /** The `minLength` attribute. */
    minLength?: number;
    /** The `step` attribute. */
    step?: number | string;
    /** The `pattern` attribute. */
    pattern?: string;
    /** The `readOnly` attribute. */
    readOnly?: boolean;
    /** The `autoComplete` attribute. */
    autoComplete?: string;
    /** Additional styles to apply to the input. */
    style?: React.CSSProperties;
    /** Additional class names to apply to the input, separated by spaces. */
    className?: string;
    /** A function to be called when the input changes. */
    onChange?(e: React.ChangeEvent<HTMLInputElement>): unknown;
    /** A function to be called when the input loses focus. */
    onBlur?(e: React.FocusEvent<HTMLInputElement>): unknown;
    /** A function to be called when the input gains focus. */
    onFocus?(e: React.FocusEvent<HTMLInputElement>): unknown;
    /** A space separated list of label element IDs. */
    ['aria-labelledby']?: string;
    /** A space separated list of description element IDs. */
    ['aria-describedby']?: string;
    /** The `min` attribute. */
    min?: number | string;
}
export declare const SupportedInputType: {
    number: "number";
    search: "search";
    email: "email";
    time: "time";
    text: "text";
    url: "url";
    date: "date";
    week: "week";
    month: "month";
    "datetime-local": "datetime-local";
    password: "password";
    tel: "tel";
};
/**
 * Supported types for the {@link Input} component. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#%3Cinput%3E_types) for more information.
 */
declare type SupportedInputType = EnumType<typeof SupportedInputType>;
export declare const sharedInputPropTypes: {
    onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
    onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
    onClick: PropTypes.Requireable<(...args: any[]) => any>;
    hasOnClick: PropTypes.Requireable<boolean>;
    size: PropTypes.Validator<any>;
    type: PropTypes.Requireable<"number" | "search" | "email" | "time" | "text" | "url" | "date" | "week" | "month" | "datetime-local" | "password" | "tel">;
    placeholder: PropTypes.Requireable<string>;
    disabled: PropTypes.Requireable<boolean>;
    required: PropTypes.Requireable<boolean>;
    spellCheck: PropTypes.Requireable<boolean>;
    tabIndex: PropTypes.Requireable<number>;
    autoFocus: PropTypes.Requireable<boolean>;
    max: PropTypes.Requireable<string | number>;
    maxLength: PropTypes.Requireable<number>;
    min: PropTypes.Requireable<string | number>;
    minLength: PropTypes.Requireable<number>;
    step: PropTypes.Requireable<string | number>;
    pattern: PropTypes.Requireable<string>;
    readOnly: PropTypes.Requireable<boolean>;
    autoComplete: PropTypes.Requireable<string>;
    onChange: PropTypes.Requireable<(...args: any[]) => any>;
    onBlur: PropTypes.Requireable<(...args: any[]) => any>;
    onFocus: PropTypes.Requireable<(...args: any[]) => any>;
    style: PropTypes.Requireable<object>;
    className: PropTypes.Requireable<string>;
    'aria-labelledby': PropTypes.Requireable<string>;
    'aria-describedby': PropTypes.Requireable<string>;
};
/**
 * Props for the {@link Input} component. Also accepts:
 * * {@link InputStyleProps}
 *
 * @docsPath UI/components/Input
 */
interface InputProps extends SharedInputProps {
    /** The input's current value. */
    value: string;
}
declare const ForwardedRefInput: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
export default ForwardedRefInput;
