From 10c986d653c31700b5f0518e97c2710ee19cba4f Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sat, 3 Oct 2026 21:17:53 +0200 Subject: [PATCH] fix: preserve manual dock-edge resize width across zoom/pan (save dockEdgeSize in placement) --- src/main.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main.ts b/src/main.ts index 7aadb44..02744fd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -57,7 +57,7 @@ export default function () { // re-persist it (otherwise it would overwrite the maximized flag with undefined). let maximizedState = false type Placement = - | { mode: 'dock'; position: DockPosition } + | { mode: 'dock'; position: DockPosition; dockEdgeSize: number } | { mode: 'free'; x: number; y: number; w: number; h: number; maximized?: boolean } let saveTimer: ReturnType | null = null function savePlacement (p: Placement) { @@ -321,7 +321,14 @@ export default function () { } if (dockedPosition !== null) { applyDock(dockedPosition, width, height, false) - savePlacement({ mode: 'dock', position: dockedPosition }) + // Remember the manually-resized size so the dock-edge canonical formula + // (used by the poller on zoom/pan) picks it up instead of the default 320. + if (dockedPosition === 'center-left' || dockedPosition === 'center-right') { + dockEdgeSize = width + } else if (dockedPosition === 'top-center' || dockedPosition === 'bottom-center') { + dockEdgeSize = height + } + savePlacement({ mode: 'dock', position: dockedPosition, dockEdgeSize }) } else { // Free (or center one-shot): manual resize clears the maximized flag. maximizedState = false @@ -383,7 +390,7 @@ export default function () { position === 'center-left' || position === 'center-right' if (isEdge) { // Edges are held docked — persist as dock so re-open re-pins to the edge. - savePlacement({ mode: 'dock', position: position }) + savePlacement({ mode: 'dock', position: position, dockEdgeSize }) } else { // Corners / center are one-shot — remember the EXACT size+position (free). saveFreeFromCurrent() @@ -629,7 +636,9 @@ export default function () { // Edge dock: stretch to its canonical size and pin (held across zoom/pan). dockedPosition = saved.position maximizedState = false - const state = computeDock(saved.position, 320, 200, true) + const savedEdge = saved.dockEdgeSize || DEFAULT_DOCK_EDGE + dockEdgeSize = savedEdge + const state = computeDock(saved.position, savedEdge, savedEdge, true) figma.ui.resize(Math.max(1, state.width), Math.max(1, state.height)) lastSize = { width: clampWindowSize(state).width, height: clampWindowSize(state).height } setTimeout(function () {