KQ-934 · CATCHUP/SCROLL

Catchup Scroll

A catch-up control that reads the backlog to you at a stated pace: the run animates the box's own scrollTop imperatively across the words still to be read, linearly, because a reading speed that accelerates is a lie. Beside the thread a rail joins its fill on glide and marks a tick per message boundary, both measured from the rows themselves, and messages the rail has passed dim to read. Any touch stops it — a wheel, a pointer or a key inside the box — reported from the handler that caused it; Home and End jump to the top and the floor.

KQ-934 · CATCHUP/SCROLL
  1. Ines Moreau, 01:48, unread.Gate is locked, all of it is on dock two.
  2. Rui Baptista, 01:55, unread.Loader keys are on the hook by the office.
  3. Marta Ferreira, 02:03, unread.I am off at three, Rui takes the handover.
  4. Ines Moreau, 02:14, unread.Pallet 4471 is held, the yard fee has not cleared.
  5. Rui Baptista, 02:16, unread.Paperwork is on the desk under the sheet.
  6. Marta Ferreira, 02:31, unread.Dock three is free from nine if the yard needs it.
  7. Ines Moreau, 02:40, unread.Depot closes Thursday from noon, nothing after eleven.
  8. Rui Baptista, 02:52, unread.Yard lights are back on, the north run is clear.

stopped · 0 of 8 read

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/catchup-scroll

Props

messages
CatchupMessage[]
default
The backlog, oldest first: id, author, time and text.
playing / defaultPlaying
boolean
default false
Controlled or initial run state.
onPlayingChange
(playing: boolean) => void
default
Fires from the control, from an interruption, and from the finish.
onProgressChange
(readCount: number) => void
default
Fires as the rail passes each message.
onFinish
() => void
default
Fires once when the run reaches the floor.
onAnnounce
(sentence: string) => void
default
The frozen sentence the polite region just spoke.
wordsPerMinute
number
default 220
Reading pace; sets how long the run takes.
label
string
default "Catch up"
Names the region and the control.
maxHeight
number
default 240
Scroll ceiling for the thread, in px.