gps-plus-slam-app-framework 1.0.6 → 1.0.7

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 (174) hide show
  1. package/LICENSE +4 -4
  2. package/README.md +249 -108
  3. package/dist/accuracy-circles-CsxE_7x1.d.ts +43 -0
  4. package/dist/{app-selectors-CHt7DLuq.d.ts → app-selectors-BeU0_ab8.d.ts} +8 -10
  5. package/dist/ar/camera-blit-capture.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-sampler.d.ts +2 -2
  9. package/dist/ar/frame-loop.d.ts +2 -0
  10. package/dist/ar/frame-loop.js +40 -0
  11. package/dist/ar/image-capture.d.ts +1 -1
  12. package/dist/ar/image-capture.js +1 -1
  13. package/dist/ar/index.d.ts +12 -12
  14. package/dist/ar/index.js +3 -3
  15. package/dist/ar/replay-scene.d.ts +1 -1
  16. package/dist/ar/scene-node-names.d.ts +1 -1
  17. package/dist/ar/webxr-session.d.ts +4 -4
  18. package/dist/ar/webxr-session.js +150 -55
  19. package/dist/ar/xr-camera-texture.d.ts +1 -1
  20. package/dist/ar/xr-error-handler.d.ts +1 -1
  21. package/dist/core/index.d.ts +2 -2
  22. package/dist/core/index.js +2 -2
  23. package/dist/create-slam-app-store-CNsZ3rcX.d.ts +371 -0
  24. package/dist/{depth-sampler-BNCtnEoP.d.ts → depth-sampler-xg8vna6c.d.ts} +1 -1
  25. package/dist/{file-system-DD5TczSO.d.ts → file-system-DTApEv_Q.d.ts} +32 -2
  26. package/dist/frame-loop-QJIxLin0.d.ts +42 -0
  27. package/dist/frustum-visibility-BHnFrSKQ.d.ts +58 -0
  28. package/dist/{fused-path-DtqCSqJh.d.ts → fused-path-CB4DwWOG.d.ts} +1 -1
  29. package/dist/geo/h3-proximity.d.ts +1 -1
  30. package/dist/geo/index.d.ts +1 -1
  31. package/dist/{geo-types-Xx-LVcnw.d.ts → geo-types-CTuF23gG.d.ts} +16 -1
  32. package/dist/{gps-GKc6_Cly.d.ts → gps-DXoQb9Kf.d.ts} +1 -1
  33. package/dist/gps-anchor-CnWY61XK.d.ts +48 -0
  34. package/dist/gps-anchor-DjC_3MoT.js +257 -0
  35. package/dist/{gps-ar-pose-sampler-D_Zso40V.d.ts → gps-ar-pose-sampler-DsM1Kb2N.d.ts} +1 -1
  36. package/dist/{gps-event-coordinator-fwvmVfku.d.ts → gps-event-coordinator-DBx9I1YX.d.ts} +3 -3
  37. package/dist/gps-event-markers-BGr-iLvi.d.ts +103 -0
  38. package/dist/{image-capture-2pKjYUS6.d.ts → image-capture-DZLxHDN9.d.ts} +1 -1
  39. package/dist/index-gzWJMVpo.d.ts +2 -0
  40. package/dist/index-pOjUCKEP.d.ts +24 -0
  41. package/dist/index.d.ts +58 -52
  42. package/dist/index.js +11 -5
  43. package/dist/{leaflet-map-overlay-CQZcnxbc.d.ts → leaflet-map-overlay-Cew7XAoO.d.ts} +22 -11
  44. package/dist/{logger-B81iwxx0.d.ts → logger-C9vugiQb.d.ts} +7 -1
  45. package/dist/map-data-sih4g64v.d.ts +49 -0
  46. package/dist/map-overlay-draw-B3R1c9Xp.d.ts +42 -0
  47. package/dist/{null-storage-backend-C0TiwwzQ.d.ts → null-storage-backend-BKOS7JpL.d.ts} +2 -2
  48. package/dist/{opfs-storage-backend-Gt3rd76D.d.ts → opfs-storage-backend-Cj_7PWoq.d.ts} +2 -2
  49. package/dist/{permission-checker-Cu3nbH1S.d.ts → permission-checker-DPJl_RU6.d.ts} +41 -1
  50. package/dist/persistence-middleware-BkHIqvaA.d.ts +55 -0
  51. package/dist/{recording-replayer-BFhFs7Mc.d.ts → recording-replayer-CmCIIZ02.d.ts} +2 -2
  52. package/dist/{recording-slice-BiktUIWF.d.ts → recording-slice-d6OtCrza.d.ts} +2 -2
  53. package/dist/{replay-engine-B88Va62x.d.ts → replay-engine-BGBRQyXs.d.ts} +1 -1
  54. package/dist/{replay-scene-DtUm6bsr.d.ts → replay-scene-DpAGcAKY.d.ts} +3 -3
  55. package/dist/sensors/gps-error-handler.d.ts +1 -1
  56. package/dist/sensors/gps.d.ts +1 -1
  57. package/dist/sensors/gps.js +2 -2
  58. package/dist/sensors/index.d.ts +3 -3
  59. package/dist/sensors/permission-checker.d.ts +2 -2
  60. package/dist/sensors/permission-checker.js +79 -1
  61. package/dist/state/app-selectors.d.ts +2 -2
  62. package/dist/state/app-selectors.js +33 -3
  63. package/dist/state/combined-root-state.d.ts +2 -0
  64. package/dist/state/combined-root-state.js +1 -0
  65. package/dist/state/create-slam-app-store.d.ts +1 -1
  66. package/dist/state/create-slam-app-store.js +27 -13
  67. package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
  68. package/dist/state/gps-event-coordinator.d.ts +1 -1
  69. package/dist/state/index.d.ts +17 -16
  70. package/dist/state/index.js +6 -4
  71. package/dist/state/persistence-middleware.d.ts +2 -2
  72. package/dist/state/persistence-middleware.js +35 -7
  73. package/dist/state/recording-options.d.ts +1 -1
  74. package/dist/state/recording-replayer.d.ts +2 -2
  75. package/dist/state/recording-slice.d.ts +1 -1
  76. package/dist/state/replay-engine.d.ts +1 -1
  77. package/dist/state/store-subscribers.d.ts +2 -2
  78. package/dist/state/store-subscribers.js +38 -12
  79. package/dist/state/subscribe-to-selector.d.ts +1 -1
  80. package/dist/state/tracking-quality.d.ts +2 -0
  81. package/dist/state/tracking-quality.js +723 -0
  82. package/dist/state/tracking-slice.d.ts +2 -0
  83. package/dist/state/tracking-slice.js +147 -0
  84. package/dist/storage/file-system-utils.d.ts +1 -1
  85. package/dist/storage/file-system.d.ts +2 -2
  86. package/dist/storage/file-system.js +52 -1
  87. package/dist/storage/index.d.ts +8 -8
  88. package/dist/storage/null-storage-backend.d.ts +1 -1
  89. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  90. package/dist/storage/opfs-storage.d.ts +1 -1
  91. package/dist/storage/storage-backend.d.ts +1 -1
  92. package/dist/storage/zip-export.d.ts +1 -1
  93. package/dist/storage/zip-reader.d.ts +1 -1
  94. package/dist/storage/zip-reader.js +8 -4
  95. package/dist/{storage-backend-yVnuWGTr.d.ts → storage-backend-CT0Il_AB.d.ts} +1 -1
  96. package/dist/{store-subscribers-DKKHld49.d.ts → store-subscribers-Dce_CoJF.d.ts} +31 -6
  97. package/dist/{subscribe-to-selector-ghDKYtap.d.ts → subscribe-to-selector-DIHm3BRZ.d.ts} +1 -1
  98. package/dist/test-utils/browser-mocks.d.ts +1 -1
  99. package/dist/test-utils/zip-round-trip-helpers.d.ts +7 -1
  100. package/dist/test-utils/zip-round-trip-helpers.js +2 -1
  101. package/dist/tracking-slice-utCNND8t.d.ts +86 -0
  102. package/dist/types/ar-types.d.ts +1 -1
  103. package/dist/types/geo-types.d.ts +2 -2
  104. package/dist/types/index.d.ts +3 -3
  105. package/dist/utils/concurrency.d.ts +1 -1
  106. package/dist/utils/failure-tracker.d.ts +1 -1
  107. package/dist/utils/format-file-size.d.ts +1 -1
  108. package/dist/utils/fused-path.d.ts +1 -1
  109. package/dist/utils/index.d.ts +6 -6
  110. package/dist/utils/list-formatter.d.ts +1 -1
  111. package/dist/utils/logger.d.ts +1 -1
  112. package/dist/utils/logger.js +68 -8
  113. package/dist/visualization/accuracy-circles.d.ts +2 -0
  114. package/dist/visualization/accuracy-circles.js +57 -0
  115. package/dist/visualization/alignment-lerper.d.ts +1 -1
  116. package/dist/visualization/camera-follower.d.ts +1 -1
  117. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  118. package/dist/visualization/frustum-visibility.d.ts +2 -0
  119. package/dist/visualization/frustum-visibility.js +139 -0
  120. package/dist/visualization/gps-anchor.d.ts +2 -0
  121. package/dist/visualization/gps-anchor.js +2 -0
  122. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  123. package/dist/visualization/gps-event-markers.d.ts +2 -2
  124. package/dist/visualization/gps-event-markers.js +69 -2
  125. package/dist/visualization/index.d.ts +17 -12
  126. package/dist/visualization/index.js +6 -2
  127. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  128. package/dist/visualization/leaflet-map-overlay.js +33 -79
  129. package/dist/visualization/lerp-utils.d.ts +1 -1
  130. package/dist/visualization/map-data.d.ts +2 -0
  131. package/dist/visualization/map-data.js +33 -0
  132. package/dist/visualization/map-overlay-draw.d.ts +2 -0
  133. package/dist/visualization/map-overlay-draw.js +107 -0
  134. package/dist/visualization/map-overlay.d.ts +1 -1
  135. package/dist/visualization/three-dispose.d.ts +1 -1
  136. package/dist/visualization/vis-colors.d.ts +1 -1
  137. package/dist/{webxr-session-COlSrXdL.d.ts → webxr-session-DB5cIZnN.d.ts} +53 -12
  138. package/dist/{zip-reader-KgJEXbca.d.ts → zip-reader-D1105idz.d.ts} +5 -0
  139. package/package.json +16 -16
  140. package/dist/ar/tracking-state.d.ts +0 -2
  141. package/dist/ar/tracking-state.js +0 -164
  142. package/dist/combined-root-state-B3SvPNjU.d.ts +0 -6
  143. package/dist/create-slam-app-store-DBm7g2Zd.d.ts +0 -85
  144. package/dist/gps-anchored-mesh-manager-CovAFK4g.d.ts +0 -56
  145. package/dist/gps-event-markers-sVyO9utS.d.ts +0 -67
  146. package/dist/persistence-middleware-z-75iisb.d.ts +0 -31
  147. package/dist/tracking-state-B9QfuZCg.d.ts +0 -101
  148. package/dist/visualization/gps-anchored-mesh-manager.d.ts +0 -2
  149. package/dist/visualization/gps-anchored-mesh-manager.js +0 -128
  150. /package/dist/{alignment-lerper-D9BeDwZX.d.ts → alignment-lerper-L1RbWHQ4.d.ts} +0 -0
  151. /package/dist/{ar-types-B-ORgk6Z.d.ts → ar-types-Ck8LEq8k.d.ts} +0 -0
  152. /package/dist/{camera-blit-capture-DHuyrrxr.d.ts → camera-blit-capture-C1V9I1Z6.d.ts} +0 -0
  153. /package/dist/{camera-follower-BMqPddxx.d.ts → camera-follower-1k8mnw5J.d.ts} +0 -0
  154. /package/dist/{capture-failure-tracker-2Q6oI2uQ.d.ts → capture-failure-tracker-JKb1ST8E.d.ts} +0 -0
  155. /package/dist/{chromium-camera-access-workaround-CU5zSKNr.d.ts → chromium-camera-access-workaround-NvChXsi8.d.ts} +0 -0
  156. /package/dist/{concurrency-p6gB30fT.d.ts → concurrency-CMw8pSaG.d.ts} +0 -0
  157. /package/dist/{css3d-renderer-manager-rgLMVAvd.d.ts → css3d-renderer-manager-CkjCb2HW.d.ts} +0 -0
  158. /package/dist/{failure-tracker-1sQ_Cgyw.d.ts → failure-tracker-DnHXOIRa.d.ts} +0 -0
  159. /package/dist/{file-system-utils-BH8FdyIu.d.ts → file-system-utils-CtKiiw27.d.ts} +0 -0
  160. /package/dist/{format-file-size-onGq0k1Q.d.ts → format-file-size-BTS5H62-.d.ts} +0 -0
  161. /package/dist/{gps-compass-cubes-jRIJMOuh.d.ts → gps-compass-cubes-CsLtFv4B.d.ts} +0 -0
  162. /package/dist/{gps-error-handler-CH1S528z.d.ts → gps-error-handler-Dg3ziRVY.d.ts} +0 -0
  163. /package/dist/{h3-proximity-GwesPTFT.d.ts → h3-proximity-BhfgNbdW.d.ts} +0 -0
  164. /package/dist/{lerp-utils-CZgQlrmu.d.ts → lerp-utils-B8MM8zCR.d.ts} +0 -0
  165. /package/dist/{list-formatter-DKQQVLcl.d.ts → list-formatter-CNqi-E2j.d.ts} +0 -0
  166. /package/dist/{map-overlay-C9ifl_4-.d.ts → map-overlay-DAmreyA3.d.ts} +0 -0
  167. /package/dist/{opfs-storage-Dlq1I_Gb.d.ts → opfs-storage-DOPkzgeT.d.ts} +0 -0
  168. /package/dist/{recording-options-BYUFX8iU.d.ts → recording-options-Dq6IsKAv.d.ts} +0 -0
  169. /package/dist/{scene-node-names-DPsaE2z3.d.ts → scene-node-names-6LBjPmwz.d.ts} +0 -0
  170. /package/dist/{three-dispose-qt_r5wR1.d.ts → three-dispose-C2drkp6f.d.ts} +0 -0
  171. /package/dist/{vis-colors-BKkdTIKb.d.ts → vis-colors-CHQhjal3.d.ts} +0 -0
  172. /package/dist/{xr-camera-texture-BbukNE79.d.ts → xr-camera-texture-BU5YvKAM.d.ts} +0 -0
  173. /package/dist/{xr-error-handler-DTHfmvrl.d.ts → xr-error-handler-CDY5QxGb.d.ts} +0 -0
  174. /package/dist/{zip-export-BjrQPv0X.d.ts → zip-export-QO4iLIi7.d.ts} +0 -0
