gps-plus-slam-app-framework 1.7.0 → 1.9.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 (238) hide show
  1. package/dist/{accuracy-circles-BtqOP_v1.d.ts → accuracy-circles-DkWBkF5g.d.ts} +16 -6
  2. package/dist/{app-selectors-ikTUQZpe.d.ts → app-selectors-BbAiCRUT.d.ts} +1 -1
  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 +127 -0
  10. package/dist/ar/depth-occluder.js +299 -0
  11. package/dist/ar/depth-sampler.d.ts +2 -2
  12. package/dist/ar/depth-sampler.js +24 -4
  13. package/dist/ar/depth-unprojection.d.ts +1 -1
  14. package/dist/ar/depth-unprojection.js +52 -21
  15. package/dist/ar/enable-gps-ar.d.ts +1 -1
  16. package/dist/ar/enable-gps-ar.js +1 -1
  17. package/dist/ar/frame-loop.d.ts +1 -1
  18. package/dist/ar/frame-loop.js +12 -2
  19. package/dist/ar/image-capture.d.ts +1 -1
  20. package/dist/ar/image-capture.js +1 -1
  21. package/dist/ar/image-quality.d.ts +1 -1
  22. package/dist/ar/image-quality.js +2 -1
  23. package/dist/ar/index.d.ts +32 -31
  24. package/dist/ar/index.js +5 -4
  25. package/dist/ar/occlusion-mesh-worker.d.ts +58 -0
  26. package/dist/ar/occlusion-mesh-worker.js +129 -0
  27. package/dist/ar/occupancy-grid.d.ts +2 -2
  28. package/dist/ar/occupancy-grid.js +287 -31
  29. package/dist/ar/occupancy-mesher.d.ts +2 -0
  30. package/dist/ar/occupancy-mesher.js +638 -0
  31. package/dist/ar/planar-pnp.d.ts +1 -1
  32. package/dist/ar/qr-debug-view.d.ts +1 -1
  33. package/dist/ar/qr-derived-pose.d.ts +1 -1
  34. package/dist/ar/qr-detection-controller.d.ts +1 -1
  35. package/dist/ar/qr-frontend.d.ts +1 -1
  36. package/dist/ar/qr-pose.d.ts +1 -1
  37. package/dist/ar/qr-size-depth-context.d.ts +2 -2
  38. package/dist/ar/qr-size-measurer.d.ts +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 +4 -4
  44. package/dist/ar/webxr-session.js +2 -2
  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/xr-frame-loop.js +12 -2
  49. package/dist/{ar-MFpFlV7j.js → ar-BqCudtqE.js} +3 -2
  50. package/dist/{ar-world-group-alignment-69fgnB39.d.ts → ar-world-group-alignment-Cfg0trC3.d.ts} +1 -1
  51. package/dist/{capture-motion-gate-4EscNZCw.js → capture-motion-gate-_NdTSwKi.js} +17 -5
  52. package/dist/cell-key-DIB4rOTV.js +51 -0
  53. package/dist/core/index.d.ts +2 -2
  54. package/dist/core/index.js +2 -2
  55. package/dist/{create-slam-app-store-n_VF63D5.d.ts → create-slam-app-store-D1QSMuKu.d.ts} +8 -9
  56. package/dist/{create-slam-app-store-DkCHOpvb.js → create-slam-app-store-DXiAnJwR.js} +9 -2
  57. package/dist/{depth-grid-lookup-DQ-IYhO3.d.ts → depth-grid-lookup-D5atpNZ3.d.ts} +1 -1
  58. package/dist/{depth-sampler-asc8exHt.d.ts → depth-sampler-CwObAwEA.d.ts} +33 -1
  59. package/dist/{depth-unprojection-DjsbJW9L.d.ts → depth-unprojection-DRdBU90S.d.ts} +1 -1
  60. package/dist/{enable-gps-ar-DkNhFv4Y.d.ts → enable-gps-ar-BBtRO2FJ.d.ts} +4 -4
  61. package/dist/{frame-conversions-DObhj8Wf.d.ts → frame-conversions-DDcNHkTb.d.ts} +1 -1
  62. package/dist/{fused-path-v6eOmLl3.d.ts → fused-path-C5pp0PJU.d.ts} +1 -1
  63. package/dist/geo/h3-proximity.d.ts +1 -1
  64. package/dist/geo/index.d.ts +1 -1
  65. package/dist/{gps-anchor-BeFO2RYa.d.ts → gps-anchor-CEjGqEVD.d.ts} +1 -1
  66. package/dist/{gps-ar-pose-sampler-DHMZmYAc.d.ts → gps-ar-pose-sampler-DEGNk2CI.d.ts} +1 -1
  67. package/dist/{gps-event-coordinator-CjWW636x.d.ts → gps-event-coordinator-BWpgBrHq.d.ts} +4 -4
  68. package/dist/{image-capture-CNZDrQXG.d.ts → image-capture-Bp6Pd4Md.d.ts} +3 -3
  69. package/dist/{image-capture-B2-b6tKK.js → image-capture-DVcuqMtX.js} +1 -1
  70. package/dist/{index-BODDUTvD.d.ts → index-B6iBnO_K.d.ts} +1 -1
  71. package/dist/index-DXPVzOpP.d.ts +2 -0
  72. package/dist/{index-BneSj4_5.d.ts → index-cCQWuYqy.d.ts} +3 -3
  73. package/dist/index.d.ts +82 -80
  74. package/dist/index.js +10 -8
  75. package/dist/{leaflet-map-overlay-CmIyiE8n.d.ts → leaflet-map-overlay-C8GS4cUy.d.ts} +64 -10
  76. package/dist/leaflet-map-overlay-CBWPvaX9.js +452 -0
  77. package/dist/lerp-utils-Qs8OhumS.d.ts +42 -0
  78. package/dist/map-data-1tF5gcYV.js +124 -0
  79. package/dist/map-data-CUnTzRIC.d.ts +78 -0
  80. package/dist/{map-overlay-draw-ymz1s7fG.d.ts → map-overlay-draw-6WJeq0Kg.d.ts} +1 -1
  81. package/dist/{null-storage-backend-B9rtyDfG.d.ts → null-storage-backend-B1-jlpin.d.ts} +2 -2
  82. package/dist/occlusion-mesh-kXCQ2FM1.d.ts +194 -0
  83. package/dist/occupancy-grid-BV7RhB7I.d.ts +194 -0
  84. package/dist/occupancy-mesher-C2ecWhNp.d.ts +100 -0
  85. package/dist/{opfs-storage-3VZh-qH6.d.ts → opfs-storage-CTkxvxN4.d.ts} +5 -0
  86. package/dist/{opfs-storage-backend-JJiUJo-3.d.ts → opfs-storage-backend-D6Z03fML.d.ts} +2 -2
  87. package/dist/{persistence-middleware-DAPTTwB2.d.ts → persistence-middleware-CG-t08X4.d.ts} +1 -1
  88. package/dist/{planar-pnp-my9bqULS.d.ts → planar-pnp-D7bc_rLX.d.ts} +1 -1
  89. package/dist/{qr-debug-view-Brl73HGO.d.ts → qr-debug-view-BJooqbiP.d.ts} +1 -1
  90. package/dist/{qr-derived-pose-CmxTP2m4.d.ts → qr-derived-pose-BwNWn8oV.d.ts} +2 -2
  91. package/dist/{qr-detected-slice-VQssZmQJ.d.ts → qr-detected-slice-TzVb8bij.d.ts} +4 -4
  92. package/dist/{qr-detection-controller-CDurHv8E.d.ts → qr-detection-controller-Bo4XfQTP.d.ts} +3 -3
  93. package/dist/{qr-frontend--fFX25mV.d.ts → qr-frontend-BPURlh3S.d.ts} +1 -1
  94. package/dist/{qr-pose-aggregation-B7tWJq7j.d.ts → qr-pose-aggregation-CypnmjA-.d.ts} +1 -1
  95. package/dist/{qr-size-depth-context-CeAG53fy.d.ts → qr-size-depth-context-apAOmbrZ.d.ts} +2 -2
  96. package/dist/{qr-size-measurer-DQdAsid1.d.ts → qr-size-measurer-DxiMqRUw.d.ts} +3 -3
  97. package/dist/{recording-options-BPCpMHLK.d.ts → recording-options-DYKWVI93.d.ts} +203 -24
  98. package/dist/{recording-replayer-DQKpAGyQ.d.ts → recording-replayer-BJ8Lf0QY.d.ts} +2 -2
  99. package/dist/{recording-slice-DaxHZvNu.d.ts → recording-slice-BW8SiLo1.d.ts} +2 -2
  100. package/dist/{replay-engine-CmKh_4wf.d.ts → replay-engine-DmCAc7WM.d.ts} +1 -1
  101. package/dist/{replay-scene-DBlDrV_x.d.ts → replay-scene-zJ8SFDjE.d.ts} +3 -3
  102. package/dist/sensors/absolute-orientation.d.ts +1 -1
  103. package/dist/sensors/absolute-orientation.js +23 -6
  104. package/dist/sensors/gps-error-handler.d.ts +1 -1
  105. package/dist/sensors/gps.d.ts +1 -1
  106. package/dist/sensors/index.d.ts +4 -4
  107. package/dist/sensors/permission-checker.d.ts +1 -1
  108. package/dist/state/app-selectors.d.ts +1 -1
  109. package/dist/state/combined-root-state.d.ts +1 -1
  110. package/dist/state/create-slam-app-store.d.ts +1 -1
  111. package/dist/state/create-slam-app-store.js +1 -1
  112. package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
  113. package/dist/state/gps-event-coordinator.d.ts +1 -1
  114. package/dist/state/index.d.ts +19 -19
  115. package/dist/state/index.js +2 -2
  116. package/dist/state/persistence-middleware.d.ts +1 -1
  117. package/dist/state/qr-detected-slice.d.ts +3 -3
  118. package/dist/state/recording-options.d.ts +2 -2
  119. package/dist/state/recording-options.js +150 -19
  120. package/dist/state/recording-replayer.d.ts +2 -2
  121. package/dist/state/recording-replayer.js +1 -1
  122. package/dist/state/recording-slice.d.ts +1 -1
  123. package/dist/state/replay-engine.d.ts +1 -1
  124. package/dist/state/store-subscribers.d.ts +2 -2
  125. package/dist/state/store-subscribers.js +26 -12
  126. package/dist/state/subscribe-to-selector.d.ts +1 -1
  127. package/dist/state/tracking-quality.d.ts +1 -1
  128. package/dist/state/tracking-quality.js +14 -6
  129. package/dist/state/tracking-slice.d.ts +1 -1
  130. package/dist/{state-E51QT_-j.js → state-BeKvn4B-.js} +1 -1
  131. package/dist/storage/file-system-utils.d.ts +1 -1
  132. package/dist/storage/index.d.ts +8 -8
  133. package/dist/storage/null-storage-backend.d.ts +1 -1
  134. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  135. package/dist/storage/opfs-storage.d.ts +1 -1
  136. package/dist/storage/opfs-storage.js +30 -1
  137. package/dist/storage/storage-backend.d.ts +1 -1
  138. package/dist/storage/zip-coverage-embed.d.ts +1 -1
  139. package/dist/storage/zip-export.d.ts +1 -1
  140. package/dist/storage/zip-reader.d.ts +2 -2
  141. package/dist/storage/zip-reader.js +20 -7
  142. package/dist/{storage-backend-BdVLD0dU.d.ts → storage-backend-sEtmM4yW.d.ts} +1 -1
  143. package/dist/{store-subscribers-CA6AJH_8.d.ts → store-subscribers-DJUErW-o.d.ts} +6 -3
  144. package/dist/{subscribe-to-selector-B6EUmQ3I.d.ts → subscribe-to-selector-dQV8SpsO.d.ts} +1 -1
  145. package/dist/test-utils/browser-mocks.d.ts +1 -1
  146. package/dist/test-utils/browser-mocks.js +2 -0
  147. package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
  148. package/dist/{tracking-slice-BuAZxXZ5.d.ts → tracking-slice-DMkHlbny.d.ts} +1 -1
  149. package/dist/types/ar-types.d.ts +1 -1
  150. package/dist/types/geo-types.d.ts +1 -1
  151. package/dist/types/index.d.ts +2 -2
  152. package/dist/utils/concurrency.d.ts +1 -1
  153. package/dist/utils/failure-tracker.d.ts +1 -1
  154. package/dist/utils/format-file-size.d.ts +1 -1
  155. package/dist/utils/fused-path.d.ts +1 -1
  156. package/dist/utils/index.d.ts +7 -7
  157. package/dist/utils/list-formatter.d.ts +1 -1
  158. package/dist/utils/logger.d.ts +1 -1
  159. package/dist/visualization/accuracy-circles.d.ts +1 -1
  160. package/dist/visualization/accuracy-circles.js +17 -8
  161. package/dist/visualization/alignment-lerper.d.ts +1 -1
  162. package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
  163. package/dist/visualization/ar-world-group-alignment.js +1 -1
  164. package/dist/visualization/camera-follower.d.ts +1 -1
  165. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  166. package/dist/visualization/frame-conversions.d.ts +1 -1
  167. package/dist/visualization/frustum-visibility.d.ts +1 -1
  168. package/dist/visualization/gps-anchor.d.ts +1 -1
  169. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  170. package/dist/visualization/gps-event-markers.d.ts +1 -1
  171. package/dist/visualization/gps-event-markers.js +1 -1
  172. package/dist/visualization/hit-test-reticle.d.ts +1 -1
  173. package/dist/visualization/index.d.ts +20 -19
  174. package/dist/visualization/index.js +4 -3
  175. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  176. package/dist/visualization/leaflet-map-overlay.js +1 -282
  177. package/dist/visualization/lerp-utils.d.ts +2 -2
  178. package/dist/visualization/lerp-utils.js +27 -3
  179. package/dist/visualization/map-data.d.ts +1 -1
  180. package/dist/visualization/map-data.js +1 -32
  181. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  182. package/dist/visualization/map-overlay-draw.js +24 -2
  183. package/dist/visualization/map-overlay.d.ts +1 -1
  184. package/dist/visualization/occluder-mesh-driver.d.ts +130 -0
  185. package/dist/visualization/occluder-mesh-driver.js +219 -0
  186. package/dist/visualization/occlusion-mesh.d.ts +2 -0
  187. package/dist/visualization/occlusion-mesh.js +437 -0
  188. package/dist/visualization/three-dispose.d.ts +1 -1
  189. package/dist/visualization/vis-colors.d.ts +1 -1
  190. package/dist/{webxr-session-DG-eNfny.js → webxr-session-BCP2XK7k.js} +88 -13
  191. package/dist/{webxr-session-Do5L6G3B.d.ts → webxr-session-BWCpGd-2.d.ts} +73 -10
  192. package/dist/{zip-reader-D9iPQwdQ.d.ts → zip-reader-BzENzMH6.d.ts} +36 -10
  193. package/package.json +9 -5
  194. package/dist/index-_Rhgoqkh.d.ts +0 -2
  195. package/dist/lerp-utils-BLmHhkVe.d.ts +0 -20
  196. package/dist/map-data-B4oEehUh.d.ts +0 -49
  197. package/dist/occupancy-grid-DnOc-6PU.d.ts +0 -82
  198. /package/dist/{absolute-orientation-CAEh840t.d.ts → absolute-orientation-BAxc15J6.d.ts} +0 -0
  199. /package/dist/{alignment-lerper-Bil6vbVw.d.ts → alignment-lerper-gD70k7Fq.d.ts} +0 -0
  200. /package/dist/{ar-types-BFX2r1wk.d.ts → ar-types-Cc5yvBwn.d.ts} +0 -0
  201. /package/dist/{bresenham3d-CU1Gv2W4.d.ts → bresenham3d-DGc4nIb-.d.ts} +0 -0
  202. /package/dist/{camera-blit-capture-NKT9H5-e.d.ts → camera-blit-capture-BimSdyih.d.ts} +0 -0
  203. /package/dist/{camera-follower-CqJJ7zRj.d.ts → camera-follower-DfBm2J5i.d.ts} +0 -0
  204. /package/dist/{capability-checker-DUQLg6gq.d.ts → capability-checker-BTTpygvZ.d.ts} +0 -0
  205. /package/dist/{capture-failure-tracker-gsm8q7yi.d.ts → capture-failure-tracker-_BVfhpxv.d.ts} +0 -0
  206. /package/dist/{capture-motion-gate-0Yl2NpQG.d.ts → capture-motion-gate-BGoAMkmf.d.ts} +0 -0
  207. /package/dist/{chromium-camera-access-workaround-D4K2uwwQ.d.ts → chromium-camera-access-workaround-C6yJLXz9.d.ts} +0 -0
  208. /package/dist/{concurrency-By0oOTZt.d.ts → concurrency-DPeGBH0X.d.ts} +0 -0
  209. /package/dist/{css3d-renderer-manager-B3kGNtcn.d.ts → css3d-renderer-manager-CPpVtvgs.d.ts} +0 -0
  210. /package/dist/{failure-tracker-BO7M7jF_.d.ts → failure-tracker-CeKf5HIc.d.ts} +0 -0
  211. /package/dist/{file-system-utils-DOajnMm-.d.ts → file-system-utils-DueXHxo9.d.ts} +0 -0
  212. /package/dist/{format-file-size-Dc98ulzB.d.ts → format-file-size-DxN-EBLc.d.ts} +0 -0
  213. /package/dist/{frame-loop-CpVjQ1dH.d.ts → frame-loop-7GBMBu68.d.ts} +0 -0
  214. /package/dist/{frustum-visibility-CeoCZchO.d.ts → frustum-visibility-CokkgS_i.d.ts} +0 -0
  215. /package/dist/{geo-types-3Ip1NzVR.d.ts → geo-types-DrGVu8nS.d.ts} +0 -0
  216. /package/dist/{gps-BBO3hKfT.d.ts → gps-CDKDQokE.d.ts} +0 -0
  217. /package/dist/{gps-compass-cubes-DSN87L8p.d.ts → gps-compass-cubes-1mooS3BS.d.ts} +0 -0
  218. /package/dist/{gps-error-handler-BbPsfw-_.d.ts → gps-error-handler-C34GQuTu.d.ts} +0 -0
  219. /package/dist/{gps-event-markers-Cz9RMA2k.d.ts → gps-event-markers-Di2nBzx-.d.ts} +0 -0
  220. /package/dist/{h3-proximity-C-j0pw1j.d.ts → h3-proximity-D0GTHQmr.d.ts} +0 -0
  221. /package/dist/{hit-test-reticle-DV-2TpB9.d.ts → hit-test-reticle-CaQbrhbk.d.ts} +0 -0
  222. /package/dist/{image-quality-smCBoFj1.d.ts → image-quality-BMx2ko9-.d.ts} +0 -0
  223. /package/dist/{index-BAPokxMb.d.ts → index-D74JTX4I.d.ts} +0 -0
  224. /package/dist/{list-formatter-KNMS0ay2.d.ts → list-formatter-DLFDnS70.d.ts} +0 -0
  225. /package/dist/{logger-CLnPrHiD.d.ts → logger-CqTd5Kpk.d.ts} +0 -0
  226. /package/dist/{map-overlay-Dh2B97MP.d.ts → map-overlay-BCQgvIgU.d.ts} +0 -0
  227. /package/dist/{permission-checker-CDuI8BwC.d.ts → permission-checker-B-VtjnBA.d.ts} +0 -0
  228. /package/dist/{qr-pose-D2rfu5DA.d.ts → qr-pose-y3vaEd6x.d.ts} +0 -0
  229. /package/dist/{scene-node-names-BiShOQDB.d.ts → scene-node-names-CGb-ylBd.d.ts} +0 -0
  230. /package/dist/{session-disposers-zv9OGXPB.js → session-disposers-BPrMplIC.js} +0 -0
  231. /package/dist/{three-dispose-Bt1k7WKh.d.ts → three-dispose-BMOAmPhb.d.ts} +0 -0
  232. /package/dist/{vis-colors-Obw2pLqT.d.ts → vis-colors-C7HI0u9_.d.ts} +0 -0
  233. /package/dist/{webxr-nue-basis-3nfjDJJp.d.ts → webxr-nue-basis-CaCnYxuq.d.ts} +0 -0
  234. /package/dist/{xr-camera-texture-Cva1q3Qj.d.ts → xr-camera-texture-q0eIDSRg.d.ts} +0 -0
  235. /package/dist/{xr-error-handler-CtvHpjfm.d.ts → xr-error-handler-uVGDu9IX.d.ts} +0 -0
  236. /package/dist/{xr-frame-loop-DIYtRcUa.d.ts → xr-frame-loop-DX3JPpAU.d.ts} +0 -0
  237. /package/dist/{zip-coverage-embed-DCAREVmw.d.ts → zip-coverage-embed-ncVbaZAz.d.ts} +0 -0
  238. /package/dist/{zip-export-ol0S_Ofd.d.ts → zip-export-CtiUnAlJ.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-3nfjDJJp.js";
1
+ import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-CaCnYxuq.js";
2
2
  export { WEBXR_TO_NUE };
@@ -1,4 +1,4 @@
1
- import { i as DepthSample, t as ARPose } from "../ar-types-BFX2r1wk.js";
2
- import { n as CapturedImage } from "../image-capture-CNZDrQXG.js";
3
- import { A as setCamera, B as setTrackingStore, C as isWebXRSupported, D as resetWebXRState, E as nueQuaternionToWebXR, F as setImageQualityAnalyzer, G as stopCameraFrameCapture, H as startCameraFrameCapture, I as setScene, K as stopDepthCapture, L as setTrackingCallbacks, M as setDepthCaptureCallback, N as setFrameCallback, O as setArPose, P as setImageCaptureCallback, R as setTrackingLostCallback, S as initAR, T as nuePositionToWebXR, U as startDepthCapture, V as shouldLogCameraAccessDiagnostic, W as startImageCapture, _ as getDepthSampleCount, a as applyAlignmentMatrix, b as getScene, c as endARSession, d as getArPose, f as getArWorldGroup, g as getCurrentArPose, h as getCameraFrameCount, i as TrackingSubscribableStore, j as setCameraFrameCallback, k as setArWorldGroup, l as extractPoseFromViewer, m as getCameraFrameCaptureSize, n as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, o as buildSessionOptions, p as getCamera, q as stopImageCapture, r as SessionFeatureOptions, s as createSceneHierarchy, t as CameraFrameCaptureConfig, u as extractResetTransformData, v as getImageCaptureFrameCount, w as isXRCameraLike, x as getXrCameraFromPose, y as getLiveCss3dManager, z as setTrackingRecoveredCallback } from "../webxr-session-Do5L6G3B.js";
4
- export { ARPose, CameraFrameCaptureConfig, CapturedImage, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, DepthSample, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
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";
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 setFrameCallback, B as startDepthCapture, C as nueQuaternionToWebXR, D as setCamera, E as setArWorldGroup, F as setTrackingLostCallback, H as stopCameraFrameCapture, I as setTrackingRecoveredCallback, L as setTrackingStore, M as setImageQualityAnalyzer, N as setScene, O as setCameraFrameCallback, P as setTrackingCallbacks, R as shouldLogCameraAccessDiagnostic, S as nuePositionToWebXR, T as setArPose, U as stopDepthCapture, V as startImageCapture, W as stopImageCapture, _ as getScene, a as endARSession, b as isWebXRSupported, c as getArPose, d as getCameraFrameCaptureSize, f as getCameraFrameCount, g as getLiveCss3dManager, h as getImageCaptureFrameCount, i as createSceneHierarchy, j as setImageCaptureCallback, k as setDepthCaptureCallback, l as getArWorldGroup, m as getDepthSampleCount, n as applyAlignmentMatrix, o as extractPoseFromViewer, p as getCurrentArPose, r as buildSessionOptions, s as extractResetTransformData, t as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, u as getCamera, v as getXrCameraFromPose, w as resetWebXRState, x as isXRCameraLike, y as initAR, z as startCameraFrameCapture } from "../webxr-session-DG-eNfny.js";
2
- export { DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
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";
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-Cva1q3Qj.js";
1
+ import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-q0eIDSRg.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-CtvHpjfm.js";
1
+ import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-uVGDu9IX.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-DIYtRcUa.js";
1
+ import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-DX3JPpAU.js";
2
2
  export { XrFrameContext, XrFrameUpdate, clearXrFrameUpdates, registerXrFrameUpdate, runXrFrameUpdates };
@@ -24,6 +24,13 @@ import { createLogger } from "../utils/logger.js";
24
24
  const log = createLogger("XrFrameLoop");
25
25
  const updates = /* @__PURE__ */ new Set();
26
26
  /**
27
+ * Cached iteration snapshot of {@link updates}, invalidated on every registry
28
+ * mutation. The snapshot SEMANTICS (a register/unregister during a tick defers
29
+ * to the next frame) are unchanged — caching only avoids re-allocating an
30
+ * identical array at 60–90 Hz between (rare) registry changes (PR #67 review).
31
+ */
32
+ let snapshot = null;
33
+ /**
27
34
  * Register a per-frame XR-access callback. Returns an unregister function.
28
35
  *
29
36
  * Registration is idempotent — registering the same `fn` twice is a no-op
@@ -31,8 +38,10 @@ const updates = /* @__PURE__ */ new Set();
31
38
  */
32
39
  function registerXrFrameUpdate(fn) {
33
40
  updates.add(fn);
41
+ snapshot = null;
34
42
  return () => {
35
43
  updates.delete(fn);
44
+ snapshot = null;
36
45
  };
37
46
  }
38
47
  /**
@@ -51,8 +60,8 @@ function registerXrFrameUpdate(fn) {
51
60
  * loop continues — mirroring `runFrameUpdates`.
52
61
  */
53
62
  function runXrFrameUpdates(ctx) {
54
- const snapshot = Array.from(updates);
55
- for (const fn of snapshot) try {
63
+ const fns = snapshot ?? (snapshot = Array.from(updates));
64
+ for (const fn of fns) try {
56
65
  fn(ctx);
57
66
  } catch (error) {
58
67
  log.error("A registered XrFrameUpdate threw; continuing the loop", error);
@@ -64,6 +73,7 @@ function runXrFrameUpdates(ctx) {
64
73
  */
65
74
  function clearXrFrameUpdates() {
66
75
  updates.clear();
76
+ snapshot = null;
67
77
  }
68
78
  //#endregion
69
79
  export { clearXrFrameUpdates, registerXrFrameUpdate, runXrFrameUpdates };
@@ -11,11 +11,12 @@ import "./ar/webxr-nue-basis.js";
11
11
  import "./ar/qr-debug-view.js";
12
12
  import { n as createDetectionScheduler } from "./qr-detection-controller-B-tLVd-S.js";
13
13
  import "./qr-pose-aggregation-DBiaLW0O.js";
14
- import "./webxr-session-DG-eNfny.js";
14
+ import "./webxr-session-BCP2XK7k.js";
15
15
  import "./ar/occupancy-grid.js";
16
+ import "./ar/occupancy-mesher.js";
16
17
  import "./ar/frame-loop.js";
17
18
  import "./ar/xr-frame-loop.js";
18
- import "./image-capture-B2-b6tKK.js";
19
+ import "./image-capture-DVcuqMtX.js";
19
20
  import "./ar/xr-camera-texture.js";
20
21
  import "./ar/enable-gps-ar.js";
21
22
  import "./ar/replay-scene.js";
@@ -1,4 +1,4 @@
1
- import { t as SubscribableStore } from "./subscribe-to-selector-B6EUmQ3I.js";
1
+ import { t as SubscribableStore } from "./subscribe-to-selector-dQV8SpsO.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/ar-world-group-alignment.d.ts
@@ -15,15 +15,27 @@ const ANGULAR_GLITCH_CEILING_RAD_S = 50;
15
15
  */
16
16
  const LINEAR_GLITCH_CEILING_M_S = 20;
17
17
  /**
18
- * Default motion-filter configuration. Enabled by default (plan §1). Thresholds
19
- * are PLACEHOLDERS pending on-device field tuning (plan §7) — record measured
20
- * values in implementation-progress.md once known. `maxWaitMs` of 4000 ms is
21
- * the default 2000 ms image interval.
18
+ * Default motion-filter configuration. Enabled by default (plan §1).
19
+ *
20
+ * `maxLinearVelocity` was raised `0.5 2.5` m/s on 2026-07-02 after a
21
+ * 5-recording field analysis: at 0.5 m/s (~⅓ of a ~1.4 m/s walking pace) the
22
+ * gate deferred ~90 % of captures to the never-calm `maxWaitMs` fallback,
23
+ * collapsing the walking capture rate from the configured 0.5 Hz to ~0.17 Hz.
24
+ * Measured 1 Hz-averaged walking speed was a tight band (median 1.38, max
25
+ * 1.73 m/s); allowing for higher instantaneous per-frame stride peaks, 2.5 m/s
26
+ * clears steady and brisk walking while still deferring genuine lunges/jogging
27
+ * — demoting the (weak-at-scanning-distance) linear signal to a gross-motion
28
+ * safety net and letting the well-behaved angular gate be the primary blur
29
+ * selector. See
30
+ * `GpsPlusSlamJs_Docs/docs/2026-07-02-image-capture-rate-motion-gate-finding.md`.
31
+ *
32
+ * `maxAngularVelocity` remains a PLACEHOLDER pending on-device field tuning
33
+ * (plan §7). `maxWaitMs` of 4000 ms is 2× the default 2000 ms image interval.
22
34
  */
23
35
  const DEFAULT_MOTION_FILTER = {
24
36
  enabled: true,
25
37
  maxAngularVelocity: .6,
26
- maxLinearVelocity: .5,
38
+ maxLinearVelocity: 2.5,
27
39
  maxWaitMs: 4e3
28
40
  };
29
41
  /**
@@ -0,0 +1,51 @@
1
+ //#region ../src/ar/cell-key.ts
2
+ /** Full-field envelope: direct cell keys are collision-free for `|c| ≤` this. */
3
+ const CELL_KEY_LIMIT = 65535;
4
+ /**
5
+ * Mesher-tier envelope: leaves headroom for the derived half-lattice
6
+ * (`2·coord ± 1`) and neighbour (`±1`) keys the meshers build from a cell.
7
+ */
8
+ const HALF_LATTICE_CELL_KEY_LIMIT = 32767;
9
+ const KEY_OFFSET = 65536;
10
+ const KEY_FIELD = 131072;
11
+ const KEY_FIELD_SQ = KEY_FIELD * KEY_FIELD;
12
+ /**
13
+ * Pack three integer coordinates into the numeric key. Collision-free only
14
+ * within the caller's envelope (see the module header); scalar form so hot
15
+ * loops need no tuple.
16
+ */
17
+ function packCellKey(x, y, z) {
18
+ return (x + KEY_OFFSET) * KEY_FIELD_SQ + (y + KEY_OFFSET) * KEY_FIELD + (z + KEY_OFFSET);
19
+ }
20
+ /** Tuple convenience over {@link packCellKey}. */
21
+ function cellKey(cell) {
22
+ return packCellKey(cell[0], cell[1], cell[2]);
23
+ }
24
+ /** One axis of {@link unpackCellKey} without allocating the tuple (hot paths). */
25
+ function unpackCellCoord(key, axis) {
26
+ if (axis === 0) return Math.floor(key / KEY_FIELD_SQ) - KEY_OFFSET;
27
+ if (axis === 1) return Math.floor(key / KEY_FIELD) % KEY_FIELD - KEY_OFFSET;
28
+ return key % KEY_FIELD - KEY_OFFSET;
29
+ }
30
+ /**
31
+ * Exact inverse of {@link cellKey} over the ±{@link CELL_KEY_LIMIT} envelope
32
+ * (property-tested). Consumers that no longer store coordinate tuples recover
33
+ * them from the key through this function.
34
+ */
35
+ function unpackCellKey(key) {
36
+ return [
37
+ unpackCellCoord(key, 0),
38
+ unpackCellCoord(key, 1),
39
+ unpackCellCoord(key, 2)
40
+ ];
41
+ }
42
+ /**
43
+ * True iff every coordinate is within ±`limit` — the aliasing guard callers
44
+ * must apply before keying untrusted coordinates. Defaults to the full-field
45
+ * {@link CELL_KEY_LIMIT}; the meshers pass {@link HALF_LATTICE_CELL_KEY_LIMIT}.
46
+ */
47
+ function cellCoordsInKeyRange(cell, limit = CELL_KEY_LIMIT) {
48
+ return Math.abs(cell[0]) <= limit && Math.abs(cell[1]) <= limit && Math.abs(cell[2]) <= limit;
49
+ }
50
+ //#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 };
@@ -1,2 +1,2 @@
1
- import { _ as odometryTrackingRestarted, a as LibraryRootState, c as RootState, d as bearingDeltaDeg, f as calcGpsCoords, g as magneticHeadingFromEnuQuat, h as isIdentityMatrix4, i as LatLongAlt, l as Vector3, m as createGpsSlamStore, n as GpsPoint, o as Matrix4, p as calcRelativeCoordsInMeters, r as LatLong, s as Quaternion, t as ArImageCapture, u as arNorthBearingDeg, v as validateLicenseKey, y as webxrToNUE } from "../index-_Rhgoqkh.js";
2
- export { ArImageCapture, GpsPoint, LatLong, LatLongAlt, LibraryRootState, Matrix4, Quaternion, RootState, Vector3, arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
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";
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,2 +1,2 @@
1
- import { arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE } from "gps-plus-slam-js";
2
- export { arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
1
+ import { arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, createLoopClosureHandler, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE } from "gps-plus-slam-js";
2
+ export { arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, createLoopClosureHandler, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
@@ -1,7 +1,7 @@
1
- import { a as TrackingSliceState } from "./tracking-slice-BuAZxXZ5.js";
2
- import { t as RecordingState } from "./recording-slice-DaxHZvNu.js";
3
- import { n as SessionMetadata } from "./opfs-storage-3VZh-qH6.js";
4
- import { n as StorageBackend } from "./storage-backend-BdVLD0dU.js";
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";
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";
@@ -138,11 +138,10 @@ declare function computeConvergence(snapshots: readonly AlignmentSnapshot[], opt
138
138
  * compute the Euclidean distance.
139
139
  *
140
140
  * This is the **single shared kernel** for the AppFramework reporter and
141
- * the Investigation harness (see §11 (a) of the tracking-quality plan).
142
- * `GpsPlusSlamJs_Investigation/src/investigation-helpers.ts` re-exports
143
- * `computeStabilityDelta` as a thin wrapper around this function so the
144
- * §6.1 corpus sweep and the runtime convergence score share one numeric
145
- * definition.
141
+ * the downstream corpus-analysis harness (see §11 (a) of the
142
+ * tracking-quality plan), which re-exports it as `computeStabilityDelta` —
143
+ * a thin wrapper around this function so the §6.1 corpus sweep and the
144
+ * runtime convergence score share one numeric definition.
146
145
  */
147
146
  declare function matrixDelta(prev: readonly number[], curr: readonly number[]): {
148
147
  rotationDeltaDeg: number;
@@ -97,13 +97,20 @@ const BUILTIN_PERSISTED_PREFIXES = [slicePrefixOf(setZeroPos.type), slicePrefixO
97
97
  function createSlamAppStore(options) {
98
98
  const { storageBackend, extraReducers, extraMiddleware, persistedExtraPrefixes, onWriteFailure, enableDevChecks = true, licenseKey = COMMUNITY_LICENSE_KEY, trackingQualityOptions, enableCompassColdStartOverride = true, enableCompassRotationPrior = false, enableCompassWebXRConsistency = false } = options;
99
99
  validateLicenseKey(licenseKey);
100
- const reducer = {
100
+ const builtins = {
101
101
  gpsData: gpsDataReducer,
102
102
  gpsElements: gpsElementsReducer,
103
103
  arElements: arElementsReducer,
104
104
  recording: recordingReducer,
105
105
  tracking: trackingReducer,
106
- trackingQuality: trackingQualityReducer,
106
+ trackingQuality: trackingQualityReducer
107
+ };
108
+ if (extraReducers) {
109
+ const collisions = Object.keys(extraReducers).filter((key) => Object.prototype.hasOwnProperty.call(builtins, key));
110
+ if (collisions.length > 0) throw new Error(`extraReducers must not overwrite framework-reserved slice(s): ${collisions.join(", ")}. Reserved keys: ${Object.keys(builtins).join(", ")}.`);
111
+ }
112
+ const reducer = {
113
+ ...builtins,
107
114
  ...extraReducers ?? {}
108
115
  };
109
116
  const trackingQualityMiddleware = createTrackingQualityListenerMiddleware(trackingQualityOptions);
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-BFX2r1wk.js";
1
+ import { r as DepthPoint } from "./ar-types-Cc5yvBwn.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-BFX2r1wk.js";
1
+ import { a as RgbTuple, i as DepthSample, t as ARPose } from "./ar-types-Cc5yvBwn.js";
2
2
  import { Matrix4 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-rgb-lookup.d.ts
@@ -66,6 +66,27 @@ interface DepthInfo {
66
66
  getDepthInMeters: (x: number, y: number) => number;
67
67
  /** Column-major projection matrix of the capturing XRView, if known. */
68
68
  projectionMatrix?: Matrix4;
69
+ /**
70
+ * Raw depth buffer (`XRCPUDepthInformation.data`) — a **live reference**
71
+ * valid only within the originating XR frame callback (NOT copied, unlike
72
+ * the matrices: the per-frame buffer is too large to clone and the live
73
+ * depth occluder uploads it synchronously). Absent when the source carries
74
+ * no `data` (e.g. the sparse-only path). Plumbed for the live depth occluder
75
+ * (2026-06-14-webxr-depth-occlusion-plan.md §2); the sparse sampler ignores it.
76
+ */
77
+ data?: ArrayBuffer;
78
+ /**
79
+ * `XRCPUDepthInformation.rawValueToMeters` — multiply a raw depth sample by
80
+ * this to get metres. Preserved only when a finite number. Occluder-only.
81
+ */
82
+ rawValueToMeters?: number;
83
+ /**
84
+ * The `.matrix` (column-major 16-tuple) of
85
+ * `XRDepthInformation.normDepthBufferFromNormView` — the screen-UV → depth-UV
86
+ * transform the occluder shader needs. Copied + validated like
87
+ * `projectionMatrix` (the UA may reuse the backing array). Occluder-only.
88
+ */
89
+ normDepthBufferFromNormView?: Matrix4;
69
90
  }
70
91
  /**
71
92
  * Wrap a raw browser XRDepthInformation object into a {@link DepthInfo}.
@@ -76,11 +97,22 @@ interface DepthInfo {
76
97
  * the UA may reuse across frames) is defensively validated and copied into
77
98
  * a plain serializable 16-tuple; invalid input (wrong length, non-finite
78
99
  * entries) yields a DepthInfo without a matrix rather than an error.
100
+ * - The live-occluder metadata (`data`, `rawValueToMeters`,
101
+ * `normDepthBufferFromNormView`) is preserved when present and valid: `data`
102
+ * by live reference (no clone — see {@link DepthInfo.data}), the scale only
103
+ * when finite, and the UV transform's `.matrix` copied like
104
+ * `projectionMatrix`. The sparse grid sampler ignores all three; a source
105
+ * lacking them (e.g. the existing test doubles) wraps exactly as before.
79
106
  */
80
107
  declare function wrapXRDepthInfo(raw: {
81
108
  width: number;
82
109
  height: number;
83
110
  getDepthInMeters: (x: number, y: number) => number;
111
+ data?: ArrayBuffer;
112
+ rawValueToMeters?: number;
113
+ normDepthBufferFromNormView?: {
114
+ matrix?: ArrayLike<number>;
115
+ } | null;
84
116
  }, projectionMatrix: ArrayLike<number> | undefined): DepthInfo;
85
117
  /**
86
118
  * Samples sparse depth points from WebXR depth sensing.
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-BFX2r1wk.js";
1
+ import { r as DepthPoint } from "./ar-types-Cc5yvBwn.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 "./recording-options-BPCpMHLK.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-BBO3hKfT.js";
3
- import { n as PermissionStatus } from "./permission-checker-CDuI8BwC.js";
4
- import { r as SessionFeatureOptions } from "./webxr-session-Do5L6G3B.js";
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";
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-_Rhgoqkh.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-DXPVzOpP.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-3Ip1NzVR.js";
1
+ import { t as GpsCoord } from "./geo-types-DrGVu8nS.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-C-j0pw1j.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-D0GTHQmr.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-C-j0pw1j.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-D0GTHQmr.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-_Rhgoqkh.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-DXPVzOpP.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-BFX2r1wk.js";
1
+ import { t as ARPose } from "./ar-types-Cc5yvBwn.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-BFX2r1wk.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-BBO3hKfT.js";
3
- import { t as AbsoluteOrientationReading } from "./absolute-orientation-CAEh840t.js";
4
- import { i as SlamAppStore } from "./create-slam-app-store-n_VF63D5.js";
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
5
  import { Quaternion, RawAbsoluteOrientation, RawGpsPoint, RecordGpsEventPayload, Vector3, eulerToQuaternion } from "gps-plus-slam-js";
6
6
  import { ReducersMapObject } from "@reduxjs/toolkit";
7
7
 
@@ -1,6 +1,6 @@
1
- import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-BFX2r1wk.js";
2
- import { t as MotionFilterConfig } from "./capture-motion-gate-0Yl2NpQG.js";
3
- import { a as QualityFilterConfig } from "./image-quality-smCBoFj1.js";
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";
4
4
 
5
5
  //#region ../src/ar/image-capture.d.ts
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "./utils/logger.js";
2
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-4EscNZCw.js";
3
+ import { n as MotionWindow, r as decideCapture, t as DEFAULT_MOTION_FILTER } from "./capture-motion-gate-_NdTSwKi.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
@@ -1,4 +1,4 @@
1
- import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-n_VF63D5.js";
1
+ import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-D1QSMuKu.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
@@ -0,0 +1,2 @@
1
+ import { ArImageCapture as ArImageCapture$1, GpsPoint as GpsPoint$1, LatLong as LatLong$1, LatLongAlt, LoopClosureHandler, LoopClosureHandlerConfig, Matrix4 as Matrix4$1, Quaternion as Quaternion$1, RootState as LibraryRootState, RootState as RootState$1, Vector3 as Vector3$1, arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords as calcGpsCoords$1, calcRelativeCoordsInMeters, createGpsSlamStore, createLoopClosureHandler, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey as validateLicenseKey$1, webxrToNUE } from "gps-plus-slam-js";
2
+ export { webxrToNUE as S, createLoopClosureHandler as _, LibraryRootState as a, odometryTrackingRestarted as b, Matrix4$1 as c, Vector3$1 as d, arNorthBearingDeg as f, createGpsSlamStore as g, calcRelativeCoordsInMeters as h, LatLongAlt as i, Quaternion$1 as l, calcGpsCoords$1 as m, GpsPoint$1 as n, LoopClosureHandler as o, bearingDeltaDeg as p, LatLong$1 as r, LoopClosureHandlerConfig as s, ArImageCapture$1 as t, RootState$1 as u, isIdentityMatrix4 as v, validateLicenseKey$1 as x, magneticHeadingFromEnuQuat as y };
@@ -1,6 +1,6 @@
1
- import { t as GridCell } from "./bresenham3d-CU1Gv2W4.js";
2
- import { a as QrPoseSolution, i as Pose, r as Point2, t as CameraIntrinsics } from "./qr-pose-D2rfu5DA.js";
3
- import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend--fFX25mV.js";
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";
4
4
  import { Quaternion, RecordGpsEventPayload, Vector3 } from "gps-plus-slam-js";
5
5
 
6
6
  //#region ../src/ar/qr-gps-vote.d.ts