KQ-1766 · CALLBACK/QUEUE

Callback Queue

A live support queue with your place, an honest wait (a likely figure and a range from the line, the average chat and the agents on shift) and the agents on shift. When the queue moves, the person at the front goes into the desk on the exit ease, everyone behind glides one place forward on springs.glide, and your place and the estimate roll down digit by digit, the estimate a beat later. Call me back opens a picker — a number and a radiogroup of times — and booking turns your token into a time chip in its place, one element whose layout glides from circle to pill; your turn, leaving, closed hours and a full queue each say what happens next.

KQ-1766 · CALLBACK/QUEUE
Coldbrook support

Live chat queue

Open

You're 4th in line, 3 people ahead. About 6 minutes, usually 4 to 8.

Estimated from 3 agents averaging 4.5 min a chat. It updates as the line moves.

ALRSLOMT

3 on shift, all on chats, 1 on a break

4th in line · coldbrook live chat

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/callback-queue

Props

tokenStyle
"dots" | "tickets" | "lane"
default "dots"
How the line is drawn: circles to the desk, numbered ticket stubs, or a lane you ride along.
density
"compact" | "cozy" | "roomy"
default "cozy"
Token size, type and gaps.
accent
"cobalt" | "jade" | "amber" | "mono"
default "cobalt"
Your token, the estimate and the primary button.
queue
QueueSnapshot
default defaultQueue
position (1 is next, 0 your turn), waiting, capacity, avgHandleSeconds, ticket and joinedAt. A lower position moves you forward.
agents
QueueAgent[]
default defaultQueueAgents
Who is on shift and whether each is free, on a chat or on a break.
now
number
default defaultQueueNow
The moment times count from, ms. Never read from the clock.
status
"open" | "closed" | "full" | "loading"
default "open"
Open, closed for the day, full, or loading.
hours
{ open: number; close: number }
default { open: 480, close: 1200 }
Opening hours in minutes after midnight (UTC); they set the closed message and the callback times.
callbackSlots
CallbackSlot[]
default the next three half hours, or tomorrow morning when closed
The times offered for a callback; at null means as soon as an agent is free.
defaultPhone
string
default "07700 900418"
The number a callback goes to until it's changed.
company
string
default "Coldbrook"
Whose queue this is.
onRequestCallback
({ phone, slot }) => void | Promise
default —
A callback was booked. A promise holds the button; a rejection keeps the picker open with a message.
onCancelCallback
() => void
default —
A booked callback was cancelled; you're back in the line.
onLeave
() => void
default —
Leave queue was pressed.
onRejoin
() => void
default —
Rejoin was pressed after leaving.
onJoinChat
() => void
default —
Join chat was pressed when it was your turn.
maxTokens
number
default 5
The most people drawn ahead of you; the rest fold into a count.
disabled
boolean
default false
Nothing can be booked, left or joined.
className
string
default —
Classes for the outer surface.