fix: preserve manual dock-edge resize width across zoom/pan (save dockEdgeSize in placement)

This commit is contained in:
Hermes Agent committed 2026-10-03 21:17:53 +02:00
1 parent ee40c896de
commit 10c986d653
1 file changed
+13 -4
+13 -4
View File
@@ -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<typeof setTimeout> | 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 () {