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,5 +1,5 @@
1
- import { t as MotionFilterConfig } from "./capture-motion-gate-0Yl2NpQG.js";
2
- import { a as QualityFilterConfig } from "./image-quality-smCBoFj1.js";
1
+ import { t as MotionFilterConfig } from "./capture-motion-gate-BGoAMkmf.js";
2
+ import { a as QualityFilterConfig } from "./image-quality-BMx2ko9-.js";
3
3
 
4
4
  //#region ../src/state/recording-options.d.ts
5
5
  /**
@@ -15,6 +15,7 @@ interface RecordingOptionsInput {
15
15
  visualization?: Partial<VisualizationOptions>;
16
16
  qr?: Partial<QrCaptureOptions>;
17
17
  compassDebug?: Partial<CompassDebugOptions>;
18
+ loopClosureDebug?: Partial<LoopClosureDebugOptions>;
18
19
  }
19
20
  /**
20
21
  * Toggles for the library's Phase-4 compass alignment features (closed/internal
@@ -24,9 +25,16 @@ interface RecordingOptionsInput {
24
25
  * feature); Stage C + the WebXR-consistency gate stay experimental (default
25
26
  * OFF) until the §6a field-data matrix is in.
26
27
  *
27
- * On-device caveat: the resulting `gpsData` actions persist into the recording,
28
- * so a replay re-enables them. Record §6a field-calibration sets with
29
- * `coldStartOverride` OFF so the captured compass behaviour is unmodified.
28
+ * On-device caveat: the resulting `gpsData` opt-in actions persist into the
29
+ * recording, so the DEFAULT `replayAll` re-enables them. This does NOT modify the
30
+ * raw recorded stream (`rawAbsoluteOrientation`, GPS, odometry) only the
31
+ * *derived* alignment — so an investigation that re-solves from the raw
32
+ * observations under a chosen `AlignmentConfig` (`recomputeAlignment`) is
33
+ * unaffected by the capture-time flag state. Turning the flags off during capture
34
+ * only matters if you want the LIVE app to behave as the GPS-only baseline; it is
35
+ * not required for clean §6a analysis data. See
36
+ * `GpsPlusSlamJs_Docs/docs/2026-06-26-stage0-field-collection-and-enablement.md`
37
+ * (2026-07-01 update).
30
38
  */
