import { WorldTree } from '../tree/WorldTree';
import { IViewer } from '../../IViewer';
import { Extension } from './core-extensions/Extension';
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 DiffExtension extends Extension {
    protected tree: WorldTree;
    private addedMaterialMesh;
    private changedNewMaterialMesh;
    private changedOldMaterialMesh;
    private removedMaterialMesh;
    private addedMaterialPoint;
    private changedNewMaterialPoint;
    private changedOldMaterialPoint;
    private removedMaterialPoint;
    private addedMaterials;
    private changedOldMaterials;
    private changedNewMaterials;
    private removedMaterials;
    private _materialGroups;
    private _visualDiff;
    private _diffTime;
    private _diffMode;
    constructor(viewer: IViewer);
    private dynamicallyLoadedDiffResources;
    diff(urlA: string, urlB: string, mode: VisualDiffMode, authToken?: string): Promise<DiffResult>;
    /** Currently, the diff does not store the existing materials. We can do that if we need to */
    undiff(): Promise<void>;
    private intersection;
    private buildIdMaps;
    private getDiff;
    private diffBoolean;
    private diffIterative;
    updateVisualDiff(time?: number, mode?: VisualDiffMode): void;
    private setDiffTime;
    private buildMaterialGroups;
    private resetMaterialGroups;
    private getVisualDiffResult;
    private getColoredMaterialGroups;
    private getPlainMaterialGroups;
    private getBatchesSubgroups;
}
export {};
