gps-plus-slam-app-framework 1.3.0 → 1.4.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/dist/{app-selectors-B8VQoMDY.d.ts → app-selectors-CrOucL00.d.ts} +1 -1
- package/dist/ar/bresenham3d.d.ts +1 -1
- package/dist/ar/camera-blit-capture.d.ts +2 -2
- package/dist/ar/camera-blit-capture.js +74 -9
- package/dist/ar/capability-checker.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-grid-lookup.d.ts +2 -0
- package/dist/ar/depth-grid-lookup.js +43 -0
- package/dist/ar/depth-sampler.d.ts +2 -2
- package/dist/ar/depth-sampler.js +2 -4
- package/dist/ar/depth-unprojection.d.ts +1 -1
- package/dist/ar/enable-gps-ar.d.ts +1 -1
- package/dist/ar/enable-gps-ar.js +26 -1
- package/dist/ar/frame-loop.d.ts +1 -1
- package/dist/ar/image-capture.d.ts +1 -1
- package/dist/ar/index.d.ts +30 -19
- package/dist/ar/index.js +15 -4
- package/dist/ar/occupancy-grid.d.ts +1 -1
- package/dist/ar/occupancy-grid.js +29 -2
- package/dist/ar/planar-pnp.d.ts +2 -0
- package/dist/ar/planar-pnp.js +425 -0
- package/dist/ar/qr-debug-view.d.ts +2 -0
- package/dist/ar/qr-debug-view.js +89 -0
- package/dist/ar/qr-derived-pose.d.ts +2 -0
- package/dist/ar/qr-derived-pose.js +114 -0
- package/dist/ar/qr-detection-controller.d.ts +2 -0
- package/dist/ar/qr-detection-controller.js +2 -0
- package/dist/ar/qr-frontend.d.ts +2 -0
- package/dist/ar/qr-frontend.js +60 -0
- package/dist/ar/qr-pose.d.ts +2 -0
- package/dist/ar/qr-pose.js +267 -0
- package/dist/ar/qr-size-depth-context.d.ts +3 -0
- package/dist/ar/qr-size-depth-context.js +42 -0
- package/dist/ar/qr-size-measurer.d.ts +2 -0
- package/dist/ar/qr-size-measurer.js +2 -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 +1 -1
- package/dist/ar/webxr-session.d.ts +4 -4
- package/dist/ar/webxr-session.js +2 -2
- 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 +1 -1
- package/dist/ar-Dc72Ksiu.js +382 -0
- package/dist/{ar-world-group-alignment-C9lwwIyI.d.ts → ar-world-group-alignment-DDLkgNf_.d.ts} +1 -1
- package/dist/{camera-blit-capture-CnxUDbKx.d.ts → camera-blit-capture-CqWe1G7s.d.ts} +57 -4
- package/dist/concurrency-DqAlKX4j.d.ts +50 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/{create-slam-app-store-BljusOua.d.ts → create-slam-app-store-Ce2FMKCp.d.ts} +5 -5
- package/dist/depth-grid-lookup-vMDrGTk_.d.ts +21 -0
- package/dist/{depth-sampler-Bhanfwla.d.ts → depth-sampler-DwfPYzS7.d.ts} +1 -1
- package/dist/{depth-unprojection-Y6i_mJuT.d.ts → depth-unprojection-CK3b9htH.d.ts} +1 -1
- package/dist/{enable-gps-ar-BfUJOgpW.d.ts → enable-gps-ar-CjZ1nEdu.d.ts} +4 -4
- package/dist/{frame-conversions-BfsafGWR.d.ts → frame-conversions-D_Af8Dt3.d.ts} +1 -1
- package/dist/{fused-path-DJoVu98b.d.ts → fused-path-C0FHe67t.d.ts} +1 -1
- package/dist/geo/h3-proximity.d.ts +2 -2
- package/dist/geo/h3-proximity.js +61 -2
- package/dist/geo/index.d.ts +2 -2
- package/dist/geo/index.js +2 -2
- package/dist/{gps-anchor-dYeCvvp5.d.ts → gps-anchor-C6I9NDHA.d.ts} +1 -1
- package/dist/{gps-ar-pose-sampler-DVb96iOy.d.ts → gps-ar-pose-sampler-DaHg2aPZ.d.ts} +1 -1
- package/dist/{gps-event-coordinator-CWIDOk4U.d.ts → gps-event-coordinator-C7hwHyLA.d.ts} +3 -3
- package/dist/{gps-event-markers-Dc9FT-q1.d.ts → gps-event-markers-Dd0G2bD0.d.ts} +18 -0
- package/dist/{h3-proximity-I1msGPgE.d.ts → h3-proximity-B57C6rYL.d.ts} +39 -1
- package/dist/{image-capture-qAZ5Fh5X.d.ts → image-capture-C2Feywet.d.ts} +1 -1
- package/dist/index-BvLo2poy.d.ts +399 -0
- package/dist/{index-BYYUdf9v.d.ts → index-m_LneUSi.d.ts} +1 -1
- package/dist/index.d.ts +77 -67
- package/dist/index.js +18 -9
- package/dist/{leaflet-map-overlay-6CJC-E1l.d.ts → leaflet-map-overlay-bnb2U1NQ.d.ts} +1 -1
- package/dist/{map-data-CkloBxIl.d.ts → map-data-DdjPiSav.d.ts} +1 -1
- package/dist/{map-overlay-draw-krOKwDAq.d.ts → map-overlay-draw-CPVdAsFq.d.ts} +1 -1
- package/dist/{null-storage-backend-uKQE8tl7.d.ts → null-storage-backend-CuSdYFsM.d.ts} +2 -2
- package/dist/{occupancy-grid-BRNRaPyT.d.ts → occupancy-grid-Bvi2Gw1U.d.ts} +12 -2
- package/dist/{opfs-storage-D5zAn_lx.d.ts → opfs-storage-DMtlt57S.d.ts} +23 -4
- package/dist/{opfs-storage-backend-6aYMUZlJ.d.ts → opfs-storage-backend-CeQAb0SD.d.ts} +3 -3
- package/dist/{persistence-middleware-B9ei4Nhx.d.ts → persistence-middleware-5eearhSV.d.ts} +1 -1
- package/dist/planar-pnp-cjthe7Be.d.ts +67 -0
- package/dist/qr-debug-view-B8gTzjMm.d.ts +29 -0
- package/dist/qr-derived-pose-DinKE600.d.ts +122 -0
- package/dist/qr-detected-slice-Cpv-dg82.d.ts +166 -0
- package/dist/qr-detection-controller-B-tLVd-S.js +119 -0
- package/dist/qr-detection-controller-Cd2Ih4cC.d.ts +48 -0
- package/dist/qr-frontend-DufZp2xS.d.ts +58 -0
- package/dist/qr-pose-Bt2reSw7.d.ts +138 -0
- package/dist/qr-pose-aggregation-CFlmLm6w.d.ts +90 -0
- package/dist/qr-pose-aggregation-DXR9STHs.js +200 -0
- package/dist/qr-size-depth-context-onu36E9s.d.ts +13 -0
- package/dist/qr-size-measurer-D7739ZpB.d.ts +165 -0
- package/dist/qr-size-measurer-DLb33geH.js +596 -0
- package/dist/recording-options-D93kksJU.d.ts +369 -0
- package/dist/{recording-replayer-r0DZ9ALp.d.ts → recording-replayer-CUEK82tM.d.ts} +2 -2
- package/dist/recording-slice-B-uCgGoh.d.ts +55 -0
- package/dist/{replay-engine-XpDa0dy1.d.ts → replay-engine-BSVd7Zzb.d.ts} +7 -4
- package/dist/{replay-scene-Bw58VL6p.d.ts → replay-scene-CPt56pps.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/permission-checker.d.ts +1 -1
- package/dist/sensors/permission-checker.js +1 -1
- 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 +20 -17
- package/dist/state/index.js +3 -2
- package/dist/state/persistence-middleware.d.ts +1 -1
- package/dist/state/qr-detected-slice.d.ts +4 -0
- package/dist/state/qr-detected-slice.js +311 -0
- package/dist/state/recording-options.d.ts +2 -2
- package/dist/state/recording-options.js +128 -4
- package/dist/state/recording-replayer.d.ts +2 -2
- package/dist/state/recording-slice.d.ts +1 -1
- package/dist/state/recording-slice.js +5 -1
- package/dist/state/replay-engine.d.ts +1 -1
- package/dist/state/replay-engine.js +7 -3
- 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-slice.d.ts +1 -1
- package/dist/{state-BkIfpiyA.js → state-IEw0ZsBu.js} +1 -0
- package/dist/storage/file-system-utils.d.ts +1 -1
- package/dist/storage/index.d.ts +9 -9
- package/dist/storage/index.js +4 -4
- 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-backend.js +3 -3
- package/dist/storage/opfs-storage.d.ts +1 -1
- package/dist/storage/opfs-storage.js +5 -4
- package/dist/storage/storage-backend.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.d.ts +2 -0
- package/dist/storage/zip-coverage-embed.js +88 -0
- package/dist/storage/zip-export.d.ts +2 -2
- package/dist/storage/zip-export.js +37 -59
- package/dist/storage/zip-reader.d.ts +1 -1
- package/dist/{storage-backend-Do6YDpNo.d.ts → storage-backend-CTJHNdMp.d.ts} +1 -1
- package/dist/{store-subscribers-0YWyOLvV.d.ts → store-subscribers-BZP81hjh.d.ts} +2 -2
- package/dist/{subscribe-to-selector-CZ6k1NFP.d.ts → subscribe-to-selector-Bp3sLx8L.d.ts} +1 -1
- package/dist/test-utils/browser-mocks.d.ts +7 -1
- package/dist/test-utils/browser-mocks.js +6 -0
- package/dist/test-utils/zip-round-trip-helpers.d.ts +9 -1
- package/dist/test-utils/zip-round-trip-helpers.js +5 -1
- package/dist/{tracking-slice-CdK8c-8P.d.ts → tracking-slice-DJZ9qeGg.d.ts} +1 -1
- package/dist/types/ar-types.d.ts +1 -1
- package/dist/types/geo-types.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/concurrency.d.ts +2 -2
- package/dist/utils/concurrency.js +66 -2
- 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 +1 -1
- package/dist/visualization/ar-world-group-alignment.js +1 -1
- 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 +1 -1
- package/dist/visualization/frustum-visibility.d.ts +1 -1
- package/dist/visualization/gps-anchor.d.ts +1 -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 +40 -5
- package/dist/visualization/hit-test-reticle.d.ts +1 -1
- package/dist/visualization/hit-test-reticle.js +1 -0
- package/dist/visualization/index.d.ts +18 -18
- package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
- package/dist/visualization/leaflet-map-overlay.js +15 -3
- 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-session-TIaD883f.js → webxr-session-CJF9Nijp.js} +221 -9
- package/dist/{webxr-session-GjZ2BIpS.d.ts → webxr-session-COsOjJwn.d.ts} +76 -8
- package/dist/zip-coverage-embed-tFohI2J4.d.ts +41 -0
- package/dist/{zip-export-G14hkSPG.d.ts → zip-export-DDWXInTR.d.ts} +27 -23
- package/package.json +2 -2
- package/dist/concurrency-CO1FQvs3.d.ts +0 -24
- package/dist/file-system-CwXTNHmB.d.ts +0 -114
- package/dist/recording-options-DJBXuMxV.d.ts +0 -182
- package/dist/recording-slice-89O07ebs.d.ts +0 -36
- package/dist/storage/file-system.d.ts +0 -2
- package/dist/storage/file-system.js +0 -289
- /package/dist/{accuracy-circles-BpwWAs8G.d.ts → accuracy-circles-Pi2YeCrM.d.ts} +0 -0
- /package/dist/{alignment-lerper-Dm9G7JJO.d.ts → alignment-lerper-BUTsQ2yu.d.ts} +0 -0
- /package/dist/{ar-types-Dan1MVTi.d.ts → ar-types-BckI1E-O.d.ts} +0 -0
- /package/dist/{bresenham3d-CFfd7n6B.d.ts → bresenham3d-ByjcmEgM.d.ts} +0 -0
- /package/dist/{camera-follower-C2mwEn7c.d.ts → camera-follower-BTb2Yp12.d.ts} +0 -0
- /package/dist/{capability-checker-CQXJHxXg.d.ts → capability-checker-CXqoJYtb.d.ts} +0 -0
- /package/dist/{capture-failure-tracker-CUeU3L_M.d.ts → capture-failure-tracker-BL5SoG2a.d.ts} +0 -0
- /package/dist/{chromium-camera-access-workaround-Jqbn0apH.d.ts → chromium-camera-access-workaround-BNK189P0.d.ts} +0 -0
- /package/dist/{css3d-renderer-manager-ptu_t3B3.d.ts → css3d-renderer-manager-m-ab19vp.d.ts} +0 -0
- /package/dist/{failure-tracker-Cn8Fo9D4.d.ts → failure-tracker-Cnc_xWUw.d.ts} +0 -0
- /package/dist/{file-system-utils-CXIoL-DM.d.ts → file-system-utils-Bs7lpeVP.d.ts} +0 -0
- /package/dist/{format-file-size-CLCZz3lC.d.ts → format-file-size-BFUWvir1.d.ts} +0 -0
- /package/dist/{frame-loop-CMewS8cY.d.ts → frame-loop-BEO9_q3k.d.ts} +0 -0
- /package/dist/{frustum-visibility-CmI96ESS.d.ts → frustum-visibility-D_RGmH98.d.ts} +0 -0
- /package/dist/{geo-types-SaPnIEUM.d.ts → geo-types-DqiBzPO9.d.ts} +0 -0
- /package/dist/{gps-VuezJWK3.d.ts → gps-C5inWeNV.d.ts} +0 -0
- /package/dist/{gps-compass-cubes-BM1uGiYV.d.ts → gps-compass-cubes-BExxrWJ-.d.ts} +0 -0
- /package/dist/{gps-error-handler-CJl_2MVm.d.ts → gps-error-handler-C2bS69oJ.d.ts} +0 -0
- /package/dist/{hit-test-reticle-BEzEybxZ.d.ts → hit-test-reticle-Dqak9hiR.d.ts} +0 -0
- /package/dist/{index-CF05QV2m.d.ts → index-eaI1Z1KR.d.ts} +0 -0
- /package/dist/{lerp-utils-BpV-0Dtk.d.ts → lerp-utils-kLxMJ2Xj.d.ts} +0 -0
- /package/dist/{list-formatter-RRcBe8Vg.d.ts → list-formatter-ct8txwvR.d.ts} +0 -0
- /package/dist/{logger-BEHXsnnq.d.ts → logger-CzQrCe6C.d.ts} +0 -0
- /package/dist/{map-overlay-bcogY5fK.d.ts → map-overlay-Dci4yvm3.d.ts} +0 -0
- /package/dist/{permission-checker-GpAiSCwd.d.ts → permission-checker-CtPtPQRq.d.ts} +0 -0
- /package/dist/{scene-node-names-Bu0S66H1.d.ts → scene-node-names-CdNeQjOE.d.ts} +0 -0
- /package/dist/{session-disposers-M-oashRH.js → session-disposers-D8wnO-uW.js} +0 -0
- /package/dist/{three-dispose-D950t71B.d.ts → three-dispose-BCZkSJp2.d.ts} +0 -0
- /package/dist/{vis-colors-D6omC64K.d.ts → vis-colors-BZsSLI4i.d.ts} +0 -0
- /package/dist/{webxr-nue-basis-CqKQmZzT.d.ts → webxr-nue-basis-CW1wsbm6.d.ts} +0 -0
- /package/dist/{xr-camera-texture-DBwCaKTd.d.ts → xr-camera-texture-BmrP7iNZ.d.ts} +0 -0
- /package/dist/{xr-error-handler-C0AQRmxs.d.ts → xr-error-handler-BEjRgZjt.d.ts} +0 -0
- /package/dist/{xr-frame-loop-BtYytZJg.d.ts → xr-frame-loop-K8ebdjLw.d.ts} +0 -0
- /package/dist/{zip-reader-DSEXt7K6.d.ts → zip-reader-Q2ue6zlC.d.ts} +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { i as DepthSample, t as ARPose } from "./ar-types-
|
|
2
|
-
import { i as DepthSamplerConfig } from "./depth-sampler-
|
|
3
|
-
import { t as ArCrashIsolationOptions } from "./recording-options-
|
|
4
|
-
import { a as ImageCaptureConfig, n as CapturedImage } from "./image-capture-
|
|
5
|
-
import { a as TrackingSliceState, r as ResetTransformData } from "./tracking-slice-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { i as DepthSample, t as ARPose } from "./ar-types-BckI1E-O.js";
|
|
2
|
+
import { i as DepthSamplerConfig } from "./depth-sampler-DwfPYzS7.js";
|
|
3
|
+
import { t as ArCrashIsolationOptions } from "./recording-options-D93kksJU.js";
|
|
4
|
+
import { a as ImageCaptureConfig, n as CapturedImage } from "./image-capture-C2Feywet.js";
|
|
5
|
+
import { a as TrackingSliceState, r as ResetTransformData } from "./tracking-slice-DJZ9qeGg.js";
|
|
6
|
+
import { o as RgbaImage } from "./qr-frontend-DufZp2xS.js";
|
|
7
|
+
import { t as Css3dRendererManager } from "./css3d-renderer-manager-m-ab19vp.js";
|
|
8
|
+
import { r as XRCameraLike } from "./xr-camera-texture-BmrP7iNZ.js";
|
|
8
9
|
import * as THREE from "three";
|
|
9
10
|
import { OdometryTrackingRestartedPayload } from "gps-plus-slam-js";
|
|
10
11
|
|
|
@@ -68,6 +69,18 @@ declare function shouldLogCameraAccessDiagnostic(pose: XRViewerPose | null, alre
|
|
|
68
69
|
* @internal
|
|
69
70
|
*/
|
|
70
71
|
declare function resetWebXRState(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Default longer-edge resolution (px) for the camera-frame blit the QR / CV
|
|
74
|
+
* detector sees. The on-device capture-resolution sweep (2026-06-17, via the
|
|
75
|
+
* `?capture=` override) showed **1024** decodes a small / out-of-focus QR
|
|
76
|
+
* markedly better than the prior 512 with no perceptible cadence cost on the
|
|
77
|
+
* test phone; 2048 helped slightly more but risks low-end devices (4096 lagged),
|
|
78
|
+
* so 1024 is the safe default. Raise per-consumer via
|
|
79
|
+
* `startCameraFrameCapture({ captureSize })`.
|
|
80
|
+
*
|
|
81
|
+
* @see GpsPlusSlamJs_Docs/docs/2026-06-17-qr-size-accuracy-and-thin-demo-plan.md (WS-C)
|
|
82
|
+
*/
|
|
83
|
+
declare const DEFAULT_CAMERA_FRAME_CAPTURE_SIZE = 1024;
|
|
71
84
|
/**
|
|
72
85
|
* Extract the reset transform from an XRReferenceSpaceEvent-like object.
|
|
73
86
|
*
|
|
@@ -371,6 +384,61 @@ declare function stopDepthCapture(): void;
|
|
|
371
384
|
* Get the current depth sample count.
|
|
372
385
|
*/
|
|
373
386
|
declare function getDepthSampleCount(): number;
|
|
387
|
+
/** Optional tuning for {@link startCameraFrameCapture}. */
|
|
388
|
+
interface CameraFrameCaptureConfig {
|
|
389
|
+
/** Detection cadence (ms between captures). Default 125 (~8 Hz). */
|
|
390
|
+
intervalMs?: number;
|
|
391
|
+
/**
|
|
392
|
+
* Longer-edge resolution (px) of the camera-frame blit. Default
|
|
393
|
+
* {@link DEFAULT_CAMERA_FRAME_CAPTURE_SIZE} (1024). The blit preserves the
|
|
394
|
+
* camera ASPECT with its longer edge at this value (e.g. 1024 → 1024×768 for a
|
|
395
|
+
* 4:3 camera), so the target reaches the detector undistorted. A QR needs ~3–5
|
|
396
|
+
* px per module; the on-device sweep settled on 1024 (512 made small QRs decode
|
|
397
|
+
* only at very close range). Applied before the first capture.
|
|
398
|
+
*/
|
|
399
|
+
captureSize?: number;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Set the per-frame camera RGBA callback (B2) — the generic CV frame feed (QR
|
|
403
|
+
* detection today, object detection / OpenCV later). Call this BEFORE initAR to
|
|
404
|
+
* enable in-session camera frame capture; `startCameraFrameCapture` then begins
|
|
405
|
+
* delivering frames.
|
|
406
|
+
*
|
|
407
|
+
* The callback receives a **top-left-origin** RGBA image (no JPEG round-trip),
|
|
408
|
+
* captured at the throttled detection cadence — feed it straight to a
|
|
409
|
+
* `BarcodeDetector` / OpenCV front-end. Mirrors `setDepthCaptureCallback`.
|
|
410
|
+
*
|
|
411
|
+
* @param onFrame - Called with each throttled camera frame, or `null` to clear.
|
|
412
|
+
*/
|
|
413
|
+
declare function setCameraFrameCallback(onFrame: ((image: RgbaImage) => void) | null): void;
|
|
414
|
+
/**
|
|
415
|
+
* Start camera frame capture during an AR session. Must call
|
|
416
|
+
* setCameraFrameCallback before initAR (the source is created there). No-op if
|
|
417
|
+
* the source was not initialized (callback not set before initAR).
|
|
418
|
+
*
|
|
419
|
+
* The source is the single cadence owner: drive your detection scheduler from
|
|
420
|
+
* the delivered frames with its own `minIntervalMs: 0` (Option A).
|
|
421
|
+
*
|
|
422
|
+
* @param config - optional cadence / blit-resolution overrides.
|
|
423
|
+
*/
|
|
424
|
+
declare function startCameraFrameCapture(config?: CameraFrameCaptureConfig): void;
|
|
425
|
+
/**
|
|
426
|
+
* Stop camera frame capture. Safe to call when not running.
|
|
427
|
+
*/
|
|
428
|
+
declare function stopCameraFrameCapture(): void;
|
|
429
|
+
/**
|
|
430
|
+
* Get the number of camera frames captured since the last
|
|
431
|
+
* `startCameraFrameCapture`.
|
|
432
|
+
*/
|
|
433
|
+
declare function getCameraFrameCount(): number;
|
|
434
|
+
/**
|
|
435
|
+
* The current longer-edge resolution (px) of the camera-frame blit — the
|
|
436
|
+
* {@link DEFAULT_CAMERA_FRAME_CAPTURE_SIZE} default unless overridden via
|
|
437
|
+
* `startCameraFrameCapture({ captureSize })`. Exposed for diagnostics and to
|
|
438
|
+
* let tests assert the on-device-tuned default without reaching into module
|
|
439
|
+
* state.
|
|
440
|
+
*/
|
|
441
|
+
declare function getCameraFrameCaptureSize(): number;
|
|
374
442
|
/**
|
|
375
443
|
* Set a per-frame callback for custom updates.
|
|
376
444
|
* The callback is invoked every XR frame after pose updates but before render.
|
|
@@ -386,4 +454,4 @@ declare function setFrameCallback(callback: (() => void) | null): void;
|
|
|
386
454
|
*/
|
|
387
455
|
declare function getLiveCss3dManager(): Css3dRendererManager | null;
|
|
388
456
|
//#endregion
|
|
389
|
-
export {
|
|
457
|
+
export { setCamera as A, shouldLogCameraAccessDiagnostic as B, isWebXRSupported as C, resetWebXRState as D, nueQuaternionToWebXR$1 as E, setScene as F, stopDepthCapture as G, startDepthCapture as H, setTrackingCallbacks as I, stopImageCapture as K, setTrackingLostCallback as L, setDepthCaptureCallback as M, setFrameCallback as N, setArPose as O, setImageCaptureCallback as P, setTrackingRecoveredCallback as R, initAR as S, nuePositionToWebXR as T, startImageCapture as U, startCameraFrameCapture as V, stopCameraFrameCapture as W, getDepthSampleCount as _, applyAlignmentMatrix as a, getScene as b, endARSession as c, getArPose as d, getArWorldGroup as f, getCurrentArPose as g, getCameraFrameCount as h, TrackingSubscribableStore as i, setCameraFrameCallback as j, setArWorldGroup as k, extractPoseFromViewer as l, getCameraFrameCaptureSize as m, DEFAULT_CAMERA_FRAME_CAPTURE_SIZE as n, buildSessionOptions as o, getCamera as p, SessionFeatureOptions as r, createSceneHierarchy as s, CameraFrameCaptureConfig as t, extractResetTransformData as u, getImageCaptureFrameCount as v, isXRCameraLike as w, getXrCameraFromPose as x, getLiveCss3dManager as y, setTrackingStore as z };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region ../src/storage/zip-coverage-embed.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Zip Coverage Embed — write a recording's H3 coverage into its `session.json`.
|
|
4
|
+
*
|
|
5
|
+
* The map-centric browser indexes legacy recordings (those predating the
|
|
6
|
+
* `h3Cells` field) by reading their full GPS path — slow, and repeated on every
|
|
7
|
+
* folder open. This primitive lets a one-time "upgrade" embed the derived
|
|
8
|
+
* coverage **inside the recording's own `session.json`**, so the recording
|
|
9
|
+
* indexes instantly on every future open in this app *and any other reader*
|
|
10
|
+
* (the portability the user asked for; O3 — in-zip rewrite).
|
|
11
|
+
*
|
|
12
|
+
* It is a pure transform `(zip, cells, resolution) -> zip`: it reads every entry
|
|
13
|
+
* and re-emits a new zip identical to the input except that `session.json` gains
|
|
14
|
+
* `h3Cells` + `h3Resolution`. It never mutates anything in place — the caller
|
|
15
|
+
* (the RecorderApp backfill) owns the safe write-then-verify-then-overwrite
|
|
16
|
+
* protocol around it.
|
|
17
|
+
*
|
|
18
|
+
* @see ./zip-coverage-embed.ts.md
|
|
19
|
+
* @see GpsPlusSlamJs_Docs/docs/2026-06-14-followup-progressive-map-browser-indexing-and-backfill.md (B3)
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Return a new zip blob identical to `zip` except its `session.json` gains
|
|
23
|
+
* `h3Cells` + `h3Resolution`.
|
|
24
|
+
*
|
|
25
|
+
* **Skips (returns the input blob unchanged, by reference) when:**
|
|
26
|
+
* - the zip has no `session.json` (nothing to embed into);
|
|
27
|
+
* - `session.json` is present but unparseable (never write over a broken one);
|
|
28
|
+
* - `session.json` already carries `h3Cells` (idempotent — re-running the
|
|
29
|
+
* upgrade is a no-op, and new recordings are skipped).
|
|
30
|
+
*
|
|
31
|
+
* On any unexpected read/write failure it also returns the input untouched —
|
|
32
|
+
* it never emits a partial zip. Callers can detect a skip via reference
|
|
33
|
+
* equality (`result === zip`).
|
|
34
|
+
*
|
|
35
|
+
* Built on `@zip.js/zip.js` (the same library as the exporter) in store mode, so
|
|
36
|
+
* every non-`session.json` entry is re-emitted with byte-identical uncompressed
|
|
37
|
+
* content.
|
|
38
|
+
*/
|
|
39
|
+
declare function embedCoverageInSessionJson(zip: Blob, h3Cells: string[], h3Resolution: number): Promise<Blob>;
|
|
40
|
+
//#endregion
|
|
41
|
+
export { embedCoverageInSessionJson as t };
|
|
@@ -78,24 +78,38 @@ interface ExportSessionAsZipOptions {
|
|
|
78
78
|
readonly contributors?: readonly ZipExportContributor[];
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* Export a session from OPFS as a ZIP blob.
|
|
81
|
+
* Export a flat-layout session from OPFS as a ZIP blob.
|
|
82
82
|
*
|
|
83
83
|
* The ZIP structure mirrors the OPFS session structure:
|
|
84
84
|
* - session.json (at root)
|
|
85
85
|
* - actions/000001.json, actions/000002.json, ...
|
|
86
86
|
* - images/frame-000001.jpg, images/frame-000002.jpg, ... (legacy: frames/)
|
|
87
|
-
* - refPoints/{h3}.json (only observations from this session, scenario layout only)
|
|
88
87
|
*
|
|
89
|
-
* Uses "store" mode (compression level 0) for fast packaging.
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* - `exportSessionAsZip(sessionName)` — flat layout (sessions/)
|
|
93
|
-
* - `exportSessionAsZip(scenarioName, sessionName)` — scenario layout (scenarios/{name}/)
|
|
88
|
+
* Uses "store" mode (compression level 0) for fast packaging. Consumers with a
|
|
89
|
+
* different on-disk layout (one that nests sessions under a named bucket)
|
|
90
|
+
* resolve their own session handle and call {@link exportSessionHandleAsZip}.
|
|
94
91
|
*
|
|
92
|
+
* @param sessionName - Name of the session folder under `sessions/`.
|
|
95
93
|
* @returns ZIP export result with blob and file count
|
|
96
|
-
* @throws Error if session not found
|
|
94
|
+
* @throws Error if the session is not found
|
|
95
|
+
*/
|
|
96
|
+
declare function exportSessionAsZip(sessionName: string, options?: ExportSessionAsZipOptions): Promise<ZipExportResult>;
|
|
97
|
+
/**
|
|
98
|
+
* Stream an already-resolved session directory handle to a ZIP blob, running
|
|
99
|
+
* any caller-supplied extension {@link ZipExportContributor}s after the
|
|
100
|
+
* framework-owned files.
|
|
101
|
+
*
|
|
102
|
+
* This is the layout-agnostic core of {@link exportSessionAsZip}: consumers
|
|
103
|
+
* that resolve a session directory handle themselves (e.g. an app that nests
|
|
104
|
+
* sessions under its own grouping layer) call this directly so the framework's
|
|
105
|
+
* ZIP schema stays the single source of truth without the framework needing to
|
|
106
|
+
* know how the handle was located.
|
|
107
|
+
*
|
|
108
|
+
* @param sessionHandle - The session directory to package (must contain the
|
|
109
|
+
* framework-owned `session.json` / `actions/` / `images/` tree).
|
|
110
|
+
* @returns ZIP export result with blob and file count.
|
|
97
111
|
*/
|
|
98
|
-
declare function
|
|
112
|
+
declare function exportSessionHandleAsZip(sessionHandle: FileSystemDirectoryHandle, options?: ExportSessionAsZipOptions): Promise<ZipExportResult>;
|
|
99
113
|
/**
|
|
100
114
|
* Sync current OPFS session data to an external file handle.
|
|
101
115
|
*
|
|
@@ -109,12 +123,11 @@ declare function exportSessionAsZip(scenarioNameOrSessionName: string, sessionNa
|
|
|
109
123
|
* the last synced ZIP contains all data up to that point.
|
|
110
124
|
*
|
|
111
125
|
* @param fileHandle - File handle from showSaveFilePicker
|
|
112
|
-
* @param
|
|
113
|
-
* @param sessionName - Name of the session folder
|
|
126
|
+
* @param sessionName - Name of the session folder under `sessions/`
|
|
114
127
|
* @returns ZIP export result with blob and file count
|
|
115
|
-
* @throws Error if
|
|
128
|
+
* @throws Error if the session is not found
|
|
116
129
|
*/
|
|
117
|
-
declare function syncToExternalZip(fileHandle: FileSystemFileHandle,
|
|
130
|
+
declare function syncToExternalZip(fileHandle: FileSystemFileHandle, sessionName: string, options?: ExportSessionAsZipOptions): Promise<ZipExportResult>;
|
|
118
131
|
/**
|
|
119
132
|
* Trigger a file download in the browser.
|
|
120
133
|
*
|
|
@@ -125,14 +138,5 @@ declare function syncToExternalZip(fileHandle: FileSystemFileHandle, scenarioNam
|
|
|
125
138
|
* @param filename - Suggested filename
|
|
126
139
|
*/
|
|
127
140
|
declare function downloadZip(blob: Blob, filename: string): Promise<void>;
|
|
128
|
-
/**
|
|
129
|
-
* Export and download a session in one step.
|
|
130
|
-
*
|
|
131
|
-
* Convenience function combining exportSessionAsZip and downloadZip.
|
|
132
|
-
*
|
|
133
|
-
* @param scenarioName - Name of the scenario
|
|
134
|
-
* @param sessionName - Name of the session folder
|
|
135
|
-
*/
|
|
136
|
-
declare function exportAndDownloadSession(scenarioName: string, sessionName: string): Promise<void>;
|
|
137
141
|
//#endregion
|
|
138
|
-
export { downloadZip as a, syncToExternalZip as c, ZipExportResult as i, ZipContributorAddFile as n,
|
|
142
|
+
export { downloadZip as a, syncToExternalZip as c, ZipExportResult as i, ZipContributorAddFile as n, exportSessionAsZip as o, ZipExportContributor as r, exportSessionHandleAsZip as s, ExportSessionAsZipOptions as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gps-plus-slam-app-framework",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Reusable AR+GPS app framework layer — WebXR session management, Three.js visualization, GPS sensors, storage abstractions, replay engine, and store wiring for gps-plus-slam-js.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@reduxjs/toolkit": "^2.11.2",
|
|
38
38
|
"gl-matrix": "3.4.4",
|
|
39
|
-
"gps-plus-slam-js": "^1.
|
|
39
|
+
"gps-plus-slam-js": "^1.4.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@sentry/browser": ">=10.0.0",
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
//#region ../src/utils/concurrency.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Concurrency Utilities
|
|
4
|
-
*
|
|
5
|
-
* Provides helpers for limiting the number of concurrent async operations.
|
|
6
|
-
* Used to prevent excessive memory consumption when scanning many files
|
|
7
|
-
* in parallel (e.g., reading zip metadata during scenario discovery).
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Map over an array with a concurrency limit on the async mapper function.
|
|
11
|
-
*
|
|
12
|
-
* Behaves like `Promise.all(items.map(fn))` but limits how many mapper
|
|
13
|
-
* invocations run simultaneously. Results are returned in the same order
|
|
14
|
-
* as the input items.
|
|
15
|
-
*
|
|
16
|
-
* @param items - Array of items to process
|
|
17
|
-
* @param limit - Maximum number of concurrent mapper invocations
|
|
18
|
-
* @param mapper - Async function to apply to each item
|
|
19
|
-
* @returns Array of results in the same order as input items
|
|
20
|
-
* @throws Re-throws the first error from any mapper invocation (fail-fast)
|
|
21
|
-
*/
|
|
22
|
-
declare function mapWithConcurrencyLimit<T, R>(items: T[], limit: number, mapper: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
23
|
-
//#endregion
|
|
24
|
-
export { mapWithConcurrencyLimit as t };
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { n as SessionMetadata } from "./opfs-storage-D5zAn_lx.js";
|
|
2
|
-
|
|
3
|
-
//#region ../src/storage/file-system.d.ts
|
|
4
|
-
/**
|
|
5
|
-
* Reset module state - exported for testing only
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
declare function resetStorageState(): void;
|
|
9
|
-
/**
|
|
10
|
-
* Reset session-level state for a new recording.
|
|
11
|
-
*
|
|
12
|
-
* Clears scenario/session names and OPFS session handles, but preserves
|
|
13
|
-
* `storageInitialized` and the OPFS root so `initStorage()` doesn't need
|
|
14
|
-
* to be called again.
|
|
15
|
-
*/
|
|
16
|
-
declare function resetForNewSession(): void;
|
|
17
|
-
/**
|
|
18
|
-
* Result of write access verification.
|
|
19
|
-
*/
|
|
20
|
-
interface WriteAccessResult {
|
|
21
|
-
/** Whether write access was successfully verified */
|
|
22
|
-
success: boolean;
|
|
23
|
-
/** Error message if write verification failed */
|
|
24
|
-
error?: string;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Verify that we have actual write access to a directory.
|
|
28
|
-
*/
|
|
29
|
-
declare function verifyWriteAccess(dirHandle: FileSystemDirectoryHandle): Promise<WriteAccessResult>;
|
|
30
|
-
/**
|
|
31
|
-
* Initialize storage using OPFS.
|
|
32
|
-
*
|
|
33
|
-
* @returns List of existing scenario folder names
|
|
34
|
-
* @throws Error if OPFS is not supported
|
|
35
|
-
*/
|
|
36
|
-
declare function initStorage(): Promise<string[]>;
|
|
37
|
-
/**
|
|
38
|
-
* Create a new session folder.
|
|
39
|
-
*
|
|
40
|
-
* When scenarioName is provided, creates under the scenario directory
|
|
41
|
-
* (legacy scenario layout for the recorder). When omitted, creates under
|
|
42
|
-
* the flat sessions/ directory.
|
|
43
|
-
*
|
|
44
|
-
* @param scenarioName - Optional name of the scenario (omit for flat layout)
|
|
45
|
-
*/
|
|
46
|
-
declare function startSession(scenarioName?: string): Promise<{
|
|
47
|
-
scenarioPath: string;
|
|
48
|
-
sessionPath: string;
|
|
49
|
-
}>;
|
|
50
|
-
/**
|
|
51
|
-
* List all session names.
|
|
52
|
-
* When scenarioName is provided, lists sessions under that scenario.
|
|
53
|
-
* Otherwise lists flat sessions.
|
|
54
|
-
*/
|
|
55
|
-
declare function listSessions(scenarioName?: string): Promise<string[]>;
|
|
56
|
-
/**
|
|
57
|
-
* Write a Redux action to OPFS as a JSON file.
|
|
58
|
-
*/
|
|
59
|
-
declare function writeAction(action: unknown, index: number): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Write a captured frame image to OPFS.
|
|
62
|
-
*/
|
|
63
|
-
declare function writeFrame(blob: Blob, index: number): Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* Write session metadata (session.json) to OPFS.
|
|
66
|
-
*/
|
|
67
|
-
declare function writeSessionMetadata(metadata: SessionMetadata): Promise<void>;
|
|
68
|
-
/**
|
|
69
|
-
* Get the current scenario handle (for loading prior sessions).
|
|
70
|
-
* Legacy: uses scenario directory layout.
|
|
71
|
-
*/
|
|
72
|
-
declare function getCurrentScenarioHandle(): FileSystemDirectoryHandle | null;
|
|
73
|
-
/**
|
|
74
|
-
* Set the current scenario handle (when user selects a scenario).
|
|
75
|
-
* Legacy: uses scenario directory layout.
|
|
76
|
-
*/
|
|
77
|
-
declare function setCurrentScenario(scenarioName: string): Promise<FileSystemDirectoryHandle | null>;
|
|
78
|
-
/**
|
|
79
|
-
* Ensure a scenario directory exists in OPFS, creating it if necessary.
|
|
80
|
-
* Legacy: used during OPFS recovery.
|
|
81
|
-
*/
|
|
82
|
-
declare function ensureScenarioDirectory(scenarioName: string): Promise<FileSystemDirectoryHandle | null>;
|
|
83
|
-
/**
|
|
84
|
-
* Result of clearing the reference-point cache across all scenarios.
|
|
85
|
-
*/
|
|
86
|
-
interface ClearRefPointsCacheResult {
|
|
87
|
-
/** Number of scenarios whose `refPoints/` directory was deleted. */
|
|
88
|
-
readonly scenariosCleared: number;
|
|
89
|
-
/** Total number of scenarios scanned (including ones with no cache). */
|
|
90
|
-
readonly scenariosScanned: number;
|
|
91
|
-
/** Names of scenarios that failed to clear, with reason. */
|
|
92
|
-
readonly errors: {
|
|
93
|
-
scenarioName: string;
|
|
94
|
-
reason: string;
|
|
95
|
-
}[];
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Clear the cached `refPoints/` directory for every scenario in OPFS.
|
|
99
|
-
*
|
|
100
|
-
* Used by the "Clear Reference Point Cache" maintenance action so that the
|
|
101
|
-
* next scenario load re-imports ref points from the read folder's `*.zip`
|
|
102
|
-
* recordings (see ref-point-recovery in the recorder app).
|
|
103
|
-
*
|
|
104
|
-
* Failures for individual scenarios are collected in `errors` rather than
|
|
105
|
-
* aborting the whole operation — partial progress is still useful.
|
|
106
|
-
*
|
|
107
|
-
* @throws Error if OPFS storage is unavailable (e.g. `initStorage()` not yet
|
|
108
|
-
* called, or browser does not support OPFS). Surfacing this loudly avoids
|
|
109
|
-
* reporting a silent "0 scenarios cleared" success that would mask the
|
|
110
|
-
* real failure to the user.
|
|
111
|
-
*/
|
|
112
|
-
declare function clearRefPointsCacheForAllScenarios(): Promise<ClearRefPointsCacheResult>;
|
|
113
|
-
//#endregion
|
|
114
|
-
export { getCurrentScenarioHandle as a, resetForNewSession as c, startSession as d, verifyWriteAccess as f, writeSessionMetadata as h, ensureScenarioDirectory as i, resetStorageState as l, writeFrame as m, WriteAccessResult as n, initStorage as o, writeAction as p, clearRefPointsCacheForAllScenarios as r, listSessions as s, ClearRefPointsCacheResult as t, setCurrentScenario as u };
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
//#region ../src/state/recording-options.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Recording Options - User-configurable settings for data capture.
|
|
4
|
-
*
|
|
5
|
-
* Allows users to disable/configure high-frequency data streams
|
|
6
|
-
* (depth sampling, image capture) to improve performance on lower-end devices.
|
|
7
|
-
*
|
|
8
|
-
* Options persist in localStorage across sessions.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Input type for validateRecordingOptions allowing partial nested objects.
|
|
12
|
-
* This allows passing incomplete objects that will be merged with defaults.
|
|
13
|
-
*/
|
|
14
|
-
interface RecordingOptionsInput {
|
|
15
|
-
depth?: Partial<DepthCaptureOptions>;
|
|
16
|
-
images?: Partial<ImageCaptureOptions>;
|
|
17
|
-
arCrashIsolation?: Partial<ArCrashIsolationOptions>;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Diagnostic flags for isolating pre-recording AR startup crashes.
|
|
21
|
-
* These gates affect XR session negotiation and frame-loop behavior,
|
|
22
|
-
* independently of recording-time image/depth capture.
|
|
23
|
-
*/
|
|
24
|
-
interface ArCrashIsolationOptions {
|
|
25
|
-
enableDomOverlay: boolean;
|
|
26
|
-
enableCameraAccess: boolean;
|
|
27
|
-
enableDepthSensingFeature: boolean;
|
|
28
|
-
enableCss3dRenderer: boolean;
|
|
29
|
-
enableCameraTextureAcquisition: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Apply the Chromium WebXR camera-access tab-crash workaround at app
|
|
32
|
-
* bootstrap. The workaround always deletes
|
|
33
|
-
* `XRWebGLBinding.prototype.createProjectionLayer` /
|
|
34
|
-
* `XRRenderState.prototype.layers` (forcing `XRWebGLLayer`) — required on
|
|
35
|
-
* every affected Chrome build observed on-device, including Chrome 150 — and
|
|
36
|
-
* additionally persists the `baseLayer` across
|
|
37
|
-
* `XRSession.prototype.updateRenderState` only for Chrome builds inside the
|
|
38
|
-
* affected window (148.0.7778.12 up to 149.0.7821).
|
|
39
|
-
*
|
|
40
|
-
* Default `true`. Opt-out is offered because forcing `XRWebGLLayer` may break
|
|
41
|
-
* WebXR on unaffected (e.g. Quest) devices.
|
|
42
|
-
*
|
|
43
|
-
* @see GpsPlusSlamJs_AppFramework/src/ar/chromium-camera-access-workaround.ts
|
|
44
|
-
* @see https://github.com/mrdoob/three.js/issues/33404
|
|
45
|
-
*/
|
|
46
|
-
applyChromiumProjectionLayerWorkaround: boolean;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Configuration for depth sampling during recording.
|
|
50
|
-
*/
|
|
51
|
-
interface DepthCaptureOptions {
|
|
52
|
-
/** Whether to capture depth samples. Default: true */
|
|
53
|
-
enabled: boolean;
|
|
54
|
-
/** Interval between samples in milliseconds. Default: 1000 */
|
|
55
|
-
intervalMs: number;
|
|
56
|
-
/**
|
|
57
|
-
* Grid size (N×N points per sample). Default: 16 — dense enough to
|
|
58
|
-
* populate the AR-space occupancy grid (2026-06-11 port plan §1).
|
|
59
|
-
*/
|
|
60
|
-
gridSize: number;
|
|
61
|
-
/**
|
|
62
|
-
* Whether to enrich each depth point with the camera color at its view
|
|
63
|
-
* coordinates (RGB voxel coloring, occupancy-grid port plan Iter 8).
|
|
64
|
-
* Costs one small GPU blit+readback per sample (~1 Hz); when off, the
|
|
65
|
-
* occupancy cubes keep the height-based coloring. Default: true.
|
|
66
|
-
*/
|
|
67
|
-
rgb: boolean;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Configuration for image capture during recording.
|
|
71
|
-
*/
|
|
72
|
-
interface ImageCaptureOptions {
|
|
73
|
-
/** Whether to capture images. Default: true */
|
|
74
|
-
enabled: boolean;
|
|
75
|
-
/** Interval between captures in milliseconds. Default: 2000 */
|
|
76
|
-
intervalMs: number;
|
|
77
|
-
/** JPEG quality (0.0 - 1.0). Default: 0.7 */
|
|
78
|
-
quality: number;
|
|
79
|
-
/** Resolution divisor: 1 = full native resolution, 2 = half, 4 = quarter. Default: 1 */
|
|
80
|
-
resolutionDivisor: number;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* User-configurable recording options.
|
|
84
|
-
* Persisted to localStorage for cross-session consistency.
|
|
85
|
-
*/
|
|
86
|
-
interface RecordingOptions {
|
|
87
|
-
/** Depth sampling configuration */
|
|
88
|
-
depth: DepthCaptureOptions;
|
|
89
|
-
/** Image capture configuration */
|
|
90
|
-
images: ImageCaptureOptions;
|
|
91
|
-
/** Diagnostic flags for pre-recording AR crash isolation */
|
|
92
|
-
arCrashIsolation: ArCrashIsolationOptions;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* localStorage key for persisted options.
|
|
96
|
-
*
|
|
97
|
-
* **Multi-tab caveat:** All tabs/instances sharing the same origin will
|
|
98
|
-
* read and write this key. In multi-tab or embedded scenarios, concurrent
|
|
99
|
-
* saves can silently overwrite each other. Use a custom `storageKey`
|
|
100
|
-
* parameter in `loadRecordingOptions` / `saveRecordingOptions` to isolate
|
|
101
|
-
* instances when needed.
|
|
102
|
-
*/
|
|
103
|
-
declare const STORAGE_KEY = "gps-plus-slam-recorder-options";
|
|
104
|
-
/** Default recording options (all streams enabled) */
|
|
105
|
-
declare const DEFAULT_RECORDING_OPTIONS: RecordingOptions;
|
|
106
|
-
/** Validation constraints for depth options */
|
|
107
|
-
declare const DEPTH_CONSTRAINTS: {
|
|
108
|
-
readonly intervalMs: {
|
|
109
|
-
readonly min: 500;
|
|
110
|
-
readonly max: 5000;
|
|
111
|
-
readonly step: 100;
|
|
112
|
-
};
|
|
113
|
-
readonly gridSize: {
|
|
114
|
-
readonly min: 2;
|
|
115
|
-
readonly max: 32;
|
|
116
|
-
readonly step: 1;
|
|
117
|
-
};
|
|
118
|
-
};
|
|
119
|
-
/** Validation constraints for image options */
|
|
120
|
-
declare const IMAGE_CONSTRAINTS: {
|
|
121
|
-
readonly intervalMs: {
|
|
122
|
-
readonly min: 1000;
|
|
123
|
-
readonly max: 10000;
|
|
124
|
-
readonly step: 500;
|
|
125
|
-
};
|
|
126
|
-
readonly quality: {
|
|
127
|
-
readonly min: 0.3;
|
|
128
|
-
readonly max: 1;
|
|
129
|
-
readonly step: 0.1;
|
|
130
|
-
};
|
|
131
|
-
readonly resolutionDivisor: {
|
|
132
|
-
readonly min: 1;
|
|
133
|
-
readonly max: 8;
|
|
134
|
-
readonly step: 1;
|
|
135
|
-
};
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* Validate and normalize AR crash isolation flags.
|
|
139
|
-
* Missing or invalid values fall back to defaults.
|
|
140
|
-
*/
|
|
141
|
-
declare function validateArCrashIsolationOptions(options: Partial<ArCrashIsolationOptions>): ArCrashIsolationOptions;
|
|
142
|
-
/**
|
|
143
|
-
* Validate and normalize depth options.
|
|
144
|
-
* Invalid values are clamped to valid ranges.
|
|
145
|
-
*/
|
|
146
|
-
declare function validateDepthOptions(options: Partial<DepthCaptureOptions>): DepthCaptureOptions;
|
|
147
|
-
/**
|
|
148
|
-
* Validate and normalize image options.
|
|
149
|
-
* Invalid values are clamped to valid ranges.
|
|
150
|
-
*/
|
|
151
|
-
declare function validateImageOptions(options: Partial<ImageCaptureOptions>): ImageCaptureOptions;
|
|
152
|
-
/**
|
|
153
|
-
* Validate and normalize a full RecordingOptions object.
|
|
154
|
-
* Merges with defaults and clamps invalid values.
|
|
155
|
-
*/
|
|
156
|
-
declare function validateRecordingOptions(options: RecordingOptionsInput): RecordingOptions;
|
|
157
|
-
/**
|
|
158
|
-
* Load recording options from localStorage.
|
|
159
|
-
* Returns defaults if no saved options exist or parsing fails.
|
|
160
|
-
* Validates and merges with defaults to handle schema evolution.
|
|
161
|
-
* @param storageKey - Optional custom localStorage key (defaults to STORAGE_KEY).
|
|
162
|
-
*/
|
|
163
|
-
declare function loadRecordingOptions(storageKey?: string): RecordingOptions;
|
|
164
|
-
/**
|
|
165
|
-
* Save recording options to localStorage.
|
|
166
|
-
* Options are validated before saving.
|
|
167
|
-
* @param storageKey - Optional custom localStorage key (defaults to STORAGE_KEY).
|
|
168
|
-
*/
|
|
169
|
-
declare function saveRecordingOptions(options: RecordingOptions, storageKey?: string): void;
|
|
170
|
-
/**
|
|
171
|
-
* Reset recording options to defaults.
|
|
172
|
-
* Clears localStorage and returns default options.
|
|
173
|
-
* @param storageKey - Optional custom localStorage key (defaults to STORAGE_KEY).
|
|
174
|
-
*/
|
|
175
|
-
declare function resetRecordingOptions(storageKey?: string): RecordingOptions;
|
|
176
|
-
/**
|
|
177
|
-
* Create a deep copy of recording options.
|
|
178
|
-
* Useful for creating mutable copies of the frozen defaults.
|
|
179
|
-
*/
|
|
180
|
-
declare function cloneRecordingOptions(options: RecordingOptions): RecordingOptions;
|
|
181
|
-
//#endregion
|
|
182
|
-
export { validateRecordingOptions as _, IMAGE_CONSTRAINTS as a, RecordingOptionsInput as c, loadRecordingOptions as d, resetRecordingOptions as f, validateImageOptions as g, validateDepthOptions as h, DepthCaptureOptions as i, STORAGE_KEY as l, validateArCrashIsolationOptions as m, DEFAULT_RECORDING_OPTIONS as n, ImageCaptureOptions as o, saveRecordingOptions as p, DEPTH_CONSTRAINTS as r, RecordingOptions as s, ArCrashIsolationOptions as t, cloneRecordingOptions as u };
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { i as DepthSample } from "./ar-types-Dan1MVTi.js";
|
|
2
|
-
import { s as RecordingOptions } from "./recording-options-DJBXuMxV.js";
|
|
3
|
-
import * as _$_reduxjs_toolkit0 from "@reduxjs/toolkit";
|
|
4
|
-
|
|
5
|
-
//#region ../src/state/recording-slice.d.ts
|
|
6
|
-
interface SessionMetadata {
|
|
7
|
-
scenarioName: string;
|
|
8
|
-
sessionName: string;
|
|
9
|
-
startTime: number;
|
|
10
|
-
deviceInfo?: string;
|
|
11
|
-
notes?: string;
|
|
12
|
-
/** Recording options used for this session (for replay context) */
|
|
13
|
-
recordingOptions?: RecordingOptions;
|
|
14
|
-
}
|
|
15
|
-
interface RecordingState {
|
|
16
|
-
isRecording: boolean;
|
|
17
|
-
sessionMetadata: SessionMetadata | null;
|
|
18
|
-
actionCount: number;
|
|
19
|
-
/**
|
|
20
|
-
* Count of failed file write operations during this session.
|
|
21
|
-
* User Feedback Issue #1 Part B: Track write failures for visibility.
|
|
22
|
-
*/
|
|
23
|
-
failedWriteCount: number;
|
|
24
|
-
/**
|
|
25
|
-
* The most recent depth sample, kept ONLY so subscribers can observe new
|
|
26
|
-
* samples via reference comparison (the AR-space occupancy grid is fed
|
|
27
|
-
* this way — see the 2026-06-11 occupancy-grid port plan). The persisted
|
|
28
|
-
* action stream remains the source of truth; no history is kept here.
|
|
29
|
-
* The payload stays in raw WebXR coordinates — conversion-free.
|
|
30
|
-
*/
|
|
31
|
-
latestDepthSample: DepthSample | null;
|
|
32
|
-
}
|
|
33
|
-
declare const startSession: _$_reduxjs_toolkit0.ActionCreatorWithPayload<SessionMetadata, "recording/startSession">, endSession: _$_reduxjs_toolkit0.ActionCreatorWithoutPayload<"recording/endSession">, recordDepthSample: _$_reduxjs_toolkit0.ActionCreatorWithPayload<DepthSample, "recording/recordDepthSample">, recordWriteFailure: _$_reduxjs_toolkit0.ActionCreatorWithPayload<string, "recording/recordWriteFailure">;
|
|
34
|
-
declare const recordingReducer: _$_reduxjs_toolkit0.Reducer<RecordingState>;
|
|
35
|
-
//#endregion
|
|
36
|
-
export { recordWriteFailure as a, recordDepthSample as i, SessionMetadata as n, recordingReducer as o, endSession as r, startSession as s, RecordingState as t };
|
|
@@ -1,2 +0,0 @@
|
|
|
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-CwXTNHmB.js";
|
|
2
|
-
export { ClearRefPointsCacheResult, WriteAccessResult, clearRefPointsCacheForAllScenarios, ensureScenarioDirectory, getCurrentScenarioHandle, initStorage, listSessions, resetForNewSession, resetStorageState, setCurrentScenario, startSession, verifyWriteAccess, writeAction, writeFrame, writeSessionMetadata };
|