31
39
  interface CompassDebugOptions {
32
40
  /** Stage 0 — cold-start compass yaw override (`setColdStartOverrideEnabled`). Default ON. */
@@ -36,6 +44,23 @@ interface CompassDebugOptions {
36
44
  /** GPS-free compass↔WebXR consistency gate (`setCompassWebXRConsistencyEnabled`). */
37
45
  webXRConsistency: boolean;
38
46
  }
47
+ /**
48
+ * Live loop-closure capture toggles (experimental, default OFF).
49
+ *
50
+ * When `detectorEnabled` is on, the recorder feeds every AR frame's raw WebXR
51
+ * pose into the library's `createLoopClosureHandler`, so an AR relocalization
52
+ * jump (>1 m between consecutive frames) dispatches `arLoopClosureDetected`
53
+ * into the session store — and therefore into the recording. This is the
54
+ * missing producer that has kept the whole corpus loop-closure-free (the
55
+ * pair-refresh T5 verdict is blocked on such recordings). It also changes the
56
+ * LIVE alignment (each closure Bézier-deforms the stored trajectory), which is
57
+ * why it stays an operator opt-in. See
58
+ * GpsPlusSlamJs_Docs/docs/2026-07-06-recorder-loop-closure-detector-wiring-plan.md.
59
+ */
60
+ interface LoopClosureDebugOptions {
61
+ /** Wire the live loop-closure handler into the AR frame loop. Default OFF. */
62
+ detectorEnabled: boolean;
63
+ }
39
64
  /**
40
65
  * Diagnostic flags for isolating pre-recording AR startup crashes.
41
66
  * These gates affect XR session negotiation and frame-loop behavior,
@@ -71,11 +96,12 @@ interface ArCrashIsolationOptions {
71
96
  interface DepthCaptureOptions {
72
97
  /** Whether to capture depth samples. Default: true */
73
98
  enabled: boolean;
74
- /** Interval between samples in milliseconds. Default: 1000 */
99
+ /** Interval between samples in milliseconds. Default: 500 (FAST-reconstruction tuning, 2026-07-01). */
75
100
  intervalMs: number;
76
101
  /**
77
- * Grid size (N×N points per sample). Default: 16 — dense enough to
78
- * populate the AR-space occupancy grid (2026-06-11 port plan §1).
102
+ * Grid size (N×N points per sample). Default: 32 (FAST-reconstruction
103
+ * tuning, 2026-07-01) — dense enough to populate the AR-space occupancy
104
+ * grid (2026-06-11 port plan §1).
79
105
  */
80
106
  gridSize: number;
81
107
  /**
@@ -125,6 +151,40 @@ interface ImageCaptureOptions {
125
151
  * so they also apply when replaying an existing recording, letting the same
126
152
  * session be re-quantized at a different resolution.
127
153
  */
154
+ /**
155
+ * Mesher strategy for the **persistent occluder** mesh, exposed as a recorder
156
+ * setting (2026-06-30 occluder-tuning, F2/F2b) so the two surface-hugging
157
+ * approaches can be A/B-tested on-device against the blocky baseline:
158
+ * - `'greedy'` — blocky greedy cubes (the existing default; fewest triangles).
159
+ * - `'corner-fit'` — cubes with corners pulled to the measured centroids
160
+ * (surface-hugging **and** watertight).
161
+ * - `'smooth'` — surface nets: smoothest, hugs the measured surface, but an open
162
+ * sheet over thin features.
163
+ *
164
+ * Maps directly onto `meshOccupiedCells` / `OcclusionMesh` `MeshMode` (a subset).
165
+ * `'per-face'` is intentionally not offered (same shape as `'greedy'`, more
166
+ * triangles — no on-device value).
167
+ */
168
+ declare const OCCLUDER_MESH_MODES: readonly ["greedy", "corner-fit", "smooth"];
169
+ type OccluderMeshMode = (typeof OCCLUDER_MESH_MODES)[number];
170
+ /**
171
+ * Debug-visualization style for the **persistent occluder** mesh (2026-07-02
172
+ * debug-viz-styles plan) — which visible debug skin(s) `OcclusionMesh` renders
173
+ * on top of the invisible depth-only occluder:
174
+ * - `'off'` — no debug rendering (the shipped default; occlusion is invisible).
175
+ * - `'matcap'` — the original shiny semi-transparent cyan skin.
176
+ * - `'depth-shaded'` — matcap + camera-distance fade + white fresnel rim, so
177
+ * overlapping near/far surfaces read as separate shells.
178
+ * - `'wireframe'` — the raw triangulation as GL lines (mesh-structure
179
+ * inspection: triangle density, mesher seams, degenerate spots).
180
+ * - `'depth-shaded-wireframe'` — both of the above composed.
181
+ *
182
+ * Values array module-private (validation only; the settings `<select>`
183
+ * options are hardcoded in the recorder's `index.html`), type exported —
184
+ * mirroring `OCCLUDER_MESH_MODES` / {@link OccluderMeshMode}.
185
+ */
186
+ declare const OCCLUDER_DEBUG_STYLES: readonly ["off", "matcap", "depth-shaded", "wireframe", "depth-shaded-wireframe"];
187
+ type OccluderDebugStyle = (typeof OCCLUDER_DEBUG_STYLES)[number];
128
188
  interface OccupancyOptions {
129
189
  /**
130
190
  * Voxel edge length in metres. Drives the occupancy-grid quantization, the
@@ -149,6 +209,84 @@ interface OccupancyOptions {
149
209
  * `GpsPlusSlamJs_Docs/docs/2026-06-22-occupancy-grid-behind-surface-noise-plan.md`.
150
210
  */
151
211
  minConfidence: number;
212
+ /**
213
+ * Render a **persistent depth-only occlusion mesh** of the occupancy grid:
214
+ * the grid's occupied cells are meshed (`meshOccupiedCells`) and drawn
215
+ * invisible-but-depth-writing under `arWorldGroup`, so real geometry the
216
+ * camera saw earlier hides virtual objects placed behind it — including
217
+ * out-of-view surfaces a live depth occluder cannot remember. Default
218
+ * **true** (since 2026-07-01): the Web-Worker mesh offload removed the
219
+ * per-refresh render stall that was the reason to keep it opt-in, so the
220
+ * remembered occluder ships on by the default `'smooth'` mesher. Read once when
221
+ * the mesh is wired (Enter-AR / replay load), like the other occupancy knobs.
222
+ * See `GpsPlusSlamJs_Docs/docs/2026-06-13-occupancy-mesh-options-plan.md` and
223
+ * `GpsPlusSlamJs_Docs/docs/2026-07-01-occluder-worker-and-chunked-remesh-plan.md`.
224
+ *
225
+ * **Migration:** this field replaces the former `occlusionMeshEnabled`
226
+ * boolean — `validateOccupancyOptions` maps a persisted
227
+ * `occlusionMeshEnabled === true` onto `persistentOcclusion` (see that
228
+ * function and `2026-06-29-occupancy-mesh-followups.md`).
229
+ */
230
+ persistentOcclusion: boolean;
231
+ /**
232
+ * Enable the **live CPU-depth occluder** — a per-frame depth occluder that
233
+ * hides virtual content behind the real surface the camera sees *right now*,
234
+ * sharp and registration-free (no out-of-view memory). It composes with
235
+ * {@link persistentOcclusion}: both can be on (the live occluder wins where
236
+ * this frame has depth, the persistent mesh fills out-of-view / depth holes —
237
+ * `2026-06-14-webxr-depth-occlusion-plan.md` §5). Requires the
238
+ * `requestDepthOcclusion` session feature so `cpu-optimized` depth is
239
+ * negotiated even without depth recording. **Live-AR only** — replay has no
240
+ * live depth stream, so this flag is a no-op there (persistent still applies).
241
+ * Default **false**: the live occluder's on-device occlusion quality is still
242
+ * device-gated/unverified. Read once when the AR session is wired (Enter-AR).
243
+ */
244
+ liveOcclusion: boolean;
245
+ /**
246
+ * Which **visible debug skin(s)** render the persistent occluder mesh (see
247
+ * {@link OccluderDebugStyle}) so its shape/structure can be judged on-device.
248
+ * All styles are additive overlays — the invisible depth-only mesh keeps
249
+ * writing depth unchanged, so occlusion is identical in every style. Only has
250
+ * a visible effect when {@link persistentOcclusion} is on (it is that
251
+ * occluder's mesh); any other value is a harmless no-op. Default **`'off'`**.
252
+ * Read once when the mesh is wired (Enter-AR / replay load), like the other
253
+ * occupancy knobs. See
254
+ * `GpsPlusSlamJs_Docs/docs/2026-07-02-occluder-debug-viz-styles-plan.md` and
255
+ * `GpsPlusSlamJs_Docs/docs/2026-06-29-occlusion-debug-viz-and-live-occluder-user-feedback.md`.
256
+ *
257
+ * **Migration:** this field replaces the former `occluderDebugViz` boolean —
258
+ * `validateOccupancyOptions` maps a persisted `occluderDebugViz: true` onto
259
+ * `'matcap'` (the skin the boolean used to enable) when this field is absent,
260
+ * mirroring the `occlusionMeshEnabled` → {@link persistentOcclusion}
261
+ * migration.
262
+ */
263
+ occluderDebugStyle: OccluderDebugStyle;
264
+ /**
265
+ * Which mesher builds the **persistent occluder** mesh (see
266
+ * {@link OccluderMeshMode}). Default `'smooth'` (since 2026-07-01) — Naive
267
+ * Surface Nets, the smoothest and lightest mesh. Switch to `'greedy'` (blocky
268
+ * cubes, watertight) or `'corner-fit'` (surface-hugging + watertight) if the
269
+ * smooth mesh's open concave seams leak occlusion in practice (combine with
270
+ * {@link occluderDebugStyle} to actually *see* the mesh shape). Only has an
271
+ * effect when {@link persistentOcclusion} is on. Read once when the mesh is
272
+ * wired (Enter-AR / replay load), like the other occupancy knobs. See
273
+ * `GpsPlusSlamJs_Docs/docs/2026-06-30-occluder-tuning-followups.md`.
274
+ */
275
+ occluderMeshMode: OccluderMeshMode;
276
+ /**
277
+ * Camera-local window for the **persistent occluder** snapshot (Step 2 of
278
+ * the 2026-07-03 long-session fps plan): each re-mesh reads only the
279
+ * occupied cells within this many meters of the camera
280
+ * (`OccupancyGrid.getOccupiedCellsWithinFlat`), so snapshot/pack/mesh cost
281
+ * is bounded by the neighbourhood instead of the whole session. Default
282
+ * **25 m** — a 15 cm voxel at 25 m subtends ~0.3°, so occlusion errors
283
+ * beyond that are imperceptible. `0` = unbounded (the pre-Step-2
284
+ * behaviour, the safe fallback). The grid forgets nothing: walking back
285
+ * re-meshes far geometry from memory — exactly the persistent-grid intent.
286
+ * Only has an effect when {@link persistentOcclusion} is on. Read once at
287
+ * Enter-AR / replay load like the other occupancy knobs.
288
+ */
289
+ occluderRadiusM: number;
152
290
  }
153
291
  /**
154
292
  * Configuration for how captured frame tiles are DISPLAYED in AR (D7-resolution,
@@ -170,6 +308,17 @@ interface FrameTileDisplayOptions {
170
308
  * `images.resolutionDivisor`.
171
309
  */
172
310
  divisor: number;
311
+ /**
312
+ * FIFO cap on the **live** frame-tile planes (Step 4 of the 2026-07-03
313
+ * long-session fps plan): adding a tile over the cap removes + disposes the
314
+ * oldest, bounding draw calls / GPU texture memory / scene-graph size for
315
+ * arbitrarily long sessions while keeping the recent-path breadcrumb.
316
+ * `0` = unlimited. Default 100 (a ~5-min walk captures 112–145 frames, so
317
+ * the cap binds on real walks). **Live only** (2026-07-03 interview): in
318
+ * replay the tiles audit coverage of the full recorded path, so the replay
319
+ * wiring stays uncapped regardless of this value.
320
+ */
321
+ maxTiles: number;
173
322
  }
