Why a number changed, one step per row.
Every shadcn style · one file
v2.1 · Updated Oct 21pnpm dlx shadcn@latest add @notchset-pro/waterfallpnpm dlx shadcn@latest add @notchset-pro/waterfallNeeds your registry key. Every components.json style gets the same files.
Works with React 18.3 or 19 on Tailwind CSS v4, in any shadcn project. What's tested
The CLI adds the styles to the CSS file named in components.json (tailwind.css). Check that it points at your global stylesheet, that the project uses Tailwind CSS v4, and that the file is imported in your root layout. Installed by hand: paste styles.css into that file.
Import it and pass your content. The props that matter most are listed next.
"use client";
import * as React from "react";
import { Waterfall } from "@/components/ui/notchset/blocks/waterfall";
const k = (v: number) => `$${v >= 1e6 ? `${(v / 1e6).toFixed(2).replace(/0$/, "")}M` : `${Math.round(v / 1000)}k`}`;
const deals = (n: number) => `${n} ${n === 1 ? "deal" : "deals"}`;
const STEPS = [
{ key: "new", label: "New", value: 64000, count: 1, detail: "Airtable" },
{ key: "pulled", label: "Pulled in", value: 152000, count: 1, detail: "Sentry" },
{ key: "raised", label: "Raised", value: 97500, count: 2, detail: "Stripe, Webflow" },
{ key: "won", label: "Won", value: 0, count: 0 },
{ key: "slipped", label: "Slipped", value: -271000, count: 1, detail: "Revolut" },
{ key: "lowered", label: "Lowered", value: -126000, count: 1, detail: "PostHog" },
{ key: "lost", label: "Lost", value: -48000, count: 1, detail: "Dropbox" },
];
const START = 1109300;
export default function WaterfallDemo() {
const [picked, setPicked] = React.useState<string | null>(null);
const end = START + STEPS.reduce((a, s) => a + s.value, 0);
return (
<Waterfall
label="Won + commit, last Monday to now"
start={{ label: "Last Monday", value: START }}
end={{ label: "Now", value: end }}
steps={STEPS}
format={k}
countLabel={deals}
selected={picked}
onSelect={setPicked}
className="w-full max-w-[640px]"
/>
);
}components/ui/notchset/blocks/waterfall.tsx
This component is included with Pro.
Try the live preview above. Get Pro to install the source.
label–
stringwhat the whole chart shows, for screen readers
start–
{ label: string; value: number }Required.
steps–
WaterfallStep[]Required.
end–
{ label: string; value: number }Required.
format–
(v: number) => stringan amount in words, unsigned ("$126k"); the block adds the sign
countLabelString
(n: number) => stringa step's count in words; defaults to the plain number
onSelect–
(key: string | null) => voidselected–
string | nullGive your coding assistant the Markdown guide instead of screenshots.
https://notchset.dev/api/mcp (setup)v2.1.0 · 2026-10-21
The start and end are the series violet (the end at full strength), steps keep ok and bad; every bar is rounded and fades back toward its start, and the step you point at, focus or pick glows in its own colour.
v2.0.0 · 2026-10-13
Released with the Notchset system.
The same file, at work in a finished app. Open it live and find it on its pages.
Forecasts and reports. The figures a team runs on: forecast, attainment, what moved and why, with the number always written.
3 free · 6 ProSee the Forecasts and reports kit
Pro is in early access.