import { useState } from 'react' import ReactMarkdown from 'react-markdown' export default function MessageBubble({ message }) { const [copied, setCopied] = useState(false) const isUser = message.role === 'user' const isBot = message.role === 'assistant' const handleCopy = async () => { try { await navigator.clipboard.writeText(message.content) setCopied(true) setTimeout(() => setCopied(false), 2000) } catch (_) {} } return (
{/* Avatar */} {isBot && (
)} {isUser && (
)}
{/* Bubble */} {message.loading ? ( /* ── Loading State ──────────────────────── */
{message.step && ( {message.step} )}
) : message.isError ? ( /* ── Error State ────────────────────────── */
{message.content}
) : ( /* ── Normal Message ─────────────────────── */
{isBot ? ( {message.content} ) : ( message.isFile ? ( {message.content} ) : ( message.content ) )}
)} {/* Meta row */} {!message.loading && message.content && (
{message.time} {isBot && !message.isError && ( )}
)}
) }