caliper uidocs

Sankey

Pro

Bands whose width shows how much flows from one stage to the next.

Installs components/ui/sankey.tsxDepends on d3-shapeMotion none in component source
pnpm dlx shadcn@latest add @caliper/sankey
Where each $100 of revenue goes
Subscriptions 62Services 21Marketplace 9Revenue 92Cost of revenue 24Gross profit 68R&D 23Sales and marketing 19G&A 8Operating profit 18

Where each $100 of revenue goes
From toValue
Subscriptions to Revenue62
Services to Revenue21
Marketplace to Revenue9
Revenue to Cost of revenue24
Revenue to Gross profit68
Gross profit to R&D23
Gross profit to Sales and marketing19
Gross profit to G&A8
Gross profit to Operating profit18

When to use #

Use it for

  • Tracing where visitors, money or tickets go between stages.
  • Drop-off and routing are the point.

Skip it when

  • The flow is a simple A to B; a bar chart is clearer.
  • There are loops or more than a handful of stages.

Installation #

terminal
pnpm dlx shadcn@latest add @caliper/sankey

Adds its 3 files to components/ui/, each with its own stylesheet, and installs their packages. Pro installs with your access token, set up once per project. See Pro access. The first part also adds Caliper UI’s tokens; import them once as in Installation.

Usage #

Import it from your copy of the source. The example behind the preview comes with the source.

example.tsx
import { Sankey } from "@/components/ui/sankey"

The worked example comes with Pro

The 35-line example behind the preview opens here with a Pro or Team licence.

Checking your licence…

API reference #

Sankey

component
PropTypeDefault
label *string—
nodes *readonly SankeyNode[]—
links *readonly SankeyLink[]—
unitstring""
formatValue((value: number) => string)numberText
heightnumber340
loadingboolean—
errorstring—
classNamestring—

Accessibility #

It exposes group, img and status semantics, with aria-label and aria-busy kept in step with state. Changes that matter are announced through a live region.

No custom key handling; Tab and the native activation keys do the work.

Motion #

It declares no animation in its component source. Any transition comes from its stylesheet, which uses the duration tokens that collapse to instant under prefers-reduced-motion.