diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index e35804fc..a492d0c0 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -8,7 +8,8 @@ isMouseEvent, type HandleConnection, areConnectionMapsEqual, - handleConnectionChange + handleConnectionChange, + ConnectionMode } from '@xyflow/system'; import { useStore } from '$lib/store'; @@ -32,7 +33,7 @@ const isTarget = type === 'target'; const nodeId = getContext('svelteflow__node_id'); const connectable = getContext>('svelteflow__node_connectable'); - $: handleConnectable = isConnectable !== undefined ? isConnectable : $connectable; + $: isConnectable = isConnectable !== undefined ? isConnectable : $connectable; const handleId = id || null; @@ -124,6 +125,7 @@ prevConnections = connections ?? new Map(); } + $: connectionInProcess = !!$connection.startHandle; $: connectingFrom = $connection.startHandle?.nodeId === nodeId && $connection.startHandle?.type === type && @@ -132,6 +134,11 @@ $connection.endHandle?.nodeId === nodeId && $connection.endHandle?.type === type && $connection.endHandle?.handleId === handleId; + $: isPossibleEndHandle = + $connectionMode === ConnectionMode.Strict + ? $connection.startHandle?.type !== type + : nodeId !== $connection.startHandle?.nodeId || + handleId !== $connection.startHandle?.handleId; $: valid = connectingTo && $connection.status === 'valid'; // @todo implement connectablestart, connectableend @@ -161,10 +168,10 @@ The Handle component is the part of a node that can be used to connect nodes. ])} class:source={!isTarget} class:target={isTarget} - class:connectablestart={handleConnectable} - class:connectableend={handleConnectable} - class:connectable={handleConnectable} - class:connectionindicator={handleConnectable} + class:connectablestart={isConnectable} + class:connectableend={isConnectable} + class:connectable={isConnectable} + class:connectionindicator={isConnectable && (!connectionInProcess || isPossibleEndHandle)} on:mousedown={onPointerDown} on:touchstart={onPointerDown} {style}