caliper uidocs

Chord diagram

Pro

Flows between a handful of groups in both directions, such as plan changes or traffic between pages. Focus a group to keep only its ribbons and read them.

Installs components/ui/chord-diagram.tsxDepends on d3-shapeMotion none in component source
pnpm dlx shadcn@latest add @caliper/chord-diagram
Plan changes this quarter
FreeStarterTeamBusinessChurned

Plan changes this quarter, from row to column
FromFreeStarterTeamBusinessChurned
Free042014012260
Starter40031028190
Team8900160120
Business0644030
Churned60241020

When to use #

Use it for

  • Movement between four to eight states.
  • Seeing which pairs exchange the most.

Skip it when

  • Flows in one direction through stages; use the Sankey.
  • Many groups; the ribbons become noise.

Installation #

terminal
pnpm dlx shadcn@latest add @caliper/chord-diagram

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. It is built from chordLayout and ChordDiagram.

example.tsx
import { chordLayout, ChordDiagram } from "@/components/ui/chord-diagram"

The worked example comes with Pro

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

Checking your licence…

API reference #

chordLayout

component

No props of its own; it accepts the native props of its root element.

ChordDiagram

component
PropTypeDefaultDescription
label *string—
groups *readonly ChartSeries[]—
matrix *readonly (readonly number[])[]—matrix[i][j] is the flow from group i to group j.
unitstring""
formatValue((value: number) => string)numberText
loadingboolean—
errorstring—
classNamestring—

Accessibility #

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

KeyBehaviour
→Moves to the next item or value.
↓Moves to the next item or value.
←Moves to the previous item or value.
↑Moves to the previous item or value.
EscapeCloses or cancels, then returns focus to where it came from.

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.