{"version":3,"file":"ng-leaflet-universal.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.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, EventEmitter } from '@angular/core';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { OnChanges, SimpleChanges } 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})\nexport class MapComponent implements AfterViewInit, OnChanges {\n  @Output() mapEvent = new EventEmitter<Marker>();\n  @Input() markers: Array<Marker> | null;\n\n  id = generate('div');\n  map: Map;\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.markers && 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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"}