@@ -0,0 +1,2 @@
1
+ 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-utCNND8t.js";
2
+ export { DeviceOrientation, PoseReceivedPayload, ResetTransformData, TrackingPhase, TrackingSliceState, clearLastRestartedPayload, originReset, poseLost, poseReceived, resetTracking, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectTrackingPhase, trackingReducer };
@@ -0,0 +1,147 @@
1
+ import { createSlice } from "@reduxjs/toolkit";
2
+ //#region ../src/state/tracking-slice.ts
3
+ const initialState = {
4
+ phase: "initializing",
5
+ lastValidPose: null,
6
+ lastSensorOrientation: null,
7
+ lostFrameCount: 0,
8
+ originResetDuringLoss: false,
9
+ resetTransform: void 0,
10
+ lastRestartedPayload: null
11
+ };
12
+ const trackingSlice = createSlice({
13
+ name: "tracking",
14
+ initialState,
15
+ reducers: {
16
+ /**
17
+ * A valid AR pose was received this frame. Drives INITIALIZING|LOST →
18
+ * TRACKING transitions; on LOST → TRACKING with `originResetDuringLoss`
19
+ * also populates `lastRestartedPayload` (Case 2 of the manager doc).
20
+ */
21
+ poseReceived(state, action) {
22
+ const { pose, sensorOrientation } = action.payload;
23
+ if (state.phase === "lost") {
24
+ const hadReset = state.originResetDuringLoss;
25
+ const savedResetTransform = state.resetTransform;
26
+ state.originResetDuringLoss = false;
27
+ state.resetTransform = void 0;
28
+ if (hadReset && state.lastValidPose !== null) {
29
+ const lastOrientation = state.lastSensorOrientation ?? sensorOrientation;
30
+ state.lastRestartedPayload = {
31
+ lastValidOdomPos: [
32
+ state.lastValidPose.position.x,
33
+ state.lastValidPose.position.y,
34
+ state.lastValidPose.position.z
35
+ ],
36
+ lastValidOdomRot: [
37
+ state.lastValidPose.orientation.x,
38
+ state.lastValidPose.orientation.y,
39
+ state.lastValidPose.orientation.z,
40
+ state.lastValidPose.orientation.w
41
+ ],
42
+ lastSensorOrientation: {
43
+ alpha: lastOrientation.alpha,
44
+ beta: lastOrientation.beta,
45
+ gamma: lastOrientation.gamma,
46
+ absolute: lastOrientation.absolute
47
+ },
48
+ newOdomRot: [
49
+ pose.orientation.x,
50
+ pose.orientation.y,
51
+ pose.orientation.z,
52
+ pose.orientation.w
53
+ ],
54
+ newSensorOrientation: {
55
+ alpha: sensorOrientation.alpha,
56
+ beta: sensorOrientation.beta,
57
+ gamma: sensorOrientation.gamma,
58
+ absolute: sensorOrientation.absolute
59
+ },
60
+ newOdomPos: [
61
+ pose.position.x,
62
+ pose.position.y,
63
+ pose.position.z
64
+ ],
65
+ resetTransform: savedResetTransform
66
+ };
67
+ }
68
+ }
69
+ state.phase = "tracking";
70
+ state.lastValidPose = pose;
71
+ state.lastSensorOrientation = sensorOrientation;
72
+ state.lostFrameCount = 0;
73
+ },
74
+ /**
75
+ * Pose was unavailable this frame. TRACKING → LOST on the first call;
76
+ * subsequent calls only bump `lostFrameCount`.
77
+ */
78
+ poseLost(state) {
79
+ state.lostFrameCount += 1;
80
+ if (state.phase === "tracking") state.phase = "lost";
81
+ },
82
+ /**
83
+ * `XRReferenceSpace` reset event fired. Only meaningful while LOST.
84
+ * The payload distinguishes three cases:
85
+ * - `ResetTransformData` — runtime supplied the transform.
86
+ * - `null` — runtime could not determine the delta.
87
+ * - `undefined` (action with no payload) — backwards compat for
88
+ * callers without an event reference.
89
+ */
90
+ originReset: {
91
+ reducer(state, action) {
92
+ if (state.phase !== "lost") return state;
93
+ return {
94
+ ...state,
95
+ originResetDuringLoss: true,
96
+ resetTransform: action.payload
97
+ };
98
+ },
99
+ prepare(transform) {
100
+ return { payload: transform };
101
+ }
102
+ },
103
+ /**
104
+ * Drops the manager back to its initial state. Host calls on new XR
105
+ * session start.
106
+ */
107
+ resetTracking() {
108
+ return initialState;
109
+ },
110
+ /**
111
+ * Host calls this after firing its `onTrackingRestarted` callback with
112
+ * the contents of `selectLastRestartedPayload`. Failure to call it would
113
+ * leave a stale payload; the test matrix locks this in.
114
+ */
115
+ clearLastRestartedPayload(state) {
116
+ state.lastRestartedPayload = null;
117
+ }
118
+ }
119
+ });
120
+ const { poseReceived, poseLost, originReset, resetTracking, clearLastRestartedPayload } = trackingSlice.actions;
121
+ const trackingReducer = trackingSlice.reducer;
122
+ function selectTrackingPhase(state) {
123
+ return state.tracking.phase;
124
+ }
125
+ function selectLastValidPose(state) {
126
+ return state.tracking.lastValidPose;
127
+ }
128
+ function selectLostFrameCount(state) {
129
+ return state.tracking.lostFrameCount;
130
+ }
131
+ function selectLastRestartedPayload(state) {
132
+ return state.tracking.lastRestartedPayload;
133
+ }
134
+ /**
135
+ * Selector for the last `DeviceOrientation` captured alongside a valid
136
+ * AR pose. Used by the §4.3 compass / alignment heading cross-check in
137
+ * the tracking-quality reporter (see
138
+ * docs/2026-05-16-tracking-quality-metrics-plan.md).
139
+ *
140
+ * Returns `null` before any pose has been received and after
141
+ * `resetTracking` clears the slice.
142
+ */
143
+ function selectLastSensorOrientation(state) {
144
+ return state.tracking.lastSensorOrientation;
145
+ }
146
+ //#endregion
147
+ export { clearLastRestartedPayload, originReset, poseLost, poseReceived, resetTracking, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectTrackingPhase, trackingReducer };
@@ -1,2 +1,2 @@
1
- import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-BH8FdyIu.js";
1
+ import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-CtKiiw27.js";
2
2
  export { formatActionFilename, formatFrameFilename, formatTimestamp };
