Message
prompt-kit/messageFreeComponent
A component for displaying chat messages with support for avatars, markdown content, and interactive actions
Live preview
live · rendered by the registry
Rendered by prompt-kit on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://raw.githubusercontent.com/ibelick/prompt-kit/HEAD/public/c/message.jsonSource
1import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"2import {3 Tooltip,4 TooltipContent,5 TooltipProvider,6 TooltipTrigger,7} from "@/components/ui/tooltip"8import { cn } from "@/lib/utils"9import { Markdown } from "./markdown"1011export type MessageProps = {12 children: React.ReactNode13 className?: string14} & React.HTMLProps<HTMLDivElement>1516const Message = ({ children, className, ...props }: MessageProps) => (17 <div className={cn("flex gap-3", className)} {...props}>18 {children}19 </div>20)2122export type MessageAvatarProps = {23 src: string24 alt: string25 fallback?: string26 delayMs?: number27 className?: string28}2930const MessageAvatar = ({31 src,32 alt,33 fallback,34 delayMs,35 className,36}: MessageAvatarProps) => {37 return (38 <Avatar className={cn("h-8 w-8 shrink-0", className)}>39 <AvatarImage src={src} alt={alt} />40 {fallback && (41 <AvatarFallback delayMs={delayMs}>{fallback}</AvatarFallback>42 )}43 </Avatar>44 )45}4647export type MessageContentProps = {48 children: React.ReactNode49 markdown?: boolean50 className?: string51} & React.ComponentProps<typeof Markdown> &52 React.HTMLProps<HTMLDivElement>5354const MessageContent = ({55 children,56 markdown = false,57 className,58 ...props59}: MessageContentProps) => {60 const classNames = cn(61 "rounded-lg p-2 text-foreground bg-secondary prose break-words whitespace-normal",62 className63 )6465 return markdown ? (66 <Markdown className={classNames} {...props}>67 {children as string}68 </Markdown>69 ) : (70 <div className={classNames} {...props}>71 {children}72 </div>73 )74}7576export type MessageActionsProps = {77 children: React.ReactNode78 className?: string79} & React.HTMLProps<HTMLDivElement>8081const MessageActions = ({82 children,83 className,84 ...props85}: MessageActionsProps) => (86 <div87 className={cn("text-muted-foreground flex items-center gap-2", className)}88 {...props}89 >90 {children}91 </div>92)9394export type MessageActionProps = {95 className?: string96 tooltip: React.ReactNode97 children: React.ReactNode98 side?: "top" | "bottom" | "left" | "right"99} & React.ComponentProps<typeof Tooltip>100101const MessageAction = ({102 tooltip,103 children,104 className,105 side = "top",106 ...props107}: MessageActionProps) => {108 return (109 <TooltipProvider>110 <Tooltip {...props}>111 <TooltipTrigger asChild>{children}</TooltipTrigger>112 <TooltipContent side={side} className={className}>113 {tooltip}114// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from prompt-kit
All 23 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Chain Of Thoughtchain-of-thought | prompt-kit | Components | Free | 1 dep | |
| Chat Containerchat-container | prompt-kit | Components | Free | 1 dep | |
| Code Blockcode-block | prompt-kit | Components | Free | 1 dep | |
| Feedback Barfeedback-bar | prompt-kit | Components | Free | 1 dep | |
| File Uploadfile-upload | prompt-kit | Components | Free | no deps | |
| Imageimage | prompt-kit | Components | Free | no deps | |
| Jsx Previewjsx-preview | prompt-kit | Components | Free | 1 dep | |
| Loaderloader | prompt-kit | Components | Free | no deps |
