diff --git a/examples/vite-app/cypress/e2e/basic.cy.ts b/examples/vite-app/cypress/e2e/basic.cy.ts
index fd4c107a..c6f027c9 100644
--- a/examples/vite-app/cypress/e2e/basic.cy.ts
+++ b/examples/vite-app/cypress/e2e/basic.cy.ts
@@ -51,16 +51,16 @@ describe('Basic Flow Rendering', () => {
.type('{shift}', { release: false })
.wait(50)
.get('.react-flow__pane')
- .trigger('mousedown', 1000, 50, { button: 0, force: true })
- .trigger('mousemove', 1, 400, { button: 0 })
+ .trigger('mousedown', 1, 10, { button: 0, force: true })
+ .trigger('mousemove', 1000, 450, { button: 0 })
.wait(50)
- .trigger('mouseup', 1, 200, { force: true });
+ .trigger('mouseup', 1000, 450, { button: 0, force: true });
- cy.wait(100);
+ cy.wait(200);
cy.get('.react-flow__node').eq(1).should('have.class', 'selected');
- cy.get('.react-flow__node').eq(0).should('have.not.class', 'selected');
+ cy.get('.react-flow__node').eq(3).should('have.not.class', 'selected');
cy.get('.react-flow__nodesselection-rect');
@@ -74,11 +74,13 @@ describe('Basic Flow Rendering', () => {
.trigger('mousedown', 'topRight', { button: 0, force: true })
.trigger('mousemove', 'bottomLeft', { button: 0 })
.wait(50)
- .trigger('mouseup', 'bottomLeft', { force: true })
- .wait(50)
+ .trigger('mouseup', 'bottomLeft', { button: 0, force: true })
+ .wait(400)
.get('.react-flow__node')
- .should('have.class', 'selected')
- .get('.react-flow__nodesselection-rect');
+ .should('have.class', 'selected');
+
+ cy.wait(200);
+ cy.get('.react-flow__nodesselection-rect');
cy.get('body').type('{shift}', { release: true });
});
@@ -113,14 +115,14 @@ describe('Basic Flow Rendering', () => {
cy.get('.react-flow__node')
.contains('Node 3')
.find('.react-flow__handle.source')
- .trigger('mousedown', { button: 0 });
+ .trigger('mousedown', { force: true, button: 0 });
cy.get('.react-flow__node')
.contains('Node 4')
.find('.react-flow__handle.target')
- .trigger('mousemove', { force: true })
- .wait(50)
- .trigger('mouseup', { force: true });
+ .trigger('mousemove', { force: true, button: 0 })
+ .wait(200)
+ .trigger('mouseup', { force: true, button: 0 });
cy.get('.react-flow__edge').should('have.length', 3);
});
diff --git a/examples/vite-app/package.json b/examples/vite-app/package.json
index 55592a64..2fecdc49 100644
--- a/examples/vite-app/package.json
+++ b/examples/vite-app/package.json
@@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
- "dev": "vite --port 3000 --open",
+ "dev": "vite --port 3000 --open --host",
"serve": "vite serve --port 3000",
"build": "vite build",
"test:dev": "cypress open",
diff --git a/examples/vite-app/src/examples/Basic/index.tsx b/examples/vite-app/src/examples/Basic/index.tsx
index 1197ef06..52d22025 100644
--- a/examples/vite-app/src/examples/Basic/index.tsx
+++ b/examples/vite-app/src/examples/Basic/index.tsx
@@ -48,8 +48,6 @@ const initialEdges: Edge[] = [
{ id: 'e1-3', source: '1', target: '3' },
];
-const nodeOrigin: NodeOrigin = [0.5, 0.5];
-
const defaultEdgeOptions = {};
const BasicFlow = () => {
@@ -96,7 +94,6 @@ const BasicFlow = () => {
selectNodesOnDrag={false}
elevateEdgesOnSelect
elevateNodesOnSelect={false}
- // nodeOrigin={nodeOrigin}
>
diff --git a/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx b/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx
index 4fe25917..b27306dd 100644
--- a/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx
+++ b/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx
@@ -1,9 +1,8 @@
-import React, { FC } from 'react';
import { ConnectionLineComponentProps } from 'reactflow';
-const ConnectionLine: FC = ({ fromX, fromY, toX, toY }) => {
+function ConnectionLine({ fromX, fromY, toX, toY }: ConnectionLineComponentProps) {
return (
-
+ <>
= ({ fromX, fromY, toX, t
d={`M${fromX},${fromY} C ${fromX} ${toY} ${fromX} ${toY} ${toX},${toY}`}
/>
-
+ >
);
-};
+}
export default ConnectionLine;
diff --git a/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx b/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx
index 9f080bd3..5e50f35f 100644
--- a/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx
+++ b/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useMemo, CSSProperties } from 'react';
+import { FC, useMemo, CSSProperties } from 'react';
import { EdgeProps, useStore, getBezierPath, ReactFlowState } from 'reactflow';
import { getEdgeParams } from './utils';
@@ -17,7 +17,7 @@ const FloatingEdge: FC = ({ id, source, target, style }) => {
const { sx, sy, tx, ty, sourcePos, targetPos } = getEdgeParams(sourceNode, targetNode);
- const d = getBezierPath({
+ const [path] = getBezierPath({
sourceX: sx,
sourceY: sy,
sourcePosition: sourcePos,
@@ -28,7 +28,7 @@ const FloatingEdge: FC = ({ id, source, target, style }) => {
return (
-
+
);
};
diff --git a/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx b/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx
index 996e24c5..6cf58fd9 100644
--- a/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx
+++ b/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx
@@ -1,7 +1,7 @@
-import { memo, FC, CSSProperties } from 'react';
+import { memo, FC } from 'react';
import { Handle, Position, NodeProps } from 'reactflow';
-import { NodeResizer, NodeResizeControl } from '@reactflow/node-resizer';
+import { NodeResizeControl } from '@reactflow/node-resizer';
import '@reactflow/node-resizer/dist/style.css';
import ResizeIcon from './ResizeIcon';
diff --git a/examples/vite-app/src/examples/NodeResizer/CustomResizer2.tsx b/examples/vite-app/src/examples/NodeResizer/CustomResizer2.tsx
index 27833556..63ff061b 100644
--- a/examples/vite-app/src/examples/NodeResizer/CustomResizer2.tsx
+++ b/examples/vite-app/src/examples/NodeResizer/CustomResizer2.tsx
@@ -1,14 +1,14 @@
import { memo, FC } from 'react';
import { Handle, Position, NodeProps } from 'reactflow';
-import { NodeResizer, NodeResizeControl } from '@reactflow/node-resizer';
+import { NodeResizeControl } from '@reactflow/node-resizer';
import '@reactflow/node-resizer/dist/style.css';
const CustomNode: FC = ({ id, data }) => {
return (
<>
-
-
+
+
{data.label}
diff --git a/examples/vite-app/src/examples/NodeResizer/CustomResizer3.tsx b/examples/vite-app/src/examples/NodeResizer/CustomResizer3.tsx
new file mode 100644
index 00000000..422f2982
--- /dev/null
+++ b/examples/vite-app/src/examples/NodeResizer/CustomResizer3.tsx
@@ -0,0 +1,33 @@
+import { memo, FC } from 'react';
+import { Handle, Position, NodeProps } from 'reactflow';
+
+import { NodeResizeControl, OnResize, ShouldResize } from '@reactflow/node-resizer';
+import '@reactflow/node-resizer/dist/style.css';
+
+const shouldResize: ShouldResize = (event, params) => {
+ console.log('before resize', params);
+
+ if (params.width > 100) {
+ return false;
+ }
+
+ return true;
+};
+
+const onResize: OnResize = (event, params) => {
+ console.log('resize', params.direction);
+};
+
+const CustomNode: FC = ({ id, data }) => {
+ return (
+ <>
+
+
+
+ {data.label}
+
+ >
+ );
+};
+
+export default memo(CustomNode);
diff --git a/examples/vite-app/src/examples/NodeResizer/NodeResizerNode.tsx b/examples/vite-app/src/examples/NodeResizer/NodeResizerNode.tsx
index a8f76eca..03e4960f 100644
--- a/examples/vite-app/src/examples/NodeResizer/NodeResizerNode.tsx
+++ b/examples/vite-app/src/examples/NodeResizer/NodeResizerNode.tsx
@@ -1,21 +1,27 @@
import { memo, FC } from 'react';
import { Handle, Position, NodeProps } from 'reactflow';
-import { NodeResizer, ResizeDragEvent, ResizeEventParams } from '@reactflow/node-resizer';
+import { NodeResizer, ShouldResize, OnResize, OnResizeEnd, OnResizeStart } from '@reactflow/node-resizer';
import '@reactflow/node-resizer/dist/style.css';
-const onResizeStart = (_: ResizeDragEvent, params: ResizeEventParams) => {
+const onResizeStart: OnResizeStart = (_, params) => {
console.log('resize start', params);
};
-const onResize = (_: ResizeDragEvent, params: ResizeEventParams) => {
+const onResize: OnResize = (_, params) => {
console.log('resize', params);
};
-const onResizeEnd = (_: ResizeDragEvent, params: ResizeEventParams) => {
+const onResizeEnd: OnResizeEnd = (_, params) => {
console.log('resize end', params);
};
+const shouldResize: ShouldResize = (_, params) => {
+ console.log('should resize', params);
+
+ return true;
+};
+
const CustomNode: FC = ({ data, selected }) => {
return (
<>
@@ -23,6 +29,7 @@ const CustomNode: FC = ({ data, selected }) => {
minWidth={100}
minHeight={100}
isVisible={selected}
+ shouldResize={shouldResize}
onResizeStart={onResizeStart}
onResize={onResize}
onResizeEnd={onResizeEnd}
diff --git a/examples/vite-app/src/examples/NodeResizer/index.tsx b/examples/vite-app/src/examples/NodeResizer/index.tsx
index 68afe5df..01bb0851 100644
--- a/examples/vite-app/src/examples/NodeResizer/index.tsx
+++ b/examples/vite-app/src/examples/NodeResizer/index.tsx
@@ -4,11 +4,13 @@ import ReactFlow, { Controls, addEdge, Position, Connection, useNodesState, useE
import NodeResizerNode from './NodeResizerNode';
import CustomResizer from './CustomResizer';
import CustomResizer2 from './CustomResizer2';
+import CustomResizer3 from './CustomResizer3';
const nodeTypes = {
resizer: NodeResizerNode,
customResizer: CustomResizer,
customResizer2: CustomResizer2,
+ customResizer3: CustomResizer3,
};
const initialEdges = [
@@ -60,6 +62,13 @@ const initialNodes = [
position: { x: 250, y: 250 },
style: { border: '1px solid #222', fontSize: 10 },
},
+ {
+ id: '6',
+ type: 'customResizer3',
+ data: { label: 'resize controls' },
+ position: { x: 400, y: 200 },
+ style: { border: '1px solid #222', fontSize: 10 },
+ },
];
const CustomNodeFlow = () => {
@@ -87,7 +96,7 @@ const CustomNodeFlow = () => {
>
-
+
);
diff --git a/examples/vite-app/src/examples/Subflow/index.tsx b/examples/vite-app/src/examples/Subflow/index.tsx
index 75bd3629..c3f10b46 100644
--- a/examples/vite-app/src/examples/Subflow/index.tsx
+++ b/examples/vite-app/src/examples/Subflow/index.tsx
@@ -12,6 +12,7 @@ import ReactFlow, {
MiniMap,
Background,
Panel,
+ NodeOrigin,
} from 'reactflow';
import DebugNode from './DebugNode';
diff --git a/examples/vite-app/src/examples/Switch/index.tsx b/examples/vite-app/src/examples/Switch/index.tsx
index eb5d6519..b6ae2278 100644
--- a/examples/vite-app/src/examples/Switch/index.tsx
+++ b/examples/vite-app/src/examples/Switch/index.tsx
@@ -1,4 +1,4 @@
-import React, { MouseEvent, useCallback } from 'react';
+import { MouseEvent, useCallback } from 'react';
import ReactFlow, { addEdge, Node, Connection, Edge, useNodesState, useEdgesState } from 'reactflow';
const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node);
@@ -35,7 +35,7 @@ const nodesA: Node[] = [
];
const edgesA: Edge[] = [
- { id: 'e1-2', source: '1a', target: '2a', ariaLabel: null },
+ { id: 'e1-2', source: '1a', target: '2a', ariaLabel: undefined },
{ id: 'e1-3', source: '1a', target: '3a' },
];
@@ -83,6 +83,8 @@ const edgesB: Edge[] = [
{ id: 'e4b', source: 'inputb', target: '4b' },
];
+const onNodeDrag = (_: MouseEvent, node: Node) => console.log('drag', node.position);
+
const BasicFlow = () => {
const [nodes, setNodes, onNodesChange] = useNodesState(nodesA);
const [edges, setEdges, onEdgesChange] = useEdgesState(edgesA);
@@ -98,7 +100,7 @@ const BasicFlow = () => {
onNodeClick={onNodeClick}
onConnect={onConnect}
onNodeDragStop={onNodeDragStop}
- disableKeyboardA11y
+ onNodeDrag={onNodeDrag}
>