import type { Vector2, Vector3 } from '../../types/Math';
import type { RenderControllerProxy } from '../../controllers/RenderControllerProxy';
export type RGB = `rgb(${number}, ${number}, ${number})`;
export type RGBA = `rgba(${number}, ${number}, ${number}, ${number})`;
export type HEX = `#${string}`;
export type CssColor = RGB | RGBA | HEX | string;
export type CssFont = string;
type Anchorable = {
    anchor: Vector3;
    anchorOffset?: Vector2;
};
type AnchorableLine = {
    anchorStart: Vector3;
    anchorEnd: Vector3;
};
export type RadiusEllipse = {
    center: Vector2;
    radius: Vector2;
    stroke: CssColor;
    fill?: CssColor;
    strokeWidth: number;
    zIndex?: number;
};
export type BoxEllipse = {
    min: Vector2;
    max: Vector2;
    stroke: CssColor;
    fill?: CssColor;
    strokeWidth: number;
    zIndex?: number;
};
export type Line = {
    start: Vector2;
    end: Vector2;
    stroke: CssColor;
    strokeWidth: number;
    strokeDasharray?: string;
    opacity?: number;
    zIndex?: number;
};
export type Arrow = {
    start: Vector2;
    end: Vector2;
    stroke: CssColor;
    strokeWidth: number;
    zIndex?: number;
};
export type Text = {
    origin: Vector2;
    text: string;
    font?: CssFont;
    fill: CssColor;
    zIndex?: number;
};
export type Rect = {
    width: number;
    height: number;
    x: number;
    y: number;
    radius?: Vector2;
    fill?: CssColor;
    stroke?: CssColor;
    strokeWidth?: number;
    zIndex?: number;
};
export type SvgData = {
    ellipses?: (BoxEllipse | RadiusEllipse)[];
    lines?: Line[];
    arrows?: Arrow[];
    texts?: Text[];
    rects?: Rect[];
};
type AnchoredBoxEllipse = BoxEllipse & Anchorable;
export type AnchoredRadiusEllipse = Omit<RadiusEllipse, 'center'> & Anchorable;
export type AnchoredLine = Omit<Line, 'start' | 'end'> & AnchorableLine;
type AnchoredArrow = Omit<Arrow, 'start' | 'end'> & AnchorableLine;
type AnchoredText = Omit<Text, 'origin'> & Anchorable;
type AnchoredRect = Omit<Rect, 'x' | 'y'> & Anchorable;
export type AnchoredSvgData = {
    ellipses?: (AnchoredBoxEllipse | AnchoredRadiusEllipse)[];
    lines?: AnchoredLine[];
    arrows?: AnchoredArrow[];
    texts?: AnchoredText[];
    rects?: AnchoredRect[];
};
export declare class SvgRenderer {
    private svgEl;
    private dom;
    private arrowId;
    private camera;
    private anchoredSvgData;
    private _renderControllerProxy;
    private _globalOffset;
    constructor();
    private static createSvgEl;
    private onRenderReady;
    private onResize;
    private set globalOffset(value);
    private get globalOffset();
    set renderControllerProxy(renderControllerProxy: RenderControllerProxy);
    get renderControllerProxy(): RenderControllerProxy;
    private hasAnchoredElements;
    private onCameraUpdated;
    private computeFromAnchored;
    private saveAnchoredSvgData;
    private collateByZIndex;
    draw(svgData: SvgData): void;
    drawAnchored(anchoredSvgData: AnchoredSvgData): Promise<void>;
    drawEllipse(ellipse: BoxEllipse | RadiusEllipse): void;
    drawLine(line: Line): void;
    drawArrow(arrow: Arrow): void;
    drawText(text: Text): void;
    drawRect(rect: Rect): void;
    private clipLine;
    private _clear;
    clear(): void;
    hasContent(): boolean;
    dispose(): void;
}
export {};
