Chat & Messaging
Everything you need to build a chat thread, a comment section, or an AI assistant conversation — the human bubble, the assistant turn, the scroll container that follows new output, the typing indicator, the in-thread markers, and the file attachments that ride along.
Every piece is token-driven, keyboard-operable, and screen-reader-correct out of the box — including the parts most chat UIs get wrong (streaming announcements that don't re-read the whole answer, typing indicators that don't flood a screen reader, delivery status that is never conveyed by color alone).
The components
| Component | What it is |
|---|---|
| Message | The human chat bubble — author, timestamp, side, delivery status (single check = sent, double = delivered, accent double = read), reactions, and attachments. |
| Conversation | The scroll container that holds the thread — sticks to the bottom as output streams, offers a jump-to-latest with an unread count, and preserves the scroll anchor when older history loads. |
| Assistant Message | An AI turn — roles, a streaming body, a model chip, a collapsible reasoning disclosure, and announcements a screen-reader user can actually follow. |
| Message Typing | The three-dot "someone is composing" indicator, indented under the typist's name so the reader sees who is typing. |
| Chat Marker | The rows in a thread that are NOT messages — streaming/tool status, system notes, and labeled date breaks. |
| Attachment | A file attachment card — name, size, type, thumbnail, and upload lifecycle — that rides inside a message or stands alone. |
| Reaction | The emoji reaction pill with a count and an active state, for the reactions slot on a message. |
Where to start
- Building a human chat or comment thread? Start with Conversation as the container and Message for each bubble.
- Building an AI assistant UI? Use Conversation plus Assistant Message, and stream into it — the streaming and announcement model is documented on the Assistant Message page.
- Need a live "is typing / is thinking" affordance? Pin
Message Typing (human) or a
Chat Marker
statusrow (assistant) to the conversation footer.
Keyboard Interaction
This overview page has no interactive elements of its own. Each component
documents its own keyboard contract on its page — the ones with a keyboard model
are Conversation (the scroll region is a focusable
role="log", reachable and scrollable by keyboard) and
Reaction (an operable toggle). The rest —
Message, Assistant Message,
Message Typing, and
Chat Marker — are presentational; any interactivity
comes from the controls you place in their slots (buttons, menus), which carry
their own keyboard behavior.