{ "$schema": "https://blode.co/ui/schema/registry-item.json", "name": "dropdown-menu", "title": "Dropdown Menu", "author": "Matthew Blode", "description": "A menu that opens from a trigger button, displaying a list of actions.", "dependencies": ["@base-ui/react"], "files": [ { "path": "ui/dropdown-menu.tsx", "content": "\"use client\";\n\nimport { Menu as DropdownMenuPrimitive } from \"@base-ui/react/menu\";\nimport { CheckIcon, ChevronRightIcon } from \"blode-icons-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst DropdownMenu = ({ ...props }: DropdownMenuPrimitive.Root.Props) => (\n \n);\n\nconst DropdownMenuPortal = ({ ...props }: DropdownMenuPrimitive.Portal.Props) => (\n \n);\n\nconst DropdownMenuTrigger = ({\n asChild,\n children,\n ...props\n}: DropdownMenuPrimitive.Trigger.Props & {\n asChild?: boolean;\n}) => {\n if (asChild && React.isValidElement(children)) {\n return (\n \n );\n }\n\n return (\n \n {children}\n \n );\n};\n\nconst DropdownMenuContent = ({\n className,\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n children,\n ...props\n}: DropdownMenuPrimitive.Popup.Props &\n Pick<\n DropdownMenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) => (\n \n \n \n
\n {children}\n
\n \n \n
\n);\n\nconst DropdownMenuGroup = ({ ...props }: DropdownMenuPrimitive.Group.Props) => (\n \n);\n\nconst DropdownMenuItem = ({\n className,\n inset,\n variant = \"default\",\n asChild,\n children,\n ...props\n}: DropdownMenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n asChild?: boolean;\n}) => {\n if (asChild && React.isValidElement(children)) {\n return (\n \n );\n }\n\n return (\n \n {children}\n \n );\n};\n\ntype DropdownMenuCheckedState = boolean | \"indeterminate\";\n\ntype DropdownMenuCheckboxItemProps = Omit<\n DropdownMenuPrimitive.CheckboxItem.Props,\n \"checked\" | \"defaultChecked\" | \"onCheckedChange\"\n> & {\n checked?: DropdownMenuCheckedState;\n defaultChecked?: DropdownMenuCheckedState;\n onCheckedChange?: (\n checked: DropdownMenuCheckedState,\n eventDetails: DropdownMenuPrimitive.CheckboxItem.ChangeEventDetails,\n ) => void;\n};\n\nconst DropdownMenuCheckboxItem = ({\n className,\n children,\n checked,\n defaultChecked,\n onCheckedChange,\n inset,\n ...props\n}: DropdownMenuCheckboxItemProps & {\n inset?: boolean;\n}) => (\n onCheckedChange?.(value, eventDetails)}\n {...props}\n >\n \n \n \n \n \n {children}\n \n);\n\nconst DropdownMenuRadioGroup = ({ ...props }: DropdownMenuPrimitive.RadioGroup.Props) => (\n \n);\n\nconst DropdownMenuRadioItem = ({\n className,\n children,\n inset,\n ...props\n}: DropdownMenuPrimitive.RadioItem.Props & {\n inset?: boolean;\n}) => (\n \n \n \n \n \n \n {children}\n \n);\n\nconst DropdownMenuLabel = ({\n className,\n inset,\n ...props\n}: DropdownMenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}) => (\n \n);\n\nconst DropdownMenuSeparator = ({ className, ...props }: DropdownMenuPrimitive.Separator.Props) => (\n \n);\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n \n);\n\nconst DropdownMenuSub = ({ ...props }: DropdownMenuPrimitive.SubmenuRoot.Props) => (\n \n);\n\nconst DropdownMenuSubTrigger = ({\n className,\n inset,\n children,\n ...props\n}: DropdownMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}) => (\n \n {children}\n \n \n);\n\nconst DropdownMenuSubContent = ({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps) => (\n \n);\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n", "type": "registry:ui", "target": "" } ], "type": "registry:ui" }