import { AnyRoutingDataProvider, AnyRoutingDataResponse, RouteSummary } from './data-providers'; import type { AnyRouting } from './libre-routing'; export type LngLatPosition = [number, number]; export type WaypointPosition = { lat: number; lng: number; }; export type Mode = 'default' | 'drag'; export type BaseEvent = { state: AnyRoutingState; eventName: keyof MessagePortEventMap; }; export type CalculationStartedEvent = BaseEvent & { waypoints: InternalWaypoint[]; recalculateOptions: RecalculateOptions; mode: Mode; }; export type CalculationErrorEvent = BaseEvent & { error: Error; recalculateOptions: RecalculateOptions; }; export type RoutesFoundEvent = BaseEvent & { waypoints: InternalWaypoint[]; data: R; mode: Mode; recalculateOptions: RecalculateOptions; }; export type RouteSelectedEvent = BaseEvent & { routeId: number; route: RouteSummary; }; export type WaypointsChangedEvent = BaseEvent & { waypoints: InternalWaypoint[]; }; export type WaypointGeocoded = BaseEvent & { waypoint: InternalWaypoint; }; export type LoadingChangedEvent = BaseEvent & { loading: boolean; }; export type StateUpdateSource = 'internal' | 'external'; export type StateUpdatedEvent = BaseEvent & { state: AnyRoutingState; source: StateUpdateSource; updatedProperties: Array>; }; export interface AnyRoutingEventsMap { calculationStarted: CalculationStartedEvent; calculationError: CalculationErrorEvent; routesFound: RoutesFoundEvent; routeSelected: RouteSelectedEvent; waypointsChanged: WaypointsChangedEvent; waypointGeocoded: WaypointGeocoded; loadingChanged: LoadingChangedEvent; stateUpdated: StateUpdatedEvent; } export type AnyRoutingEvents = keyof AnyRoutingEventsMap; export type InternalWaypointProperties = { index: number; isFirst: boolean; isLast: boolean; }; export type AnyRoutingState = { data: DataType | undefined; waypoints: InternalWaypoint[]; loading: boolean; selectedRouteId: number | undefined | null; mode: Mode; routesShapeGeojson?: AnyRoutingDataResponse['routesShapeGeojson']; }; export interface InternalWaypoint { index: number; position: WaypointPosition; originalPosition: WaypointPosition; properties: InternalWaypointProperties & Record; geocoded?: boolean; } export declare function isWaypointPositionEqual(posA: WaypointPosition, posB: WaypointPosition): boolean; export declare class InternalWaypointC { static fromWaypoint(waypoint: Waypoint, props: InternalWaypointProperties): InternalWaypoint; } export interface Waypoint { position: WaypointPosition; originalPosition?: WaypointPosition; properties?: Record; geocoded?: boolean; } export type PluginFactory = AnyRoutingPlugin | (new (...args: any[]) => AnyRoutingPlugin); export interface AnyRoutingGeocoder { geocode(waypoint: InternalWaypoint): Promise; } export type AnyRoutingOptions = { dataProvider: AnyRoutingDataProvider; geocoder?: AnyRoutingGeocoder | ((waypoint: InternalWaypoint) => Promise); plugins?: PluginFactory[]; uniqueKey?: string; waypointsSyncStrategy: 'none' | 'toPath' | 'geocodeFirst'; }; export interface AnyRoutingPlugin { onAdd(AnyRouting: AnyRouting): void; onRemove(AnyRouting: AnyRouting): void; } export interface RecalculateOptions { fitViewToData?: boolean; clearMap?: boolean; dropPendingRequests?: boolean; syncWaypoints?: boolean; }