{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "empty",
  "title": "Empty",
  "author": "Ballmac <https://ui.ballmac.com>",
  "description": "A responsive empty-state surface with media, concise guidance, and a dedicated action area.",
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ballmac/components/empty.tsx",
      "content": "// Ballmac UI: Empty. https://ui.ballmac.com/components/empty\n// Based on shadcn/ui Empty (MIT, Copyright (c) 2023 shadcn), adding a compact surface and an explicit action slot.\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ntype EmptyProps = React.ComponentProps<\"div\"> & {\n  /** Reduce vertical space when the empty state sits inside a panel. */\n  compact?: boolean\n}\nfunction Empty({ className, compact = false, ...props }: EmptyProps) {\n  return (\n    <div\n      data-slot=\"empty\"\n      data-compact={compact}\n      className={cn(\n        \"flex w-full min-w-0 flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card/50 px-5 py-10 text-center data-[compact=true]:py-6\",\n        className,\n      )}\n      {...props}\n    />\n  )\n}\nfunction EmptyMedia({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-media\"\n      aria-hidden=\"true\"\n      className={cn(\n        \"bg-muted text-muted-foreground mb-4 flex size-11 items-center justify-center rounded-xl [&>svg]:size-5\",\n        className,\n      )}\n      {...props}\n    />\n  )\n}\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n  return (\n    <h3\n      data-slot=\"empty-title\"\n      className={cn(\"text-foreground text-sm font-semibold\", className)}\n      {...props}\n    />\n  )\n}\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n  return (\n    <p\n      data-slot=\"empty-description\"\n      className={cn(\n        \"text-muted-foreground mt-1 max-w-sm text-sm leading-relaxed\",\n        className,\n      )}\n      {...props}\n    />\n  )\n}\nfunction EmptyAction({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-action\"\n      className={cn(\n        \"mt-5 flex flex-wrap items-center justify-center gap-2\",\n        className,\n      )}\n      {...props}\n    />\n  )\n}\nexport {\n  Empty,\n  EmptyMedia,\n  EmptyTitle,\n  EmptyDescription,\n  EmptyAction,\n  type EmptyProps,\n}\n",
      "type": "registry:ui",
      "target": "@components/ballmac/empty.tsx"
    }
  ],
  "meta": {
    "schema": 1,
    "tier": "free",
    "tags": [
      "empty",
      "placeholder",
      "state"
    ],
    "version": "1.0.0",
    "updated": "2026-09-29",
    "ai": {
      "summary": "A responsive empty-state surface with media, concise guidance, and a dedicated action area.",
      "whenToUse": [
        "Explain why a list has no content",
        "Give the next step after a search yields no results"
      ],
      "whenNotToUse": [
        "Use a skeleton while loading"
      ],
      "composesWith": [
        "button"
      ],
      "a11y": [
        {
          "keys": "Tab",
          "action": "reaches actions in the empty state"
        }
      ],
      "customization": [
        "compact: reduce vertical padding"
      ]
    },
    "source": {
      "name": "shadcn/ui Empty",
      "url": "https://github.com/shadcn-ui/ui",
      "license": "MIT",
      "copyright": "Copyright (c) 2023 shadcn",
      "modified": true
    },
    "examples": [
      "empty-demo",
      "empty-states"
    ],
    "url": "https://ui.ballmac.com/components/empty"
  },
  "categories": [
    "feedback"
  ],
  "type": "registry:ui"
}