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
@@ -5,14 +5,14 @@ import { quat } from "gl-matrix";
5
5
  * rotation angle between two unit quaternions.
6
6
  *
7
7
  * This used to be hand-rolled in (at least) two places:
8
- * - `geodesicAngleRad` (private) in `ar/qr-pose-aggregation.ts`, and
8
+ * - `geodesicAngleRad` (private) in `ar/qr/qr-pose-aggregation.ts`, and
9
9
  * - `quat.getAngle(...)` + a NaN guard inside `state/tracking-quality.ts`'s
10
10
  * `matrixDelta`.
11
11
  *
12
12
  * Both compute the same number — `acos(2·dot² − 1)` — so they are consolidated
13
13
  * here so a third consumer (the capture motion gate's angular-velocity helper,
14
14
  * `ar/pose-motion.ts`) reuses one definition instead of adding a fourth copy.
15
- * See `GpsPlusSlamJs_Docs/docs/2026-06-23-followup-consolidate-geodesic-angle-kernel.md`.
15
+ * See `GpsPlusSlamJs_Docs/docs/2026-06-23-2120-consolidate-geodesic-angle-kernel-followup.md`.
16
16
  */
17
17
  /**
18
18
  * Geodesic (shortest-arc) rotation angle in radians between two **unit**
@@ -47,7 +47,14 @@ declare function startOrientationWatch(onOrientation: OrientationCallback): void
47
47
  */
48
48
  declare function stopOrientationWatch(): void;
49
49
  /**
50
- * Request permission for device orientation (required on iOS 13+)
50
+ * Request permission for device orientation (required on iOS 13+).
51
+ *
52
+ * Boolean-contract wrapper around the permission-checker's
53
+ * `requestOrientationPermission` superset (quality-review A-4 — the two
54
+ * public implementations had already drifted once; this one lacked the
55
+ * missing-API guard and threw a ReferenceError where `DeviceOrientationEvent`
56
+ * does not exist). `true` only for an explicit grant (or the non-iOS
57
+ * no-permission-needed case); denied, failed, or unsupported → `false`.
51
58
  */
52
59
  declare function requestOrientationPermission(): Promise<boolean>;
53
60
  //#endregion
