import { type ReactNode, type TextareaHTMLAttributes } from 'react';
import { type VariantProps } from 'class-variance-authority';
declare const rootVariants: (props?: ({
size?: "sm" | "md" | "lg" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
type NativeTextareaProps = Omit, 'size' | 'onSubmit' | 'children'>;
/** Curated imperative handle for agent / external automation. */
export interface ChatInputHandle {
getValue: () => string;
isEmpty: () => boolean;
setValue: (value: string) => void;
clear: () => void;
submit: () => void;
focus: () => void;
}
export interface ChatInputProps extends NativeTextareaProps, VariantProps {
/** Invoked when the user submits (Cmd/Ctrl+Enter, or send button). */
onSubmit?: (text: string) => void;
/** Maximum allowed characters (grapheme clusters via Intl.Segmenter when available). */
maxLength?: number;
/** When true, plain Enter submits and Shift+Enter inserts a newline.
* Default false (Enter inserts newline; Cmd/Ctrl+Enter submits). */
submitOnEnter?: boolean;
/** Minimum visible rows. Default 1. */
minRows?: number;
/** Maximum visible rows before the field scrolls. Default 8. */
maxRows?: number;
/** Optional attachment handler — when provided, renders the attachment button. */
onAttach?: (files: FileList) => void;
/** `accept` forwarded to the hidden file input. */
accept?: string;
/** Controls whether the textarea is disabled and submit is blocked. */
disabled?: boolean;
/** Optional slot placed between the textarea and the send button. */
toolbar?: ReactNode;
/** Visible label above the textarea. When omitted, a visually-hidden label is used. */
label?: string;
}
export declare const ChatInput: import("react").ForwardRefExoticComponent>;
export {};
//# sourceMappingURL=chat-input.d.ts.map