174
323
  /**
175
324
  * Visibility toggles for the live AR debug overlays (Finding B / DB-2 of
@@ -177,12 +326,15 @@ interface FrameTileDisplayOptions {
177
326
  *
178
327
  * These gate **only what is drawn live during recording** — they never change
179
328
  * what is captured (frame blobs, depth samples, occupancy data, GPS events all
180
- * continue regardless) and they never affect replay (where reviewing the
181
- * captured overlays is the whole point). Read once at Enter-AR: toggling
182
- * mid-session applies on the next Enter-AR, not retroactively.
329
+ * continue regardless) and, with one exception, they never affect replay
330
+ * (where reviewing the captured overlays is the whole point). Read once at
331
+ * Enter-AR: toggling mid-session applies on the next Enter-AR, not
332
+ * retroactively.
183
333
  *
184
- * All four default ON, so adding this group is purely additive — every overlay
185
- * still renders until the operator opts out.
334
+ * The debug overlays default ON, so the group is purely additive — every
335
+ * overlay still renders until the operator opts out. The exception on both
336
+ * counts is {@link VisualizationOptions.statsOverlay}: a perf-measurement tool
337
+ * that defaults OFF and, when on, also runs in replay (see its docs).
186
338
  */
187
339
  interface VisualizationOptions {
188
340
  /** Live frame-tile planes (`FrameTileVisualizer`). Default: true */
@@ -193,6 +345,24 @@ interface VisualizationOptions {
193
345
  gpsAlignmentMarkers: boolean;
194
346
  /** N/E/S/W compass orientation cubes (`createGpsCompassCubes`). Default: true */
195
347
  compassCubes: boolean;
348
+ /**
349
+ * Rotate the live in-AR minimap so the user's view direction always points
350
+ * up/forward (heading-up) instead of fixed north-up. Unlike the other flags
351
+ * in this group this is a map-orientation preference, not a show/hide — but it
352
+ * shares their live-only semantics (read at Enter-AR, never affects replay).
353
+ * Default: true. See the 2026-06-29 heading-up plan.
354
+ */
355
+ headingUpMap: boolean;
356
+ /**
357
+ * Performance stats overlay (Stats.js: FPS / frame ms / MB panels) for
358
+ * long-session fps attribution (2026-07-03 long-session fps plan §0).
359
+ * Two exceptions to this group's rules: it is a debug tool, so it defaults
360
+ * **OFF** (must not cost the default path), and unlike the live-only
361
+ * overlays it also runs in **replay** (frame time matters there too).
362
+ * In immersive AR it composites via the dom-overlay feature, so it is
363
+ * invisible when `arCrashIsolation.enableDomOverlay` is off.
364
+ */
365
+ statsOverlay: boolean;
196
366
  }
197
367
  /**
198
368
  * Configuration for live QR detection + RAW recording (decision §0 of the
@@ -242,6 +412,8 @@ interface RecordingOptions {
242
412
  qr: QrCaptureOptions;
243
413
  /** Compass alignment debug toggles (Stage 0 / Stage C / consistency gate) */
244
414
  compassDebug: CompassDebugOptions;
415
+ /** Live loop-closure capture toggles (experimental, default OFF) */
416
+ loopClosureDebug: LoopClosureDebugOptions;
245
417
  }
