{"version":3,"file":"adb-shared-map.mjs","sources":["../../../projects/adb-shared/map/src/mapUtils.ts","../../../projects/adb-shared/map/src/components/polygon-drawer.component.ts","../../../projects/adb-shared/map/src/components/polygon-drawer.component.html","../../../projects/adb-shared/map/src/config.ts","../../../projects/adb-shared/map/src/components/treeview.ts","../../../projects/adb-shared/map/src/components/treeview.html","../../../projects/adb-shared/map/src/components/observations-map.ts","../../../projects/adb-shared/map/src/components/observations-map.html","../../../projects/adb-shared/map/src/constants.ts","../../../projects/adb-shared/map/src/components/map-filter.ts","../../../projects/adb-shared/map/src/components/map-filter.html","../../../projects/adb-shared/map/src/adb-map.module.ts","../../../projects/adb-shared/map/src/adb-shared-map.ts"],"sourcesContent":["import { MapOptions } from \"./models\";\r\nimport * as Leaflet from 'leaflet';\r\n\r\nexport class AdbMapUtils {\r\n    static readonly INITIAL_CENTER_LAT = 62;\r\n    static readonly INITIAL_CENTER_LNG = 17;\r\n    static OverlayMaps = {\r\n        'Altitude': new Leaflet.TileLayer.WMS(\"https://maps.sgu.se/lmv/hojdmodell/v1.1?SERVICE=WMS\",\r\n            { layers: \"terrangskuggning\", format: \"image/png\", transparent: true, opacity: 0.3, maxZoom: 16, version: \"1.3.0\" }),\r\n        'Fjällkarta': new Leaflet.TileLayer.WMS(\r\n            'api/maps/mountain',\r\n            {\r\n                minZoom: 6,\r\n                maxZoom: 18,\r\n                maxNativeZoom: 14,\r\n                attribution: '© <a href=\"https://www.lantmateriet.se/\">Fjällkart</a>',\r\n                wms: true\r\n            }),\r\n        'Kommuner': new Leaflet.TileLayer.WMS(\r\n            'https://sosgeo.artdata.slu.se/geoserver/GeoRegion/wms?',\r\n            {\r\n                layers: 'GeoRegion:Municipality',\r\n                version: '1.1.0',\r\n                transparent: true,\r\n                format: 'image/png'\r\n            }\r\n        ),\r\n        'Län': new Leaflet.TileLayer.WMS(\r\n            'https://sosgeo.artdata.slu.se/geoserver/GeoRegion/wms?',\r\n            {\r\n                layers: 'GeoRegion:County',\r\n                version: '1.1.0',\r\n                transparent: true,\r\n                format: 'image/png'\r\n            }\r\n        )\r\n        , 'Ortnamn': new Leaflet.TileLayer.WMS(\r\n            \"https://maps.sgu.se/lmv/topowebb-skikt/v1.1?SERVICE=WMS\",\r\n            {\r\n                layers: \"text\",\r\n                format: \"image/png\",\r\n                transparent: true,\r\n                version: \"1.3.0\",\r\n            }\r\n        ),\r\n        'Ekonomisk zon': new Leaflet.TileLayer.WMS(\r\n            \"https://sosgeo.artdata.slu.se/geoserver/it.geosolutions/wms?\",\r\n            {\r\n                layers: \"it.geosolutions:Ekonomiska_zonens_yttre_avgränsningslinjer_linje\",\r\n                format: \"image/png\",\r\n                transparent: true,\r\n                version: \"1.1.0\"\r\n            }\r\n        )\r\n    };\r\n\r\n    static Providers: MapProvider[] = [\r\n        {\r\n            name: 'Open Streetmap',\r\n            id: 3,\r\n            url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\r\n            minZoom: 0,\r\n            maxZoom: 18,\r\n            params: {\r\n                maxNativeZoom: 18,\r\n                attribution: '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\r\n            },\r\n            wms: false\r\n        },\r\n        {\r\n            name: 'Sveriges gränser',\r\n            id: 7,\r\n            url: 'https://sosgeo.artdata.slu.se/geoserver/it.geosolutions/wms',\r\n            minZoom: 6,\r\n            maxZoom: 18,\r\n            params: {\r\n                maxNativeZoom: 14,\r\n                attribution: '© <a href=\"https://www.lantmateriet.se/\">Sveriges gränser</a>',\r\n                layers: 'it.geosolutions:Sverige_epsg5845', styles: 'municipality_name_yellow',\r\n                epsg: 5845 \r\n            },\r\n            wms: true\r\n        }\r\n    ]\r\n\r\n    //NOTE: Will be move\r\n    static redListMapper2 = {\r\n        'VU': '228',\r\n        'EN': '229',\r\n        'CR': '230',\r\n        'RE': '231',\r\n        'DD': '232',\r\n        'NT': '233'\r\n    }\r\n\r\n    static createMap(\r\n        elementId: string,\r\n        options: MapOptions = {}\r\n    ): Leaflet.Map {\r\n\r\n        const map = Leaflet.map(elementId, {\r\n            zoomAnimation: false,\r\n            fadeAnimation: false,\r\n            markerZoomAnimation: false,\r\n            inertia: false,\r\n            scrollWheelZoom: options.scrollZoom ?? true,\r\n            zoomControl: options.zoom ?? true,\r\n            dragging: options.zoom ?? true,\r\n            minZoom: -1,\r\n            zoomDelta: 1\r\n        });\r\n\r\n        map.setView([62, 17], 5);\r\n\r\n        Leaflet.control.scale().addTo(map);\r\n\r\n        if (options.providers !== false) {\r\n            this.addProviders(map);\r\n        }\r\n\r\n        return map;\r\n    }\r\n\r\n    private static addProviders(map: Leaflet.Map): void {\r\n        const backgroundMaps: Record<string, Leaflet.Layer> = {};\r\n\r\n        for (const value of Object.values(AdbMapUtils.Providers)) {\r\n            backgroundMaps[value.name] = value.wms\r\n                ? Leaflet.tileLayer.wms(value.url, value.params)\r\n                : Leaflet.tileLayer(value.url, value.params);\r\n        }\r\n        if (backgroundMaps['Open Streetmap']) {\r\n            map.addLayer(backgroundMaps['Open Streetmap']);\r\n        }\r\n        Leaflet.control.layers(backgroundMaps, AdbMapUtils.OverlayMaps).addTo(map);\r\n    }\r\n}\r\n\r\ninterface MapProvider {\r\n    name: string;\r\n    id: number;\r\n    url: string;\r\n    minZoom: number;\r\n    maxZoom: number;\r\n    wms: boolean;\r\n    params?: any;\r\n}","import {\r\n    Component,\r\n    forwardRef,\r\n    OnDestroy,\r\n    OnInit,\r\n    AfterViewInit\r\n} from \"@angular/core\";\r\nimport {\r\n    ControlValueAccessor,\r\n    NG_VALUE_ACCESSOR\r\n} from \"@angular/forms\";\r\nimport Leaflet from \"leaflet\";\r\nimport \"@geoman-io/leaflet-geoman-free\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { AdbMapUtils } from \"../mapUtils\";\r\n\r\n@Component({\r\n    selector: \"adb-polygon-drawer\",\r\n    templateUrl: \"polygon-drawer.component.html\",\r\n    standalone: false,\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => PolygonDrawerInput),\r\n            multi: true\r\n        }\r\n    ]\r\n})\r\nexport class PolygonDrawerInput\r\n    implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy {\r\n\r\n    private subscriptions = new Subscription();\r\n\r\n    mapId = \"\" + Math.floor(Math.random() * Date.now());\r\n    map!: Leaflet.Map;\r\n\r\n    polygonDraw = false;\r\n    shapeLayer: any;\r\n    geoJson: any;\r\n\r\n    ngAfterViewInit(): void {\r\n        this.map = AdbMapUtils.createMap(this.mapId, {\r\n            zoom: true,\r\n            scrollZoom: true,\r\n            providers: true\r\n        });\r\n\r\n        this.map.whenReady(() => {\r\n            this.initDraw();\r\n            this.renderInitialShape();\r\n        });\r\n    }\r\n\r\n    ngOnInit(): void { }\r\n\r\n    ngOnDestroy(): void {\r\n        this.subscriptions.unsubscribe();\r\n    }\r\n\r\n    private initDraw(): void {\r\n        this.map.pm.removeControls();\r\n        this.map.pm.enableDraw('Polygon', {\r\n            tooltips: false,\r\n            finishOn: 'snap',\r\n            snapDistance: 30, \r\n            snapMiddle: false\r\n        });\r\n        this.map.on(\"pm:create\", (e: any) => {\r\n            if (e.shape !== 'Polygon' && e.shape !== 'Circle') return;\r\n            this.polygonDraw = false;\r\n            this.map.pm.disableDraw();\r\n\r\n            this.clearShape();\r\n            this.shapeLayer = e.layer;\r\n\r\n            if (this.shapeLayer instanceof Leaflet.Path) {\r\n                this.shapeLayer.setStyle({ fillOpacity: 0.5 });\r\n            }\r\n            this.shapeLayer.interactive = false;\r\n            this.map.fitBounds(this.shapeLayer.getBounds());\r\n\r\n            const geo = this.shapeLayer.toGeoJSON();\r\n\r\n            if (this.shapeLayer instanceof Leaflet.Circle) {\r\n                geo.properties = {\r\n                    ...geo.properties,\r\n                    radius: Math.ceil(this.shapeLayer.getRadius())\r\n                };\r\n            }\r\n\r\n            this.onChange(geo);\r\n        });\r\n    }\r\n\r\n    private renderInitialShape(): void {\r\n        if (this.geoJson?.type === \"Feature\") {\r\n            this.shapeLayer = Leaflet.geoJSON(this.geoJson, {\r\n                interactive: false\r\n            });\r\n            this.map.addLayer(this.shapeLayer);\r\n            this.map.fitBounds(this.shapeLayer.getBounds());\r\n        } else {\r\n            this.map.setView(\r\n                [AdbMapUtils.INITIAL_CENTER_LAT, AdbMapUtils.INITIAL_CENTER_LNG],\r\n                5\r\n            );\r\n        }\r\n    }\r\n\r\n    private clearShape(): void {\r\n        if (this.shapeLayer) {\r\n            this.map.removeLayer(this.shapeLayer);\r\n            this.shapeLayer = null;\r\n        }\r\n    }\r\n\r\n    onDrawPolygon(): void {\r\n        this.polygonDraw = true;\r\n\r\n        this.map.pm.enableDraw(\"Polygon\", {\r\n            allowSelfIntersection: false,\r\n            snappable: false\r\n        });\r\n    }\r\n\r\n    onDrawCircle(): void {\r\n        this.polygonDraw = true;\r\n\r\n        this.map.pm.enableDraw(\"Circle\", {\r\n            allowSelfIntersection: false,\r\n            snappable: false\r\n        });\r\n    }\r\n\r\n    onUndoStep(): void {\r\n        const draw = (this.map.pm as any).Draw?.Polygon;\r\n        draw?._removeLastVertex();\r\n    }\r\n\r\n    onDeleteShape(): void {\r\n        this.clearShape();\r\n        this.map.pm.disableDraw();\r\n        this.polygonDraw = false;\r\n        this.onChange(null);\r\n        this.map.setView([62, 17], 5);\r\n    }\r\n\r\n    // ControlValueAccessor\r\n    onChange: any = () => { };\r\n    onTouched: any = () => { };\r\n\r\n    writeValue(geoJson: any): void {\r\n        this.geoJson = geoJson;\r\n    }\r\n\r\n    registerOnChange(fn: any): void {\r\n        this.onChange = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: any): void {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    setDisabledState?(isDisabled: boolean): void { }\r\n}\r\n","<div class=\"mb-1 d-flex gap-1 flex-wrap align-items-start\">\r\n  <button class=\"btn btn-secondary\" type=\"button\" [disabled]=\"shapeLayer\" (click)=\"onDrawPolygon()\" title=\"Polygon\">\r\n    <span class=\"fas fa-draw-polygon\"></span> {{'OBSERVATION.DRAW'|translate}}\r\n  </button>\r\n  <button class=\"btn btn-secondary\" type=\"button\" [disabled]=\"shapeLayer\" (click)=\"onDrawCircle()\" title=\"Circle\">\r\n    <span class=\"fas fa-draw-circle\"></span> {{'OBSERVATION.DRAW_CIRCLE'|translate}}\r\n  </button>\r\n  @if (shapeLayer) {\r\n  <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onDeleteShape()\" title=\"Ta bort\">\r\n    <span class=\"fas fa-times\"></span>\r\n  </button>\r\n  }\r\n  @if (polygonDraw) {\r\n  <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onUndoStep()\" title=\"Ångra\">\r\n    <span class=\"fas fa-undo\"></span>\r\n  </button>\r\n  }\r\n</div>\r\n<div [id]=\"mapId\" class=\"border\" style=\"height:20rem\"></div>","import { Inject, Injectable } from \"@angular/core\";\r\nimport { InjectionToken } from \"@angular/core\";\r\nexport interface AdbMapConfig {\r\n    api: string,\r\n    artfaktaTaxonLists: string,\r\n    observationPage?: string;\r\n    locationPage?: string;\r\n    dynamic?: boolean;\r\n    filters?: AdbMapFilterType[],\r\n    log?: boolean\r\n}\r\n\r\nexport enum AdbMapFilterType {\r\n    Taxon = 'taxon',\r\n    Area = 'area',\r\n    OwnArea = 'ownArea',\r\n    Time = 'time',\r\n    RedList = 'redlist',\r\n    RiskList = 'risklist',\r\n    TaxaLists = 'taxonLists',\r\n    Datasources = 'datasources'\r\n}\r\n\r\nexport class VisibleFilters {\r\n    showTaxon: boolean;\r\n    showTime: boolean;\r\n    showArea: boolean;\r\n    showOwnArea: boolean;\r\n    showTaxaLists: boolean;\r\n    showDatasets: boolean;\r\n}\r\n\r\nexport const ADB_MAP_CONFIG = new InjectionToken<AdbMapConfig>('ADB_MAP_CONFIG');\r\n\r\n@Injectable()\r\nexport class AdbMapConfigService {\r\n    readonly log: boolean;\r\n    readonly artfaktaTaxonLists: string;\r\n    readonly observationFeatures: string;\r\n    readonly taxaListsApi: string;\r\n    readonly filters: VisibleFilters;\r\n    readonly observationPage: string;\r\n    readonly locationPage: string;\r\n    readonly dynamic: boolean;\r\n\r\n    constructor(@Inject(ADB_MAP_CONFIG) config: AdbMapConfig) {\r\n        this.log = config.log ?? false;\r\n        this.dynamic = config.dynamic ?? false;\r\n        this.artfaktaTaxonLists = config.artfaktaTaxonLists ?? 'https://artfakta.se/metadata/listor';\r\n        this.taxaListsApi = config.api + '/taxalists';\r\n        this.observationFeatures = config.api + '/observation-features';\r\n        this.observationPage = config.observationPage ?? window.location.origin + '/observationer';\r\n        this.locationPage = config.locationPage ?? window.location.origin + '/lokaler';\r\n        this.filters = {\r\n            showTaxon: this.hasFilter(AdbMapFilterType.Taxon, config.filters),\r\n            showTime: this.hasFilter(AdbMapFilterType.Time, config.filters),\r\n            showArea: this.hasFilter(AdbMapFilterType.Area, config.filters),\r\n            showOwnArea: this.hasFilter(AdbMapFilterType.OwnArea, config.filters),\r\n            showTaxaLists: this.hasFilter(AdbMapFilterType.TaxaLists, config.filters),\r\n            showDatasets: this.hasFilter(AdbMapFilterType.Datasources, config.filters)\r\n        };\r\n    }\r\n\r\n    private hasFilter(f: AdbMapFilterType, filters: AdbMapFilterType[]): boolean {\r\n        return filters?.includes(f) ?? true;\r\n    }\r\n}","import { Component, Input, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'app-treeview',\r\n  templateUrl: './treeview.html',\r\n  standalone:false,\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => TreeviewComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class TreeviewComponent implements ControlValueAccessor {\r\n  @Input() nodes: ListItem[] = [];\r\n\r\n  private selectedIds: number[] = [];\r\n  private onChange: (value: number[]) => void = () => {};\r\n  private onTouched: () => void = () => {};\r\n\r\n  writeValue(ids: number[] | null): void {\r\n    this.selectedIds = ids ?? [];\r\n    this.applySelection(this.nodes);\r\n  }\r\n\r\n  registerOnChange(fn: (value: number[]) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.setReadOnly(this.nodes, isDisabled);\r\n  }\r\n\r\n  onLeafToggle(node: ListItem): void {\r\n    if (node._readOnly) return;\r\n\r\n    node._selected = !node._selected;\r\n\r\n    this.selectedIds = TreeviewComponent.collectSelectedLeafIds(this.nodes);\r\n    this.onChange(this.selectedIds);\r\n    this.onTouched();\r\n  }\r\n\r\n  private applySelection(nodes: ListItem[]): void {\r\n    for (const node of nodes) {\r\n      if (node.children?.length) {\r\n        this.applySelection(node.children);\r\n      } else {\r\n        node._selected = this.selectedIds.includes(node.id);\r\n      }\r\n    }\r\n  }\r\n\r\n  private setReadOnly(nodes: ListItem[], readOnly: boolean): void {\r\n    for (const node of nodes) {\r\n      node._readOnly = readOnly;\r\n      if (node.children?.length) {\r\n        this.setReadOnly(node.children, readOnly);\r\n      }\r\n    }\r\n  }\r\n\r\n  private static collectSelectedLeafIds(nodes: ListItem[]): number[] {\r\n    const ids: number[] = [];\r\n\r\n    for (const node of nodes) {\r\n      if (node.children?.length) {\r\n        ids.push(...this.collectSelectedLeafIds(node.children));\r\n      } else if (node._selected) {\r\n        ids.push(node.id);\r\n      }\r\n    }\r\n\r\n    return ids;\r\n  }\r\n}\r\n\r\n interface ListItem {\r\n  id: number;\r\n  name?: string;\r\n  children?: ListItem[];\r\n\r\n  _selected?: boolean;\r\n  _readOnly?: boolean;\r\n}\r\n\r\n","<ng-container *ngTemplateOutlet=\"nodeTpl; context: { $implicit: nodes }\">\r\n</ng-container>\r\n<ng-template #nodeTpl let-nodes>\r\n  @for (node of nodes; track node) {\r\n    <div class=\"ms-3\">\r\n      @if(!node.children || node.children.length === 0){\r\n        <div class=\"d-flex align-items-center gap-2\">\r\n          <input id=\"{{node.id}}\" type=\"checkbox\" class=\"form-check-input m-0\" [checked]=\"node._selected\" [disabled]=\"node._readOnly\" (change)=\"onLeafToggle(node)\" />\r\n          <label for=\"{{node.id}}\">{{ node.name }}</label>\r\n        </div>\r\n      }\r\n      @else {\r\n      {{ node.name }}\r\n      <div>\r\n        <ng-container *ngTemplateOutlet=\"nodeTpl; context: { $implicit: node.children }\">\r\n        </ng-container>\r\n      </div>\r\n    }\r\n  </div>\r\n}\r\n</ng-template>","import { AfterViewInit, Component, effect, OnDestroy, OnInit, signal } from \"@angular/core\";\r\nimport * as Leaflet from 'leaflet';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { ActivatedRoute, ParamMap, Params, Router } from \"@angular/router\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { HttpClient, HttpResponse } from \"@angular/common/http\";\r\nimport { GeoJson } from \"../models\";\r\nimport { AdbMapConfigService } from \"../config\";\r\nimport { AdbMapUtils } from \"../mapUtils\";\r\n@Component({\r\n    selector: 'adb-obs-map',\r\n    templateUrl: 'observations-map.html',\r\n    standalone: false\r\n})\r\nexport class AdbObsMapComponent implements AfterViewInit, OnInit, OnDestroy {\r\n    private static readonly LOCATION_MARKER_COLOR = '#007c91';\r\n    private static readonly OBS_MARKER_COLOR = '#007c91';\r\n    private static readonly UNCERTAINTY_COLOR = '#777';\r\n\r\n    private subscriptions = new Subscription();\r\n    error: null;\r\n    mapLoading = signal(false);\r\n    siteLayer: Leaflet.FeatureGroup;\r\n    hasBox: boolean;\r\n    count: any;\r\n    mapId = '' + Math.floor(Math.random() * Date.now());\r\n    map = Leaflet.map;\r\n    //Lock start\r\n    mapReady = signal(false);\r\n    hasQueryParams = false;\r\n    hasUrlParams = false;\r\n    queryParams: Params;\r\n    urlParams: ParamMap;\r\n    //Lock end\r\n\r\n    constructor(\r\n        private activatedRoute: ActivatedRoute,\r\n        private config: AdbMapConfigService,\r\n        private router: Router,\r\n        private http: HttpClient) {\r\n        effect(() => {\r\n            // This will re-run whenever mapReady() changes\r\n            if (this.mapReady() && this.hasQueryParams && this.hasUrlParams) {\r\n                this.tryLoad();\r\n            }\r\n        });\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.map = AdbMapUtils.createMap(this.mapId, {\r\n            zoom: true,\r\n            scrollZoom: false,\r\n            providers: true\r\n        });\r\n\r\n        this.map.whenReady(() => {\r\n            this.mapReady.set(true);\r\n            if (this.config.dynamic) {\r\n                this.attachUserListeners()\r\n            }\r\n        });\r\n    }\r\n\r\n    // Loads data only after:\r\n    // - the Leaflet map is ready\r\n    // - Angular has emitted query params (may be empty)\r\n    // - Angular has emitted route params (may be empty)\r\n    private tryLoad(): void {\r\n        if (!this.mapReady() || !this.hasQueryParams || !this.hasUrlParams) {\r\n            return;\r\n        }\r\n        const params: Params = { ...this.queryParams };\r\n        this.hasBox = params['bbox'] ? true : false;\r\n        if (this.urlParams.has('taxonId')) {\r\n            params['taxonId'] = this.urlParams.get('taxonId');\r\n        }\r\n        this.loadFeature(params);\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.subscriptions.add(\r\n            this.activatedRoute.queryParams.subscribe(q => {\r\n                this.queryParams = q ?? {};\r\n                this.hasQueryParams = true;\r\n                this.tryLoad();\r\n            })\r\n        );\r\n        this.subscriptions.add(\r\n            this.activatedRoute.paramMap.subscribe(p => {\r\n                this.urlParams = p;\r\n                this.hasUrlParams = true;\r\n                this.tryLoad();\r\n            })\r\n        );\r\n    }\r\n\r\n    private attachUserListeners() {\r\n        const container = this.map.getContainer();\r\n        const zoomIn = container.querySelector('.leaflet-control-zoom-in');\r\n        const zoomOut = container.querySelector('.leaflet-control-zoom-out');\r\n        zoomIn?.addEventListener('click', () => { this.onUserInputRoute() });\r\n        zoomOut?.addEventListener('click', () => { this.onUserInputRoute() });\r\n        this.map.on('dragend', () => {\r\n            this.onUserInputRoute();\r\n        });\r\n    }\r\n\r\n    private onUserInputRoute() {\r\n        const bounds = this.map.getBounds();\r\n        const bbox = this.getMapBoundsToBbox(bounds).join(',');\r\n\r\n        this.router.navigate([], {\r\n            relativeTo: this.activatedRoute,\r\n            queryParams: { bbox },\r\n            queryParamsHandling: 'merge'\r\n        });\r\n    }\r\n\r\n\r\n    private loadFeature(qParams: Params): void {\r\n        if (this.siteLayer) {\r\n            this.map.removeLayer(this.siteLayer);\r\n            this.siteLayer = undefined;\r\n        }\r\n        this.mapLoading.set(true);\r\n        this.error = null;\r\n        const url = this.config.observationFeatures;\r\n        this.subscriptions.add(this.http.get<GeoJson>(url, { observe: 'response', params: qParams }).\r\n            pipe(\r\n                finalize(() => {\r\n                    this.mapLoading.set(false);\r\n                })\r\n            ).\r\n            subscribe({\r\n                next: (response: HttpResponse<GeoJson>) => {\r\n                    if (!response.body) {\r\n                        throw new Error('No GeoJson body');\r\n                    }\r\n                    const geo = response.body;\r\n                    geo.properties = { count: response.headers.get('X-Observations-TotalCount') };\r\n                    this.buildMap(geo);\r\n                }, error: err => {\r\n                    this.error = err;\r\n                }\r\n            }));\r\n    }\r\n\r\n    private buildMap(geojson: GeoJson): void {\r\n        if (this.siteLayer) {\r\n            this.map.removeLayer(this.siteLayer);\r\n        }\r\n        this.count = geojson?.properties?.count;\r\n        this.siteLayer = Leaflet.geoJson(geojson, {\r\n            style: (feature) => this.getPolygonStyle(feature.properties),\r\n            pointToLayer: (feature, latlng) => this.createPointLayer(feature, latlng),\r\n            onEachFeature: (feature, layer) => {\r\n                if (feature.geometry.type === \"Polygon\" ||\r\n                    feature.geometry.type === \"MultiPolygon\") {\r\n                    if (feature.properties.ObservationsCount > 0) {\r\n                        if (this.config.dynamic) {\r\n                            layer.on('click', () => {\r\n                                const boundBox = JSON.stringify(this.getMapBoundsToBbox(layer.getBounds()));\r\n                                this.router.navigate([], { queryParams: { bbox: boundBox }, queryParamsHandling: 'merge' });\r\n                            });\r\n                            layer.on('mouseover', () => {\r\n                                layer.setStyle({ className: 'svg cursor-pointer' });\r\n                            });\r\n                            layer.on('mouseout', () => {\r\n                                layer.setStyle({ className: 'svg' });\r\n                            });\r\n                        }\r\n                    }\r\n                    if (!this.config.dynamic) {\r\n                        layer.setStyle({ interactive: false });\r\n                    } else if (feature.properties.FeatureType) { //area\r\n                        layer.setStyle({ interactive: false });\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        const circleLayer = Leaflet.featureGroup();\r\n        circleLayer.addTo(this.siteLayer);\r\n        this.map.addLayer(this.siteLayer);\r\n        if (geojson.bbox) {\r\n            const [minLon, minLat, maxLon, maxLat] = geojson.bbox;\r\n            const bounds = Leaflet.latLngBounds([[minLat, minLon], [maxLat, maxLon]]);\r\n            if (bounds.isValid()) {\r\n                // Safari sometimes needs extra time after layer adds\r\n                setTimeout(() => {\r\n                    this.map.invalidateSize({ animate: false });\r\n                    this.map.fitBounds(bounds, { animate: false });\r\n                }, 50); // 30–50ms works best in Safari\r\n            }\r\n        }\r\n    }\r\n\r\n    private getMapBoundsToBbox(bounds: Leaflet.LatLngBounds): number[] {\r\n        return [\r\n            bounds.getWest(),\r\n            bounds.getSouth(),\r\n            bounds.getEast(),\r\n            bounds.getNorth()\r\n        ];\r\n    }\r\n\r\n    private createPointLayer(feature: any, latlng: Leaflet.LatLng): Leaflet.Layer {\r\n        const isLocation = this.queryParams['format'] === 'locations';\r\n        const showUncertainty = this.queryParams['uncertainty'] === 'true';\r\n        const marker = Leaflet.circleMarker(latlng, {\r\n            radius: 6,\r\n            fillColor: isLocation ? AdbObsMapComponent.LOCATION_MARKER_COLOR : AdbObsMapComponent.OBS_MARKER_COLOR,\r\n            fillOpacity: 1,\r\n            color: '#ffffff',\r\n            weight: 2,\r\n            interactive: this.config.dynamic\r\n        });\r\n        if (feature.properties) {\r\n            const occurrenceId = feature.properties?.occurrence?.occurrenceId;\r\n            const locationId = feature.properties?.location?.locationId;\r\n            if (occurrenceId || locationId) {\r\n                marker.on('click', () => {\r\n                    if (isLocation) {\r\n                        window.location.href = `${this.config.locationPage}/${locationId}`;\r\n                    } else {\r\n                        window.location.href = `${this.config.observationPage}/${occurrenceId}`;\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        const layers: Leaflet.Layer[] = [marker];\r\n        if (showUncertainty) {\r\n            const uncertainty = feature.properties?.location?.coordinateUncertaintyInMeters;\r\n            if (typeof uncertainty === 'number' && uncertainty > 0) {\r\n                layers.push(\r\n                    Leaflet.circle(latlng, {\r\n                        radius: uncertainty,\r\n                        fill: false,\r\n                        color: AdbObsMapComponent.UNCERTAINTY_COLOR,\r\n                        weight: 1,\r\n                        opacity: 0.9,\r\n                        interactive: false\r\n                    })\r\n                );\r\n            }\r\n        }\r\n        return Leaflet.layerGroup(layers);\r\n    }\r\n\r\n    private getPolygonStyle(props: any): Leaflet.PathOptions {\r\n        if (props.location) {\r\n            return {\r\n                weight: 2,\r\n                color: '#005e67',\r\n                fill: false\r\n            };\r\n        } else if (props.FeatureId) {\r\n            // featurearea\r\n            return {\r\n                weight: 2,\r\n                fill: true,\r\n                fillOpacity: 0.1,\r\n                color: '#005e67',\r\n                fillColor: '#007681'\r\n            };\r\n\r\n        } else {\r\n            //its heatmaps\r\n            const base = {\r\n                weight: 1,\r\n                fill: true,\r\n                fillOpacity: 0.8\r\n            };\r\n            if (props.FeatureType) {\r\n                return { ...base, color: '#249ca3', fillColor: '#2FB3BB' };\r\n            }\r\n            if (props.ObservationsCount < 10) {\r\n                return { ...base, color: '#249ca3', fillColor: '#2FB3BB' };\r\n            }\r\n            if (props.ObservationsCount < 500) {\r\n                return { ...base, color: '#005e67', fillColor: '#007681' };\r\n            }\r\n            return { ...base, color: '#00393D', fillColor: '#00393D' };\r\n        }\r\n\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.subscriptions.unsubscribe();\r\n    }\r\n}","@if(hasBox&&!mapLoading()){\r\n<div class=\"mb-1 d-flex justify-content-between flex-wrap\">\r\n  <a [routerLink]=\"[]\" [queryParams]=\"{bbox:null,z:null}\" queryParamsHandling=\"merge\" class=\"d-flex gap-1 align-items-baseline\">\r\n    <span class=\"fas fa-chevron-left\"></span>\r\n    Tillbaka upp\r\n  </a>\r\n</div>\r\n}\r\n@if(error){\r\n<div class=\"alert alert-danger\">\r\n  {{'ERROR.SERVER_ERROR'|translate}}\r\n</div>\r\n}\r\n<div [class.loading]=\"mapLoading()\">\r\n  <div [id]=\"mapId\" class=\"mb-1 map-container\"></div>\r\n</div>\r\n<div class=\"mb-1 d-flex gap-3 justify-content-between flex-wrap\">\r\n  @if (!mapLoading()&&count) {\r\n  <div class=\"d-flex align-items-center gap-1\">\r\n    <div class=\"legend map-heat-low\"></div>\r\n    &lt;10\r\n  </div>\r\n  <div class=\"d-flex align-items-center gap-1\">\r\n    <div class=\"legend map-heat-medium\"></div>\r\n    10 - 500\r\n  </div>\r\n  <div class=\"d-flex align-items-center gap-1\">\r\n    <div class=\"legend map-heat-high\"></div>\r\n    &gt;500\r\n  </div>\r\n  <div class=\"ms-auto\">\r\n    {{count|adbSpacing}} {{'OBSERVATION.OBSERVATIONS'|translate}}\r\n  </div>\r\n  }\r\n</div>","export const DateTypes = {\r\n  THIS_YEAR: '1',\r\n  LAST_YEAR: '2',\r\n  ALL_YEAR: '3',\r\n  LAST_5_YEAR: '4',\r\n  LAST_25_YEAR: '5',\r\n  CUSTOM: '6',\r\n}","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { FormArray, FormControl, FormGroup, Validators } from \"@angular/forms\";\r\nimport { ActivatedRoute, ParamMap, Params, Router } from \"@angular/router\";\r\nimport { addYears, endOfDay, endOfYear, parseISO, startOfDay, startOfYear } from \"date-fns\";\r\nimport { combineLatest, debounceTime, map, Subscription } from \"rxjs\";\r\nimport { AdbMapConfigService, VisibleFilters } from \"../config\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { GeoJsonFeature } from \"../models\";\r\nimport { DateTypes } from \"../constants\";\r\n\r\n@Component({\r\n    selector: 'adb-map-filters',\r\n    templateUrl: 'map-filter.html',\r\n    standalone: false\r\n})\r\nexport class AdbMapFilters implements OnInit, OnDestroy {\r\n    @Input() inline = false;\r\n    static datasets = ['1', '3', '5', '6', '4', '8'];\r\n    \r\n    subscriptions = new Subscription();\r\n    form: FormGroup;\r\n    thisYear = new Date();\r\n    lastYear = addYears(new Date(), -1);\r\n    queryParamsMap: ParamMap;\r\n    hasOwnArea: boolean;\r\n    geo: GeoJsonFeature;\r\n    area: { areaType: string; featureId: string; };\r\n    areasArray: FormArray<any>;\r\n    dataSetCount: number;\r\n    taxonListCount: number;\r\n    riskListCount: number;\r\n    redListCount: number;\r\n    areaCount: number;\r\n    periodCount: number;\r\n    listsError: any;\r\n    filters: VisibleFilters;\r\n    taxaLists: any[];\r\n    hasTaxonInUrlParameter: any;\r\n    dsControls: any;\r\n    dateStartConfig: { maxDate: Date; };\r\n    dateEndConfig: { minDate: Date; maxDate: Date; };\r\n    artfakta: string;\r\n\r\n    constructor(\r\n        private cdr: ChangeDetectorRef,\r\n        private config: AdbMapConfigService,\r\n        private http: HttpClient,\r\n        private router: Router,\r\n        private activatedRoute: ActivatedRoute) {\r\n        this.filters = config.filters;\r\n        this.artfakta = this.config.artfaktaTaxonLists;\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        const lists$ = this.http.get<any[]>(this.config.taxaListsApi, { params: { limit: -1 } });\r\n        const combined$ = combineLatest([this.activatedRoute.paramMap, this.activatedRoute.queryParamMap, lists$])\r\n            .pipe(map(results => ({ params: results[0], qParams: results[1], lists: results[2] })), debounceTime(0));\r\n        this.subscriptions.add(combined$.subscribe(result => {\r\n            this.form = this.createForm(result.params, result.qParams, result.lists);\r\n            this.cdr.markForCheck();\r\n        }));\r\n    }\r\n\r\n    removeArea(index: number): void {\r\n        (this.form.get('areas') as FormArray).removeAt(index);\r\n        this.form.markAsDirty();\r\n    }\r\n\r\n    addArea(): void {\r\n        const areas = this.form.get('areas') as FormArray;\r\n        areas.push(new FormControl(null));\r\n        this.form.updateValueAndValidity();\r\n        this.form.markAsDirty();\r\n    }\r\n\r\n    onSubmit(): void {\r\n        const data = this.form.value;\r\n        let params = {} as any;\r\n        params.p = data.period ?? null;\r\n        if (data.period === DateTypes.THIS_YEAR) {\r\n            params.startAt = startOfYear(this.thisYear).toISOString();\r\n            params.endAt = null;\r\n        } else if (data.period === DateTypes.LAST_YEAR) {\r\n            params.startAt = startOfYear(this.lastYear).toISOString();\r\n            params.endAt = endOfYear(this.lastYear).toISOString();\r\n        } else if (data.period === DateTypes.ALL_YEAR) {\r\n            params.startAt = null;\r\n            params.endAt = null;\r\n            params.p = null;\r\n        } else if (data.period === DateTypes.LAST_5_YEAR) {\r\n            params.startAt = startOfYear(addYears(new Date(), -5)).toISOString();\r\n            params.endAt = null;\r\n        } else if (data.period === DateTypes.LAST_25_YEAR) {\r\n            params.startAt = startOfYear(addYears(new Date(), -25)).toISOString();\r\n            params.endAt = null;\r\n        } else if (data.period === DateTypes.CUSTOM) {\r\n            params.startAt = startOfDay(data.startAt).toISOString();\r\n            params.endAt = endOfDay(data.endAt).toISOString();\r\n        }\r\n        if (this.hasOwnArea && data.geo) {\r\n            params.geo = JSON.stringify(data.geo.geometry?.coordinates[0]);\r\n        }\r\n        const cleaned = data.areas?.filter(v => v != null && v !== '');\r\n        if (cleaned.length > 0) {\r\n            params.area = cleaned;\r\n        }\r\n        if (this.activatedRoute.snapshot.paramMap.has('taxonId')) {\r\n            params.taxonId = this.activatedRoute.snapshot.paramMap.get('taxonId')\r\n        } else {\r\n            params.taxonId = data.taxonId ?? null;\r\n        }\r\n        if (data.list?.length > 0) {\r\n            params.list = data.list;\r\n        }\r\n        if (data.ds?.length > 0) {\r\n            const selected = data.ds.filter(f => f.selected).map(m => m.id);\r\n            params.ds = selected.length ? selected : null;\r\n        }\r\n        this.router.navigate([], { queryParams: params, relativeTo: this.activatedRoute })\r\n    }\r\n\r\n    private createForm(params: Params, qMap: ParamMap, lists: any[]): FormGroup {\r\n        this.hasTaxonInUrlParameter = params['taxonId'];\r\n        this.hasOwnArea = qMap.has('geo') && this.filters.showOwnArea;\r\n        const areas = qMap.getAll('area').filter(a => a != null && a.trim() !== '' && a.includes('-'));\r\n        const form: FormGroup = new FormGroup({\r\n            period: new FormControl(qMap.has('p') ? qMap.get('p') : '3'),\r\n            areas: new FormArray(\r\n                (Array.isArray(areas) && areas.length ? areas : [null]).map(a => new FormControl(a))\r\n            ),\r\n            geo: new FormControl(qMap.has('geo') ? {\r\n                type: 'Feature',\r\n                geometry: { type: 'Polygon', coordinates: [JSON.parse(qMap.get('geo'))] }\r\n            } : null)\r\n        });\r\n        this.areasArray = form.get('areas') as FormArray;\r\n        this.periodCount = qMap.has('p') && qMap.get('p') !== '3' ? 1 : 0;\r\n        this.areaCount = areas?.length;\r\n        if (!this.hasTaxonInUrlParameter) {\r\n            form.addControl('taxonId', new FormControl(qMap.get('taxonId') ?? null));\r\n            const selectedTaxonList = qMap.has('list') ? qMap.getAll('list').map(val => Number(val)).filter(val => !isNaN(val)) : null;\r\n            this.taxaLists = lists;\r\n            this.taxonListCount = selectedTaxonList?.length;\r\n            form.addControl('list', new FormControl(selectedTaxonList))\r\n            let datasets = qMap.has('ds') ? (Array.isArray(qMap.getAll('ds')) ? qMap.getAll('ds') : [qMap.get('ds')]) : null;\r\n            this.dataSetCount = datasets?.length;\r\n            form.addControl('ds', new FormArray(\r\n                AdbMapFilters.datasets.map(id => new FormGroup({\r\n                    id: new FormControl(id),\r\n                    selected: new FormControl(datasets?.includes(id))\r\n                }))\r\n            ));\r\n            this.dsControls = (form.get('ds') as FormArray).controls;\r\n        }\r\n        this.updateCustomDate(form, qMap.get('p'), qMap);\r\n        this.subscriptions.add(form.get('period').valueChanges.subscribe(period => {\r\n            this.updateCustomDate(form, period, qMap);\r\n        }));\r\n        return form;\r\n    }\r\n\r\n    private updateCustomDate(form: FormGroup, period: string, qMap: ParamMap): void {\r\n        if (form.contains('startAt')) {\r\n            form.removeControl('startAt');\r\n        }\r\n        if (form.contains('endAt')) {\r\n            form.removeControl('endAt');\r\n        }\r\n        if (period === DateTypes.CUSTOM) {\r\n            let start = qMap.has('startAt') ? parseISO(qMap.get('startAt')) : null;\r\n            let end = qMap.has('endAt') ? parseISO(qMap.get('endAt')) : null;\r\n            if (qMap.get('p') !== DateTypes.CUSTOM) {\r\n                start = new Date();\r\n                end = new Date();\r\n            }\r\n            this.dateStartConfig = { maxDate: end ?? new Date() };\r\n            this.dateEndConfig = { minDate: start ?? null, maxDate: new Date() };\r\n            const startControl = new FormControl(start, Validators.required);\r\n            const endControl = new FormControl(end, Validators.required);\r\n            form.addControl('startAt', startControl);\r\n            form.addControl('endAt', endControl);\r\n            this.subscriptions.add(\r\n                startControl.valueChanges.subscribe(startAt => {\r\n                    this.dateEndConfig = { minDate: startAt ?? null, maxDate: new Date() };\r\n                })\r\n            );\r\n            this.subscriptions.add(\r\n                endControl.valueChanges.subscribe(endAt => {\r\n                    this.dateStartConfig = { maxDate: endAt ?? new Date() };\r\n                })\r\n            );\r\n        }\r\n    }\r\n\r\n\r\n    ngOnDestroy(): void {\r\n        this.subscriptions.unsubscribe();\r\n    }\r\n}","@if(form){\r\n<form [formGroup]=\"form\" class=\"form mb-3\" (ngSubmit)=\"onSubmit()\">\r\n  <div class=\"mb-3\">\r\n    <adb-filter-section titleResource=\"TAXON.TAXA\" [expanded]=\"true\">\r\n      @if(filters.showTaxon&&!hasTaxonInUrlParameter){\r\n      <div class=\"mb-3\">\r\n        <label for=\"species\">{{'TAXON.TAXON'|translate}}</label>\r\n        <adb-taxon-picker formControlName=\"taxonId\" id=\"species\"></adb-taxon-picker>\r\n      </div>\r\n      }\r\n    </adb-filter-section>\r\n    @if(filters.showTime){\r\n    <adb-filter-section [count]=\"periodCount\" titleResource=\"OBSERVATION.PERIOD\">\r\n      <div class=\"mb-1\">\r\n        <select class=\"form-select\" formControlName=\"period\" id=\"period\">\r\n          <option value=\"1\">{{thisYear|date:'yyyy'}}</option>\r\n          <option value=\"2\">{{lastYear|date:'yyyy'}}</option>\r\n          <option value=\"3\">{{'OBSERVATION.ALL_YEAR'|translate}}</option>\r\n          <option value=\"4\">{{'OBSERVATION.LAST_5_YEAR'|translate}}</option>\r\n          <option value=\"5\">{{'OBSERVATION.LAST_25_YEAR'|translate}}</option>\r\n          <option value=\"6\">{{'OBSERVATION.CUSTOMIZED'|translate}}</option>\r\n        </select>\r\n      </div>\r\n      @if (form.value?.period==='6') {\r\n      <div class=\"mb-2\">\r\n        <label for=\"startAt\">{{'FROM' |translate}}</label>\r\n        <input adbDatepicker type=\"text\" class=\"form-control datepicker\" id=\"startAt\" formControlName=\"startAt\" [settings]=\"dateStartConfig\">\r\n      </div>\r\n      <div class=\"mb-2\">\r\n        <label for=\"endAt\">{{'TO' |translate}}</label>\r\n        <input adbDatepicker type=\"text\" class=\"form-control datepicker\" id=\"endAt\" formControlName=\"endAt\" [settings]=\"dateEndConfig\">\r\n      </div>\r\n      }\r\n    </adb-filter-section>\r\n    }\r\n    @if(filters.showArea){\r\n    <adb-filter-section [count]=\"areaCount\" titleResource=\"GEOGRAPHY\" [lazy]=\"true\">\r\n      <ng-template>\r\n        @if(filters.showOwnArea){\r\n        <div role=\"tablist\" aria-label=\"{{'AREA'|translate}}\" class=\"d-flex gap-2 justify-content-end\">\r\n          <button class=\"btn btn-link p-0\" [class.text-dark]=\"!hasOwnArea\" (click)=\"hasOwnArea=false\" role=\"tab\" id=\"tab-select\" aria-selected=\"{{!hasOwnArea}}\" aria-controls=\"panel-select\">\r\n            {{'CHOOSE'|translate}}\r\n          </button>\r\n          <button class=\"btn btn-link p-0\" [class.text-dark]=\"hasOwnArea\" (click)=\"hasOwnArea=true\" role=\"tab\" id=\"tab-draw\" aria-selected=\"false\" aria-controls=\"panel-draw\">\r\n            {{'OWN_AREA'|translate}}\r\n          </button>\r\n        </div>\r\n        }\r\n        <div class=\"mb-2\">\r\n          @if(hasOwnArea&&filters.showOwnArea){\r\n          <div class=\"pt-1\" role=\"tabpanel\" id=\"area-draw\" aria-labelledby=\"tab-draw\">\r\n            <div>\r\n              <adb-polygon-drawer formControlName=\"geo\"></adb-polygon-drawer>\r\n            </div>\r\n          </div>\r\n          }@else{\r\n          <div role=\"tabpanel\" id=\"area-select\" aria-labelledby=\"tab-select\">\r\n            <div formArrayName=\"areas\">\r\n              <div class=\"d-flex align-items-end mb-1\">\r\n                <label>{{'AREAS'|translate}}</label>\r\n                <button class=\"ms-auto text-dark btn btn-sm btn-secondary\" attr.aria-label=\"{{'OBSERVATION.ADD_AREA'|translate}}\" title=\"{{'OBSERVATION.ADD_AREA'|translate}}\" type=\"button\" (click)=\"addArea()\">\r\n                  <span class=\"fas fa-plus\"></span>\r\n                </button>\r\n              </div>\r\n              @for (ctrl of areasArray.controls; track ctrl; let i = $index; let last = $last) {\r\n              <div class=\"d-flex mb-2\">\r\n                <adb-area-picker id=\"area-{{i}}\" [formControlName]=\"i\"></adb-area-picker>\r\n                @if(areasArray.length>1){\r\n                <button class=\"btn btn-secondary ms-1\" attr.aria-label=\"{{'DELETE'|translate}}\" title=\"{{'DELETE'|translate}}\" type=\"button\" (click)=\"removeArea(i)\">\r\n                  <span class=\"fas fa-trash\"></span>\r\n                </button>\r\n                }\r\n              </div>\r\n              }\r\n            </div>\r\n          </div>\r\n          }\r\n        </div>\r\n      </ng-template>\r\n    </adb-filter-section>\r\n    }\r\n    @if(form.get('taxonId')){\r\n    @if(filters.showTaxaLists){\r\n    <adb-filter-section [count]=\"taxonListCount\" titleResource=\"LISTS.NATURE_CONSERVATION_LISTS\">\r\n      <div class=\"mb-3\">\r\n        <app-treeview formControlName=\"list\" [nodes]=\"taxaLists\"></app-treeview>\r\n      </div>\r\n      {{'LISTS.READ_MORE'|translate}}\r\n      <a [href]=\"artfakta\">{{'LISTS.LIST_CONTENT'|translate}}</a>\r\n    </adb-filter-section>\r\n    }\r\n    @if(filters.showDatasets){\r\n    <adb-filter-section [count]=\"dataSetCount\" titleResource=\"DATASET.DATASETS\">\r\n      @if (form.get('ds')) {\r\n      <div formArrayName=\"ds\">\r\n        @for (item of dsControls; track item; let i = $index) {\r\n        <div [formGroupName]=\"i\" class=\"form-check\">\r\n          <input type=\"checkbox\" formControlName=\"selected\" [id]=\"'ds-' + item.value.id\" class=\"form-check-input\">\r\n          <label [for]=\"'ds-' + item.value.id\" class=\"form-check-label\">{{ 'PROVIDERS.'+item.value.id |translate }}</label>\r\n        </div>\r\n        }\r\n      </div>\r\n      }\r\n    </adb-filter-section>\r\n    }\r\n    }\r\n  </div>\r\n  <div class=\"d-flex justify-content-end gap-2\">\r\n    @if (inline) {\r\n    <a class=\"btn btn-secondary\" [routerLink]=\"[]\">\r\n      {{'CANCEL'|translate}}\r\n    </a>\r\n    }\r\n    <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid||form.pristine\">{{'FILTER'|translate}}</button>\r\n  </div>\r\n</form>\r\n}","import { CommonModule } from \"@angular/common\";\r\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { TranslateModule } from \"@ngx-translate/core\";\r\nimport { PolygonDrawerInput } from \"./components/polygon-drawer.component\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { ADB_MAP_CONFIG, AdbMapConfig, AdbMapConfigService } from \"./config\";\r\nimport { TreeviewComponent } from \"./components/treeview\";\r\nimport { AdbObsMapComponent } from \"./components/observations-map\";\r\nimport { AdbMapFilters } from \"./components/map-filter\";\r\nimport { AdbDatePickerModule } from 'adb-shared';\r\nimport { AdbPipesModule } from 'adb-shared';\r\nimport { AdbFilterSectionModule } from 'adb-shared';\r\nimport { AdbPickerModule } from 'adb-shared';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    RouterModule,\r\n    ReactiveFormsModule,\r\n    AdbDatePickerModule,\r\n    TranslateModule.forChild(),\r\n    AdbPipesModule,\r\n    AdbFilterSectionModule,\r\n    AdbPickerModule\r\n  ],\r\n  declarations: [\r\n    AdbObsMapComponent,\r\n    PolygonDrawerInput,\r\n    AdbMapFilters,\r\n    TreeviewComponent,\r\n    // Stats,\r\n    // AdbGeojsonPolygonDirective\r\n  ],\r\n  exports: [\r\n    AdbObsMapComponent,\r\n    PolygonDrawerInput,\r\n    AdbMapFilters,\r\n    // Stats,\r\n    // AdbGeojsonPolygonDirective\r\n  ],\r\n  providers: [\r\n    AdbMapConfigService\r\n  ]\r\n})\r\nexport class AdbMapModule {\r\n  static forRoot(config?: AdbMapConfig): ModuleWithProviders<AdbMapModule> {\r\n    return {\r\n      ngModule: AdbMapModule,\r\n      providers: [\r\n        {\r\n          provide: ADB_MAP_CONFIG,\r\n          useValue: config\r\n        }\r\n      ]\r\n    };\r\n  }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Leaflet","i1","i2.AdbMapConfigService","i4","i1.AdbMapConfigService","i2","i3","i6.PolygonDrawerInput","i7.TreeviewComponent","i8","i9"],"mappings":"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"}