syncfusion-react-context-menu
Implements Syncfusion React ContextMenu (SfContextMenu) for right-click interactions and context-sensitive popup menus. Use this when adding menu items, handling selection events, or customizing templates and styling. Covers setup, data binding, accessibility, keyboard navigation, common methods and properties, and integration patterns.
What this skill does
# Implementing Syncfusion React Context Menu
**Complete API Reference & Feature Guide**
## When to Use This Skill
ALWAYS use this skill when users need to:
- **Install and configure** Syncfusion React ContextMenu component
- **Create and manage menu items** (text, icons, separators, nested menus, URLs)
- **Programmatically control** menus using 15+ methods
- **Handle all 7 events** with their respective event arguments
- **Customize appearance** with CSS classes, themes, templates, animations
- **Bind data** from local sources or dynamic data structures
- **Implement accessibility** (keyboard navigation, ARIA, RTL, WCAG 2.2)
- **Manage dynamic menus** (add, remove, show, hide, enable/disable)
- **Create context-specific actions** (files, editors, workflows)
---
## Getting Started
๐ **Read:** [references/getting-started.md](references/getting-started.md)
- Package installation (`@syncfusion/ej2-react-navigations`)
- Development environment setup (Vite, Create React App)
- CSS stylesheet imports and theme configuration
- Basic ContextMenu implementation
- Running and testing the application
---
## Component Properties Reference
The ContextMenuComponent accepts 18+ configuration properties to control behavior, appearance, and interaction:
### Essential Properties
#### `target` (Required)
**Type:** `string`
CSS selector for the element that triggers the context menu (right-click or touch-hold).
```ts
<ContextMenuComponent target="#myElement" items={menuItems} />
```
**Example:** Trigger on specific element
```ts
function App() {
return (
<div>
<div id="target">Right-click here</div>
<ContextMenuComponent target="#target" items={menuItems} />
</div>
);
}
```
---
#### `items` (Required)
**Type:** `MenuItemModel[]`
Array of menu items to display. Each item can have text, icons, nested items, separators, etc.
```ts
const menuItems: MenuItemModel[] = [
{ text: 'Cut' },
{ text: 'Copy' },
{ text: 'Paste' },
{ separator: true },
{
text: 'More',
items: [
{ text: 'Properties' },
{ text: 'Delete' }
]
}
];
<ContextMenuComponent target="#target" items={menuItems} />
```
---
### Display & Animation Properties
#### `animationSettings`
**Type:** `MenuAnimationSettingsModel`
Configure menu opening/closing animation effects.
**Properties:**
- `effect`: Animation type (None, SlideDown, ZoomIn, FadeIn)
- `duration`: Animation time in milliseconds (default: 400)
- `easing`: CSS easing function (default: ease)
```ts
const animationSettings = {
effect: 'FadeIn',
duration: 300,
easing: 'ease-out'
};
<ContextMenuComponent
target="#target"
items={menuItems}
animationSettings={animationSettings}
/>
```
**Available Effects:**
| Effect | Description |
|--------|-------------|
| `None` | No animation |
| `SlideDown` | Slide down from top |
| `ZoomIn` | Zoom in effect |
| `FadeIn` | Fade in opacity |
---
#### `cssClass`
**Type:** `string`
Add custom CSS classes to the ContextMenu wrapper for custom styling.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
cssClass="custom-menu dark-theme"
/>
```
---
#### `enableScrolling`
**Type:** `boolean` (default: false)
Enable scrolling when menu height exceeds available space.
```ts
<ContextMenuComponent
target="#target"
items={largeMenuList}
enableScrolling={true}
/>
```
---
### Interaction Properties
#### `filter`
**Type:** `string`
CSS selector for specific elements inside the target that should trigger the context menu. Use to limit context menu to certain child elements.
```ts
// Context menu only appears on table rows, not the entire table
<ContextMenuComponent
target="#table"
filter="tr"
items={menuItems}
/>
```
---
#### `hoverDelay`
**Type:** `number` (default: 400)
Milliseconds to wait before displaying submenu on hover.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
hoverDelay={500} // 500ms before submenu appears
/>
```
---
#### `showItemOnClick`
**Type:** `boolean` (default: false)
Force submenus to open only on click (not on hover). When `true`, arrow key navigation is required to open submenus.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
showItemOnClick={true} // Submenus open on click only
/>
```
---
### Data & Content Properties
#### `itemTemplate`
**Type:** `string | Function`
Custom HTML template for menu items. Use template string with property placeholders (`${propertyName}`).
```ts
const template = `
<div class="menu-item">
<span class="${iconCss}"></span>
<span>${text}</span>
<span class="shortcut">${shortcut}</span>
</div>
`;
<ContextMenuComponent
target="#target"
items={menuItems}
itemTemplate={template}
/>
```
---
#### `locale`
**Type:** `string` (default: 'en-US')
Set localization language for component. Overrides global culture setting.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
locale="es-ES" // Spanish localization
/>
```
---
### Security & State Properties
#### `enableHtmlSanitizer`
**Type:** `boolean` (default: true)
Enable HTML sanitization to prevent XSS attacks. Sanitizes untrusted HTML in menu items.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
enableHtmlSanitizer={true} // Sanitize HTML content
/>
```
---
#### `enablePersistence`
**Type:** `boolean` (default: false)
Persist component state (expanded/collapsed state) across page reloads using browser storage.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
enablePersistence={true}
/>
```
---
#### `enableRtl`
**Type:** `boolean` (default: false)
Enable right-to-left (RTL) layout for Arabic, Hebrew, and other RTL languages.
```ts
<ContextMenuComponent
target="#target"
items={menuItems}
enableRtl={true}
/>
```
---
## Menu Item Model Properties
Each menu item is configured using `MenuItemModel` interface with the following properties:
### Text & Display
#### `text`
**Type:** `string`
Display text for the menu item.
```ts
{ text: 'Cut' }
{ text: 'Copy' }
```
---
#### `id`
**Type:** `string`
Unique identifier for the menu item. Use for identifying items in event handlers or programmatic operations.
```ts
{ id: 'cut-item', text: 'Cut' }
{ id: 'copy-item', text: 'Copy' }
```
---
#### `iconCss`
**Type:** `string`
CSS class for icon display. Supports Syncfusion icons or custom icon classes.
```ts
{ text: 'Cut', iconCss: 'e-icons e-cut' }
{ text: 'Copy', iconCss: 'e-icons e-copy' }
{ text: 'Delete', iconCss: 'e-icons e-delete' }
```
---
### Item Structure
#### `items`
**Type:** `MenuItemModel[]`
Nested submenu items. Creates hierarchical menu structure.
```ts
{
text: 'File',
items: [
{ text: 'New' },
{ text: 'Open' },
{ text: 'Save' }
]
}
```
---
#### `separator`
**Type:** `boolean` (default: false)
Render as a visual separator line instead of a clickable item.
```ts
const menuItems: MenuItemModel[] = [
{ text: 'Cut' },
{ text: 'Copy' },
{ separator: true }, // Visual divider
{ text: 'Delete' }
];
```
---
### Navigation
#### `url`
**Type:** `string`
Navigation URL. Creates an anchor link that navigates when clicked.
```ts
{ text: 'Visit Site', url: 'https://example.com' }
{ text: 'Documentation', url: '/docs' }
```
---
### Custom Attributes
#### `htmlAttributes`
**Type:** `Record<string, string>`
Add custom HTML attributes to menu item element.
```ts
{
text: 'Download',
htmlAttributes: {
'data-action': 'download',
'aria-label': 'Download file',
'title': 'Download the file'
}
}
```
---
## Menu Methods โ Programmatic Control
The ContextMenu exposes 15+ methods for runtime control and manipulation:
### Menu State Control
#### `open(top: number, left: number, target?: HTMLElement): void`
Programmatically open the context menu at specified coordinates.
**Parameters:**
- `top`: Vertical position (Y-coordinate in pixels)
- `left`: Horizontal position (X-coordinate in pixeRelated in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4โv5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.