Skip to main content

Actions

Badge Signal code

Copy the implementation or inspect every file that belongs to this component unit.

resources/views/components/ui/badge-signal.blade.php

@props([
    'variant' => 'green',
    'pulse' => true,
    'meta' => null,
])

@php
    /*
    | Bare status signal: no background, no border. A pinging indicator dot
    | beside letter-spaced micro-caps, so state reads like live telemetry
    | instead of another pill. Optional trailing meta for context.
    |
    | Variants: gray, brand, green, red, amber, blue
    |
    | Usage:
    |   <x-ui.badge-signal variant="green" meta="4 regions">Operational</x-ui.badge-signal>
    |   <x-ui.badge-signal variant="red" :pulse="false">Halted</x-ui.badge-signal>
    */
    $textColors = [
        'gray' => 'text-gray-600 dark:text-gray-300',
        'brand' => 'text-brand-700 dark:text-brand-300',
        'green' => 'text-green-700 dark:text-green-400',
        'red' => 'text-red-700 dark:text-red-400',
        'amber' => 'text-amber-700 dark:text-amber-400',
        'blue' => 'text-accent-700 dark:text-accent-400',
    ];

    $dotColors = [
        'gray' => 'bg-gray-400', 'brand' => 'bg-brand-500', 'green' => 'bg-green-500',
        'red' => 'bg-red-500', 'amber' => 'bg-amber-500', 'blue' => 'bg-accent-500',
    ];

    $dotColor = $dotColors[$variant] ?? $dotColors['green'];
@endphp

<span {{ $attributes->merge(['class' => 'inline-flex items-center gap-2']) }}>
    <span class="relative flex h-2 w-2">
        @if ($pulse)
            <span class="absolute inline-flex h-full w-full rounded-full opacity-60 motion-safe:animate-ping {{ $dotColor }}"></span>
        @endif
        <span class="relative inline-flex h-2 w-2 rounded-full {{ $dotColor }}"></span>
    </span>
    <span class="text-[11px] font-bold uppercase leading-none tracking-[0.14em] {{ $textColors[$variant] ?? $textColors['green'] }}">{{ $slot }}</span>
    @if ($meta)
        <span class="text-xs font-medium leading-none text-gray-400 dark:text-gray-500">{{ $meta }}</span>
    @endif
</span>