diff --git a/resources/views/components/status-badge.blade.php b/resources/views/components/status-badge.blade.php new file mode 100644 index 000000000..71f9817f6 --- /dev/null +++ b/resources/views/components/status-badge.blade.php @@ -0,0 +1,38 @@ +@props([ + 'label' => null, + 'status' => null, + 'type' => 'neutral', + 'as' => 'span', +]) + +@php + $typeClasses = [ + 'neutral' => 'border-neutral-200 bg-neutral-100 text-black dark:border-coolgray-300 dark:bg-coolgray-200 dark:text-white', + 'success' => 'border-green-200 bg-green-50 text-green-800 dark:border-green-900 dark:bg-green-950/30 dark:text-green-300', + 'warning' => 'border-yellow-300 bg-yellow-50 text-yellow-900 dark:border-yellow-800 dark:bg-yellow-950/30 dark:text-yellow-200', + 'error' => 'border-red-300 bg-red-50 text-red-800 dark:border-red-900 dark:bg-red-950/30 dark:text-red-300', + ]; +@endphp + +@if ($as === 'button') + +@elseif ($as === 'a') + class([ + 'inline-flex h-5 max-w-full items-center gap-1 rounded-sm border px-1.5 text-xs font-medium leading-4 transition-colors', + $typeClasses[$type] ?? $typeClasses['neutral'], + ]) }}> + {{ collect([$label, $status])->filter()->join(' ') }} + +@else + class([ + 'inline-flex h-5 max-w-full items-center gap-1 rounded-sm border px-1.5 text-xs font-medium leading-4', + $typeClasses[$type] ?? $typeClasses['neutral'], + ]) }}> + {{ collect([$label, $status])->filter()->join(' ') }} + +@endif diff --git a/resources/views/components/status/degraded.blade.php b/resources/views/components/status/degraded.blade.php index fbd068c72..99ae2d4cd 100644 --- a/resources/views/components/status/degraded.blade.php +++ b/resources/views/components/status/degraded.blade.php @@ -2,32 +2,18 @@ 'status' => 'Degraded', ]) @php - // Handle both colon format (backend) and parentheses format (from services.blade.php) - // degraded:unhealthy → Degraded (unhealthy) - // degraded (unhealthy) → degraded (unhealthy) (already formatted, display as-is) - if (str($status)->contains('(')) { - // Already in parentheses format from services.blade.php - use as-is $displayStatus = $status; - $healthStatus = str($status)->after('(')->before(')')->trim()->value(); - } elseif (str($status)->contains(':') && !str($status)->startsWith('Proxy')) { - // Colon format from backend - transform it + $healthStatus = null; + } elseif (str($status)->contains(':') && ! str($status)->startsWith('Proxy')) { $parts = explode(':', $status); - $displayStatus = str($parts[0])->headline(); + $displayStatus = str($parts[0])->headline()->value(); $healthStatus = $parts[1] ?? null; } else { - // Simple status without health - $displayStatus = str($status)->headline(); + $displayStatus = str($status)->headline()->value(); $healthStatus = null; } + + $badgeStatus = $healthStatus ? "{$displayStatus} ({$healthStatus})" : $displayStatus; @endphp -