gps-plus-slam-app-framework 1.0.7 → 1.2.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 (189) hide show
  1. package/README.md +69 -15
  2. package/dist/{app-selectors-BeU0_ab8.d.ts → app-selectors-CcZ5UV-8.d.ts} +1 -1
  3. package/dist/ar/bresenham3d.d.ts +2 -0
  4. package/dist/ar/bresenham3d.js +81 -0
  5. package/dist/ar/camera-blit-capture.d.ts +1 -1
  6. package/dist/ar/camera-blit-capture.js +30 -2
  7. package/dist/ar/capability-checker.d.ts +2 -0
  8. package/dist/ar/capability-checker.js +25 -0
  9. package/dist/ar/capture-failure-tracker.d.ts +1 -1
  10. package/dist/ar/chromium-camera-access-workaround.d.ts +2 -2
  11. package/dist/ar/chromium-camera-access-workaround.js +197 -8
  12. package/dist/ar/depth-sampler.d.ts +3 -3
  13. package/dist/ar/depth-sampler.js +63 -8
  14. package/dist/ar/depth-unprojection.d.ts +2 -0
  15. package/dist/ar/depth-unprojection.js +94 -0
  16. package/dist/ar/enable-gps-ar.d.ts +2 -0
  17. package/dist/ar/enable-gps-ar.js +137 -0
  18. package/dist/ar/frame-loop.d.ts +1 -1
  19. package/dist/ar/frame-loop.js +24 -1
  20. package/dist/ar/image-capture.d.ts +1 -1
  21. package/dist/ar/image-capture.js +2 -1
  22. package/dist/ar/index.d.ts +19 -12
  23. package/dist/ar/index.js +11 -4
  24. package/dist/ar/occupancy-grid.d.ts +2 -0
  25. package/dist/ar/occupancy-grid.js +164 -0
  26. package/dist/ar/replay-scene.d.ts +1 -1
  27. package/dist/ar/replay-scene.js +1 -1
  28. package/dist/ar/scene-node-names.d.ts +1 -1
  29. package/dist/ar/webxr-nue-basis.d.ts +2 -0
  30. package/dist/ar/webxr-nue-basis.js +54 -0
  31. package/dist/ar/webxr-session.d.ts +4 -4
  32. package/dist/ar/webxr-session.js +1 -984
  33. package/dist/ar/xr-camera-texture.d.ts +1 -1
  34. package/dist/ar/xr-error-handler.d.ts +1 -1
  35. package/dist/ar/xr-frame-loop.d.ts +2 -0
  36. package/dist/ar/xr-frame-loop.js +69 -0
  37. package/dist/{ar-types-Ck8LEq8k.d.ts → ar-types-Dan1MVTi.d.ts} +28 -5
  38. package/dist/ar-world-group-alignment-ColHB_5A.d.ts +43 -0
  39. package/dist/bresenham3d-CFfd7n6B.d.ts +59 -0
  40. package/dist/{camera-blit-capture-C1V9I1Z6.d.ts → camera-blit-capture-D5_mNhla.d.ts} +20 -0
  41. package/dist/capability-checker-CQXJHxXg.d.ts +43 -0
  42. package/dist/chromium-camera-access-workaround-Jqbn0apH.d.ts +137 -0
  43. package/dist/core/index.d.ts +1 -1
  44. package/dist/{create-slam-app-store-CNsZ3rcX.d.ts → create-slam-app-store-qNXQ-tq5.d.ts} +5 -5
  45. package/dist/depth-sampler-Bhanfwla.d.ts +169 -0
  46. package/dist/depth-unprojection-Y6i_mJuT.d.ts +52 -0
  47. package/dist/enable-gps-ar-CapmADVN.d.ts +95 -0
  48. package/dist/{file-system-DTApEv_Q.d.ts → file-system-C_eqiEA8.d.ts} +1 -1
  49. package/dist/frame-conversions-BfsafGWR.d.ts +54 -0
  50. package/dist/{frame-loop-QJIxLin0.d.ts → frame-loop-CMewS8cY.d.ts} +5 -0
  51. package/dist/{fused-path-CB4DwWOG.d.ts → fused-path-DJoVu98b.d.ts} +1 -1
  52. package/dist/geo/h3-proximity.d.ts +1 -1
  53. package/dist/geo/index.d.ts +1 -1
  54. package/dist/{gps-anchor-CnWY61XK.d.ts → gps-anchor-dYeCvvp5.d.ts} +12 -1
  55. package/dist/{gps-ar-pose-sampler-DsM1Kb2N.d.ts → gps-ar-pose-sampler-DVb96iOy.d.ts} +1 -1
  56. package/dist/{gps-event-coordinator-DBx9I1YX.d.ts → gps-event-coordinator-BDIQde2x.d.ts} +3 -3
  57. package/dist/hit-test-reticle-BEzEybxZ.d.ts +45 -0
  58. package/dist/{image-capture-DZLxHDN9.d.ts → image-capture-DZ4HFRgS.d.ts} +15 -2
  59. package/dist/index-KJq2amHF.d.ts +37 -0
  60. package/dist/index.d.ts +67 -58
  61. package/dist/index.js +18 -8
  62. package/dist/{leaflet-map-overlay-Cew7XAoO.d.ts → leaflet-map-overlay-6CJC-E1l.d.ts} +1 -1
  63. package/dist/{map-data-sih4g64v.d.ts → map-data-CkloBxIl.d.ts} +1 -1
  64. package/dist/{map-overlay-draw-B3R1c9Xp.d.ts → map-overlay-draw-krOKwDAq.d.ts} +1 -1
  65. package/dist/{null-storage-backend-BKOS7JpL.d.ts → null-storage-backend-CxEjZHRW.d.ts} +2 -2
  66. package/dist/occupancy-grid-BRNRaPyT.d.ts +72 -0
  67. package/dist/{opfs-storage-backend-Cj_7PWoq.d.ts → opfs-storage-backend-CjSAuqg_.d.ts} +2 -2
  68. package/dist/{persistence-middleware-BkHIqvaA.d.ts → persistence-middleware-DwyzgfWr.d.ts} +1 -1
  69. package/dist/{recording-options-Dq6IsKAv.d.ts → recording-options-DJBXuMxV.d.ts} +22 -6
  70. package/dist/{recording-replayer-CmCIIZ02.d.ts → recording-replayer-BL-x-7k0.d.ts} +2 -2
  71. package/dist/{recording-slice-d6OtCrza.d.ts → recording-slice-89O07ebs.d.ts} +10 -2
  72. package/dist/{replay-engine-BGBRQyXs.d.ts → replay-engine-BRqszuQ9.d.ts} +1 -1
  73. package/dist/{replay-scene-DpAGcAKY.d.ts → replay-scene-Bw58VL6p.d.ts} +3 -3
  74. package/dist/sensors/gps-error-handler.d.ts +1 -1
  75. package/dist/sensors/gps.d.ts +1 -1
  76. package/dist/sensors/index.d.ts +3 -3
  77. package/dist/sensors/index.js +1 -1
  78. package/dist/sensors/permission-checker.d.ts +1 -1
  79. package/dist/session-disposers-M-oashRH.js +57 -0
  80. package/dist/state/app-selectors.d.ts +1 -1
  81. package/dist/state/combined-root-state.d.ts +1 -1
  82. package/dist/state/create-slam-app-store.d.ts +1 -1
  83. package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
  84. package/dist/state/gps-event-coordinator.d.ts +1 -1
  85. package/dist/state/index.d.ts +17 -17
  86. package/dist/state/index.js +2 -2
  87. package/dist/state/persistence-middleware.d.ts +1 -1
  88. package/dist/state/persistence-middleware.js +9 -3
  89. package/dist/state/recording-options.d.ts +1 -1
  90. package/dist/state/recording-options.js +5 -3
  91. package/dist/state/recording-replayer.d.ts +2 -2
  92. package/dist/state/recording-slice.d.ts +1 -1
  93. package/dist/state/recording-slice.js +11 -2
  94. package/dist/state/replay-engine.d.ts +1 -1
  95. package/dist/state/store-subscribers.d.ts +2 -2
  96. package/dist/state/subscribe-to-selector.d.ts +1 -1
  97. package/dist/state/tracking-quality.d.ts +1 -1
  98. package/dist/state/tracking-quality.js +1 -1
  99. package/dist/state/tracking-slice.d.ts +1 -1
  100. package/dist/state-BkIfpiyA.js +87 -0
  101. package/dist/storage/file-system-utils.d.ts +1 -1
  102. package/dist/storage/file-system.d.ts +1 -1
  103. package/dist/storage/index.d.ts +8 -8
  104. package/dist/storage/null-storage-backend.d.ts +1 -1
  105. package/dist/storage/opfs-storage-backend.d.ts +1 -1
  106. package/dist/storage/opfs-storage.d.ts +1 -1
  107. package/dist/storage/storage-backend.d.ts +1 -1
  108. package/dist/storage/zip-export.d.ts +1 -1
  109. package/dist/storage/zip-reader.d.ts +1 -1
  110. package/dist/{storage-backend-CT0Il_AB.d.ts → storage-backend-C9HLFtgz.d.ts} +1 -1
  111. package/dist/{store-subscribers-Dce_CoJF.d.ts → store-subscribers-rrkLkFTt.d.ts} +2 -2
  112. package/dist/{subscribe-to-selector-DIHm3BRZ.d.ts → subscribe-to-selector-CP3BKSbF.d.ts} +1 -1
  113. package/dist/test-utils/browser-mocks.d.ts +1 -1
  114. package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
  115. package/dist/{tracking-slice-utCNND8t.d.ts → tracking-slice-CdK8c-8P.d.ts} +1 -1
  116. package/dist/types/ar-types.d.ts +2 -2
  117. package/dist/types/geo-types.d.ts +1 -1
  118. package/dist/types/index.d.ts +3 -3
  119. package/dist/utils/concurrency.d.ts +1 -1
  120. package/dist/utils/failure-tracker.d.ts +1 -1
  121. package/dist/utils/format-file-size.d.ts +1 -1
  122. package/dist/utils/fused-path.d.ts +1 -1
  123. package/dist/utils/index.d.ts +6 -6
  124. package/dist/utils/list-formatter.d.ts +1 -1
  125. package/dist/utils/logger.d.ts +1 -1
  126. package/dist/visualization/accuracy-circles.d.ts +1 -1
  127. package/dist/visualization/alignment-lerper.d.ts +1 -1
  128. package/dist/visualization/ar-world-group-alignment.d.ts +2 -0
  129. package/dist/visualization/ar-world-group-alignment.js +51 -0
  130. package/dist/visualization/camera-follower.d.ts +1 -1
  131. package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
  132. package/dist/visualization/frame-conversions.d.ts +2 -0
  133. package/dist/visualization/frame-conversions.js +88 -0
  134. package/dist/visualization/frustum-visibility.d.ts +1 -1
  135. package/dist/visualization/gps-anchor.d.ts +1 -1
  136. package/dist/visualization/gps-anchor.js +216 -1
  137. package/dist/visualization/gps-compass-cubes.d.ts +1 -1
  138. package/dist/visualization/gps-event-markers.d.ts +1 -1
  139. package/dist/visualization/gps-event-markers.js +1 -1
  140. package/dist/visualization/hit-test-reticle.d.ts +2 -0
  141. package/dist/visualization/hit-test-reticle.js +81 -0
  142. package/dist/visualization/index.d.ts +19 -17
  143. package/dist/visualization/index.js +5 -2
  144. package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
  145. package/dist/visualization/lerp-utils.d.ts +1 -1
  146. package/dist/visualization/map-data.d.ts +1 -1
  147. package/dist/visualization/map-overlay-draw.d.ts +1 -1
  148. package/dist/visualization/map-overlay.d.ts +1 -1
  149. package/dist/visualization/three-dispose.d.ts +1 -1
  150. package/dist/visualization/vis-colors.d.ts +1 -1
  151. package/dist/webxr-nue-basis-CqKQmZzT.d.ts +23 -0
  152. package/dist/{webxr-session-DB5cIZnN.d.ts → webxr-session-DtAG9srK.d.ts} +45 -13
  153. package/dist/webxr-session-QhcSSub5.js +1041 -0
  154. package/dist/xr-frame-loop-BtYytZJg.d.ts +70 -0
  155. package/package.json +1 -1
  156. package/dist/chromium-camera-access-workaround-NvChXsi8.d.ts +0 -61
  157. package/dist/depth-sampler-xg8vna6c.d.ts +0 -108
  158. package/dist/gps-anchor-DjC_3MoT.js +0 -257
  159. package/dist/index-pOjUCKEP.d.ts +0 -24
  160. /package/dist/{accuracy-circles-CsxE_7x1.d.ts → accuracy-circles-BpwWAs8G.d.ts} +0 -0
  161. /package/dist/{alignment-lerper-L1RbWHQ4.d.ts → alignment-lerper-Dm9G7JJO.d.ts} +0 -0
  162. /package/dist/{camera-follower-1k8mnw5J.d.ts → camera-follower-C2mwEn7c.d.ts} +0 -0
  163. /package/dist/{capture-failure-tracker-JKb1ST8E.d.ts → capture-failure-tracker-CUeU3L_M.d.ts} +0 -0
  164. /package/dist/{concurrency-CMw8pSaG.d.ts → concurrency-CO1FQvs3.d.ts} +0 -0
  165. /package/dist/{css3d-renderer-manager-CkjCb2HW.d.ts → css3d-renderer-manager-ptu_t3B3.d.ts} +0 -0
  166. /package/dist/{failure-tracker-DnHXOIRa.d.ts → failure-tracker-Cn8Fo9D4.d.ts} +0 -0
  167. /package/dist/{file-system-utils-CtKiiw27.d.ts → file-system-utils-DyAmcuvX.d.ts} +0 -0
  168. /package/dist/{format-file-size-BTS5H62-.d.ts → format-file-size-CLCZz3lC.d.ts} +0 -0
  169. /package/dist/{frustum-visibility-BHnFrSKQ.d.ts → frustum-visibility-CmI96ESS.d.ts} +0 -0
  170. /package/dist/{geo-types-CTuF23gG.d.ts → geo-types-SaPnIEUM.d.ts} +0 -0
  171. /package/dist/{gps-DXoQb9Kf.d.ts → gps-VuezJWK3.d.ts} +0 -0
  172. /package/dist/{gps-compass-cubes-CsLtFv4B.d.ts → gps-compass-cubes-BM1uGiYV.d.ts} +0 -0
  173. /package/dist/{gps-error-handler-Dg3ziRVY.d.ts → gps-error-handler-CJl_2MVm.d.ts} +0 -0
  174. /package/dist/{gps-event-markers-BGr-iLvi.d.ts → gps-event-markers-Dc9FT-q1.d.ts} +0 -0
  175. /package/dist/{h3-proximity-BhfgNbdW.d.ts → h3-proximity-I1msGPgE.d.ts} +0 -0
  176. /package/dist/{index-gzWJMVpo.d.ts → index-CF05QV2m.d.ts} +0 -0
  177. /package/dist/{lerp-utils-B8MM8zCR.d.ts → lerp-utils-BpV-0Dtk.d.ts} +0 -0
  178. /package/dist/{list-formatter-CNqi-E2j.d.ts → list-formatter-RRcBe8Vg.d.ts} +0 -0
  179. /package/dist/{logger-C9vugiQb.d.ts → logger-BEHXsnnq.d.ts} +0 -0
  180. /package/dist/{map-overlay-DAmreyA3.d.ts → map-overlay-bcogY5fK.d.ts} +0 -0
  181. /package/dist/{opfs-storage-DOPkzgeT.d.ts → opfs-storage-DYm8WHq7.d.ts} +0 -0
  182. /package/dist/{permission-checker-DPJl_RU6.d.ts → permission-checker-GpAiSCwd.d.ts} +0 -0
  183. /package/dist/{scene-node-names-6LBjPmwz.d.ts → scene-node-names-Bu0S66H1.d.ts} +0 -0
  184. /package/dist/{three-dispose-C2drkp6f.d.ts → three-dispose-D950t71B.d.ts} +0 -0
  185. /package/dist/{vis-colors-CHQhjal3.d.ts → vis-colors-D6omC64K.d.ts} +0 -0
  186. /package/dist/{xr-camera-texture-BU5YvKAM.d.ts → xr-camera-texture-DBwCaKTd.d.ts} +0 -0
  187. /package/dist/{xr-error-handler-CDY5QxGb.d.ts → xr-error-handler-C0AQRmxs.d.ts} +0 -0
  188. /package/dist/{zip-export-QO4iLIi7.d.ts → zip-export-D_5HAvFz.d.ts} +0 -0
  189. /package/dist/{zip-reader-D1105idz.d.ts → zip-reader-DSEXt7K6.d.ts} +0 -0
