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;
    isPathVisible?(): boolean;
}
declare class Path2DChunk {
    protected items: Set<Path2DRenderInstance>;
    protected visibleItems: {
        get: () => Path2DRenderInstance[];
        reset(): void;
        clear(): void;
    };
    protected path: {
        get: () => Path2D;
        reset(): void;
        clear(): void;
    };
    protected applyStyles(ctx: CanvasRenderingContext2D): Path2DRenderStyleResult;
    add(item: Path2DRenderInstance): void;
    delete(item: Path2DRenderInstance): void;
    reset(): void;
    render(ctx: CanvasRenderingContext2D): void;
    get size(): number;
}
declare class Path2DGroup {
    private chunkSize;
    protected chunks: Path2DChunk[];
    protected itemToChunk: Map<Path2DRenderInstance, Path2DChunk>;
    constructor(chunkSize: number);
    add(item: Path2DRenderInstance): void;
    delete(item: Path2DRenderInstance): void;
    resetItem(item: Path2DRenderInstance): void;
    render(ctx: CanvasRenderingContext2D): void;
}
export declare class BatchPath2DRenderer {
    protected onChange: () => void;
    private chunkSize;
    constructor(onChange: () => void, chunkSize?: number);
    protected indexes: Map<number, Map<string, Path2DGroup>>;
    protected itemParams: Map<Path2DRenderInstance, {
        zIndex: number;
        group: string;
    }>;
    orderedPaths: {
        get: () => any[];
        reset(): void;
        clear(): void;
    };
    protected requestRender: () => 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;
    markDirty(item: Path2DRenderInstance): void;
}
export {};