246
418
  /**
247
419
  * localStorage key for persisted options.
@@ -264,7 +436,7 @@ declare const DEPTH_CONSTRAINTS: {
264
436
  };
265
437
  readonly gridSize: {
266
438
  readonly min: 2;
267
- readonly max: 32;
439
+ readonly max: 64;
268
440
  readonly step: 1;
269
441
  };
270
442
  };
@@ -370,6 +542,11 @@ declare const OCCUPANCY_CONSTRAINTS: {
370
542
  readonly max: 10;
371
543
  readonly step: 1;
372
544
  };
545
+ readonly occluderRadiusM: {
546
+ readonly min: 0;
547
+ readonly max: 200;
548
+ readonly step: 5;
549
+ };
373
550
  };
374
551
  /**
375
552
  * Validation constraints for the frame-tile display-resolution divisor.
@@ -385,6 +562,11 @@ declare const FRAME_TILE_DISPLAY_CONSTRAINTS: {
385
562
  readonly max: 8;
386
563
  readonly step: 1;
387
564
  };
565
+ readonly maxTiles: {
566
+ readonly min: 0;
567
+ readonly max: 2000;
568
+ readonly step: 10;
569
+ };
388
570
  };
389
571
  /**
390
572
  * Validation constraints for QR-capture options.
@@ -418,6 +600,12 @@ declare function validateArCrashIsolationOptions(options: Partial<ArCrashIsolati
418
600
  * so a bad persisted value can never silently turn an alignment override ON.
419
601
  */
420
602
  declare function validateCompassDebugOptions(options: Partial<CompassDebugOptions>): CompassDebugOptions;
603
+ /**
604
+ * Validate and normalize the loop-closure capture toggles. Boolean-or-default
605
+ * per field; a missing/corrupted/pre-feature value falls back to the OFF
606
+ * default so a bad persisted value can never silently wire the detector in.
607
+ */
608
+ declare function validateLoopClosureDebugOptions(options: Partial<LoopClosureDebugOptions>): LoopClosureDebugOptions;
421
609
  /**
422
610
  * Validate and normalize the live debug-overlay visibility toggles.
423
611
  * Each field is boolean-or-default (same policy as the AR-crash-isolation
@@ -463,15 +651,6 @@ declare function validateQualityFilterOptions(options: Partial<QualityFilterConf
463
651
  * Invalid values are clamped to valid ranges.
464
652
  */
465
653
  declare function validateImageOptions(options: Partial<ImageCaptureOptions>): ImageCaptureOptions;
466
- /**
467
- * Validate and normalize occupancy options.
468
- * Invalid values are clamped to valid ranges.
469
- *
470
- * Note the explicit `Number.isFinite` guard: `OccupancyGrid` throws a
471
- * `RangeError` on a non-finite cell size, and `clamp(NaN, …)` would otherwise
472
- * pass `NaN` straight through (it is `typeof 'number'`). Falling back to the
473
- * default keeps a corrupted stored value from crashing grid construction.
474
- */
475
654
  declare function validateOccupancyOptions(options: Partial<OccupancyOptions>): OccupancyOptions;
476
655
  /**
477
656
  * Validate and normalize frame-tile display options. `divisor` is clamped to
@@ -511,4 +690,4 @@ declare function resetRecordingOptions(storageKey?: string): RecordingOptions;
511
690
  */
512
691
  declare function cloneRecordingOptions(options: RecordingOptions): RecordingOptions;
513
692
  //#endregion
