gps-plus-slam-app-framework 1.10.0 → 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 (203) hide show
  1. package/README.md +14 -14
  2. package/dist/{absolute-orientation-C_IxDR_j.d.ts → absolute-orientation-Dj1One3y.d.ts} +1 -1
  3. package/dist/{accuracy-circles-BE7tbvYV.d.ts → accuracy-circles-BHz7yVIL.d.ts} +1 -1
  4. package/dist/{app-selectors-CV7ggGoo.d.ts → app-selectors-DG0ZqaeI.d.ts} +1 -1
  5. package/dist/ar/ar-crash-isolation.d.ts +2 -0
  6. package/dist/ar/ar-crash-isolation.js +40 -0
  7. package/dist/ar/capability-checker.d.ts +1 -1
  8. package/dist/ar/capture-motion-gate.d.ts +2 -0
  9. package/dist/{capture-motion-gate-D1eyGC_o.js → ar/capture-motion-gate.js} +25 -2
  10. package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
  11. package/dist/ar/chromium-camera-access-workaround.js +1 -1
  12. package/dist/ar/depth-grid-lookup.d.ts +1 -1
  13. package/dist/ar/depth-occluder.d.ts +1 -1
  14. package/dist/ar/depth-occluder.js +1 -1
  15. package/dist/ar/depth-sampler.d.ts +2 -2
  16. package/dist/ar/depth-unprojection.d.ts +1 -1
  17. package/dist/ar/enable-gps-ar.d.ts +1 -1
  18. package/dist/ar/enable-gps-ar.js +2 -2
  19. package/dist/ar/frame-loop.d.ts +1 -1
  20. package/dist/ar/image-capture.d.ts +1 -1
  21. package/dist/ar/image-capture.js +1 -1
  22. package/dist/ar/image-quality.d.ts +2 -2
  23. package/dist/ar/image-quality.js +136 -4
  24. package/dist/ar/index.d.ts +28 -26
  25. package/dist/ar/index.js +15 -14
  26. package/dist/ar/occlusion-mesh-worker.d.ts +1 -1
  27. package/dist/ar/occupancy-grid.d.ts +1 -1
  28. package/dist/ar/occupancy-grid.js +1 -1
  29. package/dist/ar/occupancy-mesher.d.ts +1 -1
  30. package/dist/ar/occupancy-mesher.js +1 -1
  31. package/dist/ar/qr/index.d.ts +11 -0
  32. package/dist/ar/qr/index.js +11 -0
  33. package/dist/ar/{planar-pnp.d.ts → qr/planar-pnp.d.ts} +1 -1
  34. package/dist/ar/{planar-pnp.js → qr/planar-pnp.js} +1 -1
  35. package/dist/ar/qr/qr-debug-view.d.ts +2 -0
  36. package/dist/ar/{qr-debug-view.js → qr/qr-debug-view.js} +2 -2
  37. package/dist/ar/{qr-derived-pose.d.ts → qr/qr-derived-pose.d.ts} +1 -1
  38. package/dist/ar/{qr-derived-pose.js → qr/qr-derived-pose.js} +2 -2
  39. package/dist/ar/{qr-detection-controller.d.ts → qr/qr-detection-controller.d.ts} +1 -1
  40. package/dist/ar/qr/qr-detection-controller.js +2 -0
  41. package/dist/ar/{qr-frontend.d.ts → qr/qr-frontend.d.ts} +1 -1
  42. package/dist/ar/{qr-frontend.js → qr/qr-frontend.js} +1 -1
  43. package/dist/ar/{qr-pose.d.ts → qr/qr-pose.d.ts} +1 -1
  44. package/dist/ar/{qr-pose.js → qr/qr-pose.js} +1 -1
  45. package/dist/ar/qr/qr-size-depth-context.d.ts +3 -0
  46. package/dist/ar/{qr-size-depth-context.js → qr/qr-size-depth-context.js} +4 -4
  47. package/dist/ar/{qr-size-measurer.d.ts → qr/qr-size-measurer.d.ts} +1 -1
  48. package/dist/ar/qr/qr-size-measurer.js +2 -0
  49. package/dist/ar/replay-scene.d.ts +1 -1
  50. package/dist/ar/replay-scene.js +15 -13
  51. package/dist/ar/webxr-session.d.ts +4 -4
  52. package/dist/ar/webxr-session.js +2 -2
  53. package/dist/ar/xr-camera-texture.d.ts +1 -1
  54. package/dist/ar/xr-frame-loop.d.ts +1 -1
  55. package/dist/ar/xr-frame-loop.js +1 -1
  56. package/dist/ar-crash-isolation-DlXCGzMf.d.ts +52 -0
  57. package/dist/{ar-world-group-alignment-B6XiA1cT.d.ts → ar-world-group-alignment-BdS_h8Nf.d.ts} +2 -2
  58. package/dist/{capability-checker-DEo-ktWI.d.ts → capability-checker-BZ3_x1YL.d.ts} +1 -1
  59. package/dist/capture-motion-gate-CPwLekNf.d.ts +120 -0
  60. package/dist/{chromium-camera-access-workaround-DCd8SP2N.d.ts → chromium-camera-access-workaround-BHR4clTE.d.ts} +1 -1
  61. package/dist/{create-slam-app-store-CH31erpP.d.ts → create-slam-app-store-DFm5K9Ob.d.ts} +13 -4
  62. package/dist/{create-slam-app-store-DLv5ZwqU.js → create-slam-app-store-oK9bnqyI.js} +8 -6
  63. package/dist/{depth-grid-lookup-DY6zYTLx.d.ts → depth-grid-lookup-CCuzlqUo.d.ts} +1 -1
  64. package/dist/{depth-sampler-txG8evgQ.d.ts → depth-sampler-CS2jAFw4.d.ts} +2 -2
  65. package/dist/{depth-unprojection-JKkeqJrV.d.ts → depth-unprojection-ET3Gwedf.d.ts} +1 -1
  66. package/dist/{enable-gps-ar-BbNWyqp5.d.ts → enable-gps-ar-D_xEHzh5.d.ts} +10 -5
  67. package/dist/{file-system-utils-CfLTj5Ra.d.ts → file-system-utils-BHI0rXr9.d.ts} +1 -1
  68. package/dist/geo/h3-proximity.d.ts +1 -1
  69. package/dist/geo/h3-proximity.js +1 -1
  70. package/dist/geo/index.d.ts +1 -1
  71. package/dist/{geodesic-angle-HXBWiXiI.js → geodesic-angle-CZ_Ow90I.js} +2 -2
  72. package/dist/{gps-ar-pose-sampler-BOOV0jJk.d.ts → gps-ar-pose-sampler-BuuUuK-D.d.ts} +1 -1
  73. package/dist/{gps-event-coordinator-03rVh_us.d.ts → gps-event-coordinator-Cruoe5I-.d.ts} +4 -4
  74. package/dist/{gps-event-markers-BsC2Ynlh.d.ts → gps-event-markers-y2b2aVl6.d.ts} +35 -1
  75. package/dist/{h3-proximity-pFluGfwL.d.ts → h3-proximity-BaAulrnM.d.ts} +1 -1
  76. package/dist/{image-capture-Cr_rljeV.d.ts → image-capture-BevgKpoO.d.ts} +6 -6
  77. package/dist/{image-capture-BUqqsOi3.js → image-capture-C4DwxC10.js} +3 -3
  78. package/dist/{image-quality-BjBLoTec.d.ts → image-quality--HLuyJ2r.d.ts} +44 -2
  79. package/dist/{index-C2Bo0buN.d.ts → index-BWVwd9Zw.d.ts} +9 -71
  80. package/dist/{index-CuHaGY0F.d.ts → index-ClmnNJ6-.d.ts} +1 -1
  81. package/dist/index-Dxb6ATNK.d.ts +64 -0
  82. package/dist/index.d.ts +55 -55
  83. package/dist/index.js +23 -23
  84. package/dist/{leaflet-map-overlay-BRkUhZMD.js → leaflet-map-overlay-CTcTVmL1.js} +1 -1
  85. package/dist/{leaflet-map-overlay-QhF199BW.d.ts → leaflet-map-overlay-CksetpTt.d.ts} +1 -1
  86. package/dist/{map-data-D8sSxpOr.d.ts → map-data-D8cCqpOM.d.ts} +2 -2
  87. package/dist/{map-data-D3oE8AQP.js → map-data-DkhsYDGM.js} +1 -1
  88. package/dist/{map-overlay-draw-1E61FLKs.d.ts → map-overlay-draw-Cy-klqoA.d.ts} +1 -1
  89. package/dist/{median-Bla_W50f.js → median-DDBrZGP0.js} +2 -2
  90. package/dist/{occlusion-mesh-CZ4i_SW2.d.ts → occlusion-mesh-BWe2PrVi.d.ts} +22 -3
  91. package/dist/{occupancy-grid-f0I07UxI.d.ts → occupancy-grid-CYBdmMOo.d.ts} +2 -2
  92. package/dist/{persistence-middleware-CI4Cetnl.d.ts → persistence-middleware-Cun4aF5M.d.ts} +12 -2
  93. package/dist/{planar-pnp-CPLhg5MX.d.ts → planar-pnp-ByxwDEyM.d.ts} +2 -2
  94. package/dist/{ar-D-03Kso-.js → qr-CTp5xI83.js} +11 -25
  95. package/dist/{qr-debug-view-BmbWo06j.d.ts → qr-debug-view-CGlITU09.d.ts} +2 -2
  96. package/dist/{qr-derived-pose-DEYT85ul.d.ts → qr-derived-pose-DZPxZd9C.d.ts} +3 -3
  97. package/dist/{qr-detected-slice-CPEkGbxh.d.ts → qr-detected-slice-mfyxD2-M.d.ts} +9 -8
  98. package/dist/{qr-detection-controller-IcMRpTjV.d.ts → qr-detection-controller-C5NII-vs.d.ts} +4 -4
  99. package/dist/{qr-detection-controller-bRTJXC6G.js → qr-detection-controller-DXc1yHRf.js} +3 -3
  100. package/dist/{qr-frontend-61SKPSyU.d.ts → qr-frontend-QzKZSqB-.d.ts} +2 -2
  101. package/dist/{qr-pose-CCTF1PP0.d.ts → qr-pose-21fRDcFO.d.ts} +1 -1
  102. package/dist/{qr-pose-aggregation-H-O_Jjz9.js → qr-pose-aggregation-Cp0Mtg_j.js} +4 -4
  103. package/dist/{qr-pose-aggregation-BL6gfl0s.d.ts → qr-pose-aggregation-mABSN0AW.d.ts} +2 -2
  104. package/dist/{qr-size-depth-context-DJsYqbqY.d.ts → qr-size-depth-context-CMDv6T29.d.ts} +3 -3
  105. package/dist/{qr-size-measurer-Bl_i-umk.d.ts → qr-size-measurer-rVFf4AdM.d.ts} +5 -5
  106. package/dist/{qr-size-measurer-BVOIg-He.js → qr-size-measurer-zZB9S1va.js} +4 -4
  107. package/dist/{recording-replayer-DyIN13nG.d.ts → recording-replayer-qT2EM1Qs.d.ts} +1 -1
  108. package/dist/{recording-slice-DziOl7P5.d.ts → recording-slice-DXw5-UvO.d.ts} +10 -5
  109. package/dist/{replay-engine-DAymjsd1.d.ts → replay-engine-B1H_kLhK.d.ts} +1 -1
  110. package/dist/{replay-scene-CZdWgcpc.d.ts → replay-scene-BJeO36YT.d.ts} +12 -5
  111. package/dist/sensors/absolute-orientation.d.ts +1 -1
  112. package/dist/sensors/absolute-orientation.js +1 -1
  113. package/dist/sensors/gps.d.ts +1 -1
  114. package/dist/sensors/index.d.ts +3 -3
  115. package/dist/sensors/permission-checker.d.ts +1 -1
  116. package/dist/{session-disposers-BZS-hi8u.js → session-disposers-B7hUN90w.js} +1 -1
  117. package/dist/state/app-selectors.d.ts +1 -1
  118. package/dist/state/combined-root-state.d.ts +1 -1
  119. package/dist/state/create-slam-app-store.d.ts +1 -1
  120. package/dist/state/create-slam-app-store.js +1 -1
  121. package/dist/state/gps-ar-pose-sampler.d.ts +2 -2
  122. package/dist/state/gps-event-coordinator.d.ts +2 -2
  123. package/dist/state/gps-event-coordinator.js +1 -1
  124. package/dist/state/index.d.ts +17 -18
  125. package/dist/state/index.js +4 -5
  126. package/dist/state/persistence-middleware.d.ts +2 -2
  127. package/dist/state/persistence-middleware.js +24 -15
  128. package/dist/state/qr-detected-slice.d.ts +3 -3
  129. package/dist/state/qr-detected-slice.js +8 -8
  130. package/dist/state/recording-replayer.d.ts +2 -2
  131. package/dist/state/recording-replayer.js +1 -1
  132. package/dist/state/recording-slice.d.ts +1 -1
  133. package/dist/state/replay-engine.d.ts +1 -1
  134. package/dist/state/store-subscribers.d.ts +2 -2
  135. package/dist/state/store-subscribers.js +1 -1
  136. package/dist/state/subscribe-to-selector.d.ts +1 -1
  137. package/dist/state/tracking-quality.d.ts +1 -1
  138. package/dist/state/tracking-quality.js +2 -2
  139. package/dist/state/tracking-slice.d.ts +1 -1
  140. package/dist/{state-U45ioVyB.js → state-CDF5LvsO.js} +1 -2
  141. package/dist/storage/file-system-utils.d.ts +1 -1
  142. package/dist/storage/file-system-utils.js +1 -1
  143. package/dist/storage/index.d.ts +2 -2
  144. package/dist/storage/zip-coverage-embed.d.ts +1 -1
  145. package/dist/storage/zip-coverage-embed.js +1 -1
  146. package/dist/{store-subscribers-DtwakLrQ.d.ts → store-subscribers-CWHToX6N.d.ts} +2 -2
  147. package/dist/{subscribe-to-selector-Cgo9JTfS.d.ts → subscribe-to-selector-j-eOYybQ.d.ts} +1 -1
  148. package/dist/test-utils/browser-mocks.d.ts +1 -1
  149. package/dist/{tracking-slice-Bt2OEQhA.d.ts → tracking-slice-BAbcZK-Y.d.ts} +3 -2
  150. package/dist/types/ar-types.d.ts +1 -1
  151. package/dist/types/index.d.ts +1 -1
  152. package/dist/utils/index.js +1 -1
  153. package/dist/visualization/accuracy-circles.d.ts +1 -1
  154. package/dist/visualization/accuracy-circles.js +1 -1
  155. package/dist/visualization/alignment-lerper.d.ts +1 -1
  156. package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
  157. package/dist/visualization/ar-world-group-alignment.js +2 -2
  158. package/dist/visualization/camera-follower.d.ts +1 -1
  159. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  160. package/dist/visualization/gps-anchor.js +2 -2
  161. package/dist/visualization/gps-event-markers.d.ts +2 -2
  162. package/dist/visualization/gps-event-markers.js +27 -6
  163. package/dist/visualization/index.d.ts +13 -14
  164. package/dist/visualization/index.js +4 -5
  165. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  166. package/dist/visualization/leaflet-map-overlay.js +1 -1
  167. package/dist/visualization/map-data.d.ts +1 -1
  168. package/dist/visualization/map-data.js +1 -1
  169. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  170. package/dist/visualization/occluder-mesh-driver.d.ts +1 -1
  171. package/dist/visualization/occluder-mesh-driver.js +1 -1
  172. package/dist/visualization/occlusion-mesh.d.ts +2 -2
  173. package/dist/visualization/occlusion-mesh.js +28 -3
  174. package/dist/visualization/three-dispose.d.ts +1 -1
  175. package/dist/visualization/vis-colors.d.ts +1 -1
  176. package/dist/{webxr-session-CGFZ429B.d.ts → webxr-session-DefwObIu.d.ts} +144 -194
  177. package/dist/{webxr-session-DWKUsCN9.js → webxr-session-OyR3YbTq.js} +151 -281
  178. package/dist/{xr-frame-loop-25gM4B0K.d.ts → xr-frame-loop-BiZvgqP7.d.ts} +1 -1
  179. package/dist/{zip-coverage-embed-BrodRLq0.d.ts → zip-coverage-embed-CyoX7XL7.d.ts} +1 -1
  180. package/package.json +4 -2
  181. package/dist/ar/qr-debug-view.d.ts +0 -2
  182. package/dist/ar/qr-detection-controller.js +0 -2
  183. package/dist/ar/qr-size-depth-context.d.ts +0 -3
  184. package/dist/ar/qr-size-measurer.js +0 -2
  185. package/dist/capture-motion-gate-BmjiWUJv.d.ts +0 -24
  186. package/dist/map-overlay-0yJOcEVO.d.ts +0 -153
  187. package/dist/recording-options-Cai9D14V.d.ts +0 -700
  188. package/dist/state/recording-options.d.ts +0 -2
  189. package/dist/state/recording-options.js +0 -620
  190. package/dist/visualization/map-overlay.d.ts +0 -2
  191. package/dist/visualization/map-overlay.js +0 -241
  192. /package/dist/{alignment-lerper-B4COh_0p.d.ts → alignment-lerper-DAHicRON.d.ts} +0 -0
  193. /package/dist/{ar-types-CBafnxhE.d.ts → ar-types-D6PYS4bc.d.ts} +0 -0
  194. /package/dist/{camera-follower-B6zA3dy9.d.ts → camera-follower-CO_ibF2o.d.ts} +0 -0
  195. /package/dist/{css3d-renderer-manager-DbrSY7Mh.d.ts → css3d-renderer-manager-CJjHtCMT.d.ts} +0 -0
  196. /package/dist/{device-orientation-cache-BjEaEAmh.js → device-orientation-cache-j-kLP8he.js} +0 -0
  197. /package/dist/{frame-loop-7HigCj7m.d.ts → frame-loop-7GBMBu68.d.ts} +0 -0
  198. /package/dist/{gps-CX5b9g3s.d.ts → gps-CnhYrJCa.d.ts} +0 -0
  199. /package/dist/{occupancy-mesher-BqnRd10x.d.ts → occupancy-mesher-B4Bv4BTk.d.ts} +0 -0
  200. /package/dist/{permission-checker-D1C5zvo-.d.ts → permission-checker-B-VtjnBA.d.ts} +0 -0
  201. /package/dist/{three-dispose-C9mdpSRX.d.ts → three-dispose-C3mnKQR5.d.ts} +0 -0
  202. /package/dist/{vis-colors-DjStl_tD.d.ts → vis-colors-CoSpbZEO.d.ts} +0 -0
  203. /package/dist/{xr-camera-texture-C6Z4d7RR.d.ts → xr-camera-texture-q0eIDSRg.d.ts} +0 -0
