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} >