Chart
Gradient-first charts on TanStack Charts: themed host, presets that return real definitions, and the full grammar.
Examples
Line
Smooth lines with dots for comparing a few series over time; the crosshair groups every series at the hovered month.
Bar
Grouped vertical bars compare categories side by side; negative values hang below the zero line.
Horizontal stacked bar
Horizontal bars fit long category names. Switch between absolute stacks and a percent share of each row.
Scatter
Correlation between two measures, with bubble size for a third and color for the group.
Donut
Share of a total, with the total itself in ChartCenter. A hatched slice marks the catch-all bucket.
Radial bar
Progress rings toward a shared goal; the hatched track shows what remains.
Sparkline
Axis-free trend lines sized for KPI cards; they skip focus and tooltips so the card stays one tab stop.
Actual vs. forecast
Hatching separates projected from measured values: a dashed hatched forecast area, and a hatched planned series in bars.
Interactive legend
Legend toggles hide series. Colors resolve from the full series list, so the remaining series keep their hue.
Loading and empty
Compose Skeleton while data loads and Empty when it arrives with no rows; presets accept an empty array without throwing.
Composition
Card chart
- <Chart>
- <ChartPlot>
- <ChartTooltipBody />
- <ChartLegend>
- <ChartLegendItem />
- <ChartPlot>
Donut with total
- <Chart>
- <ChartPlot>
- <ChartCenter />
- <ChartLegend>
- <ChartLegendItem />
- <ChartPlot>
Installation
The Control UI source installs this primitive from src/registry/sources/control-ui/ui/chart.tsx.
Dependencies
src/registry/sources/control-ui/ui/chart-cartesian.tsSupportsrc/registry/sources/control-ui/ui/chart-colors.tsSupportsrc/registry/sources/control-ui/ui/chart-curves.tsSupportsrc/registry/sources/control-ui/ui/chart-marks.tsSupportsrc/registry/sources/control-ui/ui/chart-polar.tsSupportsrc/registry/sources/control-ui/ui/chart-series.tsSupportsrc/registry/lib/motion.tsUtilRaw code
Primary installed source
Knobs
Typed custom properties the recipe paints with. Set one on the root — style, a utility class, or a skin — and every slot inherits it.
--cui-chart-* · 19 knobsHow the cascade resolves--cui-chart-foreground<color>var(--muted-foreground)--cui-chart-background<color>var(--card)--cui-chart-line-size<length-percentage>2px--cui-chart-area-opacity<number>1--cui-chart-hatch-opacity<number>0.6--cui-chart-hatch-tint-opacity<number>0.12--cui-chart-tooltip-background<color>var(--popover)--cui-chart-tooltip-foreground<color>var(--popover-foreground)--cui-chart-tooltip-border-color<color>var(--border)--cui-chart-tooltip-border-width<length>var(--control-rim-width)--cui-chart-tooltip-radius<length-percentage>var(--radius-md)--cui-chart-tooltip-shadow*var(--shadow-md)--cui-chart-tooltip-padding<length-percentage>calc(var(--spacing) * 2.5)--cui-chart-legend-gap<length-percentage>calc(var(--spacing) * 4)--cui-chart-swatch-size<length-percentage>calc(var(--spacing) * 2.5)--cui-chart-swatch-radius<length-percentage>calc(var(--radius-sm) * 0.5)--cui-chart-animation-duration<time>calc(var(--duration-slow) * 2)--cui-chart-transition-duration<time>var(--duration-slow)--cui-chart-easing*var(--ease-emphasized)