{"version":3,"file":"elderbyte-ngx-map-gl.mjs","sources":["../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/rectangle-select-handler.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/elder-map/map-source-layers.directive.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/map-builder.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/map-util.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/map-configurator.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/polyline-util.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/events/map-downstream-events.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/map-style-builder.service.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-control-position.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-control-wrapper/map-control-wrapper.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-control-wrapper/map-control-wrapper.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-flyto-control/map-fly-to-control.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-flyto-control/map-fly-to-control.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/elder-map-controller.service.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/config/elder-map-config.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-style-chooser-control/map-style-chooser-control.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-style-chooser-control/map-style-chooser-control.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-navigation-reset-control/map-navigation-reset-control.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-navigation-reset-control/map-navigation-reset-control.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-control-placeholder/map-control-placeholder.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/controls/map-control-placeholder/map-control-placeholder.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/elder-map/elder-map.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/elder-map/elder-map.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/map/elder-map.module.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/marker-feature-symbol/marker-feature-symbol.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/marker-feature-symbol/marker-feature-symbol.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/marker-label/marker-label.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/marker-label/marker-label.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/marker-main-symbol/marker-main-symbol.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/marker-main-symbol/marker-main-symbol.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/layers/sources/marker-sources.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/elder-map-marker-position.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/layers/layer-util.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/layers/circle-layers.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/layers/symbol-layers.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/layers/label-layers.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/elder-map-marker/elder-map-marker.component.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/elder-map-marker/elder-map-marker.component.html","../../../../projects/elderbyte/ngx-map-gl/src/lib/components/marker/elder-map-marker.module.ts","../../../../projects/elderbyte/ngx-map-gl/src/lib/common/utils/color-expression-util.ts","../../../../projects/elderbyte/ngx-map-gl/src/elderbyte-ngx-map-gl.ts"],"sourcesContent":["import * as MapBox from 'maplibre-gl'\nimport { ElementRef } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\nimport Point from '@mapbox/point-geometry'\n\nexport class RectangleSelectHandler {\n  private _canvas: HTMLElement\n  private _box: any\n  private _mousePosStart: any\n  private _mousePosCurrent: any\n  private _map: MapBox.Map\n  private _boxElementRef: ElementRef\n  private _geoJsonFeaturesOnBoundingBoxSelectEvents$ = new Subject<MapBox.MapGeoJSONFeature[]>()\n\n  public start(map: MapBox.Map, boxElementRef: ElementRef, canvas: HTMLElement): void {\n    this._map = map\n    this._boxElementRef = boxElementRef\n    this._canvas = canvas\n\n    // Set `true` to dispatch the event before other functions\n    // call it. This is necessary for disabling the default map\n    // dragging behaviour.\n    this._canvas.addEventListener('mousedown', this.mouseDown, true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Getter\n   *                                                                         *\n   **************************************************************************/\n\n  public get rectangleSelectGeo$(): Observable<MapBox.MapGeoJSONFeature[]> {\n    return this._geoJsonFeaturesOnBoundingBoxSelectEvents$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Return the xy coordinates of the mouse position\n   */\n  private mousePos = (e: any) => {\n    const rect = this._canvas.getBoundingClientRect()\n    return new Point(\n      e.clientX - rect.left - this._canvas.clientLeft,\n      e.clientY - rect.top - this._canvas.clientTop\n    )\n  }\n\n  private mouseDown = (e: any) => {\n    // Continue the rest of the function if the shiftkey is pressed.\n    if (!(e.shiftKey && e.button === 0)) {\n      return\n    }\n\n    // Make SelectionRectangle visible\n    this._boxElementRef.nativeElement.style.visibility = 'visible'\n\n    // Disable default drag zooming when the shift key is held down.\n    this._map.dragPan.disable()\n\n    // Call functions for the following events\n    document.addEventListener('mousemove', this.onMouseMove)\n    document.addEventListener('mouseup', this.onMouseUp)\n    document.addEventListener('keydown', this.onKeyDown)\n\n    // Capture the first xy coordinates\n    this._mousePosStart = this.mousePos(e)\n  }\n\n  private onMouseMove = (e: any) => {\n    // Capture the ongoing xy coordinates\n    this._mousePosCurrent = this.mousePos(e)\n\n    // Append the box element if it doesnt exist\n    if (!this._box) {\n      this._box = this._boxElementRef.nativeElement\n      this._canvas.appendChild(this._box)\n    }\n\n    const minX = Math.min(this._mousePosStart.x, this._mousePosCurrent.x),\n      maxX = Math.max(this._mousePosStart.x, this._mousePosCurrent.x),\n      minY = Math.min(this._mousePosStart.y, this._mousePosCurrent.y),\n      maxY = Math.max(this._mousePosStart.y, this._mousePosCurrent.y)\n\n    // Adjust width and xy position of the box element ongoing\n    const pos = 'translate(' + minX + 'px,' + minY + 'px)'\n    this._box.style.transform = pos\n    this._box.style.WebkitTransform = pos\n    this._box.style.width = maxX - minX + 'px'\n    this._box.style.height = maxY - minY + 'px'\n  }\n\n  private onMouseUp = (e: any) => {\n    // Capture xy coordinates\n    this.finish([this._mousePosStart, this.mousePos(e)])\n  }\n\n  private onKeyDown = (e: any) => {\n    // If the ESC key is pressed\n    if (e.code === 'Escape') {\n      this.finish()\n    }\n  }\n\n  private finish = (bbox?: any) => {\n    // Remove these events now that finish has been called.\n    document.removeEventListener('mousemove', this.onMouseMove)\n    document.removeEventListener('keydown', this.onKeyDown)\n    document.removeEventListener('mouseup', this.onMouseUp)\n\n    if (this._box) {\n      this._box.parentNode.removeChild(this._box)\n      this._box = null\n    }\n\n    // If bbox exists. use this value as the argument for `queryRenderedFeatures`\n    if (bbox) {\n      const features = this._map.queryRenderedFeatures(bbox)\n\n      this._geoJsonFeaturesOnBoundingBoxSelectEvents$.next(features)\n    }\n    this._map.dragPan.enable()\n  }\n}\n","import { Directive, Input } from '@angular/core'\nimport { LayerDescription, SourceDescription } from '../elder-map-interfaces'\n\n@Directive({\n  selector: '[elderMapSourceLayers]',\n})\nexport class MapSourceLayersDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public sourceDescription: SourceDescription\n\n  @Input()\n  public layerDescriptions: LayerDescription[]\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n}\n","import * as MapBox from 'maplibre-gl'\nimport { ElderMapConfig } from './config/elder-map-config'\n\nexport class MapBuilder {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _container: string | HTMLElement\n\n  private _config: ElderMapConfig\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start(): MapBuilder {\n    return new MapBuilder()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public container(container: string | HTMLElement): MapBuilder {\n    this._container = container\n    return this\n  }\n\n  public config(conf: ElderMapConfig): MapBuilder {\n    this._config = conf\n    return this\n  }\n\n  public build(): MapBox.Map {\n    if (!this._container) {\n      throw new Error('No map container specified!')\n    }\n    if (!this._config) {\n      throw new Error('No map config specified!')\n    }\n\n    return new MapBox.Map({\n      container: this._container,\n      style: this._config.style,\n      center: this._config.center,\n      zoom: this._config.zoom,\n      maxZoom: this._config.maxZoom,\n      pitch: this._config.pitch,\n      trackResize: true,\n      bearing: this._config.bearing,\n      transformRequest: this.transformRequestFn(this._config),\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private transformRequestFn(conf: ElderMapConfig) {\n    return (url, resourceType) => {\n      return !!conf.solumTilesKey\n        ? {\n            url: url,\n            headers: { 'X-SOLUM-TILES-KEY': conf.solumTilesKey },\n          }\n        : {\n            url: url,\n          }\n    }\n  }\n}\n","import * as MapBox from 'maplibre-gl'\nimport { LayerDescription, SourceDescription } from './elder-map-interfaces'\n\nexport class MapUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Mouseover-Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public static loadMouseOverEventsForLayer(\n    layerDescription: LayerDescription,\n    sourceDescription: SourceDescription,\n    map: MapBox.Map\n  ): void {\n    // Log GeoJsonFeatures behind while mouse over\n    if (layerDescription.logFeaturesByMouseOver) {\n      MapUtil.logFeaturesByMouseOver([layerDescription.layer.id], map)\n    }\n    // Change cursor style while mouse over\n    if (layerDescription.changeCursorStyleByMouseOver) {\n      MapUtil.changeCursorStyleByMouseOver([layerDescription.layer.id], map)\n    }\n    // Set Feature state ({hover: false}) while mouse over\n    if (layerDescription.updateFeatureStateByMouseOver) {\n      MapUtil.updateFeatureStateByMouseOver(sourceDescription.name, layerDescription.layer.id, map)\n    }\n  }\n\n  private static logFeaturesByMouseOver(layerIds: string[], map: MapBox.Map): void {\n    layerIds.forEach((layerId) => {\n      map.on('mousemove', layerId, (e) => {\n        console.log(map.queryRenderedFeatures(e.point))\n      })\n    })\n  }\n\n  /**\n   * Pass an array with layer names where the mouse cursor has to change to \"pointer\" while hovering.\n   */\n  private static changeCursorStyleByMouseOver(layerIds: string[], map: MapBox.Map): void {\n    layerIds.forEach((layerId) => {\n      map.on('mousemove', layerId, (e) => {\n        map.getCanvas().style.cursor = 'pointer'\n      })\n\n      map.on('mouseleave', layerId, () => {\n        map.getCanvas().style.cursor = ''\n      })\n    })\n  }\n\n  /**\n   With Feature State, you can update the “state” of a feature at run-time, allowing control over\n   the style of the individual feature without the map rendering engine (Mapbox GL) having to re-parse the underlying\n   geometry and data. This offers a significant boost in performance.\n\n   Features are identified by their id property and must be unique across a source or source layer.\n   This is not the same as adding an id attribute to the feature’s properties object.\n\n   See: https://blog.mapbox.com/going-live-with-electoral-maps-a-guide-to-feature-state-b520e91a22d\n   */\n  private static updateFeatureStateByMouseOver(\n    sourceId: string,\n    layerId: string,\n    map: MapBox.Map\n  ): void {\n    let hoveredStateId = null\n\n    map.on('mousemove', layerId, (e) => {\n      if (e.features.length > 0) {\n        if (hoveredStateId) {\n          map.setFeatureState({ source: sourceId, id: hoveredStateId }, { hover: false })\n        }\n        hoveredStateId = e.features[0].id\n        map.setFeatureState({ source: sourceId, id: hoveredStateId }, { hover: true })\n      }\n    })\n\n    map.on('mouseleave', layerId, () => {\n      if (hoveredStateId) {\n        map.setFeatureState({ source: sourceId, id: hoveredStateId }, { hover: false })\n      }\n      hoveredStateId = null\n    })\n  }\n}\n","import * as MapBox from 'maplibre-gl'\nimport { QueryList } from '@angular/core'\nimport { MapSourceLayersDirective } from './elder-map/map-source-layers.directive'\nimport { LayerDescription } from './elder-map-interfaces'\nimport { MapBuilder } from './map-builder'\nimport { ElderMapConfig } from './config/elder-map-config'\nimport { MapUtil } from './map-util'\n\nexport class MapConfigurator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly map: MapBox.Map\n\n  private interrupt = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly container: string | HTMLElement,\n    private readonly config: ElderMapConfig\n  ) {\n    this.map = MapBuilder.start().container(container).config(config).build()\n\n    // Disable boxZoom for rectangle select\n    this.map.boxZoom.disable()\n\n    // Disable zoom and compass controls\n    if (!config.disableControls) {\n      this.enableControls()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API\n   *                                                                         *\n   **************************************************************************/\n\n  public getMap(): MapBox.Map {\n    return this.map\n  }\n\n  public disconnect(): void {\n    this.interrupt = true\n\n    if (this.map) {\n      // https://docs.mapbox.com/mapbox-gl-js/api/#map#remove\n      this.map.remove()\n    }\n  }\n\n  /** How to remove microtask queue, known approach is using a interrupt flag **/\n  public async setMapFundamentals(\n    images: Map<string, string>,\n    sourceLayers: QueryList<MapSourceLayersDirective>,\n    layersOrder: string[]\n  ): Promise<void> {\n    if (this.interrupt) {\n      return\n    }\n    await this.loadImages(images)\n\n    if (this.interrupt) {\n      return\n    }\n    await this.loadSources(sourceLayers)\n\n    if (this.interrupt) {\n      return\n    }\n    await this.loadLayers(sourceLayers)\n\n    if (this.interrupt) {\n      return\n    }\n    await this.setLayersOrder(layersOrder)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private enableControls() {\n    this.map.addControl(new MapBox.NavigationControl())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Fundamentals - Images\n   *                                                                         *\n   **************************************************************************/\n\n  private async loadImages(images: Map<string, string>): Promise<void> {\n    // Load images\n    if (images) {\n      // @ts-ignore\n      for (const [imageName, imagePath] of images.entries()) {\n        // Re-Check because of nested promises\n        if (this.interrupt) {\n          return\n        }\n        this.addImage(imageName, await this.loadImage(imagePath))\n      }\n    }\n  }\n\n  private async loadImage(url: string): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.map.loadImage(url, (error: any, data: any) => resolve(data))\n    })\n  }\n\n  private addImage(imageId: string, image: any) {\n    // Re-Check because of nested promises\n    if (this.interrupt) {\n      return\n    }\n    this.map.addImage(imageId, image)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Fundamentals - sourceLayers\n   *                                                                         *\n   **************************************************************************/\n\n  private async loadSources(sourceLayers: QueryList<MapSourceLayersDirective>): Promise<void> {\n    // Add sources\n    sourceLayers.forEach((sl: MapSourceLayersDirective) => {\n      this.map.addSource(sl.sourceDescription.name, sl.sourceDescription.source)\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Fundamentals - Layers\n   *                                                                         *\n   **************************************************************************/\n\n  private async loadLayers(sourceLayers: QueryList<MapSourceLayersDirective>): Promise<void> {\n    // Add layers\n    sourceLayers.forEach((sl: MapSourceLayersDirective) => {\n      sl.layerDescriptions.forEach((layerDescription: LayerDescription) => {\n        this.map.addLayer(layerDescription.layer)\n        MapUtil.loadMouseOverEventsForLayer(layerDescription, sl.sourceDescription, this.map)\n      })\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Fundamentals - Layer Order\n   *                                                                         *\n   **************************************************************************/\n\n  private async setLayersOrder(layersOrder: string[]): Promise<void> {\n    // layersOrder\n    if (layersOrder) {\n      for (const layer of layersOrder) {\n        this.moveLayer(layer)\n      }\n    }\n  }\n\n  private moveLayer(layerId: string, layerBeforeId?: string): void {\n    this.map.moveLayer(layerId, layerBeforeId)\n  }\n}\n","import * as MapBox from 'maplibre-gl'\nimport * as MapboxDecode from '@mapbox/polyline'\n\nexport class PolylineUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static calcBoundOfPolyline(polyLine: string): MapBox.LngLatBounds {\n    const coordinates = this.decode(polyLine)\n\n    // Create a 'LngLatBounds' with both corners at the first coordinate.\n    const bounds = new MapBox.LngLatBounds(coordinates[0], coordinates[0])\n\n    // Extend the 'LngLatBounds' to include every coordinate in the bounds result.\n    for (const coordinate of coordinates) {\n      bounds.extend(coordinate)\n    }\n\n    return bounds\n  }\n\n  public static decode(polyLine: string): MapBox.LngLat[] {\n    const coordinates = MapboxDecode.decode(polyLine)\n\n    // polyline returns coords in lat, lng order, so we need to be careful with the indexes.\n    return coordinates.map((c: [number, number]) => new MapBox.LngLat(c[1], c[0]))\n  }\n\n  /**\n   * Flips the values of each coordinate pair.\n   * @param coords array of coordinates\n   * @return array of coordinates where the values of each coordinate are flipped.\n   */\n  public static flipCoordinates(coords: number[][]): number[][] {\n    const flipped = []\n    for (let i = 0; i < coords.length; i++) {\n      const coord = coords[i].slice()\n      flipped.push([coord[1], coord[0]])\n    }\n    return flipped\n  }\n}\n","import * as MapBox from 'maplibre-gl'\nimport { FeaturesState, MapLineString, MapPoints } from '../elder-map-interfaces'\nimport { Feature, FeatureCollection } from 'geojson'\nimport { Observable, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { PolylineUtil } from '../../polyline-util'\n\nexport class MapDownstreamEvents {\n  // MapBoxAdapter\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly map: MapBox.Map\n  private readonly _unsubscribe$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(map: MapBox.Map) {\n    this.map = map\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API - Init Events\n   *                                                                         *\n   **************************************************************************/\n\n  public dispatchMapPointsAndLineStringEvents(event: MapLineString | MapPoints) {\n    this.log.debug('Dispatching MapFeatures:', event)\n    if (!(event as MapLineString).geometry) {\n      this.onMapPointsEvent(event as MapPoints)\n    } else {\n      this.onMapLineStringEvent(event as MapLineString)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API - MapPoints\n   *                                                                         *\n   **************************************************************************/\n\n  public onMapPointsEvent(next: MapPoints) {\n    if (!next.pointProperties) {\n      this.clearDataSource(next.mapboxSourceId)\n      return\n    }\n\n    const sourceId = next.mapboxSourceId\n    const pointProperties = next.pointProperties\n\n    const featureCollection: FeatureCollection = { type: 'FeatureCollection', features: [] }\n\n    for (let i = 0; i < pointProperties.length; i++) {\n      const featureId = next.disableAutoGenerateFeatureId ? pointProperties[i].featureId : i + 30000\n\n      featureCollection.features.push({\n        id: featureId,\n        type: 'Feature',\n        geometry: {\n          type: 'Point',\n          coordinates: [pointProperties[i].lng, pointProperties[i].lat],\n        },\n        properties: {\n          data: pointProperties[i].data,\n        },\n      })\n    }\n\n    ;(this.map.getSource(sourceId) as MapBox.GeoJSONSource).setData(featureCollection)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API - LineString\n   *                                                                         *\n   **************************************************************************/\n\n  public onMapLineStringEvent(next: MapLineString) {\n    if (!next.geometry) {\n      this.clearDataSource(next.mapboxSourceId)\n      return\n    }\n\n    const sourceId = next.mapboxSourceId\n    const routeGeometry = next.geometry\n\n    const feature: Feature = {\n      type: 'Feature',\n      properties: null,\n      geometry: {\n        type: 'LineString',\n        coordinates: PolylineUtil.decode(routeGeometry).map((coord) => [coord.lng, coord.lat]),\n      },\n    }\n    ;(this.map.getSource(sourceId) as MapBox.GeoJSONSource).setData(feature)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API - Feature State\n   *                                                                         *\n   **************************************************************************/\n\n  public initFeaturesStateEvents$(featuresStateEvents$: Observable<FeaturesState>) {\n    if (featuresStateEvents$) {\n      featuresStateEvents$\n        .pipe(takeUntil(this._unsubscribe$))\n        .subscribe((next) => this.onFeaturesStateEvent(next))\n    }\n  }\n\n  public disconnect(): void {\n    this._unsubscribe$.next()\n    this._unsubscribe$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public onFeaturesStateEvent(featuresStateEvent: FeaturesState): void {\n    for (const [sourceId, featureId] of featuresStateEvent.sourceIdsAndFeatureIds) {\n      this.map.setFeatureState({ source: sourceId, id: featureId }, featuresStateEvent.state)\n    }\n  }\n\n  private clearDataSource(source: string) {\n    if (!this.map) {\n      return\n    }\n\n    // Setting source data to null doesn't trigger the rendering\n    // Therefore a empty GeoJson is needed\n    const featureCollection: FeatureCollection = { type: 'FeatureCollection', features: [] }\n    ;(this.map.getSource(source) as MapBox.GeoJSONSource).setData(featureCollection)\n  }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { HttpClient } from '@angular/common/http'\nimport { map } from 'rxjs/operators'\nimport { Observable } from 'rxjs'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MapStyleBuilderService {\n  private httpClient = inject(HttpClient)\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static readonly JSON_PATH_SOURCES = 'sources'\n  private static readonly JSON_PATH_TILES = 'tiles'\n  private static readonly JSON_PATH_GLYPHS = 'glyphs'\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API\n   *                                                                         *\n   **************************************************************************/\n\n  public loadStyle(\n    styleUrl: string,\n    vectorTileUrls: Map<string, string>,\n    glyphsUrl: string\n  ): Observable<Object> {\n    return this.httpClient.get<Object>(styleUrl).pipe(\n      map((styleObject) => {\n        this.patchStyle(styleObject, vectorTileUrls, glyphsUrl)\n        return styleObject\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private patchStyle(styleJson: any, vectorTileUrls: Map<string, string>, glyphsUrl: string): void {\n    // Patch style data with vector data\n    vectorTileUrls.forEach((url: string, sourceName: string) => {\n      styleJson[MapStyleBuilderService.JSON_PATH_SOURCES][sourceName][\n        MapStyleBuilderService.JSON_PATH_TILES\n      ].push(url)\n    })\n\n    // Patch style data with glyphs data\n    styleJson[MapStyleBuilderService.JSON_PATH_GLYPHS] = glyphsUrl\n  }\n}\n","export enum MapControlPosition {\n  top = 'top',\n  bottom = 'bottom',\n  left = 'left',\n  right = 'right',\n  topLeft = 'top-left',\n  topRight = 'top-right',\n  bottomRight = 'bottom-right',\n  bottomLeft = 'bottom-left',\n}\n","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'\n\n@Component({\n  selector: 'elder-map-control-wrapper',\n  templateUrl: './map-control-wrapper.component.html',\n  styleUrls: ['./map-control-wrapper.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class MapControlWrapperComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n","<div class=\"layout-row place-center-center full elder-map-gl-control-wrapper\">\n  <ng-content></ng-content>\n</div>\n","import {\n  Component,\n  ElementRef,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n  inject,\n  ChangeDetectionStrategy,\n} from '@angular/core'\nimport { UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { Observable, Subject } from 'rxjs'\nimport { filter, throttleTime } from 'rxjs/operators'\nimport { HttpClient } from '@angular/common/http'\nimport { FlyTo } from '../../elder-map-interfaces'\nimport { ElderTranslatePipe } from '@elderbyte/ngx-starter'\nimport { MatOptionModule } from '@angular/material/core'\nimport { AsyncPipe } from '@angular/common'\nimport { MatAutocompleteModule } from '@angular/material/autocomplete'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MapControlWrapperComponent } from '../map-control-wrapper/map-control-wrapper.component'\n\n@Component({\n  selector: 'elder-map-flyto-control',\n  templateUrl: './map-fly-to-control.component.html',\n  styleUrls: ['./map-fly-to-control.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MapControlWrapperComponent,\n    FormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    ReactiveFormsModule,\n    MatOptionModule,\n    AsyncPipe,\n    ElderTranslatePipe,\n  ],\n})\nexport class MapFlyToControlComponent implements OnInit {\n  private _httpClient = inject(HttpClient)\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public autocompleteBackend: string\n\n  public autoCompletePlaceholderValue = \"Search (press 's')\"\n\n  @Input()\n  public set placeholder(placeholder: string) {\n    this.autoCompletePlaceholderValue = !placeholder\n      ? this.autoCompletePlaceholderValue\n      : placeholder\n  }\n\n  public resetLongitudeValue = 8.061121\n\n  @Input()\n  public set longitude(longitude: number) {\n    this.resetLongitudeValue = !longitude ? this.resetLongitudeValue : longitude\n  }\n\n  public resetLatitudeValue = 46.90521\n\n  @Input()\n  public set latitude(latitude: number) {\n    this.resetLatitudeValue = !latitude ? this.resetLatitudeValue : latitude\n  }\n\n  public bearingValue = 0\n\n  @Input()\n  public set bearing(bearing: number) {\n    this.bearingValue = !bearing ? this.bearingValue : bearing\n  }\n\n  public pitchValue = 0\n\n  @Input()\n  public set pitch(pitch: number) {\n    this.pitchValue = !pitch ? this.pitchValue : pitch\n  }\n\n  public panelWidthValue = '35%'\n\n  @Input()\n  public set panelWidth(panelWidth: string) {\n    this.panelWidthValue = !panelWidth ? this.panelWidthValue : panelWidth\n  }\n\n  @ViewChild('autoCompleteInput', { static: true })\n  public autoCompleteInput: ElementRef\n  public formControl = new UntypedFormControl()\n  public filteredOptions: Subject<OSMNResult[]>\n\n  private _mapFlyToEvents$: Subject<FlyTo>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.filteredOptions = new Subject<OSMNResult[]>()\n    this._mapFlyToEvents$ = new Subject<FlyTo>()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Getter                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get flyTo$(): Observable<FlyTo> {\n    return this._mapFlyToEvents$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Component Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {\n    // Listen to user input\n    this.formControl.valueChanges\n      .pipe(\n        throttleTime(500),\n        filter((i) => !!i),\n        filter((i) => typeof i === 'string'),\n        filter((i) => i.toString().length > 2)\n      )\n      .subscribe((i) => {\n        this._httpClient\n          .get(this.autocompleteBackend + '/q/' + i.toString().replace('/', ' '))\n          // TODO: add correct type\n          .subscribe((resp: any) => {\n            this.filteredOptions.next(resp.results)\n          })\n      })\n  }\n\n  public autoCompleteKeyUp(event: any) {\n    if (event && event.code === 'Escape') {\n      this.formControl.reset()\n      this.autoCompleteInput.nativeElement.blur()\n      this.mapFlyTo({\n        lon: this.resetLongitudeValue,\n        lat: this.resetLatitudeValue,\n        osm_type: 'reset',\n      })\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get displayWith() {\n    return (v: OSMNResult) => (v ? v.display_name : '')\n  }\n\n  public focus(): void {\n    this.autoCompleteInput.nativeElement.focus()\n  }\n\n  public mapFlyTo(selected: OSMNResult | { lon: number; lat: number; osm_type: string }) {\n    this._mapFlyToEvents$.next({\n      longitude: selected.lon,\n      latitude: selected.lat,\n      zoom: selected.osm_type === 'reset' ? 7 : selected.osm_type === 'way' ? 17 : 13,\n      bearing: selected.osm_type === 'reset' ? 0 : this.bearingValue,\n      pitch: selected.osm_type === 'reset' ? 0 : this.pitchValue,\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n\nexport interface OSMNResult {\n  wikipedia: string\n  rank: number\n  county: string\n  street: string\n  wikidata: string\n  country_code: string\n  osm_id: number\n  housenumbers: string\n  id: number\n  city: string\n  display_name: string\n  lon: number\n  state: string\n  boundingbox: number[]\n  type: string\n  importance: number\n  lat: number\n  class: string\n  name: string\n  country: string\n  name_suffix: string\n  osm_type: string\n  place_rank: number\n  alternative_names: string\n}\n","<elder-map-control-wrapper>\n  <form class=\"layout-row flyTo-form\">\n    <mat-form-field class=\"flex\" subscriptSizing=\"dynamic\">\n      <mat-label>{{ autoCompletePlaceholderValue | translate }}</mat-label>\n\n      <input\n        #autoCompleteInput\n        type=\"text\"\n        placeholder=\"Aarau, Bettlach, ...\"\n        matInput\n        [formControl]=\"formControl\"\n        [matAutocomplete]=\"auto\"\n        (keyup)=\"autoCompleteKeyUp($event)\"\n      />\n\n      <mat-autocomplete\n        #auto=\"matAutocomplete\"\n        [displayWith]=\"displayWith\"\n        [panelWidth]=\"panelWidthValue\"\n      >\n        @for (option of filteredOptions | async; track option) {\n          <mat-option\n            [value]=\"option\"\n            (onSelectionChange)=\"mapFlyTo(option)\"\n            (reset)=\"mapFlyTo(null)\"\n          >\n            {{ option.display_name }}\n          </mat-option>\n        }\n      </mat-autocomplete>\n    </mat-form-field>\n  </form>\n</elder-map-control-wrapper>\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, debounceTime, Observable, Subject } from 'rxjs'\nimport * as MapBox from 'maplibre-gl'\nimport {\n  FeaturesState,\n  FlyTo,\n  LayerDescription,\n  MapLineString,\n  MapPoints,\n  SourceDescription,\n} from './elder-map-interfaces'\nimport { map } from 'rxjs/operators'\nimport { ElderMapConfig } from './config/elder-map-config'\nimport { MapUtil } from './map-util'\nimport { PolylineUtil } from '../polyline-util'\nimport { MapLibreEvent } from 'maplibre-gl'\n\n@Injectable()\nexport class ElderMapController {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _mouseMoveEvents$ = new Subject<MapBox.MapMouseEvent>()\n  private readonly _mouseClickEvents$ = new Subject<MapBox.MapMouseEvent>()\n  private readonly _moveEvents$ = new Subject<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & Object\n  >()\n  private readonly _moveEndEvents$ = new Subject<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & Object\n  >()\n\n  private readonly _updateMapFeature$ = new Subject<MapLineString | MapPoints>()\n\n  private mapAvailable$ = new BehaviorSubject(false)\n  public mapReady$ = new BehaviorSubject(false)\n\n  public mapFundamentalsSet$ = new BehaviorSubject<boolean>(false)\n\n  /** The main map object. */\n  private _map: MapBox.Map\n\n  /** Map config. */\n  private _config: ElderMapConfig\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.log.info('Constructing ' + this.constructor.name)\n\n    this.mapAvailable$.subscribe({\n      next: (isMapAvailable) => {\n        if (isMapAvailable) {\n          this.log.debug('map is now available, waiting to load map...')\n          this._map.on('load', () => {\n            this.log.debug('map is now fully loaded!')\n            this.mapReady$.next(true)\n          })\n        }\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public setMap(mapObj: MapBox.Map) {\n    this.cleanup()\n\n    this._map = mapObj\n    this.mapAvailable$.next(true)\n\n    this.registerMapEventListeners()\n  }\n\n  public get map(): MapBox.Map {\n    return this._map\n  }\n\n  public setConfig(config: ElderMapConfig) {\n    this._config = config\n  }\n\n  public getConfig(): ElderMapConfig {\n    return this._config\n  }\n\n  /**\n   *  Stream of mouse movement events.\n   */\n  public getMouseMoveEvents$(): Observable<MapBox.MapMouseEvent> {\n    return this._mouseMoveEvents$.pipe(\n      debounceTime(this._config ? this._config.mouseEventDebounceMs : 100)\n    )\n  }\n\n  /**\n   *  Stream of geo features hovered by mouse.\n   */\n  public getMouseMoveGeoEvents$(\n    layers?: string[],\n    filter?: any\n  ): Observable<MapBox.MapGeoJSONFeature[]> {\n    return this.getMouseMoveEvents$().pipe(\n      map((moveEvent) =>\n        this._map.queryRenderedFeatures(moveEvent.point, {\n          layers: layers,\n          filter: filter,\n        })\n      )\n    )\n  }\n\n  public getMoveEvents$(): Observable<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & Object\n  > {\n    return this._moveEvents$\n  }\n\n  public getMoveEndEvents(): Observable<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & Object\n  > {\n    return this._moveEndEvents$\n  }\n\n  /**\n   *  Stream of mouse click events.\n   */\n  public getMouseClickEvents$(): Observable<MapBox.MapMouseEvent> {\n    return this._mouseClickEvents$.asObservable()\n  }\n\n  /**\n   *  Stream of geo features clicked by mouse.\n   */\n  public getMouseClickGeoEvents$(\n    layers?: string[],\n    filter?: any\n  ): Observable<MapBox.MapGeoJSONFeature[]> {\n    return this.getMouseClickEvents$().pipe(\n      map((clickEvent) =>\n        this._map.queryRenderedFeatures(clickEvent.point, {\n          layers: layers,\n          filter: filter,\n        })\n      )\n    )\n  }\n\n  public get updateMapFeature$(): Observable<MapLineString | MapPoints> {\n    return this._updateMapFeature$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public flyTo(flyTo: FlyTo): void {\n    if (this._map) {\n      this._map.flyTo({\n        center: { lng: flyTo.longitude, lat: flyTo.latitude },\n        zoom: flyTo.zoom,\n        bearing: flyTo.bearing,\n        pitch: flyTo.pitch,\n      })\n    }\n  }\n\n  public fitBounds(polyLine: string, options?: MapBox.FitBoundsOptions): void {\n    const bounds = PolylineUtil.calcBoundOfPolyline(polyLine)\n    this._map.fitBounds(bounds, options)\n  }\n\n  public resetNavigation(): void {\n    const resetFlyTo: FlyTo = {\n      longitude: this._config.center[0],\n      latitude: this._config.center[1],\n      zoom: this._config.zoom,\n      bearing: 0,\n      pitch: 0,\n    }\n\n    this.flyTo(resetFlyTo)\n  }\n\n  public resize(): void {\n    if (this._map) {\n      this._map.resize()\n    }\n  }\n\n  public updateMapFeature(feature: MapLineString | MapPoints) {\n    this._updateMapFeature$.next(feature)\n  }\n\n  /**\n   * Updates feature states for features identified by sourceId and featureId.\n   * The featureId must be unique within a source.\n   * The featureId can either passed by application using PointProperties.featureId or auto generated by the library.\n   * If PointProperties.featureId is provided then MapPoints.disableAutoGenerateFeatureId must be true.\n   */\n  public updateFeatureState(featuresState: FeaturesState): void {\n    for (const [sourceId, featureId] of featuresState.sourceIdsAndFeatureIds) {\n      this._map.setFeatureState(\n        {\n          source: sourceId,\n          id: featureId,\n        },\n        featuresState.state\n      )\n    }\n  }\n\n  public addMapMarker(\n    sourceDescription: SourceDescription,\n    layerDescriptions: LayerDescription[],\n    beforeLayerId?: string\n  ): void {\n    this.mapFundamentalsSet$.subscribe({\n      next: (value) => {\n        if (value) {\n          this.log.debug(\n            'adding source and layer descriptions for map marker...',\n            sourceDescription,\n            layerDescriptions\n          )\n          this._map.addSource(sourceDescription.name, sourceDescription.source)\n\n          layerDescriptions.forEach((layerDescription) => {\n            if (layerDescription) {\n              this._map.addLayer(layerDescription.layer)\n              if (beforeLayerId) {\n                this._map.moveLayer(layerDescription.layer.id, beforeLayerId)\n              }\n              MapUtil.loadMouseOverEventsForLayer(layerDescription, sourceDescription, this._map)\n            }\n          })\n        }\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private cleanup(): void {\n    if (this._map) {\n      this.deregisterMapEventListeners()\n    }\n  }\n\n  private registerMapEventListeners(): void {\n    this._map.on('mousemove', (e) => this.onMapMouseMove(e))\n    this._map.on('move', (e) => this.onMove(e))\n    this._map.on('moveend', (e) => this.onMoveEnd(e))\n    this._map.on('click', (e) => this.onMapClick(e))\n  }\n\n  private deregisterMapEventListeners(): void {\n    this._map.off('mousemove', (e) => this.onMapMouseMove(e))\n    this._map.off('click', (e) => this.onMapClick(e))\n  }\n\n  private onMapClick(event: MapBox.MapMouseEvent) {\n    this._mouseClickEvents$.next(event)\n  }\n\n  private onMapMouseMove(event: MapBox.MapMouseEvent) {\n    this._mouseMoveEvents$.next(event)\n  }\n\n  private onMove(event: MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & Object) {\n    this._moveEvents$.next(event)\n  }\n\n  private onMoveEnd(\n    event: MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & Object\n  ) {\n    this._moveEndEvents$.next(event)\n  }\n}\n","import { VectorMapStyles } from '../elder-map-interfaces'\nimport { MapControlPosition } from '../controls/map-control-position'\n\nexport const DEFAULT_MAP_GL_CONFIG: ElderMapConfig = {\n  center: [8.061121, 46.90521],\n  zoom: 7,\n  minZoom: 0,\n  maxZoom: 20,\n  pitch: 0,\n  minPitch: 0,\n  maxPitch: 0,\n  bearing: 0,\n  disableControls: false,\n  disableZoomAndCompassControls: false,\n  navigationResetShown: true,\n  navigationResetEnabled: true,\n  navigationResetPosition: MapControlPosition.bottomLeft,\n  mapStyleChooserShown: true,\n  mapStyleChooserEnabled: true,\n  mapStyleChooserPosition: MapControlPosition.bottomLeft,\n  flyToShown: true,\n  flyToEnabled: true,\n  flyToPosition: MapControlPosition.bottomLeft,\n  disableRectangleSelect: false,\n  mouseEventDebounceMs: 100,\n  glyphsUrl: undefined,\n  vectorMapStyles: undefined,\n  vectorTileUrls: undefined,\n}\n\nexport type LngLatLike =\n  [number, number] | { lng: number; lat: number } | { lon: number; lat: number }\n\nexport interface ElderMapConfig {\n  /***************************************************************************\n   *                                                                         *\n   * Orientation                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  /** Initial map center in WGS84 format. */\n  center?: LngLatLike\n\n  /** Initial zoom level. */\n  zoom?: number\n\n  /** Minimum zoom of the map. */\n  minZoom?: number\n\n  /** Maximum zoom of the map. */\n  maxZoom?: number\n\n  /**\n   * The initial pitch (tilt) of the map, measured in degrees away from the plane of the\n   * screen (0-60).\n   */\n  pitch?: number\n\n  /** Minimum pitch of the map. */\n  minPitch?: number\n\n  /** Maximum pitch of the map. */\n  maxPitch?: number\n\n  /** Map rotation bearing in degrees counter-clockwise from north. */\n  bearing?: number\n\n  /***************************************************************************\n   *                                                                         *\n   * Controls                                                                *\n   *                                                                         *\n   **************************************************************************/\n\n  /** If controls should be disabled. */\n  disableControls?: boolean\n\n  /** Disables zoom, tilt and rotate control. */\n  disableZoomAndCompassControls?: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Navigation Reset Control                                                *\n   *                                                                         *\n   **************************************************************************/\n\n  /** If Navigation Reset control should be shown. */\n  navigationResetShown?: boolean\n\n  /** If Navigation Reset control should be enabled. */\n  navigationResetEnabled?: boolean\n\n  /** Position of Navigation Reset control. */\n  navigationResetPosition?: MapControlPosition | string\n\n  /***************************************************************************\n   *                                                                         *\n   * Map Style Chooser Control                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  /** If Map Style Chooser control should be shown. */\n  mapStyleChooserShown?: boolean\n\n  /**\n   * If the Map Style Chooser control should be enabled.\n   * The first VectorMapStyle in VectorMapStyles.styles is used as default.\n   */\n  mapStyleChooserEnabled?: boolean\n\n  /** Position of Map Style Chooser control. */\n  mapStyleChooserPosition?: MapControlPosition | string\n\n  /***************************************************************************\n   *                                                                         *\n   * FlyTo Control                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  /** If FlyTo control should be shown. */\n  flyToShown?: boolean\n\n  /** If FlyTo control should be enabled. */\n  flyToEnabled?: boolean\n\n  /** Position of FlyTo control. */\n  flyToPosition?: MapControlPosition | string\n\n  /** Bearing of a fly to movement. */\n  flyToBearing?: number\n\n  /** Pitch of a fly to movement. */\n  flyToPitch?: number\n\n  /** Width of FlyTo control input panel. */\n  flyToPanelWidth?: string\n\n  /** Placeholder of the FlyTo control input field. */\n  flyToInputPlaceholder?: string\n\n  /** API used for auto complete resolution. Enables FlyTo control if set. */\n  autoCompleteBackend?: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Interactions                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  /** Disables rectangle select functionality. */\n  disableRectangleSelect?: boolean\n\n  /** Debounce in milliseconds for map mouse events. */\n  mouseEventDebounceMs?: number\n\n  /***************************************************************************\n   *                                                                         *\n   * Security                                                                *\n   *                                                                         *\n   **************************************************************************/\n\n  solumTilesAuthPath?: string\n\n  solumTilesKey?: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Style & Resources                                                       *\n   *                                                                         *\n   **************************************************************************/\n\n  /** Stylesheet location */\n  style?: any\n\n  /**\n   * Map key: Name of source with type vector\n   * Map value: Url for vector data\n   *\n   * Eg. (\"openmaptiles\", \"https://.../{z}/{x}/{y}.pbf\")\n   */\n  vectorTileUrls: Map<string, string>\n\n  /**\n   * Configure typography definition\n   */\n  glyphsUrl: string\n\n  /**\n   * OpenMapTiles comes with a variety of different styles optimized for the OpenMapTiles vector tile schema.\n   * The styles and schema are free and open-source and you can adapt the design and code for your project or\n   * commercial product however you like.\n   * The first VectorMapStyle in VectorMapStyles.styles is used as default.\n   */\n  vectorMapStyles: VectorMapStyles\n\n  /**\n   * Image identifiers and paths that mapbox gl has to prepare for their usage in layer definitions\n   */\n  imagesToLoad?: Map<string, string>\n\n  /***************************************************************************\n   *                                                                         *\n   * Layers                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Layer identifiers describing the layer order bottom (first) to top (last)\n   * layersOrder may contain less elements than defined layers.\n   */\n  layersOrder?: string[]\n}\n","import { Component, Input, OnInit, Output, ChangeDetectionStrategy } from '@angular/core'\nimport { VectorMapStyle, VectorMapStyles } from '../../elder-map-interfaces'\nimport { BehaviorSubject, Subject } from 'rxjs'\n\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MapControlWrapperComponent } from '../map-control-wrapper/map-control-wrapper.component'\n\n@Component({\n  selector: 'elder-map-style-chooser-control',\n  templateUrl: './map-style-chooser-control.component.html',\n  styleUrls: ['./map-style-chooser-control.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [MapControlWrapperComponent, MatButtonModule, MatMenuModule, MatIconModule],\n})\nexport class MapStyleChooserControlComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get mapStyleChangeEvents$() {\n    return this._mapStyleChangeEvents$.asObservable()\n  }\n\n  @Input()\n  public vectorMapStyles: VectorMapStyles\n\n  private readonly _mapStyleChangeEvents$: BehaviorSubject<VectorMapStyle>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this._mapStyleChangeEvents$ = new BehaviorSubject<VectorMapStyle>(null)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Getter                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Component Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public onMapStyleChange(vectorMapStyle: VectorMapStyle) {\n    this._mapStyleChangeEvents$.next(vectorMapStyle)\n  }\n\n  public ngOnInit() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API\n   *                                                                         *\n   **************************************************************************/\n\n  public isActive(vectorMapStyle: VectorMapStyle): boolean {\n    const current = this._mapStyleChangeEvents$.getValue()\n    return current && current.name === vectorMapStyle.name\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","<elder-map-control-wrapper>\n  <button\n    mat-icon-button\n    [matMenuTriggerFor]=\"layerMenu\"\n    aria-label=\"Example icon-button with a menu\"\n  >\n    <mat-icon>layers</mat-icon>\n  </button>\n\n  <mat-menu #layerMenu=\"matMenu\">\n    @for (vectorMapStyle of vectorMapStyles.styles; track vectorMapStyle) {\n      <button mat-menu-item (click)=\"onMapStyleChange(vectorMapStyle)\">\n        <mat-icon color=\"{{ isActive(vectorMapStyle) ? 'accent' : '' }}\">map</mat-icon>\n        <span>{{ vectorMapStyle?.name }}</span>\n      </button>\n    }\n  </mat-menu>\n</elder-map-control-wrapper>\n","import { Component, OnInit, Output, ChangeDetectionStrategy } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\nimport { FlyTo } from '../../elder-map-interfaces'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MapControlWrapperComponent } from '../map-control-wrapper/map-control-wrapper.component'\n\n@Component({\n  selector: 'elder-map-navigation-reset-control',\n  templateUrl: './map-navigation-reset-control.component.html',\n  styleUrls: ['./map-navigation-reset-control.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [MapControlWrapperComponent, MatButtonModule, MatIconModule],\n})\nexport class MapNavigationResetControlComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _mapReset$ = new Subject<any>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Getter                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get mapReset(): Observable<FlyTo> {\n    return this._mapReset$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Component Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onResetClick() {\n    this._mapReset$.next(null)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","<elder-map-control-wrapper>\n  <button mat-icon-button (click)=\"onResetClick()\">\n    <mat-icon> center_focus_weak </mat-icon>\n  </button>\n</elder-map-control-wrapper>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n} from '@angular/core'\nimport { MapControlPosition } from '../map-control-position'\nimport { NgClass } from '@angular/common'\n\n@Component({\n  selector: 'elder-map-control-placeholder',\n  templateUrl: './map-control-placeholder.component.html',\n  styleUrls: ['./map-control-placeholder.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgClass],\n})\nexport class MapControlPlaceholderComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public Pos = MapControlPosition\n\n  @Input()\n  public position: MapControlPosition\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n}\n","<div\n  class=\"layout-row elder-map-control-placeholder\"\n  [ngClass]=\"{\n    'top-left': position === Pos.topLeft,\n    top: position === Pos.top,\n    'top-right': position === Pos.topRight,\n    right: position === Pos.right,\n    'bottom-right': position === Pos.bottomRight,\n    bottom: position === Pos.bottom,\n    'bottom-left': position === Pos.bottomLeft,\n    left: position === Pos.left,\n  }\"\n>\n  <ng-content></ng-content>\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  ElementRef,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n  ViewChild,\n  inject,\n} from '@angular/core'\nimport * as MapBox from 'maplibre-gl'\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs'\nimport { filter, takeUntil } from 'rxjs/operators'\nimport {\n  FeaturesState,\n  FlyTo,\n  MapLineString,\n  MapPoints,\n  VectorMapStyle,\n} from '../elder-map-interfaces'\nimport { RectangleSelectHandler } from '../rectangle-select-handler'\nimport { HttpClient } from '@angular/common/http'\nimport { MapSourceLayersDirective } from './map-source-layers.directive'\nimport { MapConfigurator } from '../map-configurator'\nimport { MapDownstreamEvents } from '../events/map-downstream-events'\nimport { MapStyleBuilderService } from '../map-style-builder.service'\nimport { MapControlPosition } from '../controls/map-control-position'\nimport { MapFlyToControlComponent } from '../controls/map-flyto-control/map-fly-to-control.component'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderMapController } from '../elder-map-controller.service'\nimport { DEFAULT_MAP_GL_CONFIG, ElderMapConfig } from '../config/elder-map-config'\nimport { MapStyleChooserControlComponent } from '../controls/map-style-chooser-control/map-style-chooser-control.component'\nimport { MapNavigationResetControlComponent } from '../controls/map-navigation-reset-control/map-navigation-reset-control.component'\nimport { MapControlPlaceholderComponent } from '../controls/map-control-placeholder/map-control-placeholder.component'\n\nimport { ElderFormsDirectivesModule } from '@elderbyte/ngx-starter'\n\n@Component({\n  selector: 'elder-map',\n  templateUrl: './elder-map.component.html',\n  styleUrls: ['./elder-map.component.scss'],\n  providers: [HttpClient],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ElderFormsDirectivesModule,\n    MapControlPlaceholderComponent,\n    MapFlyToControlComponent,\n    MapNavigationResetControlComponent,\n    MapStyleChooserControlComponent,\n  ],\n})\nexport class ElderMapComponent implements AfterViewInit, OnDestroy {\n  private readonly httpClient = inject(HttpClient)\n  private readonly mapStyleBuilderService = inject(MapStyleBuilderService)\n  private mapController = inject(ElderMapController)\n\n  /***************************************************************************\n   *                                                                         *\n   * @Input() - Downstream Events\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public featuresStateEvents$: Observable<FeaturesState>\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _unsubscribe$ = new Subject<void>()\n  private readonly _sourceDataBuffers = new Map<\n    string,\n    BehaviorSubject<MapLineString | MapPoints>\n  >() // TODO MapFeature\n  private readonly _sourceDataBufferSubs = new Map<string, Subscription>()\n\n  private readonly _rectangleSelectHandler = new RectangleSelectHandler()\n\n  public readonly Pos = MapControlPosition\n  public readonly controlPositions: MapControlPosition[] = Object.keys(MapControlPosition).map(\n    (enumKey) => MapControlPosition[enumKey]\n  )\n\n  private _mapConfigurator: MapConfigurator\n  private _mapDownstreamEvents: MapDownstreamEvents\n  private _config: ElderMapConfig\n\n  /** Reference to the main DIV container in which the map is rendered. */\n  @ViewChild('mapContainer')\n  private _mapContainer: ElementRef\n\n  /** Reference to the selection box container. */\n  @ViewChild('selectionBoxContainer')\n  private _selectionBoxContainer: ElementRef\n\n  /** Reference to the fly-to control. */\n  @ViewChild(MapFlyToControlComponent)\n  private _flyToCtrl: MapFlyToControlComponent\n\n  /**\n   * Source and layer definitions passed as children directives in <elder-map-gl></elder-map-gl>\n   * Relation: Source 1:n Layers\n   */\n  @ContentChildren(MapSourceLayersDirective)\n  public sourceLayers: QueryList<MapSourceLayersDirective>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.mapController.updateMapFeature$\n      .pipe(takeUntil(this._unsubscribe$))\n      .subscribe((feature) => this.replaceMapFeature(feature))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit() {\n    this.startMap()\n  }\n\n  private startMap() {\n    this.log.debug('Trying to start elder map with config: ', this.config)\n\n    if (!this.config?.vectorMapStyles || this.config?.vectorMapStyles.styles.length === 0) {\n      console.error('No vector map style provided')\n      return\n    }\n\n    // Get patched map style\n    const initialMapStyleUrl = this.config.vectorMapStyles.styles[0].path\n    this.mapStyleBuilderService\n      .loadStyle(initialMapStyleUrl, this.config.vectorTileUrls, this.config.glyphsUrl)\n      .subscribe((patchedStyleJson) => {\n        this.config.style = patchedStyleJson\n\n        this.initMap(this._mapContainer.nativeElement, this._config)\n      })\n  }\n\n  public ngOnDestroy(): void {\n    if (!!this._mapConfigurator) {\n      this._mapConfigurator.disconnect()\n    }\n\n    if (!!this._mapDownstreamEvents) {\n      this._mapDownstreamEvents.disconnect()\n    }\n\n    this._unsubscribe$.next()\n    this._unsubscribe$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set config(conf: ElderMapConfig) {\n    this.log.debug('Setting elder maps config:', conf)\n    if (conf) {\n      this._config = { ...DEFAULT_MAP_GL_CONFIG, ...conf }\n    }\n  }\n\n  public get config(): ElderMapConfig {\n    return this._config\n  }\n\n  @Input()\n  public set updateMapFeature(feature: MapLineString | MapPoints) {\n    this.log.debug('Updating MapFeature:', feature)\n    this.replaceMapFeature(feature)\n  }\n\n  @Output()\n  public get mouseMove$(): Observable<MapBox.MapMouseEvent> {\n    return this.mapController.getMouseMoveEvents$()\n  }\n\n  @Output()\n  public get mouseMoveGeo$(): Observable<MapBox.MapGeoJSONFeature[]> {\n    return this.mapController.getMouseMoveGeoEvents$()\n  }\n\n  @Output()\n  public get mouseClick$(): Observable<MapBox.MapMouseEvent> {\n    return this.mapController.getMouseClickEvents$()\n  }\n\n  @Output()\n  public get mouseClickGeo$(): Observable<MapBox.MapGeoJSONFeature[]> {\n    return this.mapController.getMouseClickGeoEvents$()\n  }\n\n  /**\n   * Rectangle select returning Observable<L.MapboxGeoJSONFeature[]>.\n   * Returns features of all layers.\n   */\n  @Output()\n  public get rectangleSelectGeo$(): Observable<MapBox.MapGeoJSONFeature[]> {\n    return this._rectangleSelectHandler.rectangleSelectGeo$\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Component Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public onMapStyleChange(vectorMapStyle: VectorMapStyle) {\n    if (vectorMapStyle) {\n      this.mapStyleBuilderService\n        .loadStyle(vectorMapStyle.path, this.config.vectorTileUrls, this.config.glyphsUrl)\n        .subscribe((styleJson) => {\n          this.onStyleChange(styleJson)\n        })\n    }\n  }\n\n  public onMapFlyToEvent(flyTo: FlyTo): void {\n    this.mapController.flyTo(flyTo)\n  }\n\n  public onMapNavigationReset(o: any): void {\n    this.mapController.resetNavigation()\n  }\n\n  public onKeyEvent(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 's': {\n        this.focusFlyToCtrl()\n        break\n      }\n      case 'Escape': {\n        this.onMapNavigationReset(null)\n        break\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public showFlyToAt(pos: MapControlPosition): boolean {\n    return (\n      this.config.autoCompleteBackend && this.config.flyToShown && this.config.flyToPosition === pos\n    )\n  }\n\n  public showNavigationResetAt(pos: MapControlPosition): boolean {\n    return this.config.navigationResetShown && this.config.navigationResetPosition === pos\n  }\n\n  public showMapStyleChooserAt(pos: MapControlPosition): boolean {\n    return (\n      this.config.vectorMapStyles &&\n      this.config.mapStyleChooserShown &&\n      this.config.mapStyleChooserPosition === pos\n    )\n  }\n\n  public focusFlyToCtrl(): void {\n    if (this._flyToCtrl) {\n      this._flyToCtrl.focus()\n    }\n  }\n\n  public replaceMapFeature(feature: MapLineString | MapPoints): void {\n    if (feature) {\n      this.log.debug('Replacing MapFeature:', feature)\n\n      if (!this._sourceDataBuffers.has(feature.mapboxSourceId)) {\n        this._sourceDataBuffers.set(feature.mapboxSourceId, new BehaviorSubject<any>(null))\n        this.ensureBufferSubscriptions()\n      }\n\n      const sourceBuffer = this._sourceDataBuffers.get(feature.mapboxSourceId)\n      if (sourceBuffer) {\n        this.log.debug('Sending MapFeature to source buffer', { feature: feature })\n        sourceBuffer.next(feature)\n      } else {\n        throw Error('Unknown mapbox sourceId: ' + feature.mapboxSourceId)\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private initMap(\n    container: string | HTMLElement,\n    config: ElderMapConfig,\n    finishFn?: () => void\n  ): void {\n    if (this.config.solumTilesKey || !this.config.solumTilesAuthPath) {\n      this.initMapInternal(container, config, finishFn)\n    } else {\n      this.httpClient\n        .get(config.solumTilesAuthPath, { responseType: 'text' })\n        .subscribe((tilesKey) => {\n          config.solumTilesKey = tilesKey\n\n          this.initMapInternal(container, config, finishFn)\n        })\n    }\n  }\n\n  private initMapInternal(\n    container: string | HTMLElement,\n    config: ElderMapConfig,\n    finishFn?: () => void\n  ): void {\n    this._mapConfigurator = new MapConfigurator(container, config)\n\n    this.mapController.setMap(this._mapConfigurator.getMap())\n    this.mapController.setConfig(this._config)\n\n    this._mapConfigurator.getMap().on('load', () => this.mapBootstrap(finishFn))\n  }\n\n  /**\n   * Gets called after init map and style load\n   * and\n   * gets called after style changed\n   */\n  private mapBootstrap(finishFn?: () => void): void {\n    this._mapConfigurator\n      .setMapFundamentals(this.config.imagesToLoad, this.sourceLayers, this.config.layersOrder)\n      .then(() => {\n        this.mapController.mapFundamentalsSet$.next(true)\n\n        /**\n         * Handle rectangle selection\n         */\n        if (!this.config.disableRectangleSelect) {\n          // Init Rectangle Select Handler\n          this._rectangleSelectHandler.start(\n            this._mapConfigurator.getMap(),\n            this._selectionBoxContainer,\n            this._mapConfigurator.getMap().getCanvasContainer()\n          )\n        } else {\n          this._selectionBoxContainer.nativeElement.style.visibility = 'hidden'\n        }\n\n        /**\n         * Handle Downstream events\n         */\n        this._mapDownstreamEvents = new MapDownstreamEvents(this._mapConfigurator.getMap())\n\n        // Distribute events to the according source buffer\n\n        this._mapDownstreamEvents.initFeaturesStateEvents$(this.featuresStateEvents$)\n\n        this.ensureBufferSubscriptions()\n\n        if (finishFn) {\n          finishFn()\n        }\n      })\n  }\n\n  private ensureBufferSubscriptions() {\n    // We can only subscribe to buffers if map has been initialized\n    if (!this._mapDownstreamEvents) {\n      return\n    }\n\n    this._sourceDataBuffers.forEach(\n      (sourceBuffer: BehaviorSubject<MapLineString | MapPoints>, sourceId: string) => {\n        if (!this._sourceDataBufferSubs.has(sourceId)) {\n          this._sourceDataBufferSubs.set(\n            sourceId,\n            sourceBuffer\n              .pipe(\n                takeUntil(this._unsubscribe$),\n                filter((o) => !!o)\n              )\n              .subscribe((event) =>\n                this._mapDownstreamEvents.dispatchMapPointsAndLineStringEvents(event)\n              )\n          )\n        }\n      }\n    )\n  }\n\n  private onStyleChange(styleJson): void {\n    // Function that replay data after map init\n    const finishFn = () => {\n      this._sourceDataBuffers.forEach((sourceDataBuffer) => {\n        const value = sourceDataBuffer.getValue()\n        if (!value) {\n          return\n        }\n        this._mapDownstreamEvents.dispatchMapPointsAndLineStringEvents(sourceDataBuffer.getValue())\n      })\n    }\n\n    // Keep current map state\n    const keepCenter = this._mapConfigurator.getMap().getCenter()\n    const keepZoom = this._mapConfigurator.getMap().getZoom()\n    const keepPitch = this._mapConfigurator.getMap().getPitch()\n    const keepBearing = this._mapConfigurator.getMap().getBearing()\n\n    // https://docs.mapbox.com/mapbox-gl-js/api/#map#remove\n    this._mapConfigurator.disconnect()\n\n    // Disconnect downstream events, because the map instance will change\n    this._mapDownstreamEvents.disconnect()\n\n    this.config.style = styleJson\n    this.config.center = keepCenter\n    this.config.zoom = keepZoom\n    this.config.pitch = keepPitch\n    this.config.bearing = keepBearing\n\n    // ReInit map\n    this.initMap(this._mapContainer.nativeElement, this.config, finishFn)\n  }\n}\n","<!-- Main Map Container-->\n<div\n  #mapContainer\n  style=\"width: 100%; height: 100%\"\n  elderKeyEvent\n  (onElderKeyEvent)=\"onKeyEvent($event)\"\n>\n  @for (pos of controlPositions; track pos) {\n    <!-- Place holder for map controls -->\n    <elder-map-control-placeholder [position]=\"pos\">\n      <div\n        [class]=\"pos === Pos.left || pos === Pos.right ? 'layout-col' : 'layout-row'\"\n        class=\"gap-md\"\n      >\n        <!-- Fly To Control -->\n        @if (showFlyToAt(pos)) {\n          <elder-map-flyto-control\n            [autocompleteBackend]=\"config.autoCompleteBackend\"\n            [placeholder]=\"config.flyToInputPlaceholder\"\n            [longitude]=\"config.center[0]\"\n            [latitude]=\"config.center[1]\"\n            [bearing]=\"config.flyToBearing\"\n            [pitch]=\"config.flyToPitch\"\n            [panelWidth]=\"config.flyToPanelWidth\"\n            (flyTo$)=\"onMapFlyToEvent($event)\"\n          ></elder-map-flyto-control>\n        }\n        <!-- Navigation Reset Control -->\n        @if (showNavigationResetAt(pos)) {\n          <elder-map-navigation-reset-control\n            (mapReset)=\"onMapNavigationReset($event)\"\n          ></elder-map-navigation-reset-control>\n        }\n        <!-- Map Style Chooser Control -->\n        @if (showMapStyleChooserAt(pos)) {\n          <elder-map-style-chooser-control\n            [vectorMapStyles]=\"config.vectorMapStyles\"\n            (mapStyleChangeEvents$)=\"onMapStyleChange($event)\"\n          ></elder-map-style-chooser-control>\n        }\n      </div>\n    </elder-map-control-placeholder>\n  }\n</div>\n\n<!-- Selection Box Container-->\n<div #selectionBoxContainer class=\"selectionBoxContainer\"></div>\n","import { NgModule } from '@angular/core'\nimport { ElderMapComponent } from './elder-map/elder-map.component'\nimport { MapSourceLayersDirective } from './elder-map/map-source-layers.directive'\n\nexport * from './elder-map-interfaces'\nexport * from './elder-map-controller.service'\nexport * from './elder-map/map-source-layers.directive'\nexport * from './elder-map/elder-map.component'\nexport * from './config/elder-map-config'\n\nconst componentsAndDirectives = [ElderMapComponent, MapSourceLayersDirective] as const\n\n@NgModule({\n  imports: [...componentsAndDirectives],\n  exports: [...componentsAndDirectives],\n})\nexport class ElderMapModule {}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport { ElderMapMarkerSymbolConfig } from '../elder-map-marker-config'\nimport { ElderMapMarkerPosition } from '../elder-map-marker-position'\n\n@Component({\n  selector: 'emgl-marker-feature-symbol',\n  templateUrl: './marker-feature-symbol.component.html',\n  styleUrls: ['./marker-feature-symbol.component.css'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class MarkerFeatureSymbolComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _name: string\n  private _config: ElderMapMarkerSymbolConfig\n  private _mapMarkerPosition: ElderMapMarkerPosition\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get name(): string {\n    return this._name || 'primary-feature-symbol'\n  }\n\n  @Input()\n  public set name(value: string) {\n    this._name = value\n  }\n\n  public get config(): ElderMapMarkerSymbolConfig {\n    return this._config\n  }\n\n  @Input()\n  public set config(value: ElderMapMarkerSymbolConfig) {\n    this._config = value\n  }\n\n  public get mapMarkerPosition(): ElderMapMarkerPosition {\n    return this._mapMarkerPosition\n  }\n\n  @Input()\n  public set mapMarkerPosition(value: ElderMapMarkerPosition) {\n    this._mapMarkerPosition = value\n  }\n}\n","","import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport { ElderMapMarkerSymbolConfig } from '../elder-map-marker-config'\nimport { ElderMapMarkerPosition } from '../elder-map-marker-position'\n\n@Component({\n  selector: 'emgl-marker-label',\n  templateUrl: './marker-label.component.html',\n  styleUrls: ['./marker-label.component.css'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class MarkerLabelComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _name: string\n  private _config: ElderMapMarkerSymbolConfig\n  private _mapMarkerPosition: ElderMapMarkerPosition\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get name(): string {\n    return this._name || 'primary-label'\n  }\n\n  @Input()\n  public set name(value: string) {\n    this._name = value\n  }\n\n  public get config(): ElderMapMarkerSymbolConfig {\n    return this._config\n  }\n\n  @Input()\n  public set config(value: ElderMapMarkerSymbolConfig) {\n    this._config = value\n  }\n\n  public get mapMarkerPosition(): ElderMapMarkerPosition {\n    return this._mapMarkerPosition\n  }\n\n  @Input()\n  public set mapMarkerPosition(value: ElderMapMarkerPosition) {\n    this._mapMarkerPosition = value\n  }\n}\n","","import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport { ElderMapMarkerSymbolConfig } from '../elder-map-marker-config'\n\n@Component({\n  selector: 'emgl-marker-main-symbol',\n  templateUrl: './marker-main-symbol.component.html',\n  styleUrls: ['./marker-main-symbol.component.css'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class MarkerMainSymbolComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _config: ElderMapMarkerSymbolConfig\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get config(): ElderMapMarkerSymbolConfig {\n    return this._config\n  }\n\n  @Input()\n  public set config(value: ElderMapMarkerSymbolConfig) {\n    this._config = value\n  }\n}\n","","import { SourceDescription } from '../../../map/elder-map-interfaces'\nimport { ElderMapMarkerConfig, ElderMapMarkerSymbolConfig } from '../../elder-map-marker-config'\nimport { MarkerFeatureSymbolComponent } from '../../marker-feature-symbol/marker-feature-symbol.component'\nimport { DEFAULT_MAP_MARKER_CLUSTER_CONFIG } from '../../elder-map-marker/elder-map-marker.component'\nimport { ElderMapConfig } from '../../../map/config/elder-map-config'\n\nexport class MarkerSources {\n  /***************************************************************************\n   *                                                                         *\n   * Source Descriptions                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public static buildSimpleSource(sourceId: string, markerFilter: any[]): SourceDescription {\n    return {\n      name: sourceId,\n      source: {\n        type: 'geojson',\n        // @ts-ignore\n        data: null,\n        attribution: '@ ElderByte AG',\n        filter: markerFilter || ['boolean', true],\n      },\n    }\n  }\n\n  public static buildClusterSource(\n    config: ElderMapMarkerConfig,\n    sourceId: string,\n    markerFeatureSymbols: MarkerFeatureSymbolComponent[],\n    markerFilter: any[],\n    mapConfig: ElderMapConfig\n  ): SourceDescription {\n    return {\n      name: sourceId,\n      source: {\n        type: 'geojson',\n        // @ts-ignore\n        data: null,\n        attribution: '@ ElderByte AG',\n        cluster: true,\n        // MapLibre default is (maxZoom - 1), our default is maxZoom if defined\n        clusterMaxZoom: config.cluster.clusterMaxZoom || mapConfig?.maxZoom,\n        clusterRadius:\n          config.cluster.clusterRadius || DEFAULT_MAP_MARKER_CLUSTER_CONFIG.clusterRadius,\n        clusterProperties: MarkerSources.buildClusterProperties(config, markerFeatureSymbols),\n        filter: markerFilter || ['boolean', true],\n      },\n    }\n  }\n\n  private static buildClusterProperties(\n    config: ElderMapMarkerConfig,\n    markerFeatureSymbols: MarkerFeatureSymbolComponent[]\n  ): object {\n    const featureCountProperties = MarkerSources.buildFeatureCountProperties(markerFeatureSymbols)\n\n    // Supports configuring additional custom cluster properties\n    return Object.assign(featureCountProperties, config.cluster?.clusterProperties)\n  }\n\n  private static buildFeatureCountProperties(\n    markerFeatureSymbols?: MarkerFeatureSymbolComponent[]\n  ) {\n    const properties: Record<string, object> = {}\n\n    markerFeatureSymbols.forEach((symbolConfig) => {\n      if (symbolConfig.config.filter) {\n        MarkerSources.setFeatureCountProperty(properties, symbolConfig.name, symbolConfig.config)\n      }\n    })\n\n    return properties\n  }\n\n  private static setFeatureCountProperty(\n    properties: Record<string, object>,\n    name: string,\n    config: ElderMapMarkerSymbolConfig\n  ): object {\n    const propertyKey = name + 'MatchCount'\n    const propertyExpression = MarkerSources.buildFeatureCountPropertyExpression(config)\n\n    properties[propertyKey] = propertyExpression\n\n    return properties\n  }\n\n  private static buildFeatureCountPropertyExpression(config: ElderMapMarkerSymbolConfig): object {\n    return [\n      '+',\n      [\n        'case',\n        ['==', config.filter, true], // if\n        1, // then\n        0, // else\n      ],\n    ]\n  }\n}\n","export enum ElderMapMarkerPosition {\n  North = 'north',\n  NorthNorthEast = 'northNorthEast',\n  NorthEast = 'northEast',\n  EastNorthEast = 'eastNorthEast',\n  East = 'east',\n  EastSouthEast = 'eastSouthEast',\n  SouthEast = 'southEast',\n  SouthSouthEast = 'southSouthEast',\n  South = 'south',\n  SouthSouthWest = 'southSouthWest',\n  SouthWest = 'southWest',\n  WestSouthWest = 'westSouthWest',\n  West = 'west',\n  WestNorthWest = 'westNorthWest',\n  NorthWest = 'northWest',\n  NorthNorthWest = 'northNorthWest',\n}\n","import {\n  ElderMapMarkerConfig,\n  RadialOffsetCaseExpressionSpec,\n  RadialOffsetConfig,\n} from '../elder-map-marker-config'\nimport {\n  DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG,\n  DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG,\n  ElderMapMarkerComponent,\n} from '../elder-map-marker/elder-map-marker.component'\nimport { ElderMapMarkerPosition } from '../elder-map-marker-position'\nimport {\n  CircleLayerSpecification,\n  DataDrivenPropertyValueSpecification,\n  SymbolLayerSpecification,\n} from 'maplibre-gl'\n\nexport class LayerUtil {\n  public static buildLayerId(sourceId: string, markerComponent: string): string {\n    // e.g. redPointsSource-elder-map-marker-inner-circle\n    return sourceId + '-' + ElderMapMarkerComponent.MARKER_LAYER_PREFIX + '-' + markerComponent\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Radius                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static calcOuterCircleRadius(config: ElderMapMarkerConfig): number {\n    const innerCircleRadius = (config.innerCircle.paint['circle-radius'] ||\n      DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-radius']) as number\n\n    const outerCircleWidthFactor = DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG.widthFactor\n\n    return innerCircleRadius + innerCircleRadius * outerCircleWidthFactor\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Offset                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static compensateSymbolOffset(\n    offset: [number, number],\n    symbolSize: number\n  ): [number, number] {\n    // because maplibre multiplies icon-size or text-size with icon-offset or text-offset we have to\n    // calculate this compensation to get a static offset\n    // https://maplibre.org/maplibre-style-spec/layers/#layout-symbol-icon-offset\n    return [offset[0] * (1 / symbolSize), offset[1] * (1 / symbolSize)]\n\n    //    return offset.map(number => number * (1 / symbolSize));\n  }\n\n  public static buildOffsetSpecification(\n    offsetConfig: RadialOffsetConfig,\n    position: ElderMapMarkerPosition,\n    symbolSize: number\n  ): DataDrivenPropertyValueSpecification<[number, number]> {\n    if (offsetConfig.radius) {\n      const offset = LayerUtil.calcRadialOffsetAtPosition(offsetConfig.radius, position)\n      return LayerUtil.compensateSymbolOffset(offset, symbolSize)\n    } else if (offsetConfig.radiusCaseExpression) {\n      return this.buildOffsetCaseExpression(offsetConfig.radiusCaseExpression, position, symbolSize)\n    } else {\n      throw Error('Either radius or radius expression must be set! SymbolConfig')\n    }\n  }\n\n  public static buildOffsetCaseExpression(\n    expressionSpec: RadialOffsetCaseExpressionSpec,\n    position: ElderMapMarkerPosition,\n    symbolSize: number\n  ): DataDrivenPropertyValueSpecification<[number, number]> {\n    const caseExpression: any = ['case']\n\n    expressionSpec.cases.forEach((caseSpec) => {\n      caseExpression.push(caseSpec.condition)\n      caseExpression.push(\n        this.calcCompensatedRadialOffsetAtPosition(caseSpec.radius, position, symbolSize)\n      )\n    })\n\n    caseExpression.push(\n      this.calcCompensatedRadialOffsetAtPosition(\n        expressionSpec.fallbackRadius,\n        position,\n        symbolSize\n      )\n    )\n\n    return caseExpression\n  }\n\n  public static calcCompensatedRadialOffsetAtPosition(\n    radius: number,\n    position: ElderMapMarkerPosition,\n    symbolSize: number\n  ): ['literal', [number, number]] {\n    const offset = LayerUtil.calcRadialOffsetAtPosition(radius, position)\n    const compensatedOffset = LayerUtil.compensateSymbolOffset(offset, symbolSize)\n    return this.buildLiteral(compensatedOffset)\n  }\n\n  public static buildLiteral(offset: [number, number]): ['literal', [number, number]] {\n    return ['literal', offset]\n  }\n\n  // TODO: this (and the radius determination) has to be calculated on the fly in maplibre. need to be an big maplibre expression\n  public static calcRadialOffsetAtPosition(\n    radius: number,\n    position: ElderMapMarkerPosition\n  ): [number, number] {\n    const pieceOnCircle = (360 / 16) * LayerUtil.getPieceCountOfCircle(position)\n\n    const radianOfPiece = pieceOnCircle * (3.141 / 180)\n\n    const positionX = radius * Math.cos(radianOfPiece)\n    const positionY = radius * Math.sin(radianOfPiece)\n\n    return [positionX, positionY]\n  }\n\n  private static readonly START_POSITION = ElderMapMarkerPosition.EastSouthEast\n  private static getPieceCountOfCircle(position: ElderMapMarkerPosition) {\n    const positions = Object.values(ElderMapMarkerPosition)\n    const startPosIndex = positions.indexOf(this.START_POSITION)\n    const posIndex = positions.indexOf(position)\n\n    // we want the position to be 1 based instead of zero based\n    if (startPosIndex <= posIndex) {\n      return posIndex - startPosIndex + 1\n    } else {\n      return posIndex + (positions.length - startPosIndex) + 1\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Cluster                                                                 *\n   *                                                                         *\n   **************************************************************************/\n\n  public static buildClusteredLayerProperty(\n    normProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint'],\n    clusteredProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint'],\n    defaultProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint']\n  ): object {\n    const finalProperty = Object.assign(defaultProperty, normProperty)\n\n    for (const propertyKey in clusteredProperty) {\n      finalProperty[propertyKey] = LayerUtil.buildClusterExpression(\n        propertyKey,\n        normProperty,\n        clusteredProperty,\n        defaultProperty\n      )\n    }\n    return finalProperty\n  }\n\n  private static buildClusterExpression(\n    propertyKey: string,\n    normProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint'],\n    clusterProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint'],\n    defaultProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint']\n  ): object {\n    const fallbackValue = defaultProperty[propertyKey]\n\n    return [\n      'case',\n      ['has', 'point_count'],\n      clusterProperty?.[propertyKey] || fallbackValue,\n      normProperty?.[propertyKey] ||\n        LayerUtil.getLayoutFallbackValue(normProperty, clusterProperty, propertyKey, fallbackValue),\n    ]\n  }\n\n  private static getLayoutFallbackValue(\n    normProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint'],\n    clusterProperty:\n      | SymbolLayerSpecification['layout']\n      | CircleLayerSpecification['paint']\n      | SymbolLayerSpecification['paint'],\n    propertyKey: string,\n    fallbackValue: object\n  ): SymbolLayerSpecification['layout'] {\n    if (!normProperty?.[propertyKey]) {\n      console.warn(\n        'No normal property for ' + propertyKey + ' set. Using cluster config for this property.'\n      )\n      return clusterProperty[propertyKey]\n    } else {\n      return fallbackValue\n    }\n  }\n}\n","import { ElderMapMarkerConfig } from '../elder-map-marker-config'\nimport { LayerDescription } from '../../map/elder-map-interfaces'\nimport {\n  DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG,\n  DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG,\n} from '../elder-map-marker/elder-map-marker.component'\nimport { LayerUtil } from './layer-util'\nimport { CircleLayerSpecification } from 'maplibre-gl'\n\nexport class CircleLayers {\n  public static buildInnerCircleLayer(\n    sourceId: string,\n    config: ElderMapMarkerConfig\n  ): LayerDescription {\n    const defaultPaint: CircleLayerSpecification['paint'] = {\n      'circle-color': DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-color'],\n      'circle-radius': DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-radius'],\n      'circle-opacity': DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-opacity'],\n      'circle-stroke-width': DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-stroke-width'],\n      'circle-stroke-color': DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-stroke-color'],\n    }\n\n    return {\n      layer: {\n        id: config.innerCircle?.layerId || LayerUtil.buildLayerId(sourceId, 'inner-circle'),\n        type: 'circle',\n        source: sourceId,\n        filter: config.innerCircle?.filter || ['boolean', true],\n        paint: LayerUtil.buildClusteredLayerProperty(\n          config.innerCircle?.paint,\n          config.innerCircle?.clustered?.paint,\n          defaultPaint\n        ),\n      },\n    }\n  }\n\n  public static buildOuterCircleLayer(\n    sourceId: string,\n    config: ElderMapMarkerConfig\n  ): LayerDescription {\n    const defaultPaint: CircleLayerSpecification['paint'] = {\n      'circle-color': DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG.paint['circle-color'],\n      'circle-radius': LayerUtil.calcOuterCircleRadius(config),\n      'circle-opacity':\n        config.innerCircle.paint['circle-opacity'] ||\n        DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG.paint['circle-opacity'],\n      'circle-stroke-width': DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG.paint['circle-stroke-width'],\n      'circle-stroke-color': DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG.paint['circle-stroke-color'],\n    }\n\n    return {\n      layer: {\n        id: config.outerCircle?.layerId || LayerUtil.buildLayerId(sourceId, 'outer-circle'),\n        type: 'circle',\n        source: sourceId,\n        filter: config.outerCircle?.filter || ['boolean', true],\n        paint: LayerUtil.buildClusteredLayerProperty(\n          config.outerCircle.paint,\n          config.outerCircle.clustered?.paint,\n          defaultPaint\n        ),\n      },\n    }\n  }\n}\n","import { ElderMapMarkerConfig, ElderMapMarkerSymbolConfig } from '../elder-map-marker-config'\nimport { LayerDescription } from '../../map/elder-map-interfaces'\nimport { LayerUtil } from './layer-util'\nimport { ElderMapMarkerPosition } from '../elder-map-marker-position'\nimport { ExpressionSpecification, FilterSpecification, SymbolLayerSpecification } from 'maplibre-gl'\nimport { DEFAULT_FEATURE_SYMBOL_OFFSET_CONFIG } from '../elder-map-marker/elder-map-marker.component'\n\nexport class SymbolLayers {\n  /***************************************************************************\n   *                                                                         *\n   * Public api                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static buildMainSymbolLayer(\n    sourceId: string,\n    config: ElderMapMarkerSymbolConfig\n  ): LayerDescription {\n    const defaultLayout: SymbolLayerSpecification['layout'] = {\n      'text-size': 16,\n      'icon-size': 1,\n    }\n    const defaultPaint: SymbolLayerSpecification['paint'] = {\n      'text-color': 'black',\n    }\n    const defaultClusteredLayout: SymbolLayerSpecification['layout'] = {\n      'text-field': ['concat', '#', ['get', 'point_count']],\n      'text-size': 15,\n    }\n\n    return {\n      layer: {\n        id: config?.layerId || LayerUtil.buildLayerId(sourceId, 'center-symbol'),\n        type: 'symbol',\n        source: sourceId,\n        filter: config?.filter || ['boolean', true],\n        minzoom: config?.minzoom || 0,\n        maxzoom: config?.maxzoom || 22,\n        paint: LayerUtil.buildClusteredLayerProperty(\n          config.paint,\n          config.clustered?.paint || {},\n          defaultPaint\n        ),\n        layout: LayerUtil.buildClusteredLayerProperty(\n          Object.assign({ 'text-field': ' ' }, config.layout),\n          Object.assign(defaultClusteredLayout, config.clustered?.layout || {}),\n          defaultLayout\n        ),\n      },\n    }\n  }\n\n  public static buildFeatureSymbolLayerByPosition(\n    sourceId: string,\n    name: string,\n    markerConfig: ElderMapMarkerConfig,\n    position: ElderMapMarkerPosition,\n    symbolConfig: ElderMapMarkerSymbolConfig\n  ): LayerDescription {\n    const textSize = (symbolConfig.layout['text-size'] as number) || 10\n    const iconSize = (symbolConfig.layout['icon-size'] as number) || 1\n\n    const offsetConfig =\n      symbolConfig.offsetConfig ||\n      markerConfig.featureSymbolOffsetConfig ||\n      DEFAULT_FEATURE_SYMBOL_OFFSET_CONFIG\n\n    const textOffset = LayerUtil.buildOffsetSpecification(offsetConfig, position, textSize)\n    const iconOffset = LayerUtil.buildOffsetSpecification(offsetConfig, position, iconSize)\n\n    const symbolOpacity = this.getOuterSymbolOpacity(symbolConfig, name)\n\n    const defaultPaint: SymbolLayerSpecification['paint'] = {\n      'text-opacity': symbolOpacity,\n      'icon-opacity': symbolOpacity,\n    }\n\n    const defaultLayout: SymbolLayerSpecification['layout'] = {\n      'text-size': 10,\n      'text-allow-overlap': true,\n      'icon-allow-overlap': true,\n      'text-offset': textOffset,\n      'icon-offset': iconOffset,\n    }\n\n    return {\n      layer: {\n        id: symbolConfig?.layerId || LayerUtil.buildLayerId(sourceId, name),\n        type: 'symbol',\n        source: sourceId,\n        filter: this.buildOuterSymbolFilter(symbolConfig, name),\n        minzoom: symbolConfig?.minzoom || 0,\n        maxzoom: symbolConfig?.maxzoom || 22,\n        paint: LayerUtil.buildClusteredLayerProperty(\n          symbolConfig.paint,\n          symbolConfig.clustered?.paint || {},\n          defaultPaint\n        ),\n        layout: LayerUtil.buildClusteredLayerProperty(\n          symbolConfig.layout,\n          symbolConfig.clustered?.layout || {},\n          defaultLayout\n        ),\n      },\n    }\n  }\n\n  public static buildOuterSymbolFilter(\n    config: ElderMapMarkerSymbolConfig,\n    name: string\n  ): FilterSpecification {\n    // mapLibre expression\n    // if not cluster: simple filter from config\n    // else: property filter count check from cluster\n    const filterCountProperty = name + 'MatchCount'\n\n    return [\n      'case',\n      ['!', ['has', 'point_count']],\n      config?.filter || true,\n      ['>', ['get', filterCountProperty], 0],\n      true,\n      false,\n    ]\n  }\n\n  public static getOuterSymbolOpacity(\n    config: ElderMapMarkerSymbolConfig,\n    name: string\n  ): ExpressionSpecification {\n    // mapLibre expression\n    // if not cluster: 1\n    // else:\n    // if all: 1\n    // else 0.6\n\n    const filterCountProperty = name + 'MatchCount'\n\n    return [\n      'case',\n      ['!', ['has', 'point_count']],\n      1,\n      ['==', ['get', filterCountProperty], ['get', 'point_count']],\n      1,\n      0.6,\n    ]\n  }\n}\n","import { ElderMapMarkerConfig, ElderMapMarkerSymbolConfig } from '../elder-map-marker-config'\nimport { LayerDescription } from '../../map/elder-map-interfaces'\nimport { LayerUtil } from './layer-util'\nimport { ElderMapMarkerPosition } from '../elder-map-marker-position'\nimport { SymbolLayerSpecification } from 'maplibre-gl'\nimport { DEFAULT_FEATURE_LABEL_OFFSET_CONFIG } from '../elder-map-marker/elder-map-marker.component'\n\nexport class LabelLayers {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static buildLabelLayerByPosition(\n    sourceId: string,\n    name: string,\n    config: ElderMapMarkerConfig,\n    mapMarkerPosition: ElderMapMarkerPosition,\n    labelConfig: ElderMapMarkerSymbolConfig\n  ): LayerDescription {\n    const textSize =\n      (labelConfig.layout?.['text-size'] as number) ||\n      (labelConfig.clustered?.layout?.['text-size'] as number) ||\n      16\n\n    const offsetConfig =\n      labelConfig.offsetConfig ||\n      config.featureLabelOffsetConfig ||\n      DEFAULT_FEATURE_LABEL_OFFSET_CONFIG\n\n    const defaultLayout: SymbolLayerSpecification['layout'] = {\n      'text-field': ['get', 'label', ['get', 'data']],\n      'text-font': ['Klokantech Noto Sans Regular'],\n      'text-size': textSize,\n      'text-offset': LayerUtil.buildOffsetSpecification(offsetConfig, mapMarkerPosition, textSize),\n    }\n\n    const defaultPaint: SymbolLayerSpecification['paint'] = {\n      'text-halo-color': 'white',\n      'text-halo-width': 2,\n    }\n\n    return {\n      layer: {\n        id: labelConfig?.layerId || LayerUtil.buildLayerId(sourceId, name),\n        type: 'symbol',\n        source: sourceId,\n        filter: labelConfig?.filter || ['boolean', true],\n        minzoom: labelConfig?.minzoom || 0,\n        maxzoom: labelConfig?.maxzoom || 22,\n        layout: LayerUtil.buildClusteredLayerProperty(\n          labelConfig.layout,\n          labelConfig.clustered?.layout || {},\n          defaultLayout\n        ),\n        paint: LayerUtil.buildClusteredLayerProperty(\n          labelConfig.paint,\n          labelConfig.clustered?.paint || {},\n          defaultPaint\n        ),\n      },\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ContentChild,\n  ContentChildren,\n  Input,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  inject,\n  ChangeDetectionStrategy,\n} from '@angular/core'\nimport { LayerDescription, SourceDescription } from '../../map/elder-map-interfaces'\nimport { ElderMapController } from '../../map/elder-map-controller.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport {\n  ElderMapMarkerClusterConfig,\n  ElderMapMarkerConfig,\n  ElderMapMarkerInnerCircleConfig,\n  ElderMapMarkerOuterCircleConfig,\n  RadialOffsetConfig,\n} from '../elder-map-marker-config'\nimport { MarkerFeatureSymbolComponent } from '../marker-feature-symbol/marker-feature-symbol.component'\nimport { MarkerLabelComponent } from '../marker-label/marker-label.component'\nimport { MarkerMainSymbolComponent } from '../marker-main-symbol/marker-main-symbol.component'\nimport { MarkerSources } from '../layers/sources/marker-sources'\nimport { CircleLayers } from '../layers/circle-layers'\nimport { SymbolLayers } from '../layers/symbol-layers'\nimport { LabelLayers } from '../layers/label-layers'\n\nexport const DEFAULT_MAP_MARKER_INNER_CIRCLE_CONFIG: ElderMapMarkerInnerCircleConfig = {\n  paint: {\n    'circle-color': 'black',\n    'circle-radius': 10,\n    'circle-opacity': 1,\n    'circle-stroke-color': 'white',\n    'circle-stroke-width': 1,\n  },\n  clustered: {\n    paint: {\n      'circle-radius': 20,\n    },\n  },\n}\n\nexport const DEFAULT_MAP_MARKER_OUTER_CIRCLE_CONFIG: ElderMapMarkerOuterCircleConfig = {\n  widthFactor: 0.5,\n  paint: {\n    'circle-color': 'white',\n    'circle-stroke-color': 'black',\n    'circle-stroke-width': 1,\n  },\n}\n\nexport const DEFAULT_MAP_MARKER_CLUSTER_CONFIG: ElderMapMarkerClusterConfig = {\n  clusterRadius: 25,\n}\n\nexport const DEFAULT_FEATURE_SYMBOL_OFFSET_CONFIG: RadialOffsetConfig = {\n  radius: 28,\n}\nexport const DEFAULT_FEATURE_LABEL_OFFSET_CONFIG: RadialOffsetConfig = {\n  radius: 35,\n}\n\n@Component({\n  selector: 'emgl-marker',\n  templateUrl: './elder-map-marker.component.html',\n  styleUrls: ['./elder-map-marker.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class ElderMapMarkerComponent implements OnInit, OnDestroy, AfterViewInit {\n  private elderMapController = inject(ElderMapController)\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static readonly SOURCE_DEFAULT_ELDER_POINTS = 'defaultElderSourceId'\n  public static readonly MARKER_LAYER_PREFIX = 'elder-map-marker'\n\n  private readonly _log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly _destroy$ = new Subject<void>()\n\n  private _sourceId = ElderMapMarkerComponent.SOURCE_DEFAULT_ELDER_POINTS\n  private _config: ElderMapMarkerConfig = {}\n\n  @ContentChildren(MarkerFeatureSymbolComponent)\n  private _featureSymbolComponents: QueryList<MarkerFeatureSymbolComponent>\n\n  @ContentChildren(MarkerLabelComponent)\n  private _labelComponents: QueryList<MarkerLabelComponent>\n\n  @ContentChild(MarkerMainSymbolComponent)\n  private _mainSymbolComponent: MarkerMainSymbolComponent\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  public ngAfterViewInit() {\n    this.elderMapController.mapReady$.pipe(takeUntil(this._destroy$)).subscribe({\n      next: (isReady) => {\n        if (isReady) {\n          this.elderMapController.addMapMarker(\n            this.buildSources(),\n            this.buildLayers(),\n            this.config?.beforeLayerId\n          )\n        }\n      },\n    })\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next()\n    this._destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set sourceId(value: string) {\n    this._sourceId = value\n  }\n\n  public get sourceId(): string {\n    return this._sourceId\n  }\n\n  @Input()\n  public set config(value: ElderMapMarkerConfig) {\n    this._config = value\n  }\n\n  public get config(): ElderMapMarkerConfig {\n    return this._config\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Layer and Source Descriptions                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildSources(): SourceDescription {\n    if (this.config.cluster?.enabled) {\n      return MarkerSources.buildClusterSource(\n        this.config,\n        this.sourceId,\n        this._featureSymbolComponents.toArray(),\n        this.config.filter,\n        this.elderMapController.getConfig()\n      )\n    } else {\n      return MarkerSources.buildSimpleSource(this.sourceId, this.config.filter)\n    }\n  }\n\n  private buildLayers(): LayerDescription[] {\n    const featureSymbolLayers = this.buildFeatureSymbolLayers(\n      this._featureSymbolComponents.toArray()\n    )\n    const labelLayers = this.buildLabelLayers(this._labelComponents.toArray())\n    const mainSymbolLayer = this.buildMainSymbolLayer(this._mainSymbolComponent)\n    const baseLayers = this.buildBaseLayers()\n    return [...baseLayers, mainSymbolLayer, ...labelLayers, ...featureSymbolLayers] // order is important!\n  }\n\n  private buildFeatureSymbolLayers(\n    featureSymbols: MarkerFeatureSymbolComponent[]\n  ): LayerDescription[] {\n    return featureSymbols\n      .filter((featureSymbol) => featureSymbol.config.enabled)\n      .map((featureSymbol) => this.buildFeatureSymbolLayer(featureSymbol))\n  }\n\n  private buildLabelLayers(markerLabels: MarkerLabelComponent[]) {\n    return markerLabels\n      .filter((markerLabel) => markerLabel.config.enabled)\n      .map((markerLabel) => this.buildLabelLayer(markerLabel))\n  }\n\n  private buildBaseLayers(): LayerDescription[] {\n    let layerCustomElderDesc: LayerDescription[] = []\n\n    if (this.config.outerCircle?.enabled) {\n      layerCustomElderDesc.push(CircleLayers.buildOuterCircleLayer(this.sourceId, this.config))\n      layerCustomElderDesc.push(CircleLayers.buildInnerCircleLayer(this.sourceId, this.config))\n    } else {\n      layerCustomElderDesc.push(CircleLayers.buildInnerCircleLayer(this.sourceId, this.config))\n    }\n\n    layerCustomElderDesc = this.addMouseOverEvents(layerCustomElderDesc)\n    return layerCustomElderDesc\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private addMouseOverEvents(layerDescriptions: LayerDescription[]): LayerDescription[] {\n    let layers = layerDescriptions\n    if (this.config?.logFeaturesByMouseOver) {\n      layers = layers.map((layer) => {\n        layer.logFeaturesByMouseOver = true\n        return layer\n      })\n    }\n\n    if (this.config?.updateFeatureStateByMouseOver) {\n      layers = layers.map((layer) => {\n        layer.updateFeatureStateByMouseOver = true\n        return layer\n      })\n    }\n\n    if (this.config?.changeCursorStyleByMouseOver) {\n      layers = layers.map((layer) => {\n        layer.changeCursorStyleByMouseOver = true\n        return layer\n      })\n    }\n\n    return layers\n  }\n\n  private buildFeatureSymbolLayer(featureSymbol: MarkerFeatureSymbolComponent): LayerDescription {\n    return SymbolLayers.buildFeatureSymbolLayerByPosition(\n      this.sourceId,\n      featureSymbol.name,\n      this.config,\n      featureSymbol.mapMarkerPosition,\n      featureSymbol.config\n    )\n  }\n\n  private buildLabelLayer(markerLabel: MarkerLabelComponent): LayerDescription {\n    return LabelLayers.buildLabelLayerByPosition(\n      this.sourceId,\n      markerLabel.name,\n      this.config,\n      markerLabel.mapMarkerPosition,\n      markerLabel.config\n    )\n  }\n\n  private buildMainSymbolLayer(mainSymbolComponent: MarkerMainSymbolComponent): LayerDescription {\n    if (mainSymbolComponent?.config?.enabled) {\n      return SymbolLayers.buildMainSymbolLayer(this.sourceId, mainSymbolComponent.config)\n    }\n    return undefined\n  }\n}\n","","import { NgModule } from '@angular/core'\nimport { ElderMapMarkerComponent } from './elder-map-marker/elder-map-marker.component'\nimport { MarkerFeatureSymbolComponent } from './marker-feature-symbol/marker-feature-symbol.component'\nimport { MarkerLabelComponent } from './marker-label/marker-label.component'\nimport { MarkerMainSymbolComponent } from './marker-main-symbol/marker-main-symbol.component'\n\nexport * from './elder-map-marker/elder-map-marker.component'\nexport * from './marker-feature-symbol/marker-feature-symbol.component'\nexport * from './marker-label/marker-label.component'\nexport * from './marker-main-symbol/marker-main-symbol.component'\nexport * from './elder-map-marker-config'\nexport * from './elder-map-marker'\nexport * from './elder-map-marker-position'\n\nconst componentsAndDirectives = [\n  ElderMapMarkerComponent,\n  MarkerFeatureSymbolComponent,\n  MarkerLabelComponent,\n  MarkerMainSymbolComponent,\n] as const\n\n@NgModule({\n  imports: [...componentsAndDirectives],\n  exports: [...componentsAndDirectives],\n})\nexport class ElderMapMarkerModule {}\n","import { ExpressionInputType, ExpressionSpecification } from 'maplibre-gl'\n\nexport class ColorExpressionUtil {\n  /**\n   * Returns an expression that returns either white or black depending on the brightness of the given color.\n   */\n  public static getHighContrastColor(\n    color: string | ExpressionSpecification\n  ): ExpressionSpecification {\n    return this.ifBrightOrElse(color, '#000000', '#ffffff')\n  }\n\n  /**\n   * Returns a case expression with brightCase (true) and darkCase (false) depending on the brightness of the given color.\n   */\n  public static ifBrightOrElse(\n    color: string | ExpressionSpecification,\n    brightCase: ExpressionSpecification | ExpressionInputType,\n    darkCase: ExpressionSpecification | ExpressionInputType\n  ): ExpressionSpecification {\n    return ['case', ['boolean', this.isColorBright(color), true], brightCase, /*else*/ darkCase]\n  }\n\n  /**\n   * Returns an expression that checks if the given color is bright.\n   *\n   * The formula ((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000 is used to determine the brightness of a color.\n   * See: https://www.w3.org/TR/AERT/#color-contrast\n   */\n  public static isColorBright(color: string | ExpressionSpecification): ExpressionSpecification {\n    return [\n      'let',\n      'rgba',\n      ['to-rgba', color],\n      [\n        '>',\n        [\n          '+',\n          ['+', ['*', ['at', 0, ['var', 'rgba']], 0.299], ['*', ['at', 1, ['var', 'rgba']], 0.587]],\n          ['*', ['at', 2, ['var', 'rgba']], 0.114],\n        ],\n        186,\n      ],\n    ]\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","componentsAndDirectives"],"mappings":"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"}