import { FiCopy, FiRefreshCw } from 'react-icons/fi'; import { FilePreview } from './file-preview'; import { StreamingMessage } from './streaming-message'; import { ChatMessage } from '../../types/chat'; export interface ChatMessageProps { message: ChatMessage; isStreaming?: boolean; onRetry?: () => void; onCopy?: () => void; onDelete?: () => void; showActions?: boolean; } export function ChatMessageComponent({ message, isStreaming = false, onRetry, onCopy, showActions = true, }: ChatMessageProps) { const isUser = message.role === 'user'; const files = message.metadata?.files || []; const handleCopy = () => { if (message.content) { navigator.clipboard.writeText(message.content); onCopy?.(); } }; const formatTime = (dateString: string) => { const date = new Date(dateString); return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); }; return (
{isStreaming ? ( ) : (

{message.content}

)} {files.length > 0 && (
{files.map((file, index) => ( ))}
)} {message.audioUrl && (
)}
{formatTime(message.createdAt)} {showActions && !isUser && (
{onCopy && ( )} {onRetry && ( )}
)}
); }