@@ -1,2 +1,2 @@
1
- import { a as listSessions, c as setCurrentScenario, d as writeAction, f as writeFrame, i as initStorage, l as startSession, n as ensureScenarioDirectory, o as resetForNewSession, p as writeSessionMetadata, r as getCurrentScenarioHandle, s as resetStorageState, t as WriteAccessResult, u as verifyWriteAccess } from "../file-system-DD5TczSO.js";
2
- export { WriteAccessResult, ensureScenarioDirectory, getCurrentScenarioHandle, initStorage, listSessions, resetForNewSession, resetStorageState, setCurrentScenario, startSession, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata };
1
+ import { a as getCurrentScenarioHandle, c as resetForNewSession, d as startSession, f as verifyWriteAccess, h as writeSessionMetadata, i as ensureScenarioDirectory, l as resetStorageState, m as writeFrame, n as WriteAccessResult, o as initStorage, p as writeAction, r as clearRefPointsCacheForAllScenarios, s as listSessions, t as ClearRefPointsCacheResult, u as setCurrentScenario } from "../file-system-DTApEv_Q.js";
2
+ export { ClearRefPointsCacheResult, WriteAccessResult, clearRefPointsCacheForAllScenarios, ensureScenarioDirectory, getCurrentScenarioHandle, initStorage, listSessions, resetForNewSession, resetStorageState, setCurrentScenario, startSession, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata };
@@ -234,5 +234,56 @@ async function ensureScenarioDirectory(scenarioName) {
234
234
  return null;
235
235
  }
