UNPKG

@gouvfr-anct/mediation-numerique

Version:

📚 Bibliothèque pour la cartographie de l’offre de médiation numérique.

304 lines 74.2 kB
import { Component, EventEmitter, HostListener, Inject, Input, Output } from '@angular/core'; import L, { geoJSON, latLng, layerGroup, tileLayer } from 'leaflet'; import * as _ from 'lodash'; import { GEOMETRY_POLYGON_TOKEN } from '../../configurations/geometry-polygon.configuration'; import { INITIAL_POSITION_TOKEN } from '../../configurations/initial-position.configuration'; import { MARKER_TYPE_TOKEN } from '../../configurations/marker-type.configuration'; import { ZOOM_LEVEL_TOKEN } from '../../configurations/zoom-level.configuration'; import { GEO_JSON_TOKEN } from '../repositories/geo-json.repository'; import { MapService } from './map.service'; import * as i0 from "@angular/core"; import * as i1 from "./map.service"; import * as i2 from "@angular/common"; import * as i3 from "@asymmetrik/ngx-leaflet"; export class MapComponent { constructor(metropole, markerType, zoomLevel, initialPosition, geoJsonService, mapService) { this.metropole = metropole; this.markerType = markerType; this.zoomLevel = zoomLevel; this.initialPosition = initialPosition; this.geoJsonService = geoJsonService; this.mapService = mapService; this.isOrientationForm = false; this.structures = []; this.structuresToPrint = []; this.selectedStructure = new EventEmitter(); this.orientationButtonClick = new EventEmitter(); this.zoomOptions = { animate: true, duration: 0.5 }; this.initializeMapOptions(); } // Add listener on the popup button to show details of structure clickout(event) { if (event.target.classList.contains('btnShowDetails')) { this.selectedStructure.emit(this.currentStructure); } if (event.target.classList.contains('add')) { this.orientationButtonClick.emit(this.currentStructure); this.getStructuresPositions(this.structures); } } ngOnChanges(changes) { if (changes.searchedValue && !changes.searchedValue.firstChange) { if (changes.searchedValue.currentValue) { this.processTownCoordinate(changes.searchedValue.currentValue); } else { this.map.setView(this.mapOptions.center, this.mapOptions.zoom); } } if (changes.isMapPhone) { if (this.isMapPhone) { setTimeout(() => { this.map.invalidateSize(); }, 0); } } if (changes.structures && this.map) { this.handleStructurePosition(changes.structures.previousValue); } // Handle map marker tooltip if (changes.toogleToolTipId && changes.toogleToolTipId.currentValue !== changes.toogleToolTipId.previousValue) { if (changes.toogleToolTipId.previousValue !== undefined) { if (this.isToPrint(changes.toogleToolTipId.previousValue)) { this.mapService.setAddedToListMarker(changes.toogleToolTipId.previousValue, this.getMarkerTypeByStructureId(changes.toogleToolTipId.previousValue)); } else { this.mapService.setUnactiveMarker(changes.toogleToolTipId.previousValue, this.getMarkerTypeByStructureId(changes.toogleToolTipId.previousValue)); } } if (changes.toogleToolTipId.currentValue !== undefined) { this.mapService.setActiveMarker(changes.toogleToolTipId.currentValue, this.getMarkerTypeByStructureId(changes.toogleToolTipId.currentValue)); } } // Handle map marker if none selected if (changes.selectedMarkerId && this.map) { this.map.closePopup(); if (changes.selectedMarkerId.currentValue === undefined) { this.mapService.setDefaultMarker(changes.selectedMarkerId.previousValue, this.getMarkerTypeByStructureId(changes.selectedMarkerId.previousValue)); this.map.setView(this.mapOptions.center, this.mapOptions.zoom); } } // Handle map marker if one is set with url or selected if (this.mapService.getMarker(this.selectedMarkerId)) { this.mapService.setSelectedMarker(this.selectedMarkerId, this.getMarkerTypeByStructureId(this.selectedMarkerId)); this.centerLeafletMapOnMarker(this.selectedMarkerId); } this.closePreviousMarker(changes); if (changes.structuresToPrint) { if (changes.structuresToPrint.currentValue < changes.structuresToPrint.previousValue) { this.mapService?.setUnactiveMarker(this.toogleToolTipId, this.getMarkerTypeByStructureId(changes.structuresToPrint.previousValue)); } this.structuresToPrint.forEach((structure) => { this.mapService.setAddedToListMarker(structure._id, this.getMarkerTypeByStructureId(structure._id)); }); } } processTownCoordinate(queryString) { this.geoJsonService.getTownshipCoord(queryString).subscribe((townData) => { if (townData.length > 0) { const bounds = new L.LatLngBounds(townData.map((dataArray) => dataArray.reverse())); this.map.fitBounds(bounds); } }, (err) => { this.map.flyTo(this.mapOptions.center, this.mapOptions.zoom, this.zoomOptions); }); } /** * Create a user position marcker and center the map on it with a zoom level defined in ZoomLevel * @param coords {[number, number]} Map center position */ centerOnCoordinates(coords) { this.mapService.createMarker(coords[1], coords[0], this.markerType.user, 'userLocation').addTo(this.map); this.map.flyTo(new L.LatLng(coords[1], coords[0]), this.zoomLevel.userPosition, this.zoomOptions); } /** * Get structures positions and add marker corresponding to those positons on the map */ handleStructurePosition(previousStructuresValue) { // If there is more structure than before, append them if (previousStructuresValue && previousStructuresValue.length > 0 && previousStructuresValue.length < this.structures.length) { this.getStructuresPositions(_.differenceWith(this.structures, previousStructuresValue, _.isEqual)); } else if (this.structures) { this.map = this.mapService.cleanMap(this.map); this.getStructuresPositions(this.structures); this.structuresToPrint.forEach((structure) => { this.mapService.setAddedToListMarker(structure._id, this.getMarkerTypeByStructureId(structure._id)); }); } } isToPrint(id) { return this.structuresToPrint.findIndex((elem) => elem._id == id) > -1 ? true : false; } /** * Returns according marker type base on {MarkerType} * @param {Structure} structure * @returns {number} */ getMarkerType(structure) { return structure?.labelsQualifications?.includes('conseillerNumFranceServices') ? this.markerType.conseillerFrance : this.markerType.structure; } /** * Return the map marker type given a structure id * @param {string} id - Structure id * @returns {number} */ getMarkerTypeByStructureId(id) { return this.getMarkerType(this.structures.find((structure) => structure._id === id)); } getStructuresPositions(structureList) { for (const structure of structureList) { this.mapService .createMarker(structure.getLat(), structure.getLon(), this.getMarkerType(structure), structure._id, this.buildToolTip(structure)) .addTo(this.map) // store structure before user click on button .on('popupopen', () => { this.currentStructure = structure; }); } } /** * Create tooltip for display * @param structure Structure */ buildToolTip(structure) { let cssAvailabilityClass = structure.isOpen ? 'available' : null; if (cssAvailabilityClass === null) { if (structure.openedOn.day) { cssAvailabilityClass = 'unavailable'; } else { cssAvailabilityClass = 'unknown'; } } return ('<h1>' + structure.structureName + '</h1>' + '<p>' + structure.getLabelTypeStructure() + '</p>' + (this.isOrientationForm ? '<div class="pop-up orientation"><button type="button" class="orientationButton btnShowDetails"><span class="ico-gg-eye-alt eye"></span>Voir</button></div>' : '<div class="pop-up"><button type="button" class="btnShowDetails">Voir</button></div>')); } buildMdmPopUp(mdmProperties) { return `<h1>${mdmProperties.nom}</h1><p>${mdmProperties.adresse}</p>`; } /** * Add marker when map is ready to be showned * @param map map */ onMapReady(map) { this.map = map; if (this.searchedValue) { if (Array.isArray(this.searchedValue)) { this.centerOnCoordinates(this.searchedValue); } } } /** * Init map options : * - Metropole bounds based on a WMS service hosted by data.grandlyon.com * - Map Layer based on open street maps */ initializeMapOptions() { // Init mdm this.initMDMLayer(); // Init WMS service with param from data.grandlyon.com layerGroup(); const carteLayer = tileLayer('https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png', { attribution: '&copy; <a href="https://carto.com/attributions">CARTO</a>', maxZoom: this.zoomLevel.max }); // Center is set on townhall // Zoom is blocked on 11 to prevent people to zoom out from metropole this.mapOptions = { center: latLng(this.initialPosition.latitude, this.initialPosition.longitude), maxZoom: this.zoomLevel.max, zoom: this.zoomLevel.regular, minZoom: this.zoomLevel.min, layers: [carteLayer] }; } initMDMLayer() { this.geoJsonService.getMDMGeoJson().subscribe((res) => { res.forEach((mdm) => { this.mapService .createMarker(mdm.geometry.getLat(), mdm.geometry.getLon(), this.markerType.mdm, null, this.buildMdmPopUp(mdm.properties)) .addTo(this.map); }); this.initMetropoleLayer(); }); } centerLeafletMapOnMarker(markerId) { if (this.mapService.getMarker(markerId)) { const marker = this.mapService.getMarker(markerId); const latLngs = marker.getLatLng(); this.map.flyTo(new L.LatLng(latLngs.lat, latLngs.lng), this.zoomLevel.max, this.zoomOptions); } } initMetropoleLayer() { this.map.addLayer(geoJSON({ type: this.metropole.features[0].geometry.type, coordinates: this.metropole.features[0].geometry.coordinates }, { style: () => ({ color: '#a00000', fillOpacity: 0, weight: 1 }) })); } /** * Close previous markers * - if strucure is closed * - if a new marker is selected */ closePreviousMarker(changes) { if ((changes.selectedMarkerId?.currentValue === undefined && changes.selectedMarkerId?.previousValue) || changes.selectedMarkerId?.currentValue !== changes.selectedMarkerId?.previousValue) { this.mapService.setUnactiveMarker(changes.selectedMarkerId.previousValue, this.getMarkerTypeByStructureId(changes.selectedMarkerId.previousValue)); } } } MapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapComponent, deps: [{ token: GEOMETRY_POLYGON_TOKEN }, { token: MARKER_TYPE_TOKEN }, { token: ZOOM_LEVEL_TOKEN }, { token: INITIAL_POSITION_TOKEN }, { token: GEO_JSON_TOKEN }, { token: i1.MapService }], target: i0.ɵɵFactoryTarget.Component }); MapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MapComponent, selector: "app-map", inputs: { isOrientationForm: "isOrientationForm", structures: "structures", structuresToPrint: "structuresToPrint", toogleToolTipId: "toogleToolTipId", selectedMarkerId: "selectedMarkerId", isMapPhone: "isMapPhone", searchedValue: "searchedValue" }, outputs: { selectedStructure: "selectedStructure", orientationButtonClick: "orientationButtonClick" }, host: { listeners: { "document:click": "clickout($event)" } }, providers: [MapService], usesOnChanges: true, ngImport: i0, template: "<div\n id=\"map\"\n class=\"body-wrap\"\n [ngClass]=\"{ orientation: isOrientationForm }\"\n leaflet\n [leafletOptions]=\"mapOptions\"\n (leafletMapReady)=\"onMapReady($event)\"></div>\n", styles: [".ico-mglass{position:relative;display:inline-block;background:transparent;border-radius:30px;border:2px solid #333333;height:12px;width:12px;min-width:12px;max-width:12px}.ico-mglass:after{content:\"\";height:2px;width:8px;background:#333333;position:absolute;top:14px;left:10px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.ico-pin{width:20px;height:20px;max-width:20px;max-height:20px;border-radius:50% 50% 50% 0;background:transparent;transform:rotate(-45deg);left:50%;top:50%;margin:-4px 0 0}.ico-pin.after{content:\"\";width:14px;height:14px;margin:8px 0 0 8px;background:transparent;border-radius:50%}.ico-pin-search{width:18px;height:18px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background-color:#696969}.ico-pin-search:before{content:\"\";position:absolute;left:5px;top:6px;width:7px;height:7px;border-radius:4px;background-color:#fff}.ico-dot-available{height:12px;width:12px;background-color:#41c29c;border-radius:50%;margin-right:8px}.ico-dot-unavailable{height:12px;width:12px;background-color:#da3635;border-radius:50%;margin-right:8px}.ico-dot-unknown{height:12px;width:12px;background-color:#bdbdbd;border-radius:50%;margin-right:8px}.ico-marker-pin{width:30px;height:30px;border-radius:50% 50% 50% 0;background:#da3635;position:absolute;transform:rotate(-45deg);left:50%;top:50%;margin:-15px 0 0 -15px}.ico-marker-pin.selected{background:#da3635}.ico-marker-pin:after{content:\"\";width:10px;height:10px;margin:10px 0 0 10px;background:#fff;position:absolute;border-radius:50%}.ico-marker-pin-sm{width:18px;height:18px;border-radius:50% 50% 50% 0;background:#696969;transform:rotate(-45deg);margin:0 4px}.ico-marker-pin-sm.absolute{position:absolute;margin:0}.ico-marker-pin-sm:after{content:\"\";width:7px;height:7px;margin:6px 0 0 5px;background:#f8f8f8;position:absolute;border-radius:50%}.ico-profile .head{width:12px;height:12px;border-radius:25px;border:2px solid #333333}.ico-profile .body{width:28px;height:10px;border-radius:20px 20px 0 0;border-top:2px solid #333333;border-right:2px solid #333333;border-left:2px solid #333333}.ico-close .mdiv{height:10px;width:2px;margin-left:5px;background-color:#696969;transform:rotate(45deg);z-index:1}.ico-close .md{height:10px;width:2px;background-color:#696969;transform:rotate(90deg);z-index:2}.ico-close-search{width:16px;height:16px;display:inline-block;vertical-align:middle}.ico-close-search:before{transform:rotate(45deg)}.ico-close-search:after{transform:rotate(-45deg)}.ico-close-search:before,.ico-close-search:after{position:absolute;content:\"\";height:16px;width:2px;background-color:#bdbdbd}.ic-arrow-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px}.ic-arrow-left:after,.ic-arrow-left:before{content:\"\";display:block;box-sizing:border-box;position:absolute;left:3px}.ic-arrow-left:after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:7px}.ic-arrow-left:before{width:16px;height:2px;bottom:10px;background:currentColor}.ic-print{width:.68em;height:1em;border-style:solid;border-color:currentcolor;background-color:transparent;border-width:.07em;border-radius:.05em;margin:0 .16em}.ic-print:before{width:1em;height:.4em;border-width:.07em .21em 0;border-style:solid;border-color:currentColor currentcolor transparent;border-radius:.05em .05em 0 0;top:.25em;left:50%;transform:translate(-50%);background-image:linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%)}.ic-print:after{width:.45em;height:.065em;background-color:currentColor;left:50%;transform:translate(-50%);top:.6em;box-shadow:0 .12em,-.1em -.28em 0 .05em}.ic-mail,.ic-mail:after{display:block;box-sizing:border-box;height:14px;border:2px solid}.ic-mail{color:#4f4f4f;overflow:hidden;transform:scale(var(--ggs, 1));position:absolute;width:18px;border-radius:2px}.ic-mail:after{content:\"\";position:absolute;border-radius:3px;width:14px;transform:rotate(-45deg);bottom:3px;left:0}.ic-phone{color:#4f4f4f;box-sizing:border-box;position:absolute;display:block;width:22px;height:22px;transform:scale(var(--ggs, 1))}.ic-phone:after,.ic-phone:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-phone:after{width:18px;height:18px;border-top-left-radius:1px;border-bottom-right-radius:1px;border-bottom-left-radius:12px;border-left:4px solid;border-bottom:4px solid;left:2px;bottom:2px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat right 11px/6px 4px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat -1px 0/4px 6px}.ic-phone:before{width:20px;height:20px;border:6px double;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;border-radius:50%;transform:rotate(-45deg);bottom:2px;left:2px}.ic-mouse{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:16px;height:24px;border:2px solid;border-radius:10px}.ic-mouse:after{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:6px;background:currentColor;top:3px;left:5px}.ic-wifi{color:#000;position:absolute;margin-left:7px;margin-top:13px;width:6px;height:6px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:before{content:\"\";position:absolute;left:-5px;top:-5px;width:14px;height:14px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:after{content:\"\";position:absolute;left:-9px;top:-9px;width:22px;height:22px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-screen{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:22px;height:14px;border:2px solid;border-radius:3px;margin-top:-4px}.ic-screen:after,.ic-screen:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:2px;background:currentColor;top:14px;left:4px}.ic-screen:before{width:2px;height:6px;top:10px;left:8px}.ic-globe-alt,.ic-globe-alt:after,.ic-globe-alt:before{color:#4f4f4f;display:block;box-sizing:border-box;height:18px;border:2px solid}.ic-globe-alt{position:absolute;transform:scale(var(--ggs, 1));width:18px;border-radius:22px}.ic-globe-alt:after,.ic-globe-alt:before{content:\"\";position:absolute;width:8px;border-radius:100%;top:-2px;left:3px}.ic-globe-alt:after{width:24px;height:20px;border:2px solid transparent;border-bottom:2px solid;top:-11px;left:-5px}.ic-camera{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));border:2px solid;border-radius:3px;width:18px;height:12px;perspective:24px}.ic-camera:after,.ic-camera:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-camera:before{border:2px solid;border-left-color:transparent;transform:rotateY(-70deg);width:8px;height:8px;right:-7px;top:0}.ic-camera:after{width:10px;height:5px;border-top:2px solid;border-right:2px solid;top:-5px;right:2px;border-top-right-radius:2px}.ic-calendar-today{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:18px;height:18px;border:2px solid;border-top:4px solid;border-radius:3px}.ic-calendar-today:before{content:\"\";display:block;box-sizing:border-box;position:absolute;background:currentColor;height:4px;width:4px;border-radius:2px;right:2px;bottom:2px}.ic-user{display:block;position:absolute;transform:scale(var(--ggs, 1));box-sizing:border-box;width:12px;height:18px}.ic-user:after,.ic-user:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border:2px solid}.ic-user:before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.ic-user:after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.ico-close-details{width:44px;height:44px;border-radius:44px;display:flex;justify-content:center;align-items:center;opacity:.8;cursor:pointer}.ico-close-details:before,.ico-close-details:after{content:\"\";width:24px;height:2px;background-color:#333;position:absolute;border-radius:1px}.ico-close-details:hover{background-color:#f4f4f4}.ico-close-details:before{transform:rotate(45deg)}.ico-close-details:after{transform:rotate(-45deg)}.ico-menu,.ico-menu:before,.ico-menu:after{cursor:pointer;border-radius:1px;height:2px;width:23px;background:#000000;position:absolute;display:block;content:\"\"}.ico-menu:before{top:-6px}.ico-menu:after{bottom:-6px}.ico-gg-eye-alt{position:relative;display:block;transform:scale(var(--ggs, 1));width:24px;height:18px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.ico-gg-eye-alt:after,.ico-gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.ico-gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px #696969,inset 0 0 0 2px #696969;width:24px;height:24px}.ico-gg-eye-alt:before{width:8px;height:8px;border:2px solid #696969;bottom:4px;left:8px;background-color:#696969}.ico-gg-add{box-sizing:border-box;position:relative;display:block;color:#47c562;width:32px;height:32px}.ico-gg-add:after,.ico-gg-add:before{content:\"\";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;border-radius:5px;top:8px;left:0px}.ico-gg-add:after{width:2px;height:14px;top:2px;left:6px}.gg-eye-alt{position:relative;display:block;width:18px;height:12px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.gg-eye-alt:after,.gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px,inset 0 0 0 2px;width:18px;height:18px}.gg-eye-alt:before{width:2px;height:2px;border:2px solid black;bottom:3px;left:7px;background-color:#000}.ico-gg-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px;border:1px solid transparent;border-radius:100px;color:#fff}.ico-gg-check:after{content:\"\";display:block;box-sizing:border-box;position:absolute;left:5px;top:-3px;width:7px;height:12px;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg);color:#fff}html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.btn-primary{background:#da3635;border-radius:4px;outline:none;cursor:pointer;color:#fff;height:40px;width:192px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;stroke:#fff;border:1px solid #333333}.btn-primary.small{width:149px}.btn-primary.invalid{opacity:.4}.btn-primary:focus{background:white;color:#da3635;border:1px solid #da3635;stroke:#da3635}.btn-grid{display:inline-flex;flex-wrap:wrap;gap:8px}.tags-cloud{font-style:normal;justify-content:center;align-items:center;height:28px;border-radius:20px;padding:5px 15px;color:#fff;border-style:none;margin-top:5px;background:#333333}.tags-cloud.unchecked{background:#bdbdbd}#map{height:100%}::ng-deep .leaflet-popup-close-button{display:none}::ng-deep .leaflet-left{right:0;left:unset}::ng-deep .leaflet-left .leaflet-control{margin-left:0;margin-right:10px;border:none;box-shadow:0 2px 8px #00000040}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:first-child{border-top-left-radius:8px;border-top-right-radius:8px}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}::ng-deep .leaflet-control-zoom a{color:#333;opacity:.55}::ng-deep .leaflet-control-zoom a:hover{opacity:1}::ng-deep .leaflet-marker-icon:hover{z-index:599!important}::ng-deep .leaflet-marker-icon:hover svg{fill:#b85959}::ng-deep .leaflet-marker-icon:hover svg.mdm{fill:#bd9e6a}::ng-deep .leaflet-marker-icon:hover svg.france-service{fill:#da3635}::ng-deep .leaflet-popup{border-radius:6px;bottom:-15px!important}::ng-deep .leaflet-popup h1{color:#333;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1.25em;font-size:18px;margin:0}::ng-deep .leaflet-popup p{color:#696969;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:1em;font-size:16px;margin:0 0 13px;font-style:italic}::ng-deep .leaflet-popup .pop-up{text-align:center;padding-top:20px}::ng-deep .leaflet-popup .pop-up.orientation{padding:0;text-align:-webkit-center}::ng-deep .leaflet-popup .pop-up button{background:#da3635;height:36px;color:#fff;padding:4px 37px;border-radius:4px;outline:none;border:1px solid transparent;cursor:pointer;font-weight:400;font-size:.813em;line-break:18px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:.875em;font-size:16px}::ng-deep .leaflet-popup .pop-up .orientationButton{display:flex;padding:10px 20px;border-radius:20px;margin:0 4px;color:#000;background-color:#fff;border:solid 1px #696969;min-width:120px}::ng-deep .leaflet-popup span{margin-right:4px}::ng-deep .leaflet-popup span.eye{margin-right:11px}::ng-deep .leaflet-popup-content-wrapper{border-radius:6px}::ng-deep .leaflet-popup-content{width:240px}::ng-deep .leaflet-popup-tip-container{display:none}@media print{.map-wrapper{display:none}}.body-wrap{height:400px}::ng-deep .on-top-marker{z-index:600!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.LeafletDirective, selector: "[leaflet]", inputs: ["leafletFitBoundsOptions", "leafletPanOptions", "leafletZoomOptions", "leafletZoomPanOptions", "leafletOptions", "leafletZoom", "leafletCenter", "leafletFitBounds", "leafletMaxBounds", "leafletMinZoom", "leafletMaxZoom"], outputs: ["leafletMapReady", "leafletZoomChange", "leafletCenterChange", "leafletClick", "leafletDoubleClick", "leafletMouseDown", "leafletMouseUp", "leafletMouseMove", "leafletMouseOver", "leafletMouseOut", "leafletMapMove", "leafletMapMoveStart", "leafletMapMoveEnd", "leafletMapZoom", "leafletMapZoomStart", "leafletMapZoomEnd"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapComponent, decorators: [{ type: Component, args: [{ selector: 'app-map', providers: [MapService], template: "<div\n id=\"map\"\n class=\"body-wrap\"\n [ngClass]=\"{ orientation: isOrientationForm }\"\n leaflet\n [leafletOptions]=\"mapOptions\"\n (leafletMapReady)=\"onMapReady($event)\"></div>\n", styles: [".ico-mglass{position:relative;display:inline-block;background:transparent;border-radius:30px;border:2px solid #333333;height:12px;width:12px;min-width:12px;max-width:12px}.ico-mglass:after{content:\"\";height:2px;width:8px;background:#333333;position:absolute;top:14px;left:10px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.ico-pin{width:20px;height:20px;max-width:20px;max-height:20px;border-radius:50% 50% 50% 0;background:transparent;transform:rotate(-45deg);left:50%;top:50%;margin:-4px 0 0}.ico-pin.after{content:\"\";width:14px;height:14px;margin:8px 0 0 8px;background:transparent;border-radius:50%}.ico-pin-search{width:18px;height:18px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background-color:#696969}.ico-pin-search:before{content:\"\";position:absolute;left:5px;top:6px;width:7px;height:7px;border-radius:4px;background-color:#fff}.ico-dot-available{height:12px;width:12px;background-color:#41c29c;border-radius:50%;margin-right:8px}.ico-dot-unavailable{height:12px;width:12px;background-color:#da3635;border-radius:50%;margin-right:8px}.ico-dot-unknown{height:12px;width:12px;background-color:#bdbdbd;border-radius:50%;margin-right:8px}.ico-marker-pin{width:30px;height:30px;border-radius:50% 50% 50% 0;background:#da3635;position:absolute;transform:rotate(-45deg);left:50%;top:50%;margin:-15px 0 0 -15px}.ico-marker-pin.selected{background:#da3635}.ico-marker-pin:after{content:\"\";width:10px;height:10px;margin:10px 0 0 10px;background:#fff;position:absolute;border-radius:50%}.ico-marker-pin-sm{width:18px;height:18px;border-radius:50% 50% 50% 0;background:#696969;transform:rotate(-45deg);margin:0 4px}.ico-marker-pin-sm.absolute{position:absolute;margin:0}.ico-marker-pin-sm:after{content:\"\";width:7px;height:7px;margin:6px 0 0 5px;background:#f8f8f8;position:absolute;border-radius:50%}.ico-profile .head{width:12px;height:12px;border-radius:25px;border:2px solid #333333}.ico-profile .body{width:28px;height:10px;border-radius:20px 20px 0 0;border-top:2px solid #333333;border-right:2px solid #333333;border-left:2px solid #333333}.ico-close .mdiv{height:10px;width:2px;margin-left:5px;background-color:#696969;transform:rotate(45deg);z-index:1}.ico-close .md{height:10px;width:2px;background-color:#696969;transform:rotate(90deg);z-index:2}.ico-close-search{width:16px;height:16px;display:inline-block;vertical-align:middle}.ico-close-search:before{transform:rotate(45deg)}.ico-close-search:after{transform:rotate(-45deg)}.ico-close-search:before,.ico-close-search:after{position:absolute;content:\"\";height:16px;width:2px;background-color:#bdbdbd}.ic-arrow-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px}.ic-arrow-left:after,.ic-arrow-left:before{content:\"\";display:block;box-sizing:border-box;position:absolute;left:3px}.ic-arrow-left:after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:7px}.ic-arrow-left:before{width:16px;height:2px;bottom:10px;background:currentColor}.ic-print{width:.68em;height:1em;border-style:solid;border-color:currentcolor;background-color:transparent;border-width:.07em;border-radius:.05em;margin:0 .16em}.ic-print:before{width:1em;height:.4em;border-width:.07em .21em 0;border-style:solid;border-color:currentColor currentcolor transparent;border-radius:.05em .05em 0 0;top:.25em;left:50%;transform:translate(-50%);background-image:linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%)}.ic-print:after{width:.45em;height:.065em;background-color:currentColor;left:50%;transform:translate(-50%);top:.6em;box-shadow:0 .12em,-.1em -.28em 0 .05em}.ic-mail,.ic-mail:after{display:block;box-sizing:border-box;height:14px;border:2px solid}.ic-mail{color:#4f4f4f;overflow:hidden;transform:scale(var(--ggs, 1));position:absolute;width:18px;border-radius:2px}.ic-mail:after{content:\"\";position:absolute;border-radius:3px;width:14px;transform:rotate(-45deg);bottom:3px;left:0}.ic-phone{color:#4f4f4f;box-sizing:border-box;position:absolute;display:block;width:22px;height:22px;transform:scale(var(--ggs, 1))}.ic-phone:after,.ic-phone:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-phone:after{width:18px;height:18px;border-top-left-radius:1px;border-bottom-right-radius:1px;border-bottom-left-radius:12px;border-left:4px solid;border-bottom:4px solid;left:2px;bottom:2px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat right 11px/6px 4px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat -1px 0/4px 6px}.ic-phone:before{width:20px;height:20px;border:6px double;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;border-radius:50%;transform:rotate(-45deg);bottom:2px;left:2px}.ic-mouse{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:16px;height:24px;border:2px solid;border-radius:10px}.ic-mouse:after{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:6px;background:currentColor;top:3px;left:5px}.ic-wifi{color:#000;position:absolute;margin-left:7px;margin-top:13px;width:6px;height:6px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:before{content:\"\";position:absolute;left:-5px;top:-5px;width:14px;height:14px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:after{content:\"\";position:absolute;left:-9px;top:-9px;width:22px;height:22px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-screen{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:22px;height:14px;border:2px solid;border-radius:3px;margin-top:-4px}.ic-screen:after,.ic-screen:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:2px;background:currentColor;top:14px;left:4px}.ic-screen:before{width:2px;height:6px;top:10px;left:8px}.ic-globe-alt,.ic-globe-alt:after,.ic-globe-alt:before{color:#4f4f4f;display:block;box-sizing:border-box;height:18px;border:2px solid}.ic-globe-alt{position:absolute;transform:scale(var(--ggs, 1));width:18px;border-radius:22px}.ic-globe-alt:after,.ic-globe-alt:before{content:\"\";position:absolute;width:8px;border-radius:100%;top:-2px;left:3px}.ic-globe-alt:after{width:24px;height:20px;border:2px solid transparent;border-bottom:2px solid;top:-11px;left:-5px}.ic-camera{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));border:2px solid;border-radius:3px;width:18px;height:12px;perspective:24px}.ic-camera:after,.ic-camera:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-camera:before{border:2px solid;border-left-color:transparent;transform:rotateY(-70deg);width:8px;height:8px;right:-7px;top:0}.ic-camera:after{width:10px;height:5px;border-top:2px solid;border-right:2px solid;top:-5px;right:2px;border-top-right-radius:2px}.ic-calendar-today{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:18px;height:18px;border:2px solid;border-top:4px solid;border-radius:3px}.ic-calendar-today:before{content:\"\";display:block;box-sizing:border-box;position:absolute;background:currentColor;height:4px;width:4px;border-radius:2px;right:2px;bottom:2px}.ic-user{display:block;position:absolute;transform:scale(var(--ggs, 1));box-sizing:border-box;width:12px;height:18px}.ic-user:after,.ic-user:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border:2px solid}.ic-user:before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.ic-user:after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.ico-close-details{width:44px;height:44px;border-radius:44px;display:flex;justify-content:center;align-items:center;opacity:.8;cursor:pointer}.ico-close-details:before,.ico-close-details:after{content:\"\";width:24px;height:2px;background-color:#333;position:absolute;border-radius:1px}.ico-close-details:hover{background-color:#f4f4f4}.ico-close-details:before{transform:rotate(45deg)}.ico-close-details:after{transform:rotate(-45deg)}.ico-menu,.ico-menu:before,.ico-menu:after{cursor:pointer;border-radius:1px;height:2px;width:23px;background:#000000;position:absolute;display:block;content:\"\"}.ico-menu:before{top:-6px}.ico-menu:after{bottom:-6px}.ico-gg-eye-alt{position:relative;display:block;transform:scale(var(--ggs, 1));width:24px;height:18px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.ico-gg-eye-alt:after,.ico-gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.ico-gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px #696969,inset 0 0 0 2px #696969;width:24px;height:24px}.ico-gg-eye-alt:before{width:8px;height:8px;border:2px solid #696969;bottom:4px;left:8px;background-color:#696969}.ico-gg-add{box-sizing:border-box;position:relative;display:block;color:#47c562;width:32px;height:32px}.ico-gg-add:after,.ico-gg-add:before{content:\"\";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;border-radius:5px;top:8px;left:0px}.ico-gg-add:after{width:2px;height:14px;top:2px;left:6px}.gg-eye-alt{position:relative;display:block;width:18px;height:12px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.gg-eye-alt:after,.gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px,inset 0 0 0 2px;width:18px;height:18px}.gg-eye-alt:before{width:2px;height:2px;border:2px solid black;bottom:3px;left:7px;background-color:#000}.ico-gg-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px;border:1px solid transparent;border-radius:100px;color:#fff}.ico-gg-check:after{content:\"\";display:block;box-sizing:border-box;position:absolute;left:5px;top:-3px;width:7px;height:12px;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg);color:#fff}html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.btn-primary{background:#da3635;border-radius:4px;outline:none;cursor:pointer;color:#fff;height:40px;width:192px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;stroke:#fff;border:1px solid #333333}.btn-primary.small{width:149px}.btn-primary.invalid{opacity:.4}.btn-primary:focus{background:white;color:#da3635;border:1px solid #da3635;stroke:#da3635}.btn-grid{display:inline-flex;flex-wrap:wrap;gap:8px}.tags-cloud{font-style:normal;justify-content:center;align-items:center;height:28px;border-radius:20px;padding:5px 15px;color:#fff;border-style:none;margin-top:5px;background:#333333}.tags-cloud.unchecked{background:#bdbdbd}#map{height:100%}::ng-deep .leaflet-popup-close-button{display:none}::ng-deep .leaflet-left{right:0;left:unset}::ng-deep .leaflet-left .leaflet-control{margin-left:0;margin-right:10px;border:none;box-shadow:0 2px 8px #00000040}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:first-child{border-top-left-radius:8px;border-top-right-radius:8px}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}::ng-deep .leaflet-control-zoom a{color:#333;opacity:.55}::ng-deep .leaflet-control-zoom a:hover{opacity:1}::ng-deep .leaflet-marker-icon:hover{z-index:599!important}::ng-deep .leaflet-marker-icon:hover svg{fill:#b85959}::ng-deep .leaflet-marker-icon:hover svg.mdm{fill:#bd9e6a}::ng-deep .leaflet-marker-icon:hover svg.france-service{fill:#da3635}::ng-deep .leaflet-popup{border-radius:6px;bottom:-15px!important}::ng-deep .leaflet-popup h1{color:#333;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1.25em;font-size:18px;margin:0}::ng-deep .leaflet-popup p{color:#696969;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:1em;font-size:16px;margin:0 0 13px;font-style:italic}::ng-deep .leaflet-popup .pop-up{text-align:center;padding-top:20px}::ng-deep .leaflet-popup .pop-up.orientation{padding:0;text-align:-webkit-center}::ng-deep .leaflet-popup .pop-up button{background:#da3635;height:36px;color:#fff;padding:4px 37px;border-radius:4px;outline:none;border:1px solid transparent;cursor:pointer;font-weight:400;font-size:.813em;line-break:18px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:.875em;font-size:16px}::ng-deep .leaflet-popup .pop-up .orientationButton{display:flex;padding:10px 20px;border-radius:20px;margin:0 4px;color:#000;background-color:#fff;border:solid 1px #696969;min-width:120px}::ng-deep .leaflet-popup span{margin-right:4px}::ng-deep .leaflet-popup span.eye{margin-right:11px}::ng-deep .leaflet-popup-content-wrapper{border-radius:6px}::ng-deep .leaflet-popup-content{width:240px}::ng-deep .leaflet-popup-tip-container{display:none}@media print{.map-wrapper{display:none}}.body-wrap{height:400px}::ng-deep .on-top-marker{z-index:600!important}\n"] }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [GEOMETRY_POLYGON_TOKEN] }] }, { type: undefined, decorators: [{ type: Inject, args: [MARKER_TYPE_TOKEN] }] }, { type: undefined, decorators: [{ type: Inject, args: [ZOOM_LEVEL_TOKEN] }] }, { type: undefined, decorators: [{ type: Inject, args: [INITIAL_POSITION_TOKEN] }] }, { type: undefined, decorators: [{ type: Inject, args: [GEO_JSON_TOKEN] }] }, { type: i1.MapService }]; }, propDecorators: { isOrientationForm: [{ type: Input }], structures: [{ type: Input }], structuresToPrint: [{ type: Input }], toogleToolTipId: [{ type: Input }], selectedMarkerId: [{ type: Input }], isMapPhone: [{ type: Input }], searchedValue: [{ type: Input }], selectedStructure: [{ type: Output }], orientationButtonClick: [{ type: Output }], clickout: [{ type: HostListener, args: ['document:click', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL0Bnb3V2ZnItYW5jdC9tZWRpYXRpb24tbnVtZXJpcXVlL3NyYy9saWIvbWFwL2NvbXBvbmVudHMvbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL0Bnb3V2ZnItYW5jdC9tZWRpYXRpb24tbnVtZXJpcXVlL3NyYy9saWIvbWFwL2NvbXBvbmVudHMvbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBbUIsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBZ0Msc0JBQXNCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMzSCxPQUFPLEVBQWdDLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0gsT0FBTyxFQUEyQixpQkFBaUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzVHLE9BQU8sRUFBMEIsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUd6RyxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUTNDLE1BQU0sT0FBTyxZQUFZO0lBNEJ2QixZQUVtQixTQUF1QyxFQUV2QyxVQUFtQyxFQUVuQyxTQUFpQyxFQUVqQyxlQUE2QyxFQUNyQixjQUFpQyxFQUN6RCxVQUFzQjtRQVJ0QixjQUFTLEdBQVQs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