Dropdown Menu
Anatomy
<DropdownMenu> <DropdownMenuTrigger /> <DropdownMenuContent> <DropdownMenuLabel /> <DropdownMenuSeparator /> <DropdownMenuItem /> <DropdownMenuSub> <DropdownMenuSubTrigger /> <DropdownMenuSubContent> <DropdownMenuItem /> </DropdownMenuSubContent> </DropdownMenuSub> </DropdownMenuContent></DropdownMenu>Usage
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
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
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
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
Basics
DropdownMenu
Contains all the parts of the menu.
DropdownMenuTrigger
The button that, when clicked, toggles the menu.
Inherits properties from HTMLButtonElement.
DropdownMenuContent
The element that pops out when the menu is open.
DropdownMenuLabel
A non-interactive label to provide a heading for a section of the DropdownMenu.
DropdownMenuSeparator
A horizontal line to separate sections within the DropdownMenu.
Items
DropdownMenuGroup
Used to group multiple DropdownMenuItems
DropdownMenuItem
A single item within the dropdown menu.
Checkboxes
DropdownMenuCheckboxItem
A single checkbox item within the dropdown menu.
Radios
DropdownMenuRadioGroup
Used to group multiple DropdownMenuRadioItems
DropdownMenuRadioItem
A single radio item within the dropdown menu.
Submenus
DropdownMenuSub
Contains all the parts of a sub menu.
DropdownMenuSubTrigger
The button that, when clicked, toggles the dropdown sub menu.
Inherits properties from HTMLDivElement.
DropdownMenuSubContent
The element that pops out when sub menu is open.
Other
DropdownMenuPortal
When used, portals the content part into the body.