Mercurial
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 37:fb9bcd3145cb | 38:cf9caa4abc3e |
|---|---|
| 1 import { User, Bot } from 'lucide-react'; | |
| 2 import type { Message } from '@/atoms/chatAtoms'; | |
| 3 import ReactMarkdown from 'react-markdown'; | |
| 4 import remarkGfm from 'remark-gfm'; | |
| 5 | |
| 6 interface MessageItemProps { | |
| 7 message: Message; | |
| 8 } | |
| 9 | |
| 10 export function MessageItem({ message }: MessageItemProps) { | |
| 11 const isUser = message.role === 'user'; | |
| 12 | |
| 13 return ( | |
| 14 <div | |
| 15 className={`flex gap-4 py-4 px-6 ${ | |
| 16 isUser ? 'bg-gray-50 dark:bg-gray-800/30' : '' | |
| 17 }`} | |
| 18 > | |
| 19 <div className="flex-shrink-0"> | |
| 20 {isUser ? ( | |
| 21 <div className="w-8 h-8 rounded-full bg-blue-500 flex items-center justify-center"> | |
| 22 <User className="w-5 h-5 text-white" /> | |
| 23 </div> | |
| 24 ) : ( | |
| 25 <div className="w-8 h-8 rounded-full bg-green-500 flex items-center justify-center"> | |
| 26 <Bot className="w-5 h-5 text-white" /> | |
| 27 </div> | |
| 28 )} | |
| 29 </div> | |
| 30 | |
| 31 <div className="flex-1 prose prose-sm text-white dark:prose-invert max-w-none"> | |
| 32 {message.image_url && ( | |
| 33 <div className="my-4 -mx-4 sm:mx-0 rounded-lg overflow-hidden"> | |
| 34 <img | |
| 35 src={message.image_url} | |
| 36 alt="Uploaded or generated content" | |
| 37 className="max-w-full h-auto rounded-lg shadow-lg" | |
| 38 loading="lazy" | |
| 39 /> | |
| 40 </div> | |
| 41 )} | |
| 42 <ReactMarkdown remarkPlugins={[remarkGfm]}> | |
| 43 {message.content} | |
| 44 </ReactMarkdown> | |
| 45 </div> | |
| 46 </div> | |
| 47 ); | |
| 48 } |