package/dist/index.js CHANGED
@@ -1,19 +1,28 @@
1
1
  import { LogLevel, clearLogBuffer, createLogger, getGlobalLogLevel, getLogBuffer, setGlobalLogLevel, subscribeToLogs } from "./utils/logger.js";
2
2
  import { disposeMeshArray, disposeObject3D } from "./visualization/three-dispose.js";
3
3
  import { CameraBlitCapture, DEFAULT_BLIT_CONFIG, computeCaptureSize } from "./ar/camera-blit-capture.js";
4
- import { applyChromiumProjectionLayerWorkaround } from "./ar/chromium-camera-access-workaround.js";
4
+ import { capabilityMessage, isFullySupported } from "./ar/capability-checker.js";
5
+ import { BASELAYER_WINDOW_MAX, BASELAYER_WINDOW_MIN, applyChromiumProjectionLayerWorkaround, needsBaseLayerPersistence, parseChromeVersion } from "./ar/chromium-camera-access-workaround.js";
5
6
  import { createFailureTracker } from "./utils/failure-tracker.js";
6
7
  import { CAPTURE_FAILURE_WARNING, DEFAULT_CAPTURE_TRACKER_CONFIG, createCaptureFailureTracker } from "./ar/capture-failure-tracker.js";
7
8
  import { buildRawGpsPoint, buildRecordGpsEventPayload, createGpsPositionHandler, eulerToQuaternion, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, resetCoordinatorState, updateDeviceOrientation } from "./state/gps-event-coordinator.js";
