{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "menu",
  "title": "Menu",
  "description": "A shadcn-style menu component built with Ark UI primitives.",
  "dependencies": ["@ark-ui/react"],
  "files": [
    {
      "path": "src/components/ui/menu.tsx",
      "content": "\"use client\";\n\nimport {\n  Menu as MenuPrimitive,\n  useMenu,\n  useMenuContext,\n  useMenuItemContext,\n} from \"@ark-ui/react/menu\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport { cn } from \"@/lib/utils\";\n\nexport type MenuProps = MenuPrimitive.RootProps;\n\nexport const Menu = ({ positioning, ...props }: MenuProps) => (\n  <MenuPrimitive.Root\n    data-slot=\"menu\"\n    positioning={{ sizeMiddleware: false, ...positioning }}\n    {...props}\n  />\n);\n\nexport type MenuTriggerProps = MenuPrimitive.TriggerProps;\n\nexport const MenuTrigger = ({ className, ...props }: MenuTriggerProps) => (\n  <MenuPrimitive.Trigger\n    className={cn(className)}\n    data-slot=\"menu-trigger\"\n    {...props}\n  />\n);\n\nexport type MenuContextTriggerProps = MenuPrimitive.ContextTriggerProps;\n\nexport const MenuContextTrigger = ({\n  className,\n  ...props\n}: MenuContextTriggerProps) => (\n  <MenuPrimitive.ContextTrigger\n    className={cn(className)}\n    data-slot=\"menu-context-trigger\"\n    {...props}\n  />\n);\n\nexport type MenuPopupProps = MenuPrimitive.ContentProps & {\n  arrowClassName?: string;\n  arrowTipClassName?: string;\n  disablePortal?: boolean;\n  positionerClassName?: string;\n  showArrow?: boolean;\n};\n\nexport const MenuPopup = ({\n  arrowClassName,\n  arrowTipClassName,\n  children,\n  className,\n  disablePortal,\n  positionerClassName,\n  showArrow = false,\n  ...contentProps\n}: MenuPopupProps) => {\n  const inner = (\n    <MenuPrimitive.Positioner\n      className={cn(!disablePortal && \"z-50\", positionerClassName)}\n      data-slot=\"menu-positioner\"\n    >\n      <MenuPrimitive.Content\n        className={cn(\n          \"relative z-[calc(50+var(--layer-index,0))] min-w-40 rounded-md border border-border/80 bg-popover p-1 text-popover-foreground shadow-md outline-none ring-1 ring-border/20\",\n          \"transition-opacity duration-150 data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n          className,\n        )}\n        data-slot=\"menu-content\"\n        {...contentProps}\n      >\n        {showArrow ? (\n          <MenuPrimitive.Arrow\n            className={cn(\n              \"[--arrow-background:var(--popover)] [--arrow-size:10px] [--arrow-shadow-color:var(--border)]\",\n              arrowClassName,\n            )}\n            data-slot=\"menu-arrow\"\n          >\n            <MenuPrimitive.ArrowTip\n              className={cn(\n                \"border-border border-t border-l\",\n                arrowTipClassName,\n              )}\n              data-slot=\"menu-arrow-tip\"\n            />\n          </MenuPrimitive.Arrow>\n        ) : null}\n        {children}\n      </MenuPrimitive.Content>\n    </MenuPrimitive.Positioner>\n  );\n  return disablePortal ? inner : <Portal>{inner}</Portal>;\n};\n\nexport const MenuArrow = ({\n  className,\n  ...props\n}: MenuPrimitive.ArrowProps) => (\n  <MenuPrimitive.Arrow\n    className={cn(\n      \"[--arrow-background:var(--popover)] [--arrow-size:10px] [--arrow-shadow-color:var(--border)]\",\n      className,\n    )}\n    data-slot=\"menu-arrow-raw\"\n    {...props}\n  />\n);\n\nexport const MenuArrowTip = ({\n  className,\n  ...props\n}: MenuPrimitive.ArrowTipProps) => (\n  <MenuPrimitive.ArrowTip\n    className={cn(\"border-border border-t border-l\", className)}\n    data-slot=\"menu-arrow-tip-raw\"\n    {...props}\n  />\n);\n\nexport const MenuPositioner = ({\n  className,\n  ...props\n}: MenuPrimitive.PositionerProps) => (\n  <MenuPrimitive.Positioner\n    className={cn(className)}\n    data-slot=\"menu-positioner-raw\"\n    {...props}\n  />\n);\n\nexport const MenuContent = ({\n  className,\n  ...props\n}: MenuPrimitive.ContentProps) => (\n  <MenuPrimitive.Content\n    className={cn(className)}\n    data-slot=\"menu-content-raw\"\n    {...props}\n  />\n);\n\nexport type MenuItemProps = MenuPrimitive.ItemProps;\n\nexport const MenuItem = ({ className, ...props }: MenuItemProps) => (\n  <MenuPrimitive.Item\n    className={cn(\n      \"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n      \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n      \"data-highlighted:bg-accent data-highlighted:text-accent-foreground\",\n      className,\n    )}\n    data-slot=\"menu-item\"\n    {...props}\n  />\n);\n\nexport type MenuItemContextProps = MenuPrimitive.ItemContextProps;\n\nexport const MenuItemContext = (props: MenuItemContextProps) => (\n  <MenuPrimitive.ItemContext {...props} />\n);\n\nexport type MenuItemTextProps = MenuPrimitive.ItemTextProps;\n\nexport const MenuItemText = ({ className, ...props }: MenuItemTextProps) => (\n  <MenuPrimitive.ItemText\n    className={cn(\"flex-1 truncate\", className)}\n    data-slot=\"menu-item-text\"\n    {...props}\n  />\n);\n\nexport type MenuItemIndicatorProps = MenuPrimitive.ItemIndicatorProps;\n\nexport const MenuItemIndicator = ({\n  className,\n  ...props\n}: MenuItemIndicatorProps) => (\n  <MenuPrimitive.ItemIndicator\n    className={cn(\n      \"inline-flex size-4 shrink-0 items-center justify-center text-foreground\",\n      className,\n    )}\n    data-slot=\"menu-item-indicator\"\n    {...props}\n  />\n);\n\nexport type MenuCheckboxItemProps = MenuPrimitive.CheckboxItemProps;\n\nexport const MenuCheckboxItem = ({\n  className,\n  ...props\n}: MenuCheckboxItemProps) => (\n  <MenuPrimitive.CheckboxItem\n    className={cn(\n      \"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n      \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n      \"data-highlighted:bg-accent data-highlighted:text-accent-foreground\",\n      className,\n    )}\n    data-slot=\"menu-checkbox-item\"\n    {...props}\n  />\n);\n\nexport type MenuRadioItemGroupProps = MenuPrimitive.RadioItemGroupProps;\n\nexport const MenuRadioItemGroup = ({\n  className,\n  ...props\n}: MenuRadioItemGroupProps) => (\n  <MenuPrimitive.RadioItemGroup\n    className={cn(\"flex flex-col gap-0.5\", className)}\n    data-slot=\"menu-radio-item-group\"\n    {...props}\n  />\n);\n\nexport type MenuRadioItemProps = MenuPrimitive.RadioItemProps;\n\nexport const MenuRadioItem = ({ className, ...props }: MenuRadioItemProps) => (\n  <MenuPrimitive.RadioItem\n    className={cn(\n      \"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n      \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n      \"data-highlighted:bg-accent data-highlighted:text-accent-foreground\",\n      className,\n    )}\n    data-slot=\"menu-radio-item\"\n    {...props}\n  />\n);\n\nexport type MenuItemGroupProps = MenuPrimitive.ItemGroupProps;\n\nexport const MenuItemGroup = ({ className, ...props }: MenuItemGroupProps) => (\n  <MenuPrimitive.ItemGroup\n    className={cn(\"flex flex-col gap-0.5\", className)}\n    data-slot=\"menu-item-group\"\n    {...props}\n  />\n);\n\nexport type MenuItemGroupLabelProps = MenuPrimitive.ItemGroupLabelProps;\n\nexport const MenuItemGroupLabel = ({\n  className,\n  ...props\n}: MenuItemGroupLabelProps) => (\n  <MenuPrimitive.ItemGroupLabel\n    className={cn(\n      \"px-2 py-1.5 font-medium text-muted-foreground text-xs\",\n      className,\n    )}\n    data-slot=\"menu-item-group-label\"\n    {...props}\n  />\n);\n\nexport type MenuSeparatorProps = MenuPrimitive.SeparatorProps;\n\nexport const MenuSeparator = ({ className, ...props }: MenuSeparatorProps) => (\n  <MenuPrimitive.Separator\n    className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n    data-slot=\"menu-separator\"\n    {...props}\n  />\n);\n\nexport type MenuTriggerItemProps = MenuPrimitive.TriggerItemProps;\n\nexport const MenuTriggerItem = ({\n  className,\n  ...props\n}: MenuTriggerItemProps) => (\n  <MenuPrimitive.TriggerItem\n    className={cn(\n      \"relative flex cursor-pointer select-none items-center justify-between gap-2 rounded-sm py-1.5 pe-1.5 ps-2 text-sm outline-none transition-colors\",\n      \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n      \"data-highlighted:bg-accent data-highlighted:text-accent-foreground\",\n      className,\n    )}\n    data-slot=\"menu-trigger-item\"\n    {...props}\n  />\n);\n\nexport type MenuIndicatorProps = MenuPrimitive.IndicatorProps;\n\nexport const MenuIndicator = ({ className, ...props }: MenuIndicatorProps) => (\n  <MenuPrimitive.Indicator\n    className={cn(className)}\n    data-slot=\"menu-indicator\"\n    {...props}\n  />\n);\n\nexport type MenuContextProps = MenuPrimitive.ContextProps;\n\nexport const MenuContext = (props: MenuContextProps) => (\n  <MenuPrimitive.Context {...props} />\n);\n\nexport type MenuRootProviderProps = MenuPrimitive.RootProviderProps;\n\nexport const MenuRootProvider = (props: MenuRootProviderProps) => (\n  <MenuPrimitive.RootProvider data-slot=\"menu-root-provider\" {...props} />\n);\n\nexport { useMenu, useMenuContext, useMenuItemContext };\n",
      "type": "registry:ui",
      "target": "src/components/ui/menu.tsx"
    }
  ],
  "type": "registry:ui"
}
