- Common values to the node.
- Appearance
- Gradient
- Linear gradient
- Radial gradient
- Customize the style of node selector
- Apply rotate angle and corner radius to the node
- Apply shadow effect to node
- Provide additional information to the node
- Constraints
- Stack order
- Pivot
- Get connected connector from node
Contact Support
Appearence of a nodes in React Diagram control
28 Mar 202524 minutes to read
To customize the appearance and position of nodes in the React Diagram component, refer to the video link below.
Common values to the node.
The getNodeDefaults
property in the EJ2 Diagram control allows you to define default settings for nodes based on specific conditions or requirements.
The following code example shows how to use getNodeDefaults function.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent } from '@syncfusion/ej2-react-diagrams';
let diagramInstance;
// A node is created and stored in nodes array.
let node = [
{
id: 'node1',
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
zIndex: 2,
annotations: [{ content: 'Node1' }],
style: { fill: 'white', strokeColor: 'black' },
},
{
id: 'node2',
// Position of the node
offsetX: 270,
offsetY: 270,
// Size of the node
width: 100,
height: 100,
zIndex: 1,
annotations: [{ content: 'Node2' }],
style: { fill: 'white', strokeColor: 'black' },
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
nodes={node}
width={'100%'}
height={'600px'}
getNodeDefaults={(obj) => {
obj.style = { fill: 'yellow', strokeColor: 'green', strokeWidth: 3 };
}}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent, NodeModel } from '@syncfusion/ej2-react-diagrams';
let diagramInstance: DiagramComponent;
// A node is created and stored in nodes array.
let node: NodeModel[] = [
{
id: 'node1',
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
zIndex: 2,
annotations: [{ content: 'Node1' }],
style: { fill: 'white', strokeColor: 'black' },
},
{
id: 'node2',
// Position of the node
offsetX: 270,
offsetY: 270,
// Size of the node
width: 100,
height: 100,
zIndex: 1,
annotations: [{ content: 'Node2' }],
style: { fill: 'white', strokeColor: 'black' },
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
nodes={node}
width={'100%'}
height={'600px'}
getNodeDefaults={(obj: NodeModel) => {
obj.style = { fill: 'yellow', strokeColor: 'green', strokeWidth: 3 };
}}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
NOTE
The value we set in the getNodeDefaults has the higher priority in rendering.
Appearance
Apply style to the node
The appearance of a node can be customized by changing its fill
color, strokeDashArray
, ‘strokeWidth’, ‘strokeColor’ and opacity
. The visible
property of the node enables or disables the visibility of the node.
The following code illustrates how to customize the appearance of the shape.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent } from '@syncfusion/ej2-react-diagrams';
let diagramInstance;
// A node is created and stored in nodes array.
let node = [
{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
visible: true,
style: {
fill: '#6AA8D7',
strokeColor: 'white',
strokeWidth: 5,
strokeDashArray: '3',
opacity: 0.7,
},
// Text(label) added to the node
},
{
// Position of the node
offsetX: 450,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
visible: false,
style: {
fill: '#6AA8D7',
strokeColor: 'white',
strokeWidth: 5,
strokeDashArray: '3',
opacity: 0.7,
},
// Text(label) added to the node
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
nodes={node}
width={'100%'}
height={'600px'}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent, NodeModel } from '@syncfusion/ej2-react-diagrams';
let diagramInstance: DiagramComponent;
// A node is created and stored in nodes array.
let node: NodeModel[] = [
{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
visible: true,
style: {
fill: '#6AA8D7',
strokeColor: 'white',
strokeWidth: 5,
strokeDashArray: '3',
opacity: 0.7,
},
// Text(label) added to the node
},
{
// Position of the node
offsetX: 450,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
visible: false,
style: {
fill: '#6AA8D7',
strokeColor: 'white',
strokeWidth: 5,
strokeDashArray: '3',
opacity: 0.7,
},
// Text(label) added to the node
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
nodes={node}
width={'100%'}
height={'600px'}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Gradient
The gradient
property of the node allows you to define and apply the gradient effect to that node.
The gradient stop property defines the color and a position, where the previous color transition ends and a new color transition starts.
The gradient stop’s opacity property defines the transparency level of the region.
There are two types of gradients as follows:
-
Linear gradient
-
Radial gradient
Linear gradient
-
LinearGradient
defines a smooth transition between a set of colors (so-called stops) on a line. -
A linear gradient’s x1, y1, x2, y2 properties are used to define the position (relative to the node) of the rectangular region that needs to be painted.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { DiagramComponent } from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let linearGradient;
linearGradient = {
//Start point of linear gradient
x1: 0,
y1: 0,
//End point of linear gradient
x2: 50,
y2: 50,
//Sets an array of stop objects
stops: [{
color: 'white',
offset: 0
},
{
color: '#6BA5D7',
offset: 100
}
],
type: 'Linear'
};
let node = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
gradient: linearGradient
}
// Text(label) added to the node
}];
// initialize Diagram component
function App() {
return (<DiagramComponent id="container" width={'100%'} height={'600px'} nodes={node}/>);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
DiagramComponent,
NodeModel,
GradientModel,
LinearGradientModel,
RadialGradientModel,
} from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let linearGradient: GradientModel | LinearGradientModel | RadialGradientModel;
linearGradient = {
//Start point of linear gradient
x1: 0,
y1: 0,
//End point of linear gradient
x2: 50,
y2: 50,
//Sets an array of stop objects
stops: [{
color: 'white',
offset: 0
},
{
color: '#6BA5D7',
offset: 100
}
],
type: 'Linear'
};
let node: NodeModel[] = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
gradient: linearGradient
}
// Text(label) added to the node
}];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Radial gradient
-
RadialGradient
defines a smooth transition between stops on a circle. -
A radial gradient’s cx, cy, fx, fy properties are used to define the position (relative to the node) of the outermost or the innermost circle of the radial gradient.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { DiagramComponent } from "@syncfusion/ej2-react-diagrams";
let radialGradient;
radialGradient = {
//Center point of outer circle
cx: 50,
cy: 50,
//Center point of inner circle
fx: 25,
fy: 25,
//Radius of a radial gradient
r: 50,
//Sets an array of stop objects
stops: [{
color: 'white',
offset: 0
},
{
color: '#6BA5D7',
offset: 100
}
],
type: 'Radial'
};
let node = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
gradient: radialGradient
}
// Text(label) added to the node
}];
// initialize Diagram component
function App() {
return (<DiagramComponent id="container" width={'100%'} height={'600px'} nodes={node}/>);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
DiagramComponent,
NodeModel,
GradientModel,
LinearGradientModel,
RadialGradientModel,
} from "@syncfusion/ej2-react-diagrams";
let radialGradient: GradientModel | LinearGradientModel | RadialGradientModel;
radialGradient = {
//Center point of outer circle
cx: 50,
cy: 50,
//Center point of inner circle
fx: 25,
fy: 25,
//Radius of a radial gradient
r: 50,
//Sets an array of stop objects
stops: [{
color: 'white',
offset: 0
},
{
color: '#6BA5D7',
offset: 100
}
],
type: 'Radial'
};
let node: NodeModel[] = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
gradient: radialGradient
}
// Text(label) added to the node
}];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Customize the style of node selector
Customize the style of main node selector indicator
In diagram, multiple nodes can be selected.
While selecting multiple nodes, a highlighter will be rendered to indicate the selection of each nodes.
The border style of the first node in the multiple selection can be customized by using the className [e-diagram-first-selection-indicator
].
Use the following CSS to customize the style of main node on multiple selection.
.e-diagram-first-selection-indicator{
stroke-width: 5px;
stroke: red;
stroke-dasharray: 1,1;
}
Apply rotate angle and corner radius to the node
-
Rotate angle
: TherotateAngle
property allows you to rotate nodes within the diagram. It’s particularly useful when you want to represent nodes from different perspectives or angles. -
Corner radius
: ThecornerRadius
property allows you to round the corners of nodes in the diagram.
It adds a visual styling effect to the nodes, making them appear softer or more polished.
The following code shows how to set the rotate angle and corner radius for the node.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent } from '@syncfusion/ej2-react-diagrams';
let diagramInstance;
// A node is created and stored in nodes array.
let node = [
{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
visible: true,
//Sets the rotation angle of the node
rotateAngle: 45,
//Sets the corner radius of the node
shape: { cornerRadius: 15 },
// Text(label) added to the node
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
nodes={node}
width={'100%'}
height={'600px'}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent, NodeModel } from '@syncfusion/ej2-react-diagrams';
let diagramInstance: DiagramComponent;
// A node is created and stored in nodes array.
let node: NodeModel[] = [
{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
visible: true,
//Sets the rotation angle of the node
rotateAngle: 45,
//Sets the corner radius of the node
shape: { cornerRadius: 15 },
// Text(label) added to the node
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
nodes={node}
width={'100%'}
height={'600px'}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Apply shadow effect to node
Diagram provides support to add shadow
effect to a node that is disabled, by default. It can be enabled with the
constraints property of the node. The following code illustrates how to drop shadow.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { DiagramComponent, NodeConstraints } from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let node = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
fill: '#6BA5D7',
strokeColor: 'white'
},
constraints: NodeConstraints.Default | NodeConstraints.Shadow,
// Text(label) added to the node
}];
// initialize Diagram component
function App() {
return (<DiagramComponent id="container" width={'100%'} height={'600px'} nodes={node}/>);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
Diagram,
DiagramComponent,
NodeModel,
NodeConstraints
} from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let node: NodeModel[] = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
fill: '#6BA5D7',
strokeColor: 'white'
},
constraints: NodeConstraints.Default | NodeConstraints.Shadow,
// Text(label) added to the node
}];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Customizing shadow effect of the node
The angle, distance, and opacity of the shadow can be customized with the shadow property of the node. The following code example illustrates how to customize shadow.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
DiagramComponent,
NodeConstraints,
} from '@syncfusion/ej2-react-diagrams';
// A node is created and stored in nodes array.
let node = [
{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
fill: '#6BA5D7',
strokeColor: 'white',
},
constraints: NodeConstraints.Default | NodeConstraints.Shadow,
//shadow added to the node
shadow: { color: 'skyblue', angle: 90, distance: 10, opacity: 0.8 },
// Text(label) added to the node
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
DiagramComponent,
NodeConstraints,
NodeModel
} from '@syncfusion/ej2-react-diagrams';
// A node is created and stored in nodes array.
let node: NodeModel[] = [
{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
style: {
fill: '#6BA5D7',
strokeColor: 'white',
},
constraints: NodeConstraints.Default | NodeConstraints.Shadow,
//shadow added to the node
shadow: { color: 'skyblue', angle: 90, distance: 10, opacity: 0.8 },
// Text(label) added to the node
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Provide additional information to the node
The addInfo
property of the node allows you to maintain additional information to the node. You can specify either object or string value.
The following code shows how to set the AddInfo value.
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
Diagram,
DiagramComponent,
NodeModel,
} from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let addInfo: any = { type: 'Node', info: 'Rectangle Node' };
let node: NodeModel[] = [{
// Position of the node
offsetX: 250,
offsetY: 250,
//Additional informations about the node.
addInfo: addInfo,
// Size of the node
width: 100,
height: 100,
}];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
// Add node
nodes={node}
// render initialized Diagram
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Constraints
The constraints
property of the node allows you to enable/disable certain behaviors of the node. For more information about node constraints refer to the Node Constraints
Stack order
The nodes zIndex
property specifies the stack order of the node. A node with greater stack order is always in front of a node with a lower stack order.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent } from '@syncfusion/ej2-react-diagrams';
// A node is created and stored in nodes array.
let node = [
{
id: 'node1',
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
zIndex: 2,
annotations: [{ content: 'Node1' }],
},
{
id: 'node2',
// Position of the node
offsetX: 270,
offsetY: 270,
// Size of the node
width: 100,
height: 100,
zIndex: 1,
annotations: [{ content: 'Node2' }],
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DiagramComponent, NodeModel } from '@syncfusion/ej2-react-diagrams';
// A node is created and stored in nodes array.
let node: NodeModel[] = [
{
id: 'node1',
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
zIndex: 2,
annotations: [{ content: 'Node1' }],
},
{
id: 'node2',
// Position of the node
offsetX: 270,
offsetY: 270,
// Size of the node
width: 100,
height: 100,
zIndex: 1,
annotations: [{ content: 'Node2' }],
},
];
// initialize Diagram component
function App() {
return (
<DiagramComponent
id="container"
width={'100%'}
height={'600px'}
nodes={node}
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
NOTE
By default, the zIndex will be generated automatically based on the order of the diagram elements added to the diagram. The default value will be Number.MIN_VALUE.
Pivot
Node rotation angle will be based on Pivot
values which range from 0 to 1 like offset values. By default, the Pivot values are set to X= 0.5 and Y=0.5.
The following table illustrates how pivot relates offset values with node boundaries.
Pivot | Offset |
---|---|
(0.5,0.5) | offsetX and offsetY values are considered as the node’s center point. |
(0,0) | offsetX and offsetY values are considered as the top-left corner of the node. |
(1,1) | offsetX and offsetY values are considered as the bottom-right corner of the node. |
The following code illustrates how to change the pivot
value.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { DiagramComponent } from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let node = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
pivot: {
x: 0,
y: 0
},
style: {
fill: '#6BA5D7',
strokeColor: 'white'
}
// Text(label) added to the node
}];
let diagramInstance;
function App() {
return (<DiagramComponent id="container" ref={(diagram) => (diagramInstance = diagram)} width={'100%'} height={'600px'} nodes={node} created={() => {
diagramInstance.select([diagramInstance.nodes[0]]);
}}/>);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
Diagram,
DiagramComponent,
NodeModel
} from "@syncfusion/ej2-react-diagrams";
// A node is created and stored in nodes array.
let node: NodeModel[] = [{
// Position of the node
offsetX: 250,
offsetY: 250,
// Size of the node
width: 100,
height: 100,
pivot: {
x: 0,
y: 0
},
style: {
fill: '#6BA5D7',
strokeColor: 'white'
}
// Text(label) added to the node
}];
let diagramInstance: DiagramComponent;
function App() {
return (
<DiagramComponent
id="container"
ref={(diagram) => (diagramInstance = diagram)}
width={'100%'}
height={'600px'}
nodes={node}
created={() => {
diagramInstance.select([diagramInstance.nodes[0]]);
}}
// render initialized Diagram
/>
);
}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);
Get connected connector from node
Node has the InEdges and OutEdges read-only property. In this property, you can find what are all the connectors that are connected to the node, and then you can fetch these connectors by using the getObject
method in the diagram.
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
Diagram,
DiagramComponent,
NodeModel,
ConnectorModel,
} from "@syncfusion/ej2-react-diagrams";
let nodes: NodeModel[] = [{
id: 'Start',
width: 140,
height: 50,
offsetX: 100,
offsetY: 100,
annotations: [{
id: 'label1',
content: 'Start'
}],
shape: {
type: 'Flow',
shape: 'Terminator'
}
},
{
id: 'Init',
width: 140,
height: 50,
offsetX: 300,
offsetY: 300,
shape: {
type: 'Flow',
shape: 'Process'
},
annotations: [{
content: 'var i = 0;'
}]
}
];
let connectors: ConnectorModel[] = [{
// Name of the connector
id: "connector1",
style: {
strokeColor: '#6BA5D7',
fill: '#6BA5D7',
strokeWidth: 2
},
targetDecorator: {
style: {
fill: '#6BA5D7',
strokeColor: '#6BA5D7'
}
},
// ID of the source and target nodes
sourceID: "Start",
targetID: "Init",
connectorSpacing: 7,
type: 'Orthogonal'
}];
function App() {
return (
<DiagramComponent id="container"
ref={(diagram) => (diagramInstance = diagram)}
width = {
'100%'
}
height = {
'600px'
}
nodes = {
nodes
}
connectors = {
connectors
}
/>
diagramInstance.getObject(diagramInstance.nodes[0].outEdges[0]);
)}
const root = ReactDOM.createRoot(document.getElementById('diagram'));
root.render(<App />);