Badge

Usage

Add the theme to your CSS:

@import "tailwindcss";
@import "@danielfrg/solid-ui-nova/theme.css";

Import and use the Badge component:

import { Badge } from "@danielfrg/solid-ui-nova/badge"
;<Badge variant="outline">Badge</Badge>

Demo

Source
import { Badge } from "@danielfrg/solid-ui-nova/badge"
import { ArrowRight, ArrowUpRight, BadgeCheck, Loader2 } from "lucide-solid"
import { ExampleWrapper, Example } from "@/components/example"

export default function BadgeExample() {
  return (
    <ExampleWrapper class="lg:grid-cols-1">
      <BadgeVariants />
      <BadgeWithIconLeft />
      <BadgeWithIconRight />
      <BadgeWithSpinner />
      <BadgeAsLink />
      <BadgeLongText />
      <BadgeCustomColors />
    </ExampleWrapper>
  )
}

function BadgeVariants() {
  return (
    <Example title="Variants">
      <div class="flex flex-wrap gap-2">
        <Badge>Default</Badge>
        <Badge variant="secondary">Secondary</Badge>
        <Badge variant="destructive">Destructive</Badge>
        <Badge variant="outline">Outline</Badge>
        <Badge variant="ghost">Ghost</Badge>
        <Badge variant="link">Link</Badge>
      </div>
    </Example>
  )
}

function BadgeWithIconLeft() {
  return (
    <Example title="Icon Left">
      <div class="flex flex-wrap gap-2">
        <Badge>
          <BadgeCheck />
          Default
        </Badge>
        <Badge variant="secondary">
          <BadgeCheck />
          Secondary
        </Badge>
        <Badge variant="destructive">
          <BadgeCheck />
          Destructive
        </Badge>
        <Badge variant="outline">
          <BadgeCheck />
          Outline
        </Badge>
        <Badge variant="ghost">
          <BadgeCheck />
          Ghost
        </Badge>
        <Badge variant="link">
          <BadgeCheck />
          Link
        </Badge>
      </div>
    </Example>
  )
}

function BadgeWithIconRight() {
  return (
    <Example title="Icon Right">
      <div class="flex flex-wrap gap-2">
        <Badge>
          Default
          <ArrowRight />
        </Badge>
        <Badge variant="secondary">
          Secondary
          <ArrowRight />
        </Badge>
        <Badge variant="destructive">
          Destructive
          <ArrowRight />
        </Badge>
        <Badge variant="outline">
          Outline
          <ArrowRight />
        </Badge>
        <Badge variant="ghost">
          Ghost
          <ArrowRight />
        </Badge>
        <Badge variant="link">
          Link
          <ArrowRight />
        </Badge>
      </div>
    </Example>
  )
}

function BadgeWithSpinner() {
  return (
    <Example title="With Spinner">
      <div class="flex flex-wrap gap-2">
        <Badge>
          <Loader2 class="animate-spin" />
          Default
        </Badge>
        <Badge variant="secondary">
          <Loader2 class="animate-spin" />
          Secondary
        </Badge>
        <Badge variant="destructive">
          <Loader2 class="animate-spin" />
          Destructive
        </Badge>
        <Badge variant="outline">
          <Loader2 class="animate-spin" />
          Outline
        </Badge>
        <Badge variant="ghost">
          <Loader2 class="animate-spin" />
          Ghost
        </Badge>
        <Badge variant="link">
          <Loader2 class="animate-spin" />
          Link
        </Badge>
      </div>
    </Example>
  )
}

function BadgeAsLink() {
  return (
    <Example title="asChild">
      <div class="flex flex-wrap gap-2">
        <Badge>
          <a href="#" class="inline-flex items-center gap-1">
            Link <ArrowUpRight class="size-3" />
          </a>
        </Badge>
        <Badge variant="secondary">
          <a href="#" class="inline-flex items-center gap-1">
            Link <ArrowUpRight class="size-3" />
          </a>
        </Badge>
        <Badge variant="destructive">
          <a href="#" class="inline-flex items-center gap-1">
            Link <ArrowUpRight class="size-3" />
          </a>
        </Badge>
        <Badge variant="ghost">
          <a href="#" class="inline-flex items-center gap-1">
            Link <ArrowUpRight class="size-3" />
          </a>
        </Badge>
      </div>
    </Example>
  )
}

function BadgeLongText() {
  return (
    <Example title="Long Text">
      <div class="flex flex-wrap gap-2">
        <Badge variant="secondary">A badge with a lot of text to see how it wraps</Badge>
      </div>
    </Example>
  )
}

function BadgeCustomColors() {
  return (
    <Example title="Custom Colors">
      <div class="flex flex-wrap gap-2">
        <Badge class="bg-blue-600 text-blue-50 dark:bg-blue-600 dark:text-blue-50">Blue</Badge>
        <Badge class="bg-green-600 text-green-50 dark:bg-green-600 dark:text-green-50">Green</Badge>
        <Badge class="bg-sky-600 text-sky-50 dark:bg-sky-600 dark:text-sky-50">Sky</Badge>
        <Badge class="bg-purple-600 text-purple-50 dark:bg-purple-600 dark:text-purple-50">Purple</Badge>
        <Badge class="bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300">Blue</Badge>
        <Badge class="bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300">Green</Badge>
        <Badge class="bg-sky-50 text-sky-700 dark:bg-sky-950 dark:text-sky-300">Sky</Badge>
        <Badge class="bg-purple-50 text-purple-700 dark:bg-purple-950 dark:text-purple-300">Purple</Badge>
        <Badge class="bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300">Red</Badge>
      </div>
    </Example>
  )
}