Components

Badge

Displays a badge, with semantic status tones (success, warning, danger, info, neutral).

php artisan blatui:add badge
Badge
<x-ui.badge>Badge</x-ui.badge>

As Link

<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge href="#">Docs</x-ui.badge>
    <x-ui.badge href="#" variant="secondary">v1.1.0</x-ui.badge>
    <x-ui.badge href="#" variant="outline"><x-lucide-github aria-hidden="true" /> Source</x-ui.badge>
</div>

Dismissible

Design Engineering Marketing
{{-- Removable badges with a close button. --}}
<div class="flex flex-wrap items-center gap-2">
    @foreach (['Design', 'Engineering', 'Marketing'] as $tag)
        <x-ui.badge x-data="{ show: true }" x-show="show" variant="secondary" class="gap-1 pr-1">
            {{ $tag }}
            <button type="button" @click="show = false" aria-label="Remove {{ $tag }}" class="hover:bg-foreground/10 -my-px ml-0.5 inline-flex size-3.5 items-center justify-center rounded-full transition-colors">
                <x-lucide-x class="size-3" />
            </button>
        </x-ui.badge>
    @endforeach
</div>

Gradient

Pro New Featured
{{-- Gradient-filled badges for emphasis. --}}
<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge class="border-transparent bg-linear-to-r from-indigo-500 to-pink-500 text-white">Pro</x-ui.badge>
    <x-ui.badge class="border-transparent bg-linear-to-r from-sky-500 to-emerald-500 text-white">New</x-ui.badge>
    <x-ui.badge class="border-transparent bg-linear-to-r from-amber-500 to-rose-500 text-white">
        <x-lucide-sparkles aria-hidden="true" /> Featured
    </x-ui.badge>
</div>

Numbers

8 99 20+
<div class="flex flex-wrap items-center gap-3">
    <x-ui.badge class="h-5 min-w-5 rounded-full px-1 font-mono tabular-nums">8</x-ui.badge>
    <x-ui.badge variant="destructive" class="h-5 min-w-5 rounded-full px-1 font-mono tabular-nums">99</x-ui.badge>
    <x-ui.badge variant="outline" class="h-5 min-w-5 rounded-full px-1 font-mono tabular-nums">20+</x-ui.badge>
</div>

Rich

@shadcn CN shadcn Active v1.8.0
{{-- Badges carrying an avatar or richer leading content. --}}
<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge variant="outline" class="h-auto gap-1.5 rounded-full py-1 pl-1">
        <x-ui.avatar class="size-4">
            <x-ui.avatar-image src="https://github.com/shadcn.png" alt="@shadcn" />
            <x-ui.avatar-fallback class="text-[0.5rem]">CN</x-ui.avatar-fallback>
        </x-ui.avatar>
        shadcn
    </x-ui.badge>
    <x-ui.badge variant="secondary" class="rounded-full">
        <span class="size-1.5 rounded-full bg-emerald-500" aria-hidden="true"></span> Active
    </x-ui.badge>
    <x-ui.badge variant="outline" class="rounded-full">
        v1.8.0 <x-lucide-arrow-right aria-hidden="true" />
    </x-ui.badge>
</div>

Sizes

Small Default Large
{{-- Three sizes via the `size` prop. --}}
<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge size="sm">Small</x-ui.badge>
    <x-ui.badge size="default">Default</x-ui.badge>
    <x-ui.badge size="lg">Large</x-ui.badge>
</div>

Status

Online Away Offline
<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge variant="outline" class="gap-1.5">
        <span class="size-1.5 rounded-full bg-emerald-500" aria-hidden="true"></span> Online
    </x-ui.badge>
    <x-ui.badge variant="outline" class="gap-1.5">
        <span class="size-1.5 rounded-full bg-amber-500" aria-hidden="true"></span> Away
    </x-ui.badge>
    <x-ui.badge variant="outline" class="gap-1.5">
        <span class="size-1.5 rounded-full bg-muted-foreground" aria-hidden="true"></span> Offline
    </x-ui.badge>
</div>

Tones

Confirmed Pending Declined Info Draft
Confirmed Pending Declined Info Draft
Confirmed Pending Declined Info Draft
<div class="flex flex-col gap-3">
    {{-- soft (default for tones) --}}
    <div class="flex flex-wrap items-center gap-2">
        <x-ui.badge tone="success">Confirmed</x-ui.badge>
        <x-ui.badge tone="warning">Pending</x-ui.badge>
        <x-ui.badge tone="danger">Declined</x-ui.badge>
        <x-ui.badge tone="info">Info</x-ui.badge>
        <x-ui.badge tone="neutral">Draft</x-ui.badge>
    </div>
    {{-- solid --}}
    <div class="flex flex-wrap items-center gap-2">
        <x-ui.badge tone="success" variant="solid">Confirmed</x-ui.badge>
        <x-ui.badge tone="warning" variant="solid">Pending</x-ui.badge>
        <x-ui.badge tone="danger" variant="solid">Declined</x-ui.badge>
        <x-ui.badge tone="info" variant="solid">Info</x-ui.badge>
        <x-ui.badge tone="neutral" variant="solid">Draft</x-ui.badge>
    </div>
    {{-- outline --}}
    <div class="flex flex-wrap items-center gap-2">
        <x-ui.badge tone="success" variant="outline">Confirmed</x-ui.badge>
        <x-ui.badge tone="warning" variant="outline">Pending</x-ui.badge>
        <x-ui.badge tone="danger" variant="outline">Declined</x-ui.badge>
        <x-ui.badge tone="info" variant="outline">Info</x-ui.badge>
        <x-ui.badge tone="neutral" variant="outline">Draft</x-ui.badge>
    </div>
</div>

Variants

Default Secondary Destructive Outline
<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge>Default</x-ui.badge>
    <x-ui.badge variant="secondary">Secondary</x-ui.badge>
    <x-ui.badge variant="destructive">Destructive</x-ui.badge>
    <x-ui.badge variant="outline">Outline</x-ui.badge>
</div>

With Icon

Verified main Error Pending
<div class="flex flex-wrap items-center gap-2">
    <x-ui.badge><x-lucide-badge-check aria-hidden="true" /> Verified</x-ui.badge>
    <x-ui.badge variant="secondary"><x-lucide-git-branch aria-hidden="true" /> main</x-ui.badge>
    <x-ui.badge variant="destructive"><x-lucide-triangle-alert aria-hidden="true" /> Error</x-ui.badge>
    <x-ui.badge variant="outline"><x-lucide-clock aria-hidden="true" /> Pending</x-ui.badge>
</div>

API Reference

Props, slots and exposed methods for <x-ui.badge>.

Props

Prop Type Default Description
variant string 'default' Visual style. Without a tone, use default/secondary/destructive/outline brand styles. With a tone set, variant selects the intensity (soft, solid or outline).
default secondary destructive outline soft solid
tone string Semantic status colour. When set, variant chooses the intensity (soft by default) and overrides the brand variants above.
success warning danger info neutral
size string 'default' Padding and type scale of the badge.
sm default lg
href string When provided, the badge renders as an anchor link with hover styling instead of a span.

Slots

Slot Description
default The badge content — text, and optionally a leading or trailing SVG icon (sized automatically).