"use client"; import { cn } from "@/lib/utils"; interface CircularProgressProps { value: number; renderLabel?: (progress: number) => number | string; size?: number; strokeWidth?: number; circleStrokeWidth?: number; progressStrokeWidth?: number; shape?: "square" | "round"; className?: string; progressClassName?: string; labelClassName?: string; showLabel?: boolean; } export const CircularProgress = ({ value, renderLabel, className, progressClassName, labelClassName, showLabel, shape = "round", size = 100, strokeWidth, circleStrokeWidth = 10, progressStrokeWidth = 10, }: CircularProgressProps) => { const radius = size / 2 - 10; const circumference = Math.ceil(3.14 * radius * 2); const percentage = Math.ceil(circumference * ((100 - value) / 100)); const viewBox = `-${size * 0.125} -${size * 0.125} ${size * 1.25} ${ size * 1.25 }`; return (
{/* Base Circle */} {/* Progress */} {showLabel && (
{renderLabel ? renderLabel(value) : value}
)}
); };