Syncfusion React Diagram
The Syncfusion React Diagram component enables building rich, interactive diagrams including flowcharts, organizational charts, BPMN process flows, UML diagrams, mind maps, and network diagrams. It renders using SVG and supports extensive customization through nodes, connectors, ports, annotations, layouts, and data binding.
Table of Contents
When to Use This Skill
Use this skill when users need to:
- Build flowcharts representing processes, decision trees, or workflows
- Create org charts from hierarchical or flat data sources
- Model BPMN diagrams with activities, events, gateways, and flows
- Draw UML diagrams including class diagrams and sequence diagrams
- Visualize mind maps or radial layouts from data
- Design network/entity diagrams with nodes and relationship connectors
- Implement swimlane diagrams with lanes and phases
- Drag and drop shapes from a symbol palette onto a canvas
- Bind data to automatically generate diagram structure
- Serialize and restore diagram state as JSON
- Export or print diagram content as image/SVG
Important: API Verification Required
API Verification Required: Always verify API class names, properties, and signatures by reading reference files (references/*.md) BEFORE generating code examples. Do not assume or infer class names.
Component Overview
The Diagram component is built around:
- Nodes — Graphical shapes (rectangles, circles, flow shapes, custom) placed on the canvas
- Connectors — Lines/arrows linking nodes or freestanding points
- Annotations — Text labels attached to nodes or connectors
- Ports — Named connection points on nodes for precise connector anchoring
- Layouts — Automatic arrangement algorithms (hierarchical, org-chart, mindmap, radial, flowchart)
- Symbol Palette — Sidebar of draggable shape symbols
- Module System — Opt-in feature modules (
Inject directive) to keep bundle size lean
All diagram elements are rendered using SVG for crisp, resolution-independent graphics.
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
When to read:
- First-time setup of the Diagram component
- Installing packages, CSS imports, and theme configuration
- Creating a minimal
DiagramComponent
- Understanding the
Inject module system
- Next.js or Preact integration
Covers:
- npm install and dependencies
- Vite/CRA project setup
- CSS theme import paths
- Basic
DiagramComponent with nodes and connectors
- Module injection with
<Inject services={[...]} />
- Next.js and Preact usage notes
Nodes
📄 Read: references/nodes.md
When to read:
- Adding, positioning, and sizing nodes
- Customizing node appearance (fill, stroke, shadow)
- Working with node shapes (Flow, Basic, Path, Image, HTML)
- Handling node events (click, drag, resize)
- Expanding/collapsing nodes at runtime
- Setting default node properties via
getNodeDefaults
Covers:
- Creating nodes via
nodes collection
offsetX/offsetY, width/height positioning
- Adding/removing nodes at runtime (
diagram.add, diagram.remove)
- Style properties (fill, strokeColor, opacity, gradient)
getNodeDefaults pattern for consistent styling
- Node expand/collapse with
expandIcon/collapseIcon
- Node interaction events
Connectors
📄 Read: references/connectors.md
When to read:
- Drawing lines/arrows between nodes or freestanding points
- Choosing connector type (Straight, Orthogonal, Bezier)
- Configuring connector segments and routing
- Customizing decorator (arrow) shapes
- Setting
sourceID/targetID to link nodes
- Setting
getConnectorDefaults for consistent styling
Covers:
- Connector types:
Straight, Orthogonal, Bezier
sourcePoint/targetPoint for freestanding connectors
sourceID/targetID for node-to-node connections
- Multiple segment configuration
- Bezier control points and segment edit orientation
- Arrow/decorator customization
- Connector events and interaction
getConnectorDefaults pattern
Labels and Annotations
📄 Read: references/labels-and-annotations.md
When to read:
- Adding text labels to nodes or connectors
- Styling annotation text (font, color, bold, alignment)
- Making labels draggable or editable
- Positioning labels relative to nodes/connectors
- Handling label-specific events
Covers:
annotations array on nodes and connectors
- Label
content, style, offset, alignment
- Node labels vs. connector labels
- Label interaction (edit on double-click, drag)
- Label appearance (background, border, padding)
- Label events
Ports
📄 Read: references/ports.md
When to read:
- Creating named connection points on nodes
- Controlling where connectors attach to a node
- Styling and positioning ports
- Restricting connector connections to specific ports
- Handling port interaction events
Covers:
- Port types and
ports array on nodes
- Port positioning (
offset, alignment)
- Port appearance (shape, fill, stroke)
- Connecting connectors to specific ports via
sourcePortID/targetPortID
- Port interaction and visibility options
- Port events
Shapes and Styles
📄 Read: references/shapes-and-styles.md
When to read:
- Choosing the right shape type (Flow, Basic, Path, Image, HTML, Native SVG)
- Applying fill colors, gradients, and stroke styles
- Customizing node appearance with CSS or themes
- Understanding shape property structure
Covers:
shape.type options: Flow, Basic, Path, Image, HTML, Native
- Flowchart shape values (Terminator, Process, Decision, etc.)
- Basic shape values (Rectangle, Ellipse, Diamond, etc.)
- Style properties:
fill, strokeColor, strokeWidth, strokeDashArray, opacity
- Linear and radial gradients
- Shadow effect
- CSS class-based styling
BPMN Diagrams
📄 Read: references/bpmn-diagrams.md
When to read:
- Modeling business process flows using BPMN notation
- Using BPMN-specific shapes (activities, events, gateways)
- Drawing sequence flows, message flows, associations
- Adding data objects, data sources, text annotations, and groups
Covers:
BpmnDiagrams module injection
- BPMN shape type:
shape.type = 'Bpmn'
- Activities: Task types, Subprocess, Expanded Subprocess
- Events: Start, End, Intermediate events and their triggers
- Gateways: Exclusive, Parallel, Inclusive, Complex
- Flows: Sequence, Message, Association
- Data objects and data sources
- BPMN groups and text annotations
UML Diagrams
📄 Read: references/uml-diagrams.md
When to read:
- Building UML class diagrams with attributes and methods
- Modeling relationships (association, generalization, dependency)
- Creating UML sequence diagrams with lifelines and messages
- Working with classifiers (class, interface, enumeration, collaboration)
Covers:
- UML class diagram shapes (
shape.type = 'UmlClassifier')
- Classifier types: Class, Interface, Enumeration, Collaboration
- Attributes, operations, and members syntax
- UML relationship connector types
- UML sequence diagram (
shape.type = 'UmlActivity')
- Lifelines, messages, and fragments
ER Diagrams
📄 Read: references/entity-relationship-diagrams.md
When to read:
- Building Entity Relationship diagrams to visualize database structure
- Creating ER entity nodes representing database tables with fields
- Defining field properties (primary key, foreign key, data type, constraints)
- Adding or removing entity fields at runtime
- Connecting entities with ER relationship connectors and multiplicity
- Styling ER entity headers, field rows, and alternating row colors
- Tracking entity field changes via events
Covers:
ErDiagrams module injection (Diagram.Inject(ErDiagrams))
- ER entity node:
shape.type = 'Er' with ErShapeModel
- Header configuration:
annotation, height, style
- Field configuration:
id, name, dataType, isPrimaryKey, isForeignKey, constraints
addErField / removeErField runtime methods
fieldDefaults: alternateRowColors, height
- Field-level and node-level style overrides
erEntityChanged event for tracking field modifications
- ER relationship connectors with
ErConnectorShapeModel
- Crow's Foot multiplicity:
One, Many, ZeroOrOne, OneOrMany, ZeroOrMany, OneAndOnlyOne
Layouts
📄 Read: references/layouts.md
When to read:
- Automatically arranging nodes in a tree, hierarchy, or radial pattern
- Creating org charts driven by parent-child data
- Building mind maps from data sources
- Configuring flowchart layouts with decision/process shapes
- Customizing layout spacing, orientation, and alignment
Covers:
HierarchicalTree — top-down/left-right tree layouts
OrganizationalChart — classic org chart with getNodeDefaults/getConnectorDefaults
MindMap — branching mind map layout
RadialTree — circular radial layout
Flowchart layout (automatic flow arrangement)
ComplexHierarchicalTree for multi-parent hierarchies
layout property: type, orientation, margin, horizontalSpacing, verticalSpacing
LayoutAnimation module
- Layout events
Swimlanes
📄 Read: references/swimlanes.md
When to read:
- Creating multi-lane process diagrams
- Adding phases to represent timeline or stages
- Configuring swimlane headers and orientation
- Placing child nodes inside lanes
- Using swimlane shapes from the symbol palette
Covers:
- Swimlane
shape.type = 'SwimLane'
- Lanes and phases configuration
- Header text, size, and orientation
- Child nodes inside lanes
- Swimlane palette integration
- Swimlane interaction (add/remove lanes)
Groups and Containers
📄 Read: references/groups-and-containers.md
When to read:
- Grouping multiple nodes for collective movement/selection
- Adding/removing children from groups at runtime
- Using container nodes to visually bound child nodes
- Configuring padding, fit-to-children behavior
Covers:
- Group node
shape.type = 'Group' and children array
- Grouping/ungrouping nodes via diagram methods
- Adding children at runtime
- Container node configuration
- Padding and auto-fit behavior for containers
Symbol Palette
📄 Read: references/symbol-palette.md
When to read:
- Adding a drag-and-drop shape sidebar to your diagram app
- Defining custom symbol sets (palettes)
- Customizing palette icon size, search behavior, and accordion
- Handling
symbolDragEnter/symbolDrop events
Covers:
SymbolPaletteComponent setup alongside DiagramComponent
- Defining
palettes with symbol arrays
getSymbolInfo for display customization
- Palette accordion: expanding/collapsing groups
- Search functionality
- Symbol preview size configuration
- Palette events
Data Binding
📄 Read: references/data-binding.md
When to read:
- Generating diagrams automatically from JSON or remote data
- Mapping
id and parentId fields for hierarchy
- Using
DataManager for remote or filtered data
- Customizing node appearance based on data properties (
setNodeTemplate)
- Connecting to a PostgreSQL or external data source
Covers:
dataSourceSettings property
id, parentId field mapping
DataManager with local arrays or remote URLs
getNodeDefaults and setNodeTemplate for data-driven styling
- PostgreSQL data source integration
- Rendering org charts from flat JSON data
Interaction and Tools
📄 Read: references/interaction-and-tools.md
When to read:
- Enabling/disabling node and connector interactions (drag, resize, select)
- Switching diagram tool modes (pointer, draw, pan)
- Configuring diagram constraints
- Adding custom keyboard commands or toolbar actions
- Implementing undo/redo
- Setting up context menus or user handles
Covers:
DiagramConstraints, NodeConstraints, ConnectorConstraints
tool property: DiagramTools.Default, ZoomPan, DrawOnce
- Selection, drag, resize, rotate interactions
commands for keyboard shortcuts
- Undo/Redo (
UndoRedo module)
- Context menu (
DiagramContextMenu module)
- User handles for custom action buttons on nodes
Snapping module and snap settings
Serialization and Export
📄 Read: references/serialization-and-export.md
When to read:
- Saving and restoring diagram state as JSON
- Exporting the diagram as PNG, JPEG, or SVG
- Printing diagram content
- Importing Visio (.vsdx) files
- Migrating from EJ1 diagram format
Covers:
diagram.saveDiagram() and diagram.loadDiagram(json)
PrintAndExport module injection
- Export settings: format, region, margin, background
- Print dialog and options
- Visio file import (
visio.md)
- EJ1 serialization compatibility (
Ej1Serialization module)
Diagram Settings
📄 Read: references/diagram-settings.md
When to read:
- Managing diagram layers (visibility, locking, ordering)
- Enabling virtualization for performance with large diagrams
- Configuring grid lines, snapping, and rulers
- Setting page size, orientation, and margins
- Configuring scroll behavior and limits
- Adding tooltips to diagram elements
- Using the Overview component for minimap navigation
- Enabling localization or RTL support
- Understanding accessibility features
Covers:
- Layers: add, lock, set visibility, active layer
Virtualization module for large diagrams
- Grid lines: dots, lines, snap settings
- Ruler configuration
scrollSettings: scrollLimit, minZoom, maxZoom
pageSettings: size, orientation, background, multiplePage
- Tooltip on nodes and connectors
OverviewComponent minimap setup
- Localization and RTL
- ARIA and keyboard accessibility
Quick Start Example
Minimal Flowchart
import { DiagramComponent, NodeModel, ConnectorModel, Inject, UndoRedo } from '@syncfusion/ej2-react-diagrams';
const nodes: NodeModel[] = [
{ id: 'start', offsetX: 300, offsetY: 80, width: 140, height: 50,
shape: { type: 'Flow', shape: 'Terminator' }, annotations: [{ content: 'Start' }] },
{ id: 'process', offsetX: 300, offsetY: 180, width: 140, height: 50,
shape: { type: 'Flow', shape: 'Process' }, annotations: [{ content: 'Process' }] },
{ id: 'end', offsetX: 300, offsetY: 290, width: 140, height: 50,
shape: { type: 'Flow', shape: 'Terminator' }, annotations: [{ content: 'End' }] },
];
const connectors: ConnectorModel[] = [
{ id: 'c1', sourceID: 'start', targetID: 'process' },
{ id: 'c2', sourceID: 'process', targetID: 'end' },
];
export default function App() {
return (
<DiagramComponent id="diagram" width={'100%'} height={'500px'}
nodes={nodes} connectors={connectors}
getConnectorDefaults={(obj) => { obj.type = 'Orthogonal'; return obj; }}>
<Inject services={[UndoRedo]} />
</DiagramComponent>
);
}
CSS import: @import '@syncfusion/ej2-react-diagrams/styles/material.css'; and peer CSS for ej2-base, ej2-popups, ej2-splitbuttons, ej2-navigations.
Common Patterns
Pattern 1: Org Chart from Data Source
import { DiagramComponent, HierarchicalTree, DataBinding, Inject } from '@syncfusion/ej2-react-diagrams';
import { DataManager } from '@syncfusion/ej2-data';
const data = [
{ Name: 'CEO' },
{ Name: 'CTO', ReportingPerson: 'CEO' },
{ Name: 'Dev Lead', ReportingPerson: 'CTO' },
];
export default function App() {
return (
<DiagramComponent id="diagram" width={'100%'} height={'500px'}
dataSourceSettings={{ id: 'Name', parentId: 'ReportingPerson', dataManager: new DataManager(data) }}
layout={{ type: 'OrganizationalChart' }}
getNodeDefaults={(node) => { node.width = 120; node.height = 40; return node; }}
getConnectorDefaults={(obj) => { obj.type = 'Orthogonal'; return obj; }}>
<Inject services={[DataBinding, HierarchicalTree]} />
</DiagramComponent>
);
}
Pattern 2: Save and Load Diagram State
Use diagramInstance.saveDiagram() to serialize to JSON string; diagramInstance.loadDiagram(json) to restore. Inject UndoRedo for history support. For full examples see references/serialization-and-export.md.
Pattern 3: Diagram with Symbol Palette
Render SymbolPaletteComponent alongside DiagramComponent. Define palettes with shape arrays, set symbolHeight/symbolWidth, and users can drag shapes onto the canvas. For full examples see references/symbol-palette.md.
Module Injection Reference
Inject only the modules your diagram uses: <Inject services={[HierarchicalTree, DataBinding, UndoRedo]} />
| Module |
Purpose |
HierarchicalTree |
Tree and org chart layouts |
MindMap |
Mind map layout |
RadialTree |
Radial/circular layout |
ComplexHierarchicalTree |
Multi-parent hierarchies |
DataBinding |
Data source integration |
UndoRedo |
Undo/redo history |
Snapping |
Grid snapping |
PrintAndExport |
Export & print |
BpmnDiagrams |
BPMN shapes |
ErDiagrams |
ER diagram shapes and relationships |
LayoutAnimation |
Animated layouts |
DiagramContextMenu |
Right-click context menu |
ConnectorBridging |
Bridge overlapping connectors |
ConnectorEditing |
Edit connector segments |
Ej1Serialization |
Load EJ1 diagram JSON |
Key Props
| Prop |
Type |
Description |
nodes |
NodeModel[] |
Array of node definitions |
connectors |
ConnectorModel[] |
Array of connector definitions |
layout |
LayoutModel |
Automatic layout configuration |
dataSourceSettings |
DataSourceModel |
Data source for auto-generated diagrams |
getNodeDefaults |
(node) => NodeModel |
Default properties for all nodes |
getConnectorDefaults |
(obj) => ConnectorModel |
Default properties for all connectors |
setNodeTemplate |
(node) => DiagramElement |
Custom template rendering for nodes |
tool |
DiagramTools |
Active interaction tool mode |
snapSettings |
SnapSettingsModel |
Grid and snap configuration |
scrollSettings |
ScrollSettingsModel |
Scroll limits and zoom bounds |
pageSettings |
PageSettingsModel |
Page size, orientation, background |
constraints |
DiagramConstraints |
Enable/disable diagram-level interactions |
width |
string |
Diagram canvas width (e.g., '100%') |
height |
string |
Diagram canvas height (e.g., '600px') |
Related Components
- Chart - Data-driven charts and graphs
- Kanban - Kanban board visualization
- Data Grid - Tabular data display
1---2name: syncfusion-react-diagram3description: Create and customize visual diagrams in React using Syncfusion Diagrams. Trigger for requests involving React component setup, nodes and connectors, flowcharts, org charts, process diagrams, BPMN or UML models, ER diagrams, layout algorithms, swimlanes, symbol palettes, and interactive diagram visualization features.4---5
6# Syncfusion React Diagram
7
8The Syncfusion React Diagram component enables building rich, interactive diagrams including flowcharts, organizational charts, BPMN process flows, UML diagrams, mind maps, and network diagrams. It renders using SVG and supports extensive customization through nodes, connectors, ports, annotations, layouts, and data binding.
9
10## Table of Contents
11- [When to Use This Skill](#when-to-use-this-skill)
12- [Component Overview](#component-overview)
13- [Documentation and Navigation Guide](#documentation-and-navigation-guide)
14 - [Getting Started](#getting-started)
15 - [Nodes](#nodes)
16 - [Connectors](#connectors)
17 - [Labels and Annotations](#labels-and-annotations)
18 - [Ports](#ports)
19 - [Shapes and Styles](#shapes-and-styles)
20 - [BPMN Diagrams](#bpmn-diagrams)
21 - [UML Diagrams](#uml-diagrams)
22 - [ER Diagrams](#er-diagrams)
23 - [Layouts](#layouts)
24 - [Swimlanes](#swimlanes)
25 - [Groups and Containers](#groups-and-containers)
26 - [Symbol Palette](#symbol-palette)
27 - [Data Binding](#data-binding)
28 - [Interaction and Tools](#interaction-and-tools)
29 - [Serialization and Export](#serialization-and-export)
30 - [Diagram Settings](#diagram-settings)
31- [Quick Start Example](#quick-start-example)
32- [Common Patterns](#common-patterns)
33- [Module Injection Reference](#module-injection-reference)
34- [Key Props](#key-props)
35
36## When to Use This Skill
37
38Use this skill when users need to:
39
40- **Build flowcharts** representing processes, decision trees, or workflows
41- **Create org charts** from hierarchical or flat data sources
42- **Model BPMN diagrams** with activities, events, gateways, and flows
43- **Draw UML diagrams** including class diagrams and sequence diagrams
44- **Visualize mind maps** or radial layouts from data
45- **Design network/entity diagrams** with nodes and relationship connectors
46- **Implement swimlane diagrams** with lanes and phases
47- **Drag and drop shapes** from a symbol palette onto a canvas
48- **Bind data** to automatically generate diagram structure
49- **Serialize and restore** diagram state as JSON
50- **Export or print** diagram content as image/SVG
51
52## Important: API Verification Required
53
54**API Verification Required**: Always verify API class names, properties, and signatures by reading reference files (`references/*.md`) BEFORE generating code examples. Do not assume or infer class names.
55
56## Component Overview
57
58The Diagram component is built around:
59
60- **Nodes** — Graphical shapes (rectangles, circles, flow shapes, custom) placed on the canvas
61- **Connectors** — Lines/arrows linking nodes or freestanding points
62- **Annotations** — Text labels attached to nodes or connectors
63- **Ports** — Named connection points on nodes for precise connector anchoring
64- **Layouts** — Automatic arrangement algorithms (hierarchical, org-chart, mindmap, radial, flowchart)
65- **Symbol Palette** — Sidebar of draggable shape symbols
66- **Module System** — Opt-in feature modules (`Inject` directive) to keep bundle size lean
67
68All diagram elements are rendered using **SVG** for crisp, resolution-independent graphics.
69
70## Documentation and Navigation Guide
71
72### Getting Started
73
74📄 **Read:** [references/getting-started.md](references/getting-started.md)
75
76**When to read:**
77- First-time setup of the Diagram component
78- Installing packages, CSS imports, and theme configuration
79- Creating a minimal `DiagramComponent`
80- Understanding the `Inject` module system
81- Next.js or Preact integration
82
83**Covers:**
84- npm install and dependencies
85- Vite/CRA project setup
86- CSS theme import paths
87- Basic `DiagramComponent` with `nodes` and `connectors`
88- Module injection with `<Inject services={[...]} />`
89- Next.js and Preact usage notes
90
91---
92
93### Nodes
94
95📄 **Read:** [references/nodes.md](references/nodes.md)
96
97**When to read:**
98- Adding, positioning, and sizing nodes
99- Customizing node appearance (fill, stroke, shadow)
100- Working with node shapes (Flow, Basic, Path, Image, HTML)
101- Handling node events (click, drag, resize)
102- Expanding/collapsing nodes at runtime
103- Setting default node properties via `getNodeDefaults`
104
105**Covers:**
106- Creating nodes via `nodes` collection
107- `offsetX`/`offsetY`, `width`/`height` positioning
108- Adding/removing nodes at runtime (`diagram.add`, `diagram.remove`)
109- Style properties (fill, strokeColor, opacity, gradient)
110- `getNodeDefaults` pattern for consistent styling
111- Node expand/collapse with `expandIcon`/`collapseIcon`
112- Node interaction events
113
114---
115
116### Connectors
117
118📄 **Read:** [references/connectors.md](references/connectors.md)
119
120**When to read:**
121- Drawing lines/arrows between nodes or freestanding points
122- Choosing connector type (Straight, Orthogonal, Bezier)
123- Configuring connector segments and routing
124- Customizing decorator (arrow) shapes
125- Setting `sourceID`/`targetID` to link nodes
126- Setting `getConnectorDefaults` for consistent styling
127
128**Covers:**
129- Connector types: `Straight`, `Orthogonal`, `Bezier`
130- `sourcePoint`/`targetPoint` for freestanding connectors
131- `sourceID`/`targetID` for node-to-node connections
132- Multiple segment configuration
133- Bezier control points and segment edit orientation
134- Arrow/decorator customization
135- Connector events and interaction
136- `getConnectorDefaults` pattern
137
138---
139
140### Labels and Annotations
141
142📄 **Read:** [references/labels-and-annotations.md](references/labels-and-annotations.md)
143
144**When to read:**
145- Adding text labels to nodes or connectors
146- Styling annotation text (font, color, bold, alignment)
147- Making labels draggable or editable
148- Positioning labels relative to nodes/connectors
149- Handling label-specific events
150
151**Covers:**
152- `annotations` array on nodes and connectors
153- Label `content`, `style`, `offset`, `alignment`
154- Node labels vs. connector labels
155- Label interaction (edit on double-click, drag)
156- Label appearance (background, border, padding)
157- Label events
158
159---
160
161### Ports
162
163📄 **Read:** [references/ports.md](references/ports.md)
164
165**When to read:**
166- Creating named connection points on nodes
167- Controlling where connectors attach to a node
168- Styling and positioning ports
169- Restricting connector connections to specific ports
170- Handling port interaction events
171
172**Covers:**
173- Port types and `ports` array on nodes
174- Port positioning (`offset`, `alignment`)
175- Port appearance (shape, fill, stroke)
176- Connecting connectors to specific ports via `sourcePortID`/`targetPortID`
177- Port interaction and visibility options
178- Port events
179
180---
181
182### Shapes and Styles
183
184📄 **Read:** [references/shapes-and-styles.md](references/shapes-and-styles.md)
185
186**When to read:**
187- Choosing the right shape type (Flow, Basic, Path, Image, HTML, Native SVG)
188- Applying fill colors, gradients, and stroke styles
189- Customizing node appearance with CSS or themes
190- Understanding shape property structure
191
192**Covers:**
193- `shape.type` options: `Flow`, `Basic`, `Path`, `Image`, `HTML`, `Native`
194- Flowchart shape values (Terminator, Process, Decision, etc.)
195- Basic shape values (Rectangle, Ellipse, Diamond, etc.)
196- Style properties: `fill`, `strokeColor`, `strokeWidth`, `strokeDashArray`, `opacity`
197- Linear and radial gradients
198- Shadow effect
199- CSS class-based styling
200
201---
202
203### BPMN Diagrams
204
205📄 **Read:** [references/bpmn-diagrams.md](references/bpmn-diagrams.md)
206
207**When to read:**
208- Modeling business process flows using BPMN notation
209- Using BPMN-specific shapes (activities, events, gateways)
210- Drawing sequence flows, message flows, associations
211- Adding data objects, data sources, text annotations, and groups
212
213**Covers:**
214- `BpmnDiagrams` module injection
215- BPMN shape type: `shape.type = 'Bpmn'`
216- Activities: Task types, Subprocess, Expanded Subprocess
217- Events: Start, End, Intermediate events and their triggers
218- Gateways: Exclusive, Parallel, Inclusive, Complex
219- Flows: Sequence, Message, Association
220- Data objects and data sources
221- BPMN groups and text annotations
222
223---
224
225### UML Diagrams
226
227📄 **Read:** [references/uml-diagrams.md](references/uml-diagrams.md)
228
229**When to read:**
230- Building UML class diagrams with attributes and methods
231- Modeling relationships (association, generalization, dependency)
232- Creating UML sequence diagrams with lifelines and messages
233- Working with classifiers (class, interface, enumeration, collaboration)
234
235**Covers:**
236- UML class diagram shapes (`shape.type = 'UmlClassifier'`)
237- Classifier types: Class, Interface, Enumeration, Collaboration
238- Attributes, operations, and members syntax
239- UML relationship connector types
240- UML sequence diagram (`shape.type = 'UmlActivity'`)
241- Lifelines, messages, and fragments
242
243---
244
245### ER Diagrams
246
247📄 **Read:** [references/entity-relationship-diagrams.md](references/entity-relationship-diagrams.md)
248
249**When to read:**
250- Building Entity Relationship diagrams to visualize database structure
251- Creating ER entity nodes representing database tables with fields
252- Defining field properties (primary key, foreign key, data type, constraints)
253- Adding or removing entity fields at runtime
254- Connecting entities with ER relationship connectors and multiplicity
255- Styling ER entity headers, field rows, and alternating row colors
256- Tracking entity field changes via events
257
258**Covers:**
259- `ErDiagrams` module injection (`Diagram.Inject(ErDiagrams)`)
260- ER entity node: `shape.type = 'Er'` with `ErShapeModel`
261- Header configuration: `annotation`, `height`, `style`
262- Field configuration: `id`, `name`, `dataType`, `isPrimaryKey`, `isForeignKey`, `constraints`
263- `addErField` / `removeErField` runtime methods
264- `fieldDefaults`: `alternateRowColors`, `height`
265- Field-level and node-level style overrides
266- `erEntityChanged` event for tracking field modifications
267- ER relationship connectors with `ErConnectorShapeModel`
268- Crow's Foot multiplicity: `One`, `Many`, `ZeroOrOne`, `OneOrMany`, `ZeroOrMany`, `OneAndOnlyOne`
269
270---
271
272### Layouts
273
274📄 **Read:** [references/layouts.md](references/layouts.md)
275
276**When to read:**
277- Automatically arranging nodes in a tree, hierarchy, or radial pattern
278- Creating org charts driven by parent-child data
279- Building mind maps from data sources
280- Configuring flowchart layouts with decision/process shapes
281- Customizing layout spacing, orientation, and alignment
282
283**Covers:**
284- `HierarchicalTree` — top-down/left-right tree layouts
285- `OrganizationalChart` — classic org chart with `getNodeDefaults`/`getConnectorDefaults`
286- `MindMap` — branching mind map layout
287- `RadialTree` — circular radial layout
288- `Flowchart` layout (automatic flow arrangement)
289- `ComplexHierarchicalTree` for multi-parent hierarchies
290- `layout` property: `type`, `orientation`, `margin`, `horizontalSpacing`, `verticalSpacing`
291- `LayoutAnimation` module
292- Layout events
293
294---
295
296### Swimlanes
297
298📄 **Read:** [references/swimlanes.md](references/swimlanes.md)
299
300**When to read:**
301- Creating multi-lane process diagrams
302- Adding phases to represent timeline or stages
303- Configuring swimlane headers and orientation
304- Placing child nodes inside lanes
305- Using swimlane shapes from the symbol palette
306
307**Covers:**
308- Swimlane `shape.type = 'SwimLane'`
309- Lanes and phases configuration
310- Header text, size, and orientation
311- Child nodes inside lanes
312- Swimlane palette integration
313- Swimlane interaction (add/remove lanes)
314
315---
316
317### Groups and Containers
318
319📄 **Read:** [references/groups-and-containers.md](references/groups-and-containers.md)
320
321**When to read:**
322- Grouping multiple nodes for collective movement/selection
323- Adding/removing children from groups at runtime
324- Using container nodes to visually bound child nodes
325- Configuring padding, fit-to-children behavior
326
327**Covers:**
328- Group node `shape.type = 'Group'` and `children` array
329- Grouping/ungrouping nodes via diagram methods
330- Adding children at runtime
331- Container node configuration
332- Padding and auto-fit behavior for containers
333
334---
335
336### Symbol Palette
337
338📄 **Read:** [references/symbol-palette.md](references/symbol-palette.md)
339
340**When to read:**
341- Adding a drag-and-drop shape sidebar to your diagram app
342- Defining custom symbol sets (palettes)
343- Customizing palette icon size, search behavior, and accordion
344- Handling `symbolDragEnter`/`symbolDrop` events
345
346**Covers:**
347- `SymbolPaletteComponent` setup alongside `DiagramComponent`
348- Defining `palettes` with symbol arrays
349- `getSymbolInfo` for display customization
350- Palette accordion: expanding/collapsing groups
351- Search functionality
352- Symbol preview size configuration
353- Palette events
354
355---
356
357### Data Binding
358
359📄 **Read:** [references/data-binding.md](references/data-binding.md)
360
361**When to read:**
362- Generating diagrams automatically from JSON or remote data
363- Mapping `id` and `parentId` fields for hierarchy
364- Using `DataManager` for remote or filtered data
365- Customizing node appearance based on data properties (`setNodeTemplate`)
366- Connecting to a PostgreSQL or external data source
367
368**Covers:**
369- `dataSourceSettings` property
370- `id`, `parentId` field mapping
371- `DataManager` with local arrays or remote URLs
372- `getNodeDefaults` and `setNodeTemplate` for data-driven styling
373- PostgreSQL data source integration
374- Rendering org charts from flat JSON data
375
376---
377
378### Interaction and Tools
379
380📄 **Read:** [references/interaction-and-tools.md](references/interaction-and-tools.md)
381
382**When to read:**
383- Enabling/disabling node and connector interactions (drag, resize, select)
384- Switching diagram tool modes (pointer, draw, pan)
385- Configuring diagram constraints
386- Adding custom keyboard commands or toolbar actions
387- Implementing undo/redo
388- Setting up context menus or user handles
389
390**Covers:**
391- `DiagramConstraints`, `NodeConstraints`, `ConnectorConstraints`
392- `tool` property: `DiagramTools.Default`, `ZoomPan`, `DrawOnce`
393- Selection, drag, resize, rotate interactions
394- `commands` for keyboard shortcuts
395- Undo/Redo (`UndoRedo` module)
396- Context menu (`DiagramContextMenu` module)
397- User handles for custom action buttons on nodes
398- `Snapping` module and snap settings
399
400---
401
402### Serialization and Export
403
404📄 **Read:** [references/serialization-and-export.md](references/serialization-and-export.md)
405
406**When to read:**
407- Saving and restoring diagram state as JSON
408- Exporting the diagram as PNG, JPEG, or SVG
409- Printing diagram content
410- Importing Visio (.vsdx) files
411- Migrating from EJ1 diagram format
412
413**Covers:**
414- `diagram.saveDiagram()` and `diagram.loadDiagram(json)`
415- `PrintAndExport` module injection
416- Export settings: format, region, margin, background
417- Print dialog and options
418- Visio file import (`visio.md`)
419- EJ1 serialization compatibility (`Ej1Serialization` module)
420
421---
422
423### Diagram Settings
424
425📄 **Read:** [references/diagram-settings.md](references/diagram-settings.md)
426
427**When to read:**
428- Managing diagram layers (visibility, locking, ordering)
429- Enabling virtualization for performance with large diagrams
430- Configuring grid lines, snapping, and rulers
431- Setting page size, orientation, and margins
432- Configuring scroll behavior and limits
433- Adding tooltips to diagram elements
434- Using the Overview component for minimap navigation
435- Enabling localization or RTL support
436- Understanding accessibility features
437
438**Covers:**
439- Layers: add, lock, set visibility, active layer
440- `Virtualization` module for large diagrams
441- Grid lines: dots, lines, snap settings
442- Ruler configuration
443- `scrollSettings`: `scrollLimit`, `minZoom`, `maxZoom`
444- `pageSettings`: size, orientation, background, multiplePage
445- Tooltip on nodes and connectors
446- `OverviewComponent` minimap setup
447- Localization and RTL
448- ARIA and keyboard accessibility
449
450---
451
452## Quick Start Example
453
454### Minimal Flowchart
455
456```tsx
457import { DiagramComponent, NodeModel, ConnectorModel, Inject, UndoRedo } from '@syncfusion/ej2-react-diagrams';
458
459const nodes: NodeModel[] = [
460 { id: 'start', offsetX: 300, offsetY: 80, width: 140, height: 50,
461 shape: { type: 'Flow', shape: 'Terminator' }, annotations: [{ content: 'Start' }] },
462 { id: 'process', offsetX: 300, offsetY: 180, width: 140, height: 50,
463 shape: { type: 'Flow', shape: 'Process' }, annotations: [{ content: 'Process' }] },
464 { id: 'end', offsetX: 300, offsetY: 290, width: 140, height: 50,
465 shape: { type: 'Flow', shape: 'Terminator' }, annotations: [{ content: 'End' }] },
466];
467const connectors: ConnectorModel[] = [
468 { id: 'c1', sourceID: 'start', targetID: 'process' },
469 { id: 'c2', sourceID: 'process', targetID: 'end' },
470];
471
472export default function App() {
473 return (
474 <DiagramComponent id="diagram" width={'100%'} height={'500px'}
475 nodes={nodes} connectors={connectors}
476 getConnectorDefaults={(obj) => { obj.type = 'Orthogonal'; return obj; }}>
477 <Inject services={[UndoRedo]} />
478 </DiagramComponent>
479 );
480}
481```
482
483CSS import: `@import '@syncfusion/ej2-react-diagrams/styles/material.css';` and peer CSS for `ej2-base`, `ej2-popups`, `ej2-splitbuttons`, `ej2-navigations`.
484
485---
486
487## Common Patterns
488
489### Pattern 1: Org Chart from Data Source
490
491```tsx
492import { DiagramComponent, HierarchicalTree, DataBinding, Inject } from '@syncfusion/ej2-react-diagrams';
493import { DataManager } from '@syncfusion/ej2-data';
494
495const data = [
496 { Name: 'CEO' },
497 { Name: 'CTO', ReportingPerson: 'CEO' },
498 { Name: 'Dev Lead', ReportingPerson: 'CTO' },
499];
500
501export default function App() {
502 return (
503 <DiagramComponent id="diagram" width={'100%'} height={'500px'}
504 dataSourceSettings={{ id: 'Name', parentId: 'ReportingPerson', dataManager: new DataManager(data) }}
505 layout={{ type: 'OrganizationalChart' }}
506 getNodeDefaults={(node) => { node.width = 120; node.height = 40; return node; }}
507 getConnectorDefaults={(obj) => { obj.type = 'Orthogonal'; return obj; }}>
508 <Inject services={[DataBinding, HierarchicalTree]} />
509 </DiagramComponent>
510 );
511}
512```
513
514### Pattern 2: Save and Load Diagram State
515
516Use `diagramInstance.saveDiagram()` to serialize to JSON string; `diagramInstance.loadDiagram(json)` to restore. Inject `UndoRedo` for history support. For full examples see [references/serialization-and-export.md](references/serialization-and-export.md).
517
518### Pattern 3: Diagram with Symbol Palette
519
520Render `SymbolPaletteComponent` alongside `DiagramComponent`. Define palettes with shape arrays, set `symbolHeight`/`symbolWidth`, and users can drag shapes onto the canvas. For full examples see [references/symbol-palette.md](references/symbol-palette.md).
521
522---
523
524## Module Injection Reference
525
526Inject only the modules your diagram uses: `<Inject services={[HierarchicalTree, DataBinding, UndoRedo]} />`
527
528| Module | Purpose |
529|--------|---------|
530| `HierarchicalTree` | Tree and org chart layouts |
531| `MindMap` | Mind map layout |
532| `RadialTree` | Radial/circular layout |
533| `ComplexHierarchicalTree` | Multi-parent hierarchies |
534| `DataBinding` | Data source integration |
535| `UndoRedo` | Undo/redo history |
536| `Snapping` | Grid snapping |
537| `PrintAndExport` | Export & print |
538| `BpmnDiagrams` | BPMN shapes |
539| `ErDiagrams` | ER diagram shapes and relationships |
540| `LayoutAnimation` | Animated layouts |
541| `DiagramContextMenu` | Right-click context menu |
542| `ConnectorBridging` | Bridge overlapping connectors |
543| `ConnectorEditing` | Edit connector segments |
544| `Ej1Serialization` | Load EJ1 diagram JSON |
545
546---
547
548## Key Props
549
550| Prop | Type | Description |
551|------|------|-------------|
552| `nodes` | `NodeModel[]` | Array of node definitions |
553| `connectors` | `ConnectorModel[]` | Array of connector definitions |
554| `layout` | `LayoutModel` | Automatic layout configuration |
555| `dataSourceSettings` | `DataSourceModel` | Data source for auto-generated diagrams |
556| `getNodeDefaults` | `(node) => NodeModel` | Default properties for all nodes |
557| `getConnectorDefaults` | `(obj) => ConnectorModel` | Default properties for all connectors |
558| `setNodeTemplate` | `(node) => DiagramElement` | Custom template rendering for nodes |
559| `tool` | `DiagramTools` | Active interaction tool mode |
560| `snapSettings` | `SnapSettingsModel` | Grid and snap configuration |
561| `scrollSettings` | `ScrollSettingsModel` | Scroll limits and zoom bounds |
562| `pageSettings` | `PageSettingsModel` | Page size, orientation, background |
563| `constraints` | `DiagramConstraints` | Enable/disable diagram-level interactions |
564| `width` | `string` | Diagram canvas width (e.g., `'100%'`) |
565| `height` | `string` | Diagram canvas height (e.g., `'600px'`) |
566
567## Related Components
568
569- [Chart](../implementing-charts/) - Data-driven charts and graphs
570- [Kanban](../implementing-kanban/) - Kanban board visualization
571- [Data Grid](../../grids/implementing-data-grids/) - Tabular data display