gps-plus-slam-app-framework 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-selectors-CcZ5UV-8.d.ts → app-selectors-CrOucL00.d.ts} +1 -1
- package/dist/ar/bresenham3d.d.ts +1 -1
- package/dist/ar/camera-blit-capture.d.ts +2 -2
- package/dist/ar/camera-blit-capture.js +87 -9
- package/dist/ar/capability-checker.d.ts +1 -1
- package/dist/ar/capture-failure-tracker.d.ts +1 -1
- package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
- package/dist/ar/depth-grid-lookup.d.ts +2 -0
- package/dist/ar/depth-grid-lookup.js +43 -0
- package/dist/ar/depth-sampler.d.ts +2 -2
- package/dist/ar/depth-sampler.js +2 -4
- package/dist/ar/depth-unprojection.d.ts +1 -1
- package/dist/ar/enable-gps-ar.d.ts +1 -1
- package/dist/ar/enable-gps-ar.js +26 -1
- package/dist/ar/frame-loop.d.ts +1 -1
- package/dist/ar/image-capture.d.ts +2 -2
- package/dist/ar/image-capture.js +7 -5
- package/dist/ar/index.d.ts +30 -19
- package/dist/ar/index.js +15 -4
- package/dist/ar/occupancy-grid.d.ts +1 -1
- package/dist/ar/occupancy-grid.js +29 -2
- package/dist/ar/planar-pnp.d.ts +2 -0
- package/dist/ar/planar-pnp.js +425 -0
- package/dist/ar/qr-debug-view.d.ts +2 -0
- package/dist/ar/qr-debug-view.js +89 -0
- package/dist/ar/qr-derived-pose.d.ts +2 -0
- package/dist/ar/qr-derived-pose.js +114 -0
- package/dist/ar/qr-detection-controller.d.ts +2 -0
- package/dist/ar/qr-detection-controller.js +2 -0
- package/dist/ar/qr-frontend.d.ts +2 -0
- package/dist/ar/qr-frontend.js +60 -0
- package/dist/ar/qr-pose.d.ts +2 -0
- package/dist/ar/qr-pose.js +267 -0
- package/dist/ar/qr-size-depth-context.d.ts +3 -0
- package/dist/ar/qr-size-depth-context.js +42 -0
- package/dist/ar/qr-size-measurer.d.ts +2 -0
- package/dist/ar/qr-size-measurer.js +2 -0
- package/dist/ar/replay-scene.d.ts +1 -1
- package/dist/ar/replay-scene.js +1 -1
- package/dist/ar/scene-node-names.d.ts +1 -1
- package/dist/ar/webxr-nue-basis.d.ts +1 -1
- package/dist/ar/webxr-session.d.ts +4 -4
- package/dist/ar/webxr-session.js +2 -2
- package/dist/ar/xr-camera-texture.d.ts +1 -1
- package/dist/ar/xr-error-handler.d.ts +1 -1
- package/dist/ar/xr-frame-loop.d.ts +1 -1
- package/dist/ar-Dc72Ksiu.js +382 -0
- package/dist/{ar-world-group-alignment-ColHB_5A.d.ts → ar-world-group-alignment-DDLkgNf_.d.ts} +1 -1
- package/dist/{camera-blit-capture-D5_mNhla.d.ts → camera-blit-capture-CqWe1G7s.d.ts} +66 -4
- package/dist/concurrency-DqAlKX4j.d.ts +50 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/{create-slam-app-store-qNXQ-tq5.d.ts → create-slam-app-store-Ce2FMKCp.d.ts} +5 -5
- package/dist/depth-grid-lookup-vMDrGTk_.d.ts +21 -0
- package/dist/{depth-sampler-Bhanfwla.d.ts → depth-sampler-DwfPYzS7.d.ts} +1 -1
- package/dist/{depth-unprojection-Y6i_mJuT.d.ts → depth-unprojection-CK3b9htH.d.ts} +1 -1
- package/dist/{enable-gps-ar-CapmADVN.d.ts → enable-gps-ar-CjZ1nEdu.d.ts} +4 -4
- package/dist/file-system-utils-Bs7lpeVP.d.ts +40 -0
- package/dist/{frame-conversions-BfsafGWR.d.ts → frame-conversions-D_Af8Dt3.d.ts} +1 -1
- package/dist/{fused-path-DJoVu98b.d.ts → fused-path-C0FHe67t.d.ts} +1 -1
- package/dist/geo/h3-proximity.d.ts +2 -2
- package/dist/geo/h3-proximity.js +61 -2
- package/dist/geo/index.d.ts +2 -2
- package/dist/geo/index.js +2 -2
- package/dist/{gps-anchor-dYeCvvp5.d.ts → gps-anchor-C6I9NDHA.d.ts} +1 -1
- package/dist/{gps-ar-pose-sampler-DVb96iOy.d.ts → gps-ar-pose-sampler-DaHg2aPZ.d.ts} +1 -1
- package/dist/{gps-event-coordinator-BDIQde2x.d.ts → gps-event-coordinator-C7hwHyLA.d.ts} +3 -3
- package/dist/{gps-event-markers-Dc9FT-q1.d.ts → gps-event-markers-Dd0G2bD0.d.ts} +18 -0
- package/dist/{h3-proximity-I1msGPgE.d.ts → h3-proximity-B57C6rYL.d.ts} +39 -1
- package/dist/{image-capture-DZ4HFRgS.d.ts → image-capture-C2Feywet.d.ts} +30 -4
- package/dist/index-BvLo2poy.d.ts +399 -0
- package/dist/{index-KJq2amHF.d.ts → index-m_LneUSi.d.ts} +1 -1
- package/dist/index.d.ts +77 -67
- package/dist/index.js +18 -9
- package/dist/{leaflet-map-overlay-6CJC-E1l.d.ts → leaflet-map-overlay-bnb2U1NQ.d.ts} +1 -1
- package/dist/{map-data-CkloBxIl.d.ts → map-data-DdjPiSav.d.ts} +1 -1
- package/dist/{map-overlay-draw-krOKwDAq.d.ts → map-overlay-draw-CPVdAsFq.d.ts} +1 -1
- package/dist/{null-storage-backend-CxEjZHRW.d.ts → null-storage-backend-CuSdYFsM.d.ts} +2 -2
- package/dist/{occupancy-grid-BRNRaPyT.d.ts → occupancy-grid-Bvi2Gw1U.d.ts} +12 -2
- package/dist/{opfs-storage-DYm8WHq7.d.ts → opfs-storage-DMtlt57S.d.ts} +25 -6
- package/dist/{opfs-storage-backend-CjSAuqg_.d.ts → opfs-storage-backend-CeQAb0SD.d.ts} +3 -3
- package/dist/{persistence-middleware-DwyzgfWr.d.ts → persistence-middleware-5eearhSV.d.ts} +1 -1
- package/dist/planar-pnp-cjthe7Be.d.ts +67 -0
- package/dist/qr-debug-view-B8gTzjMm.d.ts +29 -0
- package/dist/qr-derived-pose-DinKE600.d.ts +122 -0
- package/dist/qr-detected-slice-Cpv-dg82.d.ts +166 -0
- package/dist/qr-detection-controller-B-tLVd-S.js +119 -0
- package/dist/qr-detection-controller-Cd2Ih4cC.d.ts +48 -0
- package/dist/qr-frontend-DufZp2xS.d.ts +58 -0
- package/dist/qr-pose-Bt2reSw7.d.ts +138 -0
- package/dist/qr-pose-aggregation-CFlmLm6w.d.ts +90 -0
- package/dist/qr-pose-aggregation-DXR9STHs.js +200 -0
- package/dist/qr-size-depth-context-onu36E9s.d.ts +13 -0
- package/dist/qr-size-measurer-D7739ZpB.d.ts +165 -0
- package/dist/qr-size-measurer-DLb33geH.js +596 -0
- package/dist/recording-options-D93kksJU.d.ts +369 -0
- package/dist/{recording-replayer-BL-x-7k0.d.ts → recording-replayer-CUEK82tM.d.ts} +2 -2
- package/dist/recording-slice-B-uCgGoh.d.ts +55 -0
- package/dist/{replay-engine-BRqszuQ9.d.ts → replay-engine-BSVd7Zzb.d.ts} +7 -4
- package/dist/{replay-scene-Bw58VL6p.d.ts → replay-scene-CPt56pps.d.ts} +3 -3
- package/dist/sensors/gps-error-handler.d.ts +1 -1
- package/dist/sensors/gps.d.ts +1 -1
- package/dist/sensors/index.d.ts +3 -3
- package/dist/sensors/permission-checker.d.ts +1 -1
- package/dist/sensors/permission-checker.js +1 -1
- package/dist/state/app-selectors.d.ts +1 -1
- package/dist/state/app-selectors.js +3 -1
- package/dist/state/combined-root-state.d.ts +1 -1
- package/dist/state/create-slam-app-store.d.ts +1 -1
- package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
- package/dist/state/gps-event-coordinator.d.ts +1 -1
- package/dist/state/index.d.ts +20 -17
- package/dist/state/index.js +3 -2
- package/dist/state/persistence-middleware.d.ts +1 -1
- package/dist/state/qr-detected-slice.d.ts +4 -0
- package/dist/state/qr-detected-slice.js +311 -0
- package/dist/state/recording-options.d.ts +2 -2
- package/dist/state/recording-options.js +128 -4
- package/dist/state/recording-replayer.d.ts +2 -2
- package/dist/state/recording-slice.d.ts +1 -1
- package/dist/state/recording-slice.js +5 -1
- package/dist/state/replay-engine.d.ts +1 -1
- package/dist/state/replay-engine.js +7 -3
- package/dist/state/store-subscribers.d.ts +2 -2
- package/dist/state/subscribe-to-selector.d.ts +1 -1
- package/dist/state/tracking-quality.d.ts +1 -1
- package/dist/state/tracking-slice.d.ts +1 -1
- package/dist/{state-BkIfpiyA.js → state-IEw0ZsBu.js} +1 -0
- package/dist/storage/file-system-utils.d.ts +2 -2
- package/dist/storage/file-system-utils.js +17 -1
- package/dist/storage/index.d.ts +9 -9
- package/dist/storage/index.js +4 -4
- package/dist/storage/null-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage-backend.js +3 -3
- package/dist/storage/opfs-storage.d.ts +1 -1
- package/dist/storage/opfs-storage.js +9 -8
- package/dist/storage/storage-backend.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.d.ts +2 -0
- package/dist/storage/zip-coverage-embed.js +88 -0
- package/dist/storage/zip-export.d.ts +2 -2
- package/dist/storage/zip-export.js +38 -60
- package/dist/storage/zip-reader.d.ts +1 -1
- package/dist/storage/zip-reader.js +1 -1
- package/dist/{storage-backend-C9HLFtgz.d.ts → storage-backend-CTJHNdMp.d.ts} +1 -1
- package/dist/{store-subscribers-rrkLkFTt.d.ts → store-subscribers-BZP81hjh.d.ts} +2 -2
- package/dist/{subscribe-to-selector-CP3BKSbF.d.ts → subscribe-to-selector-Bp3sLx8L.d.ts} +1 -1
- package/dist/test-utils/browser-mocks.d.ts +7 -1
- package/dist/test-utils/browser-mocks.js +6 -0
- package/dist/test-utils/zip-round-trip-helpers.d.ts +9 -1
- package/dist/test-utils/zip-round-trip-helpers.js +8 -3
- package/dist/{tracking-slice-CdK8c-8P.d.ts → tracking-slice-DJZ9qeGg.d.ts} +1 -1
- package/dist/types/ar-types.d.ts +1 -1
- package/dist/types/geo-types.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/concurrency.d.ts +2 -2
- package/dist/utils/concurrency.js +66 -2
- package/dist/utils/failure-tracker.d.ts +1 -1
- package/dist/utils/format-file-size.d.ts +1 -1
- package/dist/utils/fused-path.d.ts +1 -1
- package/dist/utils/index.d.ts +6 -6
- package/dist/utils/list-formatter.d.ts +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/visualization/accuracy-circles.d.ts +1 -1
- package/dist/visualization/alignment-lerper.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.js +1 -1
- package/dist/visualization/camera-follower.d.ts +1 -1
- package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
- package/dist/visualization/frame-conversions.d.ts +1 -1
- package/dist/visualization/frustum-visibility.d.ts +1 -1
- package/dist/visualization/gps-anchor.d.ts +1 -1
- package/dist/visualization/gps-compass-cubes.d.ts +1 -1
- package/dist/visualization/gps-event-markers.d.ts +1 -1
- package/dist/visualization/gps-event-markers.js +40 -5
- package/dist/visualization/hit-test-reticle.d.ts +1 -1
- package/dist/visualization/hit-test-reticle.js +1 -0
- package/dist/visualization/index.d.ts +18 -18
- package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
- package/dist/visualization/leaflet-map-overlay.js +15 -3
- package/dist/visualization/lerp-utils.d.ts +1 -1
- package/dist/visualization/map-data.d.ts +1 -1
- package/dist/visualization/map-overlay-draw.d.ts +1 -1
- package/dist/visualization/map-overlay.d.ts +1 -1
- package/dist/visualization/three-dispose.d.ts +1 -1
- package/dist/visualization/vis-colors.d.ts +1 -1
- package/dist/{webxr-session-QhcSSub5.js → webxr-session-CJF9Nijp.js} +234 -9
- package/dist/{webxr-session-DtAG9srK.d.ts → webxr-session-COsOjJwn.d.ts} +76 -8
- package/dist/zip-coverage-embed-tFohI2J4.d.ts +41 -0
- package/dist/{zip-export-D_5HAvFz.d.ts → zip-export-DDWXInTR.d.ts} +28 -24
- package/package.json +2 -2
- package/dist/concurrency-CO1FQvs3.d.ts +0 -24
- package/dist/file-system-C_eqiEA8.d.ts +0 -114
- package/dist/file-system-utils-DyAmcuvX.d.ts +0 -24
- package/dist/recording-options-DJBXuMxV.d.ts +0 -182
- package/dist/recording-slice-89O07ebs.d.ts +0 -36
- package/dist/storage/file-system.d.ts +0 -2
- package/dist/storage/file-system.js +0 -289
- /package/dist/{accuracy-circles-BpwWAs8G.d.ts → accuracy-circles-Pi2YeCrM.d.ts} +0 -0
- /package/dist/{alignment-lerper-Dm9G7JJO.d.ts → alignment-lerper-BUTsQ2yu.d.ts} +0 -0
- /package/dist/{ar-types-Dan1MVTi.d.ts → ar-types-BckI1E-O.d.ts} +0 -0
- /package/dist/{bresenham3d-CFfd7n6B.d.ts → bresenham3d-ByjcmEgM.d.ts} +0 -0
- /package/dist/{camera-follower-C2mwEn7c.d.ts → camera-follower-BTb2Yp12.d.ts} +0 -0
- /package/dist/{capability-checker-CQXJHxXg.d.ts → capability-checker-CXqoJYtb.d.ts} +0 -0
- /package/dist/{capture-failure-tracker-CUeU3L_M.d.ts → capture-failure-tracker-BL5SoG2a.d.ts} +0 -0
- /package/dist/{chromium-camera-access-workaround-Jqbn0apH.d.ts → chromium-camera-access-workaround-BNK189P0.d.ts} +0 -0
- /package/dist/{css3d-renderer-manager-ptu_t3B3.d.ts → css3d-renderer-manager-m-ab19vp.d.ts} +0 -0
- /package/dist/{failure-tracker-Cn8Fo9D4.d.ts → failure-tracker-Cnc_xWUw.d.ts} +0 -0
- /package/dist/{format-file-size-CLCZz3lC.d.ts → format-file-size-BFUWvir1.d.ts} +0 -0
- /package/dist/{frame-loop-CMewS8cY.d.ts → frame-loop-BEO9_q3k.d.ts} +0 -0
- /package/dist/{frustum-visibility-CmI96ESS.d.ts → frustum-visibility-D_RGmH98.d.ts} +0 -0
- /package/dist/{geo-types-SaPnIEUM.d.ts → geo-types-DqiBzPO9.d.ts} +0 -0
- /package/dist/{gps-VuezJWK3.d.ts → gps-C5inWeNV.d.ts} +0 -0
- /package/dist/{gps-compass-cubes-BM1uGiYV.d.ts → gps-compass-cubes-BExxrWJ-.d.ts} +0 -0
- /package/dist/{gps-error-handler-CJl_2MVm.d.ts → gps-error-handler-C2bS69oJ.d.ts} +0 -0
- /package/dist/{hit-test-reticle-BEzEybxZ.d.ts → hit-test-reticle-Dqak9hiR.d.ts} +0 -0
- /package/dist/{index-CF05QV2m.d.ts → index-eaI1Z1KR.d.ts} +0 -0
- /package/dist/{lerp-utils-BpV-0Dtk.d.ts → lerp-utils-kLxMJ2Xj.d.ts} +0 -0
- /package/dist/{list-formatter-RRcBe8Vg.d.ts → list-formatter-ct8txwvR.d.ts} +0 -0
- /package/dist/{logger-BEHXsnnq.d.ts → logger-CzQrCe6C.d.ts} +0 -0
- /package/dist/{map-overlay-bcogY5fK.d.ts → map-overlay-Dci4yvm3.d.ts} +0 -0
- /package/dist/{permission-checker-GpAiSCwd.d.ts → permission-checker-CtPtPQRq.d.ts} +0 -0
- /package/dist/{scene-node-names-Bu0S66H1.d.ts → scene-node-names-CdNeQjOE.d.ts} +0 -0
- /package/dist/{session-disposers-M-oashRH.js → session-disposers-D8wnO-uW.js} +0 -0
- /package/dist/{three-dispose-D950t71B.d.ts → three-dispose-BCZkSJp2.d.ts} +0 -0
- /package/dist/{vis-colors-D6omC64K.d.ts → vis-colors-BZsSLI4i.d.ts} +0 -0
- /package/dist/{webxr-nue-basis-CqKQmZzT.d.ts → webxr-nue-basis-CW1wsbm6.d.ts} +0 -0
- /package/dist/{xr-camera-texture-DBwCaKTd.d.ts → xr-camera-texture-BmrP7iNZ.d.ts} +0 -0
- /package/dist/{xr-error-handler-C0AQRmxs.d.ts → xr-error-handler-BEjRgZjt.d.ts} +0 -0
- /package/dist/{xr-frame-loop-BtYytZJg.d.ts → xr-frame-loop-K8ebdjLw.d.ts} +0 -0
- /package/dist/{zip-reader-DSEXt7K6.d.ts → zip-reader-Q2ue6zlC.d.ts} +0 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
//#region ../src/state/recording-options.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Recording Options - User-configurable settings for data capture.
|
|
4
|
+
*
|
|
5
|
+
* Allows users to disable/configure high-frequency data streams
|
|
6
|
+
* (depth sampling, image capture) to improve performance on lower-end devices.
|
|
7
|
+
*
|
|
8
|
+
* Options persist in localStorage across sessions.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Input type for validateRecordingOptions allowing partial nested objects.
|
|
12
|
+
* This allows passing incomplete objects that will be merged with defaults.
|
|
13
|
+
*/
|
|
14
|
+
interface RecordingOptionsInput {
|
|
15
|
+
depth?: Partial<DepthCaptureOptions>;
|
|
16
|
+
images?: Partial<ImageCaptureOptions>;
|
|
17
|
+
arCrashIsolation?: Partial<ArCrashIsolationOptions>;
|
|
18
|
+
occupancy?: Partial<OccupancyOptions>;
|
|
19
|
+
frameTileDisplay?: Partial<FrameTileDisplayOptions>;
|
|
20
|
+
visualization?: Partial<VisualizationOptions>;
|
|
21
|
+
qr?: Partial<QrCaptureOptions>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Diagnostic flags for isolating pre-recording AR startup crashes.
|
|
25
|
+
* These gates affect XR session negotiation and frame-loop behavior,
|
|
26
|
+
* independently of recording-time image/depth capture.
|
|
27
|
+
*/
|
|
28
|
+
interface ArCrashIsolationOptions {
|
|
29
|
+
enableDomOverlay: boolean;
|
|
30
|
+
enableCameraAccess: boolean;
|
|
31
|
+
enableDepthSensingFeature: boolean;
|
|
32
|
+
enableCss3dRenderer: boolean;
|
|
33
|
+
enableCameraTextureAcquisition: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Apply the Chromium WebXR camera-access tab-crash workaround at app
|
|
36
|
+
* bootstrap. The workaround always deletes
|
|
37
|
+
* `XRWebGLBinding.prototype.createProjectionLayer` /
|
|
38
|
+
* `XRRenderState.prototype.layers` (forcing `XRWebGLLayer`) — required on
|
|
39
|
+
* every affected Chrome build observed on-device, including Chrome 150 — and
|
|
40
|
+
* additionally persists the `baseLayer` across
|
|
41
|
+
* `XRSession.prototype.updateRenderState` only for Chrome builds inside the
|
|
42
|
+
* affected window (148.0.7778.12 up to 149.0.7821).
|
|
43
|
+
*
|
|
44
|
+
* Default `true`. Opt-out is offered because forcing `XRWebGLLayer` may break
|
|
45
|
+
* WebXR on unaffected (e.g. Quest) devices.
|
|
46
|
+
*
|
|
47
|
+
* @see GpsPlusSlamJs_AppFramework/src/ar/chromium-camera-access-workaround.ts
|
|
48
|
+
* @see https://github.com/mrdoob/three.js/issues/33404
|
|
49
|
+
*/
|
|
50
|
+
applyChromiumProjectionLayerWorkaround: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Configuration for depth sampling during recording.
|
|
54
|
+
*/
|
|
55
|
+
interface DepthCaptureOptions {
|
|
56
|
+
/** Whether to capture depth samples. Default: true */
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
/** Interval between samples in milliseconds. Default: 1000 */
|
|
59
|
+
intervalMs: number;
|
|
60
|
+
/**
|
|
61
|
+
* Grid size (N×N points per sample). Default: 16 — dense enough to
|
|
62
|
+
* populate the AR-space occupancy grid (2026-06-11 port plan §1).
|
|
63
|
+
*/
|
|
64
|
+
gridSize: number;
|
|
65
|
+
/**
|
|
66
|
+
* Whether to enrich each depth point with the camera color at its view
|
|
67
|
+
* coordinates (RGB voxel coloring, occupancy-grid port plan Iter 8).
|
|
68
|
+
* Costs one small GPU blit+readback per sample (~1 Hz); when off, the
|
|
69
|
+
* occupancy cubes keep the height-based coloring. Default: true.
|
|
70
|
+
*/
|
|
71
|
+
rgb: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Configuration for image capture during recording.
|
|
75
|
+
*/
|
|
76
|
+
interface ImageCaptureOptions {
|
|
77
|
+
/** Whether to capture images. Default: true */
|
|
78
|
+
enabled: boolean;
|
|
79
|
+
/** Interval between captures in milliseconds. Default: 2000 */
|
|
80
|
+
intervalMs: number;
|
|
81
|
+
/** JPEG quality (0.0 - 1.0). Default: 0.7 */
|
|
82
|
+
quality: number;
|
|
83
|
+
/** Resolution divisor: 1 = full native resolution, 2 = half, 4 = quarter. Default: 1 */
|
|
84
|
+
resolutionDivisor: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Configuration for the derived AR-space occupancy grid (the voxelization of
|
|
88
|
+
* the depth samples, port plan 2026-06-11). These settings do NOT change what
|
|
89
|
+
* is recorded — they govern the grid derived from the recorded depth points,
|
|
90
|
+
* so they also apply when replaying an existing recording, letting the same
|
|
91
|
+
* session be re-quantized at a different resolution.
|
|
92
|
+
*/
|
|
93
|
+
interface OccupancyOptions {
|
|
94
|
+
/**
|
|
95
|
+
* Voxel edge length in metres. Drives the occupancy-grid quantization, the
|
|
96
|
+
* debug cubes, and the COLMAP `points3D` density. Default 0.15 (15 cm, Unity
|
|
97
|
+
* parity). Smaller = finer detail but cell count scales as 1/cellSize³, so the
|
|
98
|
+
* range is deliberately clamped (see `OCCUPANCY_CONSTRAINTS`). Read once when
|
|
99
|
+
* the grid is constructed (Enter-AR / replay load), so a change takes effect
|
|
100
|
+
* on the next session rather than mid-session.
|
|
101
|
+
*/
|
|
102
|
+
cellSizeM: number;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Configuration for how captured frame tiles are DISPLAYED in AR (D7-resolution,
|
|
106
|
+
* 2026-06-16 RecorderApp user feedback / Q3). This is **distinct from** the
|
|
107
|
+
* capture setting `images.resolutionDivisor`: capture quality (the JPEG written
|
|
108
|
+
* to the recording) is unchanged — this only downscales the in-AR/replay display
|
|
109
|
+
* texture built from each captured frame, cutting per-tile GPU texture memory.
|
|
110
|
+
*
|
|
111
|
+
* Like {@link OccupancyOptions} it does NOT change what is recorded, so it
|
|
112
|
+
* applies to **both live and replay** (the tile texture is decoded in both). A
|
|
113
|
+
* partial memory mitigation for the OOM/crash track (the tile *count* still
|
|
114
|
+
* grows unbounded — capping/recycling is the separate Track-S fix).
|
|
115
|
+
*/
|
|
116
|
+
interface FrameTileDisplayOptions {
|
|
117
|
+
/**
|
|
118
|
+
* Display-texture resolution divisor: 1 = full captured resolution, 2 = half
|
|
119
|
+
* (each dimension), 4 = quarter, 8 = eighth. Default 2 (half). Higher = less
|
|
120
|
+
* GPU memory per tile but a blurrier in-AR preview. Independent of the capture
|
|
121
|
+
* `images.resolutionDivisor`.
|
|
122
|
+
*/
|
|
123
|
+
divisor: number;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Visibility toggles for the live AR debug overlays (Finding B / DB-2 of
|
|
127
|
+
* 2026-06-14-followup-frame-tile-legacy-aspect-and-live-toggle.md).
|
|
128
|
+
*
|
|
129
|
+
* These gate **only what is drawn live during recording** — they never change
|
|
130
|
+
* what is captured (frame blobs, depth samples, occupancy data, GPS events all
|
|
131
|
+
* continue regardless) and they never affect replay (where reviewing the
|
|
132
|
+
* captured overlays is the whole point). Read once at Enter-AR: toggling
|
|
133
|
+
* mid-session applies on the next Enter-AR, not retroactively.
|
|
134
|
+
*
|
|
135
|
+
* All four default ON, so adding this group is purely additive — every overlay
|
|
136
|
+
* still renders until the operator opts out.
|
|
137
|
+
*/
|
|
138
|
+
interface VisualizationOptions {
|
|
139
|
+
/** Live frame-tile planes (`FrameTileVisualizer`). Default: true */
|
|
140
|
+
frameTiles: boolean;
|
|
141
|
+
/** Voxel depth cubes (`OccupancyCubesVisualizer`). Default: true */
|
|
142
|
+
occupancyCubes: boolean;
|
|
143
|
+
/** Raw/fused/snapshot GPS+VIO alignment spheres (`GpsEventVisualizer`). Default: true */
|
|
144
|
+
gpsAlignmentMarkers: boolean;
|
|
145
|
+
/** N/E/S/W compass orientation cubes (`createGpsCompassCubes`). Default: true */
|
|
146
|
+
compassCubes: boolean;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Configuration for live QR detection + RAW recording (decision §0 of the
|
|
150
|
+
* recorder live-QR follow-up,
|
|
151
|
+
* `2026-06-17-followup-recorder-live-qr-next-steps.md`).
|
|
152
|
+
*
|
|
153
|
+
* OPT-IN (`enabled` defaults to `false`): turning it on adds per-frame RGBA
|
|
154
|
+
* capture + a `BarcodeDetector` decode to the session, so it is operator-gated
|
|
155
|
+
* exactly like the heavy `depth`/`images` streams — an existing recording pays
|
|
156
|
+
* nothing. When on, the producer dispatches one RAW `qrDetected/recordQrDetection`
|
|
157
|
+
* action per accepted decode (size + pose are DERIVED on read, never recorded).
|
|
158
|
+
*/
|
|
159
|
+
interface QrCaptureOptions {
|
|
160
|
+
/** Whether live QR detection + recording runs. Default: false (opt-in). */
|
|
161
|
+
enabled: boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Capture / detection cadence in ms — the SINGLE cadence owner (the producer
|
|
164
|
+
* runs `minIntervalMs: 0`; this throttles the camera-frame source). Default
|
|
165
|
+
* 125 (~8 Hz), matching the QR demo's `DETECT_INTERVAL_MS`.
|
|
166
|
+
*/
|
|
167
|
+
intervalMs: number;
|
|
168
|
+
/**
|
|
169
|
+
* RGBA capture long-edge in px. Larger = more decode range on a small/distant
|
|
170
|
+
* QR but a costlier blit + detect. Default 1024 (the on-device sweep settled
|
|
171
|
+
* here; 512 only decoded small QRs at very close range).
|
|
172
|
+
*/
|
|
173
|
+
captureSize: number;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* User-configurable recording options.
|
|
177
|
+
* Persisted to localStorage for cross-session consistency.
|
|
178
|
+
*/
|
|
179
|
+
interface RecordingOptions {
|
|
180
|
+
/** Depth sampling configuration */
|
|
181
|
+
depth: DepthCaptureOptions;
|
|
182
|
+
/** Image capture configuration */
|
|
183
|
+
images: ImageCaptureOptions;
|
|
184
|
+
/** Diagnostic flags for pre-recording AR crash isolation */
|
|
185
|
+
arCrashIsolation: ArCrashIsolationOptions;
|
|
186
|
+
/** Derived occupancy-grid configuration (voxel size) */
|
|
187
|
+
occupancy: OccupancyOptions;
|
|
188
|
+
/** Frame-tile display-texture resolution (live + replay; capture unchanged) */
|
|
189
|
+
frameTileDisplay: FrameTileDisplayOptions;
|
|
190
|
+
/** Live AR debug-overlay visibility toggles (live-only; replay unaffected) */
|
|
191
|
+
visualization: VisualizationOptions;
|
|
192
|
+
/** Live QR detection + RAW recording configuration (opt-in) */
|
|
193
|
+
qr: QrCaptureOptions;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* localStorage key for persisted options.
|
|
197
|
+
*
|
|
198
|
+
* **Multi-tab caveat:** All tabs/instances sharing the same origin will
|
|
199
|
+
* read and write this key. In multi-tab or embedded scenarios, concurrent
|
|
200
|
+
* saves can silently overwrite each other. Use a custom `storageKey`
|
|
201
|
+
* parameter in `loadRecordingOptions` / `saveRecordingOptions` to isolate
|
|
202
|
+
* instances when needed.
|
|
203
|
+
*/
|
|
204
|
+
declare const STORAGE_KEY = "gps-plus-slam-recorder-options";
|
|
205
|
+
/** Default recording options (all streams enabled) */
|
|
206
|
+
declare const DEFAULT_RECORDING_OPTIONS: RecordingOptions;
|
|
207
|
+
/** Validation constraints for depth options */
|
|
208
|
+
declare const DEPTH_CONSTRAINTS: {
|
|
209
|
+
readonly intervalMs: {
|
|
210
|
+
readonly min: 500;
|
|
211
|
+
readonly max: 5000;
|
|
212
|
+
readonly step: 100;
|
|
213
|
+
};
|
|
214
|
+
readonly gridSize: {
|
|
215
|
+
readonly min: 2;
|
|
216
|
+
readonly max: 32;
|
|
217
|
+
readonly step: 1;
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
/** Validation constraints for image options */
|
|
221
|
+
declare const IMAGE_CONSTRAINTS: {
|
|
222
|
+
readonly intervalMs: {
|
|
223
|
+
readonly min: 1000;
|
|
224
|
+
readonly max: 10000;
|
|
225
|
+
readonly step: 500;
|
|
226
|
+
};
|
|
227
|
+
readonly quality: {
|
|
228
|
+
readonly min: 0.3;
|
|
229
|
+
readonly max: 1;
|
|
230
|
+
readonly step: 0.1;
|
|
231
|
+
};
|
|
232
|
+
readonly resolutionDivisor: {
|
|
233
|
+
readonly min: 1;
|
|
234
|
+
readonly max: 8;
|
|
235
|
+
readonly step: 1;
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Validation constraints for occupancy options.
|
|
240
|
+
*
|
|
241
|
+
* `cellSizeM` is clamped to 1–20 cm. The floor exists because cell count (and
|
|
242
|
+
* therefore the cube `InstancedMesh`, the grid `Map`, and the COLMAP
|
|
243
|
+
* `points3D` row count) scales as 1/cellSize³ — sub-centimetre voxels are both
|
|
244
|
+
* a memory/perf cliff on a phone and below the depth sensor's noise floor.
|
|
245
|
+
* Step is 1 cm (the settings slider operates in cm).
|
|
246
|
+
*/
|
|
247
|
+
declare const OCCUPANCY_CONSTRAINTS: {
|
|
248
|
+
readonly cellSizeM: {
|
|
249
|
+
readonly min: 0.01;
|
|
250
|
+
readonly max: 0.2;
|
|
251
|
+
readonly step: 0.01;
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Validation constraints for the frame-tile display-resolution divisor.
|
|
256
|
+
*
|
|
257
|
+
* Clamped to 1–8 (full down to one-eighth per dimension), mirroring the capture
|
|
258
|
+
* `IMAGE_CONSTRAINTS.resolutionDivisor` range so the settings slider behaves the
|
|
259
|
+
* same. The intended stops are 1, 2, 4, 8 (full / half / quarter / eighth); the
|
|
260
|
+
* divisor is rounded to an integer so the resize target dimensions stay clean.
|
|
261
|
+
*/
|
|
262
|
+
declare const FRAME_TILE_DISPLAY_CONSTRAINTS: {
|
|
263
|
+
readonly divisor: {
|
|
264
|
+
readonly min: 1;
|
|
265
|
+
readonly max: 8;
|
|
266
|
+
readonly step: 1;
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Validation constraints for QR-capture options.
|
|
271
|
+
*
|
|
272
|
+
* `intervalMs` is clamped to 50–1000 ms (20 Hz down to 1 Hz): below ~50 ms the
|
|
273
|
+
* detector cannot keep up and frames just queue; above 1 s tracking feels dead.
|
|
274
|
+
* `captureSize` is clamped to 256–2048 px: under 256 even a near QR loses its
|
|
275
|
+
* modules; over 2048 the blit + decode cost is not worth it on a phone. Both
|
|
276
|
+
* back a settings slider so a corrupt stored value can never break capture.
|
|
277
|
+
*/
|
|
278
|
+
declare const QR_CONSTRAINTS: {
|
|
279
|
+
readonly intervalMs: {
|
|
280
|
+
readonly min: 50;
|
|
281
|
+
readonly max: 1000;
|
|
282
|
+
readonly step: 25;
|
|
283
|
+
};
|
|
284
|
+
readonly captureSize: {
|
|
285
|
+
readonly min: 256;
|
|
286
|
+
readonly max: 2048;
|
|
287
|
+
readonly step: 128;
|
|
288
|
+
};
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* Validate and normalize AR crash isolation flags.
|
|
292
|
+
* Missing or invalid values fall back to defaults.
|
|
293
|
+
*/
|
|
294
|
+
declare function validateArCrashIsolationOptions(options: Partial<ArCrashIsolationOptions>): ArCrashIsolationOptions;
|
|
295
|
+
/**
|
|
296
|
+
* Validate and normalize the live debug-overlay visibility toggles.
|
|
297
|
+
* Each field is boolean-or-default (same policy as the AR-crash-isolation
|
|
298
|
+
* flags): a missing, corrupted, or pre-feature persisted value falls back to
|
|
299
|
+
* the ON default so an overlay is never silently disabled by bad input.
|
|
300
|
+
*/
|
|
301
|
+
declare function validateVisualizationOptions(options: Partial<VisualizationOptions>): VisualizationOptions;
|
|
302
|
+
/**
|
|
303
|
+
* Validate and normalize QR-capture options. `enabled` is boolean-or-default
|
|
304
|
+
* (a corrupt/pre-feature value falls back to the OFF default so QR never
|
|
305
|
+
* silently turns ON); `intervalMs`/`captureSize` are clamped to
|
|
306
|
+
* {@link QR_CONSTRAINTS}, with a `Number.isFinite` guard so a stored `NaN`
|
|
307
|
+
* (which is `typeof 'number'` and survives `clamp`) falls back to the default
|
|
308
|
+
* rather than breaking the camera-frame source.
|
|
309
|
+
*/
|
|
310
|
+
declare function validateQrOptions(options: Partial<QrCaptureOptions>): QrCaptureOptions;
|
|
311
|
+
/**
|
|
312
|
+
* Validate and normalize depth options.
|
|
313
|
+
* Invalid values are clamped to valid ranges.
|
|
314
|
+
*/
|
|
315
|
+
declare function validateDepthOptions(options: Partial<DepthCaptureOptions>): DepthCaptureOptions;
|
|
316
|
+
/**
|
|
317
|
+
* Validate and normalize image options.
|
|
318
|
+
* Invalid values are clamped to valid ranges.
|
|
319
|
+
*/
|
|
320
|
+
declare function validateImageOptions(options: Partial<ImageCaptureOptions>): ImageCaptureOptions;
|
|
321
|
+
/**
|
|
322
|
+
* Validate and normalize occupancy options.
|
|
323
|
+
* Invalid values are clamped to valid ranges.
|
|
324
|
+
*
|
|
325
|
+
* Note the explicit `Number.isFinite` guard: `OccupancyGrid` throws a
|
|
326
|
+
* `RangeError` on a non-finite cell size, and `clamp(NaN, …)` would otherwise
|
|
327
|
+
* pass `NaN` straight through (it is `typeof 'number'`). Falling back to the
|
|
328
|
+
* default keeps a corrupted stored value from crashing grid construction.
|
|
329
|
+
*/
|
|
330
|
+
declare function validateOccupancyOptions(options: Partial<OccupancyOptions>): OccupancyOptions;
|
|
331
|
+
/**
|
|
332
|
+
* Validate and normalize frame-tile display options. `divisor` is clamped to
|
|
333
|
+
* {@link FRAME_TILE_DISPLAY_CONSTRAINTS} and rounded to an integer, with a
|
|
334
|
+
* `Number.isFinite` guard so a stored `NaN` (which is `typeof 'number'` and
|
|
335
|
+
* survives `clamp`) falls back to the default rather than producing a broken
|
|
336
|
+
* resize target.
|
|
337
|
+
*/
|
|
338
|
+
declare function validateFrameTileDisplayOptions(options: Partial<FrameTileDisplayOptions>): FrameTileDisplayOptions;
|
|
339
|
+
/**
|
|
340
|
+
* Validate and normalize a full RecordingOptions object.
|
|
341
|
+
* Merges with defaults and clamps invalid values.
|
|
342
|
+
*/
|
|
343
|
+
declare function validateRecordingOptions(options: RecordingOptionsInput): RecordingOptions;
|
|
344
|
+
/**
|
|
345
|
+
* Load recording options from localStorage.
|
|
346
|
+
* Returns defaults if no saved options exist or parsing fails.
|
|
347
|
+
* Validates and merges with defaults to handle schema evolution.
|
|
348
|
+
* @param storageKey - Optional custom localStorage key (defaults to STORAGE_KEY).
|
|
349
|
+
*/
|
|
350
|
+
declare function loadRecordingOptions(storageKey?: string): RecordingOptions;
|
|
351
|
+
/**
|
|
352
|
+
* Save recording options to localStorage.
|
|
353
|
+
* Options are validated before saving.
|
|
354
|
+
* @param storageKey - Optional custom localStorage key (defaults to STORAGE_KEY).
|
|
355
|
+
*/
|
|
356
|
+
declare function saveRecordingOptions(options: RecordingOptions, storageKey?: string): void;
|
|
357
|
+
/**
|
|
358
|
+
* Reset recording options to defaults.
|
|
359
|
+
* Clears localStorage and returns default options.
|
|
360
|
+
* @param storageKey - Optional custom localStorage key (defaults to STORAGE_KEY).
|
|
361
|
+
*/
|
|
362
|
+
declare function resetRecordingOptions(storageKey?: string): RecordingOptions;
|
|
363
|
+
/**
|
|
364
|
+
* Create a deep copy of recording options.
|
|
365
|
+
* Useful for creating mutable copies of the frozen defaults.
|
|
366
|
+
*/
|
|
367
|
+
declare function cloneRecordingOptions(options: RecordingOptions): RecordingOptions;
|
|
368
|
+
//#endregion
|
|
369
|
+
export { validateFrameTileDisplayOptions as C, validateRecordingOptions as D, validateQrOptions as E, validateVisualizationOptions as O, validateDepthOptions as S, validateOccupancyOptions as T, cloneRecordingOptions as _, FRAME_TILE_DISPLAY_CONSTRAINTS as a, saveRecordingOptions as b, ImageCaptureOptions as c, QR_CONSTRAINTS as d, QrCaptureOptions as f, VisualizationOptions as g, STORAGE_KEY as h, DepthCaptureOptions as i, OCCUPANCY_CONSTRAINTS as l, RecordingOptionsInput as m, DEFAULT_RECORDING_OPTIONS as n, FrameTileDisplayOptions as o, RecordingOptions as p, DEPTH_CONSTRAINTS as r, IMAGE_CONSTRAINTS as s, ArCrashIsolationOptions as t, OccupancyOptions as u, loadRecordingOptions as v, validateImageOptions as w, validateArCrashIsolationOptions as x, resetRecordingOptions as y };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { L as CombinedRootState } from "./create-slam-app-store-
|
|
2
|
-
import { i as RecordedAction } from "./zip-reader-
|
|
1
|
+
import { L as CombinedRootState } from "./create-slam-app-store-Ce2FMKCp.js";
|
|
2
|
+
import { i as RecordedAction } from "./zip-reader-Q2ue6zlC.js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/state/recording-replayer.d.ts
|
|
5
5
|
/**
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { i as DepthSample } from "./ar-types-BckI1E-O.js";
|
|
2
|
+
import { p as RecordingOptions } from "./recording-options-D93kksJU.js";
|
|
3
|
+
import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
|
|
4
|
+
|
|
5
|
+
//#region ../src/state/recording-slice.d.ts
|
|
6
|
+
interface SessionMetadata {
|
|
7
|
+
/**
|
|
8
|
+
* Opaque grouping label the framework does NOT interpret. Consumers (e.g.
|
|
9
|
+
* the recorder) use it to carry app-specific grouping such as a scenario
|
|
10
|
+
* name. Renamed from `scenarioName` on 2026-06-21 to match the on-disk
|
|
11
|
+
* `SessionMetadata.contextTag` (opfs-storage); the reducer maps the legacy
|
|
12
|
+
* `scenarioName` field for replayed pre-rename recordings — see
|
|
13
|
+
* {@link StartSessionPayload}.
|
|
14
|
+
*/
|
|
15
|
+
contextTag: string;
|
|
16
|
+
sessionName: string;
|
|
17
|
+
startTime: number;
|
|
18
|
+
deviceInfo?: string;
|
|
19
|
+
notes?: string;
|
|
20
|
+
/** Recording options used for this session (for replay context) */
|
|
21
|
+
recordingOptions?: RecordingOptions;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Payload accepted by {@link startSession}. New callers pass `contextTag`.
|
|
25
|
+
* Recordings made before the 2026-06-21 rename persist the legacy
|
|
26
|
+
* `scenarioName` instead; when such a `recording/startSession` action is
|
|
27
|
+
* replayed, the reducer maps it onto `contextTag`, so old recordings keep
|
|
28
|
+
* replaying without a separate migration step.
|
|
29
|
+
*/
|
|
30
|
+
type StartSessionPayload = Omit<SessionMetadata, 'contextTag'> & {
|
|
31
|
+
contextTag?: string; /** @deprecated legacy alias for {@link SessionMetadata.contextTag}. */
|
|
32
|
+
scenarioName?: string;
|
|
33
|
+
};
|
|
34
|
+
interface RecordingState {
|
|
35
|
+
isRecording: boolean;
|
|
36
|
+
sessionMetadata: SessionMetadata | null;
|
|
37
|
+
actionCount: number;
|
|
38
|
+
/**
|
|
39
|
+
* Count of failed file write operations during this session.
|
|
40
|
+
* User Feedback Issue #1 Part B: Track write failures for visibility.
|
|
41
|
+
*/
|
|
42
|
+
failedWriteCount: number;
|
|
43
|
+
/**
|
|
44
|
+
* The most recent depth sample, kept ONLY so subscribers can observe new
|
|
45
|
+
* samples via reference comparison (the AR-space occupancy grid is fed
|
|
46
|
+
* this way — see the 2026-06-11 occupancy-grid port plan). The persisted
|
|
47
|
+
* action stream remains the source of truth; no history is kept here.
|
|
48
|
+
* The payload stays in raw WebXR coordinates — conversion-free.
|
|
49
|
+
*/
|
|
50
|
+
latestDepthSample: DepthSample | null;
|
|
51
|
+
}
|
|
52
|
+
declare const startSession: _$_reduxjs_toolkit0.ActionCreatorWithPayload<StartSessionPayload, "recording/startSession">, endSession: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"recording/endSession">, recordDepthSample: _$_reduxjs_toolkit0.ActionCreatorWithPayload<DepthSample, "recording/recordDepthSample">, recordWriteFailure: _$_reduxjs_toolkit0.ActionCreatorWithPayload<string, "recording/recordWriteFailure">;
|
|
53
|
+
declare const recordingReducer: _$_reduxjs_toolkit0.Reducer<RecordingState>;
|
|
54
|
+
//#endregion
|
|
55
|
+
export { recordWriteFailure as a, recordDepthSample as i, SessionMetadata as n, recordingReducer as o, endSession as r, startSession as s, RecordingState as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as SlamAppStore } from "./create-slam-app-store-
|
|
1
|
+
import { i as SlamAppStore } from "./create-slam-app-store-Ce2FMKCp.js";
|
|
2
2
|
import { ReducersMapObject } from "@reduxjs/toolkit";
|
|
3
3
|
|
|
4
4
|
//#region ../src/state/replay-engine.d.ts
|
|
@@ -19,9 +19,12 @@ interface ReplayAction {
|
|
|
19
19
|
* Extract an absolute epoch-ms timestamp from a Redux action, or null
|
|
20
20
|
* if the action type doesn't carry one.
|
|
21
21
|
*
|
|
22
|
-
* IMPORTANT:
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* IMPORTANT: the high-frequency sensor streams (depthSample, qrDetected) return
|
|
23
|
+
* null here ON PURPOSE — they are NOT used to pace replay delays (they anchor to
|
|
24
|
+
* the GPS/image/session timeline by recorded ORDER instead). Their payload
|
|
25
|
+
* `timestamp` IS epoch ms (`performance.timeOrigin + frameTs`, see
|
|
26
|
+
* `ar/depth-sampler.ts`); the QR size as-of join reads those payload timestamps
|
|
27
|
+
* directly, independently of this pacing function. (Risk R4)
|
|
25
28
|
*
|
|
26
29
|
* @param action - A Redux action with type and optional payload
|
|
27
30
|
* @returns Epoch milliseconds, or null if unavailable/unreliable
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as Css3dRendererManager } from "./css3d-renderer-manager-
|
|
2
|
-
import { t as CameraFollower } from "./camera-follower-
|
|
3
|
-
import { t as AlignmentLerper } from "./alignment-lerper-
|
|
1
|
+
import { t as Css3dRendererManager } from "./css3d-renderer-manager-m-ab19vp.js";
|
|
2
|
+
import { t as CameraFollower } from "./camera-follower-BTb2Yp12.js";
|
|
3
|
+
import { t as AlignmentLerper } from "./alignment-lerper-BUTsQ2yu.js";
|
|
4
4
|
import * as THREE from "three";
|
|
5
5
|
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
|
|
6
6
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-
|
|
1
|
+
import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-C2bS69oJ.js";
|
|
2
2
|
export { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, createGpsErrorHandler, getGpsErrorMessage };
|
package/dist/sensors/gps.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-
|
|
1
|
+
import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-C5inWeNV.js";
|
|
2
2
|
export { GpsPosition, RawDeviceOrientation, requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
|
package/dist/sensors/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-
|
|
2
|
-
import { a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission$1, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-
|
|
3
|
-
import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-
|
|
1
|
+
import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-C5inWeNV.js";
|
|
2
|
+
import { a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission$1, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-CtPtPQRq.js";
|
|
3
|
+
import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-C2bS69oJ.js";
|
|
4
4
|
export { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, type GpsPosition, type PermissionCheckResult, type PermissionStatus, type RawDeviceOrientation, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, createGpsErrorHandler, getGpsErrorMessage, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as subscribePermissionChanges, a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission, r as PermissionSubscription, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-
|
|
1
|
+
import { _ as subscribePermissionChanges, a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission, r as PermissionSubscription, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-CtPtPQRq.js";
|
|
2
2
|
export { PermissionCheckResult, PermissionStatus, PermissionSubscription, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, subscribePermissionChanges };
|
|
@@ -410,9 +410,9 @@ function subscribePermissionChanges(callback) {
|
|
|
410
410
|
async function requestAllPermissions() {
|
|
411
411
|
const result = await checkAllPermissions();
|
|
412
412
|
if (result.webxr.supported) result.webxr = await requestWebXRWithDepthPermission();
|
|
413
|
-
if (result.geolocation.supported && result.geolocation.granted !== true) result.geolocation = await requestGeolocationPermission();
|
|
414
413
|
if (result.camera.supported && result.camera.granted !== true) result.camera = await requestCameraPermission();
|
|
415
414
|
if (result.orientation.supported && result.orientation.granted !== true) result.orientation = await requestOrientationPermission();
|
|
415
|
+
if (result.geolocation.supported && result.geolocation.granted !== true) result.geolocation = await requestGeolocationPermission();
|
|
416
416
|
result.fileSystem = checkFileSystemPermission();
|
|
417
417
|
result.allMandatoryReady = result.webxr.supported && result.webxr.granted === true && result.geolocation.supported && result.geolocation.granted === true && result.camera.supported && result.camera.granted === true && result.fileSystem.supported && result.fileSystem.granted === true;
|
|
418
418
|
return result;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-
|
|
1
|
+
import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-CrOucL00.js";
|
|
2
2
|
export { selectAlignmentMatrix, selectFrameTilesInWebXR, selectGpsPositions, selectOdometryPositions, selectOdometryRotations, selectZeroReference };
|
|
@@ -58,7 +58,9 @@ const selectFrameTilesInWebXR = createSelector([selectOdometryPathPoints], (poin
|
|
|
58
58
|
position: nueToWebXR(p.position),
|
|
59
59
|
rotation: nueQuaternionToWebXR(p.rotation),
|
|
60
60
|
screenRotation: p.screenRotation,
|
|
61
|
-
capturedAt: p.capturedAt
|
|
61
|
+
capturedAt: p.capturedAt,
|
|
62
|
+
width: p.width,
|
|
63
|
+
height: p.height
|
|
62
64
|
}));
|
|
63
65
|
});
|
|
64
66
|
//#endregion
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { L as CombinedRootState } from "../create-slam-app-store-
|
|
1
|
+
import { L as CombinedRootState } from "../create-slam-app-store-Ce2FMKCp.js";
|
|
2
2
|
export { CombinedRootState };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as SlamAppStoreOptions, i as SlamAppStore, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, t as SlamAppCombinedState } from "../create-slam-app-store-
|
|
1
|
+
import { a as SlamAppStoreOptions, i as SlamAppStore, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, t as SlamAppCombinedState } from "../create-slam-app-store-Ce2FMKCp.js";
|
|
2
2
|
export { SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, createSlamAppStore };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as ARPose } from "../ar-types-
|
|
2
|
-
import { o as extractOdomPosition, s as extractOdomRotation } from "../gps-event-coordinator-
|
|
3
|
-
import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-
|
|
1
|
+
import { t as ARPose } from "../ar-types-BckI1E-O.js";
|
|
2
|
+
import { o as extractOdomPosition, s as extractOdomRotation } from "../gps-event-coordinator-C7hwHyLA.js";
|
|
3
|
+
import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DaHg2aPZ.js";
|
|
4
4
|
export { ARPose, CaptureGpsAnchorSampleOptions, GpsAnchorSample, GpsAnchorSampleGpsPoint, captureGpsAnchorSample, extractOdomPosition, extractOdomRotation };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-
|
|
1
|
+
import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-C7hwHyLA.js";
|
|
2
2
|
export { RecordingCoordinatorConfig, buildRawGpsPoint, buildRecordGpsEventPayload, createGpsPositionHandler, eulerToQuaternion, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, resetCoordinatorState, updateDeviceOrientation };
|
package/dist/state/index.d.ts
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { i as DepthSample, r as DepthPoint } from "../ar-types-
|
|
2
|
-
import {
|
|
3
|
-
import { a as TrackingSliceState, c as poseLost, d as selectLastRestartedPayload, f as selectLastSensorOrientation, g as trackingReducer, h as selectTrackingPhase, i as TrackingPhase, l as poseReceived, m as selectLostFrameCount, n as PoseReceivedPayload, o as clearLastRestartedPayload, p as selectLastValidPose, r as ResetTransformData, s as originReset, t as DeviceOrientation, u as resetTracking } from "../tracking-slice-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { n as
|
|
11
|
-
import { n as
|
|
12
|
-
import {
|
|
13
|
-
import { n as
|
|
14
|
-
import { n as
|
|
15
|
-
import { a as
|
|
16
|
-
import {
|
|
17
|
-
|
|
1
|
+
import { i as DepthSample, r as DepthPoint } from "../ar-types-BckI1E-O.js";
|
|
2
|
+
import { D as validateRecordingOptions, S as validateDepthOptions, _ as cloneRecordingOptions, b as saveRecordingOptions, c as ImageCaptureOptions, h as STORAGE_KEY, i as DepthCaptureOptions, m as RecordingOptionsInput, n as DEFAULT_RECORDING_OPTIONS, r as DEPTH_CONSTRAINTS, s as IMAGE_CONSTRAINTS, v as loadRecordingOptions, w as validateImageOptions, y as resetRecordingOptions } from "../recording-options-D93kksJU.js";
|
|
3
|
+
import { a as TrackingSliceState, c as poseLost, d as selectLastRestartedPayload, f as selectLastSensorOrientation, g as trackingReducer, h as selectTrackingPhase, i as TrackingPhase, l as poseReceived, m as selectLostFrameCount, n as PoseReceivedPayload, o as clearLastRestartedPayload, p as selectLastValidPose, r as ResetTransformData, s as originReset, t as DeviceOrientation, u as resetTracking } from "../tracking-slice-DJZ9qeGg.js";
|
|
4
|
+
import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-D7739ZpB.js";
|
|
5
|
+
import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-CFlmLm6w.js";
|
|
6
|
+
import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata$1, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-B-uCgGoh.js";
|
|
7
|
+
import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-Cpv-dg82.js";
|
|
8
|
+
import { n as SessionMetadata } from "../opfs-storage-DMtlt57S.js";
|
|
9
|
+
import { n as StorageBackend } from "../storage-backend-CTJHNdMp.js";
|
|
10
|
+
import { A as resetTrackingQuality, C as computeResidualConsensus, D as firstAgreementReached, E as degradedCountUpdated, F as snapshotsTrimmed, I as trackingQualityReducer, M as selectRecentAlignments, N as selectTrackingQuality, O as matrixDelta, P as snapshotPushed, S as computeGpsVsFusedDivergence, T as createTrackingQualityListenerMiddleware, _ as TrackingQualityState, a as SlamAppStoreOptions, b as computeCoverage, d as DEFAULT_TRACKING_QUALITY_OPTIONS, g as TrackingQualitySliceState, h as TrackingQualityReport, i as SlamAppStore, j as selectFirstAgreementObservationIndex, k as reportUpdated, m as TrackingQualityOptions, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, v as computeCompassAgreement, w as computeTrackingQualityReport, x as computeGpsAccuracy, y as computeConvergence } from "../create-slam-app-store-Ce2FMKCp.js";
|
|
11
|
+
import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-C7hwHyLA.js";
|
|
12
|
+
import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DaHg2aPZ.js";
|
|
13
|
+
import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-CUEK82tM.js";
|
|
14
|
+
import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-5eearhSV.js";
|
|
15
|
+
import { a as ReplayAction, c as computeInterActionDelay, i as ProgressCallback, l as extractActionTimestamp, n as DEFAULT_MAX_DELAY_MS, o as ReplayEngine, r as ErrorCallback, s as ReplayState, t as CompleteCallback } from "../replay-engine-BSVd7Zzb.js";
|
|
16
|
+
import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-Bp3sLx8L.js";
|
|
17
|
+
import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-BZP81hjh.js";
|
|
18
|
+
import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-CrOucL00.js";
|
|
19
|
+
import { a as RawGpsPoint, c as calcRelativeCoordsInMeters, d as OnboardingGuidance, f as OnboardingPhase, i as RawDeviceOrientation, l as recordGpsEvent, m as selectOnboardingGuidance, n as GpsPoint, o as RecordGpsEventPayload, p as computeOnboardingGuidance, r as LatLong, s as add2dImage, t as Add2dImagePayload, u as setZeroPos } from "../index-m_LneUSi.js";
|
|
20
|
+
export { Add2dImagePayload, AlignmentSnapshot, CaptureGpsAnchorSampleOptions, CompleteCallback, DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, DepthCaptureOptions, DepthPoint, DepthSample, DeviceOrientation, ErrorCallback, GpsAnchorSample, GpsAnchorSampleGpsPoint, GpsPoint, IMAGE_CONSTRAINTS, ImageCaptureOptions, LatLong, OnboardingGuidance, OnboardingPhase, SessionMetadata as OpfsSessionMetadata, PersistenceMiddlewareOptions, PoseReceivedPayload, ProgressCallback, QrDetectedState, QrDetectionEntry, QrMarkerState, QrPoseStability, QrPoseStabilityOptions, QrPoseStabilityStatus, QrSizeEstimate, QrSizeStatus, RawDeviceOrientation, RawGpsPoint, RecordGpsEventPayload, RecordingCoordinatorConfig, RecordingOptionsInput, RecordingState, ReplayAction, ReplayEngine, ReplayRecordingOptions, ReplayState, ResetTransformData, RootWithQrDetected, STORAGE_KEY, SessionMetadata$1 as SessionMetadata, SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, StorageBackend, StoreSubscriberDeps, SubscribableStore, TrackingPhase, TrackingQualityOptions, TrackingQualityReport, TrackingQualitySliceState, TrackingQualityState, TrackingSliceState, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, cloneRecordingOptions, computeCompassAgreement, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, firstAgreementReached, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectDerivedQrPlacement, selectFirstAgreementObservationIndex, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
|