export declare const WIDGET_CANVAS_CONTEXT: unique symbol; export interface WidgetRect { x: number; y: number; w: number; h: number; } export interface WidgetCanvasBounds { width: number; height: number; } export interface WidgetCanvasContext { readonly showGrid: boolean; readonly snap: boolean; readonly cellSize: number; readonly autoCells: number; readonly cellSizeMode: 'fixed' | 'auto'; /** Visual scale of the board (screen px / board px). Default 1. */ readonly scale?: number; getBounds: () => WidgetCanvasBounds; snapValue: (value: number) => number; snapRect: (rect: WidgetRect, minW: number, minH: number) => WidgetRect; clampRect: (rect: WidgetRect, minW: number, minH: number) => WidgetRect; } /** Tamaño de celda cuadrada para que quepan `autoCells` en el eje más corto del viewport */ export declare function computeAutoCellSize(boundsW: number, boundsH: number, autoCells: number): number; /** Tablero exacto N×N celdas dentro del viewport (sin cortes) — fit/fullscreen */ export declare function fitBoardToAutoCells(viewportW: number, viewportH: number, autoCells: number): { width: number; height: number; cellSize: number; }; /** * Scroll + auto: celda según viewport visible; tablero = múltiplos de celda * a partir de width/height deseados (sigue habiendo scroll). */ export declare function scrollBoardToAutoCells(viewportW: number, viewportH: number, desiredW: number, desiredH: number, autoCells: number): { width: number; height: number; cellSize: number; }; export declare function snapToGrid(value: number, cellSize: number, enabled: boolean): number; export declare function snapWidgetRect(rect: WidgetRect, cellSize: number, enabled: boolean, minW: number, minH: number): WidgetRect; export declare function clampWidgetRect(rect: WidgetRect, bounds: WidgetCanvasBounds, minW: number, minH: number): WidgetRect;