{
  "schemaVersion": 1,
  "name": "webar-facil",
  "version": "0.1.0-alpha.6",
  "usage": {
    "recommendedIntegration": "declarative",
    "startGuide": "docs/getting-started.md",
    "tagReference": "docs/declarative.md",
    "advancedGuide": "docs/programmatic.md",
    "tags": [
      "webar-scene",
      "webar-target",
      "webar-model",
      "webar-video"
    ],
    "standaloneRegistration": "automatic",
    "esmRegistration": "registerARComponents"
  },
  "entrypoints": {
    "webar-facil": "ESM y wrappers; peer three",
    "webar-facil/core": "ESM sin renderizador",
    "standalone": "Global WebARFacil; incluye THREE"
  },
  "exports": [
    {
      "name": "ARAnimationOptions",
      "typeOnly": true,
      "module": "src/wrappers/ThreeARModel.ts",
      "declarationFile": "dist/types/wrappers/ThreeARModel.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARComponentsOptions",
      "typeOnly": true,
      "module": "src/wrappers/web-components.ts",
      "declarationFile": "dist/types/wrappers/web-components.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARDiagnostics",
      "typeOnly": false,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "AREventMap",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ARModelElement",
      "typeOnly": true,
      "module": "src/wrappers/web-components.ts",
      "declarationFile": "dist/types/wrappers/web-components.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARModelLoadOptions",
      "typeOnly": true,
      "module": "src/wrappers/ThreeARModel.ts",
      "declarationFile": "dist/types/wrappers/ThreeARModel.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARModelOptions",
      "typeOnly": true,
      "module": "src/wrappers/ThreeARModel.ts",
      "declarationFile": "dist/types/wrappers/ThreeARModel.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARPose",
      "typeOnly": true,
      "module": "src/Pose.ts",
      "declarationFile": "dist/types/Pose.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ARSceneElement",
      "typeOnly": true,
      "module": "src/wrappers/web-components.ts",
      "declarationFile": "dist/types/wrappers/web-components.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARSceneOptions",
      "typeOnly": true,
      "module": "src/wrappers/ThreeARScene.ts",
      "declarationFile": "dist/types/wrappers/ThreeARScene.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARVideoElement",
      "typeOnly": true,
      "module": "src/wrappers/web-components.ts",
      "declarationFile": "dist/types/wrappers/web-components.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ARVideoOptions",
      "typeOnly": true,
      "module": "src/wrappers/ThreeARVideo.ts",
      "declarationFile": "dist/types/wrappers/ThreeARVideo.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "CalibrationReport",
      "typeOnly": true,
      "module": "src/calibration/types.ts",
      "declarationFile": "dist/types/calibration/types.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "CalibrationSession",
      "typeOnly": false,
      "module": "src/calibration/CalibrationSession.ts",
      "declarationFile": "dist/types/calibration/CalibrationSession.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "CameraFrame",
      "typeOnly": true,
      "module": "src/camera/CameraManager.ts",
      "declarationFile": "dist/types/camera/CameraManager.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "CameraIntrinsics",
      "typeOnly": true,
      "module": "src/Pose.ts",
      "declarationFile": "dist/types/Pose.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "CameraManager",
      "typeOnly": false,
      "module": "src/camera/CameraManager.ts",
      "declarationFile": "dist/types/camera/CameraManager.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "CameraManagerOptions",
      "typeOnly": true,
      "module": "src/camera/CameraManager.ts",
      "declarationFile": "dist/types/camera/CameraManager.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "CameraMetrics",
      "typeOnly": true,
      "module": "src/camera/CameraManager.ts",
      "declarationFile": "dist/types/camera/CameraManager.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ChromaKeyOptions",
      "typeOnly": true,
      "module": "src/wrappers/ThreeARVideo.ts",
      "declarationFile": "dist/types/wrappers/ThreeARVideo.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "CompilerOptions",
      "typeOnly": true,
      "module": "src/tracking/ImageCompiler.ts",
      "declarationFile": "dist/types/tracking/ImageCompiler.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DEVICE_TEST_PROTOCOL",
      "typeOnly": false,
      "module": "src/diagnostics/device-protocol.ts",
      "declarationFile": "dist/types/diagnostics/device-protocol.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DeviceTestCase",
      "typeOnly": true,
      "module": "src/diagnostics/device-protocol.ts",
      "declarationFile": "dist/types/diagnostics/device-protocol.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DeviceTestResult",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DiagnosticConfiguration",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DiagnosticContext",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DiagnosticOptions",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DiagnosticRendererMetrics",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DiagnosticReport",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "DiagnosticStats",
      "typeOnly": true,
      "module": "src/diagnostics/ARDiagnostics.ts",
      "declarationFile": "dist/types/diagnostics/ARDiagnostics.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "EngineOptions",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "EngineState",
      "typeOnly": false,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ExperimentalMetricScale",
      "typeOnly": false,
      "module": "src/slam/ExperimentalMetricScale.ts",
      "declarationFile": "dist/types/slam/ExperimentalMetricScale.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "FrameQuality",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ImageCompiler",
      "typeOnly": false,
      "module": "src/tracking/ImageCompiler.ts",
      "declarationFile": "dist/types/tracking/ImageCompiler.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ImageObservation",
      "typeOnly": true,
      "module": "src/tracking/Tracker.ts",
      "declarationFile": "dist/types/tracking/Tracker.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ImageTargetMetadata",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ImageTargetOptions",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ImageTargetResult",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ImageTrackingProfile",
      "typeOnly": true,
      "module": "src/tracking/profile.ts",
      "declarationFile": "dist/types/tracking/profile.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "LIBRARY_BUILD",
      "typeOnly": false,
      "module": "src/build-info.ts",
      "declarationFile": "dist/types/build-info.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "LIBRARY_VERSION",
      "typeOnly": false,
      "module": "src/build-info.ts",
      "declarationFile": "dist/types/build-info.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "MarkerCompiler",
      "typeOnly": false,
      "module": "src/tools/MarkerCompiler.ts",
      "declarationFile": "dist/types/tools/MarkerCompiler.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "MarkerFeatures",
      "typeOnly": true,
      "module": "src/tracking/ImageCompiler.ts",
      "declarationFile": "dist/types/tracking/ImageCompiler.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "MarkerQuality",
      "typeOnly": true,
      "module": "src/tracking/ImageCompiler.ts",
      "declarationFile": "dist/types/tracking/ImageCompiler.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "MetricScaleDiagnostics",
      "typeOnly": true,
      "module": "src/slam/ExperimentalMetricScale.ts",
      "declarationFile": "dist/types/slam/ExperimentalMetricScale.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OdometryBackend",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OdometryConfig",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OdometryEstimate",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OdometryMapSnapshot",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OdometryModule",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OdometryScanHint",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OpticalFlowOptions",
      "typeOnly": true,
      "module": "src/slam/OpticalFlowSLAM.ts",
      "declarationFile": "dist/types/slam/OpticalFlowSLAM.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "OpticalFlowSLAM",
      "typeOnly": false,
      "module": "src/slam/OpticalFlowSLAM.ts",
      "declarationFile": "dist/types/slam/OpticalFlowSLAM.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "PlacementState",
      "typeOnly": true,
      "module": "src/wrappers/SurfacePlacement.ts",
      "declarationFile": "dist/types/wrappers/SurfacePlacement.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "projectionFromIntrinsics",
      "typeOnly": false,
      "module": "src/vision/calibration.ts",
      "declarationFile": "dist/types/vision/calibration.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "registerAFrameComponent",
      "typeOnly": false,
      "module": "src/wrappers/aframe-component.ts",
      "declarationFile": "dist/types/wrappers/aframe-component.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "registerAFrameModelComponent",
      "typeOnly": false,
      "module": "src/wrappers/aframe-model.ts",
      "declarationFile": "dist/types/wrappers/aframe-model.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "registerAFrameVideoComponent",
      "typeOnly": false,
      "module": "src/wrappers/aframe-video.ts",
      "declarationFile": "dist/types/wrappers/aframe-video.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "registerARComponents",
      "typeOnly": false,
      "module": "src/wrappers/web-components.ts",
      "declarationFile": "dist/types/wrappers/web-components.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "rotateIntrinsics",
      "typeOnly": false,
      "module": "src/vision/calibration.ts",
      "declarationFile": "dist/types/vision/calibration.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "scaleIntrinsics",
      "typeOnly": false,
      "module": "src/vision/calibration.ts",
      "declarationFile": "dist/types/vision/calibration.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "SLAMManager",
      "typeOnly": false,
      "module": "src/slam/SLAMManager.ts",
      "declarationFile": "dist/types/slam/SLAMManager.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "SLAMMapSnapshot",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "SLAMOptions",
      "typeOnly": true,
      "module": "src/slam/SLAMManager.ts",
      "declarationFile": "dist/types/slam/SLAMManager.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "SurfaceTransitionOptions",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "SurfaceTransitionResult",
      "typeOnly": true,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TargetFoundEvent",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TargetLostEvent",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TargetVisibilityEvent",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "ThreeARGroup",
      "typeOnly": false,
      "module": "src/wrappers/ThreeARGroup.ts",
      "declarationFile": "dist/types/wrappers/ThreeARGroup.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ThreeARModel",
      "typeOnly": false,
      "module": "src/wrappers/ThreeARModel.ts",
      "declarationFile": "dist/types/wrappers/ThreeARModel.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ThreeARScene",
      "typeOnly": false,
      "module": "src/wrappers/ThreeARScene.ts",
      "declarationFile": "dist/types/wrappers/ThreeARScene.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ThreeARVideo",
      "typeOnly": false,
      "module": "src/wrappers/ThreeARVideo.ts",
      "declarationFile": "dist/types/wrappers/ThreeARVideo.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "ThreeCameraBackground",
      "typeOnly": false,
      "module": "src/wrappers/ThreeCameraBackground.ts",
      "declarationFile": "dist/types/wrappers/ThreeCameraBackground.d.ts",
      "entrypoints": [
        "webar-facil"
      ]
    },
    {
      "name": "Tracker",
      "typeOnly": false,
      "module": "src/tracking/Tracker.ts",
      "declarationFile": "dist/types/tracking/Tracker.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TrackerOptions",
      "typeOnly": true,
      "module": "src/tracking/Tracker.ts",
      "declarationFile": "dist/types/tracking/Tracker.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TrackingIssue",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TrackingQualityEvent",
      "typeOnly": true,
      "module": "src/tracking/events.ts",
      "declarationFile": "dist/types/tracking/events.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "TrackingResult",
      "typeOnly": true,
      "module": "src/tracking/Tracker.ts",
      "declarationFile": "dist/types/tracking/Tracker.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "validateIntrinsics",
      "typeOnly": false,
      "module": "src/vision/calibration.ts",
      "declarationFile": "dist/types/vision/calibration.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "VisualReferenceResult",
      "typeOnly": true,
      "module": "src/slam/OdometryBackend.ts",
      "declarationFile": "dist/types/slam/OdometryBackend.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    },
    {
      "name": "WebAREngine",
      "typeOnly": false,
      "module": "src/WebAREngine.ts",
      "declarationFile": "dist/types/WebAREngine.d.ts",
      "entrypoints": [
        "webar-facil/core",
        "webar-facil"
      ]
    }
  ],
  "standaloneAdditionalExports": [
    "THREE"
  ],
  "declarations": [
    {
      "file": "Pose.d.ts",
      "code": "/** Todos los backends entregan el mismo contrato, sin tipos del renderer. */\nexport interface ARPose {\n    targetId?: string;\n    backend: 'image' | 'webxr' | 'optical-flow';\n    timestampMs: number;\n    scale: 'metric' | 'relative';\n    /** Session-only metric estimate from the experimental optical/inertial mode. */\n    scaleSource?: 'experimental-inertial';\n    /** T_camera_object: column-major WebGL. */\n    matrix: Float32Array;\n    /** T_world_object. En imagen, el mundo de render es el espacio de cámara. */\n    worldMatrix: Float32Array;\n    /** T_camera_world. */\n    viewMatrix: Float32Array;\n    /** null si el backend no dispone de calibración; el renderer decide su FOV. */\n    projectionMatrix: Float32Array | null;\n    projectionSource?: 'calibrated' | 'estimated' | 'webxr';\n    /** El ancla óptica coincide con el plano verificado por el estimador. */\n    surfaceDetected?: boolean;\n    diagnostics?: {\n        processingMs: number;\n        inliers: number;\n        reprojectionErrorPx: number;\n        relocalized?: boolean;\n        keyframeCorrected?: boolean;\n    };\n}\nexport interface CameraIntrinsics {\n    width: number;\n    height: number;\n    fx: number;\n    fy: number;\n    cx: number;\n    cy: number;\n    distortion?: readonly number[];\n}\n"
    },
    {
      "file": "WebAREngine.d.ts",
      "code": "import { type CameraManagerOptions, type CameraMetrics } from './camera/CameraManager.js';\nimport { type TrackerOptions } from './tracking/Tracker.js';\nimport { type MarkerQuality } from './tracking/ImageCompiler.js';\nimport { type OpticalFlowOptions } from './slam/OpticalFlowSLAM.js';\nimport type { ExperimentalMetricScale } from './slam/ExperimentalMetricScale.js';\nimport type { ARPose, CameraIntrinsics } from './Pose.js';\nimport type { OdometryMapSnapshot, VisualReferenceResult } from './slam/OdometryBackend.js';\nimport type { AREventMap } from './tracking/events.js';\nexport declare enum EngineState {\n    Idle = \"Idle\",\n    Camera = \"Camera\",\n    TrackingImage = \"TrackingImage\",\n    TrackingSurface = \"TrackingSurface\",\n    Disposed = \"Disposed\"\n}\nexport interface EngineOptions {\n    /** Optional session-only conversion of relative optical poses into estimated meters. */\n    experimentalMetricScale?: ExperimentalMetricScale;\n    /** Corrección local experimental; desactivada por defecto. No es cierre de bucle global. */\n    keyframeCorrection?: boolean;\n    /** Ocultar tras una pérdida sostenida; sin publicar poses durante la incertidumbre. 0 desactiva la tolerancia. */\n    imageLossGraceMs?: number;\n    keepContentOnLost?: boolean;\n    imageSmoothingMs?: number;\n    camera?: Omit<CameraManagerOptions, 'onFrame' | 'onError'>;\n    tracker?: TrackerOptions;\n    opencvURL?: string | URL;\n    calibration?: CameraIntrinsics;\n    /** false deshabilita el fallback. Por defecto se usa el backend local integrado. */\n    fallback?: OpticalFlowOptions | false;\n    attachXRSession?: (session: XRSession) => Promise<void>;\n    getXRContext?: () => WebGL2RenderingContext;\n    overlayRoot?: HTMLElement;\n}\nexport interface ImageTargetOptions {\n    /** Opcional: escala de referencia de 0.2 m por defecto; no requiere medir el marcador. */\n    physicalWidthMeters?: number;\n    maxDimension?: number;\n}\nexport interface ImageTargetMetadata {\n    format: 'WART';\n    version: 2;\n    width: number;\n    height: number;\n    physicalWidthMeters: number;\n    extractorId: number;\n    quality: MarkerQuality;\n}\nexport interface ImageTargetResult {\n    /** Copia independiente: puede guardarse como .dat sin afectar al motor. */\n    buffer: ArrayBuffer;\n    /** Datos listos para JSON.stringify; no se necesita cargar ningún JSON. */\n    metadata: ImageTargetMetadata;\n}\nexport interface SurfaceTransitionOptions {\n    targetId?: string;\n    backend?: 'auto' | 'webxr' | 'optical-flow';\n    placement?: 'auto' | 'preserve' | 'hit-test';\n    initializationTimeoutMs?: number;\n}\nexport interface SurfaceTransitionResult {\n    backend: 'webxr' | 'optical-flow';\n    placement: 'preserved' | 'scan-marker' | 'select-surface' | 'scan-floor';\n}\nexport interface SLAMMapSnapshot {\n    version: 1;\n    map: OdometryMapSnapshot;\n    anchor: Float32Array | null;\n    targetId: string;\n}\n/** Fachada: cámara, tracking de imagen y espacios nativos/locales comparten ARPose. */\nexport declare class WebAREngine {\n    constructor(options?: EngineOptions);\n    get state(): EngineState;\n    get videoElement(): HTMLVideoElement;\n    get cameraSettings(): MediaTrackSettings | null;\n    get calibration(): CameraIntrinsics | undefined;\n    setFocus(mode: 'continuous' | 'manual', distance?: number): Promise<boolean>;\n    onPose(fn: (matrix: Float32Array, pose: ARPose) => void): () => void;\n    onStatus(fn: (message: string) => void): () => void;\n    onError(fn: (error: Error) => void): () => void;\n    onSurface(fn: (matrix: Float32Array) => void): () => void;\n    onMetrics(fn: (metrics: CameraMetrics) => void): () => void;\n    get targetIds(): readonly string[];\n    on<K extends keyof AREventMap>(name: K, listener: (event: AREventMap[K]) => void): () => void;\n    onTargetFound(listener: (event: AREventMap['targetFound']) => void): () => void;\n    onTargetLost(listener: (event: AREventMap['targetLost']) => void): () => void;\n    onTrackingQuality(listener: (event: AREventMap['trackingQuality']) => void): () => void;\n    onTargetVisibility(listener: (event: AREventMap['targetVisibility']) => void): () => void;\n    /** Retener es congelar la ultima transformacion, no crear un anclaje SLAM. */\n    setKeepContentOnLost(value: boolean, targetId?: string): void;\n    /** Compare a fresh optical frame against the pinned reference without correcting the live pose. */\n    checkSLAMVisualReference(action: 'capture' | 'verify', id: string): Promise<VisualReferenceResult>;\n    exportSLAMMap({ includeCurrentView }?: {\n        includeCurrentView?: boolean;\n    }): Promise<SLAMMapSnapshot>;\n    importSLAMMap(snapshot: SLAMMapSnapshot): Promise<void>;\n    startCamera(): Promise<void>;\n    loadTarget(url: string | URL): Promise<void>;\n    addTarget(id: string, url: string | URL): Promise<void>;\n    /** Compila JPG/PNG en Worker y activa el marcador sin archivos intermedios. */\n    loadImageTarget(source: Blob | string | URL, options?: ImageTargetOptions): Promise<ImageTargetResult>;\n    addImageTarget(id: string, source: Blob | string | URL, options?: ImageTargetOptions): Promise<ImageTargetResult>;\n    removeTarget(id: string): Promise<void>;\n    /** Llamar desde un clic. preserve exige una observación reciente y una alineación verificable. */\n    enableSLAM(options?: SurfaceTransitionOptions): Promise<SurfaceTransitionResult>;\n    stop(): Promise<void>;\n    dispose(): void;\n}\n"
    },
    {
      "file": "build-info.d.ts",
      "code": "export declare const LIBRARY_VERSION = \"0.1.0-alpha.6\";\nexport declare const LIBRARY_BUILD = \"1c906eb944d9f8f4\";\n"
    },
    {
      "file": "calibration/CalibrationSession.d.ts",
      "code": "import type { CalibrationCapture, CalibrationReport } from './types.js';\n/** API de calibración sin cómputo WASM en el hilo de UI. */\nexport declare class CalibrationSession {\n    constructor(options?: {\n        workerFactory?: () => Worker;\n    });\n    initialize(opencvURL: string, signal?: AbortSignal): Promise<void>;\n    addFrame(frame: ImageData, signal?: AbortSignal): Promise<CalibrationCapture>;\n    board(): Promise<{\n        data: Uint8ClampedArray;\n        width: number;\n        height: number;\n    }>;\n    solve(): Promise<CalibrationReport>;\n    reset(): Promise<void>;\n    dispose(): void;\n}\n"
    },
    {
      "file": "calibration/types.d.ts",
      "code": "import type { CameraIntrinsics } from '../Pose.js';\nexport interface CalibrationObservation {\n    width: number;\n    height: number;\n    objectPoints: Float32Array;\n    imagePoints: Float32Array;\n}\nexport interface CalibrationReport {\n    calibration: CameraIntrinsics;\n    rmsPx: number;\n    perViewErrorsPx: number[];\n    views: number;\n    coverage: number;\n    warnings: string[];\n}\nexport interface CalibrationCapture {\n    accepted: boolean;\n    corners: Float32Array;\n    views: number;\n    reason: string;\n}\n"
    },
    {
      "file": "camera/CameraManager.d.ts",
      "code": "import type { ImageTrackingProfile } from '../tracking/profile.js';\nimport type { TrackingQualityEvent } from '../tracking/events.js';\nexport interface CameraFrame {\n    /** RGBA; el consumidor puede transferir imageData.data.buffer al Worker. */\n    imageData: ImageData;\n    /** Tiempo de extracción, en el reloj performance.now(); no es tiempo del sensor. */\n    timestampMs: number;\n    mediaTimeSeconds: number;\n    sessionId: number;\n    sourceWidth: number;\n    sourceHeight: number;\n}\nexport interface CameraManagerOptions {\n    /** Resolver al terminar de procesar el frame, no solamente al enviarlo. */\n    onFrame: (frame: CameraFrame, signal: AbortSignal) => void | Promise<void>;\n    onError?: (error: Error) => void;\n    /** Etapas reales de apertura; no confundir permiso concedido con vídeo reproduciéndose. */\n    onStatus?: (status: 'camera-requesting' | 'camera-granted' | 'camera-playing') => void;\n    /** Visor opcional para montar el vídeo debajo del renderer durante la captura. */\n    playbackContainer?: HTMLElement;\n    /** Presupuesto inicial; las opciones explícitas tienen prioridad. */\n    performance?: 'auto' | 'balanced' | 'battery' | 'quality';\n    width?: number;\n    height?: number;\n    /** Preferencia, no requisito: permite webcams sin cámara trasera. */\n    facingMode?: 'environment' | 'user';\n    /** Selección explícita; tiene prioridad sobre facingMode. */\n    deviceId?: string;\n    /** Objetivo de captura, hasta 60; limitado por cámara, pantalla y CPU. */\n    fps?: number;\n    /** Limita el coste de lectura RGBA conservando la relación de aspecto. */\n    maxFrameWidth?: number;\n    /** Límite de píxeles analizados en cualquier orientación; no recorta la imagen. */\n    maxFramePixels?: number;\n    focusMode?: 'continuous' | 'manual' | 'none';\n    focusDistance?: number;\n    adaptive?: boolean;\n    minFrameWidth?: number;\n    onMetrics?: (metrics: CameraMetrics) => void;\n    onSuspend?: () => void;\n    onResume?: () => void;\n}\nexport interface CameraMetrics {\n    tracking?: ImageTrackingProfile;\n    odometry?: import('../slam/OdometryBackend.js').OdometryTimings;\n    consumerMs?: number;\n    processedFrames: number;\n    skippedFrames: number;\n    readbackMs: number;\n    processingMs: number;\n    averageProcessingMs: number;\n    analysisWidth: number;\n    targetAnalysisFPS: number;\n    analysisHeight?: number;\n    performance?: CameraManagerOptions['performance'];\n}\n/** Webcam o cámara móvil. Usar con HTTPS o localhost. */\nexport declare class CameraManager {\n    constructor(options: CameraManagerOptions);\n    get state(): 'idle' | 'starting' | 'running' | 'paused' | 'disposed';\n    /** Vista previa del stream; la propiedad srcObject pertenece al gestor. */\n    get videoElement(): HTMLVideoElement;\n    get settings(): MediaTrackSettings | null;\n    /** Fijar resolución durante VO: cambiarla invalidaría el mapa. La frecuencia sí se adapta. */\n    setAdaptiveResolution(enabled: boolean): void;\n    /** Priorizar detalle si bajar resolución puede hacer perder el marcador. */\n    setTrackingFeedback(qualities: readonly TrackingQualityEvent[], frameWidth?: number): void;\n    /** Ancho explícito para semillas/mapas: prima sobre el presupuesto de píxeles. */\n    setAnalysisWidth(width: number): void;\n    setFocus(mode: 'continuous' | 'manual', distance?: number): Promise<boolean>;\n    /** Idempotente durante una sesión. Los errores de arranque rechazan la promesa. */\n    start(): Promise<void>;\n    /** Cancela y libera la captura. retainDevice conserva la entrada para una transición interna. */\n    stop({ retainDevice }?: {\n        retainDevice?: boolean;\n    }): void;\n    dispose(): void;\n}\n"
    },
    {
      "file": "diagnostics/ARDiagnostics.d.ts",
      "code": "import { TRACKING_STAGES, TRACKING_COUNTS } from '../tracking/profile.js';\nimport type { WebAREngine } from '../WebAREngine.js';\nimport type { CameraMetrics } from '../camera/CameraManager.js';\nimport { ODOMETRY_STAGES } from '../slam/OdometryBackend.js';\nexport type DeviceTestResult = 'pending' | 'pass' | 'fail' | 'not-supported';\nexport interface DiagnosticContext {\n    platform?: 'ios' | 'android' | 'desktop' | 'other';\n    execution?: 'unspecified' | 'automated' | 'physical-user-reported';\n    deviceModel?: string;\n    osVersion?: string;\n    browserVersion?: string;\n    scenario?: string;\n}\nexport interface DiagnosticConfiguration {\n    mode?: string;\n    backend?: string;\n    performance?: string;\n    maxFramePixels?: number;\n    analysisWidth?: number;\n    requestedFPS?: number;\n    lossGraceMs?: number;\n    keepContentOnLost?: boolean;\n    manualPlacement?: boolean;\n    keyframeCorrection?: boolean;\n    renderPixelRatio?: number;\n    antialias?: boolean;\n}\nexport interface DiagnosticOptions {\n    context?: DiagnosticContext;\n    configuration?: DiagnosticConfiguration;\n    sampleLimit?: number;\n    now?: () => number;\n}\nexport interface DiagnosticStats {\n    count: number;\n    mean: number | null;\n    min: number | null;\n    max: number | null;\n    p50: number | null;\n    p95: number | null;\n    quantileSamples: number;\n}\n/** Contadores del renderer, no tiempo GPU ni bytes de VRAM. */\nexport interface DiagnosticRendererMetrics {\n    drawCalls: number;\n    triangles: number;\n    geometries: number;\n    textures: number;\n    drawingBufferWidth: number;\n    drawingBufferHeight: number;\n    pixelRatio: number;\n}\nexport interface DiagnosticReport {\n    schemaVersion: 1;\n    kind: 'webar-diagnostics';\n    sdk: {\n        version: string;\n        build: string;\n    };\n    createdAt: string;\n    durationMs: number;\n    recording: boolean;\n    context: Required<DiagnosticContext>;\n    configuration: DiagnosticConfiguration;\n    environment: {\n        userAgent: string;\n        secureContext: boolean;\n        cameraAPI: boolean;\n        webgl2API: boolean;\n        xrAPI: boolean;\n        immersiveAR: boolean | null;\n    };\n    camera: Record<string, string | number | boolean>;\n    state: string;\n    targets: Record<string, {\n        found: number;\n        lost: number;\n        ended: number;\n        firstFoundMs: number | null;\n        recoveriesMs: number[];\n    }>;\n    poses: {\n        count: number;\n        backends: Record<string, number>;\n        scales: Record<string, number>;\n        projectionSources: Record<string, number>;\n        relocalized: number;\n        keyframeCorrected: number;\n        firstPoseMs: number | null;\n    };\n    quality: {\n        samples: Record<string, number>;\n        issues: Record<string, number>;\n        diagnosis: 'heuristic';\n    };\n    metrics: {\n        processingMs: DiagnosticStats;\n        readbackMs: DiagnosticStats;\n        consumerMs: DiagnosticStats;\n        renderLoopMs: DiagnosticStats;\n        poseStepTranslation: DiagnosticStats;\n        poseStepRotationDegrees: DiagnosticStats;\n        reprojectionErrorPx: DiagnosticStats;\n        latestCamera: CameraMetrics | null;\n    };\n    odometry: {\n        frames: number;\n        stages: Record<typeof ODOMETRY_STAGES[number], DiagnosticStats>;\n    };\n    tracking: {\n        frames: number;\n        stages: Record<typeof TRACKING_STAGES[number], DiagnosticStats>;\n        paths: Record<typeof TRACKING_COUNTS[number], number>;\n    };\n    renderer: {\n        latest: DiagnosticRendererMetrics | null;\n        peakDrawCalls: number;\n        peakTriangles: number;\n    };\n    timeline: {\n        atMs: number;\n        event: string;\n        detail: string;\n    }[];\n    observations: {\n        atMs: number;\n        testId: string;\n        result: DeviceTestResult;\n        notes: string;\n    }[];\n    limits: {\n        sampleLimit: number;\n        timelineLimit: number;\n        observationLimit: number;\n        quantiles: 'latest bounded samples';\n        poseSteps: 'not physical jitter or drift';\n        renderLoop: 'callback interval, not completed GPU frames';\n        physicalValidation: 'operator-declared, not independently certified';\n    };\n}\ntype Source = Pick<WebAREngine, 'state' | 'cameraSettings' | 'targetIds' | 'onPose' | 'onStatus' | 'onError' | 'onMetrics' | 'onTargetFound' | 'onTargetLost' | 'onTrackingQuality'>;\n/** Telemetría local opt-in y acotada. No persiste frames/mapas ni exporta matrices/URLs de contenido. */\nexport declare class ARDiagnostics {\n    constructor(source: Source, options?: DiagnosticOptions);\n    setContext(context: DiagnosticContext): void;\n    mark(event: string, detail?: string): void;\n    observe(testId: string, result: DeviceTestResult, notes?: string): void;\n    recordError(error: Error): void;\n    recordRenderer(input: DiagnosticRendererMetrics): void;\n    recordRenderFrame(): void;\n    probeCapabilities(): Promise<void>;\n    stop(): void;\n    snapshot(): DiagnosticReport;\n    download(filename?: string): void;\n}\nexport {};\n"
    },
    {
      "file": "diagnostics/device-protocol.d.ts",
      "code": "export interface DeviceTestCase {\n    id: string;\n    title: string;\n    instructions: string;\n    seconds: number;\n    modes: readonly ('image' | 'flow' | 'transition' | 'webxr')[];\n}\n/** Pasos manuales comunes a iOS y Android. Ninguno se aprueba automáticamente. */\nexport declare const DEVICE_TEST_PROTOCOL: readonly DeviceTestCase[];\n"
    },
    {
      "file": "slam/ExperimentalMetricScale.d.ts",
      "code": "type WindowRejection = 'visualCoverage' | 'sensorCoverage' | 'sensorGap' | 'weakVisualMotion' | 'weakInertialMotion';\ntype Interruption = 'poseGap' | 'trackingLost' | 'relocalized' | 'keyframeCorrection' | 'mapReset';\ntype AxisValues = {\n    x: number;\n    y: number;\n    z: number;\n};\ninterface MotionSignal {\n    windows: number;\n    deviceAccelerationRmsMps2: AxisValues;\n    worldAccelerationRmsMps2: AxisValues;\n    integratedRmsMeters: AxisValues;\n    meanAbsoluteIntegralMeters: AxisValues;\n}\ninterface GuidedPhaseDiagnostics {\n    visualPoses: number;\n    visualDisplacementUnits: number | null;\n    visualDisplacementMeters: number | null;\n    visualCoverageMs: number;\n    stationaryPoses: number;\n    maxExcursionUnits: number | null;\n    durationMs: number;\n    samples: number;\n    usableSamples: number;\n    accelerationPeakMps2: AxisValues | null;\n    accelerationRmsMps2: AxisValues | null;\n    accelerationStdDevMps2: AxisValues | null;\n    integratedWindows: number;\n    weakWindows: number;\n}\nexport interface MetricScaleDiagnostics {\n    permission: 'idle' | 'listening' | 'denied' | 'unavailable';\n    motionEvents: number;\n    samples: number;\n    usableSamples: number;\n    medianIntervalMs: number | null;\n    largestGapMs: number;\n    visualFrames: number;\n    medianVisualIntervalMs: number | null;\n    pairedWindows: number;\n    relativeResidual: number | null;\n    metersPerUnit: number | null;\n    windowsEvaluated: number;\n    windowsAccepted: number;\n    rejectedWindows: Record<WindowRejection, number>;\n    interruptions: Record<Interruption, number>;\n    fitState: 'waiting' | 'inconsistent' | 'accepted';\n    fitAttempts: number;\n    timing: {\n        comparableWindows: number;\n        estimatedOffsetMs: number | null;\n        zeroOffsetResidual: number | null;\n        bestResidual: number | null;\n    };\n    lastTimingFit: MetricScaleDiagnostics['timing'] | null;\n    motionSignal: {\n        all: MotionSignal | null;\n        weak: MotionSignal | null;\n        guided: MotionSignal | null;\n        guidedWeak: MotionSignal | null;\n    };\n    guidedPhases: Record<string, GuidedPhaseDiagnostics>;\n}\n/** Experimental alignment of metric inertial and relative visual displacements. */\nexport declare class ExperimentalMetricScale {\n    /** Call directly from a user gesture, before awaiting camera startup. */\n    start(): Promise<boolean>;\n    /** Keep the last diagnostic available after stopping. */\n    stop(): void;\n    /** Aggregate the windows entirely contained in the current guided exercise. */\n    setGuidedMotionCapture(active: boolean): void;\n    /** True after a continuous interval of fresh optical poses, including poses before plane detection. */\n    hasStableVisualTracking(now?: number): boolean;\n    pauseGuidedMotionPhase(): void;\n    /** Mark the start of a named exercise phase on the same clock as sensor delivery. */\n    setGuidedMotionPhase(id: string): void;\n    diagnostics(): MetricScaleDiagnostics;\n    /** Compare the observed positions at the beginning and end of a completed round trip. */\n    guidedReturnError(outboundId: string, inboundId: string): number | null;\n    resetMap(): void;\n    /** Exclude windows that cross a lost pose, correction, or relocalization. */\n    interrupt(reason?: Interruption): void;\n    /** Receives unfiltered T_world_camera and the frame read time on the same page clock. */\n    observe(time: number, worldFromCamera: Float32Array, stationary?: boolean): number | null;\n}\nexport {};\n"
    },
    {
      "file": "slam/OdometryBackend.d.ts",
      "code": "import type { CameraIntrinsics } from '../Pose.js';\nimport type { ImageObservation } from '../tracking/types.js';\nexport interface OdometryConfig {\n    intrinsics: CameraIntrinsics;\n    opencvURL?: string;\n    seed?: ImageObservation;\n    /** Experimental, desactivada por defecto: reobservación de keyframes locales. */\n    keyframeCorrection?: boolean;\n    /** ROI normalizada para seleccionar esquinas candidatas del suelo. No prueba un plano. */\n    floorROI: {\n        x: number;\n        y: number;\n        width: number;\n        height: number;\n    };\n}\n/** Snapshot local: no imágenes de cámara; solo descriptores y geometría verificada. */\nexport interface OdometryMapSnapshot {\n    version: 1;\n    intrinsics: CameraIntrinsics;\n    scale: 'relative' | 'metric';\n    mapId: string;\n    keyframes: {\n        descriptors: Uint8Array;\n        points: Float32Array;\n        view: Float32Array;\n    }[];\n    groundPlane?: {\n        worldFromPlane: Float32Array;\n        inliers: number;\n    };\n    /** La exportación añadió un fotograma clave de la vista actual. */\n    currentViewCaptured?: boolean;\n}\nexport declare const ODOMETRY_STAGES: readonly [\n    \"grayMs\",\n    \"cornersMs\",\n    \"flowMs\",\n    \"flowNormalMs\",\n    \"flowWideMs\",\n    \"flowRetryMs\",\n    \"initializationMs\",\n    \"poseMs\",\n    \"mapUpdateMs\",\n    \"keyframesMs\",\n    \"planeMs\",\n    \"planeFitMs\",\n    \"planeConsensusMs\",\n    \"relocalizationMs\",\n    \"workerMs\"\n];\nexport type OdometryTimings = Partial<Record<typeof ODOMETRY_STAGES[number], number>>;\nexport declare const ODOMETRY_SCAN_HINTS: readonly [\n    \"low-texture\",\n    \"move-sideways\",\n    \"map-initializing\",\n    \"plane-unverified\",\n    \"return-to-map\",\n    \"map-matches-insufficient\",\n    \"map-pose-unverified\",\n    \"map-pose-confirming\",\n    \"surface-ready\"\n];\n/** Indicio de escaneo derivado del estimador local. */\nexport type OdometryScanHint = typeof ODOMETRY_SCAN_HINTS[number];\nexport type OdometryEstimate = ({\n    status: 'initializing' | 'lost';\n    mapId: string;\n} | {\n    status: 'tracked';\n    mapId: string;\n    /** Pose acumulada T_world_camera, NO delta entre frames. Convención WebGL. */\n    worldFromCamera: Float32Array;\n    projectionMatrix: Float32Array;\n    scale: 'relative' | 'metric';\n    trackedPoints: number;\n    environmentReady?: boolean;\n    processingMs?: number;\n    reprojectionErrorPx?: number;\n    relocalized?: boolean;\n    keyframeCorrected?: boolean;\n    /** Pose held against distributed, near-static visual correspondences. */\n    stationary?: boolean;\n    /** Solo emitir tras triangulación y verificación geométrica de un plano. */\n    groundPlane?: {\n        worldFromPlane: Float32Array;\n        inliers: number;\n    };\n}) & {\n    timings?: OdometryTimings;\n    scanHint?: OdometryScanHint;\n};\n/** ABI JavaScript del módulo local que encapsula el WASM del usuario. */\nexport interface OdometryBackend {\n    /**\n     * Pipeline esperado en WASM: gris -> Shi-Tomasi/FAST -> Lucas-Kanade piramidal\n     * -> comprobación forward/backward -> geometría robusta -> keyframes/mapa -> pose.\n     * Reponer puntos, detectar falta de paralaje y declarar lost ante degeneración.\n     * Intrínsecos se escalan al tamaño RGBA recibido. No inferir traslación 3D\n     * simplemente sumando desplazamientos de píxeles.\n     */\n    processFrame(frame: {\n        rgba: Uint8ClampedArray;\n        width: number;\n        height: number;\n        timestampMs: number;\n    }): OdometryEstimate | Promise<OdometryEstimate>;\n    reset(): void | Promise<void>;\n    exportMap?(includeCurrentView?: boolean): OdometryMapSnapshot;\n    importMap?(snapshot: OdometryMapSnapshot): void;\n    checkVisualReference?(action: 'capture' | 'verify', id: string, timestampMs: number): VisualReferenceResult;\n}\nexport type VisualReferenceResult = {\n    status: 'captured';\n    points: number;\n} | {\n    status: 'verified';\n    inliers: number;\n    reprojectionErrorPx: number;\n    medianImageShiftPx: number;\n    directReturnUnits: number;\n    trajectoryDeltaUnits: number;\n} | {\n    status: 'unavailable' | 'insufficient-support' | 'missing-reference';\n};\nexport interface OdometryModule {\n    createOdometryBackend(config: OdometryConfig): Promise<OdometryBackend>;\n}\n"
    },
    {
      "file": "slam/OpticalFlowSLAM.d.ts",
      "code": "import type { CameraFrame } from '../camera/CameraManager.js';\nimport type { OdometryConfig, OdometryEstimate, OdometryMapSnapshot, VisualReferenceResult } from './OdometryBackend.js';\nexport interface OpticalFlowOptions extends OdometryConfig {\n    /** Módulo ESM local que exporta createOdometryBackend; carga su propio .wasm. */\n    moduleURL?: URL;\n    workerFactory?: () => Worker;\n}\n/** Cliente del backend WASM. No simula una pose si el backend no está disponible. */\nexport declare class OpticalFlowSLAM {\n    constructor(options: OpticalFlowOptions);\n    start(signal?: AbortSignal): Promise<void>;\n    processFrame(frame: CameraFrame, signal?: AbortSignal): Promise<OdometryEstimate | null>;\n    checkVisualReference(action: 'capture' | 'verify', referenceId: string, signal?: AbortSignal): Promise<VisualReferenceResult>;\n    exportMap(signal?: AbortSignal, includeCurrentView?: boolean): Promise<OdometryMapSnapshot>;\n    importMap(snapshot: OdometryMapSnapshot, signal?: AbortSignal): Promise<void>;\n    stop(): void;\n    dispose(): void;\n}\n"
    },
    {
      "file": "slam/SLAMManager.d.ts",
      "code": "import type { ARPose } from '../Pose.js';\nimport type { CameraFrame } from '../camera/CameraManager.js';\nimport type { CameraIntrinsics } from '../Pose.js';\nexport interface SLAMOptions {\n    /** El renderer configura XRWebGLLayer y su propio bucle de renderizado. */\n    attachSession: (session: XRSession) => Promise<void>;\n    overlayRoot?: HTMLElement;\n    onPose: (pose: ARPose) => void;\n    onSurface?: (matrix: Float32Array) => void;\n    onLost?: () => void;\n    onEnd?: () => void;\n    onError?: (error: Error) => void;\n    getGLContext?: () => WebGL2RenderingContext;\n    requireCameraAccess?: boolean;\n    onCameraFrame?: (frame: CameraFrame, worldFromCamera: Float32Array, intrinsics: CameraIntrinsics, referenceEpoch: number) => Promise<void>;\n    onAlignmentUnavailable?: (error: Error) => void;\n}\n/** Tracking nativo; las poses de hit-test no se presentan como una malla completa. */\nexport declare class SLAMManager {\n    get imageAlignmentAvailable(): boolean;\n    get hasPlacement(): boolean;\n    get referenceEpoch(): number;\n    constructor(options: SLAMOptions);\n    static isSupported(): Promise<boolean>;\n    /** Llamar desde un gesto de usuario; requestSession se invoca antes del primer await. */\n    start(signal?: AbortSignal): Promise<void>;\n    /**\n     * Solo preservar pose con T_world_camera alineada al MISMO frame del marcador.\n     * Sin esa observación, habilitar hit-test y colocar mediante un gesto select.\n     */\n    switchToSLAM(currentMatrix: Float32Array, alignedWorldFromCamera?: Float32Array): void;\n    stop(): Promise<void>;\n}\n"
    },
    {
      "file": "tools/MarkerCompiler.d.ts",
      "code": "import type { MarkerQuality } from '../tracking/ImageCompiler.js';\nexport declare class MarkerCompiler {\n    constructor(options?: {\n        workerFactory?: () => Worker;\n    });\n    /** JPG/PNG original; decodificación EXIF, ORB y binario se calculan en Worker. */\n    compile(file: Blob, options: {\n        physicalWidthMeters: number;\n        opencvURL: string;\n        maxDimension?: number;\n    }, signal?: AbortSignal): Promise<{\n        buffer: ArrayBuffer;\n        quality: MarkerQuality;\n    }>;\n    dispose(): void;\n}\n"
    },
    {
      "file": "tracking/ImageCompiler.d.ts",
      "code": "export declare const TARGET_HEADER_BYTES = 48;\nexport declare const TARGET_MAX_BYTES: number;\nexport declare const TARGET_MAX_FEATURES = 100000;\nexport declare const ORB_DESCRIPTOR_BYTES = 32;\nexport interface MarkerFeatures {\n    width: number;\n    height: number;\n    /** x,y,ángulo en radianes,respuesta por punto; descriptores ORB de 32 bytes. */\n    keypoints: Float32Array;\n    descriptors: Uint8Array;\n}\nexport interface CompiledMarker extends MarkerFeatures {\n    simulated: boolean;\n    physicalWidthMeters: number;\n    extractorId: number;\n}\nexport interface DecodedImage {\n    data: Uint8ClampedArray;\n    width: number;\n    height: number;\n}\nexport interface CompilerOptions {\n    /** Precalcular vistas acortadas para inclinaciones fuertes. true por defecto. */\n    affineViews?: boolean;\n    physicalWidthMeters: number;\n    opencvURL?: string;\n    extractorId?: number;\n    maxDimension?: number;\n    /** Solo fixtures o compatibilidad: nunca se habilita implícitamente. */\n    simulate?: boolean;\n    extract?: (encoded: Uint8Array) => Promise<MarkerFeatures>;\n    decode?: (encoded: Uint8Array) => Promise<DecodedImage>;\n}\nexport interface MarkerQuality {\n    featureCount: number;\n    coverage: number;\n    duplicateRatio: number;\n    usable: boolean;\n    warnings: string[];\n}\n/** CRC32 IEEE: corrupción de almacenamiento/transporte, no autenticación. */\nexport declare function crc32(bytes: Uint8Array): number;\nexport declare function analyzeFeatures(features: MarkerFeatures): MarkerQuality;\n/** Compilador real; usar en un Worker de preprocesamiento o con el CLI de Node. */\nexport declare class ImageCompiler {\n    compile(source: Uint8Array | Blob, options: CompilerOptions): Promise<ArrayBuffer>;\n    compileRGBA(image: DecodedImage, options: CompilerOptions): Promise<ArrayBuffer>;\n}\nexport declare function decodeImageBrowser(encoded: Uint8Array, max: number): Promise<DecodedImage>;\nexport declare function encodeMarker(features: MarkerFeatures, options: CompilerOptions, simulated?: boolean): ArrayBuffer;\n/** Valida antes de reservar arrays. El llamador conserva el buffer de entrada. */\nexport declare function decodeMarker(buffer: ArrayBuffer): CompiledMarker;\n"
    },
    {
      "file": "tracking/Tracker.d.ts",
      "code": "import { type ImageTrackingProfile } from './profile.js';\nimport type { CameraFrame } from '../camera/CameraManager.js';\nimport type { CameraIntrinsics } from '../Pose.js';\nimport type { TrackingResult, TrackingBatchResult } from './types.js';\nexport type { TrackingResult, ImageObservation } from './types.js';\nexport interface TrackerOptions {\n    opencvURL?: string | URL;\n    calibration?: CameraIntrinsics;\n    allowEstimatedCalibration?: boolean;\n    timeoutMs?: number;\n    workerFactory?: () => Worker;\n}\nexport declare class Tracker {\n    get latestProfile(): ImageTrackingProfile | null;\n    constructor(options?: TrackerOptions);\n    get state(): 'idle' | 'busy' | 'disposed';\n    get hasTarget(): boolean;\n    loadTarget(buffer: ArrayBuffer, signal?: AbortSignal, targetId?: string): Promise<void>;\n    get targetIds(): readonly string[];\n    loadTargets(targets: readonly {\n        id: string;\n        buffer: ArrayBuffer;\n    }[], signal?: AbortSignal): Promise<void>;\n    processFrame(frame: CameraFrame, signal?: AbortSignal, calibrationOverride?: CameraIntrinsics): Promise<TrackingResult | null>;\n    /** Un RGBA y un Worker para todos los marcadores. No duplicar el frame por target. */\n    processTargetsFrame(frame: CameraFrame, signal?: AbortSignal): Promise<TrackingBatchResult | null>;\n    dispose(): void;\n}\n"
    },
    {
      "file": "tracking/events.d.ts",
      "code": "import type { ARPose } from '../Pose.js';\nimport type { OdometryScanHint } from '../slam/OdometryBackend.js';\nexport type TrackingIssue = 'low-texture' | 'small-target' | 'blur' | 'high-motion' | 'insufficient-matches' | 'occlusion-or-out-of-view' | 'device-load';\n/** Indicadores heurísticos: una imagen sin rasgos no permite distinguir siempre blur y poca textura. */\nexport interface FrameQuality {\n    gradient: number;\n    laplacianVariance: number;\n    motionPixels: number;\n    targetSizePx: number;\n    featureCount: number;\n    inliers: number;\n    reprojectionErrorPx: number;\n}\nexport interface TrackingQualityEvent extends FrameQuality {\n    targetId: string;\n    timestampMs: number;\n    state: 'tracking' | 'recovering' | 'lost';\n    score: number;\n    processingMs: number;\n    issues: TrackingIssue[];\n    diagnosis: 'heuristic';\n}\nexport interface TargetFoundEvent {\n    targetId: string;\n    timestampMs: number;\n    pose: ARPose;\n}\nexport interface TargetLostEvent {\n    targetId: string;\n    timestampMs: number;\n    retained: boolean;\n    reason: 'lost' | 'removed' | 'stopped';\n}\nexport interface TargetVisibilityEvent {\n    targetId: string;\n    visible: boolean;\n    reason: 'tracked' | 'recovering' | 'lost' | 'removed' | 'stopped' | 'policy';\n}\nexport interface AREventMap {\n    scanGuidance: {\n        hint: OdometryScanHint;\n        timestampMs: number;\n    };\n    targetFound: TargetFoundEvent;\n    targetLost: TargetLostEvent;\n    trackingQuality: TrackingQualityEvent;\n    targetVisibility: TargetVisibilityEvent;\n}\n"
    },
    {
      "file": "tracking/profile.d.ts",
      "code": "/** Tiempos monotónicos por frame; el total Worker incluye las etapas y su preparación. */\nexport declare const TRACKING_STAGES: readonly [\n    \"grayMs\",\n    \"qualityMs\",\n    \"supportMs\",\n    \"opticalFlowMs\",\n    \"flowValidationMs\",\n    \"orbMs\",\n    \"matchingMs\",\n    \"homographyMs\",\n    \"poseMs\",\n    \"workerMs\",\n    \"roundTripMs\",\n    \"transportAndSchedulingMs\"\n];\nexport declare const TRACKING_COUNTS: readonly [\n    \"flowAttempts\",\n    \"flowAccepted\",\n    \"redetections\",\n    \"orbExtractions\",\n    \"flowInputPoints\",\n    \"cachedAttempts\",\n    \"fullDetections\",\n    \"matchingQueryDescriptors\",\n    \"flowReliable\",\n    \"redetectMissing\",\n    \"redetectWeakSupport\",\n    \"redetectDeadline\",\n    \"redetectVerification\",\n    \"globalDeferred\",\n    \"flowSparseReliable\",\n    \"weakDistribution\",\n    \"weakReprojection\",\n    \"weakRetention\",\n    \"cacheConflicts\",\n    \"exactMatchingCalls\",\n    \"opencvMatchingCalls\",\n    \"emptyMatchingCalls\"\n];\nexport interface ImageTrackingProfile {\n    timings: Record<typeof TRACKING_STAGES[number], number>;\n    counts: Record<typeof TRACKING_COUNTS[number], number>;\n}\nexport declare function createTrackingProfile(): ImageTrackingProfile;\nexport declare function copyTrackingProfile(value: unknown): ImageTrackingProfile | null;\nexport declare function measureTracking<T>(profile: ImageTrackingProfile, key: typeof TRACKING_STAGES[number], run: () => T): T;\n"
    },
    {
      "file": "tracking/types.d.ts",
      "code": "import type { CameraIntrinsics } from '../Pose.js';\nimport type { ImageTrackingProfile } from './profile.js';\nimport type { FrameQuality } from './events.js';\nexport interface ImageObservation {\n    rgba: ArrayBuffer;\n    width: number;\n    height: number;\n    timestampMs: number;\n    sessionId: number;\n    intrinsics: CameraIntrinsics;\n    projectionSource?: 'calibrated' | 'estimated';\n    cameraFromMarker: Float32Array;\n    imagePoints: Float32Array;\n    objectPoints: Float32Array;\n    markerCorners: Float32Array;\n}\nexport type TrackingResult = {\n    sessionId: number;\n    timestampMs: number;\n    processingMs: number;\n    quality?: FrameQuality;\n    targetId?: string;\n    profile?: ImageTrackingProfile;\n} & ({\n    status: 'not-found';\n    matrix: null;\n} | {\n    status: 'tracked';\n    matrix: Float32Array;\n    projectionMatrix: Float32Array;\n    projectionSource: 'calibrated' | 'estimated';\n    inliers: number;\n    reprojectionErrorPx: number;\n    reference: ImageObservation;\n});\nexport interface TrackingFrameRequest {\n    type: 'FRAME' | 'FRAME_BATCH';\n    id: number;\n    buffer: ArrayBuffer;\n    width: number;\n    height: number;\n    sessionId: number;\n    timestampMs: number;\n    intrinsics: CameraIntrinsics;\n    projectionSource: 'calibrated' | 'estimated';\n}\nexport interface TrackingBatchResult {\n    results: TrackingResult[];\n    processingMs: number;\n    profile?: ImageTrackingProfile;\n}\n"
    },
    {
      "file": "vision/calibration.d.ts",
      "code": "import type { CameraIntrinsics } from '../Pose.js';\nexport declare function validateIntrinsics(k: CameraIntrinsics): void;\n/** No corregir silenciosamente un recorte o una rotación no observados. */\nexport declare function scaleIntrinsics(k: CameraIntrinsics, width: number, height: number): CameraIntrinsics;\nexport declare function estimateIntrinsics(width: number, height: number, verticalFovDegrees?: number): CameraIntrinsics;\n/** Proyección OpenGL/WebGL, píxeles sin distorsión, origen superior izquierdo. */\nexport declare function projectionFromIntrinsics(k: CameraIntrinsics, near?: number, far?: number): Float32Array;\nexport declare function rotateIntrinsics(k: CameraIntrinsics, degrees: 0 | 90 | 180 | 270): CameraIntrinsics;\nexport declare function normalizedPixel(x: number, y: number, k: CameraIntrinsics): [\n    number,\n    number\n];\n"
    },
    {
      "file": "wrappers/SurfacePlacement.d.ts",
      "code": "import { RingGeometry, MeshBasicMaterial, Mesh } from 'three';\nimport type { ARPose } from '../Pose.js';\nexport type PlacementState = 'idle' | 'scanning' | 'surface-found' | 'placed' | 'lost';\n/** Guía de presentación; nunca genera una pose ni supone que un hit-test sea suelo semántico. */\nexport declare class SurfacePlacement {\n    readonly reticle: Mesh<RingGeometry, MeshBasicMaterial, import(\"three\").Object3DEventMap>;\n    constructor(manual: boolean, changed: (state: PlacementState) => void, now?: () => number, onStale?: () => void, showGrid?: boolean);\n    get state(): PlacementState;\n    get canConfirm(): boolean;\n    begin(): void;\n    status(message: string): void;\n    observeSurface(matrix: Float32Array): void;\n    observePose(pose: ARPose): void;\n    confirm(): void;\n    tick(): void;\n    dispose(): void;\n}\n"
    },
    {
      "file": "wrappers/ThreeARGroup.d.ts",
      "code": "import { Group } from 'three';\nimport type { ARPose } from '../Pose.js';\nimport type { WebAREngine } from '../WebAREngine.js';\nexport declare class ThreeARGroup extends Group {\n    constructor();\n    /** Contenido independiente por marcador; no reinicia animaciones al perderlo. */\n    bind(engine: WebAREngine, targetId?: string): this;\n    unbind(): void;\n    dispose(): void;\n    /**\n     * Con metadata, usar pose de mundo: sirve con cámara normal y cámara XR.\n     * Sin metadata, matrix es modelView y requiere una cámara identidad.\n     * El core ya normalizó OpenCV -> WebGL; no repetir la conversión aquí.\n     */\n    update(matrix: Float32Array, pose?: ARPose): void;\n}\n"
    },
    {
      "file": "wrappers/ThreeARModel.d.ts",
      "code": "import { Group } from 'three';\nexport interface ARModelOptions {\n    /** Carpeta local con draco_wasm_wrapper.js, draco_decoder.wasm y draco_decoder.js. */\n    dracoDecoderPath?: string | URL;\n    maxBytes?: number;\n}\nexport interface ARModelLoadOptions {\n    /** Ajustar dimensión máxima, centrar X/Z y apoyar base en Y=0. false conserva unidades originales. */\n    fitSize?: number | false;\n    autoplay?: boolean;\n    signal?: AbortSignal;\n}\nexport interface ARAnimationOptions {\n    loop?: 'repeat' | 'once' | 'pingpong';\n    repetitions?: number;\n    speed?: number;\n    crossFadeSeconds?: number;\n    clampWhenFinished?: boolean;\n}\n/** GLB autocontenido, sin CDN. Añadirlo a ThreeARGroup o a una entidad A-Frame. */\nexport declare class ThreeARModel extends Group {\n    constructor(options?: ARModelOptions);\n    get model(): Group | null;\n    /** Una carga nueva cancela la anterior. El modelo previo se mantiene si la nueva falla. */\n    load(source: Blob | string | URL, options?: ARModelLoadOptions): Promise<this>;\n    /** Llamar con delta en segundos desde el bucle del renderer. */\n    update(deltaSeconds: number): void;\n    setSize(size: number | false): void;\n    playAnimation(nameOrIndex?: string | number, options?: ARAnimationOptions): void;\n    configureAnimation(options: ARAnimationOptions): void;\n    pauseAnimations(): void;\n    resumeAnimations(): void;\n    get animationState(): {\n        name: string;\n        time: number;\n        paused: boolean;\n        speed: number;\n        running: boolean;\n    } | null;\n    onAnimationFinished(listener: (name: string) => void): () => void;\n    stopAnimations(): void;\n    unload(): void;\n    dispose(): void;\n}\n"
    },
    {
      "file": "wrappers/ThreeARScene.d.ts",
      "code": "import { Scene, PerspectiveCamera, WebGLRenderer, type Object3D } from 'three';\nimport { WebAREngine, type EngineOptions } from '../WebAREngine.js';\nimport { ThreeARGroup } from './ThreeARGroup.js';\nexport interface ARSceneOptions {\n    container: HTMLElement;\n    engineOptions?: EngineOptions;\n    maxPixelRatio?: number;\n    lighting?: boolean;\n    fit?: 'contain' | 'cover';\n    /** MSAA al crear el contexto; cambiar exige recrear la escena. */\n    antialias?: boolean;\n}\n/** Wrapper opcional: script clásico + API propia, sin editor ni framework obligatorio. */\nexport declare class ThreeARScene {\n    readonly engine: WebAREngine;\n    readonly scene: Scene;\n    readonly camera: PerspectiveCamera;\n    readonly renderer: WebGLRenderer;\n    constructor(options: ARSceneOptions);\n    getAnchor(targetId?: string): ThreeARGroup;\n    addContent(targetId: string, content: Object3D): void;\n    removeContent(content: Object3D): void;\n    onRender(callback: (deltaSeconds: number) => void): () => void;\n    onAfterRender(callback: () => void): () => void;\n    dispose(): Promise<void>;\n}\n"
    },
    {
      "file": "wrappers/ThreeARVideo.d.ts",
      "code": "import { Group, Mesh, PlaneGeometry, ShaderMaterial, type ColorRepresentation } from 'three';\nexport interface ChromaKeyOptions {\n    color?: ColorRepresentation;\n    similarity?: number;\n    smoothness?: number;\n    spill?: number;\n}\nexport interface ARVideoOptions {\n    width?: number;\n    orientation?: 'flat' | 'upright';\n    muted?: boolean;\n    loop?: boolean;\n    chromaKey?: ChromaKeyOptions | false;\n}\n/** MP4 a través del decoder nativo. Reproducción independiente del estado del marcador. */\nexport declare class ThreeARVideo extends Group {\n    readonly videoElement: HTMLVideoElement;\n    readonly mesh: Mesh<PlaneGeometry, ShaderMaterial>;\n    constructor(options?: ARVideoOptions);\n    setChromaKey(options: ChromaKeyOptions | false): void;\n    setWidth(width: number): void;\n    setOrientation(orientation: 'flat' | 'upright'): void;\n    /** No reproduce ni rebobina automáticamente al recuperar un marcador. */\n    setSource(source: Blob | string | URL): Promise<void>;\n    /** Invocar desde un gesto del usuario; propaga bloqueos de autoplay para mostrar un botón. */\n    play(): Promise<void>;\n    pause(): void;\n    dispose(): void;\n}\n"
    },
    {
      "file": "wrappers/ThreeCameraBackground.d.ts",
      "code": "import { Mesh } from 'three';\nimport type { CameraIntrinsics } from '../Pose.js';\n/** Fondo de cámara rectificado en GPU: la proyección K debe coincidir con la escena 3D. */\nexport declare class ThreeCameraBackground {\n    readonly object3D: Mesh;\n    constructor(video: HTMLVideoElement, calibration?: CameraIntrinsics);\n    setCalibration(calibration?: CameraIntrinsics): void;\n    dispose(): void;\n}\n"
    },
    {
      "file": "wrappers/aframe-component.d.ts",
      "code": "import type { Object3D, Camera } from 'three';\nimport type { WebAREngine } from '../WebAREngine.js';\nimport { ThreeCameraBackground } from './ThreeCameraBackground.js';\ninterface ComponentInstance {\n    data: {\n        target: string;\n        physicalWidth: number;\n        targetId: string;\n    };\n    el: HTMLElement & {\n        object3D: Object3D;\n        sceneEl?: {\n            camera?: Camera;\n            object3D?: Object3D;\n        };\n    };\n    unsubscribe?: () => void;\n    originalAutoUpdate?: boolean;\n    originalVisible?: boolean;\n    removed?: boolean;\n    camera?: Camera;\n    cameraAutoUpdate?: boolean;\n    background?: ThreeCameraBackground;\n    releaseBackground?: () => void;\n    releaseCamera?: () => void;\n}\ninterface AFrameRegistry {\n    registerComponent(name: string, definition: {\n        schema: {\n            target: {\n                type: 'string';\n                default: string;\n            };\n            physicalWidth: {\n                type: 'number';\n                default: number;\n            };\n            targetId: {\n                type: 'string';\n                default: string;\n            };\n        };\n        init(this: ComponentInstance): void;\n        update(this: ComponentInstance, previous: {\n            target?: string;\n            physicalWidth?: number;\n            targetId?: string;\n        }): void;\n        remove(this: ComponentInstance): void;\n    }): unknown;\n}\n/** Una instancia de motor por escena; configurar su cámara/renderer al crearla. */\nexport declare function registerAFrameComponent(AFRAME: AFrameRegistry, engine: WebAREngine): void;\nexport {};\n"
    },
    {
      "file": "wrappers/aframe-model.d.ts",
      "code": "import type { Object3D } from 'three';\nimport { ThreeARModel, type ARModelOptions } from './ThreeARModel.js';\ninterface Instance {\n    data: {\n        src: string;\n        fitSize: number;\n        autoplay: boolean;\n    };\n    el: HTMLElement & {\n        object3D: Object3D;\n    };\n    model?: ThreeARModel;\n    generation?: number;\n}\ninterface Registry {\n    registerComponent(name: string, definition: {\n        schema: {\n            src: {\n                type: 'string';\n                default: string;\n            };\n            fitSize: {\n                type: 'number';\n                default: number;\n            };\n            autoplay: {\n                type: 'boolean';\n                default: boolean;\n            };\n        };\n        init(this: Instance): void;\n        update(this: Instance, previous: Partial<Instance['data']>): void;\n        tick(this: Instance, time: number, delta: number): void;\n        remove(this: Instance): void;\n    }): unknown;\n}\n/** Usar en un hijo de la entidad my-ar-tracker; mantiene separada la pose del contenido. */\nexport declare function registerAFrameModelComponent(AFRAME: Registry, options?: ARModelOptions): void;\nexport {};\n"
    },
    {
      "file": "wrappers/aframe-video.d.ts",
      "code": "import type { Object3D } from 'three';\nimport { ThreeARVideo } from './ThreeARVideo.js';\ninterface Instance {\n    data: {\n        src: string;\n        width: number;\n        chromaKey: boolean;\n        keyColor: string;\n        similarity: number;\n        smoothness: number;\n        spill: number;\n        muted: boolean;\n        loop: boolean;\n    };\n    el: HTMLElement & {\n        object3D: Object3D;\n    };\n    video?: ThreeARVideo;\n    generation?: number;\n}\ninterface Registry {\n    registerComponent(name: string, definition: {\n        schema: Record<string, {\n            type: string;\n            default: string | number | boolean;\n        }>;\n        init(this: Instance): void;\n        update(this: Instance, previous: Partial<Instance['data']>): void;\n        remove(this: Instance): void;\n    }): unknown;\n}\nexport declare function registerAFrameVideoComponent(AFRAME: Registry): void;\nexport {};\n"
    },
    {
      "file": "wrappers/web-components.d.ts",
      "code": "import { ThreeARScene } from './ThreeARScene.js';\nimport { ThreeARModel, type ARAnimationOptions } from './ThreeARModel.js';\nimport { ThreeARVideo } from './ThreeARVideo.js';\nimport { type PlacementState } from './SurfacePlacement.js';\nimport { ARDiagnostics, type DiagnosticReport } from '../diagnostics/ARDiagnostics.js';\nimport type { WebAREngine, SurfaceTransitionOptions, SurfaceTransitionResult } from '../WebAREngine.js';\nexport interface ARComponentsOptions {\n    assetBase?: string | URL;\n}\nexport interface ARSceneElement extends HTMLElement {\n    readonly app: ThreeARScene | null;\n    readonly engine: WebAREngine | null;\n    readonly updateComplete: Promise<void>;\n    readonly diagnostics: ARDiagnostics | null;\n    readonly placementState: PlacementState;\n    confirmPlacement(): void;\n    getDiagnosticsReport(): DiagnosticReport | null;\n    downloadDiagnostics(): void;\n    start(): Promise<void>;\n    stop(): Promise<void>;\n    refresh(): Promise<void>;\n    enableSLAM(options?: SurfaceTransitionOptions): Promise<SurfaceTransitionResult>;\n}\nexport interface ARModelElement extends HTMLElement {\n    readonly model: ThreeARModel | null;\n    readonly updateComplete: Promise<void>;\n    reload(): Promise<void>;\n    playAnimation(nameOrIndex: string | number, options?: ARAnimationOptions): void;\n    pauseAnimations(): void;\n    resumeAnimations(): void;\n    stopAnimations(): void;\n}\nexport interface ARVideoElement extends HTMLElement {\n    readonly video: ThreeARVideo | null;\n    readonly updateComplete: Promise<void>;\n    reload(): Promise<void>;\n    play(): Promise<void>;\n    pause(): void;\n}\n/** Opt-in en ESM; standalone registra automáticamente. No toca DOM al importar en Node. */\nexport declare function registerARComponents(options?: ARComponentsOptions): void;\n"
    }
  ]
}
