{"$schema":"https://ui.logic2b.com/schema/registry-item.json","name":"empty","type":"registry:ui","description":"Displays an empty state placeholder with an icon, title, description and actions. Use for empty lists, search results with no matches or first-run states. Parts: Empty (root), EmptyHeader, EmptyMedia (variant default | icon), EmptyTitle, EmptyDescription, EmptyContent.","dependencies":["class-variance-authority"],"registryDependencies":["utils"],"files":[{"path":"ui/empty.tsx","type":"registry:ui","content":"import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty\"\n      className={cn(\n        \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-header\"\n      className={cn(\n        \"flex max-w-sm flex-col items-center gap-2 text-center\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nconst emptyMediaVariants = cva(\n  \"mb-2 flex shrink-0 items-center justify-center [&_svg:not([class*='size-'])]:size-6 [&_svg]:pointer-events-none\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction EmptyMedia({\n  className,\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n  return (\n    <div\n      data-slot=\"empty-media\"\n      data-variant={variant}\n      className={cn(emptyMediaVariants({ variant, className }))}\n      {...props}\n    />\n  )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-title\"\n      className={cn(\"text-lg font-medium tracking-tight\", className)}\n      {...props}\n    />\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 [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"empty-content\"\n      className={cn(\n        \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Empty,\n  EmptyHeader,\n  EmptyTitle,\n  EmptyDescription,\n  EmptyContent,\n  EmptyMedia,\n}\n"}],"categories":["feedback"],"accessibility":{"support":"consumer","pattern":"empty state","primitive":"HTML div","keyboard":[],"aria":["Preserves native heading, paragraph and action semantics without forcing a live-region announcement."],"consumer":["Use a heading that names the empty state and make the primary recovery action keyboard reachable."]},"api":{"source":"src/ui/empty.tsx","exports":[{"name":"Empty","kind":"component","propsType":"React.ComponentProps<\"div\">"},{"name":"EmptyHeader","kind":"component","propsType":"React.ComponentProps<\"div\">"},{"name":"EmptyTitle","kind":"component","propsType":"React.ComponentProps<\"div\">"},{"name":"EmptyDescription","kind":"component","propsType":"React.ComponentProps<\"p\">"},{"name":"EmptyContent","kind":"component","propsType":"React.ComponentProps<\"div\">"},{"name":"EmptyMedia","kind":"component","propsType":"React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>","props":[{"name":"variant","type":"null | \"default\" | \"icon\"","required":false,"default":"\"default\""}]}]}}