Gathering detailed insights and metrics for react-digraph-temp
Gathering detailed insights and metrics for react-digraph-temp
Gathering detailed insights and metrics for react-digraph-temp
Gathering detailed insights and metrics for react-digraph-temp
npm install react-digraph-temp
Typescript
Module System
Min. Node Version
Node Version
NPM Version
JavaScript (97.5%)
SCSS (2.19%)
HTML (0.31%)
Total Downloads
0
Last Day
0
Last Week
0
Last Month
0
Last Year
0
MIT License
2,642 Stars
474 Commits
267 Forks
1,453 Watchers
25 Branches
45 Contributors
Updated on Jul 16, 2025
Latest Version
6.5.7
Package Id
react-digraph-temp@6.5.7
Unpacked Size
2.78 MB
Size
739.24 kB
File Count
15
NPM Version
6.9.0
Node Version
10.16.3
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
8
59
A React component which makes it easy to create a directed graph editor without implementing any of the SVG drawing or event handling logic.
Version 5.0.0 is a breaking change to some of the API interfaces. Many of the component attributes are the same, and the data format is the same, but there
have been some necessary changes to improve the API, make the component faster, and add new features. Many changes will be listed below in the deprecation notes section. If you notice a problem, please use the ^4.0.0 versions of the package and refer to the legacy documentation in the v4.x.x
git branch.
1npm install --save react-digraph
If you don't have the following peerDependenies, make sure to install them:
1npm install --save react react-dom
The default export is a component called 'GraphView'; it provides a multitude of hooks for various graph editing operations and a set of controls for zooming. Typically, it should be wrapped in a higher order component that supplies various callbacks (onCreateNode, onCreateEdge etc...).
All nodes and edges can have a type attribute set - nodes also support a subtype attribute. These can be passed to GraphView via the nodeTypes, nodeSubtypes, and edgeTypes props. GraphView will look up the corresponding SVG elements for the node's type/subtype and the edge's type and draw it accordingly.
It is often convenient to combine these types into a configuration object that can be referred to elsewhere in the application and used to associate events fired from nodes/edges in the graphView with other actions in the application. Here is an abbreviated example:
1import { 2 GraphView, // required 3 Edge, // optional 4 type IEdge, // optional 5 Node, // optional 6 type INode, // optional 7 type LayoutEngineType, // required to change the layoutEngineType, otherwise optional 8 BwdlTransformer, // optional, Example JSON transformer 9 GraphUtils // optional, useful utility functions 10} from 'react-digraph'; 11 12const GraphConfig = { 13 NodeTypes: { 14 empty: { // required to show empty nodes 15 typeText: "None", 16 shapeId: "#empty", // relates to the type property of a node 17 shape: ( 18 <symbol viewBox="0 0 100 100" id="empty" key="0"> 19 <circle cx="50" cy="50" r="45"></circle> 20 </symbol> 21 ) 22 }, 23 custom: { // required to show empty nodes 24 typeText: "Custom", 25 shapeId: "#custom", // relates to the type property of a node 26 shape: ( 27 <symbol viewBox="0 0 50 25" id="custom" key="0"> 28 <ellipse cx="50" cy="25" rx="50" ry="25"></ellipse> 29 </symbol> 30 ) 31 } 32 }, 33 NodeSubtypes: {}, 34 EdgeTypes: { 35 emptyEdge: { // required to show empty edges 36 shapeId: "#emptyEdge", 37 shape: ( 38 <symbol viewBox="0 0 50 50" id="emptyEdge" key="0"> 39 <circle cx="25" cy="25" r="8" fill="currentColor"> </circle> 40 </symbol> 41 ) 42 } 43 } 44} 45 46const NODE_KEY = "id" // Allows D3 to correctly update DOM 47 48class Graph extends Component { 49 50 constructor(props) { 51 super(props); 52 53 this.state = { 54 graph: sample, 55 selected: {} 56 } 57 } 58 59 /* Define custom graph editing methods here */ 60 61 render() { 62 const nodes = this.state.graph.nodes; 63 const edges = this.state.graph.edges; 64 const selected = this.state.selected; 65 66 const NodeTypes = GraphConfig.NodeTypes; 67 const NodeSubtypes = GraphConfig.NodeSubtypes; 68 const EdgeTypes = GraphConfig.EdgeTypes; 69 70 return ( 71 <div id='graph' style={styles.graph}> 72 73 <GraphView ref='GraphView' 74 nodeKey={NODE_KEY} 75 nodes={nodes} 76 edges={edges} 77 selected={selected} 78 nodeTypes={NodeTypes} 79 nodeSubtypes={NodeSubtypes} 80 edgeTypes={EdgeTypes} 81 onSelectNode={this.onSelectNode} 82 onCreateNode={this.onCreateNode} 83 onUpdateNode={this.onUpdateNode} 84 onDeleteNode={this.onDeleteNode} 85 onSelectEdge={this.onSelectEdge} 86 onCreateEdge={this.onCreateEdge} 87 onSwapEdge={this.onSwapEdge} 88 onDeleteEdge={this.onDeleteEdge}/> 89 </div> 90 ); 91 } 92 93}
A typical graph that would be stored in the Graph component's state looks something like this:
1{ 2 "nodes": [ 3 { 4 "id": 1, 5 "title": "Node A", 6 "x": 258.3976135253906, 7 "y": 331.9783248901367, 8 "type": "empty" 9 }, 10 { 11 "id": 2, 12 "title": "Node B", 13 "x": 593.9393920898438, 14 "y": 260.6060791015625, 15 "type": "empty" 16 }, 17 { 18 "id": 3, 19 "title": "Node C", 20 "x": 237.5757598876953, 21 "y": 61.81818389892578, 22 "type": "custom" 23 }, 24 { 25 "id": 4, 26 "title": "Node C", 27 "x": 600.5757598876953, 28 "y": 600.81818389892578, 29 "type": "custom" 30 } 31 ], 32 "edges": [ 33 { 34 "source": 1, 35 "target": 2, 36 "type": "emptyEdge" 37 }, 38 { 39 "source": 2, 40 "target": 4, 41 "type": "emptyEdge" 42 } 43 ] 44} 45
For a detailed example, check out src/examples/graph.js. To run the example:
1npm install 2npm run serve
A webpage will open in your default browser automatically.
All props are detailed below.
Prop | Type | Required | Notes |
---|---|---|---|
nodeKey | string | true | Key for D3 to update nodes(typ. UUID). |
nodes | array | true | Array of graph nodes. |
edges | array | true | Array of graph edges. |
selected | object | true | The currently selected graph entity. |
nodeTypes | object | true | Config object of available node types. |
nodeSubtypes | object | true | Config object of available node subtypes. |
edgeTypes | object | true | Config object of available edge types. |
onSelectNode | func | true | Called when a node is selected. |
onCreateNode | func | true | Called when a node is created. |
onUpdateNode | func | true | Called when a node is moved. |
onDeleteNode | func | true | Called when a node is deleted. |
onSelectEdge | func | true | Called when an edge is selected. |
onCreateEdge | func | true | Called when an edge is created. |
onSwapEdge | func | true | Called when an edge 'target' is swapped. |
onDeleteEdge | func | true | Called when an edge is deleted. |
onBackgroundClick | func | false | Called when the background is clicked. |
onOverrideableClick | func | false | Called when a node is clicked and returns true if the event should be overridden |
canDeleteNode | func | false | Called before a node is deleted. |
canCreateEdge | func | false | Called before an edge is created. |
canDeleteEdge | func | false | Called before an edge is deleted. |
afterRenderEdge | func | false | Called after an edge is rendered. |
renderNode | func | false | Called to render node geometry. |
renderNodeText | func | false | Called to render the node text |
renderDefs | func | false | Called to render svg definitions. |
renderBackground | func | false | Called to render svg background. |
readOnly | bool | false | Disables all graph editing interactions. |
maxTitleChars | number | false | Truncates node title characters. |
gridSize | number | false | Overall grid size. |
gridSpacing | number | false | Grid spacing. |
gridDotSize | number | false | Grid dot size. |
minZoom | number | false | Minimum zoom percentage. |
maxZoom | number | false | Maximum zoom percentage. |
nodeSize | number | false | Node bbox size. |
nodeHeight | number | false | Node bbox height. Takes precedence over nodeSize |
nodeWidth | number | false | Node bbox width. Takes precedence over nodeSize |
edgeHandleSize | number | false | Edge handle size. |
edgeArrowSize | number | false | Edge arrow size. |
zoomDelay | number | false | Delay before zoom occurs. |
zoomDur | number | false | Duration of zoom transition. |
showGraphControls | boolean | false | Whether to show zoom controls. |
layoutEngineType | typeof LayoutEngineType | false | Uses a pre-programmed layout engine, such as 'SnapToGrid' |
rotateEdgeHandle | boolean | false | Whether to rotate edge handle with edge when a node is moved |
centerNodeOnMove | boolean | false | Whether the node should be centered on cursor when moving a node |
initialBBox | typeof IBBox | false | If specified, initial render graph using the given bounding box |
You have access to d3 mouse event in onCreateNode
function.
1 onCreateNode = (x, y, mouseEvent) => { 2 // we can get the exact mouse position when click happens with this line 3 const {pageX, pageY} = mouseEvent; 4 // rest of the code for adding a new node ... 5 };
Prop Types:
nodes: any[];
edges: any[];
minZoom?: number;
maxZoom?: number;
readOnly?: boolean;
maxTitleChars?: number;
nodeSize?: number;
nodeHeight?: number;
nodeWidth?: number;
edgeHandleSize?: number;
edgeArrowSize?: number;
zoomDelay?: number;
zoomDur?: number;
showGraphControls?: boolean;
nodeKey: string;
gridSize?: number;
gridSpacing?: number;
gridDotSize?: number;
backgroundFillId?: string;
nodeTypes: any;
nodeSubtypes: any;
edgeTypes: any;
selected: any;
onBackgroundClick?: (x: number, y: number) => void;
onDeleteNode: (selected: any, nodeId: string, nodes: any[]) => void;
onSelectNode: (node: INode | null) => void;
onCreateNode: (x: number, y: number, event: object) => void;
onCreateEdge: (sourceNode: INode, targetNode: INode) => void;
onDeleteEdge: (selectedEdge: IEdge, edges: IEdge[]) => void;
onUpdateNode: (node: INode) => void;
onSwapEdge: (sourceNode: INode, targetNode: INode, edge: IEdge) => void;
onSelectEdge: (selectedEdge: IEdge) => void;
canDeleteNode?: (selected: any) => boolean;
canDeleteEdge?: (selected: any) => boolean;
canCreateEdge?: (startNode?: INode, endNode?: INode) => boolean;
afterRenderEdge?: (id: string, element: any, edge: IEdge, edgeContainer: any, isEdgeSelected: boolean) => void;
onOverrideableClick?: (event: any) => boolean;
onUndo?: () => void;
onCopySelected?: () => void;
onPasteSelected?: () => void;
renderBackground?: (gridSize?: number) => any;
renderDefs?: () => any;
renderNode?: (
nodeRef: any,
data: any,
index: number,
selected: boolean,
hovered: boolean,
nodeProps: INodeComponentProps
) => any;
renderNodeText?: (data: any, id: string | number, isSelected: boolean) => any;
layoutEngineType?: LayoutEngineType;
rotateEdgeHandle?: boolean;
centerNodeOnMove?: boolean;
initialBBox?: IBBox;
You can call these methods on the GraphView class using a ref.
Method | Type | Notes |
---|---|---|
panToNode | (id: string, zoom?: boolean) => void | Center the node given by id within the viewport, optionally zoom in to fit it. |
panToEdge | (source: string, target: string, zoom?: boolean) => void | Center the edge between source and target node IDs within the viewport, optionally zoom in to fit it. |
Prop | Type | Required | Notes |
---|---|---|---|
emptyType | string | true | 'Default' node type. |
getViewNode | func | true | Node getter. |
renderEdge | func | false | Called to render edge geometry. |
enableFocus | bool | false | Adds a 'focus' toggle state to GraphView. |
transitionTime | number | false | Fade-in/Fade-out time. |
primary | string | false | Primary color. |
light | string | false | Light color. |
dark | string | false | Dark color. |
style | object | false | Style prop for wrapper. |
gridDot | number | false | Grid dot size. |
graphControls | boolean | true | Whether to show zoom controls. |
No vulnerabilities found.
Reason
no dangerous workflow patterns detected
Reason
no binaries found in the repo
Reason
0 existing vulnerabilities detected
Reason
license file detected
Details
Reason
Found 12/18 approved changesets -- score normalized to 6
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
project is not fuzzed
Details
Reason
security policy file not detected
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Score
Last Scanned on 2025-07-07
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More