236
236
  }
237
+ /**
238
+ * Clear the cached `refPoints/` directory for every scenario in OPFS.
239
+ *
240
+ * Used by the "Clear Reference Point Cache" maintenance action so that the
241
+ * next scenario load re-imports ref points from the read folder's `*.zip`
242
+ * recordings (see ref-point-recovery in the recorder app).
243
+ *
244
+ * Failures for individual scenarios are collected in `errors` rather than
245
+ * aborting the whole operation — partial progress is still useful.
246
+ *
247
+ * @throws Error if OPFS storage is unavailable (e.g. `initStorage()` not yet
248
+ * called, or browser does not support OPFS). Surfacing this loudly avoids
249
+ * reporting a silent "0 scenarios cleared" success that would mask the
250
+ * real failure to the user.
251
+ */
252
+ async function clearRefPointsCacheForAllScenarios() {
253
+ const dir = await ensureScenariosDir();
254
+ if (!dir) throw new Error("clearRefPointsCacheForAllScenarios: OPFS scenarios directory is unavailable — call initStorage() first or check OPFS support");
255
+ const errors = [];
256
+ let scenariosCleared = 0;
257
+ let scenariosScanned = 0;
258
+ const scenarios = await listScenarios();
259
+ for (const scenarioName of scenarios) {
260
+ scenariosScanned++;
261
+ try {
262
+ const handle = await dir.getDirectoryHandle(scenarioName);
263
+ if (!handle) continue;
264
+ try {
265
+ await handle.removeEntry("refPoints", { recursive: true });
266
+ scenariosCleared++;
267
+ } catch (err) {
268
+ if ((err instanceof Error ? err.name : String(err?.name)) === "NotFoundError") continue;
269
+ errors.push({
270
+ scenarioName,
271
+ reason: err instanceof Error ? err.message : String(err)
272
+ });
273
+ }
274
+ } catch (err) {
275
+ errors.push({
276
+ scenarioName,
277
+ reason: err instanceof Error ? err.message : String(err)
278
+ });
279
+ }
280
+ }
281
+ log.info(`Cleared ref-point cache for ${scenariosCleared}/${scenariosScanned} scenarios (${errors.length} errors)`);
282
+ return {
283
+ scenariosCleared,
284
+ scenariosScanned,
285
+ errors
286
+ };
287
+ }
237
288
  //#endregion
