import React, { useState } from 'react';
import { User, Sparkles, ChevronDown, ChevronRight, Copy, Check } from 'lucide-react';
import MarkdownRenderer from './MarkdownRenderer';
import ProcessFlow from './ProcessFlow';
import { ChatMessage } from '../types';
interface ChatMessageProps {
message: ChatMessage;
isLast?: boolean;
}
const ChatMessageItem = ({ message, isLast }: ChatMessageProps) => {
const isUser = message.role === 'user';
const [showThinking, setShowThinking] = useState(false);
const [copied, setCopied] = useState(false);
// Check if there is any thinking data to show
const hasThinkingData = message.analysis || (message.experts && message.experts.length > 0);
const handleCopy = () => {
if (!message.content) return;
navigator.clipboard.writeText(message.content);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
return (
{/* Avatar */}
{/* Content */}
{isUser ? 'You' : 'Prisma'}
{message.content && (
)}
{/* Thinking Process Accordion (Only for AI) */}
{!isUser && hasThinkingData && (
{showThinking && (
)}
)}
{/* Text Content */}
{message.content ? (
) : (
message.isThinking &&
)}
{/* Internal Monologue (Synthesis Thoughts) - Optional Footer */}
{!isUser && message.synthesisThoughts && (
Show Internal Monologue
{message.synthesisThoughts}
)}
);
};
export default ChatMessageItem;