@@ -1,4 +1,4 @@
1
- import { i as LatLongAlt, r as LatLong } from "./index-DXPVzOpP.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-CjxbDm8W.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/gps-anchor.d.ts
@@ -19,8 +19,19 @@ interface GpsAnchorOptions {
19
19
  readonly skipBootstrap?: boolean;
20
20
  readonly getAlignmentMatrix: () => readonly number[] | null;
21
21
  readonly getGpsZeroRef: () => LatLong | null;
22
- /** Returns the current GPS reading at "now", or null when no fix yet. */
23
- readonly getCurrentGpsPoint: () => GpsAnchorSamplePoint | null;
22
+ /**
23
+ * Returns the current bootstrap sample, or null to skip this tick.
24
+ *
25
+ * OPTIONAL since quality-review G-6: when omitted, the anchor samples the
26
+ * OBJECT's own world pose converted to GPS via `worldNueToGps` (the
27
+ * "object-pose" source) — pinning the anchor to the placed point, not the
28
+ * device. This was previously hand-built (scratch vector + zero/alignment
29
+ * guards) in every consumer and was the subtlest piece of anchor wiring:
30
+ * re-deriving it incorrectly anchored silently wrong. Provide a custom
31
+ * reader only when the samples should come from somewhere else (e.g. the
32
+ * phone's GPS fix).
33
+ */
34
+ readonly getCurrentGpsPoint?: () => GpsAnchorSamplePoint | null;
24
35
  /**
25
36
  * Optional callback invoked whenever the bootstrap median is committed (the
26
37
  * anchor's GPS reference is (re)assigned). Receives the exact committed point
@@ -36,7 +47,6 @@ interface GpsAnchorOptions {
36
47
  readonly floorY?: () => number | null;
37
48
  readonly distanceThreshold?: number;
38
49
  readonly angleThresholdInDegrees?: number;
39
- readonly targetPosRefreshRateInSec?: number;
40
50
  /** Number of 1 Hz samples collected during bootstrap. Default 7. */
41
51
  readonly secondsToAccumulateGpsPose?: number;
42
52
  /** Wait window (seconds) at phase entry during which no samples are taken. Default 0. */
@@ -1,4 +1,4 @@
1
- import { t as ARPose } from "./ar-types-Cc5yvBwn.js";
1
+ import { t as ARPose } from "./ar-types-D6PYS4bc.js";
2
2
  import { Quaternion, Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/state/gps-ar-pose-sampler.d.ts
@@ -1,10 +1,20 @@
1
- import { t as ARPose } from "./ar-types-Cc5yvBwn.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CDKDQokE.js";
3
- import { t as AbsoluteOrientationReading } from "./absolute-orientation-BAxc15J6.js";
4
- import { i as SlamAppStore } from "./create-slam-app-store-D1QSMuKu.js";
5
- import { Quaternion, RawAbsoluteOrientation, RawGpsPoint, RecordGpsEventPayload, Vector3, eulerToQuaternion } from "gps-plus-slam-js";
1
+ import { t as ARPose } from "./ar-types-D6PYS4bc.js";
2
+ import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-CnhYrJCa.js";
3
+ import { t as AbsoluteOrientationReading } from "./absolute-orientation-Dj1One3y.js";
4
+ import { i as SlamAppStore } from "./create-slam-app-store-DFm5K9Ob.js";
5
+ import { RawAbsoluteOrientation, RawGpsPoint, RecordGpsEventPayload, eulerToQuaternion } from "gps-plus-slam-js";
6
6
  import { ReducersMapObject } from "@reduxjs/toolkit";
7
7
 
8
+ //#region ../src/sensors/device-orientation-cache.d.ts
9
+ /**
10
+ * Update the cached device orientation.
11
+ * Called by the host's orientation watch; read when a GPS event arrives and
12
+ * by the XR frame loop's orientation snapshot.
13
+ */
14
+ declare function updateDeviceOrientation(orientation: RawDeviceOrientation): void;
15
+ /** Get the current cached device orientation (null before the first reading). */
16
+ declare function getLastDeviceOrientation(): RawDeviceOrientation | null;
17
+ //#endregion
8
18
  //#region ../src/state/gps-event-coordinator.d.ts
9
19
  /**
10
20
  * Configuration for the recording coordinator
@@ -15,33 +25,10 @@ interface RecordingCoordinatorConfig {
15
25
  /** Function to get current AR pose (from WebXR module) */
16
26
  getArPose: () => ARPose | null;
17
27
  }
18
- /**
19
- * Update the cached device orientation.
20
- * Called by orientation watch, used when GPS event arrives.
21
- */
22
- declare function updateDeviceOrientation(orientation: RawDeviceOrientation): void;
23
- /**
24
- * Get the current cached device orientation.
25
- */
26
- declare function getLastDeviceOrientation(): RawDeviceOrientation | null;
27
28
  /**
28
29
  * Clear cached state (for testing or session reset)
29
30
  */
30
31
  declare function resetCoordinatorState(): void;
31
- /**
32
- * Extract raw odometry position tuple from ARPose.
33
- *
34
- * Returns the raw WebXR position without coordinate conversion.
35
- * The reducer applies the WebXR→NUE transform when storing into state
36
- * (raw-storage pattern, see docs/2026-04-09-raw-storage-convert-on-read.md).
37
- *
38
- * WebXR local-floor frame: X=East, Y=Up, Z=South (toward viewer / backward).
39
- */
40
- declare function extractOdomPosition(arPose: ARPose): Vector3;
41
- /**
42
- * Extract odometry rotation tuple from ARPose.
43
- */
44
- declare function extractOdomRotation(arPose: ARPose): Quaternion;
45
32
  /**
46
33
  * Build a RawGpsPoint from GPS position data.
47
34
  * Returns only raw sensor fields — no derived fields (coordinates, weight,
@@ -89,4 +76,4 @@ declare function buildRecordGpsEventPayload(gpsPosition: GpsPosition, arPose: AR
89
76
  */
90
77
  declare function createGpsPositionHandler(config: RecordingCoordinatorConfig): (position: GpsPosition) => void;
91
78
  //#endregion
92
- export { eulerToQuaternion as a, getLastDeviceOrientation as c, updateDeviceOrientation as d, createGpsPositionHandler as i, resetCoordinatorState as l, buildRawGpsPoint as n, extractOdomPosition as o, buildRecordGpsEventPayload as r, extractOdomRotation as s, RecordingCoordinatorConfig as t, toRawAbsoluteOrientation as u };
79
+ export { eulerToQuaternion as a, getLastDeviceOrientation as c, createGpsPositionHandler as i, updateDeviceOrientation as l, buildRawGpsPoint as n, resetCoordinatorState as o, buildRecordGpsEventPayload as r, toRawAbsoluteOrientation as s, RecordingCoordinatorConfig as t };
@@ -1,6 +1,26 @@
1
+ import * as THREE from "three";
1
2
  import { LatLong, Vector3 } from "gps-plus-slam-js";
2
3
 
3
4
  //#region ../src/visualization/gps-event-markers.d.ts
5
+ /**
6
+ * Where the visualizer resolves its scene graph from.
7
+ *
8
+ * By default markers are parented into the LIVE AR session's scene
9
+ * (`webxr-session.ts` getters). Non-live consumers (desktop replay, offline
10
+ * e2e fixtures) point the visualizer at their own scene via
11
+ * {@link GpsEventVisualizer.setSceneSource} instead of injecting their scene
12
+ * into the webxr-session singleton (the deleted replay-mode "Risk R1" setters
13
+ * — see the 2026-07-11 webxr-session surface-reduction plan, step 2).
14
+ *
15
+ * Both functions may return `null` (e.g. before `initAR()`); the visualizer
16
+ * then warns and skips the affected marker, exactly as before.
17
+ */
18
+ interface GpsMarkerSceneSource {
19
+ /** Scene root — parents raw-GPS (yellow) and snapshot (red) markers. */
20
+ getScene: () => THREE.Scene | null;
21
+ /** AR world group — parents fused (cyan) markers so they ride the alignment. */
22
+ getArWorldGroup: () => THREE.Group | null;
23
+ }
4
24
  /**
5
25
  * Optional GPS-accuracy hints used by {@link GpsEventVisualizer.addGpsEvent}
6
26
  * to render the raw-GPS marker as a non-uniform-scaled ellipsoid.
@@ -32,6 +52,20 @@ declare class GpsEventVisualizer {
32
52
  * Default `true` — the markers render exactly as before until opted out.
33
53
  */
34
54
  private markersVisible;
55
+ /**
56
+ * Scene graph the markers are parented into. Defaults to the live AR
57
+ * session ({@link LIVE_SCENE_SOURCE}); replay / offline consumers override
58
+ * it via {@link setSceneSource}. Not reset by {@link clearAll} — the owner
59
+ * of the non-live scene (e.g. replay-mode's dispose) restores the default.
60
+ */
61
+ private sceneSource;
62
+ /**
63
+ * Point the visualizer at a non-live scene graph (desktop replay, offline
64
+ * e2e fixture). Pass `null` to restore the live-session default. The caller
65
+ * that overrides the source is responsible for restoring it when its scene
66
+ * is disposed, so a later live AR session parents markers correctly again.
67
+ */
68
+ setSceneSource(source: GpsMarkerSceneSource | null): void;
35
69
  /**
36
70
  * Set the GPS zero reference (origin for coordinate conversion).
37
71
  * Must be called before adding GPS events.
@@ -118,4 +152,4 @@ declare class GpsEventVisualizer {
118
152
  */
119
153
  declare const gpsEventVisualizer: GpsEventVisualizer;
120
154
  //#endregion
121
- export { GpsEventVisualizer as n, gpsEventVisualizer as r, GpsEventAccuracy as t };
155
+ export { gpsEventVisualizer as i, GpsEventVisualizer as n, GpsMarkerSceneSource as r, GpsEventAccuracy as t };
@@ -52,7 +52,7 @@ declare function gpsPathToCoverageCells(path: readonly LatLngLike[]): string[];
52
52
  * truncate the hex-string id: resolution is encoded in the high bits with
53
53
  * trailing `f` padding, so slicing yields INVALID cells, not parents (verified;
54
54
  * see the D1 gotcha in
55
- * docs/2026-06-14-map-centric-recording-browser-and-h3-index-user-feedback.md).
55
+ * docs/2026-06-14-1048-map-centric-recording-browser-and-h3-index-user-feedback.md).
56
56
  *
