You can drag these nodes to the pane on the left.
onDragStart(event, 'default')}
draggable
>
Default Node
onDragStart(event, 'output')}
draggable
>
diff --git a/examples/vite-app/src/examples/DragNDrop/index.tsx b/examples/vite-app/src/examples/DragNDrop/index.tsx
index e1813fc3..d59ee687 100644
--- a/examples/vite-app/src/examples/DragNDrop/index.tsx
+++ b/examples/vite-app/src/examples/DragNDrop/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, DragEvent } from 'react';
+import { useState, DragEvent } from 'react';
import ReactFlow, {
ReactFlowProvider,
addEdge,
diff --git a/examples/vite-app/src/examples/EdgeRenderer/index.tsx b/examples/vite-app/src/examples/EdgeRenderer/index.tsx
index f4315360..d80cea8b 100644
--- a/examples/vite-app/src/examples/EdgeRenderer/index.tsx
+++ b/examples/vite-app/src/examples/EdgeRenderer/index.tsx
@@ -1,4 +1,4 @@
-import React, { MouseEvent, useCallback } from 'react';
+import { MouseEvent, useCallback } from 'react';
import ReactFlow, {
Controls,
Background,
diff --git a/examples/vite-app/src/examples/EdgeTypes/index.tsx b/examples/vite-app/src/examples/EdgeTypes/index.tsx
index 6a93d1b1..9c1eb39a 100644
--- a/examples/vite-app/src/examples/EdgeTypes/index.tsx
+++ b/examples/vite-app/src/examples/EdgeTypes/index.tsx
@@ -1,7 +1,4 @@
-/**
- * Example for checking the different edge types and source and target positions
- */
-import React, { useCallback } from 'react';
+import { useCallback } from 'react';
import ReactFlow, {
Background,
diff --git a/examples/vite-app/src/examples/Edges/index.tsx b/examples/vite-app/src/examples/Edges/index.tsx
index f4315360..d80cea8b 100644
--- a/examples/vite-app/src/examples/Edges/index.tsx
+++ b/examples/vite-app/src/examples/Edges/index.tsx
@@ -1,4 +1,4 @@
-import React, { MouseEvent, useCallback } from 'react';
+import { MouseEvent, useCallback } from 'react';
import ReactFlow, {
Controls,
Background,
diff --git a/examples/vite-app/src/examples/Empty/index.tsx b/examples/vite-app/src/examples/Empty/index.tsx
index db24fb0f..c7efeb14 100644
--- a/examples/vite-app/src/examples/Empty/index.tsx
+++ b/examples/vite-app/src/examples/Empty/index.tsx
@@ -1,4 +1,4 @@
-import React, { MouseEvent, CSSProperties, useCallback } from 'react';
+import { MouseEvent, CSSProperties, useCallback } from 'react';
import ReactFlow, {
Background,
diff --git a/examples/vite-app/src/examples/FloatingEdges/index.tsx b/examples/vite-app/src/examples/FloatingEdges/index.tsx
index ab9e3c04..94913c0c 100644
--- a/examples/vite-app/src/examples/FloatingEdges/index.tsx
+++ b/examples/vite-app/src/examples/FloatingEdges/index.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import { useCallback } from 'react';
import ReactFlow, {
Background,
diff --git a/examples/vite-app/src/examples/Hidden/index.tsx b/examples/vite-app/src/examples/Hidden/index.tsx
index 842f9944..65a07581 100644
--- a/examples/vite-app/src/examples/Hidden/index.tsx
+++ b/examples/vite-app/src/examples/Hidden/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect, useCallback } from 'react';
+import { useState, useEffect, useCallback } from 'react';
import ReactFlow, { addEdge, Connection, Edge, Node, useNodesState, useEdgesState, MiniMap, Controls } from 'reactflow';
diff --git a/examples/vite-app/src/examples/Interaction/index.tsx b/examples/vite-app/src/examples/Interaction/index.tsx
index 922adf45..ced5d686 100644
--- a/examples/vite-app/src/examples/Interaction/index.tsx
+++ b/examples/vite-app/src/examples/Interaction/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, MouseEvent as ReactMouseEvent, WheelEvent } from 'react';
+import { useState, MouseEvent as ReactMouseEvent, WheelEvent } from 'react';
import ReactFlow, {
addEdge,
Node,
diff --git a/examples/vite-app/src/examples/Layouting/index.tsx b/examples/vite-app/src/examples/Layouting/index.tsx
index 9a9ed122..2c031491 100644
--- a/examples/vite-app/src/examples/Layouting/index.tsx
+++ b/examples/vite-app/src/examples/Layouting/index.tsx
@@ -1,4 +1,5 @@
import { useCallback } from 'react';
+import dagre from 'dagre';
import ReactFlow, {
Controls,
ReactFlowProvider,
@@ -14,8 +15,6 @@ import ReactFlow, {
useReactFlow,
} from 'reactflow';
-import dagre from 'dagre';
-
import initialItems from './initial-elements';
import styles from './layouting.module.css';
diff --git a/examples/vite-app/src/examples/MultiFlows/index.tsx b/examples/vite-app/src/examples/MultiFlows/index.tsx
index 201de70e..1f833900 100644
--- a/examples/vite-app/src/examples/MultiFlows/index.tsx
+++ b/examples/vite-app/src/examples/MultiFlows/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from 'react';
+import { FC } from 'react';
import ReactFlow, {
Background,
diff --git a/examples/vite-app/src/examples/NestedNodes/index.tsx b/examples/vite-app/src/examples/NestedNodes/index.tsx
index a6c083ce..e699337e 100644
--- a/examples/vite-app/src/examples/NestedNodes/index.tsx
+++ b/examples/vite-app/src/examples/NestedNodes/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, MouseEvent, useCallback } from 'react';
+import { useState, MouseEvent, useCallback } from 'react';
import ReactFlow, {
Controls,
MiniMap,
diff --git a/examples/vite-app/src/examples/NodeTypeChange/index.tsx b/examples/vite-app/src/examples/NodeTypeChange/index.tsx
index 8cf1a41f..561ba66e 100644
--- a/examples/vite-app/src/examples/NodeTypeChange/index.tsx
+++ b/examples/vite-app/src/examples/NodeTypeChange/index.tsx
@@ -1,5 +1,4 @@
-import React, { CSSProperties, useCallback } from 'react';
-
+import { CSSProperties, useCallback } from 'react';
import ReactFlow, { addEdge, Node, Position, Connection, Edge, useNodesState, useEdgesState } from 'reactflow';
const initialNodes: Node[] = [
diff --git a/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx b/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx
index c52baeff..66521aab 100644
--- a/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx
+++ b/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, CSSProperties, FC, useCallback } from 'react';
+import { useState, CSSProperties, FC, useCallback } from 'react';
import ReactFlow, {
addEdge,
Node,
diff --git a/examples/vite-app/src/examples/Overview/index.tsx b/examples/vite-app/src/examples/Overview/index.tsx
index 0bd3fa06..640e25f2 100644
--- a/examples/vite-app/src/examples/Overview/index.tsx
+++ b/examples/vite-app/src/examples/Overview/index.tsx
@@ -1,4 +1,4 @@
-import React, { MouseEvent as ReactMouseEvent, CSSProperties, useCallback } from 'react';
+import { MouseEvent as ReactMouseEvent, CSSProperties, useCallback } from 'react';
import ReactFlow, {
addEdge,
Node,
diff --git a/examples/vite-app/src/examples/Provider/index.tsx b/examples/vite-app/src/examples/Provider/index.tsx
index b4becc13..1e378ba3 100644
--- a/examples/vite-app/src/examples/Provider/index.tsx
+++ b/examples/vite-app/src/examples/Provider/index.tsx
@@ -1,4 +1,4 @@
-import React, { MouseEvent, useCallback } from 'react';
+import { MouseEvent, useCallback } from 'react';
import ReactFlow, {
Controls,
ReactFlowProvider,
diff --git a/examples/vite-app/src/examples/SaveRestore/index.tsx b/examples/vite-app/src/examples/SaveRestore/index.tsx
index 87160707..e84eaf34 100644
--- a/examples/vite-app/src/examples/SaveRestore/index.tsx
+++ b/examples/vite-app/src/examples/SaveRestore/index.tsx
@@ -1,5 +1,6 @@
-import React, { useCallback } from 'react';
+import { useCallback } from 'react';
import ReactFlow, { ReactFlowProvider, Node, addEdge, Connection, Edge, useNodesState, useEdgesState } from 'reactflow';
+
import Controls from './Controls';
const initialNodes: Node[] = [
diff --git a/examples/vite-app/src/examples/Stress/index.tsx b/examples/vite-app/src/examples/Stress/index.tsx
index ffdb81ba..e8cf9f91 100644
--- a/examples/vite-app/src/examples/Stress/index.tsx
+++ b/examples/vite-app/src/examples/Stress/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, CSSProperties, useCallback } from 'react';
+import { useState, CSSProperties, useCallback } from 'react';
import ReactFlow, {
ReactFlowInstance,
Edge,
diff --git a/examples/vite-app/src/examples/Subflow/index.tsx b/examples/vite-app/src/examples/Subflow/index.tsx
index c3f10b46..057e6b7b 100644
--- a/examples/vite-app/src/examples/Subflow/index.tsx
+++ b/examples/vite-app/src/examples/Subflow/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, MouseEvent, useCallback } from 'react';
+import { useState, MouseEvent, useCallback } from 'react';
import ReactFlow, {
addEdge,
Node,
@@ -12,7 +12,6 @@ import ReactFlow, {
MiniMap,
Background,
Panel,
- NodeOrigin,
} from 'reactflow';
import DebugNode from './DebugNode';
diff --git a/examples/vite-app/src/examples/TouchDevice/index.tsx b/examples/vite-app/src/examples/TouchDevice/index.tsx
index 6125630e..130c15fd 100644
--- a/examples/vite-app/src/examples/TouchDevice/index.tsx
+++ b/examples/vite-app/src/examples/TouchDevice/index.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import { useCallback } from 'react';
import ReactFlow, { Node, Edge, useNodesState, useEdgesState, Position, Connection, addEdge } from 'reactflow';
import styles from './touch-device.module.css';
diff --git a/examples/vite-app/src/examples/Undirectional/index.tsx b/examples/vite-app/src/examples/Undirectional/index.tsx
index 4f25f4a5..00feda8e 100644
--- a/examples/vite-app/src/examples/Undirectional/index.tsx
+++ b/examples/vite-app/src/examples/Undirectional/index.tsx
@@ -182,12 +182,13 @@ const getId = () => `${id++}`;
const UpdateNodeInternalsFlow = () => {
const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
-
- const onConnect = (params: Edge | Connection) => setEdges((els) => addEdge(params, els));
-
const { project } = useReactFlow();
- const onEdgeUpdate = (oldEdge: Edge, newConnection: Connection) =>
- setEdges((els) => updateEdge(oldEdge, newConnection, els));
+
+ const onConnect = useCallback((params: Edge | Connection) => setEdges((els) => addEdge(params, els)), [setEdges]);
+ const onEdgeUpdate = useCallback(
+ (oldEdge: Edge, newConnection: Connection) => setEdges((els) => updateEdge(oldEdge, newConnection, els)),
+ []
+ );
const onPaneClick = useCallback(
(evt: MouseEvent) =>
diff --git a/examples/vite-app/src/examples/UpdatableEdge/index.tsx b/examples/vite-app/src/examples/UpdatableEdge/index.tsx
index b606a1f6..51760701 100644
--- a/examples/vite-app/src/examples/UpdatableEdge/index.tsx
+++ b/examples/vite-app/src/examples/UpdatableEdge/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, useCallback } from 'react';
+import { useState, useCallback, MouseEvent as ReactMouseEvent } from 'react';
import ReactFlow, {
Controls,
updateEdge,
@@ -60,9 +60,9 @@ const initialNodes: Node[] = [
const initialEdges = [{ id: 'e1-2', source: '1', target: '2', label: 'This is a draggable edge' }];
const onInit = (reactFlowInstance: ReactFlowInstance) => reactFlowInstance.fitView();
-const onEdgeUpdateStart = (_: React.MouseEvent, edge: Edge, handleType: HandleType) =>
+const onEdgeUpdateStart = (_: ReactMouseEvent, edge: Edge, handleType: HandleType) =>
console.log(`start update ${handleType} handle`, edge);
-const onEdgeUpdateEnd = (_: MouseEvent, edge: Edge, handleType: HandleType) =>
+const onEdgeUpdateEnd = (_: MouseEvent | TouchEvent, edge: Edge, handleType: HandleType) =>
console.log(`end update ${handleType} handle`, edge);
const UpdatableEdge = () => {
@@ -91,8 +91,8 @@ const UpdatableEdge = () => {
snapToGrid={true}
onEdgeUpdate={onEdgeUpdate}
onConnect={onConnect}
- // onEdgeUpdateStart={onEdgeUpdateStart}
- // onEdgeUpdateEnd={onEdgeUpdateEnd}
+ onEdgeUpdateStart={onEdgeUpdateStart}
+ onEdgeUpdateEnd={onEdgeUpdateEnd}
>
diff --git a/examples/vite-app/src/examples/UpdateNode/index.tsx b/examples/vite-app/src/examples/UpdateNode/index.tsx
index 8ec50299..23706e01 100644
--- a/examples/vite-app/src/examples/UpdateNode/index.tsx
+++ b/examples/vite-app/src/examples/UpdateNode/index.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import { useEffect, useState } from 'react';
import ReactFlow, { Node, Edge, useNodesState, useEdgesState } from 'reactflow';
import styles from './updatenode.module.css';
diff --git a/examples/vite-app/src/examples/UseReactFlow/index.tsx b/examples/vite-app/src/examples/UseReactFlow/index.tsx
index 6fca9627..ae97bc9b 100644
--- a/examples/vite-app/src/examples/UseReactFlow/index.tsx
+++ b/examples/vite-app/src/examples/UseReactFlow/index.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, MouseEvent, useEffect } from 'react';
+import { useCallback, MouseEvent, useEffect } from 'react';
import ReactFlow, {
Background,
MiniMap,
@@ -10,6 +10,7 @@ import ReactFlow, {
Edge,
useNodesState,
useEdgesState,
+ Panel,
} from 'reactflow';
const initialNodes: Node[] = [
@@ -65,7 +66,7 @@ const UseZoomPanHelperFlow = () => {
addEdges,
getNodes,
getEdges,
- deleteElements
+ deleteElements,
} = useReactFlow();
const onPaneClick = useCallback(
@@ -114,14 +115,14 @@ const UseZoomPanHelperFlow = () => {
}, [getNodes, getEdges]);
const deleteSelectedElements = useCallback(() => {
- const selectedNodes = nodes.filter(node => node.selected);
- const selectedEdges = edges.filter(edge => edge.selected);
+ const selectedNodes = nodes.filter((node) => node.selected);
+ const selectedEdges = edges.filter((edge) => edge.selected);
deleteElements({ nodes: selectedNodes, edges: selectedEdges });
- }, [deleteElements, nodes, edges])
+ }, [deleteElements, nodes, edges]);
const deleteSomeElements = useCallback(() => {
- deleteElements({ nodes: [{ id: '2' }], edges: [{ id: 'e1-3' }] })
- }, [])
+ deleteElements({ nodes: [{ id: '2' }], edges: [{ id: 'e1-3' }] });
+ }, []);
useEffect(() => {
addEdges({ id: 'e3-4', source: '3', target: '4' });
@@ -142,7 +143,7 @@ const UseZoomPanHelperFlow = () => {
fitViewOptions={{ duration: 1200, padding: 0.2 }}
maxZoom={Infinity}
>
-
+
@@ -151,7 +152,7 @@ const UseZoomPanHelperFlow = () => {
-
+
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1d0a2c3a..766ca8fb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -58,6 +58,7 @@ importers:
specifiers:
'@cypress/skip-test': ^2.6.1
'@reactflow/node-resizer': workspace:*
+ '@types/dagre': ^0.7.48
'@types/react': ^18.0.17
'@types/react-dom': ^18.0.6
'@vitejs/plugin-react': ^3.0.1
@@ -84,6 +85,7 @@ importers:
reactflow: link:../../packages/reactflow
devDependencies:
'@cypress/skip-test': registry.npmjs.org/@cypress/skip-test/2.6.1
+ '@types/dagre': registry.npmjs.org/@types/dagre/0.7.48
'@types/react': registry.npmjs.org/@types/react/18.0.19
'@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6
'@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react/3.0.1_vite@4.0.4
@@ -2046,6 +2048,12 @@ packages:
'@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1
dev: false
+ registry.npmjs.org/@types/dagre/0.7.48:
+ resolution: {integrity: sha512-rF3yXSwHIrDxEkN6edCE4TXknb5YSEpiXfLaspw1I08grC49ZFuAVGOQCmZGIuLUGoFgcqGlUFBL/XrpgYpQgw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/dagre/-/dagre-0.7.48.tgz}
+ name: '@types/dagre'
+ version: 0.7.48
+ dev: true
+
registry.npmjs.org/@types/estree/0.0.39:
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz}
name: '@types/estree'