diff --git a/src/components/App.tsx b/src/components/App.tsx index 892b3c16..67c3660c 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1330,7 +1330,7 @@ export class App extends React.Component { let isResizingElements = false; let draggingOccurred = false; let hitElement: ExcalidrawElement | null = null; - let elementIsAddedToSelection = false; + let hitElementWasAddedToSelection = false; if (this.state.elementType === "selection") { const resizeElement = getElementWithResizeHandler( globalSceneState.getAllElements(), @@ -1386,7 +1386,7 @@ export class App extends React.Component { globalSceneState.replaceAllElements( globalSceneState.getAllElements(), ); - elementIsAddedToSelection = true; + hitElementWasAddedToSelection = true; } // We duplicate the selected element if alt is pressed on pointer down @@ -1396,7 +1396,10 @@ export class App extends React.Component { const nextElements = []; const elementsToAppend = []; for (const element of globalSceneState.getAllElements()) { - if (this.state.selectedElementIds[element.id]) { + if ( + this.state.selectedElementIds[element.id] || + (element.id === hitElement.id && hitElementWasAddedToSelection) + ) { nextElements.push(duplicateElement(element)); elementsToAppend.push(element); } else { @@ -2123,7 +2126,7 @@ export class App extends React.Component { // If click occurred and elements were dragged or some element // was added to selection (on pointerdown phase) we need to keep // selection unchanged - if (hitElement && !draggingOccurred && !elementIsAddedToSelection) { + if (hitElement && !draggingOccurred && !hitElementWasAddedToSelection) { if (event.shiftKey) { this.setState(prevState => ({ selectedElementIds: {