/** * 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'}
{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) => ( ))}
); }