import React from 'react'; import { motion } from 'framer-motion'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import { tomorrow, prism } from 'react-syntax-highlighter/dist/esm/styles/prism'; import { UserIcon, AcademicCapIcon } from '@heroicons/react/24/solid'; const MessageBubble = ({ message, darkMode, isLast }) => { const isUser = message.role === 'user'; const messageVariants = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0, transition: { duration: 0.3, ease: "easeOut" } } }; const formatTime = (timestamp) => { return new Date(timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); }; return ( {!isUser && (
)}
{isUser ? (

{message.content}

) : (
{String(children).replace(/\n$/, '')} ) : ( {children} ); }, p: ({ children }) =>

{children}

, ul: ({ children }) =>
    {children}
, ol: ({ children }) =>
    {children}
, li: ({ children }) =>
  • {children}
  • , h1: ({ children }) =>

    {children}

    , h2: ({ children }) =>

    {children}

    , h3: ({ children }) =>

    {children}

    , blockquote: ({ children }) => (
    {children}
    ), }} > {message.content}
    )}
    {/* Timestamp and Sources */}
    {formatTime(message.timestamp)} {!isUser && message.sources && message.sources.length > 0 && (
    Sources: {message.sources.map((source, index) => ( {source} ))}
    )}
    {isUser && (
    )}
    ); }; export default MessageBubble;