// Types for the ported JS 2D engine (Viewer2D.js). Colocated so tsc resolves // `./Viewer2D.js` imports without allowJs. Only the methods the app uses are typed. import type { CadSpace } from './cadSpaces'; export class Viewer2D { constructor(container: HTMLElement); /** Render a DWG/DXF parseResult. `keepView` preserves pan/zoom on re-render. */ load(result: unknown, opts?: { keepView?: boolean; keepTheme?: boolean; spaceHandle?: string | number | null }): void; /** Zoom-extents to the loaded drawing. */ fit(): void; /** Resync renderer/camera to the container size (call after un-hiding). */ resize(): void; onSelect(cb: (entity: unknown) => void): void; setTheme(dark: boolean): void; setGrid(visible: boolean): void; getLayerInfo(): { name: string; colorHex: string; count: number; visible: boolean }[]; setHiddenLayers(nameSet: Set): void; /** Model / Paper (Layout) spaces for the loaded drawing. */ getSpaces(): CadSpace[]; getActiveSpace(): string | null; /** Switch Model ↔ Layout; re-renders (fit unless keepView). */ setSpace(spaceHandle: string | number | null, opts?: { keepView?: boolean }): void; getZoomPercent(): number; onViewChange(cb: () => void): void; /** Screen client coords → drawing world (Z=0 plane). */ screenToWorld(clientX: number, clientY: number): { x: number; y: number; z: number } | null; /** Live CAD coords under the cursor; null when pointer leaves the canvas. */ onPointerWorld(cb: ((p: { x: number; y: number; z: number } | null) => void) | null): void; startMeasure(cb: (r: { phase: string; ax: number; ay: number; az: number; bx: number; by: number; bz: number; d: number }) => void): void; stopMeasure(): void; }