import { Extension } from './Extension.js';
import { NodeRenderView } from '../tree/NodeRenderView.js';
import { Material, Vector2 } from 'three';
import { type IViewer, type SelectionEvent } from '../../IViewer.js';
import { type DisplayStyle, type RenderMaterial } from '../materials/Materials.js';
import { type MaterialOptions } from '../materials/MaterialOptions.js';
import { type TreeNode } from '../tree/WorldTree.js';
import { CameraController } from './CameraController.js';
export interface SelectionExtensionOptions {
    selectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    hoverMaterialData?: RenderMaterial & DisplayStyle & MaterialOptions;
}
export declare const DefaultSelectionExtensionOptions: SelectionExtensionOptions;
export declare class SelectionExtension extends Extension {
    protected cameraProvider: CameraController;
    get inject(): (typeof CameraController)[];
    protected selectedNodes: Array<TreeNode>;
    protected selectionRvs: {
        [id: string]: NodeRenderView;
    };
    protected selectionMaterials: {
        [id: string]: Material;
    };
    protected hoverRv: NodeRenderView | null;
    protected hoverMaterial: Material | null;
    protected selectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected hoverMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected transparentSelectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected transparentHoverMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected hiddenSelectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected _enabled: boolean;
    protected _options: SelectionExtensionOptions;
    get enabled(): boolean;
    set enabled(value: boolean);
    get options(): SelectionExtensionOptions;
    set options(value: SelectionExtensionOptions);
    constructor(viewer: IViewer, cameraProvider: CameraController);
    getSelectedObjects(): Array<Record<string, unknown>>;
    getSelectedNodes(): Array<TreeNode>;
    selectObjects(ids: Array<string>, multiSelect?: boolean): void;
    /**TO DO: This is redundant */
    unselectObjects(ids: Array<string>): void;
    clearSelection(nodes?: Array<TreeNode>): void;
    protected onObjectClicked(selection: SelectionEvent | null): void;
    protected onObjectDoubleClick(selectionInfo: SelectionEvent | null): void;
    protected onPointerMove(e: Vector2 & {
        event: Event;
    }): void;
    protected applySelection(): void;
    protected removeSelection(rvs?: Array<NodeRenderView>): void;
    protected applyHover(renderView: NodeRenderView | null): void;
    protected removeHover(): void;
}
