import * as React from "react"; import { cva, type VariantProps } from "class-variance-authority"; import { cn } from "@/lib/utils"; const badgeVariants = cva("inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11.5px] font-medium leading-4 whitespace-nowrap", { variants: { variant: { default: "border-border bg-bg-muted text-fg-muted", outline: "border-border text-fg-muted bg-transparent", accent: "border-transparent bg-accent-soft text-accent", success: "border-transparent bg-success-soft text-success", warning: "border-transparent bg-warning-soft text-warning", danger: "border-transparent bg-danger-soft text-danger", info: "border-transparent bg-info-soft text-info", solid: "border-transparent bg-fg text-bg", }, }, defaultVariants: { variant: "default" }, }); export interface BadgeProps extends React.HTMLAttributes, VariantProps { dot?: boolean; } export function Badge({ className, variant, dot, children, ...props }: BadgeProps) { return ( {dot ? : null} {children} ); } export function StatusBadge({ status }: { status: string }) { const s = status.toLowerCase(); const variant: BadgeProps["variant"] = ["success", "ok", "active", "healthy", "online", "verified", "live"].includes(s) ? "success" : ["failed", "error", "down", "revoked", "banned", "suspended", "blocked"].includes(s) ? "danger" : ["pending", "degraded", "expired", "warning", "closed", "test"].includes(s) ? "warning" : ["unconfigured", "archived", "disabled"].includes(s) ? "outline" : "default"; return {status}; }