AI Message
One turn of the conversation. The assistant's reply is full-width text beside the Chat Orb; the user's is a right-aligned bubble.
It is presentational: you pass the text and say whether it is still arriving. Under a finished reply there are copy, regenerate and good/bad response buttons; they are callbacks, and it copies and sends nothing itself.
Assistant and user
Your pipeline looks healthy. Three deals moved forward this week, and two of them are worth a closer look before Friday.
Streaming
While streaming the actions are hidden and the text ends with a caret. With no text yet, the orb's eyes sweep as if thinking; when the first words arrive it glances at them, then looks straight.
Your pipeline looks healthy. Three deals moved forward this week, and two of
Paragraphs and actions
Pass several children and they sit 12px apart. actions= leaves the row out; pass a node to replace it.
1. Acme Corp, silent since the proposal went out on Monday.
2. Globex, asked for a revised quote on the annual plan.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| role | 'assistant' | 'user' | 'assistant' | Assistant is full-width text beside the orb; user is a right-aligned bubble. |
| streaming | boolean | Assistant only. The reply is still arriving: hides the actions, ends the text with a caret, and animates the orb. | |
| children | ReactNode | The text. A plain string is one paragraph; several children sit 12px apart. | |
| actions | boolean | ReactNode | true | Assistant only. false leaves the row out; a node replaces it. |
| onCopy | () => void | The copy button. | |
| onRegenerate | () => void | The regenerate button. | |
| onFeedback | (value: 'up' | 'down') => void | The good and bad response buttons. | |
| className | string | Extra class on the root. |