Chat primitives

ChatInput

Auto-growing chat textarea with Enter-to-send, Shift-Enter for newlines, busy/stop states, and optional character limit.

Sourcesrc/components/ai/chat-input.tsx

Default

Enter to send, Shift+Enter for a newline. Grows from one to six rows as you type.

Busy with Stop

While streaming, the submit button becomes a Stop button that calls onStop.

With character limit

Counter fades in at 90% of maxLength and turns red when exceeded.

Disabled

Fully inert state — use while waiting for authentication or quota restoration.