/** * @demo DEMO / SHOWCASE COMPONENT — XR demo with mock data. * * GlassARPreview demonstrates an AR product-preview surface. The AR session, * tracking, and placement are simulated in-component and do NOT use a real WebXR / * ARKit / ARCore session. Wire it to a real XR runtime before production use. */ import React from "react"; export interface ARObject { id: string; name: string; modelUrl?: string; thumbnail?: string; scale: { x: number; y: number; z: number; }; rotation: { x: number; y: number; z: number; }; position: { x: number; y: number; z: number; }; visible: boolean; opacity: number; material?: { color?: string; metalness?: number; roughness?: number; emissive?: string; texture?: string; }; animation?: { type: "rotate" | "float" | "pulse" | "bounce"; speed: number; enabled: boolean; }; metadata?: Record; } export interface ARMarker { id: string; type: "qr" | "image" | "nft" | "barcode"; source: string; size?: number; confident?: number; } export interface ARCamera { position: { x: number; y: number; z: number; }; target: { x: number; y: number; z: number; }; fov: number; near: number; far: number; } export interface ARLighting { ambient: { color: string; intensity: number; }; directional: { color: string; intensity: number; position: { x: number; y: number; z: number; }; castShadow: boolean; }; environment?: string; } export interface GlassARPreviewProps extends Omit, "onError"> { /** AR objects to display */ objects?: ARObject[]; /** AR markers for tracking */ markers?: ARMarker[]; /** Camera configuration */ camera?: ARCamera; /** Lighting setup */ lighting?: ARLighting; /** Background mode */ background?: "transparent" | "camera" | "environment" | "color"; /** Background color if mode is 'color' */ backgroundColor?: string; /** Environment map URL */ environmentMap?: string; /** Whether to enable camera feed */ enableCamera?: boolean; /** Whether to show debug info */ debug?: boolean; /** AR session state */ sessionActive?: boolean; /** WebXR support level */ xrMode?: "immersive-ar" | "inline" | "viewer"; /** Performance settings */ quality?: "low" | "medium" | "high"; /** Object interaction handlers */ onObjectSelect?: (object: ARObject) => void; onObjectMove?: (objectId: string, position: { x: number; y: number; z: number; }) => void; onObjectRotate?: (objectId: string, rotation: { x: number; y: number; z: number; }) => void; onObjectScale?: (objectId: string, scale: { x: number; y: number; z: number; }) => void; /** Marker tracking handlers */ onMarkerFound?: (marker: ARMarker) => void; onMarkerLost?: (marker: ARMarker) => void; /** Session handlers */ onSessionStart?: () => void; onSessionEnd?: () => void; onError?: (error: Error) => void; /** Custom object renderer */ renderObject?: (object: ARObject) => React.ReactNode; /** Loading component */ loadingComponent?: React.ReactNode; /** Error component */ errorComponent?: React.ReactNode; /** Controls overlay */ controlsOverlay?: React.ReactNode; /** Respect motion preferences */ respectMotionPreference?: boolean; } export declare const GlassARPreview: React.ForwardRefExoticComponent>; export default GlassARPreview; //# sourceMappingURL=GlassARPreview.d.ts.map