57
57
  * `targetRes` is clamped to `[0, H3_RESOLUTION]` because `cellToParent` throws
58
58
  * when asked for a FINER resolution than the cell, and res 11 is the finest
@@ -1,6 +1,6 @@
1
- import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-Cc5yvBwn.js";
2
- import { t as MotionFilterConfig } from "./capture-motion-gate-BGoAMkmf.js";
3
- import { a as QualityFilterConfig } from "./image-quality-BMx2ko9-.js";
1
+ import { i as MotionFilterConfig } from "./capture-motion-gate-CPwLekNf.js";
2
+ import { o as WebXRQuaternion, s as WebXRVec3, t as ARPose } from "./ar-types-D6PYS4bc.js";
3
+ import { s as QualityFilterConfig } from "./image-quality--HLuyJ2r.js";
4
4
 
5
5
  //#region ../src/ar/image-capture.d.ts
6
6
  /**
@@ -51,7 +51,7 @@ declare const DEFAULT_CAPTURE_CONFIG: ImageCaptureConfig;
51
51
  * action by the RecorderApp's `handleImageCaptured`, which rebuilds the
52
52
  * payload field-by-field. A new field added here is therefore NOT persisted
53
53
  * until it is threaded through that handler — see
54
- * `2026-06-12-payload-rebuild-field-drop-audit.md` (F1/F2) and the forwarding
54
+ * `2026-06-12-1130-payload-rebuild-field-drop-audit.md` (F1/F2) and the forwarding
55
55
  * test in `main.occupancy-cubes-wiring.test.ts`.
56
56
  */