514
- export { validateOccupancyOptions as A, saveRecordingOptions as C, validateFrameTileDisplayOptions as D, validateDepthOptions as E, validateQualityFilterOptions as M, validateRecordingOptions as N, validateImageOptions as O, validateVisualizationOptions as P, resetRecordingOptions as S, validateCompassDebugOptions as T, RecordingOptionsInput as _, DepthCaptureOptions as a, cloneRecordingOptions as b, IMAGE_CONSTRAINTS as c, OCCUPANCY_CONSTRAINTS as d, OccupancyOptions as f, RecordingOptions as g, QrCaptureOptions as h, DEPTH_CONSTRAINTS as i, validateQrOptions as j, validateMotionFilterOptions as k, ImageCaptureOptions as l, QUALITY_FILTER_CONSTRAINTS as m, CompassDebugOptions as n, FRAME_TILE_DISPLAY_CONSTRAINTS as o, QR_CONSTRAINTS as p, DEFAULT_RECORDING_OPTIONS as r, FrameTileDisplayOptions as s, ArCrashIsolationOptions as t, MOTION_FILTER_CONSTRAINTS as u, STORAGE_KEY as v, validateArCrashIsolationOptions as w, loadRecordingOptions as x, VisualizationOptions as y };
693
+ export { validateFrameTileDisplayOptions as A, cloneRecordingOptions as C, validateArCrashIsolationOptions as D, saveRecordingOptions as E, validateQrOptions as F, validateQualityFilterOptions as I, validateRecordingOptions as L, validateLoopClosureDebugOptions as M, validateMotionFilterOptions as N, validateCompassDebugOptions as O, validateOccupancyOptions as P, validateVisualizationOptions as R, VisualizationOptions as S, resetRecordingOptions as T, QUALITY_FILTER_CONSTRAINTS as _, DepthCaptureOptions as a, RecordingOptionsInput as b, IMAGE_CONSTRAINTS as c, MOTION_FILTER_CONSTRAINTS as d, OCCUPANCY_CONSTRAINTS as f, QR_CONSTRAINTS as g, OccupancyOptions as h, DEPTH_CONSTRAINTS as i, validateImageOptions as j, validateDepthOptions as k, ImageCaptureOptions as l, OccluderMeshMode as m, CompassDebugOptions as n, FRAME_TILE_DISPLAY_CONSTRAINTS as o, OccluderDebugStyle as p, DEFAULT_RECORDING_OPTIONS as r, FrameTileDisplayOptions as s, ArCrashIsolationOptions as t, LoopClosureDebugOptions as u, QrCaptureOptions as v, loadRecordingOptions as w, STORAGE_KEY as x, RecordingOptions as y };
@@ -1,5 +1,5 @@
1
- import { N as CombinedRootState } from "./create-slam-app-store-n_VF63D5.js";
2
- import { i as RecordedAction } from "./zip-reader-D9iPQwdQ.js";
1
+ import { N as CombinedRootState } from "./create-slam-app-store-D1QSMuKu.js";
2
+ import { i as RecordedAction } from "./zip-reader-BzENzMH6.js";
3
3
 
4
4
  //#region ../src/state/recording-replayer.d.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { i as DepthSample } from "./ar-types-BFX2r1wk.js";
2
- import { g as RecordingOptions } from "./recording-options-BPCpMHLK.js";
1
+ import { i as DepthSample } from "./ar-types-Cc5yvBwn.js";
2
+ import { y as RecordingOptions } from "./recording-options-DYKWVI93.js";
3
3
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
4
4
 
5
5
  //#region ../src/state/recording-slice.d.ts
@@ -1,4 +1,4 @@
1
- import { i as SlamAppStore } from "./create-slam-app-store-n_VF63D5.js";
1
+ import { i as SlamAppStore } from "./create-slam-app-store-D1QSMuKu.js";
2
2
  import { ReducersMapObject } from "@reduxjs/toolkit";
3
3
 
4
4
  //#region ../src/state/replay-engine.d.ts
@@ -1,6 +1,6 @@
1
- import { t as Css3dRendererManager } from "./css3d-renderer-manager-B3kGNtcn.js";
2
- import { t as CameraFollower } from "./camera-follower-CqJJ7zRj.js";
3
- import { t as AlignmentLerper } from "./alignment-lerper-Bil6vbVw.js";
1
+ import { t as Css3dRendererManager } from "./css3d-renderer-manager-CPpVtvgs.js";
2
+ import { t as CameraFollower } from "./camera-follower-DfBm2J5i.js";
3
+ import { t as AlignmentLerper } from "./alignment-lerper-gD70k7Fq.js";
4
4
  import * as THREE from "three";
5
5
  import { OrbitControls } from "three/addons/controls/OrbitControls.js";
6
6
 
@@ -1,2 +1,2 @@
1
- import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-CAEh840t.js";
1
+ import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-BAxc15J6.js";
2
2
  export { AbsoluteOrientationReading, AbsoluteOrientationStatus, getLatestAbsoluteOrientation, isAbsoluteOrientationAvailable, startAbsoluteOrientationWatch, stopAbsoluteOrientationWatch };
@@ -45,11 +45,18 @@ function currentScreenAngleDeg() {
45
45
  async function sensorPermissionsUsable() {
46
46
  const permissions = navigator.permissions;
47
47
  if (!permissions || typeof permissions.query !== "function") return true;
48
+ const queryState = async (name) => {
49
+ try {
50
+ return (await permissions.query({ name })).state;
51
+ } catch {
52
+ return "granted";
53
+ }
54
+ };
48
55
  return (await Promise.all([
49
56
  "accelerometer",
50
57
  "gyroscope",
51
58
  "magnetometer"
52
- ].map((name) => permissions.query({ name }).then((p) => p.state).catch(() => "granted")))).every((s) => s === "granted" || s === "prompt");
59
+ ].map(queryState))).every((s) => s === "granted" || s === "prompt");
53
60
  }
