@ndwnu/map 0.0.1-beta.3 → 0.0.1-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/fesm2022/ndwnu-map.mjs
CHANGED
|
@@ -420,17 +420,17 @@ class MapComponent {
|
|
|
420
420
|
this.onLoadMap();
|
|
421
421
|
this.resizeMap();
|
|
422
422
|
}
|
|
423
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
424
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.
|
|
423
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
424
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.9", type: MapComponent, isStandalone: true, selector: "ng-component", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true, isSignal: true }], ngImport: i0, template: '<div #mapContainer class="map"></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
425
425
|
}
|
|
426
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
426
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MapComponent, decorators: [{
|
|
427
427
|
type: Component,
|
|
428
428
|
args: [{
|
|
429
429
|
standalone: true,
|
|
430
430
|
template: '<div #mapContainer class="map"></div>',
|
|
431
431
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
432
432
|
}]
|
|
433
|
-
}] });
|
|
433
|
+
}], propDecorators: { mapContainer: [{ type: i0.ViewChild, args: ['mapContainer', { isSignal: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
|
|
434
434
|
|
|
435
435
|
/**
|
|
436
436
|
* Service for managing MapLibre map cursor interactions.
|
|
@@ -514,10 +514,10 @@ class MaplibreCursorService {
|
|
|
514
514
|
console.warn(`Cursor type '${cursor}' is not supported.`);
|
|
515
515
|
}
|
|
516
516
|
}
|
|
517
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
|
518
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.
|
|
517
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MaplibreCursorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
518
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MaplibreCursorService, providedIn: 'root' });
|
|
519
519
|
}
|
|
520
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
|
520
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MaplibreCursorService, decorators: [{
|
|
521
521
|
type: Injectable,
|
|
522
522
|
args: [{
|
|
523
523
|
providedIn: 'root',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ndwnu-map.mjs","sources":["../tmp-esm2022/lib/map/map-constants.js","../tmp-esm2022/lib/map/map-config.interface.js","../tmp-esm2022/lib/map/map-element.repository.js","../tmp-esm2022/lib/map/map-element.js","../tmp-esm2022/lib/map/map-layer.js","../tmp-esm2022/lib/map/map-source.js","../tmp-esm2022/lib/map/map.component.js","../tmp-esm2022/lib/map/maplibre-cursor.service.js","../tmp-esm2022/ndwnu-map.js"],"sourcesContent":["export const BOUNDS_NL = [\n [3.079667, 50.587611],\n [7.572028, 53.636667],\n];\nexport const BOUNDS_AMERSFOORT = [\n [5.34458238242172, 52.11623605695118],\n [5.446205917577942, 52.21132028216525],\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFwL3NyYy9saWIvbWFwL21hcC1jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE2QjtJQUNqRCxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7SUFDckIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO0NBQ3RCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBNkI7SUFDekQsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQztJQUNyQyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDO0NBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMbmdMYXRMaWtlIH0gZnJvbSAnbWFwbGlicmUtZ2wnO1xuXG5leHBvcnQgY29uc3QgQk9VTkRTX05MOiBbTG5nTGF0TGlrZSwgTG5nTGF0TGlrZV0gPSBbXG4gIFszLjA3OTY2NywgNTAuNTg3NjExXSxcbiAgWzcuNTcyMDI4LCA1My42MzY2NjddLFxuXTtcbmV4cG9ydCBjb25zdCBCT1VORFNfQU1FUlNGT09SVDogW0xuZ0xhdExpa2UsIExuZ0xhdExpa2VdID0gW1xuICBbNS4zNDQ1ODIzODI0MjE3MiwgNTIuMTE2MjM2MDU2OTUxMThdLFxuICBbNS40NDYyMDU5MTc1Nzc5NDIsIDUyLjIxMTMyMDI4MjE2NTI1XSxcbl07XG4iXX0=","export const DEFAULT_MAP_CONFIG = {\n center: [5.387827, 52.155172],\n zoom: 8,\n maxZoom: 18,\n minZoom: 6,\n interactive: true,\n dragRotate: false,\n doubleClickZoom: true,\n scrollZoom: true,\n boxZoom: true,\n dragPan: true,\n keyboard: true,\n touchZoomRotate: true,\n};\n// Common bounds that users can optionally use\nexport const COMMON_BOUNDS = {\n NETHERLANDS: [\n [3.079667, 50.587611],\n [7.572028, 53.636667],\n ],\n AMERSFOORT: [\n [5.34458238242172, 52.11623605695118],\n [5.446205917577942, 52.21132028216525],\n ],\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21hcC9zcmMvbGliL21hcC9tYXAtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0EsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXdDO0lBQ3JFLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7SUFDN0IsSUFBSSxFQUFFLENBQUM7SUFDUCxPQUFPLEVBQUUsRUFBRTtJQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1YsV0FBVyxFQUFFLElBQUk7SUFDakIsVUFBVSxFQUFFLEtBQUs7SUFDakIsZUFBZSxFQUFFLElBQUk7SUFDckIsVUFBVSxFQUFFLElBQUk7SUFDaEIsT0FBTyxFQUFFLElBQUk7SUFDYixPQUFPLEVBQUUsSUFBSTtJQUNiLFFBQVEsRUFBRSxJQUFJO0lBQ2QsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQztBQUVGLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDM0IsV0FBVyxFQUFFO1FBQ1gsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3JCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztLQUNGO0lBQ3JCLFVBQVUsRUFBRTtRQUNWLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUM7UUFDckMsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQztLQUNuQjtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMbmdMYXRCb3VuZHNMaWtlLCBMbmdMYXRMaWtlIH0gZnJvbSAnbWFwbGlicmUtZ2wnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcENvbmZpZyB7XG4gIC8qKiBJbml0aWFsIGNlbnRlciBwb3NpdGlvbiBvZiB0aGUgbWFwICovXG4gIGNlbnRlcj86IExuZ0xhdExpa2U7XG5cbiAgLyoqIEluaXRpYWwgem9vbSBsZXZlbCAqL1xuICB6b29tPzogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIHpvb20gbGV2ZWwgKi9cbiAgbWF4Wm9vbT86IG51bWJlcjtcblxuICAvKiogTWluaW11bSB6b29tIGxldmVsICovXG4gIG1pblpvb20/OiBudW1iZXI7XG5cbiAgLyoqIEluaXRpYWwgYm91bmRzIHRvIGZpdCB0aGUgbWFwIHRvICovXG4gIGJvdW5kcz86IExuZ0xhdEJvdW5kc0xpa2U7XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIGFsbCBtYXAgaW50ZXJhY3Rpb25zICovXG4gIGludGVyYWN0aXZlPzogYm9vbGVhbjtcblxuICAvKiogRW5hYmxlL2Rpc2FibGUgbWFwIHJvdGF0aW9uIHZpYSBkcmFnICovXG4gIGRyYWdSb3RhdGU/OiBib29sZWFuO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSBkb3VibGUtY2xpY2sgdG8gem9vbSAqL1xuICBkb3VibGVDbGlja1pvb20/OiBib29sZWFuO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSBzY3JvbGwgd2hlZWwgem9vbSAqL1xuICBzY3JvbGxab29tPzogYm9vbGVhbjtcblxuICAvKiogRW5hYmxlL2Rpc2FibGUgc2hpZnQrZHJhZyBib3ggem9vbSAqL1xuICBib3hab29tPzogYm9vbGVhbjtcblxuICAvKiogRW5hYmxlL2Rpc2FibGUgZHJhZyB0byBwYW4gKi9cbiAgZHJhZ1Bhbj86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIGtleWJvYXJkIG5hdmlnYXRpb24gKi9cbiAga2V5Ym9hcmQ/OiBib29sZWFuO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSB0b3VjaCB6b29tIGFuZCByb3RhdGlvbiBvbiBtb2JpbGUgKi9cbiAgdG91Y2hab29tUm90YXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQX0NPTkZJRzogUmVxdWlyZWQ8T21pdDxNYXBDb25maWcsICdib3VuZHMnPj4gPSB7XG4gIGNlbnRlcjogWzUuMzg3ODI3LCA1Mi4xNTUxNzJdLFxuICB6b29tOiA4LFxuICBtYXhab29tOiAxOCxcbiAgbWluWm9vbTogNixcbiAgaW50ZXJhY3RpdmU6IHRydWUsXG4gIGRyYWdSb3RhdGU6IGZhbHNlLFxuICBkb3VibGVDbGlja1pvb206IHRydWUsXG4gIHNjcm9sbFpvb206IHRydWUsXG4gIGJveFpvb206IHRydWUsXG4gIGRyYWdQYW46IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICB0b3VjaFpvb21Sb3RhdGU6IHRydWUsXG59O1xuXG4vLyBDb21tb24gYm91bmRzIHRoYXQgdXNlcnMgY2FuIG9wdGlvbmFsbHkgdXNlXG5leHBvcnQgY29uc3QgQ09NTU9OX0JPVU5EUyA9IHtcbiAgTkVUSEVSTEFORFM6IFtcbiAgICBbMy4wNzk2NjcsIDUwLjU4NzYxMV0sXG4gICAgWzcuNTcyMDI4LCA1My42MzY2NjddLFxuICBdIGFzIExuZ0xhdEJvdW5kc0xpa2UsXG4gIEFNRVJTRk9PUlQ6IFtcbiAgICBbNS4zNDQ1ODIzODI0MjE3MiwgNTIuMTE2MjM2MDU2OTUxMThdLFxuICAgIFs1LjQ0NjIwNTkxNzU3Nzk0MiwgNTIuMjExMzIwMjgyMTY1MjVdLFxuICBdIGFzIExuZ0xhdEJvdW5kc0xpa2UsXG59IGFzIGNvbnN0O1xuIl19","import { BehaviorSubject, map } from 'rxjs';\n/**\n * Repository for managing map elements.\n * Provides methods to add, remove, show, hide, and toggle map elements.\n * Also tracks element visibility state and provides observable streams for elements.\n *\n * @typeparam TElementType - The type of ID used for the map elements\n */\nexport class MapElementRepository {\n /** Subject that holds the current array of map elements */\n mapElementsSubject = new BehaviorSubject([]);\n // mapElements are not directly exposed to prevent circular reference errors when\n // they are used in a template. Because the mapElements$ observable contains MapLibre\n // GL JS map objects, which have circular references.\n /** Observable stream of all map elements */\n mapElements$ = this.mapElementsSubject.asObservable();\n /** Observable stream of only visible map elements */\n visibleMapElements$ = this.mapElements$.pipe(map((elements) => elements.filter((element) => element.isVisible)));\n /**\n * Gets the ids (TElementType) as an array of all map element\n * @returns Array of TElementType\n */\n mapElementIds$ = this.mapElements$.pipe(map((elements) => elements.map((element) => element.id)));\n /**\n * Gets the ids (TElementType) as an array of all visible map element\n * @returns Array of TElementType\n */\n visibleMapElementIds$ = this.visibleMapElements$.pipe(map((elements) => elements.map((element) => element.id)));\n /**\n * Gets the current array of all map elements\n * @returns Array of map elements\n */\n get mapElements() {\n return this.mapElementsSubject.getValue();\n }\n /**\n * Gets only the currently visible map elements\n * @returns Array of visible map elements\n */\n get visibleMapElements() {\n return this.mapElements.filter((element) => element.isVisible);\n }\n /**\n * Finds a map element by its ID\n *\n * @param elementId - The ID of the element to find\n * @returns The map element if found, undefined otherwise\n */\n getMapElementById(elementId) {\n return this.mapElements.find((element) => element.id === elementId);\n }\n /**\n * Checks if a map element is currently visible\n *\n * @param elementId - The ID of the element to check\n * @returns True if the element is visible, false otherwise\n */\n isMapElementVisible(elementId) {\n return this.visibleMapElements.some((element) => element.id === elementId);\n }\n /**\n * Adds a new map element to the repository and initializes it.\n * Sets the element's visibility based on its configuration.\n *\n * @param mapElement - The map element to add\n */\n addMapElement(mapElement) {\n const currentElements = this.mapElements;\n this.mapElementsSubject.next([...currentElements, mapElement]);\n mapElement.onInit();\n if (mapElement.alwaysVisible || this.isMapElementVisible(mapElement.id)) {\n this.showMapElement(mapElement.id);\n }\n else {\n this.hideMapElement(mapElement.id);\n }\n }\n /**\n * Removes a map element from the repository and destroys it.\n *\n * @param mapElement - The map element to remove\n */\n removeMapElement(mapElement) {\n const filteredElements = this.mapElements.filter((element) => element.id !== mapElement.id);\n this.mapElementsSubject.next(filteredElements);\n mapElement.onDestroy();\n }\n /**\n * Removes all map elements from the repository and destroys them.\n */\n removeAllMapElements() {\n this.mapElements.forEach((element) => {\n this.removeMapElement(element);\n });\n }\n /**\n * Sets the visibility of a map element by its ID and updates the subject with the new state.\n *\n * @param elementId - The ID of the element to update\n * @param visible - Whether the element should be visible or hidden\n */\n setMapElementVisibility(elementId, visible) {\n const element = this.getMapElementById(elementId);\n if (element) {\n element.setVisible(visible);\n const elements = this.mapElements.filter((el) => el.id !== elementId);\n this.mapElementsSubject.next([...elements, element]);\n }\n }\n /**\n * Shows a map element by its ID and updates the subject with the new state.\n *\n * @param elementId - The ID of the element to show\n */\n showMapElement(elementId) {\n this.setMapElementVisibility(elementId, true);\n }\n /**\n * Hides a map element by its ID and updates the subject with the new state.\n *\n * @param elementId - The ID of the element to hide\n */\n hideMapElement(elementId) {\n this.setMapElementVisibility(elementId, false);\n }\n /**\n * Toggles the visibility of a map element by its ID.\n * If the element is currently visible, it will be hidden, and vice versa.\n *\n * @param elementId - The ID of the element to toggle visibility\n */\n toggleMapElement(elementId) {\n if (this.visibleMapElements.some((element) => element.id === elementId)) {\n this.hideMapElement(elementId);\n }\n else {\n this.showMapElement(elementId);\n }\n }\n /**\n * Gets the ID of the layer that should come before the specified element's layers\n * in the map's layer stack. This is used for maintaining proper layer ordering.\n *\n * @param elementId - The ID of the element to find a \"before\" reference for\n * @returns The ID of the first layer of the next element in order, or undefined if none exists\n */\n getBeforeId(elementId) {\n const currentElement = this.getMapElementById(elementId);\n if (!currentElement) {\n return undefined;\n }\n const nextElement = this.mapElements\n .filter((item) => item.elementOrder > currentElement.elementOrder)\n .sort((a, b) => a.elementOrder - b.elementOrder)[0];\n const nextElementLayerIds = nextElement?.sources\n .flatMap((source) => source.layers)\n .filter((layer) => layer.initialized)\n .map((layer) => layer.id);\n return nextElement && nextElementLayerIds.length > 0 ? nextElementLayerIds[0] : undefined;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWVsZW1lbnQucmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFwL3NyYy9saWIvbWFwL21hcC1lbGVtZW50LnJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJNUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFnQixvQkFBb0I7SUFDeEMsMkRBQTJEO0lBQzFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUE2QixFQUFFLENBQUMsQ0FBQztJQUUxRixpRkFBaUY7SUFDakYscUZBQXFGO0lBQ3JGLHFEQUFxRDtJQUVyRCw0Q0FBNEM7SUFDM0IsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV2RSxxREFBcUQ7SUFDcEMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFFRjs7O09BR0c7SUFDSCxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxHOzs7T0FHRztJQUNILHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8s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LENBQUMsTUFBTSxDQUFDO2FBQ2xDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQzthQUNwQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QixPQUFPLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1hcEVsZW1lbnQgfSBmcm9tICcuL21hcC1lbGVtZW50JztcblxuLyoqXG4gKiBSZXBvc2l0b3J5IGZvciBtYW5hZ2luZyBtYXAgZWxlbWVudHMuXG4gKiBQcm92aWRlcyBtZXRob2RzIHRvIGFkZCwgcmVtb3ZlLCBzaG93LCBoaWRlLCBhbmQgdG9nZ2xlIG1hcCBlbGVtZW50cy5cbiAqIEFsc28gdHJhY2tzIGVsZW1lbnQgdmlzaWJpbGl0eSBzdGF0ZSBhbmQgcHJvdmlkZXMgb2JzZXJ2YWJsZSBzdHJlYW1zIGZvciBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZXBhcmFtIFRFbGVtZW50VHlwZSAtIFRoZSB0eXBlIG9mIElEIHVzZWQgZm9yIHRoZSBtYXAgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1hcEVsZW1lbnRSZXBvc2l0b3J5PFRFbGVtZW50VHlwZT4ge1xuICAvKiogU3ViamVjdCB0aGF0IGhvbGRzIHRoZSBjdXJyZW50IGFycmF5IG9mIG1hcCBlbGVtZW50cyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcEVsZW1lbnRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwRWxlbWVudDxURWxlbWVudFR5cGU+W10+KFtdKTtcblxuICAvLyBtYXBFbGVtZW50cyBhcmUgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gcHJldmVudCBjaXJjdWxhciByZWZlcmVuY2UgZXJyb3JzIHdoZW5cbiAgLy8gdGhleSBhcmUgdXNlZCBpbiBhIHRlbXBsYXRlLiBCZWNhdXNlIHRoZSBtYXBFbGVtZW50cyQgb2JzZXJ2YWJsZSBjb250YWlucyBNYXBMaWJyZVxuICAvLyBHTCBKUyBtYXAgb2JqZWN0cywgd2hpY2ggaGF2ZSBjaXJjdWxhciByZWZlcmVuY2VzLlxuXG4gIC8qKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBhbGwgbWFwIGVsZW1lbnRzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwRWxlbWVudHMkID0gdGhpcy5tYXBFbGVtZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIE9ic2VydmFibGUgc3RyZWFtIG9mIG9ubHkgdmlzaWJsZSBtYXAgZWxlbWVudHMgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB2aXNpYmxlTWFwRWxlbWVudHMkID0gdGhpcy5tYXBFbGVtZW50cyQucGlwZShcbiAgICBtYXAoKGVsZW1lbnRzKSA9PiBlbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQuaXNWaXNpYmxlKSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGlkcyAoVEVsZW1lbnRUeXBlKSBhcyBhbiBhcnJheSBvZiBhbGwgbWFwIGVsZW1lbnRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgVEVsZW1lbnRUeXBlXG4gICAqL1xuICBtYXBFbGVtZW50SWRzJCA9IHRoaXMubWFwRWxlbWVudHMkLnBpcGUobWFwKChlbGVtZW50cykgPT4gZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LmlkKSkpO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpZHMgKFRFbGVtZW50VHlwZSkgYXMgYW4gYXJyYXkgb2YgYWxsIHZpc2libGUgbWFwIGVsZW1lbnRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgVEVsZW1lbnRUeXBlXG4gICAqL1xuICB2aXNpYmxlTWFwRWxlbWVudElkcyQgPSB0aGlzLnZpc2libGVNYXBFbGVtZW50cyQucGlwZShcbiAgICBtYXAoKGVsZW1lbnRzKSA9PiBlbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQpKSxcbiAgKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBhcnJheSBvZiBhbGwgbWFwIGVsZW1lbnRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG1hcCBlbGVtZW50c1xuICAgKi9cbiAgZ2V0IG1hcEVsZW1lbnRzKCk6IE1hcEVsZW1lbnQ8VEVsZW1lbnRUeXBlPltdIHtcbiAgICByZXR1cm4gdGhpcy5tYXBFbGVtZW50c1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9ubHkgdGhlIGN1cnJlbnRseSB2aXNpYmxlIG1hcCBlbGVtZW50c1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2aXNpYmxlIG1hcCBlbGVtZW50c1xuICAgKi9cbiAgZ2V0IHZpc2libGVNYXBFbGVtZW50cygpOiBNYXBFbGVtZW50PFRFbGVtZW50VHlwZT5bXSB7XG4gICAgcmV0dXJuIHRoaXMubWFwRWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PiBlbGVtZW50LmlzVmlzaWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBtYXAgZWxlbWVudCBieSBpdHMgSURcbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRJZCAtIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBmaW5kXG4gICAqIEByZXR1cm5zIFRoZSBtYXAgZWxlbWVudCBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICAgKi9cbiAgZ2V0TWFwRWxlbWVudEJ5SWQoZWxlbWVudElkOiBURWxlbWVudFR5cGUpOiBNYXBFbGVtZW50PFRFbGVtZW50VHlwZT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1hcEVsZW1lbnRzLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGVsZW1lbnRJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgbWFwIGVsZW1lbnQgaXMgY3VycmVudGx5IHZpc2libGVcbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRJZCAtIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNNYXBFbGVtZW50VmlzaWJsZShlbGVtZW50SWQ6IFRFbGVtZW50VHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVNYXBFbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBlbGVtZW50LmlkID09PSBlbGVtZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgbWFwIGVsZW1lbnQgdG8gdGhlIHJlcG9zaXRvcnkgYW5kIGluaXRpYWxpemVzIGl0LlxuICAgKiBTZXRzIHRoZSBlbGVtZW50J3MgdmlzaWJpbGl0eSBiYXNlZCBvbiBpdHMgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIG1hcEVsZW1lbnQgLSBUaGUgbWFwIGVsZW1lbnQgdG8gYWRkXG4gICAqL1xuICBhZGRNYXBFbGVtZW50KG1hcEVsZW1lbnQ6IE1hcEVsZW1lbnQ8VEVsZW1lbnRUeXBlPikge1xuICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50cyA9IHRoaXMubWFwRWxlbWVudHM7XG4gICAgdGhpcy5tYXBFbGVtZW50c1N1YmplY3QubmV4dChbLi4uY3VycmVudEVsZW1lbnRzLCBtYXBFbGVtZW50XSk7XG4gICAgbWFwRWxlbWVudC5vbkluaXQoKTtcbiAgICBpZiAobWFwRWxlbWVudC5hbHdheXNWaXNpYmxlIHx8IHRoaXMuaXNNYXBFbGVtZW50VmlzaWJsZShtYXBFbGVtZW50LmlkKSkge1xuICAgICAgdGhpcy5zaG93TWFwRWxlbWVudChtYXBFbGVtZW50LmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWRlTWFwRWxlbWVudChtYXBFbGVtZW50LmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1hcCBlbGVtZW50IGZyb20gdGhlIHJlcG9zaXRvcnkgYW5kIGRlc3Ryb3lzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gbWFwRWxlbWVudCAtIFRoZSBtYXAgZWxlbWVudCB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZU1hcEVsZW1lbnQobWFwRWxlbWVudDogTWFwRWxlbWVudDxURWxlbWVudFR5cGU+KSB7XG4gICAgY29uc3QgZmlsdGVyZWRFbGVtZW50cyA9IHRoaXMubWFwRWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PiBlbGVtZW50LmlkICE9PSBtYXBFbGVtZW50LmlkKTtcbiAgICB0aGlzLm1hcEVsZW1lbnRzU3ViamVjdC5uZXh0KGZpbHRlcmVkRWxlbWVudHMpO1xuICAgIG1hcEVsZW1lbnQub25EZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgbWFwIGVsZW1lbnRzIGZyb20gdGhlIHJlcG9zaXRvcnkgYW5kIGRlc3Ryb3lzIHRoZW0uXG4gICAqL1xuICByZW1vdmVBbGxNYXBFbGVtZW50cygpIHtcbiAgICB0aGlzLm1hcEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlTWFwRWxlbWVudChlbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIGEgbWFwIGVsZW1lbnQgYnkgaXRzIElEIGFuZCB1cGRhdGVzIHRoZSBzdWJqZWN0IHdpdGggdGhlIG5ldyBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRJZCAtIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHZpc2libGUgLSBXaGV0aGVyIHRoZSBlbGVtZW50IHNob3VsZCBiZSB2aXNpYmxlIG9yIGhpZGRlblxuICAgKi9cbiAgcHJpdmF0ZSBzZXRNYXBFbGVtZW50VmlzaWJpbGl0eShlbGVtZW50SWQ6IFRFbGVtZW50VHlwZSwgdmlzaWJsZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldE1hcEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQuc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5tYXBFbGVtZW50cy5maWx0ZXIoKGVsKSA9PiBlbC5pZCAhPT0gZWxlbWVudElkKTtcbiAgICAgIHRoaXMubWFwRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLmVsZW1lbnRzLCBlbGVtZW50XSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbWFwIGVsZW1lbnQgYnkgaXRzIElEIGFuZCB1cGRhdGVzIHRoZSBzdWJqZWN0IHdpdGggdGhlIG5ldyBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRJZCAtIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBzaG93XG4gICAqL1xuICBzaG93TWFwRWxlbWVudChlbGVtZW50SWQ6IFRFbGVtZW50VHlwZSkge1xuICAgIHRoaXMuc2V0TWFwRWxlbWVudFZpc2liaWxpdHkoZWxlbWVudElkLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhIG1hcCBlbGVtZW50IGJ5IGl0cyBJRCBhbmQgdXBkYXRlcyB0aGUgc3ViamVjdCB3aXRoIHRoZSBuZXcgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50SWQgLSBUaGUgSUQgb2YgdGhlIGVsZW1lbnQgdG8gaGlkZVxuICAgKi9cbiAgaGlkZU1hcEVsZW1lbnQoZWxlbWVudElkOiBURWxlbWVudFR5cGUpIHtcbiAgICB0aGlzLnNldE1hcEVsZW1lbnRWaXNpYmlsaXR5KGVsZW1lbnRJZCwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBtYXAgZWxlbWVudCBieSBpdHMgSUQuXG4gICAqIElmIHRoZSBlbGVtZW50IGlzIGN1cnJlbnRseSB2aXNpYmxlLCBpdCB3aWxsIGJlIGhpZGRlbiwgYW5kIHZpY2UgdmVyc2EuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50SWQgLSBUaGUgSUQgb2YgdGhlIGVsZW1lbnQgdG8gdG9nZ2xlIHZpc2liaWxpdHlcbiAgICovXG4gIHRvZ2dsZU1hcEVsZW1lbnQoZWxlbWVudElkOiBURWxlbWVudFR5cGUpIHtcbiAgICBpZiAodGhpcy52aXNpYmxlTWFwRWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC5pZCA9PT0gZWxlbWVudElkKSkge1xuICAgICAgdGhpcy5oaWRlTWFwRWxlbWVudChlbGVtZW50SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dNYXBFbGVtZW50KGVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIElEIG9mIHRoZSBsYXllciB0aGF0IHNob3VsZCBjb21lIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnQncyBsYXllcnNcbiAgICogaW4gdGhlIG1hcCdzIGxheWVyIHN0YWNrLiBUaGlzIGlzIHVzZWQgZm9yIG1haW50YWluaW5nIHByb3BlciBsYXllciBvcmRlcmluZy5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnRJZCAtIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBmaW5kIGEgXCJiZWZvcmVcIiByZWZlcmVuY2UgZm9yXG4gICAqIEByZXR1cm5zIFRoZSBJRCBvZiB0aGUgZmlyc3QgbGF5ZXIgb2YgdGhlIG5leHQgZWxlbWVudCBpbiBvcmRlciwgb3IgdW5kZWZpbmVkIGlmIG5vbmUgZXhpc3RzXG4gICAqL1xuICBnZXRCZWZvcmVJZChlbGVtZW50SWQ6IFRFbGVtZW50VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0aGlzLmdldE1hcEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgaWYgKCFjdXJyZW50RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IHRoaXMubWFwRWxlbWVudHNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZWxlbWVudE9yZGVyID4gY3VycmVudEVsZW1lbnQuZWxlbWVudE9yZGVyKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZWxlbWVudE9yZGVyIC0gYi5lbGVtZW50T3JkZXIpWzBdO1xuXG4gICAgY29uc3QgbmV4dEVsZW1lbnRMYXllcklkcyA9IG5leHRFbGVtZW50Py5zb3VyY2VzXG4gICAgICAuZmxhdE1hcCgoc291cmNlKSA9PiBzb3VyY2UubGF5ZXJzKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmluaXRpYWxpemVkKVxuICAgICAgLm1hcCgobGF5ZXIpID0+IGxheWVyLmlkKTtcblxuICAgIHJldHVybiBuZXh0RWxlbWVudCAmJiBuZXh0RWxlbWVudExheWVySWRzLmxlbmd0aCA+IDAgPyBuZXh0RWxlbWVudExheWVySWRzWzBdIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=","import { Subject } from 'rxjs';\nexport class MapElement {\n config;\n id;\n elementOrder;\n sources = [];\n alwaysVisible = false;\n isVisible = false;\n unsubscribe = new Subject();\n constructor(config) {\n this.config = config;\n this.id = config.elementId;\n this.elementOrder = config.elementOrder;\n }\n onInit() {\n this.sources.forEach((source) => source.onInit());\n }\n onDestroy() {\n this.sources.forEach((source) => source.onDestroy());\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n setVisible(visible) {\n this.isVisible = visible;\n this.sources.forEach((source) => source.setVisible(visible));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21hcC9zcmMvbGliL21hcC9tYXAtZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBYy9CLE1BQU0sT0FBZ0IsVUFBVTtJQVNDO0lBUi9CLEVBQUUsQ0FBZTtJQUNqQixZQUFZLENBQVM7SUFDckIsT0FBTyxHQUE4QixFQUFFLENBQUM7SUFDeEMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRVIsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFNUMsWUFBK0IsTUFBc0M7UUFBdEMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0M7UUFDbkUsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFnQjtRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hcCB9IGZyb20gJ21hcGxpYnJlLWdsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTWFwRWxlbWVudFJlcG9zaXRvcnkgfSBmcm9tICcuL21hcC1lbGVtZW50LnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgTWFwU291cmNlIH0gZnJvbSAnLi9tYXAtc291cmNlJztcbmltcG9ydCB7IE1hcGxpYnJlQ3Vyc29yU2VydmljZSB9IGZyb20gJy4vbWFwbGlicmUtY3Vyc29yLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcEVsZW1lbnRDb25maWc8VEVsZW1lbnRUeXBlPiB7XG4gIG1hcDogTWFwO1xuICBtYXBFbGVtZW50UmVwb3NpdG9yeTogTWFwRWxlbWVudFJlcG9zaXRvcnk8VEVsZW1lbnRUeXBlPjtcbiAgbWFwbGlicmVDdXJzb3JTZXJ2aWNlOiBNYXBsaWJyZUN1cnNvclNlcnZpY2U7XG4gIGVsZW1lbnRJZDogVEVsZW1lbnRUeXBlO1xuICBlbGVtZW50T3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1hcEVsZW1lbnQ8VEVsZW1lbnRUeXBlPiB7XG4gIGlkOiBURWxlbWVudFR5cGU7XG4gIGVsZW1lbnRPcmRlcjogbnVtYmVyO1xuICBzb3VyY2VzOiBNYXBTb3VyY2U8VEVsZW1lbnRUeXBlPltdID0gW107XG4gIGFsd2F5c1Zpc2libGUgPSBmYWxzZTtcbiAgaXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnOiBNYXBFbGVtZW50Q29uZmlnPFRFbGVtZW50VHlwZT4pIHtcbiAgICB0aGlzLmlkID0gY29uZmlnLmVsZW1lbnRJZDtcbiAgICB0aGlzLmVsZW1lbnRPcmRlciA9IGNvbmZpZy5lbGVtZW50T3JkZXI7XG4gIH1cblxuICBvbkluaXQoKSB7XG4gICAgdGhpcy5zb3VyY2VzLmZvckVhY2goKHNvdXJjZSkgPT4gc291cmNlLm9uSW5pdCgpKTtcbiAgfVxuXG4gIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNvdXJjZXMuZm9yRWFjaCgoc291cmNlKSA9PiBzb3VyY2Uub25EZXN0cm95KCkpO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB2aXNpYmxlO1xuICAgIHRoaXMuc291cmNlcy5mb3JFYWNoKChzb3VyY2UpID0+IHNvdXJjZS5zZXRWaXNpYmxlKHZpc2libGUpKTtcbiAgfVxufVxuIl19","import { Subject } from 'rxjs';\nexport class MapLayer {\n config;\n sourceId;\n layerIdSuffix;\n initialized = false;\n unsubscribe = new Subject();\n constructor(config, sourceId, layerIdSuffix) {\n this.config = config;\n this.sourceId = sourceId;\n this.layerIdSuffix = layerIdSuffix;\n }\n get id() {\n const suffix = this.layerIdSuffix ? `-${this.layerIdSuffix}` : '';\n return `${this.sourceId}${suffix}`;\n }\n get styleLayer() {\n return this.config.map.getLayer(this.id);\n }\n onInit() {\n // Add the layer to the map, with the correct ordering (beforeId)\n const beforeId = this.config.mapElementRepository.getBeforeId(this.config.elementId);\n this.config.map.addLayer(this.getSpecification(), beforeId);\n // Keeping track of which layers have been added to the map to allow for beforeId determination\n this.#setupClickHandlers();\n this.initialized = true;\n }\n onDestroy() {\n this.initialized = false;\n this.#removeClickHandlers();\n this.config.map.removeLayer(this.id);\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n setVisible(visible) {\n this.config.map.setLayoutProperty(this.id, 'visibility', visible ? 'visible' : 'none');\n }\n #setupClickHandlers() {\n if (!this.onClick)\n return;\n this.config.map.on('click', this.id, (event) => {\n this.onClick?.(this.#getFeatures(event));\n });\n this.config.maplibreCursorService.setMouseCursor(this.config.map, this.id);\n }\n #removeClickHandlers() {\n if (!this.onClick)\n return;\n this.config.map.off('click', this.id, (event) => {\n this.onClick?.(this.#getFeatures(event));\n });\n }\n #getFeatures(event) {\n if (event.features && event.features.length > 0) {\n return this.#distinctFeatures(event.features);\n }\n return [];\n }\n /**\n * Filters an array of features to remove duplicates based on their properties.\n * Two features are considered duplicates if they have identical properties.\n * Particularly vector sources can yield duplicate features due to the way they\n * are rendered in tiles.\n *\n * @param features - Array of GeoJSON features to filter\n * @returns Array of unique features with no property duplicates\n * @private\n */\n #distinctFeatures(features) {\n const seen = new Set();\n const uniqueFeatures = [];\n features.forEach((feature) => {\n const propertiesString = JSON.stringify(feature.properties);\n if (!seen.has(propertiesString)) {\n seen.add(propertiesString);\n uniqueFeatures.push(feature);\n }\n });\n return uniqueFeatures;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tYXAvc3JjL2xpYi9tYXAvbWFwLWxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsTUFBTSxPQUFnQixRQUFRO0lBTVA7SUFDQTtJQUNBO0lBUHJCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFVixXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUU1QyxZQUNxQixNQUFzQyxFQUN0QyxRQUFnQixFQUNoQixhQUFzQjtRQUZ0QixXQUFNLEdBQU4sTUFBTSxDQUFnQztRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGtCQUFhLEdBQWIsYUFBYSxDQUFTO0lBQ3hDLENBQUM7SUFFSixJQUFJLEVBQUU7UUFDSixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xFLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU07UUFDSixpRUFBaUU7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUF3QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FB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eyBNYXBFbGVtZW50Q29uZmlnIH0gZnJvbSAnLi9tYXAtZWxlbWVudCc7XG5pbXBvcnQge1xuICBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICBMYXllclNwZWNpZmljYXRpb24sXG4gIE1hcEdlb0pTT05GZWF0dXJlLFxuICBNYXBNb3VzZUV2ZW50LFxufSBmcm9tICdtYXBsaWJyZS1nbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYXBMYXllcjxURWxlbWVudFR5cGU+IHtcbiAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWc6IE1hcEVsZW1lbnRDb25maWc8VEVsZW1lbnRUeXBlPixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc291cmNlSWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGF5ZXJJZFN1ZmZpeD86IHN0cmluZyxcbiAgKSB7fVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMubGF5ZXJJZFN1ZmZpeCA/IGAtJHt0aGlzLmxheWVySWRTdWZmaXh9YCA6ICcnO1xuICAgIHJldHVybiBgJHt0aGlzLnNvdXJjZUlkfSR7c3VmZml4fWA7XG4gIH1cblxuICBnZXQgc3R5bGVMYXllcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubWFwLmdldExheWVyKHRoaXMuaWQpO1xuICB9XG5cbiAgb25Jbml0KCkge1xuICAgIC8vIEFkZCB0aGUgbGF5ZXIgdG8gdGhlIG1hcCwgd2l0aCB0aGUgY29ycmVjdCBvcmRlcmluZyAoYmVmb3JlSWQpXG4gICAgY29uc3QgYmVmb3JlSWQgPSB0aGlzLmNvbmZpZy5tYXBFbGVtZW50UmVwb3NpdG9yeS5nZXRCZWZvcmVJZCh0aGlzLmNvbmZpZy5lbGVtZW50SWQpO1xuICAgIHRoaXMuY29uZmlnLm1hcC5hZGRMYXllcih0aGlzLmdldFNwZWNpZmljYXRpb24oKSBhcyBMYXllclNwZWNpZmljYXRpb24sIGJlZm9yZUlkKTtcblxuICAgIC8vIEtlZXBpbmcgdHJhY2sgb2Ygd2hpY2ggbGF5ZXJzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgbWFwIHRvIGFsbG93IGZvciBiZWZvcmVJZCBkZXRlcm1pbmF0aW9uXG4gICAgdGhpcy4jc2V0dXBDbGlja0hhbmRsZXJzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuI3JlbW92ZUNsaWNrSGFuZGxlcnMoKTtcblxuICAgIHRoaXMuY29uZmlnLm1hcC5yZW1vdmVMYXllcih0aGlzLmlkKTtcblxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuY29uZmlnLm1hcC5zZXRMYXlvdXRQcm9wZXJ0eSh0aGlzLmlkLCAndmlzaWJpbGl0eScsIHZpc2libGUgPyAndmlzaWJsZScgOiAnbm9uZScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2xpY2s/KGZlYXR1cmVzOiBGZWF0dXJlW10pOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTcGVjaWZpY2F0aW9uKCk6IFBhcnRpYWw8TGF5ZXJTcGVjaWZpY2F0aW9uPjtcbiAgZ2V0RmlsdGVyU3BlY2lmaWNhdGlvbj8oKTogRmlsdGVyU3BlY2lmaWNhdGlvbjtcblxuICAjc2V0dXBDbGlja0hhbmRsZXJzKCkge1xuICAgIGlmICghdGhpcy5vbkNsaWNrKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbmZpZy5tYXAub24oJ2NsaWNrJywgdGhpcy5pZCwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm9uQ2xpY2s/Lih0aGlzLiNnZXRGZWF0dXJlcyhldmVudCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWcubWFwbGlicmVDdXJzb3JTZXJ2aWNlLnNldE1vdXNlQ3Vyc29yKHRoaXMuY29uZmlnLm1hcCwgdGhpcy5pZCk7XG4gIH1cblxuICAjcmVtb3ZlQ2xpY2tIYW5kbGVycygpIHtcbiAgICBpZiAoIXRoaXMub25DbGljaykgcmV0dXJuO1xuXG4gICAgdGhpcy5jb25maWcubWFwLm9mZignY2xpY2snLCB0aGlzLmlkLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25DbGljaz8uKHRoaXMuI2dldEZlYXR1cmVzKGV2ZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICAjZ2V0RmVhdHVyZXMoZXZlbnQ6IENsaWNrRXZlbnQpOiBGZWF0dXJlW10ge1xuICAgIGlmIChldmVudC5mZWF0dXJlcyAmJiBldmVudC5mZWF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZGlzdGluY3RGZWF0dXJlcyhldmVudC5mZWF0dXJlcyk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFuIGFycmF5IG9mIGZlYXR1cmVzIHRvIHJlbW92ZSBkdXBsaWNhdGVzIGJhc2VkIG9uIHRoZWlyIHByb3BlcnRpZXMuXG4gICAqIFR3byBmZWF0dXJlcyBhcmUgY29uc2lkZXJlZCBkdXBsaWNhdGVzIGlmIHRoZXkgaGF2ZSBpZGVudGljYWwgcHJvcGVydGllcy5cbiAgICogUGFydGljdWxhcmx5IHZlY3RvciBzb3VyY2VzIGNhbiB5aWVsZCBkdXBsaWNhdGUgZmVhdHVyZXMgZHVlIHRvIHRoZSB3YXkgdGhleVxuICAgKiBhcmUgcmVuZGVyZWQgaW4gdGlsZXMuXG4gICAqXG4gICAqIEBwYXJhbSBmZWF0dXJlcyAtIEFycmF5IG9mIEdlb0pTT04gZmVhdHVyZXMgdG8gZmlsdGVyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlcyB3aXRoIG5vIHByb3BlcnR5IGR1cGxpY2F0ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gICNkaXN0aW5jdEZlYXR1cmVzKGZlYXR1cmVzOiBGZWF0dXJlW10pOiBGZWF0dXJlW10ge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgdW5pcXVlRmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xuXG4gICAgZmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGZlYXR1cmUucHJvcGVydGllcyk7XG4gICAgICBpZiAoIXNlZW4uaGFzKHByb3BlcnRpZXNTdHJpbmcpKSB7XG4gICAgICAgIHNlZW4uYWRkKHByb3BlcnRpZXNTdHJpbmcpO1xuICAgICAgICB1bmlxdWVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVuaXF1ZUZlYXR1cmVzO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENsaWNrRXZlbnQgPSBNYXBNb3VzZUV2ZW50ICYge1xuICBmZWF0dXJlcz86IE1hcEdlb0pTT05GZWF0dXJlW107XG59ICYgb2JqZWN0O1xuIl19","import { Subject, takeUntil } from 'rxjs';\nexport class MapSource {\n id;\n config;\n layers = [];\n unsubscribe = new Subject();\n #isInitialized = false;\n #featureCollection$;\n constructor(id, config) {\n this.id = id;\n this.config = config;\n }\n onInit() {\n if (!this.config.map.getSource(this.id)) {\n this.config.map.addSource(this.id, this.getSpecification());\n }\n this.layers.forEach((layer) => layer.onInit());\n this.isInitialized = true;\n }\n onDestroy() {\n this.isInitialized = false;\n this.layers.forEach((layer) => layer.onDestroy());\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n get featureCollection$() {\n return this.#featureCollection$;\n }\n set featureCollection$(value) {\n this.#featureCollection$ = value;\n this.#subscribeToFeatureCollection();\n }\n get isInitialized() {\n return this.#isInitialized;\n }\n set isInitialized(value) {\n this.#isInitialized = value;\n this.#subscribeToFeatureCollection();\n }\n setVisible(visible) {\n this.layers.forEach((layer) => layer.setVisible(visible));\n }\n #subscribeToFeatureCollection() {\n if (this.isInitialized && this.featureCollection$) {\n this.featureCollection$.pipe(takeUntil(this.unsubscribe)).subscribe({\n next: (featureCollection) => {\n const source = this.config.map.getSource(this.id);\n if (source && source.type === 'geojson') {\n source.setData(featureCollection);\n }\n else {\n // not needed because source is always specified as geojson with empty collection\n this.config.map.addSource(this.id, {\n type: 'geojson',\n data: featureCollection,\n });\n }\n },\n error: (error) => {\n console.error('Error updating feature collection', error);\n },\n });\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFwL3NyYy9saWIvbWFwL21hcC1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdEQsTUFBTSxPQUFnQixTQUFTO0lBU1g7SUFDRztJQVRyQixNQUFNLEdBQTZCLEVBQUUsQ0FBQztJQUU1QixXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUU1QyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLG1CQUFtQixDQUFpQztJQUVwRCxZQUNrQixFQUFVLEVBQ1AsTUFBc0M7UUFEekMsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNQLFdBQU0sR0FBTixNQUFNLENBQWdDO0lBQ3hELENBQUM7SUFFSixNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQXlCLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsS0FBZ0Q7UUFDckUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBSUQsNkJBQTZCO1FBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xFLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7b0JBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRWxELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3ZDLE1BQXdCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ3ZELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixpRkFBaUY7d0JBQ2pGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFOzRCQUNqQyxJQUFJLEVBQUUsU0FBUzs0QkFDZixJQUFJLEVBQUUsaUJBQWlCO3lCQUN4QixDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzVELENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmVhdHVyZUNvbGxlY3Rpb24gfSBmcm9tICdnZW9qc29uJztcbmltcG9ydCB7IEdlb0pTT05Tb3VyY2UsIFNvdXJjZVNwZWNpZmljYXRpb24gfSBmcm9tICdtYXBsaWJyZS1nbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hcExheWVyIH0gZnJvbSAnLi9tYXAtbGF5ZXInO1xuaW1wb3J0IHsgTWFwRWxlbWVudENvbmZpZyB9IGZyb20gJy4vbWFwLWVsZW1lbnQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWFwU291cmNlPFRFbGVtZW50VHlwZT4ge1xuICBsYXllcnM6IE1hcExheWVyPFRFbGVtZW50VHlwZT5bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCB1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgI2ZlYXR1cmVDb2xsZWN0aW9uJD86IE9ic2VydmFibGU8RmVhdHVyZUNvbGxlY3Rpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWc6IE1hcEVsZW1lbnRDb25maWc8VEVsZW1lbnRUeXBlPixcbiAgKSB7fVxuXG4gIG9uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLm1hcC5nZXRTb3VyY2UodGhpcy5pZCkpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1hcC5hZGRTb3VyY2UodGhpcy5pZCwgdGhpcy5nZXRTcGVjaWZpY2F0aW9uKCkgYXMgU291cmNlU3BlY2lmaWNhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IGxheWVyLm9uSW5pdCgpKTtcblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4gbGF5ZXIub25EZXN0cm95KCkpO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZ2V0IGZlYXR1cmVDb2xsZWN0aW9uJCgpOiBPYnNlcnZhYmxlPEZlYXR1cmVDb2xsZWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2ZlYXR1cmVDb2xsZWN0aW9uJDtcbiAgfVxuXG4gIHNldCBmZWF0dXJlQ29sbGVjdGlvbiQodmFsdWU6IE9ic2VydmFibGU8RmVhdHVyZUNvbGxlY3Rpb24+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jZmVhdHVyZUNvbGxlY3Rpb24kID0gdmFsdWU7XG4gICAgdGhpcy4jc3Vic2NyaWJlVG9GZWF0dXJlQ29sbGVjdGlvbigpO1xuICB9XG5cbiAgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2lzSW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzZXQgaXNJbml0aWFsaXplZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI2lzSW5pdGlhbGl6ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNzdWJzY3JpYmVUb0ZlYXR1cmVDb2xsZWN0aW9uKCk7XG4gIH1cblxuICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4gbGF5ZXIuc2V0VmlzaWJsZSh2aXNpYmxlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U3BlY2lmaWNhdGlvbigpOiBQYXJ0aWFsPFNvdXJjZVNwZWNpZmljYXRpb24+O1xuXG4gICNzdWJzY3JpYmVUb0ZlYXR1cmVDb2xsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5mZWF0dXJlQ29sbGVjdGlvbiQpIHtcbiAgICAgIHRoaXMuZmVhdHVyZUNvbGxlY3Rpb24kLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmVhdHVyZUNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbmZpZy5tYXAuZ2V0U291cmNlKHRoaXMuaWQpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZSAmJiBzb3VyY2UudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAgICAgICAoc291cmNlIGFzIEdlb0pTT05Tb3VyY2UpLnNldERhdGEoZmVhdHVyZUNvbGxlY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgbmVlZGVkIGJlY2F1c2Ugc291cmNlIGlzIGFsd2F5cyBzcGVjaWZpZWQgYXMgZ2VvanNvbiB3aXRoIGVtcHR5IGNvbGxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm1hcC5hZGRTb3VyY2UodGhpcy5pZCwge1xuICAgICAgICAgICAgICB0eXBlOiAnZ2VvanNvbicsXG4gICAgICAgICAgICAgIGRhdGE6IGZlYXR1cmVDb2xsZWN0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgZmVhdHVyZSBjb2xsZWN0aW9uJywgZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=","import { ChangeDetectionStrategy, Component, input, viewChild, } from '@angular/core';\nimport { Map } from 'maplibre-gl';\nimport { DEFAULT_MAP_CONFIG } from './map-config.interface';\nimport * as i0 from \"@angular/core\";\nexport class MapComponent {\n mapContainer = viewChild.required('mapContainer');\n config = input({}, ...(ngDevMode ? [{ debugName: \"config\" }] : []));\n map;\n ngAfterViewInit() {\n this.map = this.#createMap(this.mapContainer().nativeElement);\n this.map.once('load', () => this.#initiateMapLoading());\n }\n ngOnDestroy() {\n // Note: Using `this.map.once('remove', this.onRemoveMap())` does not work correctly because,\n // by the time the `onRemoveMap` event is triggered, it is no longer possible to interact with the map for cleanup.\n // To address this we call `onRemoveMap` explicitly before destroying the MapLibre instance. This\n // ensures that our map elements are cleaned up properly before the map is removed.\n this.onRemoveMap();\n this.map?.remove();\n }\n resizeMap() {\n this.map?.resize();\n }\n zoomToLevel(zoomLevel, options) {\n this.map?.zoomTo(zoomLevel, options);\n }\n #createMap(container) {\n const config = { ...DEFAULT_MAP_CONFIG, ...this.config() };\n const options = {\n container,\n style: {\n version: 8,\n sources: {},\n layers: [],\n },\n maxZoom: config.maxZoom,\n minZoom: config.minZoom,\n interactive: config.interactive,\n doubleClickZoom: config.doubleClickZoom,\n scrollZoom: config.scrollZoom,\n boxZoom: config.boxZoom,\n dragPan: config.dragPan,\n keyboard: config.keyboard,\n touchZoomRotate: config.touchZoomRotate,\n };\n const map = new Map(options);\n return map;\n }\n #initiateMapLoading() {\n this.onLoadMap();\n this.resizeMap();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: MapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.2.4\", type: MapComponent, isStandalone: true, selector: \"ng-component\", inputs: { config: { classPropertyName: \"config\", publicName: \"config\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"mapContainer\", first: true, predicate: [\"mapContainer\"], descendants: true, isSignal: true }], ngImport: i0, template: '<div #mapContainer class=\"map\"></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: MapComponent, decorators: [{\n type: Component,\n args: [{\n standalone: true,\n template: '<div #mapContainer class=\"map\"></div>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFwL3NyYy9saWIvbWFwL21hcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW9CLEdBQUcsRUFBYyxNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQWEsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFPdkUsTUFBTSxPQUFnQixZQUFZO0lBQ2hDLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGNBQWMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sR0FBRyxLQUFLLENBQXFCLEVBQUUsa0RBQUMsQ0FBQztJQUN2QyxHQUFHLENBQU87SUFFVixlQUFlO1FBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVztRQUNULDZGQUE2RjtRQUM3RixtSEFBbUg7UUFDbkgsaUdBQWlHO1FBQ2pHLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFpQixFQUFFLE9BQTBCO1FBQ3ZELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQXNCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBRTNELE1BQU0sT0FBTyxHQUFHO1lBQ2QsU0FBUztZQUNULEtBQUssRUFBRTtnQkFDTCxPQUFPLEVBQUUsQ0FBVTtnQkFDbkIsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLEVBQUU7YUFDWDtZQUNELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtZQUN2QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO1NBQzFCLENBQUM7UUFFaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBTUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQzt1R0E1RG1CLFlBQVk7MkZBQVosWUFBWSw2VUFIdEIsdUNBQXVDOzsyRkFHN0IsWUFBWTtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHVDQUF1QztvQkFDakQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGlvbk9wdGlvbnMsIE1hcCwgTWFwT3B0aW9ucyB9IGZyb20gJ21hcGxpYnJlLWdsJztcbmltcG9ydCB7IE1hcENvbmZpZywgREVGQVVMVF9NQVBfQ09ORklHIH0gZnJvbSAnLi9tYXAtY29uZmlnLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogJzxkaXYgI21hcENvbnRhaW5lciBjbGFzcz1cIm1hcFwiPjwvZGl2PicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBtYXBDb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ21hcENvbnRhaW5lcicpO1xuICBjb25maWcgPSBpbnB1dDxQYXJ0aWFsPE1hcENvbmZpZz4+KHt9KTtcbiAgbWFwITogTWFwO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm1hcCA9IHRoaXMuI2NyZWF0ZU1hcCh0aGlzLm1hcENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMubWFwLm9uY2UoJ2xvYWQnLCAoKSA9PiB0aGlzLiNpbml0aWF0ZU1hcExvYWRpbmcoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBOb3RlOiBVc2luZyBgdGhpcy5tYXAub25jZSgncmVtb3ZlJywgdGhpcy5vblJlbW92ZU1hcCgpKWAgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgYmVjYXVzZSxcbiAgICAvLyBieSB0aGUgdGltZSB0aGUgYG9uUmVtb3ZlTWFwYCBldmVudCBpcyB0cmlnZ2VyZWQsIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBtYXAgZm9yIGNsZWFudXAuXG4gICAgLy8gVG8gYWRkcmVzcyB0aGlzIHdlIGNhbGwgYG9uUmVtb3ZlTWFwYCBleHBsaWNpdGx5IGJlZm9yZSBkZXN0cm95aW5nIHRoZSBNYXBMaWJyZSBpbnN0YW5jZS4gVGhpc1xuICAgIC8vIGVuc3VyZXMgdGhhdCBvdXIgbWFwIGVsZW1lbnRzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5IGJlZm9yZSB0aGUgbWFwIGlzIHJlbW92ZWQuXG4gICAgdGhpcy5vblJlbW92ZU1hcCgpO1xuICAgIHRoaXMubWFwPy5yZW1vdmUoKTtcbiAgfVxuXG4gIHJlc2l6ZU1hcCgpIHtcbiAgICB0aGlzLm1hcD8ucmVzaXplKCk7XG4gIH1cblxuICB6b29tVG9MZXZlbCh6b29tTGV2ZWw6IG51bWJlciwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMpIHtcbiAgICB0aGlzLm1hcD8uem9vbVRvKHpvb21MZXZlbCwgb3B0aW9ucyk7XG4gIH1cblxuICAjY3JlYXRlTWFwKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiBNYXAge1xuICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uREVGQVVMVF9NQVBfQ09ORklHLCAuLi50aGlzLmNvbmZpZygpIH07XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgY29udGFpbmVyLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgdmVyc2lvbjogOCBhcyBjb25zdCxcbiAgICAgICAgc291cmNlczoge30sXG4gICAgICAgIGxheWVyczogW10sXG4gICAgICB9LFxuICAgICAgbWF4Wm9vbTogY29uZmlnLm1heFpvb20sXG4gICAgICBtaW5ab29tOiBjb25maWcubWluWm9vbSxcbiAgICAgIGludGVyYWN0aXZlOiBjb25maWcuaW50ZXJhY3RpdmUsXG4gICAgICBkb3VibGVDbGlja1pvb206IGNvbmZpZy5kb3VibGVDbGlja1pvb20sXG4gICAgICBzY3JvbGxab29tOiBjb25maWcuc2Nyb2xsWm9vbSxcbiAgICAgIGJveFpvb206IGNvbmZpZy5ib3hab29tLFxuICAgICAgZHJhZ1BhbjogY29uZmlnLmRyYWdQYW4sXG4gICAgICBrZXlib2FyZDogY29uZmlnLmtleWJvYXJkLFxuICAgICAgdG91Y2hab29tUm90YXRlOiBjb25maWcudG91Y2hab29tUm90YXRlLFxuICAgIH0gYXMgTWFwT3B0aW9ucztcblxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IG9uTG9hZE1hcCgpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25SZW1vdmVNYXAoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG9uSWRsZSgpOiB2b2lkO1xuXG4gICNpbml0aWF0ZU1hcExvYWRpbmcoKSB7XG4gICAgdGhpcy5vbkxvYWRNYXAoKTtcbiAgICB0aGlzLnJlc2l6ZU1hcCgpO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Service for managing MapLibre map cursor interactions.\n *\n * Maplibre has no automatic cursor handling for layers, so when you add a clickHandler\n * to a layer, the user can click on it, but the cursor will not change to a pointer.\n * This service provides methods to set the cursor to pointer when hovering over a layer,\n * and to enable crosshair mode which takes precedence over all other cursor types.\n */\nexport class MaplibreCursorService {\n /** Counter to track how many layers currently need a pointer cursor */\n #cursorPointerCount = 0;\n /** Flag indicating if crosshair mode is active */\n #crosshairMode = false;\n /**\n * Sets up mouse cursor handling for a map layer.\n * Changes cursor to pointer when mouse enters the layer and resets when leaving.\n *\n * @param map - The MapLibre map instance\n * @param layerId - ID of the layer to apply cursor behavior to\n */\n setMouseCursor(map, layerId) {\n const updateCursor = (cursor) => {\n if (!this.#crosshairMode)\n this.#setMouseCursor(map, cursor);\n };\n map.on('mouseenter', layerId, () => updateCursor('pointer'));\n map.on('mouseleave', layerId, () => updateCursor(''));\n }\n /**\n * Enables or disables crosshair cursor mode for the map.\n * When enabled, crosshair cursor will take precedence over all other cursor types.\n *\n * @param value - True to enable crosshair mode, false to disable\n * @param map - The MapLibre map instance to apply the cursor to\n */\n /**\n * Enables or disables crosshair cursor mode for the map.\n * When enabled, crosshair cursor will take precedence over all other cursor types.\n *\n * @param value - True to enable crosshair mode, false to disable\n * @param map - The MapLibre map instance to apply the cursor to\n */\n setCrosshairMode(value, map) {\n this.#crosshairMode = value;\n let cursorType = '';\n if (value) {\n cursorType = 'crosshair';\n }\n else if (this.#cursorPointerCount > 0) {\n cursorType = 'pointer';\n }\n map.getCanvas().style.cursor = cursorType;\n }\n /**\n * Internal method to handle mouse cursor state changes.\n * Manages the cursor pointer reference counter to ensure cursor displays correctly\n * when hovering over multiple interactive layers.\n *\n * @param map - The MapLibre map instance\n * @param cursor - Cursor type to set ('pointer' or '' to reset)\n * @private\n */\n #setMouseCursor(map, cursor) {\n if (this.#crosshairMode) {\n // Crosshair mode takes precedence, ignore other cursor settings\n map.getCanvas().style.cursor = 'crosshair';\n return;\n }\n if (cursor === 'pointer') {\n this.#cursorPointerCount++;\n map.getCanvas().style.cursor = cursor;\n }\n else if (cursor === '') {\n this.#cursorPointerCount--;\n if (this.#cursorPointerCount < 1) {\n map.getCanvas().style.cursor = '';\n }\n }\n else {\n console.warn(`Cursor type '${cursor}' is not supported.`);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: MaplibreCursorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: MaplibreCursorService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: MaplibreCursorService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwbGlicmUtY3Vyc29yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21hcC9zcmMvbGliL21hcC9tYXBsaWJyZS1jdXJzb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQzs7Ozs7OztHQU9HO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyx1RUFBdUU7SUFDdkUsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGtEQUFrRDtJQUNsRCxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRXZCOzs7Ozs7T0FNRztJQUNILGNBQWMsQ0FBQyxHQUFRLEVBQUUsT0FBZTtRQUN0QyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztnQkFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUM7UUFFRixHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSDs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFjLEVBQUUsR0FBUTtRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDekIsQ0FBQztRQUVELEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxlQUFlLENBQUMsR0FBUSxFQUFFLE1BQWM7UUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsZ0VBQWdFO1lBQ2hFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixNQUFNLHFCQUFxQixDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7dUdBNUVVLHFCQUFxQjsyR0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXAgfSBmcm9tICdtYXBsaWJyZS1nbCc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgTWFwTGlicmUgbWFwIGN1cnNvciBpbnRlcmFjdGlvbnMuXG4gKlxuICogTWFwbGlicmUgaGFzIG5vIGF1dG9tYXRpYyBjdXJzb3IgaGFuZGxpbmcgZm9yIGxheWVycywgc28gd2hlbiB5b3UgYWRkIGEgY2xpY2tIYW5kbGVyXG4gKiB0byBhIGxheWVyLCB0aGUgdXNlciBjYW4gY2xpY2sgb24gaXQsIGJ1dCB0aGUgY3Vyc29yIHdpbGwgbm90IGNoYW5nZSB0byBhIHBvaW50ZXIuXG4gKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBzZXQgdGhlIGN1cnNvciB0byBwb2ludGVyIHdoZW4gaG92ZXJpbmcgb3ZlciBhIGxheWVyLFxuICogYW5kIHRvIGVuYWJsZSBjcm9zc2hhaXIgbW9kZSB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYWxsIG90aGVyIGN1cnNvciB0eXBlcy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hcGxpYnJlQ3Vyc29yU2VydmljZSB7XG4gIC8qKiBDb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGxheWVycyBjdXJyZW50bHkgbmVlZCBhIHBvaW50ZXIgY3Vyc29yICovXG4gICNjdXJzb3JQb2ludGVyQ291bnQgPSAwO1xuICAvKiogRmxhZyBpbmRpY2F0aW5nIGlmIGNyb3NzaGFpciBtb2RlIGlzIGFjdGl2ZSAqL1xuICAjY3Jvc3NoYWlyTW9kZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHVwIG1vdXNlIGN1cnNvciBoYW5kbGluZyBmb3IgYSBtYXAgbGF5ZXIuXG4gICAqIENoYW5nZXMgY3Vyc29yIHRvIHBvaW50ZXIgd2hlbiBtb3VzZSBlbnRlcnMgdGhlIGxheWVyIGFuZCByZXNldHMgd2hlbiBsZWF2aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbWFwIC0gVGhlIE1hcExpYnJlIG1hcCBpbnN0YW5jZVxuICAgKiBAcGFyYW0gbGF5ZXJJZCAtIElEIG9mIHRoZSBsYXllciB0byBhcHBseSBjdXJzb3IgYmVoYXZpb3IgdG9cbiAgICovXG4gIHNldE1vdXNlQ3Vyc29yKG1hcDogTWFwLCBsYXllcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1cGRhdGVDdXJzb3IgPSAoY3Vyc29yOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghdGhpcy4jY3Jvc3NoYWlyTW9kZSkgdGhpcy4jc2V0TW91c2VDdXJzb3IobWFwLCBjdXJzb3IpO1xuICAgIH07XG5cbiAgICBtYXAub24oJ21vdXNlZW50ZXInLCBsYXllcklkLCAoKSA9PiB1cGRhdGVDdXJzb3IoJ3BvaW50ZXInKSk7XG4gICAgbWFwLm9uKCdtb3VzZWxlYXZlJywgbGF5ZXJJZCwgKCkgPT4gdXBkYXRlQ3Vyc29yKCcnKSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBjcm9zc2hhaXIgY3Vyc29yIG1vZGUgZm9yIHRoZSBtYXAuXG4gICAqIFdoZW4gZW5hYmxlZCwgY3Jvc3NoYWlyIGN1cnNvciB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIGFsbCBvdGhlciBjdXJzb3IgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRydWUgdG8gZW5hYmxlIGNyb3NzaGFpciBtb2RlLCBmYWxzZSB0byBkaXNhYmxlXG4gICAqIEBwYXJhbSBtYXAgLSBUaGUgTWFwTGlicmUgbWFwIGluc3RhbmNlIHRvIGFwcGx5IHRoZSBjdXJzb3IgdG9cbiAgICovXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGNyb3NzaGFpciBjdXJzb3IgbW9kZSBmb3IgdGhlIG1hcC5cbiAgICogV2hlbiBlbmFibGVkLCBjcm9zc2hhaXIgY3Vyc29yIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYWxsIG90aGVyIGN1cnNvciB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVHJ1ZSB0byBlbmFibGUgY3Jvc3NoYWlyIG1vZGUsIGZhbHNlIHRvIGRpc2FibGVcbiAgICogQHBhcmFtIG1hcCAtIFRoZSBNYXBMaWJyZSBtYXAgaW5zdGFuY2UgdG8gYXBwbHkgdGhlIGN1cnNvciB0b1xuICAgKi9cbiAgc2V0Q3Jvc3NoYWlyTW9kZSh2YWx1ZTogYm9vbGVhbiwgbWFwOiBNYXApIHtcbiAgICB0aGlzLiNjcm9zc2hhaXJNb2RlID0gdmFsdWU7XG5cbiAgICBsZXQgY3Vyc29yVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY3Vyc29yVHlwZSA9ICdjcm9zc2hhaXInO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jY3Vyc29yUG9pbnRlckNvdW50ID4gMCkge1xuICAgICAgY3Vyc29yVHlwZSA9ICdwb2ludGVyJztcbiAgICB9XG5cbiAgICBtYXAuZ2V0Q2FudmFzKCkuc3R5bGUuY3Vyc29yID0gY3Vyc29yVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gaGFuZGxlIG1vdXNlIGN1cnNvciBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBNYW5hZ2VzIHRoZSBjdXJzb3IgcG9pbnRlciByZWZlcmVuY2UgY291bnRlciB0byBlbnN1cmUgY3Vyc29yIGRpc3BsYXlzIGNvcnJlY3RseVxuICAgKiB3aGVuIGhvdmVyaW5nIG92ZXIgbXVsdGlwbGUgaW50ZXJhY3RpdmUgbGF5ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gbWFwIC0gVGhlIE1hcExpYnJlIG1hcCBpbnN0YW5jZVxuICAgKiBAcGFyYW0gY3Vyc29yIC0gQ3Vyc29yIHR5cGUgdG8gc2V0ICgncG9pbnRlcicgb3IgJycgdG8gcmVzZXQpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAjc2V0TW91c2VDdXJzb3IobWFwOiBNYXAsIGN1cnNvcjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuI2Nyb3NzaGFpck1vZGUpIHtcbiAgICAgIC8vIENyb3NzaGFpciBtb2RlIHRha2VzIHByZWNlZGVuY2UsIGlnbm9yZSBvdGhlciBjdXJzb3Igc2V0dGluZ3NcbiAgICAgIG1hcC5nZXRDYW52YXMoKS5zdHlsZS5jdXJzb3IgPSAnY3Jvc3NoYWlyJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyc29yID09PSAncG9pbnRlcicpIHtcbiAgICAgIHRoaXMuI2N1cnNvclBvaW50ZXJDb3VudCsrO1xuICAgICAgbWFwLmdldENhbnZhcygpLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgICB9IGVsc2UgaWYgKGN1cnNvciA9PT0gJycpIHtcbiAgICAgIHRoaXMuI2N1cnNvclBvaW50ZXJDb3VudC0tO1xuICAgICAgaWYgKHRoaXMuI2N1cnNvclBvaW50ZXJDb3VudCA8IDEpIHtcbiAgICAgICAgbWFwLmdldENhbnZhcygpLnN0eWxlLmN1cnNvciA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYEN1cnNvciB0eXBlICcke2N1cnNvcn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmR3bnUtbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9tYXAvc3JjL25kd251LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ndwnu-map.mjs","sources":["../../../../libs/map/src/lib/map/map-constants.ts","../../../../libs/map/src/lib/map/map-config.interface.ts","../../../../libs/map/src/lib/map/map-element.repository.ts","../../../../libs/map/src/lib/map/map-element.ts","../../../../libs/map/src/lib/map/map-layer.ts","../../../../libs/map/src/lib/map/map-source.ts","../../../../libs/map/src/lib/map/map.component.ts","../../../../libs/map/src/lib/map/maplibre-cursor.service.ts","../../../../libs/map/src/ndwnu-map.ts"],"sourcesContent":["import { LngLatLike } from 'maplibre-gl';\n\nexport const BOUNDS_NL: [LngLatLike, LngLatLike] = [\n [3.079667, 50.587611],\n [7.572028, 53.636667],\n];\nexport const BOUNDS_AMERSFOORT: [LngLatLike, LngLatLike] = [\n [5.34458238242172, 52.11623605695118],\n [5.446205917577942, 52.21132028216525],\n];\n","import { LngLatBoundsLike, LngLatLike } from 'maplibre-gl';\n\nexport interface MapConfig {\n /** Initial center position of the map */\n center?: LngLatLike;\n\n /** Initial zoom level */\n zoom?: number;\n\n /** Maximum zoom level */\n maxZoom?: number;\n\n /** Minimum zoom level */\n minZoom?: number;\n\n /** Initial bounds to fit the map to */\n bounds?: LngLatBoundsLike;\n\n /** Enable/disable all map interactions */\n interactive?: boolean;\n\n /** Enable/disable map rotation via drag */\n dragRotate?: boolean;\n\n /** Enable/disable double-click to zoom */\n doubleClickZoom?: boolean;\n\n /** Enable/disable scroll wheel zoom */\n scrollZoom?: boolean;\n\n /** Enable/disable shift+drag box zoom */\n boxZoom?: boolean;\n\n /** Enable/disable drag to pan */\n dragPan?: boolean;\n\n /** Enable/disable keyboard navigation */\n keyboard?: boolean;\n\n /** Enable/disable touch zoom and rotation on mobile */\n touchZoomRotate?: boolean;\n}\n\nexport const DEFAULT_MAP_CONFIG: Required<Omit<MapConfig, 'bounds'>> = {\n center: [5.387827, 52.155172],\n zoom: 8,\n maxZoom: 18,\n minZoom: 6,\n interactive: true,\n dragRotate: false,\n doubleClickZoom: true,\n scrollZoom: true,\n boxZoom: true,\n dragPan: true,\n keyboard: true,\n touchZoomRotate: true,\n};\n\n// Common bounds that users can optionally use\nexport const COMMON_BOUNDS = {\n NETHERLANDS: [\n [3.079667, 50.587611],\n [7.572028, 53.636667],\n ] as LngLatBoundsLike,\n AMERSFOORT: [\n [5.34458238242172, 52.11623605695118],\n [5.446205917577942, 52.21132028216525],\n ] as LngLatBoundsLike,\n} as const;\n","import { BehaviorSubject, map } from 'rxjs';\n\nimport { MapElement } from './map-element';\n\n/**\n * Repository for managing map elements.\n * Provides methods to add, remove, show, hide, and toggle map elements.\n * Also tracks element visibility state and provides observable streams for elements.\n *\n * @typeparam TElementType - The type of ID used for the map elements\n */\nexport abstract class MapElementRepository<TElementType> {\n /** Subject that holds the current array of map elements */\n private readonly mapElementsSubject = new BehaviorSubject<MapElement<TElementType>[]>([]);\n\n // mapElements are not directly exposed to prevent circular reference errors when\n // they are used in a template. Because the mapElements$ observable contains MapLibre\n // GL JS map objects, which have circular references.\n\n /** Observable stream of all map elements */\n private readonly mapElements$ = this.mapElementsSubject.asObservable();\n\n /** Observable stream of only visible map elements */\n private readonly visibleMapElements$ = this.mapElements$.pipe(\n map((elements) => elements.filter((element) => element.isVisible)),\n );\n\n /**\n * Gets the ids (TElementType) as an array of all map element\n * @returns Array of TElementType\n */\n mapElementIds$ = this.mapElements$.pipe(map((elements) => elements.map((element) => element.id)));\n\n /**\n * Gets the ids (TElementType) as an array of all visible map element\n * @returns Array of TElementType\n */\n visibleMapElementIds$ = this.visibleMapElements$.pipe(\n map((elements) => elements.map((element) => element.id)),\n );\n\n /**\n * Gets the current array of all map elements\n * @returns Array of map elements\n */\n get mapElements(): MapElement<TElementType>[] {\n return this.mapElementsSubject.getValue();\n }\n\n /**\n * Gets only the currently visible map elements\n * @returns Array of visible map elements\n */\n get visibleMapElements(): MapElement<TElementType>[] {\n return this.mapElements.filter((element) => element.isVisible);\n }\n\n /**\n * Finds a map element by its ID\n *\n * @param elementId - The ID of the element to find\n * @returns The map element if found, undefined otherwise\n */\n getMapElementById(elementId: TElementType): MapElement<TElementType> | undefined {\n return this.mapElements.find((element) => element.id === elementId);\n }\n\n /**\n * Checks if a map element is currently visible\n *\n * @param elementId - The ID of the element to check\n * @returns True if the element is visible, false otherwise\n */\n isMapElementVisible(elementId: TElementType): boolean {\n return this.visibleMapElements.some((element) => element.id === elementId);\n }\n\n /**\n * Adds a new map element to the repository and initializes it.\n * Sets the element's visibility based on its configuration.\n *\n * @param mapElement - The map element to add\n */\n addMapElement(mapElement: MapElement<TElementType>) {\n const currentElements = this.mapElements;\n this.mapElementsSubject.next([...currentElements, mapElement]);\n mapElement.onInit();\n if (mapElement.alwaysVisible || this.isMapElementVisible(mapElement.id)) {\n this.showMapElement(mapElement.id);\n } else {\n this.hideMapElement(mapElement.id);\n }\n }\n\n /**\n * Removes a map element from the repository and destroys it.\n *\n * @param mapElement - The map element to remove\n */\n removeMapElement(mapElement: MapElement<TElementType>) {\n const filteredElements = this.mapElements.filter((element) => element.id !== mapElement.id);\n this.mapElementsSubject.next(filteredElements);\n mapElement.onDestroy();\n }\n\n /**\n * Removes all map elements from the repository and destroys them.\n */\n removeAllMapElements() {\n this.mapElements.forEach((element) => {\n this.removeMapElement(element);\n });\n }\n\n /**\n * Sets the visibility of a map element by its ID and updates the subject with the new state.\n *\n * @param elementId - The ID of the element to update\n * @param visible - Whether the element should be visible or hidden\n */\n private setMapElementVisibility(elementId: TElementType, visible: boolean) {\n const element = this.getMapElementById(elementId);\n if (element) {\n element.setVisible(visible);\n const elements = this.mapElements.filter((el) => el.id !== elementId);\n this.mapElementsSubject.next([...elements, element]);\n }\n }\n\n /**\n * Shows a map element by its ID and updates the subject with the new state.\n *\n * @param elementId - The ID of the element to show\n */\n showMapElement(elementId: TElementType) {\n this.setMapElementVisibility(elementId, true);\n }\n\n /**\n * Hides a map element by its ID and updates the subject with the new state.\n *\n * @param elementId - The ID of the element to hide\n */\n hideMapElement(elementId: TElementType) {\n this.setMapElementVisibility(elementId, false);\n }\n\n /**\n * Toggles the visibility of a map element by its ID.\n * If the element is currently visible, it will be hidden, and vice versa.\n *\n * @param elementId - The ID of the element to toggle visibility\n */\n toggleMapElement(elementId: TElementType) {\n if (this.visibleMapElements.some((element) => element.id === elementId)) {\n this.hideMapElement(elementId);\n } else {\n this.showMapElement(elementId);\n }\n }\n\n /**\n * Gets the ID of the layer that should come before the specified element's layers\n * in the map's layer stack. This is used for maintaining proper layer ordering.\n *\n * @param elementId - The ID of the element to find a \"before\" reference for\n * @returns The ID of the first layer of the next element in order, or undefined if none exists\n */\n getBeforeId(elementId: TElementType): string | undefined {\n const currentElement = this.getMapElementById(elementId);\n if (!currentElement) {\n return undefined;\n }\n\n const nextElement = this.mapElements\n .filter((item) => item.elementOrder > currentElement.elementOrder)\n .sort((a, b) => a.elementOrder - b.elementOrder)[0];\n\n const nextElementLayerIds = nextElement?.sources\n .flatMap((source) => source.layers)\n .filter((layer) => layer.initialized)\n .map((layer) => layer.id);\n\n return nextElement && nextElementLayerIds.length > 0 ? nextElementLayerIds[0] : undefined;\n }\n}\n","import { Map } from 'maplibre-gl';\nimport { Subject } from 'rxjs';\n\nimport { MapElementRepository } from './map-element.repository';\nimport { MapSource } from './map-source';\nimport { MaplibreCursorService } from './maplibre-cursor.service';\n\nexport interface MapElementConfig<TElementType> {\n map: Map;\n mapElementRepository: MapElementRepository<TElementType>;\n maplibreCursorService: MaplibreCursorService;\n elementId: TElementType;\n elementOrder: number;\n}\n\nexport abstract class MapElement<TElementType> {\n id: TElementType;\n elementOrder: number;\n sources: MapSource<TElementType>[] = [];\n alwaysVisible = false;\n isVisible = false;\n\n protected unsubscribe = new Subject<void>();\n\n constructor(protected readonly config: MapElementConfig<TElementType>) {\n this.id = config.elementId;\n this.elementOrder = config.elementOrder;\n }\n\n onInit() {\n this.sources.forEach((source) => source.onInit());\n }\n\n onDestroy() {\n this.sources.forEach((source) => source.onDestroy());\n\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n setVisible(visible: boolean) {\n this.isVisible = visible;\n this.sources.forEach((source) => source.setVisible(visible));\n }\n}\n","import { Feature } from 'geojson';\nimport { MapElementConfig } from './map-element';\nimport {\n FilterSpecification,\n LayerSpecification,\n MapGeoJSONFeature,\n MapMouseEvent,\n} from 'maplibre-gl';\nimport { Subject } from 'rxjs';\n\nexport abstract class MapLayer<TElementType> {\n initialized = false;\n\n protected unsubscribe = new Subject<void>();\n\n constructor(\n protected readonly config: MapElementConfig<TElementType>,\n protected readonly sourceId: string,\n protected readonly layerIdSuffix?: string,\n ) {}\n\n get id(): string {\n const suffix = this.layerIdSuffix ? `-${this.layerIdSuffix}` : '';\n return `${this.sourceId}${suffix}`;\n }\n\n get styleLayer() {\n return this.config.map.getLayer(this.id);\n }\n\n onInit() {\n // Add the layer to the map, with the correct ordering (beforeId)\n const beforeId = this.config.mapElementRepository.getBeforeId(this.config.elementId);\n this.config.map.addLayer(this.getSpecification() as LayerSpecification, beforeId);\n\n // Keeping track of which layers have been added to the map to allow for beforeId determination\n this.#setupClickHandlers();\n this.initialized = true;\n }\n\n onDestroy() {\n this.initialized = false;\n this.#removeClickHandlers();\n\n this.config.map.removeLayer(this.id);\n\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n setVisible(visible: boolean) {\n this.config.map.setLayoutProperty(this.id, 'visibility', visible ? 'visible' : 'none');\n }\n\n protected onClick?(features: Feature[]): void;\n\n protected abstract getSpecification(): Partial<LayerSpecification>;\n getFilterSpecification?(): FilterSpecification;\n\n #setupClickHandlers() {\n if (!this.onClick) return;\n\n this.config.map.on('click', this.id, (event) => {\n this.onClick?.(this.#getFeatures(event));\n });\n\n this.config.maplibreCursorService.setMouseCursor(this.config.map, this.id);\n }\n\n #removeClickHandlers() {\n if (!this.onClick) return;\n\n this.config.map.off('click', this.id, (event) => {\n this.onClick?.(this.#getFeatures(event));\n });\n }\n\n #getFeatures(event: ClickEvent): Feature[] {\n if (event.features && event.features.length > 0) {\n return this.#distinctFeatures(event.features);\n }\n return [];\n }\n\n /**\n * Filters an array of features to remove duplicates based on their properties.\n * Two features are considered duplicates if they have identical properties.\n * Particularly vector sources can yield duplicate features due to the way they\n * are rendered in tiles.\n *\n * @param features - Array of GeoJSON features to filter\n * @returns Array of unique features with no property duplicates\n * @private\n */\n #distinctFeatures(features: Feature[]): Feature[] {\n const seen = new Set();\n const uniqueFeatures: Feature[] = [];\n\n features.forEach((feature) => {\n const propertiesString = JSON.stringify(feature.properties);\n if (!seen.has(propertiesString)) {\n seen.add(propertiesString);\n uniqueFeatures.push(feature);\n }\n });\n\n return uniqueFeatures;\n }\n}\n\nexport type ClickEvent = MapMouseEvent & {\n features?: MapGeoJSONFeature[];\n} & object;\n","import { FeatureCollection } from 'geojson';\nimport { GeoJSONSource, SourceSpecification } from 'maplibre-gl';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { MapLayer } from './map-layer';\nimport { MapElementConfig } from './map-element';\n\nexport abstract class MapSource<TElementType> {\n layers: MapLayer<TElementType>[] = [];\n\n protected unsubscribe = new Subject<void>();\n\n #isInitialized = false;\n #featureCollection$?: Observable<FeatureCollection>;\n\n constructor(\n public readonly id: string,\n protected readonly config: MapElementConfig<TElementType>,\n ) {}\n\n onInit() {\n if (!this.config.map.getSource(this.id)) {\n this.config.map.addSource(this.id, this.getSpecification() as SourceSpecification);\n }\n\n this.layers.forEach((layer) => layer.onInit());\n\n this.isInitialized = true;\n }\n\n onDestroy() {\n this.isInitialized = false;\n\n this.layers.forEach((layer) => layer.onDestroy());\n\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n get featureCollection$(): Observable<FeatureCollection> | undefined {\n return this.#featureCollection$;\n }\n\n set featureCollection$(value: Observable<FeatureCollection> | undefined) {\n this.#featureCollection$ = value;\n this.#subscribeToFeatureCollection();\n }\n\n get isInitialized(): boolean {\n return this.#isInitialized;\n }\n\n set isInitialized(value: boolean) {\n this.#isInitialized = value;\n this.#subscribeToFeatureCollection();\n }\n\n setVisible(visible: boolean) {\n this.layers.forEach((layer) => layer.setVisible(visible));\n }\n\n protected abstract getSpecification(): Partial<SourceSpecification>;\n\n #subscribeToFeatureCollection() {\n if (this.isInitialized && this.featureCollection$) {\n this.featureCollection$.pipe(takeUntil(this.unsubscribe)).subscribe({\n next: (featureCollection) => {\n const source = this.config.map.getSource(this.id);\n\n if (source && source.type === 'geojson') {\n (source as GeoJSONSource).setData(featureCollection);\n } else {\n // not needed because source is always specified as geojson with empty collection\n this.config.map.addSource(this.id, {\n type: 'geojson',\n data: featureCollection,\n });\n }\n },\n error: (error) => {\n console.error('Error updating feature collection', error);\n },\n });\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n OnDestroy,\n viewChild,\n} from '@angular/core';\nimport { AnimationOptions, Map, MapOptions } from 'maplibre-gl';\nimport { MapConfig, DEFAULT_MAP_CONFIG } from './map-config.interface';\n\n@Component({\n standalone: true,\n template: '<div #mapContainer class=\"map\"></div>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class MapComponent implements AfterViewInit, OnDestroy {\n mapContainer = viewChild.required<ElementRef>('mapContainer');\n config = input<Partial<MapConfig>>({});\n map!: Map;\n\n ngAfterViewInit() {\n this.map = this.#createMap(this.mapContainer().nativeElement);\n this.map.once('load', () => this.#initiateMapLoading());\n }\n\n ngOnDestroy() {\n // Note: Using `this.map.once('remove', this.onRemoveMap())` does not work correctly because,\n // by the time the `onRemoveMap` event is triggered, it is no longer possible to interact with the map for cleanup.\n // To address this we call `onRemoveMap` explicitly before destroying the MapLibre instance. This\n // ensures that our map elements are cleaned up properly before the map is removed.\n this.onRemoveMap();\n this.map?.remove();\n }\n\n resizeMap() {\n this.map?.resize();\n }\n\n zoomToLevel(zoomLevel: number, options?: AnimationOptions) {\n this.map?.zoomTo(zoomLevel, options);\n }\n\n #createMap(container: HTMLElement): Map {\n const config = { ...DEFAULT_MAP_CONFIG, ...this.config() };\n\n const options = {\n container,\n style: {\n version: 8 as const,\n sources: {},\n layers: [],\n },\n maxZoom: config.maxZoom,\n minZoom: config.minZoom,\n interactive: config.interactive,\n doubleClickZoom: config.doubleClickZoom,\n scrollZoom: config.scrollZoom,\n boxZoom: config.boxZoom,\n dragPan: config.dragPan,\n keyboard: config.keyboard,\n touchZoomRotate: config.touchZoomRotate,\n } as MapOptions;\n\n const map = new Map(options);\n\n return map;\n }\n\n protected abstract onLoadMap(): void;\n protected abstract onRemoveMap(): void;\n protected abstract onIdle(): void;\n\n #initiateMapLoading() {\n this.onLoadMap();\n this.resizeMap();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Map } from 'maplibre-gl';\n\n/**\n * Service for managing MapLibre map cursor interactions.\n *\n * Maplibre has no automatic cursor handling for layers, so when you add a clickHandler\n * to a layer, the user can click on it, but the cursor will not change to a pointer.\n * This service provides methods to set the cursor to pointer when hovering over a layer,\n * and to enable crosshair mode which takes precedence over all other cursor types.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class MaplibreCursorService {\n /** Counter to track how many layers currently need a pointer cursor */\n #cursorPointerCount = 0;\n /** Flag indicating if crosshair mode is active */\n #crosshairMode = false;\n\n /**\n * Sets up mouse cursor handling for a map layer.\n * Changes cursor to pointer when mouse enters the layer and resets when leaving.\n *\n * @param map - The MapLibre map instance\n * @param layerId - ID of the layer to apply cursor behavior to\n */\n setMouseCursor(map: Map, layerId: string) {\n const updateCursor = (cursor: string) => {\n if (!this.#crosshairMode) this.#setMouseCursor(map, cursor);\n };\n\n map.on('mouseenter', layerId, () => updateCursor('pointer'));\n map.on('mouseleave', layerId, () => updateCursor(''));\n }\n\n /**\n * Enables or disables crosshair cursor mode for the map.\n * When enabled, crosshair cursor will take precedence over all other cursor types.\n *\n * @param value - True to enable crosshair mode, false to disable\n * @param map - The MapLibre map instance to apply the cursor to\n */\n /**\n * Enables or disables crosshair cursor mode for the map.\n * When enabled, crosshair cursor will take precedence over all other cursor types.\n *\n * @param value - True to enable crosshair mode, false to disable\n * @param map - The MapLibre map instance to apply the cursor to\n */\n setCrosshairMode(value: boolean, map: Map) {\n this.#crosshairMode = value;\n\n let cursorType = '';\n if (value) {\n cursorType = 'crosshair';\n } else if (this.#cursorPointerCount > 0) {\n cursorType = 'pointer';\n }\n\n map.getCanvas().style.cursor = cursorType;\n }\n\n /**\n * Internal method to handle mouse cursor state changes.\n * Manages the cursor pointer reference counter to ensure cursor displays correctly\n * when hovering over multiple interactive layers.\n *\n * @param map - The MapLibre map instance\n * @param cursor - Cursor type to set ('pointer' or '' to reset)\n * @private\n */\n #setMouseCursor(map: Map, cursor: string) {\n if (this.#crosshairMode) {\n // Crosshair mode takes precedence, ignore other cursor settings\n map.getCanvas().style.cursor = 'crosshair';\n return;\n }\n\n if (cursor === 'pointer') {\n this.#cursorPointerCount++;\n map.getCanvas().style.cursor = cursor;\n } else if (cursor === '') {\n this.#cursorPointerCount--;\n if (this.#cursorPointerCount < 1) {\n map.getCanvas().style.cursor = '';\n }\n } else {\n console.warn(`Cursor type '${cursor}' is not supported.`);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|