gps-plus-slam-app-framework 1.11.0 → 1.13.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 (248) hide show
  1. package/README.md +13 -14
  2. package/dist/{app-selectors-DG0ZqaeI.d.ts → app-selectors-QM0ZpNA4.d.ts} +1 -1
  3. package/dist/ar/ar-crash-isolation.d.ts +1 -1
  4. package/dist/ar/bresenham3d.d.ts +1 -1
  5. package/dist/ar/camera-blit-capture.d.ts +1 -1
  6. package/dist/ar/capability-checker.d.ts +1 -1
  7. package/dist/ar/capture-failure-tracker.d.ts +1 -1
  8. package/dist/ar/capture-motion-gate.d.ts +1 -1
  9. package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
  10. package/dist/ar/depth-grid-lookup.d.ts +1 -1
  11. package/dist/ar/depth-occluder.d.ts +1 -1
  12. package/dist/ar/depth-sampler.d.ts +3 -3
  13. package/dist/ar/depth-sampler.js +28 -1
  14. package/dist/ar/depth-unprojection.d.ts +1 -1
  15. package/dist/ar/enable-gps-ar.d.ts +1 -1
  16. package/dist/ar/enable-gps-ar.js +20 -5
  17. package/dist/ar/frame-loop.d.ts +1 -1
  18. package/dist/ar/hit-test-reticle-driver.d.ts +2 -0
  19. package/dist/ar/hit-test-reticle-driver.js +122 -0
  20. package/dist/ar/image-capture.d.ts +1 -1
  21. package/dist/ar/image-capture.js +1 -1
  22. package/dist/ar/image-quality.d.ts +1 -1
  23. package/dist/ar/index.d.ts +35 -34
  24. package/dist/ar/index.js +5 -4
  25. package/dist/ar/occlusion-mesh-worker.d.ts +2 -2
  26. package/dist/ar/occlusion-mesh-worker.js +6 -4
  27. package/dist/ar/occupancy-grid.d.ts +2 -2
  28. package/dist/ar/occupancy-grid.js +191 -11
  29. package/dist/ar/occupancy-mesher.d.ts +1 -1
  30. package/dist/ar/occupancy-mesher.js +1 -636
  31. package/dist/ar/qr/index.d.ts +10 -10
  32. package/dist/ar/qr/planar-pnp.d.ts +1 -1
  33. package/dist/ar/qr/qr-debug-view.d.ts +1 -1
  34. package/dist/ar/qr/qr-derived-pose.d.ts +1 -1
  35. package/dist/ar/qr/qr-detection-controller.d.ts +1 -1
  36. package/dist/ar/qr/qr-frontend.d.ts +1 -1
  37. package/dist/ar/qr/qr-pose.d.ts +1 -1
  38. package/dist/ar/qr/qr-size-depth-context.d.ts +2 -2
  39. package/dist/ar/qr/qr-size-measurer.d.ts +1 -1
  40. package/dist/ar/replay-scene.d.ts +1 -1
  41. package/dist/ar/replay-scene.js +1 -1
  42. package/dist/ar/scene-node-names.d.ts +1 -1
  43. package/dist/ar/webxr-nue-basis.d.ts +1 -1
  44. package/dist/ar/webxr-session.d.ts +3 -3
  45. package/dist/ar/webxr-session.js +1 -1
  46. package/dist/ar/xr-camera-texture.d.ts +1 -1
  47. package/dist/ar/xr-error-handler.d.ts +1 -1
  48. package/dist/ar/xr-frame-loop.d.ts +1 -1
  49. package/dist/{ar-world-group-alignment-BdS_h8Nf.d.ts → ar-world-group-alignment-CvvfACfx.d.ts} +1 -1
  50. package/dist/{cell-key-Bj-eYTLA.js → cell-key-D1b_Ix-p.js} +12 -1
  51. package/dist/core/index.d.ts +1 -1
  52. package/dist/{create-slam-app-store-DFm5K9Ob.d.ts → create-slam-app-store-HNe1PBtx.d.ts} +26 -4
  53. package/dist/{create-slam-app-store-oK9bnqyI.js → create-slam-app-store-wYN7YkB5.js} +13 -4
  54. package/dist/{depth-grid-lookup-CCuzlqUo.d.ts → depth-grid-lookup-PcJTdRLL.d.ts} +1 -1
  55. package/dist/{depth-sampler-CS2jAFw4.d.ts → depth-sampler-BcvuxgCS.d.ts} +29 -2
  56. package/dist/{depth-unprojection-ET3Gwedf.d.ts → depth-unprojection-DbGipFkA.d.ts} +1 -1
  57. package/dist/{enable-gps-ar-D_xEHzh5.d.ts → enable-gps-ar-xjz3jNqm.d.ts} +4 -4
  58. package/dist/{frame-conversions-CH7E2Iv_.d.ts → frame-conversions-CzPQDYpM.d.ts} +1 -1
  59. package/dist/{fused-path-DOKzVMiO.d.ts → fused-path-CBAttcVm.d.ts} +1 -1
  60. package/dist/geo/h3-proximity.d.ts +1 -1
  61. package/dist/geo/index.d.ts +1 -1
  62. package/dist/{gps-anchor-BaqyRsPC.d.ts → gps-anchor-Gv4NDwH4.d.ts} +1 -1
  63. package/dist/{gps-ar-pose-sampler-BuuUuK-D.d.ts → gps-ar-pose-sampler-DBEYDFY5.d.ts} +1 -1
  64. package/dist/{gps-event-coordinator-Cruoe5I-.d.ts → gps-event-coordinator-BKwB4RyQ.d.ts} +4 -4
  65. package/dist/{gps-event-markers-y2b2aVl6.d.ts → gps-event-markers-212h7j3D.d.ts} +4 -4
  66. package/dist/hit-test-reticle-driver-CfKiDgsa.d.ts +40 -0
  67. package/dist/{image-capture-BevgKpoO.d.ts → image-capture-BXmx1YvD.d.ts} +3 -3
  68. package/dist/{index-Dxb6ATNK.d.ts → index-DVmgFIgm.d.ts} +1 -1
  69. package/dist/{index-BWVwd9Zw.d.ts → index-DX9VC257.d.ts} +3 -3
  70. package/dist/{index-ClmnNJ6-.d.ts → index-qtZ2muFd.d.ts} +1 -1
  71. package/dist/index.d.ts +89 -82
  72. package/dist/index.js +17 -10
  73. package/dist/{leaflet-map-overlay-CksetpTt.d.ts → leaflet-map-overlay-BkHmzvpD.d.ts} +1 -1
  74. package/dist/{map-data-D8cCqpOM.d.ts → map-data-BQXPtRz7.d.ts} +1 -1
  75. package/dist/{map-overlay-draw-Cy-klqoA.d.ts → map-overlay-draw-sTM3wug_.d.ts} +1 -1
  76. package/dist/{null-storage-backend-DXXuwG8T.d.ts → null-storage-backend-Dtn3TBfT.d.ts} +2 -2
  77. package/dist/{occlusion-mesh-BWe2PrVi.d.ts → occlusion-mesh-BY2aMej3.d.ts} +22 -4
  78. package/dist/occupancy-cubes-visualizer-soN0Sizd.d.ts +146 -0
  79. package/dist/{occupancy-grid-CYBdmMOo.d.ts → occupancy-grid-DKzIdCSZ.d.ts} +113 -3
  80. package/dist/{occupancy-mesher-B4Bv4BTk.d.ts → occupancy-mesher-Co80tOpl.d.ts} +22 -1
  81. package/dist/occupancy-mesher-DzNeJdQf.js +837 -0
  82. package/dist/{opfs-storage-backend-D1ZpeNEL.d.ts → opfs-storage-backend-CZ-ECudx.d.ts} +2 -2
  83. package/dist/perf-stats-overlay-BMEQrzx6.d.ts +68 -0
  84. package/dist/{persistence-middleware-Cun4aF5M.d.ts → persistence-middleware-Byo_Fs4n.d.ts} +1 -1
  85. package/dist/{planar-pnp-ByxwDEyM.d.ts → planar-pnp-CkcMN3o3.d.ts} +1 -1
  86. package/dist/pointer-picking-BATHHTlT.d.ts +41 -0
  87. package/dist/{qr-debug-view-CGlITU09.d.ts → qr-debug-view-BMjNVhV2.d.ts} +1 -1
  88. package/dist/{qr-derived-pose-DZPxZd9C.d.ts → qr-derived-pose-Dq7mPK2s.d.ts} +2 -2
  89. package/dist/{qr-detected-slice-mfyxD2-M.d.ts → qr-detected-slice-8t_laDR9.d.ts} +4 -4
  90. package/dist/{qr-detection-controller-C5NII-vs.d.ts → qr-detection-controller-Dh4Paymb.d.ts} +3 -3
  91. package/dist/{qr-frontend-QzKZSqB-.d.ts → qr-frontend-BnLlVjKu.d.ts} +1 -1
  92. package/dist/{qr-pose-aggregation-mABSN0AW.d.ts → qr-pose-aggregation-Bpv4uARJ.d.ts} +1 -1
  93. package/dist/{qr-size-depth-context-CMDv6T29.d.ts → qr-size-depth-context-Bzbx98nS.d.ts} +2 -2
  94. package/dist/{qr-size-measurer-rVFf4AdM.d.ts → qr-size-measurer-18_W3INY.d.ts} +3 -3
  95. package/dist/{recording-replayer-qT2EM1Qs.d.ts → recording-replayer-BKmVuchg.d.ts} +2 -2
  96. package/dist/{recording-slice-DXw5-UvO.d.ts → recording-slice-zMedT0ot.d.ts} +1 -1
  97. package/dist/{replay-engine-B1H_kLhK.d.ts → replay-engine-D-cbT0Fw.d.ts} +1 -1
  98. package/dist/{replay-scene-BJeO36YT.d.ts → replay-scene-D5qzY0_x.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/index.d.ts +4 -4
  103. package/dist/sensors/permission-checker.d.ts +1 -1
  104. package/dist/state/app-selectors.d.ts +1 -1
  105. package/dist/state/combined-root-state.d.ts +1 -1
  106. package/dist/state/create-slam-app-store.d.ts +1 -1
  107. package/dist/state/create-slam-app-store.js +1 -1
  108. package/dist/state/gps-ar-pose-sampler.d.ts +2 -2
  109. package/dist/state/gps-event-coordinator.d.ts +2 -2
  110. package/dist/state/gps-event-coordinator.js +1 -1
  111. package/dist/state/index.d.ts +18 -18
  112. package/dist/state/index.js +3 -3
  113. package/dist/state/persistence-middleware.d.ts +1 -1
  114. package/dist/state/qr-detected-slice.d.ts +3 -3
  115. package/dist/state/recording-replayer.d.ts +2 -2
  116. package/dist/state/recording-replayer.js +1 -1
  117. package/dist/state/recording-slice.d.ts +1 -1
  118. package/dist/state/replay-engine.d.ts +1 -1
  119. package/dist/state/replay-occupancy-subscriber.d.ts +51 -0
  120. package/dist/state/replay-occupancy-subscriber.js +85 -0
  121. package/dist/state/replay-session.d.ts +88 -0
  122. package/dist/state/replay-session.js +165 -0
  123. package/dist/state/store-subscribers.d.ts +2 -2
  124. package/dist/state/store-subscribers.js +1 -1
  125. package/dist/state/subscribe-to-selector.d.ts +1 -1
  126. package/dist/state/tracking-quality.d.ts +1 -1
  127. package/dist/state/tracking-slice.d.ts +1 -1
  128. package/dist/{state-CDF5LvsO.js → state-DxL3T1Id.js} +1 -1
  129. package/dist/storage/file-system-utils.d.ts +1 -1
  130. package/dist/storage/index.d.ts +8 -8
  131. package/dist/storage/null-storage-backend.d.ts +1 -1
  132. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  133. package/dist/storage/opfs-storage.d.ts +1 -1
  134. package/dist/storage/storage-backend.d.ts +1 -1
  135. package/dist/storage/zip-coverage-embed.d.ts +1 -1
  136. package/dist/storage/zip-export.d.ts +1 -1
  137. package/dist/storage/zip-reader.d.ts +1 -1
  138. package/dist/{storage-backend-BX7egQKi.d.ts → storage-backend-DCYbOvTw.d.ts} +1 -1
  139. package/dist/{store-subscribers-CWHToX6N.d.ts → store-subscribers-BbRW35u5.d.ts} +2 -2
  140. package/dist/{subscribe-to-selector-j-eOYybQ.d.ts → subscribe-to-selector-B_lm_euO.d.ts} +1 -1
  141. package/dist/test-utils/browser-mocks.d.ts +1 -1
  142. package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
  143. package/dist/text-sprite-C6VcC2mo.d.ts +53 -0
  144. package/dist/{tracking-slice-BAbcZK-Y.d.ts → tracking-slice-D5LDL_y4.d.ts} +1 -1
  145. package/dist/types/ar-types.d.ts +1 -1
  146. package/dist/types/geo-types.d.ts +1 -1
  147. package/dist/types/index.d.ts +2 -2
  148. package/dist/utils/concurrency.d.ts +1 -1
  149. package/dist/utils/failure-tracker.d.ts +1 -1
  150. package/dist/utils/format-file-size.d.ts +1 -1
  151. package/dist/utils/fused-path.d.ts +1 -1
  152. package/dist/utils/index.d.ts +7 -7
  153. package/dist/utils/list-formatter.d.ts +1 -1
  154. package/dist/utils/logger.d.ts +1 -1
  155. package/dist/visualization/accuracy-circles.d.ts +1 -1
  156. package/dist/visualization/alignment-lerper.d.ts +1 -1
  157. package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
  158. package/dist/visualization/ar-world-group-alignment.js +1 -1
  159. package/dist/visualization/camera-follower.d.ts +1 -1
  160. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  161. package/dist/visualization/frame-conversions.d.ts +1 -1
  162. package/dist/visualization/frustum-visibility.d.ts +1 -1
  163. package/dist/visualization/gps-anchor.d.ts +1 -1
  164. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  165. package/dist/visualization/gps-compass-cubes.js +6 -22
  166. package/dist/visualization/gps-event-markers.d.ts +1 -1
  167. package/dist/visualization/gps-event-markers.js +1 -1
  168. package/dist/visualization/hit-test-reticle.d.ts +1 -1
  169. package/dist/visualization/hit-test-reticle.js +3 -2
  170. package/dist/visualization/index.d.ts +25 -19
  171. package/dist/visualization/index.js +10 -4
  172. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  173. package/dist/visualization/leaflet-map-overlay.js +1 -1
  174. package/dist/visualization/lerp-utils.d.ts +1 -1
  175. package/dist/visualization/map-data.d.ts +1 -1
  176. package/dist/visualization/map-data.js +1 -1
  177. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  178. package/dist/visualization/occluder-mesh-driver.d.ts +2 -2
  179. package/dist/visualization/occlusion-mesh.d.ts +1 -1
  180. package/dist/visualization/occlusion-mesh.js +26 -1
  181. package/dist/visualization/occupancy-cubes-visualizer.d.ts +2 -0
  182. package/dist/visualization/occupancy-cubes-visualizer.js +221 -0
  183. package/dist/visualization/perf-stats-overlay.d.ts +2 -0
  184. package/dist/visualization/perf-stats-overlay.js +85 -0
  185. package/dist/visualization/pointer-picking.d.ts +2 -0
  186. package/dist/visualization/pointer-picking.js +58 -0
  187. package/dist/visualization/text-sprite.d.ts +2 -0
  188. package/dist/visualization/text-sprite.js +105 -0
  189. package/dist/visualization/three-dispose.d.ts +1 -1
  190. package/dist/visualization/vis-colors.d.ts +1 -1
  191. package/dist/visualization/wayfinding-hud.d.ts +2 -0
  192. package/dist/visualization/wayfinding-hud.js +289 -0
  193. package/dist/visualization/wayfinding-placement.d.ts +2 -0
  194. package/dist/visualization/wayfinding-placement.js +157 -0
  195. package/dist/wayfinding-hud-DVun2b69.d.ts +82 -0
  196. package/dist/wayfinding-placement-dnHzfYlT.d.ts +97 -0
  197. package/dist/{webxr-session-OyR3YbTq.js → webxr-session-BBlgzrqY.js} +3 -3
  198. package/dist/{webxr-session-DefwObIu.d.ts → webxr-session-DurXRnl_.d.ts} +7 -7
  199. package/package.json +3 -3
  200. /package/dist/{absolute-orientation-Dj1One3y.d.ts → absolute-orientation-0WIsqJnu.d.ts} +0 -0
  201. /package/dist/{accuracy-circles-BHz7yVIL.d.ts → accuracy-circles-CFnKGfsD.d.ts} +0 -0
  202. /package/dist/{alignment-lerper-DAHicRON.d.ts → alignment-lerper-CK1TYLIL.d.ts} +0 -0
  203. /package/dist/{ar-crash-isolation-DlXCGzMf.d.ts → ar-crash-isolation-BSFw_beO.d.ts} +0 -0
  204. /package/dist/{ar-types-D6PYS4bc.d.ts → ar-types-BprL3nKv.d.ts} +0 -0
  205. /package/dist/{bresenham3d-D-t9i_b5.d.ts → bresenham3d-bt61R-Qa.d.ts} +0 -0
  206. /package/dist/{camera-blit-capture-BlC-arRb.d.ts → camera-blit-capture-CgNJ9grH.d.ts} +0 -0
  207. /package/dist/{camera-follower-CO_ibF2o.d.ts → camera-follower-OnnXsbHd.d.ts} +0 -0
  208. /package/dist/{capability-checker-BZ3_x1YL.d.ts → capability-checker-DrWimJ_t.d.ts} +0 -0
  209. /package/dist/{capture-failure-tracker-BAUKjtXU.d.ts → capture-failure-tracker-bUXJeMvQ.d.ts} +0 -0
  210. /package/dist/{capture-motion-gate-CPwLekNf.d.ts → capture-motion-gate-C60Qrilh.d.ts} +0 -0
  211. /package/dist/{chromium-camera-access-workaround-BHR4clTE.d.ts → chromium-camera-access-workaround-BRs6gkI4.d.ts} +0 -0
  212. /package/dist/{concurrency-DW0jQo3G.d.ts → concurrency-CMhbkxBk.d.ts} +0 -0
  213. /package/dist/{css3d-renderer-manager-CJjHtCMT.d.ts → css3d-renderer-manager-CE6xN7XM.d.ts} +0 -0
  214. /package/dist/{device-orientation-cache-j-kLP8he.js → device-orientation-cache-BjEaEAmh.js} +0 -0
  215. /package/dist/{failure-tracker-B7fzPfZo.d.ts → failure-tracker-BdaFulDA.d.ts} +0 -0
  216. /package/dist/{file-system-utils-BHI0rXr9.d.ts → file-system-utils-DE3BViuq.d.ts} +0 -0
  217. /package/dist/{format-file-size-Da8rZgfs.d.ts → format-file-size-B2CJdRqD.d.ts} +0 -0
  218. /package/dist/{frame-loop-7GBMBu68.d.ts → frame-loop-CUEIdlhS.d.ts} +0 -0
  219. /package/dist/{frustum-visibility-COPfzruF.d.ts → frustum-visibility-BTx1Sqfo.d.ts} +0 -0
  220. /package/dist/{geo-types-BfDK8kJu.d.ts → geo-types-DGe5UKgx.d.ts} +0 -0
  221. /package/dist/{gps-CnhYrJCa.d.ts → gps-CC0l9lCp.d.ts} +0 -0
  222. /package/dist/{gps-compass-cubes-CT3TWctJ.d.ts → gps-compass-cubes-QQJgpRXR.d.ts} +0 -0
  223. /package/dist/{gps-error-handler-DjVuLXve.d.ts → gps-error-handler-da4DCcs5.d.ts} +0 -0
  224. /package/dist/{h3-proximity-BaAulrnM.d.ts → h3-proximity-CAEk3osq.d.ts} +0 -0
  225. /package/dist/{hit-test-reticle-DhnCMOsc.d.ts → hit-test-reticle-DcOyqo3B.d.ts} +0 -0
  226. /package/dist/{image-capture-C4DwxC10.js → image-capture-Dn8uLIP2.js} +0 -0
  227. /package/dist/{image-quality--HLuyJ2r.d.ts → image-quality-G7_qT4aj.d.ts} +0 -0
  228. /package/dist/{index-CjxbDm8W.d.ts → index-T8Fxvzka.d.ts} +0 -0
  229. /package/dist/{index-Nr3qg4IH.d.ts → index-Y_RNWbQX.d.ts} +0 -0
  230. /package/dist/{leaflet-map-overlay-CTcTVmL1.js → leaflet-map-overlay-DjWfRT8a.js} +0 -0
  231. /package/dist/{lerp-utils-bwMwVCpU.d.ts → lerp-utils-B-ecvLq2.d.ts} +0 -0
  232. /package/dist/{list-formatter-1ttG18MQ.d.ts → list-formatter-C45u3Vgv.d.ts} +0 -0
  233. /package/dist/{logger-B4StJUDb.d.ts → logger-BQGNXi9W.d.ts} +0 -0
  234. /package/dist/{map-data-DkhsYDGM.js → map-data-vL8jb5Z9.js} +0 -0
  235. /package/dist/{opfs-storage-S_odkCk1.d.ts → opfs-storage-CrhVauNL.d.ts} +0 -0
  236. /package/dist/{permission-checker-B-VtjnBA.d.ts → permission-checker-BDrCOwQF.d.ts} +0 -0
  237. /package/dist/{qr-pose-21fRDcFO.d.ts → qr-pose-_dInl6di.d.ts} +0 -0
  238. /package/dist/{scene-node-names-DWzhE7Ro.d.ts → scene-node-names-Ct6ATrfM.d.ts} +0 -0
  239. /package/dist/{session-disposers-B7hUN90w.js → session-disposers-BJM5U62W.js} +0 -0
  240. /package/dist/{three-dispose-C3mnKQR5.d.ts → three-dispose-B5-XiECx.d.ts} +0 -0
  241. /package/dist/{vis-colors-CoSpbZEO.d.ts → vis-colors-16Pht13u.d.ts} +0 -0
  242. /package/dist/{webxr-nue-basis-C3vTqkE2.d.ts → webxr-nue-basis-B8ZEetVb.d.ts} +0 -0
  243. /package/dist/{xr-camera-texture-q0eIDSRg.d.ts → xr-camera-texture-BA4xiaQ4.d.ts} +0 -0
  244. /package/dist/{xr-error-handler-D9y5r8ok.d.ts → xr-error-handler-BeyxXCE_.d.ts} +0 -0
  245. /package/dist/{xr-frame-loop-BiZvgqP7.d.ts → xr-frame-loop-A1mGDFHI.d.ts} +0 -0
  246. /package/dist/{zip-coverage-embed-CyoX7XL7.d.ts → zip-coverage-embed-BC3O2-8b.d.ts} +0 -0
  247. /package/dist/{zip-export-CuBimX1J.d.ts → zip-export-Cfl_kNQ7.d.ts} +0 -0
  248. /package/dist/{zip-reader-BHc_b_iA.d.ts → zip-reader-DwkuvlGo.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- import { _ as solveQrPose, a as QrPoseSolution, c as SolveQrPoseInput, d as intrinsicsFromProjection, f as invertPose, g as signedQuadArea, h as reprojectionErrorPx, i as Pose, l as buildObjectPoints, m as qrInCameraFromOpenCv, n as OpenCvPnpResult, o as QuadValidation, p as projectViewPoint, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics, u as composePose, v as transformPoint, y as validateQuad } from "../../qr-pose-21fRDcFO.js";
1
+ import { _ as solveQrPose, a as QrPoseSolution, c as SolveQrPoseInput, d as intrinsicsFromProjection, f as invertPose, g as signedQuadArea, h as reprojectionErrorPx, i as Pose, l as buildObjectPoints, m as qrInCameraFromOpenCv, n as OpenCvPnpResult, o as QuadValidation, p as projectViewPoint, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics, u as composePose, v as transformPoint, y as validateQuad } from "../../qr-pose-_dInl6di.js";
2
2
  export { CameraIntrinsics, OpenCvPnpResult, Point2, Pose, QrPoseSolution, QuadValidation, SolvePnpSquare, SolveQrPoseInput, buildObjectPoints, composePose, intrinsicsFromProjection, invertPose, projectViewPoint, qrInCameraFromOpenCv, reprojectionErrorPx, signedQuadArea, solveQrPose, transformPoint, validateQuad };
@@ -1,3 +1,3 @@
1
- import { n as QrSizeDepthContext } from "../../qr-size-measurer-rVFf4AdM.js";
2
- import { t as createQrSizeDepthContext } from "../../qr-size-depth-context-CMDv6T29.js";
1
+ import { n as QrSizeDepthContext } from "../../qr-size-measurer-18_W3INY.js";
2
+ import { t as createQrSizeDepthContext } from "../../qr-size-depth-context-Bzbx98nS.js";
3
3
  export { QrSizeDepthContext, createQrSizeDepthContext };
@@ -1,2 +1,2 @@
1
- import { a as QrSizeMeasurerOptions, i as QrSizeMeasurer, n as QrSizeDepthContext, o as createQrSizeMeasurer, r as QrSizeMeasurement, t as ImageSize } from "../../qr-size-measurer-rVFf4AdM.js";
1
+ import { a as QrSizeMeasurerOptions, i as QrSizeMeasurer, n as QrSizeDepthContext, o as createQrSizeMeasurer, r as QrSizeMeasurement, t as ImageSize } from "../../qr-size-measurer-18_W3INY.js";
2
2
  export { ImageSize, QrSizeDepthContext, QrSizeMeasurement, QrSizeMeasurer, QrSizeMeasurerOptions, createQrSizeMeasurer };
@@ -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-BJeO36YT.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-D5qzY0_x.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 { i as createSceneHierarchy } from "../webxr-session-OyR3YbTq.js";
2
+ import { i as createSceneHierarchy } from "../webxr-session-BBlgzrqY.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-DWzhE7Ro.js";
1
+ import { t as SCENE_NODE } from "../scene-node-names-Ct6ATrfM.js";
2
2
  export { SCENE_NODE };
@@ -1,2 +1,2 @@
1
- import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-C3vTqkE2.js";
1
+ import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-B8ZEetVb.js";
2
2
  export { WEBXR_TO_NUE };
@@ -1,4 +1,4 @@
1
- import { i as DepthSample, t as ARPose } from "../ar-types-D6PYS4bc.js";
2
- import { n as CapturedImage } from "../image-capture-BevgKpoO.js";
3
- import { A as startCameraFrameCapture, C as isWebXRSupported, D as rebindTrackingStore, E as nueQuaternionToWebXR, F as stopImageCapture, M as startImageCapture, N as stopCameraFrameCapture, O as resetWebXRState, P as stopDepthCapture, S as initAR, T as nuePositionToWebXR, _ as getDepthInfoFromFrame, a as SessionFeatureOptions, b as getScene, c as buildSessionOptions, d as extractPoseFromViewer, f as extractResetTransformData, g as getCurrentArPose, h as getCameraFrameCount, i as SessionEndInfo, j as startDepthCapture, k as shouldLogCameraAccessDiagnostic, l as createSceneHierarchy, m as getCamera, n as CameraFrameCaptureConfig, o as TrackingSubscribableStore, p as getArWorldGroup, r as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, s as applyAlignmentMatrix, t as ArSessionCallbacks, u as endARSession, v as getDepthSampleCount, w as isXRCameraLike, x as getXrCameraFromPose, y as getImageCaptureFrameCount } from "../webxr-session-DefwObIu.js";
1
+ import { i as DepthSample, t as ARPose } from "../ar-types-BprL3nKv.js";
2
+ import { n as CapturedImage } from "../image-capture-BXmx1YvD.js";
3
+ import { A as startCameraFrameCapture, C as isWebXRSupported, D as rebindTrackingStore, E as nueQuaternionToWebXR, F as stopImageCapture, M as startImageCapture, N as stopCameraFrameCapture, O as resetWebXRState, P as stopDepthCapture, S as initAR, T as nuePositionToWebXR, _ as getDepthInfoFromFrame, a as SessionFeatureOptions, b as getScene, c as buildSessionOptions, d as extractPoseFromViewer, f as extractResetTransformData, g as getCurrentArPose, h as getCameraFrameCount, i as SessionEndInfo, j as startDepthCapture, k as shouldLogCameraAccessDiagnostic, l as createSceneHierarchy, m as getCamera, n as CameraFrameCaptureConfig, o as TrackingSubscribableStore, p as getArWorldGroup, r as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, s as applyAlignmentMatrix, t as ArSessionCallbacks, u as endARSession, v as getDepthSampleCount, w as isXRCameraLike, x as getXrCameraFromPose, y as getImageCaptureFrameCount } from "../webxr-session-DurXRnl_.js";
4
4
  export { ARPose, ArSessionCallbacks, CameraFrameCaptureConfig, CapturedImage, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, DepthSample, SessionEndInfo, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArWorldGroup, getCamera, getCameraFrameCount, getCurrentArPose, getDepthInfoFromFrame, getDepthSampleCount, getImageCaptureFrameCount, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, rebindTrackingStore, resetWebXRState, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
@@ -1,2 +1,2 @@
1
- import { A as stopImageCapture, C as resetWebXRState, D as startImageCapture, E as startDepthCapture, O as stopCameraFrameCapture, S as rebindTrackingStore, T as startCameraFrameCapture, _ as initAR, a as endARSession, b as nuePositionToWebXR, c as getArWorldGroup, d as getCurrentArPose, f as getDepthInfoFromFrame, g as getXrCameraFromPose, h as getScene, i as createSceneHierarchy, k as stopDepthCapture, l as getCamera, m as getImageCaptureFrameCount, n as applyAlignmentMatrix, o as extractPoseFromViewer, p as getDepthSampleCount, r as buildSessionOptions, s as extractResetTransformData, t as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, u as getCameraFrameCount, v as isWebXRSupported, w as shouldLogCameraAccessDiagnostic, x as nueQuaternionToWebXR, y as isXRCameraLike } from "../webxr-session-OyR3YbTq.js";
1
+ import { A as stopImageCapture, C as resetWebXRState, D as startImageCapture, E as startDepthCapture, O as stopCameraFrameCapture, S as rebindTrackingStore, T as startCameraFrameCapture, _ as initAR, a as endARSession, b as nuePositionToWebXR, c as getArWorldGroup, d as getCurrentArPose, f as getDepthInfoFromFrame, g as getXrCameraFromPose, h as getScene, i as createSceneHierarchy, k as stopDepthCapture, l as getCamera, m as getImageCaptureFrameCount, n as applyAlignmentMatrix, o as extractPoseFromViewer, p as getDepthSampleCount, r as buildSessionOptions, s as extractResetTransformData, t as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, u as getCameraFrameCount, v as isWebXRSupported, w as shouldLogCameraAccessDiagnostic, x as nueQuaternionToWebXR, y as isXRCameraLike } from "../webxr-session-BBlgzrqY.js";
2
2
  export { DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArWorldGroup, getCamera, getCameraFrameCount, getCurrentArPose, getDepthInfoFromFrame, getDepthSampleCount, getImageCaptureFrameCount, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, rebindTrackingStore, resetWebXRState, 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-BA4xiaQ4.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-D9y5r8ok.js";
1
+ import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-BeyxXCE_.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-BiZvgqP7.js";
1
+ import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-A1mGDFHI.js";
2
2
  export { XrFrameContext, XrFrameUpdate, clearXrFrameUpdates, registerXrFrameUpdate, runXrFrameUpdates };
@@ -1,4 +1,4 @@
1
- import { t as SubscribableStore } from "./subscribe-to-selector-j-eOYybQ.js";
1
+ import { t as SubscribableStore } from "./subscribe-to-selector-B_lm_euO.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/ar-world-group-alignment.d.ts
@@ -40,6 +40,17 @@ function unpackCellKey(key) {
40
40
  ];
41
41
  }
42
42
  /**
43
+ * Per-axis key strides: stepping one cell along an axis moves the packed key
44
+ * by a constant (positional base-2^17 packing) — `packCellKey(x+1, y, z) ===
45
+ * packCellKey(x, y, z) + CELL_KEY_STRIDE_X`, and the z stride is 1. Hot walks
46
+ * (the occupancy grid's fused carve, the smooth mesher's dual-cell corners)
47
+ * maintain keys incrementally with these instead of repacking per cell.
48
+ * DERIVED from the packer itself so they can never drift from the encoding.
49
+ */
50
+ const CELL_KEY_STRIDE_X = packCellKey(1, 0, 0) - packCellKey(0, 0, 0);
51
+ /** See {@link CELL_KEY_STRIDE_X}. */
52
+ const CELL_KEY_STRIDE_Y = packCellKey(0, 1, 0) - packCellKey(0, 0, 0);
53
+ /**
43
54
  * True iff every coordinate is within ±`limit` — the aliasing guard callers
44
55
  * must apply before keying untrusted coordinates. Defaults to the full-field
45
56
  * {@link CELL_KEY_LIMIT}; the meshers pass {@link HALF_LATTICE_CELL_KEY_LIMIT}.
@@ -48,4 +59,4 @@ function cellCoordsInKeyRange(cell, limit = CELL_KEY_LIMIT) {
48
59
  return Math.abs(cell[0]) <= limit && Math.abs(cell[1]) <= limit && Math.abs(cell[2]) <= limit;
49
60
  }
50
61
  //#endregion
51
- export { packCellKey as a, cellKey as i, HALF_LATTICE_CELL_KEY_LIMIT as n, unpackCellCoord as o, cellCoordsInKeyRange as r, unpackCellKey as s, CELL_KEY_LIMIT as t };
62
+ export { cellCoordsInKeyRange as a, unpackCellCoord as c, HALF_LATTICE_CELL_KEY_LIMIT as i, unpackCellKey as l, CELL_KEY_STRIDE_X as n, cellKey as o, CELL_KEY_STRIDE_Y as r, packCellKey as s, CELL_KEY_LIMIT as t };
@@ -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-CjxbDm8W.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-T8Fxvzka.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-BAbcZK-Y.js";
2
- import { t as RecordingState } from "./recording-slice-DXw5-UvO.js";
3
- import { n as SessionMetadata } from "./opfs-storage-S_odkCk1.js";
4
- import { n as StorageBackend } from "./storage-backend-BX7egQKi.js";
1
+ import { a as TrackingSliceState } from "./tracking-slice-D5LDL_y4.js";
2
+ import { t as RecordingState } from "./recording-slice-zMedT0ot.js";
3
+ import { n as SessionMetadata } from "./opfs-storage-CrhVauNL.js";
4
+ import { n as StorageBackend } from "./storage-backend-DCYbOvTw.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";
@@ -349,6 +349,28 @@ interface SlamAppStoreOptions<ExtraReducers extends ReducersMapObject = Record<s
349
349
  * `false` ⇒ byte-identical. The action persists into recordings.
350
350
  */
351
351
  enableCompassWebXRConsistency?: boolean;
352
+ /**
353
+ * **Field-test flag (2026-07-19 enablement plan)** — enable the library's
354
+ * compass EXPERIMENT combo: Stage-C rotation prior + trust tolerance 15°
355
+ * (the census-backed activating value) + C′ compass-guided pair selection.
356
+ * Dispatches `setCompassExperimentEnabled(true)` once `gpsData` exists; the
357
+ * combo itself lives in the library (single boolean crosses the boundary).
358
+ * Default `false` ⇒ byte-identical. The action persists into recordings, so
359
+ * replays/censuses can attribute. Keep OFF for §6a calibration recordings.
360
+ *
361
+ * @see GpsPlusSlamJs_Docs/docs/2026-07-19-0813-compass-experiment-recorder-enablement-plan.md
362
+ */
363
+ enableCompassExperiment?: boolean;
364
+ /**
365
+ * **Field-test flag** — enable the library's alternative robust-solver
366
+ * comparison arm (NOT a compass mechanism — a generic outlier-tolerant
367
+ * position fit, rejected as a default on the evaluation corpus but exposed
368
+ * for on-device A/B against the compass experiment; adds run-to-run
369
+ * variance by nature). Dispatches `setRobustSolverComparisonEnabled(true)`
370
+ * once `gpsData` exists. Default `false` ⇒ byte-identical. The action
371
+ * persists into recordings.
372
+ */
373
+ enableRobustSolverComparison?: boolean;
352
374
  }
353
375
  /**
354
376
  * Combined root state: the framework's base state plus any caller-supplied
@@ -2,7 +2,7 @@ import { trackingReducer } from "./state/tracking-slice.js";
2
2
  import { recordWriteFailure, recordingReducer } from "./state/recording-slice.js";
3
3
  import { createTrackingQualityListenerMiddleware, trackingQualityReducer } from "./state/tracking-quality.js";
4
4
  import { createPersistenceMiddleware, slicePrefixOf } from "./state/persistence-middleware.js";
5
- import { arElementsReducer, gpsDataReducer, gpsElementsReducer, sanitizeForDevTools, setColdStartOverrideEnabled, setCompassRotationPriorEnabled, setCompassWebXRConsistencyEnabled, setZeroPos, validateLicenseKey } from "gps-plus-slam-js";
5
+ import { arElementsReducer, gpsDataReducer, gpsElementsReducer, sanitizeForDevTools, setColdStartOverrideEnabled, setCompassExperimentEnabled, setCompassRotationPriorEnabled, setCompassWebXRConsistencyEnabled, setRobustSolverComparisonEnabled, setZeroPos, validateLicenseKey } from "gps-plus-slam-js";
6
6
  import { configureStore, createListenerMiddleware } from "@reduxjs/toolkit";
7
7
  import { COMMUNITY_LICENSE_KEY } from "gps-plus-slam-js/community-license-key";
8
8
  //#region ../src/state/slam-app-store-listener.ts
@@ -77,8 +77,9 @@ function createSlamAppStoreListenerMiddleware(optIns) {
77
77
  * never references those concepts so apps that don't need them (POI viewers,
78
78
  * navigation arrows, …) compose freely.
79
79
  *
80
- * The legacy `createRecorderStore` from `store.ts` is built on top of this
81
- * factory and will move out of the framework in Iter 1D.
80
+ * This is the framework's ONLY store factory (the legacy
81
+ * `createRecorderStore`/`store.ts` it replaced moved out in Iter 1D); the
82
+ * core library's license error messages point here as the remediation.
82
83
  *
83
84
  * @see docs/2026-05-03-appframework-vs-recorderapp-boundary-analysis.md — Iter 1
84
85
  */
@@ -95,7 +96,7 @@ const BUILTIN_PERSISTED_PREFIXES = [slicePrefixOf(setZeroPos.type), slicePrefixO
95
96
  * design rationale.
96
97
  */
97
98
  function createSlamAppStore(options) {
98
- const { storageBackend, extraReducers, extraMiddleware, persistedExtraPrefixes, onWriteFailure, enableDevChecks = true, licenseKey = COMMUNITY_LICENSE_KEY, trackingQualityOptions, enableCompassColdStartOverride = true, enableCompassRotationPrior = false, enableCompassWebXRConsistency = false } = options;
99
+ const { storageBackend, extraReducers, extraMiddleware, persistedExtraPrefixes, onWriteFailure, enableDevChecks = true, licenseKey = COMMUNITY_LICENSE_KEY, trackingQualityOptions, enableCompassColdStartOverride = true, enableCompassRotationPrior = false, enableCompassWebXRConsistency = false, enableCompassExperiment = false, enableRobustSolverComparison = false } = options;
99
100
  validateLicenseKey(licenseKey);
100
101
  const builtins = {
101
102
  gpsData: gpsDataReducer,
@@ -127,6 +128,14 @@ function createSlamAppStore(options) {
127
128
  isSet: (s) => s.gpsData?.compassWebXRConsistencyEnabled === true,
128
129
  apply: (dispatch) => dispatch(setCompassWebXRConsistencyEnabled(true))
129
130
  });
131
+ if (enableCompassExperiment) compassOptIns.push({
132
+ isSet: (s) => s.gpsData?.compassExperimentEnabled === true,
133
+ apply: (dispatch) => dispatch(setCompassExperimentEnabled(true))
134
+ });
135
+ if (enableRobustSolverComparison) compassOptIns.push({
136
+ isSet: (s) => s.gpsData?.robustSolverComparisonEnabled === true,
137
+ apply: (dispatch) => dispatch(setRobustSolverComparisonEnabled(true))
138
+ });
130
139
  const prependedListeners = [trackingQualityMiddleware];
131
140
  if (compassOptIns.length > 0) prependedListeners.push(createSlamAppStoreListenerMiddleware(compassOptIns));
132
141
  const persistenceMiddleware = createPersistenceMiddleware({
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-D6PYS4bc.js";
1
+ import { r as DepthPoint } from "./ar-types-BprL3nKv.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-D6PYS4bc.js";
1
+ import { a as RgbTuple, i as DepthSample, t as ARPose } from "./ar-types-BprL3nKv.js";
2
2
  import { Matrix4 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-rgb-lookup.d.ts
@@ -114,6 +114,33 @@ declare function wrapXRDepthInfo(raw: {
114
114
  matrix?: ArrayLike<number>;
115
115
  } | null;
116
116
  }, projectionMatrix: ArrayLike<number> | undefined): DepthInfo;
117
+ /**
118
+ * Recommended depth-sampling cadence for apps that RECONSTRUCT-and-render an
119
+ * occupancy mesh (the Recorder, the PhysicsDemo) — the depth-side counterpart
120
+ * of `DEFAULT_OCCUPANCY_CELL_SIZE_M`/`DEFAULT_OCCUPANCY_MIN_OBSERVATIONS`
121
+ * (occupancy-grid.ts): one framework-level source of truth so both apps build
122
+ * the mesh at the same speed (2026-07-16 field feedback: the demo relied on
123
+ * the conservative fallback below — 16×16 @ 1 Hz, 8× fewer points/s than the
124
+ * recorder — and reconstructed visibly slower).
125
+ *
126
+ * Tuning (2026-07-16 EVENING, maintainer's on-device framerate/mesh trade-off
127
+ * passes — supersedes the same-day sweep-derived 500 ms × 64): 200 ms × 24×24.
128
+ * The ground-truth density/cadence sweep
129
+ * (GpsPlusSlamJs_Investigation test-results/synthetic-density-cadence-sweep.txt)
130
+ * showed density is the more point-efficient mesh-speed lever, but its
131
+ * flagged open question — on-device frame-time cost — resolved against LARGE
132
+ * per-sample batches: 64² @ 2 Hz (8192 points/s) visibly hurt the framerate,
133
+ * while many SMALL samples (24² @ 5 Hz, ~2880 points/s) keep the per-frame
134
+ * work chunk tiny and rendering smooth at good mesh build-up. If devices get
135
+ * faster, the sweep says gridSize (not the interval) is the knob to raise
136
+ * first.
137
+ *
138
+ * Deliberately OPT-IN named constants, NOT a change to the fallback below:
139
+ * bumping the fallback would silently re-tune consumers that are not
140
+ * reconstruction apps (MinimalExample / AnchorStarter).
141
+ */
142
+ declare const DEFAULT_RECONSTRUCTION_DEPTH_INTERVAL_MS = 200;
143
+ declare const DEFAULT_RECONSTRUCTION_DEPTH_GRID_SIZE = 24;
117
144
  /**
118
145
  * Samples sparse depth points from WebXR depth sensing.
119
146
  *
@@ -208,4 +235,4 @@ declare class DepthSampler {
208
235
  hasReceivedDepth(): boolean;
209
236
  }
210
237
  //#endregion
211
- export { wrapXRDepthInfo as a, DepthSamplerConfig as i, DepthSampler as n, DepthSamplerCallbacks as r, DepthInfo as t };
238
+ export { DepthSamplerCallbacks as a, DepthSampler as i, DEFAULT_RECONSTRUCTION_DEPTH_INTERVAL_MS as n, DepthSamplerConfig as o, DepthInfo as r, wrapXRDepthInfo as s, DEFAULT_RECONSTRUCTION_DEPTH_GRID_SIZE as t };
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-D6PYS4bc.js";
1
+ import { r as DepthPoint } from "./ar-types-BprL3nKv.js";
2
2
  import { Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-unprojection.d.ts
@@ -1,7 +1,7 @@
1
- import { t as ArCrashIsolationOptions } from "./ar-crash-isolation-DlXCGzMf.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CnhYrJCa.js";
3
- import { n as PermissionStatus } from "./permission-checker-B-VtjnBA.js";
4
- import { a as SessionFeatureOptions, t as ArSessionCallbacks } from "./webxr-session-DefwObIu.js";
1
+ import { t as ArCrashIsolationOptions } from "./ar-crash-isolation-BSFw_beO.js";
2
+ import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CC0l9lCp.js";
3
+ import { n as PermissionStatus } from "./permission-checker-BDrCOwQF.js";
4
+ import { a as SessionFeatureOptions, t as ArSessionCallbacks } from "./webxr-session-DurXRnl_.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-CjxbDm8W.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-T8Fxvzka.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-BfDK8kJu.js";
1
+ import { t as GpsCoord } from "./geo-types-DGe5UKgx.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-BaAulrnM.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-CAEk3osq.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-BaAulrnM.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-CAEk3osq.js";
2
2
  export { H3_RESOLUTION, type KnownGeoAnchor, approxDistanceMetres, clusterCellsByZoom, findNearbyGeoAnchor, gpsPathToCoverageCells, gpsToH3, h3CellsMatch, isH3Index };
@@ -1,4 +1,4 @@
1
- import { i as LatLongAlt, r as LatLong } from "./index-CjxbDm8W.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-T8Fxvzka.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/gps-anchor.d.ts
@@ -1,4 +1,4 @@
1
- import { t as ARPose } from "./ar-types-D6PYS4bc.js";
1
+ import { t as ARPose } from "./ar-types-BprL3nKv.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,7 +1,7 @@
1
- import { t as ARPose } from "./ar-types-D6PYS4bc.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CnhYrJCa.js";
3
- import { t as AbsoluteOrientationReading } from "./absolute-orientation-Dj1One3y.js";
4
- import { i as SlamAppStore } from "./create-slam-app-store-DFm5K9Ob.js";
1
+ import { t as ARPose } from "./ar-types-BprL3nKv.js";
2
+ import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CC0l9lCp.js";
3
+ import { t as AbsoluteOrientationReading } from "./absolute-orientation-0WIsqJnu.js";
4
+ import { i as SlamAppStore } from "./create-slam-app-store-HNe1PBtx.js";
5
5
  import { RawAbsoluteOrientation, RawGpsPoint, RecordGpsEventPayload, eulerToQuaternion } from "gps-plus-slam-js";
6
6
  import { ReducersMapObject } from "@reduxjs/toolkit";
7
7
 
@@ -1,5 +1,5 @@
1
1
  import * as THREE from "three";
2
- import { LatLong, Vector3 } from "gps-plus-slam-js";
2
+ import { LatLong, Vector3 as Vector3$1 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/visualization/gps-event-markers.d.ts
5
5
  /**
@@ -90,18 +90,18 @@ declare class GpsEventVisualizer {
90
90
  * fixed 8 cm sphere (same defensive policy as `preview-map.ts`).
91
91
  * Cyan fused and red snapshot markers are never affected by this argument.
92
92
  */
93
- addGpsEvent(gpsCoords: Vector3, odomPosition: Vector3, accuracy?: GpsEventAccuracy): void;
93
+ addGpsEvent(gpsCoords: Vector3$1, odomPosition: Vector3$1, accuracy?: GpsEventAccuracy): void;
94
94
  /**
95
95
  * Add an alignment snapshot marker at the given NUE position.
96
96
  * Snapshots represent the system's best GPS estimate at each alignment update.
97
97
  * Added to scene root (GPS world space), not arWorldGroup.
98
98
  */
99
- addAlignmentSnapshot(nuePosition: Vector3): void;
99
+ addAlignmentSnapshot(nuePosition: Vector3$1): void;
100
100
  /**
101
101
  * Get the NUE positions of all alignment snapshot markers.
102
102
  * Used at session end to convert to GPS coordinates for the summary map.
103
103
  */
104
- getAlignmentSnapshotPositions(): Vector3[];
104
+ getAlignmentSnapshotPositions(): Vector3$1[];
105
105
  /**
106
106
  * Create a sphere marker mesh with the given color and name.
107
107
  */
@@ -0,0 +1,40 @@
1
+ import { Object3D, Vector3 } from "three";
2
+
3
+ //#region ../src/ar/hit-test-reticle-driver.d.ts
4
+ /** Live-reticle handle returned by {@link startHitTestReticle}. */
5
+ interface HitTestReticleHandle {
6
+ /** Is a surface currently under the screen-centre reticle? */
7
+ isVisible(): boolean;
8
+ /**
9
+ * Write the reticle's current world position into `out` and return it. Only
10
+ * meaningful while `isVisible()` is true; the value is the GPS-world (NUE)
11
+ * pose once `arWorldGroup` carries the alignment.
12
+ */
13
+ getWorldPosition(out: Vector3): Vector3;
14
+ /** Remove the reticle mesh and unregister the frame loop (idempotent). */
15
+ dispose(): void;
16
+ }
17
+ /** Arguments for {@link startHitTestReticle}. */
18
+ interface HitTestReticleArgs {
19
+ /**
20
+ * Parent for the reticle mesh — pass `getArWorldGroup()` so the reticle
21
+ * rides the GPS alignment and its world pose is GPS-world (NUE).
22
+ */
23
+ arWorldGroup: Object3D;
24
+ /**
25
+ * Optional tap handler, fired on EVERY WebXR `select` — with the reticle's
26
+ * current world position when a surface is present, or `null` when not.
27
+ * Surface-less taps are reported too so the app can react (GPS gating,
28
+ * "point at the floor" hints); the placement decision stays app-side.
29
+ * When omitted, no `select` listener is registered at all.
30
+ */
31
+ onSelect?: (worldPosition: Vector3 | null) => void;
32
+ }
33
+ /**
34
+ * Install the hit-test reticle under `arWorldGroup` and start driving it from
35
+ * the XR frame loop. Returns a handle the app reads at placement time (or
36
+ * ignores entirely when it placed via `onSelect`).
37
+ */
38
+ declare function startHitTestReticle(args: HitTestReticleArgs): HitTestReticleHandle;
39
+ //#endregion
40
+ export { HitTestReticleHandle as n, startHitTestReticle as r, HitTestReticleArgs as t };
@@ -1,6 +1,6 @@
1
- import { i as MotionFilterConfig } from "./capture-motion-gate-CPwLekNf.js";
2
- import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-D6PYS4bc.js";
3
- import { s as QualityFilterConfig } from "./image-quality--HLuyJ2r.js";
1
+ import { i as MotionFilterConfig } from "./capture-motion-gate-C60Qrilh.js";
2
+ import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-BprL3nKv.js";
3
+ import { s as QualityFilterConfig } from "./image-quality-G7_qT4aj.js";
4
4
 
5
5
  //#region ../src/ar/image-capture.d.ts
6
6
  /**
@@ -1,4 +1,4 @@
1
- import { o as RgbaImage } from "./qr-frontend-QzKZSqB-.js";
1
+ import { o as RgbaImage } from "./qr-frontend-BnLlVjKu.js";
2
2
  //#region ../src/ar/camera-frame-source.d.ts
3
3
  /** Tuning for the camera frame source. */
4
4
  interface CameraFrameSourceConfig {
@@ -1,6 +1,6 @@
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-21fRDcFO.js";
3
- import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend-QzKZSqB-.js";
1
+ import { t as GridCell } from "./bresenham3d-bt61R-Qa.js";
2
+ import { a as QrPoseSolution, i as Pose, r as Point2, t as CameraIntrinsics } from "./qr-pose-_dInl6di.js";
3
+ import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend-BnLlVjKu.js";
4
4
  import { Quaternion, RecordGpsEventPayload, Vector3 } from "gps-plus-slam-js";
5
5
 
6
6
  //#region ../src/ar/qr/qr-gps-vote.d.ts
@@ -1,4 +1,4 @@
1
- import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-DFm5K9Ob.js";
1
+ import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-HNe1PBtx.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