54
61
  /**
55
62
  * Start capturing absolute orientation. Idempotent (stops any prior watch first).
@@ -61,9 +68,16 @@ async function sensorPermissionsUsable() {
61
68
  async function startAbsoluteOrientationWatch(onStatus = () => {}) {
62
69
  stopAbsoluteOrientationWatch();
63
70
  const myGeneration = watchGeneration;
71
+ const reportStatus = (status) => {
72
+ try {
73
+ onStatus(status);
74
+ } catch (err) {
75
+ log.error("onStatus callback threw; continuing", err);
76
+ }
77
+ };
64
78
  const Ctor = getSensorCtor();
65
79
  if (!isAbsoluteOrientationAvailable() || Ctor === null) {
66
- onStatus({
80
+ reportStatus({
67
81
  state: "unavailable",
68
82
  reason: "no AbsoluteOrientationSensor / insecure context"
69
83
  });
@@ -71,7 +85,7 @@ async function startAbsoluteOrientationWatch(onStatus = () => {}) {
71
85
  }
72
86
  try {
73
87
  if (!await sensorPermissionsUsable()) {
74
- onStatus({
88
+ reportStatus({
75
89
  state: "unavailable",
76
90
  reason: "sensor permission denied"
77
91
  });
@@ -84,6 +98,7 @@ async function startAbsoluteOrientationWatch(onStatus = () => {}) {
84
98
  });
85
99
  sensor = created;
86
100
  created.addEventListener("reading", () => {
101
+ if (created !== sensor) return;
87
102
  const q = created.quaternion;
88
103
  if (!q || q.length < 4) return;
89
104
  const x = q[0];
@@ -104,14 +119,16 @@ async function startAbsoluteOrientationWatch(onStatus = () => {}) {
104
119
  };
105
120
  });
106
121
  created.addEventListener("activate", () => {
122
+ if (created !== sensor) return;
107
123
  log.info("active");
108
- onStatus({ state: "active" });
124
+ reportStatus({ state: "active" });
109
125
  });
110
126
  created.addEventListener("error", (event) => {
127
+ if (created !== sensor) return;
111
128
  latest = null;
112
129
  const reason = event?.error?.name ?? "SensorError";
113
130
  log.error("sensor error:", reason);
114
- onStatus({
131
+ reportStatus({
115
132
  state: "error",
116
133
  reason
117
134
  });
@@ -120,7 +137,7 @@ async function startAbsoluteOrientationWatch(onStatus = () => {}) {
120
137
  } catch (err) {
121
138
  sensor = null;
122
139
  latest = null;
123
- onStatus({
140
+ reportStatus({
124
141
  state: "error",
125
142
  reason: err?.name ?? String(err)
126
143
  });
@@ -1,2 +1,2 @@
1
- import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-BbPsfw-_.js";
1
+ import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-C34GQuTu.js";
2
2
  export { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, createGpsErrorHandler, getGpsErrorMessage };
@@ -1,2 +1,2 @@
1
- import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-BBO3hKfT.js";
1
+ import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-CDKDQokE.js";
2
2
  export { GpsPosition, RawDeviceOrientation, requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
@@ -1,5 +1,5 @@
1
- import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-BBO3hKfT.js";
2
- import { a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission$1, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-CDuI8BwC.js";
3
- import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-CAEh840t.js";
4
- import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-BbPsfw-_.js";
1
+ import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-CDKDQokE.js";
2
+ import { a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission$1, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-B-VtjnBA.js";
3
+ import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-BAxc15J6.js";
4
+ import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-C34GQuTu.js";
5
5
  export { type AbsoluteOrientationReading, type AbsoluteOrientationStatus, GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, type GpsPosition, type PermissionCheckResult, type PermissionStatus, type RawDeviceOrientation, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, createGpsErrorHandler, getGpsErrorMessage, getLatestAbsoluteOrientation, isAbsoluteOrientationAvailable, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, startAbsoluteOrientationWatch, startGpsWatch, startOrientationWatch, stopAbsoluteOrientationWatch, stopGpsWatch, stopOrientationWatch };
@@ -1,2 +1,2 @@
1
- import { _ as subscribePermissionChanges, a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission, r as PermissionSubscription, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-CDuI8BwC.js";
1
+ import { _ as subscribePermissionChanges, a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission, r as PermissionSubscription, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-B-VtjnBA.js";
2
2
  export { PermissionCheckResult, PermissionStatus, PermissionSubscription, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, subscribePermissionChanges };
@@ -1,2 +1,2 @@
1
- import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-ikTUQZpe.js";
1
+ import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-BbAiCRUT.js";
2
2
  export { selectAlignmentMatrix, selectFrameTilesInWebXR, selectGpsPositions, selectOdometryPositions, selectOdometryRotations, selectZeroReference };
@@ -1,2 +1,2 @@
1
- import { N as CombinedRootState } from "../create-slam-app-store-n_VF63D5.js";
1
+ import { N as CombinedRootState } from "../create-slam-app-store-D1QSMuKu.js";
2
2
  export { CombinedRootState };
@@ -1,2 +1,2 @@
1
- import { a as SlamAppStoreOptions, i as SlamAppStore, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, t as SlamAppCombinedState } from "../create-slam-app-store-n_VF63D5.js";
1
+ import { a as SlamAppStoreOptions, i as SlamAppStore, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, t as SlamAppCombinedState } from "../create-slam-app-store-D1QSMuKu.js";
2
2
  export { SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, createSlamAppStore };
@@ -1,2 +1,2 @@
1
- import { t as createSlamAppStore } from "../create-slam-app-store-DkCHOpvb.js";
1
+ import { t as createSlamAppStore } from "../create-slam-app-store-DXiAnJwR.js";
2
2
  export { createSlamAppStore };
@@ -1,4 +1,4 @@
1
- import { t as ARPose } from "../ar-types-BFX2r1wk.js";
2
- import { o as extractOdomPosition, s as extractOdomRotation } from "../gps-event-coordinator-CjWW636x.js";
3
- import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DHMZmYAc.js";
1
+ import { t as ARPose } from "../ar-types-Cc5yvBwn.js";
2
+ import { o as extractOdomPosition, s as extractOdomRotation } from "../gps-event-coordinator-BWpgBrHq.js";
3
+ import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DEGNk2CI.js";
4
4
  export { ARPose, CaptureGpsAnchorSampleOptions, GpsAnchorSample, GpsAnchorSampleGpsPoint, captureGpsAnchorSample, extractOdomPosition, extractOdomRotation };
@@ -1,2 +1,2 @@
1
- import { a as eulerToQuaternion, c as getLastDeviceOrientation, d as updateDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as toRawAbsoluteOrientation } from "../gps-event-coordinator-CjWW636x.js";
1
+ import { a as eulerToQuaternion, c as getLastDeviceOrientation, d as updateDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as toRawAbsoluteOrientation } from "../gps-event-coordinator-BWpgBrHq.js";
2
2
  export { RecordingCoordinatorConfig, buildRawGpsPoint, buildRecordGpsEventPayload, createGpsPositionHandler, eulerToQuaternion, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, resetCoordinatorState, toRawAbsoluteOrientation, updateDeviceOrientation };
@@ -1,20 +1,20 @@
1
- import { i as DepthSample, r as DepthPoint } from "../ar-types-BFX2r1wk.js";
2
- import { C as saveRecordingOptions, E as validateDepthOptions, N as validateRecordingOptions, O as validateImageOptions, S as resetRecordingOptions, _ as RecordingOptionsInput, a as DepthCaptureOptions, b as cloneRecordingOptions, c as IMAGE_CONSTRAINTS, i as DEPTH_CONSTRAINTS, l as ImageCaptureOptions, r as DEFAULT_RECORDING_OPTIONS, v as STORAGE_KEY, x as loadRecordingOptions } from "../recording-options-BPCpMHLK.js";
3
- import { a as TrackingSliceState, c as poseLost, d as selectLastRestartedPayload, f as selectLastSensorOrientation, g as trackingReducer, h as selectTrackingPhase, i as TrackingPhase, l as poseReceived, m as selectLostFrameCount, n as PoseReceivedPayload, o as clearLastRestartedPayload, p as selectLastValidPose, r as ResetTransformData, s as originReset, t as DeviceOrientation, u as resetTracking } from "../tracking-slice-BuAZxXZ5.js";
4
- import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-DQdAsid1.js";
5
- import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-B7tWJq7j.js";
6
- import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata$1, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-DaxHZvNu.js";
7
- import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-VQssZmQJ.js";
8
- import { n as SessionMetadata } from "../opfs-storage-3VZh-qH6.js";
9
- import { n as StorageBackend } from "../storage-backend-BdVLD0dU.js";
10
- import { A as snapshotPushed, C as createTrackingQualityListenerMiddleware, D as resetTrackingQuality, E as reportUpdated, M as trackingQualityReducer, O as selectRecentAlignments, S as computeTrackingQualityReport, T as matrixDelta, _ as computeConvergence, a as SlamAppStoreOptions, b as computeGpsVsFusedDivergence, g as TrackingQualityState, h as TrackingQualitySliceState, i as SlamAppStore, j as snapshotsTrimmed, k as selectTrackingQuality, m as TrackingQualityReport, n as SlamAppMiddleware, o as createSlamAppStore, p as TrackingQualityOptions, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, u as DEFAULT_TRACKING_QUALITY_OPTIONS, v as computeCoverage, w as degradedCountUpdated, x as computeResidualConsensus, y as computeGpsAccuracy } from "../create-slam-app-store-n_VF63D5.js";
11
- import { a as eulerToQuaternion, c as getLastDeviceOrientation, d as updateDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig } from "../gps-event-coordinator-CjWW636x.js";
12
- import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DHMZmYAc.js";
13
- import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-DQKpAGyQ.js";
14
- import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-DAPTTwB2.js";
15
- import { a as ReplayAction, c as computeInterActionDelay, i as ProgressCallback, l as extractActionTimestamp, n as DEFAULT_MAX_DELAY_MS, o as ReplayEngine, r as ErrorCallback, s as ReplayState, t as CompleteCallback } from "../replay-engine-CmKh_4wf.js";
16
- import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-B6EUmQ3I.js";
17
- import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-CA6AJH_8.js";
18
- import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-ikTUQZpe.js";
19
- import { a as RawGpsPoint, c as calcRelativeCoordsInMeters, d as OnboardingGuidance, f as OnboardingPhase, i as RawDeviceOrientation, l as recordGpsEvent, m as selectOnboardingGuidance, n as GpsPoint, o as RecordGpsEventPayload, p as computeOnboardingGuidance, r as LatLong, s as add2dImage, t as Add2dImagePayload, u as setZeroPos } from "../index-BODDUTvD.js";
1
+ import { i as DepthSample, r as DepthPoint } from "../ar-types-Cc5yvBwn.js";
2
+ import { C as cloneRecordingOptions, E as saveRecordingOptions, L as validateRecordingOptions, T as resetRecordingOptions, a as DepthCaptureOptions, b as RecordingOptionsInput, c as IMAGE_CONSTRAINTS, i as DEPTH_CONSTRAINTS, j as validateImageOptions, k as validateDepthOptions, l as ImageCaptureOptions, r as DEFAULT_RECORDING_OPTIONS, w as loadRecordingOptions, x as STORAGE_KEY } from "../recording-options-DYKWVI93.js";
3
+ import { a as TrackingSliceState, c as poseLost, d as selectLastRestartedPayload, f as selectLastSensorOrientation, g as trackingReducer, h as selectTrackingPhase, i as TrackingPhase, l as poseReceived, m as selectLostFrameCount, n as PoseReceivedPayload, o as clearLastRestartedPayload, p as selectLastValidPose, r as ResetTransformData, s as originReset, t as DeviceOrientation, u as resetTracking } from "../tracking-slice-DMkHlbny.js";
4
+ import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-DxiMqRUw.js";
5
+ import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-CypnmjA-.js";
6
+ import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata$1, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-BW8SiLo1.js";
7
+ import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-TzVb8bij.js";
8
+ import { n as SessionMetadata } from "../opfs-storage-CTkxvxN4.js";
9
+ import { n as StorageBackend } from "../storage-backend-sEtmM4yW.js";
10
+ import { A as snapshotPushed, C as createTrackingQualityListenerMiddleware, D as resetTrackingQuality, E as reportUpdated, M as trackingQualityReducer, O as selectRecentAlignments, S as computeTrackingQualityReport, T as matrixDelta, _ as computeConvergence, a as SlamAppStoreOptions, b as computeGpsVsFusedDivergence, g as TrackingQualityState, h as TrackingQualitySliceState, i as SlamAppStore, j as snapshotsTrimmed, k as selectTrackingQuality, m as TrackingQualityReport, n as SlamAppMiddleware, o as createSlamAppStore, p as TrackingQualityOptions, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, u as DEFAULT_TRACKING_QUALITY_OPTIONS, v as computeCoverage, w as degradedCountUpdated, x as computeResidualConsensus, y as computeGpsAccuracy } from "../create-slam-app-store-D1QSMuKu.js";
11
+ import { a as eulerToQuaternion, c as getLastDeviceOrientation, d as updateDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig } from "../gps-event-coordinator-BWpgBrHq.js";
12
+ import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DEGNk2CI.js";
13
+ import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-BJ8Lf0QY.js";
14
+ import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-CG-t08X4.js";
15
+ import { a as ReplayAction, c as computeInterActionDelay, i as ProgressCallback, l as extractActionTimestamp, n as DEFAULT_MAX_DELAY_MS, o as ReplayEngine, r as ErrorCallback, s as ReplayState, t as CompleteCallback } from "../replay-engine-DmCAc7WM.js";
16
+ import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-dQV8SpsO.js";
17
+ import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-DJUErW-o.js";
18
+ import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-BbAiCRUT.js";
19
+ import { a as RawGpsPoint, c as calcRelativeCoordsInMeters, d as OnboardingGuidance, f as OnboardingPhase, i as RawDeviceOrientation, l as recordGpsEvent, m as selectOnboardingGuidance, n as GpsPoint, o as RecordGpsEventPayload, p as computeOnboardingGuidance, r as LatLong, s as add2dImage, t as Add2dImagePayload, u as setZeroPos } from "../index-B6iBnO_K.js";
20
20
  export { Add2dImagePayload, AlignmentSnapshot, CaptureGpsAnchorSampleOptions, CompleteCallback, DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, DepthCaptureOptions, DepthPoint, DepthSample, DeviceOrientation, ErrorCallback, GpsAnchorSample, GpsAnchorSampleGpsPoint, GpsPoint, IMAGE_CONSTRAINTS, ImageCaptureOptions, LatLong, OnboardingGuidance, OnboardingPhase, SessionMetadata as OpfsSessionMetadata, PersistenceMiddlewareOptions, PoseReceivedPayload, ProgressCallback, QrDetectedState, QrDetectionEntry, QrMarkerState, QrPoseStability, QrPoseStabilityOptions, QrPoseStabilityStatus, QrSizeEstimate, QrSizeStatus, RawDeviceOrientation, RawGpsPoint, RecordGpsEventPayload, RecordingCoordinatorConfig, RecordingOptionsInput, RecordingState, ReplayAction, ReplayEngine, ReplayRecordingOptions, ReplayState, ResetTransformData, RootWithQrDetected, STORAGE_KEY, SessionMetadata$1 as SessionMetadata, SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, StorageBackend, StoreSubscriberDeps, SubscribableStore, TrackingPhase, TrackingQualityOptions, TrackingQualityReport, TrackingQualitySliceState, TrackingQualityState, TrackingSliceState, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, cloneRecordingOptions, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectDerivedQrPlacement, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
@@ -7,10 +7,10 @@ import { captureGpsAnchorSample } from "./gps-ar-pose-sampler.js";
7
7
  import { selectAlignmentMatrix, selectFrameTilesInWebXR, selectGpsPositions, selectOdometryPositions, selectOdometryRotations, selectZeroReference } from "./app-selectors.js";
8
8
  import { DEFAULT_TRACKING_QUALITY_OPTIONS, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeResidualConsensus, computeTrackingQualityReport, createTrackingQualityListenerMiddleware, degradedCountUpdated, matrixDelta, reportUpdated, resetTrackingQuality, selectRecentAlignments, selectTrackingQuality, snapshotPushed, snapshotsTrimmed, trackingQualityReducer } from "./tracking-quality.js";
9
9
  import { createPersistenceMiddleware, slicePrefixOf } from "./persistence-middleware.js";
10
- import { t as createSlamAppStore } from "../create-slam-app-store-DkCHOpvb.js";
10
+ import { t as createSlamAppStore } from "../create-slam-app-store-DXiAnJwR.js";
11
11
  import { replayRecording } from "./recording-replayer.js";
12
12
  import { DEFAULT_MAX_DELAY_MS, ReplayEngine, computeInterActionDelay, extractActionTimestamp } from "./replay-engine.js";
13
13
  import { subscribeToSelector } from "./subscribe-to-selector.js";
14
14
  import { wireStoreSubscribers } from "./store-subscribers.js";
15
- import { a as computeOnboardingGuidance, i as setZeroPos, n as calcRelativeCoordsInMeters, o as selectOnboardingGuidance, r as recordGpsEvent, t as add2dImage } from "../state-E51QT_-j.js";
15
+ import { a as computeOnboardingGuidance, i as setZeroPos, n as calcRelativeCoordsInMeters, o as selectOnboardingGuidance, r as recordGpsEvent, t as add2dImage } from "../state-BeKvn4B-.js";
16
16
  export { DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, IMAGE_CONSTRAINTS, ReplayEngine, STORAGE_KEY, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, cloneRecordingOptions, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectDerivedQrPlacement, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
@@ -1,2 +1,2 @@
1
- import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-DAPTTwB2.js";
1
+ import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-CG-t08X4.js";
2
2
  export { PersistenceMiddlewareOptions, createPersistenceMiddleware, slicePrefixOf };