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