Ballmac UI home

Chart Radial

Radial bars: one ring is a gauge, several are concentric progress rings. Full or half circle, a track, text in the middle, in a frame with a table, patterns and states.

6/6 checksv1.0.0Updated Oct 18, 2026
What changed

Quarterly goal

Revenue target, $400k

of the Q4 goal: 72% of 100% (72%).

Installation

$ pnpm dlx shadcn@latest add @ballmac/chart-radial

Usage

import { ChartRadial } from "@/components/ballmac/chart-radial"

The full example is in the Code tab above.

Examples

Concentric rings

Today's rings

Percent of each daily goal

Move: 84% of 100% (84%). Exercise: 62% of 100% (62%). Stand: 41% of 100% (41%).

Half-circle gauge

Server load

Now

CPU load: 64% of 100% (64%).

Patterns for color blindness

Coverage

Switch Patterns on to tell the rings apart without color

Docs: 92% of 100% (92%). Tests: 74% of 100% (74%). Types: 58% of 100% (58%).

API reference

PropTypeDefault
data*

One row per ring: its name under `nameKey`, its number under `valueKey`, and optionally a `label` and a `color`. One row is a gauge.

ChartRow[]—
nameKeystring"name"
valueKeystring"value"
max

What the full ring stands for. Defaults to 100, or the largest value when that is more.

number—
valueLabel

What the numbers count, for the table header: "minutes".

string—
half

Draw only the upper half, like a gauge.

booleanfalse
centerLabel

Text in the middle: `true` writes the first ring's share, or give `{ value, label }`.

boolean | { value: string; label: string }true
track

Draw the empty part of each ring.

booleantrue
tooltipbooleantrue
value*string—
label*string—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Screen readersThe summary reads every ring as 'value of max (share)'
Tab, Enter / SpaceLegend buttons switch series off and on; the Chart / Table switch shows the numbers as a table
Screen readersThe figure has a name and a summary written from the data

Quality scorecard

6/6

Every applicable check passes

Measured in Chromium 153.0.8010.12 on October 19, 2026, on version 1.0.0, across 4 examples.

How we measure
  • Passed: Accessibility scan

    No serious or critical issues in light and dark, on a phone and a desktop (axe-core 4.13.0, WCAG 2.1 AA and best-practice rules).

  • Passed: Small screens

    No sideways scrolling at 360, 390 or 1280 px wide.

  • Passed: Reduced motion

    No endless animation to begin with.

  • Not applicable: Right to left

    Not mirrored by design: Recharts draws its axes in SVG coordinates, which do not mirror.

  • Passed: Clean console

    No console errors or React hydration errors while loading.

  • Passed: Keyboard

    15 tab stops, each showing a visible change when it takes focus. 3 documented keys.

  • Not applicable: Loading, empty and error

    Does not show data or take submissions.

  • Passed: Automated tests

    Covered by charts-batch-families.test.tsx.

  • For information: Footprint

    2.2 KB of source (gzip) in 1 file. Installs recharts.

Automated checks find a subset of problems and do not replace testing with a screen reader and a keyboard in your own app. What they miss.

Use with AI

<ChartRadial title description data={[{ name, label?, value, color? }]} max={100} />. One row is a gauge, several rows are concentric rings. half for a semicircle, centerLabel (true writes the first ring's share, or { value, label }), track, valueLabel, legend, patterns, state. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Chart Radial (@ballmac/chart-radial) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Progress toward a goal
  • A single metric against its maximum
  • Activity or goal rings

Not for

  • Parts of a whole (use chart-pie)
  • Comparing many categories (use chart-bar)

Registry JSON: https://ui.ballmac.com/r/chart-radial.json

Credits

Free to use in personal and commercial projects.

Ballmac UI Pro

Need the whole screen, not one piece?

150 premium blocks (dashboards, settings, calendars, mail, shops, onboarding), a private shadcn registry and Figma tokens. Blocks that show data come with loading, empty and error states built in.

Not ready? Try three Pro blocks free

Leave your email and the blocks appear right here, ready to copy. Yours to use in any project.