export type Path2DRenderStyleResult = {
    type: "stroke";
} | {
    type: "fill";
    fillRule?: CanvasFillRule;
} | {
    type: "both";
    fillRule?: CanvasFillRule;
};
export interface Path2DRenderInstance {
    getPath(): Path2D | undefined | null;
    style(ctx: CanvasRenderingContext2D): Path2DRenderStyleResult | undefined;
    afterRender?(ctx: CanvasRenderingContext2D): void;
}
declare class Path2DGroup {
    protected items: Set<Path2DRenderInstance>;
    protected path: {
        get: () => Path2D;
        reset(): void;
        clear(): void;
    };
    protected applyStyles(ctx: any): Path2DRenderStyleResult;
    add(item: Path2DRenderInstance): void;
    delete(item: any): void;
    render(ctx: CanvasRenderingContext2D): void;
}
export declare class BatchPath2DRenderer {
    protected onChange: () => void;
    constructor(onChange: () => void);
    protected indexes: Map<number, Map<string, Path2DGroup>>;
    protected itemParams: Map<Path2DRenderInstance, {
        zIndex: number;
        group: string;
    }>;
    orderedPaths: {
        get: () => any[];
        reset(): void;
        clear(): void;
    };
    protected getGroup(zIndex: number, group: string): Path2DGroup;
    add(item: Path2DRenderInstance, params: {
        zIndex: number;
        group: string;
    }): void;
    update(item: Path2DRenderInstance, params: {
        zIndex: number;
        group: string;
    }): void;
    delete(item: Path2DRenderInstance): void;
}
export {};
