import type { IVim } from '../shared/vim';
import type { ILogger } from './logger';
import { ColorManager } from './colorManager';
import { Element3D } from './element3d';
import { LoadRequest } from './loadRequest';
import { StateSynchronizer } from './nodeState';
import { Renderer } from './renderer';
import { RpcSafeClient, VimSource } from './rpcSafeClient';
import * as THREE from 'three';
import { RGBA32 } from './rpcTypes';
export declare class Vim implements IVim<Element3D> {
    readonly source: VimSource;
    private _handle;
    private _request;
    private readonly _rpc;
    private _colors;
    private _renderer;
    private _logger;
    readonly nodeState: StateSynchronizer;
    private _nodeColors;
    private _updatedColors;
    private _updateScheduled;
    private _objects;
    constructor(rpc: RpcSafeClient, color: ColorManager, renderer: Renderer, source: VimSource, logger: ILogger);
    getElementFromInstanceIndex(instance: 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;
    getBoundingBoxNodes(nodes: number[] | 'all'): Promise<THREE.Box3 | undefined>;
    getBoundingBox(): Promise<THREE.Box3 | undefined>;
    getColor(node: number): RGBA32 | undefined;
    setColor(nodes: number[], color: RGBA32 | undefined): Promise<void>;
    setColors(nodes: number[], color: (RGBA32 | undefined)[]): Promise<void>;
    private applyColor;
    clearColor(nodes: number[] | 'all'): void;
    reapplyColors(): void;
    private scheduleColorUpdate;
    private updateRemote;
    private updateRemoteColors;
}
