gps-plus-slam-app-framework 1.9.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/README.md +14 -14
  2. package/dist/{absolute-orientation-BAxc15J6.d.ts → absolute-orientation-Dj1One3y.d.ts} +1 -1
  3. package/dist/{accuracy-circles-DkWBkF5g.d.ts → accuracy-circles-BHz7yVIL.d.ts} +1 -1
  4. package/dist/{alignment-lerper-gD70k7Fq.d.ts → alignment-lerper-DAHicRON.d.ts} +0 -6
  5. package/dist/{app-selectors-BbAiCRUT.d.ts → app-selectors-DG0ZqaeI.d.ts} +23 -13
  6. package/dist/ar/ar-crash-isolation.d.ts +2 -0
  7. package/dist/ar/ar-crash-isolation.js +40 -0
  8. package/dist/ar/bresenham3d.d.ts +1 -1
  9. package/dist/ar/camera-blit-capture.d.ts +1 -1
  10. package/dist/ar/capability-checker.d.ts +1 -1
  11. package/dist/ar/capture-failure-tracker.d.ts +1 -1
  12. package/dist/ar/capture-motion-gate.d.ts +2 -0
  13. package/dist/{capture-motion-gate-_NdTSwKi.js → ar/capture-motion-gate.js} +25 -2
  14. package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
  15. package/dist/ar/chromium-camera-access-workaround.js +1 -1
  16. package/dist/ar/depth-grid-lookup.d.ts +1 -1
  17. package/dist/ar/depth-occluder.d.ts +1 -1
  18. package/dist/ar/depth-occluder.js +1 -1
  19. package/dist/ar/depth-sampler.d.ts +2 -2
  20. package/dist/ar/depth-sampler.js +16 -5
  21. package/dist/ar/depth-unprojection.d.ts +1 -1
  22. package/dist/ar/enable-gps-ar.d.ts +1 -1
  23. package/dist/ar/enable-gps-ar.js +2 -2
  24. package/dist/ar/image-capture.d.ts +1 -1
  25. package/dist/ar/image-capture.js +1 -1
  26. package/dist/ar/image-quality.d.ts +2 -2
  27. package/dist/ar/image-quality.js +159 -8
  28. package/dist/ar/index.d.ts +32 -30
  29. package/dist/ar/index.js +15 -14
  30. package/dist/ar/occlusion-mesh-worker.d.ts +2 -2
  31. package/dist/ar/occlusion-mesh-worker.js +1 -1
  32. package/dist/ar/occupancy-grid.d.ts +1 -1
  33. package/dist/ar/occupancy-grid.js +2 -2
  34. package/dist/ar/occupancy-mesher.d.ts +1 -1
  35. package/dist/ar/occupancy-mesher.js +4 -5
  36. package/dist/ar/qr/index.d.ts +11 -0
  37. package/dist/ar/qr/index.js +11 -0
  38. package/dist/ar/{planar-pnp.d.ts → qr/planar-pnp.d.ts} +1 -1
  39. package/dist/ar/{planar-pnp.js → qr/planar-pnp.js} +1 -1
  40. package/dist/ar/qr/qr-debug-view.d.ts +2 -0
  41. package/dist/ar/{qr-debug-view.js → qr/qr-debug-view.js} +2 -2
  42. package/dist/ar/{qr-derived-pose.d.ts → qr/qr-derived-pose.d.ts} +1 -1
  43. package/dist/ar/{qr-derived-pose.js → qr/qr-derived-pose.js} +2 -2
  44. package/dist/ar/{qr-detection-controller.d.ts → qr/qr-detection-controller.d.ts} +1 -1
  45. package/dist/ar/qr/qr-detection-controller.js +2 -0
  46. package/dist/ar/{qr-frontend.d.ts → qr/qr-frontend.d.ts} +1 -1
  47. package/dist/ar/{qr-frontend.js → qr/qr-frontend.js} +1 -1
  48. package/dist/ar/{qr-pose.d.ts → qr/qr-pose.d.ts} +1 -1
  49. package/dist/ar/{qr-pose.js → qr/qr-pose.js} +1 -1
  50. package/dist/ar/qr/qr-size-depth-context.d.ts +3 -0
  51. package/dist/ar/{qr-size-depth-context.js → qr/qr-size-depth-context.js} +4 -4
  52. package/dist/ar/{qr-size-measurer.d.ts → qr/qr-size-measurer.d.ts} +1 -1
  53. package/dist/ar/qr/qr-size-measurer.js +2 -0
  54. package/dist/ar/replay-scene.d.ts +1 -1
  55. package/dist/ar/replay-scene.js +15 -13
  56. package/dist/ar/scene-node-names.d.ts +1 -1
  57. package/dist/ar/webxr-nue-basis.d.ts +1 -1
  58. package/dist/ar/webxr-session.d.ts +4 -4
  59. package/dist/ar/webxr-session.js +2 -2
  60. package/dist/ar/xr-error-handler.d.ts +1 -1
  61. package/dist/ar/xr-frame-loop.d.ts +1 -1
  62. package/dist/ar/xr-frame-loop.js +1 -1
  63. package/dist/ar-crash-isolation-DlXCGzMf.d.ts +52 -0
  64. package/dist/{ar-types-Cc5yvBwn.d.ts → ar-types-D6PYS4bc.d.ts} +16 -1
  65. package/dist/{ar-world-group-alignment-Cfg0trC3.d.ts → ar-world-group-alignment-BdS_h8Nf.d.ts} +2 -2
  66. package/dist/{capability-checker-BTTpygvZ.d.ts → capability-checker-BZ3_x1YL.d.ts} +1 -1
  67. package/dist/capture-motion-gate-CPwLekNf.d.ts +120 -0
  68. package/dist/{chromium-camera-access-workaround-C6yJLXz9.d.ts → chromium-camera-access-workaround-BHR4clTE.d.ts} +1 -1
  69. package/dist/core/index.d.ts +1 -1
  70. package/dist/{create-slam-app-store-D1QSMuKu.d.ts → create-slam-app-store-DFm5K9Ob.d.ts} +15 -6
  71. package/dist/{create-slam-app-store-DXiAnJwR.js → create-slam-app-store-oK9bnqyI.js} +10 -8
  72. package/dist/{depth-grid-lookup-D5atpNZ3.d.ts → depth-grid-lookup-CCuzlqUo.d.ts} +1 -1
  73. package/dist/{depth-sampler-CwObAwEA.d.ts → depth-sampler-CS2jAFw4.d.ts} +15 -5
  74. package/dist/{depth-unprojection-DRdBU90S.d.ts → depth-unprojection-ET3Gwedf.d.ts} +1 -1
  75. package/dist/device-orientation-cache-j-kLP8he.js +20 -0
  76. package/dist/{enable-gps-ar-BBtRO2FJ.d.ts → enable-gps-ar-D_xEHzh5.d.ts} +9 -4
  77. package/dist/{file-system-utils-DueXHxo9.d.ts → file-system-utils-BHI0rXr9.d.ts} +1 -1
  78. package/dist/{frame-conversions-DDcNHkTb.d.ts → frame-conversions-CH7E2Iv_.d.ts} +1 -1
  79. package/dist/{fused-path-C5pp0PJU.d.ts → fused-path-DOKzVMiO.d.ts} +1 -1
  80. package/dist/geo/h3-proximity.d.ts +1 -1
  81. package/dist/geo/h3-proximity.js +1 -1
  82. package/dist/geo/index.d.ts +1 -1
  83. package/dist/{geodesic-angle-BTldfFgs.js → geodesic-angle-CZ_Ow90I.js} +2 -2
  84. package/dist/{gps-CDKDQokE.d.ts → gps-CnhYrJCa.d.ts} +8 -1
  85. package/dist/{gps-anchor-CEjGqEVD.d.ts → gps-anchor-BaqyRsPC.d.ts} +14 -4
  86. package/dist/{gps-ar-pose-sampler-DEGNk2CI.d.ts → gps-ar-pose-sampler-BuuUuK-D.d.ts} +1 -1
  87. package/dist/{gps-event-coordinator-BWpgBrHq.d.ts → gps-event-coordinator-Cruoe5I-.d.ts} +16 -29
  88. package/dist/{gps-event-markers-Di2nBzx-.d.ts → gps-event-markers-y2b2aVl6.d.ts} +35 -1
  89. package/dist/{h3-proximity-D0GTHQmr.d.ts → h3-proximity-BaAulrnM.d.ts} +1 -1
  90. package/dist/{image-capture-Bp6Pd4Md.d.ts → image-capture-BevgKpoO.d.ts} +6 -6
  91. package/dist/{image-capture-DVcuqMtX.js → image-capture-C4DwxC10.js} +12 -10
  92. package/dist/{image-quality-BMx2ko9-.d.ts → image-quality--HLuyJ2r.d.ts} +44 -2
  93. package/dist/{index-cCQWuYqy.d.ts → index-BWVwd9Zw.d.ts} +10 -74
  94. package/dist/{index-B6iBnO_K.d.ts → index-ClmnNJ6-.d.ts} +1 -1
  95. package/dist/index-Dxb6ATNK.d.ts +64 -0
  96. package/dist/index.d.ts +79 -79
  97. package/dist/index.js +26 -24
  98. package/dist/{leaflet-map-overlay-CBWPvaX9.js → leaflet-map-overlay-CTcTVmL1.js} +1 -1
  99. package/dist/{leaflet-map-overlay-C8GS4cUy.d.ts → leaflet-map-overlay-CksetpTt.d.ts} +1 -1
  100. package/dist/{map-data-CUnTzRIC.d.ts → map-data-D8cCqpOM.d.ts} +3 -3
  101. package/dist/{map-data-1tF5gcYV.js → map-data-DkhsYDGM.js} +1 -1
  102. package/dist/{map-overlay-draw-6WJeq0Kg.d.ts → map-overlay-draw-Cy-klqoA.d.ts} +1 -1
  103. package/dist/median-DDBrZGP0.js +44 -0
  104. package/dist/{null-storage-backend-B1-jlpin.d.ts → null-storage-backend-DXXuwG8T.d.ts} +2 -2
  105. package/dist/{occlusion-mesh-kXCQ2FM1.d.ts → occlusion-mesh-BWe2PrVi.d.ts} +23 -12
  106. package/dist/{occupancy-grid-BV7RhB7I.d.ts → occupancy-grid-CYBdmMOo.d.ts} +3 -3
  107. package/dist/{occupancy-mesher-C2ecWhNp.d.ts → occupancy-mesher-B4Bv4BTk.d.ts} +4 -9
  108. package/dist/{opfs-storage-backend-D6Z03fML.d.ts → opfs-storage-backend-D1ZpeNEL.d.ts} +2 -2
  109. package/dist/{persistence-middleware-CG-t08X4.d.ts → persistence-middleware-Cun4aF5M.d.ts} +13 -3
  110. package/dist/{planar-pnp-D7bc_rLX.d.ts → planar-pnp-ByxwDEyM.d.ts} +2 -2
  111. package/dist/{ar-BqCudtqE.js → qr-CTp5xI83.js} +24 -34
  112. package/dist/{qr-debug-view-BJooqbiP.d.ts → qr-debug-view-CGlITU09.d.ts} +2 -2
  113. package/dist/{qr-derived-pose-BwNWn8oV.d.ts → qr-derived-pose-DZPxZd9C.d.ts} +3 -3
  114. package/dist/{qr-detected-slice-TzVb8bij.d.ts → qr-detected-slice-mfyxD2-M.d.ts} +9 -8
  115. package/dist/{qr-detection-controller-Bo4XfQTP.d.ts → qr-detection-controller-C5NII-vs.d.ts} +4 -4
  116. package/dist/{qr-detection-controller-B-tLVd-S.js → qr-detection-controller-DXc1yHRf.js} +3 -3
  117. package/dist/{qr-frontend-BPURlh3S.d.ts → qr-frontend-QzKZSqB-.d.ts} +2 -2
  118. package/dist/{qr-pose-y3vaEd6x.d.ts → qr-pose-21fRDcFO.d.ts} +1 -1
  119. package/dist/{qr-pose-aggregation-DBiaLW0O.js → qr-pose-aggregation-Cp0Mtg_j.js} +7 -12
  120. package/dist/{qr-pose-aggregation-CypnmjA-.d.ts → qr-pose-aggregation-mABSN0AW.d.ts} +2 -2
  121. package/dist/{qr-size-depth-context-apAOmbrZ.d.ts → qr-size-depth-context-CMDv6T29.d.ts} +3 -3
  122. package/dist/{qr-size-measurer-DxiMqRUw.d.ts → qr-size-measurer-rVFf4AdM.d.ts} +5 -5
  123. package/dist/{qr-size-measurer-DLb33geH.js → qr-size-measurer-zZB9S1va.js} +9 -15
  124. package/dist/{recording-replayer-BJ8Lf0QY.d.ts → recording-replayer-qT2EM1Qs.d.ts} +2 -2
  125. package/dist/{recording-slice-BW8SiLo1.d.ts → recording-slice-DXw5-UvO.d.ts} +10 -5
  126. package/dist/{replay-engine-DmCAc7WM.d.ts → replay-engine-B1H_kLhK.d.ts} +1 -1
  127. package/dist/{replay-scene-zJ8SFDjE.d.ts → replay-scene-BJeO36YT.d.ts} +12 -5
  128. package/dist/sensors/absolute-orientation.d.ts +1 -1
  129. package/dist/sensors/absolute-orientation.js +1 -1
  130. package/dist/sensors/gps-error-handler.d.ts +1 -1
  131. package/dist/sensors/gps.d.ts +1 -1
  132. package/dist/sensors/gps.js +10 -8
  133. package/dist/sensors/index.d.ts +3 -3
  134. package/dist/sensors/index.js +1 -1
  135. package/dist/sensors/permission-checker.js +71 -40
  136. package/dist/{session-disposers-BPrMplIC.js → session-disposers-B7hUN90w.js} +1 -1
  137. package/dist/state/app-selectors.d.ts +1 -1
  138. package/dist/state/combined-root-state.d.ts +1 -1
  139. package/dist/state/create-slam-app-store.d.ts +1 -1
  140. package/dist/state/create-slam-app-store.js +1 -1
  141. package/dist/state/gps-ar-pose-sampler.d.ts +2 -3
  142. package/dist/state/gps-ar-pose-sampler.js +1 -1
  143. package/dist/state/gps-event-coordinator.d.ts +2 -1
  144. package/dist/state/gps-event-coordinator.js +4 -46
  145. package/dist/state/index.d.ts +19 -20
  146. package/dist/state/index.js +6 -5
  147. package/dist/state/persistence-middleware.d.ts +2 -2
  148. package/dist/state/persistence-middleware.js +24 -15
  149. package/dist/state/qr-detected-slice.d.ts +3 -3
  150. package/dist/state/qr-detected-slice.js +11 -15
  151. package/dist/state/recording-replayer.d.ts +2 -2
  152. package/dist/state/recording-replayer.js +1 -1
  153. package/dist/state/recording-slice.d.ts +1 -1
  154. package/dist/state/replay-engine.d.ts +1 -1
  155. package/dist/state/store-subscribers.d.ts +2 -2
  156. package/dist/state/store-subscribers.js +23 -6
  157. package/dist/state/subscribe-to-selector.d.ts +1 -1
  158. package/dist/state/tracking-quality.d.ts +1 -1
  159. package/dist/state/tracking-quality.js +14 -11
  160. package/dist/state/tracking-slice.d.ts +1 -1
  161. package/dist/{state-BeKvn4B-.js → state-CDF5LvsO.js} +2 -4
  162. package/dist/storage/file-system-utils.d.ts +1 -1
  163. package/dist/storage/file-system-utils.js +1 -1
  164. package/dist/storage/index.d.ts +8 -8
  165. package/dist/storage/null-storage-backend.d.ts +1 -1
  166. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  167. package/dist/storage/opfs-storage.d.ts +1 -1
  168. package/dist/storage/storage-backend.d.ts +1 -1
  169. package/dist/storage/zip-coverage-embed.d.ts +1 -1
  170. package/dist/storage/zip-coverage-embed.js +1 -1
  171. package/dist/storage/zip-export.d.ts +1 -1
  172. package/dist/storage/zip-export.js +10 -4
  173. package/dist/storage/zip-reader.d.ts +1 -1
  174. package/dist/{storage-backend-sEtmM4yW.d.ts → storage-backend-BX7egQKi.d.ts} +1 -1
  175. package/dist/{store-subscribers-DJUErW-o.d.ts → store-subscribers-CWHToX6N.d.ts} +2 -2
  176. package/dist/{subscribe-to-selector-dQV8SpsO.d.ts → subscribe-to-selector-j-eOYybQ.d.ts} +1 -1
  177. package/dist/test-utils/browser-mocks.d.ts +1 -1
  178. package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
  179. package/dist/{tracking-slice-DMkHlbny.d.ts → tracking-slice-BAbcZK-Y.d.ts} +3 -2
  180. package/dist/types/ar-types.d.ts +2 -2
  181. package/dist/types/ar-types.js +31 -1
  182. package/dist/types/geo-types.d.ts +1 -1
  183. package/dist/types/index.d.ts +3 -3
  184. package/dist/types/index.js +2 -1
  185. package/dist/utils/concurrency.d.ts +1 -1
  186. package/dist/utils/failure-tracker.d.ts +1 -1
  187. package/dist/utils/format-file-size.d.ts +1 -1
  188. package/dist/utils/fused-path.d.ts +1 -1
  189. package/dist/utils/fused-path.js +1 -1
  190. package/dist/utils/index.d.ts +7 -7
  191. package/dist/utils/index.js +1 -1
  192. package/dist/utils/list-formatter.d.ts +1 -1
  193. package/dist/utils/logger.d.ts +1 -1
  194. package/dist/utils/logger.js +30 -20
  195. package/dist/visualization/accuracy-circles.d.ts +1 -1
  196. package/dist/visualization/accuracy-circles.js +1 -1
  197. package/dist/visualization/alignment-lerper.d.ts +1 -1
  198. package/dist/visualization/alignment-lerper.js +20 -5
  199. package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
  200. package/dist/visualization/ar-world-group-alignment.js +2 -2
  201. package/dist/visualization/camera-follower.d.ts +1 -1
  202. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  203. package/dist/visualization/frame-conversions.d.ts +1 -1
  204. package/dist/visualization/frustum-visibility.d.ts +1 -1
  205. package/dist/visualization/gps-anchor.d.ts +1 -1
  206. package/dist/visualization/gps-anchor.js +44 -19
  207. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  208. package/dist/visualization/gps-event-markers.d.ts +2 -2
  209. package/dist/visualization/gps-event-markers.js +27 -6
  210. package/dist/visualization/hit-test-reticle.d.ts +1 -1
  211. package/dist/visualization/index.d.ts +19 -20
  212. package/dist/visualization/index.js +4 -5
  213. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  214. package/dist/visualization/leaflet-map-overlay.js +1 -1
  215. package/dist/visualization/lerp-utils.d.ts +1 -1
  216. package/dist/visualization/map-data.d.ts +1 -1
  217. package/dist/visualization/map-data.js +1 -1
  218. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  219. package/dist/visualization/occluder-mesh-driver.d.ts +2 -2
  220. package/dist/visualization/occluder-mesh-driver.js +1 -1
  221. package/dist/visualization/occlusion-mesh.d.ts +2 -2
  222. package/dist/visualization/occlusion-mesh.js +29 -14
  223. package/dist/visualization/three-dispose.d.ts +1 -1
  224. package/dist/visualization/vis-colors.d.ts +1 -1
  225. package/dist/{webxr-session-BWCpGd-2.d.ts → webxr-session-DefwObIu.d.ts} +143 -193
  226. package/dist/{webxr-session-BCP2XK7k.js → webxr-session-OyR3YbTq.js} +154 -284
  227. package/dist/{xr-frame-loop-DX3JPpAU.d.ts → xr-frame-loop-BiZvgqP7.d.ts} +1 -1
  228. package/dist/{zip-coverage-embed-ncVbaZAz.d.ts → zip-coverage-embed-CyoX7XL7.d.ts} +1 -1
  229. package/package.json +5 -3
  230. package/dist/ar/qr-debug-view.d.ts +0 -2
  231. package/dist/ar/qr-detection-controller.js +0 -2
  232. package/dist/ar/qr-size-depth-context.d.ts +0 -3
  233. package/dist/ar/qr-size-measurer.js +0 -2
  234. package/dist/capture-motion-gate-BGoAMkmf.d.ts +0 -24
  235. package/dist/map-overlay-BCQgvIgU.d.ts +0 -153
  236. package/dist/recording-options-DYKWVI93.d.ts +0 -693
  237. package/dist/state/recording-options.d.ts +0 -2
  238. package/dist/state/recording-options.js +0 -591
  239. package/dist/visualization/map-overlay.d.ts +0 -2
  240. package/dist/visualization/map-overlay.js +0 -241
  241. /package/dist/{bresenham3d-DGc4nIb-.d.ts → bresenham3d-D-t9i_b5.d.ts} +0 -0
  242. /package/dist/{camera-blit-capture-BimSdyih.d.ts → camera-blit-capture-BlC-arRb.d.ts} +0 -0
  243. /package/dist/{camera-follower-DfBm2J5i.d.ts → camera-follower-CO_ibF2o.d.ts} +0 -0
  244. /package/dist/{capture-failure-tracker-_BVfhpxv.d.ts → capture-failure-tracker-BAUKjtXU.d.ts} +0 -0
  245. /package/dist/{cell-key-DIB4rOTV.js → cell-key-Bj-eYTLA.js} +0 -0
  246. /package/dist/{concurrency-DPeGBH0X.d.ts → concurrency-DW0jQo3G.d.ts} +0 -0
  247. /package/dist/{css3d-renderer-manager-CPpVtvgs.d.ts → css3d-renderer-manager-CJjHtCMT.d.ts} +0 -0
  248. /package/dist/{failure-tracker-CeKf5HIc.d.ts → failure-tracker-B7fzPfZo.d.ts} +0 -0
  249. /package/dist/{format-file-size-DxN-EBLc.d.ts → format-file-size-Da8rZgfs.d.ts} +0 -0
  250. /package/dist/{frustum-visibility-CokkgS_i.d.ts → frustum-visibility-COPfzruF.d.ts} +0 -0
  251. /package/dist/{geo-types-DrGVu8nS.d.ts → geo-types-BfDK8kJu.d.ts} +0 -0
  252. /package/dist/{gps-compass-cubes-1mooS3BS.d.ts → gps-compass-cubes-CT3TWctJ.d.ts} +0 -0
  253. /package/dist/{gps-error-handler-C34GQuTu.d.ts → gps-error-handler-DjVuLXve.d.ts} +0 -0
  254. /package/dist/{hit-test-reticle-CaQbrhbk.d.ts → hit-test-reticle-DhnCMOsc.d.ts} +0 -0
  255. /package/dist/{index-DXPVzOpP.d.ts → index-CjxbDm8W.d.ts} +0 -0
  256. /package/dist/{index-D74JTX4I.d.ts → index-Nr3qg4IH.d.ts} +0 -0
  257. /package/dist/{lerp-utils-Qs8OhumS.d.ts → lerp-utils-bwMwVCpU.d.ts} +0 -0
  258. /package/dist/{list-formatter-DLFDnS70.d.ts → list-formatter-1ttG18MQ.d.ts} +0 -0
  259. /package/dist/{logger-CqTd5Kpk.d.ts → logger-B4StJUDb.d.ts} +0 -0
  260. /package/dist/{opfs-storage-CTkxvxN4.d.ts → opfs-storage-S_odkCk1.d.ts} +0 -0
  261. /package/dist/{scene-node-names-CGb-ylBd.d.ts → scene-node-names-DWzhE7Ro.d.ts} +0 -0
  262. /package/dist/{three-dispose-BMOAmPhb.d.ts → three-dispose-C3mnKQR5.d.ts} +0 -0
  263. /package/dist/{vis-colors-C7HI0u9_.d.ts → vis-colors-CoSpbZEO.d.ts} +0 -0
  264. /package/dist/{webxr-nue-basis-CaCnYxuq.d.ts → webxr-nue-basis-C3vTqkE2.d.ts} +0 -0
  265. /package/dist/{xr-error-handler-uVGDu9IX.d.ts → xr-error-handler-D9y5r8ok.d.ts} +0 -0
  266. /package/dist/{zip-export-CtiUnAlJ.d.ts → zip-export-CuBimX1J.d.ts} +0 -0
  267. /package/dist/{zip-reader-BzENzMH6.d.ts → zip-reader-BHc_b_iA.d.ts} +0 -0