@@ -1,8 +1,8 @@
1
- import { i as Pose, r as Point2, s as SolvePnpSquare } from "./qr-pose-CCTF1PP0.js";
2
- import { a as QrSizeMeasurerOptions, n as QrSizeDepthContext } from "./qr-size-measurer-Bl_i-umk.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-CCTF1PP0.js";
2
- import { l as QrSizeEstimate } from "./qr-size-measurer-Bl_i-umk.js";
3
- import { i as RawQrObservation, n as DerivedQrPlacement, t as DeriveQrPoseDeps } from "./qr-derived-pose-DEYT85ul.js";
4
- import { a as QrPoseStability, o as QrPoseStabilityOptions } from "./qr-pose-aggregation-BL6gfl0s.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-CCTF1PP0.js";
2
- import { i as QrDetection, o as RgbaImage } from "./qr-frontend-61SKPSyU.js";
3
- import { i as RawQrObservation } from "./qr-derived-pose-DEYT85ul.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-CCTF1PP0.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,10 +1,10 @@
1
- import { n as lowerMedian } from "./median-Bla_W50f.js";
2
- import { t as geodesicAngleRad } from "./geodesic-angle-HXBWiXiI.js";
1
+ import { n as lowerMedian } from "./median-DDBrZGP0.js";
2
+ import { t as geodesicAngleRad } from "./geodesic-angle-CZ_Ow90I.js";
3
3
  import { quat } from "gl-matrix";
