import type { ViewportState } from "./types.js"; /** * Controls the pan/zoom viewport of the canvas. * * Uses the Pointer Events API (covering mouse, touch, and pen) with * `requestAnimationFrame`-batched rendering so interactions stay smooth at * 60 fps with no perceptible input lag. * * - **Mouse**: left-button drag to pan, scroll wheel to zoom toward cursor. * - **Touch**: one-finger drag to pan, two-finger pinch to zoom. * - **Keyboard**: handled externally in `keyboard.ts` via `zoomAt` / `set`. */ export declare class ViewportController { /** The host div — receives the `is-panning` CSS class. */ private readonly _host; /** The SVG element that receives pointer/wheel events. */ private readonly _svg; /** The `` element whose `transform` attribute is updated. */ private readonly _group; /** The dot-grid `` element (optional). Kept in sync with the viewport. */ private readonly _gridPattern; /** Called on every rendered frame with the new viewport state. */ private readonly _onChanged; private _tx; private _ty; private _scale; private _raf; private _dirty; private _dragging; private _lastX; private _lastY; private _dragDist; private _locked; private _activePointers; private _lastPinchDist; constructor( /** The host div — receives the `is-panning` CSS class. */ _host: HTMLElement, /** The SVG element that receives pointer/wheel events. */ _svg: SVGSVGElement, /** The `` element whose `transform` attribute is updated. */ _group: SVGGElement, /** The dot-grid `` element (optional). Kept in sync with the viewport. */ _gridPattern: SVGPatternElement | null, /** Called on every rendered frame with the new viewport state. */ _onChanged: (state: ViewportState) => void); /** Current viewport state snapshot. */ get state(): ViewportState; /** * When locked, pointer-down is ignored (no new pan starts) and pointer-move * does not continue any in-progress pan. Scroll-wheel zoom is unaffected. */ lock(locked: boolean): void; /** * Whether the last pointer interaction was a drag (as opposed to a click). * The canvas uses this to suppress `element:click` events after panning. */ get didPan(): boolean; /** Programmatically sets viewport state. Any omitted fields are unchanged. */ set(state: Partial): void; /** * Zooms the viewport by `factor`, keeping the point at (`screenX`, `screenY`) * fixed in screen space (zoom-toward-cursor behaviour). */ zoomAt(screenX: number, screenY: number, factor: number): void; /** Removes all event listeners and cancels any pending animation frame. */ destroy(): void; private _scheduleApply; private _apply; private readonly _onWheel; private readonly _onPointerDown; private readonly _onPointerMove; private readonly _onPointerUp; private _bindEvents; private _unbindEvents; } //# sourceMappingURL=viewport.d.ts.map