chat-message-demo-simple

PreviousNext
Docs
simple-aiexample

Preview

Loading preview…
./src/registry/examples/chat-message-demo-simple.tsx
"use client";

import type { UIMessage } from "@ai-sdk/react";
import {
	ChatMessage,
	ChatMessageAuthor,
	ChatMessageAvatar,
	ChatMessageAvatarAssistantIcon,
	ChatMessageAvatarUserIcon,
	ChatMessageContainer,
	ChatMessageContent,
	ChatMessageHeader,
	ChatMessageMarkdown,
	ChatMessageTimestamp,
} from "@/registry/ui/chat-message";

const messages: UIMessage[] = [
	{
		id: "1",
		parts: [
			{
				type: "text",
				text: "Hey, how are you doing today?",
			},
		],
		role: "user",
	},
	{
		id: "2",
		parts: [
			{
				type: "text",
				text: "I'm doing great! Just working on some projects. How can I help you?",
			},
		],
		role: "assistant",
	},
	{
		id: "3",
		parts: [
			{
				type: "text",
				text: "I need help with my React application.",
			},
		],
		role: "user",
	},
];

export default function ChatMessageDemoSimple() {
	return (
		<div className="w-full max-h-[400px] overflow-y-auto">
			{messages.map((message) => (
				<ChatMessage key={message.id}>
					<ChatMessageAvatar>
						{message.role === "user" ? (
							<ChatMessageAvatarUserIcon />
						) : (
							<ChatMessageAvatarAssistantIcon />
						)}
					</ChatMessageAvatar>

					<ChatMessageContainer>
						<ChatMessageHeader>
							<ChatMessageAuthor>
								{message.role === "user" ? "You" : "Assistant"}
							</ChatMessageAuthor>
							<ChatMessageTimestamp createdAt={new Date()} />
						</ChatMessageHeader>
						<ChatMessageContent>
							{message.parts
								.filter((part) => part.type === "text")
								.map((part) => (
									<ChatMessageMarkdown
										key={part.type}
										content={part.text}
									/>
								))}
						</ChatMessageContent>
					</ChatMessageContainer>
				</ChatMessage>
			))}
		</div>
	);
}

Installation

npx shadcn@latest add @simple-ai/chat-message-demo-simple

Usage

import { ChatMessageDemoSimple } from "@/components/chat-message-demo-simple"
<ChatMessageDemoSimple />