gps-plus-slam-app-framework 1.9.1 → 1.11.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/README.md +14 -14
- package/dist/{absolute-orientation-BAxc15J6.d.ts → absolute-orientation-Dj1One3y.d.ts} +1 -1
- package/dist/{accuracy-circles-DkWBkF5g.d.ts → accuracy-circles-BHz7yVIL.d.ts} +1 -1
- package/dist/{alignment-lerper-gD70k7Fq.d.ts → alignment-lerper-DAHicRON.d.ts} +0 -6
- package/dist/{app-selectors-BbAiCRUT.d.ts → app-selectors-DG0ZqaeI.d.ts} +23 -13
- package/dist/ar/ar-crash-isolation.d.ts +2 -0
- package/dist/ar/ar-crash-isolation.js +40 -0
- package/dist/ar/bresenham3d.d.ts +1 -1
- package/dist/ar/camera-blit-capture.d.ts +1 -1
- package/dist/ar/capability-checker.d.ts +1 -1
- package/dist/ar/capture-failure-tracker.d.ts +1 -1
- package/dist/ar/capture-motion-gate.d.ts +2 -0
- package/dist/{capture-motion-gate-_NdTSwKi.js → ar/capture-motion-gate.js} +25 -2
- package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
- package/dist/ar/chromium-camera-access-workaround.js +1 -1
- package/dist/ar/depth-grid-lookup.d.ts +1 -1
- package/dist/ar/depth-occluder.d.ts +1 -1
- package/dist/ar/depth-occluder.js +1 -1
- package/dist/ar/depth-sampler.d.ts +2 -2
- package/dist/ar/depth-sampler.js +16 -5
- 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 +2 -2
- package/dist/ar/image-capture.d.ts +1 -1
- package/dist/ar/image-capture.js +1 -1
- package/dist/ar/image-quality.d.ts +2 -2
- package/dist/ar/image-quality.js +159 -8
- package/dist/ar/index.d.ts +32 -30
- package/dist/ar/index.js +15 -14
- package/dist/ar/occlusion-mesh-worker.d.ts +2 -2
- package/dist/ar/occlusion-mesh-worker.js +1 -1
- package/dist/ar/occupancy-grid.d.ts +1 -1
- package/dist/ar/occupancy-grid.js +2 -2
- package/dist/ar/occupancy-mesher.d.ts +1 -1
- package/dist/ar/occupancy-mesher.js +4 -5
- package/dist/ar/qr/index.d.ts +11 -0
- package/dist/ar/qr/index.js +11 -0
- package/dist/ar/{planar-pnp.d.ts → qr/planar-pnp.d.ts} +1 -1
- package/dist/ar/{planar-pnp.js → qr/planar-pnp.js} +1 -1
- package/dist/ar/qr/qr-debug-view.d.ts +2 -0
- package/dist/ar/{qr-debug-view.js → qr/qr-debug-view.js} +2 -2
- package/dist/ar/{qr-derived-pose.d.ts → qr/qr-derived-pose.d.ts} +1 -1
- package/dist/ar/{qr-derived-pose.js → qr/qr-derived-pose.js} +2 -2
- package/dist/ar/{qr-detection-controller.d.ts → qr/qr-detection-controller.d.ts} +1 -1
- package/dist/ar/qr/qr-detection-controller.js +2 -0
- package/dist/ar/{qr-frontend.d.ts → qr/qr-frontend.d.ts} +1 -1
- package/dist/ar/{qr-frontend.js → qr/qr-frontend.js} +1 -1
- package/dist/ar/{qr-pose.d.ts → qr/qr-pose.d.ts} +1 -1
- package/dist/ar/{qr-pose.js → qr/qr-pose.js} +1 -1
- package/dist/ar/qr/qr-size-depth-context.d.ts +3 -0
- package/dist/ar/{qr-size-depth-context.js → qr/qr-size-depth-context.js} +4 -4
- package/dist/ar/{qr-size-measurer.d.ts → qr/qr-size-measurer.d.ts} +1 -1
- package/dist/ar/qr/qr-size-measurer.js +2 -0
- package/dist/ar/replay-scene.d.ts +1 -1
- package/dist/ar/replay-scene.js +15 -13
- 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-error-handler.d.ts +1 -1
- package/dist/ar/xr-frame-loop.d.ts +1 -1
- package/dist/ar/xr-frame-loop.js +1 -1
- package/dist/ar-crash-isolation-DlXCGzMf.d.ts +52 -0
- package/dist/{ar-types-Cc5yvBwn.d.ts → ar-types-D6PYS4bc.d.ts} +16 -1
- package/dist/{ar-world-group-alignment-Cfg0trC3.d.ts → ar-world-group-alignment-BdS_h8Nf.d.ts} +2 -2
- package/dist/{capability-checker-BTTpygvZ.d.ts → capability-checker-BZ3_x1YL.d.ts} +1 -1
- package/dist/capture-motion-gate-CPwLekNf.d.ts +120 -0
- package/dist/{chromium-camera-access-workaround-C6yJLXz9.d.ts → chromium-camera-access-workaround-BHR4clTE.d.ts} +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/{create-slam-app-store-D1QSMuKu.d.ts → create-slam-app-store-DFm5K9Ob.d.ts} +15 -6
- package/dist/{create-slam-app-store-DXiAnJwR.js → create-slam-app-store-oK9bnqyI.js} +10 -8
- package/dist/{depth-grid-lookup-D5atpNZ3.d.ts → depth-grid-lookup-CCuzlqUo.d.ts} +1 -1
- package/dist/{depth-sampler-CwObAwEA.d.ts → depth-sampler-CS2jAFw4.d.ts} +15 -5
- package/dist/{depth-unprojection-DRdBU90S.d.ts → depth-unprojection-ET3Gwedf.d.ts} +1 -1
- package/dist/device-orientation-cache-j-kLP8he.js +20 -0
- package/dist/{enable-gps-ar-BBtRO2FJ.d.ts → enable-gps-ar-D_xEHzh5.d.ts} +9 -4
- package/dist/{file-system-utils-DueXHxo9.d.ts → file-system-utils-BHI0rXr9.d.ts} +1 -1
- package/dist/{frame-conversions-DDcNHkTb.d.ts → frame-conversions-CH7E2Iv_.d.ts} +1 -1
- package/dist/{fused-path-C5pp0PJU.d.ts → fused-path-DOKzVMiO.d.ts} +1 -1
- package/dist/geo/h3-proximity.d.ts +1 -1
- package/dist/geo/h3-proximity.js +1 -1
- package/dist/geo/index.d.ts +1 -1
- package/dist/{geodesic-angle-BTldfFgs.js → geodesic-angle-CZ_Ow90I.js} +2 -2
- package/dist/{gps-CDKDQokE.d.ts → gps-CnhYrJCa.d.ts} +8 -1
- package/dist/{gps-anchor-CEjGqEVD.d.ts → gps-anchor-BaqyRsPC.d.ts} +14 -4
- package/dist/{gps-ar-pose-sampler-DEGNk2CI.d.ts → gps-ar-pose-sampler-BuuUuK-D.d.ts} +1 -1
- package/dist/{gps-event-coordinator-BWpgBrHq.d.ts → gps-event-coordinator-Cruoe5I-.d.ts} +16 -29
- package/dist/{gps-event-markers-Di2nBzx-.d.ts → gps-event-markers-y2b2aVl6.d.ts} +35 -1
- package/dist/{h3-proximity-D0GTHQmr.d.ts → h3-proximity-BaAulrnM.d.ts} +1 -1
- package/dist/{image-capture-Bp6Pd4Md.d.ts → image-capture-BevgKpoO.d.ts} +6 -6
- package/dist/{image-capture-DVcuqMtX.js → image-capture-C4DwxC10.js} +12 -10
- package/dist/{image-quality-BMx2ko9-.d.ts → image-quality--HLuyJ2r.d.ts} +44 -2
- package/dist/{index-cCQWuYqy.d.ts → index-BWVwd9Zw.d.ts} +10 -74
- package/dist/{index-B6iBnO_K.d.ts → index-ClmnNJ6-.d.ts} +1 -1
- package/dist/index-Dxb6ATNK.d.ts +64 -0
- package/dist/index.d.ts +79 -79
- package/dist/index.js +26 -24
- package/dist/{leaflet-map-overlay-CBWPvaX9.js → leaflet-map-overlay-CTcTVmL1.js} +1 -1
- package/dist/{leaflet-map-overlay-C8GS4cUy.d.ts → leaflet-map-overlay-CksetpTt.d.ts} +1 -1
- package/dist/{map-data-CUnTzRIC.d.ts → map-data-D8cCqpOM.d.ts} +3 -3
- package/dist/{map-data-1tF5gcYV.js → map-data-DkhsYDGM.js} +1 -1
- package/dist/{map-overlay-draw-6WJeq0Kg.d.ts → map-overlay-draw-Cy-klqoA.d.ts} +1 -1
- package/dist/median-DDBrZGP0.js +44 -0
- package/dist/{null-storage-backend-B1-jlpin.d.ts → null-storage-backend-DXXuwG8T.d.ts} +2 -2
- package/dist/{occlusion-mesh-kXCQ2FM1.d.ts → occlusion-mesh-BWe2PrVi.d.ts} +23 -12
- package/dist/{occupancy-grid-BV7RhB7I.d.ts → occupancy-grid-CYBdmMOo.d.ts} +3 -3
- package/dist/{occupancy-mesher-C2ecWhNp.d.ts → occupancy-mesher-B4Bv4BTk.d.ts} +4 -9
- package/dist/{opfs-storage-backend-D6Z03fML.d.ts → opfs-storage-backend-D1ZpeNEL.d.ts} +2 -2
- package/dist/{persistence-middleware-CG-t08X4.d.ts → persistence-middleware-Cun4aF5M.d.ts} +13 -3
- package/dist/{planar-pnp-D7bc_rLX.d.ts → planar-pnp-ByxwDEyM.d.ts} +2 -2
- package/dist/{ar-BqCudtqE.js → qr-CTp5xI83.js} +24 -34
- package/dist/{qr-debug-view-BJooqbiP.d.ts → qr-debug-view-CGlITU09.d.ts} +2 -2
- package/dist/{qr-derived-pose-BwNWn8oV.d.ts → qr-derived-pose-DZPxZd9C.d.ts} +3 -3
- package/dist/{qr-detected-slice-TzVb8bij.d.ts → qr-detected-slice-mfyxD2-M.d.ts} +9 -8
- package/dist/{qr-detection-controller-Bo4XfQTP.d.ts → qr-detection-controller-C5NII-vs.d.ts} +4 -4
- package/dist/{qr-detection-controller-B-tLVd-S.js → qr-detection-controller-DXc1yHRf.js} +3 -3
- package/dist/{qr-frontend-BPURlh3S.d.ts → qr-frontend-QzKZSqB-.d.ts} +2 -2
- package/dist/{qr-pose-y3vaEd6x.d.ts → qr-pose-21fRDcFO.d.ts} +1 -1
- package/dist/{qr-pose-aggregation-DBiaLW0O.js → qr-pose-aggregation-Cp0Mtg_j.js} +7 -12
- package/dist/{qr-pose-aggregation-CypnmjA-.d.ts → qr-pose-aggregation-mABSN0AW.d.ts} +2 -2
- package/dist/{qr-size-depth-context-apAOmbrZ.d.ts → qr-size-depth-context-CMDv6T29.d.ts} +3 -3
- package/dist/{qr-size-measurer-DxiMqRUw.d.ts → qr-size-measurer-rVFf4AdM.d.ts} +5 -5
- package/dist/{qr-size-measurer-DLb33geH.js → qr-size-measurer-zZB9S1va.js} +9 -15
- package/dist/{recording-replayer-BJ8Lf0QY.d.ts → recording-replayer-qT2EM1Qs.d.ts} +2 -2
- package/dist/{recording-slice-BW8SiLo1.d.ts → recording-slice-DXw5-UvO.d.ts} +10 -5
- package/dist/{replay-engine-DmCAc7WM.d.ts → replay-engine-B1H_kLhK.d.ts} +1 -1
- package/dist/{replay-scene-zJ8SFDjE.d.ts → replay-scene-BJeO36YT.d.ts} +12 -5
- package/dist/sensors/absolute-orientation.d.ts +1 -1
- package/dist/sensors/absolute-orientation.js +1 -1
- package/dist/sensors/gps-error-handler.d.ts +1 -1
- package/dist/sensors/gps.d.ts +1 -1
- package/dist/sensors/gps.js +10 -8
- package/dist/sensors/index.d.ts +3 -3
- package/dist/sensors/index.js +1 -1
- package/dist/sensors/permission-checker.js +71 -40
- package/dist/{session-disposers-BPrMplIC.js → session-disposers-B7hUN90w.js} +1 -1
- package/dist/state/app-selectors.d.ts +1 -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/create-slam-app-store.js +1 -1
- package/dist/state/gps-ar-pose-sampler.d.ts +2 -3
- package/dist/state/gps-ar-pose-sampler.js +1 -1
- package/dist/state/gps-event-coordinator.d.ts +2 -1
- package/dist/state/gps-event-coordinator.js +4 -46
- package/dist/state/index.d.ts +19 -20
- package/dist/state/index.js +6 -5
- package/dist/state/persistence-middleware.d.ts +2 -2
- package/dist/state/persistence-middleware.js +24 -15
- package/dist/state/qr-detected-slice.d.ts +3 -3
- package/dist/state/qr-detected-slice.js +11 -15
- package/dist/state/recording-replayer.d.ts +2 -2
- package/dist/state/recording-replayer.js +1 -1
- package/dist/state/recording-slice.d.ts +1 -1
- package/dist/state/replay-engine.d.ts +1 -1
- package/dist/state/store-subscribers.d.ts +2 -2
- package/dist/state/store-subscribers.js +23 -6
- package/dist/state/subscribe-to-selector.d.ts +1 -1
- package/dist/state/tracking-quality.d.ts +1 -1
- package/dist/state/tracking-quality.js +14 -11
- package/dist/state/tracking-slice.d.ts +1 -1
- package/dist/{state-BeKvn4B-.js → state-CDF5LvsO.js} +2 -4
- package/dist/storage/file-system-utils.d.ts +1 -1
- package/dist/storage/file-system-utils.js +1 -1
- package/dist/storage/index.d.ts +8 -8
- 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.d.ts +1 -1
- package/dist/storage/storage-backend.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.js +1 -1
- package/dist/storage/zip-export.d.ts +1 -1
- package/dist/storage/zip-export.js +10 -4
- package/dist/storage/zip-reader.d.ts +1 -1
- package/dist/{storage-backend-sEtmM4yW.d.ts → storage-backend-BX7egQKi.d.ts} +1 -1
- package/dist/{store-subscribers-DJUErW-o.d.ts → store-subscribers-CWHToX6N.d.ts} +2 -2
- package/dist/{subscribe-to-selector-dQV8SpsO.d.ts → subscribe-to-selector-j-eOYybQ.d.ts} +1 -1
- package/dist/test-utils/browser-mocks.d.ts +1 -1
- package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
- package/dist/{tracking-slice-DMkHlbny.d.ts → tracking-slice-BAbcZK-Y.d.ts} +3 -2
- package/dist/types/ar-types.d.ts +2 -2
- package/dist/types/ar-types.js +31 -1
- package/dist/types/geo-types.d.ts +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.js +2 -1
- package/dist/utils/concurrency.d.ts +1 -1
- 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/fused-path.js +1 -1
- package/dist/utils/index.d.ts +7 -7
- package/dist/utils/index.js +1 -1
- package/dist/utils/list-formatter.d.ts +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +30 -20
- package/dist/visualization/accuracy-circles.d.ts +1 -1
- package/dist/visualization/accuracy-circles.js +1 -1
- package/dist/visualization/alignment-lerper.d.ts +1 -1
- package/dist/visualization/alignment-lerper.js +20 -5
- package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.js +2 -2
- 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-anchor.js +44 -19
- package/dist/visualization/gps-compass-cubes.d.ts +1 -1
- package/dist/visualization/gps-event-markers.d.ts +2 -2
- package/dist/visualization/gps-event-markers.js +27 -6
- package/dist/visualization/hit-test-reticle.d.ts +1 -1
- package/dist/visualization/index.d.ts +19 -20
- package/dist/visualization/index.js +4 -5
- package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
- package/dist/visualization/leaflet-map-overlay.js +1 -1
- package/dist/visualization/lerp-utils.d.ts +1 -1
- package/dist/visualization/map-data.d.ts +1 -1
- package/dist/visualization/map-data.js +1 -1
- package/dist/visualization/map-overlay-draw.d.ts +1 -1
- package/dist/visualization/occluder-mesh-driver.d.ts +2 -2
- package/dist/visualization/occluder-mesh-driver.js +1 -1
- package/dist/visualization/occlusion-mesh.d.ts +2 -2
- package/dist/visualization/occlusion-mesh.js +29 -14
- package/dist/visualization/three-dispose.d.ts +1 -1
- package/dist/visualization/vis-colors.d.ts +1 -1
- package/dist/{webxr-session-BWCpGd-2.d.ts → webxr-session-DefwObIu.d.ts} +143 -193
- package/dist/{webxr-session-BCP2XK7k.js → webxr-session-OyR3YbTq.js} +154 -284
- package/dist/{xr-frame-loop-DX3JPpAU.d.ts → xr-frame-loop-BiZvgqP7.d.ts} +1 -1
- package/dist/{zip-coverage-embed-ncVbaZAz.d.ts → zip-coverage-embed-CyoX7XL7.d.ts} +1 -1
- package/package.json +5 -3
- package/dist/ar/qr-debug-view.d.ts +0 -2
- package/dist/ar/qr-detection-controller.js +0 -2
- package/dist/ar/qr-size-depth-context.d.ts +0 -3
- package/dist/ar/qr-size-measurer.js +0 -2
- package/dist/capture-motion-gate-BGoAMkmf.d.ts +0 -24
- package/dist/map-overlay-BCQgvIgU.d.ts +0 -153
- package/dist/recording-options-DYKWVI93.d.ts +0 -693
- package/dist/state/recording-options.d.ts +0 -2
- package/dist/state/recording-options.js +0 -591
- package/dist/visualization/map-overlay.d.ts +0 -2
- package/dist/visualization/map-overlay.js +0 -241
- /package/dist/{bresenham3d-DGc4nIb-.d.ts → bresenham3d-D-t9i_b5.d.ts} +0 -0
- /package/dist/{camera-blit-capture-BimSdyih.d.ts → camera-blit-capture-BlC-arRb.d.ts} +0 -0
- /package/dist/{camera-follower-DfBm2J5i.d.ts → camera-follower-CO_ibF2o.d.ts} +0 -0
- /package/dist/{capture-failure-tracker-_BVfhpxv.d.ts → capture-failure-tracker-BAUKjtXU.d.ts} +0 -0
- /package/dist/{cell-key-DIB4rOTV.js → cell-key-Bj-eYTLA.js} +0 -0
- /package/dist/{concurrency-DPeGBH0X.d.ts → concurrency-DW0jQo3G.d.ts} +0 -0
- /package/dist/{css3d-renderer-manager-CPpVtvgs.d.ts → css3d-renderer-manager-CJjHtCMT.d.ts} +0 -0
- /package/dist/{failure-tracker-CeKf5HIc.d.ts → failure-tracker-B7fzPfZo.d.ts} +0 -0
- /package/dist/{format-file-size-DxN-EBLc.d.ts → format-file-size-Da8rZgfs.d.ts} +0 -0
- /package/dist/{frustum-visibility-CokkgS_i.d.ts → frustum-visibility-COPfzruF.d.ts} +0 -0
- /package/dist/{geo-types-DrGVu8nS.d.ts → geo-types-BfDK8kJu.d.ts} +0 -0
- /package/dist/{gps-compass-cubes-1mooS3BS.d.ts → gps-compass-cubes-CT3TWctJ.d.ts} +0 -0
- /package/dist/{gps-error-handler-C34GQuTu.d.ts → gps-error-handler-DjVuLXve.d.ts} +0 -0
- /package/dist/{hit-test-reticle-CaQbrhbk.d.ts → hit-test-reticle-DhnCMOsc.d.ts} +0 -0
- /package/dist/{index-DXPVzOpP.d.ts → index-CjxbDm8W.d.ts} +0 -0
- /package/dist/{index-D74JTX4I.d.ts → index-Nr3qg4IH.d.ts} +0 -0
- /package/dist/{lerp-utils-Qs8OhumS.d.ts → lerp-utils-bwMwVCpU.d.ts} +0 -0
- /package/dist/{list-formatter-DLFDnS70.d.ts → list-formatter-1ttG18MQ.d.ts} +0 -0
- /package/dist/{logger-CqTd5Kpk.d.ts → logger-B4StJUDb.d.ts} +0 -0
- /package/dist/{opfs-storage-CTkxvxN4.d.ts → opfs-storage-S_odkCk1.d.ts} +0 -0
- /package/dist/{scene-node-names-CGb-ylBd.d.ts → scene-node-names-DWzhE7Ro.d.ts} +0 -0
- /package/dist/{three-dispose-BMOAmPhb.d.ts → three-dispose-C3mnKQR5.d.ts} +0 -0
- /package/dist/{vis-colors-C7HI0u9_.d.ts → vis-colors-CoSpbZEO.d.ts} +0 -0
- /package/dist/{webxr-nue-basis-CaCnYxuq.d.ts → webxr-nue-basis-C3vTqkE2.d.ts} +0 -0
- /package/dist/{xr-error-handler-uVGDu9IX.d.ts → xr-error-handler-D9y5r8ok.d.ts} +0 -0
- /package/dist/{zip-export-CtiUnAlJ.d.ts → zip-export-CuBimX1J.d.ts} +0 -0
- /package/dist/{zip-reader-BzENzMH6.d.ts → zip-reader-BHc_b_iA.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as GridCell } from "./bresenham3d-
|
|
2
|
-
import { a as RgbTuple, i as DepthSample } from "./ar-types-
|
|
1
|
+
import { t as GridCell } from "./bresenham3d-D-t9i_b5.js";
|
|
2
|
+
import { a as RgbTuple, i as DepthSample } from "./ar-types-D6PYS4bc.js";
|
|
3
3
|
import { Vector3 } from "gps-plus-slam-js";
|
|
4
4
|
|
|
5
5
|
//#region ../src/ar/cell-key.d.ts
|
|
@@ -51,7 +51,7 @@ declare class OccupancyGrid {
|
|
|
51
51
|
* an already-settled cell (count `> MAX_RELEVANT_COUNT`) does NOT bump it, so a
|
|
52
52
|
* consumer can cheaply skip a full re-derive (cube refresh / occluder re-mesh)
|
|
53
53
|
* when the revision is unchanged — the dominant idle-time saving over a long
|
|
54
|
-
* session (see `2026-06-30-occluder-tuning-followups.md`).
|
|
54
|
+
* session (see `2026-06-30-0829-occluder-tuning-followups.md`).
|
|
55
55
|
*/
|
|
56
56
|
private revision;
|
|
57
57
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as GridCell } from "./bresenham3d-
|
|
1
|
+
import { t as GridCell } from "./bresenham3d-D-t9i_b5.js";
|
|
2
2
|
import { Vector3 } from "gps-plus-slam-js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/ar/occupancy-mesher.d.ts
|
|
@@ -51,14 +51,9 @@ type MeshMode = 'per-face' | 'greedy' | 'smooth' | 'corner-fit';
|
|
|
51
51
|
/** Options for {@link meshOccupiedCells}. */
|
|
52
52
|
interface MeshOccupiedCellsOptions {
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*/
|
|
58
|
-
readonly greedy?: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* The mesher strategy. Takes precedence over {@link greedy}. Default resolves
|
|
61
|
-
* via the `greedy` shim above (so omitting both ⇒ `'per-face'`).
|
|
54
|
+
* The mesher strategy. Default `'per-face'`. (The deprecated boolean
|
|
55
|
+
* `greedy` shim was removed 2026-07-10, quality-review C-3 — it had zero
|
|
56
|
+
* production callers; use `{ mode: 'greedy' }`.)
|
|
62
57
|
*
|
|
63
58
|
* Note: every mode still returns one `aabbs` box per cell (a 3-D greedy box
|
|
64
59
|
* merge for fewer colliders is a separate follow-on — see the plan §3E).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as SessionMetadata } from "./opfs-storage-
|
|
2
|
-
import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-
|
|
1
|
+
import { n as SessionMetadata } from "./opfs-storage-S_odkCk1.js";
|
|
2
|
+
import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-BX7egQKi.js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/storage/opfs-storage-backend.d.ts
|
|
5
5
|
declare class OpfsStorageBackend implements StorageBackend {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as StorageBackend } from "./storage-backend-
|
|
1
|
+
import { n as StorageBackend } from "./storage-backend-BX7egQKi.js";
|
|
2
2
|
import { Middleware } from "@reduxjs/toolkit";
|
|
3
3
|
|
|
4
4
|
//#region ../src/state/persistence-middleware.d.ts
|
|
@@ -50,6 +50,16 @@ declare function slicePrefixOf(actionType: string): string;
|
|
|
50
50
|
* - Uses 1-based indexing for action files (000001.json, 000002.json, …).
|
|
51
51
|
* - Each middleware instance maintains its own action index (Bug 10 fix).
|
|
52
52
|
*/
|
|
53
|
-
|
|
53
|
+
/**
|
|
54
|
+
* The persistence middleware plus its drain hook: `flushPendingWrites`
|
|
55
|
+
* resolves once every queued action write has settled. The stop flow MUST
|
|
56
|
+
* await it before anything reads the session's `actions/` (final sync, ZIP
|
|
57
|
+
* export) — the queue is async, so a write enqueued moments before Stop
|
|
58
|
+
* could otherwise land after the export enumerated the directory.
|
|
59
|
+
*/
|
|
60
|
+
type PersistenceMiddleware = Middleware & {
|
|
61
|
+
flushPendingWrites: () => Promise<void>;
|
|
62
|
+
};
|
|
63
|
+
declare function createPersistenceMiddleware(options: PersistenceMiddlewareOptions): PersistenceMiddleware;
|
|
54
64
|
//#endregion
|
|
55
|
-
export {
|
|
65
|
+
export { slicePrefixOf as i, PersistenceMiddlewareOptions as n, createPersistenceMiddleware as r, PersistenceMiddleware as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as OpenCvPnpResult, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics } from "./qr-pose-
|
|
1
|
+
import { n as OpenCvPnpResult, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics } from "./qr-pose-21fRDcFO.js";
|
|
2
2
|
import { Vector3 } from "gps-plus-slam-js";
|
|
3
3
|
|
|
4
|
-
//#region ../src/ar/planar-pnp.d.ts
|
|
4
|
+
//#region ../src/ar/qr/planar-pnp.d.ts
|
|
5
5
|
/** A 3×3 matrix in ROW-MAJOR order: [r00,r01,r02, r10,r11,r12, r20,r21,r22]. */
|
|
6
6
|
type Mat3 = readonly [number, number, number, number, number, number, number, number, number];
|
|
7
7
|
/** A 3×3 homography in row-major order (same layout as {@link Mat3}). */
|
|
@@ -1,26 +1,12 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./ar/
|
|
3
|
-
import "./ar/
|
|
4
|
-
import "./ar/
|
|
5
|
-
import "./ar/
|
|
6
|
-
import "./qr-
|
|
7
|
-
import "./
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
import "./ar/webxr-nue-basis.js";
|
|
11
|
-
import "./ar/qr-debug-view.js";
|
|
12
|
-
import { n as createDetectionScheduler } from "./qr-detection-controller-B-tLVd-S.js";
|
|
13
|
-
import "./qr-pose-aggregation-DBiaLW0O.js";
|
|
14
|
-
import "./webxr-session-BCP2XK7k.js";
|
|
15
|
-
import "./ar/occupancy-grid.js";
|
|
16
|
-
import "./ar/occupancy-mesher.js";
|
|
17
|
-
import "./ar/frame-loop.js";
|
|
18
|
-
import "./ar/xr-frame-loop.js";
|
|
19
|
-
import "./image-capture-DVcuqMtX.js";
|
|
20
|
-
import "./ar/xr-camera-texture.js";
|
|
21
|
-
import "./ar/enable-gps-ar.js";
|
|
22
|
-
import "./ar/replay-scene.js";
|
|
23
|
-
//#region ../src/ar/qr-level.ts
|
|
1
|
+
import "./qr-size-measurer-zZB9S1va.js";
|
|
2
|
+
import "./ar/qr/qr-size-depth-context.js";
|
|
3
|
+
import { buildObjectPoints, transformPoint } from "./ar/qr/qr-pose.js";
|
|
4
|
+
import "./ar/qr/qr-derived-pose.js";
|
|
5
|
+
import "./ar/qr/qr-debug-view.js";
|
|
6
|
+
import { n as createDetectionScheduler } from "./qr-detection-controller-DXc1yHRf.js";
|
|
7
|
+
import "./qr-pose-aggregation-Cp0Mtg_j.js";
|
|
8
|
+
import { calcGpsCoords } from "gps-plus-slam-js";
|
|
9
|
+
//#region ../src/ar/qr/qr-level.ts
|
|
24
10
|
/** Thrown when a fetched level file fails validation. */
|
|
25
11
|
var QrLevelValidationError = class extends Error {
|
|
26
12
|
constructor(message) {
|
|
@@ -107,9 +93,7 @@ async function fetchQrLevel(url, options = {}) {
|
|
|
107
93
|
return parseQrLevel(body);
|
|
108
94
|
}
|
|
109
95
|
//#endregion
|
|
110
|
-
//#region ../src/ar/qr-gps-vote.ts
|
|
111
|
-
/** Mean meters per degree of latitude (WGS-84 average). */
|
|
112
|
-
const METERS_PER_DEG_LAT = 111320;
|
|
96
|
+
//#region ../src/ar/qr/qr-gps-vote.ts
|
|
113
97
|
/**
|
|
114
98
|
* `count` points evenly spaced on a circle of radius `baselineM` in the QR
|
|
115
99
|
* plane (z = 0), starting at local +x. The symmetric ring's centroid is the QR
|
|
@@ -144,12 +128,18 @@ function localPlaneToEnu(localX, localY, headingDeg) {
|
|
|
144
128
|
}
|
|
145
129
|
/** Apply an ENU meter offset to a geo pose (equirectangular; exact enough for sub-meter QR corners). */
|
|
146
130
|
function offsetGeo(center, enu) {
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
|
|
131
|
+
const nearPole = Math.abs(Math.cos(center.lat * Math.PI / 180)) < 1e-14;
|
|
132
|
+
const { lat, lon } = calcGpsCoords({
|
|
133
|
+
lat: center.lat,
|
|
134
|
+
lon: center.lon
|
|
135
|
+
}, [
|
|
136
|
+
enu.north,
|
|
137
|
+
enu.up,
|
|
138
|
+
nearPole ? 0 : enu.east
|
|
139
|
+
]);
|
|
150
140
|
return {
|
|
151
|
-
latitude:
|
|
152
|
-
longitude:
|
|
141
|
+
latitude: lat,
|
|
142
|
+
longitude: lon,
|
|
153
143
|
altitude: center.alt + enu.up
|
|
154
144
|
};
|
|
155
145
|
}
|
|
@@ -189,7 +179,7 @@ function buildQrGpsVotes(input) {
|
|
|
189
179
|
});
|
|
190
180
|
}
|
|
191
181
|
//#endregion
|
|
192
|
-
//#region ../src/ar/qr-tracking-controller.ts
|
|
182
|
+
//#region ../src/ar/qr/qr-tracking-controller.ts
|
|
193
183
|
function createQrTrackingController(config) {
|
|
194
184
|
const { frontEnd, solvePose, fetchLevel, dispatchVotes, onDetection, resolveSizeM, resolveStablePose, getCameraPose, getIntrinsics, syntheticAccuracyM, voteBaselineM, voteCount, isPlausible, onStatus, onLocked, onError, minIntervalMs = 150, requiredLockCount = 3, now } = config;
|
|
195
185
|
const timestampNow = now ?? (() => Date.now());
|
|
@@ -304,7 +294,7 @@ function createQrTrackingController(config) {
|
|
|
304
294
|
};
|
|
305
295
|
}
|
|
306
296
|
//#endregion
|
|
307
|
-
//#region ../src/ar/qr-occupancy-check.ts
|
|
297
|
+
//#region ../src/ar/qr/qr-occupancy-check.ts
|
|
308
298
|
const DEFAULTS = {
|
|
309
299
|
surfaceToleranceCells: 1.5,
|
|
310
300
|
minObservations: 1,
|
|
@@ -380,4 +370,4 @@ function checkQrPlausibility(qrCenterWorld, cameraPosWorld, grid, options = {})
|
|
|
380
370
|
};
|
|
381
371
|
}
|
|
382
372
|
//#endregion
|
|
383
|
-
export {
|
|
373
|
+
export { offsetGeo as a, parseQrLevel as c, localPlaneToEnu as i, createQrTrackingController as n, QrLevelValidationError as o, buildQrGpsVotes as r, fetchQrLevel as s, checkQrPlausibility as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { i as Pose } from "./qr-pose-
|
|
1
|
+
import { i as Pose } from "./qr-pose-21fRDcFO.js";
|
|
2
2
|
import { Object3D } from "three";
|
|
3
3
|
|
|
4
|
-
//#region ../src/ar/qr-debug-view.d.ts
|
|
4
|
+
//#region ../src/ar/qr/qr-debug-view.d.ts
|
|
5
5
|
interface QrDebugView {
|
|
6
6
|
/**
|
|
7
7
|
* Glue the debug objects to a solved pose. The **axis** is placed from the
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { i as Pose, r as Point2, s as SolvePnpSquare } from "./qr-pose-
|
|
2
|
-
import { a as QrSizeMeasurerOptions, n as QrSizeDepthContext } from "./qr-size-measurer-
|
|
1
|
+
import { i as Pose, r as Point2, s as SolvePnpSquare } from "./qr-pose-21fRDcFO.js";
|
|
2
|
+
import { a as QrSizeMeasurerOptions, n as QrSizeDepthContext } from "./qr-size-measurer-rVFf4AdM.js";
|
|
3
3
|
import { Matrix4 } from "gps-plus-slam-js";
|
|
4
4
|
|
|
5
|
-
//#region ../src/ar/qr-derived-pose.d.ts
|
|
5
|
+
//#region ../src/ar/qr/qr-derived-pose.d.ts
|
|
6
6
|
/**
|
|
7
7
|
* One RAW QR observation — the authoritative recorded shape (D-A). Everything
|
|
8
8
|
* the derive layer needs to recompute size + pose is here EXCEPT depth (injected
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { i as Pose, r as Point2 } from "./qr-pose-
|
|
2
|
-
import { l as QrSizeEstimate } from "./qr-size-measurer-
|
|
3
|
-
import { i as RawQrObservation, n as DerivedQrPlacement, t as DeriveQrPoseDeps } from "./qr-derived-pose-
|
|
4
|
-
import { a as QrPoseStability, o as QrPoseStabilityOptions } from "./qr-pose-aggregation-
|
|
1
|
+
import { i as Pose, r as Point2 } from "./qr-pose-21fRDcFO.js";
|
|
2
|
+
import { l as QrSizeEstimate } from "./qr-size-measurer-rVFf4AdM.js";
|
|
3
|
+
import { i as RawQrObservation, n as DerivedQrPlacement, t as DeriveQrPoseDeps } from "./qr-derived-pose-DZPxZd9C.js";
|
|
4
|
+
import { a as QrPoseStability, o as QrPoseStabilityOptions } from "./qr-pose-aggregation-mABSN0AW.js";
|
|
5
5
|
import { Matrix4, Vector3 } from "gps-plus-slam-js";
|
|
6
6
|
import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
|
|
7
|
+
import * as _$redux from "redux";
|
|
7
8
|
|
|
8
9
|
//#region ../src/state/qr-detected-slice.d.ts
|
|
9
10
|
/**
|
|
@@ -27,7 +28,7 @@ interface QrDetectionEntry {
|
|
|
27
28
|
* this MUST be **EPOCH ms** (`Date.now()`), because the depth stream it joins
|
|
28
29
|
* against is epoch (`DepthSample.timestamp = performance.timeOrigin + frameTs`,
|
|
29
30
|
* `ar/depth-sampler.ts`) and the size as-of join pairs this with the depth
|
|
30
|
-
* sample whose timestamp is `≤` this one (`ar/qr-derived-pose`). A relative
|
|
31
|
+
* sample whose timestamp is `≤` this one (`ar/qr/qr-derived-pose`). A relative
|
|
31
32
|
* `performance.now()` stamp (~1e5) never satisfies that join, so the size — and
|
|
32
33
|
* the debug cube — never resolve. See the recorder live-QR plan open topic A.
|
|
33
34
|
*/
|
|
@@ -71,7 +72,7 @@ declare const recordQrDetection: _$_reduxjs_toolkit0.ActionCreatorWithPayload<Qr
|
|
|
71
72
|
}, "qrDetected/pruneQrDetections">, clearQrMarker: _$_reduxjs_toolkit0.ActionCreatorWithPayload<{
|
|
72
73
|
text: string;
|
|
73
74
|
}, "qrDetected/clearQrMarker">, clearAllQrMarkers: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"qrDetected/clearAllQrMarkers">, setQrMaxHistory: _$_reduxjs_toolkit0.ActionCreatorWithPayload<number, "qrDetected/setQrMaxHistory">;
|
|
74
|
-
declare const qrDetectedReducer: _$
|
|
75
|
+
declare const qrDetectedReducer: _$redux.Reducer<QrDetectedState>;
|
|
75
76
|
/** Minimal root shape the selectors need (avoids a store import cycle). */
|
|
76
77
|
interface RootWithQrDetected {
|
|
77
78
|
qrDetected: QrDetectedState;
|
|
@@ -117,7 +118,7 @@ declare function medianQrPosition(entries: readonly QrDetectionEntry[]): Vector3
|
|
|
117
118
|
* buffer (NOT stored separately — the detections are the source of truth, unlike
|
|
118
119
|
* the depth-measured size which is accumulated outside the buffer). Mirrors the
|
|
119
120
|
* size lifecycle's `unknown → measuring → stable` shape so the HUD can show
|
|
120
|
-
* "converging…" vs "stable". See `ar/qr-pose-aggregation.ts`.
|
|
121
|
+
* "converging…" vs "stable". See `ar/qr/qr-pose-aggregation.ts`.
|
|
121
122
|
*/
|
|
122
123
|
declare function selectQrPoseStability(state: RootWithQrDetected, text: string, options?: QrPoseStabilityOptions): QrPoseStability;
|
|
123
124
|
/**
|
|
@@ -141,7 +142,7 @@ declare function selectStableQrPose(state: RootWithQrDetected, text: string, opt
|
|
|
141
142
|
* `null` when the marker is unknown, has no raw observations, cannot be sized
|
|
142
143
|
* yet, or PnP rejects the latest quad — the re-test-friendly replacement for the
|
|
143
144
|
* once-stored solved pose. Runs identically live and on replay (only
|
|
144
|
-
* `deps.resolveDepthAt` differs). See `ar/qr-derived-pose.ts`.
|
|
145
|
+
* `deps.resolveDepthAt` differs). See `ar/qr/qr-derived-pose.ts`.
|
|
145
146
|
*/
|
|
146
147
|
declare function selectSolvedQrPose(state: RootWithQrDetected, text: string, deps: DeriveQrPoseDeps): Pose | null;
|
|
147
148
|
/**
|
package/dist/{qr-detection-controller-Bo4XfQTP.d.ts → qr-detection-controller-C5NII-vs.d.ts}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { i as Pose } from "./qr-pose-
|
|
2
|
-
import { i as QrDetection, o as RgbaImage } from "./qr-frontend-
|
|
3
|
-
import { i as RawQrObservation } from "./qr-derived-pose-
|
|
1
|
+
import { i as Pose } from "./qr-pose-21fRDcFO.js";
|
|
2
|
+
import { i as QrDetection, o as RgbaImage } from "./qr-frontend-QzKZSqB-.js";
|
|
3
|
+
import { i as RawQrObservation } from "./qr-derived-pose-DZPxZd9C.js";
|
|
4
4
|
import { Matrix4 } from "gps-plus-slam-js";
|
|
5
5
|
|
|
6
|
-
//#region ../src/ar/qr-detection-controller.d.ts
|
|
6
|
+
//#region ../src/ar/qr/qr-detection-controller.d.ts
|
|
7
7
|
/** Minimal scan-status machine (NO QR detail — per the recorder scope). */
|
|
8
8
|
type QrScanStatus = 'idle' | 'scanning' | 'tracking';
|
|
9
9
|
/** Sink for one recorded RAW observation — e.g. dispatch `recordQrDetection`. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "./utils/logger.js";
|
|
2
|
-
import { validateQuad } from "./ar/qr-pose.js";
|
|
3
|
-
//#region ../src/ar/detection-scheduler.ts
|
|
2
|
+
import { validateQuad } from "./ar/qr/qr-pose.js";
|
|
3
|
+
//#region ../src/ar/qr/detection-scheduler.ts
|
|
4
4
|
const log = createLogger("DetectionScheduler");
|
|
5
5
|
const defaultNow = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
|
|
6
6
|
function createDetectionScheduler(config) {
|
|
@@ -58,7 +58,7 @@ function createQrDetectionScheduler(config) {
|
|
|
58
58
|
return createDetectionScheduler(config);
|
|
59
59
|
}
|
|
60
60
|
//#endregion
|
|
61
|
-
//#region ../src/ar/qr-detection-controller.ts
|
|
61
|
+
//#region ../src/ar/qr/qr-detection-controller.ts
|
|
62
62
|
/**
|
|
63
63
|
* Create the thin RAW producer. On each accepted decode it emits a
|
|
64
64
|
* {@link RawQrObservation} via `recordDetection`; it does not size or solve.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as Point2 } from "./qr-pose-
|
|
1
|
+
import { r as Point2 } from "./qr-pose-21fRDcFO.js";
|
|
2
2
|
|
|
3
|
-
//#region ../src/ar/qr-frontend.d.ts
|
|
3
|
+
//#region ../src/ar/qr/qr-frontend.d.ts
|
|
4
4
|
/** Raw RGBA pixels of the frame fed to detection (top-left origin). */
|
|
5
5
|
interface RgbaImage {
|
|
6
6
|
data: Uint8ClampedArray;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as lowerMedian } from "./median-DDBrZGP0.js";
|
|
2
|
+
import { t as geodesicAngleRad } from "./geodesic-angle-CZ_Ow90I.js";
|
|
2
3
|
import { quat } from "gl-matrix";
|
|
3
|
-
//#region ../src/ar/qr-pose-aggregation.ts
|
|
4
|
+
//#region ../src/ar/qr/qr-pose-aggregation.ts
|
|
4
5
|
/**
|
|
5
6
|
* QR pose aggregation — sliding-window pose stabilization
|
|
6
|
-
* (docs `2026-06-16-
|
|
7
|
+
* (docs `2026-06-16-0858-qr-pose-stabilization-sliding-window-followup.md`).
|
|
7
8
|
*
|
|
8
9
|
* Pure, device-free, store-free robust aggregation of a STATIC fiducial's pose
|
|
9
10
|
* across a short sliding window of detections. A QR is static in the world, so
|
|
@@ -118,17 +119,11 @@ function averageRotation(quats, options = {}) {
|
|
|
118
119
|
maxAngleDeg: refined.maxAngleRad * RAD2DEG
|
|
119
120
|
};
|
|
120
121
|
}
|
|
121
|
-
/** Per-axis median of a numeric list (lower-middle for even n, matching
|
|
122
|
-
* `medianQrPosition` in the slice so the two agree on the same data). */
|
|
123
|
-
function medianOf(values) {
|
|
124
|
-
const sorted = [...values].sort((a, b) => a - b);
|
|
125
|
-
return sorted[Math.floor((sorted.length - 1) / 2)];
|
|
126
|
-
}
|
|
127
122
|
function medianPosition(positions) {
|
|
128
123
|
return [
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
lowerMedian(positions.map((p) => p[0])),
|
|
125
|
+
lowerMedian(positions.map((p) => p[1])),
|
|
126
|
+
lowerMedian(positions.map((p) => p[2]))
|
|
132
127
|
];
|
|
133
128
|
}
|
|
134
129
|
/** Max absolute per-axis deviation from `center` across all positions. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { i as Pose } from "./qr-pose-
|
|
1
|
+
import { i as Pose } from "./qr-pose-21fRDcFO.js";
|
|
2
2
|
import { Quaternion } from "gps-plus-slam-js";
|
|
3
3
|
|
|
4
|
-
//#region ../src/ar/qr-pose-aggregation.d.ts
|
|
4
|
+
//#region ../src/ar/qr/qr-pose-aggregation.d.ts
|
|
5
5
|
/** Default inlier half-angle (deg) — start ~12°, confirm on device. */
|
|
6
6
|
declare const DEFAULT_ROTATION_INLIER_ANGLE_DEG = 12;
|
|
7
7
|
interface AverageRotationOptions {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { i as DepthSample } from "./ar-types-
|
|
2
|
-
import { n as QrSizeDepthContext } from "./qr-size-measurer-
|
|
1
|
+
import { i as DepthSample } from "./ar-types-D6PYS4bc.js";
|
|
2
|
+
import { n as QrSizeDepthContext } from "./qr-size-measurer-rVFf4AdM.js";
|
|
3
3
|
|
|
4
|
-
//#region ../src/ar/qr-size-depth-context.d.ts
|
|
4
|
+
//#region ../src/ar/qr/qr-size-depth-context.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Build a {@link QrSizeDepthContext} from one depth sample, or `null` when it has
|
|
7
7
|
* no projection matrix / a singular one (the unprojector cannot be built). The
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r as DepthPoint } from "./ar-types-
|
|
2
|
-
import { t as DepthUnprojector } from "./depth-unprojection-
|
|
3
|
-
import { r as Point2 } from "./qr-pose-
|
|
1
|
+
import { r as DepthPoint } from "./ar-types-D6PYS4bc.js";
|
|
2
|
+
import { t as DepthUnprojector } from "./depth-unprojection-ET3Gwedf.js";
|
|
3
|
+
import { r as Point2 } from "./qr-pose-21fRDcFO.js";
|
|
4
4
|
import { Vector3 } from "gps-plus-slam-js";
|
|
5
5
|
|
|
6
|
-
//#region ../src/ar/qr-size-from-depth.d.ts
|
|
6
|
+
//#region ../src/ar/qr/qr-size-from-depth.d.ts
|
|
7
7
|
/** Where the size lifecycle currently sits for one marker (Note 3 / Note 4). */
|
|
8
8
|
type QrSizeStatus = /** No size authored and none measured yet — size-dependent features blocked. */'unknown' /** Measurements are accumulating but the estimate has not converged. */ | 'measuring' /** A reliably-estimated (or authored) size — size-dependent features unlock. */ | 'estimated';
|
|
9
9
|
/** Per-marker physical-size estimate (drives the Note 3 size lifecycle). */
|
|
@@ -73,7 +73,7 @@ interface QrSizeAccumulator {
|
|
|
73
73
|
}
|
|
74
74
|
declare function createQrSizeAccumulator(options?: QrSizeAccumulatorOptions): QrSizeAccumulator;
|
|
75
75
|
//#endregion
|
|
76
|
-
//#region ../src/ar/qr-size-measurer.d.ts
|
|
76
|
+
//#region ../src/ar/qr/qr-size-measurer.d.ts
|
|
77
77
|
/**
|
|
78
78
|
* Robustness knobs for the depth-at-corners stage (on top of the accumulator
|
|
79
79
|
* options). QR corners sit on a high-contrast print boundary where the coarse
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { t as interpolatingMedian } from "./median-DDBrZGP0.js";
|
|
1
2
|
import { vec3 } from "gl-matrix";
|
|
2
|
-
//#region ../src/ar/qr-size-from-depth.ts
|
|
3
|
+
//#region ../src/ar/qr/qr-size-from-depth.ts
|
|
3
4
|
/**
|
|
4
5
|
* QR size from depth — Note 4 of the QR-tracking follow-up plan
|
|
5
|
-
* (docs `2026-06-15-
|
|
6
|
+
* (docs `2026-06-15-1219-qr-tracking-generalization-overlay-and-north-followup.md`).
|
|
6
7
|
*
|
|
7
8
|
* MEASURE a QR's printed physical size directly from the depth map, so the
|
|
8
9
|
* QR content + printed size are irrelevant and `qr.physicalSizeM` need not be
|
|
@@ -40,13 +41,6 @@ const PLANE_INLIER_FLOOR_M = .005;
|
|
|
40
41
|
function dist(a, b) {
|
|
41
42
|
return Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
42
43
|
}
|
|
43
|
-
/** Median of a numeric list (mean of the middle two for even n). */
|
|
44
|
-
function median(values) {
|
|
45
|
-
const sorted = [...values].sort((a, b) => a - b);
|
|
46
|
-
const n = sorted.length;
|
|
47
|
-
const mid = n >> 1;
|
|
48
|
-
return n % 2 === 1 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
|
|
49
|
-
}
|
|
50
44
|
/**
|
|
51
45
|
* Estimate a QR's physical side length from one detection's depth samples.
|
|
52
46
|
*
|
|
@@ -109,7 +103,7 @@ function estimateQrSizeFromDepth(corners, interiorSamples, unprojector) {
|
|
|
109
103
|
const planeErr = maxPlaneOffset / meanEdge;
|
|
110
104
|
const quality = Math.max(0, Math.min(1, 1 - Math.max(edgeErr, diagErr, planeErr)));
|
|
111
105
|
return {
|
|
112
|
-
sizeM:
|
|
106
|
+
sizeM: interpolatingMedian(edges),
|
|
113
107
|
quality
|
|
114
108
|
};
|
|
115
109
|
}
|
|
@@ -250,7 +244,7 @@ function fitPlaneRobust(points) {
|
|
|
250
244
|
nx /= len;
|
|
251
245
|
ny /= len;
|
|
252
246
|
nz /= len;
|
|
253
|
-
const medSq =
|
|
247
|
+
const medSq = interpolatingMedian(points.map((p) => {
|
|
254
248
|
const d = nx * (p[0] - a[0]) + ny * (p[1] - a[1]) + nz * (p[2] - a[2]);
|
|
255
249
|
return d * d;
|
|
256
250
|
}));
|
|
@@ -353,7 +347,7 @@ function estimateQrSizeFromDepthDense(cornerScreens, samples, unprojector) {
|
|
|
353
347
|
const planeErr = plane.rms / meanEdge;
|
|
354
348
|
const quality = Math.max(0, Math.min(1, 1 - Math.max(edgeErr, diagErr, planeErr)));
|
|
355
349
|
return {
|
|
356
|
-
sizeM:
|
|
350
|
+
sizeM: interpolatingMedian(edges),
|
|
357
351
|
quality
|
|
358
352
|
};
|
|
359
353
|
}
|
|
@@ -369,8 +363,8 @@ function createQrSizeAccumulator(options = {}) {
|
|
|
369
363
|
let everConverged = false;
|
|
370
364
|
function estimate() {
|
|
371
365
|
if (sizes.length === 0) return { ...UNKNOWN };
|
|
372
|
-
const med =
|
|
373
|
-
const spreadM = 1.4826 *
|
|
366
|
+
const med = interpolatingMedian(sizes);
|
|
367
|
+
const spreadM = 1.4826 * interpolatingMedian(sizes.map((s) => Math.abs(s - med))) / Math.sqrt(sizes.length);
|
|
374
368
|
if (sizes.length >= minSamples && spreadM <= maxSpreadM) everConverged = true;
|
|
375
369
|
return {
|
|
376
370
|
status: everConverged ? "estimated" : "measuring",
|
|
@@ -395,7 +389,7 @@ function createQrSizeAccumulator(options = {}) {
|
|
|
395
389
|
};
|
|
396
390
|
}
|
|
397
391
|
//#endregion
|
|
398
|
-
//#region ../src/ar/qr-size-measurer.ts
|
|
392
|
+
//#region ../src/ar/qr/qr-size-measurer.ts
|
|
399
393
|
const EPS = 1e-9;
|
|
400
394
|
/** Pixel corner → normalized screen point for the given frame. */
|
|
401
395
|
function toScreen(corner, image) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as CombinedRootState } from "./create-slam-app-store-
|
|
2
|
-
import { i as RecordedAction } from "./zip-reader-
|
|
1
|
+
import { N as CombinedRootState } from "./create-slam-app-store-DFm5K9Ob.js";
|
|
2
|
+
import { i as RecordedAction } from "./zip-reader-BHc_b_iA.js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/state/recording-replayer.d.ts
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as DepthSample } from "./ar-types-
|
|
2
|
-
import { y as RecordingOptions } from "./recording-options-DYKWVI93.js";
|
|
1
|
+
import { i as DepthSample } from "./ar-types-D6PYS4bc.js";
|
|
3
2
|
import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
|
|
3
|
+
import * as _$redux from "redux";
|
|
4
4
|
|
|
5
5
|
//#region ../src/state/recording-slice.d.ts
|
|
6
6
|
interface SessionMetadata {
|
|
@@ -17,8 +17,13 @@ interface SessionMetadata {
|
|
|
17
17
|
startTime: number;
|
|
18
18
|
deviceInfo?: string;
|
|
19
19
|
notes?: string;
|
|
20
|
-
/**
|
|
21
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Recording options used for this session (for replay context). Stored
|
|
22
|
+
* OPAQUELY: the recorder owns the concrete `RecordingOptions` type (its
|
|
23
|
+
* settings catalog, `GpsPlusSlamJs_RecorderApp/src/state/recording-options.ts`
|
|
24
|
+
* since the 2026-07-11 G-1 move) and narrows this on read.
|
|
25
|
+
*/
|
|
26
|
+
recordingOptions?: Record<string, unknown>;
|
|
22
27
|
}
|
|
23
28
|
/**
|
|
24
29
|
* Payload accepted by {@link startSession}. New callers pass `contextTag`.
|
|
@@ -50,6 +55,6 @@ interface RecordingState {
|
|
|
50
55
|
latestDepthSample: DepthSample | null;
|
|
51
56
|
}
|
|
52
57
|
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: _$
|
|
58
|
+
declare const recordingReducer: _$redux.Reducer<RecordingState>;
|
|
54
59
|
//#endregion
|
|
55
60
|
export { recordWriteFailure as a, recordDepthSample as i, SessionMetadata as n, recordingReducer as o, endSession as r, startSession as s, RecordingState as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
1
|
+
import { t as CameraFollower } from "./camera-follower-CO_ibF2o.js";
|
|
2
|
+
import { t as AlignmentLerper } from "./alignment-lerper-DAHicRON.js";
|
|
3
|
+
import { t as Css3dRendererManager } from "./css3d-renderer-manager-CJjHtCMT.js";
|
|
4
4
|
import * as THREE from "three";
|
|
5
5
|
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
|
|
6
6
|
|
|
@@ -9,6 +9,11 @@ type CameraMode = 'orbit' | 'fps';
|
|
|
9
9
|
interface ReplaySceneState {
|
|
10
10
|
scene: THREE.Scene;
|
|
11
11
|
arWorldGroup: THREE.Group;
|
|
12
|
+
/**
|
|
13
|
+
* The arpose node (between basisChangeNode and the detached camera slot).
|
|
14
|
+
* Store subscribers write recorded odom poses here during replay.
|
|
15
|
+
*/
|
|
16
|
+
arpose: THREE.Object3D;
|
|
12
17
|
camera: THREE.PerspectiveCamera;
|
|
13
18
|
renderer: THREE.WebGLRenderer;
|
|
14
19
|
orbitControls: OrbitControls;
|
|
@@ -25,7 +30,8 @@ interface ReplaySceneState {
|
|
|
25
30
|
* - Creates the scene hierarchy via createSceneHierarchy()
|
|
26
31
|
* - Reparents camera from arWorldGroup to scene root (Risk R5)
|
|
27
32
|
* - Creates a WebGLRenderer WITHOUT WebXR
|
|
28
|
-
* -
|
|
33
|
+
* - Keeps its own scene/arWorldGroup/arpose/camera references (returned
|
|
34
|
+
* here and via getReplayState()) — nothing is written into webxr-session
|
|
29
35
|
* - Inserts canvas into the provided container
|
|
30
36
|
* - Starts a requestAnimationFrame render loop
|
|
31
37
|
* - Sets up OrbitControls as default camera mode
|
|
@@ -37,6 +43,7 @@ interface ReplaySceneState {
|
|
|
37
43
|
declare function initReplayScene(container: HTMLElement): {
|
|
38
44
|
scene: THREE.Scene;
|
|
39
45
|
arWorldGroup: THREE.Group;
|
|
46
|
+
arpose: THREE.Object3D;
|
|
40
47
|
camera: THREE.PerspectiveCamera;
|
|
41
48
|
renderer: THREE.WebGLRenderer;
|
|
42
49
|
};
|
|
@@ -47,7 +54,7 @@ declare function initReplayScene(container: HTMLElement): {
|
|
|
47
54
|
* - Disposes renderer (frees GPU resources)
|
|
48
55
|
* - Disposes camera controls
|
|
49
56
|
* - Removes canvas from DOM
|
|
50
|
-
* - Clears module
|
|
57
|
+
* - Clears this module's state (getReplayState() returns null afterwards)
|
|
51
58
|
*
|
|
52
59
|
* Safe to call multiple times (idempotent).
|
|
53
60
|
*/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-
|
|
1
|
+
import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-Dj1One3y.js";
|
|
2
2
|
export { AbsoluteOrientationReading, AbsoluteOrientationStatus, getLatestAbsoluteOrientation, isAbsoluteOrientationAvailable, startAbsoluteOrientationWatch, stopAbsoluteOrientationWatch };
|
|
@@ -4,7 +4,7 @@ import { createLogger } from "../utils/logger.js";
|
|
|
4
4
|
* AbsoluteOrientationSensor capture (Generic Sensor API).
|
|
5
5
|
*
|
|
6
6
|
* Phase 1 of the AbsoluteOrientationSensor plan
|
|
7
|
-
* (GpsPlusSlamJs_Docs/docs/2026-06-25-absolute-orientation-sensor-plan.md §5.1):
|
|
7
|
+
* (GpsPlusSlamJs_Docs/docs/2026-06-25-0543-absolute-orientation-sensor-plan.md §5.1):
|
|
8
8
|
* passive instrumentation that fuses accelerometer + gyroscope + magnetometer
|
|
9
9
|
* into an Earth-referenced (ENU) quaternion, captured per GPS event as an
|
|
10
10
|
* independent north reference. No production behaviour change.
|
|
@@ -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-DjVuLXve.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-CnhYrJCa.js";
|
|
2
2
|
export { GpsPosition, RawDeviceOrientation, requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
|
package/dist/sensors/gps.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger.js";
|
|
2
|
+
import { requestOrientationPermission as requestOrientationPermission$1 } from "./permission-checker.js";
|
|
2
3
|
//#region ../src/sensors/gps.ts
|
|
3
4
|
/**
|
|
4
5
|
* GPS Module
|
|
@@ -78,16 +79,17 @@ function stopOrientationWatch() {
|
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
81
|
/**
|
|
81
|
-
* Request permission for device orientation (required on iOS 13+)
|
|
82
|
+
* Request permission for device orientation (required on iOS 13+).
|
|
83
|
+
*
|
|
84
|
+
* Boolean-contract wrapper around the permission-checker's
|
|
85
|
+
* `requestOrientationPermission` superset (quality-review A-4 — the two
|
|
86
|
+
* public implementations had already drifted once; this one lacked the
|
|
87
|
+
* missing-API guard and threw a ReferenceError where `DeviceOrientationEvent`
|
|
88
|
+
* does not exist). `true` only for an explicit grant (or the non-iOS
|
|
89
|
+
* no-permission-needed case); denied, failed, or unsupported → `false`.
|
|
82
90
|
*/
|
|
83
91
|
async function requestOrientationPermission() {
|
|
84
|
-
|
|
85
|
-
if (typeof DeviceOrientationEventWithPermission.requestPermission === "function") try {
|
|
86
|
-
return await DeviceOrientationEventWithPermission.requestPermission() === "granted";
|
|
87
|
-
} catch {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
return true;
|
|
92
|
+
return (await requestOrientationPermission$1()).granted === true;
|
|
91
93
|
}
|
|
92
94
|
//#endregion
|
|
93
95
|
export { requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
|