All components

Message

Conversation rows with an avatar slot, header, footer, grouping, and start/end alignment around a Bubble surface.

ME
Shipping the token update now.
R
Riley
We're already past cutoff.
ME
It's just the spacing scale.
Delivered
R
Riley
That's what you said last time.
Fine, I'll review it.

Avatar

Message.Avatar sits on the first bubble on both sides. Set align="end" on the message to flip the avatar to the trailing edge.

R
The preview is missing the focus ring.
ME
Every size, or just sm?

Group

Message.Group stacks consecutive rows from the same sender. Render the avatar on the first row and an empty Message.Avatar on later ones so they stay aligned.

CN
I moved the recipes next to the templates.
Codegen picks them up from there now.

Header and Footer

Message.Header stays start-aligned for a sender name. Message.Footer follows the message side for status such as delivered or read.

OL
Olivia
I already left notes on the PR.
ME
Cool — I'll fold them into the next pass.
Read · Yesterday

Actions

Place message-level actions in Message.Footer — copy, retry, or feedback. Icon-only buttons need an aria-label.

AI
The theme tokens aren't resolving in the playground.
ME
I'll paste the theme file in a second.
Failed to send

Attachment

Message.Content can hold more than a bubble. Drop a file chip, image, or other surface under the text.

ME
Sales dashboard
Can you drop this chart onto the first page?
AI
Done — cover page is updated.
quarterly-review.pdfPDF · 2.4 MB

Install

Source

components/ui/base-ui/message.tsx

Inspired by the Message component from shadcn/ui.