/** * Chat Message Component */ import { User, Bot, Copy, Check } from 'lucide-react'; import { motion } from 'framer-motion'; import { useState } from 'react'; import { cn } from '../utils/cn'; import { fadeInUp, smoothTransition } from '../utils/animations'; import { Markdown } from './Markdown'; import type { Message } from '../api/client.js'; interface ChatMessageProps { message: Message; } export function ChatMessage({ message }: ChatMessageProps) { const isUser = message.role === 'user'; const [copied, setCopied] = useState(false); const handleCopy = async () => { await navigator.clipboard.writeText(message.content); setCopied(true); setTimeout(() => setCopied(false), 2000); }; return ( {isUser ? : } {isUser ? 'You' : 'AI Assistant'} {copied ? : } {isUser ? ( // 用户消息:保持原样显示 {message.content} ) : ( // AI 消息:Markdown 渲染 )} ); } interface StreamingMessageProps { content: string; } export function StreamingMessage({ content }: StreamingMessageProps) { return ( AI Assistant ); } export function TypingIndicator() { return ( AI Assistant {[0, 1, 2].map((i) => ( ))} ); }