export type XRSessionMode = 'inline' | 'immersive-vr' | 'immersive-ar';
export type XRReferenceSpaceType = 'viewer' | 'local' | 'local-floor' | 'bounded-floor' | 'unbounded';
export interface XRSessionConfig {
    mode: XRSessionMode;
    referenceSpace: XRReferenceSpaceType;
    requiredFeatures: string[];
    optionalFeatures: string[];
    frameRate?: number;
    depthSensing?: boolean;
    handTracking?: boolean;
    hitTest?: boolean;
    anchors?: boolean;
    lightEstimation?: boolean;
}
export declare const VR_SESSION_DEFAULT: XRSessionConfig;
export declare const AR_SESSION_DEFAULT: XRSessionConfig;
export interface XRCapabilities {
    vrSupported: boolean;
    arSupported: boolean;
    handTrackingSupported: boolean;
    depthSensingSupported: boolean;
    hitTestSupported: boolean;
}
export declare function detectXRCapabilities(): Promise<XRCapabilities>;
export type XRHandedness = 'left' | 'right' | 'none';
export type XRTargetRay = 'gaze' | 'tracked-pointer' | 'screen' | 'transient-pointer';
export interface XRInputState {
    handedness: XRHandedness;
    targetRayMode: XRTargetRay;
    position: {
        x: number;
        y: number;
        z: number;
    };
    orientation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    buttons: XRButtonState[];
    axes: number[];
    gripPosition?: {
        x: number;
        y: number;
        z: number;
    };
    gripOrientation?: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
}
export interface XRButtonState {
    pressed: boolean;
    touched: boolean;
    value: number;
}
export interface XRControllerMapping {
    trigger: number;
    grip: number;
    thumbstick: number;
    trackpad?: number;
    buttonA?: number;
    buttonB?: number;
    thumbstickPress?: number;
}
export declare const STANDARD_CONTROLLER_MAPPING: XRControllerMapping;
export type HandJointName = 'wrist' | 'thumb-metacarpal' | 'thumb-phalanx-proximal' | 'thumb-phalanx-distal' | 'thumb-tip' | 'index-finger-metacarpal' | 'index-finger-phalanx-proximal' | 'index-finger-phalanx-intermediate' | 'index-finger-phalanx-distal' | 'index-finger-tip' | 'middle-finger-metacarpal' | 'middle-finger-phalanx-proximal' | 'middle-finger-phalanx-intermediate' | 'middle-finger-phalanx-distal' | 'middle-finger-tip' | 'ring-finger-metacarpal' | 'ring-finger-phalanx-proximal' | 'ring-finger-phalanx-intermediate' | 'ring-finger-phalanx-distal' | 'ring-finger-tip' | 'pinky-finger-metacarpal' | 'pinky-finger-phalanx-proximal' | 'pinky-finger-phalanx-intermediate' | 'pinky-finger-phalanx-distal' | 'pinky-finger-tip';
export interface HandJointPose {
    joint: HandJointName;
    position: {
        x: number;
        y: number;
        z: number;
    };
    orientation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    radius: number;
}
export interface HandGesture {
    name: string;
    detect(joints: Map<HandJointName, HandJointPose>): boolean;
}
export declare function createPinchGesture(threshold?: number): HandGesture;
export declare function createGrabGesture(curlThreshold?: number): HandGesture;
export interface ARHitResult {
    position: {
        x: number;
        y: number;
        z: number;
    };
    orientation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    planeType?: 'horizontal' | 'vertical';
    planeId?: string;
}
export interface ARAnchor {
    id: string;
    position: {
        x: number;
        y: number;
        z: number;
    };
    orientation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    createdAt: number;
    persistent: boolean;
}
export interface ARPlacementConfig {
    snapToSurface: boolean;
    alignToNormal: boolean;
    gridSnap: number;
    minScale: number;
    maxScale: number;
    defaultScale: number;
    allowRotation: boolean;
    rotationSnapDeg: number;
    allowVertical: boolean;
    shadowEnabled: boolean;
}
export declare const DEFAULT_AR_PLACEMENT: ARPlacementConfig;
export declare function snapPlacement(hit: ARHitResult, config: ARPlacementConfig, currentRotationY: number): {
    position: {
        x: number;
        y: number;
        z: number;
    };
    rotationY: number;
};
export interface LightEstimate {
    primaryLightDirection: {
        x: number;
        y: number;
        z: number;
    };
    primaryLightIntensity: number;
    sphericalHarmonics?: Float32Array;
    ambientIntensity: number;
    ambientColorTemperature: number;
}
export interface SpatialPanel {
    id: string;
    width: number;
    height: number;
    pixelsPerMeter: number;
    position: {
        x: number;
        y: number;
        z: number;
    };
    orientation: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    followGaze: boolean;
    curved: boolean;
    curveRadius?: number;
    opacity: number;
    interactable: boolean;
    grabbable: boolean;
}
export declare function createSpatialPanel(id: string, partial?: Partial<SpatialPanel>): SpatialPanel;
/** Billboard: rotate panel to face camera. */
export declare function billboardToward(panelPos: {
    x: number;
    y: number;
    z: number;
}, cameraPos: {
    x: number;
    y: number;
    z: number;
}): {
    x: number;
    y: number;
    z: number;
    w: number;
};
export type PanoProjection = 'equirectangular' | 'cubemap';
export type StereoMode = 'mono' | 'top-bottom' | 'side-by-side';
export interface PanoVideoConfig {
    src: string;
    projection: PanoProjection;
    stereo: StereoMode;
    loop: boolean;
    autoplay: boolean;
    muted: boolean;
    fov: number;
    initialYaw: number;
    initialPitch: number;
    dragSensitivity: number;
    gyroscope: boolean;
}
export declare const DEFAULT_PANO_CONFIG: Partial<PanoVideoConfig>;
export interface VRGameConfig {
    locomotion: VRLocomotion;
    comfort: VRComfort;
    interactionMode: 'controllers' | 'hands' | 'gaze' | 'hybrid';
    seatedMode: boolean;
    roomScale: boolean;
    playAreaSize?: {
        width: number;
        depth: number;
    };
}
export type VRLocomotion = 'teleport' | 'smooth' | 'arm-swing' | 'room-scale' | 'on-rails';
export interface VRComfort {
    vignette: boolean;
    vignetteIntensity: number;
    snapTurning: boolean;
    snapAngleDeg: number;
    smoothTurnSpeed: number;
    heightAdjustment: boolean;
    motionSicknessLevel: 'none' | 'low' | 'medium' | 'high';
}
export declare const DEFAULT_VR_COMFORT: VRComfort;
export interface VRTeleportConfig {
    maxDistance: number;
    arcResolution: number;
    validColor: string;
    invalidColor: string;
    hapticOnTeleport: boolean;
    fadeTransition: boolean;
    fadeDurationMs: number;
}
export declare const DEFAULT_VR_TELEPORT: VRTeleportConfig;
export interface VRInteractionConfig {
    grabDistance: number;
    throwMultiplier: number;
    hapticIntensity: number;
    hapticDurationMs: number;
    highlightColor: string;
    laserPointer: boolean;
    laserColor: string;
    laserWidth: number;
}
export declare const DEFAULT_VR_INTERACTION: VRInteractionConfig;
