Chat Conversation
manifest-ui/chat-conversationFreeBlock
Full chat conversation component with multiple message types.
Install it
npx shadcn@latest add https://ui.manifest.build/r/chat-conversation.jsonSource
1'use client'23import { ImageMessageBubble, MessageBubble } from './message-bubble'45// Import types from shared types file to avoid circular dependencies6import type { ChatMessage } from './types'7// Re-export for backward compatibility8export type { ChatMessage } from './types'910import { demoMessages } from './demo/messaging'1112/**13 * ═══════════════════════════════════════════════════════════════════════════14 * ChatConversationProps15 * ═══════════════════════════════════════════════════════════════════════════16 *17 * Props for configuring a chat conversation component that displays multiple18 * messages with support for text and image message types.19 */20export interface ChatConversationProps {21 data?: {22 /** Array of chat messages to display in the conversation. */23 messages?: ChatMessage[]24 }25}2627/**28 * A chat conversation component displaying multiple messages.29 * Supports text and image messages with avatars and status indicators.30 *31 * Features:32 * - Text and image message types33 * - Message status indicators (sent, delivered, read)34 * - Avatar support with image URL or letter fallback35 * - Author name and timestamp display36 * - Own vs other message styling37 *38 * @component39 * @example40 * ```tsx41 * <ChatConversation42 * data={{43 * messages: [44 * { content: "Hello!", isOwn: false, avatarFallback: "S", author: "Sarah" },45 * { content: "Hi there!", isOwn: true, status: "read" }46 * ]47 * }}48 * />49 * ```50 */51export function ChatConversation({ data }: ChatConversationProps) {52 const resolved: NonNullable<ChatConversationProps['data']> = data ?? { messages: demoMessages }53 const messages = resolved.messages5455 if (!messages || messages.length === 0) {56 return <div className="rounded-xl bg-card p-4" />57 }5859 return (60 <div className="rounded-xl bg-card p-4 space-y-4">61 {messages.map((message, index) => {62 const messageType = message.type ?? 'text'63 const isOwn = message.isOwn ?? false64 const messageKey = message.content ? `${message.author || ''}-${message.content.slice(0, 40)}` : `msg-${index}`65 return messageType === 'image' ? (66 <ImageMessageBubble67 key={messageKey}68// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from Manifest UI
All 32 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Amount Inputamount-input | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Contact Formcontact-form | Manifest UI | Blocks | Free | 1 dep · 3 files | |
| Date & Time Pickerdate-time-picker | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Event Cardevent-card | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Event Confirmationevent-confirmation | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Event Detailevent-detail | Manifest UI | Blocks | Free | 3 deps · 2 files | |
| Event Listevent-list | Manifest UI | Blocks | Free | 3 deps · 2 files | |
| Herohero | Manifest UI | Blocks | Free | 1 dep · 2 files |