4
- //#region ../src/ar/qr-pose-aggregation.ts
4
+ //#region ../src/ar/qr/qr-pose-aggregation.ts
5
5
  /**
6
6
  * QR pose aggregation — sliding-window pose stabilization
7
- * (docs `2026-06-16-followup-qr-pose-stabilization-sliding-window.md`).
7
+ * (docs `2026-06-16-0858-qr-pose-stabilization-sliding-window-followup.md`).
8
8
  *
9
9
  * Pure, device-free, store-free robust aggregation of a STATIC fiducial's pose
10
10
  * across a short sliding window of detections. A QR is static in the world, so
@@ -1,7 +1,7 @@
1
- import { i as Pose } from "./qr-pose-CCTF1PP0.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-CBafnxhE.js";
2
- import { n as QrSizeDepthContext } from "./qr-size-measurer-Bl_i-umk.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-CBafnxhE.js";
2
- import { t as DepthUnprojector } from "./depth-unprojection-JKkeqJrV.js";
3
- import { r as Point2 } from "./qr-pose-CCTF1PP0.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,9 +1,9 @@
1
- import { t as interpolatingMedian } from "./median-Bla_W50f.js";
1
+ import { t as interpolatingMedian } from "./median-DDBrZGP0.js";
2
2
  import { vec3 } from "gl-matrix";
3
- //#region ../src/ar/qr-size-from-depth.ts
3
+ //#region ../src/ar/qr/qr-size-from-depth.ts
4
4
  /**
5
5
  * QR size from depth — Note 4 of the QR-tracking follow-up plan
6
- * (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`).
7
7
  *
8
8
  * MEASURE a QR's printed physical size directly from the depth map, so the
9
9
  * QR content + printed size are irrelevant and `qr.physicalSizeM` need not be
@@ -389,7 +389,7 @@ function createQrSizeAccumulator(options = {}) {
389
389
  };
390
390
  }
391
391
  //#endregion
392
- //#region ../src/ar/qr-size-measurer.ts
392
+ //#region ../src/ar/qr/qr-size-measurer.ts
393
393
  const EPS = 1e-9;
394
394
  /** Pixel corner → normalized screen point for the given frame. */
