Chat Bubble
Incoming/outgoing message bubbles with avatar, sender, timestamp, and delivery status. Group consecutive messages from the same sender to suppress repeated metadata, Messages/Slack-style.
Conversation
align='incoming' (default) renders on the left with a neutral surface; align='outgoing' renders on the right with the accent-filled surface.
Delivery status
status renders as an icon plus a text label next to the timestamp - never color alone.
Grouped runs
grouped suppresses the avatar/sender/timestamp/status and tightens spacing. Render the last bubble in a run with grouped={false} (the default) so metadata surfaces once per run.
- ChatBubble doesn't know about a list of messages - the consumer decides which consecutive bubbles to group
With an attachment
ChatBubble.Attachment is a small file/media chip for use inside children - pass onClick to make it a real, keyboard-accessible button.
ChatBubble props
Which side the bubble renders on.
Avatar slot, hidden (footprint reserved) when grouped.
Sender name above the bubble, hidden when grouped.
De-emphasized timestamp below the bubble, hidden when grouped.
Delivery/read state shown next to the timestamp, hidden when grouped.
Marks this bubble as part of a consecutive run from the same sender.
icon / name / meta / onClick - a file or media chip inside the bubble.
Per-slot class overrides.
API reference
Which side the bubble renders on.
Avatar slot, typically an <Avatar />.
Sender name shown above the bubble.
De-emphasized timestamp below the bubble.
Delivery/read state, shown as an icon plus text label next to the timestamp.
Suppresses avatar/sender/timestamp/status and tightens spacing for a consecutive run.
File/media chip: icon, name, meta, and an optional onClick to make it a real button.
Additional classes applied to the component root.
