KQ-678 · GOAL/THERMOMETER

Goal Thermometer

A vertical thermometer for a spend cap whose mercury is the sum of the entries, so the fill rises with each expense: the column's height animates on glide and the total counts up on the same spring through a motion value. Every expense leaves a tick on the rail at its cumulative height, the newest carrying a chip that lands with a snap and then rides upward with the meniscus; past warnAt the tube turns warn and the bulb glows on a mirrored tween that stops when the tab is hidden, and past the cap it turns danger without bouncing. It is a meter whose aria-valuenow stays inside the cap while aria-valuetext names the overage, with a hidden list of every expense.

KQ-678 · GOAL/THERMOMETER
Groceries · Novembercap $600.00
$378.55$221.45 left
  1. Ferngate Market, $86.20
  2. Halyard Coffee, $42.35
  3. Marrow & Vine, $128.90
  4. Lantern Books, $24.60
  5. Ferngate Market, $96.50

Groceries · $378.55 of $600.00 · 63% · 5 expenses · under cap

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/goal-thermometer

Props

entries
GoalEntry[]
default
Expenses in the order they landed; their sum is the fill and each leaves a tick.
cap
number
default
The cap the tube tops out at.
warnAt
number
default 0.85
Fraction of the cap where the tube warns and the bulb glows.
label
string
default
Names the goal, printed above the tube and read as the meter's label.
marks
number
default 4
Tick labels printed up the scale.
onStateChange
(state: "under" | "near" | "over") => void
default
Fires from the effect that sees a threshold cross, never during render.
format
(value: number) => string
default USD Intl.NumberFormat
Formats the total, the cap, the scale and every chip.