From 23f3e17d524b6ac7443a55c122a79a71c33bfa97 Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Thu, 25 Sep 2025 17:17:45 -0700 Subject: [PATCH] Try connecting to snapped first --- .../composables/useSlotLinkInteraction.ts | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.ts b/src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.ts index 734284fff..34d7000db 100644 --- a/src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.ts +++ b/src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.ts @@ -455,12 +455,28 @@ export function useSlotLinkInteraction({ return } - const candidate = candidateFromTarget(event.target) - let connected = tryConnectToCandidate(candidate) + // Prefer using the snapped candidate captured during hover for perf + consistency + const snappedCandidate = state.candidate?.compatible + ? state.candidate + : null + + let connected = tryConnectToCandidate(snappedCandidate) + + // Fallback to DOM slot under pointer (if any), then node fallback, then reroute + if (!connected) { + const domCandidate = candidateFromTarget(event.target) + connected = tryConnectToCandidate(domCandidate) + } + + if (!connected) { + const nodeCandidate = candidateFromNodeTarget(event.target) + connected = tryConnectToCandidate(nodeCandidate) + } + if (!connected) connected = tryConnectViaRerouteAtPointer() || connected // Drop on canvas: disconnect moving input link(s) - if (!connected && !candidate && state.source.type === 'input') { + if (!connected && !snappedCandidate && state.source.type === 'input') { ensureActiveAdapter()?.disconnectMovingLinks() }