8
- import { DepthSampler } from "./ar/depth-sampler.js";
9
+ import { DepthSampler, wrapXRDepthInfo } from "./ar/depth-sampler.js";
10
+ import { createDepthUnprojector, unprojectDepthPoint } from "./ar/depth-unprojection.js";
11
+ import { bresenham3d } from "./ar/bresenham3d.js";
12
+ import { OccupancyGrid } from "./ar/occupancy-grid.js";
9
13
  import { registerFrameUpdate } from "./ar/frame-loop.js";
14
+ import { registerXrFrameUpdate } from "./ar/xr-frame-loop.js";
15
+ import { checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission as requestOrientationPermission$1, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState } from "./sensors/permission-checker.js";
16
+ import { requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch } from "./sensors/gps.js";
17
+ import { WEBXR_TO_NUE } from "./ar/webxr-nue-basis.js";
10
18
  import { DEFAULT_CAPTURE_CONFIG, ImageCaptureManager, MIN_VALID_IMAGE_BYTES } from "./ar/image-capture.js";
11
19
  import { clearLastRestartedPayload, originReset, poseLost, poseReceived, resetTracking, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectTrackingPhase, trackingReducer } from "./state/tracking-slice.js";
20
+ import { A as setTrackingLostCallback, D as setImageCaptureCallback, E as setFrameCallback, F as startImageCapture, I as stopDepthCapture, L as stopImageCapture, M as setTrackingStore, P as startDepthCapture, T as setDepthCaptureCallback, c as getArWorldGroup, d as getDepthSampleCount, f as getImageCaptureFrameCount, g as initAR, i as endARSession, k as setTrackingCallbacks, l as getCamera, m as getScene, p as getLiveCss3dManager, u as getCurrentArPose } from "./webxr-session-QhcSSub5.js";
12
21
  import { acquireCameraTexture } from "./ar/xr-camera-texture.js";
13
22
  import { DEFAULT_RECORDING_OPTIONS, DEPTH_CONSTRAINTS, IMAGE_CONSTRAINTS, STORAGE_KEY, cloneRecordingOptions, loadRecordingOptions, resetRecordingOptions, saveRecordingOptions, validateDepthOptions, validateImageOptions, validateRecordingOptions } from "./state/recording-options.js";
14
23
  import { SCENE_NODE } from "./ar/scene-node-names.js";
15
24
  import { createCss3dRendererManager } from "./visualization/css3d-renderer-manager.js";
16
- import { endARSession, getDepthSampleCount, getImageCaptureFrameCount, getLiveCss3dManager, initAR, setDepthCaptureCallback, setFrameCallback, setImageCaptureCallback, setTrackingCallbacks, setTrackingLostCallback, setTrackingStore, startDepthCapture, startImageCapture, stopDepthCapture, stopImageCapture } from "./ar/webxr-session.js";
25
+ import { createEnableGpsArController } from "./ar/enable-gps-ar.js";
17
26
  import { DEFAULT_LERP_RATE, clampedAlpha } from "./visualization/lerp-utils.js";
18
27
  import { createCameraFollower } from "./visualization/camera-follower.js";
19
28
  import { createAlignmentLerper } from "./visualization/alignment-lerper.js";
@@ -22,9 +31,7 @@ import { COMPASS_CUBE_DISTANCE, COMPASS_CUBE_SIZE, createGpsCompassCubes } from
22
31
  import { disposeReplayScene, getAlignmentLerper, getCameraFollower, getCameraMode, getReplayState, initReplayScene, toggleCameraMode, updateOrbitTarget } from "./ar/replay-scene.js";
23
32
  import { XR_ERROR_MESSAGES, XR_ERROR_MESSAGE_UNKNOWN, getXrErrorMessage } from "./ar/xr-error-handler.js";
24
33
  import "./ar/index.js";
25
- import { requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch } from "./sensors/gps.js";
26
34
  import { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, createGpsErrorHandler, getGpsErrorMessage } from "./sensors/gps-error-handler.js";
27
- import { checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission as requestOrientationPermission$1, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState } from "./sensors/permission-checker.js";
28
35
  import "./sensors/index.js";
29
36
  import { H3_RESOLUTION, approxDistanceMetres, findNearbyGeoAnchor, gpsToH3, h3CellsMatch, isH3Index } from "./geo/h3-proximity.js";
30
37
  import "./geo/index.js";
@@ -44,14 +51,17 @@ import { replayRecording } from "./state/recording-replayer.js";
44
51
  import { DEFAULT_MAX_DELAY_MS, ReplayEngine, computeInterActionDelay, extractActionTimestamp } from "./state/replay-engine.js";
45
52
  import { buildMapData } from "./visualization/map-data.js";
46
53
  import { wireStoreSubscribers } from "./state/store-subscribers.js";
47
- import { add2dImage, calcRelativeCoordsInMeters, recordGpsEvent, setZeroPos } from "./state/index.js";
54
+ import { a as computeOnboardingGuidance, i as setZeroPos, n as calcRelativeCoordsInMeters, o as selectOnboardingGuidance, r as recordGpsEvent, t as add2dImage } from "./state-BkIfpiyA.js";
48
55
  import { checkStorageQuota, createSession, getAppRootHandle, getSessionHandle, getSessionsRootHandle, initOpfsStorage, listSessions, resetOpfsStorage, resetSessionHandles } from "./storage/opfs-storage.js";
49
56
  import { initStorage, resetForNewSession, resetStorageState, startSession as startSession$1, verifyWriteAccess, writeAction, writeFrame } from "./storage/file-system.js";
50
57
  import { OpfsStorageBackend } from "./storage/opfs-storage-backend.js";
51
58
  import { downloadZip, exportAndDownloadSession, exportSessionAsZip, syncToExternalZip } from "./storage/zip-export.js";
52
59
  import "./storage/index.js";
60
+ import { enableArWorldGroupAlignment } from "./visualization/ar-world-group-alignment.js";
53
61
  import { buildCameraFrustum, isObjectInCameraFrustum, isPointInCameraFrustum, isSphereInCameraFrustum } from "./visualization/frustum-visibility.js";
54
- import { n as nueToArLocal, t as createGpsAnchor } from "./gps-anchor-DjC_3MoT.js";
62
+ import { nueToArLocal, worldNueToGps } from "./visualization/frame-conversions.js";
63
+ import { createReticleMesh, updateReticle } from "./visualization/hit-test-reticle.js";
64
+ import { createGpsAnchor } from "./visualization/gps-anchor.js";
55
65
  import { GpsEventVisualizer, gpsEventVisualizer } from "./visualization/gps-event-markers.js";
56
66
  import { ACCURACY_CIRCLE_FILL_OPACITY, ACCURACY_CIRCLE_STROKE_OPACITY, ACCURACY_CIRCLE_WEIGHT, addAccuracyCircles } from "./visualization/accuracy-circles.js";
57
67
  import { ALIGNMENT_SNAPSHOT_COLOR, FUSED_PATH_COLOR, MAP_PATH_POLYLINE_OPACITY, MAP_PATH_POLYLINE_WEIGHT, RAW_GPS_COLOR, USER_POSITION_COLOR, drawMapData } from "./visualization/map-overlay-draw.js";
