Context Menu
A menu that appears at the pointer on right click or long press.
API Reference
Original primitive API
Behavior, accessibility details, and low-level props are documented by Base UI.
Basic
import { ContextMenu, ContextMenuArrow, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger,} from "moduix";export function ContextMenuDemo() { return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent> <ContextMenuArrow /> <ContextMenuItem closeOnClick>Add to Library</ContextMenuItem> <ContextMenuItem closeOnClick>Add to Playlist</ContextMenuItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick>Play Next</ContextMenuItem> <ContextMenuItem closeOnClick>Play Last</ContextMenuItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick disabled> Share </ContextMenuItem> </ContextMenuContent> </ContextMenu> );}Full list of component variables available for project-level overrides.
| Property | Default | Description |
|---|---|---|
| --context-menu-arrow-inline-offset | 0.8125rem | Controls inline arrow offset for side placement. |
| --context-menu-arrow-size | 0.5rem | Controls popup arrow size. |
| --context-menu-arrow-stroke-color | var(--context-menu-popup-border-color) | Controls popup arrow stroke color. |
| --context-menu-backdrop-bg | var(--backdrop-bg, transparent) | Controls optional backdrop background. |
| --context-menu-backdrop-blur | 0 | Controls optional backdrop blur amount. |
| --context-menu-backdrop-transition | var(--context-menu-transition) | Controls optional backdrop transition. |
| --context-menu-check-gap | 0.5rem | Controls gap between indicator and item text in radio/checkbox items. |
| --context-menu-check-icon-size | 100% | Controls icon size inside check indicators. |
| --context-menu-check-indicator-bg | transparent | Controls indicator background for radio/checkbox items. |
| --context-menu-check-indicator-border-color | transparent | Controls indicator border color for radio/checkbox items. |
| --context-menu-check-indicator-border-width | var(--border-width-sm) | Controls indicator border width for radio/checkbox items. |
| --context-menu-check-indicator-color | currentColor | Controls indicator icon color for radio/checkbox items. |
| --context-menu-check-indicator-padding | 0 | Controls indicator inner padding for radio/checkbox items. |
| --context-menu-check-indicator-radius | var(--radius-xs) | Controls indicator corner radius for radio/checkbox items. |
| --context-menu-check-indicator-size | 0.75rem | Controls indicator size for radio/checkbox items. |
| --context-menu-check-padding-x-start | 0.625rem | Controls start padding for radio/checkbox items. |
| --context-menu-disabled-opacity | var(--opacity-disabled) | Controls disabled trigger opacity. |
| --context-menu-focus-ring-color | var(--color-ring) | Controls trigger focus ring color. |
| --context-menu-group-label-color | var(--color-muted-foreground) | Controls group label text color. |
| --context-menu-group-label-font-size | var(--text-xs) | Controls group label font size. |
| --context-menu-group-label-line-height | var(--line-height-text-xs) | Controls group label line height. |
| --context-menu-group-label-padding-x-end | 0.75rem | Controls group label end padding. |
| --context-menu-group-label-padding-x-start | 0.625rem | Controls group label start padding. |
| --context-menu-group-label-padding-y | 0.35rem | Controls group label vertical padding. |
| --context-menu-group-padding-y | 0 | Controls group vertical padding. |
| --context-menu-highlight-bg | var(--color-foreground) | Controls highlighted item background. |
| --context-menu-highlight-color | var(--color-background) | Controls highlighted item text color. |
| --context-menu-highlight-inset-x | var(--spacing-1) | Controls horizontal inset for highlighted/open row background. |
| --context-menu-highlight-radius | var(--radius-sm) | Controls highlighted/open row radius. |
| --context-menu-item-bg | transparent | Controls base background of menu rows. |
| --context-menu-item-disabled-color | var(--color-muted-foreground) | Controls disabled item text color. |
| --context-menu-item-font-size | var(--text-sm) | Controls item font size. |
| --context-menu-item-gap | var(--spacing-2) | Controls gap for regular item content. |
| --context-menu-item-height | 2rem | Controls minimum row height. |
| --context-menu-item-line-height | var(--line-height-text-sm) | Controls item line height. |
| --context-menu-item-padding-x-end | 1rem | Controls item end padding. |
| --context-menu-item-padding-x-start | 1rem | Controls item start padding. |
| --context-menu-item-padding-y | 0.5rem | Controls item vertical padding. |
| --context-menu-item-shortcut-color | var(--color-muted-foreground) | Controls shortcut text color. |
| --context-menu-item-shortcut-font-size | var(--text-xs) | Controls shortcut font size. |
| --context-menu-item-shortcut-line-height | var(--line-height-text-xs) | Controls shortcut line height. |
| --context-menu-item-shortcut-padding-x-start | var(--spacing-4) | Controls start spacing before shortcut text. |
| --context-menu-item-text-content-gap | var(--spacing-2) | Controls gap inside `ContextMenuItemTextContent`. |
| --context-menu-item-text-icon-color | currentColor | Controls color of `ContextMenuItemTextIcon`. |
| --context-menu-item-text-icon-size | 1rem | Controls size of `ContextMenuItemTextIcon`. |
| --context-menu-popup-bg | var(--color-popover) | Controls popup background. |
| --context-menu-popup-border-color | var(--color-border) | Controls popup border color. |
| --context-menu-popup-color | var(--color-popover-foreground) | Controls popup text color. |
| --context-menu-popup-max-height | 24rem | Controls popup maximum height. |
| --context-menu-popup-max-width | 20rem | Controls popup maximum width. |
| --context-menu-popup-min-width | 12rem | Controls popup minimum width. |
| --context-menu-popup-padding-y | 0.25rem | Controls popup vertical padding. |
| --context-menu-popup-radius | var(--radius-md) | Controls popup corner radius. |
| --context-menu-popup-scale | var(--scale-popup) | Controls popup start/end animation scale. |
| --context-menu-popup-shadow | var(--shadow-lg) | Controls popup shadow. |
| --context-menu-separator-color | var(--color-border) | Controls separator color. |
| --context-menu-separator-margin-x-end | 1rem | Controls separator end margin. |
| --context-menu-separator-margin-x-start | 1rem | Controls separator start margin. |
| --context-menu-separator-margin-y | 0.375rem | Controls separator vertical margin. |
| --context-menu-submenu-icon-size | 0.875rem | Controls submenu trigger icon size. |
| --context-menu-submenu-open-bg | var(--color-accent) | Controls submenu trigger open background. |
| --context-menu-submenu-trigger-gap | var(--spacing-3) | Controls submenu trigger content gap. |
| --context-menu-submenu-trigger-padding-x-end | 1rem | Controls submenu trigger end padding. |
| --context-menu-transition | var(--transition-default) | Controls shared transition timing. |
| --context-menu-trigger-bg | var(--color-background) | Controls trigger background. |
| --context-menu-trigger-bg-active | var(--context-menu-trigger-bg-hover) | Controls trigger active/open background. |
| --context-menu-trigger-bg-hover | var(--color-accent) | Controls trigger hover background. |
| --context-menu-trigger-border-color | var(--color-border) | Controls trigger border color. |
| --context-menu-trigger-border-width | var(--border-width-sm) | Controls trigger border width. |
| --context-menu-trigger-color | var(--color-foreground) | Controls trigger text color. |
| --context-menu-trigger-font-size | var(--text-md) | Controls trigger font size. |
| --context-menu-trigger-line-height | var(--line-height-text-md) | Controls trigger line height. |
| --context-menu-trigger-min-height | 12rem | Controls trigger minimum height. |
| --context-menu-trigger-min-width | 15rem | Controls trigger minimum width. |
| --context-menu-trigger-padding-x | 0.875rem | Controls trigger horizontal padding. |
| --context-menu-trigger-padding-y | 0.5rem | Controls trigger vertical padding. |
| --context-menu-trigger-radius | var(--radius-md) | Controls trigger corner radius. |
Interactive variables scoped for docs preview without changing size scale tokens.
| Property | Value | Default | Description |
|---|---|---|---|
| --context-menu-arrow-inline-offset | 0.8125rem | Controls inline arrow offset for side placement. | |
| --context-menu-arrow-size | 0.5rem | Controls popup arrow size. | |
| --context-menu-arrow-stroke-color | var(--context-menu-popup-border-color) | Controls popup arrow stroke color. | |
| --context-menu-backdrop-bg | var(--backdrop-bg, transparent) | Controls optional backdrop background. | |
| --context-menu-backdrop-blur | 0 | Controls optional backdrop blur amount. | |
| --context-menu-backdrop-transition | var(--context-menu-transition) | Controls optional backdrop transition. | |
| --context-menu-check-gap | 0.5rem | Controls gap between indicator and item text in radio/checkbox items. | |
| --context-menu-check-icon-size | 100% | Controls icon size inside check indicators. | |
| --context-menu-check-indicator-bg | transparent | Controls indicator background for radio/checkbox items. | |
| --context-menu-check-indicator-border-color | transparent | Controls indicator border color for radio/checkbox items. | |
| --context-menu-check-indicator-border-width | var(--border-width-sm) | Controls indicator border width for radio/checkbox items. | |
| --context-menu-check-indicator-color | currentColor | Controls indicator icon color for radio/checkbox items. | |
| --context-menu-check-indicator-padding | 0 | Controls indicator inner padding for radio/checkbox items. | |
| --context-menu-check-indicator-radius | var(--radius-xs) | Controls indicator corner radius for radio/checkbox items. | |
| --context-menu-check-indicator-size | 0.75rem | Controls indicator size for radio/checkbox items. | |
| --context-menu-check-padding-x-start | 0.625rem | Controls start padding for radio/checkbox items. | |
| --context-menu-disabled-opacity | var(--opacity-disabled) | Controls disabled trigger opacity. | |
| --context-menu-focus-ring-color | var(--color-ring) | Controls trigger focus ring color. | |
| --context-menu-group-label-color | var(--color-muted-foreground) | Controls group label text color. | |
| --context-menu-group-label-font-size | var(--text-xs) | Controls group label font size. | |
| --context-menu-group-label-line-height | var(--line-height-text-xs) | Controls group label line height. | |
| --context-menu-group-label-padding-x-end | 0.75rem | Controls group label end padding. | |
| --context-menu-group-label-padding-x-start | 0.625rem | Controls group label start padding. | |
| --context-menu-group-label-padding-y | 0.35rem | Controls group label vertical padding. | |
| --context-menu-group-padding-y | 0 | Controls group vertical padding. | |
| --context-menu-highlight-bg | var(--color-foreground) | Controls highlighted item background. | |
| --context-menu-highlight-color | var(--color-background) | Controls highlighted item text color. | |
| --context-menu-highlight-inset-x | var(--spacing-1) | Controls horizontal inset for highlighted/open row background. | |
| --context-menu-highlight-radius | var(--radius-sm) | Controls highlighted/open row radius. | |
| --context-menu-item-bg | transparent | Controls base background of menu rows. | |
| --context-menu-item-disabled-color | var(--color-muted-foreground) | Controls disabled item text color. | |
| --context-menu-item-font-size | var(--text-sm) | Controls item font size. | |
| --context-menu-item-gap | var(--spacing-2) | Controls gap for regular item content. | |
| --context-menu-item-height | 2rem | Controls minimum row height. | |
| --context-menu-item-line-height | var(--line-height-text-sm) | Controls item line height. | |
| --context-menu-item-padding-x-end | 1rem | Controls item end padding. | |
| --context-menu-item-padding-x-start | 1rem | Controls item start padding. | |
| --context-menu-item-padding-y | 0.5rem | Controls item vertical padding. | |
| --context-menu-item-shortcut-color | var(--color-muted-foreground) | Controls shortcut text color. | |
| --context-menu-item-shortcut-font-size | var(--text-xs) | Controls shortcut font size. | |
| --context-menu-item-shortcut-line-height | var(--line-height-text-xs) | Controls shortcut line height. | |
| --context-menu-item-shortcut-padding-x-start | var(--spacing-4) | Controls start spacing before shortcut text. | |
| --context-menu-item-text-content-gap | var(--spacing-2) | Controls gap inside `ContextMenuItemTextContent`. | |
| --context-menu-item-text-icon-color | currentColor | Controls color of `ContextMenuItemTextIcon`. | |
| --context-menu-item-text-icon-size | 1rem | Controls size of `ContextMenuItemTextIcon`. | |
| --context-menu-popup-bg | var(--color-popover) | Controls popup background. | |
| --context-menu-popup-border-color | var(--color-border) | Controls popup border color. | |
| --context-menu-popup-color | var(--color-popover-foreground) | Controls popup text color. | |
| --context-menu-popup-max-height | 24rem | Controls popup maximum height. | |
| --context-menu-popup-max-width | 20rem | Controls popup maximum width. | |
| --context-menu-popup-min-width | 12rem | Controls popup minimum width. | |
| --context-menu-popup-padding-y | 0.25rem | Controls popup vertical padding. | |
| --context-menu-popup-radius | var(--radius-md) | Controls popup corner radius. | |
| --context-menu-popup-scale | var(--scale-popup) | Controls popup start/end animation scale. | |
| --context-menu-popup-shadow | var(--shadow-lg) | Controls popup shadow. | |
| --context-menu-separator-color | var(--color-border) | Controls separator color. | |
| --context-menu-separator-margin-x-end | 1rem | Controls separator end margin. | |
| --context-menu-separator-margin-x-start | 1rem | Controls separator start margin. | |
| --context-menu-separator-margin-y | 0.375rem | Controls separator vertical margin. | |
| --context-menu-submenu-icon-size | 0.875rem | Controls submenu trigger icon size. | |
| --context-menu-submenu-open-bg | var(--color-accent) | Controls submenu trigger open background. | |
| --context-menu-submenu-trigger-gap | var(--spacing-3) | Controls submenu trigger content gap. | |
| --context-menu-submenu-trigger-padding-x-end | 1rem | Controls submenu trigger end padding. | |
| --context-menu-transition | var(--transition-default) | Controls shared transition timing. | |
| --context-menu-trigger-bg | var(--color-background) | Controls trigger background. | |
| --context-menu-trigger-bg-active | var(--context-menu-trigger-bg-hover) | Controls trigger active/open background. | |
| --context-menu-trigger-bg-hover | var(--color-accent) | Controls trigger hover background. | |
| --context-menu-trigger-border-color | var(--color-border) | Controls trigger border color. | |
| --context-menu-trigger-border-width | var(--border-width-sm) | Controls trigger border width. | |
| --context-menu-trigger-color | var(--color-foreground) | Controls trigger text color. | |
| --context-menu-trigger-font-size | var(--text-md) | Controls trigger font size. | |
| --context-menu-trigger-line-height | var(--line-height-text-md) | Controls trigger line height. | |
| --context-menu-trigger-min-height | 12rem | Controls trigger minimum height. | |
| --context-menu-trigger-min-width | 15rem | Controls trigger minimum width. | |
| --context-menu-trigger-padding-x | 0.875rem | Controls trigger horizontal padding. | |
| --context-menu-trigger-padding-y | 0.5rem | Controls trigger vertical padding. | |
| --context-menu-trigger-radius | var(--radius-md) | Controls trigger corner radius. |
Anatomy
Context menu is composed from a trigger surface and a popup content layer. Keep interactive parts
inside ContextMenuContent so keyboard navigation, roving focus, and close behavior stay managed by
the root state machine.
ContextMenu
├─ ContextMenuTrigger
└─ ContextMenuContent
├─ ContextMenuArrow
├─ ContextMenuItem
├─ ContextMenuSeparator
└─ ContextMenuSubmenu
├─ ContextMenuSubmenuTrigger
│ └─ ContextMenuSubmenuTriggerIcon
└─ ContextMenuSubmenuContent
└─ ContextMenuItem<ContextMenu>
<ContextMenuTrigger>Right click here</ContextMenuTrigger>
<ContextMenuContent>
<ContextMenuArrow />
<ContextMenuItem closeOnClick>Open</ContextMenuItem>
<ContextMenuSubmenu>
<ContextMenuSubmenuTrigger>
Share
<ContextMenuSubmenuTriggerIcon />
</ContextMenuSubmenuTrigger>
<ContextMenuSubmenuContent>
<ContextMenuItem closeOnClick>Copy link</ContextMenuItem>
</ContextMenuSubmenuContent>
</ContextMenuSubmenu>
</ContextMenuContent>
</ContextMenu>| Part | Role |
|---|---|
ContextMenu | Root state machine. Handles open state, focus management, and close interactions. |
ContextMenuTrigger | Surface that opens the menu on context interaction (right click or long press). |
ContextMenuContent | Popup container for menu items. Accepts positioning props and renders service layers internally. |
ContextMenuArrow | Optional visual pointer from popup to trigger location. |
ContextMenuItem | Action row. Supports disabled state and closeOnClick behavior. |
ContextMenuLinkItem | Link row for navigation while preserving context menu focus and highlight behavior. |
ContextMenuSeparator | Visual divider between related item groups. |
ContextMenuSubmenu* | Nested branch for secondary actions (Trigger, TriggerIcon, and Content). |
ContextMenuGroup* / controls | Optional structured controls: labels, radio groups/items, checkbox items, and related indicator slots. |
ContextMenuContent uses internal service slots (portal, optional backdrop, positioner, popup).
In most cases, keep the default structure and style visible parts such as trigger, items, separators, and
arrow. Use classNames, portalProps, positionerProps, backdropProps, and withBackdrop when you
need slot-level customization.
Composition
Pass positioning props such as sideOffset, align, collisionPadding, and positionMethod
directly to ContextMenuContent.
className styles the visible popup. classNames styles the internal service slots hidden from
the default composition. Use container, portalProps, backdropProps, positionerProps, and
withBackdrop when you need the matching Base UI escape hatches:
<ContextMenuContent
className={styles.popup}
classNames={{
portal: styles.portal,
backdrop: styles.backdrop,
positioner: styles.positioner,
}}
withBackdrop
/>Examples
Nested
Use ContextMenuSubmenu with ContextMenuSubmenuTrigger and ContextMenuSubmenuContent for nested actions.
import { ContextMenu, ContextMenuArrow, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuSubmenu, ContextMenuSubmenuContent, ContextMenuSubmenuTrigger, ContextMenuSubmenuTriggerIcon, ContextMenuTrigger,} from "moduix";export function NestedContextMenuDemo() { return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent> <ContextMenuArrow /> <ContextMenuItem closeOnClick>Add to Library</ContextMenuItem> <ContextMenuSubmenu> <ContextMenuSubmenuTrigger> Add to Playlist <ContextMenuSubmenuTriggerIcon /> </ContextMenuSubmenuTrigger> <ContextMenuSubmenuContent> <ContextMenuItem closeOnClick>Get Up!</ContextMenuItem> <ContextMenuItem closeOnClick>Inside Out</ContextMenuItem> <ContextMenuItem closeOnClick>Night Beats</ContextMenuItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick>New Playlist...</ContextMenuItem> </ContextMenuSubmenuContent> </ContextMenuSubmenu> <ContextMenuSeparator /> <ContextMenuItem closeOnClick>Favorite</ContextMenuItem> <ContextMenuItem closeOnClick>Share</ContextMenuItem> </ContextMenuContent> </ContextMenu> );}Shortcuts
Use ContextMenuItemShortcut for keyboard shortcut text instead of reserving extra item padding.
import { ContextMenu, ContextMenuArrow, ContextMenuContent, ContextMenuItem, ContextMenuItemShortcut, ContextMenuSeparator, ContextMenuTrigger,} from "moduix";export function ShortcutsContextMenuDemo() { return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent> <ContextMenuArrow /> <ContextMenuItem closeOnClick> Copy <ContextMenuItemShortcut>Ctrl+C</ContextMenuItemShortcut> </ContextMenuItem> <ContextMenuItem closeOnClick> Paste <ContextMenuItemShortcut>Ctrl+V</ContextMenuItemShortcut> </ContextMenuItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick> Rename <ContextMenuItemShortcut>F2</ContextMenuItemShortcut> </ContextMenuItem> </ContextMenuContent> </ContextMenu> );}Groups And Controls
Use groups, radio items, and checkbox items when the menu changes application state.
import { useState } from "react";import { ContextMenu, ContextMenuArrow, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItemText, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuSeparator, ContextMenuTrigger,} from "moduix";export function GroupsAndControlsContextMenuDemo() { const [sortBy, setSortBy] = useState("date"); const [showMinimap, setShowMinimap] = useState(true); const [showSearch, setShowSearch] = useState(true); const [showSidebar, setShowSidebar] = useState(false); return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent> <ContextMenuArrow /> <ContextMenuGroup> <ContextMenuGroupLabel>Sort</ContextMenuGroupLabel> <ContextMenuRadioGroup value={sortBy} onValueChange={setSortBy}> <ContextMenuRadioItem value="date"> <ContextMenuRadioItemIndicator /> <ContextMenuItemText>Date</ContextMenuItemText> </ContextMenuRadioItem> <ContextMenuRadioItem value="name"> <ContextMenuRadioItemIndicator /> <ContextMenuItemText>Name</ContextMenuItemText> </ContextMenuRadioItem> <ContextMenuRadioItem value="type"> <ContextMenuRadioItemIndicator /> <ContextMenuItemText>Type</ContextMenuItemText> </ContextMenuRadioItem> </ContextMenuRadioGroup> </ContextMenuGroup> <ContextMenuSeparator /> <ContextMenuGroup> <ContextMenuGroupLabel>Workspace</ContextMenuGroupLabel> <ContextMenuCheckboxItem checked={showMinimap} onCheckedChange={setShowMinimap}> <ContextMenuCheckboxItemIndicator /> <ContextMenuItemText>Minimap</ContextMenuItemText> </ContextMenuCheckboxItem> <ContextMenuCheckboxItem checked={showSearch} onCheckedChange={setShowSearch}> <ContextMenuCheckboxItemIndicator /> <ContextMenuItemText>Search</ContextMenuItemText> </ContextMenuCheckboxItem> <ContextMenuCheckboxItem checked={showSidebar} onCheckedChange={setShowSidebar}> <ContextMenuCheckboxItemIndicator /> <ContextMenuItemText>Sidebar</ContextMenuItemText> </ContextMenuCheckboxItem> </ContextMenuGroup> </ContextMenuContent> </ContextMenu> );}Indicator Right With Icon
Use indicator="end" to align checkbox and radio indicators to the end. Item text slots and icon slots accept custom content and className.
import { useState } from "react";import { ContextMenu, ContextMenuArrow, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuItemText, ContextMenuItemTextContent, ContextMenuItemTextIcon, ContextMenuItemTextLabel, ContextMenuTrigger, InfoIcon, ShareIcon,} from "moduix";export function IndicatorRightContextMenuDemo() { const [showMinimap, setShowMinimap] = useState(true); const [showSearch, setShowSearch] = useState(true); return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent> <ContextMenuArrow /> <ContextMenuCheckboxItem checked={showMinimap} onCheckedChange={setShowMinimap} indicator="end" > <ContextMenuItemText> <ContextMenuItemTextContent> <ContextMenuItemTextIcon> <InfoIcon /> </ContextMenuItemTextIcon> <ContextMenuItemTextLabel>Minimap</ContextMenuItemTextLabel> </ContextMenuItemTextContent> </ContextMenuItemText> <ContextMenuCheckboxItemIndicator /> </ContextMenuCheckboxItem> <ContextMenuCheckboxItem checked={showSearch} onCheckedChange={setShowSearch} indicator="end" > <ContextMenuItemText> <ContextMenuItemTextContent> <ContextMenuItemTextIcon> <ShareIcon /> </ContextMenuItemTextIcon> <ContextMenuItemTextLabel>Search</ContextMenuItemTextLabel> </ContextMenuItemTextContent> </ContextMenuItemText> <ContextMenuCheckboxItemIndicator /> </ContextMenuCheckboxItem> </ContextMenuContent> </ContextMenu> );}Positioning
Pass positioning props to ContextMenuContent. It renders the portal and positioner internally.
import { ContextMenu, ContextMenuArrow, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger,} from "moduix";export function PositionedContextMenuDemo() { return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent align="start" sideOffset={12} collisionPadding={16}> <ContextMenuArrow /> <ContextMenuItem closeOnClick>Open</ContextMenuItem> <ContextMenuItem closeOnClick>Duplicate</ContextMenuItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick>Archive</ContextMenuItem> </ContextMenuContent> </ContextMenu> );}Link Items
Use ContextMenuLinkItem for navigation actions that should render as links.
import { ContextMenu, ContextMenuArrow, ContextMenuContent, ContextMenuItem, ContextMenuLinkItem, ContextMenuSeparator, ContextMenuTrigger,} from "moduix";export function LinkItemsContextMenuDemo() { return ( <ContextMenu> <ContextMenuTrigger>Right click here</ContextMenuTrigger> <ContextMenuContent> <ContextMenuArrow /> <ContextMenuLinkItem href="#projects">Projects</ContextMenuLinkItem> <ContextMenuLinkItem href="#teams">Teams</ContextMenuLinkItem> <ContextMenuLinkItem href="#billing">Billing</ContextMenuLinkItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick>Copy Link</ContextMenuItem> </ContextMenuContent> </ContextMenu> );}Custom Styles
Use className for the popup and classNames for internal service slots. Set withBackdrop when the menu should render a backdrop.
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger,} from "moduix";export function CustomStylesContextMenuDemo() { return ( <ContextMenu> <ContextMenuTrigger className={styles.customTrigger}>Right click card</ContextMenuTrigger> <ContextMenuContent className={styles.customPopup} classNames={{ portal: styles.customPortal, backdrop: styles.customBackdrop, positioner: styles.customPositioner, }} withBackdrop > <ContextMenuItem closeOnClick>Open details</ContextMenuItem> <ContextMenuItem closeOnClick>Copy link</ContextMenuItem> <ContextMenuSeparator /> <ContextMenuItem closeOnClick disabled> Delete </ContextMenuItem> </ContextMenuContent> </ContextMenu> );}.customTrigger { min-width: 14rem; min-height: 9rem; border-color: var(--color-primary); background: linear-gradient(var(--color-background), var(--color-background)) padding-box, linear-gradient(135deg, var(--color-primary), var(--color-ring)) border-box;}.customPortal { position: relative;}.customBackdrop { background-color: rgb(0 0 0 / 0.08); backdrop-filter: blur(0.125rem);}.customPositioner { z-index: var(--z-popup);}.customPopup { --context-menu-popup-min-width: 13rem; --context-menu-popup-bg: var(--color-background); --context-menu-popup-border-color: var(--color-primary); --context-menu-popup-shadow: var(--shadow-lg); --context-menu-highlight-bg: var(--color-primary); --context-menu-highlight-color: var(--color-primary-foreground); --context-menu-separator-color: var(--color-primary);}