gps-plus-slam-app-framework 1.9.0 → 1.10.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.
Files changed (244) hide show
  1. package/dist/{alignment-lerper-gD70k7Fq.d.ts → alignment-lerper-B4COh_0p.d.ts} +0 -6
  2. package/dist/{app-selectors-BbAiCRUT.d.ts → app-selectors-CV7ggGoo.d.ts} +23 -13
  3. package/dist/ar/bresenham3d.d.ts +1 -1
  4. package/dist/ar/camera-blit-capture.d.ts +1 -1
  5. package/dist/ar/capability-checker.d.ts +1 -1
  6. package/dist/ar/capture-failure-tracker.d.ts +1 -1
  7. package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
  8. package/dist/ar/depth-grid-lookup.d.ts +1 -1
  9. package/dist/ar/depth-occluder.d.ts +1 -1
  10. package/dist/ar/depth-sampler.d.ts +2 -2
  11. package/dist/ar/depth-sampler.js +16 -5
  12. package/dist/ar/depth-unprojection.d.ts +1 -1
  13. package/dist/ar/enable-gps-ar.d.ts +1 -1
  14. package/dist/ar/enable-gps-ar.js +1 -1
  15. package/dist/ar/frame-loop.d.ts +1 -1
  16. package/dist/ar/image-capture.d.ts +1 -1
  17. package/dist/ar/image-capture.js +1 -1
  18. package/dist/ar/image-quality.d.ts +1 -1
  19. package/dist/ar/image-quality.js +28 -9
  20. package/dist/ar/index.d.ts +32 -32
  21. package/dist/ar/index.js +7 -7
  22. package/dist/ar/occlusion-mesh-worker.d.ts +2 -2
  23. package/dist/ar/occlusion-mesh-worker.js +1 -1
  24. package/dist/ar/occupancy-grid.d.ts +1 -1
  25. package/dist/ar/occupancy-grid.js +1 -1
  26. package/dist/ar/occupancy-mesher.d.ts +1 -1
  27. package/dist/ar/occupancy-mesher.js +3 -4
  28. package/dist/ar/planar-pnp.d.ts +1 -1
  29. package/dist/ar/qr-debug-view.d.ts +1 -1
  30. package/dist/ar/qr-derived-pose.d.ts +1 -1
  31. package/dist/ar/qr-derived-pose.js +1 -1
  32. package/dist/ar/qr-detection-controller.d.ts +1 -1
  33. package/dist/ar/qr-detection-controller.js +1 -1
  34. package/dist/ar/qr-frontend.d.ts +1 -1
  35. package/dist/ar/qr-pose.d.ts +1 -1
  36. package/dist/ar/qr-size-depth-context.d.ts +2 -2
  37. package/dist/ar/qr-size-measurer.d.ts +1 -1
  38. package/dist/ar/qr-size-measurer.js +1 -1
  39. package/dist/ar/replay-scene.d.ts +1 -1
  40. package/dist/ar/replay-scene.js +1 -1
  41. package/dist/ar/scene-node-names.d.ts +1 -1
  42. package/dist/ar/webxr-nue-basis.d.ts +1 -1
  43. package/dist/ar/webxr-session.d.ts +3 -3
  44. package/dist/ar/webxr-session.js +1 -1
  45. package/dist/ar/xr-camera-texture.d.ts +1 -1
  46. package/dist/ar/xr-error-handler.d.ts +1 -1
  47. package/dist/ar/xr-frame-loop.d.ts +1 -1
  48. package/dist/{ar-BqCudtqE.js → ar-D-03Kso-.js} +18 -14
  49. package/dist/{ar-types-Cc5yvBwn.d.ts → ar-types-CBafnxhE.d.ts} +16 -1
  50. package/dist/{ar-world-group-alignment-Cfg0trC3.d.ts → ar-world-group-alignment-B6XiA1cT.d.ts} +1 -1
  51. package/dist/core/index.d.ts +1 -1
  52. package/dist/{create-slam-app-store-D1QSMuKu.d.ts → create-slam-app-store-CH31erpP.d.ts} +4 -4
  53. package/dist/{create-slam-app-store-DXiAnJwR.js → create-slam-app-store-DLv5ZwqU.js} +2 -2
  54. package/dist/{depth-grid-lookup-D5atpNZ3.d.ts → depth-grid-lookup-DY6zYTLx.d.ts} +1 -1
  55. package/dist/{depth-sampler-CwObAwEA.d.ts → depth-sampler-txG8evgQ.d.ts} +14 -4
  56. package/dist/{depth-unprojection-DRdBU90S.d.ts → depth-unprojection-JKkeqJrV.d.ts} +1 -1
  57. package/dist/device-orientation-cache-BjEaEAmh.js +20 -0
  58. package/dist/{enable-gps-ar-BBtRO2FJ.d.ts → enable-gps-ar-BbNWyqp5.d.ts} +4 -4
  59. package/dist/{frame-conversions-DDcNHkTb.d.ts → frame-conversions-CH7E2Iv_.d.ts} +1 -1
  60. package/dist/{fused-path-C5pp0PJU.d.ts → fused-path-DOKzVMiO.d.ts} +1 -1
  61. package/dist/geo/h3-proximity.d.ts +1 -1
  62. package/dist/geo/index.d.ts +1 -1
  63. package/dist/{gps-CDKDQokE.d.ts → gps-CX5b9g3s.d.ts} +8 -1
  64. package/dist/{gps-anchor-CEjGqEVD.d.ts → gps-anchor-BaqyRsPC.d.ts} +14 -4
  65. package/dist/{gps-ar-pose-sampler-DEGNk2CI.d.ts → gps-ar-pose-sampler-BOOV0jJk.d.ts} +1 -1
  66. package/dist/{gps-event-coordinator-BWpgBrHq.d.ts → gps-event-coordinator-03rVh_us.d.ts} +16 -29
  67. package/dist/{image-capture-DVcuqMtX.js → image-capture-BUqqsOi3.js} +11 -9
  68. package/dist/{image-capture-Bp6Pd4Md.d.ts → image-capture-Cr_rljeV.d.ts} +3 -3
  69. package/dist/{index-cCQWuYqy.d.ts → index-C2Bo0buN.d.ts} +4 -6
  70. package/dist/{index-B6iBnO_K.d.ts → index-CuHaGY0F.d.ts} +1 -1
  71. package/dist/index.d.ts +82 -82
  72. package/dist/index.js +16 -14
  73. package/dist/{leaflet-map-overlay-C8GS4cUy.d.ts → leaflet-map-overlay-QhF199BW.d.ts} +1 -1
  74. package/dist/{map-data-CUnTzRIC.d.ts → map-data-D8sSxpOr.d.ts} +1 -1
  75. package/dist/{map-overlay-draw-6WJeq0Kg.d.ts → map-overlay-draw-1E61FLKs.d.ts} +1 -1
  76. package/dist/median-Bla_W50f.js +44 -0
  77. package/dist/{null-storage-backend-B1-jlpin.d.ts → null-storage-backend-DXXuwG8T.d.ts} +2 -2
  78. package/dist/{occlusion-mesh-kXCQ2FM1.d.ts → occlusion-mesh-CZ4i_SW2.d.ts} +3 -11
  79. package/dist/{occupancy-grid-BV7RhB7I.d.ts → occupancy-grid-f0I07UxI.d.ts} +2 -2
  80. package/dist/{occupancy-mesher-C2ecWhNp.d.ts → occupancy-mesher-BqnRd10x.d.ts} +4 -9
  81. package/dist/{opfs-storage-backend-D6Z03fML.d.ts → opfs-storage-backend-D1ZpeNEL.d.ts} +2 -2
  82. package/dist/{persistence-middleware-CG-t08X4.d.ts → persistence-middleware-CI4Cetnl.d.ts} +1 -1
  83. package/dist/{planar-pnp-D7bc_rLX.d.ts → planar-pnp-CPLhg5MX.d.ts} +1 -1
  84. package/dist/{qr-debug-view-BJooqbiP.d.ts → qr-debug-view-BmbWo06j.d.ts} +1 -1
  85. package/dist/{qr-derived-pose-BwNWn8oV.d.ts → qr-derived-pose-DEYT85ul.d.ts} +2 -2
  86. package/dist/{qr-detected-slice-TzVb8bij.d.ts → qr-detected-slice-CPEkGbxh.d.ts} +4 -4
  87. package/dist/{qr-detection-controller-Bo4XfQTP.d.ts → qr-detection-controller-IcMRpTjV.d.ts} +3 -3
  88. package/dist/{qr-frontend-BPURlh3S.d.ts → qr-frontend-61SKPSyU.d.ts} +1 -1
  89. package/dist/{qr-pose-aggregation-CypnmjA-.d.ts → qr-pose-aggregation-BL6gfl0s.d.ts} +1 -1
  90. package/dist/{qr-pose-aggregation-DBiaLW0O.js → qr-pose-aggregation-H-O_Jjz9.js} +5 -10
  91. package/dist/{qr-size-depth-context-apAOmbrZ.d.ts → qr-size-depth-context-DJsYqbqY.d.ts} +2 -2
  92. package/dist/{qr-size-measurer-DLb33geH.js → qr-size-measurer-BVOIg-He.js} +6 -12
  93. package/dist/{qr-size-measurer-DxiMqRUw.d.ts → qr-size-measurer-Bl_i-umk.d.ts} +3 -3
  94. package/dist/{recording-options-DYKWVI93.d.ts → recording-options-Cai9D14V.d.ts} +16 -9
  95. package/dist/{recording-replayer-BJ8Lf0QY.d.ts → recording-replayer-DyIN13nG.d.ts} +2 -2
  96. package/dist/{recording-slice-BW8SiLo1.d.ts → recording-slice-DziOl7P5.d.ts} +2 -2
  97. package/dist/{replay-engine-DmCAc7WM.d.ts → replay-engine-DAymjsd1.d.ts} +1 -1
  98. package/dist/{replay-scene-zJ8SFDjE.d.ts → replay-scene-CZdWgcpc.d.ts} +3 -3
  99. package/dist/sensors/absolute-orientation.d.ts +1 -1
  100. package/dist/sensors/gps-error-handler.d.ts +1 -1
  101. package/dist/sensors/gps.d.ts +1 -1
  102. package/dist/sensors/gps.js +10 -8
  103. package/dist/sensors/index.d.ts +4 -4
  104. package/dist/sensors/index.js +1 -1
  105. package/dist/sensors/permission-checker.d.ts +1 -1
  106. package/dist/sensors/permission-checker.js +71 -40
  107. package/dist/state/app-selectors.d.ts +1 -1
  108. package/dist/state/combined-root-state.d.ts +1 -1
  109. package/dist/state/create-slam-app-store.d.ts +1 -1
  110. package/dist/state/create-slam-app-store.js +1 -1
  111. package/dist/state/gps-ar-pose-sampler.d.ts +2 -3
  112. package/dist/state/gps-ar-pose-sampler.js +1 -1
  113. package/dist/state/gps-event-coordinator.d.ts +2 -1
  114. package/dist/state/gps-event-coordinator.js +4 -46
  115. package/dist/state/index.d.ts +19 -19
  116. package/dist/state/index.js +5 -3
  117. package/dist/state/persistence-middleware.d.ts +1 -1
  118. package/dist/state/qr-detected-slice.d.ts +3 -3
  119. package/dist/state/qr-detected-slice.js +5 -9
  120. package/dist/state/recording-options.d.ts +1 -1
  121. package/dist/state/recording-options.js +74 -45
  122. package/dist/state/recording-replayer.d.ts +2 -2
  123. package/dist/state/recording-replayer.js +1 -1
  124. package/dist/state/recording-slice.d.ts +1 -1
  125. package/dist/state/replay-engine.d.ts +1 -1
  126. package/dist/state/store-subscribers.d.ts +2 -2
  127. package/dist/state/store-subscribers.js +23 -6
  128. package/dist/state/subscribe-to-selector.d.ts +1 -1
  129. package/dist/state/tracking-quality.d.ts +1 -1
  130. package/dist/state/tracking-quality.js +14 -11
  131. package/dist/state/tracking-slice.d.ts +1 -1
  132. package/dist/{state-BeKvn4B-.js → state-U45ioVyB.js} +2 -3
  133. package/dist/storage/file-system-utils.d.ts +1 -1
  134. package/dist/storage/index.d.ts +8 -8
  135. package/dist/storage/null-storage-backend.d.ts +1 -1
  136. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  137. package/dist/storage/opfs-storage.d.ts +1 -1
  138. package/dist/storage/storage-backend.d.ts +1 -1
  139. package/dist/storage/zip-coverage-embed.d.ts +1 -1
  140. package/dist/storage/zip-export.d.ts +1 -1
  141. package/dist/storage/zip-export.js +10 -4
  142. package/dist/storage/zip-reader.d.ts +1 -1
  143. package/dist/{storage-backend-sEtmM4yW.d.ts → storage-backend-BX7egQKi.d.ts} +1 -1
  144. package/dist/{store-subscribers-DJUErW-o.d.ts → store-subscribers-DtwakLrQ.d.ts} +2 -2
  145. package/dist/{subscribe-to-selector-dQV8SpsO.d.ts → subscribe-to-selector-Cgo9JTfS.d.ts} +1 -1
  146. package/dist/test-utils/browser-mocks.d.ts +1 -1
  147. package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
  148. package/dist/{tracking-slice-DMkHlbny.d.ts → tracking-slice-Bt2OEQhA.d.ts} +1 -1
  149. package/dist/types/ar-types.d.ts +2 -2
  150. package/dist/types/ar-types.js +31 -1
  151. package/dist/types/geo-types.d.ts +1 -1
  152. package/dist/types/index.d.ts +3 -3
  153. package/dist/types/index.js +2 -1
  154. package/dist/utils/concurrency.d.ts +1 -1
  155. package/dist/utils/failure-tracker.d.ts +1 -1
  156. package/dist/utils/format-file-size.d.ts +1 -1
  157. package/dist/utils/fused-path.d.ts +1 -1
  158. package/dist/utils/fused-path.js +1 -1
  159. package/dist/utils/index.d.ts +7 -7
  160. package/dist/utils/index.js +1 -1
  161. package/dist/utils/list-formatter.d.ts +1 -1
  162. package/dist/utils/logger.d.ts +1 -1
  163. package/dist/utils/logger.js +30 -20
  164. package/dist/visualization/accuracy-circles.d.ts +1 -1
  165. package/dist/visualization/alignment-lerper.d.ts +1 -1
  166. package/dist/visualization/alignment-lerper.js +20 -5
  167. package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
  168. package/dist/visualization/ar-world-group-alignment.js +1 -1
  169. package/dist/visualization/camera-follower.d.ts +1 -1
  170. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  171. package/dist/visualization/frame-conversions.d.ts +1 -1
  172. package/dist/visualization/frustum-visibility.d.ts +1 -1
  173. package/dist/visualization/gps-anchor.d.ts +1 -1
  174. package/dist/visualization/gps-anchor.js +43 -18
  175. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  176. package/dist/visualization/gps-event-markers.d.ts +1 -1
  177. package/dist/visualization/gps-event-markers.js +1 -1
  178. package/dist/visualization/hit-test-reticle.d.ts +1 -1
  179. package/dist/visualization/index.d.ts +19 -19
  180. package/dist/visualization/index.js +2 -2
  181. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  182. package/dist/visualization/leaflet-map-overlay.js +1 -1
  183. package/dist/visualization/lerp-utils.d.ts +1 -1
  184. package/dist/visualization/map-data.d.ts +1 -1
  185. package/dist/visualization/map-data.js +1 -1
  186. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  187. package/dist/visualization/map-overlay.d.ts +1 -1
  188. package/dist/visualization/occluder-mesh-driver.d.ts +2 -2
  189. package/dist/visualization/occlusion-mesh.d.ts +1 -1
  190. package/dist/visualization/occlusion-mesh.js +1 -11
  191. package/dist/visualization/three-dispose.d.ts +1 -1
  192. package/dist/visualization/vis-colors.d.ts +1 -1
  193. package/dist/{webxr-session-BWCpGd-2.d.ts → webxr-session-CGFZ429B.d.ts} +8 -8
  194. package/dist/{webxr-session-BCP2XK7k.js → webxr-session-DWKUsCN9.js} +7 -7
  195. package/package.json +4 -4
  196. /package/dist/{absolute-orientation-BAxc15J6.d.ts → absolute-orientation-C_IxDR_j.d.ts} +0 -0
  197. /package/dist/{accuracy-circles-DkWBkF5g.d.ts → accuracy-circles-BE7tbvYV.d.ts} +0 -0
  198. /package/dist/{bresenham3d-DGc4nIb-.d.ts → bresenham3d-D-t9i_b5.d.ts} +0 -0
  199. /package/dist/{camera-blit-capture-BimSdyih.d.ts → camera-blit-capture-BlC-arRb.d.ts} +0 -0
  200. /package/dist/{camera-follower-DfBm2J5i.d.ts → camera-follower-B6zA3dy9.d.ts} +0 -0
  201. /package/dist/{capability-checker-BTTpygvZ.d.ts → capability-checker-DEo-ktWI.d.ts} +0 -0
  202. /package/dist/{capture-failure-tracker-_BVfhpxv.d.ts → capture-failure-tracker-BAUKjtXU.d.ts} +0 -0
  203. /package/dist/{capture-motion-gate-BGoAMkmf.d.ts → capture-motion-gate-BmjiWUJv.d.ts} +0 -0
  204. /package/dist/{capture-motion-gate-_NdTSwKi.js → capture-motion-gate-D1eyGC_o.js} +0 -0
  205. /package/dist/{cell-key-DIB4rOTV.js → cell-key-Bj-eYTLA.js} +0 -0
  206. /package/dist/{chromium-camera-access-workaround-C6yJLXz9.d.ts → chromium-camera-access-workaround-DCd8SP2N.d.ts} +0 -0
  207. /package/dist/{concurrency-DPeGBH0X.d.ts → concurrency-DW0jQo3G.d.ts} +0 -0
  208. /package/dist/{css3d-renderer-manager-CPpVtvgs.d.ts → css3d-renderer-manager-DbrSY7Mh.d.ts} +0 -0
  209. /package/dist/{failure-tracker-CeKf5HIc.d.ts → failure-tracker-B7fzPfZo.d.ts} +0 -0
  210. /package/dist/{file-system-utils-DueXHxo9.d.ts → file-system-utils-CfLTj5Ra.d.ts} +0 -0
  211. /package/dist/{format-file-size-DxN-EBLc.d.ts → format-file-size-Da8rZgfs.d.ts} +0 -0
  212. /package/dist/{frame-loop-7GBMBu68.d.ts → frame-loop-7HigCj7m.d.ts} +0 -0
  213. /package/dist/{frustum-visibility-CokkgS_i.d.ts → frustum-visibility-COPfzruF.d.ts} +0 -0
  214. /package/dist/{geo-types-DrGVu8nS.d.ts → geo-types-BfDK8kJu.d.ts} +0 -0
  215. /package/dist/{geodesic-angle-BTldfFgs.js → geodesic-angle-HXBWiXiI.js} +0 -0
  216. /package/dist/{gps-compass-cubes-1mooS3BS.d.ts → gps-compass-cubes-CT3TWctJ.d.ts} +0 -0
  217. /package/dist/{gps-error-handler-C34GQuTu.d.ts → gps-error-handler-DjVuLXve.d.ts} +0 -0
  218. /package/dist/{gps-event-markers-Di2nBzx-.d.ts → gps-event-markers-BsC2Ynlh.d.ts} +0 -0
  219. /package/dist/{h3-proximity-D0GTHQmr.d.ts → h3-proximity-pFluGfwL.d.ts} +0 -0
  220. /package/dist/{hit-test-reticle-CaQbrhbk.d.ts → hit-test-reticle-DhnCMOsc.d.ts} +0 -0
  221. /package/dist/{image-quality-BMx2ko9-.d.ts → image-quality-BjBLoTec.d.ts} +0 -0
  222. /package/dist/{index-DXPVzOpP.d.ts → index-CjxbDm8W.d.ts} +0 -0
  223. /package/dist/{index-D74JTX4I.d.ts → index-Nr3qg4IH.d.ts} +0 -0
  224. /package/dist/{leaflet-map-overlay-CBWPvaX9.js → leaflet-map-overlay-BRkUhZMD.js} +0 -0
  225. /package/dist/{lerp-utils-Qs8OhumS.d.ts → lerp-utils-bwMwVCpU.d.ts} +0 -0
  226. /package/dist/{list-formatter-DLFDnS70.d.ts → list-formatter-1ttG18MQ.d.ts} +0 -0
  227. /package/dist/{logger-CqTd5Kpk.d.ts → logger-B4StJUDb.d.ts} +0 -0
  228. /package/dist/{map-data-1tF5gcYV.js → map-data-D3oE8AQP.js} +0 -0
  229. /package/dist/{map-overlay-BCQgvIgU.d.ts → map-overlay-0yJOcEVO.d.ts} +0 -0
  230. /package/dist/{opfs-storage-CTkxvxN4.d.ts → opfs-storage-S_odkCk1.d.ts} +0 -0
  231. /package/dist/{permission-checker-B-VtjnBA.d.ts → permission-checker-D1C5zvo-.d.ts} +0 -0
  232. /package/dist/{qr-detection-controller-B-tLVd-S.js → qr-detection-controller-bRTJXC6G.js} +0 -0
  233. /package/dist/{qr-pose-y3vaEd6x.d.ts → qr-pose-CCTF1PP0.d.ts} +0 -0
  234. /package/dist/{scene-node-names-CGb-ylBd.d.ts → scene-node-names-DWzhE7Ro.d.ts} +0 -0
  235. /package/dist/{session-disposers-BPrMplIC.js → session-disposers-BZS-hi8u.js} +0 -0
  236. /package/dist/{three-dispose-BMOAmPhb.d.ts → three-dispose-C9mdpSRX.d.ts} +0 -0
  237. /package/dist/{vis-colors-C7HI0u9_.d.ts → vis-colors-DjStl_tD.d.ts} +0 -0
  238. /package/dist/{webxr-nue-basis-CaCnYxuq.d.ts → webxr-nue-basis-C3vTqkE2.d.ts} +0 -0
  239. /package/dist/{xr-camera-texture-q0eIDSRg.d.ts → xr-camera-texture-C6Z4d7RR.d.ts} +0 -0
  240. /package/dist/{xr-error-handler-uVGDu9IX.d.ts → xr-error-handler-D9y5r8ok.d.ts} +0 -0
  241. /package/dist/{xr-frame-loop-DX3JPpAU.d.ts → xr-frame-loop-25gM4B0K.d.ts} +0 -0
  242. /package/dist/{zip-coverage-embed-ncVbaZAz.d.ts → zip-coverage-embed-BrodRLq0.d.ts} +0 -0
  243. /package/dist/{zip-export-CtiUnAlJ.d.ts → zip-export-CuBimX1J.d.ts} +0 -0
  244. /package/dist/{zip-reader-BzENzMH6.d.ts → zip-reader-BHc_b_iA.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- import { a as getCameraFollower, c as getReplayState, d as updateOrbitTarget, i as getAlignmentLerper, l as initReplayScene, n as ReplaySceneState, o as getCameraMode, r as disposeReplayScene, s as getCss3dManager, t as CameraMode, u as toggleCameraMode } from "../replay-scene-zJ8SFDjE.js";
1
+ import { a as getCameraFollower, c as getReplayState, d as updateOrbitTarget, i as getAlignmentLerper, l as initReplayScene, n as ReplaySceneState, o as getCameraMode, r as disposeReplayScene, s as getCss3dManager, t as CameraMode, u as toggleCameraMode } from "../replay-scene-CZdWgcpc.js";
2
2
  export { CameraMode, ReplaySceneState, disposeReplayScene, getAlignmentLerper, getCameraFollower, getCameraMode, getCss3dManager, getReplayState, initReplayScene, toggleCameraMode, updateOrbitTarget };
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "../utils/logger.js";
2
- import { A as setArWorldGroup, L as setScene, j as setCamera, k as setArPose, s as createSceneHierarchy } from "../webxr-session-BCP2XK7k.js";
2
+ import { A as setArWorldGroup, L as setScene, j as setCamera, k as setArPose, s as createSceneHierarchy } from "../webxr-session-DWKUsCN9.js";
3
3
  import { createCss3dRendererManager } from "../visualization/css3d-renderer-manager.js";
4
4
  import { createCameraFollower } from "../visualization/camera-follower.js";
5
5
  import { createAlignmentLerper } from "../visualization/alignment-lerper.js";
@@ -1,2 +1,2 @@
1
- import { t as SCENE_NODE } from "../scene-node-names-CGb-ylBd.js";
1
+ import { t as SCENE_NODE } from "../scene-node-names-DWzhE7Ro.js";
2
2
  export { SCENE_NODE };
@@ -1,2 +1,2 @@
1
- import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-CaCnYxuq.js";
1
+ import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-C3vTqkE2.js";
2
2
  export { WEBXR_TO_NUE };
@@ -1,4 +1,4 @@
1
- import { i as DepthSample, t as ARPose } from "../ar-types-Cc5yvBwn.js";
2
- import { n as CapturedImage } from "../image-capture-Bp6Pd4Md.js";
3
- import { $ as stopImageCapture, A as nuePositionToWebXR, B as setImageQualityAnalyzer, C as getImageCaptureFrameCount, D as initAR, E as getXrCameraFromPose, F as setCamera, G as setTrackingRecoveredCallback, H as setSessionEndCallback, I as setCameraFrameCallback, J as startCameraFrameCapture, K as setTrackingStore, L as setDepthCaptureCallback, M as resetWebXRState, N as setArPose, O as isWebXRSupported, P as setArWorldGroup, Q as stopDepthCapture, R as setFrameCallback, S as getDepthSampleCount, T as getScene, U as setTrackingCallbacks, V as setScene, W as setTrackingLostCallback, X as startImageCapture, Y as startDepthCapture, Z as stopCameraFrameCapture, _ as getCamera, a as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, b as getCurrentArPose, c as TrackingSubscribableStore, d as createSceneHierarchy, f as endARSession, g as getArWorldGroup, h as getArPose, i as CameraFrameCaptureConfig, j as nueQuaternionToWebXR, k as isXRCameraLike, l as applyAlignmentMatrix, m as extractResetTransformData, n as AR_CAMERA_FOV, o as SessionEndInfo, p as extractPoseFromViewer, q as shouldLogCameraAccessDiagnostic, r as AR_CAMERA_NEAR, s as SessionFeatureOptions, t as AR_CAMERA_FAR, u as buildSessionOptions, v as getCameraFrameCaptureSize, w as getLiveCss3dManager, x as getDepthInfoFromFrame, y as getCameraFrameCount, z as setImageCaptureCallback } from "../webxr-session-BWCpGd-2.js";
1
+ import { i as DepthSample, t as ARPose } from "../ar-types-CBafnxhE.js";
2
+ import { n as CapturedImage } from "../image-capture-Cr_rljeV.js";
3
+ import { $ as stopImageCapture, A as nuePositionToWebXR, B as setImageQualityAnalyzer, C as getImageCaptureFrameCount, D as initAR, E as getXrCameraFromPose, F as setCamera, G as setTrackingRecoveredCallback, H as setSessionEndCallback, I as setCameraFrameCallback, J as startCameraFrameCapture, K as setTrackingStore, L as setDepthCaptureCallback, M as resetWebXRState, N as setArPose, O as isWebXRSupported, P as setArWorldGroup, Q as stopDepthCapture, R as setFrameCallback, S as getDepthSampleCount, T as getScene, U as setTrackingCallbacks, V as setScene, W as setTrackingLostCallback, X as startImageCapture, Y as startDepthCapture, Z as stopCameraFrameCapture, _ as getCamera, a as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, b as getCurrentArPose, c as TrackingSubscribableStore, d as createSceneHierarchy, f as endARSession, g as getArWorldGroup, h as getArPose, i as CameraFrameCaptureConfig, j as nueQuaternionToWebXR, k as isXRCameraLike, l as applyAlignmentMatrix, m as extractResetTransformData, n as AR_CAMERA_FOV, o as SessionEndInfo, p as extractPoseFromViewer, q as shouldLogCameraAccessDiagnostic, r as AR_CAMERA_NEAR, s as SessionFeatureOptions, t as AR_CAMERA_FAR, u as buildSessionOptions, v as getCameraFrameCaptureSize, w as getLiveCss3dManager, x as getDepthInfoFromFrame, y as getCameraFrameCount, z as setImageCaptureCallback } from "../webxr-session-CGFZ429B.js";
4
4
  export { ARPose, AR_CAMERA_FAR, AR_CAMERA_FOV, AR_CAMERA_NEAR, CameraFrameCaptureConfig, CapturedImage, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, DepthSample, SessionEndInfo, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthInfoFromFrame, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setSessionEndCallback, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
@@ -1,2 +1,2 @@
1
- import { A as setArWorldGroup, B as setTrackingLostCallback, C as initAR, D as nueQuaternionToWebXR, E as nuePositionToWebXR, F as setImageCaptureCallback, G as startDepthCapture, H as setTrackingStore, I as setImageQualityAnalyzer, J as stopDepthCapture, K as startImageCapture, L as setScene, M as setCameraFrameCallback, N as setDepthCaptureCallback, O as resetWebXRState, P as setFrameCallback, R as setSessionEndCallback, S as getXrCameraFromPose, T as isXRCameraLike, U as shouldLogCameraAccessDiagnostic, V as setTrackingRecoveredCallback, W as startCameraFrameCapture, Y as stopImageCapture, _ as getDepthInfoFromFrame, a as applyAlignmentMatrix, b as getLiveCss3dManager, c as endARSession, d as getArPose, f as getArWorldGroup, g as getCurrentArPose, h as getCameraFrameCount, i as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, j as setCamera, k as setArPose, l as extractPoseFromViewer, m as getCameraFrameCaptureSize, n as AR_CAMERA_FOV, o as buildSessionOptions, p as getCamera, q as stopCameraFrameCapture, r as AR_CAMERA_NEAR, s as createSceneHierarchy, t as AR_CAMERA_FAR, u as extractResetTransformData, v as getDepthSampleCount, w as isWebXRSupported, x as getScene, y as getImageCaptureFrameCount, z as setTrackingCallbacks } from "../webxr-session-BCP2XK7k.js";
1
+ import { A as setArWorldGroup, B as setTrackingLostCallback, C as initAR, D as nueQuaternionToWebXR, E as nuePositionToWebXR, F as setImageCaptureCallback, G as startDepthCapture, H as setTrackingStore, I as setImageQualityAnalyzer, J as stopDepthCapture, K as startImageCapture, L as setScene, M as setCameraFrameCallback, N as setDepthCaptureCallback, O as resetWebXRState, P as setFrameCallback, R as setSessionEndCallback, S as getXrCameraFromPose, T as isXRCameraLike, U as shouldLogCameraAccessDiagnostic, V as setTrackingRecoveredCallback, W as startCameraFrameCapture, Y as stopImageCapture, _ as getDepthInfoFromFrame, a as applyAlignmentMatrix, b as getLiveCss3dManager, c as endARSession, d as getArPose, f as getArWorldGroup, g as getCurrentArPose, h as getCameraFrameCount, i as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, j as setCamera, k as setArPose, l as extractPoseFromViewer, m as getCameraFrameCaptureSize, n as AR_CAMERA_FOV, o as buildSessionOptions, p as getCamera, q as stopCameraFrameCapture, r as AR_CAMERA_NEAR, s as createSceneHierarchy, t as AR_CAMERA_FAR, u as extractResetTransformData, v as getDepthSampleCount, w as isWebXRSupported, x as getScene, y as getImageCaptureFrameCount, z as setTrackingCallbacks } from "../webxr-session-DWKUsCN9.js";
2
2
  export { AR_CAMERA_FAR, AR_CAMERA_FOV, AR_CAMERA_NEAR, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthInfoFromFrame, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setSessionEndCallback, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
@@ -1,2 +1,2 @@
1
- import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-q0eIDSRg.js";
1
+ import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-C6Z4d7RR.js";
2
2
  export { CameraTextureResult, RendererLike, XRCameraLike, acquireCameraTexture };
@@ -1,2 +1,2 @@
1
- import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-uVGDu9IX.js";
1
+ import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-D9y5r8ok.js";
2
2
  export { XR_ERROR_MESSAGES, XR_ERROR_MESSAGE_UNKNOWN, getXrErrorMessage };
@@ -1,2 +1,2 @@
1
- import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-DX3JPpAU.js";
1
+ import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-25gM4B0K.js";
2
2
  export { XrFrameContext, XrFrameUpdate, clearXrFrameUpdates, registerXrFrameUpdate, runXrFrameUpdates };
@@ -1,25 +1,25 @@
1
1
  import "./ar/camera-blit-capture.js";
2
2
  import "./ar/chromium-camera-access-workaround.js";
3
3
  import "./ar/capture-failure-tracker.js";
4
- import "./ar/depth-sampler.js";
5
4
  import "./ar/depth-unprojection.js";
6
- import "./qr-size-measurer-DLb33geH.js";
5
+ import "./qr-size-measurer-BVOIg-He.js";
7
6
  import "./ar/qr-size-depth-context.js";
8
7
  import { buildObjectPoints, transformPoint } from "./ar/qr-pose.js";
9
8
  import "./ar/qr-derived-pose.js";
10
9
  import "./ar/webxr-nue-basis.js";
11
10
  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";
11
+ import { n as createDetectionScheduler } from "./qr-detection-controller-bRTJXC6G.js";
12
+ import "./qr-pose-aggregation-H-O_Jjz9.js";
13
+ import "./webxr-session-DWKUsCN9.js";
15
14
  import "./ar/occupancy-grid.js";
16
15
  import "./ar/occupancy-mesher.js";
17
16
  import "./ar/frame-loop.js";
18
17
  import "./ar/xr-frame-loop.js";
19
- import "./image-capture-DVcuqMtX.js";
18
+ import "./image-capture-BUqqsOi3.js";
20
19
  import "./ar/xr-camera-texture.js";
21
20
  import "./ar/enable-gps-ar.js";
22
21
  import "./ar/replay-scene.js";
22
+ import { calcGpsCoords } from "gps-plus-slam-js";
23
23
  //#region ../src/ar/qr-level.ts
24
24
  /** Thrown when a fetched level file fails validation. */
25
25
  var QrLevelValidationError = class extends Error {
@@ -108,8 +108,6 @@ async function fetchQrLevel(url, options = {}) {
108
108
  }
109
109
  //#endregion
110
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;
113
111
  /**
114
112
  * `count` points evenly spaced on a circle of radius `baselineM` in the QR
115
113
  * plane (z = 0), starting at local +x. The symmetric ring's centroid is the QR
@@ -144,12 +142,18 @@ function localPlaneToEnu(localX, localY, headingDeg) {
144
142
  }
145
143
  /** Apply an ENU meter offset to a geo pose (equirectangular; exact enough for sub-meter QR corners). */
146
144
  function offsetGeo(center, enu) {
147
- const dLat = enu.north / METERS_PER_DEG_LAT;
148
- const metersPerDegLon = METERS_PER_DEG_LAT * Math.cos(center.lat * Math.PI / 180);
149
- const dLon = Math.abs(metersPerDegLon) < 1e-9 ? 0 : enu.east / metersPerDegLon;
145
+ const nearPole = Math.abs(Math.cos(center.lat * Math.PI / 180)) < 1e-14;
146
+ const { lat, lon } = calcGpsCoords({
147
+ lat: center.lat,
148
+ lon: center.lon
149
+ }, [
150
+ enu.north,
151
+ enu.up,
152
+ nearPole ? 0 : enu.east
153
+ ]);
150
154
  return {
151
- latitude: center.lat + dLat,
152
- longitude: center.lon + dLon,
155
+ latitude: lat,
156
+ longitude: lon,
153
157
  altitude: center.alt + enu.up
154
158
  };
155
159
  }
@@ -380,4 +384,4 @@ function checkQrPlausibility(qrCenterWorld, cameraPosWorld, grid, options = {})
380
384
  };
381
385
  }
382
386
  //#endregion
383
- export { localPlaneToEnu as a, fetchQrLevel as c, buildQrGpsVotes as i, parseQrLevel as l, createQrTrackingController as n, offsetGeo as o, METERS_PER_DEG_LAT as r, QrLevelValidationError as s, checkQrPlausibility as t };
387
+ 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 };
@@ -43,6 +43,21 @@ interface ARPose {
43
43
  readonly position: WebXRVec3;
44
44
  readonly orientation: WebXRQuaternion;
45
45
  }
46
+ /**
47
+ * Extract the raw odometry position tuple from an {@link ARPose}.
48
+ *
49
+ * Returns the raw WebXR position without coordinate conversion — the reducer
50
+ * applies the WebXR→NUE transform when storing into state (raw-storage
51
+ * pattern, see docs/2026-04-09-raw-storage-convert-on-read.md).
52
+ * WebXR local-floor frame: X=East, Y=Up, Z=South (toward viewer / backward).
53
+ *
54
+ * Lives next to the type (quality-review G-8 — it used to sit in
55
+ * `state/gps-event-coordinator.ts`, forcing an ar→state import in
56
+ * `ar/depth-sampler.ts`).
57
+ */
58
+ declare function extractOdomPosition(arPose: ARPose): Vector3;
59
+ /** Extract the raw odometry rotation tuple from an {@link ARPose}. */
60
+ declare function extractOdomRotation(arPose: ARPose): Quaternion;
46
61
  /**
47
62
  * An sRGB color triple, 0–255 integers per channel. Kept as plain ints so
48
63
  * persisted JSON stays compact (~3 bytes/point in practice).
@@ -102,4 +117,4 @@ interface DepthSample {
102
117
  readonly projectionMatrix?: Matrix4;
103
118
  }
104
119
  //#endregion
105
- export { RgbTuple as a, DepthSample as i, ArPoseTuples as n, WebXRQuaternion as o, DepthPoint as r, WebXRVec3 as s, ARPose as t };
120
+ export { RgbTuple as a, extractOdomPosition as c, DepthSample as i, extractOdomRotation as l, ArPoseTuples as n, WebXRQuaternion as o, DepthPoint as r, WebXRVec3 as s, ARPose as t };
@@ -1,4 +1,4 @@
1
- import { t as SubscribableStore } from "./subscribe-to-selector-dQV8SpsO.js";
1
+ import { t as SubscribableStore } from "./subscribe-to-selector-Cgo9JTfS.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/ar-world-group-alignment.d.ts
@@ -1,2 +1,2 @@
1
- import { S as webxrToNUE, _ as createLoopClosureHandler, a as LibraryRootState, b as odometryTrackingRestarted, c as Matrix4, d as Vector3, f as arNorthBearingDeg, g as createGpsSlamStore, h as calcRelativeCoordsInMeters, i as LatLongAlt, l as Quaternion, m as calcGpsCoords, n as GpsPoint, o as LoopClosureHandler, p as bearingDeltaDeg, r as LatLong, s as LoopClosureHandlerConfig, t as ArImageCapture, u as RootState, v as isIdentityMatrix4, x as validateLicenseKey, y as magneticHeadingFromEnuQuat } from "../index-DXPVzOpP.js";
1
+ import { S as webxrToNUE, _ as createLoopClosureHandler, a as LibraryRootState, b as odometryTrackingRestarted, c as Matrix4, d as Vector3, f as arNorthBearingDeg, g as createGpsSlamStore, h as calcRelativeCoordsInMeters, i as LatLongAlt, l as Quaternion, m as calcGpsCoords, n as GpsPoint, o as LoopClosureHandler, p as bearingDeltaDeg, r as LatLong, s as LoopClosureHandlerConfig, t as ArImageCapture, u as RootState, v as isIdentityMatrix4, x as validateLicenseKey, y as magneticHeadingFromEnuQuat } from "../index-CjxbDm8W.js";
2
2
  export { ArImageCapture, GpsPoint, LatLong, LatLongAlt, LibraryRootState, LoopClosureHandler, LoopClosureHandlerConfig, Matrix4, Quaternion, RootState, Vector3, arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, createLoopClosureHandler, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
@@ -1,7 +1,7 @@
1
- import { a as TrackingSliceState } from "./tracking-slice-DMkHlbny.js";
2
- import { t as RecordingState } from "./recording-slice-BW8SiLo1.js";
3
- import { n as SessionMetadata } from "./opfs-storage-CTkxvxN4.js";
4
- import { n as StorageBackend } from "./storage-backend-sEtmM4yW.js";
1
+ import { a as TrackingSliceState } from "./tracking-slice-Bt2OEQhA.js";
2
+ import { t as RecordingState } from "./recording-slice-DziOl7P5.js";
3
+ import { n as SessionMetadata } from "./opfs-storage-S_odkCk1.js";
4
+ import { n as StorageBackend } from "./storage-backend-BX7egQKi.js";
5
5
  import { GpsPoint, LatLong, Matrix4, RootState, Vector3 } from "gps-plus-slam-js";
6
6
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
7
7
  import { Middleware, Reducer, ReducersMapObject, configureStore } from "@reduxjs/toolkit";
@@ -132,8 +132,8 @@ function createSlamAppStore(options) {
132
132
  const store = configureStore({
133
133
  reducer,
134
134
  middleware: (getDefaultMiddleware) => getDefaultMiddleware({
135
- serializableCheck: enableDevChecks,
136
- immutableCheck: enableDevChecks
135
+ serializableCheck: enableDevChecks ? { ignoredActions: ["tracking/poseReceived"] } : false,
136
+ immutableCheck: enableDevChecks ? { ignoredPaths: ["tracking"] } : false
137
137
  }).prepend(...prependedListeners).concat(createPersistenceMiddleware({
138
138
  storageBackend,
139
139
  onWriteFailure,
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-Cc5yvBwn.js";
1
+ import { r as DepthPoint } from "./ar-types-CBafnxhE.js";
2
2
 
3
3
  //#region ../src/ar/depth-grid-lookup.d.ts
4
4
  interface DepthGridLookup {
@@ -1,4 +1,4 @@
1
- import { a as RgbTuple, i as DepthSample, t as ARPose } from "./ar-types-Cc5yvBwn.js";
1
+ import { a as RgbTuple, i as DepthSample, t as ARPose } from "./ar-types-CBafnxhE.js";
2
2
  import { Matrix4 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-rgb-lookup.d.ts
@@ -169,12 +169,22 @@ declare class DepthSampler {
169
169
  */
170
170
  updateConfig(config: Partial<DepthSamplerConfig>): void;
171
171
  /**
172
- * Called each frame with depth information.
172
+ * Called each frame with a LAZY depth provider (quality-review E-4: the
173
+ * caller used to acquire + wrap the depth info every frame while this
174
+ * method threw ~59 of 60 acquisitions away at the interval check — the
175
+ * provider is now invoked only when a sample is due).
176
+ *
177
+ * Unavailability detection is preserved by construction:
178
+ * `lastSampleTime` only advances when a sample is EMITTED, so while depth
179
+ * is unavailable the sampler stays "due" and probes the provider every
180
+ * frame — exactly the cadence the old per-frame acquisition gave
181
+ * `checkDepthUnavailability` (Field Test Readiness Issue #8).
173
182
  *
174
183
  * @param timestamp - Current frame timestamp in milliseconds
175
- * @param depthInfo - WebXR depth information, or null if unavailable
184
+ * @param acquireDepthInfo - Returns the frame's depth info, or null if
185
+ * unavailable. Only invoked when a sample is due.
176
186
  */
177
- onFrame(timestamp: number, depthInfo: DepthInfo | null): void;
187
+ onFrame(timestamp: number, acquireDepthInfo: () => DepthInfo | null): void;
178
188
  /**
179
189
  * Acquire the per-sample RGB lookup, gated by `config.rgb` and guarded so
180
190
  * a failing acquisition (e.g. GL context loss during the blit) can never
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-Cc5yvBwn.js";
1
+ import { r as DepthPoint } from "./ar-types-CBafnxhE.js";
2
2
  import { Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-unprojection.d.ts
@@ -0,0 +1,20 @@
1
+ //#region ../src/sensors/device-orientation-cache.ts
2
+ let lastDeviceOrientation = null;
3
+ /**
4
+ * Update the cached device orientation.
5
+ * Called by the host's orientation watch; read when a GPS event arrives and
6
+ * by the XR frame loop's orientation snapshot.
7
+ */
8
+ function updateDeviceOrientation(orientation) {
9
+ lastDeviceOrientation = orientation;
10
+ }
11
+ /** Get the current cached device orientation (null before the first reading). */
12
+ function getLastDeviceOrientation() {
13
+ return lastDeviceOrientation;
14
+ }
15
+ /** Clear the cache (testing / session reset). */
16
+ function resetDeviceOrientationCache() {
17
+ lastDeviceOrientation = null;
18
+ }
19
+ //#endregion
20
+ export { resetDeviceOrientationCache as n, updateDeviceOrientation as r, getLastDeviceOrientation as t };
@@ -1,7 +1,7 @@
1
- import { t as ArCrashIsolationOptions } from "./recording-options-DYKWVI93.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CDKDQokE.js";
3
- import { n as PermissionStatus } from "./permission-checker-B-VtjnBA.js";
4
- import { s as SessionFeatureOptions } from "./webxr-session-BWCpGd-2.js";
1
+ import { t as ArCrashIsolationOptions } from "./recording-options-Cai9D14V.js";
2
+ import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CX5b9g3s.js";
3
+ import { n as PermissionStatus } from "./permission-checker-D1C5zvo-.js";
4
+ import { s as SessionFeatureOptions } from "./webxr-session-CGFZ429B.js";
5
5
 
6
6
  //#region ../src/ar/enable-gps-ar.d.ts
7
7
  /**
@@ -1,4 +1,4 @@
1
- import { i as LatLongAlt, r as LatLong } from "./index-DXPVzOpP.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-CjxbDm8W.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/frame-conversions.d.ts
@@ -1,4 +1,4 @@
1
- import { t as GpsCoord } from "./geo-types-DrGVu8nS.js";
1
+ import { t as GpsCoord } from "./geo-types-BfDK8kJu.js";
2
2
  import { LatLong, Matrix4, Vector3, fusedGpsFromOdom } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/utils/fused-path.d.ts
@@ -1,2 +1,2 @@
1
- import { a as findNearbyGeoAnchor, c as h3CellsMatch, i as clusterCellsByZoom, l as isH3Index, n as KnownGeoAnchor, o as gpsPathToCoverageCells, r as approxDistanceMetres, s as gpsToH3, t as H3_RESOLUTION } from "../h3-proximity-D0GTHQmr.js";
1
+ import { a as findNearbyGeoAnchor, c as h3CellsMatch, i as clusterCellsByZoom, l as isH3Index, n as KnownGeoAnchor, o as gpsPathToCoverageCells, r as approxDistanceMetres, s as gpsToH3, t as H3_RESOLUTION } from "../h3-proximity-pFluGfwL.js";
2
2
  export { H3_RESOLUTION, KnownGeoAnchor, approxDistanceMetres, clusterCellsByZoom, findNearbyGeoAnchor, gpsPathToCoverageCells, gpsToH3, h3CellsMatch, isH3Index };
@@ -1,2 +1,2 @@
1
- import { a as findNearbyGeoAnchor, c as h3CellsMatch, i as clusterCellsByZoom, l as isH3Index, n as KnownGeoAnchor, o as gpsPathToCoverageCells, r as approxDistanceMetres, s as gpsToH3, t as H3_RESOLUTION } from "../h3-proximity-D0GTHQmr.js";
1
+ import { a as findNearbyGeoAnchor, c as h3CellsMatch, i as clusterCellsByZoom, l as isH3Index, n as KnownGeoAnchor, o as gpsPathToCoverageCells, r as approxDistanceMetres, s as gpsToH3, t as H3_RESOLUTION } from "../h3-proximity-pFluGfwL.js";
2
2
  export { H3_RESOLUTION, type KnownGeoAnchor, approxDistanceMetres, clusterCellsByZoom, findNearbyGeoAnchor, gpsPathToCoverageCells, gpsToH3, h3CellsMatch, isH3Index };
@@ -47,7 +47,14 @@ declare function startOrientationWatch(onOrientation: OrientationCallback): void
47
47
  */
48
48
  declare function stopOrientationWatch(): void;
49
49
  /**
50
- * Request permission for device orientation (required on iOS 13+)
50
+ * Request permission for device orientation (required on iOS 13+).
51
+ *
52
+ * Boolean-contract wrapper around the permission-checker's
53
+ * `requestOrientationPermission` superset (quality-review A-4 — the two
54
+ * public implementations had already drifted once; this one lacked the
55
+ * missing-API guard and threw a ReferenceError where `DeviceOrientationEvent`
56
+ * does not exist). `true` only for an explicit grant (or the non-iOS
57
+ * no-permission-needed case); denied, failed, or unsupported → `false`.
51
58
  */
52
59
  declare function requestOrientationPermission(): Promise<boolean>;
53
60
  //#endregion
@@ -1,4 +1,4 @@
1
- import { i as LatLongAlt, r as LatLong } from "./index-DXPVzOpP.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-CjxbDm8W.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/gps-anchor.d.ts
@@ -19,8 +19,19 @@ interface GpsAnchorOptions {
19
19
  readonly skipBootstrap?: boolean;
20
20
  readonly getAlignmentMatrix: () => readonly number[] | null;
21
21
  readonly getGpsZeroRef: () => LatLong | null;
22
- /** Returns the current GPS reading at "now", or null when no fix yet. */
23
- readonly getCurrentGpsPoint: () => GpsAnchorSamplePoint | null;
22
+ /**
23
+ * Returns the current bootstrap sample, or null to skip this tick.
24
+ *
25
+ * OPTIONAL since quality-review G-6: when omitted, the anchor samples the
26
+ * OBJECT's own world pose converted to GPS via `worldNueToGps` (the
27
+ * "object-pose" source) — pinning the anchor to the placed point, not the
28
+ * device. This was previously hand-built (scratch vector + zero/alignment
29
+ * guards) in every consumer and was the subtlest piece of anchor wiring:
30
+ * re-deriving it incorrectly anchored silently wrong. Provide a custom
31
+ * reader only when the samples should come from somewhere else (e.g. the
32
+ * phone's GPS fix).
33
+ */
34
+ readonly getCurrentGpsPoint?: () => GpsAnchorSamplePoint | null;
24
35
  /**
25
36
  * Optional callback invoked whenever the bootstrap median is committed (the
26
37
  * anchor's GPS reference is (re)assigned). Receives the exact committed point
@@ -36,7 +47,6 @@ interface GpsAnchorOptions {
36
47
  readonly floorY?: () => number | null;
37
48
  readonly distanceThreshold?: number;
38
49
  readonly angleThresholdInDegrees?: number;
39
- readonly targetPosRefreshRateInSec?: number;
40
50
  /** Number of 1 Hz samples collected during bootstrap. Default 7. */
41
51
  readonly secondsToAccumulateGpsPose?: number;
42
52
  /** Wait window (seconds) at phase entry during which no samples are taken. Default 0. */
@@ -1,4 +1,4 @@
1
- import { t as ARPose } from "./ar-types-Cc5yvBwn.js";
1
+ import { t as ARPose } from "./ar-types-CBafnxhE.js";
2
2
  import { Quaternion, Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/state/gps-ar-pose-sampler.d.ts
@@ -1,10 +1,20 @@
1
- import { t as ARPose } from "./ar-types-Cc5yvBwn.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CDKDQokE.js";
3
- import { t as AbsoluteOrientationReading } from "./absolute-orientation-BAxc15J6.js";
4
- import { i as SlamAppStore } from "./create-slam-app-store-D1QSMuKu.js";
5
- import { Quaternion, RawAbsoluteOrientation, RawGpsPoint, RecordGpsEventPayload, Vector3, eulerToQuaternion } from "gps-plus-slam-js";
1
+ import { t as ARPose } from "./ar-types-CBafnxhE.js";
2
+ import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CX5b9g3s.js";
3
+ import { t as AbsoluteOrientationReading } from "./absolute-orientation-C_IxDR_j.js";
4
+ import { i as SlamAppStore } from "./create-slam-app-store-CH31erpP.js";
5
+ import { RawAbsoluteOrientation, RawGpsPoint, RecordGpsEventPayload, eulerToQuaternion } from "gps-plus-slam-js";
6
6
  import { ReducersMapObject } from "@reduxjs/toolkit";
7
7
 
8
+ //#region ../src/sensors/device-orientation-cache.d.ts
9
+ /**
10
+ * Update the cached device orientation.
11
+ * Called by the host's orientation watch; read when a GPS event arrives and
12
+ * by the XR frame loop's orientation snapshot.
13
+ */
14
+ declare function updateDeviceOrientation(orientation: RawDeviceOrientation): void;
15
+ /** Get the current cached device orientation (null before the first reading). */
16
+ declare function getLastDeviceOrientation(): RawDeviceOrientation | null;
17
+ //#endregion
8
18
  //#region ../src/state/gps-event-coordinator.d.ts
9
19
  /**
10
20
  * Configuration for the recording coordinator
@@ -15,33 +25,10 @@ interface RecordingCoordinatorConfig {
15
25
  /** Function to get current AR pose (from WebXR module) */
16
26
  getArPose: () => ARPose | null;
17
27
  }
18
- /**
19
- * Update the cached device orientation.
20
- * Called by orientation watch, used when GPS event arrives.
21
- */
22
- declare function updateDeviceOrientation(orientation: RawDeviceOrientation): void;
23
- /**
24
- * Get the current cached device orientation.
25
- */
26
- declare function getLastDeviceOrientation(): RawDeviceOrientation | null;
27
28
  /**
28
29
  * Clear cached state (for testing or session reset)
29
30
  */
30
31
  declare function resetCoordinatorState(): void;
31
- /**
32
- * Extract raw odometry position tuple from ARPose.
33
- *
34
- * Returns the raw WebXR position without coordinate conversion.
35
- * The reducer applies the WebXR→NUE transform when storing into state
36
- * (raw-storage pattern, see docs/2026-04-09-raw-storage-convert-on-read.md).
37
- *
38
- * WebXR local-floor frame: X=East, Y=Up, Z=South (toward viewer / backward).
39
- */
40
- declare function extractOdomPosition(arPose: ARPose): Vector3;
41
- /**
42
- * Extract odometry rotation tuple from ARPose.
43
- */
44
- declare function extractOdomRotation(arPose: ARPose): Quaternion;
45
32
  /**
46
33
  * Build a RawGpsPoint from GPS position data.
47
34
  * Returns only raw sensor fields — no derived fields (coordinates, weight,
@@ -89,4 +76,4 @@ declare function buildRecordGpsEventPayload(gpsPosition: GpsPosition, arPose: AR
89
76
  */
90
77
  declare function createGpsPositionHandler(config: RecordingCoordinatorConfig): (position: GpsPosition) => void;
91
78
  //#endregion
92
- export { eulerToQuaternion as a, getLastDeviceOrientation as c, updateDeviceOrientation as d, createGpsPositionHandler as i, resetCoordinatorState as l, buildRawGpsPoint as n, extractOdomPosition as o, buildRecordGpsEventPayload as r, extractOdomRotation as s, RecordingCoordinatorConfig as t, toRawAbsoluteOrientation as u };
79
+ export { eulerToQuaternion as a, getLastDeviceOrientation as c, createGpsPositionHandler as i, updateDeviceOrientation as l, buildRawGpsPoint as n, resetCoordinatorState as o, buildRecordGpsEventPayload as r, toRawAbsoluteOrientation as s, RecordingCoordinatorConfig as t };
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "./utils/logger.js";
2
- import { t as geodesicAngleRad } from "./geodesic-angle-BTldfFgs.js";
3
- import { n as MotionWindow, r as decideCapture, t as DEFAULT_MOTION_FILTER } from "./capture-motion-gate-_NdTSwKi.js";
2
+ import { t as geodesicAngleRad } from "./geodesic-angle-HXBWiXiI.js";
3
+ import { n as MotionWindow, r as decideCapture, t as DEFAULT_MOTION_FILTER } from "./capture-motion-gate-D1eyGC_o.js";
4
4
  import { DEFAULT_QUALITY_FILTER } from "./ar/image-quality.js";
5
5
  import { quat } from "gl-matrix";
6
6
  //#region ../src/ar/pose-motion.ts
@@ -21,14 +21,16 @@ import { quat } from "gl-matrix";
21
21
  * Angular velocity reuses the shared `geodesicAngleRad` kernel rather than a
22
22
  * fresh `acos` (CLAUDE.md: search first, prefer refactor over re-implementation).
23
23
  */
24
+ const _scratchQuatPrev = quat.create();
25
+ const _scratchQuatCur = quat.create();
24
26
  /**
25
- * Convert a WebXR object-form quaternion to a normalized gl-matrix quaternion.
26
- * Normalizing defends against slightly non-unit inputs (the gate must not throw
27
- * on imperfect tracking data).
27
+ * Write a WebXR object-form quaternion into `out`, normalized. Normalizing
28
+ * defends against slightly non-unit inputs (the gate must not throw on
29
+ * imperfect tracking data).
28
30
  */
29
- function toGlQuat(q) {
30
- const g = quat.fromValues(q.x, q.y, q.z, q.w);
31
- return quat.normalize(g, g);
31
+ function toGlQuat(q, out) {
32
+ quat.set(out, q.x, q.y, q.z, q.w);
33
+ return quat.normalize(out, out);
32
34
  }
33
35
  /**
34
36
  * Angular velocity in radians/second between two orientations.
@@ -43,7 +45,7 @@ function toGlQuat(q) {
43
45
  */
44
46
  function angularVelocity(qPrev, qCur, dtSeconds) {
45
47
  if (!(dtSeconds > 0)) return 0;
46
- return geodesicAngleRad(toGlQuat(qPrev), toGlQuat(qCur)) / dtSeconds;
48
+ return geodesicAngleRad(toGlQuat(qPrev, _scratchQuatPrev), toGlQuat(qCur, _scratchQuatCur)) / dtSeconds;
47
49
  }
48
50
  /**
49
51
  * Linear velocity in metres/second between two positions.
@@ -1,6 +1,6 @@
1
- import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-Cc5yvBwn.js";
2
- import { t as MotionFilterConfig } from "./capture-motion-gate-BGoAMkmf.js";
3
- import { a as QualityFilterConfig } from "./image-quality-BMx2ko9-.js";
1
+ import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-CBafnxhE.js";
2
+ import { t as MotionFilterConfig } from "./capture-motion-gate-BmjiWUJv.js";
3
+ import { a as QualityFilterConfig } from "./image-quality-BjBLoTec.js";
4
4
 
5
5
  //#region ../src/ar/image-capture.d.ts
6
6
  /**
@@ -1,11 +1,9 @@
1
- import { t as GridCell } from "./bresenham3d-DGc4nIb-.js";
2
- import { a as QrPoseSolution, i as Pose, r as Point2, t as CameraIntrinsics } from "./qr-pose-y3vaEd6x.js";
3
- import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend-BPURlh3S.js";
1
+ import { t as GridCell } from "./bresenham3d-D-t9i_b5.js";
2
+ import { a as QrPoseSolution, i as Pose, r as Point2, t as CameraIntrinsics } from "./qr-pose-CCTF1PP0.js";
3
+ import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend-61SKPSyU.js";
4
4
  import { Quaternion, RecordGpsEventPayload, Vector3 } from "gps-plus-slam-js";
5
5
 
6
6
  //#region ../src/ar/qr-gps-vote.d.ts
7
- /** Mean meters per degree of latitude (WGS-84 average). */
8
- declare const METERS_PER_DEG_LAT = 111320;
9
7
  /** Absolute geo pose of the printed QR, from the level file. */
10
8
  interface QrGeoPose {
11
9
  lat: number;
@@ -396,4 +394,4 @@ interface QrPlausibilityOptions {
396
394
  */
397
395
  declare function checkQrPlausibility(qrCenterWorld: Vector3, cameraPosWorld: Vector3, grid: OccupancySurface, options?: QrPlausibilityOptions): QrPlausibility;
398
396
  //#endregion
399
- export { QrGpsVoteInput as A, QrLevel as C, Enu as D, parseQrLevel as E, localPlaneToEnu as M, offsetGeo as N, METERS_PER_DEG_LAT as O, FetchQrLevelOptions as S, fetchQrLevel as T, QrTrackingController as _, checkQrPlausibility as a, createQrTrackingController as b, QrDetectionScheduler as c, createQrDetectionScheduler as d, CameraFrameSource as f, QrSolvePoseInput as g, QrDetectionEvent as h, QrPlausibilityVerdict as i, buildQrGpsVotes as j, QrGeoPose as k, QrDetectionSchedulerConfig as l, CameraFrameSourceConfig as m, QrPlausibility as n, DetectionScheduler as o, CameraFrameSourceCallbacks as p, QrPlausibilityOptions as r, DetectionSchedulerConfig as s, OccupancySurface as t, createDetectionScheduler as u, QrTrackingControllerConfig as v, QrLevelValidationError as w, FetchLike as x, QrTrackingStatus as y };
397
+ export { buildQrGpsVotes as A, QrLevel as C, Enu as D, parseQrLevel as E, offsetGeo as M, QrGeoPose as O, FetchQrLevelOptions as S, fetchQrLevel as T, QrTrackingController as _, checkQrPlausibility as a, createQrTrackingController as b, QrDetectionScheduler as c, createQrDetectionScheduler as d, CameraFrameSource as f, QrSolvePoseInput as g, QrDetectionEvent as h, QrPlausibilityVerdict as i, localPlaneToEnu as j, QrGpsVoteInput as k, QrDetectionSchedulerConfig as l, CameraFrameSourceConfig as m, QrPlausibility as n, DetectionScheduler as o, CameraFrameSourceCallbacks as p, QrPlausibilityOptions as r, DetectionSchedulerConfig as s, OccupancySurface as t, createDetectionScheduler as u, QrTrackingControllerConfig as v, QrLevelValidationError as w, FetchLike as x, QrTrackingStatus as y };
@@ -1,4 +1,4 @@
1
- import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-D1QSMuKu.js";
1
+ import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-CH31erpP.js";
2
2
  import { Add2dImagePayload, GpsPoint as GpsPoint$1, LatLong as LatLong$1, RawDeviceOrientation, RawGpsPoint as RawGpsPoint$1, RecordGpsEventPayload as RecordGpsEventPayload$1, add2dImage, calcRelativeCoordsInMeters, recordGpsEvent as recordGpsEvent$1, setZeroPos as setZeroPos$1 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/state/onboarding-guidance.d.ts