Skip to content

Menu

Menu displays a list of actions or options in a dropdown. Use for overflow actions, navigation, or contextual options.


<Menu
trigger={<IconButton icon={<MoreIcon />} accessibilityLabel="Menu" />}
items={[
{ key: 'edit', label: 'Edit' },
{ key: 'share', label: 'Share' },
{ key: 'delete', label: 'Delete', destructive: true },
]}
onSelect={(key) => handleAction(key)}
/>

<Menu
trigger={<IconButton icon={<MoreIcon />} accessibilityLabel="Options" />}
items={[
{ key: 'edit', label: 'Edit Reading', icon: <EditIcon /> },
{ key: 'copy', label: 'Copy to Clipboard', icon: <CopyIcon /> },
{ key: 'favorite', label: 'Add to Favorites', icon: <StarIcon /> },
{ key: 'export', label: 'Export', icon: <ExportIcon /> },
]}
onSelect={handleSelect}
/>

<Menu
items={[
{ key: 'view', label: 'View Details' },
{ key: 'edit', label: 'Edit', divider: true },
{ key: 'move', label: 'Move to Folder' },
{ key: 'archive', label: 'Archive', divider: true },
{ key: 'delete', label: 'Delete', destructive: true },
]}
onSelect={handleSelect}
trigger={<Button>Actions</Button>}
/>

<Menu
items={[
{ key: 'open', label: 'Open' },
{ key: 'edit', label: 'Edit (Locked)', disabled: true },
{ key: 'share', label: 'Share' },
{ key: 'delete', label: 'Delete (Protected)', disabled: true },
]}
onSelect={handleSelect}
trigger={<Button>Options</Button>}
/>

Long-press to trigger.

Long press this card
<ContextMenu
items={[
{ key: 'edit', label: 'Edit' },
{ key: 'share', label: 'Share' },
{ key: 'delete', label: 'Delete', destructive: true },
]}
onSelect={handleSelect}
>
<Card>
<Text>Long press for options</Text>
</Card>
</ContextMenu>

PropTypeDefaultDescription
itemsMenuItem[]RequiredMenu items
triggerReactNodeRequiredTrigger element
onSelect(key: string) => voidRequiredSelection handler
placement'bottom-start' | 'bottom-end' | 'top-start' | 'top-end''bottom-end'Menu placement
styleViewStyle-Custom styles
PropTypeRequiredDescription
keystringYesUnique item identifier
labelstringYesItem label
iconReactNodeNoItem icon
disabledbooleanNoDisabled state
destructivebooleanNoDestructive styling
dividerbooleanNoShow divider after
PropTypeDefaultDescription
itemsMenuItem[]RequiredMenu items
onSelect(key: string) => voidRequiredSelection handler
childrenReactNodeRequiredLong-pressable content
delayMsnumber500Long press delay