{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "empty-state",
  "title": "Empty State",
  "description": "Dashed-border centered empty/no-results panel with optional icon, description and action.",
  "dependencies": [
    "cn",
    "lucide-react"
  ],
  "files": [
    {
      "path": "registry/sav/components/empty-state.tsx",
      "content": "// @sav-registry: empty-state\nimport type { LucideIcon } from \"lucide-react\"\nimport { cn } from \"cn\"\n\n/**\n * Unified empty/no-results state. Sharp-bordered dashed panel, centered,\n * optional icon + action. Replaces ad-hoc \"text-center text-muted\" blocks.\n */\nexport function EmptyState({\n  icon: Icon,\n  title,\n  description,\n  action,\n  className,\n}: {\n  icon?: LucideIcon\n  title: string\n  description?: string\n  action?: React.ReactNode\n  className?: string\n}) {\n  return (\n    <div\n      className={cn(\n        \"flex flex-col items-center justify-center gap-3 border border-dashed bg-card px-6 py-16 text-center\",\n        className\n      )}\n    >\n      {Icon ? (\n        <Icon className=\"size-8 text-muted-foreground\" aria-hidden />\n      ) : null}\n      <div className=\"space-y-1\">\n        <p className=\"font-heading text-sm font-medium\">{title}</p>\n        {description ? (\n          <p className=\"max-w-sm text-sm text-muted-foreground\">\n            {description}\n          </p>\n        ) : null}\n      </div>\n      {action}\n    </div>\n  )\n}\n",
      "type": "registry:component",
      "target": "@components/empty-state.tsx"
    }
  ],
  "categories": [
    "patterns"
  ],
  "type": "registry:component"
}