Documentation Index
Fetch the complete documentation index at: https://copylabs.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
ContextMenu is an overlay component for displaying a menu of actions triggered by right-click or long-press.
Import
import { ContextMenu } from 'radix-native-ui';
Usage
import { ContextMenu, Text } from 'radix-native-ui';
<ContextMenu.Root>
<ContextMenu.Trigger>
<Flex p={4} style={{ backgroundColor: 'gray.3' }}>
<Text>Right-click or long-press here</Text>
</Flex>
</ContextMenu.Trigger>
<ContextMenu.Portal>
<ContextMenu.Overlay />
<ContextMenu.Content>
<ContextMenu.Item>Copy</ContextMenu.Item>
<ContextMenu.Item>Cut</ContextMenu.Item>
<ContextMenu.Item>Paste</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Item color="red">Delete</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Portal>
</ContextMenu.Root>
Components
The root container component that manages menu state.
Element that triggers the context menu.
Renders the context menu content in a Modal.
Touchable overlay that closes the menu when tapped.
The menu content container.
Individual menu item.
Visual separator between items.
Label for a group of items.
Group of related items.
Checkable menu item.
Group of mutually exclusive items.
Radio-style menu item.
Nested submenu.
Trigger for a submenu.
Content for a submenu.
Props
Haptic Feedback
Context menu triggers and items provide haptic feedback by default. You can disable this with the hapticFeedback prop:
<ContextMenu.Root>
<ContextMenu.Trigger hapticFeedback={false}>
<Text>No haptic on trigger</Text>
</ContextMenu.Trigger>
<ContextMenu.Content>
<ContextMenu.Item hapticFeedback={false}>No haptic on item</ContextMenu.Item>
<ContextMenu.Item>With haptic</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Root>
Examples
<ContextMenu.Root>
<ContextMenu.Trigger>
<Card>
<Text>Right-click me</Text>
</Card>
</ContextMenu.Trigger>
<ContextMenu.Portal>
<ContextMenu.Overlay />
<ContextMenu.Content>
<ContextMenu.Item>Edit</ContextMenu.Item>
<ContextMenu.Item>Duplicate</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Item color="red">Delete</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Portal>
</ContextMenu.Root>
<ContextMenu.Root>
<ContextMenu.Trigger>
<Flex direction="row" gap={2} align="center" p={2}>
<Icon name="file" />
<Text>document.pdf</Text>
</Flex>
</ContextMenu.Trigger>
<ContextMenu.Portal>
<ContextMenu.Overlay />
<ContextMenu.Content>
<ContextMenu.Item>
<Flex gap={2} align="center">
<Icon name="eye" />
<Text>Preview</Text>
</Flex>
</ContextMenu.Item>
<ContextMenu.Item>
<Flex gap={2} align="center">
<Icon name="download" />
<Text>Download</Text>
</Flex>
</ContextMenu.Item>
<ContextMenu.Item>
<Flex gap={2} align="center">
<Icon name="share" />
<Text>Share</Text>
</Flex>
</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Item>
<Flex gap={2} align="center">
<Icon name="pencil" />
<Text>Rename</Text>
</Flex>
</ContextMenu.Item>
<ContextMenu.Item>
<Flex gap={2} align="center">
<Icon name="folder" />
<Text>Move to...</Text>
</Flex>
</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Item color="red">
<Flex gap={2} align="center">
<Icon name="trash" />
<Text>Delete</Text>
</Flex>
</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Portal>
</ContextMenu.Root>
<ContextMenu.Root>
<ContextMenu.Trigger>
<TextField value="Selected text" />
</ContextMenu.Trigger>
<ContextMenu.Portal>
<ContextMenu.Overlay />
<ContextMenu.Content>
<ContextMenu.Item>Cut</ContextMenu.Item>
<ContextMenu.Item>Copy</ContextMenu.Item>
<ContextMenu.Item>Paste</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Item>Select All</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Portal>
</ContextMenu.Root>
<ContextMenu.Root>
<ContextMenu.Trigger>
<Card>
<Text>Right-click for options</Text>
</Card>
</ContextMenu.Trigger>
<ContextMenu.Portal>
<ContextMenu.Overlay />
<ContextMenu.Content>
<ContextMenu.Item>Edit</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Sub>
<ContextMenu.SubTrigger>
<Text>Share</Text>
</ContextMenu.SubTrigger>
<ContextMenu.SubContent>
<ContextMenu.Item>Email</ContextMenu.Item>
<ContextMenu.Item>Message</ContextMenu.Item>
<ContextMenu.Item>Copy Link</ContextMenu.Item>
</ContextMenu.SubContent>
</ContextMenu.Sub>
<ContextMenu.Separator />
<ContextMenu.Item color="red">Delete</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Portal>
</ContextMenu.Root>
function FileList({ files }) {
return (
<Flex direction="column">
{files.map(file => (
<ContextMenu.Root key={file.id}>
<ContextMenu.Trigger>
<Flex
direction="row"
gap={2}
align="center"
p={2}
style={{ borderBottomWidth: 1, borderBottomColor: 'gray.5' }}
>
<Icon name="file" />
<Text>{file.name}</Text>
</Flex>
</ContextMenu.Trigger>
<ContextMenu.Portal>
<ContextMenu.Overlay />
<ContextMenu.Content>
<ContextMenu.Item onSelect={() => openFile(file)}>
Open
</ContextMenu.Item>
<ContextMenu.Item onSelect={() => renameFile(file)}>
Rename
</ContextMenu.Item>
<ContextMenu.Separator />
<ContextMenu.Item color="red" onSelect={() => deleteFile(file)}>
Delete
</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Portal>
</ContextMenu.Root>
))}
</Flex>
);
}