KQ-2063 · QUEUED/ASKS
Queued Asks
A composer that keeps taking prompts while the assistant is busy, stacking each as a numbered card above the field; beyond stackDepth they tuck into a deck. When the running answer finishes, the top card peels off and flies into the thread as the new prompt bubble — a shared layout transition on springs.glide that untilts as it lands — while the cards below shuffle up on glide and their numbers roll on springs.snap. Cards drag 1:1 into a new order and settle on snap with the release velocity, or edit in place; Alt with Up or Down reorders, Delete removes, Up in an empty field edits the last card, a failed run pauses the queue, and on a phone the stack collapses to a count you expand.
Basin storage review
Basinworks · Fernworks Model 3
Up next · 4
Enter queues while the assistant is busy. Up in an empty field edits the last queued ask.
Alt with Up or Down moves it, Enter edits, Delete removes.
running · 4 queued · basinworks research
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/queued-asks
Props
- stackDepth
- number
- default 3
- Cards that stand fanned before the rest tuck into a deck behind the last one.
- cardStyle
- "note" | "ticket" | "line"
- default "note"
- Paper notes with a folded corner, tickets with a perforated stub, or flat lines.
- accent
- string
- default "var(--accent-bright)"
- Numbers, your bubbles, progress, Queue and Send — any CSS colour.
- queue / defaultQueue
- QueuedAsk[]
- default — / defaultQueuedAsks
- The queued prompts, top first; controlled or initial.
- onQueueChange
- (queue: QueuedAsk[]) => void
- default —
- Fires with the whole queue after any add, move, edit, removal or peel.
- job
- QueuedAsksJob | null
- default defaultQueuedJob
- The run in progress (prompt, status, progress, step, answer, error), or null when idle. Owned by the host.
- thread
- QueuedAsksTurn[]
- default defaultQueuedThread
- Finished turns, oldest first.
- onEnqueue
- (item: QueuedAsk) => void
- default —
- A prompt was queued.
- onReorder
- (ids: string[], moved: { id, from, to }) => void
- default —
- A card was moved by drag or by Alt with an arrow.
- onEditQueued
- (id: string, text: string) => void
- default —
- A queued prompt was edited in place.
- onCancel
- (id: string) => void
- default —
- A queued prompt was removed, or Stop was pressed on the run (its id).
- onAdvance
- (next: QueuedAsk) => void
- default —
- The top card peeled off: start it as the new job with the same id, so it flies into the thread.
- onSend
- (text: string) => void
- default —
- Nothing running and nothing queued: the prompt goes straight to the assistant.
- onRetry
- (jobId: string) => void
- default —
- Retry was pressed on a failed run.
- onResume
- () => void
- default —
- Skip was pressed on a failed run; the next card peels off.
- paused
- boolean
- default job?.status === "failed"
- Hold the queue: nothing peels until it is resumed.
- advanceDelay
- number
- default 500
- How long a finished answer rests before the next card peels off, ms.
- maxQueue
- number
- default 8
- The most prompts the queue holds.
- title
- string
- default "Basin storage review"
- The session's name.
- model
- string
- default "Fernworks Model 3"
- The assistant's name.
- workspace
- string
- default "Basinworks"
- Whose workspace the session is in.
- placeholder
- string
- default "Ask, or line up the next ask…"
- Placeholder for the field.
- height
- number
- default 560
- The tallest the surface grows, px; past it the thread scrolls.
- disabled
- boolean
- default false
- Nothing can be typed, queued or moved.
- className
- string
- default —
- Classes for the outer surface.
| Prop | Type | Default | Description |
|---|---|---|---|
| stackDepth | number | 3 | Cards that stand fanned before the rest tuck into a deck behind the last one. |
| cardStyle | "note" | "ticket" | "line" | "note" | Paper notes with a folded corner, tickets with a perforated stub, or flat lines. |
| accent | string | "var(--accent-bright)" | Numbers, your bubbles, progress, Queue and Send — any CSS colour. |
| queue / defaultQueue | QueuedAsk[] | — / defaultQueuedAsks | The queued prompts, top first; controlled or initial. |
| onQueueChange | (queue: QueuedAsk[]) => void | — | Fires with the whole queue after any add, move, edit, removal or peel. |
| job | QueuedAsksJob | null | defaultQueuedJob | The run in progress (prompt, status, progress, step, answer, error), or null when idle. Owned by the host. |
| thread | QueuedAsksTurn[] | defaultQueuedThread | Finished turns, oldest first. |
| onEnqueue | (item: QueuedAsk) => void | — | A prompt was queued. |
| onReorder | (ids: string[], moved: { id, from, to }) => void | — | A card was moved by drag or by Alt with an arrow. |
| onEditQueued | (id: string, text: string) => void | — | A queued prompt was edited in place. |
| onCancel | (id: string) => void | — | A queued prompt was removed, or Stop was pressed on the run (its id). |
| onAdvance | (next: QueuedAsk) => void | — | The top card peeled off: start it as the new job with the same id, so it flies into the thread. |
| onSend | (text: string) => void | — | Nothing running and nothing queued: the prompt goes straight to the assistant. |
| onRetry | (jobId: string) => void | — | Retry was pressed on a failed run. |
| onResume | () => void | — | Skip was pressed on a failed run; the next card peels off. |
| paused | boolean | job?.status === "failed" | Hold the queue: nothing peels until it is resumed. |
| advanceDelay | number | 500 | How long a finished answer rests before the next card peels off, ms. |
| maxQueue | number | 8 | The most prompts the queue holds. |
| title | string | "Basin storage review" | The session's name. |
| model | string | "Fernworks Model 3" | The assistant's name. |
| workspace | string | "Basinworks" | Whose workspace the session is in. |
| placeholder | string | "Ask, or line up the next ask…" | Placeholder for the field. |
| height | number | 560 | The tallest the surface grows, px; past it the thread scrolls. |
| disabled | boolean | false | Nothing can be typed, queued or moved. |
| className | string | — | Classes for the outer surface. |