PromptInput
Open in FigmaThe composer: auto-growing textarea, attachments by picker/paste/drop, model picker, and a submit that follows ChatStatus (send → spinner → stop → retry). PromptInputPresets fills it from a chip, PromptInputAnswering names the question being answered, PromptInputHint says one quiet line above it.
Playground
The send control follows status: send → spinner → stop → retry.
status
<PromptInput
value={value}
onValueChange={setValue}
onSubmit={send}
onStop={stop}
placeholder="Ask about anyone you know…"
/>Compound
Attachments by picker, paste, or drop; a model picker; a mic slot. The glow breathes while listening, and what you send lifts and blurs away.
status
<PromptInput
value={value}
onValueChange={setValue}
onSubmit={send}
accept="image/*,.pdf"
>
<PromptInputAttachments />
<PromptInputField><PromptInputTextarea /></PromptInputField>
<PromptInputToolbar>
<PromptInputTools>
<PromptInputActionAddAttachments />
<PromptInputButton label="Dictate"><MicIcon /></PromptInputButton>
<PromptInputModelSelect
models={MODELS}
value={model}
onChange={setModel}
/>
</PromptInputTools>
<PromptInputSubmit />
</PromptInputToolbar>
</PromptInput>Variants
Default is the chat composer, tall is the Today ask box, docked is a one-line bar pinned to the bottom of a page. Switch the brand to v2 for the redesign's send button and focus ring.
variant
<PromptInput
variant="tall"
value={value}
onValueChange={setValue}
onSubmit={send}
/>Queue while busy
With queueable, Enter during a reply hands the message to the host to queue; Stop stays beside it.
status
<PromptInput
value={value}
onValueChange={setValue}
onSubmit={enqueue}
onStop={stop}
status="streaming"
queueable
/>