@@ -59,4 +69,4 @@ import { DEFAULT_LEAFLET_MAP_SIZE_PX, DEFAULT_WORLD_SIZE, DEFAULT_Z_OFFSET, Leaf
59
69
  import { DEFAULT_HEIGHT_OFFSET, DEFAULT_MAP_SIZE, DEFAULT_ZOOM, MapOverlay, latLonToTileXY, tileXYToLatLon } from "./visualization/map-overlay.js";
60
70
  import "./visualization/index.js";
61
71
  import { COMMUNITY_LICENSE_KEY } from "./licensing/index.js";
62
- export { ACCURACY_CIRCLE_FILL_OPACITY, ACCURACY_CIRCLE_STROKE_OPACITY, ACCURACY_CIRCLE_WEIGHT, ALIGNMENT_SNAPSHOT_COLOR, CAPTURE_FAILURE_WARNING, COMMUNITY_LICENSE_KEY, COMPASS_CUBE_DISTANCE, COMPASS_CUBE_SIZE, CameraBlitCapture, DEFAULT_BLIT_CONFIG, DEFAULT_CAPTURE_CONFIG, DEFAULT_CAPTURE_TRACKER_CONFIG, DEFAULT_HEIGHT_OFFSET, DEFAULT_LEAFLET_MAP_SIZE_PX, DEFAULT_LERP_RATE, DEFAULT_MAP_SIZE, DEFAULT_MAX_DELAY_MS, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEFAULT_WORLD_SIZE, DEFAULT_ZOOM, DEFAULT_Z_OFFSET, DEPTH_CONSTRAINTS, DepthSampler, FUSED_PATH_COLOR, GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, GpsEventVisualizer, H3_RESOLUTION, IMAGE_CONSTRAINTS, ImageCaptureManager, LeafletMapOverlay, LogLevel, MAP_PATH_POLYLINE_OPACITY, MAP_PATH_POLYLINE_WEIGHT, MAX_ACTION_FILE_SIZE, MIN_VALID_IMAGE_BYTES, MapOverlay, NullStorageBackend, OpfsStorageBackend, RAW_GPS_COLOR, ReplayEngine, SCENE_NODE, STORAGE_KEY, USER_POSITION_COLOR, VIS_COLORS, XR_ERROR_MESSAGES, XR_ERROR_MESSAGE_UNKNOWN, acquireCameraTexture, add2dImage, addAccuracyCircles, applyChromiumProjectionLayerWorkaround, approxDistanceMetres, buildCameraFrustum, buildMapData, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkStorageQuota, checkWebXRSupport, clampedAlpha, clearLastRestartedPayload, clearLogBuffer, cloneRecordingOptions, computeCaptureSize, computeCompassAgreement, computeConvergence, computeCoverage, computeFusedPath, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeResidualConsensus, computeTrackingQualityReport, createAlignmentLerper, createCameraFollower, createCaptureFailureTracker, createCss3dRendererManager, createFailureTracker, createGpsAnchor, createGpsCompassCubes, createGpsErrorHandler, createGpsPositionHandler, createLogger, createSession, createSlamAppStore, createTrackingQualityListenerMiddleware, disposeMeshArray, disposeObject3D, disposeReplayScene, downloadZip, drawMapData, endARSession, endSession, eulerToQuaternion, exportAndDownloadSession, exportSessionAsZip, extractActionTimestamp, extractOdomPosition, extractOdomRotation, findNearbyGeoAnchor, firstAgreementReached, formatActionFilename, formatFileSize, formatFrameFilename, formatTimestamp, fusedGpsFromOdom, getAlignmentLerper, getAppRootHandle, getCameraFollower, getCameraMode, getDepthSampleCount, getGlobalLogLevel, getGpsErrorMessage, getImageCaptureFrameCount, getLastDeviceOrientation, getLiveCss3dManager, getLogBuffer, getReplayState, getSessionHandle, getSessionsRootHandle, getXrErrorMessage, gpsEventVisualizer, gpsToH3, h3CellsMatch, initAR, initOpfsStorage, initReplayScene, initStorage, isH3Index, isObjectInCameraFrustum, isPointInCameraFrustum, isSphereInCameraFrustum, latLonToTileXY, listFormatter, listSessions, loadActionsFromZip, loadGpsPathFromBlob, loadRecordingOptions, loadSessionMetadataFromBlob, mapWithConcurrencyLimit, matrixDelta, nueToArLocal, originReset, poseLost, poseReceived, readZipEntries, recordDepthSample, recordGpsEvent, recordWriteFailure, recordingReducer, registerFrameUpdate, replayRecording, reportUpdated, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetCoordinatorState, resetFileSystemState, resetForNewSession, resetOpfsStorage, resetRecordingOptions, resetSessionHandles, resetStorageState, resetTracking, resetTrackingQuality, saveRecordingOptions, selectFirstAgreementObservationIndex, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectRecentAlignments, selectTrackingPhase, selectTrackingQuality, setDepthCaptureCallback, setFileSystemState, setFrameCallback, setGlobalLogLevel, setImageCaptureCallback, setTrackingCallbacks, setTrackingLostCallback, setTrackingStore, setZeroPos, snapshotPushed, snapshotsTrimmed, startDepthCapture, startGpsWatch, startImageCapture, startOrientationWatch, startSession, startSession$1 as startStorageSession, stopDepthCapture, stopGpsWatch, stopImageCapture, stopOrientationWatch, subscribeToLogs, syncToExternalZip, tileXYToLatLon, toggleCameraMode, trackingQualityReducer, trackingReducer, updateDeviceOrientation, updateOrbitTarget, validateDepthOptions, validateImageOptions, validateRecordingOptions, verifyWriteAccess, wireStoreSubscribers, writeAction, writeFrame };
72
+ export { ACCURACY_CIRCLE_FILL_OPACITY, ACCURACY_CIRCLE_STROKE_OPACITY, ACCURACY_CIRCLE_WEIGHT, ALIGNMENT_SNAPSHOT_COLOR, BASELAYER_WINDOW_MAX, BASELAYER_WINDOW_MIN, CAPTURE_FAILURE_WARNING, COMMUNITY_LICENSE_KEY, COMPASS_CUBE_DISTANCE, COMPASS_CUBE_SIZE, CameraBlitCapture, DEFAULT_BLIT_CONFIG, DEFAULT_CAPTURE_CONFIG, DEFAULT_CAPTURE_TRACKER_CONFIG, DEFAULT_HEIGHT_OFFSET, DEFAULT_LEAFLET_MAP_SIZE_PX, DEFAULT_LERP_RATE, DEFAULT_MAP_SIZE, DEFAULT_MAX_DELAY_MS, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEFAULT_WORLD_SIZE, DEFAULT_ZOOM, DEFAULT_Z_OFFSET, DEPTH_CONSTRAINTS, DepthSampler, FUSED_PATH_COLOR, GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, GpsEventVisualizer, H3_RESOLUTION, IMAGE_CONSTRAINTS, ImageCaptureManager, LeafletMapOverlay, LogLevel, MAP_PATH_POLYLINE_OPACITY, MAP_PATH_POLYLINE_WEIGHT, MAX_ACTION_FILE_SIZE, MIN_VALID_IMAGE_BYTES, MapOverlay, NullStorageBackend, OccupancyGrid, OpfsStorageBackend, RAW_GPS_COLOR, ReplayEngine, SCENE_NODE, STORAGE_KEY, USER_POSITION_COLOR, VIS_COLORS, WEBXR_TO_NUE, XR_ERROR_MESSAGES, XR_ERROR_MESSAGE_UNKNOWN, acquireCameraTexture, add2dImage, addAccuracyCircles, applyChromiumProjectionLayerWorkaround, approxDistanceMetres, bresenham3d, buildCameraFrustum, buildMapData, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, capabilityMessage, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkStorageQuota, checkWebXRSupport, clampedAlpha, clearLastRestartedPayload, clearLogBuffer, cloneRecordingOptions, computeCaptureSize, computeCompassAgreement, computeConvergence, computeCoverage, computeFusedPath, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createAlignmentLerper, createCameraFollower, createCaptureFailureTracker, createCss3dRendererManager, createDepthUnprojector, createEnableGpsArController, createFailureTracker, createGpsAnchor, createGpsCompassCubes, createGpsErrorHandler, createGpsPositionHandler, createLogger, createReticleMesh, createSession, createSlamAppStore, createTrackingQualityListenerMiddleware, disposeMeshArray, disposeObject3D, disposeReplayScene, downloadZip, drawMapData, enableArWorldGroupAlignment, endARSession, endSession, eulerToQuaternion, exportAndDownloadSession, exportSessionAsZip, extractActionTimestamp, extractOdomPosition, extractOdomRotation, findNearbyGeoAnchor, firstAgreementReached, formatActionFilename, formatFileSize, formatFrameFilename, formatTimestamp, fusedGpsFromOdom, getAlignmentLerper, getAppRootHandle, getArWorldGroup, getCamera, getCameraFollower, getCameraMode, getCurrentArPose, getDepthSampleCount, getGlobalLogLevel, getGpsErrorMessage, getImageCaptureFrameCount, getLastDeviceOrientation, getLiveCss3dManager, getLogBuffer, getReplayState, getScene, getSessionHandle, getSessionsRootHandle, getXrErrorMessage, gpsEventVisualizer, gpsToH3, h3CellsMatch, initAR, initOpfsStorage, initReplayScene, initStorage, isFullySupported, isH3Index, isObjectInCameraFrustum, isPointInCameraFrustum, isSphereInCameraFrustum, latLonToTileXY, listFormatter, listSessions, loadActionsFromZip, loadGpsPathFromBlob, loadRecordingOptions, loadSessionMetadataFromBlob, mapWithConcurrencyLimit, matrixDelta, needsBaseLayerPersistence, nueToArLocal, originReset, parseChromeVersion, poseLost, poseReceived, readZipEntries, recordDepthSample, recordGpsEvent, recordWriteFailure, recordingReducer, registerFrameUpdate, registerXrFrameUpdate, replayRecording, reportUpdated, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetCoordinatorState, resetFileSystemState, resetForNewSession, resetOpfsStorage, resetRecordingOptions, resetSessionHandles, resetStorageState, resetTracking, resetTrackingQuality, saveRecordingOptions, selectFirstAgreementObservationIndex, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectOnboardingGuidance, selectRecentAlignments, selectTrackingPhase, selectTrackingQuality, setDepthCaptureCallback, setFileSystemState, setFrameCallback, setGlobalLogLevel, setImageCaptureCallback, setTrackingCallbacks, setTrackingLostCallback, setTrackingStore, setZeroPos, snapshotPushed, snapshotsTrimmed, startDepthCapture, startGpsWatch, startImageCapture, startOrientationWatch, startSession, startSession$1 as startStorageSession, stopDepthCapture, stopGpsWatch, stopImageCapture, stopOrientationWatch, subscribeToLogs, syncToExternalZip, tileXYToLatLon, toggleCameraMode, trackingQualityReducer, trackingReducer, unprojectDepthPoint, updateDeviceOrientation, updateOrbitTarget, updateReticle, validateDepthOptions, validateImageOptions, validateRecordingOptions, verifyWriteAccess, wireStoreSubscribers, worldNueToGps, wrapXRDepthInfo, writeAction, writeFrame };
@@ -1,4 +1,4 @@
1
- import { t as MapData } from "./map-data-sih4g64v.js";
1
+ import { t as MapData } from "./map-data-CkloBxIl.js";
2
2
  import * as THREE from "three";
3
3
  import { LatLong } from "gps-plus-slam-js";
4
4
  import L from "leaflet";
@@ -1,4 +1,4 @@
1
- import { n as RawGpsSample, t as GpsCoord } from "./geo-types-CTuF23gG.js";
1
+ import { n as RawGpsSample, t as GpsCoord } from "./geo-types-SaPnIEUM.js";
2
2
  import { LatLong, Matrix4, Vector3 } from "gps-plus-slam-js";
3
3
 
4
4
  //#region ../src/visualization/map-data.d.ts
@@ -1,4 +1,4 @@
1
- import { t as MapData } from "./map-data-sih4g64v.js";
1
+ import { t as MapData } from "./map-data-CkloBxIl.js";
2
2
  import L from "leaflet";
3
3
 
4
4
  //#region ../src/visualization/map-overlay-draw.d.ts
@@ -1,5 +1,5 @@
1
- import { n as SessionMetadata } from "./opfs-storage-DOPkzgeT.js";
2
- import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-CT0Il_AB.js";
1
+ import { n as SessionMetadata } from "./opfs-storage-DYm8WHq7.js";
2
+ import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-C9HLFtgz.js";
3
3
 
4
4
  //#region ../src/storage/null-storage-backend.d.ts
5
5
  declare class NullStorageBackend implements StorageBackend {
@@ -0,0 +1,72 @@
1
+ import { t as GridCell } from "./bresenham3d-CFfd7n6B.js";
2
+ import { a as RgbTuple, i as DepthSample } from "./ar-types-Dan1MVTi.js";
3
+ import { Vector3 } from "gps-plus-slam-js";
4
+
5
+ //#region ../src/ar/occupancy-grid.d.ts
6
+ interface OccupancyGridOptions {
7
+ /** Edge length of a cubic grid cell in meters. Default 0.15 (Unity parity). */
8
+ readonly cellSizeM?: number;
9
+ /**
10
+ * Dominant-axis steps before a ray's endpoint at which free-space
11
+ * carving stops, to respect depth noise. Default 2 (Unity parity).
12
+ */
13
+ readonly carveStopCells?: number;
14
+ }
15
+ declare class OccupancyGrid {
16
+ readonly cellSizeM: number;
17
+ readonly carveStopCells: number;
18
+ private readonly cells;
19
+ constructor(options?: OccupancyGridOptions);
20
+ /** Number of occupied cells. */
21
+ get size(): number;
22
+ /**
23
+ * Fold one depth sample into the grid: unproject each point, carve free
24
+ * space from the camera cell to the point cell, then count the point's
25
+ * cell as occupied. Points that cannot be unprojected (no
26
+ * projectionMatrix on old recordings, invalid depth/coords) are skipped.
27
+ *
28
+ * Carving and incrementing run as two separate passes over the sample's
29
+ * points: all rays are carved first, then every endpoint is incremented.
30
+ * A single interleaved pass would be order-dependent — a deeper point's
31
+ * carve could erase the endpoint a nearer point added earlier in the same
32
+ * sample. Splitting the passes makes the result deterministic and lets an
33
+ * endpoint observed within a sample survive other rays in that same
34
+ * sample. (Deeper-carves-nearer still applies ACROSS samples: a later
35
+ * sample's ray carves an earlier sample's endpoint as before.)
36
+ *
37
+ * @returns the number of points actually added.
38
+ */
39
+ addSample(sample: DepthSample): number;
40
+ /** Occupied cells observed at least `minObservations` times (default 1). */
41
+ getOccupiedCells(minObservations?: number): GridCell[];
42
+ /** Quantize a raw-WebXR position to its grid cell (round per axis). */
43
+ cellForPosition(pos: Vector3): GridCell;
44
+ /** Center of a cell in raw WebXR space (round-consistent: cell · cellSizeM). */
45
+ getCellCenter(cell: GridCell): Vector3;
46
+ /**
47
+ * Running-average color of the cell's colored observations (Iter 8), or
48
+ * null when the cell is unknown or was only ever observed without color
49
+ * (rgb option off / pre-Iter-8 recordings) — consumers fall back to
50
+ * height-based coloring. Channels are rounded and clamped to 0–255.
51
+ */
52
+ getCellColor(cell: GridCell): RgbTuple | null;
53
+ /**
54
+ * Walk the grid from `startPos` to `endPos` and return the center of the
55
+ * first cell occupied at least `minObservations` times, or null.
56
+ * Port of Unity's `TryRaycast` (hook for cursor/floor-detection parity).
57
+ */
58
+ raycast(startPos: Vector3, endPos: Vector3, minObservations?: number): Vector3 | null;
59
+ /** Remove all occupied cells (e.g. on store swap / new session). */
60
+ clear(): void;
61
+ /**
62
+ * Delete occupied cells along the camera→point ray (the space was seen
63
+ * through, so it must be free), stopping `carveStopCells` dominant-axis
64
+ * steps before the endpoint. The endpoint cell itself is additionally
65
+ * protected so a current observation is never erased (relevant for
66
+ * carveStopCells = 0 and for the unconditional start-cell visit).
67
+ */
68
+ private carve;
69
+ private increment;
70
+ }
71
+ //#endregion
72
+ export { OccupancyGridOptions as n, OccupancyGrid as t };
@@ -1,5 +1,5 @@
1
- import { n as SessionMetadata } from "./opfs-storage-DOPkzgeT.js";
2
- import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-CT0Il_AB.js";
1
+ import { n as SessionMetadata } from "./opfs-storage-DYm8WHq7.js";
2
+ import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-C9HLFtgz.js";
3
3
 
4
4
  //#region ../src/storage/opfs-storage-backend.d.ts
5
5
  declare class OpfsStorageBackend implements StorageBackend {
@@ -1,4 +1,4 @@
1
- import { n as StorageBackend } from "./storage-backend-CT0Il_AB.js";
1
+ import { n as StorageBackend } from "./storage-backend-C9HLFtgz.js";
2
2
  import { Middleware } from "@reduxjs/toolkit";
3
3
 
4
4
  //#region ../src/state/persistence-middleware.d.ts
@@ -29,10 +29,16 @@ interface ArCrashIsolationOptions {
29
29
  enableCameraTextureAcquisition: boolean;
30
30
  /**
31
31
  * Apply the Chromium WebXR camera-access tab-crash workaround at app
32
- * bootstrap (deletes `XRWebGLBinding.prototype.createProjectionLayer` and
33
- * `XRRenderState.prototype.layers` so three.js falls back to
34
- * `XRWebGLLayer`). Opt-in because the upstream issue thread warns it may
35
- * break WebXR on unaffected devices.
32
+ * bootstrap. The workaround always deletes
33
+ * `XRWebGLBinding.prototype.createProjectionLayer` /
34
+ * `XRRenderState.prototype.layers` (forcing `XRWebGLLayer`) required on
35
+ * every affected Chrome build observed on-device, including Chrome 150 — and
36
+ * additionally persists the `baseLayer` across
37
+ * `XRSession.prototype.updateRenderState` only for Chrome builds inside the
38
+ * affected window (148.0.7778.12 up to 149.0.7821).
39
+ *
40
+ * Default `true`. Opt-out is offered because forcing `XRWebGLLayer` may break
41
+ * WebXR on unaffected (e.g. Quest) devices.
36
42
  *
37
43
  * @see GpsPlusSlamJs_AppFramework/src/ar/chromium-camera-access-workaround.ts
38
44
  * @see https://github.com/mrdoob/three.js/issues/33404
@@ -47,8 +53,18 @@ interface DepthCaptureOptions {
47
53
  enabled: boolean;
48
54
  /** Interval between samples in milliseconds. Default: 1000 */
49
55
  intervalMs: number;
50
- /** Grid size (N×N points per sample). Default: 3 */
56
+ /**
57
+ * Grid size (N×N points per sample). Default: 16 — dense enough to
58
+ * populate the AR-space occupancy grid (2026-06-11 port plan §1).
59
+ */
51
60
  gridSize: number;
61
+ /**
62
+ * Whether to enrich each depth point with the camera color at its view
63
+ * coordinates (RGB voxel coloring, occupancy-grid port plan Iter 8).
64
+ * Costs one small GPU blit+readback per sample (~1 Hz); when off, the
65
+ * occupancy cubes keep the height-based coloring. Default: true.
66
+ */
67
+ rgb: boolean;
52
68
  }
53
69
  /**
54
70
  * Configuration for image capture during recording.
@@ -96,7 +112,7 @@ declare const DEPTH_CONSTRAINTS: {
96
112
  };
97
113
  readonly gridSize: {
98
114
  readonly min: 2;
99
- readonly max: 10;
115
+ readonly max: 32;
100
116
  readonly step: 1;
101
117
  };
102
118
  };
@@ -1,5 +1,5 @@
1
- import { L as CombinedRootState } from "./create-slam-app-store-CNsZ3rcX.js";
2
- import { i as RecordedAction } from "./zip-reader-D1105idz.js";
1
+ import { L as CombinedRootState } from "./create-slam-app-store-qNXQ-tq5.js";
2
+ import { i as RecordedAction } from "./zip-reader-DSEXt7K6.js";
3
3
 
4
4
  //#region ../src/state/recording-replayer.d.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { i as DepthSample } from "./ar-types-Ck8LEq8k.js";
2
- import { s as RecordingOptions } from "./recording-options-Dq6IsKAv.js";
1
+ import { i as DepthSample } from "./ar-types-Dan1MVTi.js";
2
+ import { s as RecordingOptions } from "./recording-options-DJBXuMxV.js";
3
3
  import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
4
4
 
5
5
  //#region ../src/state/recording-slice.d.ts
@@ -21,6 +21,14 @@ interface RecordingState {
21
21
  * User Feedback Issue #1 Part B: Track write failures for visibility.
22
22
  */
23
23
  failedWriteCount: number;
24
+ /**
25
+ * The most recent depth sample, kept ONLY so subscribers can observe new
26
+ * samples via reference comparison (the AR-space occupancy grid is fed
27
+ * this way — see the 2026-06-11 occupancy-grid port plan). The persisted
28
+ * action stream remains the source of truth; no history is kept here.
29
+ * The payload stays in raw WebXR coordinates — conversion-free.
30
+ */
31
+ latestDepthSample: DepthSample | null;
24
32
  }
25
33
  declare const startSession: _$_reduxjs_toolkit0.ActionCreatorWithPayload<SessionMetadata, "recording/startSession">, endSession: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"recording/endSession">, recordDepthSample: _$_reduxjs_toolkit0.ActionCreatorWithPayload<DepthSample, "recording/recordDepthSample">, recordWriteFailure: _$_reduxjs_toolkit0.ActionCreatorWithPayload<string, "recording/recordWriteFailure">;
26
34
  declare const recordingReducer: _$_reduxjs_toolkit0.Reducer<RecordingState>;
@@ -1,4 +1,4 @@
1
- import { i as SlamAppStore } from "./create-slam-app-store-CNsZ3rcX.js";
1
+ import { i as SlamAppStore } from "./create-slam-app-store-qNXQ-tq5.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 CameraFollower } from "./camera-follower-1k8mnw5J.js";
2
- import { t as AlignmentLerper } from "./alignment-lerper-L1RbWHQ4.js";
3
- import { t as Css3dRendererManager } from "./css3d-renderer-manager-CkjCb2HW.js";
1
+ import { t as Css3dRendererManager } from "./css3d-renderer-manager-ptu_t3B3.js";
2
+ import { t as CameraFollower } from "./camera-follower-C2mwEn7c.js";
3
+ import { t as AlignmentLerper } from "./alignment-lerper-Dm9G7JJO.js";
4
4
  import * as THREE from "three";
5
5
  import { OrbitControls } from "three/addons/controls/OrbitControls.js";
6
6
 
@@ -1,2 +1,2 @@
1
- import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-Dg3ziRVY.js";
1
+ import { a as getGpsErrorMessage, i as createGpsErrorHandler, n as GPS_ERROR_MESSAGES, r as GPS_ERROR_MESSAGE_UNKNOWN, t as GPS_ERROR_CODES } from "../gps-error-handler-CJl_2MVm.js";
2
2
  export { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, createGpsErrorHandler, getGpsErrorMessage };
@@ -1,2 +1,2 @@
1
- import { a as startOrientationWatch, i as startGpsWatch, n as RawDeviceOrientation, o as stopGpsWatch, r as requestOrientationPermission, s as stopOrientationWatch, t as GpsPosition } from "../gps-DXoQb9Kf.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-VuezJWK3.js";
2
2
  export { GpsPosition, RawDeviceOrientation, requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
@@ -1,4 +1,4 @@
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-DXoQb9Kf.js";
2
- 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-Dg3ziRVY.js";
3
- 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-DPJl_RU6.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-VuezJWK3.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-GpAiSCwd.js";
3
+ 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-CJl_2MVm.js";
4
4
  export { 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, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch };
@@ -1,4 +1,4 @@
1
+ import { checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission as requestOrientationPermission$1, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState } from "./permission-checker.js";
1
2
  import { requestOrientationPermission, startGpsWatch, startOrientationWatch, stopGpsWatch, stopOrientationWatch } from "./gps.js";
2
3
  import { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, createGpsErrorHandler, getGpsErrorMessage } from "./gps-error-handler.js";
3
- import { checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission as requestOrientationPermission$1, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState } from "./permission-checker.js";
4
4
  export { GPS_ERROR_CODES, GPS_ERROR_MESSAGES, GPS_ERROR_MESSAGE_UNKNOWN, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, createGpsErrorHandler, getGpsErrorMessage, requestAllPermissions, requestCameraPermission, requestOrientationPermission as requestDeviceOrientationPermission, requestGeolocationPermission, requestOrientationPermission$1 as requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, startGpsWatch, startOrientationWatch, 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-DPJl_RU6.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-GpAiSCwd.js";
2
2
  export { PermissionCheckResult, PermissionStatus, PermissionSubscription, checkAllPermissions, checkCameraPermission, checkFileSystemPermission, checkGeolocationPermission, checkOrientationPermission, checkWebXRSupport, requestAllPermissions, requestCameraPermission, requestGeolocationPermission, requestOrientationPermission, requestWebXRWithDepthPermission, resetFileSystemState, setFileSystemState, subscribePermissionChanges };
@@ -0,0 +1,57 @@
1
+ import { createLogger } from "./utils/logger.js";
2
+ //#region ../src/ar/session-disposers.ts
3
+ /**
4
+ * Session-scoped disposer registry. Components that allocate a resource tied to
5
+ * a single AR session — a store subscription, an event listener, a lerper —
6
+ * register a teardown function here; the WebXR session's `resetWebXRState()`
7
+ * flushes them on teardown so the resource never outlives the session it
8
+ * belonged to.
9
+ *
10
+ * This is a sibling of `frame-loop.ts` (also a `Set`-based registry) but serves
11
+ * a different need: `frame-loop` holds *per-frame ticks* invoked every frame and
12
+ * wiped by `clearFrameUpdates()`; this registry holds *one-shot teardown* run
13
+ * exactly once on session end. The split keeps each registry's contract crisp.
14
+ *
15
+ * Why it exists: `resetWebXRState()` already clears the frame-update registry,
16
+ * but resources like the store subscription opened by
17
+ * `enableArWorldGroupAlignment` are not per-frame ticks and had no teardown hook
18
+ * — so they leaked across sessions (a dangling subscriber pinning the old
19
+ * `arWorldGroup`). Because `initAR()` throws if a prior session is still live,
20
+ * every restart must pass through `resetWebXRState()`, making it the single
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.
23
+ */
24
+ const log = createLogger("SessionDisposers");
25
+ const disposers = /* @__PURE__ */ new Set();
26
+ /**
27
+ * Register a session-scoped teardown function. Returns a deregister function
28
+ * (call it when the resource is disposed early, so a later flush won't re-run
29
+ * the teardown).
30
+ */
31
+ function registerSessionDisposer(dispose) {
32
+ disposers.add(dispose);
33
+ return () => {
34
+ disposers.delete(dispose);
35
+ };
36
+ }
37
+ /**
38
+ * Run and drop every registered disposer. Called from `resetWebXRState()` on
39
+ * session teardown.
40
+ *
41
+ * The set is snapshotted and **cleared before** running, so (a) a second flush
42
+ * is a no-op rather than re-tearing-down an already-released resource, and (b) a
43
+ * disposer that re-registers during teardown cannot loop. Each disposer runs in
44
+ * its own `try/catch` so one throwing teardown cannot abort the rest — mirroring
45
+ * `runFrameUpdates`.
46
+ */
47
+ function runSessionDisposers() {
48
+ const snapshot = Array.from(disposers);
49
+ disposers.clear();
50
+ for (const dispose of snapshot) try {
51
+ dispose();
52
+ } catch (error) {
53
+ log.error("A session disposer threw; continuing teardown", error);
54
+ }
55
+ }
56
+ //#endregion
57
+ export { runSessionDisposers as n, registerSessionDisposer as t };
@@ -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-BeU0_ab8.js";
1
+ import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-CcZ5UV-8.js";
2
2
  export { selectAlignmentMatrix, selectFrameTilesInWebXR, selectGpsPositions, selectOdometryPositions, selectOdometryRotations, selectZeroReference };
@@ -1,2 +1,2 @@
1
- import { L as CombinedRootState } from "../create-slam-app-store-CNsZ3rcX.js";
1
+ import { L as CombinedRootState } from "../create-slam-app-store-qNXQ-tq5.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-CNsZ3rcX.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-qNXQ-tq5.js";
2
2
  export { SlamAppCombinedState, SlamAppMiddleware, SlamAppRootState, SlamAppStore, SlamAppStoreOptions, createSlamAppStore };
@@ -1,4 +1,4 @@
1
- import { t as ARPose } from "../ar-types-Ck8LEq8k.js";
2
- import { o as extractOdomPosition, s as extractOdomRotation } from "../gps-event-coordinator-DBx9I1YX.js";
3
- import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DsM1Kb2N.js";
1
+ import { t as ARPose } from "../ar-types-Dan1MVTi.js";
2
+ import { o as extractOdomPosition, s as extractOdomRotation } from "../gps-event-coordinator-BDIQde2x.js";
3
+ import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DVb96iOy.js";
4
4
  export { ARPose, CaptureGpsAnchorSampleOptions, GpsAnchorSample, GpsAnchorSampleGpsPoint, captureGpsAnchorSample, extractOdomPosition, extractOdomRotation };
@@ -1,2 +1,2 @@
1
- import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-DBx9I1YX.js";
1
+ import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-BDIQde2x.js";
2
2
  export { RecordingCoordinatorConfig, buildRawGpsPoint, buildRecordGpsEventPayload, createGpsPositionHandler, eulerToQuaternion, extractOdomPosition, extractOdomRotation, getLastDeviceOrientation, resetCoordinatorState, updateDeviceOrientation };
@@ -1,17 +1,17 @@
1
- import { i as DepthSample, r as DepthPoint } from "../ar-types-Ck8LEq8k.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-utCNND8t.js";
3
- import { _ as validateRecordingOptions, a as IMAGE_CONSTRAINTS, c as RecordingOptionsInput, d as loadRecordingOptions, f as resetRecordingOptions, g as validateImageOptions, h as validateDepthOptions, i as DepthCaptureOptions, l as STORAGE_KEY, n as DEFAULT_RECORDING_OPTIONS, o as ImageCaptureOptions, p as saveRecordingOptions, r as DEPTH_CONSTRAINTS, u as cloneRecordingOptions } from "../recording-options-Dq6IsKAv.js";
4
- 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-d6OtCrza.js";
5
- import { n as SessionMetadata } from "../opfs-storage-DOPkzgeT.js";
6
- import { n as StorageBackend } from "../storage-backend-CT0Il_AB.js";
7
- import { A as resetTrackingQuality, C as computeResidualConsensus, D as firstAgreementReached, E as degradedCountUpdated, F as snapshotsTrimmed, I as trackingQualityReducer, M as selectRecentAlignments, N as selectTrackingQuality, O as matrixDelta, P as snapshotPushed, S as computeGpsVsFusedDivergence, T as createTrackingQualityListenerMiddleware, _ as TrackingQualityState, a as SlamAppStoreOptions, b as computeCoverage, d as DEFAULT_TRACKING_QUALITY_OPTIONS, g as TrackingQualitySliceState, h as TrackingQualityReport, i as SlamAppStore, j as selectFirstAgreementObservationIndex, k as reportUpdated, m as TrackingQualityOptions, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, v as computeCompassAgreement, w as computeTrackingQualityReport, x as computeGpsAccuracy, y as computeConvergence } from "../create-slam-app-store-CNsZ3rcX.js";
8
- import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-DBx9I1YX.js";
9
- import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DsM1Kb2N.js";
10
- import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-CmCIIZ02.js";
11
- import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-BkHIqvaA.js";
12
- 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-BGBRQyXs.js";
13
- import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-DIHm3BRZ.js";
14
- import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-Dce_CoJF.js";
15
- import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-BeU0_ab8.js";
16
- import { Add2dImagePayload, GpsPoint, LatLong, RawDeviceOrientation, RawGpsPoint, RecordGpsEventPayload, add2dImage, calcRelativeCoordsInMeters, recordGpsEvent, setZeroPos } from "gps-plus-slam-js";
17
- export { type Add2dImagePayload, type AlignmentSnapshot, type CaptureGpsAnchorSampleOptions, type CompleteCallback, DEFAULT_MAX_DELAY_MS, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, type DepthCaptureOptions, type DepthPoint, type DepthSample, type DeviceOrientation, type ErrorCallback, type GpsAnchorSample, type GpsAnchorSampleGpsPoint, type GpsPoint, IMAGE_CONSTRAINTS, type ImageCaptureOptions, type LatLong, type SessionMetadata as OpfsSessionMetadata, type PersistenceMiddlewareOptions, type PoseReceivedPayload, type ProgressCallback, type RawDeviceOrientation, type RawGpsPoint, type RecordGpsEventPayload, type RecordingCoordinatorConfig, type RecordingOptionsInput, type RecordingState, type ReplayAction, ReplayEngine, type ReplayRecordingOptions, type ReplayState, type ResetTransformData, STORAGE_KEY, type SessionMetadata$1 as SessionMetadata, type SlamAppCombinedState, type SlamAppMiddleware, type SlamAppRootState, type SlamAppStore, type SlamAppStoreOptions, type StorageBackend, type StoreSubscriberDeps, type SubscribableStore, type TrackingPhase, type TrackingQualityOptions, type TrackingQualityReport, type TrackingQualitySliceState, type TrackingQualityState, type TrackingSliceState, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearLastRestartedPayload, cloneRecordingOptions, computeCompassAgreement, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, firstAgreementReached, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, originReset, poseLost, poseReceived, recordDepthSample, recordGpsEvent, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectFirstAgreementObservationIndex, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectRecentAlignments, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
1
+ import { i as DepthSample, r as DepthPoint } from "../ar-types-Dan1MVTi.js";
2
+ import { _ as validateRecordingOptions, a as IMAGE_CONSTRAINTS, c as RecordingOptionsInput, d as loadRecordingOptions, f as resetRecordingOptions, g as validateImageOptions, h as validateDepthOptions, i as DepthCaptureOptions, l as STORAGE_KEY, n as DEFAULT_RECORDING_OPTIONS, o as ImageCaptureOptions, p as saveRecordingOptions, r as DEPTH_CONSTRAINTS, u as cloneRecordingOptions } from "../recording-options-DJBXuMxV.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-CdK8c-8P.js";
4
+ 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-89O07ebs.js";
5
+ import { n as SessionMetadata } from "../opfs-storage-DYm8WHq7.js";
6
+ import { n as StorageBackend } from "../storage-backend-C9HLFtgz.js";
7
+ import { A as resetTrackingQuality, C as computeResidualConsensus, D as firstAgreementReached, E as degradedCountUpdated, F as snapshotsTrimmed, I as trackingQualityReducer, M as selectRecentAlignments, N as selectTrackingQuality, O as matrixDelta, P as snapshotPushed, S as computeGpsVsFusedDivergence, T as createTrackingQualityListenerMiddleware, _ as TrackingQualityState, a as SlamAppStoreOptions, b as computeCoverage, d as DEFAULT_TRACKING_QUALITY_OPTIONS, g as TrackingQualitySliceState, h as TrackingQualityReport, i as SlamAppStore, j as selectFirstAgreementObservationIndex, k as reportUpdated, m as TrackingQualityOptions, n as SlamAppMiddleware, o as createSlamAppStore, r as SlamAppRootState, s as AlignmentSnapshot, t as SlamAppCombinedState, v as computeCompassAgreement, w as computeTrackingQualityReport, x as computeGpsAccuracy, y as computeConvergence } from "../create-slam-app-store-qNXQ-tq5.js";
8
+ import { a as eulerToQuaternion, c as getLastDeviceOrientation, i as createGpsPositionHandler, l as resetCoordinatorState, n as buildRawGpsPoint, o as extractOdomPosition, r as buildRecordGpsEventPayload, s as extractOdomRotation, t as RecordingCoordinatorConfig, u as updateDeviceOrientation } from "../gps-event-coordinator-BDIQde2x.js";
9
+ import { i as captureGpsAnchorSample, n as GpsAnchorSample, r as GpsAnchorSampleGpsPoint, t as CaptureGpsAnchorSampleOptions } from "../gps-ar-pose-sampler-DVb96iOy.js";
10
+ import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-BL-x-7k0.js";
11
+ import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-DwyzgfWr.js";
12
+ 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-BRqszuQ9.js";
13
+ import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-CP3BKSbF.js";
14
+ import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-rrkLkFTt.js";
15
+ import { a as selectOdometryRotations, i as selectOdometryPositions, n as selectFrameTilesInWebXR, o as selectZeroReference, r as selectGpsPositions, t as selectAlignmentMatrix } from "../app-selectors-CcZ5UV-8.js";
16
+ 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-KJq2amHF.js";
17
+ export { Add2dImagePayload, AlignmentSnapshot, CaptureGpsAnchorSampleOptions, CompleteCallback, DEFAULT_MAX_DELAY_MS, 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, RawDeviceOrientation, RawGpsPoint, RecordGpsEventPayload, RecordingCoordinatorConfig, RecordingOptionsInput, RecordingState, ReplayAction, ReplayEngine, ReplayRecordingOptions, ReplayState, ResetTransformData, 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, clearLastRestartedPayload, cloneRecordingOptions, computeCompassAgreement, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, firstAgreementReached, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, originReset, poseLost, poseReceived, recordDepthSample, recordGpsEvent, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectFirstAgreementObservationIndex, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectRecentAlignments, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
@@ -11,5 +11,5 @@ import { replayRecording } from "./recording-replayer.js";
11
11
  import { DEFAULT_MAX_DELAY_MS, ReplayEngine, computeInterActionDelay, extractActionTimestamp } from "./replay-engine.js";
12
12
  import { subscribeToSelector } from "./subscribe-to-selector.js";
13
13
  import { wireStoreSubscribers } from "./store-subscribers.js";
14
- import { add2dImage, calcRelativeCoordsInMeters, recordGpsEvent, setZeroPos } from "gps-plus-slam-js";
15
- export { DEFAULT_MAX_DELAY_MS, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, IMAGE_CONSTRAINTS, ReplayEngine, STORAGE_KEY, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearLastRestartedPayload, cloneRecordingOptions, computeCompassAgreement, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, firstAgreementReached, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, originReset, poseLost, poseReceived, recordDepthSample, recordGpsEvent, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectFirstAgreementObservationIndex, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectRecentAlignments, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
14
+ import { a as computeOnboardingGuidance, i as setZeroPos, n as calcRelativeCoordsInMeters, o as selectOnboardingGuidance, r as recordGpsEvent, t as add2dImage } from "../state-BkIfpiyA.js";
15
+ export { DEFAULT_MAX_DELAY_MS, DEFAULT_RECORDING_OPTIONS, DEFAULT_TRACKING_QUALITY_OPTIONS, DEPTH_CONSTRAINTS, IMAGE_CONSTRAINTS, ReplayEngine, STORAGE_KEY, add2dImage, buildRawGpsPoint, buildRecordGpsEventPayload, calcRelativeCoordsInMeters, captureGpsAnchorSample, clearLastRestartedPayload, cloneRecordingOptions, computeCompassAgreement, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeInterActionDelay, computeOnboardingGuidance, computeResidualConsensus, computeTrackingQualityReport, createGpsPositionHandler, createPersistenceMiddleware, createSlamAppStore, createTrackingQualityListenerMiddleware, degradedCountUpdated, endSession, eulerToQuaternion, extractActionTimestamp, extractOdomPosition, extractOdomRotation, firstAgreementReached, getLastDeviceOrientation, loadRecordingOptions, matrixDelta, originReset, poseLost, poseReceived, recordDepthSample, recordGpsEvent, recordWriteFailure, recordingReducer, replayRecording, reportUpdated, resetCoordinatorState, resetRecordingOptions, resetTracking, resetTrackingQuality, saveRecordingOptions, selectAlignmentMatrix, selectFirstAgreementObservationIndex, selectFrameTilesInWebXR, selectGpsPositions, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectOdometryPositions, selectOdometryRotations, selectOnboardingGuidance, selectRecentAlignments, selectTrackingPhase, selectTrackingQuality, selectZeroReference, setZeroPos, slicePrefixOf, snapshotPushed, snapshotsTrimmed, startSession, subscribeToSelector, trackingQualityReducer, trackingReducer, updateDeviceOrientation, validateDepthOptions, validateImageOptions, validateRecordingOptions, wireStoreSubscribers };
@@ -1,2 +1,2 @@
1
- import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-BkHIqvaA.js";
1
+ import { n as createPersistenceMiddleware, r as slicePrefixOf, t as PersistenceMiddlewareOptions } from "../persistence-middleware-DwyzgfWr.js";
2
2
  export { PersistenceMiddlewareOptions, createPersistenceMiddleware, slicePrefixOf };
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "../utils/logger.js";
2
- import { recordWriteFailure } from "./recording-slice.js";
2
+ import { endSession, recordWriteFailure, startSession } from "./recording-slice.js";
3
3
  //#region ../src/state/persistence-middleware.ts
4
4
  const log = createLogger("PersistenceMiddleware");
5
5
  /** Maximum number of concurrent OPFS write operations. */
@@ -48,9 +48,15 @@ function readIsRecording(state) {
48
48
  * must be persisted. True while recording, and also for the `endSession`
49
49
  * action that just flipped `isRecording` to false (Issue 5) so the session's
50
50
  * final action is still captured.
51
+ *
52
+ * The endSession type is derived from the imported action creator
53
+ * (`endSession.type`) rather than a hand-typed literal, so a rename of the
54
+ * recording slice or its actions propagates here automatically instead of
55
+ * silently breaking final-action persistence.
51
56
  */
52
57
  function isInPersistableSession(wasRecording, isRecording, actionType) {
53
- return isRecording || wasRecording && actionType === "recording/endSession";
58
+ const isEndSession = actionType === endSession.type;
59
+ return isRecording || wasRecording && isEndSession;
54
60
  }
55
61
  /**
56
62
  * Create a Redux middleware that persists qualifying actions to storage
@@ -77,7 +83,7 @@ function createPersistenceMiddleware(options) {
77
83
  const wasRecording = readIsRecording(store.getState());
78
84
  const result = next(action);
79
85
  if (!actionType) return result;
80
- if (actionType === "recording/startSession") actionIndex = 0;
86
+ if (actionType === startSession.type) actionIndex = 0;
81
87
  if (!isInPersistableSession(wasRecording, readIsRecording(store.getState()), actionType)) return result;
82
88
  if (!(actionType !== excludedActionType && normalizedPrefixes.some((prefix) => actionType.startsWith(prefix)))) return result;
83
89
  const index = ++actionIndex;
@@ -1,2 +1,2 @@
1
- import { _ as validateRecordingOptions, a as IMAGE_CONSTRAINTS, c as RecordingOptionsInput, d as loadRecordingOptions, f as resetRecordingOptions, g as validateImageOptions, h as validateDepthOptions, i as DepthCaptureOptions, l as STORAGE_KEY, m as validateArCrashIsolationOptions, n as DEFAULT_RECORDING_OPTIONS, o as ImageCaptureOptions, p as saveRecordingOptions, r as DEPTH_CONSTRAINTS, s as RecordingOptions, t as ArCrashIsolationOptions, u as cloneRecordingOptions } from "../recording-options-Dq6IsKAv.js";
1
+ import { _ as validateRecordingOptions, a as IMAGE_CONSTRAINTS, c as RecordingOptionsInput, d as loadRecordingOptions, f as resetRecordingOptions, g as validateImageOptions, h as validateDepthOptions, i as DepthCaptureOptions, l as STORAGE_KEY, m as validateArCrashIsolationOptions, n as DEFAULT_RECORDING_OPTIONS, o as ImageCaptureOptions, p as saveRecordingOptions, r as DEPTH_CONSTRAINTS, s as RecordingOptions, t as ArCrashIsolationOptions, u as cloneRecordingOptions } from "../recording-options-DJBXuMxV.js";
2
2
  export { ArCrashIsolationOptions, DEFAULT_RECORDING_OPTIONS, DEPTH_CONSTRAINTS, DepthCaptureOptions, IMAGE_CONSTRAINTS, ImageCaptureOptions, RecordingOptions, RecordingOptionsInput, STORAGE_KEY, cloneRecordingOptions, loadRecordingOptions, resetRecordingOptions, saveRecordingOptions, validateArCrashIsolationOptions, validateDepthOptions, validateImageOptions, validateRecordingOptions };
@@ -24,7 +24,8 @@ const DEFAULT_RECORDING_OPTIONS = {
24
24
  depth: {
25
25
  enabled: true,
26
26
  intervalMs: 1e3,
27
- gridSize: 3
27
+ gridSize: 16,
28
+ rgb: true
28
29
  },
29
30
  images: {
30
31
  enabled: true,
@@ -50,7 +51,7 @@ const DEPTH_CONSTRAINTS = {
50
51
  },
51
52
  gridSize: {
52
53
  min: 2,
53
- max: 10,
54
+ max: 32,
54
55
  step: 1
55
56
  }
56
57
  };
@@ -102,7 +103,8 @@ function validateDepthOptions(options) {
102
103
  return {
103
104
  enabled: typeof options.enabled === "boolean" ? options.enabled : defaults.enabled,
104
105
  intervalMs: clamp(typeof options.intervalMs === "number" ? options.intervalMs : defaults.intervalMs, DEPTH_CONSTRAINTS.intervalMs.min, DEPTH_CONSTRAINTS.intervalMs.max),
105
- gridSize: clamp(typeof options.gridSize === "number" ? options.gridSize : defaults.gridSize, DEPTH_CONSTRAINTS.gridSize.min, DEPTH_CONSTRAINTS.gridSize.max)
106
+ gridSize: clamp(typeof options.gridSize === "number" ? options.gridSize : defaults.gridSize, DEPTH_CONSTRAINTS.gridSize.min, DEPTH_CONSTRAINTS.gridSize.max),
107
+ rgb: typeof options.rgb === "boolean" ? options.rgb : defaults.rgb
106
108
  };
107
109
  }
108
110
  /**