{"version":3,"file":"ngx-apple-mapkit.mjs","sources":["../../../projects/ngx-apple-mapkit/src/lib/apple-maps.service.ts","../../../projects/ngx-apple-mapkit/src/lib/services/geocoder/apple-maps-geocoder.service.ts","../../../projects/ngx-apple-mapkit/src/lib/services/search/apple-maps-search.service.ts","../../../projects/ngx-apple-mapkit/src/lib/apple-mapkit.component.ts","../../../projects/ngx-apple-mapkit/src/lib/apple-mapkit.component.html","../../../projects/ngx-apple-mapkit/src/lib/components/apple-mapkit-annotation/apple-mapkit-annotation.component.ts","../../../projects/ngx-apple-mapkit/src/lib/components/apple-mapkit-annotation/apple-mapkit-annotation.component.html","../../../projects/ngx-apple-mapkit/src/lib/apple-maps.module.ts","../../../projects/ngx-apple-mapkit/src/lib/mapkit.ts","../../../projects/ngx-apple-mapkit/src/public-api.ts","../../../projects/ngx-apple-mapkit/src/ngx-apple-mapkit.ts"],"sourcesContent":["import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {\n    CoordinatesInterface,\n    DistancesString,\n    MapConstructorOptions,\n    MapKitCompass,\n    MapKitGetCameraZoomRange,\n    MapKitInitOptions,\n    MapKitLoaded,\n    MapShowItemOptionsInterface,\n    MapTypeString,\n    PaddingInterface,\n    SchemeString,\n    ShowsScaleString,\n    SpanInterface\n} from \"./declarations\";\nimport {MapKit} from \"./mapkit\";\n\ndeclare global {\n    interface Window {\n        mapkit: any;\n    }\n}\n\n@Injectable({providedIn: 'root'})\nexport class AppleMapsService {\n    public isBrowser: boolean;\n    public maps: MapKit.Map[] = [];\n    public mapsQueue = [];\n    public initialized = 'STOPPED';\n    public annotations: {[s: number]: MapKit.Annotation[]} = {};\n    private options: any;\n    public location: any;\n    public region: any;\n    public center: any;\n\n    constructor(@Inject(PLATFORM_ID) private platformId: Object) {\n        this.isBrowser = isPlatformBrowser(this.platformId);\n    }\n\n    private static settingsLoadedTransform(settings = {}) {\n        const newSettings = {};\n        for (const item in settings) {\n            if (settings[item]) {\n                switch (item) {\n                    case 'center':\n                        newSettings[item] = new window.mapkit.Coordinate(settings[item].latitude, settings[item].longitude);\n                        break;\n                    case 'region':\n                        const regionCenter = new window.mapkit.Coordinate(settings[item].center.latitude, settings[item].center.longitude);\n                        if (settings[item].span) {\n                            const regionSpan = new window.mapkit.CoordinateSpan(settings[item].span.from, settings[item].span.to);\n                            newSettings[item] = new window.mapkit.CoordinateRegion(regionCenter, regionSpan);\n                            break;\n                        }\n                        newSettings[item] = new window.mapkit.CoordinateRegion(regionCenter);\n                        break;\n                    case 'padding':\n                        newSettings[item] = new window.mapkit.Padding(settings[item]);\n                        break;\n                    default:\n                        newSettings[item] = settings[item];\n                        break;\n                }\n            }\n        }\n        return newSettings;\n    }\n\n    /**\n     * @deprecated use initialize\n     */\n    public init(options: MapKitInitOptions, settings: MapConstructorOptions = {}, cb = (data: MapKitLoaded) => {\n    }) {\n        return this.initialize(options, settings, cb);\n    }\n\n    public initialize(options: MapKitInitOptions, settings: MapConstructorOptions = {}, cb = (data: MapKitLoaded) => {\n    }) {\n        if (!options.JWT || !this.isBrowser) {\n            return;\n        }\n        if (Object.keys(settings).length !== 0) {\n            this.mapsQueue.push({settings, cb});\n        }\n        if (this.initialized === 'STOPPED') {\n            this.initialized = 'PENDING';\n            this.options = options;\n            window.mapkit.init({\n                authorizationCallback: (done: (token: string) => void) => {\n                    done(options.JWT);\n                },\n                language: options.language\n            });\n            this.addMapInitOptionsListeners(options);\n        }\n        if (this.initialized === 'FINISHED') {\n            this.createMaps();\n        }\n    }\n\n    private createMaps() {\n        const maps = document.querySelectorAll('ngx-apple-mapkit');\n        maps.forEach(element => {\n            const mapContainer = element.childNodes[0].childNodes[0] as HTMLElement;\n            if (!mapContainer.innerHTML) {\n                this.createMap(mapContainer);\n            }\n        });\n    }\n\n    public createMap(element: HTMLElement) {\n        const options = this.mapsQueue.shift();\n        const index = this.maps.push(new window.mapkit.Map(element, AppleMapsService.settingsLoadedTransform(options.settings)));\n        const object: MapKitLoaded = {\n            key: index - 1,\n            map: this.maps[index - 1],\n            addEventListener: (type, listener, context) => {\n                if (!type || !listener) {\n                    throw new Error('Type and listener are required');\n                }\n                return this.maps[index - 1].addEventListener(type, <any>listener, context);\n            },\n            isRotationAvailable: () => {\n                return this.maps[index - 1].isRotationAvailable;\n            },\n            isRotationEnabled: () => {\n                return this.maps[index - 1].isRotationEnabled;\n            },\n            isScrollEnabled: () => {\n                return this.maps[index - 1].isScrollEnabled;\n            },\n            isZoomEnabled: () => {\n                return this.maps[index - 1].isZoomEnabled;\n            },\n            getCenter: (): CoordinatesInterface => {\n                const {latitude, longitude} = this.maps[index - 1].center;\n                return {latitude, longitude};\n            },\n            // setCenter: (latitude: number, longitude: number) => {\n            //   this.maps[index - 1].center = new window.mapkit.Coordinate(latitude, longitude);\n            // },\n            setCenterAnimated: (latitude: number, longitude: number, animate: boolean = true) => {\n                this.maps[index - 1].setCenterAnimated(new window.mapkit.Coordinate(latitude, longitude), animate);\n            },\n            getRegion: () => {\n                return this.maps[index - 1].region;\n            },\n            setRegionAnimated: (center: CoordinatesInterface, span: SpanInterface = null, animate: boolean = true) => {\n                const regionCenter = new window.mapkit.Coordinate(center.latitude, center.longitude);\n                if (span) {\n                    const regionSpan = new window.mapkit.CoordinateSpan(span.from, span.to);\n                    this.maps[index - 1].setRegionAnimated(new window.mapkit.CoordinateRegion(regionCenter, regionSpan), animate);\n                    return;\n                }\n                this.maps[index - 1].setRegionAnimated(new window.mapkit.CoordinateRegion(regionCenter), animate);\n            },\n            getRotation: (): number => {\n                return this.maps[index - 1].rotation;\n            },\n            setRotationAnimated: (degrees: number, animate: boolean = true): void => {\n                this.maps[index - 1].setRotationAnimated(degrees, animate);\n            },\n            // getVisibleMapRect: () => {\n            //   return this.maps[index - 1].visibleMapsRect;\n            // },      // setVisibleMapRectAnimated: () => {\n            // }\n            getCameraDistance: (): number => {\n                return this.maps[index - 1].cameraDistance;\n            },\n            setCameraDistanceAnimated: (distance: number, animate: boolean = true): void => {\n                this.maps[index - 1].setCameraDistanceAnimated(distance, animate);\n            },\n            getCameraZoomRange: (): MapKitGetCameraZoomRange => {\n                const {minCameraDistance, maxCameraDistance} = this.maps[index - 1].cameraZoomRange;\n                return {minCameraDistance, maxCameraDistance};\n            },\n            setCameraZoomRangeAnimated: (minCameraDistance, maxCameraDistance, animate: boolean = true): void => {\n                this.maps[index - 1].setCameraZoomRangeAnimated(new window.mapkit.CameraZoomRange(minCameraDistance, maxCameraDistance), animate);\n            },\n            getColorScheme: (): string => {\n                return this.maps[index - 1].colorScheme;\n            },\n            setColorScheme: (scheme: SchemeString = 'light') => {\n                this.maps[index - 1].colorScheme = scheme;\n            },\n            getDistances: (): DistancesString => {\n                return <any>this.maps[index - 1].distances;\n            },\n            setDistances: (distance: DistancesString) => {\n                this.maps[index - 1].distances = distance;\n            },\n            getMapType: () => {\n                return <any>this.maps[index - 1].mapType;\n            },\n            setMapType: (type: MapTypeString) => {\n                this.maps[index - 1].mapType = type;\n            },\n            getPadding: (): object => {\n                return this.maps[index - 1].padding;\n            },\n            setPadding: (padding: PaddingInterface) => {\n                this.maps[index - 1].padding = new window.mapkit.Padding(padding);\n            },\n            getShowsMapTypeControl: (): boolean => {\n                return this.maps[index - 1].showsMapTypeControl;\n            },\n            setShowsMapTypeControl: (value: boolean) => {\n                this.maps[index - 1].showsMapTypeControl = value;\n            },\n            getShowsZoomControl: (): boolean => {\n                return this.maps[index - 1].showsZoomControl;\n            },\n            setShowsZoomControl: (value: boolean) => {\n                this.maps[index - 1].showsZoomControl = value;\n            },\n            getShowsUserLocationControl: (): boolean => {\n                return this.maps[index - 1].showsUserLocationControl;\n            },\n            setShowsUserLocationControl: (value: boolean) => {\n                this.maps[index - 1].showsUserLocationControl = value;\n            },\n            getShowsPointsOfInterest: (): boolean => {\n                return this.maps[index - 1].showsPointsOfInterest;\n            },\n            setShowsPointsOfInterest: (value: boolean) => {\n                this.maps[index - 1].showsPointsOfInterest = value;\n            },\n            getShowsScale: (): ShowsScaleString => {\n                return <any>this.maps[index - 1].showsScale;\n            },\n            setShowsScale: (value: ShowsScaleString) => {\n                this.maps[index - 1].showsScale = value;\n            },\n            getTintColor: (): string => {\n                return this.maps[index - 1].tintColor;\n            },\n            setTintColor: (color: string) => {\n                this.maps[index - 1].tintColor = color;\n            },\n            showItems: (items, mapShowItemOptions: MapShowItemOptionsInterface = {}) => {\n                const passingOptions = {animate: options.animate || true};\n                if (mapShowItemOptions.span) {\n                    // @ts-ignore\n                    passingOptions.minimumSpan = new window.mapkit.CoordinateSpan(mapShowItemOptions.span.from, mapShowItemOptions.span.to);\n                }\n                if (mapShowItemOptions.padding) {\n                    // @ts-ignore\n                    passingOptions.padding = new window.mapkit.Padding(mapShowItemOptions.padding);\n                }\n                const passingItems = Array.isArray(items) ? items : [items];\n                this.maps[index - 1].showItems(passingItems, passingOptions);\n            },\n            getAnnotations: () => {\n                return new Promise(resolve => {\n                    if (this.annotations[index - 1]) {\n                        resolve(this.annotations[index - 1]);\n                    } else {\n                        setTimeout(() => {\n                            if (this.annotations[index - 1]) {\n                                resolve(this.annotations[index - 1]);\n                            } else {\n                                resolve([]);\n                            }\n                        }, 500);\n                    }\n                });\n                // return this.annotations[index - 1];\n            },\n            getSelectedAnnotations: () => {\n                return this.maps[index - 1].selectedAnnotation;\n            },\n            set showsCompass(value: MapKitCompass) {\n                this.maps[index - 1].showsCompass = value;\n            },\n            get showsCompass(): MapKitCompass {\n                return this.maps[index - 1].showsCompass;\n            },\n            get showsMapTypeControl(): boolean {\n                return this.maps[index - 1].showsMapTypeControl;\n            },\n            set showsMapTypeControl(value: boolean) {\n                this.maps[index - 1].showsMapTypeControl = value;\n            },\n            get showsZoomControl(): boolean {\n                return this.maps[index - 1].showsZoomControl;\n            },\n            set showsZoomControl(value: boolean) {\n                this.maps[index - 1].showsZoomControl = value;\n            },\n            get showsUserLocationControl(): boolean {\n                return this.maps[index - 1].showsUserLocationControl;\n            },\n            set showsUserLocationControl(value: boolean) {\n                this.maps[index - 1].showsUserLocationControl = value;\n            },\n            get showsPointsOfInterest(): boolean {\n                return this.maps[index - 1].showsPointsOfInterest;\n            },\n            set showsPointsOfInterest(value: boolean) {\n                this.maps[index - 1].showsPointsOfInterest = value;\n            },\n            get tintColor(): string {\n                return this.maps[index - 1].tintColor;\n            },\n            set tintColor(color: string) {\n                this.maps[index - 1].tintColor = color;\n            }\n        };\n        options.cb(object);\n    }\n\n    private addMapInitOptionsListeners(options) {\n        window.mapkit.addEventListener('configuration-change', (event) => {\n            if (options.callback) {\n                options.callback(event);\n            }\n            switch (event.status) {\n                case 'Initialized':\n                    // MapKit JS initialized and configured.\n                    this.initialized = 'FINISHED';\n                    this.createMaps();\n                    // this.createMap(settings);\n                    break;\n                case 'Refreshed':\n                    // MapKit JS configuration updated.\n                    break;\n            }\n        });\n        window.mapkit.addEventListener('error', (event) => {\n            this.initialized = 'STOPPED';\n            if (options.callback) {\n                options.callback(event);\n            }\n        });\n    }\n\n    public getUserLocation(timeout = 5000) {\n        return new Promise((resolve, reject) => {\n            navigator.geolocation.getCurrentPosition((result) => {\n                this.location = result;\n                resolve(result);\n            }, (err) => {\n                reject(err);\n            }, {timeout});\n        });\n    }\n\n    public optionsChanged(changes) {\n        changes.forEachItem((item) => {\n            if (item.previousValue !== item.currentValue) {\n                switch (item.key) {\n                    case 'language':\n                        window.mapkit.language = item.currentValue;\n                        break;\n                    case 'JWT':\n                        break;\n                    default:\n                        break;\n                }\n            }\n        });\n    }\n\n    public settingsChanged(changes: any, key: any) {\n        if (key >= 0) {\n            changes.forEachItem((item) => {\n                if (item.previousValue !== item.currentValue) {\n                    switch (item.key) {\n                        case 'colorScheme':\n                            this.maps[key][item.key] = item.currentValue;\n                            break;\n                        case 'center':\n                            this.maps[key].setCenterAnimated(new window.mapkit.Coordinate(item.currentValue.latitude, item.currentValue.longitude), true);\n                            break;\n                        case 'region':\n                            // tslint:disable-next-line:max-line-length\n                            const regionCenter = new window.mapkit.Coordinate(item.currentValue.center.latitude, item.currentValue.center.longitude);\n                            if (item.currentValue.span) {\n                                const regionSpan = new window.mapkit.CoordinateSpan(item.currentValue.span.from, item.currentValue.span.to);\n                                this.maps[key].setRegionAnimated(new window.mapkit.CoordinateRegion(regionCenter, regionSpan));\n                                break;\n                            }\n                            this.maps[key].setRegionAnimated(new window.mapkit.CoordinateRegion(regionCenter));\n                            break;\n                        case 'padding':\n                            this.maps[key] = new window.mapkit.Padding(item.currentValue);\n                            break;\n                        default:\n                            this.maps[key][item.key] = item.currentValue;\n                            break;\n                    }\n                }\n            });\n        }\n    }\n\n    public setAnnotation(annotation: any, key: any) {\n        if (!this.annotations[key]) {\n            this.annotations[key] = [];\n        }\n        if (!this.annotations[key].includes(annotation)) {\n            this.annotations[key].push(annotation);\n            this.maps[key].addAnnotation(annotation);\n        }\n    }\n}\n\n","import {Injectable} from '@angular/core';\nimport {MapKit} from \"../../mapkit\";\n\n@Injectable({providedIn: 'root'})\nexport class AppleMapsGeocoderService {\n    private geocoderInstance: MapKit.Geocoder;\n    constructor() {\n    }\n\n    /**\n     * @deprecated use initialize\n     */\n    public initGeocoder(options: any = {}) {\n        this.geocoderInstance = new window.mapkit.Geocoder(options);\n    }\n\n    public initialize(options: MapKit.GeocoderConstructorOptions = {}): MapKit.Geocoder {\n        this.geocoderInstance = new window.mapkit.Geocoder(options);\n        return this.geocoderInstance;\n    }\n\n    public reverseLookup(latitude: number, longitude: number, callback: (err: Error, data?: MapKit.GeocoderResponse) => void, options: MapKit.GeocoderLookupOptions = {}) {\n        if (!this.geocoderInstance) {\n            throw new Error(`Geocoder or API don't initialized`);\n        }\n        return this.geocoderInstance.reverseLookup(new window.mapkit.Coordinate(latitude, longitude), callback, options);\n    }\n\n    public reverseLookupPromised(latitude: number, longitude: number, options: MapKit.GeocoderLookupOptions = {}): Promise<MapKit.GeocoderResponse> {\n        if (!this.geocoderInstance) {\n            return Promise.reject(`Geocoder or API don't initialized`);\n        }\n        return new Promise<MapKit.GeocoderResponse>((resolve, reject) => {\n            this.geocoderInstance.reverseLookup(new window.mapkit.Coordinate(latitude, longitude), (err, result) => {\n                if (err) {\n                    reject(err);\n                } else {\n                    resolve(result);\n                }\n            }, options);\n        });\n    }\n\n}\n","import {Injectable} from '@angular/core';\nimport {MapKit} from \"../../mapkit\";\n\n\n@Injectable({providedIn: 'root'})\nexport class AppleMapsSearchService {\n    private searchInstance: MapKit.Search;\n\n    constructor() {\n    }\n\n    /**\n     * @deprecated use initialize\n     */\n    public initSearch(options: any = {}) {\n        this.searchInstance = new window.mapkit.Search(options);\n    }\n\n    public initialize(options: MapKit.SearchConstructorOptions = {}): MapKit.Search {\n        this.searchInstance = new window.mapkit.Search(options);\n        return this.searchInstance;\n    }\n\n    public search(query: string, callback: MapKit.SearchCallback, options: MapKit.SearchOptions) {\n        if (!this.searchInstance) {\n            throw new Error(`Search or API don't initialized`);\n        }\n        return this.searchInstance.search(query, callback, options);\n    }\n\n    public autocomplete(query: string, callback: MapKit.AutocompleteSearchCallback, options: MapKit.SearchAutocompleteOptions) {\n        if (!this.searchInstance) {\n            throw new Error(`Search or API don't initialized`);\n        }\n        return this.searchInstance.autocomplete(query, callback, options);\n    }\n\n    public searchPromised(query: string, options: MapKit.SearchOptions): Promise<MapKit.SearchResponse> {\n        if (!this.searchInstance) {\n            return Promise.reject(`Search or API don't initialized`);\n        }\n        return new Promise<MapKit.SearchResponse>((resolve, reject) => {\n            this.searchInstance.search(query, (error, data) => {\n                if (error) {\n                    reject(error);\n                } else {\n                    resolve(data);\n                }\n            }, options);\n        });\n    }\n\n    public autocompletePromised(query: string, options: MapKit.SearchAutocompleteOptions): Promise<MapKit.SearchAutocompleteResponse> {\n        if (!this.searchInstance) {\n            return Promise.reject(`Search or API don't initialized`);\n        }\n        return new Promise<MapKit.SearchAutocompleteResponse>((resolve, reject) => {\n            this.searchInstance.autocomplete(query, (error, data) => {\n                if (error) {\n                    reject(error);\n                } else {\n                    resolve(data);\n                }\n            }, options);\n        })\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    DoCheck,\n    EventEmitter,\n    Input,\n    KeyValueChanges,\n    KeyValueDiffers,\n    OnInit,\n    Output,\n    QueryList,\n    ViewContainerRef\n} from '@angular/core';\nimport {MapConstructorOptions, MapKitInitOptions, MapKitLoaded} from \"./declarations\";\nimport {BehaviorSubject} from \"rxjs\";\nimport {AppleMapsService} from \"./apple-maps.service\";\nimport {AppleMapkitAnnotationComponent} from \"./components/apple-mapkit-annotation/apple-mapkit-annotation.component\";\n\n@Component({\n    selector: 'ngx-apple-mapkit',\n    templateUrl: './apple-mapkit.component.html',\n    styleUrls: ['./apple-mapkit.component.css']\n})\nexport class AppleMapkitComponent implements DoCheck, OnInit, AfterViewInit {\n    @Input({required: true}) options: MapKitInitOptions;\n    @Input({required: true}) settings: MapConstructorOptions;\n    @Input() logging: boolean = false;\n    @Input() language: \"en\" | \"de\" | \"es\" | \"it\" |  \"fr\" | string;\n    @Output() onLoaded: EventEmitter<MapKitLoaded> = new EventEmitter<MapKitLoaded>();\n    private loaded: MapKitLoaded = null;\n    @ContentChildren('apple-mapkit-annotation', {descendants: true}) annotations: QueryList<AppleMapkitAnnotationComponent>;\n    // @ContentChildren(TemplateRef, {descendants: true}) template: QueryList<TemplateRef<any>>;\n    // private templates: QueryList<TemplateRef<any>>;\n    public defaultOptions = {language: 'en'};\n    // annotations = [];\n    public defaultSettings = {\n        colorScheme: window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',\n        isZoomEnabled: true,\n        mapType: 'standard',\n        showsZoomControl: true,\n        showsMapTypeControl: true\n    };\n    // tslint:disable-next-line:variable-name\n    private _options: any;\n    // tslint:disable-next-line:variable-name\n    private _settings: any;\n    private keyValue: number;\n    public keySource = new BehaviorSubject<number>(-1);\n    public key = this.keySource.asObservable();\n\n    constructor(private differs: KeyValueDiffers,\n                private appleMapsService: AppleMapsService,\n                private viewTemplateRef: ViewContainerRef,\n                private cdr: ChangeDetectorRef) {\n        this.settings = {};\n    }\n\n    private init() {\n        if (this.language && typeof this.language === \"string\") {\n            this.defaultOptions.language = this.language;\n        }\n        const settings = Object.assign({...this.defaultSettings, ...this.settings});\n        const options = Object.assign({...this.defaultOptions, ...this.options});\n        this.appleMapsService.init(options, settings, (data) => {\n            if (this.logging) {\n                console.log(\"[ngx-apple-mapkit] Init\", data);\n            }\n            if (!this.loaded) {\n                this.onLoaded.emit(data);\n                this.loaded = data;\n            }\n            this.keyValue = data.key;\n            this.keySource.next(data.key);\n        });\n    }\n\n    private optionsChanged(changes: KeyValueChanges<string, any>) {\n        this.appleMapsService.optionsChanged(changes);\n    }\n\n    private settingsChanged(changes: KeyValueChanges<string, any>) {\n        this.appleMapsService.settingsChanged(changes, this.keyValue);\n    }\n\n    // ngAfterContentInit(): void {\n    //     this.template.forEach(item => {\n    //         const template = this.viewTemplateRef.createEmbeddedView(item);\n    //         this.viewTemplateRef.remove(this.viewTemplateRef.indexOf(template));\n    //         template.detectChanges();\n    //         this.annotations.push(item);\n    //         this.viewTemplateRef.clear();\n    //     });\n    // }\n\n    ngOnInit() {\n        if (!this.options) {\n            throw new Error('You must provide JWT token');\n        } else {\n            this._options = this.differs.find(this.options).create();\n            this.init();\n        }\n        if (this.settings) {\n            this._settings = this.differs.find(this.settings).create();\n        }\n    }\n\n    ngDoCheck() {\n        if (this.options) {\n            const options = this._options.diff(this.options);\n            if (options) {\n                this.optionsChanged(options);\n            }\n        }\n        if (this.settings) {\n            const settings = this._settings.diff(this.settings);\n            if (settings) {\n                this.settingsChanged(settings);\n            }\n        }\n    }\n\n    ngAfterViewInit(): void {\n        this.cdr.detectChanges();\n    }\n}\n","<div class=\"ngx-apple-mapkit\">\n    <div class=\"ngx-apple-mapkit__map\"></div>\n</div>\n<ng-content></ng-content>\n<ng-container></ng-container>\n","import {\n    Component,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Input,\n    KeyValueChanges,\n    KeyValueDiffers,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2\n} from '@angular/core';\nimport {AnnotationConstructorOptionsInterface} from '../../declarations';\nimport {AppleMapsService} from \"../../apple-maps.service\";\nimport {AppleMapkitComponent} from \"../../apple-mapkit.component\";\nimport {MapKit} from \"../../mapkit\";\n\n@Component({\n    selector: 'ngx-apple-mapkit-annotation',\n    templateUrl: './apple-mapkit-annotation.component.html',\n    styleUrls: ['./apple-mapkit-annotation.component.css']\n})\nexport class AppleMapkitAnnotationComponent implements OnInit, DoCheck, OnDestroy {\n    @Input({required: true}) options: AnnotationConstructorOptionsInterface;\n    @Output() onSelect: EventEmitter<any> = new EventEmitter<any>();\n    @Output() onDeselect: EventEmitter<any> = new EventEmitter<any>();\n\n    @Input({required: true}) set latitude(value: number) {\n        if (this.annotation) {\n            this.annotation.coordinate = new window.mapkit.Coordinate(value, this._longitude);\n        }\n        this._latitude = value;\n    }\n\n    get latitude(): number {\n        return this._latitude;\n    }\n\n    @Input({required: true}) set longitude(value: number) {\n        if (this.annotation) {\n            this.annotation.coordinate = new window.mapkit.Coordinate(this._latitude, value);\n        }\n        this._longitude = value;\n    }\n\n    get longitude(): number {\n        return this._longitude;\n    }\n\n    private _latitude: number;\n    private _longitude: number;\n    private _options: any;\n    private annotation: MapKit.MarkerAnnotation;\n    private landmarkAnnotationCallout: any;\n    private annotationElement: any;\n    private calloutEnabled = true;\n    private parentKey: any;\n\n    constructor(private appleMapsService: AppleMapsService,\n                private differs: KeyValueDiffers,\n                private ref: ElementRef,\n                private renderer: Renderer2,\n                @Inject(AppleMapkitComponent) private parent: AppleMapkitComponent) {\n        // TODO: Funktion für Marker auch in unselectieren zustand bearbeiten zu können über ng-content\n        //       - https://stackoverflow.com/questions/74630351/content-project-elements-through-directive-and-ng-template-in-angular-13\n        //       - https://medium.com/@zeeshankhan8838/content-projection-through-dynamic-components-in-angular-e6465c728e20\n        //       - https://stackoverflow.com/questions/71590105/angular-component-ng-content-passing-template-with-dynamic-output-placeholders\n        //       - https://www.google.com/search?q=Angular+component+ng-content+passing+template+with+dynamic+output+placeholders\n\n    }\n\n    ngOnInit() {\n        this.annotationElement = this.renderer.createElement('div');\n        this.annotationElement.className = 'ngx-apple-mapkit__map-annotation';\n        this.renderer.appendChild(this.annotationElement, this.ref.nativeElement);\n        this.initAnnotation(this.options);\n        this.parent.key.subscribe(value => {\n            if (value >= 0) {\n                this.parentKey = value;\n\n                this.annotation.addEventListener(\"select\", (event) => {\n                    this.onSelect.emit(event.target);\n                });\n                this.annotation.addEventListener(\"deselect\", (event) => {\n                    this.onDeselect.emit(event.target);\n                });\n\n                this.appleMapsService.setAnnotation(this.annotation, value);\n            }\n        });\n    }\n\n    private initAnnotation(options = {}) {\n        const transformedOptions = this.transformOptions(options);\n        // @ts-ignore\n        if (!this.ref.nativeElement.children.length || (transformedOptions && transformedOptions.calloutEnabled === false)) {\n            this.options.calloutEnabled = false;\n        }\n        this._options = this.differs.find(this.options).create();\n        if (this.latitude && this.longitude) {\n            this.createAnnotation(this.latitude, this.longitude, transformedOptions || {});\n        } else {\n            throw new Error('Latitude and longitude params are required');\n        }\n    }\n\n    private transformOption(key, value) {\n        let transformed = null;\n        switch (key) {\n            case 'padding':\n                transformed = new window.mapkit.Padding(value);\n                break;\n            default:\n                transformed = value;\n        }\n        return transformed;\n    }\n\n    private transformOptions(options) {\n        const transformedOptions = {};\n        for (const item in options) {\n            if (options[item]) {\n                transformedOptions[item] = transformedOptions[item] = this.transformOption(item, options[item]);\n            }\n        }\n        return transformedOptions;\n    }\n\n    private createAnnotation(latitude: number, longitude: number, options: AnnotationConstructorOptionsInterface = {}) {\n        this.annotation = new window.mapkit.MarkerAnnotation(new window.mapkit.Coordinate(latitude, longitude), options);\n        // console.log('this ', this.annotation);\n        if (this.ref.nativeElement.children.length) {\n            this.landmarkAnnotationCallout = {\n                calloutElementForAnnotation: (annotation) => {\n                    return this.calloutForLandmarkAnnotation(annotation);\n                }\n            };\n            this.annotation.callout = this.landmarkAnnotationCallout;\n        }\n    }\n\n    private calloutForLandmarkAnnotation(annotation) {\n        return this.annotationElement;\n    }\n\n    ngDoCheck() {\n        if (this.options) {\n            const changes = this._options.diff(this.options);\n            if (changes) {\n                this.optionsChanged(changes);\n            }\n        }\n    }\n\n    private optionsChanged(changes: KeyValueChanges<string, any>) {\n        changes.forEachItem((item) => {\n            if (item.previousValue !== item.currentValue) {\n                this.annotation[item.key] = this.transformOption(item.key, item.currentValue);\n            }\n        });\n    }\n\n    ngOnDestroy(): void {\n        this.appleMapsService.maps[this.parentKey].removeAnnotation(this.annotation);\n    }\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {AppleMapkitComponent} from './apple-mapkit.component';\nimport {\n    AppleMapkitAnnotationComponent\n} from './components/apple-mapkit-annotation/apple-mapkit-annotation.component';\nimport {CommonModule} from '@angular/common';\n\n\n@NgModule({\n    declarations: [\n        AppleMapkitComponent,\n        AppleMapkitAnnotationComponent\n    ],\n    imports: [CommonModule],\n    exports: [\n        AppleMapkitComponent,\n        AppleMapkitAnnotationComponent\n    ],\n    bootstrap: [\n        AppleMapkitAnnotationComponent\n    ]\n})\nexport class AppleMapsModule {\n}\n","export namespace MapKit {\n\n    /**\n     * Initialize a mapkit object by providing an authorization callback and language.\n     */\n    export declare function init(options: MapKitInitOptions): void;\n\n    /**\n     * Subscribes a listener function to an event type.\n     *\n     * @param type The type of event (e.g., \"configuration-change\").\n     * @param listener The callback function to invoke. listener is passed an\n     * Event as its sole argument.\n     * @param thisObject An object set as the this keyword on the listener function.\n     */\n    export declare function addEventListener<T>(\n        type: InitializationEventType,\n        listener: (this: T, event: InitializationEvent) => void,\n        thisObject?: T\n    ): void;\n\n    /**\n     * Unsubscribes a listener function from an event type.\n     *\n     * @param type The type of event (e.g., \"configuration-change\").\n     * @param listener The callback function to remove.\n     * @param thisObject An object set as the this keyword on the listener function.\n     */\n    export declare function removeEventListener<T>(\n        type: InitializationEventType,\n        listener: (this: T, event: InitializationEvent) => void,\n        thisObject?: T\n    ): void;\n\n    /**\n     * A language ID indicating the selected language.\n     */\n    export declare let language: string;\n    /**\n     * The build string.\n     */\n    export declare const build: string;\n    /**\n     * The version of MapKit JS.\n     */\n    export declare const version: string;\n\n    /**\n     * Initialization options for MapKit JS.\n     */\n    export declare interface MapKitInitOptions {\n        /**\n         * A callback function that obtains a token.\n         *\n         * @param done A function that completes the MapKit JS token request. Called\n         * after creating a new token.\n         */\n        authorizationCallback: (done: (token: string) => void) => void;\n        /**\n         * An ID that indicates the preferred language in which to display map\n         * labels, controls, directions, and other text.\n         */\n        language?: string | undefined;\n    }\n\n    /**\n     * Constants indicating the visibility of different adaptive map features.\n     */\n    export declare const FeatureVisibility: {\n        /**\n         * A constant indicating that feature visibility adapts to the current map state.\n         */\n        readonly Adaptive: string;\n        /**\n         * A constant indicating that the feature is always hidden.\n         */\n        readonly Hidden: string;\n        /**\n         * A constant indicating that the feature is always visible.\n         */\n        readonly Visible: string;\n    };\n\n    export declare type InitializationEventType = \"configuration-change\" | \"error\";\n\n    export declare interface InitializationEvent {\n        status: \"Initialized\" | \"Refreshed\" | \"Unauthorized\" | \"Too Many Requests\";\n    }\n\n    /**\n     * An embeddable interactive map that you add to a webpage.\n     */\n    export declare class Map {\n        /**\n         * Creates a map that you embed on a webpage, and initializes its display\n         * properties and other options.\n         *\n         * @parent parent A DOM element or the ID of a DOM element to use as this\n         * map's container.\n         * @param parent\n         * @param options An object that contains options for initializing a map's\n         * features.\n         */\n        constructor(parent: string | Element, options?: MapConstructorOptions);\n\n        /**\n         * Adds an event listener to handle events triggered by user interactions\n         * and the framework.\n         *\n         * @param type The event type of interest (e.g., \"select\").\n         * @param listener The callback function to invoke. Listener is passed a\n         * Map event as its sole argument.\n         * @param thisObject An object to be set as the this keyword on the listener\n         * function.\n         */\n        addEventListener<T, K extends keyof MapEvents<this>>(\n            type: K,\n            listener: (this: T, event: MapEvents<this>[K]) => void,\n            thisObject?: T\n        ): void;\n\n        /**\n         * Removes an event listener.\n         */\n        removeEventListener<T, K extends keyof MapEvents<this>>(\n            type: K,\n            listener: (type: T, event: MapEvents<this>[K]) => void,\n            thisObject?: T\n        ): void;\n\n        /**\n         * Removes the map's element from the DOM and releases internal references to\n         * this map to free up memory.\n         */\n        destroy(): void;\n\n        /**\n         * The map's DOM element.\n         */\n        readonly element: Element;\n\n        // Accessing Interaction Properties\n\n        _impl: {[s: string]: any, zoomLevel: number};\n\n        /**\n         * A Boolean value that indicates if map rotation is available.\n         */\n        isRotationAvailable: boolean;\n        /**\n         * A Boolean value that determines whether the user may rotate the map using\n         * the compass control or a rotate gesture.\n         */\n        isRotationEnabled: boolean;\n        /**\n         * A Boolean value that determines whether the user may scroll the map with\n         * a pointing device or with gestures on a touchscreen.\n         */\n        isScrollEnabled: boolean;\n        /**\n         * A Boolean value that determines whether the user may zoom in and out on\n         * the map using pinch gestures or the zoom control.\n         */\n        isZoomEnabled: boolean;\n\n        // Manipulating the Visible Portion of the Map\n\n        /**\n         * The map coordinate at the center of the map view.\n         */\n        center: Coordinate;\n\n        /**\n         * Centers the map to the provided coordinate, with optional animation.\n         */\n        setCenterAnimated(coordinate: Coordinate, animate?: boolean): this;\n\n        /**\n         * The area currently displayed by the map.\n         */\n        region: CoordinateRegion;\n\n        /**\n         * Changes the map's region to the region provided, with optional animation.\n         */\n        setRegionAnimated(region: CoordinateRegion, animate?: boolean): this;\n\n        /**\n         * The map's rotation, in degrees.\n         */\n        rotation: number;\n\n        /**\n         * Changes the map's rotation setting to the number of degrees specified.\n         */\n        setRotationAnimated(degrees: number, animate?: boolean): this;\n\n        /**\n         * The visible area of the map defined in map units.\n         */\n        visibleMapRect: MapRect;\n\n        /**\n         * Changes the map's visible map rectangle to the specified map rectangle.\n         */\n        setVisibleMapRectAnimated(mapRect: MapRect, animate?: boolean): this;\n\n        /**\n         * Sets a constraint for the center of the map.\n         */\n        cameraBoundary: CameraBoundaryDescription;\n\n        /**\n         * Changes the map's camera boundary with an animated transition.\n         */\n        setCameraBoundaryAnimated(coordinateRegionOrMapRect: CoordinateRegion | MapRect, animate?: boolean): this;\n\n        /**\n         * Sets the altitude of the camera above the center of the map.\n         */\n        cameraDistance: number;\n\n        /**\n         * Changes the map's camera distance with an animated transition.\n         */\n        setCameraDistanceAnimated(distance: number, animate?: boolean): this;\n\n        /**\n         * Sets the minimum and maximum distance of the camera from the map center.\n         */\n        cameraZoomRange: CameraZoomRange;\n\n        /**\n         * Changes the map's camera zoom range with an animated transition.\n         */\n        setCameraZoomRangeAnimated(cameraZoomRange: CameraZoomRange, animate?: boolean): this;\n\n        // Configuring the Map's Appearance\n\n        /**\n         * Constants indicating the color scheme of the map.\n         */\n        static readonly ColorSchemes: {\n            /**\n             * A constant indicating a light color scheme.\n             */\n            readonly Light: string;\n            /**\n             * A constant indicating a dark color scheme.\n             */\n            readonly Dark: string;\n        };\n        /**\n         * Constants representing the type of map to display.\n         */\n        static readonly MapTypes: {\n            /**\n             * A street map that shows the position of all roads and some road names.\n             */\n            readonly Standard: string;\n            /**\n             * A street map where your data is emphasized over the underlying map details.\n             */\n            readonly MutedStandard: string;\n            /**\n             * A satellite image of the area with road and road name information\n             * layered on top.\n             */\n            readonly Hybrid: string;\n            /**\n             * A satellite image of the area.\n             */\n            readonly Satellite: string;\n        };\n        /**\n         * Constants indicating the system of measurement displayed on the map.\n         */\n        static readonly Distances: {\n            /**\n             * A constant indicating the measurement system is adaptive, and determined\n             * based on the map's language.\n             */\n            readonly Adaptive: string;\n            /**\n             * A constant indicating the measurement system is imperial.\n             */\n            readonly Imperial: string;\n            /**\n             * A constant indicating the measurement system is metric.\n             */\n            readonly Metric: string;\n        };\n        /**\n         * The map’s color scheme when displaying standard or muted standard map types.\n         */\n        colorScheme: string;\n        /**\n         * The system of measurement displayed on the map.\n         */\n        distances: string;\n        /**\n         * The type of data displayed by the map view.\n         */\n        mapType: string;\n        /**\n         * The map's inset margins.\n         */\n        padding: Padding;\n        /**\n         * A feature visibility setting that determines when the compass is visible.\n         */\n        showsCompass: string;\n        /**\n         * A Boolean value that determines whether to display a control that lets\n         * users choose the map type.\n         */\n        showsMapTypeControl: boolean;\n        /**\n         * A Boolean value that determines whether to display a control for zooming\n         * in and zooming out on a map.\n         */\n        showsZoomControl: boolean;\n        /**\n         * A Boolean value that determines whether the user location control is visible.\n         */\n        showsUserLocationControl: boolean;\n        /**\n         * The filter used to determine the points of interest shown on the map.\n         */\n        pointOfInterestFilter: PointOfInterestFilter;\n        /**\n         * A Boolean value that determines whether the map displays points of interest.\n         */\n        showsPointsOfInterest: boolean;\n        /**\n         * A feature visibility setting that determines when the map's scale is displayed.\n         */\n        showsScale: string;\n        /**\n         * The CSS color that is used to paint the user interface controls on the map.\n         */\n        tintColor: string;\n\n        /**\n         * Adjusts the maps visible region to bring the specified overlays and\n         * annotations into view.\n         */\n        showItems<I = Array<Annotation | Overlay>>(items: I, options?: MapShowItemsOptions): I;\n\n        // Annotating the Map\n\n        /**\n         * An array of all the annotations on the map.\n         */\n        annotations: Annotation[];\n        /**\n         * The annotation that is selected.\n         */\n        selectedAnnotation: Annotation | null;\n\n        /**\n         * A delegate method for modifying an annotation that represents a group of\n         * annotations that are combined into a cluster.\n         */\n        annotationForCluster(clusterAnnotation: Annotation): void;\n\n        /**\n         * Returns the list of annotation objects located in the specified map\n         * rectangle.\n         */\n        annotationsInMapRect(mapRect: MapRect): Annotation[];\n\n        /**\n         * Adds an annotation to the map.\n         */\n        addAnnotation(annotation: Annotation): Annotation;\n\n        /**\n         * Adds multiple annotations to the map.\n         */\n        addAnnotations(annotations: Annotation[]): Annotation[];\n\n        /**\n         * Removes an annotation from the map.\n         */\n        removeAnnotation(annotation: Annotation): Annotation;\n\n        /**\n         * Removes multiple annotations from the map.\n         */\n        removeAnnotations(annotations: Annotation[]): Annotation[];\n\n        // Adding and Removing Overlays\n\n        /**\n         * An array of all the map's overlays.\n         */\n        overlays: Overlay[];\n        /**\n         * The overlay on the map that is selected.\n         */\n        selectedOverlay: Overlay | null;\n\n        /**\n         * Returns an array of overlays at a given point on the webpage.\n         */\n        overlaysAtPoint(point: DOMPoint): Overlay[];\n\n        /**\n         * Adds an overlay to the map.\n         */\n        addOverlay(overlay: Overlay): Overlay;\n\n        /**\n         * Adds multiple overlays to the map.\n         */\n        addOverlays(overlays: Overlay[]): Overlay[];\n\n        /**\n         * Removes an overlay from the map.\n         */\n        removeOverlay(overlay: Overlay): Overlay;\n\n        /**\n         * Removes multiple overlays from the map.\n         */\n        removeOverlays(overlays: Overlay[]): Overlay[];\n\n        /**\n         * Returns the topmost overlay at a given point on the webpage.\n         */\n        topOverlayAtPoint(point: DOMPoint): Overlay | null;\n\n        // Adding and Removing Geographical Features\n\n        /**\n         * Adds a collection of annotations, overlays, or other item collections to the map.\n         */\n        addItems(\n            items: Array<Annotation | Overlay | ItemCollection> | ItemCollection\n        ): Array<Annotation | Overlay | ItemCollection> | ItemCollection;\n\n        /**\n         * Removes a collection of annotations, overlays, or other item collections from the map.\n         */\n        removeItems(\n            items: Array<Annotation | Overlay | ItemCollection> | ItemCollection\n        ): Array<Annotation | Overlay | ItemCollection> | ItemCollection;\n\n        // Adding and Removing Tile Overlays\n\n        /**\n         * An array of all the map's tile overlays.\n         */\n        tileOverlays: TileOverlay[];\n\n        /**\n         * Adds a tile overlay to the map.\n         */\n        addTileOverlay(tileOverlay: TileOverlay): TileOverlay;\n\n        /**\n         * Adds an array of tile overlays to the map.\n         */\n        addTileOverlays(tileOverlays: TileOverlay[]): TileOverlay[];\n\n        /**\n         * Removes a tile overlay from the map.\n         */\n        removeTileOverlay(tileOverlay: TileOverlay): TileOverlay;\n\n        /**\n         * Removes an array of tile overlays from the map.\n         */\n        removeTileOverlays(tileOverlays: TileOverlay[]): TileOverlay[];\n\n        // Displaying the User's Location\n\n        /**\n         * A Boolean value that determines whether to show the user's location on\n         * the map.\n         */\n        showsUserLocation: boolean;\n        /**\n         * A Boolean value that determines whether to center the map on the user's\n         * location.\n         */\n        tracksUserLocation: boolean;\n        /**\n         * An annotation that indicates the user's location on the map.\n         */\n        readonly userLocationAnnotation: Annotation | null;\n\n        // Converting Map Coordinates\n\n        /**\n         * Converts a coordinate on the map to a point in the page's coordinate system.\n         */\n        convertCoordinateToPointOnPage(coordinate: Coordinate): DOMPoint;\n\n        /**\n         * Converts a point in page coordinates to the corresponding map coordinate.\n         */\n        convertPointOnPageToCoordinate(point: DOMPoint): Coordinate;\n    }\n\n    /**\n     * An object that contains options for initializing a map's features.\n     */\n    export declare interface MapConstructorOptions {\n        /**\n         * The visible area of the map defined in map units.\n         */\n        visibleMapRect?: MapRect | undefined;\n        /**\n         * The area currently displayed by the map.\n         */\n        region?: CoordinateRegion | undefined;\n        /**\n         * The map coordinate at the center of the map view.\n         */\n        center?: Coordinate | undefined;\n        /**\n         * The map's rotation, in degrees.\n         */\n        rotation?: number | undefined;\n        /**\n         * The CSS color that is used to paint the user interface controls on the map.\n         */\n        tintColor?: string | undefined;\n        /**\n         * The map’s color scheme when displaying standard or muted standard map types.\n         */\n        colorScheme?: string | undefined;\n        /**\n         * The type of data displayed by the map view.\n         */\n        mapType?: string | undefined;\n        /**\n         * The map's inset margins.\n         */\n        padding?: Padding | undefined;\n        /**\n         * A Boolean value that determines whether to display a control that lets\n         * users choose the map type.\n         */\n        showsMapTypeControl?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether the user may rotate the map using\n         * the compass control or a rotate gesture.\n         */\n        isRotationEnabled?: boolean | undefined;\n        /**\n         * A feature visibility setting that determines when the compass is visible.\n         */\n        showsCompass?: string | undefined;\n        /**\n         * A Boolean value that determines whether the user may zoom in and out on\n         * the map using pinch gestures or the zoom control.\n         */\n        isZoomEnabled?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether to display a control for zooming\n         * in and zooming out on a map.\n         */\n        showsZoomControl?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether the user may scroll the map with\n         * a pointing device or gestures on a touchscreen.\n         */\n        isScrollEnabled?: boolean | undefined;\n        /**\n         * A feature visibility setting that determines when the map's scale is\n         * displayed.\n         */\n        showsScale?: string | undefined;\n\n        /**\n         * A delegate method for modifying cluster annotations.\n         */\n        annotationForCluster?(annotation: Annotation): void;\n\n        /**\n         * An array of all the annotations on the map.\n         */\n        annotations?: Annotation[] | undefined;\n        /**\n         * The annotation on the map that is selected.\n         */\n        selectedAnnotation?: Annotation | undefined;\n        /**\n         * An array of all the map's overlays.\n         */\n        overlays?: Overlay[] | undefined;\n        /**\n         * The overlay on the map that is selected.\n         */\n        selectedOverlay?: Overlay | undefined;\n        /**\n         * A Boolean value that determines whether the map displays points of interest.\n         */\n        showsPointsOfInterest?: boolean | undefined;\n        /*\n         * The filter used to determine the points of interest shown on the map.\n         */\n        pointOfInterestFilter?: PointOfInterestFilter | undefined;\n        /**\n         * A Boolean value that determines whether to show the user's location on\n         * the map.\n         */\n        showsUserLocation?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether to center the map on the user's\n         * location.\n         */\n        tracksUserLocation?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether the user location control is visible.\n         */\n        showsUserLocationControl?: boolean | undefined;\n    }\n\n    /**\n     * An object literal containing at least one property defining an area on the map.\n     */\n    export declare interface CameraBoundaryDescription {\n        /**\n         * A rectangular area on a two-dimensional map projection.\n         */\n        mapRect?: MapRect | undefined;\n        /**\n         * A rectangular area on a map, defined by coordinates of the rectangle's northeast and southwest corners.\n         */\n        region?: CoordinateRegion | undefined;\n    }\n\n    /**\n     * An array to which maps are automatically added and removed as they are\n     * initialized and destroyed.\n     */\n    export declare const maps: Map[];\n\n    export declare interface EventBase<T> {\n        type: string;\n        pointOnPage?: DOMPoint | null;\n        target: T;\n    }\n\n    // Map Display Events\n    export declare interface MapDisplayEvents<T> {\n        \"region-change-start\": EventBase<T>;\n        \"region-change-end\": EventBase<T>;\n        \"rotation-start\": EventBase<T>;\n        \"rotation-end\": EventBase<T>;\n        \"scroll-start\": EventBase<T>;\n        \"scroll-end\": EventBase<T>;\n        \"zoom-start\": EventBase<T>;\n        \"zoom-end\": EventBase<T>;\n        \"map-type-change\": EventBase<T>;\n    }\n\n    // Map Annotations Overlay Events\n    export declare interface MapAnnotationOverlayEvents<T> {\n        select: EventBase<T> & {annotation?: Annotation | undefined; overlay?: Overlay | undefined};\n        deselect: EventBase<T> & {annotation?: Annotation | undefined; overlay?: Overlay | undefined};\n        \"drag-start\": EventBase<T> & {annotation: Annotation};\n        dragging: EventBase<T> & {annotation: Annotation; coordinate: Coordinate};\n        \"drag-end\": EventBase<T> & {annotation: Annotation};\n    }\n\n    // User Location Events\n    export declare interface MapUserLocationEvents<T> {\n        \"user-location-change\": EventBase<T> & {coordinate: Coordinate; timestamp: Date};\n        \"user-location-error\": EventBase<T> & {code: number; message: string};\n    }\n\n    // Map Interaction Events\n    export declare interface MapInteractionEvents<T> {\n        \"single-tap\": EventBase<T>;\n        \"double-tap\": EventBase<T>;\n        \"long-press\": EventBase<T>;\n    }\n\n    // All map events\n    export declare type MapEvents<T> =\n        & MapDisplayEvents<T>\n        & MapAnnotationOverlayEvents<T>\n        & MapUserLocationEvents<T>\n        & MapInteractionEvents<T>;\n\n    /**\n     * Options that determine map parameters used when showing items.\n     */\n    export declare interface MapShowItemsOptions {\n        /**\n         * A Boolean value that determines whether the map is animated as the map\n         * region changes to show the items.\n         */\n        animate?: boolean | undefined;\n        /**\n         * The minimum longitudinal and latitudinal span the map should display.\n         */\n        padding?: Padding | undefined;\n        /**\n         * Spacing that is added around the computed map region when showing items.\n         */\n        minimumSpan?: CoordinateSpan | undefined;\n    }\n\n    /**\n     * A rectangular area on a two-dimensional map projection.\n     */\n    export declare class MapRect {\n        /**\n         * Initializes a MapRect object.\n         *\n         * @param x The origin point along the east-west axis of the map projection.\n         * @param y The origin point along the north-south axis of the map projection.\n         * @param width The distance (measured using map points) along the east-west\n         * axis of the map projection.\n         * @param height The distance (measured using map points) along the north-south\n         * axis of the map projection.\n         */\n        constructor(x: number, y: number, width: number, height: number);\n\n        /**\n         * The origin point of a rectangle.\n         */\n        origin: MapPoint;\n        /**\n         * The width and height of a rectangle, starting from the origin point.\n         */\n        size: MapSize;\n        /**\n         * The maximum x-axis value of a rectangle.\n         */\n        maxX: number;\n        /**\n         * The maximum y-axis value of a rectangle.\n         */\n        maxY: number;\n        /**\n         * The mid-point along the x-axis of a rectangle.\n         */\n        midX: number;\n        /**\n         * The mid-point along the y-axis of a rectangle.\n         */\n        midY: number;\n        /**\n         * The minimum x-axis value of a rectangle.\n         */\n        minX: number;\n        /**\n         * The minimum y-axis value of a rectangle.\n         */\n        minY: number;\n\n        /**\n         * Returns a copy of a map rectangle.\n         */\n        copy(): MapRect;\n\n        /**\n         * Indicates whether two map rectangles are equal.\n         *\n         * @param anotherRect The map rectangle to equate to.\n         */\n        equals(anotherRect: MapRect): boolean;\n\n        /**\n         * @param scaleFactor The scale factor.\n         * @param scaleCenter The center map point for scaling.\n         */\n        scale(scaleFactor: number, scaleCenter: MapPoint): MapRect;\n\n        /**\n         * Returns the region that corresponds to a map rectangle.\n         */\n        toCoordinateRegion(): CoordinateRegion;\n    }\n\n    /**\n     * A rectangular area on a map defined by a center coordinate and a span,\n     * expressed in degrees of latitude and longitude.\n     */\n    export declare class CoordinateRegion {\n        /**\n         * Creates A rectangular geographic region centered around a latitude and\n         * longitude coordinate.\n         *\n         * @param center Coordinate that is center point of the region.\n         * @param span A CoordinateSpan that represents the amount of map to\n         * display. The span also defines the current zoom level used by the map object.\n         */\n        constructor(center: Coordinate, span: CoordinateSpan);\n\n        /**\n         * The center point of the region.\n         */\n        center: Coordinate;\n        /**\n         * The horizontal and vertical span representing the amount of map to display.\n         */\n        span: CoordinateSpan;\n        /**\n         * The distance provided in meters or the longest distance derived from the center point to the region’s bounding box.\n         */\n        readonly radius: number;\n\n        /**\n         * Returns a copy of the calling coordinate region.\n         */\n        copy(): CoordinateRegion;\n\n        /**\n         * Returns a Boolean value indicating whether two regions are equal.\n         */\n        equals(anotherRegion: CoordinateRegion): boolean;\n\n        /**\n         * Returns the map rectangle that corresponds to the calling coordinate region.\n         */\n        toMapRect(): MapRect;\n\n        /**\n         * Returns the bounding region that corresponds to the calling coordinate region.\n         */\n        toBoundingRegion(): BoundingRegion;\n    }\n\n    /**\n     * An object representing the latitude and longitude for a point on the\n     * Earth's surface.\n     */\n    export declare class Coordinate {\n        /**\n         * Creates a coordinate object with the specified latitude and longitude.\n         */\n        constructor(latitude: number, longitude: number);\n\n        /**\n         * The latitude in degrees.\n         */\n        latitude: number;\n        /**\n         * The longitude in degrees.\n         */\n        longitude: number;\n\n        /**\n         * Returns a copy of the coordinate.\n         */\n        copy(): Coordinate;\n\n        /**\n         * Returns a Boolean value indicating whether two coordinates are equal.\n         */\n        equals(anotherCoordinate: Coordinate): boolean;\n\n        /**\n         * Returns the map point that corresponds to the coordinate.\n         */\n        toMapPoint(): MapPoint;\n\n        /**\n         * Returns the unwrapped map point that corresponds to the coordinate.\n         */\n        toUnwrappedMapPoint(): MapPoint;\n    }\n\n    /**\n     * The values that define content padding within the map view frame.\n     */\n    export declare class Padding {\n        /**\n         * Creates a padding object, and initializes its inset margin properties.\n         *\n         * @param top The amount of padding, in CSS pixels, to inset the map from\n         * the top edge.\n         * @param right The amount of padding, in CSS pixels, to inset the map from\n         * the right edge.\n         * @param bottom The amount of padding, in CSS pixels, to inset the map from\n         * the left edge.\n         * @param left The amount of padding, in CSS pixels, to inset the map from\n         * the left edge.\n         */\n        constructor(top?: number, right?: number, bottom?: number, left?: number);\n        /**\n         * Creates a padding object, and initializes its inset margin properties.\n         *\n         * @param options An object literal of inset margin properties\n         */\n        constructor(options?: PaddingConstructorOptions);\n\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the bottom edge.\n         */\n        bottom: number;\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the left edge.\n         */\n        left: number;\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the right edge.\n         */\n        right: number;\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the top edge.\n         */\n        top: number;\n    }\n\n    export declare interface PaddingConstructorOptions {\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the bottom edge.\n         */\n        bottom?: number | undefined;\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the left edge.\n         */\n        left?: number | undefined;\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the right edge.\n         */\n        right?: number | undefined;\n        /**\n         * The amount of padding, in CSS pixels, to inset the map from the top edge.\n         */\n        top?: number | undefined;\n    }\n\n    /**\n     * The base annotation object, used for creating custom annotations.\n     */\n    export declare class Annotation {\n        /**\n         * Creates a new annotation given its location and initialization options.\n         *\n         * @param coordinate The coordinate at which this annotation should appear.\n         * @param factory A factory function that returns a DOM element used to\n         * represent this annotation.\n         * @param options A hash of properties with which to initialize the annotation.\n         */\n        constructor(\n            coordinate: Coordinate,\n            factory: (coordinate: Coordinate, options: AnnotationConstructorOptions) => Element,\n            options?: AnnotationConstructorOptions\n        );\n\n        /**\n         * Adds an event listener to handle events triggered by user interactions\n         * with annotations.\n         *\n         * @param type The event type of interest (e.g., \"select\").\n         * @param listener The callback function to invoke. listener is passed an\n         * annotation event as its sole argument.\n         * @param thisObject An object to be set as the this keyword on the\n         * listener function.\n         */\n        addEventListener<T>(\n            type: AnnotationEventType,\n            listener: (this: T, event: EventBase<Map>) => void,\n            thisObject?: T\n        ): void;\n\n        /**\n         * Adds an event listener to handle events triggered by user interactions\n         * with annotations.\n         *\n         * @param type The event type of interest (e.g., \"select\").\n         * @param listener The callback function to remove.\n         * @param thisObject An object to be set as the this keyword on the listener\n         * function.\n         */\n        removeEventListener<T>(\n            type: AnnotationEventType,\n            listener: (this: T, event: EventBase<Map>) => void,\n            thisObject?: T\n        ): void;\n\n        /**\n         * Constant values used to provide a hint the map uses to prioritize\n         * displaying annotations.\n         */\n        static readonly DisplayPriority: {\n            readonly Low: number;\n            readonly High: number;\n            readonly Required: number;\n        };\n        /**\n         * Constants indicating how to interpret the collision frame rectangle of\n         * an annotation view.\n         */\n        static readonly CollisionMode: {\n            readonly Rectangle: string;\n            readonly Circle: string;\n            readonly None: string;\n        };\n        _impl: any;\n\n        /**\n         * The annotation's coordinate.\n         */\n        coordinate: Coordinate;\n        /**\n         * The map to which the annotation was added.\n         */\n        readonly map: Map | null;\n        /**\n         * The annotation's element in the DOM.\n         */\n        readonly element: Element;\n        /**\n         * Data that you define that is assigned to the annotation.\n         */\n        data: any;\n        /**\n         * The text to display in the annotation's callout.\n         */\n        title: string;\n        /**\n         * The text to display as a subtitle, on the second line of an annotation's\n         * callout.\n         */\n        subtitle: string;\n        /**\n         * An offset that changes the annotation's default anchor point.\n         */\n        anchorOffset: DOMPoint;\n        /**\n         * A CSS animation that runs when the annotation appears on the map.\n         */\n        appearanceAnimation: string;\n        /**\n         * A numeric hint the map uses to prioritize displaying annotations.\n         */\n        displayPriority: number;\n        /**\n         * Spacing added around the annotation when showing items.\n         */\n        padding: Padding;\n        /**\n         * The desired dimensions of the annotation, in CSS pixels.\n         */\n        size: {width: number; height: number};\n        /**\n         * A Boolean value that determines if the annotation is visible or hidden.\n         */\n        visible: boolean;\n        /**\n         * A Boolean value that determines if the annotation should be animated.\n         */\n        animates: boolean;\n        /**\n         * A Boolean value that determines whether the user can drag the annotation.\n         */\n        draggable: boolean;\n        /**\n         * A Boolean value that determines whether the annotation is selected.\n         */\n        selected: boolean;\n        /**\n         * A Boolean value that determines whether the annotation responds to user\n         * interaction.\n         */\n        enabled: boolean;\n        /**\n         * A delegate that enables you to customize the annotation's callout.\n         */\n        callout: AnnotationCalloutDelegate;\n        /**\n         * An offset that changes the annotation callout's default placement.\n         */\n        calloutOffset: DOMPoint;\n        /**\n         * A Boolean value that determines whether a callout should be shown.\n         */\n        calloutEnabled: boolean;\n        /**\n         * An array of annotations that are grouped together in a cluster.\n         */\n        memberAnnotations: Annotation[];\n        /**\n         * An identifer used for grouping annotations into the same cluster.\n         */\n        clusteringIdentifier: string | null;\n        /**\n         * A mode that determines the shape of the collision frame.\n         */\n        collisionMode: string;\n    }\n\n    /**\n     * An object that contains options for initializing annotation features.\n     */\n    export declare interface AnnotationConstructorOptions {\n        /**\n         * The text to display in the annotation's callout.\n         */\n        title?: string | undefined;\n        /**\n         * The text to display as a subtitle on the second line of an annotation's\n         * callout.\n         */\n        subtitle?: string | undefined;\n        /**\n         * Accessibility text for the annotation.\n         */\n        accessibilityLabel?: string | undefined;\n        /**\n         * Data you define that is assigned to the annotation.\n         */\n        data?: any;\n        /**\n         * A Boolean value that determines whether the user can drag the annotation.\n         */\n        draggable?: boolean | undefined;\n        /**\n         * A Boolean value that determines if the annotation is visible or hidden.\n         */\n        visible?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether the annotation responds to user\n         * interaction.\n         */\n        enabled?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether the annotation is selected.\n         */\n        selected?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether a callout should be shown.\n         */\n        calloutEnabled?: boolean | undefined;\n        /**\n         * A Boolean value that determines if the annotation should be animated.\n         */\n        animates?: boolean | undefined;\n        /**\n         * A CSS animation that runs when the annotation appears on the map.\n         */\n        appearanceAnimation?: string | undefined;\n        /**\n         * The offset in CSS pixels of the element from the bottom center.\n         */\n        anchorOffset?: DOMPoint | undefined;\n        /**\n         * The offset in CSS pixels of a callout from the top center of the element.\n         */\n        calloutOffset?: DOMPoint | undefined;\n        /**\n         * A delegate that enables you to customize the annotation's callout.\n         */\n        callout?: AnnotationCalloutDelegate | undefined;\n        /**\n         * The desired dimensions of the annotation, in CSS pixels.\n         */\n        size?: {width: number; height: number} | undefined;\n        /**\n         * A hint the map uses to prioritize displaying the annotation.\n         */\n        displayPriority?: number | undefined;\n        /**\n         * Spacing added around the annotation when showing items.\n         */\n        padding?: Padding | undefined;\n        /**\n         * A mode that determines the shape of the collision frame.\n         */\n        collisionMode?: string | undefined;\n        /**\n         * An identifer used for grouping annotations into the same cluster.\n         */\n        clusteringIdentifier?: string | undefined;\n    }\n\n    /**\n     * Methods for customizing the behavior and appearance of an annotation callout.\n     */\n    export declare interface AnnotationCalloutDelegate {\n        /**\n         * Returns a point determining the callout's anchor offset.\n         */\n        calloutAnchorOffsetForAnnotation?(annotation: Annotation, size: {width: number; height: number}): DOMPoint;\n\n        /**\n         * Determines whether the callout should appear for an annotation.\n         */\n        calloutShouldAppearForAnnotation?(annotation: Annotation): boolean;\n\n        /**\n         * Determines whether the callout should animate.\n         */\n        calloutShouldAnimateForAnnotation?(annotation: Annotation): boolean;\n\n        /**\n         * Returns a CSS animation used when the callout appears.\n         */\n        calloutAppearanceAnimationForAnnotation?(annotation: Annotation): string;\n\n        /**\n         * Returns custom content for the callout bubble.\n         */\n        calloutContentForAnnotation?(annotation: Annotation): Element;\n\n        /**\n         * Returns an element representing a custom callout.\n         */\n        calloutElementForAnnotation?(annotation: Annotation): Element;\n\n        /**\n         * Returns an element used as a custom accessory on the left side of the\n         * callout content area.\n         */\n        calloutLeftAccessoryForAnnotation?(annotation: Annotation): Element;\n\n        /**\n         * Returns an element used as a custom accessory on the right side of the\n         * callout content area.\n         */\n        calloutRightAccessoryForAnnotation?(annotation: Annotation): Element;\n    }\n\n    /**\n     * A customized annotation with image resources that you provide.\n     */\n    export declare class ImageAnnotation extends Annotation {\n        /**\n         * Initializes an image annotation with a URL to its image and a coordinate.\n         */\n        constructor(coordinate: Coordinate, options: ImageAnnotationConstructorOptions);\n    }\n\n    /**\n     * An object containing options for initializing an image annotation.\n     */\n    export declare interface ImageAnnotationConstructorOptions extends AnnotationConstructorOptions {\n        /**\n         * An object containing URLs for the image assets in multiple resolutions.\n         */\n        url: {\n            1: string;\n            2?: string | undefined;\n            3?: string | undefined;\n        };\n    }\n\n    /**\n     * Creates a marker annotation at the coordinate location with provided options.\n     */\n    export declare class MarkerAnnotation extends Annotation {\n        /**\n         * Creates a marker annotation at the coordinate location with provided options.\n         *\n         * @param coordinate The coordinate at which this annotation should appear.\n         * @param options A hash of properties with which to initialize the annotation.\n         */\n        constructor(coordinate: Coordinate, options?: MarkerAnnotationConstructorOptions);\n\n        /**\n         * A value that determines the behavior of the subtitle's visibility.\n         */\n        subtitleVisibility: string;\n        /**\n         * A value that determines the behavior of the title's visibility.\n         */\n        titleVisibility: string;\n        /**\n         * The background color of the balloon.\n         */\n        color: string;\n        /**\n         * The fill color of the glyph.\n         */\n        glyphColor: string;\n        /**\n         * The text to display in the marker balloon.\n         */\n        glyphText: string;\n        /**\n         * The image to display in the marker balloon.\n         */\n        glyphImage: any | null;\n        /**\n         * The image to display in the balloon when the marker is selected.\n         */\n        selectedGlyphImage: any;\n    }\n\n    /**\n     * An object containing the options that initialize a marker annotation.\n     */\n    export declare interface MarkerAnnotationConstructorOptions extends AnnotationConstructorOptions {\n        /**\n         * The background color of the balloon.\n         */\n        color?: string | undefined;\n        /**\n         * The fill color of the glyph.\n         */\n        glyphColor?: string | undefined;\n        /**\n         * The text to display in the marker balloon.\n         */\n        glyphText?: string | undefined;\n        /**\n         * The image to display in the marker balloon.\n         */\n        glyphImage?:\n            | {\n            1: string;\n            2?: string | undefined;\n            3?: string | undefined;\n        }\n            | undefined;\n        /**\n         * The image to display in the balloon when the marker is selected.\n         */\n        selectedGlyphImage?: any | undefined;\n        /**\n         * A value that determines the behavior of the subtitle's visibility.\n         */\n        subtitleVisibility?: string | undefined;\n        /**\n         * A value that determines the behavior of the title's visibility.\n         */\n        titleVisibility?: string | undefined;\n    }\n\n    export declare type AnnotationEventType = \"select\" | \"deselect\" | \"drag-start\" | \"dragging\" | \"drag-end\";\n\n    /**\n     * An abstract base object that defines the methods and attributes for map overlays.\n     */\n    export declare abstract class Overlay {\n        /**\n         * Starts listening for the specified type of event.\n         */\n        addEventListener(type: OverlayEventType, listener: (event: EventBase<this>) => void, thisObject?: any): void;\n\n        /**\n         * Stops listening for the specified type of event.\n         */\n        removeEventListener(type: OverlayEventType, listener: (event: EventBase<this>) => void, thisObject?: any): void;\n\n        /**\n         * Custom data to associate with this overlay.\n         */\n        data: any;\n\n        _impl: any;\n\n        /**\n         * A Boolean value that determines if an overlay is visible.\n         */\n        visible: boolean;\n        /**\n         * A Boolean value that determines whether the overlay responds to user interaction.\n         */\n        enabled: boolean;\n        /**\n         * A Boolean value that indicates whether the overlay is selected.\n         */\n        selected: boolean;\n        /**\n         * Style properties to apply to the overlay.\n         */\n        style: Style;\n        /**\n         * The map to which the overlay is added.\n         */\n        readonly map: Map | null;\n    }\n\n    /**\n     * A circular overlay with a configurable radius, centered on a specific\n     * geographic coordinate.\n     */\n    export declare class CircleOverlay extends Overlay {\n        /**\n         * Creates a circle overlay with a center coordinate, radius, and style options.\n         *\n         * @param coordinate The coordinate of the circle's center.\n         * @param radius The circle's radius, in meters.\n         * @param options An object literal of Overlay properties used to initialize\n         * the circle.\n         */\n        constructor(coordinate: Coordinate, radius: number, options?: StylesOverlayOptions);\n\n        /**\n         * The coordinate of the circle overlay's center.\n         */\n        coordinate: Coordinate;\n        /**\n         * The circle overlay's radius in meters.\n         */\n        radius: number;\n    }\n\n    /**\n     * An overlay made up of connected line segments that do not form a closed shape.\n     */\n    export declare class PolylineOverlay extends Overlay {\n        /**\n         * Creates a polyline overlay with coordinate points and style options.\n         *\n         * @param points The points in the polyline as an array of Coordinate\n         * @param options An object literal of style options with which to initialize\n         * the polyline.\n         */\n        constructor(points: Coordinate[], options?: StylesOverlayOptions);\n\n        /**\n         * An array of coordinate points that define the polyline overlay's shape.\n         */\n        points: Coordinate[];\n    }\n\n    /**\n     * An overlay made up of one or more points, forming a closed shape.\n     */\n    export declare class PolygonOverlay extends Overlay {\n        /**\n         * Creates a polygon overlay with an array of points and style options.\n         *\n         * @param points The points in the polygon as an array of arrays of\n         * Coordinate, or an array of Coordinate. If it's the latter,\n         * the array is auto-wrapped by an enclosing array.\n         * @param options An object literal of options with which to initialize the\n         * polygon.\n         */\n        constructor(points: Coordinate[], options?: StylesOverlayOptions);\n\n        /**\n         * One or more arrays of coordinates that define the polygon overlay shape.\n         */\n        points: Coordinate[];\n    }\n\n    export declare interface OverlayOptions {\n        /**\n         * Custom data to associate with this overlay.\n         */\n        data?: any | undefined;\n        /**\n         * A Boolean value that determines if an overlay is visible.\n         */\n        visible?: boolean | undefined;\n        /**\n         * A Boolean value that determines whether the overlay responds to user\n         * interaction.\n         */\n        enabled?: boolean | undefined;\n        /**\n         * A Boolean value that indicates whether the overlay is selected.\n         */\n        selected?: boolean | undefined;\n    }\n\n    /**\n     * An observable set of style attributes for an overlay.\n     */\n    export declare interface StylesOverlayOptions extends OverlayOptions {\n        style?: Style | undefined;\n    }\n\n    export declare  type OverlayEventType = \"select\" | \"deselect\";\n\n    /**\n     * The width and height of a map region.\n     */\n    export declare class CoordinateSpan {\n        /**\n         * Creates a new coordinate span object with the specified latitude and\n         * longitude deltas.\n         *\n         * @param latitudeDelta The amount of north-to-south distance (measured in\n         * degrees) to display on the map.\n         * @param longitudeDelta The amount of east-to-west distance (measured in\n         * degrees) to display for the map region.\n         */\n        constructor(latitudeDelta: number, longitudeDelta: number);\n\n        /**\n         * The amount of north-to-south distance (measured in degrees) to display on\n         * the map.\n         */\n        latitudeDelta: number;\n        /**\n         * The amount of east-to-west distance (measured in degrees) to display for\n         * the map region.\n         */\n        longitudeDelta: number;\n\n        /**\n         * Returns a copy of the coordinate span.\n         */\n        copy(): CoordinateSpan;\n\n        /**\n         * Returns a Boolean value that indicates whether two spans are equal.\n         */\n        equals(anotherSpan: CoordinateSpan): boolean;\n    }\n\n    /**\n     * An overlay that covers an area of the map with bitmap tiles.\n     */\n    export declare class TileOverlay {\n        /**\n         * Creates a tile overlay with a URL template and style options.\n         */\n        constructor(urlTemplate: string | URLTemplateCallback, options?: TileOverlayConstructorOptions);\n\n        /**\n         * A string, or callback function that returns a string, with a URL that\n         * provides the requested tile.\n         */\n        urlTemplate: string | URLTemplateCallback;\n\n        /**\n         * Reloads the tile overlay for the displayed map region with the latest\n         * data values.\n         */\n        reload(): void;\n\n        /**\n         * Minimum zoom level of the overlay.\n         */\n        minimumZ: number;\n        /**\n         * Maximum zoom level of the overlay.\n         */\n        maximumZ: number;\n        /**\n         * Opacity level of the overlay.\n         */\n        opacity: number;\n        /**\n         * Custom data used to populate the URL template.\n         */\n        data: any;\n    }\n\n    /**\n     * Attributes used when initializing a tile overlay, including minimum and\n     * maximum zoom, opacity, and custom data.\n     */\n    export declare interface TileOverlayConstructorOptions {\n        /**\n         * Minimum zoom level of the overlay.\n         */\n        minimumZ?: number | undefined;\n        /**\n         * Maximum zoom level of the overlay.\n         */\n        maximumZ?: number | undefined;\n        /**\n         * Opacity level of the overlay.\n         */\n        opacity?: number | undefined;\n        /**\n         * Custom data used to populate the URL template.\n         */\n        data?: any | undefined;\n    }\n\n    export declare type URLTemplateCallback = (x: number, y: number, z: number, scale: number, data: any) => string;\n\n    /**\n     * A set of observable attributes for overlays, including color and opacity of\n     * stroke and fill, and line styles.\n     */\n    export declare class Style {\n        /**\n         * Creates and initializes a style object.\n         */\n        constructor(options?: StyleConstructorOptions);\n\n        /**\n         * The fill color of a shape.\n         */\n        fillColor: string;\n        /**\n         * The opacity of the fill color.\n         */\n        fillOpacity: number;\n        /**\n         * A rule for determining whether a point is inside or outside a polygon.\n         */\n        fillRule: string;\n        /**\n         * The style to use when drawing line endings.\n         */\n        lineCap: string;\n        /**\n         * An array of line and gap lengths, used to create a dashed line.\n         */\n        lineDash: number[];\n        /**\n         * The number of CSS pixels to offset drawing of a line's dash pattern.\n         */\n        lineDashOffset: number;\n        /**\n         * The style to use when drawing joins between line segments.\n         */\n        lineJoin: string;\n        /**\n         * The width of a line's stroke, in CSS pixels.\n         */\n        lineWidth: number;\n        /**\n         * The stroke color of a line.\n         */\n        strokeColor: string;\n        /**\n         * The opacity of the stroke color.\n         */\n        strokeOpacity: number;\n        /**\n         * The unit distance along the line where a stroke begins.\n         */\n        strokeStart: number;\n        /**\n         * The unit distance along the line where a stroke ends.\n         */\n        strokeEnd: number;\n        /**\n         * The gradient to apply along the line.\n         */\n        lineGradient: LineGradient;\n    }\n\n    /**\n     * Initial values of options for applying style to overlays.\n     */\n    export declare interface StyleConstructorOptions {\n        /**\n         * The fill color of a shape.\n         */\n        fillColor?: string | undefined;\n        /**\n         * The opacity of the fill color.\n         */\n        fillOpacity?: number | undefined;\n        /**\n         * A rule for determining whether a point is inside or outside a polygon.\n         */\n        fillRule?: string | undefined;\n        /**\n         * The style to use when drawing line endings.\n         */\n        lineCap?: string | undefined;\n        /**\n         * An array of line and gap lengths, used to create a dashed line.\n         */\n        lineDash?: number[] | undefined;\n        /**\n         * The number of CSS pixels to offset drawing of a line's dash pattern.\n         */\n        lineDashOffset?: number | undefined;\n        /**\n         * The style to use when drawing joins between line segments.\n         */\n        lineJoin?: string | undefined;\n        /**\n         * The width of a line's stroke, in CSS pixels.\n         */\n        lineWidth?: number | undefined;\n        /**\n         * The stroke color of a line.\n         */\n        strokeColor?: string | undefined;\n        /**\n         * The opacity of the stroke color.\n         */\n        strokeOpacity?: number | undefined;\n        /**\n         * The unit distance along the line where a stroke begins.\n         */\n        strokeStart?: number | undefined;\n        /**\n         * The unit distance along the line where a stroke ends.\n         */\n        strokeEnd?: number | undefined;\n        /**\n         * The gradient to apply along the line.\n         */\n        lineGradient?: LineGradient | undefined;\n    }\n\n    /**\n     * A line that displays with a gradient along the length of the line.\n     */\n    export declare class LineGradient {\n        /**\n         * Creates a style that renders a gradient along the length of a line.\n         *\n         * @param options A JavaScript object with unit distance values as keys with matched CSS colors.\n         */\n        constructor(options?: any);\n\n        /**\n         * Adds a color transition point to the gradient.\n         *\n         * @param offset The unit distance at which to add the color.\n         * @param color The CSS color at the transition point.\n         */\n        addColorStop(offset: number, color: string): void;\n\n        /**\n         * Adds a color transition at the index point in the list of points within a polyline.\n         *\n         * @param index A valid index into a polyline’s points.\n         * @param color The CSS color at the index point.\n         */\n        addColorStopAtIndex(index: number, color: string): void;\n    }\n\n    /**\n     * A geocoder that converts human-readable addresses to geographic coordinates\n     * and vice versa.\n     */\n    export declare class Geocoder {\n        /**\n         * Initialize a geocoder object and set optional language and user location\n         * properties.\n         */\n        constructor(options?: GeocoderConstructorOptions);\n\n        /**\n         * Converts an address to geographic coordinates.\n         */\n        lookup(\n            place: string,\n            callback: (error: Error | null, data: GeocoderResponse) => void,\n            options?: GeocoderLookupOptions\n        ): number;\n\n        /**\n         * Converts a geographic coordinate to an address.\n         *\n         * @param coordinate\n         * @param callback This callback function is invoked with two arguments,\n         * error on failure and data on success.\n         * @param options\n         * reverse geocoder.\n         */\n        reverseLookup(\n            coordinate: Coordinate,\n            callback: (error: Error | null, data: GeocoderResponse) => void,\n            options?: Pick<GeocoderConstructorOptions, \"language\">\n        ): number;\n\n        /**\n         * Cancels the pending lookup or reverse lookup specified by its request ID.\n         *\n         * @param id The request ID of the lookup or reverseLookup to cancel.\n         */\n        cancel(id: number): boolean;\n\n        /**\n         * A Boolean value that indicates whether the geocoder should return results\n         * near the user's current location.\n         */\n        language: string;\n        /**\n         * A Boolean value that indicates whether the geocoder should return results\n         * near the user's current location.\n         */\n        getsUserLocation: string;\n    }\n\n    /**\n     * Initialization options for geocoder objects.\n     */\n    export declare interface GeocoderConstructorOptions {\n        /**\n         * A Boolean value that indicates whether the geocoder should return results\n         * near the user's current location.\n         */\n        language?: string | undefined;\n        /**\n         * A Boolean value that indicates whether the geocoder should return results\n         * near the user's current location.\n         */\n        getsUserLocation?: boolean | undefined;\n    }\n\n    /**\n     * Options that constrain geocoder lookup results to a specific area or set a\n     * language for results.\n     */\n    export declare interface GeocoderLookupOptions {\n        /**\n         * The language in which to display the lookup results.\n         */\n        language?: string | undefined;\n        /**\n         * Coordinates used to constrain the lookup results.\n         */\n        coordinate?: Coordinate | undefined;\n        /**\n         * A region in which to constrain lookup results.\n         */\n        region?: CoordinateRegion | undefined;\n        /**\n         * A list of countries in which to constrain the lookup results.\n         */\n        limitToCountries?: string | undefined;\n    }\n\n    /**\n     * The response from a geocoder lookup or reverse lookup.\n     */\n    export declare interface GeocoderResponse {\n        results: Place[];\n    }\n\n    /**\n     * A place object returned from a geocoder lookup or reverse lookup.\n     */\n    export declare interface Place {\n        /**\n         * The name of the place.\n         */\n        name: string;\n        /**\n         * The latitude and longitude for the place.\n         */\n        coordinate: Coordinate;\n        /**\n         * The address of the place, formatted using its country's conventions.\n         */\n        formattedAddress: string;\n        /**\n         * The geographic region associated with the place.\n         */\n        region: CoordinateRegion;\n        /**\n         * The country code associated with the place.\n         */\n        countryCode: string;\n        /**\n         * The category of the place.\n         */\n        pointOfInterestCategory?: PointOfInterestCategory | undefined;\n        /**\n         * The country of the place.\n         */\n        country?: string | undefined;\n        /**\n         * The state or province of the place.\n         */\n        administrativeArea?: string | undefined;\n        /**\n         * The short code for the state or area.\n         */\n        administrativeAreaCode?: string | undefined;\n        /**\n         * The city of the place.\n         */\n        locality?: string | undefined;\n        /**\n         * The postal code of the place.\n         */\n        postCode?: string | undefined;\n        /**\n         * The name of the area within the locality.\n         */\n        subLocality?: string | undefined;\n        /**\n         * The street name at the place.\n         */\n        thoroughfare?: string | undefined;\n        /**\n         * The number on the street at the place.\n         */\n        subThoroughfare?: string | undefined;\n        /**\n         * A combination of thoroughfare and subthoroughfare.\n         */\n        fullThoroughfare?: string | undefined;\n        /**\n         * Common names of the area in which the place resides.\n         */\n        areasOfInterest?: string[] | undefined;\n        /**\n         * Common names for the local area or neighborhood of the place.\n         */\n        dependentLocalities?: string[] | undefined;\n        /**\n         * The Apple Place ID\n         */\n        muid?: string | undefined;\n        /**\n         * URL of Place to maps.apple.com\n         */\n        _wpURL?: string | undefined;\n        /**\n         * Style Attributes\n         */\n        _styleAttributes?: string | undefined;\n        /**\n         * Timezone\n         */\n        timezone?: string | undefined;\n        /**\n         * Timezone: seconds from GMT\n         */\n        timezoneSecondsFromGmt?: number | undefined;\n        /**\n         * Provider Id\n         */\n        _providerId?: string | undefined;\n        /**\n         * Provider Item Id\n         */\n        _providerItemId?: string | undefined;\n        /**\n         * Telephone number\n         */\n        telephone?: string | undefined;\n        /**\n         * URLs\n         */\n        urls?: string[] | undefined;\n    }\n\n    /**\n     * An object that retrieves map-based search results for a user-entered query.\n     */\n    export declare class Search {\n        /**\n         * Creates a search object with optional initial values that you provide.\n         *\n         * @param options Options that you may provide when creating a search object.\n         */\n        constructor(options?: SearchConstructorOptions);\n\n        /**\n         * Retrieves the results of a search query.\n         *\n         * @param query A String or a SearchAutocompleteResult.\n         * @param callback A callback function or delegate object.\n         * @param options With the option hash, you can constrain the search to a\n         * desired area using the coordinate or region properties. If set, this\n         * option overrides the language provided to the search constructor.\n         * @returns a request ID (integer) that can be passed to cancel to abort a\n         * pending request.\n         */\n        search(\n            query: string,\n            callback: SearchDelegate | SearchCallback,\n            options?: SearchOptions\n        ): number;\n\n        /**\n         * Retrieves a list of autocomplete results for the specified search query.\n         *\n         * @param query A string that represents the user's search term in progress.\n         * @param callback A callback function or delegate object.\n         * @param options With the option hash, you can constrain\n         * the search to a desired area using the coordinate or region properties.\n         * A coordinate or region supplied here overrides the same property supplied\n         * to the `mapkit.Search` constructor. You can also override\n         * the language provided to the search constructor.\n         * For example, `{ language: ‘fr-CA‘ }` tells the server to send results\n         * localized to Canadian French.\n         */\n        autocomplete(\n            query: string,\n            callback: SearchDelegate | AutocompleteSearchCallback,\n            options?: SearchAutocompleteOptions\n        ): void;\n\n        /**\n         * Cancels a search request using its request ID.\n         *\n         * @param id The integer ID returned by a call to Search.search\n         * @return true if the server canceled the pending search request.\n         */\n        cancel(id: number): boolean;\n    }\n\n    /**\n     * Options that you may provide when creating a search object.\n     */\n    export declare interface SearchConstructorOptions {\n        /**\n         * A language ID that determines the language for the search result text.\n         */\n        language?: string | undefined;\n        /**\n         * A Boolean value that indicates whether to limit the search results to the\n         * user's current location, as determined by the web browser.\n         */\n        getsUserLocation?: boolean | undefined;\n        /**\n         * A map coordinate that provides a hint for the geographic area to search.\n         */\n        coordinate?: Coordinate | undefined;\n        /**\n         * A map region that provides a hint for the geographic area to search.\n         */\n        region?: CoordinateRegion | undefined;\n        /**\n         * A Boolean value that indicates whether the search autocomplete results should include queries.\n         */\n        includeQueries?: boolean | undefined;\n        /**\n         * A Boolean value that indicates whether the search results should include addresses.\n         */\n        includeAddresses?: boolean | undefined;\n        /**\n         * A string that constrains search results to within the provided countries.\n         */\n        limitToCountries?: string | undefined;\n        /**\n         * A Boolean value that indicates whether the search results should include points of interest.\n         */\n        includePointsOfInterest?: boolean | undefined;\n        /**\n         * A filter used to include or exclude point of interest categories.\n         */\n        pointOfInterestFilter?: PointOfInterestFilter | undefined;\n    }\n\n    /**\n     * Options you provide to constrain an autocomplete request.\n     */\n    export declare interface SearchAutocompleteOptions {\n        /**\n         * A language ID that determines the language for the search result text.\n         */\n        language?: string | undefined;\n        /**\n         * A map coordinate that provides a hint for the geographic area to search.\n         */\n        coordinate?: Coordinate | undefined;\n        /**\n         * A map region that provides a hint for the geographic area to search.\n         */\n        region?: CoordinateRegion | undefined;\n        /**\n         * A Boolean value that indicates whether the search results should include addresses.\n         */\n        includeAddresses?: boolean | undefined;\n        /**\n         * A Boolean value that indicates whether the search results should include points of interest.\n         */\n        includePointsOfInterest?: boolean | undefined;\n        /**\n         * A Boolean value that indicates whether the search results should include queries.\n         */\n        includeQueries?: boolean | undefined;\n        /**\n         * A filter used to include or exclude point of interest categories in search results.\n         */\n        pointOfInterestFilter?: PointOfInterestFilter | undefined;\n        /**\n         * A string that constrains search results to within the provided countries.\n         */\n        limitToCountries?: string | undefined;\n    }\n\n    // export declare type SearchCallback<Q> = (\n    //     error: Error | null,\n    //     data: {\n    //         /**\n    //          * The query corresponding to the results  The query corresponding to the\n    //          * results, if a SearchAutocompleteResult was not used to perform the search.\n    //          */\n    //         query: Q extends SearchAutocompleteResult ? undefined : string;\n    //         /**\n    //          * A region that encloses the search results. This property is not present\n    //          * if there are no results.\n    //          */\n    //         displayRegion?: CoordinateRegion | undefined;\n    //         /**\n    //          * An array of Place objects. The place array is empty if there is no match.\n    //          */\n    //         places: Place[];\n    //     }\n    // ) => void;\n\n    export declare type AutocompleteSearchCallback = (error: Error | null, data: SearchAutocompleteResponse) => void;\n    export declare type SearchCallback = (error: Error | null, data: SearchResponse) => void;\n\n    /**\n     * An object or callback function called when performing a search or autocomplete\n     * request.\n     */\n    export declare interface SearchDelegate {\n        /**\n         * Upon successful completion of a search request, this method returns a data\n         * object that is the same as the one passed to the search callback function.\n         */\n        searchDidComplete?(data: SearchResponse): void;\n\n        /**\n         * Called when the search request fails.\n         */\n        searchDidError?(error: Error): void;\n\n        /**\n         * When an autocomplete request successfully completes, this method returns\n         * a data array that is the same as the one passed to the autocomplete\n         * callback function.\n         */\n        autocompleteDidComplete?(data: SearchAutocompleteResponse): void;\n\n        /**\n         * Invoked when an autocomplete request fails.\n         */\n        autocompleteDidError?(error: Error): void;\n    }\n\n    /**\n     * Options you can provide when performing a search.\n     */\n    export declare interface SearchOptions {\n        /**\n         * A language ID that determines the language for the search result text.\n         */\n        language: string;\n        /**\n         * A map coordinate that provides a hint for the geographic area to search.\n         */\n        coordinate: Coordinate;\n        /**\n         * A map region that provides a hint for the geographic area to search.\n         */\n        region: CoordinateRegion;\n        /**\n         * A Boolean value that indicates whether the search results should include addresses.\n         */\n        includeAddresses?: boolean | undefined;\n        /**\n         * A Boolean value that indicates whether the search results should include points of interest.\n         */\n        includePointsOfInterest?: boolean | undefined;\n        /**\n         * A filter used to include or exclude point of interest categories in search results.\n         */\n        pointOfInterestFilter?: PointOfInterestFilter | undefined;\n    }\n\n    /**\n     * The result of a search, including the original search query, the bounding\n     * region, and a list of places that match the query.\n     */\n    export declare interface SearchResponse {\n        /**\n         * The query string used to perform the search.\n         */\n        query: string;\n        /**\n         * The region that encloses the places included in the search results.\n         */\n        boundingRegion: CoordinateRegion;\n        /**\n         * A list of places that match the search query.\n         */\n        places: Place[];\n    }\n\n    /**\n     * An object containing the response from an autocomplete request.\n     */\n    export declare interface SearchAutocompleteResponse {\n        /**\n         * The query string used to perform the autocomplete request.\n         */\n        query: string;\n        /**\n         * The results from an autocomplete request.\n         */\n        results: SearchAutocompleteResult[];\n    }\n\n    /**\n     * The result of an autocomplete query, including display lines and a coordinate.\n     */\n    export declare interface SearchAutocompleteResult {\n        /**\n         * Lines of text to display to the user in an autocomplete menu.\n         */\n        displayLines: string[];\n        /**\n         * The coordinate of the result, provided when it corresponds to a single place.\n         */\n        coordinate: Coordinate;\n    }\n\n    /**\n     * A filter used to determine the points of interest to include or exclude on a map or local search.\n     */\n    export declare class PointOfInterestFilter {\n        /**\n         * Creates a point of interest filter that includes categories from a list that you provide.\n         */\n        static including(categoryList: PointOfInterestCategory[]): PointOfInterestFilter;\n\n        /**\n         * Creates a point of interest filter that excludes categories from a list that you provide.\n         */\n        static excluding(categoryList: PointOfInterestCategory[]): PointOfInterestFilter;\n\n        /**\n         * A filter that includes all point of interest categories.\n         */\n        static readonly filterIncludingAllCategories: PointOfInterestFilter;\n        /**\n         * A filter that excludes all point of interest categories.\n         */\n        static readonly filterExcludingAllCategories: PointOfInterestFilter;\n\n        /**\n         * Returns a Boolean value that indicates whether the filter includes the provided point of interest category.\n         */\n        includesCategory(category: PointOfInterestCategory): boolean;\n\n        /**\n         * Returns a Boolean value that indicates whether the filter excludes the provided point of interest category.\n         */\n        excludesCategory(category: PointOfInterestCategory): boolean;\n    }\n\n    /**\n     * An object that fetches points of interest within a specified region.\n     */\n    export declare class PointsOfInterestSearch {\n        /**\n         * Creates a search object for fetching points of interest.\n         *\n         * @param options Options that you may provide when you create a points of interest search.\n         */\n        constructor(options?: PointsOfInterestSearchOptions);\n\n        /**\n         * The region that bounds the area in which to fetch points of interest.\n         */\n        region: CoordinateRegion;\n        /**\n         * The center point of the request represented as latitude and longitude.\n         */\n        center: Coordinate;\n        /**\n         * The distance provided in meters, or the longest distance derived from the center point to the region’s bounding box.\n         */\n        radius: number;\n        /**\n         * A filter that lists points of interest categories to include or exclude.\n         */\n        pointOfInterestFilter: PointOfInterestFilter;\n        /**\n         * The language ID to use when fetching points of interest.\n         */\n        language: string;\n        /**\n         * The maximum distance to use from the center of the region for fetching points of interest.\n         */\n        readonly MaxRadius: number;\n\n        /**\n         * Fetches points of interest.\n         *\n         * @param query A String or a SearchAutocompleteResult.\n         * @param callback A callback function or delegate object.\n         * @param options A PointsOfInterestSearchOptions object.\n         * @returns a request ID (integer) that can be passed to cancel to abort a\n         * pending request.\n         */\n        search(\n            callback: PointsOfInterestSearchDelegate | PointsOfInterestSearchCallback,\n            options?: PointsOfInterestSearchOptions\n        ): number;\n\n        /**\n         * Cancels a search request using its request ID.\n         *\n         * @param id The integer ID returned by a call to Search.search\n         * @return true if the server canceled the pending search request.\n         */\n        cancel(id: number): boolean;\n    }\n\n    /**\n     * Options that you may provide when creating a search object.\n     */\n    export declare interface PointsOfInterestSearchOptions {\n        /**\n         * A language ID that determines the language for the search result text.\n         */\n        language?: string | undefined;\n        /**\n         * The center point of the request represented as latitude and longitude.\n         */\n        center?: Coordinate | undefined;\n        /**\n         * The distance provided in meters, or the longest distance derived from the center point to the region’s bounding box.\n         */\n        radius?: number | undefined;\n        /**\n         * The region that bounds the area in which to fetch points of interest.\n         */\n        region?: CoordinateRegion | undefined;\n        /**\n         * A filter used to include or exclude point of interest categories.\n         */\n        pointOfInterestFilter?: PointOfInterestFilter | undefined;\n    }\n\n    export declare type PointsOfInterestSearchCallback = (error: Error | null, data: PointsOfInterestSearchResponse) => void;\n\n    /**\n     * An object or callback function that MapKit JS calls when fetching points of interest.\n     */\n    export declare interface PointsOfInterestSearchDelegate {\n        /**\n         * Tells the delegate that the search completed.\n         */\n        searchDidComplete?(data: PointsOfInterestSearchResponse): void;\n\n        /**\n         * Tells the delegate that the search failed due to an error.\n         */\n        searchDidError?(error: Error): void;\n    }\n\n    /**\n     * The result of a request used to fetch points of interest.\n     */\n    export declare interface PointsOfInterestSearchResponse {\n        /**\n         * The list of points of interest that match the request options.\n         */\n        places: Place[];\n    }\n\n    /**\n     * Point of interest categories.\n     */\n\n    export declare enum PointOfInterestCategory {\n        /**\n         * The point of interest category for airports.\n         */\n        Airport,\n        /**\n         * The point of interest category for amusement parks.\n         */\n        AmusementPark,\n        /**\n         * The point of interest category for aquariums.\n         */\n        Aquarium,\n        /**\n         * The point of interest category for ATM machines.\n         */\n        ATM,\n        /**\n         * The point of interest category for bakeries.\n         */\n        Bakery,\n        /**\n         * The point of interest category for banks.\n         */\n        Bank,\n        /**\n         * The point of interest category for beaches.\n         */\n        Beach,\n        /**\n         * The point of interest category for breweries.\n         */\n        Brewery,\n        /**\n         * The point of interest category for cafes.\n         */\n        Cafe,\n        /**\n         * The point of interest category for campgrounds.\n         */\n        Campground,\n        /**\n         * The point of interest category for car rentals.\n         */\n        CarRental,\n        /**\n         * The point of interest category for EV chargers.\n         */\n        EVCharger,\n        /**\n         * The point of interest category for fire stations.\n         */\n        FireStation,\n        /**\n         * The point of interest category for fitness centers.\n         */\n        FitnessCenter,\n        /**\n         * The point of interest category for food markets.\n         */\n        FoodMarket,\n        /**\n         * The point of interest category for gas stations.\n         */\n        GasStation,\n        /**\n         * The point of interest category for hospitals.\n         */\n        Hospital,\n        /**\n         * The point of interest category for hotels.\n         */\n        Hotel,\n        /**\n         * The point of interest category for laundries.\n         */\n        Laundry,\n        /**\n         * The point of interest category for libraries.\n         */\n        Library,\n        /**\n         * The point of interest category for marinas.\n         */\n        Marina,\n        /**\n         * The point of interest category for movie theaters.\n         */\n        MovieTheater,\n        /**\n         * The point of interest category for museums.\n         */\n        Museum,\n        /**\n         * The point of interest category for national parks.\n         */\n        NationalPark,\n        /**\n         * The point of interest category for nightlife.\n         */\n        Nightlife,\n        /**\n         * The point of interest category for parks\n         */\n        Park,\n        /**\n         * The point of interest category for parking locations.\n         */\n        Parking,\n        /**\n         * The point of interest category for pharmacies.\n         */\n        Pharmacy,\n        /**\n         * The point of interest category for police.\n         */\n        Police,\n        /**\n         * The point of interest category for post offices.\n         */\n        PostOffice,\n        /**\n         * The point of interest category for locations of public transportation.\n         */\n        PublicTransport,\n        /**\n         * The point of interest category for restaurants.\n         */\n        Restaurant,\n        /**\n         * The point of interest category for restrooms.\n         */\n        Restroom,\n        /**\n         * The point of interest category for schools.\n         */\n        School,\n        /**\n         * The point of interest category for stadiums.\n         */\n        Stadium,\n        /**\n         * The point of interest category for stores.\n         */\n        Store,\n        /**\n         * The point of interest category for theaters.\n         */\n        Theater,\n        /**\n         * The point of interest category for universities.\n         */\n        University,\n        /**\n         * The point of interest category for wineries.\n         */\n        Winery,\n        /**\n         * The point of interest category for zoos.\n         */\n        Zoo,\n    }\n\n    /**\n     * Creates a directions object with options that you may provide.\n     */\n    export declare class Directions {\n        /**\n         * Creates a directions object with options that you may provide.\n         *\n         * This parameter is optional.\n         * @param options\n         */\n        constructor(options?: DirectionsConstructorOptions);\n\n        /**\n         * Retrieves estimated arrival times to up to 10 destinations from a single starting point.\n         *\n         * @param request An EtaRequestOptions object that specifies details for the server to provide estimated arrival times at one or more destinations.\n         * @param callback A callback function that receives the estimated time response object, returned asynchronously.\n         * @return A request ID, which you can pass to cancel to abort a pending request.\n         */\n        eta(request: EtaRequestOptions, callback: (error: Error | null, data: EtaResponse) => void): number;\n\n        /**\n         * Retrieves directions and estimated travel time for the specified start\n         * and end points.\n         *\n         * @param request DirectionsRequest object that specifies details for the\n         * directions you want to retrieve.\n         * @param callback A callback function that receives the directions,\n         * returned asynchronously.\n         * @return A request ID, which you can pass to cancel to abort a pending request.\n         */\n        route(request: DirectionsRequest, callback: (error: Error | null, data: DirectionsResponse) => void): number;\n\n        /**\n         * Cancels a previous request for route directions.\n         *\n         * @param id The ID returned by a call to route.\n         */\n        cancel(id: number): boolean;\n    }\n\n    export declare namespace Directions {\n        /**\n         * The modes of transportation.\n         */\n        enum Transport {\n            /**\n             * A constant identifying the mode of transportation as driving.\n             */\n            Automobile,\n            /**\n             * A constant identifying the mode of transportation as walking.\n             */\n            Walking,\n        }\n    }\n\n    /**\n     * Options that you may provide when creating a directions object.\n     */\n    export declare interface DirectionsConstructorOptions {\n        /**\n         * A language ID that determines the language for route information.\n         */\n        language?: string | undefined;\n    }\n\n    /**\n     * The options you may provide for requesting estimated arrival times.\n     */\n    export declare interface EtaRequestOptions {\n        /**\n         * The starting point for estimated arrival time requests.\n         */\n        origin: Coordinate;\n        /**\n         * The time of departure used in an estimated arrival time request.\n         */\n        destinations: Coordinate[];\n        /**\n         * An array of coordinates that represent end points for estimated arrival time requests.\n         */\n        transportType: Directions.Transport;\n        /**\n         * The mode of transportation the server uses when estimating arrival times.\n         */\n        departureDate: Date;\n    }\n\n    /**\n     * The estimated arrival times for a set of destinations.\n     */\n    export declare interface EtaResponse {\n        /**\n         * The request object associated with the estimated time of arrival response.\n         */\n        request: EtaRequestOptions;\n        /**\n         * An array of estimated arrival times.\n         */\n        etas: EtaResult[];\n    }\n\n    /**\n     * The mode of transportation, distance, and travel time estimates for a single destination.\n     */\n    export declare interface EtaResult {\n        /**\n         * The mode of transportation used to estimate the arrival time.\n         */\n        transportType: Directions.Transport;\n        /**\n         * The route distance in meters.\n         */\n        distance: number;\n        /**\n         * The estimated travel time in seconds, including estimated delays due to traffic.\n         */\n        expectedTravelTime: number;\n        /**\n         * The estimated travel time in seconds, excluding estimated delays for traffic.\n         */\n        staticTravelTime: number;\n    }\n\n    /**\n     * The requested start and end points for a route, as well as the planned mode of transportation.\n     */\n    export declare interface DirectionsRequest {\n        /**\n         * The start point for routing directions.\n         */\n        origin: string | Coordinate | Place;\n        /**\n         * The end point for routing directions.\n         */\n        destination: string | Coordinate | Place;\n        /**\n         * The arrival date for the trip.\n         */\n        arrivalDate?: Date | undefined;\n        /**\n         * The departure date for the trip.\n         */\n        departureDate?: Date | undefined;\n        /**\n         * The mode of transportation to which directions should apply.\n         */\n        transportType?: Directions.Transport | undefined;\n        /**\n         * A Boolean value that indicates whether the server should return multiple\n         * routes when they are available.\n         */\n        requestsAlternateRoutes?: boolean | undefined;\n    }\n\n    /**\n     * The directions and estimated travel time returned for a route.\n     */\n    export declare interface DirectionsResponse {\n        request: any;\n        routes: Route[];\n    }\n\n    /**\n     * Information about a route, including step-by-step instructions, distance,\n     * and estimated travel time.\n     */\n    export declare interface Route {\n        /**\n         * An instance of a polyline overlay that represents the path of a route.\n         */\n        polyline: PolylineOverlay;\n        /**\n         * An array of coordinate objects representing the path of the route.\n         * @deprecated\n         */\n        path: Coordinate[];\n        /**\n         * An array of steps that comprise the overall route.\n         */\n        steps: RouteStep[];\n        /**\n         * The name assigned to the route.\n         */\n        name: string;\n        /**\n         * The route distance in meters.\n         */\n        distance: number;\n        /**\n         * The expected travel time in seconds.\n         */\n        expectedTravelTime: number;\n        /**\n         * The overall route transport type.\n         */\n        transportType: Directions.Transport;\n    }\n\n    /**\n     * A single route between a requested start and end point.\n     */\n    export declare interface RouteStep {\n        /**\n         * An array of coordinate objects representing the path of the route segment.\n         */\n        path: Coordinate[];\n        /**\n         * The written instructions for following the path represented by the step.\n         */\n        instructions: string;\n        /**\n         * The step distance in meters.\n         */\n        distance: number;\n        /**\n         * The transport type of the step.\n         */\n        transportType: Directions.Transport;\n    }\n\n    /**\n     * A location on a map when the Earth's surface is projected onto a\n     * two-dimensional surface.\n     */\n    export declare class MapPoint {\n        /**\n         * Initializes a MapPoint object.\n         *\n         * @param x The point along the east-west axis of the map projection.\n         * @param  The point along the north-south axis of the map projection.\n         */\n        constructor(x: number, y: number);\n\n        /**\n         * The location of the point along the x-axis of the map.\n         */\n        x: number;\n        /**\n         * The location of the point along the y-axis of the map.\n         */\n        y: number;\n\n        /**\n         * Returns a copy of a map point.\n         */\n        copy(): MapPoint;\n\n        /**\n         * Indicates whether two map points are equal.\n         *\n         * @param anotherPoint A map point to use for comparison.\n         */\n        equals(anotherPoint: MapPoint): boolean;\n\n        /**\n         * Returns a coordinate containing the latitude and longitude corresponding\n         * to a map point.\n         */\n        toCoordinate(): Coordinate;\n    }\n\n    /**\n     * A pair of values in map units that define the width and height of a\n     * projected coordinate span.\n     */\n    export declare class MapSize {\n        /**\n         * Initializes a MapSize object.\n         *\n         * @param width The distance (measured using map points) along the east-west\n         * axis of the map projection.\n         * @param height The distance (measured using map points) along the\n         * north-south axis of the map projection.\n         */\n        constructor(width: number, height: number);\n\n        /**\n         * The height value, in map point units.\n         */\n        height: number;\n        /**\n         * The width value, in map point units.\n         */\n        width: number;\n\n        /**\n         * Returns a copy of a map size.\n         */\n        copy(): MapSize;\n\n        /**\n         * Indicates whether two map sizes are equal.\n         *\n         * @param anotherSize The map size to equate to.\n         */\n        equals(anotherSize: MapSize): boolean;\n    }\n\n    /**\n     * A rectangular area on a map, defined by coordinates of the rectangle's\n     * northeast and southwest corners.\n     */\n    export declare class BoundingRegion {\n        /**\n         * Creates a rectangular bounding region defined by the latitude and\n         * longitude coordinates of the rectangle's northeast and southwest corners.\n         *\n         * @param northLatitude The north latitude of the bounding region.\n         * @param eastLongitude The east longitude of the bounding region.\n         * @param southLatitude The south latitude of the bounding region.\n         * @param westLongitude The west longitude of the bounding region.\n         */\n        constructor(northLatitude: number, eastLongitude: number, southLatitude: number, westLongitude: number);\n\n        /**\n         * The east longitude of the bounding region.\n         */\n        eastLongitude: number;\n        /**\n         * The north latitude of the bounding region.\n         */\n        northLatitude: number;\n        /**\n         * The south latitude of the bounding region.\n         */\n        southLatitude: number;\n        /**\n         * The west longitude of the bounding region.\n         */\n        westLongitude: number;\n\n        /**\n         * Returns a copy of the calling bounding region.\n         */\n        copy(): BoundingRegion;\n\n        /**\n         * Returns the coordinate region that corresponds to the calling bounding region.\n         */\n        toCoordinateRegion(): CoordinateRegion;\n    }\n\n    /**\n     * A minimum and maximum camera distance as meters from the center of the map.\n     */\n    export declare class CameraZoomRange {\n        /**\n         * Describes the minimum and maximum camera distance in meters.\n         */\n        constructor(minCameraDistance: CameraZoomRangeConstructorOptions | number, maxCameraDistance?: number);\n\n        /**\n         * The minimum allowed distance of the camera from the center of the map in meters.\n         */\n        minCameraDistance: number;\n        /**\n         * The maximum allowed distance of the camera from the center of the map in meters.\n         */\n        maxCameraDistance: number;\n    }\n\n    /**\n     * Initialization options for the camera zoom range.\n     */\n    export declare interface CameraZoomRangeConstructorOptions {\n        /**\n         * The minimum allowed distance of the camera from the center of the map in meters.\n         */\n        minCameraDistance?: number | undefined;\n        /**\n         * The maximum allowed distance of the camera from the center of the map in meters.\n         */\n        maxCameraDistance?: number | undefined;\n    }\n\n    /**\n     * @param data The original GeoJSON data, which may be a URL to a GeoJSON file,\n     * or a GeoJSON object.\n     * @param callback A callback function that is required if you provide a URL\n     * for the data parameter, and optional otherwise.\n     */\n    export declare function importGeoJSON(\n        data: string | object,\n        callback?: GeoJSONDelegate | ImportGeoJSONCallback\n    ): ItemCollection | Error;\n\n    export declare type ImportGeoJSONCallback = (error: Error, result: ItemCollection) => void;\n\n    /**\n     * A delegate object that controls a GeoJSON import in order to override\n     * default behavior and provide custom style.\n     */\n    export declare interface GeoJSONDelegate {\n        /**\n         * Overrides a feature.\n         *\n         * @param item An item created for the geometry of this feature or null for\n         * features with null geometry.\n         * @param geoJSON The original GeoJSON object for this feature.\n         */\n        itemForFeature?(\n            item: Annotation | Overlay | ItemCollection | null,\n            geoJSON: any\n        ): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a feature collection.\n         *\n         * @param itemCollection A collection containing associated annotations and\n         * overlays.\n         * @param geoJSON The original GeoJSON object for this FeatureCollection.\n         * This will contain an array of feature types.\n         */\n        itemForFeatureCollection?(\n            itemCollection: ItemCollection,\n            geoJSON: any\n        ): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a line string.\n         *\n         * @param overlay A PolylineOverlay object.\n         * @param geoJSON original GeoJSON object for this LineString object.\n         */\n        itemForLineString?(\n            overlay: PolylineOverlay,\n            geoJSON: any\n        ): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a multiline string.\n         *\n         * @param itemCollection An item collection containing associated overlays.\n         * @param geoJSON The original GeoJSON object for this MultiLineString. This\n         * will contain an array of geometries.\n         */\n        itemForMultiLineString?(\n            itemCollection: ItemCollection,\n            geoJSON: any\n        ): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a point.\n         *\n         * @param coordinate A GeoJSON Point generates the coordinate. You can use\n         * the coordinate to instantiate an item to return.\n         * @param geoJSON The original GeoJSON object for this Point. This object could\n         * be a simple Point or a Feature with the Point geometry type.\n         */\n        itemForPoint?(coordinate: Coordinate, geoJSON: any): Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a multipoint object.\n         *\n         * @param itemCollection A collection containing associated annotations.\n         * @param geoJSON The original GeoJSON object for this MultiPoint. This will\n         * contain an array of geometries.\n         */\n        itemForMultiPoint?(\n            itemCollection: ItemCollection,\n            geoJSON: any\n        ): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a polygon.\n         *\n         * @param overlay You can customize the provided overlay before returning it,\n         * or you could completely replace the overlay.\n         * @param geoJSON The original GeoJSON object for this polygon.\n         */\n        itemForPolygon?(overlay: PolygonOverlay, geoJSON: any): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides a multipolygon.\n         *\n         * @param itemCollection A collection containing associated overlays.\n         * @param geoJSON The original GeoJSON object for this MultiPolygon. This\n         * will contain an array of geometries.\n         */\n        itemForMultiPolygon?(\n            itemCollection: ItemCollection,\n            geoJSON: any\n        ): Annotation | Overlay | Array<Annotation | Overlay>;\n\n        /**\n         * Overrides the style of overlays.\n         *\n         * @param overlay The overlay to style.\n         * @param geoJSON The original GeoJSON for this feature or geometry object.\n         */\n        styleForOverlay?(overlay: Overlay, geoJSON: any): Style;\n\n        /**\n         * Completes the GeoJSON import.\n         *\n         * @param result The mapped item collection.\n         * @param geoJSON The original parsed GeoJSON object.\n         */\n        geoJSONDidComplete?(result: ItemCollection, geoJSON: any): void;\n\n        /**\n         * Indicates the GeoJSON import failed.\n         *\n         * @param error An Error instance related to the last blocking error.\n         * @param geoJSON The original parsed GeoJSON object.\n         */\n        geoJSONDidError?(error: Error, geoJSON: any): void;\n    }\n\n    /**\n     * A tree structure containing annotations, overlays, and nested item\n     * collection objects.\n     */\n    export declare interface ItemCollection {\n        /**\n         * The raw GeoJSON data.\n         */\n        data: any;\n        /**\n         * A flattened array of items that include annotations or overlays.\n         */\n        getFlattenedItemList: Array<Annotation | Overlay>;\n        /**\n         * A nested list of annotations, overlays, or other item collections.\n         */\n        items: Array<Annotation | Overlay | ItemCollection>;\n    }\n}\n\nexport const mapkit: (typeof MapKit) = window.mapkit as any;\n","/*\n * Public API Surface of ngx-apple-mapkit\n */\n\n/// <reference path=\"./lib/declarations.ts\" />\n/// <reference path=\"./lib/mapkit.ts\" />\nexport * from './lib/apple-maps.service';\nexport * from './lib/services/geocoder/apple-maps-geocoder.service';\nexport * from './lib/services/search/apple-maps-search.service';\nexport * from './lib/apple-mapkit.component';\nexport * from './lib/components/apple-mapkit-annotation/apple-mapkit-annotation.component';\nexport * from './lib/apple-maps.module';\nexport * from './lib/mapkit';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AppleMapsService"],"mappings":"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"}