import SpeckleStandardMaterial from './materials/SpeckleStandardMaterial';
import { WorldTree } from './tree/WorldTree';
import SpecklePointMaterial from './materials/SpecklePointMaterial';
import SpeckleLineMaterial from './materials/SpeckleLineMaterial';
type SpeckleObject = Record<string, any>;
export declare enum VisualDiffMode {
    PLAIN = 0,
    COLORED = 1
}
export interface DiffResult {
    unchanged: Array<SpeckleObject>;
    added: Array<SpeckleObject>;
    removed: Array<SpeckleObject>;
    modified: Array<Array<SpeckleObject>>;
}
export declare class Differ {
    private tree;
    private addedMaterialMesh;
    private changedNewMaterialMesh;
    private changedOldMaterialMesh;
    private removedMaterialMesh;
    private addedMaterialPoint;
    private changedNewMaterialPoint;
    private changedOldMaterialPoint;
    private removedMaterialPoint;
    /** Urgh, state */
    private addedMaterials;
    private changedOldMaterials;
    private changedNewMaterials;
    private removedMaterials;
    private _materialGroups;
    get materialGroups(): any;
    constructor(tree: WorldTree);
    private intersection;
    private buildIdMaps;
    diff(urlA: string, urlB: string): Promise<DiffResult>;
    private diffBoolean;
    private diffIterative;
    setDiffTime(time: number): void;
    buildMaterialGroups(mode: VisualDiffMode, diffResult: DiffResult, batchMaterials?: {
        [id: string]: SpeckleStandardMaterial | SpecklePointMaterial | SpeckleLineMaterial;
    }): any;
    resetMaterialGroups(): void;
    private getVisualDiffResult;
    private getColoredMaterialGroups;
    private getPlainMaterialGroups;
    private getBatchesSubgroups;
}
export {};
