Dropdown Menu
Anatomy
Section titled “Anatomy”<DropdownMenu> <DropdownMenuTrigger /> <DropdownMenuContent> <DropdownMenuLabel /> <DropdownMenuSeparator /> <DropdownMenuItem /> <DropdownMenuSub> <DropdownMenuSubTrigger /> <DropdownMenuSubContent> <DropdownMenuItem /> </DropdownMenuSubContent> </DropdownMenuSub> </DropdownMenuContent></DropdownMenu>To display a dropdown menu, compose <DropdownMenu>, <DropdownMenuTrigger>, <DropdownMenuContent>, and one or more of <DropdownMenuItem>.
import { Button } from "stylus-ui/Button";import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger,} from "stylus-ui/DropdownMenu";import { faAngleDown, faArrowRightFromBracket, faCreditCard, faKeyboard, faPlus, faQuestionCircle, faSliders, faTrash, faUser,} from "@fortawesome/pro-regular-svg-icons";
export default () => ( <DropdownMenu> <DropdownMenuTrigger asChild> <Button variant="secondary">Open Menu</Button> </DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuLabel variant="title">Menu Title</DropdownMenuLabel> <DropdownMenuSeparator /> <DropdownMenuItem icon={faUser} showShortcut shortcutText="⌘K"> Profile </DropdownMenuItem> <DropdownMenuItem icon={faCreditCard} showShortcut shortcutText="⌘B"> Billing </DropdownMenuItem> <DropdownMenuSub> <DropdownMenuSubTrigger icon={faSliders}> Settings </DropdownMenuSubTrigger> <DropdownMenuSubContent> <DropdownMenuItem icon={faArrowRightFromBracket}> Transfer account </DropdownMenuItem> <DropdownMenuItem variant="destructive" icon={faTrash}> Delete account </DropdownMenuItem> </DropdownMenuSubContent> </DropdownMenuSub> <DropdownMenuItem icon={faKeyboard}>Keyboard shortcuts</DropdownMenuItem> <DropdownMenuItem icon={faPlus} showTag disabled> New Team </DropdownMenuItem> <DropdownMenuItem icon={faQuestionCircle}>Support</DropdownMenuItem> <DropdownMenuSeparator /> <DropdownMenuItem icon={faArrowRightFromBracket} showShortcut shortcutText="esc" > Log Out </DropdownMenuItem> </DropdownMenuContent> </DropdownMenu>);Checkboxes
Section titled “Checkboxes”To display a multiselect dropdown with checkboxes, use <DropdownMenuCheckboxItem> instead of <DropdownMenuItem>.
import { Button } from "stylus-ui/Button";import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuCheckboxItem,} from "stylus-ui/DropdownMenu";import { useState } from "react";
export default () => { const [isHighContrastChecked, setIsHighContrastChecked] = useState(true); const [isReduceMotionChecked, setIsReduceMotionChecked] = useState(false); return ( <DropdownMenu> <DropdownMenuTrigger asChild> <Button variant="secondary" dropdown> Accessibility </Button> </DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuCheckboxItem checked={isHighContrastChecked} onCheckedChange={setIsHighContrastChecked} > Enable High Contrast </DropdownMenuCheckboxItem> <DropdownMenuCheckboxItem checked={isReduceMotionChecked} onCheckedChange={setIsReduceMotionChecked} > Reduce Motion </DropdownMenuCheckboxItem> </DropdownMenuContent> </DropdownMenu> );};Radio group
Section titled “Radio group”To display a radio button group, use <DropdownMenuRadioItem> and wrap the items in <DropdownMenuRadioGroup>.
import { Button } from "stylus-ui/Button";import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem,} from "stylus-ui/DropdownMenu";import { useState } from "react";import { faGrid, faGrid4, faGrid5 } from "@fortawesome/pro-regular-svg-icons";
export default () => { const [selectedValue, setSelectedValue] = useState("default"); return ( <DropdownMenu> <DropdownMenuTrigger asChild> <Button variant="secondary" dropdown> Density </Button> </DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuRadioGroup value={selectedValue} onValueChange={setSelectedValue} > <DropdownMenuRadioItem value="default" icon={faGrid}> Default </DropdownMenuRadioItem> <DropdownMenuRadioItem value="comfortable" icon={faGrid4}> Comfortable </DropdownMenuRadioItem> <DropdownMenuRadioItem value="compact" icon={faGrid5}> Compact </DropdownMenuRadioItem> </DropdownMenuRadioGroup> </DropdownMenuContent> </DropdownMenu> );};Submenus
Section titled “Submenus”To display a nested menu, compose <DropdownMenuSub>, <DropdownMenuSubTrigger>, <DropdownMenuSubContent>, and one or more of <DropdownMenuItem> within <DropdownMenuContent>.
import { Button } from "stylus-ui/Button";import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent,} from "stylus-ui/DropdownMenu";
export default () => ( <DropdownMenu> <DropdownMenuTrigger asChild> <Button variant="secondary" dropdown> Settings </Button> </DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuItem>Profile</DropdownMenuItem> <DropdownMenuItem>Billing</DropdownMenuItem> <DropdownMenuItem>Team</DropdownMenuItem> <DropdownMenuItem>Subscription</DropdownMenuItem> <DropdownMenuSub> <DropdownMenuSubTrigger>Theme</DropdownMenuSubTrigger> <DropdownMenuSubContent> <DropdownMenuItem>Light</DropdownMenuItem> <DropdownMenuItem>Dark</DropdownMenuItem> </DropdownMenuSubContent> </DropdownMenuSub> </DropdownMenuContent> </DropdownMenu>);API Reference
Section titled “API Reference”DropdownMenu
Section titled “DropdownMenu”Displays a menu to the user, such as a set of actions or functions, triggered by a button.
defaultOpen
dir
modal
onOpenChange
open
DropdownMenuTrigger
Section titled “DropdownMenuTrigger”The button that toggles the dropdown menu. By default, the DropdownMenu.Content will position itself against the trigger.
asChild
DropdownMenuGroup
Section titled “DropdownMenuGroup”Used to group multiple DropdownMenuItems.
asChild
DropdownMenuPortal
Section titled “DropdownMenuPortal”When used, portals the content part into the body.
container
Specify a container element to portal the content into.
forceMount
Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
DropdownMenuSub
Section titled “DropdownMenuSub”Contains all the parts of a submenu.
defaultOpen
onOpenChange
open
DropdownMenuRadioGroup
Section titled “DropdownMenuRadioGroup”Used to group multiple DropdownMenuRadioItems.
asChild
onValueChange
value
DropdownMenuSubContent
Section titled “DropdownMenuSubContent”The component that pops out when a submenu is open. Must be rendered inside DropdownMenuSub.
alignOffset
arrowPadding
asChild
avoidCollisions
collisionBoundary
collisionPadding
forceMount
Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
hideWhenDetached
loop
Whether keyboard navigation should loop around
onEscapeKeyDown
onFocusOutside
onInteractOutside
onPointerDownOutside
sideOffset
sticky
updatePositionStrategy
DropdownMenuContent
Section titled “DropdownMenuContent”The component that pops out when the dropdown menu is open.
align
alignOffset
arrowPadding
asChild
avoidCollisions
collisionBoundary
collisionPadding
container
DOM node to portal the content into.
forceMount
Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
hideWhenDetached
isLoading
When true, shows a skeleton placeholder instead of children.
loop
Whether keyboard navigation should loop around
onCloseAutoFocus
Event handler called when auto-focusing on close. Can be prevented.
onEscapeKeyDown
onFocusOutside
onInteractOutside
onPointerDownOutside
side
sideOffset
sticky
theme
Background and text theme for the menu panel.
updatePositionStrategy
DropdownMenuSubTrigger
Section titled “DropdownMenuSubTrigger”An item that opens a submenu. Must be rendered inside DropdownMenuSub.
asChild
disabled
icon
textValue
DropdownMenuLabel
Section titled “DropdownMenuLabel”Used to render a label. It won’t be focusable using arrow keys.
asChild
variant
DropdownMenuItem
Section titled “DropdownMenuItem”The component that contains the dropdown menu items.
asChild
avatarProps
childrenClassName
disabled
icon
iconClassName
onSelect
shortcutText
showAvatar
showShortcut
showTag
subtext
subtextProps
tagComponent
textValue
variant
DropdownMenuCheckboxItem
Section titled “DropdownMenuCheckboxItem”An item that can be controlled and rendered like a checkbox.
asChild
avatarProps
checked
childrenClassName
disabled
icon
iconClassName
onCheckedChange
onSelect
shortcutText
showAvatar
showShortcut
showTag
subtext
subtextProps
tagComponent
textValue
variant
DropdownMenuRadioItem
Section titled “DropdownMenuRadioItem”An item that can be controlled and rendered like a radio.
value
asChild
avatarProps
childrenClassName
disabled
icon
iconClassName
onSelect
shortcutText
showAvatar
showShortcut
showTag
subtext
subtextProps
tagComponent
textValue
variant
DropdownMenuSeparator
Section titled “DropdownMenuSeparator”Used to visually separate items in the dropdown menu.