package/README.md CHANGED
@@ -262,19 +262,19 @@ that guard's `APP_OVERLAY_CONTRACTS` list.
262
262
 
263
263
  WebXR session lifecycle, Three.js renderer setup, image/depth capture, replay scene management.
264
264
 
265
- | Export | Description |
266
- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
267
- | `initAR(container, isolation?, features?)` | Start a WebXR AR session with Three.js rendering. `features.requestHitTest` opts the session into the WebXR `hit-test` feature |
268
- | `endARSession()` | End the active XR session |
269
- | `createEnableGpsArController()` | Headless "Enable GPS AR" orchestration (support check + permission bundling + sensor watches + `initAR`) with observable state; the app renders its own button over it |
270
- | `registerXrFrameUpdate(cb)` | Per-frame access to the live `XRFrame` + reference space + session (valid only synchronously inside the callback). Enables app-side hit-test / other WebXR features |
271
- | `isFullySupported(s)` / `capabilityMessage(s)` | WebXR + geolocation capability gating + a user-facing message |
272
- | `startImageCapture()` / `stopImageCapture()` | Toggle camera frame capture |
273
- | `ImageCaptureManager` | Configurable camera frame capture pipeline |
274
- | `DepthSampler` | Depth buffer sampling with configurable grids |
275
- | `CameraBlitCapture` | GPU blit-based camera capture |
276
- | `initReplayScene(container)` | Create a 3D replay scene with orbit/FPS controls |
277
- | `applyChromiumProjectionLayerWorkaround` | Chromium camera-access tab-crash workaround. Always deletes projection-layer hooks (forces `XRWebGLLayer`; required on every affected build incl. Chrome 150) and additionally persists `baseLayer` only on the affected Chrome window (148.0.7778.12 up to 149.0.7821) |
265
+ | Export | Description |
266
+ | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
267
+ | `initAR(container, isolation?, features?, callbacks?)` | Start a WebXR AR session with Three.js rendering. `features.requestHitTest` opts the session into the WebXR `hit-test` feature. `callbacks` (`ArSessionCallbacks`) carries ALL per-session host callbacks — `imageCapture`, `tracking` (store + callbacks together), `depth`, `cameraFrame`, `onFrame`, `onSessionEnd` — replacing the former pre-init setter exports; re-pass it with each session (cleared at session end). `rebindTrackingStore(store)` remains for the one mid-session need (swapping the tracking store per recording) |
268
+ | `endARSession()` | End the active XR session |
269
+ | `createEnableGpsArController()` | Headless "Enable GPS AR" orchestration (support check + permission bundling + sensor watches + `initAR`) with observable state; the app renders its own button over it |
270
+ | `registerXrFrameUpdate(cb)` | Per-frame access to the live `XRFrame` + reference space + session (valid only synchronously inside the callback). Enables app-side hit-test / other WebXR features |
271
+ | `isFullySupported(s)` / `capabilityMessage(s)` | WebXR + geolocation capability gating + a user-facing message |
272
+ | `startImageCapture()` / `stopImageCapture()` | Toggle camera frame capture |
273
+ | `ImageCaptureManager` | Configurable camera frame capture pipeline |
274
+ | `DepthSampler` | Depth buffer sampling with configurable grids |
275
+ | `CameraBlitCapture` | GPU blit-based camera capture |
276
+ | `initReplayScene(container)` | Create a 3D replay scene with orbit/FPS controls |
277
+ | `applyChromiumProjectionLayerWorkaround` | Chromium camera-access tab-crash workaround. Always deletes projection-layer hooks (forces `XRWebGLLayer`; required on every affected build incl. Chrome 150) and additionally persists `baseLayer` only on the affected Chrome window (148.0.7778.12 up to 149.0.7821) |
278
278
 
