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; 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): 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; /** 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; 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;