From 4f3f5a7a7a096e51ec093a5016f775e707fad036 Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Fri, 30 May 2025 12:55:35 -0700 Subject: [PATCH 1/2] Fix infinite loop two ways - Don't try to find connections for a block with no output/prev - If you've checked every connection and didn't find a match stop --- src/keyboard_drag_strategy.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/keyboard_drag_strategy.ts b/src/keyboard_drag_strategy.ts index c42fe5e2..87552e50 100644 --- a/src/keyboard_drag_strategy.ts +++ b/src/keyboard_drag_strategy.ts @@ -106,6 +106,9 @@ export class KeyboardDragStrategy extends dragging.BlockDragStrategy { private getConstrainedConnectionCandidate( draggingBlock: BlockSvg, ): ConnectionCandidate | null { + if (!draggingBlock.previousConnection && !draggingBlock.outputConnection) { + return null; + } // @ts-expect-error getLocalConnections is private. const localConns = this.getLocalConnections(draggingBlock); @@ -205,6 +208,7 @@ export class KeyboardDragStrategy extends dragging.BlockDragStrategy { }; } }); + if (potential == this.searchNode) break; } return candidateConnection; } From 4f0fb12c498e62cae7a7e6b345d08faf5ab8549f Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Fri, 30 May 2025 13:05:10 -0700 Subject: [PATCH 2/2] Support connecting C shaped blocks around detached stacks --- src/keyboard_drag_strategy.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/keyboard_drag_strategy.ts b/src/keyboard_drag_strategy.ts index 87552e50..23a658c6 100644 --- a/src/keyboard_drag_strategy.ts +++ b/src/keyboard_drag_strategy.ts @@ -106,11 +106,11 @@ export class KeyboardDragStrategy extends dragging.BlockDragStrategy { private getConstrainedConnectionCandidate( draggingBlock: BlockSvg, ): ConnectionCandidate | null { - if (!draggingBlock.previousConnection && !draggingBlock.outputConnection) { - return null; - } // @ts-expect-error getLocalConnections is private. const localConns = this.getLocalConnections(draggingBlock); + if (localConns.length == 0) { + return null; + } let candidateConnection = this.findTraversalCandidate( draggingBlock,