import Stats from 'three/examples/jsm/libs/stats.module.js';
import EventEmitter from './EventEmitter';
import { Clock } from 'three';
import { Assets } from './Assets';
import { Optional } from '../helpers/typeHelper';
import { IViewer, SpeckleView, SunLightConfiguration, ViewerEvent, ViewerParams } from '../IViewer';
import { World } from './World';
import { WorldTree } from './tree/WorldTree';
import SpeckleRenderer from './SpeckleRenderer';
import { PropertyInfo, PropertyManager } from './filtering/PropertyManager';
import { DataTree } from './tree/DataTree';
import { Query, QueryArgsResultMap, QueryResult } from './queries/Query';
import { Utils } from './Utils';
import { Extension } from './extensions/core-extensions/Extension';
import { IProvider } from './extensions/core-extensions/Providers';
import Input from './input/Input';
import { Loader } from './loaders/Loader';
export declare class Viewer extends EventEmitter implements IViewer {
    /** Container and optional stats element */
    protected container: HTMLElement;
    protected stats: Optional<Stats>;
    /** Viewer params used at init time */
    protected startupParams: ViewerParams;
    /** Viewer components */
    protected tree: WorldTree;
    protected world: World;
    static Assets: Assets;
    speckleRenderer: SpeckleRenderer;
    protected propertyManager: PropertyManager;
    /** Misc members */
    protected inProgressOperations: number;
    protected clock: Clock;
    protected loaders: {
        [id: string]: Loader;
    };
    protected extensions: {
        [id: string]: Extension | IProvider;
    };
    /** various utils/helpers */
    protected utils: Utils;
    /** Gets the World object. Currently it's used for info mostly */
    get World(): World;
    get Utils(): Utils;
    get input(): Input;
    createExtension<T extends Extension>(type: new (viewer: IViewer, ...args: any[]) => T): T;
    getExtension<T extends Extension | IProvider>(type: new (viewer: IViewer, ...args: any[]) => T): T;
    constructor(container: HTMLElement, params?: ViewerParams);
    getContainer(): HTMLElement;
    getRenderer(): SpeckleRenderer;
    resize(): void;
    requestRender(flags?: number): void;
    private frame;
    private update;
    private render;
    init(): Promise<void>;
    on(eventType: ViewerEvent, listener: (arg: any) => void): void;
    getObjectProperties(resourceURL?: string, bypassCache?: boolean): Promise<PropertyInfo[]>;
    getDataTree(): DataTree;
    getWorldTree(): WorldTree;
    query<T extends Query>(query: T): QueryArgsResultMap[T['operation']];
    queryAsync(query: Query): Promise<QueryResult>;
    setLightConfiguration(config: SunLightConfiguration): void;
    getViews(): SpeckleView[];
    screenshot(): Promise<string>;
    /**
     * OBJECT LOADING/UNLOADING
     */
    loadObject(loader: Loader, zoomToObject?: boolean): Promise<void>;
    cancelLoad(resource: string, unload?: boolean): Promise<void>;
    unloadObject(resource: string): Promise<void>;
    unloadAll(): Promise<void>;
    dispose(): void;
}
