Message

PreviousNext

Composable message components with avatar, content variants, and automatic styling for user and assistant messages.

Installation

pnpm dlx @elevenlabs/agents-cli@latest components add message

Usage

import { Message, MessageAvatar, MessageContent } from "@/components/ui/message"

Basic Message

<Message from="user">
  <MessageAvatar src="/user-avatar.jpg" name="John" />
  <MessageContent>Hello, how can I help you?</MessageContent>
</Message>
 
<Message from="assistant">
  <MessageAvatar src="/assistant-avatar.jpg" name="AI" />
  <MessageContent>I'm here to assist you with any questions!</MessageContent>
</Message>

Message Variants

The MessageContent component supports two variants:

{
  /* Contained variant - default, has background and padding */
}
;<Message from="user">
  <MessageAvatar src="/user-avatar.jpg" />
  <MessageContent variant="contained">
    This is a contained message with background
  </MessageContent>
</Message>
 
{
  /* Flat variant - no background for assistant, minimal styling */
}
;<Message from="assistant">
  <MessageAvatar src="/assistant-avatar.jpg" />
  <MessageContent variant="flat">
    This is a flat message with minimal styling
  </MessageContent>
</Message>

In a Conversation

import { Conversation, ConversationContent } from "@/components/ui/conversation"
import { Message, MessageAvatar, MessageContent } from "@/components/ui/message"
 
;<Conversation>
  <ConversationContent>
    {messages.map((message) => (
      <Message key={message.id} from={message.from}>
        <MessageAvatar src={message.avatarUrl} name={message.name} />
        <MessageContent>{message.content}</MessageContent>
      </Message>
    ))}
  </ConversationContent>
</Conversation>

API Reference

Message

The main container component that handles layout and alignment based on message sender.

Props

PropTypeDescription
from"user" | "assistant"Required. Determines alignment and styling
classNamestringOptional CSS classes
...propsHTMLDivElementAll standard div element props

MessageContent

Container for message text and content with variant styling.

Props

PropTypeDescription
variant"contained" | "flat"Visual style variant (default: "contained")
classNamestringOptional CSS classes
childrenReactNodeMessage content
...propsHTMLDivElementAll standard div element props

MessageAvatar

Avatar component for displaying user or assistant profile images.

Props

PropTypeDescription
srcstringRequired. Avatar image URL
namestringName for fallback (shows first 2 chars if no image)
classNamestringOptional CSS classes
...propsAvatarPropsAll standard Avatar component props

Notes

  • Uses CSS group selectors for context-aware styling based on from prop
  • User messages align to the right, assistant messages to the left
  • Contained variant provides background colors that differ for user/assistant
  • Flat variant is useful for assistant messages in a minimal design
  • Avatar has a subtle ring border and fallback text support
  • Works seamlessly with the Conversation component
  • This component is inspired by Vercel's AI SDK Message component with modifications for ElevenLabs UI