Merge pull request #5344 from xyflow/feat/connection-drag-threshold
Add connectionDragThreshold
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { useStore } from '$lib/store';
|
||||
import type { Edge } from '$lib/types';
|
||||
import { XYHandle, type HandleType } from '@xyflow/system';
|
||||
import { XYHandle, type HandleType, type OnConnectStart } from '@xyflow/system';
|
||||
import { getContext } from 'svelte';
|
||||
import { EdgeLabel } from '../EdgeLabel';
|
||||
import type { EdgeReconnectAnchorProps } from './types';
|
||||
@@ -12,6 +12,7 @@
|
||||
position,
|
||||
class: className,
|
||||
size = 25,
|
||||
dragThreshold = 1,
|
||||
children,
|
||||
...rest
|
||||
}: EdgeReconnectAnchorProps = $props();
|
||||
@@ -52,8 +53,11 @@
|
||||
let newEdge: Edge | undefined;
|
||||
let edge = edgeLookup.get(edgeId)!;
|
||||
|
||||
reconnecting = true;
|
||||
onreconnectstart?.(event, edge, type);
|
||||
const _onConnectStart: OnConnectStart = (evt, params) => {
|
||||
reconnecting = true;
|
||||
onreconnectstart?.(event, edge, type);
|
||||
onconnectstart?.(evt, params);
|
||||
};
|
||||
|
||||
const opposite =
|
||||
type === 'target'
|
||||
@@ -79,7 +83,7 @@
|
||||
cancelConnection,
|
||||
panBy,
|
||||
isValidConnection,
|
||||
onConnectStart: onconnectstart,
|
||||
onConnectStart: _onConnectStart,
|
||||
onConnectEnd: onconnectend,
|
||||
onConnect: (connection) => {
|
||||
newEdge = { ...edge, ...connection };
|
||||
@@ -97,7 +101,8 @@
|
||||
},
|
||||
updateConnection,
|
||||
getTransform: () => [store.viewport.x, store.viewport.y, store.viewport.zoom],
|
||||
getFromHandle: () => store.connection.fromHandle
|
||||
getFromHandle: () => store.connection.fromHandle,
|
||||
dragThreshold: dragThreshold ?? store.connectionDragThreshold
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -10,4 +10,5 @@ export type EdgeReconnectAnchorProps = {
|
||||
position?: XYPosition;
|
||||
size?: number;
|
||||
children?: Snippet;
|
||||
dragThreshold?: number;
|
||||
} & HTMLAttributes<HTMLDivElement>;
|
||||
|
||||
@@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
fitViewOptions,
|
||||
nodeOrigin,
|
||||
nodeDragThreshold,
|
||||
connectionDragThreshold,
|
||||
minZoom,
|
||||
maxZoom,
|
||||
initialViewport,
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -286,6 +286,7 @@ export function getInitialStore<NodeType extends Node = Node, EdgeType extends E
|
||||
autoPanOnNodeDrag: boolean = $derived(signals.props.autoPanOnNodeDrag ?? true);
|
||||
autoPanOnConnect: boolean = $derived(signals.props.autoPanOnConnect ?? true);
|
||||
autoPanOnNodeFocus: boolean = $derived(signals.props.autoPanOnNodeFocus ?? true);
|
||||
connectionDragThreshold: number = $derived(signals.props.connectionDragThreshold ?? 1);
|
||||
|
||||
fitViewQueued: boolean = signals.props.fitView ?? false;
|
||||
fitViewOptions: FitViewOptions | undefined = signals.props.fitViewOptions;
|
||||
|
||||
Reference in New Issue
Block a user