{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "extends": "none",
  "name": "menu",
  "title": "menu",
  "description": "menu",
  "dependencies": [
    "@heroicons/react",
    "react-aria-components",
    "cn",
    "tailwind-variants"
  ],
  "registryDependencies": [
    "https://intentui.com/r/primitive",
    "https://intentui.com/r/dropdown",
    "https://intentui.com/r/popover"
  ],
  "files": [
    {
      "path": "src/components/ui/menu.tsx",
      "content": "\"use client\"\n\nimport { CheckIcon, ChevronRightIcon } from \"@heroicons/react/20/solid\"\nimport { Collection } from \"react-aria-components/Collection\"\nimport { composeRenderProps } from \"react-aria-components/composeRenderProps\"\nimport { Header } from \"react-aria-components/Header\"\nimport type {\n  MenuItemProps as MenuItemPrimitiveProps,\n  MenuProps as MenuPrimitiveProps,\n  MenuSectionProps as MenuSectionPrimitiveProps,\n} from \"react-aria-components/Menu\"\nimport {\n  Menu as MenuPrimitive,\n  MenuItem as MenuItemPrimitive,\n  MenuSection as MenuSectionPrimitive,\n  MenuTrigger as MenuTriggerPrimitive,\n  SubmenuTrigger,\n} from \"react-aria-components/Menu\"\nimport { cn } from \"cn\"\nimport { tv, type VariantProps } from \"tailwind-variants\"\nimport { cx } from \"@/lib/primitive\"\nimport {\n  DropdownDescription,\n  dropdownItemStyles,\n  DropdownKeyboard,\n  DropdownLabel,\n  dropdownSectionStyles,\n  DropdownSeparator,\n} from \"./dropdown\"\nimport { Popover, type PopoverProps } from \"./popover\"\n\nexport const MenuTrigger = MenuTriggerPrimitive\nexport const MenuSubMenu = SubmenuTrigger\n\nexport interface MenuProps<T> extends MenuPrimitiveProps<T>, Pick<PopoverProps, \"placement\"> {\n  className?: string\n  popover?: Pick<\n    PopoverProps,\n    | \"arrow\"\n    | \"className\"\n    | \"placement\"\n    | \"offset\"\n    | \"crossOffset\"\n    | \"arrowBoundaryOffset\"\n    | \"triggerRef\"\n    | \"isOpen\"\n    | \"onOpenChange\"\n    | \"shouldFlip\"\n    | \"isNonModal\"\n    | \"trigger\"\n    | \"getTargetRect\"\n  >\n}\n\nexport const menuStyles = tv({\n  base: \"grid max-h-[inherit] grid-cols-[auto_1fr] gap-y-1 overflow-x-hidden overflow-y-auto overscroll-contain p-1 outline-hidden [clip-path:inset(0_0_0_0_round_calc(var(--radius-xl)-(--spacing(1))))] [&>[data-slot=menu-section]+[data-slot=menu-section]:not([class*='mt-']):not([class*='my-'])]:mt-3\",\n})\n\nexport function Menu<T extends object>({ className, placement, popover, ...props }: MenuProps<T>) {\n  return (\n    <Popover\n      className={cx(\"min-w-32 *:data-[slot=popover-inner]:overflow-hidden\", popover?.className)}\n      placement={placement}\n      {...popover}\n    >\n      <MenuPrimitive data-slot=\"menu-content\" className={menuStyles({ className })} {...props} />\n    </Popover>\n  )\n}\n\nexport interface MenuItemProps\n  extends MenuItemPrimitiveProps, VariantProps<typeof dropdownItemStyles> {}\n\nexport function MenuItem({ className, intent, children, ...props }: MenuItemProps) {\n  const textValue = props.textValue || (typeof children === \"string\" ? children : undefined)\n  return (\n    <MenuItemPrimitive\n      data-slot=\"menu-item\"\n      className={composeRenderProps(className, (className, { hasSubmenu, ...renderProps }) =>\n        dropdownItemStyles({\n          ...renderProps,\n          intent,\n          className: hasSubmenu\n            ? cn(\n                intent === \"danger\" && \"open:bg-danger-subtle open:text-danger-subtle-foreground\",\n                intent === \"warning\" &&\n                  \"open:bg-warning-subtle open:text-warning-subtle-foreground\",\n                intent === undefined &&\n                  \"open:bg-accent open:text-accent-foreground open:*:[.text-muted-foreground]:text-accent-foreground open:*:[svg]:text-accent-foreground\",\n                className\n              )\n            : className,\n        })\n      )}\n      textValue={textValue}\n      {...props}\n    >\n      {(values) => (\n        <>\n          {values.isSelected && [\"single\", \"multiple\"].includes(values.selectionMode) && (\n            <CheckIcon />\n          )}\n\n          {typeof children === \"function\" ? children(values) : children}\n\n          {values.hasSubmenu && (\n            <ChevronRightIcon\n              data-slot=\"chevron\"\n              className=\"absolute end-0 size-4 -translate-y-1/2\"\n              style={{\n                top: \"calc(var(--spacing) * 3)\",\n              }}\n            />\n          )}\n        </>\n      )}\n    </MenuItemPrimitive>\n  )\n}\n\nexport interface MenuHeaderProps extends React.ComponentProps<typeof Header> {\n  separator?: boolean\n}\n\nexport function MenuHeader({ className, separator = false, ...props }: MenuHeaderProps) {\n  return (\n    <Header\n      className={cn(\n        \"col-span-full px-2.5 py-2 font-medium text-base sm:text-sm\",\n        separator && \"-mx-1 border-b sm:px-3 sm:pb-2.5\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nconst { section, header } = dropdownSectionStyles()\n\nexport interface MenuSectionProps<T> extends MenuSectionPrimitiveProps<T> {\n  ref?: React.Ref<HTMLDivElement>\n  label?: string\n}\n\nexport function MenuSection<T extends object>({\n  className,\n  children,\n  ref,\n  ...props\n}: MenuSectionProps<T>) {\n  return (\n    <MenuSectionPrimitive\n      data-slot=\"menu-section\"\n      ref={ref}\n      className={section({ className })}\n      {...props}\n    >\n      {\"label\" in props && <Header className={header()}>{props.label}</Header>}\n      <Collection items={props.items}>{children}</Collection>\n    </MenuSectionPrimitive>\n  )\n}\n\nexport const MenuSeparator = DropdownSeparator\nexport const MenuShortcut = DropdownKeyboard\nexport const MenuLabel = DropdownLabel\nexport const MenuDescription = DropdownDescription\n",
      "type": "registry:ui"
    }
  ],
  "cssVars": {
    "theme": {
      "color-warning-subtle": "var(--warning-subtle)",
      "color-warning-subtle-foreground": "var(--warning-subtle-foreground)",
      "color-danger-subtle": "var(--danger-subtle)",
      "color-danger-subtle-foreground": "var(--danger-subtle-foreground)"
    },
    "light": {
      "warning-subtle": "oklch(0.828 0.189 84.429 / 0.2)",
      "warning-subtle-foreground": "oklch(0.555 0.163 48.998)",
      "danger-subtle": "oklch(0.637 0.237 25.331 / 0.15)",
      "danger-subtle-foreground": "oklch(0.505 0.213 27.518)"
    },
    "dark": {
      "warning-subtle": "oklch(0.828 0.189 84.429 / 0.1)",
      "warning-subtle-foreground": "oklch(0.828 0.189 84.429)",
      "danger-subtle": "oklch(0.637 0.237 25.331 / 0.1)",
      "danger-subtle-foreground": "oklch(0.704 0.191 22.216)"
    }
  },
  "type": "registry:ui"
}