@props([ 'title' => '', 'centerValue' => '0', 'percentage' => 0, 'status' => 'green', 'size' => 'default', ]) @php $circlePercent = min(max((float) $percentage, 0), 100); $sizeConfig = match ($size) { 'compact' => [ 'wrapper' => 'h-32 w-32', 'radius' => 38, 'stroke' => 9, 'center' => 'text-xl', 'title' => 'text-xs font-semibold text-gray-900 mb-2 text-center', ], default => [ 'wrapper' => 'h-48 w-48', 'radius' => 52, 'stroke' => 12, 'center' => 'text-3xl', 'title' => 'text-sm font-semibold text-gray-900 mb-3 text-center', ], }; $radius = $sizeConfig['radius']; $circumference = 2 * M_PI * $radius; $strokeDashoffset = $circumference * (1 - ($circlePercent / 100)); $ringClass = match ($status) { 'red' => 'text-red-600', 'yellow' => 'text-yellow-500', 'amber' => 'text-amber-600', 'green' => 'text-green-600', default => 'text-gray-400', }; $percentTextClass = match ($status) { 'red' => 'text-red-700', 'yellow' => 'text-yellow-700', 'amber' => 'text-amber-700', 'green' => 'text-green-700', default => 'text-gray-600', }; @endphp