/// <reference types="webxr" />
import { Camera, WebGLRenderer } from 'three';
import type { PolyScene } from '../../engine/scene/PolyScene';
import { CoreWebXRControllerOptions } from './Common';
import { CoreWebXRControllerContainer } from './CoreWebXRControllerContainer';
export type OnWebXRSessionStartedCallback = (session: XRSession) => Promise<void>;
export declare abstract class BaseCoreWebXRController {
    protected scene: PolyScene;
    protected renderer: WebGLRenderer;
    protected camera: Camera;
    private canvas;
    protected options: CoreWebXRControllerOptions;
    protected controllerContainers: CoreWebXRControllerContainer[];
    constructor(scene: PolyScene, renderer: WebGLRenderer, camera: Camera, canvas: HTMLCanvasElement, options: CoreWebXRControllerOptions);
    getController(controllerIndex: number): CoreWebXRControllerContainer;
    mount(): void;
    unmount(): void;
    requestSession(sessionInit: XRSessionInit, callback: OnWebXRSessionStartedCallback): void;
    private _addStartEndEvents;
    private _removedStartEndEvents;
    private _createController;
    protected _addControllerEvents(controllerContainer: CoreWebXRControllerContainer, controllerIndex: number): void;
    process(frame?: XRFrame): void;
    private _onSessionStartBound;
    private _onSessionEndBound;
    protected _onSessionStart(): void;
    protected _onSessionEnd(): void;
    /**
     *
     * BUTTONS
     *
     */
    private _buttonByCanvasId;
    abstract createButton(): HTMLElement;
    private _mountButton;
    abstract attachButton(parentElement: HTMLElement, buttonElement: HTMLElement): void;
    private _unmountButton;
}
