{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "components-base-menu",
  "title": "Menu",
  "description": "A list of actions in a dropdown, enhanced with keyboard navigation.",
  "registryDependencies": [
    "@animate-ui/primitives-base-menu"
  ],
  "files": [
    {
      "path": "registry/components/base/menu/index.tsx",
      "content": "import * as React from 'react';\n\nimport {\n  Menu as MenuPrimitive,\n  MenuTrigger as MenuTriggerPrimitive,\n  MenuPortal as MenuPortalPrimitive,\n  MenuPopup as MenuPopupPrimitive,\n  MenuPositioner as MenuPositionerPrimitive,\n  MenuGroup as MenuGroupPrimitive,\n  MenuGroupLabel as MenuGroupLabelPrimitive,\n  MenuArrow as MenuArrowPrimitive,\n  MenuItem as MenuItemPrimitive,\n  MenuCheckboxItem as MenuCheckboxItemPrimitive,\n  MenuCheckboxItemIndicator as MenuCheckboxItemIndicatorPrimitive,\n  MenuRadioGroup as MenuRadioGroupPrimitive,\n  MenuRadioItem as MenuRadioItemPrimitive,\n  MenuRadioItemIndicator as MenuRadioItemIndicatorPrimitive,\n  MenuHighlightItem as MenuHighlightItemPrimitive,\n  MenuHighlight as MenuHighlightPrimitive,\n  MenuSeparator as MenuSeparatorPrimitive,\n  MenuShortcut as MenuShortcutPrimitive,\n  MenuSubmenu as MenuSubmenuPrimitive,\n  MenuSubmenuTrigger as MenuSubmenuTriggerPrimitive,\n  type MenuProps as MenuPrimitiveProps,\n  type MenuTriggerProps as MenuTriggerPrimitiveProps,\n  type MenuPortalProps as MenuPortalPrimitiveProps,\n  type MenuPopupProps as MenuPopupPrimitiveProps,\n  type MenuPositionerProps as MenuPositionerPrimitiveProps,\n  type MenuGroupProps as MenuGroupPrimitiveProps,\n  type MenuGroupLabelProps as MenuGroupLabelPrimitiveProps,\n  type MenuArrowProps as MenuArrowPrimitiveProps,\n  type MenuItemProps as MenuItemPrimitiveProps,\n  type MenuCheckboxItemProps as MenuCheckboxItemPrimitiveProps,\n  type MenuRadioGroupProps as MenuRadioGroupPrimitiveProps,\n  type MenuRadioItemProps as MenuRadioItemPrimitiveProps,\n  type MenuSeparatorProps as MenuSeparatorPrimitiveProps,\n  type MenuShortcutProps as MenuShortcutPrimitiveProps,\n  type MenuSubmenuProps as MenuSubmenuPrimitiveProps,\n  type MenuSubmenuTriggerProps as MenuSubmenuTriggerPrimitiveProps,\n} from '@/components/animate-ui/primitives/base/menu';\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\ntype MenuProps = MenuPrimitiveProps;\n\nfunction Menu(props: MenuProps) {\n  return <MenuPrimitive {...props} />;\n}\n\ntype MenuTriggerProps = MenuTriggerPrimitiveProps;\n\nfunction MenuTrigger(props: MenuTriggerProps) {\n  return <MenuTriggerPrimitive {...props} />;\n}\n\ntype MenuPortalProps = MenuPortalPrimitiveProps;\n\nfunction MenuPortal(props: MenuPortalProps) {\n  return <MenuPortalPrimitive {...props} />;\n}\n\ntype MenuPanelProps = MenuPopupPrimitiveProps & MenuPositionerPrimitiveProps;\n\nfunction MenuPanel({\n  className,\n  finalFocus,\n  id,\n  children,\n  sideOffset = 4,\n  transition = { duration: 0.2 },\n  ...props\n}: MenuPanelProps) {\n  return (\n    <MenuPortal>\n      <MenuPositionerPrimitive\n        className=\"z-50\"\n        sideOffset={sideOffset}\n        {...props}\n      >\n        <MenuPopupPrimitive\n          finalFocus={finalFocus}\n          transition={transition}\n          id={id}\n          className={cn(\n            'bg-popover text-popover-foreground max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md outline-none',\n            className,\n          )}\n        >\n          <MenuHighlightPrimitive className=\"absolute inset-0 bg-accent z-0 rounded-sm\">\n            {children}\n          </MenuHighlightPrimitive>\n        </MenuPopupPrimitive>\n      </MenuPositionerPrimitive>\n    </MenuPortal>\n  );\n}\n\ntype MenuGroupProps = MenuGroupPrimitiveProps;\n\nfunction MenuGroup(props: MenuGroupProps) {\n  return <MenuGroupPrimitive {...props} />;\n}\n\ntype MenuGroupLabelProps = MenuGroupLabelPrimitiveProps & {\n  inset?: boolean;\n};\n\nfunction MenuGroupLabel({ className, inset, ...props }: MenuGroupLabelProps) {\n  return (\n    <MenuGroupLabelPrimitive\n      data-inset={inset}\n      className={cn(\n        'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\ntype MenuItemProps = MenuItemPrimitiveProps & {\n  inset?: boolean;\n  variant?: 'default' | 'destructive';\n};\n\nfunction MenuItem({\n  className,\n  inset,\n  variant = 'default',\n  disabled,\n  ...props\n}: MenuItemProps) {\n  return (\n    <MenuHighlightItemPrimitive\n      activeClassName={\n        variant === 'destructive'\n          ? 'bg-destructive/10 dark:bg-destructive/20'\n          : ''\n      }\n      disabled={disabled}\n    >\n      <MenuItemPrimitive\n        disabled={disabled}\n        data-inset={inset}\n        data-variant={variant}\n        className={cn(\n          \"focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n          className,\n        )}\n        {...props}\n      />\n    </MenuHighlightItemPrimitive>\n  );\n}\n\ntype MenuCheckboxItemProps = MenuCheckboxItemPrimitiveProps;\n\nfunction MenuCheckboxItem({\n  className,\n  children,\n  checked,\n  disabled,\n  ...props\n}: MenuCheckboxItemProps) {\n  return (\n    <MenuHighlightItemPrimitive disabled={disabled}>\n      <MenuCheckboxItemPrimitive\n        disabled={disabled}\n        className={cn(\n          \"focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n          className,\n        )}\n        checked={checked}\n        {...props}\n      >\n        <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n          <MenuCheckboxItemIndicatorPrimitive\n            initial={{ opacity: 0, scale: 0.5 }}\n            animate={{ opacity: 1, scale: 1 }}\n          >\n            <CheckIcon className=\"size-4\" />\n          </MenuCheckboxItemIndicatorPrimitive>\n        </span>\n        {children}\n      </MenuCheckboxItemPrimitive>\n    </MenuHighlightItemPrimitive>\n  );\n}\n\ntype MenuRadioGroupProps = MenuRadioGroupPrimitiveProps;\n\nfunction MenuRadioGroup(props: MenuRadioGroupProps) {\n  return <MenuRadioGroupPrimitive {...props} />;\n}\n\ntype MenuRadioItemProps = MenuRadioItemPrimitiveProps;\n\nfunction MenuRadioItem({\n  className,\n  children,\n  disabled,\n  ...props\n}: MenuRadioItemProps) {\n  return (\n    <MenuHighlightItemPrimitive disabled={disabled}>\n      <MenuRadioItemPrimitive\n        disabled={disabled}\n        className={cn(\n          \"focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n          className,\n        )}\n        {...props}\n      >\n        <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n          <MenuRadioItemIndicatorPrimitive layoutId=\"dropdown-menu-item-indicator-radio\">\n            <CircleIcon className=\"size-2 fill-current\" />\n          </MenuRadioItemIndicatorPrimitive>\n        </span>\n        {children}\n      </MenuRadioItemPrimitive>\n    </MenuHighlightItemPrimitive>\n  );\n}\n\ntype MenuSeparatorProps = MenuSeparatorPrimitiveProps;\n\nfunction MenuSeparator({ className, ...props }: MenuSeparatorProps) {\n  return (\n    <MenuSeparatorPrimitive\n      className={cn('bg-border -mx-1 my-1 h-px', className)}\n      {...props}\n    />\n  );\n}\n\ntype MenuShortcutProps = MenuShortcutPrimitiveProps;\n\nfunction MenuShortcut({ className, ...props }: MenuShortcutProps) {\n  return (\n    <MenuShortcutPrimitive\n      className={cn(\n        'text-muted-foreground ml-auto text-xs tracking-widest',\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\ntype MenuArrowProps = MenuArrowPrimitiveProps;\n\nfunction MenuArrow(props: MenuArrowProps) {\n  return <MenuArrowPrimitive {...props} />;\n}\n\ntype MenuSubmenuProps = MenuSubmenuPrimitiveProps;\n\nfunction MenuSubmenu(props: MenuSubmenuProps) {\n  return <MenuSubmenuPrimitive {...props} />;\n}\n\ntype MenuSubmenuTriggerProps = MenuSubmenuTriggerPrimitiveProps & {\n  inset?: boolean;\n  children?: React.ReactNode;\n};\n\nfunction MenuSubmenuTrigger({\n  disabled,\n  className,\n  inset,\n  children,\n  ...props\n}: MenuSubmenuTriggerProps) {\n  return (\n    <MenuHighlightItemPrimitive disabled={disabled}>\n      <MenuSubmenuTriggerPrimitive\n        disabled={disabled}\n        data-inset={inset}\n        className={cn(\n          'focus:text-accent-foreground data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',\n          'aria-[expanded=true]:[&_[data-slot=chevron]]:rotate-90 [&_[data-slot=chevron]]:transition-transform [&_[data-slot=chevron]]:duration-300 [&_[data-slot=chevron]]:ease-in-out',\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        <ChevronRightIcon data-slot=\"chevron\" className=\"ml-auto size-4\" />\n      </MenuSubmenuTriggerPrimitive>\n    </MenuHighlightItemPrimitive>\n  );\n}\n\ntype MenuSubmenuPanelProps = MenuPopupPrimitiveProps &\n  MenuPositionerPrimitiveProps;\n\nfunction MenuSubmenuPanel({\n  className,\n  finalFocus,\n  id,\n  children,\n  sideOffset = 4,\n  transition = { duration: 0.2 },\n  ...props\n}: MenuSubmenuPanelProps) {\n  return (\n    <MenuPortal>\n      <MenuPositionerPrimitive\n        className=\"z-50\"\n        sideOffset={sideOffset}\n        {...props}\n      >\n        <MenuPopupPrimitive\n          finalFocus={finalFocus}\n          transition={transition}\n          id={id}\n          className={cn(\n            'bg-popover text-popover-foreground max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',\n            className,\n          )}\n        >\n          {children}\n        </MenuPopupPrimitive>\n      </MenuPositionerPrimitive>\n    </MenuPortal>\n  );\n}\n\nexport {\n  Menu,\n  MenuTrigger,\n  MenuPortal,\n  MenuPanel,\n  MenuGroup,\n  MenuGroupLabel,\n  MenuItem,\n  MenuCheckboxItem,\n  MenuRadioGroup,\n  MenuRadioItem,\n  MenuSeparator,\n  MenuShortcut,\n  MenuArrow,\n  MenuSubmenu,\n  MenuSubmenuTrigger,\n  MenuSubmenuPanel,\n  type MenuProps,\n  type MenuTriggerProps,\n  type MenuPortalProps,\n  type MenuPanelProps,\n  type MenuGroupProps,\n  type MenuGroupLabelProps,\n  type MenuItemProps,\n  type MenuCheckboxItemProps,\n  type MenuRadioGroupProps,\n  type MenuRadioItemProps,\n  type MenuSeparatorProps,\n  type MenuShortcutProps,\n  type MenuArrowProps,\n  type MenuSubmenuProps,\n  type MenuSubmenuTriggerProps,\n  type MenuSubmenuPanelProps,\n};\n",
      "type": "registry:ui",
      "target": "components/animate-ui/components/base/menu.tsx"
    }
  ],
  "type": "registry:ui"
}