Context Menu
A list of options that appears when a user interacts right-clicking on a trigger element.
A list of options that appears when a user interacts right-clicking on a trigger element.
To set up the menu correctly, you’ll need to understand its anatomy and how we name its parts.
Each part includes a
data-part
attribute to help identify them in the DOM.
To show the menu when a trigger element is right-clicked, use the
Menu.ContextTrigger
component.
Context menus are also opened during a long-press of roughly 700ms
when the
pointer is pen or touch.
import { Menu } from '@ark-ui/react'
const Basic = () => (
<Menu.Root>
<Menu.ContextTrigger>
<div style={{ width: '100%', height: '20rem', border: '1px solid lightgray' }}>
Some content
</div>
</Menu.ContextTrigger>
<Menu.Positioner>
<Menu.Content>
<Menu.Item id="search">Search</Menu.Item>
<Menu.Item id="undo">Undo</Menu.Item>
<Menu.Item id="delivery" disabled>
Delivery
</Menu.Item>
<Menu.Item id="unlink">Unlink</Menu.Item>
</Menu.Content>
</Menu.Positioner>
</Menu.Root>
)
import { Menu } from '@ark-ui/solid'
const Basic = () => (
<Menu.Root>
<Menu.ContextTrigger>
<div style={{ width: '100%', height: '20rem', border: '1px solid lightgray' }}>
Some content
</div>
</Menu.ContextTrigger>
<Menu.Positioner>
<Menu.Content>
<Menu.Item id="search">Search</Menu.Item>
<Menu.Item id="undo">Undo</Menu.Item>
<Menu.Item id="delivery" disabled>
Delivery
</Menu.Item>
<Menu.Item id="unlink">Unlink</Menu.Item>
</Menu.Content>
</Menu.Positioner>
</Menu.Root>
)
<script setup lang="ts">
import { Menu } from '@ark-ui/vue'
</script>
<template>
<Menu.Root>
<Menu.ContextTrigger>
<div :style="{ width: '100%', height: '20rem', border: '1px solid lightgray' }">
Some content
</div>
</Menu.ContextTrigger>
<Menu.Positioner>
<Menu.Content>
<Menu.Item id="search">Search</Menu.Item>
<Menu.Item id="undo">Undo</Menu.Item>
<Menu.Item id="delivery" disabled> Delivery </Menu.Item>
<Menu.Item id="unlink">Unlink</Menu.Item>
</Menu.Content>
</Menu.Positioner>
</Menu.Root>
</template>
id The `id` of the menu item option. | string | |
asChild Render as a different element type. | boolean | |
closeOnSelect Whether the menu should be closed when the option is selected. | boolean | |
disabled Whether the menu item is disabled | boolean | |
valueText The textual value of the option. Used in typeahead navigation of the menu. If not provided, the text content of the menu item will be used. | string |
anchorPoint The positioning point for the menu. Can be set by the context menu trigger or the button trigger. | Point | |
aria-label The accessibility label for the menu | string | |
closeOnSelect Whether to close the menu when an option is selected | boolean | |
dir The document's text/writing direction. | 'ltr' | 'rtl' | "ltr" |
getRootNode A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron. | () => Node | ShadowRoot | Document | |
highlightedId The `id` of the active menu item. | string | |
id The unique identifier of the machine. | string | |
ids The ids of the elements in the menu. Useful for composition. | Partial<{
trigger: string
contextTrigger: string
content: string
label(id: string): string
group(id: string): string
positioner: string
arrow: string
}> | |
lazyMount Whether to enable lazy mounting | boolean | false |
loop Whether to loop the keyboard navigation. | boolean | |
onExitComplete Function called when the animation ends in the closed state. | () => void | |
onFocusOutside Function called when the focus is moved outside the component | (event: FocusOutsideEvent) => void | |
onInteractOutside Function called when an interaction happens outside the component | (event: InteractOutsideEvent) => void | |
onOpenChange Function called when the menu opens or closes | (details: OpenChangeDetails) => void | |
onPointerDownOutside Function called when the pointer is pressed down outside the component | (event: PointerDownOutsideEvent) => void | |
onSelect Function called when a menu item is selected. | (details: SelectionDetails) => void | |
onValueChange Callback to be called when the menu values change (for radios and checkboxes). | (details: ValueChangeDetails) => void | |
open Whether the menu is open | boolean | |
positioning The options used to dynamically position the menu | PositioningOptions | |
present Whether the node is present (controlled by the user) | boolean | |
unmountOnExit Whether to unmount on exit. | boolean | false |
value The values of radios and checkboxes in the menu. | Record<string, string | string[]> |
asChild Render as a different element type. | boolean |
asChild Render as a different element type. | boolean |
asChild Render as a different element type. | boolean |
asChild Render as a different element type. | boolean |
id The `id` of the element that provides accessibility label to the option group | string | |
asChild Render as a different element type. | boolean |
asChild Render as a different element type. | boolean |
name The option's name as specified in menu's `context.values` object | string | |
type Whether the option is a radio or a checkbox | 'checkbox' | 'radio' | |
value The value of the option | string | |
asChild Render as a different element type. | boolean | |
closeOnSelect Whether the menu should be closed when the option is selected. | boolean | |
disabled Whether the menu item is disabled | boolean | |
onCheckedChange Function called when the option state is changed | (checked: boolean) => void | |
valueText The textual value of the option. Used in typeahead navigation of the menu. If not provided, the text content of the menu item will be used. | string |
asChild Render as a different element type. | boolean |
asChild Render as a different element type. | boolean |
asChild Render as a different element type. | boolean |
htmlFor | string | |
asChild Render as a different element type. | boolean |
Previous
ComboboxNext
Date Picker