import { type Ref } from 'vue'; export interface PanZoomOptions { minScale?: number; maxScale?: number; step?: number; getContainer: () => HTMLElement | null; } export interface MarqueeRect { x: number; y: number; width: number; height: number; /** * Captured at the start of the marquee gesture. `true` when the * user held Shift while pressing the mouse — the consumer * (`onMarqueeEnd`) uses this to decide between extending the * existing selection set (shift) and replacing it (no shift). */ shiftKey?: boolean; } export declare function usePanZoom(opts: PanZoomOptions): { scale: Ref; offsetX: Ref; offsetY: Ref; isPanning: Ref; panMoved: Ref; onWheel: (e: WheelEvent) => void; zoomIn: () => void; zoomOut: () => void; zoomTo100: () => void; startPan: (e: PointerEvent | MouseEvent) => void; startMarquee: (worldX: number, worldY: number, opts?: { shift?: boolean; }) => void; updateMarquee: (worldX: number, worldY: number) => void; isMarquee: Ref; marquee: { x: number; y: number; width: number; height: number; shiftKey?: boolean | undefined; }; marqueeVersion: Ref; setOnMarqueeEnd: (cb: (() => void) | null) => void; resetView: (layoutWidth: number, layoutHeight: number, rootY: number, padding?: number) => void; centerOn: (worldX: number, worldY: number, nodeW: number, nodeH: number, padding?: number) => void; };