{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "empty-state",
  "title": "Empty State",
  "description": "Centred placeholder for empty lists and panels, with a themable UX4G illustration.",
  "dependencies": [],
  "registryDependencies": [
    "https://indiacn.in/r/theme.json",
    "https://indiacn.in/r/typography.json"
  ],
  "files": [
    {
      "path": "components/ui/empty-state.tsx",
      "content": "import { ComponentProps } from 'react';\n\nimport { Body1 } from '@/components/ui/typography';\nimport { cn } from '@/lib/utils';\n\n/*\n * UX4G empty state: centred column, 8px gap, 16px/24px copy. The default\n * illustration is UX4G's simple empty box, redrawn with theme tokens so it\n * works on a dark surface.\n */\n\n/** Default illustration: UX4G's empty box, coloured from neutral tokens. */\nfunction EmptyStateIllustration({ className, ...props }: ComponentProps<'svg'>) {\n  return (\n    <svg\n      viewBox='0 0 64 40'\n      width='64'\n      height='40'\n      fill='none'\n      role='presentation'\n      aria-hidden\n      className={cn('shrink-0', className)}\n      {...props}\n    >\n      <path\n        className='fill-neutral-50'\n        d='M32 39.7031C49.6731 39.7031 64 36.5923 64 32.755C64 28.9177 49.6731 25.807 32 25.807C14.3269 25.807 0 28.9177 0 32.755C0 36.5923 14.3269 39.7031 32 39.7031Z'\n      />\n      <path\n        className='fill-none stroke-neutral-200'\n        d='M55 13.6653L44.854 2.24866C44.367 1.47048 43.656 1 42.907 1H21.093C20.344 1 19.633 1.47048 19.146 2.24767L9 13.6663V22.8367H55V13.6653Z'\n      />\n      <path\n        className='fill-neutral-0 stroke-neutral-200'\n        d='M41.613 16.8127C41.613 15.2197 42.607 13.9045 43.84 13.9035H55V31.9059C55 34.0131 53.68 35.7402 52.05 35.7402H11.95C10.32 35.7402 9 34.0121 9 31.9059V13.9035H20.16C21.393 13.9035 22.387 15.2167 22.387 16.8098V16.8316C22.387 18.4247 23.392 19.7111 24.624 19.7111H39.376C40.608 19.7111 41.613 18.4128 41.613 16.8197V16.8127Z'\n      />\n    </svg>\n  );\n}\n\n/** Centred placeholder shown when there is nothing to display. */\nfunction EmptyState({ className, ...props }: ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn('flex flex-col items-center justify-center gap-2 text-center', className)}\n      {...props}\n    />\n  );\n}\n\n/** Slot for the illustration. Renders the UX4G default when given no children. */\nfunction EmptyStateMedia({ className, children, ...props }: ComponentProps<'div'>) {\n  return (\n    <div className={cn('flex items-center justify-center', className)} {...props}>\n      {children ?? <EmptyStateIllustration />}\n    </div>\n  );\n}\n\n/** Primary message, e.g. \"No applications yet\". */\nfunction EmptyStateTitle({ className, ...props }: ComponentProps<typeof Body1>) {\n  return <Body1 className={cn('text-neutral', className)} {...props} />;\n}\n\n/** Supporting copy explaining what to do next. */\nfunction EmptyStateDescription({ className, ...props }: ComponentProps<typeof Body1>) {\n  return <Body1 className={cn('text-neutral-600', className)} {...props} />;\n}\n\n/** Row of actions. UX4G puts a single primary button here. */\nfunction EmptyStateActions({ className, ...props }: ComponentProps<'div'>) {\n  return <div className={cn('flex items-center gap-3 pt-2', className)} {...props} />;\n}\n\nexport {\n  EmptyState,\n  EmptyStateMedia,\n  EmptyStateTitle,\n  EmptyStateDescription,\n  EmptyStateActions,\n  EmptyStateIllustration,\n};\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}
