From b50b34ac95da68b4345d5131fef5c7170dc1ea27 Mon Sep 17 00:00:00 2001 From: niknah Date: Mon, 1 Dec 2025 06:55:16 +1100 Subject: [PATCH] Expose LGraphNode.getSlotPosition (#7042) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before node v2, you could use getInputPos, getOutputPos. In node v2, that is not possible. ## Summary Want to get the position of the output / inputs on the graph like before node v2. ## Changes - **What**: Added LGraphNode.getSlotPosition ## Review Focus ## Screenshots (if applicable) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7042-Expose-LGraphNode-getSlotPosition-2ba6d73d36508195a0fed2d1fe2b64f6) by [Unito](https://www.unito.io) --- src/lib/litegraph/src/LGraphNode.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lib/litegraph/src/LGraphNode.ts b/src/lib/litegraph/src/LGraphNode.ts index d4149e6ec..7dc9652a4 100644 --- a/src/lib/litegraph/src/LGraphNode.ts +++ b/src/lib/litegraph/src/LGraphNode.ts @@ -2,7 +2,8 @@ import { LGraphNodeProperties } from '@/lib/litegraph/src/LGraphNodeProperties' import { calculateInputSlotPos, calculateInputSlotPosFromSlot, - calculateOutputSlotPos + calculateOutputSlotPos, + getSlotPosition } from '@/renderer/core/canvas/litegraph/slotCalculations' import type { SlotPositionContext } from '@/renderer/core/canvas/litegraph/slotCalculations' import { useLayoutMutations } from '@/renderer/core/layout/operations/layoutMutations' @@ -3354,6 +3355,16 @@ export class LGraphNode ) } + /** + * Get slot position using layout tree if available, fallback to node's position * Unified implementation used by both LitegraphLinkAdapter and useLinkLayoutSync + * @param slotIndex The slot index + * @param isInput Whether this is an input slot + * @returns Position of the slot center in graph coordinates + */ + getSlotPosition(slotIndex: number, isInput: boolean): Point { + return getSlotPosition(this, slotIndex, isInput) + } + /** @inheritdoc */ snapToGrid(snapTo: number): boolean { return this.pinned ? false : snapPoint(this.pos, snapTo)