import type { Floor, MapView, Model } from '@mappedin/mappedin-js'; import { Coordinate } from '@mappedin/mappedin-js'; import type { BlueDot } from '../blue-dot'; import type { ParsedBlueDotPosition } from '../types'; import { ReadonlyDeep } from 'type-fest'; import { ModelUpdateOptions, ModelUpdateState } from './types'; export declare class ModelManager { #private; dot?: Model; accuracyRing?: Model; headingCone?: Model; constructor(mapView: MapView, BlueDot: BlueDot); add: (position: ParsedBlueDotPosition) => void; /** * Gets the current position of the BlueDot. * @returns The current coordinate or undefined if the dot doesn't exist */ getPosition(): ReadonlyDeep | undefined; /** * Updates floor state for altitude syncing. * @param floor - The current floor */ updateFloor(floor: Floor | undefined): void; /** * Updates all models with a single call. Consolidates position, accuracy, heading, * and status changes into one synchronized update. * @param state - The target state for the models * @param options - Animation options * @param onModelPositionUpdate - Invoked whenever the dot's lat/lng changes. The * `isFinal` flag is `true` only when the position equals the target (immediate * updates and the last tween frame). It is `false` for every intermediate tween * frame, including the final frame emitted when a tween is interrupted before * reaching its target — that lat/lng is still partway from the previous * position, so consumers must pair it with the previous floor (not the target). */ update: (state: ModelUpdateState, options?: ModelUpdateOptions, onModelPositionUpdate?: (pos: { longitude: number; latitude: number; }, isFinal: boolean) => void) => void; remove: () => void; destroy: () => void; }