{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "mobile-menu",
  "type": "registry:component",
  "title": "Mobile Menu",
  "description": "A full-screen overlay mobile menu.",
  "dependencies": [
    "@radix-ui/react-dialog",
    "@radix-ui/react-slot",
    "react-remove-scroll"
  ],
  "registryDependencies": [
    "@joyco/utils"
  ],
  "files": [
    {
      "path": "registry/components/mobile-menu.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { RemoveScroll } from 'react-remove-scroll'\nimport { cn } from '@/lib/utils'\nimport { Slot } from '@radix-ui/react-slot'\n\nconst Root = ({\n  children,\n  modal = false,\n  ...props\n}: React.ComponentProps<typeof Dialog.Root>) => (\n  <Dialog.Root modal={modal} {...props}>\n    {children}\n  </Dialog.Root>\n)\n\nconst Trigger = React.forwardRef<\n  React.ComponentRef<typeof Dialog.Trigger>,\n  React.ComponentPropsWithoutRef<typeof Dialog.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <Dialog.Trigger\n    ref={ref}\n    className={cn(\n      'group/menu-trigger hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring z-20 transform-gpu rounded-md p-2 transition-colors focus-visible:ring-2 focus-visible:outline-none md:hidden',\n      className\n    )}\n    {...props}\n  >\n    {children}\n  </Dialog.Trigger>\n))\nTrigger.displayName = 'Trigger'\n\nconst Close = React.forwardRef<\n  React.ComponentRef<typeof Dialog.Close>,\n  React.ComponentPropsWithoutRef<typeof Dialog.Close>\n>(({ className, children, ...props }, ref) => (\n  <Dialog.Close\n    ref={ref}\n    className={cn(\n      'focus-visible:ring-ring inline-flex items-center justify-center rounded-md p-2 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none',\n      className\n    )}\n    {...props}\n  >\n    {children}\n  </Dialog.Close>\n))\nClose.displayName = 'Close'\n\nconst Content = React.forwardRef<\n  React.ComponentRef<typeof Dialog.Content>,\n  React.ComponentPropsWithoutRef<typeof Dialog.Content>\n>(({ className, children, ...props }, ref) => (\n  <RemoveScroll as={Slot}>\n    <Dialog.Content\n      ref={ref}\n      className={cn(\n        'pt-heading-height bg-background focus-visible:ring-ring data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-top-4 data-[state=open]:slide-in-from-top-4 fixed inset-0 z-10 flex flex-col overflow-y-auto focus-visible:ring-2 focus-visible:outline-none md:hidden',\n        className\n      )}\n      {...props}\n    >\n      <Dialog.Title className=\"sr-only\">Menu</Dialog.Title>\n      {children}\n    </Dialog.Content>\n  </RemoveScroll>\n))\nContent.displayName = 'Content'\n\nconst Navigation = React.forwardRef<\n  HTMLElement,\n  React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n  <nav\n    ref={ref}\n    className={cn('flex flex-1 flex-col gap-1 p-4', className)}\n    {...props}\n  />\n))\nNavigation.displayName = 'Navigation'\n\nconst Item = React.forwardRef<\n  HTMLAnchorElement,\n  React.AnchorHTMLAttributes<HTMLAnchorElement> & { asChild?: boolean }\n>(({ className, asChild, ...props }, ref) => {\n  const Comp = asChild ? Slot : 'a'\n\n  return (\n    <Dialog.Close asChild>\n      <Comp\n        ref={ref}\n        className={cn(\n          'group text-foreground focus-visible:ring-ring flex items-center gap-3 rounded-lg px-2 py-3 text-lg focus-visible:ring-2 focus-visible:outline-none',\n          className\n        )}\n        {...props}\n      />\n    </Dialog.Close>\n  )\n})\nItem.displayName = 'Item'\n\nconst Footer = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div ref={ref} className={cn('mt-auto p-6', className)} {...props} />\n))\nFooter.displayName = 'Footer'\n\nexport { Root, Trigger, Content, Close, Navigation, Item, Footer }\n",
      "type": "registry:component"
    }
  ]
}