import { Camera } from 'three/src/cameras/Camera';
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: () => 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;
    apply_controls(camera: Camera, viewer: BaseViewerType): Promise<CameraControls | undefined>;
    controls_id(): string;
    abstract update_required(): boolean;
    abstract setup_controls(controls: CameraControls): void;
    abstract dispose_controls_for_html_element_id(html_element_id: string): void;
    abstract create_controls_instance(camera: Camera, element: HTMLElement): Promise<CameraControls>;
}
export declare type BaseCameraControlsEventNodeType = TypedCameraControlsEventNode<any>;
