ActionMenu is composed of ActionList and Overlay patterns used for quick actions and selections.
Page navigation navigation
An ActionMenu comprises a set of ActionList items, where each item represents an action, command, submenu, or the current selection that can be either a single or multi-select. The ActionMenu can be invoked by clicking on a Button, IconButton, or right-clicking on the list items.
<ActionMenu><ActionMenu.Button>Open menu</ActionMenu.Button><ActionMenu.Overlay><ActionList><ActionList.ItemonSelect={()=>{alert('Item one clicked')}}> Item one</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item two clicked')}}> Item two</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item three clicked')}}> Item three</ActionList.Item></ActionList></ActionMenu.Overlay></ActionMenu>
Menu items affected by a system error, such as an outage, may become inactive and display a message explaining why.
If an ActionMenu (e.g., adding a file to a repo) has no available items, the trigger Button should be inactive.
Inactive ActionMenu items follow the same patterns as inactive list items, with two exceptions:
The unavailability message is displayed directly in the item, not in a tooltip, since the menu is hidden until opened.
No alert icon is needed, as the error message provides sufficient context.
<Stackalign="start"><ActionMenu><ActionMenu.Button>Open menu</ActionMenu.Button><ActionMenu.Overlay><ActionList><ActionList.IteminactiveText="Unavailable due to an outage">Item one</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item two clicked')}}> Item two</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item three clicked')}}> Item three</ActionList.Item></ActionList></ActionMenu.Overlay></ActionMenu><ActionMenu><ActionMenu.Buttoninactive>Open menu (all items inactive)</ActionMenu.Button><ActionMenu.Overlay><ActionList><ActionList.IteminactiveText="Unavailable due to an outage">Item one</ActionList.Item><ActionList.IteminactiveText="Unavailable due to an outage">Item two</ActionList.Item><ActionList.IteminactiveText="Unavailable due to an outage">Item three</ActionList.Item></ActionList></ActionMenu.Overlay></ActionMenu></Stack>
To enhance the readability of menus that contain numerous item descriptions, it is recommended to incorporate dividers. This can effectively prevent the menu from becoming overwhelming.
importReactfrom'react'import{ActionList,ActionMenu}from'@primer/react'exportdefaultfunctionDividers(){return(<ActionMenu><ActionMenu.Button>Options</ActionMenu.Button><ActionMenu.Overlay><ActionListshowDividersaria-label="Watch preference options"><ActionList.ItemonSelect={()=>{alert('Item one clicked')}}> Item one<ActionList.Descriptionvariant="block"> Description about item one that is kind of long and bulky</ActionList.Description></ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item two clicked')}}> Item two<ActionList.Descriptionvariant="block"> A long and bulky description for the second item</ActionList.Description></ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item three clicked')}}> Item three<ActionList.Descriptionvariant="block"> One last and long bulky description we will use for the third item</ActionList.Description></ActionList.Item></ActionList></ActionMenu.Overlay></ActionMenu>)}
A menu with multiple levels is a common UI component used in desktop and mobile applications. It allows users to access nested subitems without cluttering the screen.
<ActionMenu><ActionMenu.Button>Open menu</ActionMenu.Button><ActionMenu.Overlay><ActionList><ActionList.ItemonSelect={()=>{alert('Item one clicked')}}> Item one</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Item two clicked')}}> Item two</ActionList.Item><ActionMenu><ActionMenu.Anchor><ActionList.Item>Item with submenus</ActionList.Item></ActionMenu.Anchor><ActionMenu.Overlay><ActionList><ActionList.ItemonSelect={()=>{alert('Sub-item one clicked')}}> Sub-item one</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Sub-item two clicked')}}> Sub-item two</ActionList.Item><ActionMenu><ActionMenu.Anchor><ActionList.Item>Sub-item with submenu</ActionList.Item></ActionMenu.Anchor><ActionMenu.Overlay><ActionList><ActionList.ItemonSelect={()=>{alert('Sub-item one clicked')}}> Sub-item one</ActionList.Item><ActionList.ItemonSelect={()=>{alert('Sub-item two clicked')}}> Sub-item two</ActionList.Item></ActionList></ActionMenu.Overlay></ActionMenu></ActionList></ActionMenu.Overlay></ActionMenu></ActionList></ActionMenu.Overlay></ActionMenu>