import ContextMenuPlugin, { Menu, Item, Search } from 'rete-context-menu-plugin';
editor.use(ContextMenuPlugin, {
    searchBar: false, // true by default
    searchKeep: title => true, // leave item when searching, optional. For example, title => ['Refresh'].includes(title)
    delay: 100,
    allocate(component) {
        return ['Submenu'];
    },
    rename(component) {
        return component.name;
    },
    items: {
        'Click me'(){ console.log('Works!') }
    },
    nodeItems: {
        'Click me'(){ console.log('Works for node!') },
        'Delete': false, // don't show Delete item
        'Clone': false // or Clone item
    },
    // OR
    nodeItems: node => {
        if (node.name === 'Add') {
            return {
                'Only for Add nodes'() => { console.log('Works for add node!') },
            };
        }
        return { 
            'Click me'(){ console.log('Works for node!') }
        }
    },
    vueComponent: CustomVueComponent // extends Menu
});| Options | Description | Default | 
|---|---|---|
| searchBar | Showing search bar | true | 
| delay | Delay hide, ms | 1000 | 
| allocate | function for placing of components into submenu | () => [] | 
| rename | function for renaming of items | component => component.name | 
| items | custom items ( Objectwith nested objects and functions) | {} | 
| nodeItems | custom items for Node menu or a function that returns node items | {} | 
You can arbitrarily put a component in a submenu. Examples:
allocate() { return ["Single submenu"] }allocate(component) { return component.path } // where path is a stack of menu for every componentallocate(component) { return null } // exclude component from menu itemsTo change the items that create nodes, you may need to change the name.
class MyComponent {
    constructor() {
        super("My comp");
        this.contextMenuName = "Add My comp";
    }
}
///
rename(component) { return component.contextMenuName || component.name }Prevent showing context menu
editor.on('showcontextmenu', ({ e, node }) => { // e - MouseEvent, node - Node instance or null
    return Boolean(node); // show context menu for nodes only
});Prevent context menu for particular Node
class AddComponent extends Rete.Component {
    constructor(){
        // ...
        this.data.noContextMenu = true;
    }
// ...
editor.on('showcontextmenu', ({ node }) => {
    return !node || !editor.components.get(node.name).data.noContextMenu;
});