import type { Node } from '../Node'; import type { Group } from '../shapes/Group'; import type { FillStyle, StrokeStyle } from '../types'; export interface RenderContext { width: number; height: number; pixelRatio: number; background: string; focusedNodeId?: string | null; highContrast?: boolean; uiTheme?: import('../components/uiTheme').UiThemeTokens; } export declare abstract class Renderer { protected width: number; protected height: number; protected pixelRatio: number; protected background: string; protected focusedNodeId: string | null; protected highContrast: boolean; protected dirtyRegions: Array<{ x: number; y: number; width: number; height: number; }>; protected fullRedraw: boolean; protected hasRendered: boolean; abstract init(container: HTMLElement, options: RenderContext): void; abstract resize(width: number, height: number, pixelRatio: number): void; abstract render(root: Group, cameraMatrix?: import('../utils').Matrix2D): void; abstract destroy(): void; abstract toDataURL(type?: string, quality?: number): string; abstract getElement(): HTMLElement | SVGSVGElement | HTMLCanvasElement; markDirty(x?: number, y?: number, w?: number, h?: number): void; clearDirty(): void; forceFullRedraw(): void; setRenderState(state: { focusedNodeId?: string | null; highContrast?: boolean; }): void; get needsFullRedraw(): boolean; protected applyFillStyle(_ctx: CanvasRenderingContext2D | SVGElement, fill: FillStyle, setFill: (value: string | CanvasGradient | CanvasPattern) => void): void; protected applyStrokeStyle(_ctx: CanvasRenderingContext2D, stroke: StrokeStyle, setStroke: (value: string | CanvasGradient | CanvasPattern) => void): void; protected applyShadow(ctx: CanvasRenderingContext2D, shadow: import('../types').Shadow | null): void; /** Traverse and draw scene graph */ protected traverse(node: Node, drawFn: (node: Node) => void): void; }