KQ-630 · MARKET/CLOCK

Market Clock

A twenty-four hour face that draws a venue's sessions as arcs where they actually sit. The hand sweeps from a minute the host supplies, its rotation accumulated across midnight so it never unwinds a full turn, on a linear tween matched to the step. The arc between the hand and the next change shrinks as the hand eats it and breathes on drift once the change is close; the state pill snaps between Open and Closed, and each legend row is a button that pins the countdown to its session, with Escape to unpin.

KQ-630 · MARKET/CLOCK

Basinworks Exchange

Venue time
Open
00061218

Closes in 16m

12:14 · next 12:30

Basinworks Exchange open

Basinworks · 12:14 · open

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/market-clock

Props

minute
number
default
Minutes since midnight, possibly fractional. The host owns the clock, so the face stays deterministic on the server.
sessions
MarketSession[]
default 09:00–12:30, 13:30–16:30
Open stretches as { label, from, to } in minutes; everything outside them is closed.
label
string
default "Market"
Venue name; the group's accessible name.
zone
string
default
Small caption under the venue name.
soonMinutes
number
default 30
How close the next change must be before the arc ahead breathes.
selected / defaultSelected
string | null
default null
Controlled or initial pinned session label.
onSelectedChange
(label: string | null) => void
default
Fires from the press or key that pinned or cleared a session.
onStateChange
(open: boolean) => void
default
Fires from the effect that observed the flip, once per flip.
formatTime
(minute: number) => string
default 24h HH:MM
Formats every time on the face and in the legend.