From 351abdb70ac65b3dcdaaf36cbe71f88b9bc9dfb7 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Wed, 19 Mar 2025 18:44:44 +0100 Subject: [PATCH] Bound text ordering fix Signed-off-by: Mark Tolmacs --- packages/excalidraw/element/duplicate.ts | 14 ++++++++++++-- .../__snapshots__/regressionTests.test.tsx.snap | 6 +++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/excalidraw/element/duplicate.ts b/packages/excalidraw/element/duplicate.ts index f7b84ef04..7fc7befa1 100644 --- a/packages/excalidraw/element/duplicate.ts +++ b/packages/excalidraw/element/duplicate.ts @@ -193,8 +193,18 @@ export const duplicateElements = ( return; } + if (opts?.reverseOrder && index < 1) { + elementsWithClones.unshift(...castArray(elements)); + return; + } + + if (!opts?.reverseOrder && index > elementsWithClones.length - 1) { + elementsWithClones.push(...castArray(elements)); + return; + } + elementsWithClones.splice( - Math.max(index + (!!opts?.reverseOrder ? -1 : 1), 0), + index + (!!opts?.reverseOrder ? 0 : 1), 0, ...castArray(elements), ); @@ -278,7 +288,7 @@ export const duplicateElements = ( if (boundTextElement) { insertAfterIndex( - targetIndex, + targetIndex + (!!opts?.reverseOrder ? -1 : 0), copyElements([element, boundTextElement]), ); } else { diff --git a/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap index 62f81054d..81a031d9b 100644 --- a/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap @@ -10629,7 +10629,7 @@ History { "id7", ], "height": 10, - "index": "a0G", + "index": "a1G", "isDeleted": false, "link": null, "locked": false, @@ -10662,7 +10662,7 @@ History { "id7", ], "height": 10, - "index": "a0V", + "index": "a1V", "isDeleted": false, "link": null, "locked": false, @@ -10695,7 +10695,7 @@ History { "id7", ], "height": 10, - "index": "a0l", + "index": "a1l", "isDeleted": false, "link": null, "locked": false,