import type { IVim } from '../shared/vim';
import type { ILogger } from './logger';
import { ColorManager } from './colorManager';
import { Element3D } from './element3d';
import { LoadRequest } from './loadRequest';
import { VisibilitySynchronizer } from './visibility';
import { Renderer } from './renderer';
import { RpcSafeClient, VimSource } from './rpcSafeClient';
import * as THREE from 'three';
export declare class Vim implements IVim<Element3D> {
    readonly type = "ultra";
    readonly source: VimSource;
    private _handle;
    private _request;
    private readonly _rpc;
    private _colors;
    private _renderer;
    private _logger;
    readonly visibility: VisibilitySynchronizer;
    private _elementColors;
    private _updatedColors;
    private _removedColors;
    private _updateScheduled;
    private _elementCount;
    private _objects;
    constructor(rpc: RpcSafeClient, color: ColorManager, renderer: Renderer, source: VimSource, logger: ILogger);
    getElement(elementIndex: number): Element3D;
    getElementsFromId(id: number): Element3D[];
    getElementFromIndex(element: number): Element3D;
    getObjectsInBox(box: THREE.Box3): Element3D[];
    getAllElements(): Element3D[];
    get handle(): number;
    get connected(): boolean;
    connect(): LoadRequest;
    disconnect(): void;
    private _load;
    private getErrorType;
    private _getHandle;
    getBoundingBoxForElements(elements: number[] | 'all'): Promise<THREE.Box3 | undefined>;
    getBoundingBox(): Promise<THREE.Box3 | undefined>;
    getColor(elementIndex: number): THREE.Color | undefined;
    setColor(elementIndex: number[], color: THREE.Color | undefined): Promise<void>;
    setColors(elements: number[], color: (THREE.Color | undefined)[]): Promise<void>;
    private applyColor;
    clearColor(elements: number[] | 'all'): void;
    reapplyColors(): void;
    private scheduleColorUpdate;
    private updateRemote;
    private updateRemoteColors;
}