279
279
  ### `sensors/` — GPS & Permissions
280
280
 
@@ -341,7 +341,6 @@ H3-based proximity matching for GPS-anchored points (renamed from `ref-points/`
341
341
  | Export | Description |
342
342
  | ------------------------------ | ------------------------------------------------------ |
343
343
  | `LeafletMapOverlay` | 2D Leaflet map integrated via CSS3D into a 3D scene. |
344
- | `MapOverlay` | Tile-based 3D map overlay (no Leaflet dependency). |
345
344
  | `GpsEventVisualizer` | Three.js spheres for GPS event positions. |
346
345
  | `createAlignmentLerper()` | Smooth alignment matrix interpolation. |
347
346
  | `createCameraFollower()` | Camera that tracks a moving target. |
@@ -392,6 +391,7 @@ pnpm run build # build with tsdown
392
391
  ```
393
392
  src/
394
393
  ├── ar/ # WebXR session, capture, replay scene
394
+ │ └── qr/ # QR detection, pose (planar PnP), size-from-depth, GPS vote
395
395
  ├── sensors/ # GPS, orientation, permissions
396
396
  ├── state/ # createSlamAppStore, recording, replay, persistence middleware
397
397
  ├── storage/ # OPFS, ZIP export/import, StorageBackend
@@ -3,7 +3,7 @@
3
3
  * AbsoluteOrientationSensor capture (Generic Sensor API).
4
4
  *
5
5
  * Phase 1 of the AbsoluteOrientationSensor plan
6
- * (GpsPlusSlamJs_Docs/docs/2026-06-25-absolute-orientation-sensor-plan.md §5.1):
6
+ * (GpsPlusSlamJs_Docs/docs/2026-06-25-0543-absolute-orientation-sensor-plan.md §5.1):
7
7
  * passive instrumentation that fuses accelerometer + gyroscope + magnetometer
8
8
  * into an Earth-referenced (ENU) quaternion, captured per GPS event as an
9
9
  * independent north reference. No production behaviour change.
@@ -16,7 +16,7 @@ import L from "leaflet";
16
16
  * @deprecated Stroke-only since 2026-06-28 (Finding 1) — accuracy circles no
17
17
  * longer render a fill, so this opacity is unused. Retained as an exported
18
18
  * constant only to preserve the published API surface; do not pass it to
19
- * `L.circle`. See `2026-06-28-map-rings-transparency-and-view-direction-user-feedback.md`.
19
+ * `L.circle`. See `2026-06-28-1822-map-rings-transparency-and-view-direction-user-feedback.md`.
20
20
  */
21
21
  declare const ACCURACY_CIRCLE_FILL_OPACITY = 0.12;
22
22
  declare const ACCURACY_CIRCLE_STROKE_OPACITY = 0.5;
@@ -18,12 +18,6 @@ interface AlignmentLerper {
18
18
  /** Lifecycle cleanup (no-op — lerper does not own arWorldGroup). */
19
19
  dispose(): void;
20
20
  }
21
- /**
22
- * Create an AlignmentLerper that drives arWorldGroup.matrix smoothly.
23
- *
24
- * @param arWorldGroup The group whose matrix is interpolated.
25
- * @param lerpRate Lerp speed multiplier (default 8).
26
- */
27
21
  declare function createAlignmentLerper(arWorldGroup: THREE.Object3D, lerpRate?: number): AlignmentLerper;
28
22
  //#endregion
29
23
  export { createAlignmentLerper as n, AlignmentLerper as t };
@@ -1,11 +1,21 @@
1
- import { N as CombinedRootState, r as SlamAppRootState } from "./create-slam-app-store-D1QSMuKu.js";
1
+ import { N as CombinedRootState } from "./create-slam-app-store-DFm5K9Ob.js";
2
2
  import * as _$gps_plus_slam_js0 from "gps-plus-slam-js";
3
3
  import { ArImageCapture, GpsPoint, LatLong, Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
4
4
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
5
5
 
6
6
  //#region ../src/state/app-selectors.d.ts
7
+ /**
8
+ * Minimal root these selectors read (quality-review G-2). Typed as a Pick of
9
+ * the `gpsData` slice ONLY, so ANY consumer store that mounts the library's
10
+ * gpsData reducer is structurally assignable — the former full
11
+ * `CombinedRootState` parameter forced `as unknown as` casts (MinimalExample),
12
+ * a `sel()` helper (AnchorStarter), or a re-declared root type (RecorderApp)
13
+ * in every consumer, and a renamed slice would have compiled and failed at
14
+ * runtime.
15
+ */
16
+ type RootWithGpsData = Pick<CombinedRootState, 'gpsData'>;
7
17
  /** Alignment matrix (4×4), or null if not yet computed. */
8
- declare const selectAlignmentMatrix: ((state: SlamAppRootState & {}) => Matrix4 | null) & {
18
+ declare const selectAlignmentMatrix: ((state: RootWithGpsData) => Matrix4 | null) & {
9
19
  clearCache: () => void;
10
20
  resultsCount: () => number;
11
21
  resetResultsCount: () => void;
@@ -17,7 +27,7 @@ declare const selectAlignmentMatrix: ((state: SlamAppRootState & {}) => Matrix4
17
27
  resetResultsCount: () => void;
18
28
  };
19
29
  lastResult: () => Matrix4 | null;
20
- dependencies: [(state: CombinedRootState) => _$gps_plus_slam_js0.GpsModel | null];
30
+ dependencies: [(state: RootWithGpsData) => _$gps_plus_slam_js0.GpsModel | null];
21
31
  recomputations: () => number;
22
32
  resetRecomputations: () => void;
23
33
  dependencyRecomputations: () => number;
@@ -27,7 +37,7 @@ declare const selectAlignmentMatrix: ((state: SlamAppRootState & {}) => Matrix4
27
37
  argsMemoize: typeof _$_reduxjs_toolkit0.weakMapMemoize;
28
38
  };
29
39
  /** Recorded GPS positions with metadata. */
30
- declare const selectGpsPositions: ((state: SlamAppRootState & {}) => readonly GpsPoint[]) & {
40
+ declare const selectGpsPositions: ((state: RootWithGpsData) => readonly GpsPoint[]) & {
31
41
  clearCache: () => void;
32
42
  resultsCount: () => number;
33
43
  resetResultsCount: () => void;
@@ -39,7 +49,7 @@ declare const selectGpsPositions: ((state: SlamAppRootState & {}) => readonly Gp
39
49
  resetResultsCount: () => void;
40
50
  };
41
51
  lastResult: () => readonly GpsPoint[];
42
- dependencies: [(state: CombinedRootState) => _$gps_plus_slam_js0.GpsModel | null];
52
+ dependencies: [(state: RootWithGpsData) => _$gps_plus_slam_js0.GpsModel | null];
43
53
  recomputations: () => number;
44
54
  resetRecomputations: () => void;
45
55
  dependencyRecomputations: () => number;
@@ -49,7 +59,7 @@ declare const selectGpsPositions: ((state: SlamAppRootState & {}) => readonly Gp
49
59
  argsMemoize: typeof _$_reduxjs_toolkit0.weakMapMemoize;
50
60
  };
51
61
  /** Recorded odometry positions (AR-local space). */
52
- declare const selectOdometryPositions: ((state: SlamAppRootState & {}) => readonly Vector3[]) & {
62
+ declare const selectOdometryPositions: ((state: RootWithGpsData) => readonly Vector3[]) & {
53
63
  clearCache: () => void;
54
64
  resultsCount: () => number;
55
65
  resetResultsCount: () => void;
@@ -61,7 +71,7 @@ declare const selectOdometryPositions: ((state: SlamAppRootState & {}) => readon
61
71
  resetResultsCount: () => void;
62
72
  };
63
73
  lastResult: () => readonly Vector3[];
64
- dependencies: [(state: CombinedRootState) => _$gps_plus_slam_js0.GpsModel | null];
74
+ dependencies: [(state: RootWithGpsData) => _$gps_plus_slam_js0.GpsModel | null];
65
75
  recomputations: () => number;
66
76
  resetRecomputations: () => void;
67
77
  dependencyRecomputations: () => number;
@@ -71,7 +81,7 @@ declare const selectOdometryPositions: ((state: SlamAppRootState & {}) => readon
71
81
  argsMemoize: typeof _$_reduxjs_toolkit0.weakMapMemoize;
72
82
  };
73
83
  /** Recorded odometry rotations (AR-local space). */
74
- declare const selectOdometryRotations: ((state: SlamAppRootState & {}) => readonly Quaternion[]) & {
84
+ declare const selectOdometryRotations: ((state: RootWithGpsData) => readonly Quaternion[]) & {
75
85
  clearCache: () => void;
76
86
  resultsCount: () => number;
77
87
  resetResultsCount: () => void;
@@ -83,7 +93,7 @@ declare const selectOdometryRotations: ((state: SlamAppRootState & {}) => readon
83
93
  resetResultsCount: () => void;
84
94
  };
85
95
  lastResult: () => readonly Quaternion[];
86
- dependencies: [(state: CombinedRootState) => _$gps_plus_slam_js0.GpsModel | null];
96
+ dependencies: [(state: RootWithGpsData) => _$gps_plus_slam_js0.GpsModel | null];
87
97
  recomputations: () => number;
88
98
  resetRecomputations: () => void;
89
99
  dependencyRecomputations: () => number;
@@ -93,7 +103,7 @@ declare const selectOdometryRotations: ((state: SlamAppRootState & {}) => readon
93
103
  argsMemoize: typeof _$_reduxjs_toolkit0.weakMapMemoize;
94
104
  };
95
105
  /** GPS zero reference (origin for coordinate conversion), or null. */
96
- declare const selectZeroReference: ((state: SlamAppRootState & {}) => LatLong | null) & {
106
+ declare const selectZeroReference: ((state: RootWithGpsData) => LatLong | null) & {
97
107
  clearCache: () => void;
98
108
  resultsCount: () => number;
99
109
  resetResultsCount: () => void;
@@ -105,7 +115,7 @@ declare const selectZeroReference: ((state: SlamAppRootState & {}) => LatLong |
105
115
  resetResultsCount: () => void;
106
116
  };
107
117
  lastResult: () => LatLong | null;
108
- dependencies: [(state: CombinedRootState) => _$gps_plus_slam_js0.GpsModel | null];
118
+ dependencies: [(state: RootWithGpsData) => _$gps_plus_slam_js0.GpsModel | null];
109
119
  recomputations: () => number;
110
120
  resetRecomputations: () => void;
111
121
  dependencyRecomputations: () => number;
@@ -114,7 +124,7 @@ declare const selectZeroReference: ((state: SlamAppRootState & {}) => LatLong |
114
124
  memoize: typeof _$_reduxjs_toolkit0.weakMapMemoize;
115
125
  argsMemoize: typeof _$_reduxjs_toolkit0.weakMapMemoize;
116
126
  };
117
- declare const selectFrameTilesInWebXR: ((state: SlamAppRootState & {}) => readonly ArImageCapture[]) & {
127
+ declare const selectFrameTilesInWebXR: ((state: RootWithGpsData) => readonly ArImageCapture[]) & {
118
128
  clearCache: () => void;
119
129
  resultsCount: () => number;
120
130
  resetResultsCount: () => void;
@@ -126,7 +136,7 @@ declare const selectFrameTilesInWebXR: ((state: SlamAppRootState & {}) => readon
126
136
  resetResultsCount: () => void;
127
137
  };
128
138
  lastResult: () => readonly ArImageCapture[];
129
- dependencies: [(state: CombinedRootState) => ArImageCapture[] | undefined];
139
+ dependencies: [(state: RootWithGpsData) => ArImageCapture[] | undefined];
130
140
  recomputations: () => number;
131
141
  resetRecomputations: () => void;
132
142
  dependencyRecomputations: () => number;
@@ -0,0 +1,2 @@
1
+ import { n as DEFAULT_AR_CRASH_ISOLATION, r as validateArCrashIsolationOptions, t as ArCrashIsolationOptions } from "../ar-crash-isolation-DlXCGzMf.js";
2
+ export { ArCrashIsolationOptions, DEFAULT_AR_CRASH_ISOLATION, validateArCrashIsolationOptions };
@@ -0,0 +1,40 @@
1
+ //#region ../src/ar/ar-crash-isolation.ts
2
+ /** Default AR-crash-isolation flags (all features enabled). */
3
+ const DEFAULT_AR_CRASH_ISOLATION = {
4
+ enableDomOverlay: true,
5
+ enableCameraAccess: true,
6
+ enableDepthSensingFeature: true,
7
+ enableCss3dRenderer: true,
8
+ enableCameraTextureAcquisition: true,
9
+ applyChromiumProjectionLayerWorkaround: true
10
+ };
11
+ /**
12
+ * Boolean-or-default (quality-review C-1): persisted/external values are
13
+ * untrusted, so anything that is not a real boolean falls back to the
14
+ * default. Local copy of the recorder catalog's helper — the validator must
15
+ * stay dependency-free so the framework owns the whole group.
16
+ */
17
+ function boolOr(value, fallback) {
18
+ return typeof value === "boolean" ? value : fallback;
19
+ }
20
+ /**
21
+ * Validate and normalize AR crash isolation flags.
22
+ * Missing or invalid values fall back to defaults. The container itself is as
23
+ * untrusted as its fields (persisted blobs may lack the key entirely or hold
24
+ * `null`), so a nullish container yields the full defaults instead of
25
+ * throwing.
26
+ */
27
+ function validateArCrashIsolationOptions(rawOptions) {
28
+ const options = rawOptions ?? {};
29
+ const defaults = DEFAULT_AR_CRASH_ISOLATION;
30
+ return {
31
+ enableDomOverlay: boolOr(options.enableDomOverlay, defaults.enableDomOverlay),
32
+ enableCameraAccess: boolOr(options.enableCameraAccess, defaults.enableCameraAccess),
33
+ enableDepthSensingFeature: boolOr(options.enableDepthSensingFeature, defaults.enableDepthSensingFeature),
34
+ enableCss3dRenderer: boolOr(options.enableCss3dRenderer, defaults.enableCss3dRenderer),
35
+ enableCameraTextureAcquisition: boolOr(options.enableCameraTextureAcquisition, defaults.enableCameraTextureAcquisition),
36
+ applyChromiumProjectionLayerWorkaround: boolOr(options.applyChromiumProjectionLayerWorkaround, defaults.applyChromiumProjectionLayerWorkaround)
37
+ };
38
+ }
39
+ //#endregion
40
+ export { DEFAULT_AR_CRASH_ISOLATION, validateArCrashIsolationOptions };
@@ -1,2 +1,2 @@
1
- import { n as MAX_TRACE_STEPS, r as bresenham3d, t as GridCell } from "../bresenham3d-DGc4nIb-.js";
1
+ import { n as MAX_TRACE_STEPS, r as bresenham3d, t as GridCell } from "../bresenham3d-D-t9i_b5.js";
2
2
  export { GridCell, MAX_TRACE_STEPS, bresenham3d };
@@ -1,2 +1,2 @@
1
- import { a as computeCaptureSize, i as computeAspectFitSize, n as CameraBlitCaptureConfig, r as DEFAULT_BLIT_CONFIG, t as CameraBlitCapture } from "../camera-blit-capture-BimSdyih.js";
1
+ import { a as computeCaptureSize, i as computeAspectFitSize, n as CameraBlitCaptureConfig, r as DEFAULT_BLIT_CONFIG, t as CameraBlitCapture } from "../camera-blit-capture-BlC-arRb.js";
2
2
  export { CameraBlitCapture, CameraBlitCaptureConfig, DEFAULT_BLIT_CONFIG, computeAspectFitSize, computeCaptureSize };
@@ -1,2 +1,2 @@
1
- import { i as isFullySupported, n as CapabilitySupport, r as capabilityMessage, t as CapabilityMessageOptions } from "../capability-checker-BTTpygvZ.js";
1
+ import { i as isFullySupported, n as CapabilitySupport, r as capabilityMessage, t as CapabilityMessageOptions } from "../capability-checker-BZ3_x1YL.js";
2
2
  export { CapabilityMessageOptions, CapabilitySupport, capabilityMessage, isFullySupported };
@@ -1,2 +1,2 @@
1
- import { a as createCaptureFailureTracker, i as DEFAULT_CAPTURE_TRACKER_CONFIG, n as CaptureFailureTracker, r as CaptureFailureTrackerConfig, t as CAPTURE_FAILURE_WARNING } from "../capture-failure-tracker-_BVfhpxv.js";
1
+ import { a as createCaptureFailureTracker, i as DEFAULT_CAPTURE_TRACKER_CONFIG, n as CaptureFailureTracker, r as CaptureFailureTrackerConfig, t as CAPTURE_FAILURE_WARNING } from "../capture-failure-tracker-BAUKjtXU.js";
2
2
  export { CAPTURE_FAILURE_WARNING, CaptureFailureTracker, CaptureFailureTrackerConfig, DEFAULT_CAPTURE_TRACKER_CONFIG, createCaptureFailureTracker };
@@ -0,0 +1,2 @@
1
+ import { a as MotionWindow, i as MotionFilterConfig, n as DEFAULT_MOTION_FILTER, o as decideCapture, r as DEFAULT_MOTION_WINDOW_SIZE, t as CaptureDecisionInput } from "../capture-motion-gate-CPwLekNf.js";
2
+ export { CaptureDecisionInput, DEFAULT_MOTION_FILTER, DEFAULT_MOTION_WINDOW_SIZE, MotionFilterConfig, MotionWindow, decideCapture };
@@ -1,3 +1,26 @@
1
+ //#region ../src/ar/capture-motion-gate.ts
2
+ /**
3
+ * Capture motion gate — the policy that decides whether a *due* capture should
4
+ * fire on the current frame or be deferred until the device settles.
5
+ *
6
+ * Two cohesive pieces, both pure/deterministic and unit-testable in isolation
7
+ * from `ImageCaptureManager`:
8
+ * - {@link decideCapture} — the stateless capture-vs-defer decision over the
9
+ * windowed motion maxima, the thresholds, and the time since the capture
10
+ * became due (the never-calm safety fallback).
11
+ * - {@link MotionWindow} — a tiny fixed-size ring of recent per-frame
12
+ * velocities with glitch rejection, so the decision judges "max over the
13
+ * last N frames" rather than one lucky-calm sample.
14
+ *
15
+ * The window size and glitch ceilings are INTERNAL constants, deliberately not
16
+ * user-facing config: the user-facing surface is only enabled / maxAngular /
17
+ * maxLinear / maxWaitMs (plan §5.1). Keeping the stateful policy here (not in a
18
+ * speculative framework-wide service) matches the plan's §4.1 scope note.
19
+ *
20
+ * @see GpsPlusSlamJs_Docs/docs/2026-06-23-2105-blurry-frame-motion-gating-plan.md §4.2-4.4
21
+ */
22
+ /** Default number of recent frames the gate judges motion over (~50 ms @ 60fps). */
23
+ const DEFAULT_MOTION_WINDOW_SIZE = 3;
1
24
  /**
2
25
  * Angular velocity (rad/s) above which a sample is treated as a tracking glitch
3
26
  * (e.g. relocalization teleport), not real motion. A genuine hand/device turn
@@ -27,7 +50,7 @@ const LINEAR_GLITCH_CEILING_M_S = 20;
27
50
  * — demoting the (weak-at-scanning-distance) linear signal to a gross-motion
28
51
  * safety net and letting the well-behaved angular gate be the primary blur
29
52
  * selector. See
30
- * `GpsPlusSlamJs_Docs/docs/2026-07-02-image-capture-rate-motion-gate-finding.md`.
53
+ * `GpsPlusSlamJs_Docs/docs/2026-07-02-0117-image-capture-rate-motion-gate-finding.md`.
31
54
  *
32
55
  * `maxAngularVelocity` remains a PLACEHOLDER pending on-device field tuning
33
56
  * (plan §7). `maxWaitMs` of 4000 ms is 2× the default 2000 ms image interval.
@@ -103,4 +126,4 @@ var MotionWindow = class {
103
126
  }
104
127
  };
105
128
  //#endregion
106
- export { MotionWindow as n, decideCapture as r, DEFAULT_MOTION_FILTER as t };
129
+ export { DEFAULT_MOTION_FILTER, DEFAULT_MOTION_WINDOW_SIZE, MotionWindow, decideCapture };
@@ -1,2 +1,2 @@
1
- import { a as applyChromiumProjectionLayerWorkaround, i as ChromiumProjectionLayerWorkaroundResult, n as BASELAYER_WINDOW_MIN, o as needsBaseLayerPersistence, r as ChromeVersion, s as parseChromeVersion, t as BASELAYER_WINDOW_MAX } from "../chromium-camera-access-workaround-C6yJLXz9.js";
1
+ import { a as applyChromiumProjectionLayerWorkaround, i as ChromiumProjectionLayerWorkaroundResult, n as BASELAYER_WINDOW_MIN, o as needsBaseLayerPersistence, r as ChromeVersion, s as parseChromeVersion, t as BASELAYER_WINDOW_MAX } from "../chromium-camera-access-workaround-BHR4clTE.js";
2
2
  export { BASELAYER_WINDOW_MAX, BASELAYER_WINDOW_MIN, ChromeVersion, ChromiumProjectionLayerWorkaroundResult, applyChromiumProjectionLayerWorkaround, needsBaseLayerPersistence, parseChromeVersion };
@@ -11,7 +11,7 @@ import { createLogger } from "../utils/logger.js";
11
11
  * added — i.e. it is not specific to this app's session setup. See:
12
12
  *
13
13
  * - GpsPlusSlamJs_Docs/docs/2026-04-22-camera-access-reproducer-plan.md
14
- * - GpsPlusSlamJs_Docs/docs/2026-06-04-camera-access-crash-regression-chrome-148.md
14
+ * - GpsPlusSlamJs_Docs/docs/2026-06-04-0458-camera-access-crash-regression-chrome-148.md
15
15
  * - https://github.com/mrdoob/three.js/issues/33404
16
16
  * - https://issues.chromium.org/issues/507508099 (root-cause, marked Fixed)
17
17
  *
@@ -1,2 +1,2 @@
1
- import { n as createDepthGridLookup, t as DepthGridLookup } from "../depth-grid-lookup-D5atpNZ3.js";
1
+ import { n as createDepthGridLookup, t as DepthGridLookup } from "../depth-grid-lookup-CCuzlqUo.js";
2
2
  export { DepthGridLookup, createDepthGridLookup };
@@ -1,4 +1,4 @@
1
- import { t as DepthInfo } from "../depth-sampler-CwObAwEA.js";
1
+ import { t as DepthInfo } from "../depth-sampler-CS2jAFw4.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/ar/depth-occluder.d.ts
@@ -10,7 +10,7 @@ import * as THREE from "three";
10
10
  * occludes per-pixel against the surface currently in view (sharp, registration-
11
11
  * free, no memory). They **compose** — both depth-only under `arWorldGroup`, the
12
12
  * live occluder wins where this frame has depth, the mesh fills out-of-view / depth
13
- * holes (2026-06-14-webxr-depth-occlusion-plan.md §5).
13
+ * holes (2026-06-14-0009-webxr-depth-occlusion-plan.md §5).
14
14
  *
15
15
  * **Two layers, two confidence levels:**
16
16
  * - The **pure occlusion math** (this file's exported functions) is the CI-tested
@@ -1,3 +1,3 @@
1
- import { i as DepthSample } from "../ar-types-Cc5yvBwn.js";
2
- import { a as wrapXRDepthInfo, i as DepthSamplerConfig, n as DepthSampler, r as DepthSamplerCallbacks, t as DepthInfo } from "../depth-sampler-CwObAwEA.js";
1
+ import { i as DepthSample } from "../ar-types-D6PYS4bc.js";
2
+ import { a as wrapXRDepthInfo, i as DepthSamplerConfig, n as DepthSampler, r as DepthSamplerCallbacks, t as DepthInfo } from "../depth-sampler-CS2jAFw4.js";
3
3
  export { DepthInfo, DepthSample, DepthSampler, DepthSamplerCallbacks, DepthSamplerConfig, wrapXRDepthInfo };
@@ -1,4 +1,4 @@
1
- import { extractOdomPosition } from "../state/gps-event-coordinator.js";
1
+ import { extractOdomPosition } from "../types/ar-types.js";
2
2
  //#region ../src/ar/depth-sampler.ts
3
3
  /**
4
4
  * Defensively copy a 16-element column-major matrix into a plain serializable
@@ -127,19 +127,30 @@ var DepthSampler = class {
127
127
  if (typeof config.rgb === "boolean") this.config.rgb = config.rgb;
128
128
  }
129
129
  /**
130
- * Called each frame with depth information.
130
+ * Called each frame with a LAZY depth provider (quality-review E-4: the
131
+ * caller used to acquire + wrap the depth info every frame while this
132
+ * method threw ~59 of 60 acquisitions away at the interval check — the
133
+ * provider is now invoked only when a sample is due).
134
+ *
135
+ * Unavailability detection is preserved by construction:
136
+ * `lastSampleTime` only advances when a sample is EMITTED, so while depth
137
+ * is unavailable the sampler stays "due" and probes the provider every
138
+ * frame — exactly the cadence the old per-frame acquisition gave
139
+ * `checkDepthUnavailability` (Field Test Readiness Issue #8).
131
140
  *
132
141
  * @param timestamp - Current frame timestamp in milliseconds
133
- * @param depthInfo - WebXR depth information, or null if unavailable
142
+ * @param acquireDepthInfo - Returns the frame's depth info, or null if
143
+ * unavailable. Only invoked when a sample is due.
134
144
  */
135
- onFrame(timestamp, depthInfo) {
145
+ onFrame(timestamp, acquireDepthInfo) {
136
146
  if (!this.running) return;
147
+ if (timestamp - this.lastSampleTime < this.config.intervalMs) return;
148
+ const depthInfo = acquireDepthInfo();
137
149
  if (!depthInfo) {
138
150
  this.checkDepthUnavailability();
139
151
  return;
140
152
  }
141
153
  this.depthReceived = true;
142
- if (timestamp - this.lastSampleTime < this.config.intervalMs) return;
143
154
  const pose = this.callbacks.getCurrentPose();
144
155
  if (!pose) return;
145
156
  const points = this.sampleGrid(depthInfo, this.acquireRgbLookupSafely());
@@ -1,2 +1,2 @@
1
- import { n as createDepthUnprojector, r as unprojectDepthPoint, t as DepthUnprojector } from "../depth-unprojection-DRdBU90S.js";
1
+ import { n as createDepthUnprojector, r as unprojectDepthPoint, t as DepthUnprojector } from "../depth-unprojection-ET3Gwedf.js";
2
2
  export { DepthUnprojector, createDepthUnprojector, unprojectDepthPoint };
@@ -1,2 +1,2 @@
1
- import { a as EnableGpsArState, i as EnableGpsArResult, n as EnableGpsArController, o as EnableGpsArStatus, r as EnableGpsArDeps, s as createEnableGpsArController, t as EnableGpsArConfig } from "../enable-gps-ar-BBtRO2FJ.js";
1
+ import { a as EnableGpsArState, i as EnableGpsArResult, n as EnableGpsArController, o as EnableGpsArStatus, r as EnableGpsArDeps, s as createEnableGpsArController, t as EnableGpsArConfig } from "../enable-gps-ar-D_xEHzh5.js";
2
2
  export { EnableGpsArConfig, EnableGpsArController, EnableGpsArDeps, EnableGpsArResult, EnableGpsArState, EnableGpsArStatus, createEnableGpsArController };
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "../utils/logger.js";
2
- import { C as initAR, c as endARSession, w as isWebXRSupported } from "../webxr-session-BCP2XK7k.js";
2
+ import { _ as initAR, a as endARSession, v as isWebXRSupported } from "../webxr-session-OyR3YbTq.js";
3
3
  import { requestGeolocationPermission, requestOrientationPermission, requestWebXRWithDepthPermission } from "../sensors/permission-checker.js";
4
4
  import { startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch } from "../sensors/gps.js";
5
5
  //#region ../src/ar/enable-gps-ar.ts
@@ -78,7 +78,7 @@ function createEnableGpsArController(deps = {}) {
78
78
  try {
79
79
  const permissionError = await requestPermissions(config);
80
80
  if (permissionError !== null) return fail(permissionError);
81
- await resolved.initAR(config.container, config.isolationOptions, { requestHitTest: config.requestHitTest });
81
+ await resolved.initAR(config.container, config.isolationOptions, { requestHitTest: config.requestHitTest }, config.callbacks);
82
82
  sessionStarted = true;
83
83
  if (config.onGpsPosition) {
84
84
  resolved.startGpsWatch(config.onGpsPosition);
@@ -1,2 +1,2 @@
1
- import { a as ImageCaptureCallbacks, c as MIN_VALID_IMAGE_BYTES, i as FrameQualityVerdict, n as CapturedImage, o as ImageCaptureConfig, r as DEFAULT_CAPTURE_CONFIG, s as ImageCaptureManager, t as CapturedFrame } from "../image-capture-Bp6Pd4Md.js";
1
+ import { a as ImageCaptureCallbacks, c as MIN_VALID_IMAGE_BYTES, i as FrameQualityVerdict, n as CapturedImage, o as ImageCaptureConfig, r as DEFAULT_CAPTURE_CONFIG, s as ImageCaptureManager, t as CapturedFrame } from "../image-capture-BevgKpoO.js";
2
2
  export { CapturedFrame, CapturedImage, DEFAULT_CAPTURE_CONFIG, FrameQualityVerdict, ImageCaptureCallbacks, ImageCaptureConfig, ImageCaptureManager, MIN_VALID_IMAGE_BYTES };
@@ -1,2 +1,2 @@
1
- import { n as ImageCaptureManager, r as MIN_VALID_IMAGE_BYTES, t as DEFAULT_CAPTURE_CONFIG } from "../image-capture-DVcuqMtX.js";
1
+ import { n as ImageCaptureManager, r as MIN_VALID_IMAGE_BYTES, t as DEFAULT_CAPTURE_CONFIG } from "../image-capture-C4DwxC10.js";
2
2
  export { DEFAULT_CAPTURE_CONFIG, ImageCaptureManager, MIN_VALID_IMAGE_BYTES };
@@ -1,2 +1,2 @@
1
- import { a as QualityFilterConfig, c as meanLuminance, i as ImageQualityGate, l as rgbaToGrayscale, n as DEFAULT_SHARPNESS_HISTORY_SIZE, o as QualityRejectReason, r as DEFAULT_SHARPNESS_MIN_SAMPLES, s as QualityVerdict, t as DEFAULT_QUALITY_FILTER, u as sharpnessScore } from "../image-quality-BMx2ko9-.js";
2
- export { DEFAULT_QUALITY_FILTER, DEFAULT_SHARPNESS_HISTORY_SIZE, DEFAULT_SHARPNESS_MIN_SAMPLES, ImageQualityGate, QualityFilterConfig, QualityRejectReason, QualityVerdict, meanLuminance, rgbaToGrayscale, sharpnessScore };
1
+ import { a as DEFAULT_SHARPNESS_MIN_SAMPLES, c as QualityRejectReason, d as highFrequencyEnergyRatio, f as meanLuminance, i as DEFAULT_SHARPNESS_HISTORY_SIZE, l as QualityVerdict, m as sharpnessScore, n as BlurMetricId, o as ImageQualityGate, p as rgbaToGrayscale, r as DEFAULT_QUALITY_FILTER, s as QualityFilterConfig, t as BLUR_METRIC_IDS, u as blurMetricScorer } from "../image-quality--HLuyJ2r.js";
2
+ export { BLUR_METRIC_IDS, BlurMetricId, DEFAULT_QUALITY_FILTER, DEFAULT_SHARPNESS_HISTORY_SIZE, DEFAULT_SHARPNESS_MIN_SAMPLES, ImageQualityGate, QualityFilterConfig, QualityRejectReason, QualityVerdict, blurMetricScorer, highFrequencyEnergyRatio, meanLuminance, rgbaToGrayscale, sharpnessScore };