diff --git a/src/main.ts b/src/main.ts index 163119c..ee9a293 100644 --- a/src/main.ts +++ b/src/main.ts @@ -146,10 +146,9 @@ export default function () { if (dir.includes('top')) ny = p.y - dy / zoom figma.ui.reposition(nx, ny) } - // Док-режим во время live-ресайза не трогаем (финальный RESIZE_WINDOW пересчитает). }) - // Ресайз окна плагина (drag за угол в UI -> useWindowResize -> RESIZE_WINDOW) + // Ресайз окна плагина (кастомные ручки по периметру -> RESIZE_WINDOW по pointerup) on('RESIZE_WINDOW', function (windowSize: { width: number; height: number }) { const { width, height } = clampWindowSize(windowSize) lastSize = { width, height } diff --git a/src/ui.tsx b/src/ui.tsx index 53310e9..1eb46ea 100644 --- a/src/ui.tsx +++ b/src/ui.tsx @@ -62,10 +62,10 @@ function Plugin () { } | null>(null) const [copied, setCopied] = useState(false) - // Кастомный ресайз по ВСЕМУ периметру (8 ручек: 4 края + 4 угла), а не только - // снизу-справа (что даёт нативный useWindowResize). Левый/верхний края двигают окно - // через figma.ui.reposition, чтобы окно не "уезжало" при расширении влево/вверх. - // В процессе драга шлём RESIZE_WINDOW_DRAG (live), по pointerup — финальный RESIZE_WINDOW. + // Кастомный ресайз по ВСЕМУ периметру (8 ручек: 4 края + 4 угла). Нативный useWindowResize + // давал только bottom-right; здесь handle'ы ловят pointerdown по всему периметру и шлют + // dir + dx/dy в main, который для left/top двигает окно через reposition. + // Live-обновление: RESIZE_WINDOW_DRAG во время drag'а, финальный RESIZE_WINDOW по pointerup. function startResize (e: PointerEvent, dir: string) { e.preventDefault() e.stopPropagation() @@ -208,6 +208,22 @@ function Plugin () { } } + // Обновляем цифры размера и инфо ТОЛЬКО после окончания drag'а (отпускание кнопки). + // К моменту pointerup Figma уже применила новый размер окна. + useEffect(function () { + const handlePointerUp = function () { + setCurrentWindowSize({ + width: window.innerWidth, + height: window.innerHeight + }) + refreshInfo() + } + window.addEventListener('pointerup', handlePointerUp) + return function () { + window.removeEventListener('pointerup', handlePointerUp) + } + }, []) + // Первичное заполнение инфо при старте плагина. useEffect(function () { refreshInfo() @@ -353,7 +369,7 @@ function Plugin () { {/* Декоративная иконка drag-хендла в правом нижнем углу (как в старом плагине). - pointerEvents:none — она не ловит события. */} + pointerEvents:none — сам drag ловит невидимый div от useWindowResize. */}