{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "status-badge",
  "type": "registry:ui",
  "title": "Status badge",
  "description": "Compact monospace status pill (ACTIVE, HIGH, NEW, COMPROMISED…).",
  "dependencies": [],
  "devDependencies": [],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/blacksite/ui/status-badge.tsx",
      "type": "registry:ui",
      "target": "components/ui/status-badge.tsx",
      "content": "import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst statusBadgeVariants = cva(\n  [\n    \"inline-flex items-center gap-1.5 px-1.5 h-5 rounded-[2px]\",\n    \"text-mono text-[10px] uppercase tracking-[0.1em] font-semibold\",\n    \"border whitespace-nowrap\",\n  ].join(\" \"),\n  {\n    variants: {\n      status: {\n        active: \"bg-success/15 text-success border-success/40\",\n        idle: \"bg-foreground/10 text-foreground-muted border-border-strong\",\n        offline: \"bg-foreground/5 text-foreground-subtle border-border\",\n        new: \"bg-danger/15 text-danger border-danger/40\",\n        high: \"bg-warning/15 text-warning border-warning/40\",\n        critical: \"bg-danger/20 text-danger border-danger/60\",\n        compromised: \"bg-danger/15 text-danger border-danger/40\",\n        nominal: \"bg-info/15 text-info border-info/40\",\n        warning: \"bg-warning/15 text-warning border-warning/40\",\n        secured: \"bg-primary/15 text-primary border-primary/40\",\n      },\n      pulse: {\n        true: \"\",\n        false: \"\",\n      },\n    },\n    defaultVariants: {\n      status: \"active\",\n      pulse: false,\n    },\n  },\n);\n\nconst dotColor: Record<string, string> = {\n  active: \"bg-success\",\n  idle: \"bg-foreground-muted\",\n  offline: \"bg-foreground-subtle\",\n  new: \"bg-danger\",\n  high: \"bg-warning\",\n  critical: \"bg-danger\",\n  compromised: \"bg-danger\",\n  nominal: \"bg-info\",\n  warning: \"bg-warning\",\n  secured: \"bg-primary\",\n};\n\nexport interface StatusBadgeProps\n  extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof statusBadgeVariants> {\n  /** Show a leading dot indicator. */\n  dot?: boolean;\n  children?: React.ReactNode;\n}\n\nconst StatusBadge = React.memo(function StatusBadge({\n  className,\n  status = \"active\",\n  pulse,\n  dot = true,\n  children,\n  ...props\n}: StatusBadgeProps) {\n  const key = status ?? \"active\";\n  return (\n    <span className={cn(statusBadgeVariants({ status, pulse }), className)} {...props}>\n      {dot && (\n        <span className=\"relative inline-flex h-1.5 w-1.5 shrink-0\">\n          <span className={cn(\"absolute inset-0 rounded-full\", dotColor[key])} />\n          {pulse && (\n            <span\n              className={cn(\"absolute inset-0 animate-ping rounded-full opacity-60\", dotColor[key])}\n            />\n          )}\n        </span>\n      )}\n      <span>{children ?? key.toUpperCase()}</span>\n    </span>\n  );\n});\n\nexport { StatusBadge, statusBadgeVariants };\n"
    }
  ]
}
