XDSDropdownMenuItem@xds/core · DropdownMenu
Usage
A dropdown menu that displays a list of actionable items in a popup triggered by a button. Use to present action options as a next step in a process, or to offer contextual actions without cluttering the interface.Best practices
| Guidance | Practices |
|---|---|
| Do | Keep menu items concise and action-oriented so users can scan options quickly. |
| Do | Use sections and dividers to group related actions when the menu has many items. |
| Don't | Use a DropdownMenu for navigation — use a navigation component instead. |
| Don't | Place more than 10–12 items in a single menu without grouping them into sections. |
Import
tsimport {XDSDropdownMenuItem} from '@xds/core/DropdownMenu'
Props
| Prop | Type | Description |
|---|---|---|
icon | XDSIconType | Icon to display before the label. See `npx xds docs icons` for valid semantic names. |
label | ReactNode | Primary label text. |
description | ReactNode | Secondary description text displayed below the label. |
children | ReactNode | Additional content rendered after the label and description. |
xstyle | StyleXStyles | StyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value — not an inline style object like style={{}}. |
Showcase source
tsx'use client';import {XDSDropdownMenu, XDSDropdownMenuItem} from '@xds/core/DropdownMenu';const PencilIcon = (props: React.SVGProps<SVGSVGElement>) => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round" {...props}><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" /><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" /></svg>);const CopyIcon = (props: React.SVGProps<SVGSVGElement>) => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round" {...props}><rect x="9" y="9" width="13" height="13" rx="2" /><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" /></svg>);const ShareIcon = (props: React.SVGProps<SVGSVGElement>) => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round" {...props}><circle cx="18" cy="5" r="3" /><circle cx="6" cy="12" r="3" /><circle cx="18" cy="19" r="3" /><line x1="8.59" y1="13.51" x2="15.42" y2="17.49" /><line x1="15.41" y1="6.51" x2="8.59" y2="10.49" /></svg>);const TrashIcon = (props: React.SVGProps<SVGSVGElement>) => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round" {...props}><polyline points="3 6 5 6 21 6" /><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" /></svg>);export default function DropdownMenuItemShowcase() {return (<XDSDropdownMenu button={{label: 'Actions'}} isMenuOpen onOpenChange={() => {}}><XDSDropdownMenuItemicon={PencilIcon}label="Edit"description="Modify this item"onClick={() => {}}/><XDSDropdownMenuItemicon={CopyIcon}label="Duplicate"description="Create a copy"onClick={() => {}}/><XDSDropdownMenuItemicon={ShareIcon}label="Share"onClick={() => {}}/><XDSDropdownMenuItemicon={TrashIcon}label="Delete"description="This action cannot be undone"onClick={() => {}}/></XDSDropdownMenu>);}