SakaniUI

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

Which deals need a follow-up this week?

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

PropTypeDefaultDescription
role'assistant' | 'user''assistant'Assistant is full-width text beside the orb; user is a right-aligned bubble.
streamingbooleanAssistant only. The reply is still arriving: hides the actions, ends the text with a caret, and animates the orb.
childrenReactNodeThe text. A plain string is one paragraph; several children sit 12px apart.
actionsboolean | ReactNodetrueAssistant only. false leaves the row out; a node replaces it.
onCopy() => voidThe copy button.
onRegenerate() => voidThe regenerate button.
onFeedback(value: 'up' | 'down') => voidThe good and bad response buttons.
classNamestringExtra class on the root.