diff --git a/package.json b/package.json index 479f33c5ed..4f8e550f34 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "vitest-canvas-mock": "0.3.2" }, "engines": { - "node": "^18.0.0" + "node": "18.0.0 - 20.x.x" }, "homepage": ".", "name": "excalidraw", diff --git a/src/actions/actionCanvas.tsx b/src/actions/actionCanvas.tsx index 2194f63b12..f61f57dbd3 100644 --- a/src/actions/actionCanvas.tsx +++ b/src/actions/actionCanvas.tsx @@ -265,7 +265,21 @@ export const zoomToFit = ({ 30.0, ) as NormalizedZoomValue; - scrollX = (appState.width / 2) * (1 / newZoomValue) - centerX; + let appStateWidth = appState.width; + + if (appState.openSidebar) { + const sidebarDOMElem = document.querySelector( + ".sidebar", + ) as HTMLElement | null; + const sidebarWidth = sidebarDOMElem?.offsetWidth ?? 0; + const isRTL = document.documentElement.getAttribute("dir") === "rtl"; + + appStateWidth = !isRTL + ? appState.width - sidebarWidth + : appState.width + sidebarWidth; + } + + scrollX = (appStateWidth / 2) * (1 / newZoomValue) - centerX; scrollY = (appState.height / 2) * (1 / newZoomValue) - centerY; } else { newZoomValue = zoomValueToFitBoundsOnViewport(commonBounds, {