57
57
  interface CapturedImage {
@@ -83,7 +83,7 @@ interface CapturedImage {
83
83
  * A captured frame blob together with the pixel dimensions it was encoded at.
84
84
  * Returned by the optional `captureFrame` (blit) callback so the pose-invariant
85
85
  * image size can be persisted as first-class metadata (frame-tile aspect-ratio
86
- * fix, D1 of 2026-06-13-frame-tile-rendering-bugs-user-feedback.md). The
86
+ * fix, D1 of 2026-06-13-1311-frame-tile-rendering-bugs-user-feedback.md). The
87
87
  * dimensions are the blit render-target size — identical to the JPEG's own
88
88
  * width/height — so no decode is needed to learn the aspect ratio.
89
89
  */
@@ -148,7 +148,7 @@ interface ImageCaptureCallbacks {
148
148
  * callback MUST settle its promise; if it rejects, or does not settle within
149
149
  * `captureTimeoutMs`, the manager fails open (saves the frame) so a hung
150
150
  * analyzer cannot deadlock the pipeline. See `image-quality.ts` and
151
- * `GpsPlusSlamJs_Docs/docs/2026-06-24-image-quality-gate-plan.md`.
151
+ * `GpsPlusSlamJs_Docs/docs/2026-06-24-1057-image-quality-gate-plan.md`.
152
152
  */
153
153
  analyzeFrame?: (frame: CapturedFrame) => Promise<FrameQualityVerdict>;
154
154
  }
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "./utils/logger.js";
2
- import { t as geodesicAngleRad } from "./geodesic-angle-BTldfFgs.js";
3
- import { n as MotionWindow, r as decideCapture, t as DEFAULT_MOTION_FILTER } from "./capture-motion-gate-_NdTSwKi.js";
2
+ import { t as geodesicAngleRad } from "./geodesic-angle-CZ_Ow90I.js";
3
+ import { DEFAULT_MOTION_FILTER, MotionWindow, decideCapture } from "./ar/capture-motion-gate.js";
4
4
  import { DEFAULT_QUALITY_FILTER } from "./ar/image-quality.js";
5
5
  import { quat } from "gl-matrix";
6
6
  //#region ../src/ar/pose-motion.ts
@@ -8,7 +8,7 @@ import { quat } from "gl-matrix";
8
8
  * Pose-motion helpers — stateless angular/linear velocity from two AR poses.
9
9
  *
10
10
  * The capture motion gate (blurry-frame skipping, see
11
- * `GpsPlusSlamJs_Docs/docs/2026-06-23-blurry-frame-motion-gating-plan.md` §4.1)
11
+ * `GpsPlusSlamJs_Docs/docs/2026-06-23-2105-blurry-frame-motion-gating-plan.md` §4.1)
12
12
  * rejects frames whose device motion is too fast to yield a sharp image. Motion
13
13
  * is derived from consecutive WebXR poses — cheaper than any image-content
14
14
  * metric because it needs no GPU readback.
@@ -21,14 +21,16 @@ import { quat } from "gl-matrix";
21
21
  * Angular velocity reuses the shared `geodesicAngleRad` kernel rather than a
22
22
  * fresh `acos` (CLAUDE.md: search first, prefer refactor over re-implementation).
23
23
  */
24
+ const _scratchQuatPrev = quat.create();
25
+ const _scratchQuatCur = quat.create();
24
26
  /**
25
- * Convert a WebXR object-form quaternion to a normalized gl-matrix quaternion.
26
- * Normalizing defends against slightly non-unit inputs (the gate must not throw
27
- * on imperfect tracking data).
27
+ * Write a WebXR object-form quaternion into `out`, normalized. Normalizing
28
+ * defends against slightly non-unit inputs (the gate must not throw on
29
+ * imperfect tracking data).
28
30
  */
