diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 3926eee93f..a9616b4d8c 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -6601,7 +6601,7 @@ class App extends React.Component { // For lasso tool, if we hit an element, select it immediately like normal selection if (pointerDownState.hit.element && !hitSelectedElement) { this.setState((prevState) => { - let nextSelectedElementIds: { [id: string]: true } = { + const nextSelectedElementIds: { [id: string]: true } = { ...prevState.selectedElementIds, [pointerDownState.hit.element!.id]: true, }; diff --git a/packages/excalidraw/snapping.ts b/packages/excalidraw/snapping.ts index 8dd1bd59ac..54cdd623b0 100644 --- a/packages/excalidraw/snapping.ts +++ b/packages/excalidraw/snapping.ts @@ -169,8 +169,14 @@ export const isSnappingEnabled = ({ selectedElements: NonDeletedExcalidrawElement[]; }) => { if (event) { + // Allow snapping for lasso tool when dragging selected elements + // but not during lasso selection phase + const isLassoDragging = + app.state.activeTool.type === "lasso" && + app.state.selectedElementsAreBeingDragged; + return ( - app.state.activeTool.type !== "lasso" && + (app.state.activeTool.type !== "lasso" || isLassoDragging) && ((app.state.objectsSnapModeEnabled && !event[KEYS.CTRL_OR_CMD]) || (!app.state.objectsSnapModeEnabled && event[KEYS.CTRL_OR_CMD] &&