import { Camera } from 'three';
import { TypedEventNode } from './_Base';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
import { BaseViewerType } from '../../viewers/_Base';
export interface CameraControls {
    name?: string;
    enabled?: boolean;
    dispose: () => void;
    update: (delta: number) => void;
    addEventListener: (eventName: string, callback: () => void) => void;
    removeEventListener: (eventName: string, callback: () => void) => void;
}
export declare abstract class TypedCameraControlsEventNode<K extends NodeParamsConfig> extends TypedEventNode<K> {
    private _controls_by_viewer;
    applyControls(camera: Camera, viewer: BaseViewerType): Promise<CameraControls | undefined>;
    controls_id(): string;
    abstract updateRequired(): boolean;
    cook(): void;
    abstract setupControls(controls: CameraControls): void;
    abstract disposeControlsForHtmlElementId(html_element_id: string): void;
    abstract createControlsInstance(camera: Camera, element: HTMLElement): Promise<CameraControls>;
    abstract endEventName(): string;
}
export type BaseCameraControlsEventNodeType = TypedCameraControlsEventNode<any>;
