KQ-212 · PROMPT/WELL
Prompt Well
A composer that deepens as the thought gets longer, growing line by line to a row cap and then holding and scrolling so the send control never walks down the page. Typing @ opens the sources it can draw on and / opens the commands it can run, filtered as you type; the list rises on snap, arrow keys move, Enter or Tab takes one. The field is a combobox over that list with an active descendant, so the highlighted row is announced without the caret leaving the text.
KQ-212 · PROMPT/WELL
@ sources · / commands
Last sent nothing yet
Loaded composer — attachments, queue, credits
flavour-photo.jpg2.1 MBsupplier-ledger.csv48 KB
@ sources · / commands41/60
2 queued
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/prompt-well
Props
- attachments / onAttach / onRemoveAttachment
- WellAttachment[] · () => void · (id: string) => void
- default —
- A chip row above the field and a paperclip in the tool row; all optional.
- queued / credits
- string[] · { used: number; limit: number; label?: string }
- default —
- Messages waiting while busy, and a small usage pill in the tool row.
- sources
- WellOption[]
- default —
- Offered after @, anywhere a word can start.
- commands
- WellOption[]
- default —
- Offered after /, and only when it leads the prompt.
- busy
- boolean
- default —
- Swaps send for stop and blocks submission.
- maxRows
- number
- default —
- Rows the well grows to before it scrolls.
- models / model / onModelChange
- string[] · string · (model) => void
- default —
- A cycling model chip in the footer — the current choice is always printed, never hidden in a menu.
- onDictate
- () => void
- default —
- Offers a dictation control beside send; the well never records audio itself.
- shape
- "well" | "pill"
- default "well"
- The container silhouette.
| Prop | Type | Default | Description |
|---|---|---|---|
| attachments / onAttach / onRemoveAttachment | WellAttachment[] · () => void · (id: string) => void | — | A chip row above the field and a paperclip in the tool row; all optional. |
| queued / credits | string[] · { used: number; limit: number; label?: string } | — | Messages waiting while busy, and a small usage pill in the tool row. |
| sources | WellOption[] | — | Offered after @, anywhere a word can start. |
| commands | WellOption[] | — | Offered after /, and only when it leads the prompt. |
| busy | boolean | — | Swaps send for stop and blocks submission. |
| maxRows | number | — | Rows the well grows to before it scrolls. |
| models / model / onModelChange | string[] · string · (model) => void | — | A cycling model chip in the footer — the current choice is always printed, never hidden in a menu. |
| onDictate | () => void | — | Offers a dictation control beside send; the well never records audio itself. |
| shape | "well" | "pill" | "well" | The container silhouette. |