import { ReactNode, TextareaHTMLAttributes } from 'react';
import { ChatInputV2TokensType } from './ChatInputV2.tokens';
export type ChatInputV2AttachedFile = {
id: string;
name: string;
type: 'image' | 'pdf' | 'csv' | 'text' | 'other';
size?: number;
url?: string;
preview?: string;
};
export type ChatInputV2TopQuery = {
id: string;
text: string;
};
export type ChatInputV2Props = {
value?: string;
topQueries?: ChatInputV2TopQuery[];
onTopQuerySelect?: (query: ChatInputV2TopQuery) => void;
placeholder?: string;
onChange: (value: string) => void;
/** Renders full-width above the field row (e.g. context, filters, banners). */
topContent?: ReactNode;
/** Renders in the secondary control area (e.g. voice / send) next to the attach control (desktop) or the textarea end (mobile). */
secondaryAction?: ReactNode;
onSecondaryActionClick?: () => void;
topQueriesMaxHeight?: number;
/** Max textarea height in px (ChatGPT-style auto-grow). Defaults to token `input.maxHeight`. */
textareaMaxHeight?: number;
disabled?: boolean;
attachedFiles?: ChatInputV2AttachedFile[];
/** New files from the hidden file input (append in parent state). */
onAttachFiles?: (files: File[]) => void;
/** Remove by id — use this for chip dismiss; do not use `onAttachFiles` to “replace” the list. */
onFileRemove?: (fileId: string) => void;
onFileClick?: (file: ChatInputV2AttachedFile) => void;
onEnter?: () => void;
} & Omit, 'size' | 'style' | 'className' | 'onFocus' | 'onBlur' | 'cols' | 'onChange'>;
export type MobileChatInputV2Props = {
disabled?: boolean;
value: string;
onChange?: (value: string) => void;
topContent?: ReactNode;
secondaryAction?: ReactNode;
placeholder?: string;
attachedFiles?: ChatInputV2AttachedFile[];
handleAttachClick?: () => void;
onFileRemove?: (fileId: string) => void;
/** Invoked when a chip label is activated (inline or overflow); forwarded to `ChatInputV2AttachmentRow`. */
onFileClick?: (file: ChatInputV2AttachedFile) => void;
onSecondaryActionClick?: () => void;
id?: string;
webTokens: ChatInputV2TokensType;
onEnter?: () => void;
} & Omit, 'size' | 'className' | 'onFocus' | 'onBlur' | 'cols' | 'onChange'>;