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
@@ -1,5 +1,5 @@
1
- import { t as GridCell } from "./bresenham3d-DGc4nIb-.js";
2
- import { a as RgbTuple, i as DepthSample } from "./ar-types-Cc5yvBwn.js";
1
+ import { t as GridCell } from "./bresenham3d-D-t9i_b5.js";
2
+ import { a as RgbTuple, i as DepthSample } from "./ar-types-D6PYS4bc.js";
3
3
  import { Vector3 } from "gps-plus-slam-js";
4
4
 
5
5
  //#region ../src/ar/cell-key.d.ts
@@ -51,7 +51,7 @@ declare class OccupancyGrid {
51
51
  * an already-settled cell (count `> MAX_RELEVANT_COUNT`) does NOT bump it, so a
52
52
  * consumer can cheaply skip a full re-derive (cube refresh / occluder re-mesh)
53
53
  * when the revision is unchanged — the dominant idle-time saving over a long
54
- * session (see `2026-06-30-occluder-tuning-followups.md`).
54
+ * session (see `2026-06-30-0829-occluder-tuning-followups.md`).
55
55
  */
56
56
  private revision;
57
57
  /**
@@ -1,4 +1,4 @@
1
- import { t as GridCell } from "./bresenham3d-DGc4nIb-.js";
1
+ import { t as GridCell } from "./bresenham3d-D-t9i_b5.js";
2
2
  import { Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/occupancy-mesher.d.ts
@@ -51,14 +51,9 @@ type MeshMode = 'per-face' | 'greedy' | 'smooth' | 'corner-fit';
51
51
  /** Options for {@link meshOccupiedCells}. */
52
52
  interface MeshOccupiedCellsOptions {
53
53
  /**
54
- * @deprecated Prefer {@link MeshOccupiedCellsOptions.mode}. Back-compat shim:
55
- * when `mode` is unset, `greedy:true` `'greedy'`, otherwise `'per-face'`.
56
- * Kept so existing callers/tests keep working unchanged.
57
- */
58
- readonly greedy?: boolean;
59
- /**
60
- * The mesher strategy. Takes precedence over {@link greedy}. Default resolves
61
- * via the `greedy` shim above (so omitting both ⇒ `'per-face'`).
54
+ * The mesher strategy. Default `'per-face'`. (The deprecated boolean
55
+ * `greedy` shim was removed 2026-07-10, quality-review C-3 it had zero
56
+ * production callers; use `{ mode: 'greedy' }`.)
62
57
  *
63
58
  * Note: every mode still returns one `aabbs` box per cell (a 3-D greedy box
64
59
  * merge for fewer colliders is a separate follow-on — see the plan §3E).
@@ -1,5 +1,5 @@
1
- import { n as SessionMetadata } from "./opfs-storage-CTkxvxN4.js";
2
- import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-sEtmM4yW.js";
1
+ import { n as SessionMetadata } from "./opfs-storage-S_odkCk1.js";
2
+ import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-BX7egQKi.js";
3
3
 
4
4
  //#region ../src/storage/opfs-storage-backend.d.ts
5
5
  declare class OpfsStorageBackend implements StorageBackend {
@@ -1,4 +1,4 @@
1
- import { n as StorageBackend } from "./storage-backend-sEtmM4yW.js";
1
+ import { n as StorageBackend } from "./storage-backend-BX7egQKi.js";
2
2
  import { Middleware } from "@reduxjs/toolkit";
3
3
 
4
4
  //#region ../src/state/persistence-middleware.d.ts
@@ -50,6 +50,16 @@ declare function slicePrefixOf(actionType: string): string;
50
50
  * - Uses 1-based indexing for action files (000001.json, 000002.json, …).
51
51
  * - Each middleware instance maintains its own action index (Bug 10 fix).
52
52
  */
53
- declare function createPersistenceMiddleware(options: PersistenceMiddlewareOptions): Middleware;
53
+ /**
54
+ * The persistence middleware plus its drain hook: `flushPendingWrites`
55
+ * resolves once every queued action write has settled. The stop flow MUST
56
+ * await it before anything reads the session's `actions/` (final sync, ZIP
57
+ * export) — the queue is async, so a write enqueued moments before Stop
58
+ * could otherwise land after the export enumerated the directory.
59
+ */
60
+ type PersistenceMiddleware = Middleware & {
61
+ flushPendingWrites: () => Promise<void>;
62
+ };
63
+ declare function createPersistenceMiddleware(options: PersistenceMiddlewareOptions): PersistenceMiddleware;
54
64
  //#endregion
55
- export { createPersistenceMiddleware as n, slicePrefixOf as r, PersistenceMiddlewareOptions as t };
65
+ export { slicePrefixOf as i, PersistenceMiddlewareOptions as n, createPersistenceMiddleware as r, PersistenceMiddleware as t };
@@ -1,7 +1,7 @@
1
- import { n as OpenCvPnpResult, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics } from "./qr-pose-y3vaEd6x.js";
1
+ import { n as OpenCvPnpResult, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics } from "./qr-pose-21fRDcFO.js";
2
2
  import { Vector3 } from "gps-plus-slam-js";
3
3
 
4
- //#region ../src/ar/planar-pnp.d.ts
4
+ //#region ../src/ar/qr/planar-pnp.d.ts
5
5
  /** A 3×3 matrix in ROW-MAJOR order: [r00,r01,r02, r10,r11,r12, r20,r21,r22]. */
6
6
  type Mat3 = readonly [number, number, number, number, number, number, number, number, number];
7
7
  /** A 3×3 homography in row-major order (same layout as {@link Mat3}). */
@@ -1,26 +1,12 @@
1
- import "./ar/camera-blit-capture.js";
2
- import "./ar/chromium-camera-access-workaround.js";
3
- import "./ar/capture-failure-tracker.js";
4
- import "./ar/depth-sampler.js";
5
- import "./ar/depth-unprojection.js";
6
- import "./qr-size-measurer-DLb33geH.js";
7
- import "./ar/qr-size-depth-context.js";
8
- import { buildObjectPoints, transformPoint } from "./ar/qr-pose.js";
9
- import "./ar/qr-derived-pose.js";
10
- import "./ar/webxr-nue-basis.js";
11
- import "./ar/qr-debug-view.js";
12
- import { n as createDetectionScheduler } from "./qr-detection-controller-B-tLVd-S.js";
13
- import "./qr-pose-aggregation-DBiaLW0O.js";
14
- import "./webxr-session-BCP2XK7k.js";
15
- import "./ar/occupancy-grid.js";
16
- import "./ar/occupancy-mesher.js";
17
- import "./ar/frame-loop.js";
18
- import "./ar/xr-frame-loop.js";
19
- import "./image-capture-DVcuqMtX.js";
20
- import "./ar/xr-camera-texture.js";
21
- import "./ar/enable-gps-ar.js";
22
- import "./ar/replay-scene.js";
23
- //#region ../src/ar/qr-level.ts
1
+ import "./qr-size-measurer-zZB9S1va.js";
2
+ import "./ar/qr/qr-size-depth-context.js";
3
+ import { buildObjectPoints, transformPoint } from "./ar/qr/qr-pose.js";
4
+ import "./ar/qr/qr-derived-pose.js";
5
+ import "./ar/qr/qr-debug-view.js";
6
+ import { n as createDetectionScheduler } from "./qr-detection-controller-DXc1yHRf.js";
7
+ import "./qr-pose-aggregation-Cp0Mtg_j.js";
8
+ import { calcGpsCoords } from "gps-plus-slam-js";
9
+ //#region ../src/ar/qr/qr-level.ts
24
10
  /** Thrown when a fetched level file fails validation. */
25
11
  var QrLevelValidationError = class extends Error {
26
12
  constructor(message) {
@@ -107,9 +93,7 @@ async function fetchQrLevel(url, options = {}) {
107
93
  return parseQrLevel(body);
108
94
  }
109
95
  //#endregion
110
- //#region ../src/ar/qr-gps-vote.ts
111
- /** Mean meters per degree of latitude (WGS-84 average). */
112
- const METERS_PER_DEG_LAT = 111320;
96
+ //#region ../src/ar/qr/qr-gps-vote.ts
113
97
  /**
114
98
  * `count` points evenly spaced on a circle of radius `baselineM` in the QR
115
99
  * plane (z = 0), starting at local +x. The symmetric ring's centroid is the QR
@@ -144,12 +128,18 @@ function localPlaneToEnu(localX, localY, headingDeg) {
144
128
  }
145
129
  /** Apply an ENU meter offset to a geo pose (equirectangular; exact enough for sub-meter QR corners). */
146
130
  function offsetGeo(center, enu) {
147
- const dLat = enu.north / METERS_PER_DEG_LAT;
148
- const metersPerDegLon = METERS_PER_DEG_LAT * Math.cos(center.lat * Math.PI / 180);
149
- const dLon = Math.abs(metersPerDegLon) < 1e-9 ? 0 : enu.east / metersPerDegLon;
131
+ const nearPole = Math.abs(Math.cos(center.lat * Math.PI / 180)) < 1e-14;
132
+ const { lat, lon } = calcGpsCoords({
133
+ lat: center.lat,
134
+ lon: center.lon
135
+ }, [
136
+ enu.north,
137
+ enu.up,
138
+ nearPole ? 0 : enu.east
139
+ ]);
150
140
  return {
151
- latitude: center.lat + dLat,
152
- longitude: center.lon + dLon,
141
+ latitude: lat,
142
+ longitude: lon,
153
143
  altitude: center.alt + enu.up
154
144
  };
155
145
  }
@@ -189,7 +179,7 @@ function buildQrGpsVotes(input) {
189
179
  });
190
180
  }
191
181
  //#endregion
192
- //#region ../src/ar/qr-tracking-controller.ts
182
+ //#region ../src/ar/qr/qr-tracking-controller.ts
193
183
  function createQrTrackingController(config) {
194
184
  const { frontEnd, solvePose, fetchLevel, dispatchVotes, onDetection, resolveSizeM, resolveStablePose, getCameraPose, getIntrinsics, syntheticAccuracyM, voteBaselineM, voteCount, isPlausible, onStatus, onLocked, onError, minIntervalMs = 150, requiredLockCount = 3, now } = config;
195
185
  const timestampNow = now ?? (() => Date.now());
@@ -304,7 +294,7 @@ function createQrTrackingController(config) {
304
294
  };
305
295
  }
306
296
  //#endregion
307
- //#region ../src/ar/qr-occupancy-check.ts
297
+ //#region ../src/ar/qr/qr-occupancy-check.ts
308
298
  const DEFAULTS = {
309
299
  surfaceToleranceCells: 1.5,
310
300
  minObservations: 1,
@@ -380,4 +370,4 @@ function checkQrPlausibility(qrCenterWorld, cameraPosWorld, grid, options = {})
380
370
  };
381
371
  }
382
372
  //#endregion
383
- export { localPlaneToEnu as a, fetchQrLevel as c, buildQrGpsVotes as i, parseQrLevel as l, createQrTrackingController as n, offsetGeo as o, METERS_PER_DEG_LAT as r, QrLevelValidationError as s, checkQrPlausibility as t };
373
+ export { offsetGeo as a, parseQrLevel as c, localPlaneToEnu as i, createQrTrackingController as n, QrLevelValidationError as o, buildQrGpsVotes as r, fetchQrLevel as s, checkQrPlausibility as t };
@@ -1,7 +1,7 @@
1
- import { i as Pose } from "./qr-pose-y3vaEd6x.js";
1
+ import { i as Pose } from "./qr-pose-21fRDcFO.js";
2
2
  import { Object3D } from "three";
3
3
 
4
- //#region ../src/ar/qr-debug-view.d.ts
4
+ //#region ../src/ar/qr/qr-debug-view.d.ts
5
5
  interface QrDebugView {
6
6
  /**
7
7
  * Glue the debug objects to a solved pose. The **axis** is placed from the
@@ -1,8 +1,8 @@
1
- import { i as Pose, r as Point2, s as SolvePnpSquare } from "./qr-pose-y3vaEd6x.js";
2
- import { a as QrSizeMeasurerOptions, n as QrSizeDepthContext } from "./qr-size-measurer-DxiMqRUw.js";
1
+ import { i as Pose, r as Point2, s as SolvePnpSquare } from "./qr-pose-21fRDcFO.js";
2
+ import { a as QrSizeMeasurerOptions, n as QrSizeDepthContext } from "./qr-size-measurer-rVFf4AdM.js";
3
3
  import { Matrix4 } from "gps-plus-slam-js";
4
4
 
5
- //#region ../src/ar/qr-derived-pose.d.ts
5
+ //#region ../src/ar/qr/qr-derived-pose.d.ts
6
6
  /**
7
7
  * One RAW QR observation — the authoritative recorded shape (D-A). Everything
8
8
  * the derive layer needs to recompute size + pose is here EXCEPT depth (injected
@@ -1,9 +1,10 @@
1
- import { i as Pose, r as Point2 } from "./qr-pose-y3vaEd6x.js";
2
- import { l as QrSizeEstimate } from "./qr-size-measurer-DxiMqRUw.js";
3
- import { i as RawQrObservation, n as DerivedQrPlacement, t as DeriveQrPoseDeps } from "./qr-derived-pose-BwNWn8oV.js";
4
- import { a as QrPoseStability, o as QrPoseStabilityOptions } from "./qr-pose-aggregation-CypnmjA-.js";
1
+ import { i as Pose, r as Point2 } from "./qr-pose-21fRDcFO.js";
2
+ import { l as QrSizeEstimate } from "./qr-size-measurer-rVFf4AdM.js";
3
+ import { i as RawQrObservation, n as DerivedQrPlacement, t as DeriveQrPoseDeps } from "./qr-derived-pose-DZPxZd9C.js";
4
+ import { a as QrPoseStability, o as QrPoseStabilityOptions } from "./qr-pose-aggregation-mABSN0AW.js";
5
5
  import { Matrix4, Vector3 } from "gps-plus-slam-js";
6
6
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
7
+ import * as _$redux from "redux";
7
8
 
8
9
  //#region ../src/state/qr-detected-slice.d.ts
9
10
  /**
@@ -27,7 +28,7 @@ interface QrDetectionEntry {
27
28
  * this MUST be **EPOCH ms** (`Date.now()`), because the depth stream it joins
28
29
  * against is epoch (`DepthSample.timestamp = performance.timeOrigin + frameTs`,
29
30
  * `ar/depth-sampler.ts`) and the size as-of join pairs this with the depth
30
- * sample whose timestamp is `≤` this one (`ar/qr-derived-pose`). A relative
31
+ * sample whose timestamp is `≤` this one (`ar/qr/qr-derived-pose`). A relative
31
32
  * `performance.now()` stamp (~1e5) never satisfies that join, so the size — and
32
33
  * the debug cube — never resolve. See the recorder live-QR plan open topic A.
33
34
  */
@@ -71,7 +72,7 @@ declare const recordQrDetection: _$_reduxjs_toolkit0.ActionCreatorWithPayload<Qr
71
72
  }, "qrDetected/pruneQrDetections">, clearQrMarker: _$_reduxjs_toolkit0.ActionCreatorWithPayload<{
72
73
  text: string;
73
74
  }, "qrDetected/clearQrMarker">, clearAllQrMarkers: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"qrDetected/clearAllQrMarkers">, setQrMaxHistory: _$_reduxjs_toolkit0.ActionCreatorWithPayload<number, "qrDetected/setQrMaxHistory">;
74
- declare const qrDetectedReducer: _$_reduxjs_toolkit0.Reducer<QrDetectedState>;
75
+ declare const qrDetectedReducer: _$redux.Reducer<QrDetectedState>;
75
76
  /** Minimal root shape the selectors need (avoids a store import cycle). */
76
77
  interface RootWithQrDetected {
77
78
  qrDetected: QrDetectedState;
@@ -117,7 +118,7 @@ declare function medianQrPosition(entries: readonly QrDetectionEntry[]): Vector3
117
118
  * buffer (NOT stored separately — the detections are the source of truth, unlike
118
119
  * the depth-measured size which is accumulated outside the buffer). Mirrors the
119
120
  * size lifecycle's `unknown → measuring → stable` shape so the HUD can show
120
- * "converging…" vs "stable". See `ar/qr-pose-aggregation.ts`.
121
+ * "converging…" vs "stable". See `ar/qr/qr-pose-aggregation.ts`.
121
122
  */
122
123
  declare function selectQrPoseStability(state: RootWithQrDetected, text: string, options?: QrPoseStabilityOptions): QrPoseStability;
123
124
  /**
@@ -141,7 +142,7 @@ declare function selectStableQrPose(state: RootWithQrDetected, text: string, opt
141
142
  * `null` when the marker is unknown, has no raw observations, cannot be sized
142
143
  * yet, or PnP rejects the latest quad — the re-test-friendly replacement for the
143
144
  * once-stored solved pose. Runs identically live and on replay (only
144
- * `deps.resolveDepthAt` differs). See `ar/qr-derived-pose.ts`.
145
+ * `deps.resolveDepthAt` differs). See `ar/qr/qr-derived-pose.ts`.
145
146
  */
146
147
  declare function selectSolvedQrPose(state: RootWithQrDetected, text: string, deps: DeriveQrPoseDeps): Pose | null;
147
148
  /**
@@ -1,9 +1,9 @@
1
- import { i as Pose } from "./qr-pose-y3vaEd6x.js";
2
- import { i as QrDetection, o as RgbaImage } from "./qr-frontend-BPURlh3S.js";
3
- import { i as RawQrObservation } from "./qr-derived-pose-BwNWn8oV.js";
1
+ import { i as Pose } from "./qr-pose-21fRDcFO.js";
2
+ import { i as QrDetection, o as RgbaImage } from "./qr-frontend-QzKZSqB-.js";
3
+ import { i as RawQrObservation } from "./qr-derived-pose-DZPxZd9C.js";
4
4
  import { Matrix4 } from "gps-plus-slam-js";
5
5
 
6
- //#region ../src/ar/qr-detection-controller.d.ts
6
+ //#region ../src/ar/qr/qr-detection-controller.d.ts
7
7
  /** Minimal scan-status machine (NO QR detail — per the recorder scope). */
8
8
  type QrScanStatus = 'idle' | 'scanning' | 'tracking';
9
9
  /** Sink for one recorded RAW observation — e.g. dispatch `recordQrDetection`. */
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "./utils/logger.js";
2
- import { validateQuad } from "./ar/qr-pose.js";
3
- //#region ../src/ar/detection-scheduler.ts
2
+ import { validateQuad } from "./ar/qr/qr-pose.js";
3
+ //#region ../src/ar/qr/detection-scheduler.ts
4
4
  const log = createLogger("DetectionScheduler");
5
5
  const defaultNow = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
6
6
  function createDetectionScheduler(config) {
@@ -58,7 +58,7 @@ function createQrDetectionScheduler(config) {
58
58
  return createDetectionScheduler(config);
59
59
  }
60
60
  //#endregion
61
- //#region ../src/ar/qr-detection-controller.ts
61
+ //#region ../src/ar/qr/qr-detection-controller.ts
62
62
  /**
63
63
  * Create the thin RAW producer. On each accepted decode it emits a
64
64
  * {@link RawQrObservation} via `recordDetection`; it does not size or solve.
@@ -1,6 +1,6 @@
1
- import { r as Point2 } from "./qr-pose-y3vaEd6x.js";
1
+ import { r as Point2 } from "./qr-pose-21fRDcFO.js";
2
2
 
3
- //#region ../src/ar/qr-frontend.d.ts
3
+ //#region ../src/ar/qr/qr-frontend.d.ts
4
4
  /** Raw RGBA pixels of the frame fed to detection (top-left origin). */
5
5
  interface RgbaImage {
6
6
  data: Uint8ClampedArray;
@@ -1,6 +1,6 @@
1
1
  import { Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
2
2
 
3
- //#region ../src/ar/qr-pose.d.ts
3
+ //#region ../src/ar/qr/qr-pose.d.ts
4
4
  /** A 2D point in image/pixel space (top-left origin, x right, y down). */
5
5
  interface Point2 {
6
6
  x: number;
@@ -1,9 +1,10 @@
1
- import { t as geodesicAngleRad } from "./geodesic-angle-BTldfFgs.js";
1
+ import { n as lowerMedian } from "./median-DDBrZGP0.js";
2
+ import { t as geodesicAngleRad } from "./geodesic-angle-CZ_Ow90I.js";
2
3
  import { quat } from "gl-matrix";
3
- //#region ../src/ar/qr-pose-aggregation.ts
4
+ //#region ../src/ar/qr/qr-pose-aggregation.ts
4
5
  /**
5
6
  * QR pose aggregation — sliding-window pose stabilization
6
- * (docs `2026-06-16-followup-qr-pose-stabilization-sliding-window.md`).
7
+ * (docs `2026-06-16-0858-qr-pose-stabilization-sliding-window-followup.md`).
7
8
  *
8
9
  * Pure, device-free, store-free robust aggregation of a STATIC fiducial's pose
9
10
  * across a short sliding window of detections. A QR is static in the world, so
@@ -118,17 +119,11 @@ function averageRotation(quats, options = {}) {
118
119
  maxAngleDeg: refined.maxAngleRad * RAD2DEG
119
120
  };
120
121
  }
121
- /** Per-axis median of a numeric list (lower-middle for even n, matching
122
- * `medianQrPosition` in the slice so the two agree on the same data). */
123
- function medianOf(values) {
124
- const sorted = [...values].sort((a, b) => a - b);
125
- return sorted[Math.floor((sorted.length - 1) / 2)];
126
- }
127
122
  function medianPosition(positions) {
128
123
  return [
129
- medianOf(positions.map((p) => p[0])),
130
- medianOf(positions.map((p) => p[1])),
131
- medianOf(positions.map((p) => p[2]))
124
+ lowerMedian(positions.map((p) => p[0])),
125
+ lowerMedian(positions.map((p) => p[1])),
126
+ lowerMedian(positions.map((p) => p[2]))
132
127
  ];
133
128
  }
134
129
  /** Max absolute per-axis deviation from `center` across all positions. */
@@ -1,7 +1,7 @@
1
- import { i as Pose } from "./qr-pose-y3vaEd6x.js";
1
+ import { i as Pose } from "./qr-pose-21fRDcFO.js";
2
2
  import { Quaternion } from "gps-plus-slam-js";
3
3
 
4
- //#region ../src/ar/qr-pose-aggregation.d.ts
4
+ //#region ../src/ar/qr/qr-pose-aggregation.d.ts
5
5
  /** Default inlier half-angle (deg) — start ~12°, confirm on device. */
6
6
  declare const DEFAULT_ROTATION_INLIER_ANGLE_DEG = 12;
7
7
  interface AverageRotationOptions {
@@ -1,7 +1,7 @@
1
- import { i as DepthSample } from "./ar-types-Cc5yvBwn.js";
2
- import { n as QrSizeDepthContext } from "./qr-size-measurer-DxiMqRUw.js";
1
+ import { i as DepthSample } from "./ar-types-D6PYS4bc.js";
2
+ import { n as QrSizeDepthContext } from "./qr-size-measurer-rVFf4AdM.js";
3
3
 
4
- //#region ../src/ar/qr-size-depth-context.d.ts
4
+ //#region ../src/ar/qr/qr-size-depth-context.d.ts
5
5
  /**
6
6
  * Build a {@link QrSizeDepthContext} from one depth sample, or `null` when it has
7
7
  * no projection matrix / a singular one (the unprojector cannot be built). The
@@ -1,9 +1,9 @@
1
- import { r as DepthPoint } from "./ar-types-Cc5yvBwn.js";
2
- import { t as DepthUnprojector } from "./depth-unprojection-DRdBU90S.js";
3
- import { r as Point2 } from "./qr-pose-y3vaEd6x.js";
1
+ import { r as DepthPoint } from "./ar-types-D6PYS4bc.js";
2
+ import { t as DepthUnprojector } from "./depth-unprojection-ET3Gwedf.js";
3
+ import { r as Point2 } from "./qr-pose-21fRDcFO.js";
4
4
  import { Vector3 } from "gps-plus-slam-js";
5
5
 
6
- //#region ../src/ar/qr-size-from-depth.d.ts
6
+ //#region ../src/ar/qr/qr-size-from-depth.d.ts
7
7
  /** Where the size lifecycle currently sits for one marker (Note 3 / Note 4). */
8
8
  type QrSizeStatus = /** No size authored and none measured yet — size-dependent features blocked. */'unknown' /** Measurements are accumulating but the estimate has not converged. */ | 'measuring' /** A reliably-estimated (or authored) size — size-dependent features unlock. */ | 'estimated';
9
9
  /** Per-marker physical-size estimate (drives the Note 3 size lifecycle). */
@@ -73,7 +73,7 @@ interface QrSizeAccumulator {
73
73
  }
74
74
  declare function createQrSizeAccumulator(options?: QrSizeAccumulatorOptions): QrSizeAccumulator;
75
75
  //#endregion
76
- //#region ../src/ar/qr-size-measurer.d.ts
76
+ //#region ../src/ar/qr/qr-size-measurer.d.ts
77
77
  /**
78
78
  * Robustness knobs for the depth-at-corners stage (on top of the accumulator
79
79
  * options). QR corners sit on a high-contrast print boundary where the coarse
@@ -1,8 +1,9 @@
1
+ import { t as interpolatingMedian } from "./median-DDBrZGP0.js";
1
2
  import { vec3 } from "gl-matrix";
2
- //#region ../src/ar/qr-size-from-depth.ts
3
+ //#region ../src/ar/qr/qr-size-from-depth.ts
3
4
  /**
4
5
  * QR size from depth — Note 4 of the QR-tracking follow-up plan
5
- * (docs `2026-06-15-followup-qr-tracking-generalization-overlay-and-north.md`).
6
+ * (docs `2026-06-15-1219-qr-tracking-generalization-overlay-and-north-followup.md`).
6
7
  *
7
8
  * MEASURE a QR's printed physical size directly from the depth map, so the
8
9
  * QR content + printed size are irrelevant and `qr.physicalSizeM` need not be
@@ -40,13 +41,6 @@ const PLANE_INLIER_FLOOR_M = .005;
40
41
  function dist(a, b) {
41
42
  return Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
42
43
  }
43
- /** Median of a numeric list (mean of the middle two for even n). */
44
- function median(values) {
45
- const sorted = [...values].sort((a, b) => a - b);
46
- const n = sorted.length;
47
- const mid = n >> 1;
48
- return n % 2 === 1 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
49
- }
50
44
  /**
51
45
  * Estimate a QR's physical side length from one detection's depth samples.
52
46
  *
@@ -109,7 +103,7 @@ function estimateQrSizeFromDepth(corners, interiorSamples, unprojector) {
109
103
  const planeErr = maxPlaneOffset / meanEdge;
110
104
  const quality = Math.max(0, Math.min(1, 1 - Math.max(edgeErr, diagErr, planeErr)));
111
105
  return {
112
- sizeM: median(edges),
106
+ sizeM: interpolatingMedian(edges),
113
107
  quality
114
108
  };
115
109
  }
@@ -250,7 +244,7 @@ function fitPlaneRobust(points) {
250
244
  nx /= len;
251
245
  ny /= len;
252
246
  nz /= len;
253
- const medSq = median(points.map((p) => {
247
+ const medSq = interpolatingMedian(points.map((p) => {
254
248
  const d = nx * (p[0] - a[0]) + ny * (p[1] - a[1]) + nz * (p[2] - a[2]);
255
249
  return d * d;
256
250
  }));
@@ -353,7 +347,7 @@ function estimateQrSizeFromDepthDense(cornerScreens, samples, unprojector) {
353
347
  const planeErr = plane.rms / meanEdge;
354
348
  const quality = Math.max(0, Math.min(1, 1 - Math.max(edgeErr, diagErr, planeErr)));
355
349
  return {
356
- sizeM: median(edges),
350
+ sizeM: interpolatingMedian(edges),
357
351
  quality
358
352
  };
359
353
  }
@@ -369,8 +363,8 @@ function createQrSizeAccumulator(options = {}) {
369
363
  let everConverged = false;
370
364
  function estimate() {
371
365
  if (sizes.length === 0) return { ...UNKNOWN };
372
- const med = median(sizes);
373
- const spreadM = 1.4826 * median(sizes.map((s) => Math.abs(s - med))) / Math.sqrt(sizes.length);
366
+ const med = interpolatingMedian(sizes);
367
+ const spreadM = 1.4826 * interpolatingMedian(sizes.map((s) => Math.abs(s - med))) / Math.sqrt(sizes.length);
374
368
  if (sizes.length >= minSamples && spreadM <= maxSpreadM) everConverged = true;
375
369
  return {
376
370
  status: everConverged ? "estimated" : "measuring",
@@ -395,7 +389,7 @@ function createQrSizeAccumulator(options = {}) {
395
389
  };
396
390
  }
397
391
  //#endregion
398
- //#region ../src/ar/qr-size-measurer.ts
392
+ //#region ../src/ar/qr/qr-size-measurer.ts
399
393
  const EPS = 1e-9;
400
394
  /** Pixel corner → normalized screen point for the given frame. */
401
395
  function toScreen(corner, image) {
@@ -1,5 +1,5 @@
1
- import { N as CombinedRootState } from "./create-slam-app-store-D1QSMuKu.js";
2
- import { i as RecordedAction } from "./zip-reader-BzENzMH6.js";
1
+ import { N as CombinedRootState } from "./create-slam-app-store-DFm5K9Ob.js";
2
+ import { i as RecordedAction } from "./zip-reader-BHc_b_iA.js";
3
3
 
4
4
  //#region ../src/state/recording-replayer.d.ts
5
5
  /**
@@ -1,6 +1,6 @@
1
- import { i as DepthSample } from "./ar-types-Cc5yvBwn.js";
2
- import { y as RecordingOptions } from "./recording-options-DYKWVI93.js";
1
+ import { i as DepthSample } from "./ar-types-D6PYS4bc.js";
3
2
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
3
+ import * as _$redux from "redux";
4
4
 
5
5
  //#region ../src/state/recording-slice.d.ts
6
6
  interface SessionMetadata {
@@ -17,8 +17,13 @@ interface SessionMetadata {
17
17
  startTime: number;
18
18
  deviceInfo?: string;
19
19
  notes?: string;
20
- /** Recording options used for this session (for replay context) */
21
- recordingOptions?: RecordingOptions;
20
+ /**
21
+ * Recording options used for this session (for replay context). Stored
22
+ * OPAQUELY: the recorder owns the concrete `RecordingOptions` type (its
23
+ * settings catalog, `GpsPlusSlamJs_RecorderApp/src/state/recording-options.ts`
24
+ * since the 2026-07-11 G-1 move) and narrows this on read.
25
+ */
26
+ recordingOptions?: Record<string, unknown>;
22
27
  }
23
28
  /**
24
29
  * Payload accepted by {@link startSession}. New callers pass `contextTag`.
@@ -50,6 +55,6 @@ interface RecordingState {
50
55
  latestDepthSample: DepthSample | null;
51
56
  }
52
57
  declare const startSession: _$_reduxjs_toolkit0.ActionCreatorWithPayload<StartSessionPayload, "recording/startSession">, endSession: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"recording/endSession">, recordDepthSample: _$_reduxjs_toolkit0.ActionCreatorWithPayload<DepthSample, "recording/recordDepthSample">, recordWriteFailure: _$_reduxjs_toolkit0.ActionCreatorWithPayload<string, "recording/recordWriteFailure">;
53
- declare const recordingReducer: _$_reduxjs_toolkit0.Reducer<RecordingState>;
58
+ declare const recordingReducer: _$redux.Reducer<RecordingState>;
54
59
  //#endregion
55
60
  export { recordWriteFailure as a, recordDepthSample as i, SessionMetadata as n, recordingReducer as o, endSession as r, startSession as s, RecordingState as t };
@@ -1,4 +1,4 @@
1
- import { i as SlamAppStore } from "./create-slam-app-store-D1QSMuKu.js";
1
+ import { i as SlamAppStore } from "./create-slam-app-store-DFm5K9Ob.js";
2
2
  import { ReducersMapObject } from "@reduxjs/toolkit";
3
3
 
4
4
  //#region ../src/state/replay-engine.d.ts
@@ -1,6 +1,6 @@
1
- import { t as Css3dRendererManager } from "./css3d-renderer-manager-CPpVtvgs.js";
2
- import { t as CameraFollower } from "./camera-follower-DfBm2J5i.js";
3
- import { t as AlignmentLerper } from "./alignment-lerper-gD70k7Fq.js";
1
+ import { t as CameraFollower } from "./camera-follower-CO_ibF2o.js";
2
+ import { t as AlignmentLerper } from "./alignment-lerper-DAHicRON.js";
3
+ import { t as Css3dRendererManager } from "./css3d-renderer-manager-CJjHtCMT.js";
4
4
  import * as THREE from "three";
5
5
  import { OrbitControls } from "three/addons/controls/OrbitControls.js";
6
6
 
@@ -9,6 +9,11 @@ type CameraMode = 'orbit' | 'fps';
9
9
  interface ReplaySceneState {
10
10
  scene: THREE.Scene;
11
11
  arWorldGroup: THREE.Group;
12
+ /**
13
+ * The arpose node (between basisChangeNode and the detached camera slot).
14
+ * Store subscribers write recorded odom poses here during replay.
15
+ */
16
+ arpose: THREE.Object3D;
12
17
  camera: THREE.PerspectiveCamera;
13
18
  renderer: THREE.WebGLRenderer;
14
19
  orbitControls: OrbitControls;
@@ -25,7 +30,8 @@ interface ReplaySceneState {
25
30
  * - Creates the scene hierarchy via createSceneHierarchy()
26
31
  * - Reparents camera from arWorldGroup to scene root (Risk R5)
27
32
  * - Creates a WebGLRenderer WITHOUT WebXR
28
- * - Registers scene with module-global getters (Risk R1)
33
+ * - Keeps its own scene/arWorldGroup/arpose/camera references (returned
34
+ * here and via getReplayState()) — nothing is written into webxr-session
29
35
  * - Inserts canvas into the provided container
30
36
  * - Starts a requestAnimationFrame render loop
31
37
  * - Sets up OrbitControls as default camera mode
@@ -37,6 +43,7 @@ interface ReplaySceneState {
37
43
  declare function initReplayScene(container: HTMLElement): {
38
44
  scene: THREE.Scene;
39
45
  arWorldGroup: THREE.Group;
46
+ arpose: THREE.Object3D;
40
47
  camera: THREE.PerspectiveCamera;
41
48
  renderer: THREE.WebGLRenderer;
42
49
  };
@@ -47,7 +54,7 @@ declare function initReplayScene(container: HTMLElement): {
47
54
  * - Disposes renderer (frees GPU resources)
48
55
  * - Disposes camera controls
49
56
  * - Removes canvas from DOM
50
- * - Clears module-global scene references
57
+ * - Clears this module's state (getReplayState() returns null afterwards)
51
58
  *
52
59
  * Safe to call multiple times (idempotent).
53
60
  */
@@ -1,2 +1,2 @@
1
- import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-BAxc15J6.js";
1
+ import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-Dj1One3y.js";
2
2
  export { AbsoluteOrientationReading, AbsoluteOrientationStatus, getLatestAbsoluteOrientation, isAbsoluteOrientationAvailable, startAbsoluteOrientationWatch, stopAbsoluteOrientationWatch };
@@ -4,7 +4,7 @@ import { createLogger } from "../utils/logger.js";
4
4
  * AbsoluteOrientationSensor capture (Generic Sensor API).
5
5
  *
6
6
  * Phase 1 of the AbsoluteOrientationSensor plan
7
- * (GpsPlusSlamJs_Docs/docs/2026-06-25-absolute-orientation-sensor-plan.md §5.1):
7
+ * (GpsPlusSlamJs_Docs/docs/2026-06-25-0543-absolute-orientation-sensor-plan.md §5.1):
8
8
  * passive instrumentation that fuses accelerometer + gyroscope + magnetometer
9
9
  * into an Earth-referenced (ENU) quaternion, captured per GPS event as an
10
10
  * independent north reference. No production behaviour change.
@@ -1,2 +1,2 @@
1
- import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-C34GQuTu.js";
1
+ import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-DjVuLXve.js";
2
2
  export { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, createGpsErrorHandler, getGpsErrorMessage };
@@ -1,2 +1,2 @@
1
- import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-CDKDQokE.js";
1
+ import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-CnhYrJCa.js";
2
2
  export { GpsPosition, RawDeviceOrientation, requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
@@ -1,4 +1,5 @@
1
1
  import { createLogger } from "../utils/logger.js";
2
+ import { requestOrientationPermission as requestOrientationPermission$1 } from "./permission-checker.js";
2
3
  //#region ../src/sensors/gps.ts
3
4
  /**
4
5
  * GPS Module
@@ -78,16 +79,17 @@ function stopOrientationWatch() {
78
79
  }
79
80
  }
80
81
  /**
81
- * Request permission for device orientation (required on iOS 13+)
82
+ * Request permission for device orientation (required on iOS 13+).
83
+ *
84
+ * Boolean-contract wrapper around the permission-checker's
85
+ * `requestOrientationPermission` superset (quality-review A-4 — the two
86
+ * public implementations had already drifted once; this one lacked the
87
+ * missing-API guard and threw a ReferenceError where `DeviceOrientationEvent`
88
+ * does not exist). `true` only for an explicit grant (or the non-iOS
89
+ * no-permission-needed case); denied, failed, or unsupported → `false`.
82
90
  */
83
91
  async function requestOrientationPermission() {
84
- const DeviceOrientationEventWithPermission = DeviceOrientationEvent;
85
- if (typeof DeviceOrientationEventWithPermission.requestPermission === "function") try {
86
- return await DeviceOrientationEventWithPermission.requestPermission() === "granted";
87
- } catch {
88
- return false;
89
- }
90
- return true;
92
+ return (await requestOrientationPermission$1()).granted === true;
91
93
  }
92
94
  //#endregion
93
95
  export { requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };