# diagram-bpmn-editor

> BPMN process editor with a diagram canvas and a symbol palette of BPMN shapes, events, and tasks.

**Framework:** angular  **Component:** Diagram  **Variant:** bpmn-editor

## Get this item

**If you are an agent, fetch the JSON.** Source is inlined, so one request is enough and no tooling is required:

```
GET https://ai.syncfusion.com/r/angular/diagram-bpmn-editor.json
```

**Install Package(s)**

```bash
npm install @syncfusion/ej2-angular-diagrams
```

**Notes**

- Syncfusion release: 2026 Volume 2 (v34.1.29)
- The Syncfusion package is licensed. The composition in this file is source you own and edit. See https://ai.syncfusion.com/licensing.md

## Source files

### src/components/diagram-bpmn-editor/bpmn-editor.component.ts

```typescript
/**
 * BPMN Editor sample
 */

// Importing needed dependencies for diagram
import { Component, ViewEncapsulation, ViewChild ,Inject} from '@angular/core';
import { DiagramComponent, MarginModel, Diagram, NodeModel, BpmnDiagrams, SnapSettingsModel,
    BpmnLoops, SnapConstraints, SymbolPalette, BpmnShape, BpmnDataObjects, BpmnGateways, BpmnTasks,
    BpmnTriggers, BpmnBoundary, NodeConstraints, BpmnShapeModel, ConnectorModel, BpmnGatewayModel,
    ContextMenuSettingsModel, IDragEnterEventArgs, DiagramBeforeMenuOpenEventArgs, BpmnEvents,
    PaletteModel, SymbolPaletteModule, DiagramModule, Segments} from '@syncfusion/ej2-angular-diagrams';
import { MenuEventArgs, ExpandMode } from '@syncfusion/ej2-navigations';
SymbolPalette.Inject(BpmnDiagrams);
Diagram.Inject(BpmnDiagrams);

/**
 * Component for displaying a BPMN Editor  sample.
 * Manages the presentation and behavior of the diagram using Syncfusion's Angular Diagram component.
 */
@Component({
    selector: 'control-content', // Angular component selector
    templateUrl: 'bpmn-editor.html', // HTML template file for the component
    encapsulation: ViewEncapsulation.None, // No view encapsulation
    standalone: true,  // Indicates it's a standalone component
    imports: [ SymbolPaletteModule, DiagramModule]   // Importing necessary Angular modules and components
})

/**
 * Represents a diagram component of BPMN Editor .
 */
export class BPMNShapesDiagramComponent {
  // Reference to the diagram component
  @ViewChild('diagram')
    public diagram!: DiagramComponent;
    public expandMode: ExpandMode = 'Multiple';
    public snapSettings: SnapSettingsModel = { constraints: SnapConstraints.None };

    // Function to initialize a node
    private createNode(id: string, width: number, height: number, offsetX: number, offsetY: number,
        shape: any, annotations: any[] = [], margin: any = {}, style: any = {}, constraints: any = NodeConstraints.Default): NodeModel {
        return {
            id: id,
            width: width,
            height: height,
            offsetX: offsetX,
            offsetY: offsetY,
            shape: shape,
            annotations,
            margin: margin,
            style: style,
            constraints: constraints
        }
    };
    
  //Initializes the nodes for the diagram.
  public nodes: NodeModel[] = [    
  
    this.createNode('start', 40, 40, 35, 180, { type: 'Bpmn', shape: 'Event', event: { event: 'Start' } }),
  
    this.createNode('subProcess', 520, 250, 355, 180, { shape: 'Activity', type: 'Bpmn', activity: { activity: 'SubProcess',
    subProcess: { type: 'Transaction', collapsed: false, processes: ['processesStart', 'service', 'compensation', 
    'error','processesTask', 'processesEnd', 'user', 'subProcessesEnd']}}},[],{},{},
    NodeConstraints.Default | NodeConstraints.AllowDrop,
  ),
    
    this.createNode('hazardEnd', 40, 40, 305, 370, { type: 'Bpmn', shape: 'Event', event: { event: 'End' } }, [
      { id: 'label2', content: 'Hazard', verticalAlignment: 'Top', style: { fill: 'white', color: 'black' }, margin: { top: 20 } }
    ]),
    
    this.createNode('cancelledEnd', 40, 40, 545, 370, { type: 'Bpmn', shape: 'Event', event: { event: 'End' } }, [
      { id: 'cancelledEndLabel2', content: 'Cancelled', verticalAlignment: 'Top', style: { fill: 'white', color: 'black' }, margin: { top: 20 } }
    ]),
    
    this.createNode('end', 40, 40, 665, 180, { type: 'Bpmn', shape: 'Event', event: { event: 'End' } }),
    
    this.createNode('processesStart', 30, 30, 0, 0, { type: 'Bpmn', shape: 'Event', event: { event: 'Start' } }, [], { left: 40, top: 80 }),
    
    this.createNode('service', 95, 70, 0, 0, {
      type: 'Bpmn', shape: 'Activity', activity: { activity: 'Task', task: { type: 'Service', loop: 'ParallelMultiInstance' } } },
      [{ id: 'serviceLabel2', content: 'Book hotel', style: { color: 'white' }, offset: { x: 0.5, y: 0.5 } }],
      { left: 110, top: 20 }, { fill: '#6FAAB0' }
    ),
    
    this.createNode('compensation', 30, 30, 0, 0, { type: 'Bpmn', shape: 'Event', event: { event: 'Intermediate', trigger: 'Compensation' } }, [], { left: 170, top: 100 }),
    
    this.createNode('processesTask', 95, 70, 0, 0, {
      type: 'Bpmn', shape: 'Activity', activity: { activity: 'Task', task: { type: 'Service' } } }, 
      [{ id: 'serviceLabel2', content: 'Charge credit card', style: { color: 'white' }, offset: { x: 0.5, y: 0.6 } } ],
      { left: 290, top: 20 }, { fill: '#F6B53F' }
    ),
    
    this.createNode('error', 30, 30, 0, 0, { type: 'Bpmn', shape: 'Event', event: { event: 'Intermediate', trigger: 'Error' } }, [], { left: 350, top: 100 }),
    
    this.createNode('processesEnd', 30, 30, 0, 0, { type: 'Bpmn', shape: 'Event', event: { event: 'End' } },[], { left: 440, top: 80 }),
    
    this.createNode('user', 90, 80, 0, 0, {
      type: 'Bpmn', shape: 'Activity', activity: { activity: 'Task', task: { type: 'User', compensation: true } } }, 
      [ { id: 'serviceLabel2', content: 'Cancel hotel reservation', style: { color: 'white' }, offset: { x: 0.5, y: 0.6 } } ], 
      { left: 30, top: 160 }, { fill: '#E94649' }
    ),
    
    this.createNode('subProcessesEnd', 30, 30, 0, 0, { type: 'Bpmn', shape: 'Event', event: { event: 'End' } }, [], { left: 440, top: 210 }),
  ];

    // Function to create a connector
    private createConnector(id: string, sourceID: string, targetID: string, sourcePortID = " ", targetPortID = "", type: Segments = "Orthogonal",
        segments: any[] = [], annotations: any[] = [], shape: any = {}, style: any = {}): ConnectorModel {
        return {
            id: id,
            sourceID: sourceID,
            targetID: targetID,
            sourcePortID: sourcePortID,
            targetPortID: targetPortID,
            type: type,
            segments: segments,
            annotations: annotations,
            shape: shape,
            style: style
        }
    };
    
    //Initializes the connectors for the diagram.
    public connectors: ConnectorModel[] = [
    this.createConnector('connector1', 'start', 'subProcess'),
    this.createConnector('connector2', 'subProcess', 'end', 'success'),
    this.createConnector('connector3', 'subProcess', 'hazardEnd', 'failure',"", 'Orthogonal', 
      [{ type: 'Orthogonal', length: 50, direction: 'Bottom' }],
      [{ id: 'connector3Label2', content: 'Booking system failure', offset: 0.50, style: { fill: 'white' }}]
    ),
    this.createConnector('connector4', 'subProcess', 'cancelledEnd', 'cancel',"", 'Orthogonal', 
      [{ type: 'Orthogonal', length: 50, direction: 'Bottom' }]
    ),
    this.createConnector('connector5', 'processesStart', 'service', "", "", 'Orthogonal'),
    this.createConnector('connector6', 'service', 'processesTask'),
    this.createConnector('connector7', 'processesTask', 'processesEnd', "", "", 'Orthogonal'),
    this.createConnector('connector8', 'compensation', 'user', "", "", 'Orthogonal', 
      [{ type: 'Orthogonal', length: 30, direction: 'Bottom' },{ type: 'Orthogonal', length: 80, direction: 'Left' }],
      [],{ type: 'Bpmn', flow: 'Association', association: 'Directional'},{ strokeDashArray: '2,2'}
    ),
    this.createConnector('connector9', 'error', 'subProcessesEnd', "", "", 'Orthogonal', 
      [{ type: 'Orthogonal', length: 50, direction: 'Bottom' }],
      [{ id: 'connector9Label2', content: 'Cannot charge card', offset: 0.5,
        style: { fill: 'white', color: 'black' } } ]
    )
  ];

    //Initializes the bpmn shapes for the symbol pallete.
    public bpmnShapes: NodeModel[] = [
        {
            id: 'Start', width: 35, height: 35, shape: {
                type: 'Bpmn', shape: 'Event',
                event: { event: 'Start' },
            },
        },
        {
            id: 'NonInterruptingIntermediate', width: 35, height: 35, shape: {
                type: 'Bpmn', shape: 'Event',
                event: { event: 'NonInterruptingIntermediate' }
            },
        },
        {
            id: 'End', width: 35, height: 35, offsetX: 665, offsetY: 230, shape: {
                type: 'Bpmn', shape: 'Event',
                event: { event: 'End' }
            },
        },
        {
            id: 'Task', width: 35, height: 35, offsetX: 700, offsetY: 700,
            shape: {
                type: 'Bpmn', shape: 'Activity', activity: {
                    activity: 'Task',
                },
            }
        },
        {
            id: 'Transaction', width: 35, height: 35, offsetX: 300, offsetY: 100,
            constraints: NodeConstraints.Default | NodeConstraints.AllowDrop,
            shape: {
                type: 'Bpmn', shape: 'Activity',
                activity: {
                    activity: 'SubProcess', subProcess: {
                        type: 'Transaction', transaction: {
                            cancel: { visible: false }, failure: { visible: false }, success: { visible: false }
                        }
                    }
                }
            }
        }, {
            id: 'Task_Service', width: 35, height: 35, offsetX: 700, offsetY: 700,
            shape: {
                type: 'Bpmn', shape: 'Activity', activity: {
                    activity: 'Task', task: { type: 'Service' }
                },
            }
        },
        {
            id: 'Gateway', width: 35, height: 35, offsetX: 100, offsetY: 100,
            shape: { type: 'Bpmn', shape: 'Gateway', gateway: { type: 'Exclusive' } as BpmnGatewayModel }
        },
        {
            id: 'DataObject', width: 35, height: 35, offsetX: 500, offsetY: 100,
            shape: { type: 'Bpmn', shape: 'DataObject', dataObject: { collection: false, type: 'None' } }
        },
        {
            id: 'subProcess', width: 520, height: 250, offsetX: 355, offsetY: 230,
            constraints: NodeConstraints.Default | NodeConstraints.AllowDrop,
            shape: {
                shape: 'Activity', type: 'Bpmn',
                activity: {
                    activity: 'SubProcess', subProcess: {
                        type: 'Transaction', collapsed: false,
                        processes: [], transaction: {
                            cancel: { visible: false }, failure: { visible: false }, success: { visible: false }
                        }
                    }
                }
            },
        },
    ];

    
    //Initializes the context menu for shapes.
    public contextMenu: ContextMenuSettingsModel = {
    show: true, items: [
        {
            text: 'Ad-Hoc', id: 'Adhoc',
            items: [{ text: 'None', iconCss: 'e-adhocs e-bpmn-event e-bpmn-icons e-None', id: 'AdhocNone' },
            { iconCss: 'e-adhocs e-bpmn-icons e-adhoc', text: 'Ad-Hoc', id: 'AdhocAdhoc' }]
        }, {
            text: 'Loop', id: 'Loop',
            items: [{ text: 'None', iconCss: 'e-loop e-bpmn-icons e-None', id: 'LoopNone' },
            { text: 'Standard', iconCss: 'e-loop e-bpmn-icons e-Loop', id: 'Standard' },
            { text: 'Parallel Multi-Instance', iconCss: 'e-loop e-bpmn-icons e-ParallelMI', id: 'ParallelMultiInstance' },
            { text: 'Sequence Multi-Instance', iconCss: 'e-loop e-bpmn-icons e-SequentialMI', id: 'SequenceMultiInstance' }]
        }, {
            text: 'Compensation', id: 'taskCompensation',
            items: [{ text: 'None', iconCss: 'e-compensation e-bpmn-icons e-None', id: 'CompensationNone' },
            { iconCss: 'e-compensation e-bpmn-icons e-Compensation', text: 'Compensation', id: 'CompensationCompensation' }]
        }, {
            text: 'Activity-Type', id: 'Activity-Type',
            items: [{ text: 'Collapsed sub-process', iconCss: 'e-bpmn-icons e-SubProcess', id: 'CollapsedSubProcess' },
            { iconCss: 'e-bpmn-icons e-Task', text: 'Expanded sub-process', id: 'ExpandedSubProcess' }]
        }, {
            text: 'Boundry', id: 'Boundry',
            items: [{ text: 'Default', iconCss: 'e-boundry e-bpmn-icons e-Default', id: 'Default' },
            { text: 'Call', iconCss: 'e-boundry e-bpmn-icons e-Call', id: 'BoundryCall' },
            { text: 'Event', iconCss: 'e-boundry e-bpmn-icons e-Event', id: 'BoundryEvent' }]
        }, {
            text: 'Data Object', id: 'DataObject',
            items: [{ text: 'None', iconCss: 'e-data e-bpmn-icons e-None', id: 'DataObjectNone' },
            { text: 'Input', iconCss: 'e-data e-bpmn-icons e-DataInput', id: 'Input' },
            { text: 'Output', iconCss: 'e-data e-bpmn-icons e-DataOutput', id: 'Output' }]
        }, {
            text: 'Collection', id: 'collection',
            items: [{ text: 'None', iconCss: 'e-collection e-bpmn-icons e-None', id: 'collectionNone' },
            { text: 'Collection', iconCss: 'e-collection e-bpmn-icons e-ParallelMI', id: 'Collectioncollection' }]
        }, {
            text: 'Call', id: 'DeftCall',
            items: [{ text: 'None', iconCss: 'e-call e-bpmn-icons e-None', id: 'CallNone' },
            { text: 'Call', iconCss: 'e-call e-bpmn-icons e-CallActivity', id: 'CallCall' }]
        }, {
            text: 'Trigger Result', id: 'TriggerResult',
            items: [{ text: 'None', id: 'TriggerNone', iconCss: 'e-trigger e-bpmn-icons e-None' },
            { text: 'Message', id: 'Message', iconCss: 'e-trigger e-bpmn-icons e-InMessage' },
            { text: 'Multiple', id: 'Multiple', iconCss: 'e-trigger e-bpmn-icons e-InMultiple' },
            { text: 'Parallel', id: 'Parallel', iconCss: 'e-trigger e-bpmn-icons e-InParallelMultiple' },
            { text: 'Signal', id: 'Signal', iconCss: 'e-trigger e-bpmn-icons e-InSignal' },
            { text: 'Timer', id: 'Timer', iconCss: 'e-trigger e-bpmn-icons e-InTimer' },
            { text: 'Cancel', id: 'Cancel', iconCss: 'e-trigger e-bpmn-icons e-CancelEnd' },
            { text: 'Escalation', id: 'Escalation', iconCss: 'e-trigger e-bpmn-icons e-InEscalation' },
            { text: 'Error', id: 'Error', iconCss: 'e-trigger e-bpmn-icons e-InError' },
            { text: 'Compensation', id: 'triggerCompensation', iconCss: 'e-trigger e-bpmn-icons e-InCompensation' },
            { text: 'Terminate', id: 'Terminate', iconCss: 'e-trigger e-bpmn-icons e-TerminateEnd' },
            { text: 'Conditional', id: 'Conditional', iconCss: 'e-trigger e-bpmn-icons e-InConditional' },
            { text: 'Link', id: 'Link', iconCss: 'e-trigger e-bpmn-icons e-ThrowLinkin' }
            ]
        },
        {
            text: 'Event Type', id: 'EventType',
            items: [{ text: 'Start', id: 'Start', iconCss: 'e-event e-bpmn-icons e-NoneStart', },
            { text: 'Intermediate', id: 'Intermediate', iconCss: 'e-event e-bpmn-icons e-InterruptingNone' },
            { text: 'NonInterruptingStart', id: 'NonInterruptingStart', iconCss: 'e-event e-bpmn-icons e-Noninterruptingstart' },
            { text: 'ThrowingIntermediate', id: 'ThrowingIntermediate', iconCss: 'e-event e-bpmn-icons e-ThrowingIntermediate' },
            {
                text: 'NonInterruptingIntermediate', id: 'NonInterruptingIntermediate',
                iconCss: 'e-event e-bpmn-icons e-NoninterruptingIntermediate'
            },
            { text: 'End', id: 'End', iconCss: 'e-event e-bpmn-icons e-NoneEnd' }]
        }, {
            text: 'Task Type', id: 'TaskType',
            items: [
                { text: 'None', id: 'TaskNone', iconCss: 'e-task e-bpmn-icons e-None' },
                { text: 'Service', id: 'Service', iconCss: 'e-task e-bpmn-icons e-ServiceTask' },
                { text: 'BusinessRule', id: 'BusinessRule', iconCss: 'e-task e-bpmn-icons e-BusinessRule' },
                { text: 'InstantiatingReceive', id: 'InstantiatingReceive', iconCss: 'e-task e-bpmn-icons e-InstantiatingReceive' },
                { text: 'Manual', id: 'Manual', iconCss: 'e-task e-bpmn-icons e-ManualCall' },
                { text: 'Receive', id: 'Receive', iconCss: 'e-task e-bpmn-icons e-InMessage' },
                { text: 'Script', id: 'Script', iconCss: 'e-task e-bpmn-icons e-ScriptCall' },
                { text: 'Send', id: 'Send', iconCss: 'e-task e-bpmn-icons e-OutMessage' },
                { text: 'User', id: 'User', iconCss: 'e-task e-bpmn-icons e-UserCall' },
            ]
        }, {
            text: 'GateWay', id: 'GateWay',
            iconCss: 'e-bpmn-icons e-Gateway', items: [
                { text: 'None', id: 'GatewayNone', iconCss: 'e-gate e-bpmn-icons e-None' },
                { text: 'Exclusive', iconCss: 'e-gate e-bpmn-icons e-ExclusiveGatewayWithMarker', id: 'Exclusive' },
                { text: 'Inclusive', iconCss: 'e-gate e-bpmn-icons e-InclusiveGateway', id: 'Inclusive' },
                { text: 'Parallel', iconCss: 'e-gate e-bpmn-icons e-ParallelGateway', id: 'GatewayParallel' },
                { text: 'Complex', iconCss: 'e-gate e-bpmn-icons e-ComplexGateway', id: 'Complex' },
                { text: 'EventBased', iconCss: 'e-gate e-bpmn-icons e-EventBasedGateway', id: 'EventBased' },
                { text: 'ExclusiveEventBased', iconCss: 'e-gate e-bpmn-icons e-ExclusiveEventBased', id: 'ExclusiveEventBased' },
                { text: 'ParallelEventBased', iconCss: 'e-gate e-bpmn-icons e-ParallelEventBasedGatewaytostart', id: 'ParallelEventBased' }
            ]
        },
    ],
    showCustomMenuOnly: true,
    };

    public diagramCreate(args: Object): void {
        this.diagram.fitToPage();
        paletteIconClick();
    };
    public symbolMargin: MarginModel = {
        left: 15, right: 15, top: 15, bottom: 15
    };

    // Define the function getConnectors
    public getConnectors(): ConnectorModel[] {

        //Initializes the Connector shapes for the symbol pallete.
        let connectorSymbols: ConnectorModel[] = [
            {
                id: 'Link1', type: 'Orthogonal', sourcePoint: { x: 0, y: 0 }, targetPoint: { x: 40, y: 40 },
                targetDecorator: { shape: 'Arrow', style: {strokeColor: '#757575', fill: '#757575'} }, style: { strokeWidth: 2, strokeColor: '#757575' }
            },
            {
                id: 'Link2', type: 'Orthogonal', sourcePoint: { x: 0, y: 0 }, targetPoint: { x: 40, y: 40 },
                targetDecorator: { shape: 'Arrow', style: {strokeColor: '#757575', fill: '#757575'} }, style: { strokeWidth: 2, strokeDashArray: '4 4', strokeColor: '#757575' }
            },
            {
                id: 'Link3', type: 'Straight', sourcePoint: { x: 0, y: 0 }, targetPoint: { x: 40, y: 40 },
                targetDecorator: { shape: 'Arrow', style: {strokeColor: '#757575', fill: '#757575'} }, style: { strokeWidth: 2, strokeColor: '#757575' }
            },
            {
                id: 'link4', sourcePoint: { x: 0, y: 0 }, targetPoint: { x: 40, y: 40 }, type: 'Orthogonal',
                targetDecorator: { style: {strokeColor: '#757575', fill: '#757575'} },
                shape: {
                    type: 'Bpmn',
                    flow: 'Association',
                    association: 'Directional'
                }, style: {
                    strokeDashArray: '2,2', strokeColor: '#757575'
                },
            },
        ];
        return connectorSymbols;
    }

    //function context menu click
    public contextMenuClick(args: MenuEventArgs): void {
      if (this.diagram.selectedItems.nodes!.length > 0) {
        let bpmnShape: any = this.diagram.selectedItems.nodes![0].shape as BpmnShapeModel;
        if (args.item.iconCss) {
          if (args.item.iconCss.indexOf('e-adhocs') > -1) {
            bpmnShape.activity.subProcess.adhoc = args.item.id === 'AdhocNone' ? false : true;
          }
          if (args.item.iconCss.indexOf('e-event') > -1) {
            bpmnShape.event.event = (args.item.id as BpmnEvents);
          }
          if (args.item.iconCss.indexOf('e-trigger') > -1) {
            bpmnShape.event.trigger = (args.item.text as BpmnTriggers);
          }
          if (args.item.iconCss.indexOf('e-loop') > -1) {
            let loop : string = (args.item.id === 'LoopNone' as BpmnLoops) ? 'None' : args.item.id!;
            if (bpmnShape.activity.activity === 'Task') {
              bpmnShape.activity.task.loop = loop as BpmnLoops;
            }
            if (bpmnShape.activity.activity === 'SubProcess') {
              bpmnShape.activity.subProcess.loop = loop as BpmnLoops;
            }
          }
          if (args.item.iconCss.indexOf('e-compensation') > -1) {
            let compensation: boolean = (args.item.id === 'CompensationNone') ? false : true;
            if (bpmnShape.activity.activity === 'Task') {
              bpmnShape.activity.task.compensation = compensation;
            }
            if (bpmnShape.activity.activity === 'SubProcess') {
              bpmnShape.activity.subProcess.compensation = compensation;
            }
          }
          if (args.item.iconCss.indexOf('e-call') > -1) {
            let compensation: boolean = (args.item.id === 'CallNone') ? false : true;
            if (bpmnShape.activity.activity === 'Task') {
              bpmnShape.activity.task.call = compensation;
            }
          }

          if (args.item.iconCss.indexOf('e-boundry') > -1) {
            let call: string = args.item.id!;
            if (args.item.id !== 'Default') {
              call = (args.item.id === 'BoundryEvent') ? 'Event' : 'Call';
            }
            bpmnShape.activity.subProcess.boundary = call as BpmnBoundary;
          }
          if (args.item.iconCss.indexOf('e-data') > -1) {
            let call: string = args.item.id === 'DataObjectNone' ? 'None' : args.item.id!;
            bpmnShape.dataObject.type = call as BpmnDataObjects;
          }
          if (args.item.iconCss.indexOf('e-collection') > -1) {
            let call: boolean = (args.item.id === 'Collectioncollection') ? true : false;
            bpmnShape.dataObject.collection = call;
          }
          if (args.item.iconCss.indexOf('e-task') > -1) {
            let task: string = args.item.id === 'TaskNone' ? 'None' : args.item.id!;
            if (bpmnShape.activity.activity === 'Task') {
              bpmnShape.activity.task.type = task as BpmnTasks;
            }
          }
          if (args.item.iconCss.indexOf('e-gate') > -1) {
            let task: string = args.item.id!.replace('Gateway', '');
            if (bpmnShape.shape === 'Gateway') {
              bpmnShape.gateway.type = task as BpmnGateways;
            }
          }
        }
        if (args.item.id === 'CollapsedSubProcess' || args.item.id === 'ExpandedSubProcess') {
          if (args.item.id === 'ExpandedSubProcess') {
            bpmnShape.activity.activity = 'SubProcess';
            bpmnShape.activity.subProcess.collapsed = false;
          } else {
            bpmnShape.activity.activity = 'SubProcess';
            bpmnShape.activity.subProcess.collapsed = true;
          }
        }
        this.diagram.dataBind();
      }
    }

    // Define a function to handle opening the context menu
    public contextMenuOpen(args: DiagramBeforeMenuOpenEventArgs) {
        let hiddenId: string[] = [];
        if (args.element.className !== 'e-menu-parent e-ul ') {
            hiddenId = ['Adhoc', 'Loop', 'taskCompensation', 'Activity-Type', 'Boundry', 'DataObject',
                'collection', 'DeftCall', 'TriggerResult', 'EventType', 'TaskType', 'GateWay'];
        }
        if (this.diagram.selectedItems.nodes!.length) {
            for (let item of args.items) {
                let bpmnShape: any = this.diagram.selectedItems.nodes![0].shape as BpmnShapeModel;
                if (bpmnShape.shape !== 'DataObject' && bpmnShape.shape !== 'Gateway') {
                    if (item.text === 'Ad-Hoc') {
                        if (bpmnShape.activity.activity === 'SubProcess') {
                            hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                        }
                    }
                    if (item.text === 'Loop' || item.text === 'Compensation' || item.text === 'Activity-Type') {
                        if (bpmnShape.shape === 'Activity') {
                            hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                        }
                    }
                    if (item.text === 'Boundry') {
                        if (bpmnShape.activity.activity === 'SubProcess') {
                            hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                        }
                    }
                }
                if (item.text === 'Data Object') {
                    if (bpmnShape.shape === 'DataObject') {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (item.text === 'Collection') {
                    if (bpmnShape.shape === 'DataObject') {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (item.text === 'Call') {
                    if (bpmnShape.shape === 'Activity' && bpmnShape.activity.activity === 'Task') {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (item.text === 'Trigger Result') {
                    if ((bpmnShape.shape === 'Event')) {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (item.text === 'Event Type') {
                    if ((bpmnShape.shape === 'Event')) {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (item.text === 'Task Type') {
                    if ((bpmnShape.shape === 'Activity')
                        && (bpmnShape.activity.activity === 'Task')) {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (item.text === 'GateWay') {
                    if ((bpmnShape.shape === 'Gateway')) {
                        hiddenId.splice(hiddenId.indexOf(item.id!), 1);
                    }
                }
                if (args.parentItem && args.parentItem.id === 'TriggerResult' && bpmnShape.shape === 'Event') {

                    if (item.text !== 'None' && (item.text === bpmnShape.event.event || item.text === bpmnShape.event.trigger)) {
                        hiddenId.push(item.id!);
                    }
                    if (bpmnShape.event.event === 'Start') {
                        if (item.text === 'Cancel' || item.text === 'Terminate' || item.text === 'Link') {
                            hiddenId.push(item.id!);
                        }
                    }
                    if (bpmnShape.event.event === 'NonInterruptingStart' || item.text === 'Link') {
                        if (item.text === 'Cancel' || item.text === 'Terminate' || item.text === 'Compensation' ||
                            item.text === 'Error' || item.text === 'None') {
                            hiddenId.push(item.id!);
                        }
                    }
                    if (bpmnShape.event.event === 'Intermediate') {
                        if (item.text === 'Terminate') {
                            hiddenId.push(item.id!);
                        }
                    }
                    if (bpmnShape.event.event === 'NonInterruptingIntermediate') {
                        if (item.text === 'Cancel' || item.text === 'Terminate' || item.text === 'Compensation' ||
                            item.text === 'Error' || item.text === 'None' || item.text === 'Link') {
                            hiddenId.push(item.id!);
                        }
                    }
                    if (bpmnShape.event.event === 'ThrowingIntermediate') {
                        if (item.text === 'Cancel' || item.text === 'Terminate' || item.text === 'Timer' || item.text === 'Error' ||
                            item.text === 'None' || item.text === 'Pareller' || item.text === 'Conditional') {
                            hiddenId.push(item.id!);
                        }
                    }
                    if (bpmnShape.event.event === 'End') {
                        if (item.text === 'Parallel' || item.text === 'Timer' || item.text === 'Conditional' || item.text === 'Link') {
                            hiddenId.push(item.id!);
                        }
                    }
                }
                if (args.parentItem && args.parentItem.id === 'EventType' && bpmnShape.shape === 'Event') {
                    if (item.text === bpmnShape.event.event) {
                        hiddenId.push(item.id!);
                    }
                }
            }
        }
        args.hiddenItems = hiddenId;
    }

    // Function to handle drag enter from palette to diagram
    public dragEnter(args: IDragEnterEventArgs) {
        let node: NodeModel = args.element as NodeModel;
        if (node instanceof Node) {
            let bpmnShape: any = node.shape;
            if (!(bpmnShape.activity.subProcess!.collapsed)) {
                bpmnShape.activity.subProcess!.transaction!.cancel!.visible = true;
                bpmnShape.activity.subProcess!.transaction!.failure!.visible = true;
                bpmnShape.activity.subProcess!.transaction!.success!.visible = true;
            } else {
                let nodeWidth: number = node.width!;
                let nodeHeight: number = node.height!;
                let ratio: number = 100 / node.width!;
                node.width = 100;
                node.height! *= ratio;
                node.offsetX! += (node.width - nodeWidth) / 2;
                node.offsetY! += (node.height! - nodeHeight) / 2;
            }
        }
    }
    public getSymbolDefaults(symbol: NodeModel): void {
        symbol.style!.strokeColor = '#757575';
      }

    public palette: PaletteModel[] = [
        { id: 'Bpmn', expanded: true, symbols: this.bpmnShapes, iconCss: 'shapes', title: 'BPMN Shapes' },
        { id: 'Connector', expanded: true, symbols: this.getConnectors(), iconCss: 'shapes', title: 'Connectors' },
    ];
}

```

### src/components/diagram-bpmn-editor/bpmn-editor.html

```html
<script src="script/diagram-common.ts"></script>
<style>
    @font-face {
        font-family: 'e-bpmn-icons';
        src: url(data:application/x-font-ttf;charset=utf-8;base64,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cgBvACAAUwB0AHUAZABpAG8AdwB3AHcALgBzAHkAbgBjAGYAdQBzAGkAbwBuAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8AClN1YnByb2Nlc3MMQ2FsbEFjdGl2aXR5BFNlbmQGU2NyaXB0Bk91dHB1dAZTaWduYWwPRXZlbnRTdWJQcm9jZXNzB0NvbXBsZXgFRXZlbnQGQWQtSG9jClBhcmFsbGVsTUkEQ2FsbARMaW5rCUV4Y2x1c2l2ZQRMb29wBUVycm9yCE11bHRpcGxlDEludGVybWVkaWF0ZQxCdXNpbmVzc1J1bGUEVXNlcglUZXJtaW5hdGUHTWVzc2FnZQdEZWZhdWx0BkNhbmNlbBJQYXJhbGxlbEV2ZW50QmFzZWQHU2VydmljZQpFc2NhbGF0aW9uBFRhc2sTRXhjbHVzaXZlRXZlbnRCYXNlZAxTZXF1ZW50aWFsTUkJSW5jbHVzaXZlBVN0YXJ0BVRpbWVyCkV2ZW50QmFzZWQMQ29tcGVuc2F0aW9uA0VuZAtUcmFuc2FjdGlvbgZNYW51YWwETm9uZRBQYXJhbGxlbE11bHRpcGxlC0NvbmRpdGlvbmFsCFBhcmFsbGVsG05vbmludGVycnVwdGluZ0ludGVybWVkaWF0ZRROb25pbnRlcnJ1cHRpbmdzdGFydBRJbnN0YW50aWF0aW5nUmVjZWl2ZQAAAAAA) format('truetype');
        font-weight: normal;
        font-style: normal;
    }

    .e-bpmn-icons {
        font-family: 'e-bpmn-icons' !important;
        font-size: 55px;
        font-style: normal;
        font-weight: normal;
        font-variant: normal;
        text-transform: none;
        line-height: 1;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }

    .e-Order:before {
        content: "\e700";
    }

    .e-InBOCatchMessage:before {
        content: "\e701";
    }

    .e-NoneEnd:before {
        content: "\e723";
    }

    .e-DataObjectCollection:before {
        content: "\e703";
    }

    .e-DataOutput:before {
        content: "\e704";
    }

    .e-EscalationEnd:before {
        content: "\e705";
    }

    .e-Activity:before {
        content: "\e706";
    }

    .e-EventBasedGateway:before {
        content: "\e721";
    }

    .e-CatchParallelMultiple:before {
        content: "\e708";
    }

    .e-CatchMultipleIn:before {
        content: "\e709";
    }

    .e-BoCatchCompensation:before {
        content: "\e70a";
    }

    .e-TimerIntermediate:before {
        content: "\e70b";
    }

    .e-NonInBoCatchParallelMultiple:before {
        content: "\e70d";
    }

    .e-NonInBoTimerIntermediate:before {
        content: "\e70e";
    }

    .e-ParallelEventBasedGatewaytostart:before {
        content: "\e718";
    }

    .e-NonInMultiple:before {
        content: "\e710";
    }

    .e-CompensationEnd:before {
        content: "\e711";
    }

    .e-InError:before {
        content: "\e70f";
    }

    .e-NonCatchMultipleIn:before {
        content: "\e713";
    }

    .e-InCompensation:before {
        content: "\e722";
    }

    .e-NonInEscalation:before {
        content: "\e716";
    }

    .e-ThrowMultipleIn:before {
        content: "\e717";
    }

    .e-InMessage:before {
        content: "\e715";
    }

    .e-OutMessage:before {
        content: "\e702";
    }

    .e-ScriptCall:before {
        content: "\e703";
    }

    .e-UserCall:before {
        content: "\e713";
    }

    .e-NonInThrowMessage:before {
        content: "\e719";
    }

    .e-EvBaseGateTostartProcess:before {
        content: "\e71a";
    }

    .e-InterruptingNone:before {
        content: "\e71e";
    }

    .e-ThrowingIntermediate:before {
        content: "\e711";
    }

    .e-DataOutputCollection:before {
        content: "\e71c";
    }

    .e-ThrowEscalationIn:before {
        content: "\e71d";
    }

    .e-ExclusiveGatewayWithMarker:before {
        content: "\e70d";
    }

    .e-ErrorEnd:before {
        content: "\e71f";
    }

    .e-ComplexGateway:before {
        content: "\e707";
    }

    .e-NonInParallelMultiple:before {
        content: "\e721";
    }

    .e-InSignal:before {
        content: "\e705";
    }

    .e-NonInBoCatchEscalation:before {
        content: "\e723";
    }

    .e-InclusiveGateway:before {
        content: "\e71e";
    }

    .e-MultipleEnd:before {
        content: "\e725";
    }

    .e-ThrowLinkin:before {
        content: "\e70c";
    }

    .e-ParallelGateway:before {
        content: "\e729";
    }

    .e-SignalEnd:before {
        content: "\e728";
    }

    .e-TerminateEnd:before {
        content: "\e714";
    }

    .e-BoCatchCompensationIn:before {
        content: "\e72a";
    }

    .e-InTimer:before {
        content: "\e720";
    }

    .e-ThrowCompensationIn:before {
        content: "\e72c";
    }

    .e-InConditional:before {
        content: "\e728";
    }

    .e-BoCatchCancelIn:before {
        content: "\e72f";
    }

    .e-ThrowMessage:before {
        content: "\e730";
    }

    .e-CatchLinkIn:before {
        content: "\e731";
    }

    .e-Gateway:before {
        content: "\e732";
    }

    .e-DataInputCollection:before {
        content: "\e733";
    }

    .e-NonInSignal:before {
        content: "\e734";
    }

    .e-DataInput:before {
        content: "\e70c";
    }

    .e-InMultiple:before {
        content: "\e710";
    }

    .e-InEscalation:before {
        content: "\e71a";
    }

    .e-CancelEnd:before {
        content: "\e717";
    }

    .e-DataObject:before {
        content: "\e739";
    }

    .e-NonInBOCatchMessage:before {
        content: "\e73a";
    }

    .e-ManualCall:before {
        content: "\e725";
    }

    .e-InParallelMultiple:before {
        content: "\e727";
    }

    .e-Flow:before {
        content: "\e73d";
    }

    .e-DataStore:before {
        content: "\e73e";
    }

    .e-NoneStart:before {
        content: "\e71f";
    }

    .e-ServiceTask:before {
        content: "\e719";
    }

    .e-InBoCatchEscalation:before {
        content: "\e741";
    }

    .e-NonInConditional:before {
        content: "\e742";
    }

    .e-BusinessRule:before {
        content: "\e712";
    }

    .e-NonInTimer:before {
        content: "\e744";
    }

    .e-MessageEnd:before {
        content: "\e745";
    }

    .e-None:before {
        content: "\e726";
    }

    .e-SequentialMI:before {
        content: "\e71d";
    }

    .e-ParallelMI:before {
        content: "\e70a";
    }

    .e-Loop:before {
        content: "\e70e";
    }

    .e-Compensation:before {
        content: "\e722";
    }

    .e-SubProcess:before {
        content: "\e700";
    }

    .e-Task:before {
        content: "\e71b";
    }

    .e-Call:before {
        content: "\e70b";
    }

    .e-adhoc:before {
        content: "\e709";
    }

    .e-Default:before {
        content: "\e71b";
    }

    .e-Event:before {
        content: "\e708";
    }

    .e-CallActivity:before {
        content: "\e701";
    }

    .e-ExclusiveEventBased:before {
        content: "\e71c";
    }

    .e-Noninterruptingstart:before {
        content: "\e72b";
    }

    .e-NoninterruptingIntermediate:before {
        content: "\e72a";
    }

    .e-InstantiatingReceive:before {
        content: "\e72c";
    }

    .sb-bpmn-editor {
        border-color: rgba(0, 0, 0, 0.12);
        border-width: 1px 1px 1px 0px;
        border-style: solid;
    }

    @media (max-width: 550px) {
        .sb-bpmn-editor {
            border-width: 0px 1px 1px;
        }
    }
</style>

<div class="control-section">
    <div class="sb-mobile-palette-bar">
        <div id="palette-icon" style="float: right;" role="button" class="e-ddb-icons1 e-toggle-palette"></div>
    </div>
    <div id="palette-space" class="sb-mobile-palette">
        <ejs-symbolpalette #symbolpalette id="symbolpalette" [expandMode]="expandMode" [palettes]="palette" width="400" height="471px" [symbolHeight]=60 [symbolWidth]=60 [symbolMargin]="symbolMargin" [getNodeDefaults]='getSymbolDefaults'>
        </ejs-symbolpalette>
    </div>
    <div id="diagram-space" class="sb-mobile-diagram sb-bpmn-editor">
        <ejs-diagram #diagram id="diagram" width="100%" height="445px" [nodes]="nodes" [connectors]="connectors" [snapSettings]="snapSettings" (created)="diagramCreate($event)" (dragEnter)="dragEnter($event)" [contextMenuSettings]="contextMenu" (contextMenuOpen)="contextMenuOpen($event)"
            (contextMenuClick)="contextMenuClick($event)">
        </ejs-diagram>
    </div>
</div>

```
