{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "dropdown-menu",
  "title": "Dropdown Menu",
  "description": "A complete keyboard-accessible menu with checkbox, radio, and submenu items.",
  "dependencies": [
    "@base-ui/react"
  ],
  "registryDependencies": [
    "@neumorphism-ui/utils"
  ],
  "files": [
    {
      "path": "src/components/ui/dropdown-menu.tsx",
      "content": "\"use client\";\n\nimport * as React from \"react\";\nimport { Menu as DropdownMenuPrimitive } from \"@base-ui/react/menu\";\n\nimport { cn, mergeClassName } from \"@/lib/utils\";\n\ntype DropdownMenuPositionerProps = Pick<\n  DropdownMenuPrimitive.Positioner.Props,\n  \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n>;\n\ntype DropdownMenuContentProps = DropdownMenuPrimitive.Popup.Props &\n  DropdownMenuPositionerProps;\n\nfunction DropdownMenu(props: DropdownMenuPrimitive.Root.Props) {\n  return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal(props: DropdownMenuPrimitive.Portal.Props) {\n  return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger(props: DropdownMenuPrimitive.Trigger.Props) {\n  return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n  className,\n  align = \"start\",\n  alignOffset = 0,\n  side = \"bottom\",\n  sideOffset = 8,\n  ...props\n}: DropdownMenuContentProps) {\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Positioner\n        align={align}\n        alignOffset={alignOffset}\n        collisionPadding={8}\n        className=\"isolate z-50 outline-none\"\n        side={side}\n        sideOffset={sideOffset}\n      >\n        <DropdownMenuPrimitive.Popup\n          data-slot=\"dropdown-menu-content\"\n          className={mergeClassName<DropdownMenuPrimitive.Popup.State>(\n            \"max-h-[var(--available-height)] max-w-[min(24rem,var(--available-width))] min-w-36 origin-[var(--transform-origin)] overflow-x-hidden overflow-y-auto rounded-[var(--neu-radius-overlay)] border border-[color:var(--neu-edge)] bg-[var(--popover)] p-1.5 text-[var(--popover-foreground)] [box-shadow:var(--neu-shadow-floating)] outline-none transition-[transform,opacity] duration-[var(--neu-duration)] motion-reduce:transition-none data-[ending-style]:scale-95 data-[ending-style]:opacity-0 data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n            className,\n          )}\n          {...props}\n        />\n      </DropdownMenuPrimitive.Positioner>\n    </DropdownMenuPrimitive.Portal>\n  );\n}\n\nfunction DropdownMenuGroup(props: DropdownMenuPrimitive.Group.Props) {\n  return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuItem({\n  className,\n  inset,\n  variant = \"default\",\n  ...props\n}: DropdownMenuPrimitive.Item.Props & {\n  inset?: boolean;\n  variant?: \"default\" | \"destructive\";\n}) {\n  return (\n    <DropdownMenuPrimitive.Item\n      data-slot=\"dropdown-menu-item\"\n      data-inset={inset}\n      data-variant={variant}\n      className={mergeClassName<DropdownMenuPrimitive.Item.State>(\n        \"relative flex min-h-10 min-w-0 [overflow-wrap:anywhere] cursor-default items-center gap-2 rounded-[var(--neu-radius-small)] px-2.5 py-2 text-sm outline-none select-none transition-[color,background-color] duration-[var(--neu-duration)] motion-reduce:transition-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-[var(--neu-surface)] data-[highlighted]:[box-shadow:var(--neu-shadow-inset-sm)] data-[highlighted]:text-[var(--foreground)] data-[inset=true]:pl-8 data-[variant=destructive]:text-[var(--destructive)] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuCheckboxItem({\n  className,\n  children,\n  checked,\n  ...props\n}: DropdownMenuPrimitive.CheckboxItem.Props) {\n  return (\n    <DropdownMenuPrimitive.CheckboxItem\n      data-slot=\"dropdown-menu-checkbox-item\"\n      checked={checked}\n      className={mergeClassName<DropdownMenuPrimitive.CheckboxItem.State>(\n        \"relative flex min-h-10 min-w-0 [overflow-wrap:anywhere] cursor-default items-center gap-2 rounded-[var(--neu-radius-small)] py-2 pr-2.5 pl-8 text-sm outline-none select-none transition-colors duration-[var(--neu-duration)] motion-reduce:transition-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-[var(--neu-surface)] data-[highlighted]:[box-shadow:var(--neu-shadow-inset-sm)]\",\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2.5 grid size-4 place-items-center text-[var(--primary)]\">\n        <DropdownMenuPrimitive.CheckboxItemIndicator>\n          <svg aria-hidden=\"true\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"m5 12 4 4L19 6\" /></svg>\n        </DropdownMenuPrimitive.CheckboxItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.CheckboxItem>\n  );\n}\n\nfunction DropdownMenuRadioGroup(props: DropdownMenuPrimitive.RadioGroup.Props) {\n  return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n  className,\n  children,\n  ...props\n}: DropdownMenuPrimitive.RadioItem.Props) {\n  return (\n    <DropdownMenuPrimitive.RadioItem\n      data-slot=\"dropdown-menu-radio-item\"\n      className={mergeClassName<DropdownMenuPrimitive.RadioItem.State>(\n        \"relative flex min-h-10 min-w-0 [overflow-wrap:anywhere] cursor-default items-center gap-2 rounded-[var(--neu-radius-small)] py-2 pr-2.5 pl-8 text-sm outline-none select-none transition-colors duration-[var(--neu-duration)] motion-reduce:transition-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-[var(--neu-surface)] data-[highlighted]:[box-shadow:var(--neu-shadow-inset-sm)]\",\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2.5 grid size-4 place-items-center text-[var(--primary)]\">\n        <DropdownMenuPrimitive.RadioItemIndicator>\n          <span className=\"text-base leading-none\" aria-hidden=\"true\">\n            •\n          </span>\n        </DropdownMenuPrimitive.RadioItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.RadioItem>\n  );\n}\n\nfunction DropdownMenuLabel({\n  className,\n  inset,\n  ...props\n}: DropdownMenuPrimitive.GroupLabel.Props & {\n  inset?: boolean;\n}) {\n  return (\n    <DropdownMenuPrimitive.GroupLabel\n      data-slot=\"dropdown-menu-label\"\n      data-inset={inset}\n      className={mergeClassName<DropdownMenuPrimitive.GroupLabel.State>(\n        \"px-2.5 py-1.5 text-xs font-semibold text-[var(--muted-foreground)] data-[inset=true]:pl-8\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSeparator({\n  className,\n  ...props\n}: DropdownMenuPrimitive.Separator.Props) {\n  return (\n    <DropdownMenuPrimitive.Separator\n      data-slot=\"dropdown-menu-separator\"\n      className={mergeClassName<DropdownMenuPrimitive.Separator.State>(\n        \"-mx-1 my-1 h-px bg-[var(--border)]\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n  return (\n    <span\n      data-slot=\"dropdown-menu-shortcut\"\n      className={cn(\n        \"ml-auto shrink-0 whitespace-nowrap text-xs tracking-widest text-[var(--muted-foreground)]\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSub(props: DropdownMenuPrimitive.SubmenuRoot.Props) {\n  return <DropdownMenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n  className,\n  inset,\n  children,\n  ...props\n}: DropdownMenuPrimitive.SubmenuTrigger.Props & {\n  inset?: boolean;\n}) {\n  return (\n    <DropdownMenuPrimitive.SubmenuTrigger\n      data-slot=\"dropdown-menu-sub-trigger\"\n      data-inset={inset}\n      className={mergeClassName<DropdownMenuPrimitive.SubmenuTrigger.State>(\n        \"flex min-h-10 min-w-0 [overflow-wrap:anywhere] cursor-default items-center gap-2 rounded-[var(--neu-radius-small)] px-2.5 py-2 text-sm outline-none select-none data-[highlighted]:bg-[var(--neu-surface)] data-[highlighted]:[box-shadow:var(--neu-shadow-inset-sm)] data-[inset=true]:pl-8 data-[popup-open]:bg-[var(--neu-surface-low)]\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <span\n        className=\"ml-auto text-base text-[var(--muted-foreground)]\"\n        aria-hidden=\"true\"\n      >\n        ›\n      </span>\n    </DropdownMenuPrimitive.SubmenuTrigger>\n  );\n}\n\nfunction DropdownMenuSubContent({\n  className,\n  align = \"start\",\n  alignOffset = -4,\n  side = \"right\",\n  sideOffset = 8,\n  ...props\n}: DropdownMenuContentProps) {\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Positioner\n        align={align}\n        alignOffset={alignOffset}\n        collisionPadding={8}\n        className=\"isolate z-50 outline-none\"\n        side={side}\n        sideOffset={sideOffset}\n      >\n        <DropdownMenuPrimitive.Popup\n          data-slot=\"dropdown-menu-sub-content\"\n          className={mergeClassName<DropdownMenuPrimitive.Popup.State>(\n            \"max-h-[var(--available-height)] max-w-[min(24rem,var(--available-width))] min-w-36 origin-[var(--transform-origin)] overflow-x-hidden overflow-y-auto overscroll-contain rounded-[var(--neu-radius-overlay)] border border-[color:var(--neu-edge)] bg-[var(--popover)] p-1.5 text-[var(--popover-foreground)] [box-shadow:var(--neu-shadow-floating)] outline-none transition-[transform,opacity] duration-[var(--neu-duration)] motion-reduce:transition-none data-[ending-style]:scale-95 data-[ending-style]:opacity-0 data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n            className,\n          )}\n          {...props}\n        />\n      </DropdownMenuPrimitive.Positioner>\n    </DropdownMenuPrimitive.Portal>\n  );\n}\n\nexport {\n  DropdownMenu,\n  DropdownMenuCheckboxItem,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuPortal,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuSub,\n  DropdownMenuSubContent,\n  DropdownMenuSubTrigger,\n  DropdownMenuTrigger,\n};\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}