gps-plus-slam-app-framework 1.4.0 → 1.7.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 (212) hide show
  1. package/dist/absolute-orientation-CAEh840t.d.ts +54 -0
  2. package/dist/{app-selectors-CrOucL00.d.ts → app-selectors-ikTUQZpe.d.ts} +1 -1
  3. package/dist/ar/bresenham3d.d.ts +1 -1
  4. package/dist/ar/camera-blit-capture.d.ts +1 -1
  5. package/dist/ar/capability-checker.d.ts +1 -1
  6. package/dist/ar/capture-failure-tracker.d.ts +1 -1
  7. package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
  8. package/dist/ar/depth-grid-lookup.d.ts +1 -1
  9. package/dist/ar/depth-sampler.d.ts +2 -2
  10. package/dist/ar/depth-unprojection.d.ts +1 -1
  11. package/dist/ar/enable-gps-ar.d.ts +1 -1
  12. package/dist/ar/enable-gps-ar.js +1 -1
  13. package/dist/ar/frame-loop.d.ts +1 -1
  14. package/dist/ar/image-capture.d.ts +2 -2
  15. package/dist/ar/image-capture.js +1 -154
  16. package/dist/ar/image-quality.d.ts +2 -0
  17. package/dist/ar/image-quality.js +168 -0
  18. package/dist/ar/index.d.ts +31 -30
  19. package/dist/ar/index.js +6 -5
  20. package/dist/ar/occupancy-grid.d.ts +1 -1
  21. package/dist/ar/planar-pnp.d.ts +1 -1
  22. package/dist/ar/qr-debug-view.d.ts +1 -1
  23. package/dist/ar/qr-derived-pose.d.ts +1 -1
  24. package/dist/ar/qr-detection-controller.d.ts +1 -1
  25. package/dist/ar/qr-frontend.d.ts +1 -1
  26. package/dist/ar/qr-pose.d.ts +1 -1
  27. package/dist/ar/qr-size-depth-context.d.ts +2 -2
  28. package/dist/ar/qr-size-measurer.d.ts +1 -1
  29. package/dist/ar/replay-scene.d.ts +1 -1
  30. package/dist/ar/replay-scene.js +1 -1
  31. package/dist/ar/scene-node-names.d.ts +1 -1
  32. package/dist/ar/webxr-nue-basis.d.ts +1 -1
  33. package/dist/ar/webxr-session.d.ts +4 -4
  34. package/dist/ar/webxr-session.js +2 -2
  35. package/dist/ar/xr-camera-texture.d.ts +1 -1
  36. package/dist/ar/xr-error-handler.d.ts +1 -1
  37. package/dist/ar/xr-frame-loop.d.ts +1 -1
  38. package/dist/{ar-Dc72Ksiu.js → ar-MFpFlV7j.js} +3 -3
  39. package/dist/{ar-world-group-alignment-DDLkgNf_.d.ts → ar-world-group-alignment-69fgnB39.d.ts} +1 -1
  40. package/dist/capture-motion-gate-0Yl2NpQG.d.ts +24 -0
  41. package/dist/capture-motion-gate-4EscNZCw.js +94 -0
  42. package/dist/core/index.d.ts +2 -2
  43. package/dist/core/index.js +2 -2
  44. package/dist/create-slam-app-store-DkCHOpvb.js +149 -0
  45. package/dist/{create-slam-app-store-Ce2FMKCp.d.ts → create-slam-app-store-n_VF63D5.d.ts} +50 -40
  46. package/dist/{depth-grid-lookup-vMDrGTk_.d.ts → depth-grid-lookup-DQ-IYhO3.d.ts} +1 -1
  47. package/dist/{depth-sampler-DwfPYzS7.d.ts → depth-sampler-asc8exHt.d.ts} +1 -1
  48. package/dist/{depth-unprojection-CK3b9htH.d.ts → depth-unprojection-DjsbJW9L.d.ts} +1 -1
  49. package/dist/{enable-gps-ar-CjZ1nEdu.d.ts → enable-gps-ar-DkNhFv4Y.d.ts} +4 -4
  50. package/dist/{frame-conversions-D_Af8Dt3.d.ts → frame-conversions-DObhj8Wf.d.ts} +1 -1
  51. package/dist/{fused-path-C0FHe67t.d.ts → fused-path-v6eOmLl3.d.ts} +1 -1
  52. package/dist/geo/h3-proximity.d.ts +1 -1
  53. package/dist/geo/index.d.ts +1 -1
  54. package/dist/geodesic-angle-BTldfFgs.js +39 -0
  55. package/dist/{gps-anchor-C6I9NDHA.d.ts → gps-anchor-BeFO2RYa.d.ts} +1 -1
  56. package/dist/{gps-ar-pose-sampler-DaHg2aPZ.d.ts → gps-ar-pose-sampler-DHMZmYAc.d.ts} +1 -1
  57. package/dist/{gps-event-coordinator-C7hwHyLA.d.ts → gps-event-coordinator-CjWW636x.d.ts} +21 -11
  58. package/dist/image-capture-B2-b6tKK.js +374 -0
  59. package/dist/{image-capture-C2Feywet.d.ts → image-capture-CNZDrQXG.d.ts} +103 -3
  60. package/dist/image-quality-smCBoFj1.d.ts +158 -0
  61. package/dist/index-BAPokxMb.d.ts +22 -0
  62. package/dist/{index-m_LneUSi.d.ts → index-BODDUTvD.d.ts} +1 -1
  63. package/dist/{index-BvLo2poy.d.ts → index-BneSj4_5.d.ts} +3 -3
  64. package/dist/index-_Rhgoqkh.d.ts +2 -0
  65. package/dist/index.d.ts +80 -77
  66. package/dist/index.js +11 -8
  67. package/dist/{leaflet-map-overlay-bnb2U1NQ.d.ts → leaflet-map-overlay-CmIyiE8n.d.ts} +1 -1
  68. package/dist/{map-data-DdjPiSav.d.ts → map-data-B4oEehUh.d.ts} +1 -1
  69. package/dist/{map-overlay-draw-CPVdAsFq.d.ts → map-overlay-draw-ymz1s7fG.d.ts} +1 -1
  70. package/dist/{null-storage-backend-CuSdYFsM.d.ts → null-storage-backend-B9rtyDfG.d.ts} +2 -2
  71. package/dist/{occupancy-grid-Bvi2Gw1U.d.ts → occupancy-grid-DnOc-6PU.d.ts} +2 -2
  72. package/dist/{opfs-storage-backend-CeQAb0SD.d.ts → opfs-storage-backend-JJiUJo-3.d.ts} +2 -2
  73. package/dist/{persistence-middleware-5eearhSV.d.ts → persistence-middleware-DAPTTwB2.d.ts} +1 -1
  74. package/dist/{planar-pnp-cjthe7Be.d.ts → planar-pnp-my9bqULS.d.ts} +1 -1
  75. package/dist/{qr-debug-view-B8gTzjMm.d.ts → qr-debug-view-Brl73HGO.d.ts} +1 -1
  76. package/dist/{qr-derived-pose-DinKE600.d.ts → qr-derived-pose-CmxTP2m4.d.ts} +2 -2
  77. package/dist/{qr-detected-slice-Cpv-dg82.d.ts → qr-detected-slice-VQssZmQJ.d.ts} +4 -4
  78. package/dist/{qr-detection-controller-Cd2Ih4cC.d.ts → qr-detection-controller-CDurHv8E.d.ts} +3 -3
  79. package/dist/{qr-frontend-DufZp2xS.d.ts → qr-frontend--fFX25mV.d.ts} +1 -1
  80. package/dist/{qr-pose-aggregation-CFlmLm6w.d.ts → qr-pose-aggregation-B7tWJq7j.d.ts} +1 -1
  81. package/dist/{qr-pose-aggregation-DXR9STHs.js → qr-pose-aggregation-DBiaLW0O.js} +1 -10
  82. package/dist/{qr-size-depth-context-onu36E9s.d.ts → qr-size-depth-context-CeAG53fy.d.ts} +2 -2
  83. package/dist/{qr-size-measurer-D7739ZpB.d.ts → qr-size-measurer-DQdAsid1.d.ts} +3 -3
  84. package/dist/{recording-options-D93kksJU.d.ts → recording-options-BPCpMHLK.d.ts} +154 -9
  85. package/dist/{recording-replayer-CUEK82tM.d.ts → recording-replayer-DQKpAGyQ.d.ts} +2 -2
  86. package/dist/{recording-slice-B-uCgGoh.d.ts → recording-slice-DaxHZvNu.d.ts} +2 -2
  87. package/dist/{replay-engine-BSVd7Zzb.d.ts → replay-engine-CmKh_4wf.d.ts} +1 -1
  88. package/dist/{replay-scene-CPt56pps.d.ts → replay-scene-DBlDrV_x.d.ts} +3 -3
  89. package/dist/sensors/absolute-orientation.d.ts +2 -0
  90. package/dist/sensors/absolute-orientation.js +145 -0
  91. package/dist/sensors/gps-error-handler.d.ts +1 -1
  92. package/dist/sensors/gps.d.ts +1 -1
  93. package/dist/sensors/index.d.ts +5 -4
  94. package/dist/sensors/index.js +2 -1
  95. package/dist/sensors/permission-checker.d.ts +1 -1
  96. package/dist/state/app-selectors.d.ts +1 -1
  97. package/dist/state/combined-root-state.d.ts +1 -1
  98. package/dist/state/create-slam-app-store.d.ts +1 -1
  99. package/dist/state/create-slam-app-store.js +1 -74
  100. package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
  101. package/dist/state/gps-event-coordinator.d.ts +2 -2
  102. package/dist/state/gps-event-coordinator.js +27 -17
  103. package/dist/state/index.d.ts +20 -20
  104. package/dist/state/index.js +4 -4
  105. package/dist/state/persistence-middleware.d.ts +1 -1
  106. package/dist/state/persistence-middleware.js +30 -19
  107. package/dist/state/qr-detected-slice.d.ts +3 -3
  108. package/dist/state/qr-detected-slice.js +1 -1
  109. package/dist/state/recording-options.d.ts +2 -2
  110. package/dist/state/recording-options.js +155 -13
  111. package/dist/state/recording-replayer.d.ts +2 -2
  112. package/dist/state/recording-replayer.js +1 -1
  113. package/dist/state/recording-slice.d.ts +1 -1
  114. package/dist/state/replay-engine.d.ts +1 -1
  115. package/dist/state/store-subscribers.d.ts +2 -2
  116. package/dist/state/subscribe-to-selector.d.ts +1 -1
  117. package/dist/state/tracking-quality.d.ts +2 -2
  118. package/dist/state/tracking-quality.js +40 -128
  119. package/dist/state/tracking-slice.d.ts +1 -1
  120. package/dist/{state-IEw0ZsBu.js → state-E51QT_-j.js} +1 -1
  121. package/dist/storage/file-system-utils.d.ts +1 -1
  122. package/dist/storage/index.d.ts +8 -8
  123. package/dist/storage/null-storage-backend.d.ts +1 -1
  124. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  125. package/dist/storage/opfs-storage.d.ts +1 -1
  126. package/dist/storage/storage-backend.d.ts +1 -1
  127. package/dist/storage/zip-coverage-embed.d.ts +1 -1
  128. package/dist/storage/zip-export.d.ts +1 -1
  129. package/dist/storage/zip-reader.d.ts +1 -1
  130. package/dist/{storage-backend-CTJHNdMp.d.ts → storage-backend-BdVLD0dU.d.ts} +1 -1
  131. package/dist/{store-subscribers-BZP81hjh.d.ts → store-subscribers-CA6AJH_8.d.ts} +2 -2
  132. package/dist/{subscribe-to-selector-Bp3sLx8L.d.ts → subscribe-to-selector-B6EUmQ3I.d.ts} +1 -1
  133. package/dist/test-utils/browser-mocks.d.ts +1 -1
  134. package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
  135. package/dist/{tracking-slice-DJZ9qeGg.d.ts → tracking-slice-BuAZxXZ5.d.ts} +1 -1
  136. package/dist/types/ar-types.d.ts +1 -1
  137. package/dist/types/geo-types.d.ts +1 -1
  138. package/dist/types/index.d.ts +2 -2
  139. package/dist/utils/concurrency.d.ts +1 -1
  140. package/dist/utils/failure-tracker.d.ts +1 -1
  141. package/dist/utils/format-file-size.d.ts +1 -1
  142. package/dist/utils/fused-path.d.ts +1 -1
  143. package/dist/utils/index.d.ts +8 -7
  144. package/dist/utils/index.js +2 -1
  145. package/dist/utils/list-formatter.d.ts +1 -1
  146. package/dist/utils/logger.d.ts +1 -1
  147. package/dist/visualization/accuracy-circles.d.ts +1 -1
  148. package/dist/visualization/alignment-lerper.d.ts +1 -1
  149. package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
  150. package/dist/visualization/ar-world-group-alignment.js +1 -1
  151. package/dist/visualization/camera-follower.d.ts +1 -1
  152. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  153. package/dist/visualization/frame-conversions.d.ts +1 -1
  154. package/dist/visualization/frustum-visibility.d.ts +1 -1
  155. package/dist/visualization/gps-anchor.d.ts +1 -1
  156. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  157. package/dist/visualization/gps-event-markers.d.ts +1 -1
  158. package/dist/visualization/gps-event-markers.js +1 -1
  159. package/dist/visualization/hit-test-reticle.d.ts +1 -1
  160. package/dist/visualization/index.d.ts +18 -18
  161. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  162. package/dist/visualization/lerp-utils.d.ts +1 -1
  163. package/dist/visualization/map-data.d.ts +1 -1
  164. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  165. package/dist/visualization/map-overlay.d.ts +1 -1
  166. package/dist/visualization/three-dispose.d.ts +1 -1
  167. package/dist/visualization/vis-colors.d.ts +1 -1
  168. package/dist/{webxr-session-CJF9Nijp.js → webxr-session-DG-eNfny.js} +25 -4
  169. package/dist/{webxr-session-COsOjJwn.d.ts → webxr-session-Do5L6G3B.d.ts} +19 -9
  170. package/package.json +2 -2
  171. package/dist/index-eaI1Z1KR.d.ts +0 -2
  172. /package/dist/{accuracy-circles-Pi2YeCrM.d.ts → accuracy-circles-BtqOP_v1.d.ts} +0 -0
  173. /package/dist/{alignment-lerper-BUTsQ2yu.d.ts → alignment-lerper-Bil6vbVw.d.ts} +0 -0
  174. /package/dist/{ar-types-BckI1E-O.d.ts → ar-types-BFX2r1wk.d.ts} +0 -0
  175. /package/dist/{bresenham3d-ByjcmEgM.d.ts → bresenham3d-CU1Gv2W4.d.ts} +0 -0
  176. /package/dist/{camera-blit-capture-CqWe1G7s.d.ts → camera-blit-capture-NKT9H5-e.d.ts} +0 -0
  177. /package/dist/{camera-follower-BTb2Yp12.d.ts → camera-follower-CqJJ7zRj.d.ts} +0 -0
  178. /package/dist/{capability-checker-CXqoJYtb.d.ts → capability-checker-DUQLg6gq.d.ts} +0 -0
  179. /package/dist/{capture-failure-tracker-BL5SoG2a.d.ts → capture-failure-tracker-gsm8q7yi.d.ts} +0 -0
  180. /package/dist/{chromium-camera-access-workaround-BNK189P0.d.ts → chromium-camera-access-workaround-D4K2uwwQ.d.ts} +0 -0
  181. /package/dist/{concurrency-DqAlKX4j.d.ts → concurrency-By0oOTZt.d.ts} +0 -0
  182. /package/dist/{css3d-renderer-manager-m-ab19vp.d.ts → css3d-renderer-manager-B3kGNtcn.d.ts} +0 -0
  183. /package/dist/{failure-tracker-Cnc_xWUw.d.ts → failure-tracker-BO7M7jF_.d.ts} +0 -0
  184. /package/dist/{file-system-utils-Bs7lpeVP.d.ts → file-system-utils-DOajnMm-.d.ts} +0 -0
  185. /package/dist/{format-file-size-BFUWvir1.d.ts → format-file-size-Dc98ulzB.d.ts} +0 -0
  186. /package/dist/{frame-loop-BEO9_q3k.d.ts → frame-loop-CpVjQ1dH.d.ts} +0 -0
  187. /package/dist/{frustum-visibility-D_RGmH98.d.ts → frustum-visibility-CeoCZchO.d.ts} +0 -0
  188. /package/dist/{geo-types-DqiBzPO9.d.ts → geo-types-3Ip1NzVR.d.ts} +0 -0
  189. /package/dist/{gps-C5inWeNV.d.ts → gps-BBO3hKfT.d.ts} +0 -0
  190. /package/dist/{gps-compass-cubes-BExxrWJ-.d.ts → gps-compass-cubes-DSN87L8p.d.ts} +0 -0
  191. /package/dist/{gps-error-handler-C2bS69oJ.d.ts → gps-error-handler-BbPsfw-_.d.ts} +0 -0
  192. /package/dist/{gps-event-markers-Dd0G2bD0.d.ts → gps-event-markers-Cz9RMA2k.d.ts} +0 -0
  193. /package/dist/{h3-proximity-B57C6rYL.d.ts → h3-proximity-C-j0pw1j.d.ts} +0 -0
  194. /package/dist/{hit-test-reticle-Dqak9hiR.d.ts → hit-test-reticle-DV-2TpB9.d.ts} +0 -0
  195. /package/dist/{lerp-utils-kLxMJ2Xj.d.ts → lerp-utils-BLmHhkVe.d.ts} +0 -0
  196. /package/dist/{list-formatter-ct8txwvR.d.ts → list-formatter-KNMS0ay2.d.ts} +0 -0
  197. /package/dist/{logger-CzQrCe6C.d.ts → logger-CLnPrHiD.d.ts} +0 -0
  198. /package/dist/{map-overlay-Dci4yvm3.d.ts → map-overlay-Dh2B97MP.d.ts} +0 -0
  199. /package/dist/{opfs-storage-DMtlt57S.d.ts → opfs-storage-3VZh-qH6.d.ts} +0 -0
  200. /package/dist/{permission-checker-CtPtPQRq.d.ts → permission-checker-CDuI8BwC.d.ts} +0 -0
  201. /package/dist/{qr-pose-Bt2reSw7.d.ts → qr-pose-D2rfu5DA.d.ts} +0 -0
  202. /package/dist/{scene-node-names-CdNeQjOE.d.ts → scene-node-names-BiShOQDB.d.ts} +0 -0
  203. /package/dist/{session-disposers-D8wnO-uW.js → session-disposers-zv9OGXPB.js} +0 -0
  204. /package/dist/{three-dispose-BCZkSJp2.d.ts → three-dispose-Bt1k7WKh.d.ts} +0 -0
  205. /package/dist/{vis-colors-BZsSLI4i.d.ts → vis-colors-Obw2pLqT.d.ts} +0 -0
  206. /package/dist/{webxr-nue-basis-CW1wsbm6.d.ts → webxr-nue-basis-3nfjDJJp.d.ts} +0 -0
  207. /package/dist/{xr-camera-texture-BmrP7iNZ.d.ts → xr-camera-texture-Cva1q3Qj.d.ts} +0 -0
  208. /package/dist/{xr-error-handler-BEjRgZjt.d.ts → xr-error-handler-CtvHpjfm.d.ts} +0 -0
  209. /package/dist/{xr-frame-loop-K8ebdjLw.d.ts → xr-frame-loop-DIYtRcUa.d.ts} +0 -0
  210. /package/dist/{zip-coverage-embed-tFohI2J4.d.ts → zip-coverage-embed-DCAREVmw.d.ts} +0 -0
  211. /package/dist/{zip-export-DDWXInTR.d.ts → zip-export-ol0S_Ofd.d.ts} +0 -0
  212. /package/dist/{zip-reader-Q2ue6zlC.d.ts → zip-reader-D9iPQwdQ.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- import { a as createQrDetectionController, i as RawObservationSink, n as QrDetectionControllerDeps, r as QrScanStatus, t as QrDetectionController } from "../qr-detection-controller-Cd2Ih4cC.js";
1
+ import { a as createQrDetectionController, i as RawObservationSink, n as QrDetectionControllerDeps, r as QrScanStatus, t as QrDetectionController } from "../qr-detection-controller-CDurHv8E.js";
2
2
  export { QrDetectionController, QrDetectionControllerDeps, QrScanStatus, RawObservationSink, createQrDetectionController };
@@ -1,2 +1,2 @@
1
- import { a as QrFrontEnd, c as createBarcodeDetectorFrontEnd, i as QrDetection, n as BarcodeDetectorLike, o as RgbaImage, r as DetectedBarcodeLike, s as ToImageBitmapSource, t as BarcodeDetectorFrontEnd } from "../qr-frontend-DufZp2xS.js";
1
+ import { a as QrFrontEnd, c as createBarcodeDetectorFrontEnd, i as QrDetection, n as BarcodeDetectorLike, o as RgbaImage, r as DetectedBarcodeLike, s as ToImageBitmapSource, t as BarcodeDetectorFrontEnd } from "../qr-frontend--fFX25mV.js";
2
2
  export { BarcodeDetectorFrontEnd, BarcodeDetectorLike, DetectedBarcodeLike, QrDetection, QrFrontEnd, RgbaImage, ToImageBitmapSource, createBarcodeDetectorFrontEnd };
@@ -1,2 +1,2 @@
1
- import { _ as solveQrPose, a as QrPoseSolution, c as SolveQrPoseInput, d as intrinsicsFromProjection, f as invertPose, g as signedQuadArea, h as reprojectionErrorPx, i as Pose, l as buildObjectPoints, m as qrInCameraFromOpenCv, n as OpenCvPnpResult, o as QuadValidation, p as projectViewPoint, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics, u as composePose, v as transformPoint, y as validateQuad } from "../qr-pose-Bt2reSw7.js";
1
+ import { _ as solveQrPose, a as QrPoseSolution, c as SolveQrPoseInput, d as intrinsicsFromProjection, f as invertPose, g as signedQuadArea, h as reprojectionErrorPx, i as Pose, l as buildObjectPoints, m as qrInCameraFromOpenCv, n as OpenCvPnpResult, o as QuadValidation, p as projectViewPoint, r as Point2, s as SolvePnpSquare, t as CameraIntrinsics, u as composePose, v as transformPoint, y as validateQuad } from "../qr-pose-D2rfu5DA.js";
2
2
  export { CameraIntrinsics, OpenCvPnpResult, Point2, Pose, QrPoseSolution, QuadValidation, SolvePnpSquare, SolveQrPoseInput, buildObjectPoints, composePose, intrinsicsFromProjection, invertPose, projectViewPoint, qrInCameraFromOpenCv, reprojectionErrorPx, signedQuadArea, solveQrPose, transformPoint, validateQuad };
@@ -1,3 +1,3 @@
1
- import { n as QrSizeDepthContext } from "../qr-size-measurer-D7739ZpB.js";
2
- import { t as createQrSizeDepthContext } from "../qr-size-depth-context-onu36E9s.js";
1
+ import { n as QrSizeDepthContext } from "../qr-size-measurer-DQdAsid1.js";
2
+ import { t as createQrSizeDepthContext } from "../qr-size-depth-context-CeAG53fy.js";
3
3
  export { QrSizeDepthContext, createQrSizeDepthContext };
@@ -1,2 +1,2 @@
1
- import { a as QrSizeMeasurerOptions, i as QrSizeMeasurer, n as QrSizeDepthContext, o as createQrSizeMeasurer, r as QrSizeMeasurement, t as ImageSize } from "../qr-size-measurer-D7739ZpB.js";
1
+ import { a as QrSizeMeasurerOptions, i as QrSizeMeasurer, n as QrSizeDepthContext, o as createQrSizeMeasurer, r as QrSizeMeasurement, t as ImageSize } from "../qr-size-measurer-DQdAsid1.js";
2
2
  export { ImageSize, QrSizeDepthContext, QrSizeMeasurement, QrSizeMeasurer, QrSizeMeasurerOptions, createQrSizeMeasurer };
@@ -1,2 +1,2 @@
1
- import { a as getCameraFollower, c as getReplayState, d as updateOrbitTarget, i as getAlignmentLerper, l as initReplayScene, n as ReplaySceneState, o as getCameraMode, r as disposeReplayScene, s as getCss3dManager, t as CameraMode, u as toggleCameraMode } from "../replay-scene-CPt56pps.js";
1
+ import { a as getCameraFollower, c as getReplayState, d as updateOrbitTarget, i as getAlignmentLerper, l as initReplayScene, n as ReplaySceneState, o as getCameraMode, r as disposeReplayScene, s as getCss3dManager, t as CameraMode, u as toggleCameraMode } from "../replay-scene-DBlDrV_x.js";
2
2
  export { CameraMode, ReplaySceneState, disposeReplayScene, getAlignmentLerper, getCameraFollower, getCameraMode, getCss3dManager, getReplayState, initReplayScene, toggleCameraMode, updateOrbitTarget };
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "../utils/logger.js";
2
- import { D as setCamera, E as setArWorldGroup, M as setScene, T as setArPose, i as createSceneHierarchy } from "../webxr-session-CJF9Nijp.js";
2
+ import { D as setCamera, E as setArWorldGroup, N as setScene, T as setArPose, i as createSceneHierarchy } from "../webxr-session-DG-eNfny.js";
3
3
  import { createCss3dRendererManager } from "../visualization/css3d-renderer-manager.js";
4
4
  import { createCameraFollower } from "../visualization/camera-follower.js";
5
5
  import { createAlignmentLerper } from "../visualization/alignment-lerper.js";
@@ -1,2 +1,2 @@
1
- import { t as SCENE_NODE } from "../scene-node-names-CdNeQjOE.js";
1
+ import { t as SCENE_NODE } from "../scene-node-names-BiShOQDB.js";
2
2
  export { SCENE_NODE };
@@ -1,2 +1,2 @@
1
- import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-CW1wsbm6.js";
1
+ import { t as WEBXR_TO_NUE } from "../webxr-nue-basis-3nfjDJJp.js";
2
2
  export { WEBXR_TO_NUE };
@@ -1,4 +1,4 @@
1
- import { i as DepthSample, t as ARPose } from "../ar-types-BckI1E-O.js";
2
- import { n as CapturedImage } from "../image-capture-C2Feywet.js";
3
- import { A as setCamera, B as shouldLogCameraAccessDiagnostic, C as isWebXRSupported, D as resetWebXRState, E as nueQuaternionToWebXR, F as setScene, G as stopDepthCapture, H as startDepthCapture, I as setTrackingCallbacks, K as stopImageCapture, L as setTrackingLostCallback, M as setDepthCaptureCallback, N as setFrameCallback, O as setArPose, P as setImageCaptureCallback, R as setTrackingRecoveredCallback, S as initAR, T as nuePositionToWebXR, U as startImageCapture, V as startCameraFrameCapture, W as stopCameraFrameCapture, _ as getDepthSampleCount, a as applyAlignmentMatrix, b as getScene, c as endARSession, d as getArPose, f as getArWorldGroup, g as getCurrentArPose, h as getCameraFrameCount, i as TrackingSubscribableStore, j as setCameraFrameCallback, k as setArWorldGroup, l as extractPoseFromViewer, m as getCameraFrameCaptureSize, n as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, o as buildSessionOptions, p as getCamera, r as SessionFeatureOptions, s as createSceneHierarchy, t as CameraFrameCaptureConfig, u as extractResetTransformData, v as getImageCaptureFrameCount, w as isXRCameraLike, x as getXrCameraFromPose, y as getLiveCss3dManager, z as setTrackingStore } from "../webxr-session-COsOjJwn.js";
4
- export { ARPose, CameraFrameCaptureConfig, CapturedImage, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, DepthSample, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
1
+ import { i as DepthSample, t as ARPose } from "../ar-types-BFX2r1wk.js";
2
+ import { n as CapturedImage } from "../image-capture-CNZDrQXG.js";
3
+ import { A as setCamera, B as setTrackingStore, C as isWebXRSupported, D as resetWebXRState, E as nueQuaternionToWebXR, F as setImageQualityAnalyzer, G as stopCameraFrameCapture, H as startCameraFrameCapture, I as setScene, K as stopDepthCapture, L as setTrackingCallbacks, M as setDepthCaptureCallback, N as setFrameCallback, O as setArPose, P as setImageCaptureCallback, R as setTrackingLostCallback, S as initAR, T as nuePositionToWebXR, U as startDepthCapture, V as shouldLogCameraAccessDiagnostic, W as startImageCapture, _ as getDepthSampleCount, a as applyAlignmentMatrix, b as getScene, c as endARSession, d as getArPose, f as getArWorldGroup, g as getCurrentArPose, h as getCameraFrameCount, i as TrackingSubscribableStore, j as setCameraFrameCallback, k as setArWorldGroup, l as extractPoseFromViewer, m as getCameraFrameCaptureSize, n as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, o as buildSessionOptions, p as getCamera, q as stopImageCapture, r as SessionFeatureOptions, s as createSceneHierarchy, t as CameraFrameCaptureConfig, u as extractResetTransformData, v as getImageCaptureFrameCount, w as isXRCameraLike, x as getXrCameraFromPose, y as getLiveCss3dManager, z as setTrackingRecoveredCallback } from "../webxr-session-Do5L6G3B.js";
4
+ export { ARPose, CameraFrameCaptureConfig, CapturedImage, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, DepthSample, SessionFeatureOptions, TrackingSubscribableStore, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
@@ -1,2 +1,2 @@
1
- import { A as setFrameCallback, B as startImageCapture, C as nueQuaternionToWebXR, D as setCamera, E as setArWorldGroup, F as setTrackingRecoveredCallback, H as stopDepthCapture, I as setTrackingStore, L as shouldLogCameraAccessDiagnostic, M as setScene, N as setTrackingCallbacks, O as setCameraFrameCallback, P as setTrackingLostCallback, R as startCameraFrameCapture, S as nuePositionToWebXR, T as setArPose, U as stopImageCapture, V as stopCameraFrameCapture, _ as getScene, a as endARSession, b as isWebXRSupported, c as getArPose, d as getCameraFrameCaptureSize, f as getCameraFrameCount, g as getLiveCss3dManager, h as getImageCaptureFrameCount, i as createSceneHierarchy, j as setImageCaptureCallback, k as setDepthCaptureCallback, l as getArWorldGroup, m as getDepthSampleCount, n as applyAlignmentMatrix, o as extractPoseFromViewer, p as getCurrentArPose, r as buildSessionOptions, s as extractResetTransformData, t as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, u as getCamera, v as getXrCameraFromPose, w as resetWebXRState, x as isXRCameraLike, y as initAR, z as startDepthCapture } from "../webxr-session-CJF9Nijp.js";
2
- export { DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
1
+ import { A as setFrameCallback, B as startDepthCapture, C as nueQuaternionToWebXR, D as setCamera, E as setArWorldGroup, F as setTrackingLostCallback, H as stopCameraFrameCapture, I as setTrackingRecoveredCallback, L as setTrackingStore, M as setImageQualityAnalyzer, N as setScene, O as setCameraFrameCallback, P as setTrackingCallbacks, R as shouldLogCameraAccessDiagnostic, S as nuePositionToWebXR, T as setArPose, U as stopDepthCapture, V as startImageCapture, W as stopImageCapture, _ as getScene, a as endARSession, b as isWebXRSupported, c as getArPose, d as getCameraFrameCaptureSize, f as getCameraFrameCount, g as getLiveCss3dManager, h as getImageCaptureFrameCount, i as createSceneHierarchy, j as setImageCaptureCallback, k as setDepthCaptureCallback, l as getArWorldGroup, m as getDepthSampleCount, n as applyAlignmentMatrix, o as extractPoseFromViewer, p as getCurrentArPose, r as buildSessionOptions, s as extractResetTransformData, t as DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, u as getCamera, v as getXrCameraFromPose, w as resetWebXRState, x as isXRCameraLike, y as initAR, z as startCameraFrameCapture } from "../webxr-session-DG-eNfny.js";
2
+ export { DEFAULT_CAMERA_FRAME_CAPTURE_SIZE, applyAlignmentMatrix, buildSessionOptions, createSceneHierarchy, endARSession, extractPoseFromViewer, extractResetTransformData, getArPose, getArWorldGroup, getCamera, getCameraFrameCaptureSize, getCameraFrameCount, getCurrentArPose, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, getScene, getXrCameraFromPose, initAR, isWebXRSupported, isXRCameraLike, nuePositionToWebXR, nueQuaternionToWebXR, resetWebXRState, setArPose, setArWorldGroup, setCamera, setCameraFrameCallback, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setImageQualityAnalyzer, setScene, setTrackingCallbacks, setTrackingLostCallback, setTrackingRecoveredCallback, setTrackingStore, shouldLogCameraAccessDiagnostic, startCameraFrameCapture, startDepthCapture, startImageCapture, stopCameraFrameCapture, stopDepthCapture, stopImageCapture };
@@ -1,2 +1,2 @@
1
- import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-BmrP7iNZ.js";
1
+ import { i as acquireCameraTexture, n as RendererLike, r as XRCameraLike, t as CameraTextureResult } from "../xr-camera-texture-Cva1q3Qj.js";
2
2
  export { CameraTextureResult, RendererLike, XRCameraLike, acquireCameraTexture };
@@ -1,2 +1,2 @@
1
- import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-BEjRgZjt.js";
1
+ import { n as XR_ERROR_MESSAGE_UNKNOWN, r as getXrErrorMessage, t as XR_ERROR_MESSAGES } from "../xr-error-handler-CtvHpjfm.js";
2
2
  export { XR_ERROR_MESSAGES, XR_ERROR_MESSAGE_UNKNOWN, getXrErrorMessage };
@@ -1,2 +1,2 @@
1
- import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-K8ebdjLw.js";
1
+ import { a as runXrFrameUpdates, i as registerXrFrameUpdate, n as XrFrameUpdate, r as clearXrFrameUpdates, t as XrFrameContext } from "../xr-frame-loop-DIYtRcUa.js";
2
2
  export { XrFrameContext, XrFrameUpdate, clearXrFrameUpdates, registerXrFrameUpdate, runXrFrameUpdates };
@@ -10,12 +10,12 @@ import "./ar/qr-derived-pose.js";
10
10
  import "./ar/webxr-nue-basis.js";
11
11
  import "./ar/qr-debug-view.js";
12
12
  import { n as createDetectionScheduler } from "./qr-detection-controller-B-tLVd-S.js";
13
- import "./qr-pose-aggregation-DXR9STHs.js";
14
- import "./webxr-session-CJF9Nijp.js";
13
+ import "./qr-pose-aggregation-DBiaLW0O.js";
14
+ import "./webxr-session-DG-eNfny.js";
15
15
  import "./ar/occupancy-grid.js";
16
16
  import "./ar/frame-loop.js";
17
17
  import "./ar/xr-frame-loop.js";
18
- import "./ar/image-capture.js";
18
+ import "./image-capture-B2-b6tKK.js";
19
19
  import "./ar/xr-camera-texture.js";
20
20
  import "./ar/enable-gps-ar.js";
21
21
  import "./ar/replay-scene.js";
@@ -1,4 +1,4 @@
1
- import { t as SubscribableStore } from "./subscribe-to-selector-Bp3sLx8L.js";
1
+ import { t as SubscribableStore } from "./subscribe-to-selector-B6EUmQ3I.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/ar-world-group-alignment.d.ts
@@ -0,0 +1,24 @@
1
+ //#region ../src/ar/capture-motion-gate.d.ts
2
+ /**
3
+ * User-/consumer-facing motion-filter configuration. Shared by both config
4
+ * shapes that carry it — `ImageCaptureConfig` (what `ImageCaptureManager`
5
+ * consumes) and `ImageCaptureOptions` (the persisted recorder options) — so the
6
+ * one definition cannot drift between them. The window size and glitch ceilings
7
+ * are deliberately NOT here: they are internal tuning constants, not exposed.
8
+ */
9
+ interface MotionFilterConfig {
10
+ /** Master switch for the motion gate. Default `true`. */
11
+ enabled: boolean;
12
+ /** Angular-velocity threshold (rad/s); at/below this a frame is "calm". */
13
+ maxAngularVelocity: number;
14
+ /** Linear-velocity threshold (m/s); at/below this a frame is "calm". */
15
+ maxLinearVelocity: number;
16
+ /**
17
+ * Never-calm safety fallback: once a due capture has waited this many ms it
18
+ * fires regardless of motion, so an interval is never silently lost. A
19
+ * sensible value is ~2× the capture interval.
20
+ */
21
+ maxWaitMs: number;
22
+ }
23
+ //#endregion
24
+ export { MotionFilterConfig as t };
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Angular velocity (rad/s) above which a sample is treated as a tracking glitch
3
+ * (e.g. relocalization teleport), not real motion. A genuine hand/device turn
4
+ * tops out well below this; a teleport is far above it. Module-internal tuning
5
+ * constant (not exported — the gate's user surface is only the four
6
+ * `MotionFilterConfig` fields); overridable per-instance via the `MotionWindow`
7
+ * constructor for tests.
8
+ */
9
+ const ANGULAR_GLITCH_CEILING_RAD_S = 50;
10
+ /**
11
+ * Linear velocity (m/s) above which a sample is treated as a tracking glitch.
12
+ * ~20 m/s (72 km/h) is unreachable by handheld scanning but trivially exceeded
13
+ * by a relocalization origin jump. Module-internal tuning constant (see
14
+ * {@link ANGULAR_GLITCH_CEILING_RAD_S}).
15
+ */
16
+ const LINEAR_GLITCH_CEILING_M_S = 20;
17
+ /**
18
+ * Default motion-filter configuration. Enabled by default (plan §1). Thresholds
19
+ * are PLACEHOLDERS pending on-device field tuning (plan §7) — record measured
20
+ * values in implementation-progress.md once known. `maxWaitMs` of 4000 ms is
21
+ * 2× the default 2000 ms image interval.
22
+ */
23
+ const DEFAULT_MOTION_FILTER = {
24
+ enabled: true,
25
+ maxAngularVelocity: .6,
26
+ maxLinearVelocity: .5,
27
+ maxWaitMs: 4e3
28
+ };
29
+ /**
30
+ * Decide whether a due capture should fire now or defer to a later frame.
31
+ *
32
+ * A frame is "calm" when BOTH windowed maxima are at/below their thresholds —
33
+ * an empty window reports `Infinity`, so it is never calm (no capture before a
34
+ * valid sample exists). If not calm, the capture is deferred UNTIL `msSinceDue`
35
+ * reaches `maxWaitMs`, at which point it fires regardless to guarantee an
36
+ * interval is never silently lost (worst case: one blurry frame, not a gap).
37
+ */
38
+ function decideCapture(input) {
39
+ if (input.windowMaxAngular <= input.maxAngularVelocity && input.windowMaxLinear <= input.maxLinearVelocity) return "capture";
40
+ if (input.msSinceDue >= input.maxWaitMs) return "capture";
41
+ return "defer";
42
+ }
43
+ /**
44
+ * Fixed-size ring of the most recent VALID (non-glitch) per-frame velocities.
45
+ *
46
+ * `maxAngular()`/`maxLinear()` return the max over the retained samples, or
47
+ * `Infinity` when empty so "no data yet" reads as not-calm in
48
+ * {@link decideCapture}. A sample exceeding either glitch ceiling is rejected
49
+ * outright (`push` returns `false`) and never stored, so a relocalization spike
50
+ * neither pollutes the window (no spurious defer) nor is treated as motion.
51
+ */
52
+ var MotionWindow = class {
53
+ angularGlitchCeiling;
54
+ linearGlitchCeiling;
55
+ size;
56
+ angular = [];
57
+ linear = [];
58
+ constructor(size = 3, angularGlitchCeiling = ANGULAR_GLITCH_CEILING_RAD_S, linearGlitchCeiling = LINEAR_GLITCH_CEILING_M_S) {
59
+ this.angularGlitchCeiling = angularGlitchCeiling;
60
+ this.linearGlitchCeiling = linearGlitchCeiling;
61
+ this.size = Number.isFinite(size) && size >= 1 ? Math.floor(size) : 1;
62
+ }
63
+ /**
64
+ * Record a per-frame velocity pair. Returns `false` (and stores nothing) when
65
+ * the sample exceeds either glitch ceiling, `true` otherwise.
66
+ */
67
+ push(angularVel, linearVel) {
68
+ if (!Number.isFinite(angularVel) || !Number.isFinite(linearVel) || angularVel > this.angularGlitchCeiling || linearVel > this.linearGlitchCeiling) return false;
69
+ this.angular.push(angularVel);
70
+ this.linear.push(linearVel);
71
+ if (this.angular.length > this.size) this.angular.shift();
72
+ if (this.linear.length > this.size) this.linear.shift();
73
+ return true;
74
+ }
75
+ /** Whether the window holds at least one valid (non-glitch) sample yet. */
76
+ hasSamples() {
77
+ return this.angular.length > 0;
78
+ }
79
+ /** Max angular velocity over the retained window, or `Infinity` if empty. */
80
+ maxAngular() {
81
+ return this.angular.length === 0 ? Number.POSITIVE_INFINITY : Math.max(...this.angular);
82
+ }
83
+ /** Max linear velocity over the retained window, or `Infinity` if empty. */
84
+ maxLinear() {
85
+ return this.linear.length === 0 ? Number.POSITIVE_INFINITY : Math.max(...this.linear);
86
+ }
87
+ /** Clear all samples (e.g. on tracking loss / capture restart). */
88
+ reset() {
89
+ this.angular.length = 0;
90
+ this.linear.length = 0;
91
+ }
92
+ };
93
+ //#endregion
94
+ export { MotionWindow as n, decideCapture as r, DEFAULT_MOTION_FILTER as t };
@@ -1,2 +1,2 @@
1
- import { a as LibraryRootState, c as RootState, d as calcRelativeCoordsInMeters, f as createGpsSlamStore, g as webxrToNUE, h as validateLicenseKey, i as LatLongAlt, l as Vector3, m as odometryTrackingRestarted, n as GpsPoint, o as Matrix4, p as isIdentityMatrix4, r as LatLong, s as Quaternion, t as ArImageCapture, u as calcGpsCoords } from "../index-eaI1Z1KR.js";
2
- export { ArImageCapture, GpsPoint, LatLong, LatLongAlt, LibraryRootState, Matrix4, Quaternion, RootState, Vector3, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
1
+ import { _ as odometryTrackingRestarted, a as LibraryRootState, c as RootState, d as bearingDeltaDeg, f as calcGpsCoords, g as magneticHeadingFromEnuQuat, h as isIdentityMatrix4, i as LatLongAlt, l as Vector3, m as createGpsSlamStore, n as GpsPoint, o as Matrix4, p as calcRelativeCoordsInMeters, r as LatLong, s as Quaternion, t as ArImageCapture, u as arNorthBearingDeg, v as validateLicenseKey, y as webxrToNUE } from "../index-_Rhgoqkh.js";
2
+ export { ArImageCapture, GpsPoint, LatLong, LatLongAlt, LibraryRootState, Matrix4, Quaternion, RootState, Vector3, arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
@@ -1,2 +1,2 @@
1
- import { calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, odometryTrackingRestarted, validateLicenseKey, webxrToNUE } from "gps-plus-slam-js";
2
- export { calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
1
+ import { arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE } from "gps-plus-slam-js";
2
+ export { arNorthBearingDeg, bearingDeltaDeg, calcGpsCoords, calcRelativeCoordsInMeters, createGpsSlamStore, isIdentityMatrix4, magneticHeadingFromEnuQuat, odometryTrackingRestarted, validateLicenseKey, webxrToNUE };
@@ -0,0 +1,149 @@
1
+ import { trackingReducer } from "./state/tracking-slice.js";
2
+ import { recordWriteFailure, recordingReducer } from "./state/recording-slice.js";
3
+ import { createTrackingQualityListenerMiddleware, trackingQualityReducer } from "./state/tracking-quality.js";
4
+ import { createPersistenceMiddleware, slicePrefixOf } from "./state/persistence-middleware.js";
5
+ import { arElementsReducer, gpsDataReducer, gpsElementsReducer, sanitizeForDevTools, setColdStartOverrideEnabled, setCompassRotationPriorEnabled, setCompassWebXRConsistencyEnabled, setZeroPos, validateLicenseKey } from "gps-plus-slam-js";
6
+ import { configureStore, createListenerMiddleware } from "@reduxjs/toolkit";
7
+ import { COMMUNITY_LICENSE_KEY } from "gps-plus-slam-js/community-license-key";
8
+ //#region ../src/state/slam-app-store-listener.ts
9
+ /**
10
+ * Build a listener middleware that applies the requested compass opt-ins once
11
+ * `gpsData` exists and a flag is still unset. Register it via `.prepend(...)`
12
+ * (so its effect dispatches *outside* the trigger's `next()` — see module doc).
13
+ *
14
+ * Behaviour:
15
+ * - **Predicate** fires whenever the `gpsData` *object reference* is new since
16
+ * the last apply AND at least one opt-in is still unset. Two terms, each load-
17
+ * bearing:
18
+ * - `s.gpsData !== lastApplied` makes the predicate edge-triggered on gpsData
19
+ * identity. A recreated `gpsData` (store swap / origin reset) is a fresh
20
+ * object, so it still re-triggers the apply — the re-apply semantics the
21
+ * 2026-06-27 field bug demands are preserved. Do NOT weaken this to a
22
+ * `null → non-null` transition: that would drop the re-apply. The point of
23
+ * keying on the *reference* (not on "a flag is unset") is that it also stops
24
+ * the effect from re-firing for the SAME gpsData.
25
+ * - `optIns.some((o) => !o.isSet(s))` keeps the no-op case (all flags already
26
+ * set) from scheduling an effect at all.
27
+ * Why the reference guard matters: without it the predicate is purely level-
28
+ * based, so if an opt-in's `apply` dispatches but `isSet` never flips true
29
+ * (e.g. consumer/library **version skew** where the action type no longer
30
+ * matches the reducer — the packages are published independently), the
31
+ * condition stays true forever and every effect dispatch re-arms it: an
32
+ * unbounded storm that freezes the app. The per-dispatch `isSet` re-check
33
+ * below guards only against dispatching an *already-set* flag twice; it does
34
+ * nothing when the flag never sets. The reference guard is what bounds it.
35
+ * - **Effect** records the gpsData reference it is acting on, then dispatches
36
+ * every still-unset opt-in as a top-level action. `isSet` is re-read against
37
+ * the *current* store state immediately before each dispatch (not one snapshot
38
+ * at effect entry): a dispatch is synchronous, so a flag is already set by the
39
+ * time the next check runs, and an opt-in's own dispatch can re-enter this
40
+ * effect before the loop finishes. Re-checking per dispatch makes that
41
+ * re-entrancy idempotent — a flag is dispatched only while still unset.
42
+ */
43
+ function createSlamAppStoreListenerMiddleware(optIns) {
44
+ const listenerMiddleware = createListenerMiddleware();
45
+ let lastApplied = null;
46
+ listenerMiddleware.startListening({
47
+ predicate: (_action, currentState) => {
48
+ const s = currentState;
49
+ return s.gpsData !== null && s.gpsData !== lastApplied && optIns.some((optIn) => !optIn.isSet(s));
50
+ },
51
+ effect: (_action, api) => {
52
+ const entry = api.getState();
53
+ if (entry.gpsData === null) return;
54
+ lastApplied = entry.gpsData;
55
+ for (const optIn of optIns) {
56
+ const s = api.getState();
57
+ if (s.gpsData === null) return;
58
+ if (!optIn.isSet(s)) optIn.apply((action) => {
59
+ api.dispatch(action);
60
+ });
61
+ }
62
+ }
63
+ });
64
+ return listenerMiddleware.middleware;
65
+ }
66
+ //#endregion
67
+ //#region ../src/state/create-slam-app-store.ts
68
+ /**
69
+ * `createSlamAppStore` — composable Redux store factory for AR+GPS apps.
70
+ *
71
+ * Introduced in Iter 1 of the AppFramework/RecorderApp boundary migration.
72
+ * Wires the three library reducers (`gpsData`, `gpsElements`, `arElements`),
73
+ * the framework's recording lifecycle slice, and the persistence middleware.
74
+ *
75
+ * Recorder-only state (routing screen, ref-points, scenario) is plugged in
76
+ * by the consumer via `extraReducers` / `extraMiddleware`. The factory itself
77
+ * never references those concepts so apps that don't need them (POI viewers,
78
+ * navigation arrows, …) compose freely.
79
+ *
80
+ * The legacy `createRecorderStore` from `store.ts` is built on top of this
81
+ * factory and will move out of the framework in Iter 1D.
82
+ *
83
+ * @see docs/2026-05-03-appframework-vs-recorderapp-boundary-analysis.md — Iter 1
84
+ */
85
+ /**
86
+ * Slice prefixes the framework always persists, derived from the actual
87
+ * library / framework action creators (never hand-typed). A rename of the
88
+ * `gpsData` or `recording` slice therefore propagates here automatically
89
+ * instead of silently dropping that slice's actions from recordings.
90
+ */
91
+ const BUILTIN_PERSISTED_PREFIXES = [slicePrefixOf(setZeroPos.type), slicePrefixOf(recordWriteFailure.type)];
92
+ /**
93
+ * Build a Redux store wired with library + recording slices, persistence
94
+ * middleware, and any caller-supplied extras. See module docstring for the
95
+ * design rationale.
96
+ */
97
+ function createSlamAppStore(options) {
98
+ const { storageBackend, extraReducers, extraMiddleware, persistedExtraPrefixes, onWriteFailure, enableDevChecks = true, licenseKey = COMMUNITY_LICENSE_KEY, trackingQualityOptions, enableCompassColdStartOverride = true, enableCompassRotationPrior = false, enableCompassWebXRConsistency = false } = options;
99
+ validateLicenseKey(licenseKey);
100
+ const reducer = {
101
+ gpsData: gpsDataReducer,
102
+ gpsElements: gpsElementsReducer,
103
+ arElements: arElementsReducer,
104
+ recording: recordingReducer,
105
+ tracking: trackingReducer,
106
+ trackingQuality: trackingQualityReducer,
107
+ ...extraReducers ?? {}
108
+ };
109
+ const trackingQualityMiddleware = createTrackingQualityListenerMiddleware(trackingQualityOptions);
110
+ const compassOptIns = [];
111
+ if (enableCompassColdStartOverride) compassOptIns.push({
112
+ isSet: (s) => s.gpsData?.coldStartOverrideEnabled === true,
113
+ apply: (dispatch) => dispatch(setColdStartOverrideEnabled(true))
114
+ });
115
+ if (enableCompassRotationPrior) compassOptIns.push({
116
+ isSet: (s) => s.gpsData?.compassRotationPriorEnabled === true,
117
+ apply: (dispatch) => dispatch(setCompassRotationPriorEnabled(true))
118
+ });
119
+ if (enableCompassWebXRConsistency) compassOptIns.push({
120
+ isSet: (s) => s.gpsData?.compassWebXRConsistencyEnabled === true,
121
+ apply: (dispatch) => dispatch(setCompassWebXRConsistencyEnabled(true))
122
+ });
123
+ const prependedListeners = [trackingQualityMiddleware];
124
+ if (compassOptIns.length > 0) prependedListeners.push(createSlamAppStoreListenerMiddleware(compassOptIns));
125
+ const store = configureStore({
126
+ reducer,
127
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware({
128
+ serializableCheck: enableDevChecks,
129
+ immutableCheck: enableDevChecks
130
+ }).prepend(...prependedListeners).concat(createPersistenceMiddleware({
131
+ storageBackend,
132
+ onWriteFailure,
133
+ persistedPrefixes: [...BUILTIN_PERSISTED_PREFIXES, ...persistedExtraPrefixes ?? []]
134
+ }), ...extraMiddleware ?? []),
135
+ devTools: {
136
+ actionSanitizer: sanitizeForDevTools,
137
+ stateSanitizer: sanitizeForDevTools
138
+ }
139
+ });
140
+ return {
141
+ getState: () => store.getState(),
142
+ dispatch: store.dispatch,
143
+ subscribe: (listener) => store.subscribe(listener),
144
+ writeFrame: (blob, index) => storageBackend.writeFrame(blob, index),
145
+ writeSessionMetadata: (metadata) => storageBackend.writeSessionMetadata(metadata)
146
+ };
147
+ }
148
+ //#endregion
149
+ export { createSlamAppStore as t };
@@ -1,8 +1,7 @@
1
- import { t as ARPose } from "./ar-types-BckI1E-O.js";
2
- import { a as TrackingSliceState, t as DeviceOrientation } from "./tracking-slice-DJZ9qeGg.js";
3
- import { t as RecordingState } from "./recording-slice-B-uCgGoh.js";
4
- import { n as SessionMetadata } from "./opfs-storage-DMtlt57S.js";
5
- import { n as StorageBackend } from "./storage-backend-CTJHNdMp.js";
1
+ import { a as TrackingSliceState } from "./tracking-slice-BuAZxXZ5.js";
2
+ import { t as RecordingState } from "./recording-slice-DaxHZvNu.js";
3
+ import { n as SessionMetadata } from "./opfs-storage-3VZh-qH6.js";
4
+ import { n as StorageBackend } from "./storage-backend-BdVLD0dU.js";
6
5
  import { GpsPoint, LatLong, Matrix4, RootState, Vector3 } from "gps-plus-slam-js";
7
6
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
8
7
  import { Middleware, Reducer, ReducersMapObject, configureStore } from "@reduxjs/toolkit";
@@ -18,8 +17,7 @@ interface TrackingQualityReport {
18
17
  confidence: number;
19
18
  subScores: {
20
19
  convergence: number;
21
- residualConsensus: number; /** `null` when the device cannot supply an absolute compass heading. */
22
- compassAgreement: number | null;
20
+ residualConsensus: number;
23
21
  gpsAccuracy: number;
24
22
  coverage: number;
25
23
  };
@@ -37,9 +35,7 @@ interface TrackingQualityReport {
37
35
  medianResidualM: number;
38
36
  medianRecentGpsAccuracyM: number;
39
37
  walkedDistanceM: number;
40
- directionSpreadDeg: number; /** `null` when §4.3 is unavailable (no absolute compass). */
41
- headingDeltaDeg: number | null;
42
- compassDriftDetected: boolean;
38
+ directionSpreadDeg: number;
43
39
  observationsSeen: number; /** §4.6 — diagnostic only, never feeds the aggregate. */
44
40
  gpsVsFusedMaxDivergenceM: number;
45
41
  };
@@ -61,10 +57,6 @@ interface TrackingQualityOptions {
61
57
  convergenceRotationWarnDeg?: number;
62
58
  /** §4.1 ΣΔtranslation (m) at/below which convergence scores 1.0. Fail ramp ends at 4×. */
63
59
  convergenceTranslationWarnM?: number;
64
- /** §4.3 EMA threshold (deg) below which compass scores 1.0. */
65
- compassWarnDeg?: number;
66
- /** §4.3 EMA threshold (deg) above which compass scores 0.0. */
67
- compassFailDeg?: number;
68
60
  /** Minimum GPS observations before leaving `warming-up`. */
69
61
  warmupMinObservations?: number;
70
62
  /** Minimum coverage score before leaving `warming-up`. */
@@ -73,8 +65,6 @@ interface TrackingQualityOptions {
73
65
  residualConfidenceTargetM?: number;
74
66
  /** §4.4 GPS-accuracy floor used to normalise residuals (m). */
75
67
  gpsAccuracyFloorM?: number;
76
- /** §4.3 consecutive compass-agreeing observations for first agreement. */
77
- firstAgreementMinStreak?: number;
78
68
  /** §4.8 consecutive sub-threshold observations before ok → degraded. */
79
69
  degradedHoldoff?: number;
80
70
  /**
@@ -97,7 +87,6 @@ interface AlignmentSnapshot {
97
87
  }
98
88
  interface TrackingQualitySliceState {
99
89
  recentAlignments: AlignmentSnapshot[];
100
- firstAgreementObservationIndex: number | null;
101
90
  report: TrackingQualityReport | null;
102
91
  /** §4.8 — consecutive observations with raw confidence < degradedThreshold. */
103
92
  degradedConsecutiveCount: number;
@@ -143,7 +132,8 @@ declare function computeConvergence(snapshots: readonly AlignmentSnapshot[], opt
143
132
  * the column-major layout that gl-matrix and the framework use.
144
133
  *
145
134
  * Rotation: extract the orientation quaternion with `mat4.getRotation`
146
- * and compute the relative angle via `quat.getAngle` (degrees).
135
+ * and compute the relative angle via the shared `geodesicAngleRad` kernel
136
+ * (radians, converted to degrees here).
147
137
  * Translation: extract the origin column with `mat4.getTranslation` and
148
138
  * compute the Euclidean distance.
149
139
  *
@@ -206,25 +196,6 @@ declare function computeCoverage(odometryPositions: readonly Vector3[], options?
206
196
  walkedDistanceM?: number;
207
197
  directionSpreadDeg?: number;
208
198
  }): CoverageResult;
209
- interface CompassAgreementResult {
210
- /** `null` when `absolute !== true` on the sensor orientation. */
211
- score: number | null;
212
- headingDeltaDeg: number | null;
213
- }
214
- /**
215
- * §4.3 — Compare the alignment matrix's mapping of AR-forward to ENU
216
- * against the device compass heading. Returns `score = null` whenever
217
- * the sensor's `absolute !== true` so the aggregate excludes the
218
- * sub-score (per Q2 in the plan).
219
- *
220
- * AR-forward in our `ARPose` convention is `(0, 0, -1)` (right-handed,
221
- * Y-up). We rotate that by the alignment's 3×3 rotation, take its
222
- * North/East components, and compare against the compass alpha.
223
- */
224
- declare function computeCompassAgreement(alignmentMatrix: Matrix4 | null, sensorOrientation: DeviceOrientation | null, arPose: ARPose | null, options?: {
225
- warnDeg?: number;
226
- failDeg?: number;
227
- }): CompassAgreementResult;
228
199
  /**
229
200
  * §4.6 — Maximum lateral distance between raw GPS positions and the
230
201
  * positions you would predict by transforming the matching odometry
@@ -234,14 +205,13 @@ declare function computeCompassAgreement(alignmentMatrix: Matrix4 | null, sensor
234
205
  declare function computeGpsVsFusedDivergence(alignmentMatrix: Matrix4 | null, gpsPositions: readonly GpsPoint[], odometryPositions: readonly Vector3[], zeroRef: LatLong | null, windowSize?: number): number;
235
206
  declare const snapshotPushed: _$_reduxjs_toolkit0.ActionCreatorWithPayload<AlignmentSnapshot, "trackingQuality/snapshotPushed">, snapshotsTrimmed: _$_reduxjs_toolkit0.ActionCreatorWithPayload<{
236
207
  size: number;
237
- }, "trackingQuality/snapshotsTrimmed">, reportUpdated: _$_reduxjs_toolkit0.ActionCreatorWithPayload<TrackingQualityReport | null, "trackingQuality/reportUpdated">, firstAgreementReached: _$_reduxjs_toolkit0.ActionCreatorWithPayload<number, "trackingQuality/firstAgreementReached">, degradedCountUpdated: _$_reduxjs_toolkit0.ActionCreatorWithPayload<number, "trackingQuality/degradedCountUpdated">, resetTrackingQuality: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"trackingQuality/resetTrackingQuality">;
208
+ }, "trackingQuality/snapshotsTrimmed">, reportUpdated: _$_reduxjs_toolkit0.ActionCreatorWithPayload<TrackingQualityReport | null, "trackingQuality/reportUpdated">, degradedCountUpdated: _$_reduxjs_toolkit0.ActionCreatorWithPayload<number, "trackingQuality/degradedCountUpdated">, resetTrackingQuality: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"trackingQuality/resetTrackingQuality">;
238
209
  declare const trackingQualityReducer: _$_reduxjs_toolkit0.Reducer<TrackingQualitySliceState>;
239
210
  interface RootWithTrackingQuality {
240
211
  trackingQuality?: TrackingQualitySliceState;
241
212
  }
242
213
  declare function selectTrackingQuality(state: RootWithTrackingQuality): TrackingQualityReport | null;
243
214
  declare function selectRecentAlignments(state: RootWithTrackingQuality): readonly AlignmentSnapshot[];
244
- declare function selectFirstAgreementObservationIndex(state: RootWithTrackingQuality): number | null;
245
215
  /**
246
216
  * Pure function — produces a {@link TrackingQualityReport} from a root
247
217
  * state and options. The Investigation harness imports this directly to
@@ -339,6 +309,46 @@ interface SlamAppStoreOptions<ExtraReducers extends ReducersMapObject = Record<s
339
309
  * @see docs/2026-05-16-tracking-quality-metrics-plan.md
340
310
  */
341
311
  trackingQualityOptions?: Partial<TrackingQualityOptions>;
312
+ /**
313
+ * Enable the library's Phase-4 **Stage-0** cold-start compass yaw override.
314
+ * **Default `true`** — Stage 0 is a field-validated, default-on feature: at
315
+ * cold start the GPS-derived yaw is unobservable (clustered fixes ⇒ a yaw set
316
+ * by noise that flips as the user looks around), so the compass heading gives
317
+ * a roughly-correct, stable orientation immediately ("open app, stand still,
318
+ * look around" works). It is an observability-gated handover — once a walked
319
+ * baseline conditions the GPS yaw, the solve hands back to GPS — so it does no
320
+ * harm once GPS is observable. Pass `false` to opt out (the recorder exposes
321
+ * this as a settings toggle).
322
+ *
323
+ * When enabled the factory dispatches `setColdStartOverrideEnabled(true)` the
324
+ * first time `gpsData` becomes non-null (right after the first `setZeroPos`,
325
+ * since the flag lives on that slice and cannot be set before it exists).
326
+ *
327
+ * Replay/determinism: the library's `DefaultAlignmentConfig` stays OFF, so
328
+ * historical recordings replay unchanged; default-on lives here as a recorded
329
+ * `gpsData` action. A recording made with this on therefore replays with the
330
+ * override on. **For Stage-A/§6a field-calibration recordings, turn this OFF**
331
+ * (recorder settings) so the captured compass behaviour is unmodified.
332
+ *
333
+ * @see GpsPlusSlamJs_Docs/docs/2026-06-26-stage0-field-collection-and-enablement.md
334
+ */
335
+ enableCompassColdStartOverride?: boolean;
336
+ /**
337
+ * **Debug/experiment flag** — enable the library's Phase-4 **Stage-C**
338
+ * trust-gated compass rotation prior (keeps a steady compass vote once GPS yaw
339
+ * is observable + the compass is trusted; supersedes Stage 0). Dispatches
340
+ * `setCompassRotationPriorEnabled(true)` once `gpsData` exists. Default `false`
341
+ * ⇒ byte-identical. Like the Stage-0 flag, the action persists into recordings.
342
+ */
343
+ enableCompassRotationPrior?: boolean;
344
+ /**
345
+ * **Debug/experiment flag** — enable the library's GPS-free compass↔WebXR
346
+ * consistency gate. When on, the compass override (Stage 0 / Stage C) abstains
347
+ * unless the compass is rotating in lock-step with the WebXR pose. Dispatches
348
+ * `setCompassWebXRConsistencyEnabled(true)` once `gpsData` exists. Default
349
+ * `false` ⇒ byte-identical. The action persists into recordings.
350
+ */
351
+ enableCompassWebXRConsistency?: boolean;
342
352
  }
343
353
  /**
344
354
  * Combined root state: the framework's base state plus any caller-supplied
@@ -368,4 +378,4 @@ interface SlamAppStore<ExtraReducers extends ReducersMapObject = Record<string,
368
378
  */
369
379
  declare function createSlamAppStore<ExtraReducers extends ReducersMapObject = Record<string, never>>(options: SlamAppStoreOptions<ExtraReducers>): SlamAppStore<ExtraReducers>;
370
380
  //#endregion
371
- export { resetTrackingQuality as A, computeResidualConsensus as C, firstAgreementReached as D, degradedCountUpdated as E, snapshotsTrimmed as F, trackingQualityReducer as I, CombinedRootState as L, selectRecentAlignments as M, selectTrackingQuality as N, matrixDelta as O, snapshotPushed as P, computeGpsVsFusedDivergence as S, createTrackingQualityListenerMiddleware as T, TrackingQualityState as _, SlamAppStoreOptions as a, computeCoverage as b, CompassAgreementResult as c, DEFAULT_TRACKING_QUALITY_OPTIONS as d, GpsAccuracyResult as f, TrackingQualitySliceState as g, TrackingQualityReport as h, SlamAppStore as i, selectFirstAgreementObservationIndex as j, reportUpdated as k, ConvergenceResult as l, TrackingQualityOptions as m, SlamAppMiddleware as n, createSlamAppStore as o, ResidualConsensusResult as p, SlamAppRootState as r, AlignmentSnapshot as s, SlamAppCombinedState as t, CoverageResult as u, computeCompassAgreement as v, computeTrackingQualityReport as w, computeGpsAccuracy as x, computeConvergence as y };
381
+ export { snapshotPushed as A, createTrackingQualityListenerMiddleware as C, resetTrackingQuality as D, reportUpdated as E, trackingQualityReducer as M, CombinedRootState as N, selectRecentAlignments as O, computeTrackingQualityReport as S, matrixDelta as T, computeConvergence as _, SlamAppStoreOptions as a, computeGpsVsFusedDivergence as b, ConvergenceResult as c, GpsAccuracyResult as d, ResidualConsensusResult as f, TrackingQualityState as g, TrackingQualitySliceState as h, SlamAppStore as i, snapshotsTrimmed as j, selectTrackingQuality as k, CoverageResult as l, TrackingQualityReport as m, SlamAppMiddleware as n, createSlamAppStore as o, TrackingQualityOptions as p, SlamAppRootState as r, AlignmentSnapshot as s, SlamAppCombinedState as t, DEFAULT_TRACKING_QUALITY_OPTIONS as u, computeCoverage as v, degradedCountUpdated as w, computeResidualConsensus as x, computeGpsAccuracy as y };
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-BckI1E-O.js";
1
+ import { r as DepthPoint } from "./ar-types-BFX2r1wk.js";
2
2
 
3
3
  //#region ../src/ar/depth-grid-lookup.d.ts
4
4
  interface DepthGridLookup {
@@ -1,4 +1,4 @@
1
- import { a as RgbTuple, i as DepthSample, t as ARPose } from "./ar-types-BckI1E-O.js";
1
+ import { a as RgbTuple, i as DepthSample, t as ARPose } from "./ar-types-BFX2r1wk.js";
2
2
  import { Matrix4 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-rgb-lookup.d.ts
@@ -1,4 +1,4 @@
1
- import { r as DepthPoint } from "./ar-types-BckI1E-O.js";
1
+ import { r as DepthPoint } from "./ar-types-BFX2r1wk.js";
2
2
  import { Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/ar/depth-unprojection.d.ts
@@ -1,7 +1,7 @@
1
- import { t as ArCrashIsolationOptions } from "./recording-options-D93kksJU.js";
2
- import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-C5inWeNV.js";
3
- import { n as PermissionStatus } from "./permission-checker-CtPtPQRq.js";
4
- import { r as SessionFeatureOptions } from "./webxr-session-COsOjJwn.js";
1
+ import { t as ArCrashIsolationOptions } from "./recording-options-BPCpMHLK.js";
2
+ import { n as RawDeviceOrientation, t as GpsPosition } from "./gps-BBO3hKfT.js";
3
+ import { n as PermissionStatus } from "./permission-checker-CDuI8BwC.js";
4
+ import { r as SessionFeatureOptions } from "./webxr-session-Do5L6G3B.js";
5
5
 
6
6
  //#region ../src/ar/enable-gps-ar.d.ts
7
7
  /**
@@ -1,4 +1,4 @@
1
- import { i as LatLongAlt, r as LatLong } from "./index-eaI1Z1KR.js";
1
+ import { i as LatLongAlt, r as LatLong } from "./index-_Rhgoqkh.js";
2
2
  import * as THREE from "three";
3
3
 
4
4
  //#region ../src/visualization/frame-conversions.d.ts