{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "empty-state",
  "title": "Empty State",
  "description": "Placeholder for an empty list or a search with no results: icon tile, title, description and actions.",
  "dependencies": [
    "class-variance-authority@^0.7.1"
  ],
  "registryDependencies": [
    "@pestoui/style",
    "@pestoui/utils"
  ],
  "files": [
    {
      "path": "pestoui/ui/empty-state.tsx",
      "content": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\n/* \"Nothing here yet\" / \"no results\". Centred column: squircle tile, title,\n   muted line, action row. The size axis is set once on the root and the parts\n   read it off the group, so the block can never end up half-scaled.\n\n   The entrance is one step for the whole block — no blur, no per-part stagger.\n   An empty state is the answer to a query that returned nothing; it should\n   settle into place, not perform. Staggering the tile, the title and the\n   actions would turn an absence of content into a production. */\nconst emptyStateVariants = cva(\n  \"group/empty-state flex w-full flex-col items-center justify-center text-center animate-in fade-in-0 slide-in-from-bottom-2 anim-spring-panel ease-spring-panel\",\n  {\n    variants: {\n      size: {\n        default: \"gap-2 px-6 py-14\",\n        sm: \"gap-1.5 px-4 py-8\",\n      },\n      bordered: {\n        true: \"rounded-xl border border-dashed border-border\",\n        false: \"\",\n      },\n    },\n    defaultVariants: {\n      size: \"default\",\n      bordered: false,\n    },\n  }\n)\n\nfunction EmptyState({\n  className,\n  size = \"default\",\n  bordered = false,\n  ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyStateVariants>) {\n  return (\n    <div\n      data-slot=\"empty-state\"\n      data-size={size}\n      data-bordered={bordered ? \"true\" : \"false\"}\n      className={cn(emptyStateVariants({ size, bordered }), className)}\n      {...props}\n    />\n  )\n}\n\n/* Explicit pixel radii — a token radius on a 56px box collapses it into a\n   circle. These are the squircle pairs the icon tiles use. */\nfunction EmptyStateIcon({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-state-icon\"\n      aria-hidden=\"true\"\n      className={cn(\n        \"mb-2 flex size-14 shrink-0 items-center justify-center rounded-[16px] bg-card text-muted-foreground shadow-tile ring-1 ring-foreground/[0.04] group-data-[size=sm]/empty-state:mb-1 group-data-[size=sm]/empty-state:size-10 group-data-[size=sm]/empty-state:rounded-[12px] [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-7 group-data-[size=sm]/empty-state:[&_svg:not([class*='size-'])]:size-5\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction EmptyStateTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-state-title\"\n      className={cn(\n        \"font-heading text-lg leading-snug font-semibold tracking-title group-data-[size=sm]/empty-state:text-body\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction EmptyStateDescription({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-state-description\"\n      className={cn(\n        \"max-w-md text-body leading-normal text-balance text-muted-foreground group-data-[size=sm]/empty-state:max-w-sm group-data-[size=sm]/empty-state:text-caption\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction EmptyStateActions({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-state-actions\"\n      className={cn(\n        \"mt-3 flex flex-wrap items-center justify-center gap-2.5 group-data-[size=sm]/empty-state:mt-2 group-data-[size=sm]/empty-state:gap-2\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  EmptyState,\n  EmptyStateIcon,\n  EmptyStateTitle,\n  EmptyStateDescription,\n  EmptyStateActions,\n  emptyStateVariants,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}