29
- function toGlQuat(q) {
30
- const g = quat.fromValues(q.x, q.y, q.z, q.w);
31
- return quat.normalize(g, g);
31
+ function toGlQuat(q, out) {
32
+ quat.set(out, q.x, q.y, q.z, q.w);
33
+ return quat.normalize(out, out);
32
34
  }
33
35
  /**
34
36
  * Angular velocity in radians/second between two orientations.
@@ -43,7 +45,7 @@ function toGlQuat(q) {
43
45
  */
44
46
  function angularVelocity(qPrev, qCur, dtSeconds) {
45
47
  if (!(dtSeconds > 0)) return 0;
46
- return geodesicAngleRad(toGlQuat(qPrev), toGlQuat(qCur)) / dtSeconds;
48
+ return geodesicAngleRad(toGlQuat(qPrev, _scratchQuatPrev), toGlQuat(qCur, _scratchQuatCur)) / dtSeconds;
47
49
  }
48
50
  /**
49
51
  * Linear velocity in metres/second between two positions.
@@ -21,10 +21,23 @@
21
21
  * black/empty frame; an absolute cutoff is safe because "black is black"
22
22
  * regardless of scene texture (§5).
23
23
  *
24
- * @see GpsPlusSlamJs_Docs/docs/2026-06-24-image-quality-gate-plan.md
24
+ * @see GpsPlusSlamJs_Docs/docs/2026-06-24-1057-image-quality-gate-plan.md
25
25
  * @see ./capture-motion-gate.ts — the motion gate this builds on (same shape:
26
26
  * a shared config type + a small stateful window + a pure decision).
27
27
  */
28
+ /**
29
+ * Selectable sharpness metrics for the gate's blur check. Both are pure
30
+ * grayscale scorers with identical defensive contracts; the gate's RELATIVE
31
+ * rule (`score < k · median(recent)`) is metric-agnostic, so the same
32
+ * `blurRelativeThreshold` slider drives either. Benchmarked against the
33
+ * hand-labeled recording 2026-07-11 (variance-of-Laplacian best at "clearly
34
+ * blurry vs rest", the energy ratio best at "sharp vs degraded") — see
35
+ * GpsPlusSlamJs_Docs/docs/2026-07-12-0823-blur-metric-toggle-plan.md.
36
+ */
37
+ type BlurMetricId = 'variance-of-laplacian' | 'high-frequency-energy-ratio';
38
+ /** All valid {@link BlurMetricId} values, the default (VoL) first — for
39
+ * consumer-side validation of persisted configs. */
40
+ declare const BLUR_METRIC_IDS: readonly BlurMetricId[];
28
41
  /**
29
42
  * User-/consumer-facing configuration for the image-quality gate. Shared by both
30
43
  * config shapes that carry it — `ImageCaptureConfig` (what `ImageCaptureManager`
@@ -57,6 +70,14 @@ interface QualityFilterConfig {
57
70
  * motion gate's `maxWaitMs`). A sensible value is ~2× the capture interval.
58
71
  */
59
72
  maxWaitMs: number;
73
+ /**
74
+ * Which sharpness metric the blur check scores frames with. **Optional**
75
+ * for backward compatibility with configs persisted before the toggle
76
+ * existed: `undefined` means `'variance-of-laplacian'` (the original
77
+ * behavior) — resolve via {@link blurMetricScorer}, never by reading this
78
+ * field directly.
79
+ */
80
+ blurMetric?: BlurMetricId;
60
81
  }
61
82
  /**
62
83
  * Default image-quality configuration. **Disabled by default** (plan §10): the
@@ -108,6 +129,27 @@ declare function rgbaToGrayscale(rgba: Uint8Array | Uint8ClampedArray): Uint8Cla
108
129
  * an empty buffer.
109
130
  */
110
131
  declare function meanLuminance(rgba: Uint8Array | Uint8ClampedArray): number;
132
+ /**
133
+ * Frequency-domain focus measure: the fraction of non-DC spectral energy at
134
+ * normalized radial frequency ≥ `cutoff` (default 0.3), computed by FFT over
135
+ * the centered largest power-of-two crop (needs ≥ 8×8, else returns 0).
136
+ * In [0, 1]; higher ⇒ sharper. Unlike {@link sharpnessScore} it is invariant
137
+ * to brightness shift AND contrast scale (it is a ratio). Ported from the
138
+ * investigation benchmark (2026-07-12 toggle plan) where it won the
139
+ * "sharp vs degraded" boundary (AUC 0.838 vs 0.750).
140
+ *
141
+ * Defensive contract identical to {@link sharpnessScore}: non-integer or
142
+ * < 3×3 dims, or a buffer shorter than `width·height`, return 0.
143
+ */
144
+ declare function highFrequencyEnergyRatio(gray: Uint8Array | Uint8ClampedArray | readonly number[], width: number, height: number, cutoff?: number): number;
145
+ /**
146
+ * Resolve a {@link BlurMetricId} to its scoring function. `undefined` or an
147
+ * unknown id (e.g. from a persisted config written by a newer/older app
148
+ * version) resolves to {@link sharpnessScore} — the pre-toggle behavior.
149
+ * The (untestable) recorder worker calls this so the mapping stays here,
150
+ * where tests can pin it.
151
+ */
152
+ declare function blurMetricScorer(metric: BlurMetricId | undefined): (gray: Uint8Array | Uint8ClampedArray | readonly number[], width: number, height: number) => number;
111
153
  /** Reason a frame was rejected by the quality gate, or `null` when accepted. */
112
154
  type QualityRejectReason = 'black' | 'blurry';
113
155
  /** Outcome of evaluating one frame against the quality gate. */
@@ -155,4 +197,4 @@ declare class ImageQualityGate {
155
197
  reset(): void;
156
198
  }
157
199
  //#endregion
