import { type TreeNode, WorldTree } from '../tree/WorldTree.js';
import { type IViewer } from '../../IViewer.js';
import { Extension } from './Extension.js';
export declare enum VisualDiffMode {
    PLAIN = 0,
    COLORED = 1
}
export interface DiffResult {
    unchanged: Array<TreeNode>;
    added: Array<TreeNode>;
    removed: Array<TreeNode>;
    modified: Array<Array<TreeNode>>;
}
export declare class DiffExtension extends Extension {
    get enabled(): boolean;
    set enabled(value: boolean);
    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 buildIdMaps;
    private getDiff;
    private diffIterative;
    updateVisualDiff(time?: number, mode?: VisualDiffMode): void;
    private setDiffTime;
    private buildMaterialGroups;
    private resetMaterialGroups;
    private getVisualDiffResult;
    private getColoredMaterialGroups;
    private getPlainMaterialGroups;
    private getBatchesSubgroups;
}
