/** * Live drag preview for canvas elements. * * Two coordinate spaces, because the painted box and the operate chrome * do not live in the same CSS transform: * * - Slide space: `#editable-element-* > *` sits inside `.viewport`, which * already has `transform: scale(canvasScale)`. `left` / `top` here are * the same unit the store commits on drop. * - Visual space: `#operate-element-*` and `.multi-select-operate` sit in * `.viewport-wrapper` (already sized to the *visual* slide). Position * here is slide × canvasScale. * * Most elements use `left` / `top` so auto-size text keeps the same * measurement and rasterization path during and after the gesture. Complex * transparent surfaces can opt into `data-live-translate3d`; those keep * their raster on a compositor layer while dragging, then settle to the * committed `left` / `top` on pointerup. */ export type LiveOffsetPosition = { id: string; left: number; top: number; }; export type LiveOffsetNodes = { box?: { style: CSSStyleDeclaration; } | null; operate?: { style: CSSStyleDeclaration; } | null; multi?: { style: CSSStyleDeclaration; } | null; }; export type LivePositionCss = { slideLeft: string; slideTop: string; visualLeft: string; visualTop: string; }; export declare const livePositionCss: (left: number, top: number, canvasScale: number) => LivePositionCss; export declare const liveTranslate3dCss: (dx: number, dy: number) => string; export declare const applyLivePositionStyles: (nodes: LiveOffsetNodes, left: number, top: number, canvasScale: number) => void; export declare const readLiveMultiOrigin: (canvasScale: number) => { left: number; top: number; } | null; export declare const setLiveElementOffset: (origins: readonly LiveOffsetPosition[], dxSlide: number, dySlide: number, canvasScale: number, multiOrigin?: { left: number; top: number; } | null) => void; export declare const clearLiveElementOffset: (origins: readonly LiveOffsetPosition[], canvasScale: number, multiOrigin?: { left: number; top: number; } | null) => void; export declare const settleLiveElementOffset: (positions: readonly LiveOffsetPosition[], canvasScale: number) => void;