SPB Git forge

spb/fetcha

Public
11commits 1branches 0releases
1.5 MBsize
maindefault branch
16 days agolast push
TypeScript 97.5% SQL 1.4% Python 0.8%
1.8 KB · 44 lines tsx
Raw Blame History
1import * as React from "react";2import { cva, type VariantProps } from "class-variance-authority";3import { cn } from "@/lib/utils";45const 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", {6  variants: {7    variant: {8      default: "border-border bg-bg-muted text-fg-muted",9      outline: "border-border text-fg-muted bg-transparent",10      accent: "border-transparent bg-accent-soft text-accent",11      success: "border-transparent bg-success-soft text-success",12      warning: "border-transparent bg-warning-soft text-warning",13      danger: "border-transparent bg-danger-soft text-danger",14      info: "border-transparent bg-info-soft text-info",15      solid: "border-transparent bg-fg text-bg",16    },17  },18  defaultVariants: { variant: "default" },19});2021export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {22  dot?: boolean;23}2425export function Badge({ className, variant, dot, children, ...props }: BadgeProps) {26  return (27    <span className={cn(badgeVariants({ variant }), className)} {...props}>28      {dot ? <span className="size-1.5 rounded-full bg-current" aria-hidden /> : null}29      {children}30    </span>31  );32}3334export function StatusBadge({ status }: { status: string }) {35  const s = status.toLowerCase();36  const variant: BadgeProps["variant"] =37    ["success", "ok", "active", "healthy", "online", "verified", "live"].includes(s) ? "success"38    : ["failed", "error", "down", "revoked", "banned", "suspended", "blocked"].includes(s) ? "danger"39    : ["pending", "degraded", "expired", "warning", "closed", "test"].includes(s) ? "warning"40    : ["unconfigured", "archived", "disabled"].includes(s) ? "outline"41    : "default";42  return <Badge variant={variant} dot>{status}</Badge>;43}44