238
- export { ensureScenarioDirectory, getCurrentScenarioHandle, initStorage, listSessions, resetForNewSession, resetStorageState, setCurrentScenario, startSession, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata };
289
+ export { clearRefPointsCacheForAllScenarios, ensureScenarioDirectory, getCurrentScenarioHandle, initStorage, listSessions, resetForNewSession, resetStorageState, setCurrentScenario, startSession, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata };
@@ -1,9 +1,9 @@
1
- import { a as getAppRootHandle, c as initOpfsStorage, d as resetSessionHandles, h as writeSessionMetadata$1, i as createSession, l as listSessions, n as SessionMetadata, o as getSessionHandle, r as checkStorageQuota, s as getSessionsRootHandle, u as resetOpfsStorage } from "../opfs-storage-Dlq1I_Gb.js";
2
- import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-yVnuWGTr.js";
3
- import { a as ZipActionEntry, c as loadEntriesFromSubdir, d as loadSessionMetadataFromBlob, f as readZipEntries, i as RecordedAction, l as loadGpsPathFromBlob, n as GpsPathCoord, o as ZipSubdirEntry, r as MAX_ACTION_FILE_SIZE, s as loadActionsFromZip, t as Entry, u as loadSessionMetadata } from "../zip-reader-KgJEXbca.js";
4
- import { t as NullStorageBackend } from "../null-storage-backend-C0TiwwzQ.js";
5
- import { t as OpfsStorageBackend } from "../opfs-storage-backend-Gt3rd76D.js";
6
- import { a as listSessions$1, c as setCurrentScenario, d as writeAction, f as writeFrame, i as initStorage, l as startSession, n as ensureScenarioDirectory, o as resetForNewSession, p as writeSessionMetadata, r as getCurrentScenarioHandle, s as resetStorageState, t as WriteAccessResult, u as verifyWriteAccess } from "../file-system-DD5TczSO.js";
7
- import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-BH8FdyIu.js";
8
- import { a as downloadZip, c as syncToExternalZip, i as ZipExportResult, n as ZipContributorAddFile, o as exportAndDownloadSession, r as ZipExportContributor, s as exportSessionAsZip, t as ExportSessionAsZipOptions } from "../zip-export-BjrQPv0X.js";
1
+ import { a as getAppRootHandle, c as initOpfsStorage, d as resetSessionHandles, h as writeSessionMetadata$1, i as createSession, l as listSessions, n as SessionMetadata, o as getSessionHandle, r as checkStorageQuota, s as getSessionsRootHandle, u as resetOpfsStorage } from "../opfs-storage-DOPkzgeT.js";
2
+ import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-CT0Il_AB.js";
3
+ import { a as ZipActionEntry, c as loadEntriesFromSubdir, d as loadSessionMetadataFromBlob, f as readZipEntries, i as RecordedAction, l as loadGpsPathFromBlob, n as GpsPathCoord, o as ZipSubdirEntry, r as MAX_ACTION_FILE_SIZE, s as loadActionsFromZip, t as Entry, u as loadSessionMetadata } from "../zip-reader-D1105idz.js";
4
+ import { t as NullStorageBackend } from "../null-storage-backend-BKOS7JpL.js";
5
+ import { t as OpfsStorageBackend } from "../opfs-storage-backend-Cj_7PWoq.js";
6
+ import { a as getCurrentScenarioHandle, c as resetForNewSession, d as startSession, f as verifyWriteAccess, h as writeSessionMetadata, i as ensureScenarioDirectory, l as resetStorageState, m as writeFrame, n as WriteAccessResult, o as initStorage, p as writeAction, s as listSessions$1, u as setCurrentScenario } from "../file-system-DTApEv_Q.js";
7
+ import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-CtKiiw27.js";
8
+ import { a as downloadZip, c as syncToExternalZip, i as ZipExportResult, n as ZipContributorAddFile, o as exportAndDownloadSession, r as ZipExportContributor, s as exportSessionAsZip, t as ExportSessionAsZipOptions } from "../zip-export-QO4iLIi7.js";
9
9
  export { type CreateSessionResult, type Entry, type ExportSessionAsZipOptions, type GpsPathCoord, MAX_ACTION_FILE_SIZE, NullStorageBackend, OpfsStorageBackend, type RecordedAction, type SessionMetadata, type StorageBackend, type WriteAccessResult, type ZipActionEntry, type ZipContributorAddFile, type ZipExportContributor, type ZipExportResult, type ZipSubdirEntry, checkStorageQuota, createSession, downloadZip, ensureScenarioDirectory, exportAndDownloadSession, exportSessionAsZip, formatActionFilename, formatFrameFilename, formatTimestamp, getAppRootHandle, getCurrentScenarioHandle, getSessionHandle, getSessionsRootHandle, initOpfsStorage, initStorage, listSessions, listSessions$1 as listSessionsFromFileSystem, loadActionsFromZip, loadEntriesFromSubdir, loadGpsPathFromBlob, loadSessionMetadataFromBlob, loadSessionMetadata as loadSessionMetadataFromZip, readZipEntries, resetForNewSession, resetOpfsStorage, resetSessionHandles, resetStorageState, setCurrentScenario, startSession as startStorageSession, syncToExternalZip, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata as writeSessionMeta, writeSessionMetadata$1 as writeSessionMetadata };
@@ -1,2 +1,2 @@
1
- import { t as NullStorageBackend } from "../null-storage-backend-C0TiwwzQ.js";
1
+ import { t as NullStorageBackend } from "../null-storage-backend-BKOS7JpL.js";
2
2
  export { NullStorageBackend };
@@ -1,2 +1,2 @@
1
- import { t as OpfsStorageBackend } from "../opfs-storage-backend-Gt3rd76D.js";
1
+ import { t as OpfsStorageBackend } from "../opfs-storage-backend-Cj_7PWoq.js";
2
2
  export { OpfsStorageBackend };
@@ -1,2 +1,2 @@
1
- import { a as getAppRootHandle, c as initOpfsStorage, d as resetSessionHandles, f as setSessionHandles, h as writeSessionMetadata, i as createSession, l as listSessions, m as writeFrame, n as SessionMetadata, o as getSessionHandle, p as writeAction, r as checkStorageQuota, s as getSessionsRootHandle, t as CreateSessionResult, u as resetOpfsStorage } from "../opfs-storage-Dlq1I_Gb.js";
1
+ import { a as getAppRootHandle, c as initOpfsStorage, d as resetSessionHandles, f as setSessionHandles, h as writeSessionMetadata, i as createSession, l as listSessions, m as writeFrame, n as SessionMetadata, o as getSessionHandle, p as writeAction, r as checkStorageQuota, s as getSessionsRootHandle, t as CreateSessionResult, u as resetOpfsStorage } from "../opfs-storage-DOPkzgeT.js";
2
2
  export { CreateSessionResult, SessionMetadata, checkStorageQuota, createSession, getAppRootHandle, getSessionHandle, getSessionsRootHandle, initOpfsStorage, listSessions, resetOpfsStorage, resetSessionHandles, setSessionHandles, writeAction, writeFrame, writeSessionMetadata };
@@ -1,2 +1,2 @@
1
- import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-yVnuWGTr.js";
1
+ import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-CT0Il_AB.js";
2
2
  export { CreateSessionResult, StorageBackend };