395
395
  function toScreen(corner, image) {
@@ -1,4 +1,4 @@
1
- import { N as CombinedRootState } from "./create-slam-app-store-CH31erpP.js";
1
+ import { N as CombinedRootState } from "./create-slam-app-store-DFm5K9Ob.js";
2
2
  import { i as RecordedAction } from "./zip-reader-BHc_b_iA.js";
3
3
 
4
4
  //#region ../src/state/recording-replayer.d.ts
@@ -1,6 +1,6 @@
1
- import { i as DepthSample } from "./ar-types-CBafnxhE.js";
2
- import { y as RecordingOptions } from "./recording-options-Cai9D14V.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-CH31erpP.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-DbrSY7Mh.js";
2
- import { t as CameraFollower } from "./camera-follower-B6zA3dy9.js";
3
- import { t as AlignmentLerper } from "./alignment-lerper-B4COh_0p.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-C_IxDR_j.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 startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-CX5b9g3s.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,5 +1,5 @@
1
- import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-CX5b9g3s.js";
2
- import { a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission$1, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-D1C5zvo-.js";
3
- import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-C_IxDR_j.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
+ import { a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission$1, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-B-VtjnBA.js";
3
+ import { a as startAbsoluteOrientationWatch, i as isAbsoluteOrientationAvailable, n as AbsoluteOrientationStatus, o as stopAbsoluteOrientationWatch, r as getLatestAbsoluteOrientation, t as AbsoluteOrientationReading } from "../absolute-orientation-Dj1One3y.js";
4
4
  import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-DjVuLXve.js";
5
5
  export { type AbsoluteOrientationReading, type AbsoluteOrientationStatus, GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, type GpsPosition, type PermissionCheckResult, type PermissionStatus, type RawDeviceOrientation, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, createGpsErrorHandler, getGpsErrorMessage, getLatestAbsoluteOrientation, isAbsoluteOrientationAvailable, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, startAbsoluteOrientationWatch, startGpsWatch, startOrientationWatch, stopAbsoluteOrientationWatch, stopGpsWatch, stopOrientationWatch };
@@ -1,2 +1,2 @@
1
- import { _ as subscribePermissionChanges, a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission, r as PermissionSubscription, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-D1C5zvo-.js";
1
+ import { _ as subscribePermissionChanges, a as checkCameraPermission, c as checkOrientationPermission, d as requestCameraPermission, f as requestGeolocationPermission, g as setFileSystemState, h as resetFileSystemState, i as checkAllPermissions, l as checkWebXRSupport, m as requestWebXRWithDepthPermission, n as PermissionStatus, o as checkFileSystemPermission, p as requestOrientationPermission, r as PermissionSubscription, s as checkGeolocationPermission, t as PermissionCheckResult, u as requestAllPermissions } from "../permission-checker-B-VtjnBA.js";
2
2
  export { PermissionCheckResult, PermissionStatus, PermissionSubscription, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, subscribePermissionChanges };
@@ -19,7 +19,7 @@ import { createLogger } from "./utils/logger.js";
19
19
  * `arWorldGroup`). Because `initAR()` throws if a prior session is still live,
20
20
  * every restart must pass through `resetWebXRState()`, making it the single
21
21
  * chokepoint where flushing these disposers is guaranteed. See
22
- * gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-08-arworldgroup-alignment-session-scoped-disposal.md.
22
+ * gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-08-2149-arworldgroup-alignment-session-scoped-disposal.md.
23
23
  */
24
24
  const log = createLogger("SessionDisposers");
25
25
  const disposers = /* @__PURE__ */ new Set();
@@ -1,2 +1,2 @@
1
- import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-CV7ggGoo.js";
1
+ import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-DG0ZqaeI.js";
2
2
  export { selectAlignmentMatrix, selectFrameTilesInWebXR, selectGpsPositions, selectOdometryPositions, selectOdometryRotations, selectZeroReference };
@@ -1,2 +1,2 @@
1
- import { N as CombinedRootState } from "../create-slam-app-store-CH31erpP.js";
1
+ import { N as CombinedRootState } from "../create-slam-app-store-DFm5K9Ob.js";
2
2
  export { CombinedRootState };
@@ -1,2 +1,2 @@
1
- import { a as SlamAppStoreOptions, i as SlamAppStore, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, t as SlamAppCombinedState } from "../create-slam-app-store-CH31erpP.js";
1
+ import { a as SlamAppStoreOptions, i as SlamAppStore, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, t as SlamAppCombinedState } from "../create-slam-app-store-DFm5K9Ob.js";
2
2
  export { SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, createSlamAppStore };
@@ -1,2 +1,2 @@
1
- import { t as createSlamAppStore } from "../create-slam-app-store-DLv5ZwqU.js";
1
+ import { t as createSlamAppStore } from "../create-slam-app-store-oK9bnqyI.js";
2
2
  export { createSlamAppStore };
@@ -1,3 +1,3 @@
1
- import { c as extractOdomPosition, l as extractOdomRotation, t as ARPose } from "../ar-types-CBafnxhE.js";
2
- import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-BOOV0jJk.js";
1
+ import { c as extractOdomPosition, l as extractOdomRotation, t as ARPose } from "../ar-types-D6PYS4bc.js";
2
+ import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-BuuUuK-D.js";
3
3
  export { ARPose, CaptureGpsAnchorSampleOptions, GpsAnchorSample, GpsAnchorSampleGpsPoint, captureGpsAnchorSample, extractOdomPosition, extractOdomRotation };
@@ -1,3 +1,3 @@
1
- import { c as extractOdomPosition, l as extractOdomRotation } from "../ar-types-CBafnxhE.js";
2
- import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as updateDeviceOrientation, n as buildRawGpsPoint, o as resetCoordinatorState, r as buildRecordGpsEventPayload, s as toRawAbsoluteOrientation, t as RecordingCoordinatorConfig } from "../gps-event-coordinator-03rVh_us.js";
1
+ import { c as extractOdomPosition, l as extractOdomRotation } from "../ar-types-D6PYS4bc.js";
2
+ import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as updateDeviceOrientation, n as buildRawGpsPoint, o as resetCoordinatorState, r as buildRecordGpsEventPayload, s as toRawAbsoluteOrientation, t as RecordingCoordinatorConfig } from "../gps-event-coordinator-Cruoe5I-.js";
3
3
  export { RecordingCoordinatorConfig, buildRawGpsPoint, buildRecordGpsEventPayload, createGpsPositionHandler, eulerToQuaternion, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, resetCoordinatorState, toRawAbsoluteOrientation, updateDeviceOrientation };
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "../utils/logger.js";
2
2
  import { extractOdomPosition, extractOdomRotation } from "../types/ar-types.js";
3
- import { n as resetDeviceOrientationCache, r as updateDeviceOrientation, t as getLastDeviceOrientation } from "../device-orientation-cache-BjEaEAmh.js";
3
+ import { n as resetDeviceOrientationCache, r as updateDeviceOrientation, t as getLastDeviceOrientation } from "../device-orientation-cache-j-kLP8he.js";
4
4
  import { getLatestAbsoluteOrientation } from "../sensors/absolute-orientation.js";
5
5
  import { eulerToQuaternion, getOdometryPositions, getZeroReference, recordGpsEvent, setZeroPos } from "gps-plus-slam-js";
6
6
  //#region ../src/state/gps-event-coordinator.ts
@@ -1,20 +1,19 @@
1
- import { c as extractOdomPosition, i as DepthSample, l as extractOdomRotation, r as DepthPoint } from "../ar-types-CBafnxhE.js";
2
- import { C as cloneRecordingOptions, E as saveRecordingOptions, L as validateRecordingOptions, T as resetRecordingOptions, a as DepthCaptureOptions, b as RecordingOptionsInput, c as IMAGE_CONSTRAINTS, i as DEPTH_CONSTRAINTS, j as validateImageOptions, k as validateDepthOptions, l as ImageCaptureOptions, r as DEFAULT_RECORDING_OPTIONS, w as loadRecordingOptions, x as STORAGE_KEY } from "../recording-options-Cai9D14V.js";
3
- import { a as TrackingSliceState, c as poseLost, d as selectLastRestartedPayload, f as selectLastSensorOrientation, g as trackingReducer, h as selectTrackingPhase, i as TrackingPhase, l as poseReceived, m as selectLostFrameCount, n as PoseReceivedPayload, o as clearLastRestartedPayload, p as selectLastValidPose, r as ResetTransformData, s as originReset, t as DeviceOrientation, u as resetTracking } from "../tracking-slice-Bt2OEQhA.js";
4
- import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-Bl_i-umk.js";
5
- import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-BL6gfl0s.js";
6
- import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata$1, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-DziOl7P5.js";
7
- import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-CPEkGbxh.js";
1
+ import { c as extractOdomPosition, i as DepthSample, l as extractOdomRotation, r as DepthPoint } from "../ar-types-D6PYS4bc.js";
2
+ import { a as TrackingSliceState, c as poseLost, d as selectLastRestartedPayload, f as selectLastSensorOrientation, g as trackingReducer, h as selectTrackingPhase, i as TrackingPhase, l as poseReceived, m as selectLostFrameCount, n as PoseReceivedPayload, o as clearLastRestartedPayload, p as selectLastValidPose, r as ResetTransformData, s as originReset, t as DeviceOrientation, u as resetTracking } from "../tracking-slice-BAbcZK-Y.js";
3
+ import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-rVFf4AdM.js";
4
+ import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-mABSN0AW.js";
5
+ import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata$1, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-DXw5-UvO.js";
6
+ import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-mfyxD2-M.js";
8
7
  import { n as SessionMetadata } from "../opfs-storage-S_odkCk1.js";
9
8
  import { n as StorageBackend } from "../storage-backend-BX7egQKi.js";
10
- import { A as snapshotPushed, C as createTrackingQualityListenerMiddleware, D as resetTrackingQuality, E as reportUpdated, M as trackingQualityReducer, O as selectRecentAlignments, S as computeTrackingQualityReport, T as matrixDelta, _ as computeConvergence, a as SlamAppStoreOptions, b as computeGpsVsFusedDivergence, g as TrackingQualityState, h as TrackingQualitySliceState, i as SlamAppStore, j as snapshotsTrimmed, k as selectTrackingQuality, m as TrackingQualityReport, n as SlamAppMiddleware, o as createSlamAppStore, p as TrackingQualityOptions, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, u as DEFAULT_TRACKING_QUALITY_OPTIONS, v as computeCoverage, w as degradedCountUpdated, x as computeResidualConsensus, y as computeGpsAccuracy } from "../create-slam-app-store-CH31erpP.js";
11
- import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as updateDeviceOrientation, n as buildRawGpsPoint, o as resetCoordinatorState, r as buildRecordGpsEventPayload, t as RecordingCoordinatorConfig } from "../gps-event-coordinator-03rVh_us.js";
12
- import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-BOOV0jJk.js";
13
- import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-DyIN13nG.js";
14
- import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-CI4Cetnl.js";
15
- import { a as ReplayAction, c as computeInterActionDelay, i as ProgressCallback, l as extractActionTimestamp, n as DEFAULT_MAX_DELAY_MS, o as ReplayEngine, r as ErrorCallback, s as ReplayState, t as CompleteCallback } from "../replay-engine-DAymjsd1.js";
16
- import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-Cgo9JTfS.js";
17
- import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-DtwakLrQ.js";
18
- import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-CV7ggGoo.js";
19
- import { a as RawGpsPoint, c as calcRelativeCoordsInMeters, d as OnboardingGuidance, f as OnboardingPhase, i as RawDeviceOrientation, l as recordGpsEvent, m as selectOnboardingGuidance, n as GpsPoint, o as RecordGpsEventPayload, p as computeOnboardingGuidance, r as LatLong, s as add2dImage, t as Add2dImagePayload, u as setZeroPos } from "../index-CuHaGY0F.js";
20
- export { Add2dImagePayload, AlignmentSnapshot, CaptureGpsAnchorSampleOptions, CompleteCallback, DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, DepthCaptureOptions, DepthPoint, DepthSample, DeviceOrientation, ErrorCallback, GpsAnchorSample, GpsAnchorSampleGpsPoint, GpsPoint, IMAGE_CONSTRAINTS, ImageCaptureOptions, LatLong, OnboardingGuidance, OnboardingPhase, SessionMetadata as OpfsSessionMetadata, PersistenceMiddlewareOptions, PoseReceivedPayload, ProgressCallback, QrDetectedState, QrDetectionEntry, QrMarkerState, QrPoseStability, QrPoseStabilityOptions, QrPoseStabilityStatus, QrSizeEstimate, QrSizeStatus, RawDeviceOrientation, RawGpsPoint, RecordGpsEventPayload, RecordingCoordinatorConfig, RecordingOptionsInput, RecordingState, ReplayAction, ReplayEngine, ReplayRecordingOptions, ReplayState, ResetTransformData, RootWithQrDetected, STORAGE_KEY, SessionMetadata$1 as SessionMetadata, SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, StorageBackend, StoreSubscriberDeps, SubscribableStore, TrackingPhase, TrackingQualityOptions, TrackingQualityReport, TrackingQualitySliceState, TrackingQualityState, TrackingSliceState, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, cloneRecordingOptions, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectDerivedQrPlacement, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
9
+ import { A as snapshotPushed, C as createTrackingQualityListenerMiddleware, D as resetTrackingQuality, E as reportUpdated, M as trackingQualityReducer, O as selectRecentAlignments, S as computeTrackingQualityReport, T as matrixDelta, _ as computeConvergence, a as SlamAppStoreOptions, b as computeGpsVsFusedDivergence, g as TrackingQualityState, h as TrackingQualitySliceState, i as SlamAppStore, j as snapshotsTrimmed, k as selectTrackingQuality, m as TrackingQualityReport, n as SlamAppMiddleware, o as createSlamAppStore, p as TrackingQualityOptions, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, u as DEFAULT_TRACKING_QUALITY_OPTIONS, v as computeCoverage, w as degradedCountUpdated, x as computeResidualConsensus, y as computeGpsAccuracy } from "../create-slam-app-store-DFm5K9Ob.js";
10
+ import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as updateDeviceOrientation, n as buildRawGpsPoint, o as resetCoordinatorState, r as buildRecordGpsEventPayload, t as RecordingCoordinatorConfig } from "../gps-event-coordinator-Cruoe5I-.js";
11
+ import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-BuuUuK-D.js";
12
+ import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-qT2EM1Qs.js";
13
+ import { i as slicePrefixOf, n as PersistenceMiddlewareOptions, r as createPersistenceMiddleware } from "../persistence-middleware-Cun4aF5M.js";
14
+ import { a as ReplayAction, c as computeInterActionDelay, i as ProgressCallback, l as extractActionTimestamp, n as DEFAULT_MAX_DELAY_MS, o as ReplayEngine, r as ErrorCallback, s as ReplayState, t as CompleteCallback } from "../replay-engine-B1H_kLhK.js";
15
+ import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-j-eOYybQ.js";
16
+ import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-CWHToX6N.js";
17
+ import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-DG0ZqaeI.js";
18
+ import { a as RawGpsPoint, c as calcRelativeCoordsInMeters, d as OnboardingGuidance, f as OnboardingPhase, i as RawDeviceOrientation, l as recordGpsEvent, m as selectOnboardingGuidance, n as GpsPoint, o as RecordGpsEventPayload, p as computeOnboardingGuidance, r as LatLong, s as add2dImage, t as Add2dImagePayload, u as setZeroPos } from "../index-ClmnNJ6-.js";
19
+ export { Add2dImagePayload, AlignmentSnapshot, CaptureGpsAnchorSampleOptions, CompleteCallback, DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_TRACKING_QUALITY_OPTIONS, DepthPoint, DepthSample, DeviceOrientation, ErrorCallback, GpsAnchorSample, GpsAnchorSampleGpsPoint, GpsPoint, LatLong, OnboardingGuidance, OnboardingPhase, SessionMetadata as OpfsSessionMetadata, PersistenceMiddlewareOptions, PoseReceivedPayload, ProgressCallback, QrDetectedState, QrDetectionEntry, QrMarkerState, QrPoseStability, QrPoseStabilityOptions, QrPoseStabilityStatus, QrSizeEstimate, QrSizeStatus, RawDeviceOrientation, RawGpsPoint, RecordGpsEventPayload, RecordingCoordinatorConfig, RecordingState, ReplayAction, ReplayEngine, ReplayRecordingOptions, ReplayState, ResetTransformData, RootWithQrDetected, SessionMetadata$1 as SessionMetadata, SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, StorageBackend, StoreSubscriberDeps, SubscribableStore, TrackingPhase, TrackingQualityOptions, TrackingQualityReport, TrackingQualitySliceState, TrackingQualityState, TrackingSliceState, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetTracking, resetTrackingQuality, selectAlignmentMatrix, selectDerivedQrPlacement, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, wireStoreSubscribers };
@@ -1,7 +1,6 @@
1
1
  import { extractOdomPosition, extractOdomRotation } from "../types/ar-types.js";
