@ingissa/navcore-core 1.0.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.
@@ -0,0 +1,488 @@
1
+ import { C as Coordinate, g as NavCoreState } from './NavCore-Bjl5fTea.mjs';
2
+ export { F as FEATURES, a as FeatureKey, L as LicenseManager, b as LicensePayload, c as LicenseStatus, o as destinationPoint, p as geoGetBearing, q as haversineDistance } from './NavCore-Bjl5fTea.mjs';
3
+
4
+ /**
5
+ * Bearing and angular math utilities.
6
+ */
7
+
8
+ /** Normalise an angle to (−180, 180] */
9
+ declare function normalizeAngle(angle: number): number;
10
+ /** Bearing between two [lng, lat] coordinates in degrees [0, 360) */
11
+ declare function getBearingBetweenPoints(start: Coordinate, end: Coordinate): number;
12
+ /** Linear interpolation between two coordinates */
13
+ declare function interpolatePoint(a: Coordinate, b: Coordinate, t: number): Coordinate;
14
+
15
+ /**
16
+ * Vector projection utilities for coordinate snapping.
17
+ */
18
+
19
+ /** Project point p onto line segment [a, b]. Returns the projected coordinate. */
20
+ declare function projectPointOnSegment(p: Coordinate, a: Coordinate, b: Coordinate): Coordinate;
21
+
22
+ /**
23
+ * Pre-calculated cumulative distance caches.
24
+ */
25
+
26
+ /** Forward cumulative distances: result[i] = metres from route[0] to route[i]. O(n) build. */
27
+ declare function buildForwardCumulativeDistances(route: Coordinate[]): Float64Array;
28
+ /** Reverse cumulative distances: result[i] = metres from vertex i to the end. O(1) reads. */
29
+ declare function buildReverseCumulativeDistances(route: Coordinate[]): Float64Array;
30
+
31
+ /**
32
+ * Module 1: KalmanFilter2D
33
+ * GPS noise reduction using a 2D Kalman filter.
34
+ * ZERO dependencies — pure math.
35
+ */
36
+ interface Kalman2DState {
37
+ x: number;
38
+ y: number;
39
+ vx: number;
40
+ vy: number;
41
+ P: number;
42
+ }
43
+ /**
44
+ * Perform a single Kalman update step.
45
+ *
46
+ * @param state Current state (mutated in place for perf)
47
+ * @param measX Measured longitude
48
+ * @param measY Measured latitude
49
+ * @param accuracy GPS accuracy in metres (used to scale R)
50
+ * @param dt Time delta in seconds
51
+ * @param Q Process noise (default 0.00001)
52
+ * @param rBase Measurement noise base (default 0.00005)
53
+ * @returns Updated state
54
+ */
55
+ declare function kalmanUpdate2D(state: Kalman2DState, measX: number, measY: number, accuracy: number, dt: number, Q?: number, rBase?: number): Kalman2DState;
56
+ /**
57
+ * KalmanFilter2D class wrapper for stateful usage.
58
+ */
59
+ declare class KalmanFilter2D {
60
+ private state;
61
+ private readonly Q;
62
+ private readonly rBase;
63
+ private lastTimestamp;
64
+ constructor(Q?: number, rBase?: number);
65
+ /** Initialize with a known position */
66
+ init(lng: number, lat: number, timestamp: number): void;
67
+ /** Process a GPS measurement, returns filtered [lng, lat] */
68
+ update(lng: number, lat: number, accuracy: number, timestamp: number): [number, number];
69
+ /** Get current filtered position */
70
+ getPosition(): [number, number];
71
+ /** Get the internal state for inspection/serialization */
72
+ getState(): Kalman2DState;
73
+ /** Reset the filter */
74
+ reset(): void;
75
+ }
76
+
77
+ /**
78
+ * Module 2: RouteSnapper
79
+ * Projects GPS coordinates onto the route with anti-oscillation and U-turn protection.
80
+ * Merges BasicSnapper + AdvancedSnapper from nav-sdk into a single module.
81
+ */
82
+
83
+ interface SnapResult {
84
+ idx: number;
85
+ dist: number;
86
+ proj: Coordinate;
87
+ }
88
+ interface SnapperOptions {
89
+ /** Enable bearing-based U-turn anti-snap penalty */
90
+ useBearingPenalty?: boolean;
91
+ /** Enable inertia penalty to prevent oscillation between segments */
92
+ useInertiaPenalty?: boolean;
93
+ /** Max search distance hard cutoff (metres) */
94
+ maxSnapDistance?: number;
95
+ }
96
+ declare class RouteSnapper {
97
+ private readonly options;
98
+ constructor(options?: SnapperOptions);
99
+ /**
100
+ * Find the nearest projection of a GPS point onto the route.
101
+ *
102
+ * @param gps Current GPS coordinate [lng, lat]
103
+ * @param route Route geometry
104
+ * @param startIdx Search window start
105
+ * @param windowSize Number of segments to scan
106
+ * @param isCircuit Whether the route is a closed circuit
107
+ * @param maxProgressIdx Highest index ever reached (for circuit wrap detection)
108
+ * @param fallbackIdx Fallback index if no match found
109
+ * @param vehicleBearing Current vehicle bearing (null disables bearing penalty)
110
+ * @param prevSegment Previous snapped segment index (null disables inertia)
111
+ */
112
+ snap(gps: Coordinate, route: Coordinate[], startIdx: number, windowSize: number, isCircuit: boolean, maxProgressIdx: number, fallbackIdx: number, vehicleBearing?: number | null, prevSegment?: number | null): SnapResult;
113
+ }
114
+
115
+ /**
116
+ * Module 10: CustomRouteBuilder
117
+ * Build custom routes with unlimited waypoints, chunking, and GPX/GeoJSON.
118
+ */
119
+
120
+ interface WaypointOptions {
121
+ silent?: boolean;
122
+ name?: string;
123
+ }
124
+ interface BuildOptions {
125
+ connectionMode?: 'ROUTED' | 'STRAIGHT';
126
+ chunkStrategy?: 'OVERLAP_1' | 'OVERLAP_2';
127
+ maxWaypointsPerChunk?: number;
128
+ }
129
+ interface CustomWaypoint {
130
+ id: string;
131
+ coord: Coordinate;
132
+ options?: WaypointOptions;
133
+ }
134
+ /**
135
+ * CustomRouteBuilder — builds exam routes from waypoints.
136
+ *
137
+ * Pass a DirectionsProvider to `build()` for routed connections.
138
+ * Without a provider, `build()` returns straight-line geometry.
139
+ */
140
+ declare class CustomRouteBuilder {
141
+ private waypoints;
142
+ /** Add a waypoint at the end. Returns the generated ID. */
143
+ addWaypoint(coord: Coordinate, options?: WaypointOptions): string;
144
+ /** Insert a waypoint after an existing one. Returns the new ID. */
145
+ insertWaypoint(coord: Coordinate, afterId: string): string;
146
+ /** Remove a waypoint by ID */
147
+ removeWaypoint(id: string): void;
148
+ /** Move a waypoint to a new coordinate */
149
+ moveWaypoint(id: string, newCoord: Coordinate): void;
150
+ /** Get all current waypoints */
151
+ getWaypoints(): ReadonlyArray<CustomWaypoint>;
152
+ /** Get the number of waypoints */
153
+ get size(): number;
154
+ /**
155
+ * Chunk waypoints for a provider with max waypoint limits.
156
+ * OVERLAP_1: adjacent chunks share 1 waypoint (last of prev = first of next)
157
+ * OVERLAP_2: adjacent chunks share 2 waypoints
158
+ */
159
+ chunk(strategy?: 'OVERLAP_1' | 'OVERLAP_2', maxPerChunk?: number): Coordinate[][];
160
+ /**
161
+ * Build straight-line geometry (no provider needed).
162
+ * For routed geometry, pass chunks to a DirectionsProvider externally.
163
+ */
164
+ buildStraightLine(): {
165
+ geometry: Coordinate[];
166
+ waypoints: CustomWaypoint[];
167
+ };
168
+ /** Import waypoints from a GPX string */
169
+ fromGPX(gpx: string): void;
170
+ /** Export the current waypoints as a GPX string */
171
+ toGPX(): string;
172
+ /** Import waypoints from GeoJSON */
173
+ fromGeoJSON(geojson: {
174
+ type: string;
175
+ features?: Array<{
176
+ geometry: {
177
+ type: string;
178
+ coordinates: unknown;
179
+ };
180
+ }>;
181
+ }): void;
182
+ /** Export the current route as GeoJSON FeatureCollection */
183
+ toGeoJSON(): {
184
+ type: 'FeatureCollection';
185
+ features: Array<{
186
+ type: 'Feature';
187
+ geometry: {
188
+ type: string;
189
+ coordinates: Coordinate | Coordinate[];
190
+ };
191
+ properties: Record<string, unknown>;
192
+ }>;
193
+ };
194
+ /** Clear all waypoints */
195
+ clear(): void;
196
+ }
197
+
198
+ /**
199
+ * DirectionsProvider — Generic interface for route computation.
200
+ *
201
+ * All direction adapters (Mapbox, OSRM, Valhalla, ORS…) implement this contract.
202
+ * NavCore itself only depends on this interface — swap providers with zero engine changes.
203
+ */
204
+
205
+ interface DirectionsOptions {
206
+ /** Travel mode */
207
+ profile?: 'driving' | 'cycling' | 'walking';
208
+ /** Include step-by-step maneuver data */
209
+ steps?: boolean;
210
+ /** Language for instruction text */
211
+ language?: string;
212
+ /** Return alternative routes */
213
+ alternatives?: boolean;
214
+ }
215
+ interface DirectionsManeuver {
216
+ type: string;
217
+ modifier?: string;
218
+ location: Coordinate;
219
+ bearingBefore: number;
220
+ bearingAfter: number;
221
+ instruction?: string;
222
+ }
223
+ interface DirectionsStep {
224
+ distance: number;
225
+ duration: number;
226
+ geometry: Coordinate[];
227
+ maneuver: DirectionsManeuver;
228
+ name?: string;
229
+ }
230
+ interface DirectionsLeg {
231
+ distance: number;
232
+ duration: number;
233
+ steps?: DirectionsStep[];
234
+ }
235
+ interface DirectionsResult {
236
+ /** Full route geometry as [lng, lat] coordinates */
237
+ geometry: Coordinate[];
238
+ /** Total distance in metres */
239
+ distance: number;
240
+ /** Total duration in seconds */
241
+ duration: number;
242
+ /** Per-leg breakdown */
243
+ legs: DirectionsLeg[];
244
+ /** Raw API response for provider-specific access */
245
+ raw?: unknown;
246
+ }
247
+ /**
248
+ * Any directions source implements this single method.
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * const provider: DirectionsProvider = new OSRMDirectionsProvider({ baseUrl: '...' });
253
+ * const result = await provider.getRoute([[lng1, lat1], [lng2, lat2]]);
254
+ * engine.setRoute(result.geometry);
255
+ * ```
256
+ */
257
+ interface DirectionsProvider {
258
+ /**
259
+ * Compute a route through the given waypoints.
260
+ * Implementations MUST handle the case where `waypoints.length > provider limit`
261
+ * by chunking internally.
262
+ *
263
+ * @throws {Error} if fewer than 2 waypoints are given, or the API fails.
264
+ */
265
+ getRoute(waypoints: Coordinate[], options?: DirectionsOptions): Promise<DirectionsResult>;
266
+ }
267
+
268
+ /**
269
+ * OSRMDirectionsProvider
270
+ *
271
+ * Self-hosted OSRM (Open Source Routing Machine) adapter.
272
+ * Zero API key required. Ideal for self-hosted deployments.
273
+ *
274
+ * @see https://project-osrm.org/docs/v5.24.0/api/
275
+ */
276
+
277
+ interface OSRMConfig {
278
+ /** Base URL of your OSRM server, e.g. 'http://router.project-osrm.org' */
279
+ baseUrl: string;
280
+ /** Routing profile (default: 'driving') */
281
+ profile?: 'driving' | 'cycling' | 'walking';
282
+ /** Max waypoints per API request (OSRM supports unlimited, but chunking keeps requests fast) */
283
+ maxWaypointsPerChunk?: number;
284
+ }
285
+ declare class OSRMDirectionsProvider implements DirectionsProvider {
286
+ private readonly config;
287
+ constructor(config: OSRMConfig);
288
+ getRoute(waypoints: Coordinate[], options?: DirectionsOptions): Promise<DirectionsResult>;
289
+ private fetchRoute;
290
+ private fetchChunked;
291
+ }
292
+
293
+ /**
294
+ * ValhallaDirectionsProvider
295
+ *
296
+ * Self-hosted Valhalla routing engine adapter.
297
+ * Supports the `/route` and `/optimized_route` endpoints.
298
+ * Zero API key for self-hosted. Uses Mapbox-hosted Valhalla with a token.
299
+ *
300
+ * @see https://valhalla.github.io/valhalla/api/turn-by-turn/api-reference/
301
+ */
302
+
303
+ type ValhallaCostingModel = 'auto' | 'bicycle' | 'pedestrian' | 'bus' | 'motor_scooter';
304
+ interface ValhallaConfig {
305
+ /** Base URL of your Valhalla server or hosted instance */
306
+ baseUrl: string;
307
+ /** Routing costing model (default: 'auto') */
308
+ costing?: ValhallaCostingModel;
309
+ /** Optional API key (required for hosted Valhalla services) */
310
+ apiKey?: string;
311
+ /** Max waypoints per chunk (default: 50) */
312
+ maxWaypointsPerChunk?: number;
313
+ }
314
+ declare class ValhallaDirectionsProvider implements DirectionsProvider {
315
+ private readonly config;
316
+ constructor(config: ValhallaConfig);
317
+ getRoute(waypoints: Coordinate[], options?: DirectionsOptions): Promise<DirectionsResult>;
318
+ private profileToCosting;
319
+ private fetchRoute;
320
+ /** Decode Valhalla's encoded polyline6 format */
321
+ private decodePolyline;
322
+ private fetchChunked;
323
+ }
324
+
325
+ /**
326
+ * OpenRouteServiceProvider
327
+ *
328
+ * OpenRouteService (ORS) API adapter. Free tier: 2000 req/day.
329
+ * Requires an API key from https://openrouteservice.org/
330
+ *
331
+ * @see https://openrouteservice.org/dev/#/api-docs/v2/directions
332
+ */
333
+
334
+ type ORSProfile = 'driving-car' | 'driving-hgv' | 'cycling-regular' | 'cycling-road' | 'cycling-mountain' | 'foot-walking' | 'foot-hiking' | 'wheelchair';
335
+ interface ORSConfig {
336
+ /** ORS API key */
337
+ apiKey: string;
338
+ /** Routing profile (default: 'driving-car') */
339
+ profile?: ORSProfile;
340
+ /** API base URL (default: ORS public API) */
341
+ baseUrl?: string;
342
+ /** Max waypoints per request (ORS limit: 50) */
343
+ maxWaypointsPerChunk?: number;
344
+ }
345
+ declare class OpenRouteServiceProvider implements DirectionsProvider {
346
+ private readonly config;
347
+ constructor(config: ORSConfig);
348
+ getRoute(waypoints: Coordinate[], options?: DirectionsOptions): Promise<DirectionsResult>;
349
+ private profileFromOptions;
350
+ private fetchRoute;
351
+ private fetchChunked;
352
+ }
353
+
354
+ /**
355
+ * MapRendererAdapter — Interface for map renderer integrations.
356
+ *
357
+ * Implement this interface to connect NavCore's navigation state
358
+ * to any map library (MapLibre, Leaflet, Google Maps, etc.).
359
+ *
360
+ * NavCore itself never depends on a renderer — adapters live
361
+ * in separate packages and are optionally wired up by the consumer.
362
+ *
363
+ * @example
364
+ * ```typescript
365
+ * import { MapLibreAdapter } from '@ingissa/navcore-maplibre';
366
+ *
367
+ * const adapter = new MapLibreAdapter(mapInstance);
368
+ * engine.on('stateUpdate', (state) => adapter.updateVehicle(state.snappedCoord, state.bearing, state));
369
+ * adapter.drawRoute(routeGeometry);
370
+ * ```
371
+ */
372
+
373
+ interface RouteStyle {
374
+ /** Line color as CSS color string. Default: '#7c3aed' */
375
+ color?: string;
376
+ /** Line width in pixels. Default: 4 */
377
+ width?: number;
378
+ /** Line opacity 0–1. Default: 0.9 */
379
+ opacity?: number;
380
+ /** Dash array pattern (pixels). Undefined = solid. */
381
+ dashArray?: number[];
382
+ }
383
+ interface VehicleStyle {
384
+ /** Icon size multiplier. Default: 1.0 */
385
+ scale?: number;
386
+ /** Custom icon URL (if undefined, adapter uses its default icon) */
387
+ iconUrl?: string;
388
+ }
389
+ interface CameraOptions {
390
+ /** Zoom level (map-library specific). Default: adapter decides. */
391
+ zoom?: number;
392
+ /** Pitch/tilt in degrees. Default: 0. */
393
+ pitch?: number;
394
+ /** Whether to animate the camera transition. Default: true. */
395
+ animate?: boolean;
396
+ /** Animation duration in ms. Default: 300. */
397
+ animationDurationMs?: number;
398
+ }
399
+ interface MapRendererAdapter {
400
+ /**
401
+ * Update the vehicle marker position and rotation.
402
+ * Called on every NavCore state update.
403
+ */
404
+ updateVehicle(coord: Coordinate, bearing: number, state: NavCoreState, style?: VehicleStyle): void;
405
+ /**
406
+ * Draw or update the route polyline on the map.
407
+ * Replaces any previously drawn route.
408
+ */
409
+ drawRoute(coords: Coordinate[], style?: RouteStyle): void;
410
+ /**
411
+ * Remove the route polyline and vehicle marker from the map.
412
+ */
413
+ clearRoute(): void;
414
+ /**
415
+ * Pan (and optionally rotate/tilt) the camera to follow the vehicle.
416
+ */
417
+ panCamera(coord: Coordinate, bearing: number, options?: CameraOptions): void;
418
+ /**
419
+ * Clean up all map layers, markers, and event listeners created by this adapter.
420
+ * Call when navigation ends or the component unmounts.
421
+ */
422
+ destroy(): void;
423
+ }
424
+
425
+ /**
426
+ * Engine constants — centralized tuning parameters.
427
+ * Extracted from packages/nav-sdk/src/shared/constants.ts
428
+ */
429
+ declare const BASE_CORRIDOR_METERS = 25;
430
+ declare const MAX_CORRIDOR_METERS = 60;
431
+ declare const SPEED_CORRIDOR_FACTOR = 1.2;
432
+ declare const GPS_ACCURACY_FACTOR = 0.5;
433
+ declare const MAX_SNAP_DISTANCE = 80;
434
+ declare const BEARING_MISMATCH_THRESHOLD = 90;
435
+ declare const BEARING_MISMATCH_PENALTY = 500;
436
+ declare const INERTIA_PENALTY = 200;
437
+ declare const INERTIA_SEGMENT_DIST = 5;
438
+ declare const SNAP_WINDOW_SIZE = 25;
439
+ declare const BEARING_SMOOTHING_ALPHA = 0.3;
440
+ declare const BEARING_MIN_SPEED_MPS = 1.5;
441
+ declare const BEARING_ALIGNMENT_THRESHOLD = 55;
442
+ declare const DR_MAX_AGE_MS = 5000;
443
+ declare const OFF_ROUTE_CONFIRM_MS = 2000;
444
+ declare const REJOIN_CONFIRM_MS = 1500;
445
+ declare const REJOIN_COOLDOWN_MS = 12000;
446
+ declare const STARTUP_GRACE_MS = 3000;
447
+ declare const DETOUR_COMMIT_MS = 4000;
448
+ declare const GPS_STALE_MS = 3000;
449
+ declare const GPS_AGE_CAP_SECONDS = 10;
450
+ declare const MANEUVER_TRIGGER_DIST = 25;
451
+ declare const BETA_CORRECTION = 0.15;
452
+ declare const LOOK_AHEAD_SECONDS = 3;
453
+ declare const MIN_LOOK_AHEAD_METERS = 20;
454
+ declare const MAX_LOOK_AHEAD_METERS = 100;
455
+ declare const ARRIVAL_THRESHOLD_METERS = 30;
456
+
457
+ declare const constants_ARRIVAL_THRESHOLD_METERS: typeof ARRIVAL_THRESHOLD_METERS;
458
+ declare const constants_BASE_CORRIDOR_METERS: typeof BASE_CORRIDOR_METERS;
459
+ declare const constants_BEARING_ALIGNMENT_THRESHOLD: typeof BEARING_ALIGNMENT_THRESHOLD;
460
+ declare const constants_BEARING_MIN_SPEED_MPS: typeof BEARING_MIN_SPEED_MPS;
461
+ declare const constants_BEARING_MISMATCH_PENALTY: typeof BEARING_MISMATCH_PENALTY;
462
+ declare const constants_BEARING_MISMATCH_THRESHOLD: typeof BEARING_MISMATCH_THRESHOLD;
463
+ declare const constants_BEARING_SMOOTHING_ALPHA: typeof BEARING_SMOOTHING_ALPHA;
464
+ declare const constants_BETA_CORRECTION: typeof BETA_CORRECTION;
465
+ declare const constants_DETOUR_COMMIT_MS: typeof DETOUR_COMMIT_MS;
466
+ declare const constants_DR_MAX_AGE_MS: typeof DR_MAX_AGE_MS;
467
+ declare const constants_GPS_ACCURACY_FACTOR: typeof GPS_ACCURACY_FACTOR;
468
+ declare const constants_GPS_AGE_CAP_SECONDS: typeof GPS_AGE_CAP_SECONDS;
469
+ declare const constants_GPS_STALE_MS: typeof GPS_STALE_MS;
470
+ declare const constants_INERTIA_PENALTY: typeof INERTIA_PENALTY;
471
+ declare const constants_INERTIA_SEGMENT_DIST: typeof INERTIA_SEGMENT_DIST;
472
+ declare const constants_LOOK_AHEAD_SECONDS: typeof LOOK_AHEAD_SECONDS;
473
+ declare const constants_MANEUVER_TRIGGER_DIST: typeof MANEUVER_TRIGGER_DIST;
474
+ declare const constants_MAX_CORRIDOR_METERS: typeof MAX_CORRIDOR_METERS;
475
+ declare const constants_MAX_LOOK_AHEAD_METERS: typeof MAX_LOOK_AHEAD_METERS;
476
+ declare const constants_MAX_SNAP_DISTANCE: typeof MAX_SNAP_DISTANCE;
477
+ declare const constants_MIN_LOOK_AHEAD_METERS: typeof MIN_LOOK_AHEAD_METERS;
478
+ declare const constants_OFF_ROUTE_CONFIRM_MS: typeof OFF_ROUTE_CONFIRM_MS;
479
+ declare const constants_REJOIN_CONFIRM_MS: typeof REJOIN_CONFIRM_MS;
480
+ declare const constants_REJOIN_COOLDOWN_MS: typeof REJOIN_COOLDOWN_MS;
481
+ declare const constants_SNAP_WINDOW_SIZE: typeof SNAP_WINDOW_SIZE;
482
+ declare const constants_SPEED_CORRIDOR_FACTOR: typeof SPEED_CORRIDOR_FACTOR;
483
+ declare const constants_STARTUP_GRACE_MS: typeof STARTUP_GRACE_MS;
484
+ declare namespace constants {
485
+ export { constants_ARRIVAL_THRESHOLD_METERS as ARRIVAL_THRESHOLD_METERS, constants_BASE_CORRIDOR_METERS as BASE_CORRIDOR_METERS, constants_BEARING_ALIGNMENT_THRESHOLD as BEARING_ALIGNMENT_THRESHOLD, constants_BEARING_MIN_SPEED_MPS as BEARING_MIN_SPEED_MPS, constants_BEARING_MISMATCH_PENALTY as BEARING_MISMATCH_PENALTY, constants_BEARING_MISMATCH_THRESHOLD as BEARING_MISMATCH_THRESHOLD, constants_BEARING_SMOOTHING_ALPHA as BEARING_SMOOTHING_ALPHA, constants_BETA_CORRECTION as BETA_CORRECTION, constants_DETOUR_COMMIT_MS as DETOUR_COMMIT_MS, constants_DR_MAX_AGE_MS as DR_MAX_AGE_MS, constants_GPS_ACCURACY_FACTOR as GPS_ACCURACY_FACTOR, constants_GPS_AGE_CAP_SECONDS as GPS_AGE_CAP_SECONDS, constants_GPS_STALE_MS as GPS_STALE_MS, constants_INERTIA_PENALTY as INERTIA_PENALTY, constants_INERTIA_SEGMENT_DIST as INERTIA_SEGMENT_DIST, constants_LOOK_AHEAD_SECONDS as LOOK_AHEAD_SECONDS, constants_MANEUVER_TRIGGER_DIST as MANEUVER_TRIGGER_DIST, constants_MAX_CORRIDOR_METERS as MAX_CORRIDOR_METERS, constants_MAX_LOOK_AHEAD_METERS as MAX_LOOK_AHEAD_METERS, constants_MAX_SNAP_DISTANCE as MAX_SNAP_DISTANCE, constants_MIN_LOOK_AHEAD_METERS as MIN_LOOK_AHEAD_METERS, constants_OFF_ROUTE_CONFIRM_MS as OFF_ROUTE_CONFIRM_MS, constants_REJOIN_CONFIRM_MS as REJOIN_CONFIRM_MS, constants_REJOIN_COOLDOWN_MS as REJOIN_COOLDOWN_MS, constants_SNAP_WINDOW_SIZE as SNAP_WINDOW_SIZE, constants_SPEED_CORRIDOR_FACTOR as SPEED_CORRIDOR_FACTOR, constants_STARTUP_GRACE_MS as STARTUP_GRACE_MS };
486
+ }
487
+
488
+ export { type BuildOptions, type CameraOptions, constants as Constants, Coordinate, CustomRouteBuilder, type CustomWaypoint, type DirectionsLeg, type DirectionsManeuver, type DirectionsOptions, type DirectionsProvider, type DirectionsResult, type DirectionsStep, type Kalman2DState, KalmanFilter2D, type MapRendererAdapter, type ORSConfig, type ORSProfile, type OSRMConfig, OSRMDirectionsProvider, OpenRouteServiceProvider, RouteSnapper, type RouteStyle, type SnapResult, type SnapperOptions, type ValhallaConfig, type ValhallaCostingModel, ValhallaDirectionsProvider, type VehicleStyle, type WaypointOptions, buildForwardCumulativeDistances, buildReverseCumulativeDistances, getBearingBetweenPoints, interpolatePoint, kalmanUpdate2D, normalizeAngle, projectPointOnSegment };