@@ -1,2 +1,2 @@
1
- import { a as downloadZip, c as syncToExternalZip, i as ZipExportResult, n as ZipContributorAddFile, o as exportAndDownloadSession, r as ZipExportContributor, s as exportSessionAsZip, t as ExportSessionAsZipOptions } from "../zip-export-BjrQPv0X.js";
1
+ import { a as downloadZip, c as syncToExternalZip, i as ZipExportResult, n as ZipContributorAddFile, o as exportAndDownloadSession, r as ZipExportContributor, s as exportSessionAsZip, t as ExportSessionAsZipOptions } from "../zip-export-QO4iLIi7.js";
2
2
  export { ExportSessionAsZipOptions, ZipContributorAddFile, ZipExportContributor, ZipExportResult, downloadZip, exportAndDownloadSession, exportSessionAsZip, syncToExternalZip };
@@ -1,2 +1,2 @@
1
- import { a as ZipActionEntry, c as loadEntriesFromSubdir, d as loadSessionMetadataFromBlob, f as readZipEntries, i as RecordedAction, l as loadGpsPathFromBlob, n as GpsPathCoord, o as ZipSubdirEntry, r as MAX_ACTION_FILE_SIZE, s as loadActionsFromZip, t as Entry, u as loadSessionMetadata } from "../zip-reader-KgJEXbca.js";
1
+ import { a as ZipActionEntry, c as loadEntriesFromSubdir, d as loadSessionMetadataFromBlob, f as readZipEntries, i as RecordedAction, l as loadGpsPathFromBlob, n as GpsPathCoord, o as ZipSubdirEntry, r as MAX_ACTION_FILE_SIZE, s as loadActionsFromZip, t as Entry, u as loadSessionMetadata } from "../zip-reader-D1105idz.js";
2
2
  export { Entry, GpsPathCoord, MAX_ACTION_FILE_SIZE, RecordedAction, ZipActionEntry, ZipSubdirEntry, loadActionsFromZip, loadEntriesFromSubdir, loadGpsPathFromBlob, loadSessionMetadata, loadSessionMetadataFromBlob, readZipEntries };
@@ -172,10 +172,14 @@ async function loadGpsPathFromBlob(blob, maxFileSize = MAX_ACTION_FILE_SIZE) {
172
172
  continue;
173
173
  }
174
174
  const gps = action.payload?.rawGpsPoint ?? action.payload?.gpsPoint;
175
- if (action.type === "gpsData/recordGpsEvent" && gps && typeof gps.latitude === "number" && typeof gps.longitude === "number") coords.push({
176
- lat: gps.latitude,
177
- lng: gps.longitude
178
- });
175
+ if (action.type === "gpsData/recordGpsEvent" && gps && typeof gps.latitude === "number" && typeof gps.longitude === "number") {
176
+ const accuracy = typeof gps.latLongAccuracy === "number" && gps.latLongAccuracy > 0 ? gps.latLongAccuracy : void 0;
177
+ coords.push({
178
+ lat: gps.latitude,
179
+ lng: gps.longitude,
180
+ ...accuracy !== void 0 ? { accuracy } : {}
181
+ });
182
+ }
179
183
  }
180
184
  return coords;
181
185
  } catch {
@@ -1,4 +1,4 @@
1
- import { n as SessionMetadata } from "./opfs-storage-Dlq1I_Gb.js";
1
+ import { n as SessionMetadata } from "./opfs-storage-DOPkzgeT.js";
2
2
 
3
3
  //#region ../src/storage/storage-backend.d.ts
4
4
  interface CreateSessionResult {
@@ -1,4 +1,5 @@
1
- import { t as SubscribableStore } from "./subscribe-to-selector-ghDKYtap.js";
1
+ import { t as MapData } from "./map-data-sih4g64v.js";
2
+ import { t as SubscribableStore } from "./subscribe-to-selector-DIHm3BRZ.js";
2
3
  import { LatLong, Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
3
4
 
4
5
  //#region ../src/state/store-subscribers.d.ts
@@ -13,15 +14,28 @@ interface StoreSubscriberDeps {
13
14
  gpsEventVisualizer: {
14
15
  getZeroRef: () => LatLong | null;
15
16
  setZeroRef: (zero: LatLong) => void;
16
- addGpsEvent: (gpsCoords: Vector3, odomPosition: Vector3) => void;
17
+ addGpsEvent: (gpsCoords: Vector3, odomPosition: Vector3, accuracy?: {
18
+ horizontal?: number;
19
+ vertical?: number;
20
+ }) => void;
17
21
  addAlignmentSnapshot: (nuePosition: Vector3) => void;
18
22
  };
19
- /** Map overlay — updates the 2D map position. Nullable (not present in all modes). */
23
+ /**
24
+ * Map overlay — renders the shared trajectory snapshot. Nullable (not
25
+ * present in all modes).
26
+ *
27
+ * `setGpsPosition` centers the map on the latest fix; `render` draws the
28
+ * full {@link MapData} snapshot (raw GPS + accuracy circles, fused path,
29
+ * alignment snapshots, user dot) via the shared `drawMapData` routine — the
30
+ * SAME one the 2D session-summary map uses, so the live and summary maps
31
+ * stay identical (unified-trajectory-map Phase 3). The previous incremental
32
+ * `addRawGpsPoint` / `addFusedPoint` / `addAlignmentSnapshot` API is gone:
33
+ * the fused path now recomputes from the latest matrix on every rebuild
34
+ * (D2), so the live polyline "snaps" as alignment improves.
35
+ */
20
36
  mapOverlay?: {
21
37
  setGpsPosition: (lat: number, lon: number) => void;
22
- addRawGpsPoint?: (lat: number, lon: number) => void;
23
- addFusedPoint?: (lat: number, lon: number) => void;
24
- addAlignmentSnapshot?: (lat: number, lon: number) => void;
38
+ render?: (data: MapData) => void;
25
39
  } | null;
26
40
  /**
27
41
  * Optional callback invoked with the GPS world-space coordinates of each
@@ -51,6 +65,17 @@ interface StoreSubscriberDeps {
51
65
  * for dynamic button label updates.
52
66
  */
53
67
  onNewGpsLatLng?: (lat: number, lng: number) => void;
68
+ /**
69
+ * When `true`, the recorded GPS 1σ accuracies (`latLongAccuracy`,
70
+ * `altitudeAccuracy`) on each `GpsPoint` are forwarded to `addGpsEvent`
71
+ * so the raw-GPS marker renders as a non-uniform-scaled ellipsoid (see
72
+ * `gps-event-markers.ts` §3). When `false` (the default) the accuracies
73
+ * are dropped and the legacy fixed 8 cm sphere is used.
74
+ *
75
+ * Live recording leaves this `false` (large ellipsoids would distract the
76
+ * operator). Replay mode sets it to `true` so the diagnostic is visible.
77
+ */
78
+ showAccuracySpheres?: boolean;
54
79
  }
55
80
  /**
56
81
  * Wire store state-change subscriptions to visualization dependencies.
@@ -1,4 +1,4 @@
1
- import { t as CombinedRootState } from "./combined-root-state-B3SvPNjU.js";
1
+ import { L as CombinedRootState } from "./create-slam-app-store-CNsZ3rcX.js";
2
2
 
3
3
  //#region ../src/state/subscribe-to-selector.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as WebXRQuaternion, o as WebXRVec3 } from "../ar-types-B-ORgk6Z.js";
1
+ import { a as WebXRQuaternion, o as WebXRVec3 } from "../ar-types-Ck8LEq8k.js";
2
2
  import { Mock } from "vitest";
3
3
 
4
4
  //#region ../src/test-utils/browser-mocks.d.ts
@@ -1,4 +1,4 @@
1
- import { i as RecordedAction } from "../zip-reader-KgJEXbca.js";
1
+ import { i as RecordedAction } from "../zip-reader-D1105idz.js";
2
2
  import { LatLong } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/test-utils/zip-round-trip-helpers.d.ts
@@ -12,6 +12,12 @@ interface ProduceTestZipOptions {
12
12
  frameCount: number;
13
13
  deviceInfo: string;
14
14
  zeroPos: LatLong;
15
+ /**
16
+ * Optional horizontal accuracy (meters) stamped onto every produced
17
+ * `recordGpsEvent` action's `rawGpsPoint.latLongAccuracy`. When omitted,
18
+ * the field is left off — matching pre-accuracy recordings.
19
+ */
20
+ gpsAccuracy?: number;
15
21
  }
16
22
  /** Result of producing a test zip, with all metadata needed for assertions. */
17
23
  interface TestZipResult {
@@ -131,7 +131,8 @@ async function produceTestZip(opts) {
131
131
  id: `gps-event-${i + 1}`,
132
132
  latitude: options.zeroPos.lat + (i + 1) * 1e-4,
133
133
  longitude: options.zeroPos.lon + (i + 1) * 1e-4,
134
- timestamp: t
134
+ timestamp: t,
135
+ ...typeof options.gpsAccuracy === "number" ? { latLongAccuracy: options.gpsAccuracy } : {}
135
136
  }
136
137
  }
137
138
  });