158
- export { QualityFilterConfig as a, meanLuminance as c, ImageQualityGate as i, rgbaToGrayscale as l, DEFAULT_SHARPNESS_HISTORY_SIZE as n, QualityRejectReason as o, DEFAULT_SHARPNESS_MIN_SAMPLES as r, QualityVerdict as s, DEFAULT_QUALITY_FILTER as t, sharpnessScore as u };
200
+ export { DEFAULT_SHARPNESS_MIN_SAMPLES as a, QualityRejectReason as c, highFrequencyEnergyRatio as d, meanLuminance as f, DEFAULT_SHARPNESS_HISTORY_SIZE as i, QualityVerdict as l, sharpnessScore as m, BlurMetricId as n, ImageQualityGate as o, rgbaToGrayscale as p, DEFAULT_QUALITY_FILTER as r, QualityFilterConfig as s, BLUR_METRIC_IDS as t, blurMetricScorer as u };
@@ -1,11 +1,9 @@
1
- import { t as GridCell } from "./bresenham3d-DGc4nIb-.js";
2
- import { a as QrPoseSolution, i as Pose, r as Point2, t as CameraIntrinsics } from "./qr-pose-y3vaEd6x.js";
3
- import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend-BPURlh3S.js";
1
+ import { t as GridCell } from "./bresenham3d-D-t9i_b5.js";
2
+ import { a as QrPoseSolution, i as Pose, r as Point2, t as CameraIntrinsics } from "./qr-pose-21fRDcFO.js";
3
+ import { a as QrFrontEnd, o as RgbaImage } from "./qr-frontend-QzKZSqB-.js";
4
4
  import { Quaternion, RecordGpsEventPayload, Vector3 } from "gps-plus-slam-js";
5
5
 
6
- //#region ../src/ar/qr-gps-vote.d.ts
7
- /** Mean meters per degree of latitude (WGS-84 average). */
8
- declare const METERS_PER_DEG_LAT = 111320;
6
+ //#region ../src/ar/qr/qr-gps-vote.d.ts
9
7
  /** Absolute geo pose of the printed QR, from the level file. */
