Aura Design System

Badge

Displays a badge or a component that looks like a badge.

Installation

Make sure that namespace is set in your component.json file. Namespace docs: Learn more about namespaces

pnpm dlx shadcn@latest add @aura/badge

Manual

Install the following dependencies:

pnpm install @radix-ui/react-slot class-variance-authority

Copy and paste the class names utility into your utils/class-names.ts file.

import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

Copy and paste the Badge component into your components/ui/Badge.tsx file.

/**
 * @description Displays a badge or a component that looks like a badge.
 */
import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/utils/class-names"

const badgeVariants = cva(
    "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
    {
        variants: {
            variant: {
                default:
                    "border-transparent bg-gray-12 text-gray-1 hover:bg-gray-12/80",
                secondary:
                    "border-transparent bg-gray-3 text-gray-12 hover:bg-gray-3/80",
                destructive:
                    "border-transparent bg-danger text-danger-contrast hover:bg-danger/80",
                outline: "text-gray-12",
            },
            status: {
                default: "",
                success: "border-transparent bg-success text-success-contrast hover:bg-success/80",
                warning: "border-transparent bg-warning text-warning-contrast hover:bg-warning/80",
                danger: "border-transparent bg-danger text-danger-contrast hover:bg-danger/80",
                info: "border-transparent bg-info text-info-contrast hover:bg-info/80",
            }
        },
        defaultVariants: {
            variant: "default",
            status: "default",
        },
    }
)

export interface BadgeProps
    extends React.HTMLAttributes<HTMLDivElement>,
    VariantProps<typeof badgeVariants> {
    asChild?: boolean
}

const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(
    ({ className, variant, status, asChild = false, ...props }, ref) => {
        const Comp = asChild ? Slot : "div"
        return (
            <Comp
                className={cn(badgeVariants({ variant, status }), className)}
                ref={ref}
                {...props}
            />
        )
    }
)

Badge.displayName = "Badge"

export { Badge, badgeVariants }

On this page