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.
- package/README.md +69 -15
- package/dist/{app-selectors-BeU0_ab8.d.ts → app-selectors-CcZ5UV-8.d.ts} +1 -1
- package/dist/ar/bresenham3d.d.ts +2 -0
- package/dist/ar/bresenham3d.js +81 -0
- package/dist/ar/camera-blit-capture.d.ts +1 -1
- package/dist/ar/camera-blit-capture.js +30 -2
- package/dist/ar/capability-checker.d.ts +2 -0
- package/dist/ar/capability-checker.js +25 -0
- package/dist/ar/capture-failure-tracker.d.ts +1 -1
- package/dist/ar/chromium-camera-access-workaround.d.ts +2 -2
- package/dist/ar/chromium-camera-access-workaround.js +197 -8
- package/dist/ar/depth-sampler.d.ts +3 -3
- package/dist/ar/depth-sampler.js +63 -8
- package/dist/ar/depth-unprojection.d.ts +2 -0
- package/dist/ar/depth-unprojection.js +94 -0
- package/dist/ar/enable-gps-ar.d.ts +2 -0
- package/dist/ar/enable-gps-ar.js +137 -0
- package/dist/ar/frame-loop.d.ts +1 -1
- package/dist/ar/frame-loop.js +24 -1
- package/dist/ar/image-capture.d.ts +1 -1
- package/dist/ar/image-capture.js +2 -1
- package/dist/ar/index.d.ts +19 -12
- package/dist/ar/index.js +11 -4
- package/dist/ar/occupancy-grid.d.ts +2 -0
- package/dist/ar/occupancy-grid.js +164 -0
- package/dist/ar/replay-scene.d.ts +1 -1
- package/dist/ar/replay-scene.js +1 -1
- package/dist/ar/scene-node-names.d.ts +1 -1
- package/dist/ar/webxr-nue-basis.d.ts +2 -0
- package/dist/ar/webxr-nue-basis.js +54 -0
- package/dist/ar/webxr-session.d.ts +4 -4
- package/dist/ar/webxr-session.js +1 -984
- package/dist/ar/xr-camera-texture.d.ts +1 -1
- package/dist/ar/xr-error-handler.d.ts +1 -1
- package/dist/ar/xr-frame-loop.d.ts +2 -0
- package/dist/ar/xr-frame-loop.js +69 -0
- package/dist/{ar-types-Ck8LEq8k.d.ts → ar-types-Dan1MVTi.d.ts} +28 -5
- package/dist/ar-world-group-alignment-ColHB_5A.d.ts +43 -0
- package/dist/bresenham3d-CFfd7n6B.d.ts +59 -0
- package/dist/{camera-blit-capture-C1V9I1Z6.d.ts → camera-blit-capture-D5_mNhla.d.ts} +20 -0
- package/dist/capability-checker-CQXJHxXg.d.ts +43 -0
- package/dist/chromium-camera-access-workaround-Jqbn0apH.d.ts +137 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/{create-slam-app-store-CNsZ3rcX.d.ts → create-slam-app-store-qNXQ-tq5.d.ts} +5 -5
- package/dist/depth-sampler-Bhanfwla.d.ts +169 -0
- package/dist/depth-unprojection-Y6i_mJuT.d.ts +52 -0
- package/dist/enable-gps-ar-CapmADVN.d.ts +95 -0
- package/dist/{file-system-DTApEv_Q.d.ts → file-system-C_eqiEA8.d.ts} +1 -1
- package/dist/frame-conversions-BfsafGWR.d.ts +54 -0
- package/dist/{frame-loop-QJIxLin0.d.ts → frame-loop-CMewS8cY.d.ts} +5 -0
- package/dist/{fused-path-CB4DwWOG.d.ts → fused-path-DJoVu98b.d.ts} +1 -1
- package/dist/geo/h3-proximity.d.ts +1 -1
- package/dist/geo/index.d.ts +1 -1
- package/dist/{gps-anchor-CnWY61XK.d.ts → gps-anchor-dYeCvvp5.d.ts} +12 -1
- package/dist/{gps-ar-pose-sampler-DsM1Kb2N.d.ts → gps-ar-pose-sampler-DVb96iOy.d.ts} +1 -1
- package/dist/{gps-event-coordinator-DBx9I1YX.d.ts → gps-event-coordinator-BDIQde2x.d.ts} +3 -3
- package/dist/hit-test-reticle-BEzEybxZ.d.ts +45 -0
- package/dist/{image-capture-DZLxHDN9.d.ts → image-capture-DZ4HFRgS.d.ts} +15 -2
- package/dist/index-KJq2amHF.d.ts +37 -0
- package/dist/index.d.ts +67 -58
- package/dist/index.js +18 -8
- package/dist/{leaflet-map-overlay-Cew7XAoO.d.ts → leaflet-map-overlay-6CJC-E1l.d.ts} +1 -1
- package/dist/{map-data-sih4g64v.d.ts → map-data-CkloBxIl.d.ts} +1 -1
- package/dist/{map-overlay-draw-B3R1c9Xp.d.ts → map-overlay-draw-krOKwDAq.d.ts} +1 -1
- package/dist/{null-storage-backend-BKOS7JpL.d.ts → null-storage-backend-CxEjZHRW.d.ts} +2 -2
- package/dist/occupancy-grid-BRNRaPyT.d.ts +72 -0
- package/dist/{opfs-storage-backend-Cj_7PWoq.d.ts → opfs-storage-backend-CjSAuqg_.d.ts} +2 -2
- package/dist/{persistence-middleware-BkHIqvaA.d.ts → persistence-middleware-DwyzgfWr.d.ts} +1 -1
- package/dist/{recording-options-Dq6IsKAv.d.ts → recording-options-DJBXuMxV.d.ts} +22 -6
- package/dist/{recording-replayer-CmCIIZ02.d.ts → recording-replayer-BL-x-7k0.d.ts} +2 -2
- package/dist/{recording-slice-d6OtCrza.d.ts → recording-slice-89O07ebs.d.ts} +10 -2
- package/dist/{replay-engine-BGBRQyXs.d.ts → replay-engine-BRqszuQ9.d.ts} +1 -1
- package/dist/{replay-scene-DpAGcAKY.d.ts → replay-scene-Bw58VL6p.d.ts} +3 -3
- package/dist/sensors/gps-error-handler.d.ts +1 -1
- package/dist/sensors/gps.d.ts +1 -1
- package/dist/sensors/index.d.ts +3 -3
- package/dist/sensors/index.js +1 -1
- package/dist/sensors/permission-checker.d.ts +1 -1
- package/dist/session-disposers-M-oashRH.js +57 -0
- package/dist/state/app-selectors.d.ts +1 -1
- package/dist/state/combined-root-state.d.ts +1 -1
- package/dist/state/create-slam-app-store.d.ts +1 -1
- package/dist/state/gps-ar-pose-sampler.d.ts +3 -3
- package/dist/state/gps-event-coordinator.d.ts +1 -1
- package/dist/state/index.d.ts +17 -17
- package/dist/state/index.js +2 -2
- package/dist/state/persistence-middleware.d.ts +1 -1
- package/dist/state/persistence-middleware.js +9 -3
- package/dist/state/recording-options.d.ts +1 -1
- package/dist/state/recording-options.js +5 -3
- package/dist/state/recording-replayer.d.ts +2 -2
- package/dist/state/recording-slice.d.ts +1 -1
- package/dist/state/recording-slice.js +11 -2
- package/dist/state/replay-engine.d.ts +1 -1
- package/dist/state/store-subscribers.d.ts +2 -2
- package/dist/state/subscribe-to-selector.d.ts +1 -1
- package/dist/state/tracking-quality.d.ts +1 -1
- package/dist/state/tracking-quality.js +1 -1
- package/dist/state/tracking-slice.d.ts +1 -1
- package/dist/state-BkIfpiyA.js +87 -0
- package/dist/storage/file-system-utils.d.ts +1 -1
- package/dist/storage/file-system.d.ts +1 -1
- package/dist/storage/index.d.ts +8 -8
- package/dist/storage/null-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage.d.ts +1 -1
- package/dist/storage/storage-backend.d.ts +1 -1
- package/dist/storage/zip-export.d.ts +1 -1
- package/dist/storage/zip-reader.d.ts +1 -1
- package/dist/{storage-backend-CT0Il_AB.d.ts → storage-backend-C9HLFtgz.d.ts} +1 -1
- package/dist/{store-subscribers-Dce_CoJF.d.ts → store-subscribers-rrkLkFTt.d.ts} +2 -2
- package/dist/{subscribe-to-selector-DIHm3BRZ.d.ts → subscribe-to-selector-CP3BKSbF.d.ts} +1 -1
- package/dist/test-utils/browser-mocks.d.ts +1 -1
- package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
- package/dist/{tracking-slice-utCNND8t.d.ts → tracking-slice-CdK8c-8P.d.ts} +1 -1
- package/dist/types/ar-types.d.ts +2 -2
- package/dist/types/geo-types.d.ts +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/utils/concurrency.d.ts +1 -1
- package/dist/utils/failure-tracker.d.ts +1 -1
- package/dist/utils/format-file-size.d.ts +1 -1
- package/dist/utils/fused-path.d.ts +1 -1
- package/dist/utils/index.d.ts +6 -6
- package/dist/utils/list-formatter.d.ts +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/visualization/accuracy-circles.d.ts +1 -1
- package/dist/visualization/alignment-lerper.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.d.ts +2 -0
- package/dist/visualization/ar-world-group-alignment.js +51 -0
- package/dist/visualization/camera-follower.d.ts +1 -1
- package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
- package/dist/visualization/frame-conversions.d.ts +2 -0
- package/dist/visualization/frame-conversions.js +88 -0
- package/dist/visualization/frustum-visibility.d.ts +1 -1
- package/dist/visualization/gps-anchor.d.ts +1 -1
- package/dist/visualization/gps-anchor.js +216 -1
- package/dist/visualization/gps-compass-cubes.d.ts +1 -1
- package/dist/visualization/gps-event-markers.d.ts +1 -1
- package/dist/visualization/gps-event-markers.js +1 -1
- package/dist/visualization/hit-test-reticle.d.ts +2 -0
- package/dist/visualization/hit-test-reticle.js +81 -0
- package/dist/visualization/index.d.ts +19 -17
- package/dist/visualization/index.js +5 -2
- package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
- package/dist/visualization/lerp-utils.d.ts +1 -1
- package/dist/visualization/map-data.d.ts +1 -1
- package/dist/visualization/map-overlay-draw.d.ts +1 -1
- package/dist/visualization/map-overlay.d.ts +1 -1
- package/dist/visualization/three-dispose.d.ts +1 -1
- package/dist/visualization/vis-colors.d.ts +1 -1
- package/dist/webxr-nue-basis-CqKQmZzT.d.ts +23 -0
- package/dist/{webxr-session-DB5cIZnN.d.ts → webxr-session-DtAG9srK.d.ts} +45 -13
- package/dist/webxr-session-QhcSSub5.js +1041 -0
- package/dist/xr-frame-loop-BtYytZJg.d.ts +70 -0
- package/package.json +1 -1
- package/dist/chromium-camera-access-workaround-NvChXsi8.d.ts +0 -61
- package/dist/depth-sampler-xg8vna6c.d.ts +0 -108
- package/dist/gps-anchor-DjC_3MoT.js +0 -257
- package/dist/index-pOjUCKEP.d.ts +0 -24
- /package/dist/{accuracy-circles-CsxE_7x1.d.ts → accuracy-circles-BpwWAs8G.d.ts} +0 -0
- /package/dist/{alignment-lerper-L1RbWHQ4.d.ts → alignment-lerper-Dm9G7JJO.d.ts} +0 -0
- /package/dist/{camera-follower-1k8mnw5J.d.ts → camera-follower-C2mwEn7c.d.ts} +0 -0
- /package/dist/{capture-failure-tracker-JKb1ST8E.d.ts → capture-failure-tracker-CUeU3L_M.d.ts} +0 -0
- /package/dist/{concurrency-CMw8pSaG.d.ts → concurrency-CO1FQvs3.d.ts} +0 -0
- /package/dist/{css3d-renderer-manager-CkjCb2HW.d.ts → css3d-renderer-manager-ptu_t3B3.d.ts} +0 -0
- /package/dist/{failure-tracker-DnHXOIRa.d.ts → failure-tracker-Cn8Fo9D4.d.ts} +0 -0
- /package/dist/{file-system-utils-CtKiiw27.d.ts → file-system-utils-DyAmcuvX.d.ts} +0 -0
- /package/dist/{format-file-size-BTS5H62-.d.ts → format-file-size-CLCZz3lC.d.ts} +0 -0
- /package/dist/{frustum-visibility-BHnFrSKQ.d.ts → frustum-visibility-CmI96ESS.d.ts} +0 -0
- /package/dist/{geo-types-CTuF23gG.d.ts → geo-types-SaPnIEUM.d.ts} +0 -0
- /package/dist/{gps-DXoQb9Kf.d.ts → gps-VuezJWK3.d.ts} +0 -0
- /package/dist/{gps-compass-cubes-CsLtFv4B.d.ts → gps-compass-cubes-BM1uGiYV.d.ts} +0 -0
- /package/dist/{gps-error-handler-Dg3ziRVY.d.ts → gps-error-handler-CJl_2MVm.d.ts} +0 -0
- /package/dist/{gps-event-markers-BGr-iLvi.d.ts → gps-event-markers-Dc9FT-q1.d.ts} +0 -0
- /package/dist/{h3-proximity-BhfgNbdW.d.ts → h3-proximity-I1msGPgE.d.ts} +0 -0
- /package/dist/{index-gzWJMVpo.d.ts → index-CF05QV2m.d.ts} +0 -0
- /package/dist/{lerp-utils-B8MM8zCR.d.ts → lerp-utils-BpV-0Dtk.d.ts} +0 -0
- /package/dist/{list-formatter-CNqi-E2j.d.ts → list-formatter-RRcBe8Vg.d.ts} +0 -0
- /package/dist/{logger-C9vugiQb.d.ts → logger-BEHXsnnq.d.ts} +0 -0
- /package/dist/{map-overlay-DAmreyA3.d.ts → map-overlay-bcogY5fK.d.ts} +0 -0
- /package/dist/{opfs-storage-DOPkzgeT.d.ts → opfs-storage-DYm8WHq7.d.ts} +0 -0
- /package/dist/{permission-checker-DPJl_RU6.d.ts → permission-checker-GpAiSCwd.d.ts} +0 -0
- /package/dist/{scene-node-names-6LBjPmwz.d.ts → scene-node-names-Bu0S66H1.d.ts} +0 -0
- /package/dist/{three-dispose-C2drkp6f.d.ts → three-dispose-D950t71B.d.ts} +0 -0
- /package/dist/{vis-colors-CHQhjal3.d.ts → vis-colors-D6omC64K.d.ts} +0 -0
- /package/dist/{xr-camera-texture-BU5YvKAM.d.ts → xr-camera-texture-DBwCaKTd.d.ts} +0 -0
- /package/dist/{xr-error-handler-CDY5QxGb.d.ts → xr-error-handler-C0AQRmxs.d.ts} +0 -0
- /package/dist/{zip-export-QO4iLIi7.d.ts → zip-export-D_5HAvFz.d.ts} +0 -0
- /package/dist/{zip-reader-D1105idz.d.ts → zip-reader-DSEXt7K6.d.ts} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { L as CombinedRootState } from "../create-slam-app-store-
|
|
2
|
-
import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-
|
|
1
|
+
import { L as CombinedRootState } from "../create-slam-app-store-qNXQ-tq5.js";
|
|
2
|
+
import { n as replayRecording, t as ReplayRecordingOptions } from "../recording-replayer-BL-x-7k0.js";
|
|
3
3
|
export { CombinedRootState, ReplayRecordingOptions, replayRecording };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-
|
|
1
|
+
import { a as recordWriteFailure, i as recordDepthSample, n as SessionMetadata, o as recordingReducer, r as endSession, s as startSession, t as RecordingState } from "../recording-slice-89O07ebs.js";
|
|
2
2
|
export { RecordingState, SessionMetadata, endSession, recordDepthSample, recordWriteFailure, recordingReducer, startSession };
|
|
@@ -6,7 +6,8 @@ const recordingSlice = createSlice({
|
|
|
6
6
|
isRecording: false,
|
|
7
7
|
sessionMetadata: null,
|
|
8
8
|
actionCount: 0,
|
|
9
|
-
failedWriteCount: 0
|
|
9
|
+
failedWriteCount: 0,
|
|
10
|
+
latestDepthSample: null
|
|
10
11
|
},
|
|
11
12
|
reducers: {
|
|
12
13
|
startSession(state, action) {
|
|
@@ -14,6 +15,7 @@ const recordingSlice = createSlice({
|
|
|
14
15
|
state.sessionMetadata = action.payload;
|
|
15
16
|
state.actionCount = 0;
|
|
16
17
|
state.failedWriteCount = 0;
|
|
18
|
+
state.latestDepthSample = null;
|
|
17
19
|
},
|
|
18
20
|
endSession(state) {
|
|
19
21
|
state.isRecording = false;
|
|
@@ -22,8 +24,15 @@ const recordingSlice = createSlice({
|
|
|
22
24
|
* Record a depth sample from WebXR depth sensing.
|
|
23
25
|
* The sample includes camera pose and a grid of depth points.
|
|
24
26
|
* This action is persisted to enable replay with depth data.
|
|
27
|
+
*
|
|
28
|
+
* The reducer stores only the LATEST sample (observation hook for
|
|
29
|
+
* subscribers like the occupancy-grid wiring); it applies no
|
|
30
|
+
* coordinate conversion — the payload stays raw WebXR, exactly as
|
|
31
|
+
* persisted.
|
|
25
32
|
*/
|
|
26
|
-
recordDepthSample(
|
|
33
|
+
recordDepthSample(state, action) {
|
|
34
|
+
state.latestDepthSample = action.payload;
|
|
35
|
+
},
|
|
27
36
|
/**
|
|
28
37
|
* Record a write failure during persistence.
|
|
29
38
|
* User Feedback Issue #1 Part B: Track write failures for session summary.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
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-
|
|
1
|
+
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";
|
|
2
2
|
export { CompleteCallback, DEFAULT_MAX_DELAY_MS, ErrorCallback, ProgressCallback, ReplayAction, ReplayEngine, ReplayState, computeInterActionDelay, extractActionTimestamp };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as SubscribableStore } from "../subscribe-to-selector-
|
|
2
|
-
import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-
|
|
1
|
+
import { t as SubscribableStore } from "../subscribe-to-selector-CP3BKSbF.js";
|
|
2
|
+
import { n as wireStoreSubscribers, t as StoreSubscriberDeps } from "../store-subscribers-rrkLkFTt.js";
|
|
3
3
|
export { StoreSubscriberDeps, SubscribableStore, wireStoreSubscribers };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-
|
|
1
|
+
import { n as subscribeToSelector, t as SubscribableStore } from "../subscribe-to-selector-CP3BKSbF.js";
|
|
2
2
|
export { SubscribableStore, subscribeToSelector };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
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, b as computeCoverage, c as CompassAgreementResult, d as DEFAULT_TRACKING_QUALITY_OPTIONS, f as GpsAccuracyResult, g as TrackingQualitySliceState, h as TrackingQualityReport, j as selectFirstAgreementObservationIndex, k as reportUpdated, l as ConvergenceResult, m as TrackingQualityOptions, p as ResidualConsensusResult, s as AlignmentSnapshot, u as CoverageResult, v as computeCompassAgreement, w as computeTrackingQualityReport, x as computeGpsAccuracy, y as computeConvergence } from "../create-slam-app-store-
|
|
1
|
+
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, b as computeCoverage, c as CompassAgreementResult, d as DEFAULT_TRACKING_QUALITY_OPTIONS, f as GpsAccuracyResult, g as TrackingQualitySliceState, h as TrackingQualityReport, j as selectFirstAgreementObservationIndex, k as reportUpdated, l as ConvergenceResult, m as TrackingQualityOptions, p as ResidualConsensusResult, s as AlignmentSnapshot, u as CoverageResult, v as computeCompassAgreement, w as computeTrackingQualityReport, x as computeGpsAccuracy, y as computeConvergence } from "../create-slam-app-store-qNXQ-tq5.js";
|
|
2
2
|
export { AlignmentSnapshot, CompassAgreementResult, ConvergenceResult, CoverageResult, DEFAULT_TRACKING_QUALITY_OPTIONS, GpsAccuracyResult, ResidualConsensusResult, TrackingQualityOptions, TrackingQualityReport, TrackingQualitySliceState, TrackingQualityState, computeCompassAgreement, computeConvergence, computeCoverage, computeGpsAccuracy, computeGpsVsFusedDivergence, computeResidualConsensus, computeTrackingQualityReport, createTrackingQualityListenerMiddleware, degradedCountUpdated, firstAgreementReached, matrixDelta, reportUpdated, resetTrackingQuality, selectFirstAgreementObservationIndex, selectRecentAlignments, selectTrackingQuality, snapshotPushed, snapshotsTrimmed, trackingQualityReducer };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { selectLastSensorOrientation, selectLastValidPose, selectTrackingPhase } from "./tracking-slice.js";
|
|
2
2
|
import { selectAlignmentMatrix, selectGpsPositions, selectOdometryPositions, selectZeroReference } from "./app-selectors.js";
|
|
3
3
|
import { calcGpsCoords, distanceInMeters } from "gps-plus-slam-js";
|
|
4
|
-
import { createListenerMiddleware, createSlice } from "@reduxjs/toolkit";
|
|
5
4
|
import { mat4, quat, vec3 } from "gl-matrix";
|
|
5
|
+
import { createListenerMiddleware, createSlice } from "@reduxjs/toolkit";
|
|
6
6
|
//#region ../src/state/tracking-quality.ts
|
|
7
7
|
const DEFAULT_TRACKING_QUALITY_OPTIONS = {
|
|
8
8
|
matrixHistorySize: 5,
|
|
@@ -1,2 +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-
|
|
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-CdK8c-8P.js";
|
|
2
2
|
export { DeviceOrientation, PoseReceivedPayload, ResetTransformData, TrackingPhase, TrackingSliceState, clearLastRestartedPayload, originReset, poseLost, poseReceived, resetTracking, selectLastRestartedPayload, selectLastSensorOrientation, selectLastValidPose, selectLostFrameCount, selectTrackingPhase, trackingReducer };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import "./state/gps-event-coordinator.js";
|
|
2
|
+
import "./state/tracking-slice.js";
|
|
3
|
+
import "./state/recording-options.js";
|
|
4
|
+
import "./state/recording-slice.js";
|
|
5
|
+
import "./state/gps-ar-pose-sampler.js";
|
|
6
|
+
import "./state/app-selectors.js";
|
|
7
|
+
import { selectTrackingQuality } from "./state/tracking-quality.js";
|
|
8
|
+
import "./state/persistence-middleware.js";
|
|
9
|
+
import "./state/create-slam-app-store.js";
|
|
10
|
+
import "./state/recording-replayer.js";
|
|
11
|
+
import "./state/store-subscribers.js";
|
|
12
|
+
import { add2dImage, calcRelativeCoordsInMeters, recordGpsEvent as recordGpsEvent$1, setZeroPos as setZeroPos$1 } from "gps-plus-slam-js";
|
|
13
|
+
//#region ../src/state/onboarding-guidance.ts
|
|
14
|
+
/**
|
|
15
|
+
* Per-phase `percentReady` bands. Chosen so the value is strictly ordered
|
|
16
|
+
* across phases while still tracking the relevant sub-signal *within* a
|
|
17
|
+
* phase (coverage during warm-up, confidence while degraded). `ready` is
|
|
18
|
+
* the only phase that reaches 1.0; warm-up never crosses into the degraded
|
|
19
|
+
* band, so the meter visibly communicates "not placeable yet".
|
|
20
|
+
*/
|
|
21
|
+
const WARMING_BAND_TOP = .6;
|
|
22
|
+
const DEGRADED_BAND_BOTTOM = .6;
|
|
23
|
+
const DEGRADED_BAND_SPAN = .3;
|
|
24
|
+
const HINTS = {
|
|
25
|
+
initializing: "Starting up — point your device at the ground and hold steady.",
|
|
26
|
+
"ar-lost": "Tracking lost — slowly look around to let it recover.",
|
|
27
|
+
"move-around": "Walk around a few steps so tracking can warm up.",
|
|
28
|
+
"almost-ready": "Almost there — keep moving to sharpen the alignment.",
|
|
29
|
+
ready: "Tracking is ready — you can place your anchor now."
|
|
30
|
+
};
|
|
31
|
+
function clamp01(value) {
|
|
32
|
+
if (Number.isNaN(value)) return 0;
|
|
33
|
+
if (value < 0) return 0;
|
|
34
|
+
if (value > 1) return 1;
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Map a tracking-quality report (or `null` when none has been produced yet)
|
|
39
|
+
* to a single onboarding instruction. Never throws; a `null` or malformed
|
|
40
|
+
* report degrades to the `initializing` phase.
|
|
41
|
+
*/
|
|
42
|
+
function computeOnboardingGuidance(report) {
|
|
43
|
+
if (report === null) return {
|
|
44
|
+
phase: "initializing",
|
|
45
|
+
percentReady: 0,
|
|
46
|
+
hint: HINTS.initializing
|
|
47
|
+
};
|
|
48
|
+
switch (report.state) {
|
|
49
|
+
case "ar-lost": return {
|
|
50
|
+
phase: "ar-lost",
|
|
51
|
+
percentReady: 0,
|
|
52
|
+
hint: HINTS["ar-lost"]
|
|
53
|
+
};
|
|
54
|
+
case "warming-up": return {
|
|
55
|
+
phase: "move-around",
|
|
56
|
+
percentReady: clamp01(report.subScores.coverage) * WARMING_BAND_TOP,
|
|
57
|
+
hint: HINTS["move-around"]
|
|
58
|
+
};
|
|
59
|
+
case "degraded": return {
|
|
60
|
+
phase: "almost-ready",
|
|
61
|
+
percentReady: DEGRADED_BAND_BOTTOM + clamp01(report.confidence) * DEGRADED_BAND_SPAN,
|
|
62
|
+
hint: HINTS["almost-ready"]
|
|
63
|
+
};
|
|
64
|
+
case "ok": return {
|
|
65
|
+
phase: "ready",
|
|
66
|
+
percentReady: 1,
|
|
67
|
+
hint: HINTS.ready
|
|
68
|
+
};
|
|
69
|
+
default:
|
|
70
|
+
report.state;
|
|
71
|
+
return {
|
|
72
|
+
phase: "initializing",
|
|
73
|
+
percentReady: 0,
|
|
74
|
+
hint: HINTS.initializing
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Store-bound convenience wrapper: read the current tracking-quality report
|
|
80
|
+
* and map it to onboarding guidance. Returns the `initializing` guidance
|
|
81
|
+
* when no report exists yet.
|
|
82
|
+
*/
|
|
83
|
+
function selectOnboardingGuidance(state) {
|
|
84
|
+
return computeOnboardingGuidance(selectTrackingQuality(state));
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { computeOnboardingGuidance as a, setZeroPos$1 as i, calcRelativeCoordsInMeters as n, selectOnboardingGuidance as o, recordGpsEvent$1 as r, add2dImage as t };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-
|
|
1
|
+
import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-DyAmcuvX.js";
|
|
2
2
|
export { formatActionFilename, formatFrameFilename, formatTimestamp };
|
|
@@ -1,2 +1,2 @@
|
|
|
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-
|
|
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-C_eqiEA8.js";
|
|
2
2
|
export { ClearRefPointsCacheResult, WriteAccessResult, clearRefPointsCacheForAllScenarios, ensureScenarioDirectory, getCurrentScenarioHandle, initStorage, listSessions, resetForNewSession, resetStorageState, setCurrentScenario, startSession, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata };
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -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-
|
|
2
|
-
import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-
|
|
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-
|
|
4
|
-
import { t as NullStorageBackend } from "../null-storage-backend-
|
|
5
|
-
import { t as OpfsStorageBackend } from "../opfs-storage-backend-
|
|
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-
|
|
7
|
-
import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-
|
|
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-
|
|
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-DYm8WHq7.js";
|
|
2
|
+
import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-C9HLFtgz.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-DSEXt7K6.js";
|
|
4
|
+
import { t as NullStorageBackend } from "../null-storage-backend-CxEjZHRW.js";
|
|
5
|
+
import { t as OpfsStorageBackend } from "../opfs-storage-backend-CjSAuqg_.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-C_eqiEA8.js";
|
|
7
|
+
import { n as formatFrameFilename, r as formatTimestamp, t as formatActionFilename } from "../file-system-utils-DyAmcuvX.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-D_5HAvFz.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-
|
|
1
|
+
import { t as NullStorageBackend } from "../null-storage-backend-CxEjZHRW.js";
|
|
2
2
|
export { NullStorageBackend };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as OpfsStorageBackend } from "../opfs-storage-backend-
|
|
1
|
+
import { t as OpfsStorageBackend } from "../opfs-storage-backend-CjSAuqg_.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-
|
|
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-DYm8WHq7.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-
|
|
1
|
+
import { n as StorageBackend, t as CreateSessionResult } from "../storage-backend-C9HLFtgz.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-
|
|
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-D_5HAvFz.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-
|
|
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-DSEXt7K6.js";
|
|
2
2
|
export { Entry, GpsPathCoord, MAX_ACTION_FILE_SIZE, RecordedAction, ZipActionEntry, ZipSubdirEntry, loadActionsFromZip, loadEntriesFromSubdir, loadGpsPathFromBlob, loadSessionMetadata, loadSessionMetadataFromBlob, readZipEntries };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as MapData } from "./map-data-
|
|
2
|
-
import { t as SubscribableStore } from "./subscribe-to-selector-
|
|
1
|
+
import { t as MapData } from "./map-data-CkloBxIl.js";
|
|
2
|
+
import { t as SubscribableStore } from "./subscribe-to-selector-CP3BKSbF.js";
|
|
3
3
|
import { LatLong, Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
|
|
4
4
|
|
|
5
5
|
//#region ../src/state/store-subscribers.d.ts
|
package/dist/types/ar-types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export { ARPose, ArPoseTuples, DepthPoint, DepthSample, WebXRQuaternion, WebXRVec3 };
|
|
1
|
+
import { a as RgbTuple, i as DepthSample, n as ArPoseTuples, o as WebXRQuaternion, r as DepthPoint, s as WebXRVec3, t as ARPose } from "../ar-types-Dan1MVTi.js";
|
|
2
|
+
export { ARPose, ArPoseTuples, DepthPoint, DepthSample, RgbTuple, WebXRQuaternion, WebXRVec3 };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as RawGpsSample, r as RefPointMarker, t as GpsCoord } from "../geo-types-
|
|
1
|
+
import { n as RawGpsSample, r as RefPointMarker, t as GpsCoord } from "../geo-types-SaPnIEUM.js";
|
|
2
2
|
export { GpsCoord, RawGpsSample, RefPointMarker };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { n as RawGpsSample, r as RefPointMarker, t as GpsCoord } from "../geo-types-
|
|
3
|
-
export { ARPose, ArPoseTuples, DepthPoint, DepthSample, GpsCoord, RawGpsSample, RefPointMarker, WebXRQuaternion, WebXRVec3 };
|
|
1
|
+
import { a as RgbTuple, i as DepthSample, n as ArPoseTuples, o as WebXRQuaternion, r as DepthPoint, s as WebXRVec3, t as ARPose } from "../ar-types-Dan1MVTi.js";
|
|
2
|
+
import { n as RawGpsSample, r as RefPointMarker, t as GpsCoord } from "../geo-types-SaPnIEUM.js";
|
|
3
|
+
export { ARPose, ArPoseTuples, DepthPoint, DepthSample, GpsCoord, RawGpsSample, RefPointMarker, RgbTuple, WebXRQuaternion, WebXRVec3 };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as mapWithConcurrencyLimit } from "../concurrency-
|
|
1
|
+
import { t as mapWithConcurrencyLimit } from "../concurrency-CO1FQvs3.js";
|
|
2
2
|
export { mapWithConcurrencyLimit };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-
|
|
1
|
+
import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-Cn8Fo9D4.js";
|
|
2
2
|
export { FailureTracker, FailureTrackerConfig, createFailureTracker };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as formatFileSize } from "../format-file-size-
|
|
1
|
+
import { t as formatFileSize } from "../format-file-size-CLCZz3lC.js";
|
|
2
2
|
export { formatFileSize };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-
|
|
1
|
+
import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-DJoVu98b.js";
|
|
2
2
|
export { FusedPathInput, computeFusedPath, fusedGpsFromOdom };
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -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-
|
|
2
|
-
import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-
|
|
3
|
-
import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-
|
|
4
|
-
import { t as mapWithConcurrencyLimit } from "../concurrency-
|
|
5
|
-
import { t as formatFileSize } from "../format-file-size-
|
|
6
|
-
import { t as listFormatter } from "../list-formatter-
|
|
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-BEHXsnnq.js";
|
|
2
|
+
import { n as computeFusedPath, r as fusedGpsFromOdom, t as FusedPathInput } from "../fused-path-DJoVu98b.js";
|
|
3
|
+
import { n as FailureTrackerConfig, r as createFailureTracker, t as FailureTracker } from "../failure-tracker-Cn8Fo9D4.js";
|
|
4
|
+
import { t as mapWithConcurrencyLimit } from "../concurrency-CO1FQvs3.js";
|
|
5
|
+
import { t as formatFileSize } from "../format-file-size-CLCZz3lC.js";
|
|
6
|
+
import { t as listFormatter } from "../list-formatter-RRcBe8Vg.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-
|
|
1
|
+
import { t as listFormatter } from "../list-formatter-RRcBe8Vg.js";
|
|
2
2
|
export { listFormatter };
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -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-
|
|
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-BEHXsnnq.js";
|
|
2
2
|
export { LogEntry, LogLevel, Logger, clearLogBuffer, createLogger, getGlobalLogLevel, getLogBuffer, setGlobalLogLevel, subscribeToLogs };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as addAccuracyCircles, i as AccuracyCircleSample, n as ACCURACY_CIRCLE_STROKE_OPACITY, r as ACCURACY_CIRCLE_WEIGHT, t as ACCURACY_CIRCLE_FILL_OPACITY } from "../accuracy-circles-
|
|
1
|
+
import { a as addAccuracyCircles, i as AccuracyCircleSample, n as ACCURACY_CIRCLE_STROKE_OPACITY, r as ACCURACY_CIRCLE_WEIGHT, t as ACCURACY_CIRCLE_FILL_OPACITY } from "../accuracy-circles-BpwWAs8G.js";
|
|
2
2
|
export { ACCURACY_CIRCLE_FILL_OPACITY, ACCURACY_CIRCLE_STROKE_OPACITY, ACCURACY_CIRCLE_WEIGHT, AccuracyCircleSample, addAccuracyCircles };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as createAlignmentLerper, t as AlignmentLerper } from "../alignment-lerper-
|
|
1
|
+
import { n as createAlignmentLerper, t as AlignmentLerper } from "../alignment-lerper-Dm9G7JJO.js";
|
|
2
2
|
export { AlignmentLerper, createAlignmentLerper };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { registerFrameUpdate } from "../ar/frame-loop.js";
|
|
2
|
+
import { t as registerSessionDisposer } from "../session-disposers-M-oashRH.js";
|
|
3
|
+
import { createAlignmentLerper } from "./alignment-lerper.js";
|
|
4
|
+
import { selectAlignmentMatrix } from "../state/app-selectors.js";
|
|
5
|
+
import { subscribeToSelector } from "../state/subscribe-to-selector.js";
|
|
6
|
+
//#region ../src/visualization/ar-world-group-alignment.ts
|
|
7
|
+
/**
|
|
8
|
+
* Begin applying the store's (lerped) alignment to `arWorldGroup`. Returns a
|
|
9
|
+
* handle whose `dispose()` removes both the store subscription and the
|
|
10
|
+
* per-frame update.
|
|
11
|
+
*
|
|
12
|
+
* Disposal is tied to the AR session lifecycle: the binding registers itself
|
|
13
|
+
* with the session-disposer registry that `resetWebXRState()` flushes on
|
|
14
|
+
* teardown, so a caller can `enableArWorldGroupAlignment(...)` once and never
|
|
15
|
+
* hold the handle — the binding cannot outlive the session (which is what two
|
|
16
|
+
* apps independently leaked: the store subscription survives a teardown because
|
|
17
|
+
* `clearFrameUpdates` only drops the per-frame tick). Because `initAR()` throws
|
|
18
|
+
* while a prior session is live, every restart passes through that flush. The
|
|
19
|
+
* handle is still returned for callers that want to stop alignment mid-session,
|
|
20
|
+
* and is idempotent + self-deregistering so a manual `dispose()` and the
|
|
21
|
+
* teardown flush never double-run. See
|
|
22
|
+
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-08-arworldgroup-alignment-session-scoped-disposal.md.
|
|
23
|
+
*
|
|
24
|
+
* Double-drive is still the caller's concern: the recorder owns its own lerper
|
|
25
|
+
* and must NOT also call this (it would double-lerp the same group). It does not
|
|
26
|
+
* call this helper, so flushing the registry on teardown never affects it.
|
|
27
|
+
*/
|
|
28
|
+
function enableArWorldGroupAlignment(options) {
|
|
29
|
+
const lerper = createAlignmentLerper(options.arWorldGroup, options.lerpRate);
|
|
30
|
+
const current = selectAlignmentMatrix(options.store.getState());
|
|
31
|
+
if (current !== null && current !== void 0) lerper.setTarget(current);
|
|
32
|
+
const unsubscribe = subscribeToSelector(options.store, selectAlignmentMatrix, (matrix) => {
|
|
33
|
+
if (matrix !== null && matrix !== void 0) lerper.setTarget(matrix);
|
|
34
|
+
});
|
|
35
|
+
const unregister = registerFrameUpdate((dt) => {
|
|
36
|
+
lerper.update(dt);
|
|
37
|
+
});
|
|
38
|
+
let disposed = false;
|
|
39
|
+
const handle = { dispose() {
|
|
40
|
+
if (disposed) return;
|
|
41
|
+
disposed = true;
|
|
42
|
+
unsubscribe();
|
|
43
|
+
unregister();
|
|
44
|
+
lerper.dispose();
|
|
45
|
+
deregisterSessionDisposer();
|
|
46
|
+
} };
|
|
47
|
+
const deregisterSessionDisposer = registerSessionDisposer(() => handle.dispose());
|
|
48
|
+
return handle;
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { enableArWorldGroupAlignment };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as createCameraFollower, t as CameraFollower } from "../camera-follower-
|
|
1
|
+
import { n as createCameraFollower, t as CameraFollower } from "../camera-follower-C2mwEn7c.js";
|
|
2
2
|
export { CameraFollower, createCameraFollower };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as createCss3dRendererManager, t as Css3dRendererManager } from "../css3d-renderer-manager-
|
|
1
|
+
import { n as createCss3dRendererManager, t as Css3dRendererManager } from "../css3d-renderer-manager-ptu_t3B3.js";
|
|
2
2
|
export { Css3dRendererManager, createCss3dRendererManager };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { calcGpsCoords } from "../core/index.js";
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
//#region ../src/visualization/frame-conversions.ts
|
|
4
|
+
/**
|
|
5
|
+
* `frame-conversions` — small, pure coordinate-frame helpers for the AR scene
|
|
6
|
+
* graph. Currently a single function, `nueToArLocal`, that converts a
|
|
7
|
+
* GPS-world NUE point into the AR-odometry local frame of `arWorldGroup`.
|
|
8
|
+
*
|
|
9
|
+
* Background: the scene root is GPS-world NUE; `arWorldGroup.matrix` IS the
|
|
10
|
+
* alignment matrix, which maps **AR-odometry NUE → GPS-world NUE**. So a
|
|
11
|
+
* direct child of `arWorldGroup` whose WORLD position must equal a GPS-world
|
|
12
|
+
* point `nue` has to store `alignment⁻¹ · nue` as its LOCAL position —
|
|
13
|
+
* writing raw `nue` double-applies the alignment. Getting this wrong was the
|
|
14
|
+
* alignment-frame bug
|
|
15
|
+
* (gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-05-31-gps-anchor-alignment-frame-bug.md);
|
|
16
|
+
* this helper centralises the conversion behind one tested, well-named seam.
|
|
17
|
+
*
|
|
18
|
+
* Design (see the plan
|
|
19
|
+
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-05-31-nue-to-ar-local-helper-plan.md):
|
|
20
|
+
* - **Takes the explicit alignment matrix array**, NOT `Object3D.worldToLocal`.
|
|
21
|
+
* `worldToLocal` would read the live, mid-lerp `matrixWorld` and break
|
|
22
|
+
* replay determinism; the explicit target matrix keeps the result a pure
|
|
23
|
+
* function of its inputs. Full rationale in the review doc
|
|
24
|
+
* (gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-05-31-worldtolocal-frame-helper-review.md).
|
|
25
|
+
* - **Positions only.** No pose/quaternion variant exists until a caller
|
|
26
|
+
* needs one (YAGNI). No caller currently sets a GPS-world rotation.
|
|
27
|
+
*/
|
|
28
|
+
const scratchMatrix = new THREE.Matrix4();
|
|
29
|
+
/**
|
|
30
|
+
* Convert a GPS-world NUE point into the AR-local position to write into a
|
|
31
|
+
* direct child of `arWorldGroup`, given the current alignment matrix.
|
|
32
|
+
*
|
|
33
|
+
* Computes `alignment⁻¹ · nue`. When the result is later composed back by the
|
|
34
|
+
* group's matrix (the same `alignment`), the child's WORLD position equals
|
|
35
|
+
* `nue` exactly.
|
|
36
|
+
*
|
|
37
|
+
* @param alignment - The alignment matrix as a 16-element **column-major**
|
|
38
|
+
* array (AR-odometry NUE → GPS-world NUE), e.g. from `getAlignmentMatrix()`
|
|
39
|
+
* or `THREE.Matrix4.toArray()`. Not mutated.
|
|
40
|
+
* @param nue - The GPS-world NUE point `[north, up, east]` in metres. Not
|
|
41
|
+
* mutated.
|
|
42
|
+
* @param out - Optional target vector to write into and return (pass a reused
|
|
43
|
+
* scratch to avoid allocation on hot paths). Defaults to a fresh
|
|
44
|
+
* `THREE.Vector3`.
|
|
45
|
+
* @returns `out`, set to the AR-local position.
|
|
46
|
+
*/
|
|
47
|
+
function nueToArLocal(alignment, nue, out = new THREE.Vector3()) {
|
|
48
|
+
scratchMatrix.fromArray(alignment).invert();
|
|
49
|
+
return out.set(nue[0], nue[1], nue[2]).applyMatrix4(scratchMatrix);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert an object's **GPS-world NUE world position** back into a GPS
|
|
53
|
+
* coordinate, for the GPS-anchor bootstrap that medians where an object was
|
|
54
|
+
* actually placed (mirrors the C# `DetermineAndStoreGpsWorldPose`, which
|
|
55
|
+
* medians the object's world pose and converts via `zero.CalcGpsCoordsOf`).
|
|
56
|
+
*
|
|
57
|
+
* Precondition: `worldNue` must already be in GPS-world NUE — i.e. the object
|
|
58
|
+
* lives under an `arWorldGroup` whose `.matrix` carries the alignment (see
|
|
59
|
+
* `enableArWorldGroupAlignment`), so `object3D.getWorldPosition()` is the
|
|
60
|
+
* GPS-world position. Sampling a pure-VIO (identity-`arWorldGroup`) world
|
|
61
|
+
* position would yield a wrong GPS coordinate.
|
|
62
|
+
*
|
|
63
|
+
* Altitude round-trip: `calcGpsCoords` returns only `lat`/`lon` (it derives
|
|
64
|
+
* them from the North/East axes and ignores Up). The Up axis (`worldNue.y`,
|
|
65
|
+
* NUE index 1) is carried through verbatim as `altitude`, so a later
|
|
66
|
+
* `calcRelativeCoordsInMeters(zero, result, result.altitude, 0)` reproduces the
|
|
67
|
+
* same Up value — keeping the steady-state vertical target consistent with
|
|
68
|
+
* where the object was sampled.
|
|
69
|
+
*
|
|
70
|
+
* @param worldNue - The object's world position in GPS-world NUE metres
|
|
71
|
+
* (`x = North`, `y = Up`, `z = East`). A `THREE.Vector3` satisfies this.
|
|
72
|
+
* @param zero - The GPS zero reference (origin for the conversion).
|
|
73
|
+
* @returns The GPS coordinate of `worldNue`, with `altitude = worldNue.y`.
|
|
74
|
+
*/
|
|
75
|
+
function worldNueToGps(worldNue, zero) {
|
|
76
|
+
const gps = calcGpsCoords(zero, [
|
|
77
|
+
worldNue.x,
|
|
78
|
+
worldNue.y,
|
|
79
|
+
worldNue.z
|
|
80
|
+
]);
|
|
81
|
+
return {
|
|
82
|
+
lat: gps.lat,
|
|
83
|
+
lon: gps.lon,
|
|
84
|
+
altitude: worldNue.y
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//#endregion
|
|
88
|
+
export { nueToArLocal, worldNueToGps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as isSphereInCameraFrustum, n as isObjectInCameraFrustum, r as isPointInCameraFrustum, t as buildCameraFrustum } from "../frustum-visibility-
|
|
1
|
+
import { i as isSphereInCameraFrustum, n as isObjectInCameraFrustum, r as isPointInCameraFrustum, t as buildCameraFrustum } from "../frustum-visibility-CmI96ESS.js";
|
|
2
2
|
export { buildCameraFrustum, isObjectInCameraFrustum, isPointInCameraFrustum, isSphereInCameraFrustum };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as GpsAnchorSamplePoint, i as GpsAnchorPhase, n as GpsAnchorMode, o as createGpsAnchor, r as GpsAnchorOptions, t as GpsAnchor } from "../gps-anchor-
|
|
1
|
+
import { a as GpsAnchorSamplePoint, i as GpsAnchorPhase, n as GpsAnchorMode, o as createGpsAnchor, r as GpsAnchorOptions, t as GpsAnchor } from "../gps-anchor-dYeCvvp5.js";
|
|
2
2
|
export { GpsAnchor, GpsAnchorMode, GpsAnchorOptions, GpsAnchorPhase, GpsAnchorSamplePoint, createGpsAnchor };
|