Mercurial
diff love/epi/src/components/ChatUI/MessageItem.tsx @ 38:cf9caa4abc3e
[Love] FE and BE. Can chat and render images. Also created MCP for powerpoint generations.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 01 Dec 2025 20:35:56 -0800 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/love/epi/src/components/ChatUI/MessageItem.tsx Mon Dec 01 20:35:56 2025 -0800 @@ -0,0 +1,48 @@ +import { User, Bot } from 'lucide-react'; +import type { Message } from '@/atoms/chatAtoms'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; + +interface MessageItemProps { + message: Message; +} + +export function MessageItem({ message }: MessageItemProps) { + const isUser = message.role === 'user'; + + return ( + <div + className={`flex gap-4 py-4 px-6 ${ + isUser ? 'bg-gray-50 dark:bg-gray-800/30' : '' + }`} + > + <div className="flex-shrink-0"> + {isUser ? ( + <div className="w-8 h-8 rounded-full bg-blue-500 flex items-center justify-center"> + <User className="w-5 h-5 text-white" /> + </div> + ) : ( + <div className="w-8 h-8 rounded-full bg-green-500 flex items-center justify-center"> + <Bot className="w-5 h-5 text-white" /> + </div> + )} + </div> + + <div className="flex-1 prose prose-sm text-white dark:prose-invert max-w-none"> + {message.image_url && ( + <div className="my-4 -mx-4 sm:mx-0 rounded-lg overflow-hidden"> + <img + src={message.image_url} + alt="Uploaded or generated content" + className="max-w-full h-auto rounded-lg shadow-lg" + loading="lazy" + /> + </div> + )} + <ReactMarkdown remarkPlugins={[remarkGfm]}> + {message.content} + </ReactMarkdown> + </div> + </div> + ); +}