Chat Message
simple-ai/chat-messageFreeComponent
A fully composable component for displaying chat messages with rich features like timestamps, actions, and threading.
Live preview
live · rendered by the registry
Rendered by simple-ai on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://simple-ai.dev/r/chat-message.jsonSource
1"use client";23import {4 Check,5 ChevronRight,6 Copy,7 SparklesIcon,8 UserIcon,9} from "lucide-react";10import { type ComponentProps, type ReactNode, useState } from "react";11import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";12import { Button } from "@/components/ui/button";13import { Card } from "@/components/ui/card";14import {15 Tooltip,16 TooltipContent,17 TooltipProvider,18 TooltipTrigger,19} from "@/components/ui/tooltip";20import { cn } from "@/lib/utils";21import { MarkdownContent } from "@/registry/ui/markdown-content";2223function ChatMessage({ className, ...props }: ComponentProps<"div">) {24 return (25 <TooltipProvider>26 <div27 className={cn(28 "group/chat-message relative flex w-full gap-2.5 py-2 px-3 rounded-md hover:bg-muted/50",29 className,30 )}31 {...props}32 />33 </TooltipProvider>34 );35}3637function ChatMessageContainer({ className, ...props }: ComponentProps<"div">) {38 return (39 <div40 className={cn("flex w-full flex-col items-start gap-1", className)}41 {...props}42 />43 );44}4546function ChatMessageHeader({ className, ...props }: ComponentProps<"div">) {47 return (48 <div49 className={cn("flex items-center gap-2 px-2 text-sm", className)}50 {...props}51 />52 );53}5455function ChatMessageAuthor({ className, ...props }: ComponentProps<"span">) {56 return (57 <span58 className={cn("font-medium text-foreground", className)}59 {...props}60 />61 );62}6364interface ChatMessageTimestampProps extends ComponentProps<"span"> {65 createdAt: number | Date | string;66 format?: Intl.DateTimeFormatOptions;67}6869function ChatMessageTimestamp({70 className,71 createdAt,72 format = { hour: "numeric", minute: "numeric" },73 ...props74}: ChatMessageTimestampProps) {75 const date = createdAt instanceof Date ? createdAt : new Date(createdAt);7677 return (78 <Tooltip>79 <TooltipTrigger asChild>80 <span81 className={cn(82 "text-xs text-muted-foreground cursor-default",83 className,84 )}85 {...props}86 >87 {date.toLocaleTimeString("en-US", format)}88 </span>89 </TooltipTrigger>90 <TooltipContent>91 <p>{date.toLocaleString()}</p>92 </TooltipContent>93 </Tooltip>94 );95}9697function ChatMessageContent({ className, ...props }: ComponentProps<"div">) {98 return (99 <div100 className={cn("w-full flex flex-col gap-2 p-2", className)}101 {...props}102 />103 );104}105106interface ChatMessageMarkdownProps {107 content: string;108 className?: string;109}110111function ChatMessageMarkdown({ content, className }: ChatMessageMarkdownProps) {112// … truncated
What it pulls in
Other registry items
Files it writes
More from simple-ai
All 77 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| base-handlebase-handle | simple-ai | Components | Free | 1 dep | |
| base-nodebase-node | simple-ai | Components | Free | no deps | |
| Chat Inputchat-input | simple-ai | Components | Free | 7 deps | |
| Chat Message Areachat-message-area | simple-ai | Components | Free | 1 dep | |
| Chat Suggestionschat-suggestions | simple-ai | Components | Free | no deps | |
| Editable Handleeditable-handle | simple-ai | Components | Free | 1 dep | |
| Generate Text Nodegenerate-text-node | simple-ai | Components | Free | 1 dep | |
| JSON Schema Editorjson-schema-editor | simple-ai | Components | Free | 1 dep |
