{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "stat-card",
  "type": "registry:ui",
  "title": "Stat card",
  "description": "KPI card with title, value, status badge and integrity bar.",
  "dependencies": [],
  "devDependencies": [],
  "registryDependencies": [
    "card",
    "status-badge",
    "progress",
    "utils"
  ],
  "files": [
    {
      "path": "registry/blacksite/ui/stat-card.tsx",
      "type": "registry:ui",
      "target": "components/ui/stat-card.tsx",
      "content": "import * as React from \"react\";\n\nimport { cn, clamp } from \"@/lib/utils\";\nimport { StatusBadge, type StatusBadgeProps } from \"@/registry/blacksite/ui/status-badge\";\nimport { Progress } from \"@/registry/blacksite/ui/progress\";\n\nexport interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {\n  label: React.ReactNode;\n  value: React.ReactNode;\n  status?: StatusBadgeProps[\"status\"];\n  statusLabel?: string;\n  /** Progress / integrity value 0–100. */\n  progress?: number;\n  progressTone?: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"gold\" | \"neutral\";\n  /** Text color tone for the value. */\n  valueTone?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"primary\" | \"gold\";\n}\n\nconst valueToneClass: Record<NonNullable<StatCardProps[\"valueTone\"]>, string> = {\n  default: \"text-foreground\",\n  success: \"text-success\",\n  warning: \"text-warning\",\n  danger: \"text-danger\",\n  info: \"text-info\",\n  primary: \"text-primary\",\n  gold: \"text-gold\",\n};\n\nconst StatCard = React.memo(\n  React.forwardRef<HTMLDivElement, StatCardProps>(\n    (\n      {\n        className,\n        label,\n        value,\n        status,\n        statusLabel,\n        progress,\n        progressTone = \"primary\",\n        valueTone = \"default\",\n        ...props\n      },\n      ref,\n    ) => {\n      return (\n        <div\n          ref={ref}\n          className={cn(\n            \"border-border bg-card flex flex-col gap-2 rounded-md border px-3 py-2.5\",\n            \"shadow-[var(--shadow-panel)]\",\n            className,\n          )}\n          {...props}\n        >\n          <div className=\"flex items-start justify-between gap-2\">\n            <span className=\"text-mono text-foreground-muted truncate text-[10px] tracking-[0.1em] uppercase\">\n              {label}\n            </span>\n            {status && <StatusBadge status={status}>{statusLabel}</StatusBadge>}\n          </div>\n          <div\n            className={cn(\n              \"text-xl leading-tight font-semibold tracking-tight\",\n              valueToneClass[valueTone],\n            )}\n          >\n            {value}\n          </div>\n          {typeof progress === \"number\" && (\n            <Progress value={clamp(progress, 0, 100)} tone={progressTone} size=\"xs\" />\n          )}\n        </div>\n      );\n    },\n  ),\n);\nStatCard.displayName = \"StatCard\";\n\nexport { StatCard };\n"
    }
  ]
}