10
8
  interface QrGeoPose {
11
9
  lat: number;
@@ -99,7 +97,7 @@ declare function offsetGeo(center: QrGeoPose, enu: Enu): {
99
97
  */
100
98
  declare function buildQrGpsVotes(input: QrGpsVoteInput): RecordGpsEventPayload[];
101
99
  //#endregion
102
- //#region ../src/ar/qr-level.d.ts
100
+ //#region ../src/ar/qr/qr-level.d.ts
103
101
  /**
104
102
  * A validated QR level file.
105
103
  *
@@ -152,7 +150,7 @@ interface FetchQrLevelOptions {
152
150
  */
153
151
  declare function fetchQrLevel(url: string, options?: FetchQrLevelOptions): Promise<QrLevel>;
154
152
  //#endregion
155
- //#region ../src/ar/qr-tracking-controller.d.ts
153
+ //#region ../src/ar/qr/qr-tracking-controller.d.ts
156
154
  type QrTrackingStatus = 'idle' | 'scanning' | 'loading-level' | 'tracking' | 'error';
157
155
  /** Inputs to the injected pose solve (so the controller doesn't import OpenCV). */
158
156
  interface QrSolvePoseInput {
@@ -165,7 +163,7 @@ interface QrSolvePoseInput {
165
163
  * Emitted on every lock, INDEPENDENTLY of the GPS vote (Note 3). The app maps
166
164
  * this onto `recordQrDetection` of the `qrDetected` slice. Kept structural (no
167
165
  * import of the state slice) so the `ar` layer never depends on `state` — that
168
- * would close a cycle (`state/qr-detected-slice` already imports `ar/qr-pose`).
166
+ * would close a cycle (`state/qr-detected-slice` already imports `ar/qr/qr-pose`).
169
167
  */
170
168
  interface QrDetectionEvent {
171
169
  /** Decoded payload (text/URL) — the marker key. */
@@ -249,69 +247,7 @@ interface QrTrackingController {
249
247
  }
250
248
  declare function createQrTrackingController(config: QrTrackingControllerConfig): QrTrackingController;
251
249
  //#endregion
252
- //#region ../src/ar/camera-frame-source.d.ts
253
- /** Tuning for the camera frame source. */
254
- interface CameraFrameSourceConfig {
255
- /**
256
- * Minimum interval between captures in milliseconds. Default 125 ms (≈ 8 Hz),
257
- * the plan §9 5–10 Hz detection target. The capture (and therefore the blit)
258
- * fires at most once per `intervalMs`.
259
- */
260
- intervalMs: number;
261
- }
262
- /** Injected I/O for the camera frame source. */
263
- interface CameraFrameSourceCallbacks {
264
- /**
265
- * Capture the current XR frame as top-left-origin RGBA, or `null` when no
266
- * frame is available (no camera texture yet, GL failure). This is the GPU
267
- * blit + readback; the source only invokes it at the throttled cadence so
268
- * the cost is bounded. A `null` return does NOT consume the interval slot —
269
- * the next frame retries immediately (a missing texture is transient).
270
- */
271
- capture: () => RgbaImage | null;
272
- /** Receive a throttled, successfully-captured frame. */
273
- onCapture: (image: RgbaImage) => void;
274
- }
275
- /**
276
- * Throttled RGBA capturer. Construct with the injected `capture`/`onCapture`
277
- * pair, `start()`, then call `onFrame(timestamp)` once per XR frame.
278
- */
279
- declare class CameraFrameSource {
280
- private readonly callbacks;
281
- private readonly config;
282
- private running;
283
- private captureCount;
284
- private lastCaptureTime;
285
- constructor(callbacks: CameraFrameSourceCallbacks, config?: Partial<CameraFrameSourceConfig>);
286
- /** Begin throttling. Resets the cadence so the first tick captures. */
287
- start(): void;
288
- /** Stop capturing. `onFrame` becomes a no-op until `start()` is called again. */
289
- stop(): void;
290
- isRunning(): boolean;
291
- /** Number of frames successfully captured + delivered since `start()`. */
292
- getFrameCount(): number;
293
- getConfig(): CameraFrameSourceConfig;
294
- /**
295
- * Apply partial config (e.g. the app's detection cadence). Invalid values
296
- * are ignored defensively — `intervalMs` requires a finite positive number.
297
- */
298
- updateConfig(config: Partial<CameraFrameSourceConfig>): void;
299
- /**
300
- * Per-XR-frame tick. Captures + delivers a frame at most once per
301
- * `intervalMs`; otherwise a cheap no-op so it is safe to call every frame.
302
- *
303
- * @param timestamp - monotonic frame time in ms (the XR `time` argument).
304
- */
305
- onFrame(timestamp: number): void;
306
- /**
307
- * Run the injected capture, guarded so a blit failure (e.g. GL context loss)
308
- * can never throw out of the XR frame loop — it degrades to "no frame this
309
- * tick", exactly like a missing texture.
310
- */
311
- private captureSafely;
312
- }
313
- //#endregion
314
- //#region ../src/ar/detection-scheduler.d.ts
250
+ //#region ../src/ar/qr/detection-scheduler.d.ts
315
251
  interface DetectionSchedulerConfig<TResult, TImage = RgbaImage> {
316
252
  /** The full detect→solve step; resolves to a result or `null` (no hit / rejected). */
317
253
  detect: (image: TImage) => Promise<TResult | null>;
@@ -346,7 +282,7 @@ type QrDetectionScheduler = DetectionScheduler<RgbaImage>;
346
282
  /** The QR path: a detection scheduler whose result is a {@link QrPoseSolution}. */
347
283
  declare function createQrDetectionScheduler(config: QrDetectionSchedulerConfig): QrDetectionScheduler;
348
284
  //#endregion
349
- //#region ../src/ar/qr-occupancy-check.d.ts
285
+ //#region ../src/ar/qr/qr-occupancy-check.d.ts
350
286
  /**
351
287
  * The slice of `OccupancyGrid` this check needs. Declared structurally so the
352
288
  * real grid satisfies it and tests can pass a tiny synthetic stand-in.
@@ -396,4 +332,4 @@ interface QrPlausibilityOptions {
396
332
  */
397
333
  declare function checkQrPlausibility(qrCenterWorld: Vector3, cameraPosWorld: Vector3, grid: OccupancySurface, options?: QrPlausibilityOptions): QrPlausibility;
398
334
  //#endregion
399
- export { QrGpsVoteInput as A, QrLevel as C, Enu as D, parseQrLevel as E, localPlaneToEnu as M, offsetGeo as N, METERS_PER_DEG_LAT as O, FetchQrLevelOptions as S, fetchQrLevel as T, QrTrackingController as _, checkQrPlausibility as a, createQrTrackingController as b, QrDetectionScheduler as c, createQrDetectionScheduler as d, CameraFrameSource as f, QrSolvePoseInput as g, QrDetectionEvent as h, QrPlausibilityVerdict as i, buildQrGpsVotes as j, QrGeoPose as k, QrDetectionSchedulerConfig as l, CameraFrameSourceConfig as m, QrPlausibility as n, DetectionScheduler as o, CameraFrameSourceCallbacks as p, QrPlausibilityOptions as r, DetectionSchedulerConfig as s, OccupancySurface as t, createDetectionScheduler as u, QrTrackingControllerConfig as v, QrLevelValidationError as w, FetchLike as x, QrTrackingStatus as y };
335
+ export { parseQrLevel as C, buildQrGpsVotes as D, QrGpsVoteInput as E, localPlaneToEnu as O, fetchQrLevel as S, QrGeoPose as T, createQrTrackingController as _, checkQrPlausibility as a, QrLevel as b, QrDetectionScheduler as c, createQrDetectionScheduler as d, QrDetectionEvent as f, QrTrackingStatus as g, QrTrackingControllerConfig as h, QrPlausibilityVerdict as i, offsetGeo as k, QrDetectionSchedulerConfig as l, QrTrackingController as m, QrPlausibility as n, DetectionScheduler as o, QrSolvePoseInput as p, QrPlausibilityOptions as r, DetectionSchedulerConfig as s, OccupancySurface as t, createDetectionScheduler as u, FetchLike as v, Enu as w, QrLevelValidationError as x, FetchQrLevelOptions as y };
@@ -1,4 +1,4 @@
1
- import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-D1QSMuKu.js";
1
+ import { N as CombinedRootState, m as TrackingQualityReport } from "./create-slam-app-store-DFm5K9Ob.js";
2
2
  import { Add2dImagePayload, GpsPoint as GpsPoint$1, LatLong as LatLong$1, RawDeviceOrientation, RawGpsPoint as RawGpsPoint$1, RecordGpsEventPayload as RecordGpsEventPayload$1, add2dImage, calcRelativeCoordsInMeters, recordGpsEvent as recordGpsEvent$1, setZeroPos as setZeroPos$1 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/state/onboarding-guidance.d.ts
@@ -0,0 +1,64 @@
1
+ import { o as RgbaImage } from "./qr-frontend-QzKZSqB-.js";
2
+ //#region ../src/ar/camera-frame-source.d.ts
3
+ /** Tuning for the camera frame source. */
4
+ interface CameraFrameSourceConfig {
5
+ /**
6
+ * Minimum interval between captures in milliseconds. Default 125 ms (≈ 8 Hz),
7
+ * the plan §9 5–10 Hz detection target. The capture (and therefore the blit)
8
+ * fires at most once per `intervalMs`.
9
+ */
10
+ intervalMs: number;
11
+ }
12
+ /** Injected I/O for the camera frame source. */
13
+ interface CameraFrameSourceCallbacks {
14
+ /**
15
+ * Capture the current XR frame as top-left-origin RGBA, or `null` when no
16
+ * frame is available (no camera texture yet, GL failure). This is the GPU
17
+ * blit + readback; the source only invokes it at the throttled cadence so
18
+ * the cost is bounded. A `null` return does NOT consume the interval slot —
19
+ * the next frame retries immediately (a missing texture is transient).
20
+ */
21
+ capture: () => RgbaImage | null;
22
+ /** Receive a throttled, successfully-captured frame. */
23
+ onCapture: (image: RgbaImage) => void;
24
+ }
25
+ /**
26
+ * Throttled RGBA capturer. Construct with the injected `capture`/`onCapture`
27
+ * pair, `start()`, then call `onFrame(timestamp)` once per XR frame.
28
+ */
29
+ declare class CameraFrameSource {
30
+ private readonly callbacks;
31
+ private readonly config;
32
+ private running;
33
+ private captureCount;
34
+ private lastCaptureTime;
35
+ constructor(callbacks: CameraFrameSourceCallbacks, config?: Partial<CameraFrameSourceConfig>);
36
+ /** Begin throttling. Resets the cadence so the first tick captures. */
37
+ start(): void;
38
+ /** Stop capturing. `onFrame` becomes a no-op until `start()` is called again. */
39
+ stop(): void;
40
+ isRunning(): boolean;
41
+ /** Number of frames successfully captured + delivered since `start()`. */
42
+ getFrameCount(): number;
43
+ getConfig(): CameraFrameSourceConfig;
44
+ /**
45
+ * Apply partial config (e.g. the app's detection cadence). Invalid values
46
+ * are ignored defensively — `intervalMs` requires a finite positive number.
47
+ */
48
+ updateConfig(config: Partial<CameraFrameSourceConfig>): void;
49
+ /**
50
+ * Per-XR-frame tick. Captures + delivers a frame at most once per
51
+ * `intervalMs`; otherwise a cheap no-op so it is safe to call every frame.
52
+ *
53
+ * @param timestamp - monotonic frame time in ms (the XR `time` argument).
54
+ */
55
+ onFrame(timestamp: number): void;
56
+ /**
57
+ * Run the injected capture, guarded so a blit failure (e.g. GL context loss)
58
+ * can never throw out of the XR frame loop — it degrades to "no frame this
59
+ * tick", exactly like a missing texture.
60
+ */
61
+ private captureSafely;
62
+ }
63
+ //#endregion
64
+ export { CameraFrameSourceCallbacks as n, CameraFrameSourceConfig as r, CameraFrameSource as t };