diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index c6b47078e7..d300ae4d4a 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -7796,20 +7796,31 @@ class App extends React.Component { if ( (hitElement === null || !someHitElementIsSelected) && !event.shiftKey && - !pointerDownState.hit.hasHitCommonBoundingBoxOfSelectedElements + !pointerDownState.hit.hasHitCommonBoundingBoxOfSelectedElements && + (!this.state.selectedLinearElement?.isEditing || + (hitElement && + hitElement?.id !== this.state.selectedLinearElement?.elementId)) ) { this.clearSelection(hitElement); } if (this.state.selectedLinearElement?.isEditing) { - this.setState({ - selectedElementIds: makeNextSelectedElementIds( - { - [this.state.selectedLinearElement.elementId]: true, - }, - this.state, - ), - }); + this.setState((prevState) => ({ + selectedLinearElement: prevState.selectedLinearElement + ? { + ...prevState.selectedLinearElement, + isEditing: isBindingElement(hitElement), + } + : null, + selectedElementIds: prevState.selectedLinearElement + ? makeNextSelectedElementIds( + { + [prevState.selectedLinearElement.elementId]: true, + }, + this.state, + ) + : makeNextSelectedElementIds({}, prevState), + })); // If we click on something } else if (hitElement != null) { // == deep selection == @@ -10904,6 +10915,7 @@ class App extends React.Component { selectedElementIds: makeNextSelectedElementIds({}, this.state), activeEmbeddable: null, previousSelectedElementIds: this.state.selectedElementIds, + selectedLinearElement: null, }); }