{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "gummy-radix-dropdown-menu",
  "type": "registry:ui",
  "title": "Gummy Dropdown Menu · Radix UI",
  "description": "Gummy Dropdown Menu behavior implemented with Radix UI.",
  "registryDependencies": [
    "https://gummyui.dev/r/gummy-base.json",
    "https://gummyui.dev/r/gummy-core-styles.json",
    "https://gummyui.dev/r/gummy-primitives-styles.json",
    "https://gummyui.dev/r/gummy-radix-compat.json"
  ],
  "dependencies": [
    "@radix-ui/react-dropdown-menu@2.1.24"
  ],
  "files": [
    {
      "path": "components/ui/GummyDropdownMenu.tsx",
      "type": "registry:ui",
      "content": "\"use client\";\n\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport * as React from \"react\";\n\nfunction joinClassNames(...values: Array<string | false | null | undefined>) {\n  return values.filter(Boolean).join(\" \");\n}\n\ntype ContentProps = React.ComponentPropsWithoutRef<typeof DropdownMenu.Content>;\ntype PositioningProps = Pick<\n  ContentProps,\n  \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"collisionPadding\"\n>;\n\nconst PositioningContext = React.createContext<PositioningProps>({});\n\nexport const GummyDropdownMenu = DropdownMenu.Root;\nexport const GummyDropdownMenuPortal = DropdownMenu.Portal;\n\nexport const GummyDropdownMenuTrigger = React.forwardRef<\n  React.ElementRef<typeof DropdownMenu.Trigger>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenu.Trigger>\n>(function GummyDropdownMenuTrigger({ className, children, ...props }, ref) {\n  return (\n    <DropdownMenu.Trigger\n      {...props}\n      ref={ref}\n      className={joinClassNames(\"gummy-menu__trigger\", className)}\n    >\n      <span className=\"gummy-menu__trigger-copy\">{children}</span>\n      <span className=\"gummy-menu__trigger-pool\" aria-hidden=\"true\">\n        <svg className=\"gummy-menu__chevron\" viewBox=\"0 0 14 10\">\n          <path d=\"m2 2.5 5 5 5-5\" />\n        </svg>\n      </span>\n    </DropdownMenu.Trigger>\n  );\n});\n\nexport type GummyDropdownMenuPositionerProps =\n  React.PropsWithChildren<PositioningProps & { className?: string }>;\n\nexport function GummyDropdownMenuPositioner({\n  children,\n  className,\n  ...positioning\n}: GummyDropdownMenuPositionerProps) {\n  return (\n    <PositioningContext.Provider value={positioning}>\n      <div className={joinClassNames(\"gummy-menu__positioner\", className)}>\n        {children}\n      </div>\n    </PositioningContext.Provider>\n  );\n}\n\nexport const GummyDropdownMenuPopup = React.forwardRef<\n  React.ElementRef<typeof DropdownMenu.Content>,\n  ContentProps\n>(function GummyDropdownMenuPopup(\n  { className, children, sideOffset, ...props },\n  ref,\n) {\n  const positioning = React.useContext(PositioningContext);\n  return (\n    <DropdownMenu.Content\n      {...positioning}\n      {...props}\n      ref={ref}\n      sideOffset={sideOffset ?? positioning.sideOffset ?? 0}\n      className={joinClassNames(\"gummy-menu__popup\", className)}\n    >\n      <span className=\"gummy-menu__bridge\" aria-hidden=\"true\" />\n      <span className=\"gummy-menu__reservoir\" aria-hidden=\"true\" />\n      <div className=\"gummy-menu__reading-plane\">{children}</div>\n    </DropdownMenu.Content>\n  );\n});\n\nexport type GummyDropdownMenuItemProps =\n  React.ComponentPropsWithoutRef<typeof DropdownMenu.Item> & {\n    icon?: React.ReactNode;\n    selected?: boolean;\n  };\n\nexport const GummyDropdownMenuItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenu.Item>,\n  GummyDropdownMenuItemProps\n>(function GummyDropdownMenuItem(\n  { className, children, icon, selected = false, ...props },\n  ref,\n) {\n  return (\n    <DropdownMenu.Item\n      {...props}\n      ref={ref}\n      className={joinClassNames(\"gummy-menu__item\", className)}\n      data-selected={selected || undefined}\n      data-has-icon={Boolean(icon) || undefined}\n    >\n      <span className=\"gummy-menu__item-tide\" aria-hidden=\"true\" />\n      {icon ? <span className=\"gummy-menu__item-icon\" aria-hidden=\"true\">{icon}</span> : null}\n      <span className=\"gummy-menu__item-copy\">{children}</span>\n      {selected ? <span className=\"gummy-menu__item-state\">Selected</span> : null}\n    </DropdownMenu.Item>\n  );\n});\n\nexport const GummyDropdownMenuSeparator = React.forwardRef<\n  React.ElementRef<typeof DropdownMenu.Separator>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenu.Separator>\n>(function GummyDropdownMenuSeparator({ className, ...props }, ref) {\n  return <DropdownMenu.Separator {...props} ref={ref} className={joinClassNames(\"gummy-menu__separator\", className)} />;\n});\n\nGummyDropdownMenuTrigger.displayName = \"GummyDropdownMenuTrigger\";\nGummyDropdownMenuPopup.displayName = \"GummyDropdownMenuPopup\";\nGummyDropdownMenuItem.displayName = \"GummyDropdownMenuItem\";\nGummyDropdownMenuSeparator.displayName = \"GummyDropdownMenuSeparator\";\n"
    }
  ]
}
