API Reference

Donut Chart API

Complete API reference for the Donut Chart. Uses the donut-chart headless engine (extends pie-chart) with donut-specific configuration including data center display.

Data Format

Each dataset entry represents a slice of the donut with a name and numeric value. Same format as PieChartData.

type DonutChartData = {
  datasets: { name: string; value: number }[];
};
AG Style Config

Donut

PropertyTypeDefaultDescription
donut.thicknessRationumber0.4Thickness of the donut ring as a ratio (0 to 1). Controls the difference between outer and inner radius.

Pie

PropertyTypeDefaultDescription
pie.innerRadiusRationumber0.6Inner radius ratio (auto-computed from thicknessRatio).

Data Center

PropertyTypeDefaultDescription
dataCenter.visiblebooleanfalseWhether the center label/value display is visible.
dataCenter.mode"hovered-or-total" | "total" | "hovered""hovered-or-total"Display mode for center content.
dataCenter.gapnumber4Gap between label and value text in the center.
dataCenter.labelColorstring"#6b7280"Color of the center label text.
dataCenter.labelFontSizenumber12Font size of the center label.
dataCenter.valueColorstring"#181d1f"Color of the center value text.
dataCenter.valueFontSizenumber24Font size of the center value.
dataCenter.valueFontWeightstring"700"Font weight of the center value.
dataCenter.formatter(args: { total, hoveredSegment, mode }) => { label: string; value: string }Shows hovered name/value or "Total"Formatter function for center display content.

Radial

PropertyTypeDefaultDescription
radial.visiblebooleantrueWhether radial labels and ticks are visible.
radial.gapnumber6Gap between the donut and radial labels.

Data Label

PropertyTypeDefaultDescription
dataLabel.visiblebooleanfalseWhether data labels on slices are visible.
dataLabel.fontSizenumber12Data label font size.
dataLabel.fontColorstring"white"Data label text color.
dataLabel.radiusRationumber0.65Position of data label as ratio of radius.
Toast Style Config

Donut

PropertyTypeDefaultDescription
donut.thicknessRationumber0.4Thickness of the donut ring as a ratio (0 to 1).

Pie

PropertyTypeDefaultDescription
pie.innerRadiusRationumber0.6Inner radius ratio (auto-computed from thicknessRatio).

Data Center

PropertyTypeDefaultDescription
dataCenter.visiblebooleanfalseWhether the center label/value display is visible.
dataCenter.mode"hovered-or-total" | "total" | "hovered""hovered-or-total"Display mode for center content.
dataCenter.gapnumber2Gap between label and value text in the center.
dataCenter.labelColorstring"#9ca3af"Color of the center label text.
dataCenter.labelFontSizenumber11Font size of the center label.
dataCenter.valueColorstring"#111827"Color of the center value text.
dataCenter.valueFontSizenumber22Font size of the center value.
dataCenter.valueFontWeightstring"700"Font weight of the center value.
dataCenter.formatter(args: { total, hoveredSegment, mode }) => { label: string; value: string }Shows hovered name/value or "Total"Formatter function for center display content.

Radial

PropertyTypeDefaultDescription
radial.visiblebooleanfalseWhether radial labels and ticks are visible.
radial.gapnumber8Gap between the donut and radial labels.

Data Label

PropertyTypeDefaultDescription
dataLabel.visiblebooleanfalseWhether data labels on slices are visible.
dataLabel.fontSizenumber14Data label font size.
dataLabel.fontColorstring"white"Data label text color.
dataLabel.radiusRationumber0.65Position of data label as ratio of radius.

Custom Parts

Override any visual element by providing a custom builder function: (args, context) => Widget

PartArgsDescription
layout{ title: Widget; legends: Widget[]; plot: Widget }Top-level layout composing title, legends, and the plot area.
plot{ dataView: Widget; tooltipArea: Widget; radialItems: DonutChartRadialItem[] }The plot area with data view, tooltip, and radial items.
dataView{ segments: DonutChartSegment[]; dataCenter: Widget }Container for all donut segments and the center display.
segment{ index: number; name: string; value: number; percentage: number; startAngle: number; sweepAngle: number; dataLabel: Widget; isHovered: boolean }Individual donut segment/slice.
dataLabel{ index: number; name: string; value: number; percentage: number; startAngle: number; sweepAngle: number }Data label on a donut segment.
dataCenter{ total: number; hoveredSegment: DonutChartSegmentArgs | null }Center display showing total or hovered segment info.
radialLabel{ index: number; name: string; value: number; percentage: number; angle: number; isHovered: boolean }Radial label outside the donut.
radialTick{ index: number; name: string; value: number; percentage: number; angle: number; isHovered: boolean }Radial tick line connecting donut to label.
legend{ name: string; index: number; isVisible: boolean }Individual legend item.
titleundefinedChart title element.
tooltipHoveredDonutChartSegmentTooltip content for a hovered segment.
tooltipArea{ tooltip: Widget | null; hoveredSegment: HoveredDonutChartSegment | null }Tooltip positioning area.

Context: DonutChartContext

Available in every custom builder via the second argument.

NameTypeKindDescription
dataDonutChartDatapropertyCurrent chart data (filtered by hidden series).
legendsstring[]propertyAll legend names from the raw data.
widthnumberpropertyCurrent chart width in pixels.
heightnumberpropertyCurrent chart height in pixels.
hiddenSeriesReadonlySet<string>propertySet of currently hidden series names.
hoveredIndexnumber | nullpropertyIndex of the currently hovered segment.
configTConfigpropertyThe resolved chart configuration object.
isSeriesVisible(name)(name: string) => booleanmethodCheck if a series is currently visible.
toggleSeries(name)(name: string) => voidmethodToggle visibility of a series.
showAllSeries()() => voidmethodShow all hidden series.
hoverSegment(index)(index: number) => voidmethodSet hover state on a segment.
unhoverSegment(index?)(index?: number) => voidmethodClear hover on a segment.
unhoverAllSegments()() => voidmethodClear all segment hover state.
isSegmentHovered(index)(index: number) => booleanmethodCheck if a specific segment is hovered.
setSize(width, height)(width: number, height: number) => voidmethodUpdate chart dimensions.

Custom Part Example

import { ToastDonutChart } from "@/components/flitter/charts/toast-donut-chart";

<ToastDonutChart
  data={data}
  config={{
    donut: { thicknessRatio: 0.3 },
    dataCenter: { visible: true },
  }}
/>