{"version":3,"sources":["webpack:///./node_modules/client-website-ts-library/components/Map/Providers/MapBoxMap.vue?9c17","webpack:///./node_modules/client-website-ts-library/components/Map/Providers/MapBoxMap.vue?eebd","webpack:///./node_modules/client-website-ts-library/components/Map/Providers/MapBoxMap.vue?38bb","webpack:///./node_modules/client-website-ts-library/components/Map/Providers/MapBoxMap.vue?12d0","webpack:///./node_modules/client-website-ts-library/components/Map/Providers/MapBoxMap.vue","webpack:///./node_modules/client-website-ts-library/components/Map/Providers/MapBoxMap.vue?18c6"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","_e","elemId","staticRenderFns","markers","GetGuid","isAttemptingToScroll","accessToken","Config","Website","Settings","MapProvider","APIKey","mapSettings","Geocode","then","latMax","latMin","lngMax","lngMin","Markers","forEach","marker","Coordinate","Lat","Lon","bounds","LngLatBounds","lat","lng","Logger","Log","Debug","container","style","MapboxStyleURI","interactive","Interactive","zoom","Zoom","maxBounds","MaxBounds","SW","NE","undefined","Center","center","fitBoundsOptions","padding","Padding","maxZoom","map","Map","GreedyZoom","scrollZoom","disable","scrollDebounce","on","enable","event","originalEvent","ctrlKey","preventDefault","isEnabled","clearTimeout","window","setTimeout","length","drawMarkers","getBounds","ne","getNorthEast","sw","getSouthWest","$emit","m","remove","markerDiv","document","createElement","classList","add","Content","CustomRenderer","backgroundImage","IconURL","Title","titleDiv","innerHTML","appendChild","mapMarker","Marker","setLngLat","setPopup","Popup","offset","setHTML","addTo","push","flyTo","getZoom","component"],"mappings":"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","file":"js/chunk-1015ffde.36153baa.js","sourcesContent":["export * from \"-!../../../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../cache-loader/dist/cjs.js??ref--0-0!../../../../vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=style&index=1&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mapbox-map\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.isAttemptingToScroll)?_c('div',{staticClass:\"mapbox-map__scroll-msg\"},[_c('p',[_vm._v(\" Hold Ctrl to Zoom \")])]):_vm._e()]),_c('div',{attrs:{\"id\":_vm.elemId}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop, Watch } from \"vue-property-decorator\";\r\nimport { Coordinate, MapSettings } from \"../../../types\";\r\nimport { Utils } from \"../../../util\";\r\nimport { Config } from \"../../../services/Config\";\r\n\r\nimport mapboxgl from \"mapbox-gl\";\r\nimport { Logger, LogLevel } from \"../../../services/Logger\";\r\n\r\nlet markers: mapboxgl.Marker[] = []\r\n\r\n@Component\r\nexport default class MapBoxMap extends Vue {\r\n @Prop()\r\n private readonly mapSettings!: MapSettings;\r\n\r\n private readonly elemId = `map_${Utils.GetGuid()}`;\r\n\r\n private map?: mapboxgl.Map;\r\n\r\n private isAttemptingToScroll = false;\r\n\r\n mounted() {\r\n mapboxgl.accessToken = Config.Website.Settings!.MapProvider.APIKey;\r\n\r\n this.mapSettings.Geocode().then(() => {\r\n let latMax = -90,\r\n latMin = 90,\r\n lngMax = -180,\r\n lngMin = 180;\r\n\r\n this.mapSettings.Markers.forEach((marker) => {\r\n\r\n if(marker.Coordinate!.Lat > latMax) latMax = marker.Coordinate!.Lat;\r\n if(marker.Coordinate!.Lat < latMin) latMin = marker.Coordinate!.Lat;\r\n\r\n if(marker.Coordinate!.Lon > lngMax) lngMax = marker.Coordinate!.Lon;\r\n if(marker.Coordinate!.Lon < lngMin) lngMin = marker.Coordinate!.Lon;\r\n });\r\n\r\n var bounds = new mapboxgl.LngLatBounds({\r\n lat: latMin,\r\n lng: lngMin\r\n }, {\r\n lat: latMax,\r\n lng: lngMax\r\n });\r\n\r\n Logger.Log(LogLevel.Debug, this.mapSettings.Markers, bounds);\r\n\r\n const mapSettings: mapboxgl.MapboxOptions = {\r\n container: this.elemId,\r\n style: Config.Website.Settings!.MapProvider.MapboxStyleURI,\r\n interactive: this.mapSettings.Interactive,\r\n zoom: this.mapSettings.Zoom,\r\n maxBounds: this.mapSettings.MaxBounds ? [[this.mapSettings.MaxBounds.SW.Lon, this.mapSettings.MaxBounds.SW.Lat], [this.mapSettings.MaxBounds.NE.Lon, this.mapSettings.MaxBounds.NE.Lat]] : undefined\r\n };\r\n\r\n if (this.mapSettings.Center) {\r\n mapSettings.center = { lat: this.mapSettings.Center.Lat, lng: this.mapSettings.Center.Lon };\r\n } else {\r\n mapSettings.fitBoundsOptions = { padding: this.mapSettings.Padding ?? 100, maxZoom: 15 };\r\n mapSettings.bounds = bounds;\r\n }\r\n\r\n\r\n this.map = new mapboxgl.Map(mapSettings);\r\n\r\n if (this.mapSettings.Interactive && !this.mapSettings.GreedyZoom && this.map) {\r\n this.map.scrollZoom.disable();\r\n\r\n let scrollDebounce: number | undefined = undefined;\r\n\r\n // Enable scroll zoom if we are using a touch device\r\n this.map.on('touchstart', () => {\r\n if (!this.map) return;\r\n\r\n this.map.scrollZoom.enable();\r\n });\r\n\r\n this.map.on(\"wheel\", event => {\r\n if (!this.map) return;\r\n\r\n if (event.originalEvent.ctrlKey) { // Check if CTRL key is pressed\r\n event.originalEvent.preventDefault(); // Prevent chrome/firefox default behavior\r\n if (!this.map.scrollZoom.isEnabled()) {\r\n this.map.scrollZoom.enable(); // Enable zoom only if it's disabled\r\n this.isAttemptingToScroll = false;\r\n }\r\n } else {\r\n clearTimeout(scrollDebounce);\r\n scrollDebounce = window.setTimeout(() => {\r\n this.isAttemptingToScroll = false;\r\n }, 1000);\r\n\r\n this.isAttemptingToScroll = true;\r\n\r\n if (this.map.scrollZoom.isEnabled()) this.map.scrollZoom.disable(); // Disable zoom only if it's enabled\r\n\r\n }\r\n });\r\n }\r\n\r\n if(this.mapSettings.Markers.length > 0) {\r\n this.drawMarkers();\r\n }\r\n\r\n this.map.on('moveend', () => {\r\n const bounds = this.map?.getBounds();\r\n\r\n const ne = bounds?.getNorthEast();\r\n const sw = bounds?.getSouthWest();\r\n\r\n if (ne && sw) {\r\n this.$emit('moved', {\r\n NE: {\r\n Lat: ne.lat,\r\n Lon: ne.lng,\r\n },\r\n SW: {\r\n Lat: sw.lat,\r\n Lon: sw.lng,\r\n },\r\n });\r\n }\r\n\r\n return true;\r\n });\r\n });\r\n }\r\n\r\n @Watch('mapSettings.Markers')\r\n drawMarkers() {\r\n markers.forEach((m) => {\r\n m.remove();\r\n });\r\n\r\n markers = [];\r\n\r\n this.mapSettings.Markers.forEach((marker) => {\r\n const markerDiv = document.createElement('div');\r\n\r\n markerDiv.classList.add('mapbox-marker');\r\n\r\n if(marker.Content) markerDiv.classList.add('mapbox-marker--has-content');\r\n\r\n if (marker.CustomRenderer) {\r\n markerDiv.classList.add('mapbox-marker--custom');\r\n\r\n marker.CustomRenderer(markerDiv, marker);\r\n } else {\r\n markerDiv.style.backgroundImage = `url(${marker.IconURL || '/assets/images/map-icon.svg'})`;\r\n\r\n if(marker.Title) {\r\n var titleDiv = document.createElement('div');\r\n\r\n titleDiv.classList.add('mapbox-marker__title');\r\n titleDiv.innerHTML = marker.Title;\r\n\r\n markerDiv.appendChild(titleDiv);\r\n };\r\n }\r\n\r\n var mapMarker = new mapboxgl.Marker(markerDiv)\r\n .setLngLat({ lat: marker.Coordinate!.Lat, lng: marker.Coordinate!.Lon });\r\n\r\n if(marker.Content) {\r\n mapMarker.setPopup(new mapboxgl.Popup({ offset: 25 }).setHTML(marker.Content));\r\n }\r\n\r\n mapMarker.addTo(this.map!);\r\n\r\n markers.push(mapMarker);\r\n });\r\n }\r\n\r\n public SetCenter(center: Coordinate, zoom: number) {\r\n if (this.map) {\r\n this.map.flyTo({\r\n center: {\r\n lat: center.Lat,\r\n lng: center.Lon,\r\n },\r\n zoom: zoom,\r\n });\r\n }\r\n }\r\n\r\n public GetZoom(): number {\r\n return this.map?.getZoom() ?? 4;\r\n }\r\n}\r\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--14-3!../../../../cache-loader/dist/cjs.js??ref--0-0!../../../../vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--14-3!../../../../cache-loader/dist/cjs.js??ref--0-0!../../../../vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./MapBoxMap.vue?vue&type=template&id=771c4309&scoped=true&\"\nimport script from \"./MapBoxMap.vue?vue&type=script&lang=ts&\"\nexport * from \"./MapBoxMap.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./MapBoxMap.vue?vue&type=style&index=0&id=771c4309&scoped=true&lang=css&\"\nimport style1 from \"./MapBoxMap.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"771c4309\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../cache-loader/dist/cjs.js??ref--0-0!../../../../vue-loader/lib/index.js??vue-loader-options!./MapBoxMap.vue?vue&type=style&index=0&id=771c4309&scoped=true&lang=css&\""],"sourceRoot":""}