@@ -0,0 +1,86 @@
1
+ import { t as ARPose } from "./ar-types-Ck8LEq8k.js";
2
+ import { OdometryTrackingRestartedPayload, Quaternion, Vector3 } from "gps-plus-slam-js";
3
+ import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
4
+
5
+ //#region ../src/state/tracking-slice.d.ts
6
+ /**
7
+ * AR tracking phase. String-literal union (not a TS enum) so action payloads
8
+ * and replay JSON stay structurally compatible with non-TS consumers.
9
+ */
10
+ type TrackingPhase = 'initializing' | 'tracking' | 'lost';
11
+ /**
12
+ * Raw `DeviceOrientationEvent` snapshot captured alongside an AR pose.
13
+ *
14
+ * Identical shape to `RawDeviceOrientation` from `gps-plus-slam-js`, but
15
+ * with non-nullable fields — sensors are required to have resolved for the
16
+ * AR math that consumes this snapshot.
17
+ */
18
+ interface DeviceOrientation {
19
+ /** Compass heading (0–360). */
20
+ alpha: number;
21
+ /** Pitch (-180 to 180). */
22
+ beta: number;
23
+ /** Roll (-90 to 90). */
24
+ gamma: number;
25
+ /** Whether alpha is relative to magnetic north. */
26
+ absolute: boolean;
27
+ }
28
+ /**
29
+ * Serialized `XRReferenceSpaceEvent.transform`.
30
+ *
31
+ * `null` when the XR runtime cannot determine the delta between old and new
32
+ * coordinate systems; `undefined` when no transform was captured (older
33
+ * browsers / no event).
34
+ */
35
+ interface ResetTransformData {
36
+ position: Vector3;
37
+ orientation: Quaternion;
38
+ }
39
+ interface TrackingSliceState {
40
+ phase: TrackingPhase;
41
+ lastValidPose: ARPose | null;
42
+ lastSensorOrientation: DeviceOrientation | null;
43
+ lostFrameCount: number;
44
+ originResetDuringLoss: boolean;
45
+ /**
46
+ * Distinguishes "reset flagged with no transform yet" from "no reset flagged".
47
+ * `undefined` is the default; once `originReset(...)` is dispatched the value
48
+ * is the supplied transform (which may itself be `null`).
49
+ */
50
+ resetTransform: ResetTransformData | null | undefined;
51
+ /**
52
+ * Transient payload set by the LOST → TRACKING transition when an origin
53
+ * reset was flagged during the loss. Host consumes it via the matching
54
+ * selector and then dispatches `clearLastRestartedPayload`.
55
+ */
56
+ lastRestartedPayload: OdometryTrackingRestartedPayload | null;
57
+ }
58
+ interface PoseReceivedPayload {
59
+ pose: ARPose;
60
+ sensorOrientation: DeviceOrientation;
61
+ }
62
+ declare const poseReceived: _$_reduxjs_toolkit0.ActionCreatorWithPayload<PoseReceivedPayload, "tracking/poseReceived">, poseLost: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"tracking/poseLost">, originReset: _$_reduxjs_toolkit0.ActionCreatorWithPreparedPayload<[transform?: ResetTransformData | null | undefined], ResetTransformData | null | undefined, "tracking/originReset", never, never>, resetTracking: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"tracking/resetTracking">, clearLastRestartedPayload: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"tracking/clearLastRestartedPayload">;
63
+ declare const trackingReducer: _$_reduxjs_toolkit0.Reducer<TrackingSliceState>;
64
+ /**
65
+ * Minimal root-state shape needed by the selectors. Avoids a hard import
66
+ * cycle through `SlamAppRootState`.
67
+ */
68
+ interface RootWithTracking {
69
+ tracking: TrackingSliceState;
70
+ }
71
+ declare function selectTrackingPhase(state: RootWithTracking): TrackingPhase;
72
+ declare function selectLastValidPose(state: RootWithTracking): ARPose | null;
73
+ declare function selectLostFrameCount(state: RootWithTracking): number;
74
+ declare function selectLastRestartedPayload(state: RootWithTracking): OdometryTrackingRestartedPayload | null;
75
+ /**
76
+ * Selector for the last `DeviceOrientation` captured alongside a valid
77
+ * AR pose. Used by the §4.3 compass / alignment heading cross-check in
78
+ * the tracking-quality reporter (see
79
+ * docs/2026-05-16-tracking-quality-metrics-plan.md).
80
+ *
81
+ * Returns `null` before any pose has been received and after
82
+ * `resetTracking` clears the slice.
83
+ */
84
+ declare function selectLastSensorOrientation(state: RootWithTracking): DeviceOrientation | null;
85
+ //#endregion
86
+ export { TrackingSliceState as a, poseLost as c, selectLastRestartedPayload as d, selectLastSensorOrientation as f, trackingReducer as g, selectTrackingPhase as h, TrackingPhase as i, poseReceived as l, selectLostFrameCount as m, PoseReceivedPayload as n, clearLastRestartedPayload as o, selectLastValidPose as p, ResetTransformData as r, originReset as s, DeviceOrientation as t, resetTracking as u };
@@ -1,2 +1,2 @@
1
- import { a as WebXRQuaternion, i as DepthSample, n as ArPoseTuples, o as WebXRVec3, r as DepthPoint, t as ARPose } from "../ar-types-B-ORgk6Z.js";
1
+ import { a as WebXRQuaternion, i as DepthSample, n as ArPoseTuples, o as WebXRVec3, r as DepthPoint, t as ARPose } from "../ar-types-Ck8LEq8k.js";
2
2
  export { ARPose, ArPoseTuples, DepthPoint, DepthSample, WebXRQuaternion, WebXRVec3 };