2
2
  import { clearLastRestartedPayload, originReset, poseLost, poseReceived, resetTracking, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectTrackingPhase, trackingReducer } from "./tracking-slice.js";
3
- import { r as updateDeviceOrientation, t as getLastDeviceOrientation } from "../device-orientation-cache-BjEaEAmh.js";
4
- import { DEFAULT_RECORDING_OPTIONS, DEPTH_CONSTRAINTS, IMAGE_CONSTRAINTS, STORAGE_KEY, cloneRecordingOptions, loadRecordingOptions, resetRecordingOptions, saveRecordingOptions, validateDepthOptions, validateImageOptions, validateRecordingOptions } from "./recording-options.js";
3
+ import { r as updateDeviceOrientation, t as getLastDeviceOrientation } from "../device-orientation-cache-j-kLP8he.js";
5
4
  import { endSession, recordDepthSample, recordWriteFailure, recordingReducer, startSession } from "./recording-slice.js";
6
5
  import { DEFAULT_QR_MAX_HISTORY, clearAllQrMarkers, clearQrMarker, medianQrPosition, pruneQrDetections, qrDetectedReducer, recordQrDetection, recordQrSizeEstimate, selectDerivedQrPlacement, selectLatestQrDetection, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, setQrMaxHistory } from "./qr-detected-slice.js";
