Skip to main content

Actions

Badge Split code

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

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

@props([
    'label',
    'variant' => 'gray',
    'mono' => false,
])

@php
    /*
    | Two-segment key/value chip, shields.io style but softened to match the
    | Harbour hairline aesthetic. The muted left segment names the fact, the
    | tinted right segment carries the value.
    |
    | Variants: gray, brand, green, red, amber, blue
    |
    | Usage:
    |   <x-ui.badge-split label="build" variant="green">passing</x-ui.badge-split>
    |   <x-ui.badge-split label="php" variant="blue" mono>8.5</x-ui.badge-split>
    */
    $valueVariants = [
        'gray' => 'bg-white dark:bg-gray-950 text-gray-700 dark:text-gray-200',
        'brand' => 'bg-brand-50 dark:bg-brand-950/60 text-brand-700 dark:text-brand-300',
        'green' => 'bg-green-50 dark:bg-green-950/60 text-green-700 dark:text-green-300',
        'red' => 'bg-red-50 dark:bg-red-950/60 text-red-700 dark:text-red-300',
        'amber' => 'bg-amber-50 dark:bg-amber-950/60 text-amber-700 dark:text-amber-300',
        'blue' => 'bg-accent-50 dark:bg-accent-950/60 text-accent-700 dark:text-accent-300',
    ];
@endphp

<span {{ $attributes->merge(['class' => 'inline-flex items-stretch overflow-hidden rounded-md border border-gray-200 text-xs dark:border-gray-800']) }}>
    <span class="flex items-center bg-gray-50 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-gray-500 dark:bg-gray-900 dark:text-gray-400">{{ $label }}</span>
    <span @class([
        'flex items-center border-l border-gray-200 px-2 py-0.5 font-semibold dark:border-gray-800',
        'font-mono' => $mono,
        $valueVariants[$variant] ?? $valueVariants['gray'],
    ])>{{ $slot }}</span>
</span>