"use client"; import { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, Tooltip, } from "recharts"; export interface TooltipItem { name: string; value: number; color?: string; } interface RadialChartProps { percentage: number; label?: string; color?: string; backgroundColor?: string; height?: number; innerRadius?: number; outerRadius?: number; startAngle?: number; endAngle?: number; tooltipData?: TooltipItem[]; } interface RadialChartTooltipProps { active?: boolean; payload?: Array<{ payload?: { tooltipData?: TooltipItem[]; }; }>; } const CustomTooltip = ({ active, payload }: RadialChartTooltipProps) => { if (!active || !payload || !payload.length) return null; const tooltipItems = payload[0]?.payload?.tooltipData; if ( !tooltipItems || !Array.isArray(tooltipItems) || tooltipItems.length === 0 ) return null; return (
{tooltipItems.map((item: TooltipItem, index: number) => (

{item.name}

{item.value}%

))}
); }; export function RadialChart({ percentage, color = "var(--bg-pass-primary)", backgroundColor = "var(--bg-neutral-tertiary)", height = 250, innerRadius = 60, outerRadius = 100, startAngle = 90, endAngle = -270, tooltipData, }: RadialChartProps) { // Calculate the real barSize based on the difference const barSize = outerRadius - innerRadius; const data = [ { value: percentage, tooltipData, }, ]; return ( {tooltipData && ( } wrapperStyle={{ zIndex: 1000 }} cursor={false} /> )} {percentage}% ); }