import { ReactNode, useCallback } from 'react' import { Message } from '@/api/lightrag' import useTheme from '@/hooks/useTheme' import Button from '@/components/ui/Button' import { cn } from '@/lib/utils' import ReactMarkdown from 'react-markdown' import remarkGfm from 'remark-gfm' import rehypeReact from 'rehype-react' import remarkMath from 'remark-math' import type { Element } from 'hast' import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter' import { oneLight, oneDark } from 'react-syntax-highlighter/dist/cjs/styles/prism' import { LoaderIcon, CopyIcon } from 'lucide-react' export type MessageWithError = Message & { isError?: boolean } export const ChatMessage = ({ message }: { message: MessageWithError }) => { const handleCopyMarkdown = useCallback(async () => { if (message.content) { try { await navigator.clipboard.writeText(message.content) } catch (err) { console.error('Failed to copy:', err) } } }, [message]) return (
{message.content.length === 0 &&{message.content} {message.role === 'assistant' && message.content.length > 0 && ( )}
{children}
)
}