import type { SupportedLanguage } from "@choiceform/design-system";
import type { HTMLAttributes, ReactNode } from "react";
import type { ChatMessage, Attachment, ContentSegment, Status, ContentType } from "~/types";
export interface ResponseItemProps {
    children: ReactNode;
    className?: string;
    message?: ChatMessage;
}
export interface ResponseContextValue {
    hasActions: boolean;
    hasAvatar: boolean;
    hasError?: boolean;
    hasTimestamp: boolean;
    isPending: boolean;
    isStreaming: boolean;
    language?: SupportedLanguage;
    message: ChatMessage;
    onCopyMessage?: (messageId: string) => Promise<void>;
    onRegenerate?: () => void;
    onRegenerateMessage?: (messageId: string, callback?: () => void) => Promise<void>;
    showActions: boolean;
}
export interface ResponseInjectedProps {
    response?: ResponseContextValue;
}
export interface ResponseActionsProps {
    children?: ReactNode;
    hasAvatar?: boolean;
    messageId?: string;
    onCopyMessage?: (messageId: string) => Promise<void>;
    onDeleteMessage?: (messageId: string) => Promise<void>;
    onRegenerate?: () => void;
    onRegenerateMessage?: (messageId: string, callback?: () => void) => Promise<void>;
    showActions?: boolean;
}
export interface ResponseAvatarProps {
    children?: ReactNode | ReactNode;
    className?: string;
    color?: string;
    name?: string;
    photo?: string;
}
export interface ResponseTimestampProps {
    className?: string;
    hasActions?: boolean;
    hasAvatar?: boolean;
    messageId?: string;
    showActions?: boolean;
}
export interface MessageRendererProps {
    content: string;
    contentSegments?: ContentSegment[];
    contentType?: (typeof ContentType)[keyof typeof ContentType];
    endTime?: Date;
    isStreaming?: boolean;
    metadata?: {
        [key: string]: unknown;
        planSteps?: Array<{
            completed: boolean;
            description: string;
            id: string;
        }>;
    };
    onConfirm?: (segmentId: string, confirmed: boolean) => void;
    startTime?: Date;
    status?: (typeof Status)[keyof typeof Status];
}
export interface SegmentRendererProps {
    endTime?: Date;
    isStreaming?: boolean;
    onConfirm?: (segmentId: string, confirmed: boolean) => void;
    segment: ContentSegment;
    startTime?: Date;
}
export interface MessageAttachmentsProps {
    attachments: Attachment[];
    className?: string;
}
export interface MessageMermaidDiagramProps extends HTMLAttributes<HTMLDivElement> {
    children?: ReactNode;
    diagram: string;
    isStreaming?: boolean;
    theme?: "light" | "dark" | "auto";
}
export interface ResponseStateReturn {
    isHovered: boolean;
    isPending: boolean;
    isStreaming: boolean;
    itemRef: React.RefObject<HTMLDivElement>;
    renderedContent: string | undefined;
    showActions: boolean;
}
export interface ResponseTvVariants {
    hasActions?: boolean;
    hasAvatar?: boolean;
    hasError?: boolean;
    hasTimestamp?: boolean;
}
export interface ActionsTvVariants {
    hasAvatar?: boolean;
    ratingActions?: boolean;
    showActions?: boolean;
}
export interface ErrorTvVariants {
    hasActions?: boolean;
    hasAvatar?: boolean;
    hasTimestamp?: boolean;
}
export interface ResponseErrorProps {
    hasActions?: boolean;
    hasAvatar?: boolean;
    hasTimestamp?: boolean;
    messageId?: string;
}
export interface TimestampTvVariants {
    hasActions?: boolean;
    hasAvatar?: boolean;
    showActions?: boolean;
}
