From fed4af4381e31666b6f909903b009e8ca6cd4a3b Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Sat, 25 Apr 2026 16:04:14 +0000 Subject: [PATCH] fix: Move to top or bottom Signed-off-by: Mark Tolmacs --- packages/element/src/zindex.ts | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/element/src/zindex.ts b/packages/element/src/zindex.ts index 739ec83e1c..696c79b0a4 100644 --- a/packages/element/src/zindex.ts +++ b/packages/element/src/zindex.ts @@ -409,8 +409,10 @@ const shiftElementsToEnd = ( let trailingIndex: number; if (direction === "left") { if (containingFrame) { - leadingIndex = findIndex(elements, (el) => - isOfTargetFrame(el, containingFrame), + leadingIndex = findIndex( + elements, + (el) => + el.id !== containingFrame && isOfTargetFrame(el, containingFrame), ); } else if (appState.editingGroupId) { const groupElements = getElementsInGroup( @@ -428,8 +430,10 @@ const shiftElementsToEnd = ( trailingIndex = indicesToMove[indicesToMove.length - 1]; } else { if (containingFrame) { - trailingIndex = findLastIndex(elements, (el) => - isOfTargetFrame(el, containingFrame), + trailingIndex = findLastIndex( + elements, + (el) => + el.id !== containingFrame && isOfTargetFrame(el, containingFrame), ); } else if (appState.editingGroupId) { const groupElements = getElementsInGroup( @@ -509,6 +513,8 @@ function shiftElementsAccountingForFrames( } } + const selectedFrameIds = new Set(); + for (const element of allElements) { if (elementsToMove.has(element.id)) { if ( @@ -518,11 +524,23 @@ function shiftElementsAccountingForFrames( regularElements.push(element); } else if (!element.frameId) { regularElements.push(element); + } else if (!selectedFrameIds.has(element.frameId)) { + selectedFrameIds.add(element.frameId); + regularElements.push(element); } } } - return shiftFunction(allElements, appState, direction, null, regularElements); + const containingFrame = + selectedFrameIds.size > 0 ? [...selectedFrameIds][0] : null; + + return shiftFunction( + allElements, + appState, + direction, + containingFrame, + regularElements, + ); } // public API