Components

Radial Chart

Show completion and capacity with concentric rings, gauges and stacked arcs.

Loading chart…

Project completion
StageComplete (%)
Design92
Build76
Review58

Activity rings

ActivityRings supplies context, axes, tracks, tooltip and a static legend for progress data. Give each ring a config key, original value and optional domain. Name the chart with aria-label or aria-labelledby.

Loading chart…

Daily activity: Move (kcal), Exercise (minutes), Stand (hours)
ActivityOriginal value
move350
exercise30
stand9

Values normalize to 0–100 for geometry; finite out-of-domain values clamp visually. The default tooltip keeps original values and config formatters. Custom native payloads expose rawValue and progress; native sector value is normalized. Ring order follows the array, inner to outer.

The default is responsive width, 300px height, a clockwise full sweep, rounded tracks, static legend, labels off and motion off. Do not wrap this helper in another Root. Use explicit composition below for custom axes/data, children or inter-chart choreography.

Usage

Root supplies metadata; RadialBarChart owns motion. Native polar axes map values and categories to angles and rings.

Composition
<Chart.Root config={config}>
  <Chart.ResponsiveContainer width="100%" height={280}>
    <Chart.RadialBarChart data={data} categoryKey="period" animate startAngle={90} endAngle={-270} innerRadius="18%" outerRadius="94%">
      <Chart.PolarAngleAxis type="number" domain={[0, 100]} tick={false} />
      <Chart.PolarRadiusAxis type="category" dataKey="period" tick={false} axisLine={false} />
      <Chart.RadialBarSeries dataKey="progress" background={{ fill: "#e9e5f1" }}>
        <Chart.LabelList fill="white" dataKey="label" content={<Chart.RadialBarLabel />} />
      </Chart.RadialBarSeries>
      <Chart.Tooltip itemKey={(entry) => String(entry.payload?.period ?? entry.name)} />
    </Chart.RadialBarChart>
  </Chart.ResponsiveContainer>
</Chart.Root>

Each category resolves its config color through categoryKey. Values still come from the progress series; tooltip identity uses the category field too. Arc labels hide when they cannot fit.

Capacity gauge

Compose a gauge with RadialBarChart; there is no Gauge export. [0, 100] and angles 180 to 0 produce a semicircle; native Label supplies the center summary.

Loading chart…

Storage capacity (100 GB)
ResourceUsed (GB)
Storage72

Choose the entrance sweep beside Preview/Code. The example remounts to replay it; final angles, domain and track stay fixed.

Stacked capacity

Matching stackId values share one ring. Committed and reserved total 86 of 100 hours. Legend toggles recalculate the stack while preserving the fixed domain.

Loading chart…

Team capacity (100 hours)
MonthCommitted hoursReserved hours
October6422

API reference

Focused props for explicit polar composition. Data, tracks and custom center labels remain consumer-owned.

ActivityRings

PropTypeDefaultDescription
ringsreadonly ActivityRing[]Required{ key: string; value: number; domain?: readonly [number, number]; cellProps?: ComponentProps<typeof Cell> }; unique keys must exist in config. Empty arrays are valid.
configSeriesConfigRequiredLabels, colors, icons and original-value formatters.
aria-label / aria-labelledbystringOne requiredNames the chart; original-value descriptions are supplied automatically.
domainreadonly [number, number][0, 100]Default finite increasing bounds; ring-specific domains override it.
responsive / heightboolean / number | percentagetrue / 300Native responsive chart sizing; width defaults to 100%.
animateboolean | RadialBarAnimationfalseSame entrance options as RadialBarChart; respects reduced motion.
seriesNative RadialBarSeries optionsTracks and rounded endsOverride series paint, background or geometry; explicit fill wins over config.
labelsfalse | LabelList optionsfalseOptional arc labels; custom content retains control.
legend / tooltipfalse or component optionsStatic legend / original-value tooltipDisable either independently or supply custom rendering options.

Native chart props override center, radii, angles, gaps and motion. Ring cellProps retains paint/handlers and wins over series fill. Custom paint may differ from legend metadata; update config or supply custom/disabled legend content.

RadialBarChart

PropTypeDefaultDescription
dataRow[]—Categories and numeric values; each row can create a separate ring.
categoryKeystring | ((row: Row) => string)OffResolves chart rows into config keys for default category paint.
animateboolean | RadialBarAnimationfalseChart-owned entrance; respects reduced motion. Options include revealDurationMs and revealEasing.
animationDirection"clockwise" | "anticlockwise""clockwise"Entrance direction only; preserves final native geometry.
startAngle / endAnglenumber0 / 360 in RechartsNative angular extent in degrees. Examples explicitly set both.
innerRadius / outerRadiusnumber | string"0%" / "80%" in RechartsPixels or percentages of the native maximum radius.
cx / cynumber | string"50%"Native center position; the gauge lowers cy for its semicircle.
barCategoryGapnumber | string"10%" in RechartsSpace between category bands.
aria-labelstring—Accessible plot name; include a separate data alternative.

Changing direction after reveal does not replay it. Custom sectors or transformed marks bypass directional reveal. Reduced motion shows final geometry.

See Recharts RadialBarChart.

RadialBarSeries

PropTypeDefaultDescription
dataKeystring | number | ((row: Row) => unknown)RequiredValue field or accessor.
seriesKeystringString dataKeyConfig and visibility identity; needed for controlled accessor keys.
backgroundboolean | object | ReactElement | functionfalsetrue supplies a pale Kind track using --kind-ui-radial-track, fallback #f1f1f1; explicit background props/renderers own the track.
stackIdstring | number—Matching IDs stack series in one category band.
cornerRadiusnumber | string0 in RechartsNative rounded sector corners.
material"plain" | "paper" | "clay" | "glow""plain"Native mark finish; custom shapes, active shapes and filters retain rendering ownership.
fillstringConfig colorSeries paint; native Cells can override individual rows.
hidebooleanfalseExplicit hiding; Root visibility also applies.

Per-series animation is disabled. These examples use plain paint without automatic radial inspection emphasis. See Recharts RadialBar.

RadialBarLabel

Use as LabelList content for sector-aware arc text. Center summaries use native Label.

PropTypeDefaultDescription
showbooleantrueIndependently hides visual text.
fontSizenumber11Requested SVG pixel size, reduced to fit the ring band.
minFontSizenumber9Minimum fit size; unfitting measured glyph bounds hide the text.
paddingnumber2Space at arc endpoints and band edges.
fillstring"white"Text paint.
formatterNative label formatter—Formats the value provided by LabelList.

Shared components

Root, SeriesConfig, Axes and grid, Labels and cells, Legend, Tooltip, ResponsiveContainer.