web-mojo 2.2.65 → 2.2.67
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/CHANGELOG.md +14 -0
- package/dist/admin.cjs.js +1 -1
- package/dist/admin.cjs.js.map +1 -1
- package/dist/admin.es.js +1 -1
- package/dist/admin.es.js.map +1 -1
- package/dist/auth.cjs.js +1 -1
- package/dist/auth.es.js +1 -1
- package/dist/charts.cjs.js +1 -1
- package/dist/charts.es.js +1 -1
- package/dist/chunks/ChatView-Cfe0ZGvr.js +2 -0
- package/dist/chunks/ChatView-Cfe0ZGvr.js.map +1 -0
- package/dist/chunks/ChatView-DuQVFrCY.js +2 -0
- package/dist/chunks/ChatView-DuQVFrCY.js.map +1 -0
- package/dist/chunks/{Collection-1sPoIFvQ.js → Collection-BWKmydl5.js} +2 -2
- package/dist/chunks/{Collection-1sPoIFvQ.js.map → Collection-BWKmydl5.js.map} +1 -1
- package/dist/chunks/{Collection-DSBRXpwK.js → Collection-CmjTsmrP.js} +2 -2
- package/dist/chunks/{Collection-DSBRXpwK.js.map → Collection-CmjTsmrP.js.map} +1 -1
- package/dist/chunks/ContextMenu-8vTiZZQV.js +2 -0
- package/dist/chunks/ContextMenu-8vTiZZQV.js.map +1 -0
- package/dist/chunks/ContextMenu-DBw0WMTO.js +2 -0
- package/dist/chunks/ContextMenu-DBw0WMTO.js.map +1 -0
- package/dist/chunks/{DataView--nUWtq6r.js → DataView-BEovBggn.js} +2 -2
- package/dist/chunks/{DataView--nUWtq6r.js.map → DataView-BEovBggn.js.map} +1 -1
- package/dist/chunks/{DataView-CK3Z0TJH.js → DataView-DyJKgOn3.js} +2 -2
- package/dist/chunks/{DataView-CK3Z0TJH.js.map → DataView-DyJKgOn3.js.map} +1 -1
- package/dist/chunks/{Dialog-VoLlToMl.js → Dialog-DW7PHzUc.js} +2 -2
- package/dist/chunks/{Dialog-wBhTkeWg.js.map → Dialog-DW7PHzUc.js.map} +1 -1
- package/dist/chunks/{Dialog-wBhTkeWg.js → Dialog-jfBsXy5X.js} +2 -2
- package/dist/chunks/{Dialog-VoLlToMl.js.map → Dialog-jfBsXy5X.js.map} +1 -1
- package/dist/chunks/Files-C-ChBvr5.js +2 -0
- package/dist/chunks/Files-C-ChBvr5.js.map +1 -0
- package/dist/chunks/Files-DNbHDy43.js +2 -0
- package/dist/chunks/Files-DNbHDy43.js.map +1 -0
- package/dist/chunks/FormView-EoB_ZdIB.js +3 -0
- package/dist/chunks/FormView-EoB_ZdIB.js.map +1 -0
- package/dist/chunks/FormView-Q_lFA0nr.js +3 -0
- package/dist/chunks/FormView-Q_lFA0nr.js.map +1 -0
- package/dist/chunks/{ListView-6JQ6tRXs.js → ListView-BLFFK_Ir.js} +2 -2
- package/dist/chunks/{ListView-6JQ6tRXs.js.map → ListView-BLFFK_Ir.js.map} +1 -1
- package/dist/chunks/{ListView-DVStKiMi.js → ListView-CMZpwyyC.js} +2 -2
- package/dist/chunks/{ListView-DVStKiMi.js.map → ListView-CMZpwyyC.js.map} +1 -1
- package/dist/chunks/{MetricsCountryMapView-CnAEbUw_.js → MetricsCountryMapView-B0kWK-Js.js} +2 -2
- package/dist/chunks/{MetricsCountryMapView-CnAEbUw_.js.map → MetricsCountryMapView-B0kWK-Js.js.map} +1 -1
- package/dist/chunks/{MetricsCountryMapView-J067qrrt.js → MetricsCountryMapView-DuBKO7gz.js} +2 -2
- package/dist/chunks/{MetricsCountryMapView-J067qrrt.js.map → MetricsCountryMapView-DuBKO7gz.js.map} +1 -1
- package/dist/chunks/{MetricsMiniChartWidget-DtWq2_YJ.js → MetricsMiniChartWidget-BkMjI-gz.js} +2 -2
- package/dist/chunks/{MetricsMiniChartWidget-DtWq2_YJ.js.map → MetricsMiniChartWidget-BkMjI-gz.js.map} +1 -1
- package/dist/chunks/{MetricsMiniChartWidget-CtCN1rtt.js → MetricsMiniChartWidget-ChC5GGm6.js} +2 -2
- package/dist/chunks/{MetricsMiniChartWidget-CtCN1rtt.js.map → MetricsMiniChartWidget-ChC5GGm6.js.map} +1 -1
- package/dist/chunks/{PDFViewer-BNCyDElg.js → PDFViewer-iOqYpg-6.js} +2 -2
- package/dist/chunks/{PDFViewer-BNCyDElg.js.map → PDFViewer-iOqYpg-6.js.map} +1 -1
- package/dist/chunks/{PDFViewer-Di4OHAkv.js → PDFViewer-sFoyopz3.js} +2 -2
- package/dist/chunks/{PDFViewer-Di4OHAkv.js.map → PDFViewer-sFoyopz3.js.map} +1 -1
- package/dist/chunks/{Rest-Ds9e8tN8.js → Rest-B1eUyLX5.js} +2 -2
- package/dist/chunks/{Rest-Ds9e8tN8.js.map → Rest-B1eUyLX5.js.map} +1 -1
- package/dist/chunks/{Rest-DHbszkuP.js → Rest-BJ3Mvx1L.js} +2 -2
- package/dist/chunks/{Rest-DHbszkuP.js.map → Rest-BJ3Mvx1L.js.map} +1 -1
- package/dist/chunks/TokenManager-BYMKH_aW.js +2 -0
- package/dist/chunks/{TokenManager-D-9tqubS.js.map → TokenManager-BYMKH_aW.js.map} +1 -1
- package/dist/chunks/TokenManager-DhDUKmaw.js +2 -0
- package/dist/chunks/{TokenManager-8JM2qj_1.js.map → TokenManager-DhDUKmaw.js.map} +1 -1
- package/dist/chunks/User-BnlvMG5J.js +3 -0
- package/dist/chunks/User-BnlvMG5J.js.map +1 -0
- package/dist/chunks/User-DSqcOwPL.js +3 -0
- package/dist/chunks/User-DSqcOwPL.js.map +1 -0
- package/dist/chunks/{WebApp-JJAK0eNM.js → WebApp-B0m6JCjO.js} +2 -2
- package/dist/chunks/{WebApp-JJAK0eNM.js.map → WebApp-B0m6JCjO.js.map} +1 -1
- package/dist/chunks/{WebApp-BdJA4Uup.js → WebApp-Bsic6FPo.js} +2 -2
- package/dist/chunks/{WebApp-BdJA4Uup.js.map → WebApp-Bsic6FPo.js.map} +1 -1
- package/dist/chunks/{WebSocketClient-BoF7TV7i.js → WebSocketClient-Bh0Mmtje.js} +2 -2
- package/dist/chunks/{WebSocketClient-BoF7TV7i.js.map → WebSocketClient-Bh0Mmtje.js.map} +1 -1
- package/dist/chunks/{WebSocketClient-BxL2M7p0.js → WebSocketClient-CLgYPxWX.js} +2 -2
- package/dist/chunks/{WebSocketClient-BxL2M7p0.js.map → WebSocketClient-CLgYPxWX.js.map} +1 -1
- package/dist/chunks/{version-kTtMlfsq.js → version-BY7AsEkb.js} +2 -2
- package/dist/chunks/{version-kTtMlfsq.js.map → version-BY7AsEkb.js.map} +1 -1
- package/dist/chunks/{version-Cn26llLs.js → version-BdfRyQDm.js} +2 -2
- package/dist/chunks/{version-Cn26llLs.js.map → version-BdfRyQDm.js.map} +1 -1
- package/dist/css/web-mojo.css +1 -1
- package/dist/docit.cjs.js +1 -1
- package/dist/docit.cjs.js.map +1 -1
- package/dist/docit.es.js +1 -1
- package/dist/docit.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/lightbox.cjs.js +1 -1
- package/dist/lightbox.cjs.js.map +1 -1
- package/dist/lightbox.es.js +1 -1
- package/dist/lightbox.es.js.map +1 -1
- package/dist/map.cjs.js +1 -1
- package/dist/map.es.js +1 -1
- package/dist/timeline.cjs.js +1 -1
- package/dist/timeline.es.js +1 -1
- package/dist/web-mojo.lite.iife.js +1230 -2
- package/dist/web-mojo.lite.iife.js.map +1 -1
- package/dist/web-mojo.lite.iife.min.js +95 -74
- package/dist/web-mojo.lite.iife.min.js.map +1 -1
- package/package.json +8 -7
- package/dist/chunks/ChatView-D1-ev2qA.js +0 -2
- package/dist/chunks/ChatView-D1-ev2qA.js.map +0 -1
- package/dist/chunks/ChatView-DesGp57e.js +0 -2
- package/dist/chunks/ChatView-DesGp57e.js.map +0 -1
- package/dist/chunks/ContextMenu-CsQGpSrv.js +0 -3
- package/dist/chunks/ContextMenu-CsQGpSrv.js.map +0 -1
- package/dist/chunks/ContextMenu-dqFxitXY.js +0 -3
- package/dist/chunks/ContextMenu-dqFxitXY.js.map +0 -1
- package/dist/chunks/FormView-BQnvMheR.js +0 -3
- package/dist/chunks/FormView-BQnvMheR.js.map +0 -1
- package/dist/chunks/FormView-C7FnbmEI.js +0 -3
- package/dist/chunks/FormView-C7FnbmEI.js.map +0 -1
- package/dist/chunks/TokenManager-8JM2qj_1.js +0 -2
- package/dist/chunks/TokenManager-D-9tqubS.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{V as a}from"./Rest-DHbszkuP.js";class MapView extends a{constructor(a={}){super({className:"map-view",...a}),this.markers=a.markers||[],this.center=a.center||null,this.zoom=a.zoom||13,this.height=a.height||400,this.showZoomControl=!1!==a.showZoomControl,this.tileLayer=a.tileLayer||"osm",this.showLeafletBranding=!0===a.showLeafletBranding,this.showLayerControl=!0===a.showLayerControl,this.layerOptions=a.layerOptions||{osm:"OSM",satellite:"Satellite",terrain:"Terrain",dark:"Dark",light:"Light",watercolor:"Watercolor",bw:"B/W",streets:"Streets"},this.map=null,this.leafletMarkers=[],this._tileLayer=null,this.template='\n <div class="map-container">\n <div id="map-{{id}}" style="height: {{height}}px; width: 100%; border-radius: 0.375rem; border: 1px solid #dee2e6;"></div>\n </div>\n '}async onAfterRender(){await this.loadLeaflet(),await this.initializeMap()}async loadLeaflet(){if(window.L)return;const a=new Promise(a=>{const t=document.createElement("link");t.rel="stylesheet",t.href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css",t.onload=a,t.onerror=a,document.head.appendChild(t)}),t=new Promise((a,t)=>{const e=document.createElement("script");e.src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js",e.onload=a,e.onerror=t,document.head.appendChild(e)});await Promise.all([a,t])}getTileLayerUrl(){const a={osm:{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:"© OpenStreetMap contributors",maxZoom:19},satellite:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",attribution:"© Esri",maxZoom:19},terrain:{url:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",attribution:"© OpenTopoMap contributors",maxZoom:17},dark:{url:"https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20},light:{url:"https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20},watercolor:{url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg",attribution:"© Stadia Maps © Stamen Design © OpenStreetMap contributors",maxZoom:16},bw:{url:"https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20},streets:{url:"https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20}};return a[this.tileLayer]||a.osm}async initializeMap(){const a=this.element.querySelector(`#map-${this.id}`);if(!a||!window.L)return;let t=this.center;if(!t&&this.markers.length>0&&(t=[this.markers[0].lat,this.markers[0].lng]),t||(t=[0,0]),this.map=window.L.map(a,{center:t,zoom:this.zoom,zoomControl:this.showZoomControl}),this.map&&this.map.attributionControl&&!1===this.showLeafletBranding)try{this.map.attributionControl.setPrefix("")}catch(n){}const e=this.getTileLayerUrl();if(this._tileLayer=window.L.tileLayer(e.url,{attribution:e.attribution,maxZoom:e.maxZoom}).addTo(this.map),this.showLayerControl){const t=a.parentElement||this.element.querySelector(".map-container");if(t){t.style.position=t.style.position||"relative";const a=document.createElement("select");a.className="form-select form-select-sm",a.style.position="absolute",a.style.top="8px",a.style.right="8px",a.style.zIndex="1000",a.style.maxWidth="180px",a.setAttribute("aria-label","Map tile layer"),Object.entries(this.layerOptions||{}).forEach(([t,e])=>{const n=document.createElement("option");n.value=t,n.textContent=e,t===this.tileLayer&&(n.selected=!0),a.appendChild(n)}),a.addEventListener("change",()=>this.setTileLayer(a.value)),t.appendChild(a)}}this.addMarkers(this.markers),this.markers.length>1&&this.fitBounds(),setTimeout(()=>{this.map&&this.map.invalidateSize()},300)}addMarkers(a){this.map&&Array.isArray(a)&&a.forEach(a=>{const{lat:t,lng:e,popup:n,icon:l}=a;if(!t||!e)return;const i={};l&&(i.icon=window.L.icon(l));const s=window.L.marker([t,e],i).addTo(this.map);n&&s.bindPopup(n),this.leafletMarkers.push(s)})}fitBounds(){if(!this.map||0===this.leafletMarkers.length)return;const a=new window.L.featureGroup(this.leafletMarkers);this.map.fitBounds(a.getBounds().pad(.1))}updateMarkers(a){this.clearMarkers(),this.markers=a,this.addMarkers(a),a.length>1?this.fitBounds():1===a.length&&this.map.setView([a[0].lat,a[0].lng],this.zoom)}clearMarkers(){this.leafletMarkers.forEach(a=>{this.map.removeLayer(a)}),this.leafletMarkers=[]}setView(a,t,e=null){this.map&&this.map.setView([a,t],e||this.zoom)}setZoom(a){this.map&&this.map.setZoom(a)}setTileLayer(a){if(!this.map)return;const t=this.tileLayer;this.tileLayer=a||this.tileLayer;const e=this.getTileLayerUrl();try{this._tileLayer&&this.map.removeLayer(this._tileLayer)}catch(n){}this._tileLayer=window.L.tileLayer(e.url,{attribution:e.attribution,maxZoom:e.maxZoom}).addTo(this.map),this.tileLayer=a||t,setTimeout(()=>{try{this.map.invalidateSize()}catch(n){}},150)}async onBeforeDestroy(){this.map&&(this.map.remove(),this.map=null),await super.onBeforeDestroy()}static async showAsDialog(a={}){const t=new MapView(a),e={title:"Map View",header:!0,body:t,size:"lg",centered:!1,...a.dialogOptions||{}};await t.init(),await t.getApp().showDialog(e)}}class MapLibreView extends a{constructor(a={}){super({className:"maplibre-view",...a}),this.markers=a.markers||[],this.center=a.center||null,this.zoom=a.zoom||13,this.height=a.height||400,this.pitch=a.pitch||0,this.bearing=a.bearing||0,this.mapStyle=a.style||"streets",this.showNavigationControl=!1!==a.showNavigationControl,this.autoFitBounds=!1!==a.autoFitBounds,this.map=null,this.mapMarkers=[],this.pendingMarkers=[...this.markers],this.lineSources=a.lineSources||[],this.pendingLineData=/* @__PURE__ */new Map,this.template='\n <div class="maplibre-container">\n <div id="maplibre-{{id}}" style="height: {{height}}px; width: 100%; border-radius: 0.375rem; border: 1px solid #dee2e6;"></div>\n </div>\n '}async onAfterRender(){await this.loadMapLibre(),await this.initializeMap()}async loadMapLibre(){if(window.maplibregl)return;const a=document.createElement("link");return a.rel="stylesheet",a.href="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css",document.head.appendChild(a),new Promise((a,t)=>{const e=document.createElement("script");e.src="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js",e.onload=a,e.onerror=t,document.head.appendChild(e)})}getMapStyle(){const a={streets:"https://demotiles.maplibre.org/style.json",dark:{version:8,sources:{osm:{type:"raster",tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256,attribution:"© OpenStreetMap contributors"}},layers:[{id:"osm",type:"raster",source:"osm"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"},light:{version:8,sources:{osm:{type:"raster",tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256,attribution:"© OpenStreetMap contributors"}},layers:[{id:"osm",type:"raster",source:"osm"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"},satellite:{version:8,sources:{satellite:{type:"raster",tiles:["https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"],tileSize:256,attribution:"© Esri"}},layers:[{id:"satellite",type:"raster",source:"satellite"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"},terrain:{version:8,sources:{terrain:{type:"raster",tiles:["https://a.tile.opentopomap.org/{z}/{x}/{y}.png"],tileSize:256,attribution:"© OpenTopoMap contributors"}},layers:[{id:"terrain",type:"raster",source:"terrain"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"}};return a[this.mapStyle]||a.streets}async initializeMap(){const a=this.element.querySelector(`#maplibre-${this.id}`);if(!a||!window.maplibregl)return;let t=this.center;!t&&this.markers.length>0&&(t=[this.markers[0].lng,this.markers[0].lat]),t||(t=[0,0]),this.map=new window.maplibregl.Map({container:a,style:this.getMapStyle(),center:t,zoom:this.zoom,pitch:this.pitch,bearing:this.bearing}),this.showNavigationControl&&this.map.addControl(new window.maplibregl.NavigationControl,"top-right"),this.map.on("load",()=>{const a=this.pendingMarkers.length?this.pendingMarkers:this.markers;this.updateMarkers(a),this.lineSources.forEach(a=>this.addLineSource(a)),this.pendingLineData.forEach(a=>this.addLineSource(a)),this.pendingLineData.clear()})}addMarkers(a){this.map&&Array.isArray(a)?a.forEach(a=>{const{lng:t,lat:e,popup:n,color:l,icon:i,size:s}=a;if(!t||!e)return;const r=document.createElement("div");r.className="maplibre-marker";const o=Number(s)||30;r.style.width=`${o}px`,r.style.height=`${o}px`,r.style.borderRadius="50%",r.style.backgroundColor=l||"#3b82f6",r.style.border="3px solid white",r.style.boxShadow="0 2px 4px rgba(0,0,0,0.3)",r.style.cursor="pointer",r.style.display="flex",r.style.alignItems="center",r.style.justifyContent="center",i&&(r.innerHTML=`<i class="${i}" style="color: white;"></i>`);const m=new window.maplibregl.Marker({element:r}).setLngLat([t,e]).addTo(this.map);if(n){const a=new window.maplibregl.Popup({offset:25}).setHTML(n);m.setPopup(a)}this.mapMarkers.push(m)}):this.pendingMarkers=Array.isArray(a)?a:[]}fitBounds(){if(!this.map||0===this.markers.length)return;const a=new window.maplibregl.LngLatBounds;this.markers.forEach(t=>{a.extend([t.lng,t.lat])}),this.map.fitBounds(a,{padding:50,maxZoom:15})}updateMarkers(a){const t=Array.isArray(a)?a:[];this.markers=t,this.pendingMarkers=t,this.map&&(this.clearMarkers(),this.addMarkers(t),this.autoFitBounds&&t.length>1?this.fitBounds():1===t.length&&this.map&&this.map.flyTo({center:[t[0].lng,t[0].lat],zoom:this.zoom}))}clearMarkers(){this.mapMarkers.forEach(a=>{a.remove()}),this.mapMarkers=[]}addLineSource({id:a,data:t,paint:e,layout:n}){if(!a||!t)return;const l=`${a}-source`;this.map?(this.map.getLayer(a)&&this.map.removeLayer(a),this.map.getSource(l)&&this.map.removeSource(l),this.map.addSource(l,{type:"geojson",data:t}),this.map.addLayer({id:a,type:"line",source:l,paint:{"line-color":"#3b82f6","line-width":2,"line-opacity":.6,...e},layout:{"line-cap":"round","line-join":"round",...n}})):this.pendingLineData.set(a,{id:a,data:t,paint:e,layout:n})}updateLineSource(a,{data:t,paint:e,layout:n}={}){if(!a||!t)return;const l=`${a}-source`;this.map?this.map.getSource(l)?(this.map.getSource(l).setData(t),(e||n)&&(e&&Object.entries(e).forEach(([t,e])=>{this.map.setPaintProperty(a,t,e)}),n&&Object.entries(n).forEach(([t,e])=>{this.map.setLayoutProperty(a,t,e)}))):this.addLineSource({id:a,data:t,paint:e,layout:n}):this.pendingLineData.set(a,{id:a,data:t,paint:e,layout:n})}setView(a,t,e=null){this.map&&this.map.flyTo({center:[a,t],zoom:e||this.zoom})}setZoom(a){this.map&&this.map.setZoom(a)}setPitch(a){this.map&&this.map.setPitch(a)}setBearing(a){this.map&&this.map.setBearing(a)}async onBeforeDestroy(){this.map&&(this.map.remove(),this.map=null),await super.onBeforeDestroy()}}const t={AD:{name:"Andorra",lat:42.54859834854764,lng:1.5802243611232873},AE:{name:"United Arab Emirates",lat:24.18250292309135,lng:54.27920525789581},AF:{name:"Afghanistan",lat:34.13402601376932,lng:66.59216131095278},AG:{name:"Antigua and Barbuda",lat:17.07146759372967,lng:-61.78530823226373},AI:{name:"Anguilla",lat:18.222874004219086,lng:-63.06008343771806},AL:{name:"Albania",lat:41.14165894891656,lng:20.061082767269493},AM:{name:"Armenia",lat:40.17841274230679,lng:45.05490831965259},AO:{name:"Angola",lat:-12.167424062667942,lng:17.651768783079},AQ:{name:"Antarctica",lat:-77.16987521415838,lng:-177.56451613408842},AR:{name:"Argentina",lat:-35.697270518120085,lng:-64.53238503843076},AS:{name:"American Samoa",lat:-14.305711987770538,lng:-170.7007316174498},AT:{name:"Austria",lat:47.631858269895794,lng:13.797778364631036},AU:{name:"Australia",lat:-25.697337673983082,lng:134.02277170916162},AW:{name:"Aruba",lat:12.515625722992898,lng:-69.97564014284046},AZ:{name:"Azerbaijan",lat:40.3920509942049,lng:48.634592670644324},BA:{name:"Bosnia and Herzegovina",lat:44.14415356126429,lng:17.83467240787538},BB:{name:"Barbados",lat:13.183219369337529,lng:-59.557383949150285},BD:{name:"Bangladesh",lat:23.673728665121,lng:90.43212562608613},BE:{name:"Belgium",lat:50.6182138854095,lng:4.675010154696485},BF:{name:"Burkina Faso",lat:12.108709036312737,lng:-1.6932816211842325},BG:{name:"Bulgaria",lat:42.82043677302438,lng:25.251739122561908},BH:{name:"Bahrain",lat:26.04798501537066,lng:50.540695402276775},BI:{name:"Burundi",lat:-3.261251993278643,lng:29.88518227845293},BJ:{name:"Benin",lat:9.503013199615893,lng:2.305714528830206},BL:{name:"Saint Barthelemy",lat:17.90561691241738,lng:-62.83051610005156},BM:{name:"Bermuda",lat:32.315067430740726,lng:-64.7458500599169},BN:{name:"Brunei Darussalam",lat:4.543205889917609,lng:114.6430958360464},BO:{name:"Bolivia",lat:-16.7312488393574,lng:-64.45209597511206},BQ:{name:"Bonaire",lat:12.180844982440338,lng:-68.29350445958761},BQ:{name:"Saba",lat:17.632512616389718,lng:-63.23739481909494},BQ:{name:"Saint Eustatius",lat:17.4919042294197,lng:-62.978230589445026},BR:{name:"Brazil",lat:-11.524630416426652,lng:-54.355206608256424},BS:{name:"Bahamas",lat:24.72162633646784,lng:-78.07275370060313},BT:{name:"Bhutan",lat:27.42163933959824,lng:90.46716647173861},BV:{name:"Bouvet Island",lat:-54.42316679395248,lng:3.411969465057627},BW:{name:"Botswana",lat:-22.236609002062902,lng:23.85779956995608},BY:{name:"Belarus",lat:53.46791374543163,lng:27.964252054715104},BZ:{name:"Belize",lat:17.24252476647155,lng:-88.68273510023441},CA:{name:"Canada",lat:57.550480044655636,lng:-98.41680517868062},CC:{name:"Cocos Islands",lat:-12.171249450199545,lng:96.83688767323002},CD:{name:"Congo DRC",lat:-3.338629596207896,lng:23.419827574282188},CF:{name:"Central African Republic",lat:6.331390033944319,lng:20.520743419397256},CG:{name:"Congo",lat:-.7294391595233845,lng:14.879732849491393},CH:{name:"Switzerland",lat:46.73678128684938,lng:8.286928794895285},CI:{name:"Côte d'Ivoire",lat:7.536779279421307,lng:-5.571710194917734},CK:{name:"Cook Islands",lat:-21.222613253399842,lng:-159.78768870952257},CL:{name:"Chile",lat:-37.82938283049967,lng:-70.76863431739216},CM:{name:"Cameroon",lat:6.294168487480992,lng:12.948474142398263},CN:{name:"China",lat:38.07325481105728,lng:104.69113855849604},CO:{name:"Colombia",lat:4.187753877352739,lng:-72.6445066243485},CR:{name:"Costa Rica",lat:9.863467407406214,lng:-84.14673625701816},CU:{name:"Cuba",lat:21.476176522869448,lng:-79.69817857618705},CV:{name:"Cabo Verde",lat:15.076411518651643,lng:-23.63401005900474},CW:{name:"Curacao",lat:12.199996647939832,lng:-68.96939768599042},CX:{name:"Christmas Island",lat:-10.446440802183416,lng:105.70209512200549},CY:{name:"Cyprus",lat:35.11700416345239,lng:33.375346009199205},CZ:{name:"Czech Republic",lat:49.74917370930982,lng:15.383273292023533},DE:{name:"Germany",lat:51.08304539800482,lng:10.426171427430804},DJ:{name:"Djibouti",lat:11.750235727618804,lng:42.613496898789506},DK:{name:"Denmark",lat:56.00118817971057,lng:9.378670542409406},DM:{name:"Dominica",lat:15.429269860940513,lng:-61.360471946942994},DO:{name:"Dominican Republic",lat:18.77954818522993,lng:-70.43495198520012},DZ:{name:"Algeria",lat:28.350969744889056,lng:2.6558464719769135},EC:{name:"Ecuador",lat:-1.5642721388853116,lng:-78.4630326109714},EE:{name:"Estonia",lat:58.648108311231034,lng:25.916870250633806},EG:{name:"Egypt",lat:26.60517034450628,lng:30.240135435012338},ER:{name:"Eritrea",lat:15.005533147667684,lng:39.2672401449901},ES:{name:"Spain",lat:40.365008336683836,lng:-3.6516251409956983},ES:{name:"Canarias",lat:28.297665106525546,lng:-16.53799441021647},ET:{name:"Ethiopia",lat:8.729389557048396,lng:39.914902886544276},FI:{name:"Finland",lat:65.01578959749911,lng:25.65738433454702},FJ:{name:"Fiji",lat:-17.822470952336204,lng:177.98144613732626},FK:{name:"Falkland Islands",lat:-51.75901312766726,lng:-58.746646363799854},FM:{name:"Micronesia",lat:6.8789448129255435,lng:158.2291899444527},FO:{name:"Faroe Islands",lat:62.130896281495346,lng:-6.9811060913122835},FR:{name:"France",lat:46.6423682169416,lng:2.1940236627886227},GA:{name:"Gabon",lat:-.628448459921234,lng:11.839410898545754},GB:{name:"United Kingdom",lat:53.97844735080214,lng:-2.852943909329258},GD:{name:"Grenada",lat:12.112926656338907,lng:-61.67937937204098},GE:{name:"Georgia",lat:42.17986277737226,lng:43.378866534112234},GF:{name:"French Guiana",lat:3.857429742497078,lng:-53.32232307156624},GG:{name:"Guernsey",lat:49.45870771378872,lng:-2.576392582891568},GH:{name:"Ghana",lat:7.94530467243628,lng:-1.219233362526581},GI:{name:"Gibraltar",lat:36.14022671336082,lng:-5.345549484594358},GL:{name:"Greenland",lat:74.16847218965994,lng:-42.07567788066985},GM:{name:"Gambia",lat:13.428617959189328,lng:-15.383380385869662},GN:{name:"Guinea",lat:10.255986541378112,lng:-10.986948848040218},GP:{name:"Guadeloupe",lat:16.24420002705553,lng:-61.54382262282755},GQ:{name:"Equatorial Guinea",lat:1.5954643936590733,lng:10.425456672353823},GR:{name:"Greece",lat:39.42012261727978,lng:23.110368936161876},GS:{name:"South Georgia and South Sandwich Islands",lat:-54.37666443862139,lng:-36.77509575898928},GT:{name:"Guatemala",lat:15.820878515352684,lng:-90.31219349119617},GU:{name:"Guam",lat:13.445430479945276,lng:144.78024458298802},GW:{name:"Guinea-Bissau",lat:11.980075324820504,lng:-14.980186756910847},GY:{name:"Guyana",lat:4.68211981385056,lng:-58.91352612754667},HM:{name:"Heard Island and McDonald Islands",lat:-53.084170035513736,lng:73.49298560844045},HN:{name:"Honduras",lat:14.740370695750006,lng:-86.49251679006962},HR:{name:"Croatia",lat:44.91192100856702,lng:16.625761129583374},HT:{name:"Haiti",lat:18.883520486983567,lng:-72.89291379842},HU:{name:"Hungary",lat:47.22527332486294,lng:19.39620048366142},ID:{name:"Indonesia",lat:.15591979959037652,lng:113.96538246847302},IE:{name:"Ireland",lat:53.30489539816495,lng:-8.241128545554096},IL:{name:"Israel",lat:31.513542220043195,lng:35.027923472437024},IM:{name:"Isle of Man",lat:54.22855301008011,lng:-4.532995055468449},IN:{name:"India",lat:23.586300567746722,lng:81.17300408530181},IO:{name:"British Indian Ocean Territory",lat:-7.323548444385743,lng:72.43501618476016},IQ:{name:"Iraq",lat:33.105075667527906,lng:43.832529181056884},IR:{name:"Iran",lat:32.906023742890056,lng:54.237077001065444},IS:{name:"Iceland",lat:65.12360920205514,lng:-19.05682967106099},IT:{name:"Italy",lat:42.98201127614267,lng:12.763657166123137},JE:{name:"Jersey",lat:49.215396925724306,lng:-2.1291601162653575},JM:{name:"Jamaica",lat:18.12207889341651,lng:-77.30358894542778},JO:{name:"Jordan",lat:31.387064884449156,lng:36.95728884547246},JP:{name:"Japan",lat:36.76738832597829,lng:137.46934234351835},KE:{name:"Kenya",lat:.6899182318376179,lng:37.95309411262371},KG:{name:"Kyrgyzstan",lat:41.35698905438358,lng:74.17532903468319},KH:{name:"Cambodia",lat:12.699186865507775,lng:105.03973078680701},KI:{name:"Kiribati",lat:1.8676673749241066,lng:-157.39024189323504},KM:{name:"Comoros",lat:-11.658861474508491,lng:43.34826587429403},KN:{name:"Saint Kitts and Nevis",lat:17.314736299587768,lng:-62.74560385895787},KP:{name:"North Korea",lat:40.19198091470839,lng:127.3379805653744},KR:{name:"South Korea",lat:36.402386712544114,lng:127.76224551357649},KW:{name:"Kuwait",lat:29.281360965443092,lng:47.56311109320184},KY:{name:"Cayman Islands",lat:19.311231805620288,lng:-81.25203208977878},KZ:{name:"Kazakhstan",lat:47.641465195176835,lng:66.3759193479301},LA:{name:"Laos",lat:18.117282736873282,lng:103.76375899026448},LB:{name:"Lebanon",lat:33.91160170722086,lng:35.89651946324749},LC:{name:"Saint Lucia",lat:13.895749185129906,lng:-60.9689510935251},LI:{name:"Liechtenstein",lat:47.14627562133036,lng:9.547674672376376},LK:{name:"Sri Lanka",lat:7.696630939329944,lng:80.66931169770622},LR:{name:"Liberia",lat:6.52012979398834,lng:-9.258988935497618},LS:{name:"Lesotho",lat:-29.60168116924817,lng:28.24475317864227},LT:{name:"Lithuania",lat:55.29437393417175,lng:23.946021605013534},LU:{name:"Luxembourg",lat:49.77523454542369,lng:6.103230338458876},LV:{name:"Latvia",lat:56.813853047554154,lng:24.693671325654403},LY:{name:"Libya",lat:27.202915771690794,lng:17.91133392454237},MA:{name:"Morocco",lat:28.687598134979325,lng:-8.817212587250811},MC:{name:"Monaco",lat:43.74798224995656,lng:7.412820873271196},MD:{name:"Moldova",lat:47.0725674580696,lng:28.391111865941348},ME:{name:"Montenegro",lat:42.73694835210454,lng:19.29505087156758},MF:{name:"Saint Martin",lat:18.078012113224464,lng:-63.06678525361946},MG:{name:"Madagascar",lat:-19.04163612493041,lng:46.68493466832544},MH:{name:"Marshall Islands",lat:7.307929900994344,lng:168.72016025351076},MK:{name:"North Macedonia",lat:41.59402890143112,lng:21.70998923872772},ML:{name:"Mali",lat:17.168146208584837,lng:-4.346399841781153},MM:{name:"Myanmar",lat:19.901227931399873,lng:97.08892285397344},MN:{name:"Mongolia",lat:47.08644454604851,lng:103.3987360327455},MP:{name:"Northern Mariana Islands",lat:15.178063516432115,lng:145.74119737203134},MQ:{name:"Martinique",lat:14.642697353597645,lng:-61.01432380875083},MR:{name:"Mauritania",lat:20.466731212820022,lng:-10.495079045035716},MS:{name:"Montserrat",lat:16.735363391460357,lng:-62.18693281256255},MT:{name:"Malta",lat:35.890522650899314,lng:14.441922442508494},MU:{name:"Mauritius",lat:-20.28142317475198,lng:57.56415671066546},MV:{name:"Maldives",lat:-.6065577168009924,lng:73.10076245140479},MW:{name:"Malawi",lat:-13.128986464184024,lng:34.23441182298881},MX:{name:"Mexico",lat:23.87436068093592,lng:-101.55399731630118},MY:{name:"Malaysia",lat:3.6716608556387857,lng:114.63330303992869},MZ:{name:"Mozambique",lat:-17.525230309488748,lng:35.208577031290176},NA:{name:"Namibia",lat:-21.90858163281473,lng:18.16451345845268},NC:{name:"New Caledonia",lat:-21.33003372660827,lng:165.50767040438612},NE:{name:"Niger",lat:17.08105392407292,lng:8.86863247002646},NF:{name:"Norfolk Island",lat:-29.037654445046282,lng:167.95259597483337},NG:{name:"Nigeria",lat:9.61029352034213,lng:8.147714845256194},NI:{name:"Nicaragua",lat:12.893566631930554,lng:-85.016088327669},NL:{name:"Netherlands",lat:52.134054128923886,lng:5.554136426128487},NO:{name:"Norway",lat:64.97775882947745,lng:16.670259272390894},NP:{name:"Nepal",lat:28.300920699755657,lng:84.1338898313567},NR:{name:"Nauru",lat:-.5221021440668993,lng:166.92937633139178},NU:{name:"Niue",lat:-19.05230921680393,lng:-169.86878106699083},NZ:{name:"New Zealand",lat:-43.82765432544426,lng:170.69035541428696},OM:{name:"Oman",lat:20.7242833183209,lng:55.841088119829},PA:{name:"Panama",lat:8.439536749576892,lng:-80.14428761482796},PE:{name:"Peru",lat:-8.522717984240291,lng:-74.11416196781884},PF:{name:"French Polynesia",lat:-17.674684080120677,lng:-149.40041671099763},PG:{name:"Papua New Guinea",lat:-7.156912819152135,lng:144.8348942994695},PH:{name:"Philippines",lat:15.586542251094242,lng:121.82208941416745},PK:{name:"Pakistan",lat:30.116188371410882,lng:69.08835090769651},PL:{name:"Poland",lat:52.06848055692473,lng:19.43573279234468},PM:{name:"Saint Pierre and Miquelon",lat:46.95153913615198,lng:-56.32465353437558},PN:{name:"Pitcairn",lat:-24.366121747565458,lng:-128.3149848627581},PR:{name:"Puerto Rico",lat:18.216224086610914,lng:-66.49425339593509},PS:{name:"Palestinian Territory",lat:31.930818736453883,lng:35.24251184154588},PT:{name:"Portugal",lat:39.67529214702138,lng:-7.933662183874006},PW:{name:"Palau",lat:7.534775852547396,lng:134.57965086721052},PY:{name:"Paraguay",lat:-23.42190559259428,lng:-58.38906357428651},QA:{name:"Qatar",lat:25.318528486425386,lng:51.19794918743203},RE:{name:"Réunion",lat:-21.119825460665105,lng:55.54393506194689},RO:{name:"Romania",lat:45.82454894397586,lng:25.094158201563292},RS:{name:"Serbia",lat:44.02679870131969,lng:20.85677444395745},RU:{name:"Russian Federation",lat:59.039434214106194,lng:98.6704990698032},RW:{name:"Rwanda",lat:-2.014687460047154,lng:29.919439681764082},SA:{name:"Saudi Arabia",lat:24.136038144757897,lng:44.600958178225596},SB:{name:"Solomon Islands",lat:-9.613104734596515,lng:160.16475795033884},SC:{name:"Seychelles",lat:-4.660002318822744,lng:55.47250789595527},SD:{name:"Sudan",lat:15.67060230984256,lng:29.951458283594064},SE:{name:"Sweden",lat:62.73420986108448,lng:17.062431988004956},SG:{name:"Singapore",lat:1.3528251890006349,lng:103.81025757634053},SH:{name:"Saint Helena",lat:-15.962963318340398,lng:-5.717391620813109},SI:{name:"Slovenia",lat:46.13759229564504,lng:14.890636899973781},SJ:{name:"Svalbard",lat:78.57318936469626,lng:16.036378851505283},SK:{name:"Slovakia",lat:48.69808390520484,lng:19.581015362490966},SL:{name:"Sierra Leone",lat:8.561330384750587,lng:-11.78656695731115},SM:{name:"San Marino",lat:43.942820729097896,lng:12.461278349581722},SN:{name:"Senegal",lat:14.228861491763402,lng:-14.610875368352305},SO:{name:"Somalia",lat:6.524534573103924,lng:45.40037867243972},SR:{name:"Suriname",lat:4.098723595920171,lng:-55.855514311561286},SS:{name:"South Sudan",lat:7.657782041763295,lng:30.3851856901788},ST:{name:"Sao Tome and Principe",lat:.22744704294793774,lng:6.606158796857607},SV:{name:"El Salvador",lat:13.758041517055418,lng:-88.85911489238985},SX:{name:"Sint Maarten",lat:18.03942608463078,lng:-63.06883135915303},SY:{name:"Syria",lat:35.09751106058316,lng:38.5117323139514},SZ:{name:"Eswatini",lat:-26.562540935608702,lng:31.510685746082007},TC:{name:"Turks and Caicos Islands",lat:21.799865427483745,lng:-71.74058946811508},TD:{name:"Chad",lat:15.283493546654503,lng:18.427113900363025},TF:{name:"Juan De Nova Island",lat:-17.06449193630804,lng:42.74374761089645},TF:{name:"French Southern Territories",lat:-49.26329687105643,lng:69.54686984724839},TF:{name:"Glorioso Islands",lat:-11.566224871643417,lng:47.290948081543384},TG:{name:"Togo",lat:8.660743037717811,lng:.8990857571109684},TH:{name:"Thailand",lat:13.66222784745538,lng:101.08675116214552},TJ:{name:"Tajikistan",lat:38.56933138382972,lng:70.94215281065698},TK:{name:"Tokelau",lat:-9.195174767256544,lng:-171.85265950722743},TL:{name:"Timor-Leste",lat:-8.809894630601962,lng:125.95024049562659},TM:{name:"Turkmenistan",lat:39.06069118001429,lng:58.4577357627054},TN:{name:"Tunisia",lat:34.08636179565723,lng:9.65587551697984},TO:{name:"Tonga",lat:-21.15927212823853,lng:-175.20415878511247},TR:{name:"Turkey",lat:38.93207363123396,lng:35.56886764076691},TT:{name:"Trinidad and Tobago",lat:10.415515638298093,lng:-61.37236579976247},TV:{name:"Tuvalu",lat:-8.514701506447222,lng:179.217833977593},TZ:{name:"Tanzania",lat:-6.355794440041147,lng:34.81832206060381},UA:{name:"Ukraine",lat:48.657532515563794,lng:31.27377208442636},UG:{name:"Uganda",lat:1.2821729218416205,lng:32.34371768463123},UM:{name:"United States Minor Outlying Islands",lat:19.302045812215958,lng:166.63800339749642},US:{name:"United States",lat:38.8208089190304,lng:-96.33161660829639},UY:{name:"Uruguay",lat:-32.78195043831093,lng:-56.01919523458085},UZ:{name:"Uzbekistan",lat:41.4879065244633,lng:63.8548297593985},VA:{name:"Vatican City",lat:41.90402351316735,lng:12.451312917026133},VC:{name:"Saint Vincent and the Grenadines",lat:13.254808122970651,lng:-61.193766354393034},VE:{name:"Venezuela",lat:7.148324760507107,lng:-66.36492135985132},VG:{name:"British Virgin Islands",lat:18.42195819619707,lng:-64.62406519257699},VI:{name:"US Virgin Islands",lat:17.738009708772523,lng:-64.76155341409797},VN:{name:"Vietnam",lat:16.517347170839393,lng:105.91338832758704},VU:{name:"Vanuatu",lat:-15.189132121699332,lng:166.84912735669738},WF:{name:"Wallis and Futuna",lat:-14.283442307826677,lng:-178.12735555777184},WS:{name:"Samoa",lat:-13.634252953274622,lng:-172.44107655740137},YE:{name:"Yemen",lat:16.001392616307445,lng:47.46815793206386},YT:{name:"Mayotte",lat:-12.824468416301052,lng:45.128142327031064},ZA:{name:"South Africa",lat:-28.55361930679731,lng:24.75252746489084},ZM:{name:"Zambia",lat:-13.162832953186246,lng:27.75521363430896},ZW:{name:"Zimbabwe",lat:-18.92700121981475,lng:29.717829640720844}};class MetricsCountryMapView extends a{constructor(a={}){const t=a.height||320;super({className:"metrics-country-map-view",...a}),this.endpoint=a.endpoint||"/api/metrics/fetch",this.account=a.account||"global",this.category=a.category||null,this.slugs=a.slugs||null,this.granularity=a.granularity||"days",this.maxCountries=a.maxCountries||12,this.metricLabel=a.metricLabel||"Events",this.height=t,this.mapStyle=a.mapStyle||"dark",this.mapOptions=a.mapOptions||{},this.showRoutes=!1!==a.showRoutes,this.routeOrigin=a.routeOrigin||{lng:-77.346,lat:38.958,name:"Reston, VA"},this._refreshing=!1}async getTemplate(){return`\n <div class="metrics-country-map">\n <div class="map-container mb-3" data-container="${this.id}-map" style="height:${this.height}px"></div>\n <div class="map-legend small" data-region="legend"></div>\n </div>\n `}async onInit(){this.statusEl=document.createElement("div"),this.statusEl.className="text-muted small px-3 pb-2",this.element.appendChild(this.statusEl),this.mapView=new MapLibreView({containerId:`${this.id}-map`,height:this.height,style:this.mapStyle,zoom:this.mapOptions.zoom??1.3,center:this.mapOptions.center||[10,20],pitch:this.mapOptions.pitch??20,bearing:this.mapOptions.bearing??0,showNavigationControl:this.mapOptions.showNavigationControl??!0,autoFitBounds:this.mapOptions.autoFitBounds??!1}),this.addChild(this.mapView),await this.refresh()}async refresh(){if(!this._refreshing){this._refreshing=!0,this.setStatus("Loading hotspots…");try{const a=await this.fetchMetrics();await this.applyMetrics(a),this.setStatus("")}catch(a){console.error("MetricsCountryMapView refresh error",a),this.setStatus("Unable to load country metrics.")}finally{this._refreshing=!1}}}async fetchMetrics(){const a=this.getApp()?.rest;if(!a)throw new Error("REST client unavailable");const t={account:this.account,granularity:this.granularity,with_labels:!0};if(this.category&&(t.category=this.category),this.slugs){const a=Array.isArray(this.slugs)?this.slugs:[this.slugs];t["slugs[]"]=a}const e=await a.GET(this.endpoint,t);if(!e.success||!e.data?.status)throw new Error(e.data?.error||"Metrics API error");return e.data.data}async applyMetrics(a){const e=a?.data||{},n=a?.labels||[],l=[];if(Object.entries(e).forEach(([a,e])=>{const n=e.reduce((a,t)=>a+(Number(t)||0),0);if(!n)return;const i=t[a.toUpperCase()];i&&l.push({code:a.toUpperCase(),total:n,values:e,centroid:i})}),!l.length)return this.mapView.updateMarkers([]),this.renderLegend([]),void this.setStatus("No country data available for the selected range.");l.sort((a,t)=>t.total-a.total);const i=l.slice(0,this.maxCountries),s=i[0]?.total||1,r=i.map(a=>{const t=a.total/s,e=Math.round(18+24*t);return{lng:a.centroid.lng,lat:a.centroid.lat,size:e,color:this.getMarkerColor(t),popup:`\n <div class="text-center">\n <strong>${a.centroid.name}</strong><br/>\n <span class="text-muted">${a.total.toLocaleString()} ${this.metricLabel}</span>\n </div>\n `}});this.showRoutes&&this.routeOrigin?.lng&&this.routeOrigin?.lat&&r.push({lng:this.routeOrigin.lng,lat:this.routeOrigin.lat,size:26,color:"#0d6efd",icon:"bi bi-broadcast-pin",popup:`\n <div class="text-center">\n <strong>${this.routeOrigin.name||"Operations Hub"}</strong><br/>\n <span class="text-muted">Origin</span>\n </div>\n `}),this.mapView.updateMarkers(r),this.renderLegend(i,n),this.showRoutes&&this.renderRoutes(i,s)}getMarkerColor(a){const t=[255,193,7],e=[32,201,151].map((e,n)=>Math.round(e+(t[n]-e)*a));return`rgba(${e[0]}, ${e[1]}, ${e[2]}, 0.9)`}renderLegend(a){const t=this.element.querySelector('[data-region="legend"]');if(!t)return;if(!a.length)return void(t.innerHTML="");const e=a[0]?.total||1,n=a.map(a=>{const t=(a.total/e*100).toFixed(0);return`\n <div class="d-flex justify-content-between align-items-center py-1 border-top">\n <div>\n <span class="fw-semibold">${a.centroid.name}</span>\n <span class="text-muted ms-1">(${a.code})</span>\n </div>\n <div class="text-end">\n <div class="fw-semibold">${a.total.toLocaleString()}</div>\n <small class="text-muted">${t}% of top</small>\n </div>\n </div>\n `}).join("");t.innerHTML=n}renderRoutes(a,t){const e=this.routeOrigin||null;if(!(e&&e.lng&&e.lat&&this.mapView))return;const n={type:"FeatureCollection",features:a.map(a=>({type:"Feature",geometry:{type:"LineString",coordinates:[[e.lng,e.lat],[a.centroid.lng,a.centroid.lat]]},properties:{total:a.total,intensity:a.total/t}}))};this.mapView.lineSources=this.mapView.lineSources.filter(a=>a.id!==`${this.id}-routes`),this.mapView.updateLineSource(`${this.id}-routes`,{data:n,paint:{"line-color":["interpolate",["linear"],["get","intensity"],0,"rgba(32, 201, 151, 0.6)",1,"rgba(255, 193, 7, 0.95)"],"line-width":["interpolate",["linear"],["get","intensity"],0,1.75,1,6],"line-opacity":["interpolate",["linear"],["get","intensity"],0,.45,1,.95]}})}setStatus(a){this.statusEl&&(this.statusEl.textContent=a||"",this.statusEl.style.display=a?"block":"none")}}export{MapView as M,MetricsCountryMapView as a,MapLibreView as b};
|
|
2
|
-
//# sourceMappingURL=MetricsCountryMapView-
|
|
1
|
+
import{V as a}from"./Rest-BJ3Mvx1L.js";class MapView extends a{constructor(a={}){super({className:"map-view",...a}),this.markers=a.markers||[],this.center=a.center||null,this.zoom=a.zoom||13,this.height=a.height||400,this.showZoomControl=!1!==a.showZoomControl,this.tileLayer=a.tileLayer||"osm",this.showLeafletBranding=!0===a.showLeafletBranding,this.showLayerControl=!0===a.showLayerControl,this.layerOptions=a.layerOptions||{osm:"OSM",satellite:"Satellite",terrain:"Terrain",dark:"Dark",light:"Light",watercolor:"Watercolor",bw:"B/W",streets:"Streets"},this.map=null,this.leafletMarkers=[],this._tileLayer=null,this.template='\n <div class="map-container">\n <div id="map-{{id}}" style="height: {{height}}px; width: 100%; border-radius: 0.375rem; border: 1px solid #dee2e6;"></div>\n </div>\n '}async onAfterRender(){await this.loadLeaflet(),await this.initializeMap()}async loadLeaflet(){if(window.L)return;const a=new Promise(a=>{const t=document.createElement("link");t.rel="stylesheet",t.href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css",t.onload=a,t.onerror=a,document.head.appendChild(t)}),t=new Promise((a,t)=>{const e=document.createElement("script");e.src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js",e.onload=a,e.onerror=t,document.head.appendChild(e)});await Promise.all([a,t])}getTileLayerUrl(){const a={osm:{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:"© OpenStreetMap contributors",maxZoom:19},satellite:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",attribution:"© Esri",maxZoom:19},terrain:{url:"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",attribution:"© OpenTopoMap contributors",maxZoom:17},dark:{url:"https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20},light:{url:"https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20},watercolor:{url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg",attribution:"© Stadia Maps © Stamen Design © OpenStreetMap contributors",maxZoom:16},bw:{url:"https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20},streets:{url:"https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png",attribution:"© OpenStreetMap contributors © CARTO",maxZoom:20}};return a[this.tileLayer]||a.osm}async initializeMap(){const a=this.element.querySelector(`#map-${this.id}`);if(!a||!window.L)return;let t=this.center;if(!t&&this.markers.length>0&&(t=[this.markers[0].lat,this.markers[0].lng]),t||(t=[0,0]),this.map=window.L.map(a,{center:t,zoom:this.zoom,zoomControl:this.showZoomControl}),this.map&&this.map.attributionControl&&!1===this.showLeafletBranding)try{this.map.attributionControl.setPrefix("")}catch(n){}const e=this.getTileLayerUrl();if(this._tileLayer=window.L.tileLayer(e.url,{attribution:e.attribution,maxZoom:e.maxZoom}).addTo(this.map),this.showLayerControl){const t=a.parentElement||this.element.querySelector(".map-container");if(t){t.style.position=t.style.position||"relative";const a=document.createElement("select");a.className="form-select form-select-sm",a.style.position="absolute",a.style.top="8px",a.style.right="8px",a.style.zIndex="1000",a.style.maxWidth="180px",a.setAttribute("aria-label","Map tile layer"),Object.entries(this.layerOptions||{}).forEach(([t,e])=>{const n=document.createElement("option");n.value=t,n.textContent=e,t===this.tileLayer&&(n.selected=!0),a.appendChild(n)}),a.addEventListener("change",()=>this.setTileLayer(a.value)),t.appendChild(a)}}this.addMarkers(this.markers),this.markers.length>1&&this.fitBounds(),setTimeout(()=>{this.map&&this.map.invalidateSize()},300)}addMarkers(a){this.map&&Array.isArray(a)&&a.forEach(a=>{const{lat:t,lng:e,popup:n,icon:l}=a;if(!t||!e)return;const i={};l&&(i.icon=window.L.icon(l));const s=window.L.marker([t,e],i).addTo(this.map);n&&s.bindPopup(n),this.leafletMarkers.push(s)})}fitBounds(){if(!this.map||0===this.leafletMarkers.length)return;const a=new window.L.featureGroup(this.leafletMarkers);this.map.fitBounds(a.getBounds().pad(.1))}updateMarkers(a){this.clearMarkers(),this.markers=a,this.addMarkers(a),a.length>1?this.fitBounds():1===a.length&&this.map.setView([a[0].lat,a[0].lng],this.zoom)}clearMarkers(){this.leafletMarkers.forEach(a=>{this.map.removeLayer(a)}),this.leafletMarkers=[]}setView(a,t,e=null){this.map&&this.map.setView([a,t],e||this.zoom)}setZoom(a){this.map&&this.map.setZoom(a)}setTileLayer(a){if(!this.map)return;const t=this.tileLayer;this.tileLayer=a||this.tileLayer;const e=this.getTileLayerUrl();try{this._tileLayer&&this.map.removeLayer(this._tileLayer)}catch(n){}this._tileLayer=window.L.tileLayer(e.url,{attribution:e.attribution,maxZoom:e.maxZoom}).addTo(this.map),this.tileLayer=a||t,setTimeout(()=>{try{this.map.invalidateSize()}catch(n){}},150)}async onBeforeDestroy(){this.map&&(this.map.remove(),this.map=null),await super.onBeforeDestroy()}static async showAsDialog(a={}){const t=new MapView(a),e={title:"Map View",header:!0,body:t,size:"lg",centered:!1,...a.dialogOptions||{}};await t.init(),await t.getApp().showDialog(e)}}class MapLibreView extends a{constructor(a={}){super({className:"maplibre-view",...a}),this.markers=a.markers||[],this.center=a.center||null,this.zoom=a.zoom||13,this.height=a.height||400,this.pitch=a.pitch||0,this.bearing=a.bearing||0,this.mapStyle=a.style||"streets",this.showNavigationControl=!1!==a.showNavigationControl,this.autoFitBounds=!1!==a.autoFitBounds,this.map=null,this.mapMarkers=[],this.pendingMarkers=[...this.markers],this.lineSources=a.lineSources||[],this.pendingLineData=/* @__PURE__ */new Map,this.template='\n <div class="maplibre-container">\n <div id="maplibre-{{id}}" style="height: {{height}}px; width: 100%; border-radius: 0.375rem; border: 1px solid #dee2e6;"></div>\n </div>\n '}async onAfterRender(){await this.loadMapLibre(),await this.initializeMap()}async loadMapLibre(){if(window.maplibregl)return;const a=document.createElement("link");return a.rel="stylesheet",a.href="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css",document.head.appendChild(a),new Promise((a,t)=>{const e=document.createElement("script");e.src="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js",e.onload=a,e.onerror=t,document.head.appendChild(e)})}getMapStyle(){const a={streets:"https://demotiles.maplibre.org/style.json",dark:{version:8,sources:{osm:{type:"raster",tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256,attribution:"© OpenStreetMap contributors"}},layers:[{id:"osm",type:"raster",source:"osm"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"},light:{version:8,sources:{osm:{type:"raster",tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256,attribution:"© OpenStreetMap contributors"}},layers:[{id:"osm",type:"raster",source:"osm"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"},satellite:{version:8,sources:{satellite:{type:"raster",tiles:["https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"],tileSize:256,attribution:"© Esri"}},layers:[{id:"satellite",type:"raster",source:"satellite"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"},terrain:{version:8,sources:{terrain:{type:"raster",tiles:["https://a.tile.opentopomap.org/{z}/{x}/{y}.png"],tileSize:256,attribution:"© OpenTopoMap contributors"}},layers:[{id:"terrain",type:"raster",source:"terrain"}],glyphs:"https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf"}};return a[this.mapStyle]||a.streets}async initializeMap(){const a=this.element.querySelector(`#maplibre-${this.id}`);if(!a||!window.maplibregl)return;let t=this.center;!t&&this.markers.length>0&&(t=[this.markers[0].lng,this.markers[0].lat]),t||(t=[0,0]),this.map=new window.maplibregl.Map({container:a,style:this.getMapStyle(),center:t,zoom:this.zoom,pitch:this.pitch,bearing:this.bearing}),this.showNavigationControl&&this.map.addControl(new window.maplibregl.NavigationControl,"top-right"),this.map.on("load",()=>{const a=this.pendingMarkers.length?this.pendingMarkers:this.markers;this.updateMarkers(a),this.lineSources.forEach(a=>this.addLineSource(a)),this.pendingLineData.forEach(a=>this.addLineSource(a)),this.pendingLineData.clear()})}addMarkers(a){this.map&&Array.isArray(a)?a.forEach(a=>{const{lng:t,lat:e,popup:n,color:l,icon:i,size:s}=a;if(!t||!e)return;const r=document.createElement("div");r.className="maplibre-marker";const o=Number(s)||30;r.style.width=`${o}px`,r.style.height=`${o}px`,r.style.borderRadius="50%",r.style.backgroundColor=l||"#3b82f6",r.style.border="3px solid white",r.style.boxShadow="0 2px 4px rgba(0,0,0,0.3)",r.style.cursor="pointer",r.style.display="flex",r.style.alignItems="center",r.style.justifyContent="center",i&&(r.innerHTML=`<i class="${i}" style="color: white;"></i>`);const m=new window.maplibregl.Marker({element:r}).setLngLat([t,e]).addTo(this.map);if(n){const a=new window.maplibregl.Popup({offset:25}).setHTML(n);m.setPopup(a)}this.mapMarkers.push(m)}):this.pendingMarkers=Array.isArray(a)?a:[]}fitBounds(){if(!this.map||0===this.markers.length)return;const a=new window.maplibregl.LngLatBounds;this.markers.forEach(t=>{a.extend([t.lng,t.lat])}),this.map.fitBounds(a,{padding:50,maxZoom:15})}updateMarkers(a){const t=Array.isArray(a)?a:[];this.markers=t,this.pendingMarkers=t,this.map&&(this.clearMarkers(),this.addMarkers(t),this.autoFitBounds&&t.length>1?this.fitBounds():1===t.length&&this.map&&this.map.flyTo({center:[t[0].lng,t[0].lat],zoom:this.zoom}))}clearMarkers(){this.mapMarkers.forEach(a=>{a.remove()}),this.mapMarkers=[]}addLineSource({id:a,data:t,paint:e,layout:n}){if(!a||!t)return;const l=`${a}-source`;this.map?(this.map.getLayer(a)&&this.map.removeLayer(a),this.map.getSource(l)&&this.map.removeSource(l),this.map.addSource(l,{type:"geojson",data:t}),this.map.addLayer({id:a,type:"line",source:l,paint:{"line-color":"#3b82f6","line-width":2,"line-opacity":.6,...e},layout:{"line-cap":"round","line-join":"round",...n}})):this.pendingLineData.set(a,{id:a,data:t,paint:e,layout:n})}updateLineSource(a,{data:t,paint:e,layout:n}={}){if(!a||!t)return;const l=`${a}-source`;this.map?this.map.getSource(l)?(this.map.getSource(l).setData(t),(e||n)&&(e&&Object.entries(e).forEach(([t,e])=>{this.map.setPaintProperty(a,t,e)}),n&&Object.entries(n).forEach(([t,e])=>{this.map.setLayoutProperty(a,t,e)}))):this.addLineSource({id:a,data:t,paint:e,layout:n}):this.pendingLineData.set(a,{id:a,data:t,paint:e,layout:n})}setView(a,t,e=null){this.map&&this.map.flyTo({center:[a,t],zoom:e||this.zoom})}setZoom(a){this.map&&this.map.setZoom(a)}setPitch(a){this.map&&this.map.setPitch(a)}setBearing(a){this.map&&this.map.setBearing(a)}async onBeforeDestroy(){this.map&&(this.map.remove(),this.map=null),await super.onBeforeDestroy()}}const t={AD:{name:"Andorra",lat:42.54859834854764,lng:1.5802243611232873},AE:{name:"United Arab Emirates",lat:24.18250292309135,lng:54.27920525789581},AF:{name:"Afghanistan",lat:34.13402601376932,lng:66.59216131095278},AG:{name:"Antigua and Barbuda",lat:17.07146759372967,lng:-61.78530823226373},AI:{name:"Anguilla",lat:18.222874004219086,lng:-63.06008343771806},AL:{name:"Albania",lat:41.14165894891656,lng:20.061082767269493},AM:{name:"Armenia",lat:40.17841274230679,lng:45.05490831965259},AO:{name:"Angola",lat:-12.167424062667942,lng:17.651768783079},AQ:{name:"Antarctica",lat:-77.16987521415838,lng:-177.56451613408842},AR:{name:"Argentina",lat:-35.697270518120085,lng:-64.53238503843076},AS:{name:"American Samoa",lat:-14.305711987770538,lng:-170.7007316174498},AT:{name:"Austria",lat:47.631858269895794,lng:13.797778364631036},AU:{name:"Australia",lat:-25.697337673983082,lng:134.02277170916162},AW:{name:"Aruba",lat:12.515625722992898,lng:-69.97564014284046},AZ:{name:"Azerbaijan",lat:40.3920509942049,lng:48.634592670644324},BA:{name:"Bosnia and Herzegovina",lat:44.14415356126429,lng:17.83467240787538},BB:{name:"Barbados",lat:13.183219369337529,lng:-59.557383949150285},BD:{name:"Bangladesh",lat:23.673728665121,lng:90.43212562608613},BE:{name:"Belgium",lat:50.6182138854095,lng:4.675010154696485},BF:{name:"Burkina Faso",lat:12.108709036312737,lng:-1.6932816211842325},BG:{name:"Bulgaria",lat:42.82043677302438,lng:25.251739122561908},BH:{name:"Bahrain",lat:26.04798501537066,lng:50.540695402276775},BI:{name:"Burundi",lat:-3.261251993278643,lng:29.88518227845293},BJ:{name:"Benin",lat:9.503013199615893,lng:2.305714528830206},BL:{name:"Saint Barthelemy",lat:17.90561691241738,lng:-62.83051610005156},BM:{name:"Bermuda",lat:32.315067430740726,lng:-64.7458500599169},BN:{name:"Brunei Darussalam",lat:4.543205889917609,lng:114.6430958360464},BO:{name:"Bolivia",lat:-16.7312488393574,lng:-64.45209597511206},BQ:{name:"Bonaire",lat:12.180844982440338,lng:-68.29350445958761},BQ:{name:"Saba",lat:17.632512616389718,lng:-63.23739481909494},BQ:{name:"Saint Eustatius",lat:17.4919042294197,lng:-62.978230589445026},BR:{name:"Brazil",lat:-11.524630416426652,lng:-54.355206608256424},BS:{name:"Bahamas",lat:24.72162633646784,lng:-78.07275370060313},BT:{name:"Bhutan",lat:27.42163933959824,lng:90.46716647173861},BV:{name:"Bouvet Island",lat:-54.42316679395248,lng:3.411969465057627},BW:{name:"Botswana",lat:-22.236609002062902,lng:23.85779956995608},BY:{name:"Belarus",lat:53.46791374543163,lng:27.964252054715104},BZ:{name:"Belize",lat:17.24252476647155,lng:-88.68273510023441},CA:{name:"Canada",lat:57.550480044655636,lng:-98.41680517868062},CC:{name:"Cocos Islands",lat:-12.171249450199545,lng:96.83688767323002},CD:{name:"Congo DRC",lat:-3.338629596207896,lng:23.419827574282188},CF:{name:"Central African Republic",lat:6.331390033944319,lng:20.520743419397256},CG:{name:"Congo",lat:-.7294391595233845,lng:14.879732849491393},CH:{name:"Switzerland",lat:46.73678128684938,lng:8.286928794895285},CI:{name:"Côte d'Ivoire",lat:7.536779279421307,lng:-5.571710194917734},CK:{name:"Cook Islands",lat:-21.222613253399842,lng:-159.78768870952257},CL:{name:"Chile",lat:-37.82938283049967,lng:-70.76863431739216},CM:{name:"Cameroon",lat:6.294168487480992,lng:12.948474142398263},CN:{name:"China",lat:38.07325481105728,lng:104.69113855849604},CO:{name:"Colombia",lat:4.187753877352739,lng:-72.6445066243485},CR:{name:"Costa Rica",lat:9.863467407406214,lng:-84.14673625701816},CU:{name:"Cuba",lat:21.476176522869448,lng:-79.69817857618705},CV:{name:"Cabo Verde",lat:15.076411518651643,lng:-23.63401005900474},CW:{name:"Curacao",lat:12.199996647939832,lng:-68.96939768599042},CX:{name:"Christmas Island",lat:-10.446440802183416,lng:105.70209512200549},CY:{name:"Cyprus",lat:35.11700416345239,lng:33.375346009199205},CZ:{name:"Czech Republic",lat:49.74917370930982,lng:15.383273292023533},DE:{name:"Germany",lat:51.08304539800482,lng:10.426171427430804},DJ:{name:"Djibouti",lat:11.750235727618804,lng:42.613496898789506},DK:{name:"Denmark",lat:56.00118817971057,lng:9.378670542409406},DM:{name:"Dominica",lat:15.429269860940513,lng:-61.360471946942994},DO:{name:"Dominican Republic",lat:18.77954818522993,lng:-70.43495198520012},DZ:{name:"Algeria",lat:28.350969744889056,lng:2.6558464719769135},EC:{name:"Ecuador",lat:-1.5642721388853116,lng:-78.4630326109714},EE:{name:"Estonia",lat:58.648108311231034,lng:25.916870250633806},EG:{name:"Egypt",lat:26.60517034450628,lng:30.240135435012338},ER:{name:"Eritrea",lat:15.005533147667684,lng:39.2672401449901},ES:{name:"Spain",lat:40.365008336683836,lng:-3.6516251409956983},ES:{name:"Canarias",lat:28.297665106525546,lng:-16.53799441021647},ET:{name:"Ethiopia",lat:8.729389557048396,lng:39.914902886544276},FI:{name:"Finland",lat:65.01578959749911,lng:25.65738433454702},FJ:{name:"Fiji",lat:-17.822470952336204,lng:177.98144613732626},FK:{name:"Falkland Islands",lat:-51.75901312766726,lng:-58.746646363799854},FM:{name:"Micronesia",lat:6.8789448129255435,lng:158.2291899444527},FO:{name:"Faroe Islands",lat:62.130896281495346,lng:-6.9811060913122835},FR:{name:"France",lat:46.6423682169416,lng:2.1940236627886227},GA:{name:"Gabon",lat:-.628448459921234,lng:11.839410898545754},GB:{name:"United Kingdom",lat:53.97844735080214,lng:-2.852943909329258},GD:{name:"Grenada",lat:12.112926656338907,lng:-61.67937937204098},GE:{name:"Georgia",lat:42.17986277737226,lng:43.378866534112234},GF:{name:"French Guiana",lat:3.857429742497078,lng:-53.32232307156624},GG:{name:"Guernsey",lat:49.45870771378872,lng:-2.576392582891568},GH:{name:"Ghana",lat:7.94530467243628,lng:-1.219233362526581},GI:{name:"Gibraltar",lat:36.14022671336082,lng:-5.345549484594358},GL:{name:"Greenland",lat:74.16847218965994,lng:-42.07567788066985},GM:{name:"Gambia",lat:13.428617959189328,lng:-15.383380385869662},GN:{name:"Guinea",lat:10.255986541378112,lng:-10.986948848040218},GP:{name:"Guadeloupe",lat:16.24420002705553,lng:-61.54382262282755},GQ:{name:"Equatorial Guinea",lat:1.5954643936590733,lng:10.425456672353823},GR:{name:"Greece",lat:39.42012261727978,lng:23.110368936161876},GS:{name:"South Georgia and South Sandwich Islands",lat:-54.37666443862139,lng:-36.77509575898928},GT:{name:"Guatemala",lat:15.820878515352684,lng:-90.31219349119617},GU:{name:"Guam",lat:13.445430479945276,lng:144.78024458298802},GW:{name:"Guinea-Bissau",lat:11.980075324820504,lng:-14.980186756910847},GY:{name:"Guyana",lat:4.68211981385056,lng:-58.91352612754667},HM:{name:"Heard Island and McDonald Islands",lat:-53.084170035513736,lng:73.49298560844045},HN:{name:"Honduras",lat:14.740370695750006,lng:-86.49251679006962},HR:{name:"Croatia",lat:44.91192100856702,lng:16.625761129583374},HT:{name:"Haiti",lat:18.883520486983567,lng:-72.89291379842},HU:{name:"Hungary",lat:47.22527332486294,lng:19.39620048366142},ID:{name:"Indonesia",lat:.15591979959037652,lng:113.96538246847302},IE:{name:"Ireland",lat:53.30489539816495,lng:-8.241128545554096},IL:{name:"Israel",lat:31.513542220043195,lng:35.027923472437024},IM:{name:"Isle of Man",lat:54.22855301008011,lng:-4.532995055468449},IN:{name:"India",lat:23.586300567746722,lng:81.17300408530181},IO:{name:"British Indian Ocean Territory",lat:-7.323548444385743,lng:72.43501618476016},IQ:{name:"Iraq",lat:33.105075667527906,lng:43.832529181056884},IR:{name:"Iran",lat:32.906023742890056,lng:54.237077001065444},IS:{name:"Iceland",lat:65.12360920205514,lng:-19.05682967106099},IT:{name:"Italy",lat:42.98201127614267,lng:12.763657166123137},JE:{name:"Jersey",lat:49.215396925724306,lng:-2.1291601162653575},JM:{name:"Jamaica",lat:18.12207889341651,lng:-77.30358894542778},JO:{name:"Jordan",lat:31.387064884449156,lng:36.95728884547246},JP:{name:"Japan",lat:36.76738832597829,lng:137.46934234351835},KE:{name:"Kenya",lat:.6899182318376179,lng:37.95309411262371},KG:{name:"Kyrgyzstan",lat:41.35698905438358,lng:74.17532903468319},KH:{name:"Cambodia",lat:12.699186865507775,lng:105.03973078680701},KI:{name:"Kiribati",lat:1.8676673749241066,lng:-157.39024189323504},KM:{name:"Comoros",lat:-11.658861474508491,lng:43.34826587429403},KN:{name:"Saint Kitts and Nevis",lat:17.314736299587768,lng:-62.74560385895787},KP:{name:"North Korea",lat:40.19198091470839,lng:127.3379805653744},KR:{name:"South Korea",lat:36.402386712544114,lng:127.76224551357649},KW:{name:"Kuwait",lat:29.281360965443092,lng:47.56311109320184},KY:{name:"Cayman Islands",lat:19.311231805620288,lng:-81.25203208977878},KZ:{name:"Kazakhstan",lat:47.641465195176835,lng:66.3759193479301},LA:{name:"Laos",lat:18.117282736873282,lng:103.76375899026448},LB:{name:"Lebanon",lat:33.91160170722086,lng:35.89651946324749},LC:{name:"Saint Lucia",lat:13.895749185129906,lng:-60.9689510935251},LI:{name:"Liechtenstein",lat:47.14627562133036,lng:9.547674672376376},LK:{name:"Sri Lanka",lat:7.696630939329944,lng:80.66931169770622},LR:{name:"Liberia",lat:6.52012979398834,lng:-9.258988935497618},LS:{name:"Lesotho",lat:-29.60168116924817,lng:28.24475317864227},LT:{name:"Lithuania",lat:55.29437393417175,lng:23.946021605013534},LU:{name:"Luxembourg",lat:49.77523454542369,lng:6.103230338458876},LV:{name:"Latvia",lat:56.813853047554154,lng:24.693671325654403},LY:{name:"Libya",lat:27.202915771690794,lng:17.91133392454237},MA:{name:"Morocco",lat:28.687598134979325,lng:-8.817212587250811},MC:{name:"Monaco",lat:43.74798224995656,lng:7.412820873271196},MD:{name:"Moldova",lat:47.0725674580696,lng:28.391111865941348},ME:{name:"Montenegro",lat:42.73694835210454,lng:19.29505087156758},MF:{name:"Saint Martin",lat:18.078012113224464,lng:-63.06678525361946},MG:{name:"Madagascar",lat:-19.04163612493041,lng:46.68493466832544},MH:{name:"Marshall Islands",lat:7.307929900994344,lng:168.72016025351076},MK:{name:"North Macedonia",lat:41.59402890143112,lng:21.70998923872772},ML:{name:"Mali",lat:17.168146208584837,lng:-4.346399841781153},MM:{name:"Myanmar",lat:19.901227931399873,lng:97.08892285397344},MN:{name:"Mongolia",lat:47.08644454604851,lng:103.3987360327455},MP:{name:"Northern Mariana Islands",lat:15.178063516432115,lng:145.74119737203134},MQ:{name:"Martinique",lat:14.642697353597645,lng:-61.01432380875083},MR:{name:"Mauritania",lat:20.466731212820022,lng:-10.495079045035716},MS:{name:"Montserrat",lat:16.735363391460357,lng:-62.18693281256255},MT:{name:"Malta",lat:35.890522650899314,lng:14.441922442508494},MU:{name:"Mauritius",lat:-20.28142317475198,lng:57.56415671066546},MV:{name:"Maldives",lat:-.6065577168009924,lng:73.10076245140479},MW:{name:"Malawi",lat:-13.128986464184024,lng:34.23441182298881},MX:{name:"Mexico",lat:23.87436068093592,lng:-101.55399731630118},MY:{name:"Malaysia",lat:3.6716608556387857,lng:114.63330303992869},MZ:{name:"Mozambique",lat:-17.525230309488748,lng:35.208577031290176},NA:{name:"Namibia",lat:-21.90858163281473,lng:18.16451345845268},NC:{name:"New Caledonia",lat:-21.33003372660827,lng:165.50767040438612},NE:{name:"Niger",lat:17.08105392407292,lng:8.86863247002646},NF:{name:"Norfolk Island",lat:-29.037654445046282,lng:167.95259597483337},NG:{name:"Nigeria",lat:9.61029352034213,lng:8.147714845256194},NI:{name:"Nicaragua",lat:12.893566631930554,lng:-85.016088327669},NL:{name:"Netherlands",lat:52.134054128923886,lng:5.554136426128487},NO:{name:"Norway",lat:64.97775882947745,lng:16.670259272390894},NP:{name:"Nepal",lat:28.300920699755657,lng:84.1338898313567},NR:{name:"Nauru",lat:-.5221021440668993,lng:166.92937633139178},NU:{name:"Niue",lat:-19.05230921680393,lng:-169.86878106699083},NZ:{name:"New Zealand",lat:-43.82765432544426,lng:170.69035541428696},OM:{name:"Oman",lat:20.7242833183209,lng:55.841088119829},PA:{name:"Panama",lat:8.439536749576892,lng:-80.14428761482796},PE:{name:"Peru",lat:-8.522717984240291,lng:-74.11416196781884},PF:{name:"French Polynesia",lat:-17.674684080120677,lng:-149.40041671099763},PG:{name:"Papua New Guinea",lat:-7.156912819152135,lng:144.8348942994695},PH:{name:"Philippines",lat:15.586542251094242,lng:121.82208941416745},PK:{name:"Pakistan",lat:30.116188371410882,lng:69.08835090769651},PL:{name:"Poland",lat:52.06848055692473,lng:19.43573279234468},PM:{name:"Saint Pierre and Miquelon",lat:46.95153913615198,lng:-56.32465353437558},PN:{name:"Pitcairn",lat:-24.366121747565458,lng:-128.3149848627581},PR:{name:"Puerto Rico",lat:18.216224086610914,lng:-66.49425339593509},PS:{name:"Palestinian Territory",lat:31.930818736453883,lng:35.24251184154588},PT:{name:"Portugal",lat:39.67529214702138,lng:-7.933662183874006},PW:{name:"Palau",lat:7.534775852547396,lng:134.57965086721052},PY:{name:"Paraguay",lat:-23.42190559259428,lng:-58.38906357428651},QA:{name:"Qatar",lat:25.318528486425386,lng:51.19794918743203},RE:{name:"Réunion",lat:-21.119825460665105,lng:55.54393506194689},RO:{name:"Romania",lat:45.82454894397586,lng:25.094158201563292},RS:{name:"Serbia",lat:44.02679870131969,lng:20.85677444395745},RU:{name:"Russian Federation",lat:59.039434214106194,lng:98.6704990698032},RW:{name:"Rwanda",lat:-2.014687460047154,lng:29.919439681764082},SA:{name:"Saudi Arabia",lat:24.136038144757897,lng:44.600958178225596},SB:{name:"Solomon Islands",lat:-9.613104734596515,lng:160.16475795033884},SC:{name:"Seychelles",lat:-4.660002318822744,lng:55.47250789595527},SD:{name:"Sudan",lat:15.67060230984256,lng:29.951458283594064},SE:{name:"Sweden",lat:62.73420986108448,lng:17.062431988004956},SG:{name:"Singapore",lat:1.3528251890006349,lng:103.81025757634053},SH:{name:"Saint Helena",lat:-15.962963318340398,lng:-5.717391620813109},SI:{name:"Slovenia",lat:46.13759229564504,lng:14.890636899973781},SJ:{name:"Svalbard",lat:78.57318936469626,lng:16.036378851505283},SK:{name:"Slovakia",lat:48.69808390520484,lng:19.581015362490966},SL:{name:"Sierra Leone",lat:8.561330384750587,lng:-11.78656695731115},SM:{name:"San Marino",lat:43.942820729097896,lng:12.461278349581722},SN:{name:"Senegal",lat:14.228861491763402,lng:-14.610875368352305},SO:{name:"Somalia",lat:6.524534573103924,lng:45.40037867243972},SR:{name:"Suriname",lat:4.098723595920171,lng:-55.855514311561286},SS:{name:"South Sudan",lat:7.657782041763295,lng:30.3851856901788},ST:{name:"Sao Tome and Principe",lat:.22744704294793774,lng:6.606158796857607},SV:{name:"El Salvador",lat:13.758041517055418,lng:-88.85911489238985},SX:{name:"Sint Maarten",lat:18.03942608463078,lng:-63.06883135915303},SY:{name:"Syria",lat:35.09751106058316,lng:38.5117323139514},SZ:{name:"Eswatini",lat:-26.562540935608702,lng:31.510685746082007},TC:{name:"Turks and Caicos Islands",lat:21.799865427483745,lng:-71.74058946811508},TD:{name:"Chad",lat:15.283493546654503,lng:18.427113900363025},TF:{name:"Juan De Nova Island",lat:-17.06449193630804,lng:42.74374761089645},TF:{name:"French Southern Territories",lat:-49.26329687105643,lng:69.54686984724839},TF:{name:"Glorioso Islands",lat:-11.566224871643417,lng:47.290948081543384},TG:{name:"Togo",lat:8.660743037717811,lng:.8990857571109684},TH:{name:"Thailand",lat:13.66222784745538,lng:101.08675116214552},TJ:{name:"Tajikistan",lat:38.56933138382972,lng:70.94215281065698},TK:{name:"Tokelau",lat:-9.195174767256544,lng:-171.85265950722743},TL:{name:"Timor-Leste",lat:-8.809894630601962,lng:125.95024049562659},TM:{name:"Turkmenistan",lat:39.06069118001429,lng:58.4577357627054},TN:{name:"Tunisia",lat:34.08636179565723,lng:9.65587551697984},TO:{name:"Tonga",lat:-21.15927212823853,lng:-175.20415878511247},TR:{name:"Turkey",lat:38.93207363123396,lng:35.56886764076691},TT:{name:"Trinidad and Tobago",lat:10.415515638298093,lng:-61.37236579976247},TV:{name:"Tuvalu",lat:-8.514701506447222,lng:179.217833977593},TZ:{name:"Tanzania",lat:-6.355794440041147,lng:34.81832206060381},UA:{name:"Ukraine",lat:48.657532515563794,lng:31.27377208442636},UG:{name:"Uganda",lat:1.2821729218416205,lng:32.34371768463123},UM:{name:"United States Minor Outlying Islands",lat:19.302045812215958,lng:166.63800339749642},US:{name:"United States",lat:38.8208089190304,lng:-96.33161660829639},UY:{name:"Uruguay",lat:-32.78195043831093,lng:-56.01919523458085},UZ:{name:"Uzbekistan",lat:41.4879065244633,lng:63.8548297593985},VA:{name:"Vatican City",lat:41.90402351316735,lng:12.451312917026133},VC:{name:"Saint Vincent and the Grenadines",lat:13.254808122970651,lng:-61.193766354393034},VE:{name:"Venezuela",lat:7.148324760507107,lng:-66.36492135985132},VG:{name:"British Virgin Islands",lat:18.42195819619707,lng:-64.62406519257699},VI:{name:"US Virgin Islands",lat:17.738009708772523,lng:-64.76155341409797},VN:{name:"Vietnam",lat:16.517347170839393,lng:105.91338832758704},VU:{name:"Vanuatu",lat:-15.189132121699332,lng:166.84912735669738},WF:{name:"Wallis and Futuna",lat:-14.283442307826677,lng:-178.12735555777184},WS:{name:"Samoa",lat:-13.634252953274622,lng:-172.44107655740137},YE:{name:"Yemen",lat:16.001392616307445,lng:47.46815793206386},YT:{name:"Mayotte",lat:-12.824468416301052,lng:45.128142327031064},ZA:{name:"South Africa",lat:-28.55361930679731,lng:24.75252746489084},ZM:{name:"Zambia",lat:-13.162832953186246,lng:27.75521363430896},ZW:{name:"Zimbabwe",lat:-18.92700121981475,lng:29.717829640720844}};class MetricsCountryMapView extends a{constructor(a={}){const t=a.height||320;super({className:"metrics-country-map-view",...a}),this.endpoint=a.endpoint||"/api/metrics/fetch",this.account=a.account||"global",this.category=a.category||null,this.slugs=a.slugs||null,this.granularity=a.granularity||"days",this.maxCountries=a.maxCountries||12,this.metricLabel=a.metricLabel||"Events",this.height=t,this.mapStyle=a.mapStyle||"dark",this.mapOptions=a.mapOptions||{},this.showRoutes=!1!==a.showRoutes,this.routeOrigin=a.routeOrigin||{lng:-77.346,lat:38.958,name:"Reston, VA"},this._refreshing=!1}async getTemplate(){return`\n <div class="metrics-country-map">\n <div class="map-container mb-3" data-container="${this.id}-map" style="height:${this.height}px"></div>\n <div class="map-legend small" data-region="legend"></div>\n </div>\n `}async onInit(){this.statusEl=document.createElement("div"),this.statusEl.className="text-muted small px-3 pb-2",this.element.appendChild(this.statusEl),this.mapView=new MapLibreView({containerId:`${this.id}-map`,height:this.height,style:this.mapStyle,zoom:this.mapOptions.zoom??1.3,center:this.mapOptions.center||[10,20],pitch:this.mapOptions.pitch??20,bearing:this.mapOptions.bearing??0,showNavigationControl:this.mapOptions.showNavigationControl??!0,autoFitBounds:this.mapOptions.autoFitBounds??!1}),this.addChild(this.mapView),await this.refresh()}async refresh(){if(!this._refreshing){this._refreshing=!0,this.setStatus("Loading hotspots…");try{const a=await this.fetchMetrics();await this.applyMetrics(a),this.setStatus("")}catch(a){console.error("MetricsCountryMapView refresh error",a),this.setStatus("Unable to load country metrics.")}finally{this._refreshing=!1}}}async fetchMetrics(){const a=this.getApp()?.rest;if(!a)throw new Error("REST client unavailable");const t={account:this.account,granularity:this.granularity,with_labels:!0};if(this.category&&(t.category=this.category),this.slugs){const a=Array.isArray(this.slugs)?this.slugs:[this.slugs];t["slugs[]"]=a}const e=await a.GET(this.endpoint,t);if(!e.success||!e.data?.status)throw new Error(e.data?.error||"Metrics API error");return e.data.data}async applyMetrics(a){const e=a?.data||{},n=a?.labels||[],l=[];if(Object.entries(e).forEach(([a,e])=>{const n=e.reduce((a,t)=>a+(Number(t)||0),0);if(!n)return;const i=t[a.toUpperCase()];i&&l.push({code:a.toUpperCase(),total:n,values:e,centroid:i})}),!l.length)return this.mapView.updateMarkers([]),this.renderLegend([]),void this.setStatus("No country data available for the selected range.");l.sort((a,t)=>t.total-a.total);const i=l.slice(0,this.maxCountries),s=i[0]?.total||1,r=i.map(a=>{const t=a.total/s,e=Math.round(18+24*t);return{lng:a.centroid.lng,lat:a.centroid.lat,size:e,color:this.getMarkerColor(t),popup:`\n <div class="text-center">\n <strong>${a.centroid.name}</strong><br/>\n <span class="text-muted">${a.total.toLocaleString()} ${this.metricLabel}</span>\n </div>\n `}});this.showRoutes&&this.routeOrigin?.lng&&this.routeOrigin?.lat&&r.push({lng:this.routeOrigin.lng,lat:this.routeOrigin.lat,size:26,color:"#0d6efd",icon:"bi bi-broadcast-pin",popup:`\n <div class="text-center">\n <strong>${this.routeOrigin.name||"Operations Hub"}</strong><br/>\n <span class="text-muted">Origin</span>\n </div>\n `}),this.mapView.updateMarkers(r),this.renderLegend(i,n),this.showRoutes&&this.renderRoutes(i,s)}getMarkerColor(a){const t=[255,193,7],e=[32,201,151].map((e,n)=>Math.round(e+(t[n]-e)*a));return`rgba(${e[0]}, ${e[1]}, ${e[2]}, 0.9)`}renderLegend(a){const t=this.element.querySelector('[data-region="legend"]');if(!t)return;if(!a.length)return void(t.innerHTML="");const e=a[0]?.total||1,n=a.map(a=>{const t=(a.total/e*100).toFixed(0);return`\n <div class="d-flex justify-content-between align-items-center py-1 border-top">\n <div>\n <span class="fw-semibold">${a.centroid.name}</span>\n <span class="text-muted ms-1">(${a.code})</span>\n </div>\n <div class="text-end">\n <div class="fw-semibold">${a.total.toLocaleString()}</div>\n <small class="text-muted">${t}% of top</small>\n </div>\n </div>\n `}).join("");t.innerHTML=n}renderRoutes(a,t){const e=this.routeOrigin||null;if(!(e&&e.lng&&e.lat&&this.mapView))return;const n={type:"FeatureCollection",features:a.map(a=>({type:"Feature",geometry:{type:"LineString",coordinates:[[e.lng,e.lat],[a.centroid.lng,a.centroid.lat]]},properties:{total:a.total,intensity:a.total/t}}))};this.mapView.lineSources=this.mapView.lineSources.filter(a=>a.id!==`${this.id}-routes`),this.mapView.updateLineSource(`${this.id}-routes`,{data:n,paint:{"line-color":["interpolate",["linear"],["get","intensity"],0,"rgba(32, 201, 151, 0.6)",1,"rgba(255, 193, 7, 0.95)"],"line-width":["interpolate",["linear"],["get","intensity"],0,1.75,1,6],"line-opacity":["interpolate",["linear"],["get","intensity"],0,.45,1,.95]}})}setStatus(a){this.statusEl&&(this.statusEl.textContent=a||"",this.statusEl.style.display=a?"block":"none")}}export{MapView as M,MapLibreView as a,MetricsCountryMapView as b};
|
|
2
|
+
//# sourceMappingURL=MetricsCountryMapView-DuBKO7gz.js.map
|