7
6
  import { buildRawGpsPoint, buildRecordGpsEventPayload, createGpsPositionHandler, eulerToQuaternion, resetCoordinatorState } from "./gps-event-coordinator.js";
@@ -9,10 +8,10 @@ import { captureGpsAnchorSample } from "./gps-ar-pose-sampler.js";
9
8
  import { selectAlignmentMatrix, selectFrameTilesInWebXR, selectGpsPositions, selectOdometryPositions, selectOdometryRotations, selectZeroReference } from "./app-selectors.js";
10
9
  import { DEFAULT_TRACKING_QUALITY_OPTIONS, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeResidualConsensus, computeTrackingQualityReport, createTrackingQualityListenerMiddleware, degradedCountUpdated, matrixDelta, reportUpdated, resetTrackingQuality, selectRecentAlignments, selectTrackingQuality, snapshotPushed, snapshotsTrimmed, trackingQualityReducer } from "./tracking-quality.js";
11
10
  import { createPersistenceMiddleware, slicePrefixOf } from "./persistence-middleware.js";
12
- import { t as createSlamAppStore } from "../create-slam-app-store-DLv5ZwqU.js";
11
+ import { t as createSlamAppStore } from "../create-slam-app-store-oK9bnqyI.js";
13
12
  import { replayRecording } from "./recording-replayer.js";