@@ -1,2 +1,2 @@
1
- import { n as RefPointMarker, t as GpsCoord } from "../geo-types-Xx-LVcnw.js";
2
- export { GpsCoord, RefPointMarker };
1
+ import { n as RawGpsSample, r as RefPointMarker, t as GpsCoord } from "../geo-types-CTuF23gG.js";
2
+ export { GpsCoord, RawGpsSample, RefPointMarker };
@@ -1,3 +1,3 @@
1
- import { a as WebXRQuaternion, i as DepthSample, n as ArPoseTuples, o as WebXRVec3, r as DepthPoint, t as ARPose } from "../ar-types-B-ORgk6Z.js";
2
- import { n as RefPointMarker, t as GpsCoord } from "../geo-types-Xx-LVcnw.js";
3
- export { ARPose, ArPoseTuples, DepthPoint, DepthSample, GpsCoord, RefPointMarker, WebXRQuaternion, WebXRVec3 };
1
+ import { a as WebXRQuaternion, i as DepthSample, n as ArPoseTuples, o as WebXRVec3, r as DepthPoint, t as ARPose } from "../ar-types-Ck8LEq8k.js";
2
+ import { n as RawGpsSample, r as RefPointMarker, t as GpsCoord } from "../geo-types-CTuF23gG.js";
3
+ export { ARPose, ArPoseTuples, DepthPoint, DepthSample, GpsCoord, RawGpsSample, RefPointMarker, WebXRQuaternion, WebXRVec3 };
@@ -1,2 +1,2 @@
1
- import { t as mapWithConcurrencyLimit } from "../concurrency-p6gB30fT.js";
1
+ import { t as mapWithConcurrencyLimit } from "../concurrency-CMw8pSaG.js";
2
2
  export { mapWithConcurrencyLimit };
@@ -1,2 +1,2 @@
1
- import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-1sQ_Cgyw.js";
1
+ import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-DnHXOIRa.js";
2
2
  export { FailureTracker, FailureTrackerConfig, createFailureTracker };
@@ -1,2 +1,2 @@
1
- import { t as formatFileSize } from "../format-file-size-onGq0k1Q.js";
1
+ import { t as formatFileSize } from "../format-file-size-BTS5H62-.js";
2
2
  export { formatFileSize };
@@ -1,2 +1,2 @@
1
- import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-DtqCSqJh.js";
1
+ import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-CB4DwWOG.js";
2
2
  export { FusedPathInput, computeFusedPath, fusedGpsFromOdom };
@@ -1,7 +1,7 @@
1
- import { a as createLogger, c as setGlobalLogLevel, i as clearLogBuffer, l as subscribeToLogs, n as LogLevel, o as getGlobalLogLevel, r as Logger, s as getLogBuffer, t as LogEntry } from "../logger-B81iwxx0.js";
2
- import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-DtqCSqJh.js";
3
- import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-1sQ_Cgyw.js";
4
- import { t as mapWithConcurrencyLimit } from "../concurrency-p6gB30fT.js";
5
- import { t as formatFileSize } from "../format-file-size-onGq0k1Q.js";
6
- import { t as listFormatter } from "../list-formatter-DKQQVLcl.js";
1
+ import { a as createLogger, c as setGlobalLogLevel, i as clearLogBuffer, l as subscribeToLogs, n as LogLevel, o as getGlobalLogLevel, r as Logger, s as getLogBuffer, t as LogEntry } from "../logger-C9vugiQb.js";
2
+ import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-CB4DwWOG.js";
3
+ import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-DnHXOIRa.js";
4
+ import { t as mapWithConcurrencyLimit } from "../concurrency-CMw8pSaG.js";
5
+ import { t as formatFileSize } from "../format-file-size-BTS5H62-.js";
6
+ import { t as listFormatter } from "../list-formatter-CNqi-E2j.js";
7
7
  export { type FailureTracker, type FailureTrackerConfig, type FusedPathInput, type LogEntry, LogLevel, type Logger, clearLogBuffer, computeFusedPath, createFailureTracker, createLogger, formatFileSize, fusedGpsFromOdom, getGlobalLogLevel, getLogBuffer, listFormatter, mapWithConcurrencyLimit, setGlobalLogLevel, subscribeToLogs };
@@ -1,2 +1,2 @@
1
- import { t as listFormatter } from "../list-formatter-DKQQVLcl.js";
1
+ import { t as listFormatter } from "../list-formatter-CNqi-E2j.js";
2
2
  export { listFormatter };
@@ -1,2 +1,2 @@
1
- import { a as createLogger, c as setGlobalLogLevel, i as clearLogBuffer, l as subscribeToLogs, n as LogLevel, o as getGlobalLogLevel, r as Logger, s as getLogBuffer, t as LogEntry } from "../logger-B81iwxx0.js";
1
+ import { a as createLogger, c as setGlobalLogLevel, i as clearLogBuffer, l as subscribeToLogs, n as LogLevel, o as getGlobalLogLevel, r as Logger, s as getLogBuffer, t as LogEntry } from "../logger-C9vugiQb.js";
2
2
  export { LogEntry, LogLevel, Logger, clearLogBuffer, createLogger, getGlobalLogLevel, getLogBuffer, setGlobalLogLevel, subscribeToLogs };