import { ReactNode, TextareaHTMLAttributes } from 'react';
import { MenuProps } from '../Menu/types';
export type AttachedFile = {
id: string;
name: string;
type: 'image' | 'pdf' | 'csv' | 'text' | 'other';
size?: number;
url?: string;
preview?: string;
};
export type TopQuery = {
id: string;
text: string;
};
export type ChatInputProps = Omit, 'onChange' | 'value'> & {
value?: string;
slot1?: ReactNode;
slot2?: ReactNode;
onChange?: (value: string) => void;
onSend?: (message: string, files: AttachedFile[]) => void;
onAttachFiles?: (files: File[]) => void;
onVoiceRecord?: () => void;
onFileRemove?: (fileId: string) => void;
onFileClick?: (file: AttachedFile) => void;
placeholder?: string;
disabled?: boolean;
maxLength?: number;
autoResize?: boolean;
attachedFiles?: AttachedFile[];
topQueries?: TopQuery[];
onTopQuerySelect?: (query: TopQuery) => void;
topQueriesMaxHeight?: number;
attachButtonIcon?: ReactNode;
voiceButtonIcon?: ReactNode;
sendButtonIcon?: ReactNode;
overflowMenuProps?: Partial;
};
export type ChatInputTokens = {
container: {
backgroundColor: string;
border: string;
borderRadius: string;
padding: string;
gap: string;
minHeight: string;
maxHeight: string;
};
textarea: {
backgroundColor: string;
color: string;
fontSize: string;
lineHeight: string;
padding: string;
border: string;
borderRadius: string;
placeholder: {
color: string;
};
resize: string;
fontFamily: string;
};
filesContainer: {
gap: string;
padding: string;
maxHeight: string;
overflowBehavior: string;
};
bottomActions: {
padding: string;
gap: string;
justifyContent: string;
};
actionButton: {
size: string;
padding: string;
borderRadius: string;
backgroundColor: {
default: string;
hover: string;
active: string;
disabled: string;
};
color: {
default: string;
hover: string;
active: string;
disabled: string;
};
border: string;
};
overflowTag: {
backgroundColor: string;
color: string;
border: string;
borderRadius: string;
padding: string;
fontSize: string;
fontWeight: string;
cursor: string;
};
};