From b7762e5a92ab7ebb1a54426032245c197bbe1ed9 Mon Sep 17 00:00:00 2001 From: Ryan Di Date: Mon, 14 Jul 2025 18:58:29 +1000 Subject: [PATCH] fix: lasso dragging should snap too --- packages/excalidraw/components/App.tsx | 2 +- packages/excalidraw/snapping.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) 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] &&