import * as react from 'react';
import { TextareaHTMLAttributes } from 'react';
import { InputVariantProps, SlotsToClasses, InputSlots } from '@trail-ui/theme';
import { TextareaHeightChangeMeta } from 'react-textarea-autosize';

interface TextAreaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'color' | 'size'>, InputVariantProps {
    /**
     * Whether the textarea should automatically grow vertically to accomodate content.
     * @default false
     */
    disableAutosize?: boolean;
    /**
     * Minimum number of rows to show for textarea
     * @default 3
     */
    minRows?: number;
    /**
     * Maximum number of rows up to which the textarea can grow
     * @default 8
     */
    maxRows?: number;
    /**
     * Reuse previously computed measurements when computing height of textarea.
     * @default false
     */
    cacheMeasurements?: boolean;
    /**
     * Function invoked on textarea height change, with height as first argument.
     * The second function argument is an object containing additional information that
     * might be useful for custom behaviors. Current options include `{ rowHeight: number }`.
     *
     * @param height - The height of the textarea
     * @param meta - Additional information about the height change
     */
    onHeightChange?: (height: number, meta: TextareaHeightChangeMeta) => void;
    /**
     * Classes object to style the textarea and its children.
     */
    classNames?: SlotsToClasses<InputSlots>;
    /**
     * Callback fired when the value is cleared.
     * if you pass this prop, the clear button will be shown.
     */
    onClear?: () => void;
    'data-value'?: string;
}
/**
 * A textarea allows a user to input mult-line text.
 */
declare const _TextArea: react.ForwardRefExoticComponent<TextAreaProps & react.RefAttributes<HTMLTextAreaElement>>;

export { _TextArea as TextArea, TextAreaProps };
