import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import remarkMath from "remark-math"; import rehypeKatex from "rehype-katex"; import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; import { oneDark, oneLight, } from "react-syntax-highlighter/dist/esm/styles/prism"; import { useState } from "react"; import { Copy, Check } from "lucide-react"; import { cn } from "@/lib/utils"; import "katex/dist/katex.min.css"; interface MessageBubbleProps { content: string; role: "human" | "ai"; } function CodeBlock({ language, children, }: { language: string; children: string; }) { const [copied, setCopied] = useState(false); const handleCopy = () => { navigator.clipboard.writeText(children).then(() => { setCopied(true); setTimeout(() => setCopied(false), 2000); }); }; // Detect dark mode via document class const isDark = typeof document !== "undefined" && document.documentElement.classList.contains("dark"); return (
{children}
; }, // Links a({ href, children }) { return ( {children} ); }, // Blockquote blockquote({ children }) { return ({children}); }, // Horizontal rule hr() { return