UNPKG

ng-leaflet-universal-cm

Version:

NgLeafletUniversal is an open source Angular module that extends and simplifies the Leaflet implementation for Angular.

1 lines 9.63 kB
{"version":3,"file":"ng-leaflet-universal-cm.mjs","sources":["../../../projects/ng-leaflet-universal/src/lib/utils/index.ts","../../../projects/ng-leaflet-universal/src/lib/map.component.ts","../../../projects/ng-leaflet-universal/src/lib/map.module.ts","../../../projects/ng-leaflet-universal/src/public-api.ts","../../../projects/ng-leaflet-universal/src/ng-leaflet-universal-cm.ts"],"sourcesContent":["import { MarkerCard } from '../models';\n\nexport function generate(prefix = 'ng-leaflet-universal') {\n const hexstring = Math.random().toString(16).slice(2);\n\n return [prefix, hexstring].filter(Boolean).join('-');\n}\n\nexport const getCardHtml = (card: MarkerCard) =>\n card?.customHtml\n ? card.customHtml\n : `\n <div class=\"map-card\">\n <div class=\"map-card-body\">\n <div class=\"top-card\">\n <img src=\"${card?.image?.url}\" alt=\"${card?.title?.text}\" />\n <div class=\"content\">\n <h2 class=\"map-card-title\">${card?.title?.text}</h2>\n <h4 class=\"map-card-subtitle\">${card?.subtitle?.text}</h4>\n <h5 class=\"map-address\">${card?.address?.text}</h5>\n </div>\n </div>\n <div class=\"map-card-content\">\n ${card?.content?.text}\n </div>\n <div class=\"cta-wrapper\">\n ${card?.callToActions\n ?.map(\n (cta) => `\n <a href=\"${cta.link}\"\n target=\"_blank\"\n style=\"\n background-color: ${cta.backgroundColor || '#007FFF'};\n color: ${cta.textColor || 'white'};\"\n class=\"map-card-cta\">\n ${cta.icon ? `<i class=\"${cta.icon}\"></i>` : ''}\n ${cta.text}</a>\n `\n )\n .reduce((a, b) => a + b)}\n </div>\n </div>\n </div>`;\n","import { map, tileLayer, divIcon, Marker as LeafletMarker } from 'leaflet';\nimport { AfterViewInit, input, output, effect } from '@angular/core';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { FeatureGroup } from 'leaflet';\nimport type { Map } from 'leaflet';\n\nimport { generate, getCardHtml } from './utils';\nimport { Marker } from './models';\n\n@Component({\n selector: 'ng-leaflet-universal',\n template: `\n <div class=\"map\">\n <div class=\"map-frame\">\n <div [id]=\"id\"></div>\n </div>\n </div>\n `,\n styleUrls: ['./map.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class MapComponent implements AfterViewInit {\n mapEvent = output<Marker>();\n\n markers = input<Array<Marker> | null>([]);\n\n id = generate('div');\n map: Map;\n\n #effet = effect(() => {\n if (this.map) {\n this.updateMarkers(this.markers());\n }\n })\n\n ngAfterViewInit() {\n this.map = map(this.id).setView([18.4, -66.9], 4);\n\n tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n attribution: 'Map data © OpenStreetMap contributors',\n }).addTo(this.map);\n\n this.updateMarkers(this.markers());\n }\n\n removeMarkers() {\n this.map.eachLayer((layer) => {\n // Ignore tile layer\n if (layer.options?.attribution) return;\n\n // Previous (markers)\n layer.remove();\n });\n }\n\n updateMarkers(markers: Array<Marker> | null) {\n this.removeMarkers();\n\n if (!markers?.length) return;\n\n const leafletMarkers = markers.map(createLeafletMarker).map((marker, i) => {\n return marker.on('click', () => this.mapEvent.emit(markers[i]));\n });\n\n const group = new FeatureGroup(leafletMarkers);\n\n group.addTo(this.map);\n\n this.map.fitBounds(group.getBounds());\n }\n}\n\nfunction createLeafletMarker(marker: Marker) {\n const leafletMarker = new LeafletMarker({\n lat: marker.location.latitude,\n lng: marker.location.longitude,\n });\n\n leafletMarker.setIcon(\n divIcon({\n html:\n marker.html ||\n `\n <div class=\"item-marker\">\n <div class=\"icon-image\" style=\"background-image: url('${marker.icon}')\">\n </div>\n </div>`,\n className: 'map-marker-icon',\n iconSize: [26, 30],\n iconAnchor: [13, 30],\n })\n );\n\n leafletMarker.on('click', function ({ target, latlng }) {\n if (marker.cardActivated && marker?.card) {\n const html = getCardHtml(marker.card);\n const popup = target.getPopup();\n\n if (popup) popup?.openPopup();\n else {\n target\n .bindPopup(html, {\n autoClose: false,\n maxWidth: 200,\n })\n .openPopup();\n }\n }\n\n target._map.setView(latlng, 15);\n });\n\n return leafletMarker;\n}\n","import { NgModule } from '@angular/core';\n\nimport { MapComponent } from './map.component';\n\n@NgModule({\n declarations: [MapComponent],\n exports: [MapComponent],\n})\nexport class NgLeafletUniversalModule {}\n","/*\n * Public API Surface of ng-leaflet-universal\n */\n\nexport * from './lib/map.component';\nexport * from './lib/map.module';\nexport * from './lib/models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["LeafletMarker"],"mappings":"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"}