import { BaseCameraObjNodeType } from '../../../nodes/obj/_BaseCamera';
import { BaseInputEventNodeType } from '../../../nodes/event/_BaseInput';
import { SceneEventsDispatcher } from './EventsDispatcher';
import { BaseNodeType } from '../../../nodes/_Base';
import { Intersection } from 'three/src/core/Raycaster';
import { CoreGraphNodeId } from '../../../../core/graph/CoreGraph';
import { BaseViewerType } from '../../../viewers/_Base';
interface EventContextValue {
    node?: BaseNodeType;
    intersect?: Intersection;
}
export interface EventContext<E extends Event> {
    viewer?: Readonly<BaseViewerType>;
    event?: Readonly<E>;
    cameraNode?: Readonly<BaseCameraObjNodeType>;
    value?: EventContextValue;
}
export declare abstract class BaseSceneEventsController<E extends Event, T extends BaseInputEventNodeType> {
    private dispatcher;
    protected _nodes_by_graph_node_id: Map<CoreGraphNodeId, T>;
    protected _require_canvas_event_listeners: boolean;
    constructor(dispatcher: SceneEventsDispatcher);
    registerNode(node: T): void;
    unregisterNode(node: T): void;
    abstract type(): string;
    abstract acceptedEventTypes(): string[];
    processEvent(event_context: EventContext<E>): void;
    updateViewerEventListeners(): void;
    private _active_event_types;
    activeEventTypes(): string[];
    private _update_active_event_types;
}
export declare type BaseSceneEventsControllerType = BaseSceneEventsController<Event, BaseInputEventNodeType>;
export declare class BaseSceneEventsControllerClass extends BaseSceneEventsController<Event, BaseInputEventNodeType> {
    type(): string;
    acceptedEventTypes(): string[];
}
export {};
