{"version":3,"file":"nextalys-maps-module-lib-mapbox.mjs","sources":["../../lib/types.ts","../../lib/nxs-base-map.ts","../../lib/mapbox/types.ts","../../lib/maps-no-sanitize.pipe.ts","../../lib/maps-no-sanitize.module.ts","../../lib/mapbox/nxs-mapbox.component.ts","../../lib/mapbox/nxs-mapbox.component.html","../../lib/nextalys-maps-module-lib-mapbox.ts"],"sourcesContent":["\nimport { NxsLocation } from 'nextalys-js-helpers/dist/geo-helpers';\nexport interface NxsMapMarker<T = any> extends NxsLocation {\n    icon?: string;\n    iconSize?: number;\n    draggable?: boolean;\n    infoWindowContent?: string;\n    description?: string;\n    infoWindowOpen?: boolean;\n    showInfowindowCloseButton?: boolean;\n    infoWindowAlwaysOpen?: boolean;\n    focusAfterOpen?: boolean;\n    infoWindowOver?: boolean;\n    meta?: T;\n    offset?: NxsLocation;\n    markerWidth?: number;\n    markerHeight?: number;\n    anchor?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n    closeOnClick?: boolean;\n}\nexport interface NxsPolyline<T = any> {\n    points: NxsLocation[];\n    opacity?: number;\n    width?: number;\n    color?: string;\n    meta?: T;\n}\nexport interface NxsPolygon<T = any> extends NxsPolyline<T> {\n    fill?: string;\n    fillHover?: string;\n    opacityHover?: number;\n    fillSelected?: string;\n    opacitySelected?: number;\n}\nexport interface NxsMapsModuleOptions {\n    defaultLat?: number;\n    defaultLng?: number;\n    defaultZoom?: number;\n    defaultMarkerIcon?: string;\n    debugMode?: boolean;\n}\nexport type NxsPlacemark = NxsPolygon | NxsPolyline | NxsMapMarker;\nexport type NxsAnySource = (NxsMapMarker | NxsPolygon | NxsPolyline);\nexport type NxsMapFeatureType = 'LineString' | 'Point' | 'Polygon';\n\nexport interface NxsMapboxFeature {\n    geometry: NxsGeometry;\n    properties: any;\n}\nexport interface MapboxClusterOptions {\n    circleColor: string;\n    textColor: string;\n    textSize?: number;\n    clusterMaxZoom?: number;\n    clusterRadius?: number;\n}\nexport interface NxsGeometry {\n    type: NxsMapFeatureType;\n    coordinates: (number[]) | (number[][]) | (number[][][]);\n}\nexport class NxsMapboxLayerWrapper<X = any, Y = any> {\n    delay?: number;\n    before?: string;\n    layerId: string;\n    sourceName?: string;\n    minZoom?: number;\n    maxZoom?: number;\n\n    private pSource: NxsAnySource[];\n    get source() {\n        return this.pSource;\n    }\n    set source(val: NxsAnySource[]) {\n        this.pSource = val;\n        this.sourceFeatures = NxsMapboxLayerWrapper.convertSourceToSourceFeatures(this.pSource, this.featureType);\n    }\n    sourceFeatures?: NxsMapboxFeature[];\n    clusterOptions?: MapboxClusterOptions;\n    featureType: NxsMapFeatureType;\n    layerType?: 'symbol' | 'line' | 'fill';\n    layout?: X;//FillLayout | LineLayout | SymbolLayout\n    isDefaultLayerFromMarkers?: boolean;\n    isDefaultLayerFromPolylines?: boolean;\n    isDefaultLayerFromPolygons?: boolean;\n    paint?: Y;//FillPaint | LinePaint | SymbolPaint;\n    static createFeaturesProperties(input: NxsMapMarker | NxsPolygon | NxsPolyline, featureType: NxsMapFeatureType, index: number) {\n        if (featureType === 'Point')\n            return {\n                icon: (input as NxsMapMarker).icon, 'icon-size': (input as NxsMapMarker).iconSize,\n                description: (input as NxsMapMarker).description || (input as NxsMapMarker).infoWindowContent, index: index,\n                'icon-offset': (!!(input as NxsMapMarker)?.offset) ? [(input as NxsMapMarker)?.offset.lng, (input as NxsMapMarker)?.offset.lat] : [0, 0],\n                'icon-anchor': (input as NxsMapMarker).anchor,\n            };\n        if (featureType === 'LineString')\n            return { opacity: (input as NxsPolyline).opacity, width: (input as NxsPolyline).width, color: (input as NxsPolyline).color, index: index };\n        if (featureType === 'Polygon') {\n            const properties = { fill: (input as NxsPolygon).fill, opacity: (input as NxsPolygon).opacity, width: (input as NxsPolygon).width, color: (input as NxsPolygon).color, index: index };\n            if ((input as NxsPolygon).fillHover)\n                properties['fill-hover'] = (input as NxsPolygon).fillHover;\n            if ((input as NxsPolygon).opacityHover != null)\n                properties['opacity-hover'] = (input as NxsPolygon).opacityHover;\n\n            if ((input as NxsPolygon).opacitySelected != null)\n                properties['opacity-selected'] = (input as NxsPolygon).opacitySelected;\n            if ((input as NxsPolygon).fillSelected != null)\n                properties['fill-selected'] = (input as NxsPolygon).fillSelected;\n            return properties;\n        }\n        return {};\n    }\n    static convertSourceToSourceFeatures(source: NxsAnySource[], featureType: NxsMapFeatureType): NxsMapboxFeature[] {\n        return source.map<NxsMapboxFeature>((x, index) => ({\n            geometry: this.convertToGeometry(x, featureType),\n            properties: this.createFeaturesProperties(x, featureType, index),\n        }));\n    }\n    static convertToGeometry(input: NxsPlacemark, type: NxsMapFeatureType): NxsGeometry {\n        if (type === 'Point')\n            return { coordinates: [(input as NxsMapMarker).lng, (input as NxsMapMarker).lat], type: 'Point' };\n        else if (type === 'LineString')\n            return { coordinates: (input as NxsPolyline).points.map(x => ([x.lng, x.lat])), type: 'LineString' };\n        else if (type === 'Polygon')\n            return { coordinates: [(input as NxsPolyline).points.map(x => ([x.lng, x.lat]))], type: 'Polygon' };\n    }\n    static fromGeometry<T extends NxsPlacemark>(geometry: (number[]) | (number[][]), properties: any, type: NxsMapFeatureType): T {\n\n        switch (type) {\n            case \"LineString\":\n                //TODO\n                return {\n                    points: [],\n                } as NxsPolyline as any;\n            case \"Point\":\n                //TODO\n                return {\n                    lat: 0,\n                    lng: 0,\n                } as NxsMapMarker as any;\n            case \"Polygon\":\n                return {\n                    points: (geometry[0] as any[]).map<NxsLocation>(x => ({ lat: x[1], lng: x[0] })),\n                    color: properties.color,\n                    fill: properties.fill,\n                    opacity: properties.opacity,\n                    fillHover: properties['fill-hover'],\n                    opacityHover: properties['opacity-hover'],\n                } as NxsPolygon as any;\n            default:\n                return null;\n        }\n    }\n    updateSource(source?: NxsAnySource[]) {\n        if (source != null) {\n            this.source = source;\n        }\n        this.sourceFeatures = NxsMapboxLayerWrapper.convertSourceToSourceFeatures(this.source, this.featureType);\n    }\n}\n\nexport interface MapboxMapOptions {\n    bindPolygonsHover?: 'legacy' | 'new';\n    polygonsSelectable?: boolean;\n    addPolygonsBordersLineLayer?: boolean;\n    polygonsBelowCustomLayers?: boolean;\n}","import { NxsMapsModuleOptions, NxsMapMarker, NxsPolygon } from './types';\nimport { EventEmitter, Output, Input, Directive } from '@angular/core';\nimport { EventsCollector } from 'nextalys-js-helpers/dist/events';\nimport { NxsLocation, NxsBounds } from 'nextalys-js-helpers/dist/geo-helpers';\nexport const baseMapDefaultLat = 48.8589507;\nexport const baseMapDefaultLng = 2.2770203;\nexport const baseMapDefaultZoom = 8;\n\nconst DefaultOptions: NxsMapsModuleOptions | any = {\n    defaultLat: baseMapDefaultLat,\n    defaultLng: baseMapDefaultLng,\n    defaultZoom: baseMapDefaultZoom,\n    defaultMarkerIcon: 'https://maps.gstatic.com/mapfiles/api-3/images/spotlight-poi.png',\n    mapBoxMarkerHeight: 40,\n    mapBoxMarkerWidth: 22,\n};\n\n@Directive()\nexport abstract class NxsBaseMap<T> {\n    public eventsCollector = new EventsCollector();\n    public latValue: number;\n    public lngValue: number;\n    public mapReady: boolean;\n    public zoom: number;\n    @Output('boundsChange')\n    boundsChangeEmitter = new EventEmitter<NxsBounds>();\n\n    @Input('lat')\n    public set lat(val: number) {\n        if (typeof val === 'string')\n            val = parseFloat(val as string);\n        this.latValue = val;\n    }\n    @Input('lng')\n    public set lng(val: number) {\n        if (typeof val === 'string')\n            val = parseFloat(val as string);\n        this.lngValue = val;\n    }\n    @Input('fitBounds')\n    public set fitBounds(locations: NxsLocation[]) {\n        this.fitToBounds(locations);\n    }\n    @Input()\n    public fitBoundsPadding: number | { bottom: number; left: number; top: number; right: number; };\n\n    //Properties\n\n    @Input('zoom')\n    public set setZoom(val: number) {\n        if (val != null)\n            this.zoom = val;\n    }\n\n\n    @Input()\n    infoWindowOpenOnMarkerClick = false;\n    @Input()\n    infoWindowOpenOnMarkerOver = false;\n    //Outputs\n    @Output()\n    markerClick = new EventEmitter<NxsMapMarker>();\n    @Output()\n    mapClick = new EventEmitter<NxsLocation>();\n    @Output()\n    public dragEnd = new EventEmitter<NxsMapMarker>();\n    @Output()\n    public mapDragEnd = new EventEmitter<NxsBounds>();\n    @Output()\n    public markerMouseOver = new EventEmitter<NxsMapMarker>();\n    @Output()\n    public markerMouseOut = new EventEmitter<NxsMapMarker>();\n\n    @Output()\n    public polygonMouseOver = new EventEmitter<NxsPolygon>();\n\n    @Output()\n    public polygonMouseOut = new EventEmitter<NxsPolygon>();\n\n    @Output()\n    public polygonClick = new EventEmitter<NxsPolygon>();\n    @Output()\n    public onMapReady: EventEmitter<T> = new EventEmitter<T>();\n    constructor(\n        public options: any\n    ) {\n        if (!this.options) {\n            this.options = {};\n        }\n        this.options = Object.assign(this.options, DefaultOptions);\n        this.latValue = this.options?.defaultLat || baseMapDefaultLat;\n        this.lngValue = this.options?.defaultLng || baseMapDefaultLng;\n        this.zoom = this.options?.defaultZoom || baseMapDefaultZoom;\n    }\n    abstract triggerResize();\n    waitForMapReady() {\n        return new Promise<void>((resolve) => {\n            if (this.mapReady)\n                resolve();\n            else {\n                const sub = this.onMapReady.subscribe(() => {\n                    resolve();\n                });\n                this.eventsCollector.collect(sub);\n            }\n        });\n    }\n\n    public abstract fitToBounds(locations: ((NxsLocation[]) | NxsBounds), args?: any);\n    ngOnDestroy(): void {\n        this.eventsCollector.unsubscribeAll();\n    }\n    onMarkerClick(marker: NxsMapMarker) {\n        // console.log(\"Log: NxsBaseMap -> onMarkerClick -> marker\", marker);\n        this.markerClick.emit(marker);\n    }\n    onMarkerRightClick(marker: any) {\n        this.markerClick.emit(marker);\n    }\n\n    abstract closeAllInfoWindows(): void;\n    abstract onMapReadyEvent(nativeMap: any);\n\n    abstract convertToMarker(marker: any): NxsMapMarker;\n}","import { InjectionToken } from '@angular/core';\nimport { AnimationOptions, CameraOptions, FillLayout, FillPaint, FitBoundsOptions, LineLayout, LinePaint, MapboxGeoJSONFeature, SymbolLayout, SymbolPaint } from 'mapbox-gl';\nimport { NxsLocation } from 'nextalys-js-helpers/dist/geo-helpers';\nimport { NxsMapboxLayerWrapper, NxsMapsModuleOptions } from '../types';\n\nexport interface NxsMapBoxModuleOptions extends NxsMapsModuleOptions {\n    mapBoxAccessToken: string;\n    mapBoxMarkerWidth?: number;\n    mapBoxMarkerHeight?: number;\n}\n\n\nexport interface MapboxCameraOptions extends CameraOptions {\n    padding?: { top: number; left: number; bottom: number; right: number; };\n}\nexport type MapboxAnimationCameraOptions = (AnimationOptions & MapboxCameraOptions & { speed?: number; curve?: number; });\nexport interface MapboxMoveOptions extends FitBoundsOptions {\n    padding?: { top: number; left: number; bottom: number; right: number; };\n}\nexport type LngLatTuple = [number, number];\nexport class UserLocationLayer {\n    userLocation: NxsLocation;\n    icon: string;\n    iconSize?: number;\n}\n\nexport const NxsMapBoxOptions = new InjectionToken<NxsMapBoxModuleOptions>('NxsMapBoxOptions');\nexport class NxsMapboxLayerWrapperMapbox extends NxsMapboxLayerWrapper<(FillLayout | LineLayout | SymbolLayout), (FillPaint | LinePaint | SymbolPaint)> {\n}\n\nexport interface ManualLayer {\n    layerId?: string;\n    layerClick?: (features?: MapboxGeoJSONFeature[], selectedFeatures?: MapboxGeoJSONFeature[]) => void;\n    beforeLayer?: string;\n    layerFilters?: any[];\n    polygonsSelectable?: boolean;\n    polygonsMultiSelection?: boolean;\n    polygonsHoverable?: boolean;\n    polygonsBorders?: boolean;\n    polygonsSelectedBorders?: boolean;\n    paint?: {\n        fillColor?: string;\n        lineWidth?: number;\n        fillOpacity?: number;\n        lineColor?: string;\n        fillHover?: string;\n        fillSelected?: string;\n        fillOpacityHover?: number;\n        fillOpacitySelected?: number;\n        lineWidthSelected?: number;\n        lineColorSelected?: string;\n        'text-color'?: string;\n        \"text-halo-color\"?: string;\n        \"text-halo-width\"?: number;\n    };\n    layout?: any;\n    type?: 'fill' | 'line' | 'symbol';\n    polygonHoverId?: string | number;\n    polygonsSelected?: MapboxGeoJSONFeature[];\n    source?: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n    name: 'mapsNoSanitize',\n    standalone: false\n})\nexport class MapsNoSanitizePipe implements PipeTransform {\n    constructor(private domSanitizer: DomSanitizer) {\n\n    }\n    transform(html: string) {\n        return this.domSanitizer.bypassSecurityTrustHtml(html);\n    }\n}","import { NgModule } from '@angular/core';\nimport { MapsNoSanitizePipe } from './maps-no-sanitize.pipe';\n\n@NgModule({\n    imports: [\n    ],\n    declarations: [\n        MapsNoSanitizePipe,\n    ],\n    exports: [\n        MapsNoSanitizePipe,\n    ],\n})\nexport class MapsNoSanitizeModule {\n\n}","import { Component, OnInit, ViewEncapsulation, Inject, Input, EventEmitter, Output, ViewChild, PLATFORM_ID, Optional, createComponent, ApplicationRef } from '@angular/core';\nimport { NxsMapMarker, NxsPolyline, NxsPolygon, MapboxClusterOptions, NxsMapboxLayerWrapper, NxsMapFeatureType, NxsPlacemark, MapboxMapOptions } from '../types';\nimport { NxsBaseMap } from '../nxs-base-map';\nimport {\n    Marker as MapboxMarker, MapMouseEvent, MapLayerMouseEvent, MapboxGeoJSONFeature, LngLatBounds, FitBoundsOptions,\n    LineLayout, SymbolLayout, FillLayout, FillPaint, LinePaint, Map, GeolocateControl, Marker, MapboxEvent,\n    Popup,\n} from 'mapbox-gl';\nimport { MainHelpers } from 'nextalys-js-helpers';\nimport { NxsBounds, NxsLocation } from 'nextalys-js-helpers/dist/geo-helpers';\nimport { LngLatTuple, ManualLayer, MapboxAnimationCameraOptions, MapboxMoveOptions, NxsMapboxLayerWrapperMapbox, NxsMapBoxModuleOptions, NxsMapBoxOptions, UserLocationLayer } from './types';\nimport { ControlComponent, NgxMapboxGLModule } from 'ngx-mapbox-gl';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { MapsNoSanitizeModule } from '../maps-no-sanitize.module';\nimport { ComponentType } from '@angular/cdk/portal';\n\ndeclare interface Position { coords: { latitude: number; longitude: number; }; }\nexport type MapboxStyle = 'streets' | 'satellite' | 'satellite-streets';\ntype MapboxCustomStyle = 'mapbox://styles/mapbox/streets-v11' | 'mapbox://styles/mapbox/satellite-v9' | 'mapbox://styles/mapbox/satellite-streets-v11';\nconst defaultPolygonsLayerId = 'default-layer-polygons';\nconst defaultPolygonsBordersLayerId = 'default-layer-polygons-borders';\n\n\n@Component({\n    selector: 'nxs-mapbox',\n    templateUrl: './nxs-mapbox.component.html',\n    styleUrls: ['./nxs-mapbox.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n    imports: [\n        CommonModule,\n        NgxMapboxGLModule,\n        MapsNoSanitizeModule,\n    ]\n})\nexport class NxsMapBoxComponent extends NxsBaseMap<NxsMapBoxComponent> implements OnInit {\n    accessToken: string;\n    @Input()\n    cooperativeGestures = false;\n    @Input()\n    preserveDrawingBuffer = false;\n    @Input()\n    draggable = true;\n    @Input()\n    interactive = true;\n    @Input()\n    scrollZoom = true;\n    @Input()\n    infoWindowOpenOnMarkerClick = false;\n    @Input()\n    hideAllInfoWindowsOnMapClick = false;\n    @Input()\n    minZoom: number;\n    @Input()\n    maxZoom: number;\n    @Input()\n    geolocateControlPosition: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" = 'top-right';\n    @Input()\n    navigationControlPosition: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" = 'top-right';\n\n    private manualLayersClickAdded: { layerId: string; listener: (e: { features?: MapboxGeoJSONFeature[] }) => void; }[] = [];\n    private manualLayers: ManualLayer[] = [];\n    private manualSources: { name: string; loaded: boolean }[] = [];\n\n    mapStyle: MapboxCustomStyle = 'mapbox://styles/mapbox/streets-v11';\n    private mapboxMapStyle: MapboxStyle = 'streets';\n\n    @Input('mapStyle')\n    set setMapStyle(val: MapboxStyle) {\n        this.mapboxMapStyle = val;\n        switch (val) {\n            case 'satellite':\n                this.mapStyle = 'mapbox://styles/mapbox/satellite-v9';\n                break;\n            case 'streets':\n                this.mapStyle = 'mapbox://styles/mapbox/streets-v11';\n                break;\n            case 'satellite-streets':\n                this.mapStyle = 'mapbox://styles/mapbox/satellite-streets-v11';\n                break;\n            default:\n                this.mapStyle = 'mapbox://styles/mapbox/streets-v11';\n                break;\n        }\n        // setTimeout(() => {\n        //     this.refreshManualLayers();\n        // }, 100);\n    }\n\n    pLanguage = 'fr';\n    @Input('language')\n    set language(val: string) {\n        this.pLanguage = val;\n        this.setMapLanguage();\n    }\n\n    @Input('userLocationLayer')\n    set setUserLocationLayer(val: UserLocationLayer) {\n        if (!val)\n            return;\n        let iconSize = 1;\n        if (val.iconSize)\n            iconSize = val.iconSize;\n        const marker: NxsMapMarker = {\n            lat: val.userLocation.lat,\n            lng: val.userLocation.lng,\n            icon: val.icon,\n            iconSize: iconSize,\n        };\n        if (!this.customLayers)\n            this.customLayers = [];\n        const newLayer = new NxsMapboxLayerWrapper();\n        newLayer.layerId = 'user-location';\n        newLayer.featureType = 'Point';\n        newLayer.source = [marker];\n        this.setCustomLayersFromLayerWrapper(newLayer, true);\n    }\n    private polygonHoveredStateId: string | number = null;\n    private imagesAdded: string[] = [];\n    mapInstance: Map;\n    markers: NxsMapMarker[];\n    mglMarkers: NxsMapMarker[];\n\n    @Input('markers')\n    set setMarkers(val: NxsMapMarker[]) {\n        this.markers = val;\n        if (val && val.length)\n            this.setCustomLayersFromLayerWrapper(this.createLayerFromMarkers(val));\n        else if (val != null && val.length === 0) {\n            this.removeDefaultLayer('default-layer-markers');\n        }\n    }\n    @Input('mglMarkers')\n    set setMglMarkers(val: NxsMapMarker[]) {\n        this.mglMarkers = val;\n    }\n    @Input('polylines')\n    set setPolylines(val: NxsPolyline[]) {\n        if (val && val.length)\n            this.setCustomLayersFromLayerWrapper(this.createLayerFromPolylines(val));\n        else if (val != null && val.length === 0) {\n            this.removeDefaultLayer('default-layer-polylines');\n        }\n    }\n\n    @Input('polygons')\n    set setPolygons(val: NxsPolygon[]) {\n        if (val && val.length) {\n            this.setCustomLayersFromLayerWrapper(this.createLayerFromPolygons(val, false));\n            if (this.mapOptions?.addPolygonsBordersLineLayer)\n                this.setCustomLayersFromLayerWrapper(this.createLayerFromPolygons(val, true));\n        }\n        else if (val != null && val.length === 0) {\n            this.removeDefaultLayer(defaultPolygonsLayerId);\n            if (this.mapOptions?.addPolygonsBordersLineLayer)\n                this.removeDefaultLayer(defaultPolygonsBordersLayerId);\n        }\n    }\n\n    customLayers: NxsMapboxLayerWrapper[];\n\n    @Input('customLayers')\n    set setCustomLayers(val: NxsMapboxLayerWrapper[]) {\n        this.onSetCustomLayersMethod(val);\n    }\n    mapboxOptions: NxsMapBoxModuleOptions = this.options as NxsMapBoxModuleOptions;\n\n    @Input()\n    mapOptions: MapboxMapOptions = { bindPolygonsHover: 'new' };\n\n    private clusterOptions: MapboxClusterOptions;\n    @Input('clusterOptions')\n    set setClusterOptions(val: MapboxClusterOptions) {\n        this.clusterOptions = val;\n        if (this.clusterOptions) {\n            this.setDefaultClusterOptions(this.clusterOptions);\n        }\n        if (this.customLayers) {\n            const layer = this.customLayers.find(x => x.isDefaultLayerFromMarkers);\n            if (layer)\n                layer.clusterOptions = val;\n        }\n    }\n\n    @Input()\n    pitchWithRotate = true;\n\n    @Input()\n    attributionControl = false;\n    @Input()\n    logoPosition: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" = 'bottom-right';\n    @Input()\n    dragRotate = true;\n    @Input()\n    touchZoomRotate = true;\n    @Input()\n    touchZoomRotationEnabled = true;\n    @Input()\n    showUserLocation = false;\n\n    @Input()\n    showNavigationControls = false;\n    @Input()\n    showUserLocationMaxZoom = 12;\n    @Input()\n    trackUserLocation = false;\n\n    @Input()\n    transformRequest: (url: string, resourceType: string) => { url: string; headers: any; credentials?: any };\n\n    @Output()\n    onNewUserLocation = new EventEmitter<NxsLocation>();\n\n    @Output()\n    moveStart = new EventEmitter<void>();\n    @Output()\n    zoomChange = new EventEmitter<number>();\n    @ViewChild('mglControl')\n    mglControl: ControlComponent<GeolocateControl>;\n    private defaultMarkerLayersCreated = false;\n    private geolocateControlState: 'active' | 'passive' | 'disabled';\n    isBrowser = false;\n    mapCreationBln = true;\n    @Input()\n    bindMapClick = true;\n    @Input()\n    bindLayerClick = true;\n    private polygonsLayerHasBeenDelayed = false;\n    get currentInfoWindow(): NxsMapMarker {\n        if (!this.markers?.length && !this.mglMarkers?.length)\n            return null;\n        return this.getPlacemarks<NxsMapMarker>('Point').find(x => !!x.infoWindowOpen) || this.mglMarkers?.find(x => !!x.infoWindowOpen);\n    }\n    @Input()\n    customInfowindows: NxsMapMarker[] = [];\n\n    private lastPolygonHover: MapboxGeoJSONFeature;\n    private currentDefaultPolygonLayerSelected: MapboxGeoJSONFeature;\n\n\n    constructor(\n        private app: ApplicationRef,\n        @Optional() @Inject(NxsMapBoxOptions) options?: NxsMapBoxModuleOptions,\n        @Optional() @Inject(PLATFORM_ID) private platformId?: any,\n\n    ) {\n        super(options);\n        this.accessToken = options?.mapBoxAccessToken;\n        if (this.platformId) {\n            this.isBrowser = isPlatformBrowser(this.platformId);\n        }\n        this.log('Init mapbox map', options);\n    }\n    static locationsToBounds(locations: NxsLocation[]): NxsBounds {\n        const bounds = new LngLatBounds();\n        locations.forEach((location) => {\n            bounds.extend([location.lng, location.lat]);\n        });\n        return this.transformToNxsBounds(bounds);\n    }\n    private static transformToNxsBounds(bounds: LngLatBounds) {\n        const ne = new NxsLocation(bounds.getNorthEast().lat, bounds.getNorthEast().lng);\n        const sw = new NxsLocation(bounds.getSouthWest().lat, bounds.getSouthWest().lng);\n        return new NxsBounds(ne, sw);\n    }\n    private async onSetCustomLayersMethod(val: NxsMapboxLayerWrapper[]) {\n        await this.initCustomLayers(val);\n        if (!this.customLayers) {\n            this.customLayers = [];\n        }\n        if (val) {\n            this.customLayers = [...this.customLayers.filter(x =>\n                x.isDefaultLayerFromMarkers || x.isDefaultLayerFromPolygons || x.isDefaultLayerFromPolylines), ...val];\n        }\n    }\n    private createLayerFromMarkers(input: NxsMapMarker[]): NxsMapboxLayerWrapper {\n        const layer = new NxsMapboxLayerWrapper();\n        layer.isDefaultLayerFromMarkers = true;\n        layer.clusterOptions = this.clusterOptions;\n        layer.featureType = 'Point';\n        layer.layerId = 'default-layer-markers';\n        layer.source = input;\n        this.defaultMarkerLayersCreated = true;\n        return layer;\n    }\n\n    private removeDefaultLayer(layerId: 'default-layer-markers' | 'default-layer-polygons' | 'default-layer-polylines' | 'default-layer-polygons-borders') {\n        this.log('remove default layer ', layerId);\n        if (!this.customLayers)\n            return;\n        const customLayerIndex = this.customLayers.findIndex(x => x.layerId === layerId);\n        if (customLayerIndex !== -1) {\n            this.customLayers.splice(customLayerIndex, 1);\n            if (layerId === 'default-layer-markers')\n                this.defaultMarkerLayersCreated = false;\n        }\n    }\n    private createLayerFromPolygons(input: NxsPolygon[], bordersLayer: boolean): NxsMapboxLayerWrapper {\n        const layer = new NxsMapboxLayerWrapper();\n        layer.isDefaultLayerFromPolygons = true;\n        layer.featureType = bordersLayer ? 'LineString' : 'Polygon';\n        layer.layerId = bordersLayer ? defaultPolygonsBordersLayerId : defaultPolygonsLayerId;\n        layer.source = input;\n\n        if (this.mapOptions.polygonsBelowCustomLayers && this.customLayers?.some(x => !x.isDefaultLayerFromMarkers\n            && !x.isDefaultLayerFromPolygons && !x.isDefaultLayerFromPolylines\n        )) {\n            layer.before = this.customLayers?.find(x => !x.isDefaultLayerFromMarkers && !x.isDefaultLayerFromPolygons && !x.isDefaultLayerFromPolylines).layerId;\n        }\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 247 ~ NxsMapBoxComponent ~ createLayerFromPolygons ~  layer.before\", layer.before);\n        // if (this.defaultMarkerLayersCreated && !this.polygonsLayerHasBeenDelayed) {\n        //     this.polygonsLayerHasBeenDelayed = true;\n        //     layer.delay = 1000;\n        //     layer.before = 'default-layer-markers';\n        // }\n        return layer;\n    }\n    private createLayerFromPolylines(input: NxsPolyline[]): NxsMapboxLayerWrapper {\n        const layer = new NxsMapboxLayerWrapper();\n        layer.isDefaultLayerFromPolylines = true;\n        layer.featureType = 'LineString';\n        layer.layerId = 'default-layer-polylines';\n        layer.source = input;\n        return layer;\n    }\n    private setDefaultClusterOptions(clusterOptions: MapboxClusterOptions) {\n        if (!clusterOptions)\n            return;\n        if (!clusterOptions.circleColor) {\n            clusterOptions.circleColor = '#51bbd6';\n        }\n        if (!clusterOptions.textColor) {\n            clusterOptions.textColor = '#000000';\n        }\n        if (!clusterOptions.textSize) {\n            clusterOptions.textSize = 12;\n        }\n    }\n    private async setCustomLayersFromLayerWrapper(layerWrapper: NxsMapboxLayerWrapper, onlyUpdateSource?: boolean) {\n        this.log('setCustomLayersFromLayerWrapper ', layerWrapper.layerId, layerWrapper.source.length);\n        if (layerWrapper.featureType === 'Point' && layerWrapper.source?.length) {\n            await this.loadImages((layerWrapper.source as NxsMapMarker[]).map(x => x.icon));\n        }\n        await this.initCustomLayers([layerWrapper]);\n        if (!this.customLayers)\n            this.customLayers = [];\n        const index = this.customLayers.findIndex(x => x.layerId === layerWrapper.layerId);\n        if (index === -1)\n            this.customLayers.push(layerWrapper);\n        else {\n            if (onlyUpdateSource)\n                this.customLayers[index].sourceFeatures = layerWrapper.sourceFeatures;\n            else\n                this.customLayers[index] = layerWrapper;\n\n        }\n    }\n    ngOnInit(): void {\n        if (!this.mapOptions)\n            this.mapOptions = { bindPolygonsHover: 'new' };\n        if (this.mapOptions.bindPolygonsHover == null)\n            this.mapOptions.bindPolygonsHover = 'new';\n\n    }\n    convertToMarker(marker: MapboxMarker): NxsMapMarker {\n        // return { icon: null, lat: marker.getLngLat().lat, lng: marker.getLngLat().lng };\n        return null;\n    }\n    private getPolygonOpacity(suffix: 'selected' | 'hover') {\n        return [\n            'case',\n            ['has', 'opacity-' + suffix],\n            ['get', 'opacity-' + suffix],\n            this.getDefaultPolygonOpacity(),\n        ];\n    }\n    private getDefaultPolygonOpacity() {\n        return [\n            'case',\n            ['has', 'opacity'],\n            ['get', 'opacity'],\n            1,\n        ];\n    }\n    private getPolygonFillColor(suffix: 'selected' | 'hover') {\n        return [\n            'case',\n            ['has', 'fill-' + suffix],\n            ['get', 'fill-' + suffix],\n            ['get', 'fill'],\n        ];\n    }\n\n    private getPolygonsSelectablePaintArray(fillOrOpacity: 'fill' | 'opacity') {\n        if (!this.mapOptions?.polygonsSelectable)\n            return [];\n        if (fillOrOpacity === 'fill')\n            return [['boolean', ['feature-state', 'selected'], false],\n            this.getPolygonFillColor('selected')];\n\n        return [['boolean', ['feature-state', 'selected'], false],\n        this.getPolygonOpacity('selected')];\n    }\n    private async initCustomLayers(customLayers: NxsMapboxLayerWrapperMapbox[]) {\n        if (!customLayers)\n            return;\n        const imagesToLoad: string[] = [];\n        for (const customLayer of customLayers) {\n            customLayer.sourceName = 'source_' + customLayer.layerId;\n            // customLayer.sourceFeatures = NxsMapboxLayerWrapper.convertSourceToSourceFeatures(customLayer.source, customLayer.featureType);\n            let lineLayout: LineLayout;\n            let fillLayout: FillLayout;\n            let symbolLayout: SymbolLayout;\n\n            let linePaint: LinePaint;\n            let fillPaint: FillPaint;\n            // let symbolPaint: SymbolPaint;\n            if (!customLayer.layout)\n                customLayer.layout = {} as any;\n            if (!customLayer.paint)\n                customLayer.paint = {} as any;\n            switch (customLayer.featureType) {\n                case 'LineString':\n                    customLayer.layerType = 'line';\n                    lineLayout = customLayer.layout as LineLayout;\n                    linePaint = customLayer.paint as LinePaint;\n                    lineLayout['line-join'] = 'round';\n                    lineLayout['line-cap'] = 'round';\n                    linePaint['line-color'] = ['get', 'color'];\n                    linePaint['line-width'] = [\n                        'case',\n                        ['has', 'width'],\n                        ['get', 'width'],\n                        1,\n                    ];\n                    break;\n                case 'Polygon':\n                    customLayer.layerType = 'fill';\n                    fillLayout = customLayer.layout as FillLayout;\n                    fillPaint = customLayer.paint as FillPaint;\n                    fillPaint['fill-color'] = [\n                        'case',\n                        ...this.getPolygonsSelectablePaintArray('fill'),\n                        ['boolean', ['feature-state', 'hover'], false],\n                        this.getPolygonFillColor('hover'),\n                        ['get', 'fill'],\n                    ];\n                    fillPaint['fill-opacity'] = [\n                        'case',\n                        ...this.getPolygonsSelectablePaintArray('opacity'),\n                        ['boolean', ['feature-state', 'hover'], false],\n                        this.getPolygonOpacity('hover'),\n                        this.getDefaultPolygonOpacity(),\n                    ];\n                    fillPaint['fill-outline-color'] = ['get', 'color'];\n                    break;\n                case 'Point':\n                    customLayer.layerType = 'symbol';\n                    symbolLayout = customLayer.layout as SymbolLayout;\n                    symbolLayout[\"icon-image\"] = ['get', 'icon'];\n\n                    const sourcePoint = customLayer.source as NxsMapMarker[];\n                    const imagesOfLayer = sourcePoint.filter(x => !!x.icon).map(x => x.icon);\n                    imagesToLoad.push(...MainHelpers.distinctPrimitiveArray(imagesOfLayer));\n                    // symbolLayout[\"icon-image\"] = [\n                    //     \"case\",\n                    //     [\"all\", [\"to-boolean\", ['get', 'icon-selected']], [\"to-boolean\", ['get', 'is-selected']]],\n                    //     ['get', 'icon-selected'],\n                    //     ['get', 'icon'],\n                    // ];\n                    symbolLayout[\"icon-size\"] = ['get', 'icon-size'];\n                    symbolLayout[\"icon-offset\"] = ['get', 'icon-offset'];\n                    symbolLayout[\"icon-anchor\"] = ['get', 'icon-anchor'];\n\n\n                    if (typeof symbolLayout['icon-allow-overlap'] === 'undefined')\n                        symbolLayout['icon-allow-overlap'] = true;\n                    if (typeof symbolLayout['text-allow-overlap'] === 'undefined')\n                        symbolLayout['text-allow-overlap'] = true;\n                    if (typeof symbolLayout['text-ignore-placement'] === 'undefined')\n                        symbolLayout['text-ignore-placement'] = false;\n\n                    // symbolLayout['visibility'] = true;\n                    if (customLayer.clusterOptions) {\n                        this.setDefaultClusterOptions(customLayer.clusterOptions);\n                    }\n                    break;\n            }\n            if (customLayer.delay) {\n                await MainHelpers.sleep(customLayer.delay);\n            }\n        }\n        if (imagesToLoad.length)\n            await this.loadImages(imagesToLoad);\n    }\n    loadAndAddImage(url: string): Promise<{ success: boolean; imgName?: string; }> {\n        // console.log(\"Log: NxsMapBoxComponent -> loadImage -> url\", url);\n        return new Promise<{ success: boolean; imgName?: string; }>((resolve) => {\n            if (!this.mapInstance) {\n                resolve({ success: false });\n                return;\n            }\n            if (this.imagesAdded.indexOf(url) !== -1) {\n                resolve({ success: true, imgName: url });\n                return;\n            }\n            this.imagesAdded.push(url);\n            this.mapInstance.loadImage(url, (error, image) => {\n                if (error) {\n                    console.error('Unable to load image :' + url);\n                    resolve({ success: false });\n                    return;\n                }\n                this.mapInstance.addImage(url, image);\n                resolve({ success: true, imgName: url });\n            });\n        });\n    }\n    layerMouseEnter(evt: MapLayerMouseEvent, layerId: string) {\n        if (!evt.features || evt.features.length === 0)\n            return;\n        const feature: MapboxGeoJSONFeature = evt.features[0];\n        if (feature.geometry.type === 'Point' && this.infoWindowOpenOnMarkerOver) {\n            this.handlePlacemarkClick(feature, 'Point', layerId, true, true);\n        } else if (feature.geometry.type === 'Polygon') {\n            if (this.mapOptions?.bindPolygonsHover === 'legacy') {\n                this.mapInstance.setFeatureState(feature, { hover: true });\n                this.lastPolygonHover = feature;\n            }\n        }\n    }\n    layerMouseLeave(evt: MapLayerMouseEvent, layerId: string) {\n        if (this.mapOptions?.bindPolygonsHover === 'legacy') {\n            if (this.lastPolygonHover) {\n                this.mapInstance.setFeatureState(this.lastPolygonHover, { hover: false });\n                this.lastPolygonHover = null;\n            }\n        }\n        if (!evt.features || evt.features.length === 0)\n            return;\n        if (!this.infoWindowOpenOnMarkerOver)\n            return;\n        const feature: MapboxGeoJSONFeature = evt.features[0];\n        if (feature.geometry.type !== 'Point')\n            return;\n        const index = feature.properties.index;\n        if (index != null) {\n            const markers = this.getPlacemarks<NxsMapMarker>('Point', layerId);\n            const marker = markers[index];\n            if (marker)\n                marker.infoWindowOpen = false;\n        }\n    }\n    unselectAllPolygonsFromLayer(layerId: string) {\n        this.unselectAllPolygons(false, layerId);\n        const layerWrapper = this.manualLayers.find(x => x.layerId === layerId);\n        if (layerWrapper) {\n            layerWrapper.polygonsSelected = [];\n        }\n    }\n    private unselectAllPolygons(exceptCurrent: boolean, layerId: string) {\n        const layersList: string[] = [];\n        let layerWrapper: ManualLayer;\n        if (!layerId) {\n            const layer = this.mapInstance?.getLayer(defaultPolygonsLayerId);\n            if (!layer)\n                return;\n            layersList.push(defaultPolygonsLayerId);\n        }\n        else {\n            layerWrapper = this.manualLayers?.find(x => x.layerId === layerId);\n            if (!layerWrapper)\n                return;\n            layersList.push(layerWrapper.layerId);\n        }\n\n        // const featuresList = this.mapInstance.querySourceFeatures('source_' + defaultPolygonsLayerId);\n        const featuresList = this.mapInstance.queryRenderedFeatures(null, { layers: layersList });\n        if (featuresList?.length) {\n            // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 477 ~ NxsMapBoxComponent ~ handlePlacemarkClick ~ featuresList\", featuresList);\n            for (const feature of featuresList) {\n                if (!feature)\n                    continue;\n                if (exceptCurrent) {\n                    if (layerWrapper && feature.id && layerWrapper.polygonsSelected?.some(x => x?.id === feature.id)) {\n                        continue;\n                    }\n                    else if (!layerWrapper && !!this.currentDefaultPolygonLayerSelected && feature.id === this.currentDefaultPolygonLayerSelected.id) {\n                        continue;\n                    }\n                }\n                this.mapInstance.setFeatureState(feature, { selected: false });\n            }\n        }\n\n    }\n    private handlePlacemarkClick(feature: MapboxGeoJSONFeature, type: NxsMapFeatureType, layerId: string, openInfoWindow: boolean, mustHaveIndex: boolean) {\n        if (!feature)\n            return;\n        const index = feature.properties.index;\n        if (index == null && mustHaveIndex)\n            return;\n        const placemark = this.getPlacemarks<any>(type, layerId)[index];\n        if (openInfoWindow && type === 'Point' && placemark) {\n            (placemark as NxsMapMarker).infoWindowOpen = true;\n        }\n        if (type === 'Point' && placemark)\n            this.markerClick.emit(placemark);\n        else if (type === 'Polygon') {\n            this.selectOrUnselectPolygonWithFeature(feature, layerId, false);\n            if (placemark)\n                this.polygonClick.emit(placemark);\n            // this.hideInfowindows();\n        }\n\n    }\n    onMarkerClickMgl(marker: NxsMapMarker) {\n        if (this.infoWindowOpenOnMarkerClick && !!marker?.infoWindowContent) {\n            marker.infoWindowOpen = true;\n            setTimeout(() => {\n                marker.infoWindowOpen = true;\n            }, 0);\n            setTimeout(() => {\n                marker.infoWindowOpen = true;\n            }, 100);\n        }\n        this.markerClick.emit(marker);\n    }\n\n    onMarkerClick(marker: NxsMapMarker) {\n        this.markerClick.emit(marker);\n    }\n\n    private selectOrUnselectPolygonWithFeature(feature: MapboxGeoJSONFeature, layerId: string, forceSelection: boolean) {\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 554 ~ NxsMapBoxComponent ~ selectPolygonWithFeature ~ layerId\", layerId, feature);\n        if (!feature)\n            return;\n        let layerWrapper: ManualLayer;\n        if (layerId) {\n            layerWrapper = this.manualLayers.find(x => x.layerId === layerId);\n            if (layerWrapper && !layerWrapper.polygonsSelectable)\n                return;\n        }\n        if (!layerWrapper && !this.mapOptions?.polygonsSelectable)\n            return;\n        if (!layerWrapper) {\n            if (forceSelection) {\n                this.currentDefaultPolygonLayerSelected = feature;\n                this.unselectAllPolygons(true, layerId);\n                this.mapInstance.setFeatureState(feature, { selected: true });\n            }\n\n            else {\n                if (feature.id && this.currentDefaultPolygonLayerSelected?.id === feature.id) {\n                    //TODO : unselect polygon\n\n                    //---TEMP\n                    this.currentDefaultPolygonLayerSelected = feature;\n                    this.unselectAllPolygons(true, layerId);\n                    this.mapInstance.setFeatureState(feature, { selected: true });\n                    //---TEMP\n\n\n                }\n            }\n        }\n        else {\n            if (forceSelection) {\n                if (layerWrapper.polygonsMultiSelection && !layerWrapper.polygonsSelected?.some(x => x.id === feature.id)) {\n                    if (!layerWrapper.polygonsSelected)\n                        layerWrapper.polygonsSelected = [];\n                    layerWrapper.polygonsSelected.push(feature);\n                }\n                else if (!layerWrapper.polygonsMultiSelection)\n                    layerWrapper.polygonsSelected = [feature];\n                if (!layerWrapper.polygonsMultiSelection)\n                    this.unselectAllPolygons(true, layerId);\n                this.mapInstance.setFeatureState(feature, { selected: true });\n            }\n            else {\n                let newValue = true;\n                const polygonIndex = layerWrapper.polygonsSelected?.findIndex(x => x.id === feature.id);\n                if (polygonIndex != null && polygonIndex > -1) {\n                    newValue = false;\n                    layerWrapper.polygonsSelected.splice(polygonIndex, 1);\n                }\n                else {\n                    newValue = true;\n                    if (layerWrapper.polygonsMultiSelection) {\n                        if (!layerWrapper.polygonsSelected)\n                            layerWrapper.polygonsSelected = [];\n                        layerWrapper.polygonsSelected.push(feature);\n                    }\n                    else {\n                        layerWrapper.polygonsSelected = [feature];\n                    }\n                }\n                // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 599 ~ NxsMapBoxComponent ~ selectOrUnselectPolygonWithFeature ~ newValue\", newValue, layerWrapper.polygonsSelected);\n                if (!layerWrapper.polygonsMultiSelection && layerWrapper.polygonsSelected?.length) {\n                    this.unselectAllPolygons(true, layerId);\n                }\n                this.mapInstance.setFeatureState(feature, { selected: newValue });\n            }\n        }\n    }\n\n\n    selectPolygon(filter: { polygonId?: string; metaProperties?: any; layerId?: string; }) {\n        if (!filter)\n            return null;\n        if (!filter.layerId)\n            filter.layerId = defaultPolygonsLayerId;\n        const featuresList = this.mapInstance.queryRenderedFeatures(null, { layers: [filter.layerId] });\n        if (filter.metaProperties) {\n            for (const cFeature of featuresList) {\n                let featureFound = !!Object.keys(filter.metaProperties).length;\n                for (const metaKey in filter.metaProperties) {\n                    featureFound = featureFound && (cFeature && cFeature?.[metaKey] === filter.metaProperties?.[metaKey]);\n                }\n                if (featureFound) {\n                    this.selectOrUnselectPolygonWithFeature(cFeature, filter.layerId, true);\n                    return cFeature;\n                }\n            }\n        }\n        return null;\n    }\n    getLayer(layerId: string) {\n        return this.mapInstance?.getLayer(layerId) || null;\n    }\n    layerExists(layerId: string) {\n        return !!this.mapInstance?.getLayer(layerId);\n    }\n    updateLayerFilter(layerId: string, filter: any[]) {\n        // if (!!filter)\n        this.mapInstance?.setFilter(layerId, filter);\n    }\n    getRenderedFeatures(layerId: string, location?: NxsLocation | NxsBounds) {\n        let isBounds = !!(location as NxsBounds)?.extend;\n        if (!location) {\n            location = this.getBounds();\n            // console.log(\"Log ~ file: nxs-mapbox.component.ts:729 ~ getRenderedFeatures ~ location:\", location);\n            isBounds = true;\n        }\n        else if (!isBounds) {\n            location = new NxsLocation((location as NxsLocation).lat, (location as NxsLocation).lng);\n        }\n        let arg: [number, number] | ([[number, number], [number, number]]);\n        if (!isBounds) {\n            arg = (location as NxsLocation).toLngLat();\n        }\n        else {\n            arg = [(location as NxsBounds).southwest.toLngLat(), (location as NxsBounds).northeast.toLngLat()];\n        }\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts:740 ~ getRenderedFeatures ~ arg:\", arg, layerId);\n        return this.mapInstance.queryRenderedFeatures(arg, { layers: [layerId] });\n    }\n    layerClick(evt: MapLayerMouseEvent, layerId: string) {\n        if (!this.bindLayerClick)\n            return;\n        if (!evt.features || evt.features.length === 0)\n            return;\n        const feature: MapboxGeoJSONFeature = evt.features[0];\n        this.handlePlacemarkClick(feature, feature.geometry.type as any, layerId, this.infoWindowOpenOnMarkerClick, true);\n    }\n    public hideInfowindows() {\n        this.getPlacemarks<NxsMapMarker>('Point').filter(x => !!x.infoWindowOpen).forEach(x => { x.infoWindowOpen = false; });\n    }\n    onMapClick(evt: MapMouseEvent) {\n        if (!this.bindMapClick)\n            return;\n        let mapClicked = false;\n        if (this.mapInstance && evt.lngLat && evt.point) {\n            if (this.customLayers) {\n                const features = this.mapInstance.queryRenderedFeatures(evt.point);\n                const layerIds = this.customLayers.map(x => x.layerId);\n                if (!features.some(x => x.layer && layerIds.indexOf(x.layer.id) !== -1)) {\n                    mapClicked = true;\n                }\n            } else {\n                mapClicked = true;\n            }\n        }\n        if (mapClicked) {\n            if (this.hideAllInfoWindowsOnMapClick) {\n                this.hideInfowindows();\n            }\n            this.mapClick.emit({ lat: evt.lngLat.lat, lng: evt.lngLat.lng });\n        }\n    }\n    triggerResize() {\n        if (this.mapInstance)\n            this.mapInstance.resize();\n    }\n    markerClose(marker: NxsMapMarker) {\n        marker.infoWindowOpen = false;\n    }\n    private getPlacemarks<T extends NxsPlacemark>(type: NxsMapFeatureType, layerId?: string): T[] {\n        if (!this.customLayers)\n            return [];\n        const layers = this.customLayers.filter(x => !layerId || x.layerId === layerId).filter(x => x.featureType === type);\n        const placemarks: NxsPlacemark[] = [];\n        if (layers) {\n            for (const layer of layers) {\n                placemarks.push(...layer.source as NxsMapMarker[]);\n            }\n        }\n        return placemarks as any;\n    }\n    private async loadImages(images: string[]) {\n        const imagesToload = MainHelpers.distinctPrimitiveArray(images.filter(x => !!x));\n        for (const imageToload of imagesToload) {\n            const imgResult = await this.loadAndAddImage(imageToload);\n            if (imgResult?.success)\n                this.log('image loaded : ' + imgResult?.imgName);\n            else\n                this.log('image NOT loaded : ' + imageToload);\n        }\n\n    }\n    private log(...args: any[]) {\n        if (!this.options?.debugMode)\n            return;\n        console.log('[Nxs Mapbox Map]', ...args);\n    }\n    onGeolocate(position: Position) {\n        if (position && position.coords)\n            this.onNewUserLocation.emit({ lat: position.coords.latitude, lng: position.coords.longitude });\n    }\n    getGeoLocateControl() {\n        if (!this.mglControl) {\n            this.log('cannot go to user location : mglControl not defined');\n            return null;\n        }\n        const geoLocateControl = this.mglControl.control as GeolocateControl;\n        if (!geoLocateControl) {\n            this.log('cannot go to user location : geolocate control not defined');\n            return null;\n        }\n        return geoLocateControl;\n    }\n    goToUserLocation() {\n        const geoLocateControl = this.getGeoLocateControl();\n        if (!geoLocateControl || this.geolocateControlState === 'active')\n            return;\n        geoLocateControl.trigger();\n        this.log('trigger geoLocationControl');\n    }\n    removeGeoLocateControl() {\n        const geoLocateControl = this.getGeoLocateControl();\n        if (!geoLocateControl)\n            return;\n        this.mapInstance?.removeControl(geoLocateControl);\n    }\n    createPopup(location: NxsLocation, content?: string) {\n        return new Popup({ closeOnClick: false })\n            .setLngLat([location.lng, location.lat])\n            .setHTML(content || '')\n            .addTo(this.mapInstance);\n    }\n    createPopupWithComponent(location: NxsLocation, component: ComponentType<any>, inputs?: any) {\n        const componentRef = createComponent(component, { environmentInjector: this.app.injector });\n        this.app.attachView(componentRef.hostView);\n        if (inputs) {\n            for (const input in inputs) {\n                componentRef.instance[input] = inputs[input];\n            }\n        }\n        return new Popup({ closeOnClick: false })\n            .setLngLat([location.lng, location.lat])\n            .addTo(this.mapInstance)\n            .setDOMContent(componentRef.location.nativeElement);\n    }\n    async onMapReadyEvent(arg: MapboxEvent<undefined>) {\n        // async onMapReadyEvent(map: Map) {\n\n        this.log('onMapReadyEvent - begin');\n        this.mapInstance = arg?.target;\n        this.setMapLanguage();\n        if (!this.touchZoomRotationEnabled)\n            this.mapInstance.touchZoomRotate.disableRotation();\n        await this.loadImages(this.getPlacemarks<NxsMapMarker>('Point').filter(x => !!x.icon).map(x => x.icon));\n        this.mapReady = true;\n        // this.mapInstance.on('sourcedata', this.onSourceCallback.bind(this));\n        if (this.mglControl) {\n            const geoLocateControl = this.getGeoLocateControl();\n            if (geoLocateControl) {\n                geoLocateControl.on('trackuserlocationend', () => { this.geolocateControlState = 'passive'; });\n                geoLocateControl.on('trackuserlocationstart', () => { this.geolocateControlState = 'active'; });\n            }\n        }\n        if (this.mapOptions?.bindPolygonsHover === 'new') {\n            this.log('binding polygon mouse over new method');\n            this.mapInstance.on('mousemove', defaultPolygonsLayerId, (e) => {\n                if (e.features.length > 0) {\n                    if (this.polygonHoveredStateId != null) {\n                        this.mapInstance.setFeatureState(\n                            { source: 'source_' + defaultPolygonsLayerId, id: this.polygonHoveredStateId },\n                            { hover: false }\n                        );\n                    }\n                    this.polygonHoveredStateId = e.features[0].id;\n                    this.mapInstance.setFeatureState(\n                        { source: 'source_' + defaultPolygonsLayerId, id: this.polygonHoveredStateId },\n                        { hover: true }\n                    );\n                }\n            });\n\n            // When the mouse leaves the state-fill layer, update the feature state of the\n            // previously hovered feature.\n            this.mapInstance.on('mouseleave', defaultPolygonsLayerId, () => {\n                if (this.polygonHoveredStateId !== null) {\n                    this.mapInstance.setFeatureState(\n                        { source: 'source_' + defaultPolygonsLayerId, id: this.polygonHoveredStateId },\n                        { hover: false }\n                    );\n                }\n                this.polygonHoveredStateId = null;\n            });\n        }\n\n\n        this.onMapReady.emit(this);\n        this.log('onMapReadyEvent - end');\n    }\n    closeAllInfoWindows(): void {\n    }\n    onMarkerDragEnd(evt: any, marker: NxsMapMarker) {\n        const nxsLocation: NxsLocation = evt.getLngLat();\n        marker.lat = nxsLocation.lat;\n        marker.lng = nxsLocation.lng;\n        this.dragEnd.emit(marker);\n        // console.log(\"Log: NxsMapBoxComponent -> onDragEnd -> marker\", marker);\n        // console.log(\"Log: NxsMapBoxComponent -> onDragEnd -> evt\", evt);\n    }\n\n    public async fitToBounds(locations: ((NxsLocation[]) | NxsBounds), argOpts?: {\n        padding?: number | {\n            bottom: number; left: number; top: number; right: number;\n        };\n        maxZoom?: number;\n        animate?: boolean;\n        zoom?: number;\n    }) {\n        if ((locations as NxsBounds)?.isDefined != null && !(locations as NxsBounds)?.isDefined()) {\n            return;\n        }\n        if (!((locations as NxsLocation[])?.length) && !(locations as NxsBounds)?.isDefined) {\n            return;\n        }\n\n        await this.waitForMapReady();\n        const bounds = new LngLatBounds();\n        if ((locations as NxsBounds)?.isDefined != null) {\n            locations = (locations as NxsBounds).getLocations();\n        }\n        locations = (locations as NxsLocation[]).filter(x => x.lat != null && x.lng != null);\n        if (!locations.length)\n            return;\n        for (const location of locations) {\n            bounds.extend([location.lng, location.lat]);\n        }\n        const opts: FitBoundsOptions = {\n            padding: argOpts?.padding || this.fitBoundsPadding,\n            maxZoom: argOpts?.maxZoom,\n            animate: argOpts?.animate,\n            zoom: argOpts?.zoom,\n        };\n        if (opts.padding == null) {\n            delete opts.padding;\n        }\n        if (opts.maxZoom == null) {\n            delete opts.maxZoom;\n        }\n        if (opts.animate == null) {\n            delete opts.animate;\n        }\n        if (opts.zoom == null) {\n            delete opts.zoom;\n        }\n        this.mapInstance.fitBounds(bounds, opts);\n        // console.log(\"Log: NxsMapBoxComponent -> fitToBounds -> this.mapInstance.fitBounds\", bounds, this.fitBoundsPadding);\n    }\n    onMapDragEnd(evt: any) {\n        // console.log(\"Log: NxsMapBoxComponent -> onMapDragEnd -> evt\", evt);\n        // this.emitCurrentMapBounds();\n    }\n\n    rotateEnd(evt: any) {\n        // console.log(\"Log: NxsMapBoxComponent -> rotateEnd -> evt\", evt);\n        // this.emitCurrentMapBounds();\n    }\n\n    pitchEnd(evt: any) {\n        // console.log(\"Log: NxsMapBoxComponent -> pitchEnd -> evt\", evt);\n        // this.emitCurrentMapBounds();\n    }\n\n    moveEnd(evt: any) {\n        // console.log(\"Log: NxsMapBoxComponent -> moveEnd -> evt\", evt);\n        this.emitCurrentMapBounds();\n    }\n    move(evt: any) {\n        // console.log(\"Log: NxsMapBoxComponent -> moveEnd -> evt\", evt);\n        if (this.mapOptions?.polygonsSelectable) {\n            this.unselectAllPolygons(true, null);\n        }\n    }\n    onMoveStart(evt: any) {\n        this.moveStart.emit();\n    }\n    zoomEnd(evt: any) {\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts:920 ~ NxsMapBoxComponent ~ zoomEnd ~ evt\", this.mapInstance.getZoom(), evt);\n        this.zoomChange.emit(this.mapInstance?.getZoom());\n        // console.log(\"Log: NxsMapBoxComponent -> zoomEnd -> evt\", evt);\n        //  this.emitCurrentMapBounds();\n    }\n\n    changeMapStyle(newStyle: MapboxStyle, delay = 500) {\n        this.mapCreationBln = false;\n        this.setMapStyle = newStyle;\n        setTimeout(() => {\n            this.mapCreationBln = true;\n            if (this.customLayers?.length) {\n                setTimeout(() => {\n                    this.customLayers = [...this.customLayers];\n                }, delay);\n            }\n        }, delay);\n    }\n    private emitCurrentMapBounds() {\n        if (!this.mapInstance)\n            return;\n        if (this.mapOptions?.polygonsSelectable) {\n            this.unselectAllPolygons(true, null);\n        }\n        this.boundsChangeEmitter.emit(this.getBounds());\n    }\n\n    getBounds(): NxsBounds {\n        return NxsMapBoxComponent.transformToNxsBounds(this.mapInstance.getBounds());\n    }\n    onClustersLayerClick(evt: any, sourceName: string) {\n        const feature = evt?.features?.[0];\n        if (!feature)\n            return;\n        const clusterId = feature.properties.cluster_id;\n        (this.mapInstance.getSource(sourceName) as any).getClusterExpansionZoom(\n            clusterId,\n            (err, zoom) => {\n                if (err) return;\n\n                this.mapInstance.easeTo({\n                    center: (feature.geometry).coordinates,\n                    zoom: zoom,\n                });\n            }\n        );\n\n    }\n    /**\n    * set map center\n    * @param to BoundingBox or Point\n    * @param options Animation Options\n    */\n    setCenter(to: NxsLocation | NxsBounds, options?: MapboxAnimationCameraOptions) {\n        this.log('setCenter', to, options);\n        const moveOptions: MapboxMoveOptions = { animate: !!options };\n        let convertedBbox: [LngLatTuple, LngLatTuple];\n        if ((to as NxsBounds).northeast) {\n            convertedBbox = [((to as NxsBounds).southwest).toLngLat(), (to as NxsBounds).northeast.toLngLat()];\n        } else {\n            to = new NxsLocation((to as NxsLocation).lat, (to as NxsLocation).lng);\n            moveOptions.center = to.toLngLat();\n        }\n        if (options) {\n            if (options.zoom != null && !(to as NxsBounds).northeast)\n                moveOptions.zoom = options.zoom;\n            if (options.speed != null)\n                moveOptions.speed = options.speed;\n            if (options.curve != null)\n                moveOptions.curve = options.curve;\n            if (options.padding != null)\n                moveOptions.padding = options.padding;\n        }\n        if ((to as NxsBounds).northeast) {\n            this.mapInstance.fitBounds(convertedBbox, moveOptions);\n        } else {\n            this.mapInstance.flyTo(moveOptions);\n        }\n    }\n    getCenter(): NxsLocation {\n        if (!this.mapInstance)\n            return null;\n        return new NxsLocation(this.mapInstance.getCenter().lat, this.mapInstance.getCenter().lng);\n    }\n    private refreshManualLayers() {\n        const manualLayersToRemove: ManualLayer[] = [];\n        for (const layer of this.manualLayers) {\n            const mapboxLayer = this.getLayer(layer.layerId);\n            if (!mapboxLayer) {\n                manualLayersToRemove.push(layer);\n            }\n        }\n\n        for (const manualLayerToRemove of manualLayersToRemove) {\n            const index = this.manualLayers.findIndex(x => x === manualLayerToRemove);\n            if (index > -1) {\n                this.log('refresh layer - remove layer ' + manualLayerToRemove.layerId);\n                // if(manualLayerToRemove.polygonsSelectable){\n                //     this.mapInstance.off('click',manualLayerToRemove.layerId,manualLayerToRemove.layerClick);\n                // }\n                this.manualLayers.splice(index, 1);\n            }\n        }\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 946 ~ NxsMapBoxComponent ~ refreshManualLayers ~ this.manualLayers\", this.manualLayers);\n        const manualSourcesToRemove: string[] = [];\n        for (const source of this.manualSources) {\n            const mapboxSource = this.mapInstance.getSource(source.name);\n            if (!mapboxSource) {\n                manualSourcesToRemove.push(source.name);\n            }\n        }\n        for (const manualSourceToRemove of manualSourcesToRemove) {\n            const index = this.manualSources.findIndex(x => x.name === manualSourceToRemove);\n            if (index > -1) {\n                this.log('refresh layer/source - remove source ' + manualSourceToRemove);\n                this.manualSources.splice(index, 1);\n            }\n        }\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 946 ~ NxsMapBoxComponent ~ refreshManualLayers ~ this.manualSources\", this.manualSources);\n\n    }\n    getZoom(): number {\n        return this.mapInstance?.getZoom() || null;\n    }\n\n    private modifyBlocker(name, text) {\n        if (!this.mapInstance) {\n            return;\n        }\n        if (!this.mapInstance?.getContainer()) {\n            return;\n        }\n        const element: HTMLElement = this.mapInstance.getContainer().querySelector(\"div.mapboxgl-\" + name + \"-blocker\");\n        if (!element) {\n            return;\n        }\n        // element.style.background = \"rgb(0, 0, 0, 0.4)\";\n        // element.style.padding = \"0 2rem\";\n        // element.style.fontSize = \"1.6em\";\n        // element.style.lineHeight = \"1.3\";\n        // element.style.textShadow = \"0 0 0.25em black\";\n        element.textContent = text;\n    }\n\n    // private languageControl: any;\n    private setMapLanguage() {\n        if (!this.mapInstance || !this.pLanguage)\n            return;\n        // MapboxLanguage.\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 657 ~ NxsMapBoxComponent ~ setMapLanguage ~ MapboxLanguage\", MapboxLanguage);\n        // if (!this.languageControl) {\n        //     this.languageControl = new MapboxLanguage({ defaultLanguage: this.pLanguage });\n        //     this.mapInstance.addControl(this.languageControl);\n        // }\n        // const style = this.languageControl.setLanguage(this.mapInstance.getStyle(), this.pLanguage);\n        // this.mapInstance.setStyle(style);\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 648 ~ NxsMapBoxComponent ~ setMapLanguage ~ language\", language);\n        // language.setLanguage(this.mapInstance.getStyle().name, this.pLanguage);\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 651 ~ NxsMapBoxComponent ~ setMapLanguage ~ this.mapInstance.getStyle().name\", this.mapInstance.getStyle().name);\n        // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 650 ~ NxsMapBoxComponent ~ setMapLanguage ~ this.pLanguage\", this.pLanguage);\n        if (this.pLanguage === 'fr') {\n\n            this.modifyBlocker(\"touch-pan\", \"Utilisez 2 doigts pour bouger la carte\");\n            this.modifyBlocker(\"scroll-zoom\", \"Maintenir la touche CTRL / CMD enfoncée pour zoomer sur la carte\");\n        }\n\n        if (this.mapboxMapStyle === 'streets' || this.mapboxMapStyle === 'satellite-streets') {\n            try {\n                this.mapInstance.setLayoutProperty(\n                    'country-label',\n                    'text-field',\n                    '{name_' + this.pLanguage + '}'\n                );\n                this.mapInstance.setLayoutProperty(\n                    'state-label',\n                    'text-field',\n                    '{name_' + this.pLanguage + '}'\n                );\n                this.mapInstance.setLayoutProperty(\n                    'poi-label',\n                    'text-field',\n                    '{name_' + this.pLanguage + '}'\n                );\n                this.mapInstance.setLayoutProperty(\n                    'road-label',\n                    'text-field',\n                    '{name_' + this.pLanguage + '}'\n                );\n                this.mapInstance.setLayoutProperty(\n                    'settlement-label',\n                    'text-field',\n                    '{name_' + this.pLanguage + '}'\n                );\n                this.mapInstance.setLayoutProperty(\n                    'settlement-subdivision-label',\n                    'text-field',\n                    '{name_' + this.pLanguage + '}'\n                );\n            } catch (error) {\n                console.error(error);\n            }\n\n        }\n    }\n    removeLayer(layerId: string) {\n        this.mapInstance?.removeLayer(layerId);\n    }\n    addLayer(name: string, type: 'fill' | 'line' | 'symbol', sourceName: string, sourceLayer?: string, opts?: ManualLayer) {\n        const paint: any = {};\n        if (opts?.paint?.fillColor && type === 'fill') {\n            if (opts?.polygonsHoverable || opts?.polygonsSelectable) {\n                paint[\"fill-color\"] = [\n                    'case',\n                ];\n                if (opts?.polygonsSelectable && opts.paint.fillSelected != null) {\n                    paint[\"fill-color\"].push(...[\n                        ['boolean', ['feature-state', 'selected'], false],\n                        opts.paint.fillSelected,\n                    ]);\n                }\n                paint[\"fill-color\"].push(...[\n                    ['boolean', ['feature-state', 'hover'], false],\n                    opts.paint.fillHover,\n                    opts.paint.fillColor,\n                ]);\n            }\n            else\n                paint[\"fill-color\"] = opts.paint.fillColor;\n        }\n        if (opts?.paint?.fillOpacity && type === 'fill') {\n            if (opts?.polygonsHoverable || opts?.polygonsSelectable) {\n                paint[\"fill-opacity\"] = [\n                    'case',\n                ];\n                if (opts?.polygonsSelectable && opts.paint.fillOpacitySelected != null) {\n                    paint[\"fill-opacity\"].push(...[\n                        ['boolean', ['feature-state', 'selected'], false],\n                        opts.paint.fillOpacitySelected,\n                    ]);\n                }\n                paint[\"fill-opacity\"].push(...[\n                    ['boolean', ['feature-state', 'hover'], false],\n                    opts.paint.fillOpacityHover,\n                    opts.paint.fillOpacity,\n                ]);\n            }\n            else\n                paint[\"fill-opacity\"] = opts.paint.fillOpacity;\n        }\n        if (type === 'line' && (opts?.paint?.lineColor || (opts?.polygonsSelectable && opts.paint.lineColorSelected != null))) {\n            if (opts.paint.lineColor) {\n                paint[\"line-color\"] = opts.paint.lineColor;\n            }\n\n            if (opts?.polygonsSelectable && opts.paint.lineColorSelected != null) {\n                paint[\"line-color\"] = [\n                    'case',\n                ];\n                paint[\"line-color\"].push(...[\n                    ['boolean', ['feature-state', 'selected'], false],\n                    opts.paint.lineColorSelected,\n                    opts.paint.lineColor || '#FFFFFF',\n                ]);\n            }\n        }\n        if (type === 'line' && (opts?.paint?.lineWidth || (opts?.polygonsSelectable && opts.paint.lineWidthSelected != null))) {\n            if (opts.paint.lineWidth) {\n                paint[\"line-width\"] = opts.paint.lineWidth;\n            }\n\n            if (opts?.polygonsSelectable && opts.paint.lineWidthSelected != null) {\n                paint[\"line-width\"] = [\n                    'case',\n                ];\n                paint[\"line-width\"].push(...[\n                    ['boolean', ['feature-state', 'selected'], false],\n                    opts.paint.lineWidthSelected,\n                    opts.paint.lineWidth || 0,\n                ]);\n            }\n        }\n        if (opts?.paint?.['text-color']) {\n            paint['text-color'] = opts.paint['text-color'];\n        }\n        if (opts?.paint?.['text-halo-color']) {\n            paint['text-halo-color'] = opts.paint['text-halo-color'];\n        }\n        if (opts?.paint?.['text-halo-width']) {\n            paint['text-halo-width'] = opts.paint['text-halo-width'];\n        }\n        const layout: any = opts?.layout || null;\n        const layerData: any = {\n            id: name,\n            type: type,\n            source: sourceName,\n            paint: paint,\n            layout: layout,\n        };\n        if (!layerData.layout) {\n            delete layerData.layout;\n        }\n        if (sourceLayer) {\n            layerData['source-layer'] = sourceLayer;\n        }\n        if (opts?.layerFilters) {\n            layerData.filter = opts.layerFilters;\n        }\n        this.log('adding layer ', layerData);\n        this.mapInstance.addLayer(layerData,\n            (opts?.beforeLayer)\n            // (opts?.beforeLayer || 'road-label')\n            // 'aeroway-line'\n        );\n        if ((!!opts?.layerClick || !!opts?.polygonsSelectable) && !this.manualLayersClickAdded.some(x => x.layerId === name)) {\n            // console.log('adding polygon click evt');\n            const listener = (e: MapLayerMouseEvent) => {\n                // console.log(\"polygon click evt trigger ! e\", e?.features);\n                // if (!e?.features?.length) {\n                //     return;\n                // }\n                this.handlePlacemarkClick(e?.features?.[0], e?.features?.[0].geometry?.type as any, name, false, false);\n                if (opts?.layerClick) {\n                    const layerWrapper = this.manualLayers.find(x => x.layerId === name);\n                    opts?.layerClick(e?.features, layerWrapper?.polygonsSelected);\n                }\n            };\n            // console.log('add layer cick ', name);\n            this.manualLayersClickAdded.push({ layerId: name, listener: listener });\n            this.mapInstance.on('click', name, listener);\n        }\n        if (!this.manualLayers.some(x => x.layerId === name)) {\n            const newLayer = opts;\n            newLayer.layerId = name;\n            newLayer.type = type;\n            newLayer.source = sourceName;\n            this.manualLayers.push(newLayer);\n            // console.log(\"Log ~ file: nxs-mapbox.component.ts ~ line 1160 ~ NxsMapBoxComponent ~    this.manualSources\", this.manualLayers);\n\n        }\n\n        if (opts?.polygonsHoverable) {\n            this.log('binding polygon mouse over new method for layer ', name);\n            this.mapInstance.on('mousemove', name, (e) => {\n                if (e.features.length > 0) {\n                    const polygonHoveredStateWapper = this.manualLayers.find(x => x.layerId === name);\n                    if (polygonHoveredStateWapper?.polygonHoverId != null) {\n                        this.mapInstance.setFeatureState(\n                            { source: sourceName, sourceLayer: sourceLayer, id: polygonHoveredStateWapper?.polygonHoverId },\n                            { hover: false }\n                        );\n                    }\n                    polygonHoveredStateWapper.polygonHoverId = e.features[0].id;\n                    this.mapInstance.setFeatureState(\n                        { source: sourceName, sourceLayer: sourceLayer, id: polygonHoveredStateWapper.polygonHoverId },\n                        { hover: true }\n                    );\n                }\n            });\n            // When the mouse leaves the state-fill layer, update the feature state of the\n            // previously hovered feature.\n            this.mapInstance.on('mouseleave', name, () => {\n                const polygonHoveredStateWapper = this.manualLayers.find(x => x.layerId === name);\n                if (polygonHoveredStateWapper.polygonHoverId !== null) {\n                    this.mapInstance.setFeatureState(\n                        { source: sourceName, sourceLayer: sourceLayer, id: polygonHoveredStateWapper.polygonHoverId },\n                        { hover: false }\n                    );\n                }\n                polygonHoveredStateWapper.polygonHoverId = null;\n            });\n        }\n\n        if (type === 'fill' && (opts.polygonsSelectedBorders || opts.polygonsBorders)) {\n\n            const optsClone = MainHelpers.cloneObject(opts);\n            optsClone.type = 'line';\n            this.addLayer(name + '-polygon-borders', 'line', sourceName, sourceLayer, optsClone);\n            // this.setCustomLayersFromLayerWrapper(this.createLayerFromPolygons(val, true));\n\n\n        }\n    }\n    addTilesSource(sourceName: string, url: string, layers: {\n        name: string;\n        type: 'fill' | 'line' | 'symbol', sourceLayer: string, opts?: ManualLayer;\n    }[], sourceOptions?: { sourceType?: 'vector' | 'geojson'; minzoom?: number; maxzoom?: number; promoteId?: string; isTileUrl?: boolean; }) {\n        if (!sourceOptions) {\n            sourceOptions = {};\n        }\n        if (!sourceOptions.sourceType)\n            sourceOptions.sourceType = 'vector';\n        const sourceData: any = {\n            type: sourceOptions.sourceType,\n            tiles: [\n                url,\n            ],\n        };\n        if (sourceOptions?.isTileUrl) {\n            delete sourceData.tiles;\n            sourceData.url = url;\n        }\n        if (sourceOptions?.maxzoom) {\n            sourceData.maxzoom = sourceOptions.maxzoom;\n        }\n        if (sourceOptions?.minzoom) {\n            sourceData.minzoom = sourceOptions.minzoom;\n        }\n        if (sourceOptions?.promoteId) {\n            sourceData.promoteId = sourceOptions.promoteId;\n        }\n        this.mapInstance.addSource(sourceName, sourceData);\n        this.log('adding source ', sourceName, sourceData);\n        if (!this.manualSources.some(x => x.name === sourceName))\n            this.manualSources.push({ name: sourceName, loaded: false });\n        for (const cLayer of layers) {\n            this.addLayer(cLayer.name, cLayer.type, sourceName, cLayer.sourceLayer, cLayer.opts);\n        }\n    }\n    addJsMarker(opts: {\n        position: NxsLocation;\n        icon: string;\n        draggable?: boolean;\n        width?: number;\n        height?: number;\n        cssClass?: string;\n        clickListener?: () => void;\n        dragListener?: (data: NxsLocation) => void;\n        offset?: [number, number];\n    }) {\n        if (!opts.width)\n            opts.width = 50;\n\n        if (!opts.height)\n            opts.height = 50;\n        const el = document.createElement('div');\n\n        if (!opts.draggable)\n            opts.draggable = false;\n\n        if (!opts.cssClass)\n            opts.cssClass = 'nxs-marker';\n        el.className = opts.cssClass;\n        el.style.backgroundImage = `url(${opts.icon})`;\n        el.style.width = `${opts.width}px`;\n        el.style.height = `${opts.height}px`;\n        el.style.backgroundSize = 'contain';\n        el.style.backgroundPosition = 'center';\n        el.style.backgroundRepeat = 'no-repeat';\n\n        const marker = new Marker(el, { draggable: opts.draggable });\n        if (opts.offset?.length && opts.offset.length === 2)\n            marker.setOffset(opts.offset);\n        marker.setLngLat({ lat: opts.position.lat, lng: opts.position.lng });\n        if (opts.clickListener) {\n            marker.getElement().addEventListener('click', () => {\n                opts.clickListener();\n            });\n        }\n        if (opts.dragListener) {\n            marker.on('dragend', () => {\n                const latLng = marker.getLngLat();\n                opts.dragListener({ lat: latLng.lat, lng: latLng.lng });\n            });\n        }\n\n        marker.addTo(this.mapInstance);\n\n        return marker;\n    }\n    removeCustomLayer(customLayer: NxsMapboxLayerWrapper) {\n        if (this.layerExists(customLayer.layerId)) {\n            this.mapInstance?.removeLayer(customLayer.layerId);\n        }\n        if (this?.mapInstance?.getSource(customLayer.sourceName)) {\n            this?.mapInstance?.removeSource(customLayer.sourceName);\n        }\n    }\n    isSourceLoaded(sourceName: string) {\n        if (!sourceName)\n            return false;\n        return !!this.mapInstance?.isSourceLoaded(sourceName);\n    }\n    private onSourceCallback() {\n        for (const source of this.manualSources) {\n            if (!source?.name)\n                continue;\n            if (this.mapInstance.getSource(source?.name) && this.mapInstance.isSourceLoaded(source?.name)) {\n                source.loaded = true;\n            }\n        }\n\n    }\n    getMapImageDataUrl() {\n        return this.mapInstance?.getCanvas()?.toDataURL();\n    }\n\n    flyTo(opts: {\n        center: NxsLocation; animate?: boolean; zoom?: number; padding?: {\n            top: number;\n            bottom: number;\n            left: number;\n            right: number;\n        }\n    }) {\n        if (!opts) {\n            return;\n        }\n        const mapboxOpts: any = {\n            animate: !!opts.animate, center: { lng: opts.center.lng, lat: opts.center.lat },\n        };\n        if (opts.zoom != null) {\n            mapboxOpts.zoom = opts.zoom;\n        }\n        if (opts.padding) {\n            mapboxOpts.padding = {\n                bottom: opts.padding.bottom,\n                left: opts.padding.left,\n                top: opts.padding.top,\n                right: opts.padding.right,\n            };\n        }\n        this.mapInstance?.flyTo(mapboxOpts);\n    }\n\n}\n","<mgl-map [accessToken]=\"accessToken\" [cooperativeGestures]=\"cooperativeGestures\" *ngIf=\"isBrowser && mapCreationBln\"\n    (mapLoad)=\"onMapReadyEvent($event)\" [style]=\"mapStyle\" [zoom]=\"zoom\"\n    [center]=\"(lngValue && latValue) ? [lngValue, latValue] : undefined\" (mapClick)=\"onMapClick($event)\"\n    (mapDragEnd)=\"onMapDragEnd($event)\" (rotateEnd)=\"rotateEnd($event)\" [pitchWithRotate]=\"pitchWithRotate\"\n    [logoPosition]=\"logoPosition\" [dragRotate]=\"dragRotate\" [touchZoomRotate]=\"touchZoomRotate\"\n    [attributionControl]=\"attributionControl\" (moveEnd)=\"moveEnd($event)\" (moveStart)=\"onMoveStart($event)\"\n    (pitchEnd)=\"pitchEnd($event)\" [transformRequest]=\"transformRequest\" (zoomEnd)=\"zoomEnd($event)\"\n    [interactive]=\"interactive\" [preserveDrawingBuffer]=\"preserveDrawingBuffer\" [maxZoom]=\"maxZoom\" [minZoom]=\"minZoom\"\n    [scrollZoom]=\"scrollZoom\">\n\n    <mgl-control #mglControl *ngIf=\"showUserLocation\" mglGeolocate\n        [positionOptions]=\"{enableHighAccuracy:true,timeout:10000}\" [trackUserLocation]=\"trackUserLocation\"\n        [fitBoundsOptions]=\"{maxZoom:showUserLocationMaxZoom}\" [position]=\"geolocateControlPosition\"\n        (geolocate)=\"onGeolocate($event)\">\n    </mgl-control>\n    <mgl-control *ngIf=\"showNavigationControls\" mglNavigation [position]=\"navigationControlPosition\"></mgl-control>\n\n    <ng-container *ngIf=\"mapReady\">\n\n        <ng-container *ngIf=\"customLayers\">\n            <ng-container *ngFor=\"let layerWrapper of customLayers\">\n                <mgl-geojson-source [id]=\"layerWrapper.sourceName\" [cluster]=\"!!layerWrapper.clusterOptions\"\n                    [clusterMaxZoom]=\"layerWrapper.clusterOptions && layerWrapper.clusterOptions.clusterMaxZoom ? layerWrapper.clusterOptions.clusterMaxZoom : 14\"\n                    [clusterRadius]=\"layerWrapper.clusterOptions && layerWrapper.clusterOptions.clusterRadius ? layerWrapper.clusterOptions.clusterRadius : 50\">\n                    <mgl-feature *ngFor=\"let feature of layerWrapper.sourceFeatures;\" [geometry]=\"feature.geometry\"\n                        [properties]=\"feature.properties\">\n                    </mgl-feature>\n                </mgl-geojson-source>\n                <mgl-layer (layerMouseEnter)=\"layerMouseEnter($event,layerWrapper.layerId)\"\n                    (layerMouseLeave)=\"layerMouseLeave($event,layerWrapper.layerId)\"\n                    (layerClick)=\"layerClick($event,layerWrapper.layerId)\" [id]=\"layerWrapper.layerId\"\n                    [type]=\"layerWrapper.layerType\" [source]=\"layerWrapper.sourceName\" [layout]=\"layerWrapper.layout\"\n                    [paint]=\"layerWrapper.paint\" [before]=\"layerWrapper.before\" [minzoom]=\"layerWrapper.minZoom\"\n                    [maxzoom]=\"layerWrapper.maxZoom\"></mgl-layer>\n                <ng-container *ngIf=\"layerWrapper.clusterOptions\">\n                    <mgl-layer (layerClick)=\"onClustersLayerClick($event,layerWrapper.sourceName)\"\n                        [id]=\"layerWrapper.layerId +  '_clusters'\" type=\"circle\" [source]=\"layerWrapper.sourceName\"\n                        [filter]=\"['has', 'point_count']\" [paint]=\"{\n                        'circle-color': layerWrapper.clusterOptions.circleColor,\n                        'circle-radius': [\n                        'step',\n                        ['get', 'point_count'],\n                        20,\n                        100,\n                        30,\n                        750,\n                        40\n                        ]\n                    }\">\n                    </mgl-layer>\n                    <mgl-layer [id]=\"layerWrapper.layerId +  '_cluster-count'\" type=\"symbol\"\n                        [source]=\"layerWrapper.sourceName\" [filter]=\"['has', 'point_count']\" [layout]=\"{\n                        'text-field': '{point_count_abbreviated}',\n        'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n        'text-size': layerWrapper.clusterOptions.textSize\n                    }\" [paint]=\"{'text-color':layerWrapper.clusterOptions.textColor}\">\n                    </mgl-layer>\n\n\n\n                    <!-- <mgl-layer id=\"unclustered-point\" type=\"circle\" source=\"markers\" [filter]=\"['!', ['has', 'point_count']]\"\n                        [paint]=\"{\n                            'circle-color': '#11b4da',\n                            'circle-radius': 4,\n                            'circle-stroke-width': 1,\n                            'circle-stroke-color': '#fff'\n                    }\">\n                    </mgl-layer> -->\n\n\n                </ng-container>\n            </ng-container>\n\n        </ng-container>\n\n        <ng-container *ngIf=\"currentInfoWindow\">\n            <mgl-popup [closeOnClick]=\"(currentInfoWindow.closeOnClick!==false)\" [closeButton]=\"false\"\n                (popupClose)=\"markerClose(currentInfoWindow)\" [lngLat]=\"[currentInfoWindow.lng,currentInfoWindow.lat]\"\n                [offset]=\"currentInfoWindow.offset ? ([currentInfoWindow.offset.lng, currentInfoWindow.offset.lat]) : undefined\"\n                [anchor]=\"currentInfoWindow.anchor\">\n                <div class=\"nxsMarkerInfowindowContentWrapper\"\n                    [innerHTML]=\"currentInfoWindow.infoWindowContent | mapsNoSanitize\"></div>\n            </mgl-popup>\n        </ng-container>\n        <ng-container *ngIf=\"customInfowindows?.length\">\n            <mgl-popup [focusAfterOpen]=\"customInfowindow?.focusAfterOpen\"\n                *ngFor=\"let customInfowindow of customInfowindows\"\n                [closeOnClick]=\"(customInfowindow.closeOnClick!==false)\" [closeButton]=\"false\"\n                (popupClose)=\"markerClose(customInfowindow)\" [lngLat]=\"[customInfowindow.lng,customInfowindow.lat]\"\n                [offset]=\"customInfowindow.offset ? ([customInfowindow.offset.lng, customInfowindow.offset.lat]) : undefined\"\n                [anchor]=\"customInfowindow.anchor\">\n                <div class=\"nxsMarkerInfowindowContentWrapper\"\n                    [innerHTML]=\"customInfowindow.infoWindowContent | mapsNoSanitize\"></div>\n            </mgl-popup>\n        </ng-container>\n\n        <!-- <ng-container *ngFor=\"let marker of markers\">\n            <mgl-popup [closeButton]=\"false\" (close)=\"markerClose(marker)\" *ngIf=\"marker.infoWindowOpen\"\n                [lngLat]=\"[marker.lng,marker.lat]\" [closeOnClick]=\"true\">\n                <div class=\"nxsMarkerInfowindowContentWrapper\" [innerHTML]=\"marker.infoWindowContent\"></div>\n            </mgl-popup>\n        </ng-container> -->\n\n\n\n\n    </ng-container>\n    <!-- \n         [paint]=\"{'fill-color':['case',['get','hover'],['get','fill-hover'],['get','fill']],'fill-opacity':['get', 'opacity' ]}\"\n    -->\n    <!-- [\"case\",[\"hover\"],[\"get,fill\"],[\"get\",\"fill-hover\"]] -->\n\n    <ng-container *ngIf=\"mglMarkers\">\n        <mgl-marker [draggable]=\"marker.draggable\" (markerDragEnd)=\"onMarkerDragEnd($event,marker)\"\n            *ngFor=\"let marker of mglMarkers\" [lngLat]=\"[marker.lng, marker.lat]\"\n            [offset]=\"marker.offset ? [marker.offset.lng, marker.offset.lat] : null\">\n            <div style=\"background-size: contain;background-position: center;\"\n                [style.backgroundImage]=\"'url(' + (marker.icon ? marker.icon : options.defaultMarkerIcon) + ')'\"\n                [style.width.px]=\"marker.markerWidth || mapboxOptions.mapBoxMarkerWidth\"\n                [style.height.px]=\"marker.markerHeight || mapboxOptions.mapBoxMarkerHeight\"\n                (click)=\"onMarkerClickMgl(marker)\" class=\"mapbox-marker\">\n            </div>\n        </mgl-marker>\n    </ng-container>\n\n    <!-- 'step',\n    ['get', 'point_count'],\n    layerWrapper.clusterOptions.colors[0],\n    100,\n    layerWrapper.clusterOptions.colors[1],\n    750,\n    layerWrapper.clusterOptions.colors[2] -->\n    <!-- <mgl-popup [closeButton]=\"false\" [lngLat]=\"[lngValue,latValue]\">\n        <div class=\"nxsMarkerInfowindowContentWrapper\">test</div>\n    </mgl-popup>\n    <ng-content>\n\n    </ng-content> -->\n</mgl-map>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api-mapbox';\n"],"names":["i1","i3.MapsNoSanitizePipe"],"mappings":"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"}