KQ-947 · LOG/GROUP

Log Group

Consecutive lines carrying the same level and message fold into one row whose count rolls on snap when the run grows, with a ring popping off the badge so the change reads without the row moving. Pressing a folded row unfolds it: a ResizeObserver measures the member list, the wrapper glides to that height, and the members cascade in from 4px away inside the choreography budget. The rows are a roving tabindex — Arrow Up and Down step, Home and End jump, Right unfolds and Left folds.

KQ-947 · LOG/GROUP
  1. 09:41:02infobatch 118 opened, 12 holds
  2. 09:41:02infogate-relay handshake ok
  3. 09:41:05infohold 4471 written
  4. 09:41:06errorgate-relay unreachable, retry scheduled

7 lines · 0 runs open · nothing unfolded yet

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/log-group

Props

lines
LogLine[]
default
The log in order: id, level, a printed clock string, and the message.
openIds / defaultOpenIds
string[]
default []
Controlled or initial unfolded runs, keyed by each run's first line.
onOpenChange
(ids: string[]) => void
default
Fires from the press that folded or unfolded a run.
onGroupToggle
(id: string, open: boolean, count: number) => void
default
Fires with the run that changed and its length, for a host's own readout.
minRun
number
default 2
Repeats needed before a run folds; below it every line prints on its own.
label
string
default "Log"
Names the list for assistive technology.