14
13
  import { DEFAULT_MAX_DELAY_MS, ReplayEngine, computeInterActionDelay, extractActionTimestamp } from "./replay-engine.js";
15
14
  import { subscribeToSelector } from "./subscribe-to-selector.js";
16
15
  import { wireStoreSubscribers } from "./store-subscribers.js";
17
- import { a as computeOnboardingGuidance, i as setZeroPos, n as calcRelativeCoordsInMeters, o as selectOnboardingGuidance, r as recordGpsEvent, t as add2dImage } from "../state-U45ioVyB.js";
18
- export { DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, IMAGE_CONSTRAINTS, ReplayEngine, STORAGE_KEY, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, cloneRecordingOptions, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectDerivedQrPlacement, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
16
+ import { a as computeOnboardingGuidance, i as setZeroPos, n as calcRelativeCoordsInMeters, o as selectOnboardingGuidance, r as recordGpsEvent, t as add2dImage } from "../state-CDF5LvsO.js";
17
+ export { DEFAULT_MAX_DELAY_MS, DEFAULT_QR_MAX_HISTORY, DEFAULT_TRACKING_QUALITY_OPTIONS, ReplayEngine, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearAllQrMarkers, clearLastRestartedPayload, clearQrMarker, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, matrixDelta, medianQrPosition, originReset, poseLost, poseReceived, pruneQrDetections, qrDetectedReducer, recordDepthSample, recordGpsEvent, recordQrDetection, recordQrSizeEstimate, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetTracking, resetTrackingQuality, selectAlignmentMatrix, selectDerivedQrPlacement, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLatestQrDetection, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectRecentAlignments, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setQrMaxHistory, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, wireStoreSubscribers };
@@ -1,2 +1,2 @@
1
- import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-CI4Cetnl.js";
2
- export { PersistenceMiddlewareOptions, createPersistenceMiddleware, slicePrefixOf };
1
+ import { i as slicePrefixOf, n as PersistenceMiddlewareOptions, r as createPersistenceMiddleware, t as PersistenceMiddleware } from "../persistence-middleware-Cun4aF5M.js";
2
+ export { PersistenceMiddleware, PersistenceMiddlewareOptions, createPersistenceMiddleware, slicePrefixOf };
@@ -11,10 +11,27 @@ const MAX_CONCURRENT_WRITES = 3;
11
11
  var WriteQueue = class {
12
12
  pendingCount = 0;
13
13
  queue = [];
14
+ flushWaiters = [];
14
15
  enqueue(writeFn) {
15
16
  this.queue.push(writeFn);
16
17
  this.drain();
17
18
  }
19
+ /**
20
+ * Resolves once the queue is fully idle — every enqueued write (including
21
+ * ones still waiting behind the concurrency cap) has settled. Rejected
22
+ * writes count as settled (the enqueue wrappers handle their errors), so
23
+ * flush never hangs on a failing backend. Writes enqueued AFTER the queue
24
+ * went idle again are not waited for.
25
+ */
26
+ flush() {
27
+ if (this.isIdle()) return Promise.resolve();
28
+ return new Promise((resolve) => {
29
+ this.flushWaiters.push(resolve);
30
+ });
31
+ }
32
+ isIdle() {
33
+ return this.pendingCount === 0 && this.queue.length === 0;
34
+ }
18
35
  drain() {
19
36
  while (this.pendingCount < MAX_CONCURRENT_WRITES && this.queue.length > 0) {
20
37
  const fn = this.queue.shift();
@@ -24,6 +41,11 @@ var WriteQueue = class {
24
41
  this.drain();
25
42
  });
26
43
  }
44
+ if (this.isIdle() && this.flushWaiters.length > 0) {
45
+ const waiters = this.flushWaiters;
46
+ this.flushWaiters = [];
47
+ for (const resolve of waiters) resolve();
48
+ }
27
49
  }
28
50
  };
