export type A3DXRSessionMode = "inline" | "immersive-vr" | "immersive-ar";
export type A3DXRReferenceSpaceType = "viewer" | "local" | "local-floor" | "bounded-floor" | "unbounded";
export type A3DXRHandedness = "none" | "left" | "right";
export interface A3DXRSystemLike {
    isSessionSupported?(mode: A3DXRSessionMode): Promise<boolean>;
    requestSession(mode: A3DXRSessionMode, options?: A3DXRSessionInit): Promise<A3DXRSessionLike>;
}
export interface A3DXRSessionInit {
    readonly requiredFeatures?: readonly string[];
    readonly optionalFeatures?: readonly string[];
}
export interface A3DXRSessionLike {
    readonly inputSources?: readonly A3DXRInputSourceLike[];
    requestReferenceSpace?(type: A3DXRReferenceSpaceType): Promise<A3DXRReferenceSpaceLike>;
    requestAnimationFrame?(callback: (time: number, frame: A3DXRFrameLike) => void): number;
    end?(): Promise<void>;
}
export interface A3DXRInputSourceLike {
    readonly handedness?: A3DXRHandedness;
    readonly targetRayMode?: "gaze" | "tracked-pointer" | "screen";
    readonly profiles?: readonly string[];
    readonly targetRaySpace?: unknown;
    readonly gripSpace?: unknown;
    readonly gamepad?: {
        readonly buttons?: readonly {
            readonly pressed?: boolean;
            readonly touched?: boolean;
            readonly value?: number;
        }[];
        readonly axes?: readonly number[];
        readonly hapticActuators?: readonly {
            pulse?(intensity: number, duration: number): Promise<boolean> | boolean;
        }[];
    };
}
export interface A3DXRFrameLike {
    getHitTestResults?(source: unknown): readonly A3DXRHitTestResultLike[];
    getPose?(space: unknown, baseSpace: A3DXRReferenceSpaceLike): A3DXRPoseLike | undefined;
}
export interface A3DXRReferenceSpaceLike {
    readonly type?: A3DXRReferenceSpaceType;
}
export interface A3DXRHitTestResultLike {
    readonly position?: readonly [number, number, number];
    readonly normal?: readonly [number, number, number];
}
export interface A3DXRPoseLike {
    readonly transform?: {
        readonly matrix?: readonly number[];
        readonly position?: readonly [number, number, number];
        readonly orientation?: readonly [number, number, number, number];
    };
}
export interface WebXRSessionControllerOptions {
    readonly xr?: A3DXRSystemLike;
    readonly mode?: A3DXRSessionMode;
    readonly requiredFeatures?: readonly string[];
    readonly optionalFeatures?: readonly string[];
    readonly referenceSpace?: A3DXRReferenceSpaceType;
}
export interface WebXRControllerSample {
    readonly handedness: A3DXRHandedness;
    readonly targetRayMode: "gaze" | "tracked-pointer" | "screen";
    readonly profiles: readonly string[];
    readonly triggerPressed: boolean;
    readonly squeezePressed: boolean;
    readonly primaryValue: number;
    readonly axes: readonly number[];
    readonly targetRayMatrix: readonly number[] | null;
    readonly gripMatrix: readonly number[] | null;
    readonly hapticActuatorCount: number;
}
export interface WebXRHitTestSample {
    readonly position: readonly [number, number, number];
    readonly normal: readonly [number, number, number];
}
export interface WebXRFrameSample {
    readonly mode: A3DXRSessionMode;
    readonly referenceSpace: A3DXRReferenceSpaceType;
    readonly active: boolean;
    readonly controllerCount: number;
    readonly controllers: readonly WebXRControllerSample[];
    readonly hitTestCount: number;
    readonly hitTests: readonly WebXRHitTestSample[];
}
export interface WebXRSessionStartResult {
    readonly mode: A3DXRSessionMode;
    readonly referenceSpace: A3DXRReferenceSpaceType;
    readonly supported: boolean;
    readonly started: boolean;
}
export declare class WebXRSessionController {
    readonly mode: A3DXRSessionMode;
    readonly requiredFeatures: readonly string[];
    readonly optionalFeatures: readonly string[];
    readonly referenceSpaceType: A3DXRReferenceSpaceType;
    private readonly xr?;
    private session;
    private referenceSpace;
    constructor(options?: WebXRSessionControllerOptions);
    get active(): boolean;
    isSupported(): Promise<boolean>;
    start(): Promise<WebXRSessionStartResult>;
    sampleFrame(frame?: A3DXRFrameLike, hitTestSource?: unknown): WebXRFrameSample;
    end(): Promise<void>;
    pulseHaptics(intensity?: number, duration?: number): Promise<number>;
}
//# sourceMappingURL=WebXRSessionController.d.ts.map