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,