diff --git a/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx b/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx index 4aed1c21..04bdaebb 100644 --- a/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx +++ b/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx @@ -92,6 +92,7 @@ export function EdgeUpdateAnchors({ updateConnection, getTransform: () => store.getState().transform, getFromHandle: () => store.getState().connection.fromHandle, + dragThreshold: store.getState().connectionDragThreshold, }); }; diff --git a/packages/react/src/components/Handle/index.tsx b/packages/react/src/components/Handle/index.tsx index b2c3373e..31615f0c 100644 --- a/packages/react/src/components/Handle/index.tsx +++ b/packages/react/src/components/Handle/index.tsx @@ -149,6 +149,7 @@ function HandleComponent( getTransform: () => store.getState().transform, getFromHandle: () => store.getState().connection.fromHandle, autoPanSpeed: currentStore.autoPanSpeed, + dragThreshold: currentStore.connectionDragThreshold, }); } diff --git a/packages/react/src/components/StoreUpdater/index.tsx b/packages/react/src/components/StoreUpdater/index.tsx index 5a5878c3..1506bd48 100644 --- a/packages/react/src/components/StoreUpdater/index.tsx +++ b/packages/react/src/components/StoreUpdater/index.tsx @@ -65,6 +65,7 @@ const reactFlowFieldsToTrack = [ 'isValidConnection', 'selectNodesOnDrag', 'nodeDragThreshold', + 'connectionDragThreshold', 'onBeforeDelete', 'debug', 'autoPanSpeed', diff --git a/packages/react/src/container/ReactFlow/index.tsx b/packages/react/src/container/ReactFlow/index.tsx index f0e73f4f..33b5ee54 100644 --- a/packages/react/src/container/ReactFlow/index.tsx +++ b/packages/react/src/container/ReactFlow/index.tsx @@ -139,6 +139,7 @@ function ReactFlow( style, id, nodeDragThreshold, + connectionDragThreshold, viewport, onViewportChange, width, @@ -306,6 +307,7 @@ function ReactFlow( isValidConnection={isValidConnection} selectNodesOnDrag={selectNodesOnDrag} nodeDragThreshold={nodeDragThreshold} + connectionDragThreshold={connectionDragThreshold} onBeforeDelete={onBeforeDelete} paneClickDistance={paneClickDistance} debug={debug} diff --git a/packages/react/src/store/initialState.ts b/packages/react/src/store/initialState.ts index 2532b5ad..bfc9baaa 100644 --- a/packages/react/src/store/initialState.ts +++ b/packages/react/src/store/initialState.ts @@ -107,6 +107,7 @@ const getInitialState = ({ noPanClassName: 'nopan', nodeOrigin: storeNodeOrigin, nodeDragThreshold: 1, + connectionDragThreshold: 1, snapGrid: [15, 15], snapToGrid: false, diff --git a/packages/react/src/types/component-props.ts b/packages/react/src/types/component-props.ts index fc8b94a6..50021220 100644 --- a/packages/react/src/types/component-props.ts +++ b/packages/react/src/types/component-props.ts @@ -657,6 +657,12 @@ export interface ReactFlowProps [store.viewport.x, store.viewport.y, store.viewport.zoom], - getFromHandle: () => store.connection.fromHandle + getFromHandle: () => store.connection.fromHandle, + dragThreshold: store.connectionDragThreshold }); }; diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 8f5675c8..d636f4cf 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -139,7 +139,8 @@ store.onconnectend?.(event, connectionState); }, getTransform: () => [store.viewport.x, store.viewport.y, store.viewport.zoom], - getFromHandle: () => store.connection.fromHandle + getFromHandle: () => store.connection.fromHandle, + dragThreshold: store.connectionDragThreshold }); } } diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index d575db1a..9d40b5b3 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -170,6 +170,12 @@ export type SvelteFlowProps< * @default 0 */ nodeClickDistance?: number; + /** + * The threshold in pixels that the mouse must move before a connection line starts to drag. + * This is useful to prevent accidental connections when clicking on a handle. + * @default 1 + */ + connectionDragThreshold?: number; /** Minimum zoom level * @default 0.5 */ diff --git a/packages/svelte/src/lib/store/initial-store.svelte.ts b/packages/svelte/src/lib/store/initial-store.svelte.ts index ae09b576..a2d1ea68 100644 --- a/packages/svelte/src/lib/store/initial-store.svelte.ts +++ b/packages/svelte/src/lib/store/initial-store.svelte.ts @@ -286,6 +286,7 @@ export function getInitialStore