"use client";
import {
Label,
PolarGrid,
PolarRadiusAxis,
RadialBar,
RadialBarChart,
} from "recharts";
import { type ChartConfig, ChartContainer } from "@/components/ui/chart";
export const title = "A radial chart with text";
const chartData = [
{ browser: "safari", visitors: 200, fill: "var(--color-safari)" },
];
const chartConfig = {
visitors: {
label: "Visitors",
},
safari: {
label: "Safari",
color: "var(--chart-2)",
},
} satisfies ChartConfig;
const ChartRadialText = () => (
<div className="w-full max-w-xl rounded-md border bg-background p-4">
<ChartContainer
className="mx-auto aspect-square max-h-[250px]"
config={chartConfig}
>
<RadialBarChart
data={chartData}
endAngle={250}
innerRadius={80}
outerRadius={110}
startAngle={0}
>
<PolarGrid
className="first:fill-muted last:fill-background"
gridType="circle"
polarRadius={[86, 74]}
radialLines={false}
stroke="none"
/>
<RadialBar background cornerRadius={10} dataKey="visitors" />
<PolarRadiusAxis axisLine={false} tick={false} tickLine={false}>
<Label
content={({ viewBox }) => {
if (viewBox && "cx" in viewBox && "cy" in viewBox) {
return (
<text
dominantBaseline="middle"
textAnchor="middle"
x={viewBox.cx}
y={viewBox.cy}
>
<tspan
className="fill-foreground text-4xl font-bold"
x={viewBox.cx}
y={viewBox.cy}
>
{chartData[0].visitors.toLocaleString()}
</tspan>
<tspan
className="fill-muted-foreground"
x={viewBox.cx}
y={(viewBox.cy || 0) + 24}
>
Visitors
</tspan>
</text>
);
}
}}
/>
</PolarRadiusAxis>
</RadialBarChart>
</ChartContainer>
</div>
);
export default ChartRadialText;