KQ-953 · HEAT/WEEK

Heat Week

Seven days by twenty-four hours, each cell carrying an hour's reading as opacity over one token — cobalt below the hot mark, warn at or above it. The cells warm in column by column, staggered by cascade across the 24 hours rather than all 168 cells, and hovering or focusing one lifts it on flick while the header reads it back in a cross-faded cell. It is a real grid: Arrow keys move in two dimensions, Home and End reach the ends of a row, Ctrl+Home and Ctrl+End the corners, and Enter or Space isolates a day so the other six fade.

KQ-953 · HEAT/WEEK
dock-worker
Mon
Tue
Wed
Thu
Fri
Sat
Sun

peak Wed 15:00 · 408 rps · all days

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/heat-week

Props

values
number[][]
default
One row per day, one reading per hour; a short row reads as gaps.
days
string[]
default Monday through Sunday
Row names in full — spoken whole, abbreviated for the rail.
hotAt
number
default 0.8 of the peak
Value at or above which a cell reads warn rather than cobalt.
unit
string
default "rps"
Printed after every value.
unitLong
string
default "requests per second"
The same unit spoken in full, so every cell name is a sentence.
day / defaultDay
number | null
default null
Controlled or initial isolated row index.
onDayChange
(day: number | null) => void
default
Fires from the press or key that isolated or released a day.
onCellChange
(cell: CellReading | null) => void
default
The cell under pointer or focus; a reading, so it also fires on the first commit.
format
(value: number) => string
default rounded integer
Renders every value, so a host changes units in one place.
label
string
default "Week"
Names the grid.