{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "dropdown-menu-tailwind",
  "type": "registry:item",
  "title": "Dropdown Menu (Tailwind)",
  "description": "A dropdown menu component.",
  "files": [
    {
      "path": "registry/brook/tailwind/ui/dropdown-menu.tsx",
      "content": "\"use client\";\n\nimport { Menu } from \"@base-ui/react/menu\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction DropdownMenuRoot({ ...props }: Menu.Root.Props) {\n  return <Menu.Root {...props} />;\n}\n\nfunction DropdownMenuTrigger({ className, ...props }: Menu.Trigger.Props) {\n  return (\n    <Menu.Trigger\n      {...props}\n      className={cn(\n        \"focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2\",\n        \"data-[popup-open]:bg-muted data-[popup-open]:text-foreground\",\n        \"hover:data-[popup-open]:bg-muted hover:data-[popup-open]:text-foreground\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n        className\n      )}\n    />\n  );\n}\n\nconst DropdownMenuPortal = Menu.Portal;\n\nfunction DropdownMenuPositioner({ className, ...props }: Menu.Positioner.Props) {\n  return (\n    <Menu.Positioner\n      className={cn(\"absolute left-0 z-[150]\", className)}\n      data-slot=\"menu-positioner\"\n      side=\"top\"\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuPopup({ className, ...props }: Menu.Popup.Props) {\n  return (\n    <Menu.Popup\n      className={cn(\n        \"min-w-[170px] bg-[var(--popover)]\",\n        \"rounded-[var(--radius)]\",\n        \"flex flex-col\",\n        \"shadow-[0_0_0_0.5px_oklch(from_var(--border)_l_c_h_/_0.8),var(--shadow-border-stack)]\",\n        \"origin-[top_center] transition-[transform,scale,opacity] duration-[250ms] ease-[var(--ease-out-expo)]\",\n        \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n        \"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n        \"data-[side=none]:data-[starting-style]:scale-100 data-[side=none]:data-[starting-style]:opacity-100 data-[side=none]:data-[starting-style]:transition-none\",\n        \"data-[side=none]:data-[ending-style]:transition-none\",\n        className\n      )}\n      data-slot=\"menu-popup\"\n      {...props}\n    />\n  );\n}\n\ninterface DropdownMenuItemProps extends Menu.Item.Props {\n  icon?: ReactNode;\n  className?: string;\n  children?: ReactNode;\n  variant?: \"default\" | \"destructive\";\n}\n\nfunction DropdownMenuItem({ className, icon, children, variant = \"default\", ...props }: DropdownMenuItemProps) {\n  return (\n    <Menu.Item\n      className={cn(\n        \"flex h-8 cursor-pointer items-center gap-3 px-2 pr-1.5 font-normal text-foreground text-sm leading-tight\",\n        \"relative isolate m-0 justify-start\",\n        \"before:-z-10 before:absolute before:inset-x-1 before:inset-y-0 before:rounded-[calc(var(--radius)-4px)] before:bg-transparent before:content-['']\",\n        \"data-[popup-open]:before:bg-[var(--accent)]\",\n        \"data-[highlighted]:before:bg-[var(--accent)]\",\n        \"hover:before:bg-[var(--accent)]\",\n        \"focus:outline-none focus:before:bg-[var(--accent)]\",\n        \"focus-visible:outline-none\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:bg-transparent\",\n        \"[&:hover_span]:text-secondary-foreground [&:hover_span]:opacity-100\",\n        \"data-[variant=destructive]:hover:text-[var(--destructive)]\",\n        \"data-[variant=destructive]:hover:[&_span]:text-[var(--destructive)]\",\n        !icon && \"pl-3\",\n        className\n      )}\n      data-slot=\"menu-item\"\n      data-variant={variant === \"destructive\" ? \"destructive\" : undefined}\n      {...props}\n    >\n      {icon && <span className=\"ml-1 flex items-center justify-center text-muted-foreground\">{icon}</span>}\n      {children}\n    </Menu.Item>\n  );\n}\n\nfunction DropdownMenuSeparator({ className, ...props }: Menu.Separator.Props) {\n  return (\n    <div className=\"py-[5px]\">\n      <Menu.Separator\n        className={cn(\"h-px border-[oklch(from_var(--border)_l_c_h_/_0.8)] border-b-[0.5px]\", className)}\n        {...props}\n      />\n    </div>\n  );\n}\n\nfunction DropdownMenuArrow({ className, ...props }: Menu.Arrow.Props) {\n  return (\n    <Menu.Arrow className={cn(\"fill-background stroke-1 stroke-border\", className)} data-slot=\"menu-arrow\" {...props} />\n  );\n}\n\nfunction DropdownMenuSubmenuRoot({ ...props }: Menu.SubmenuRoot.Props) {\n  return <Menu.SubmenuRoot {...props} />;\n}\n\nfunction DropdownMenuSubmenuTrigger({ className, children, ...props }: Menu.SubmenuTrigger.Props) {\n  return (\n    <Menu.SubmenuTrigger\n      className={cn(\n        \"flex h-8 cursor-pointer items-center gap-3 px-2 pr-1.5 font-normal text-foreground text-sm leading-tight\",\n        \"relative isolate m-0 justify-start\",\n        \"before:-z-10 before:absolute before:inset-x-1 before:inset-y-0 before:rounded-[calc(var(--radius)-4px)] before:bg-transparent before:content-['']\",\n        \"data-[popup-open]:before:bg-[oklch(from_var(--accent)_l_c_h_/_0.7)]\",\n        \"data-[highlighted]:before:bg-[oklch(from_var(--accent)_l_c_h_/_0.7)]\",\n        \"hover:before:bg-[oklch(from_var(--accent)_l_c_h_/_0.7)]\",\n        \"focus:outline-none focus-visible:outline-none\",\n        \"[&:hover_.submenu-icon]:text-secondary-foreground\",\n        className\n      )}\n      data-slot=\"menu-submenutrigger\"\n      {...props}\n    >\n      {children}\n      <ChevronRight className=\"submenu-icon ml-auto h-4 w-4 text-muted-foreground opacity-60\" size={16} />\n    </Menu.SubmenuTrigger>\n  );\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: Menu.RadioGroup.Props) {\n  return <Menu.RadioGroup {...props} />;\n}\n\nfunction DropdownMenuRadioItem({ className, children, ...props }: Menu.RadioItem.Props) {\n  return (\n    <Menu.RadioItem\n      className={cn(\n        \"flex h-8 cursor-pointer items-center gap-3 pr-1.5 pl-3 font-normal text-foreground text-sm leading-tight\",\n        \"relative isolate m-0 justify-start\",\n        \"before:-z-10 before:absolute before:inset-x-1 before:inset-y-0 before:rounded-[calc(var(--radius)-4px)] before:bg-transparent before:content-['']\",\n        \"data-[popup-open]:before:bg-[var(--accent)]\",\n        \"data-[highlighted]:before:bg-[var(--accent)]\",\n        \"hover:before:bg-[var(--accent)]\",\n        \"focus:outline-none focus:before:bg-[var(--accent)]\",\n        \"focus-visible:outline-none\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:bg-transparent\",\n        className\n      )}\n      data-slot=\"menu-radioitem\"\n      {...props}\n    >\n      {children}\n    </Menu.RadioItem>\n  );\n}\n\nfunction DropdownMenuRadioItemIndicator({ className, ...props }: Menu.RadioItemIndicator.Props) {\n  return (\n    <Menu.RadioItemIndicator\n      className={cn(\"ml-auto flex items-center justify-center text-foreground\", className)}\n      {...props}\n    />\n  );\n}\n\ninterface DropdownMenuCheckboxItemProps extends Menu.CheckboxItem.Props {\n  className?: string;\n  children?: ReactNode;\n}\n\nfunction DropdownMenuCheckboxItem({ className, children, ...props }: DropdownMenuCheckboxItemProps) {\n  return (\n    <Menu.CheckboxItem\n      className={cn(\n        \"flex h-8 cursor-pointer items-center justify-between gap-2 px-3 font-normal text-foreground text-sm leading-tight\",\n        \"relative isolate m-0\",\n        \"before:-z-10 before:absolute before:inset-x-1 before:inset-y-0 before:rounded-[calc(var(--radius)-4px)] before:bg-transparent before:content-['']\",\n        \"data-[popup-open]:before:bg-[var(--accent)]\",\n        \"data-[highlighted]:before:bg-[var(--accent)]\",\n        \"hover:before:bg-[var(--accent)]\",\n        \"focus:outline-none focus:before:bg-[var(--accent)]\",\n        \"focus-visible:outline-none\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:bg-transparent\",\n        className\n      )}\n      data-slot=\"menu-checkboxitem\"\n      {...props}\n    >\n      {children}\n    </Menu.CheckboxItem>\n  );\n}\n\nfunction DropdownMenuCheckboxItemIndicator({ className, ...props }: Menu.CheckboxItemIndicator.Props) {\n  return (\n    <Menu.CheckboxItemIndicator\n      className={cn(\"ml-auto flex shrink-0 items-center justify-center text-foreground\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuGroup({ className, ...props }: Menu.Group.Props) {\n  return <Menu.Group className={cn(\"flex flex-col\", className)} data-slot=\"menu-group\" {...props} />;\n}\n\nfunction DropdownMenuGroupLabel({ className, ...props }: Menu.GroupLabel.Props) {\n  return (\n    <Menu.GroupLabel\n      className={cn(\n        \"cursor-default select-none px-3 py-2 font-medium text-muted-foreground text-xs uppercase leading-4 tracking-wide\",\n        className\n      )}\n      data-slot=\"menu-grouplabel\"\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSpacer() {\n  return <div style={{ height: \"4px\", width: \"100%\" }} />;\n}\n\nexport {\n  DropdownMenuRoot as DropdownMenu,\n  DropdownMenuArrow,\n  DropdownMenuCheckboxItem,\n  DropdownMenuCheckboxItemIndicator,\n  DropdownMenuGroup,\n  DropdownMenuGroupLabel,\n  DropdownMenuItem,\n  DropdownMenuPopup,\n  DropdownMenuPortal,\n  DropdownMenuPositioner,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuRadioItemIndicator,\n  DropdownMenuSeparator,\n  DropdownMenuSpacer,\n  DropdownMenuSubmenuRoot,\n  DropdownMenuSubmenuTrigger,\n  DropdownMenuTrigger,\n};\n",
      "type": "registry:file",
      "target": "~/components/ui/dropdown-menu/dropdown-menu.tsx"
    }
  ]
}