RingChart
A headless wrapper for a pie chart with a hollow centre, often used to show progress or a share of a total. It gives the drawing the catalog's standard accessible shell: a named image plus an optional data-table alternative.
Status: beta — implemented and unit-tested in all eight headless libraries; not yet exercised in composed flows.
The component renders a <figure> holding a <div class="ring-chart-graphic" role="img" aria-label> around an inline <svg> that the consumer draws, and an optional sibling <div class="ring-chart-data-table"> for the accessible table. The component draws nothing and ships no scales, colours or animation.
Implementation Notes
- Renders
<figure class="ring-chart {class}">containing the image wrapper and, when supplied, the data-table wrapper - The consumer supplies the
<svg>(and any legend markup that belongs inside the image) restPropsspread onto the<figure>- No internal state, no drawing, no data handling
Props
| Prop | Type | Default | Description |
|---|---|---|---|
class |
string | "" |
Appended to the base class |
label |
string (optional) | — | Accessible name of the image wrapper |
children |
slot (required) | — | The consumer-drawn inline <svg> |
dataTable |
slot (optional) | — | The accessible table alternative, rendered outside role="img" |
...restProps |
HTML attributes | — | Spread onto the root <figure> |
Usage
<RingChart label="Describe the chart">
<svg viewBox="0 0 100 100">…</svg>
{#snippet dataTable()}
<table><caption>Values</caption>…</table>
{/snippet}
</RingChart>
Keyboard Interactions
- None on the graphic. The chart is a single image to assistive technology.
- The data table follows native table behaviour.
ARIA
role="img"on the graphic wrapper exposes the chart as one image (its children are presentational)aria-labelprovides the accessible name- The data table is outside
role="img"so assistive technology can read it
When to Use
- Parts of a whole where the centre can carry a total or a label
- A share of a total, such as 72% of a target
- When a real data table accompanies the drawing as the accessible alternative
When Not to Use
- Use
PieChart— when no hollow centre is needed - Use
ProgressCircle— progress toward completion of a task - Use
BarChart— comparing many categories
Headless
This component decides semantics only: the figure element, the image role, the name and the table placement. It decides no geometry, scale, colour, legend or motion.
Styles
Target .ring-chart for the figure, .ring-chart-graphic for the image wrapper and .ring-chart-data-table for the table wrapper. Style the supplied <svg> from consumer CSS. No default styles are included.
Testing
- Renders a
<figure>with classring-chartand a.ring-chart-graphicchild withrole="img" labelsetsaria-label- The consumer svg renders inside the image wrapper
- The data table renders in a
.ring-chart-data-tablesibling, outsiderole="img", only when supplied - Rest props reach the figure
Advice
Pass the ring segments as <svg> arcs and put any centre text outside role="img" (in the data table or beside the chart) if it must be read. State the total and each share in the data table.
Because role="img" makes descendants presentational, never put interactive controls inside the graphic; place legends and toggles next to it.
Data table alternative (added 2026-10-05)
The graphic is wrapped in <div class="ring-chart-graphic" role="img" aria-label>; role="img" is not on the <figure>. The optional dataTable (a snippet in Svelte, a prop in React, a named slot in Vue, a projected [dataTable] element in Angular, a DataTable render fragment in Blazor, params.dataTable in Nunjucks, a slot="data-table" child in Web Components) renders the accessible table in <div class="ring-chart-data-table">, a sibling of the graphic and never inside it: role="img" makes its descendants presentational, so a table inside would be invisible to assistive technology. Without a data table the wrapper is not rendered (except Angular, which always renders an empty wrapper because it cannot detect projected content).
Related components
pie-chartprogress-circlemeterbar-chartgraphic-block
References
Lily™ and Lily Design System™ are trademarks.