29
51
  /**
@@ -58,19 +80,6 @@ function isInPersistableSession(wasRecording, isRecording, actionType) {
58
80
  const isEndSession = actionType === endSession.type;
59
81
  return isRecording || wasRecording && isEndSession;
60
82
  }
61
- /**
62
- * Create a Redux middleware that persists qualifying actions to storage
63
- * during active recording sessions.
64
- *
65
- * Persistence rules:
66
- * - Only persists when `state.recording.isRecording` is true (checked AFTER
67
- * the action is reduced, so `startSession` itself is included).
68
- * - Persists actions whose slice prefix is listed in `persistedPrefixes`.
69
- * - Excludes `recording/recordWriteFailure` to prevent recursive persistence.
70
- * - Excludes `routing/*` and any other non-whitelisted actions.
71
- * - Uses 1-based indexing for action files (000001.json, 000002.json, …).
72
- * - Each middleware instance maintains its own action index (Bug 10 fix).
73
- */
74
83
  function createPersistenceMiddleware(options) {
75
84
  const { storageBackend, onWriteFailure, persistedPrefixes } = options;
76
85
  const normalizedPrefixes = persistedPrefixes.map((prefix) => prefix.endsWith("/") ? prefix : `${prefix}/`);
@@ -93,7 +102,7 @@ function createPersistenceMiddleware(options) {
93
102
  const index = ++actionIndex;
94
103
  if (dispatchDepth > 1 && !hasWarnedReentrant) {
95
104
  hasWarnedReentrant = true;
96
- log.warn(`Persisted action "${actionType}" was dispatched re-entrantly (inside another dispatch's next()). Its recorded order can invert on replay — react to actions via a prepended listener middleware, not a synchronous store.subscribe dispatch. See 2026-06-28-subscriber-dispatch-persistence-ordering-review.md.`);
105
+ log.warn(`Persisted action "${actionType}" was dispatched re-entrantly (inside another dispatch's next()). Its recorded order can invert on replay — react to actions via a prepended listener middleware, not a synchronous store.subscribe dispatch. See 2026-06-28-0751-subscriber-dispatch-persistence-ordering-review.md.`);
97
106
  }
98
107
  writeQueue.enqueue(async () => {
99
108
  try {
@@ -110,7 +119,7 @@ function createPersistenceMiddleware(options) {
110
119
  dispatchDepth -= 1;
111
120
  }
112
121
  };
113
- return middleware;
122
+ return Object.assign(middleware, { flushPendingWrites: () => writeQueue.flush() });
114
123
  }
115
124
  //#endregion
116
125
  export { createPersistenceMiddleware, slicePrefixOf };
@@ -1,4 +1,4 @@
1
- import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-Bl_i-umk.js";
2
- import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-BL6gfl0s.js";
3
- import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-CPEkGbxh.js";
1
+ import { d as QrSizeStatus, l as QrSizeEstimate } from "../qr-size-measurer-rVFf4AdM.js";
2
+ import { a as QrPoseStability, o as QrPoseStabilityOptions, s as QrPoseStabilityStatus } from "../qr-pose-aggregation-mABSN0AW.js";
3
+ import { C as setQrMaxHistory, S as selectStableQrPose, _ as selectQrPoseStability, a as RootWithQrDetected, b as selectResolvedQrSizeM, c as medianQrPosition, d as recordQrDetection, f as recordQrSizeEstimate, g as selectQrMarkers, h as selectQrMarker, i as QrMarkerState, l as pruneQrDetections, m as selectLatestQrDetection, n as QrDetectedState, o as clearAllQrMarkers, p as selectDerivedQrPlacement, r as QrDetectionEntry, s as clearQrMarker, t as DEFAULT_QR_MAX_HISTORY, u as qrDetectedReducer, v as selectQrRawObservations, x as selectSolvedQrPose, y as selectQrSize } from "../qr-detected-slice-mfyxD2-M.js";
4
4
  export { DEFAULT_QR_MAX_HISTORY, QrDetectedState, QrDetectionEntry, QrMarkerState, QrPoseStability, QrPoseStabilityOptions, QrPoseStabilityStatus, QrSizeEstimate, QrSizeStatus, RootWithQrDetected, clearAllQrMarkers, clearQrMarker, medianQrPosition, pruneQrDetections, qrDetectedReducer, recordQrDetection, recordQrSizeEstimate, selectDerivedQrPlacement, selectLatestQrDetection, selectQrMarker, selectQrMarkers, selectQrPoseStability, selectQrRawObservations, selectQrSize, selectResolvedQrSizeM, selectSolvedQrPose, selectStableQrPose, setQrMaxHistory };