web-mojo 2.2.47 → 2.2.49

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.
Files changed (92) hide show
  1. package/dist/admin.cjs.js +1 -1
  2. package/dist/admin.cjs.js.map +1 -1
  3. package/dist/admin.es.js +18 -13
  4. package/dist/admin.es.js.map +1 -1
  5. package/dist/auth.cjs.js +1 -1
  6. package/dist/auth.es.js +1 -1
  7. package/dist/charts.cjs.js +1 -1
  8. package/dist/charts.es.js +4 -4
  9. package/dist/chunks/{ChatView-BT_nD9K9.js → ChatView-BUfkeVnX.js} +14 -7
  10. package/dist/chunks/ChatView-BUfkeVnX.js.map +1 -0
  11. package/dist/chunks/ChatView-Tj1Kb9Hf.js +2 -0
  12. package/dist/chunks/ChatView-Tj1Kb9Hf.js.map +1 -0
  13. package/dist/chunks/{Collection-C_Ssejpi.js → Collection-D3K_bEJN.js} +2 -2
  14. package/dist/chunks/{Collection-C_Ssejpi.js.map → Collection-D3K_bEJN.js.map} +1 -1
  15. package/dist/chunks/{Collection-C5uDBFur.js → Collection-DpUI5_9f.js} +2 -2
  16. package/dist/chunks/{Collection-C5uDBFur.js.map → Collection-DpUI5_9f.js.map} +1 -1
  17. package/dist/chunks/{ContextMenu-leHTa126.js → ContextMenu-BSlbXHBy.js} +2 -2
  18. package/dist/chunks/{ContextMenu-leHTa126.js.map → ContextMenu-BSlbXHBy.js.map} +1 -1
  19. package/dist/chunks/{ContextMenu-4yi1YZwj.js → ContextMenu-sdxDECHa.js} +3 -3
  20. package/dist/chunks/{ContextMenu-4yi1YZwj.js.map → ContextMenu-sdxDECHa.js.map} +1 -1
  21. package/dist/chunks/{DataView-34YwqbHX.js → DataView-CACdHJV9.js} +2 -2
  22. package/dist/chunks/{DataView-34YwqbHX.js.map → DataView-CACdHJV9.js.map} +1 -1
  23. package/dist/chunks/{DataView-DNhn9WNt.js → DataView-DUOJRtqo.js} +2 -2
  24. package/dist/chunks/{DataView-DNhn9WNt.js.map → DataView-DUOJRtqo.js.map} +1 -1
  25. package/dist/chunks/{Dialog-G4K6rcmt.js → Dialog-BVDLaVFL.js} +5 -5
  26. package/dist/chunks/{Dialog-G4K6rcmt.js.map → Dialog-BVDLaVFL.js.map} +1 -1
  27. package/dist/chunks/{Dialog-DISGn8Ys.js → Dialog-BmkbDDol.js} +2 -2
  28. package/dist/chunks/{Dialog-DISGn8Ys.js.map → Dialog-BmkbDDol.js.map} +1 -1
  29. package/dist/chunks/{FormView-DezJ-BG_.js → FormView-CqiU2UkE.js} +3 -3
  30. package/dist/chunks/{FormView-DezJ-BG_.js.map → FormView-CqiU2UkE.js.map} +1 -1
  31. package/dist/chunks/{FormView-DTIezo2P.js → FormView-Cuqamyp7.js} +3 -3
  32. package/dist/chunks/{FormView-DTIezo2P.js.map → FormView-Cuqamyp7.js.map} +1 -1
  33. package/dist/chunks/{ListView-CCa2A8AN.js → ListView-B7_jgGeh.js} +2 -2
  34. package/dist/chunks/{ListView-CCa2A8AN.js.map → ListView-B7_jgGeh.js.map} +1 -1
  35. package/dist/chunks/{ListView-fAR_2dr2.js → ListView-ChN3NCAY.js} +3 -3
  36. package/dist/chunks/{ListView-fAR_2dr2.js.map → ListView-ChN3NCAY.js.map} +1 -1
  37. package/dist/chunks/{MetricsCountryMapView-B-f2p9Sa.js → MetricsCountryMapView-BDdS4s7L.js} +2 -2
  38. package/dist/chunks/{MetricsCountryMapView-B-f2p9Sa.js.map → MetricsCountryMapView-BDdS4s7L.js.map} +1 -1
  39. package/dist/chunks/{MetricsCountryMapView-CUOaeRfl.js → MetricsCountryMapView-Pu1VZIJT.js} +2 -2
  40. package/dist/chunks/{MetricsCountryMapView-CUOaeRfl.js.map → MetricsCountryMapView-Pu1VZIJT.js.map} +1 -1
  41. package/dist/chunks/{MetricsMiniChartWidget-DLg1F5tP.js → MetricsMiniChartWidget-BVS-pJks.js} +4 -4
  42. package/dist/chunks/{MetricsMiniChartWidget-DLg1F5tP.js.map → MetricsMiniChartWidget-BVS-pJks.js.map} +1 -1
  43. package/dist/chunks/{MetricsMiniChartWidget-B8KsG_h3.js → MetricsMiniChartWidget-ZqmLtt06.js} +2 -2
  44. package/dist/chunks/{MetricsMiniChartWidget-B8KsG_h3.js.map → MetricsMiniChartWidget-ZqmLtt06.js.map} +1 -1
  45. package/dist/chunks/{PDFViewer-cMv7WDvp.js → PDFViewer-Byo3kf7Z.js} +3 -3
  46. package/dist/chunks/{PDFViewer-cMv7WDvp.js.map → PDFViewer-Byo3kf7Z.js.map} +1 -1
  47. package/dist/chunks/{PDFViewer-D-NSWRwM.js → PDFViewer-CCW5ZvRb.js} +2 -2
  48. package/dist/chunks/{PDFViewer-D-NSWRwM.js.map → PDFViewer-CCW5ZvRb.js.map} +1 -1
  49. package/dist/chunks/Rest-BSz7rF0G.js +2 -0
  50. package/dist/chunks/Rest-BSz7rF0G.js.map +1 -0
  51. package/dist/chunks/{Rest-CtdC4cD9.js → Rest-DSzjaYYe.js} +77 -15
  52. package/dist/chunks/Rest-DSzjaYYe.js.map +1 -0
  53. package/dist/chunks/{TokenManager-D_WVmyKY.js → TokenManager-C07o8g1O.js} +2 -2
  54. package/dist/chunks/{TokenManager-D_WVmyKY.js.map → TokenManager-C07o8g1O.js.map} +1 -1
  55. package/dist/chunks/{TokenManager-DmqJ4qmb.js → TokenManager-DNwuLDw6.js} +5 -5
  56. package/dist/chunks/{TokenManager-DmqJ4qmb.js.map → TokenManager-DNwuLDw6.js.map} +1 -1
  57. package/dist/chunks/{WebApp-158Y9QSF.js → WebApp-1HetrsR0.js} +2 -2
  58. package/dist/chunks/{WebApp-158Y9QSF.js.map → WebApp-1HetrsR0.js.map} +1 -1
  59. package/dist/chunks/{WebApp-CiBl53Hl.js → WebApp-Do2IaAGx.js} +12 -12
  60. package/dist/chunks/{WebApp-CiBl53Hl.js.map → WebApp-Do2IaAGx.js.map} +1 -1
  61. package/dist/chunks/{WebSocketClient-BGnzEIjP.js → WebSocketClient-BlBSBvYP.js} +2 -2
  62. package/dist/chunks/{WebSocketClient-BGnzEIjP.js.map → WebSocketClient-BlBSBvYP.js.map} +1 -1
  63. package/dist/chunks/{WebSocketClient-iJiqRgNy.js → WebSocketClient-BvwLDqeR.js} +2 -2
  64. package/dist/chunks/{WebSocketClient-iJiqRgNy.js.map → WebSocketClient-BvwLDqeR.js.map} +1 -1
  65. package/dist/chunks/{version-7OD8J84F.js → version-DXeLxR_3.js} +4 -4
  66. package/dist/chunks/{version-7OD8J84F.js.map → version-DXeLxR_3.js.map} +1 -1
  67. package/dist/chunks/{version-Dra0sZ9N.js → version-e7n3DAiW.js} +2 -2
  68. package/dist/chunks/{version-Dra0sZ9N.js.map → version-e7n3DAiW.js.map} +1 -1
  69. package/dist/docit.cjs.js +1 -1
  70. package/dist/docit.es.js +6 -6
  71. package/dist/index.cjs.js +1 -1
  72. package/dist/index.cjs.js.map +1 -1
  73. package/dist/index.es.js +70 -17
  74. package/dist/index.es.js.map +1 -1
  75. package/dist/lightbox.cjs.js +1 -1
  76. package/dist/lightbox.es.js +5 -5
  77. package/dist/map.cjs.js +1 -1
  78. package/dist/map.es.js +5 -5
  79. package/dist/timeline.cjs.js +1 -1
  80. package/dist/timeline.es.js +4 -4
  81. package/dist/web-mojo.lite.css +154 -0
  82. package/dist/web-mojo.lite.iife.js +21760 -0
  83. package/dist/web-mojo.lite.iife.js.map +1 -0
  84. package/dist/web-mojo.lite.iife.min.js +1765 -0
  85. package/dist/web-mojo.lite.iife.min.js.map +1 -0
  86. package/package.json +4 -3
  87. package/dist/chunks/ChatView-BT_nD9K9.js.map +0 -1
  88. package/dist/chunks/ChatView-G_I8KNR_.js +0 -2
  89. package/dist/chunks/ChatView-G_I8KNR_.js.map +0 -1
  90. package/dist/chunks/Rest-Bd1ABsfh.js +0 -2
  91. package/dist/chunks/Rest-Bd1ABsfh.js.map +0 -1
  92. package/dist/chunks/Rest-CtdC4cD9.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsCountryMapView-CUOaeRfl.js","sources":["../../src/extensions/map/MapView.js","../../src/extensions/map/MapLibreView.js","../../src/extensions/map/countryCentroids.js","../../src/extensions/map/MetricsCountryMapView.js"],"sourcesContent":["/**\n * MapView - Interactive map component using Leaflet\n *\n * Features:\n * - Display single or multiple markers\n * - Auto-zoom to fit markers\n * - Customizable marker popups\n * - Support for different tile layers\n *\n * @example\n * const mapView = new MapView({\n * markers: [\n * { lat: 37.422, lng: -122.084, popup: 'Mountain View, CA' }\n * ],\n * zoom: 10,\n * height: 400\n * });\n */\n\nimport View from '@core/View.js';\n\nclass MapView extends View {\n constructor(options = {}) {\n super({\n className: 'map-view',\n ...options\n });\n\n this.markers = options.markers || [];\n this.center = options.center || null;\n this.zoom = options.zoom || 13;\n this.height = options.height || 400;\n this.showZoomControl = options.showZoomControl !== false;\n this.tileLayer = options.tileLayer || 'osm'; // 'osm', 'satellite', 'terrain'\n this.showLeafletBranding = options.showLeafletBranding === true;\n this.showLayerControl = options.showLayerControl === true;\n this.layerOptions = options.layerOptions || {\n osm: 'OSM',\n satellite: 'Satellite',\n terrain: 'Terrain',\n dark: 'Dark',\n light: 'Light',\n watercolor: 'Watercolor',\n bw: 'B/W',\n streets: 'Streets'\n };\n\n this.map = null;\n this.leafletMarkers = [];\n this._tileLayer = null;\n\n 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 `;\n }\n\n async onAfterRender() {\n await this.loadLeaflet();\n await this.initializeMap();\n }\n\n async loadLeaflet() {\n // Check if Leaflet is already loaded\n if (window.L) return;\n\n // Load Leaflet CSS and wait for it\n const cssLoaded = new Promise((resolve) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';\n link.onload = resolve;\n link.onerror = resolve; // Continue even if CSS fails\n document.head.appendChild(link);\n });\n\n // Load Leaflet JS\n const jsLoaded = new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';\n script.onload = resolve;\n script.onerror = reject;\n document.head.appendChild(script);\n });\n\n // Wait for both CSS and JS to load\n await Promise.all([cssLoaded, jsLoaded]);\n }\n\n getTileLayerUrl() {\n const tileLayers = {\n // Standard street maps\n osm: {\n url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution: '© OpenStreetMap contributors',\n maxZoom: 19\n },\n\n // Satellite imagery\n satellite: {\n url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n attribution: '© Esri',\n maxZoom: 19\n },\n\n // Terrain and topographic\n terrain: {\n url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n attribution: '© OpenTopoMap contributors',\n maxZoom: 17\n },\n\n // Dark mode styles\n dark: {\n url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n },\n\n // Light/minimal styles\n light: {\n url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n },\n\n // Watercolor artistic style\n watercolor: {\n url: 'https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg',\n attribution: '© Stadia Maps © Stamen Design © OpenStreetMap contributors',\n maxZoom: 16\n },\n\n // Black and white\n bw: {\n url: 'https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n },\n\n // Streets with labels\n streets: {\n url: 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n }\n };\n\n return tileLayers[this.tileLayer] || tileLayers.osm;\n }\n\n async initializeMap() {\n const mapElement = this.element.querySelector(`#map-${this.id}`);\n if (!mapElement || !window.L) return;\n\n // Determine map center\n let mapCenter = this.center;\n if (!mapCenter && this.markers.length > 0) {\n // Use first marker as center\n mapCenter = [this.markers[0].lat, this.markers[0].lng];\n }\n if (!mapCenter) {\n // Default to world view\n mapCenter = [0, 0];\n }\n\n // Create map\n this.map = window.L.map(mapElement, {\n center: mapCenter,\n zoom: this.zoom,\n zoomControl: this.showZoomControl\n });\n // Optionally hide Leaflet branding/prefix (removes Leaflet link/flag in attribution control)\n if (this.map && this.map.attributionControl && this.showLeafletBranding === false) {\n try { this.map.attributionControl.setPrefix(''); } catch (e) {}\n }\n\n // Add tile layer\n const tileConfig = this.getTileLayerUrl();\n this._tileLayer = window.L.tileLayer(tileConfig.url, {\n attribution: tileConfig.attribution,\n maxZoom: tileConfig.maxZoom\n }).addTo(this.map);\n\n // Optional built-in tile layer selector UI\n if (this.showLayerControl) {\n const container = mapElement.parentElement || this.element.querySelector('.map-container');\n if (container) {\n container.style.position = container.style.position || 'relative';\n const selector = document.createElement('select');\n selector.className = 'form-select form-select-sm';\n selector.style.position = 'absolute';\n selector.style.top = '8px';\n selector.style.right = '8px';\n selector.style.zIndex = '1000';\n selector.style.maxWidth = '180px';\n selector.setAttribute('aria-label', 'Map tile layer');\n\n // Populate options\n Object.entries(this.layerOptions || {}).forEach(([key, label]) => {\n const opt = document.createElement('option');\n opt.value = key;\n opt.textContent = label;\n if (key === this.tileLayer) opt.selected = true;\n selector.appendChild(opt);\n });\n\n selector.addEventListener('change', () => this.setTileLayer(selector.value));\n container.appendChild(selector);\n }\n }\n\n // Add markers\n this.addMarkers(this.markers);\n\n // Auto-fit bounds if multiple markers\n if (this.markers.length > 1) {\n this.fitBounds();\n }\n\n // Fix tile rendering issues by invalidating size after a delay\n // This ensures the container has proper dimensions and CSS is applied\n setTimeout(() => {\n if (this.map) {\n this.map.invalidateSize();\n }\n }, 300);\n }\n\n addMarkers(markers) {\n if (!this.map || !Array.isArray(markers)) return;\n\n markers.forEach(markerData => {\n const { lat, lng, popup, icon } = markerData;\n\n if (!lat || !lng) return;\n\n const markerOptions = {};\n\n // Custom icon if provided\n if (icon) {\n markerOptions.icon = window.L.icon(icon);\n }\n\n const marker = window.L.marker([lat, lng], markerOptions).addTo(this.map);\n\n // Add popup if provided\n if (popup) {\n marker.bindPopup(popup);\n }\n\n this.leafletMarkers.push(marker);\n });\n }\n\n fitBounds() {\n if (!this.map || this.leafletMarkers.length === 0) return;\n\n const group = new window.L.featureGroup(this.leafletMarkers);\n this.map.fitBounds(group.getBounds().pad(0.1));\n }\n\n updateMarkers(newMarkers) {\n // Clear existing markers\n this.clearMarkers();\n\n // Add new markers\n this.markers = newMarkers;\n this.addMarkers(newMarkers);\n\n // Fit bounds if multiple markers\n if (newMarkers.length > 1) {\n this.fitBounds();\n } else if (newMarkers.length === 1) {\n this.map.setView([newMarkers[0].lat, newMarkers[0].lng], this.zoom);\n }\n }\n\n clearMarkers() {\n this.leafletMarkers.forEach(marker => {\n this.map.removeLayer(marker);\n });\n this.leafletMarkers = [];\n }\n\n setView(lat, lng, zoom = null) {\n if (!this.map) return;\n this.map.setView([lat, lng], zoom || this.zoom);\n }\n\n setZoom(zoom) {\n if (!this.map) return;\n this.map.setZoom(zoom);\n }\n\n setTileLayer(key) {\n if (!this.map) return;\n // Resolve tile layer config using the same logic as getTileLayerUrl\n const original = this.tileLayer;\n this.tileLayer = key || this.tileLayer;\n const tileConfig = this.getTileLayerUrl();\n try {\n if (this._tileLayer) {\n this.map.removeLayer(this._tileLayer);\n }\n } catch (e) {\n // ignore if layer already removed\n }\n this._tileLayer = window.L.tileLayer(tileConfig.url, {\n attribution: tileConfig.attribution,\n maxZoom: tileConfig.maxZoom\n }).addTo(this.map);\n // Keep property in sync\n this.tileLayer = key || original;\n\n // Nudge map to ensure proper redraw\n setTimeout(() => {\n try { this.map.invalidateSize(); } catch (e) {}\n }, 150);\n }\n\n async onBeforeDestroy() {\n if (this.map) {\n this.map.remove();\n this.map = null;\n }\n await super.onBeforeDestroy();\n }\n\n static async showAsDialog(options = {}) {\n const view = new MapView(options);\n const dopts = options.dialogOptions || {};\n const dialogOptions = {\n title: \"Map View\",\n header: true,\n body: view,\n size: 'lg',\n centered: false,\n ...dopts\n }\n await view.init();\n await view.getApp().showDialog(dialogOptions);\n }\n}\n\nexport default MapView;\n","/**\n * MapLibreView - Interactive vector map component using MapLibre GL JS\n * \n * MapLibre GL is better for:\n * - Vector tiles and custom styling\n * - 3D terrain and buildings\n * - High-performance rendering\n * - Heat maps and data visualizations\n * - Complex animations\n * \n * Use MapView (Leaflet) for simple marker maps.\n * Use MapLibreView for advanced visualizations.\n * \n * @example\n * const mapView = new MapLibreView({\n * markers: [\n * { lng: -122.084, lat: 37.422, popup: 'Mountain View, CA' }\n * ],\n * style: 'streets', // 'streets', 'satellite', 'dark', 'light'\n * zoom: 10,\n * height: 400\n * });\n */\n\nimport View from '@core/View.js';\n\nclass MapLibreView extends View {\n constructor(options = {}) {\n super({\n className: 'maplibre-view',\n ...options\n });\n\n this.markers = options.markers || [];\n this.center = options.center || null;\n this.zoom = options.zoom || 13;\n this.height = options.height || 400;\n this.pitch = options.pitch || 0; // 0-60 degrees (3D tilt)\n this.bearing = options.bearing || 0; // 0-360 degrees (rotation)\n this.mapStyle = options.style || 'streets'; // 'streets', 'satellite', 'dark', 'light', 'terrain'\n this.showNavigationControl = options.showNavigationControl !== false;\n this.autoFitBounds = options.autoFitBounds !== false;\n \n this.map = null;\n this.mapMarkers = [];\n this.pendingMarkers = [...this.markers];\n this.lineSources = options.lineSources || [];\n this.pendingLineData = new Map();\n\n 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 `;\n }\n\n async onAfterRender() {\n await this.loadMapLibre();\n await this.initializeMap();\n }\n\n async loadMapLibre() {\n // Check if MapLibre is already loaded\n if (window.maplibregl) return;\n\n // Load MapLibre CSS\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css';\n document.head.appendChild(link);\n\n // Load MapLibre JS\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js';\n script.onload = resolve;\n script.onerror = reject;\n document.head.appendChild(script);\n });\n }\n\n getMapStyle() {\n const styles = {\n streets: 'https://demotiles.maplibre.org/style.json',\n dark: {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors'\n }\n },\n layers: [{\n id: 'osm',\n type: 'raster',\n source: 'osm'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n },\n light: {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors'\n }\n },\n layers: [{\n id: 'osm',\n type: 'raster',\n source: 'osm'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n },\n satellite: {\n version: 8,\n sources: {\n satellite: {\n type: 'raster',\n tiles: ['https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'],\n tileSize: 256,\n attribution: '© Esri'\n }\n },\n layers: [{\n id: 'satellite',\n type: 'raster',\n source: 'satellite'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n },\n terrain: {\n version: 8,\n sources: {\n terrain: {\n type: 'raster',\n tiles: ['https://a.tile.opentopomap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenTopoMap contributors'\n }\n },\n layers: [{\n id: 'terrain',\n type: 'raster',\n source: 'terrain'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n }\n };\n\n return styles[this.mapStyle] || styles.streets;\n }\n\n async initializeMap() {\n const mapElement = this.element.querySelector(`#maplibre-${this.id}`);\n if (!mapElement || !window.maplibregl) return;\n\n // Determine map center\n let mapCenter = this.center;\n if (!mapCenter && this.markers.length > 0) {\n // Use first marker as center (MapLibre uses [lng, lat])\n mapCenter = [this.markers[0].lng, this.markers[0].lat];\n }\n if (!mapCenter) {\n // Default to world view\n mapCenter = [0, 0];\n }\n\n // Create map\n this.map = new window.maplibregl.Map({\n container: mapElement,\n style: this.getMapStyle(),\n center: mapCenter,\n zoom: this.zoom,\n pitch: this.pitch,\n bearing: this.bearing\n });\n\n // Add navigation control\n if (this.showNavigationControl) {\n this.map.addControl(new window.maplibregl.NavigationControl(), 'top-right');\n }\n\n // Wait for map to load before adding markers\n this.map.on('load', () => {\n const initialMarkers = this.pendingMarkers.length ? this.pendingMarkers : this.markers;\n this.updateMarkers(initialMarkers);\n this.lineSources.forEach(source => this.addLineSource(source));\n this.pendingLineData.forEach(source => this.addLineSource(source));\n this.pendingLineData.clear();\n });\n }\n\n addMarkers(markers) {\n if (!this.map || !Array.isArray(markers)) {\n this.pendingMarkers = Array.isArray(markers) ? markers : [];\n return;\n }\n\n markers.forEach(markerData => {\n const { lng, lat, popup, color, icon, size } = markerData;\n \n if (!lng || !lat) return;\n\n // Create marker element\n const el = document.createElement('div');\n el.className = 'maplibre-marker';\n const markerSize = Number(size) || 30;\n el.style.width = `${markerSize}px`;\n el.style.height = `${markerSize}px`;\n el.style.borderRadius = '50%';\n el.style.backgroundColor = color || '#3b82f6';\n el.style.border = '3px solid white';\n el.style.boxShadow = '0 2px 4px rgba(0,0,0,0.3)';\n el.style.cursor = 'pointer';\n el.style.display = 'flex';\n el.style.alignItems = 'center';\n el.style.justifyContent = 'center';\n\n // Optional icon\n if (icon) {\n el.innerHTML = `<i class=\"${icon}\" style=\"color: white;\"></i>`;\n }\n\n // Create marker\n const marker = new window.maplibregl.Marker({ element: el })\n .setLngLat([lng, lat])\n .addTo(this.map);\n\n // Add popup if provided\n if (popup) {\n const mapPopup = new window.maplibregl.Popup({ offset: 25 })\n .setHTML(popup);\n marker.setPopup(mapPopup);\n }\n\n this.mapMarkers.push(marker);\n });\n }\n\n fitBounds() {\n if (!this.map || this.markers.length === 0) return;\n\n const bounds = new window.maplibregl.LngLatBounds();\n \n this.markers.forEach(marker => {\n bounds.extend([marker.lng, marker.lat]);\n });\n\n this.map.fitBounds(bounds, {\n padding: 50,\n maxZoom: 15\n });\n }\n\n updateMarkers(newMarkers) {\n const markers = Array.isArray(newMarkers) ? newMarkers : [];\n this.markers = markers;\n this.pendingMarkers = markers;\n if (!this.map) return;\n\n this.clearMarkers();\n this.addMarkers(markers);\n\n if (this.autoFitBounds && markers.length > 1) {\n this.fitBounds();\n } else if (markers.length === 1 && this.map) {\n this.map.flyTo({\n center: [markers[0].lng, markers[0].lat],\n zoom: this.zoom\n });\n }\n }\n\n clearMarkers() {\n this.mapMarkers.forEach(marker => {\n marker.remove();\n });\n this.mapMarkers = [];\n }\n\n addLineSource({ id, data, paint, layout }) {\n if (!id || !data) return;\n\n const sourceId = `${id}-source`;\n\n if (!this.map) {\n this.pendingLineData.set(id, { id, data, paint, layout });\n return;\n }\n\n if (this.map.getLayer(id)) {\n this.map.removeLayer(id);\n }\n if (this.map.getSource(sourceId)) {\n this.map.removeSource(sourceId);\n }\n\n this.map.addSource(sourceId, {\n type: 'geojson',\n data\n });\n\n this.map.addLayer({\n id,\n type: 'line',\n source: sourceId,\n paint: {\n 'line-color': '#3b82f6',\n 'line-width': 2,\n 'line-opacity': 0.6,\n ...paint\n },\n layout: {\n 'line-cap': 'round',\n 'line-join': 'round',\n ...layout\n }\n });\n }\n\n updateLineSource(id, { data, paint, layout } = {}) {\n if (!id || !data) return;\n const sourceId = `${id}-source`;\n if (!this.map) {\n this.pendingLineData.set(id, { id, data, paint, layout });\n return;\n }\n if (this.map.getSource(sourceId)) {\n this.map.getSource(sourceId).setData(data);\n if (paint || layout) {\n if (paint) {\n Object.entries(paint).forEach(([key, value]) => {\n this.map.setPaintProperty(id, key, value);\n });\n }\n if (layout) {\n Object.entries(layout).forEach(([key, value]) => {\n this.map.setLayoutProperty(id, key, value);\n });\n }\n }\n } else {\n this.addLineSource({ id, data, paint, layout });\n }\n }\n\n setView(lng, lat, zoom = null) {\n if (!this.map) return;\n this.map.flyTo({\n center: [lng, lat],\n zoom: zoom || this.zoom\n });\n }\n\n setZoom(zoom) {\n if (!this.map) return;\n this.map.setZoom(zoom);\n }\n\n setPitch(pitch) {\n if (!this.map) return;\n this.map.setPitch(pitch);\n }\n\n setBearing(bearing) {\n if (!this.map) return;\n this.map.setBearing(bearing);\n }\n\n async onBeforeDestroy() {\n if (this.map) {\n this.map.remove();\n this.map = null;\n }\n await super.onBeforeDestroy();\n }\n}\n\nexport default MapLibreView;\n","// Auto-generated from countries.geojson - do not edit manually.\nexport const COUNTRY_CENTROIDS = {\n \"AD\": { name: \"Andorra\", lat: 42.54859834854764, lng: 1.5802243611232873 },\n \"AE\": { name: \"United Arab Emirates\", lat: 24.18250292309135, lng: 54.27920525789581 },\n \"AF\": { name: \"Afghanistan\", lat: 34.13402601376932, lng: 66.59216131095278 },\n \"AG\": { name: \"Antigua and Barbuda\", lat: 17.07146759372967, lng: -61.78530823226373 },\n \"AI\": { name: \"Anguilla\", lat: 18.222874004219086, lng: -63.06008343771806 },\n \"AL\": { name: \"Albania\", lat: 41.14165894891656, lng: 20.061082767269493 },\n \"AM\": { name: \"Armenia\", lat: 40.17841274230679, lng: 45.05490831965259 },\n \"AO\": { name: \"Angola\", lat: -12.167424062667942, lng: 17.651768783079 },\n \"AQ\": { name: \"Antarctica\", lat: -77.16987521415838, lng: -177.56451613408842 },\n \"AR\": { name: \"Argentina\", lat: -35.697270518120085, lng: -64.53238503843076 },\n \"AS\": { name: \"American Samoa\", lat: -14.305711987770538, lng: -170.7007316174498 },\n \"AT\": { name: \"Austria\", lat: 47.631858269895794, lng: 13.797778364631036 },\n \"AU\": { name: \"Australia\", lat: -25.697337673983082, lng: 134.02277170916162 },\n \"AW\": { name: \"Aruba\", lat: 12.515625722992898, lng: -69.97564014284046 },\n \"AZ\": { name: \"Azerbaijan\", lat: 40.3920509942049, lng: 48.634592670644324 },\n \"BA\": { name: \"Bosnia and Herzegovina\", lat: 44.14415356126429, lng: 17.83467240787538 },\n \"BB\": { name: \"Barbados\", lat: 13.183219369337529, lng: -59.557383949150285 },\n \"BD\": { name: \"Bangladesh\", lat: 23.673728665121, lng: 90.43212562608613 },\n \"BE\": { name: \"Belgium\", lat: 50.6182138854095, lng: 4.675010154696485 },\n \"BF\": { name: \"Burkina Faso\", lat: 12.108709036312737, lng: -1.6932816211842325 },\n \"BG\": { name: \"Bulgaria\", lat: 42.82043677302438, lng: 25.251739122561908 },\n \"BH\": { name: \"Bahrain\", lat: 26.04798501537066, lng: 50.540695402276775 },\n \"BI\": { name: \"Burundi\", lat: -3.261251993278643, lng: 29.88518227845293 },\n \"BJ\": { name: \"Benin\", lat: 9.503013199615893, lng: 2.305714528830206 },\n \"BL\": { name: \"Saint Barthelemy\", lat: 17.90561691241738, lng: -62.83051610005156 },\n \"BM\": { name: \"Bermuda\", lat: 32.315067430740726, lng: -64.7458500599169 },\n \"BN\": { name: \"Brunei Darussalam\", lat: 4.543205889917609, lng: 114.6430958360464 },\n \"BO\": { name: \"Bolivia\", lat: -16.7312488393574, lng: -64.45209597511206 },\n \"BQ\": { name: \"Bonaire\", lat: 12.180844982440338, lng: -68.29350445958761 },\n \"BQ\": { name: \"Saba\", lat: 17.632512616389718, lng: -63.23739481909494 },\n \"BQ\": { name: \"Saint Eustatius\", lat: 17.4919042294197, lng: -62.978230589445026 },\n \"BR\": { name: \"Brazil\", lat: -11.524630416426652, lng: -54.355206608256424 },\n \"BS\": { name: \"Bahamas\", lat: 24.72162633646784, lng: -78.07275370060313 },\n \"BT\": { name: \"Bhutan\", lat: 27.42163933959824, lng: 90.46716647173861 },\n \"BV\": { name: \"Bouvet Island\", lat: -54.42316679395248, lng: 3.411969465057627 },\n \"BW\": { name: \"Botswana\", lat: -22.236609002062902, lng: 23.85779956995608 },\n \"BY\": { name: \"Belarus\", lat: 53.46791374543163, lng: 27.964252054715104 },\n \"BZ\": { name: \"Belize\", lat: 17.24252476647155, lng: -88.68273510023441 },\n \"CA\": { name: \"Canada\", lat: 57.550480044655636, lng: -98.41680517868062 },\n \"CC\": { name: \"Cocos Islands\", lat: -12.171249450199545, lng: 96.83688767323002 },\n \"CD\": { name: \"Congo DRC\", lat: -3.338629596207896, lng: 23.419827574282188 },\n \"CF\": { name: \"Central African Republic\", lat: 6.331390033944319, lng: 20.520743419397256 },\n \"CG\": { name: \"Congo\", lat: -0.7294391595233845, lng: 14.879732849491393 },\n \"CH\": { name: \"Switzerland\", lat: 46.73678128684938, lng: 8.286928794895285 },\n \"CI\": { name: \"Côte d'Ivoire\", lat: 7.536779279421307, lng: -5.571710194917734 },\n \"CK\": { name: \"Cook Islands\", lat: -21.222613253399842, lng: -159.78768870952257 },\n \"CL\": { name: \"Chile\", lat: -37.82938283049967, lng: -70.76863431739216 },\n \"CM\": { name: \"Cameroon\", lat: 6.294168487480992, lng: 12.948474142398263 },\n \"CN\": { name: \"China\", lat: 38.07325481105728, lng: 104.69113855849604 },\n \"CO\": { name: \"Colombia\", lat: 4.187753877352739, lng: -72.6445066243485 },\n \"CR\": { name: \"Costa Rica\", lat: 9.863467407406214, lng: -84.14673625701816 },\n \"CU\": { name: \"Cuba\", lat: 21.476176522869448, lng: -79.69817857618705 },\n \"CV\": { name: \"Cabo Verde\", lat: 15.076411518651643, lng: -23.63401005900474 },\n \"CW\": { name: \"Curacao\", lat: 12.199996647939832, lng: -68.96939768599042 },\n \"CX\": { name: \"Christmas Island\", lat: -10.446440802183416, lng: 105.70209512200549 },\n \"CY\": { name: \"Cyprus\", lat: 35.11700416345239, lng: 33.375346009199205 },\n \"CZ\": { name: \"Czech Republic\", lat: 49.74917370930982, lng: 15.383273292023533 },\n \"DE\": { name: \"Germany\", lat: 51.08304539800482, lng: 10.426171427430804 },\n \"DJ\": { name: \"Djibouti\", lat: 11.750235727618804, lng: 42.613496898789506 },\n \"DK\": { name: \"Denmark\", lat: 56.00118817971057, lng: 9.378670542409406 },\n \"DM\": { name: \"Dominica\", lat: 15.429269860940513, lng: -61.360471946942994 },\n \"DO\": { name: \"Dominican Republic\", lat: 18.77954818522993, lng: -70.43495198520012 },\n \"DZ\": { name: \"Algeria\", lat: 28.350969744889056, lng: 2.6558464719769135 },\n \"EC\": { name: \"Ecuador\", lat: -1.5642721388853116, lng: -78.4630326109714 },\n \"EE\": { name: \"Estonia\", lat: 58.648108311231034, lng: 25.916870250633806 },\n \"EG\": { name: \"Egypt\", lat: 26.60517034450628, lng: 30.240135435012338 },\n \"ER\": { name: \"Eritrea\", lat: 15.005533147667684, lng: 39.2672401449901 },\n \"ES\": { name: \"Spain\", lat: 40.365008336683836, lng: -3.6516251409956983 },\n \"ES\": { name: \"Canarias\", lat: 28.297665106525546, lng: -16.53799441021647 },\n \"ET\": { name: \"Ethiopia\", lat: 8.729389557048396, lng: 39.914902886544276 },\n \"FI\": { name: \"Finland\", lat: 65.01578959749911, lng: 25.65738433454702 },\n \"FJ\": { name: \"Fiji\", lat: -17.822470952336204, lng: 177.98144613732626 },\n \"FK\": { name: \"Falkland Islands\", lat: -51.75901312766726, lng: -58.746646363799854 },\n \"FM\": { name: \"Micronesia\", lat: 6.8789448129255435, lng: 158.2291899444527 },\n \"FO\": { name: \"Faroe Islands\", lat: 62.130896281495346, lng: -6.9811060913122835 },\n \"FR\": { name: \"France\", lat: 46.6423682169416, lng: 2.1940236627886227 },\n \"GA\": { name: \"Gabon\", lat: -0.628448459921234, lng: 11.839410898545754 },\n \"GB\": { name: \"United Kingdom\", lat: 53.97844735080214, lng: -2.852943909329258 },\n \"GD\": { name: \"Grenada\", lat: 12.112926656338907, lng: -61.67937937204098 },\n \"GE\": { name: \"Georgia\", lat: 42.17986277737226, lng: 43.378866534112234 },\n \"GF\": { name: \"French Guiana\", lat: 3.857429742497078, lng: -53.32232307156624 },\n \"GG\": { name: \"Guernsey\", lat: 49.45870771378872, lng: -2.576392582891568 },\n \"GH\": { name: \"Ghana\", lat: 7.94530467243628, lng: -1.219233362526581 },\n \"GI\": { name: \"Gibraltar\", lat: 36.14022671336082, lng: -5.345549484594358 },\n \"GL\": { name: \"Greenland\", lat: 74.16847218965994, lng: -42.07567788066985 },\n \"GM\": { name: \"Gambia\", lat: 13.428617959189328, lng: -15.383380385869662 },\n \"GN\": { name: \"Guinea\", lat: 10.255986541378112, lng: -10.986948848040218 },\n \"GP\": { name: \"Guadeloupe\", lat: 16.24420002705553, lng: -61.54382262282755 },\n \"GQ\": { name: \"Equatorial Guinea\", lat: 1.5954643936590733, lng: 10.425456672353823 },\n \"GR\": { name: \"Greece\", lat: 39.42012261727978, lng: 23.110368936161876 },\n \"GS\": { name: \"South Georgia and South Sandwich Islands\", lat: -54.37666443862139, lng: -36.77509575898928 },\n \"GT\": { name: \"Guatemala\", lat: 15.820878515352684, lng: -90.31219349119617 },\n \"GU\": { name: \"Guam\", lat: 13.445430479945276, lng: 144.78024458298802 },\n \"GW\": { name: \"Guinea-Bissau\", lat: 11.980075324820504, lng: -14.980186756910847 },\n \"GY\": { name: \"Guyana\", lat: 4.68211981385056, lng: -58.91352612754667 },\n \"HM\": { name: \"Heard Island and McDonald Islands\", lat: -53.084170035513736, lng: 73.49298560844045 },\n \"HN\": { name: \"Honduras\", lat: 14.740370695750006, lng: -86.49251679006962 },\n \"HR\": { name: \"Croatia\", lat: 44.91192100856702, lng: 16.625761129583374 },\n \"HT\": { name: \"Haiti\", lat: 18.883520486983567, lng: -72.89291379842 },\n \"HU\": { name: \"Hungary\", lat: 47.22527332486294, lng: 19.39620048366142 },\n \"ID\": { name: \"Indonesia\", lat: 0.15591979959037652, lng: 113.96538246847302 },\n \"IE\": { name: \"Ireland\", lat: 53.30489539816495, lng: -8.241128545554096 },\n \"IL\": { name: \"Israel\", lat: 31.513542220043195, lng: 35.027923472437024 },\n \"IM\": { name: \"Isle of Man\", lat: 54.22855301008011, lng: -4.532995055468449 },\n \"IN\": { name: \"India\", lat: 23.586300567746722, lng: 81.17300408530181 },\n \"IO\": { name: \"British Indian Ocean Territory\", lat: -7.323548444385743, lng: 72.43501618476016 },\n \"IQ\": { name: \"Iraq\", lat: 33.105075667527906, lng: 43.832529181056884 },\n \"IR\": { name: \"Iran\", lat: 32.906023742890056, lng: 54.237077001065444 },\n \"IS\": { name: \"Iceland\", lat: 65.12360920205514, lng: -19.05682967106099 },\n \"IT\": { name: \"Italy\", lat: 42.98201127614267, lng: 12.763657166123137 },\n \"JE\": { name: \"Jersey\", lat: 49.215396925724306, lng: -2.1291601162653575 },\n \"JM\": { name: \"Jamaica\", lat: 18.12207889341651, lng: -77.30358894542778 },\n \"JO\": { name: \"Jordan\", lat: 31.387064884449156, lng: 36.95728884547246 },\n \"JP\": { name: \"Japan\", lat: 36.76738832597829, lng: 137.46934234351835 },\n \"KE\": { name: \"Kenya\", lat: 0.6899182318376179, lng: 37.95309411262371 },\n \"KG\": { name: \"Kyrgyzstan\", lat: 41.35698905438358, lng: 74.17532903468319 },\n \"KH\": { name: \"Cambodia\", lat: 12.699186865507775, lng: 105.03973078680701 },\n \"KI\": { name: \"Kiribati\", lat: 1.8676673749241066, lng: -157.39024189323504 },\n \"KM\": { name: \"Comoros\", lat: -11.658861474508491, lng: 43.34826587429403 },\n \"KN\": { name: \"Saint Kitts and Nevis\", lat: 17.314736299587768, lng: -62.74560385895787 },\n \"KP\": { name: \"North Korea\", lat: 40.19198091470839, lng: 127.3379805653744 },\n \"KR\": { name: \"South Korea\", lat: 36.402386712544114, lng: 127.76224551357649 },\n \"KW\": { name: \"Kuwait\", lat: 29.281360965443092, lng: 47.56311109320184 },\n \"KY\": { name: \"Cayman Islands\", lat: 19.311231805620288, lng: -81.25203208977878 },\n \"KZ\": { name: \"Kazakhstan\", lat: 47.641465195176835, lng: 66.3759193479301 },\n \"LA\": { name: \"Laos\", lat: 18.117282736873282, lng: 103.76375899026448 },\n \"LB\": { name: \"Lebanon\", lat: 33.91160170722086, lng: 35.89651946324749 },\n \"LC\": { name: \"Saint Lucia\", lat: 13.895749185129906, lng: -60.9689510935251 },\n \"LI\": { name: \"Liechtenstein\", lat: 47.14627562133036, lng: 9.547674672376376 },\n \"LK\": { name: \"Sri Lanka\", lat: 7.696630939329944, lng: 80.66931169770622 },\n \"LR\": { name: \"Liberia\", lat: 6.52012979398834, lng: -9.258988935497618 },\n \"LS\": { name: \"Lesotho\", lat: -29.60168116924817, lng: 28.24475317864227 },\n \"LT\": { name: \"Lithuania\", lat: 55.29437393417175, lng: 23.946021605013534 },\n \"LU\": { name: \"Luxembourg\", lat: 49.77523454542369, lng: 6.103230338458876 },\n \"LV\": { name: \"Latvia\", lat: 56.813853047554154, lng: 24.693671325654403 },\n \"LY\": { name: \"Libya\", lat: 27.202915771690794, lng: 17.91133392454237 },\n \"MA\": { name: \"Morocco\", lat: 28.687598134979325, lng: -8.817212587250811 },\n \"MC\": { name: \"Monaco\", lat: 43.74798224995656, lng: 7.412820873271196 },\n \"MD\": { name: \"Moldova\", lat: 47.0725674580696, lng: 28.391111865941348 },\n \"ME\": { name: \"Montenegro\", lat: 42.73694835210454, lng: 19.29505087156758 },\n \"MF\": { name: \"Saint Martin\", lat: 18.078012113224464, lng: -63.06678525361946 },\n \"MG\": { name: \"Madagascar\", lat: -19.04163612493041, lng: 46.68493466832544 },\n \"MH\": { name: \"Marshall Islands\", lat: 7.307929900994344, lng: 168.72016025351076 },\n \"MK\": { name: \"North Macedonia\", lat: 41.59402890143112, lng: 21.70998923872772 },\n \"ML\": { name: \"Mali\", lat: 17.168146208584837, lng: -4.346399841781153 },\n \"MM\": { name: \"Myanmar\", lat: 19.901227931399873, lng: 97.08892285397344 },\n \"MN\": { name: \"Mongolia\", lat: 47.08644454604851, lng: 103.3987360327455 },\n \"MP\": { name: \"Northern Mariana Islands\", lat: 15.178063516432115, lng: 145.74119737203134 },\n \"MQ\": { name: \"Martinique\", lat: 14.642697353597645, lng: -61.01432380875083 },\n \"MR\": { name: \"Mauritania\", lat: 20.466731212820022, lng: -10.495079045035716 },\n \"MS\": { name: \"Montserrat\", lat: 16.735363391460357, lng: -62.18693281256255 },\n \"MT\": { name: \"Malta\", lat: 35.890522650899314, lng: 14.441922442508494 },\n \"MU\": { name: \"Mauritius\", lat: -20.28142317475198, lng: 57.56415671066546 },\n \"MV\": { name: \"Maldives\", lat: -0.6065577168009924, lng: 73.10076245140479 },\n \"MW\": { name: \"Malawi\", lat: -13.128986464184024, lng: 34.23441182298881 },\n \"MX\": { name: \"Mexico\", lat: 23.87436068093592, lng: -101.55399731630118 },\n \"MY\": { name: \"Malaysia\", lat: 3.6716608556387857, lng: 114.63330303992869 },\n \"MZ\": { name: \"Mozambique\", lat: -17.525230309488748, lng: 35.208577031290176 },\n \"NA\": { name: \"Namibia\", lat: -21.90858163281473, lng: 18.16451345845268 },\n \"NC\": { name: \"New Caledonia\", lat: -21.33003372660827, lng: 165.50767040438612 },\n \"NE\": { name: \"Niger\", lat: 17.08105392407292, lng: 8.86863247002646 },\n \"NF\": { name: \"Norfolk Island\", lat: -29.037654445046282, lng: 167.95259597483337 },\n \"NG\": { name: \"Nigeria\", lat: 9.61029352034213, lng: 8.147714845256194 },\n \"NI\": { name: \"Nicaragua\", lat: 12.893566631930554, lng: -85.016088327669 },\n \"NL\": { name: \"Netherlands\", lat: 52.134054128923886, lng: 5.554136426128487 },\n \"NO\": { name: \"Norway\", lat: 64.97775882947745, lng: 16.670259272390894 },\n \"NP\": { name: \"Nepal\", lat: 28.300920699755657, lng: 84.1338898313567 },\n \"NR\": { name: \"Nauru\", lat: -0.5221021440668993, lng: 166.92937633139178 },\n \"NU\": { name: \"Niue\", lat: -19.05230921680393, lng: -169.86878106699083 },\n \"NZ\": { name: \"New Zealand\", lat: -43.82765432544426, lng: 170.69035541428696 },\n \"OM\": { name: \"Oman\", lat: 20.7242833183209, lng: 55.841088119829 },\n \"PA\": { name: \"Panama\", lat: 8.439536749576892, lng: -80.14428761482796 },\n \"PE\": { name: \"Peru\", lat: -8.522717984240291, lng: -74.11416196781884 },\n \"PF\": { name: \"French Polynesia\", lat: -17.674684080120677, lng: -149.40041671099763 },\n \"PG\": { name: \"Papua New Guinea\", lat: -7.156912819152135, lng: 144.8348942994695 },\n \"PH\": { name: \"Philippines\", lat: 15.586542251094242, lng: 121.82208941416745 },\n \"PK\": { name: \"Pakistan\", lat: 30.116188371410882, lng: 69.08835090769651 },\n \"PL\": { name: \"Poland\", lat: 52.06848055692473, lng: 19.43573279234468 },\n \"PM\": { name: \"Saint Pierre and Miquelon\", lat: 46.95153913615198, lng: -56.32465353437558 },\n \"PN\": { name: \"Pitcairn\", lat: -24.366121747565458, lng: -128.3149848627581 },\n \"PR\": { name: \"Puerto Rico\", lat: 18.216224086610914, lng: -66.49425339593509 },\n \"PS\": { name: \"Palestinian Territory\", lat: 31.930818736453883, lng: 35.24251184154588 },\n \"PT\": { name: \"Portugal\", lat: 39.67529214702138, lng: -7.933662183874006 },\n \"PW\": { name: \"Palau\", lat: 7.534775852547396, lng: 134.57965086721052 },\n \"PY\": { name: \"Paraguay\", lat: -23.42190559259428, lng: -58.38906357428651 },\n \"QA\": { name: \"Qatar\", lat: 25.318528486425386, lng: 51.19794918743203 },\n \"RE\": { name: \"Réunion\", lat: -21.119825460665105, lng: 55.54393506194689 },\n \"RO\": { name: \"Romania\", lat: 45.82454894397586, lng: 25.094158201563292 },\n \"RS\": { name: \"Serbia\", lat: 44.02679870131969, lng: 20.85677444395745 },\n \"RU\": { name: \"Russian Federation\", lat: 59.039434214106194, lng: 98.6704990698032 },\n \"RW\": { name: \"Rwanda\", lat: -2.014687460047154, lng: 29.919439681764082 },\n \"SA\": { name: \"Saudi Arabia\", lat: 24.136038144757897, lng: 44.600958178225596 },\n \"SB\": { name: \"Solomon Islands\", lat: -9.613104734596515, lng: 160.16475795033884 },\n \"SC\": { name: \"Seychelles\", lat: -4.660002318822744, lng: 55.47250789595527 },\n \"SD\": { name: \"Sudan\", lat: 15.67060230984256, lng: 29.951458283594064 },\n \"SE\": { name: \"Sweden\", lat: 62.73420986108448, lng: 17.062431988004956 },\n \"SG\": { name: \"Singapore\", lat: 1.3528251890006349, lng: 103.81025757634053 },\n \"SH\": { name: \"Saint Helena\", lat: -15.962963318340398, lng: -5.717391620813109 },\n \"SI\": { name: \"Slovenia\", lat: 46.13759229564504, lng: 14.890636899973781 },\n \"SJ\": { name: \"Svalbard\", lat: 78.57318936469626, lng: 16.036378851505283 },\n \"SK\": { name: \"Slovakia\", lat: 48.69808390520484, lng: 19.581015362490966 },\n \"SL\": { name: \"Sierra Leone\", lat: 8.561330384750587, lng: -11.78656695731115 },\n \"SM\": { name: \"San Marino\", lat: 43.942820729097896, lng: 12.461278349581722 },\n \"SN\": { name: \"Senegal\", lat: 14.228861491763402, lng: -14.610875368352305 },\n \"SO\": { name: \"Somalia\", lat: 6.524534573103924, lng: 45.40037867243972 },\n \"SR\": { name: \"Suriname\", lat: 4.098723595920171, lng: -55.855514311561286 },\n \"SS\": { name: \"South Sudan\", lat: 7.657782041763295, lng: 30.3851856901788 },\n \"ST\": { name: \"Sao Tome and Principe\", lat: 0.22744704294793774, lng: 6.606158796857607 },\n \"SV\": { name: \"El Salvador\", lat: 13.758041517055418, lng: -88.85911489238985 },\n \"SX\": { name: \"Sint Maarten\", lat: 18.03942608463078, lng: -63.06883135915303 },\n \"SY\": { name: \"Syria\", lat: 35.09751106058316, lng: 38.5117323139514 },\n \"SZ\": { name: \"Eswatini\", lat: -26.562540935608702, lng: 31.510685746082007 },\n \"TC\": { name: \"Turks and Caicos Islands\", lat: 21.799865427483745, lng: -71.74058946811508 },\n \"TD\": { name: \"Chad\", lat: 15.283493546654503, lng: 18.427113900363025 },\n \"TF\": { name: \"Juan De Nova Island\", lat: -17.06449193630804, lng: 42.74374761089645 },\n \"TF\": { name: \"French Southern Territories\", lat: -49.26329687105643, lng: 69.54686984724839 },\n \"TF\": { name: \"Glorioso Islands\", lat: -11.566224871643417, lng: 47.290948081543384 },\n \"TG\": { name: \"Togo\", lat: 8.660743037717811, lng: 0.8990857571109684 },\n \"TH\": { name: \"Thailand\", lat: 13.66222784745538, lng: 101.08675116214552 },\n \"TJ\": { name: \"Tajikistan\", lat: 38.56933138382972, lng: 70.94215281065698 },\n \"TK\": { name: \"Tokelau\", lat: -9.195174767256544, lng: -171.85265950722743 },\n \"TL\": { name: \"Timor-Leste\", lat: -8.809894630601962, lng: 125.95024049562659 },\n \"TM\": { name: \"Turkmenistan\", lat: 39.06069118001429, lng: 58.4577357627054 },\n \"TN\": { name: \"Tunisia\", lat: 34.08636179565723, lng: 9.65587551697984 },\n \"TO\": { name: \"Tonga\", lat: -21.15927212823853, lng: -175.20415878511247 },\n \"TR\": { name: \"Turkey\", lat: 38.93207363123396, lng: 35.56886764076691 },\n \"TT\": { name: \"Trinidad and Tobago\", lat: 10.415515638298093, lng: -61.37236579976247 },\n \"TV\": { name: \"Tuvalu\", lat: -8.514701506447222, lng: 179.217833977593 },\n \"TZ\": { name: \"Tanzania\", lat: -6.355794440041147, lng: 34.81832206060381 },\n \"UA\": { name: \"Ukraine\", lat: 48.657532515563794, lng: 31.27377208442636 },\n \"UG\": { name: \"Uganda\", lat: 1.2821729218416205, lng: 32.34371768463123 },\n \"UM\": { name: \"United States Minor Outlying Islands\", lat: 19.302045812215958, lng: 166.63800339749642 },\n \"US\": { name: \"United States\", lat: 38.8208089190304, lng: -96.33161660829639 },\n \"UY\": { name: \"Uruguay\", lat: -32.78195043831093, lng: -56.01919523458085 },\n \"UZ\": { name: \"Uzbekistan\", lat: 41.4879065244633, lng: 63.8548297593985 },\n \"VA\": { name: \"Vatican City\", lat: 41.90402351316735, lng: 12.451312917026133 },\n \"VC\": { name: \"Saint Vincent and the Grenadines\", lat: 13.254808122970651, lng: -61.193766354393034 },\n \"VE\": { name: \"Venezuela\", lat: 7.148324760507107, lng: -66.36492135985132 },\n \"VG\": { name: \"British Virgin Islands\", lat: 18.42195819619707, lng: -64.62406519257699 },\n \"VI\": { name: \"US Virgin Islands\", lat: 17.738009708772523, lng: -64.76155341409797 },\n \"VN\": { name: \"Vietnam\", lat: 16.517347170839393, lng: 105.91338832758704 },\n \"VU\": { name: \"Vanuatu\", lat: -15.189132121699332, lng: 166.84912735669738 },\n \"WF\": { name: \"Wallis and Futuna\", lat: -14.283442307826677, lng: -178.12735555777184 },\n \"WS\": { name: \"Samoa\", lat: -13.634252953274622, lng: -172.44107655740137 },\n \"YE\": { name: \"Yemen\", lat: 16.001392616307445, lng: 47.46815793206386 },\n \"YT\": { name: \"Mayotte\", lat: -12.824468416301052, lng: 45.128142327031064 },\n \"ZA\": { name: \"South Africa\", lat: -28.55361930679731, lng: 24.75252746489084 },\n \"ZM\": { name: \"Zambia\", lat: -13.162832953186246, lng: 27.75521363430896 },\n \"ZW\": { name: \"Zimbabwe\", lat: -18.92700121981475, lng: 29.717829640720844 },\n};\n\nexport function getCountryCentroid(code) {\n if (!code) return null;\n return COUNTRY_CENTROIDS[code.toUpperCase()] || null;\n}\n\nexport function getCountryCentroids() {\n return COUNTRY_CENTROIDS;\n}","import View from '@core/View.js';\nimport MapLibreView from './MapLibreView.js';\nimport { COUNTRY_CENTROIDS } from './countryCentroids.js';\n\nclass MetricsCountryMapView extends View {\n constructor(options = {}) {\n const mapHeight = options.height || 320;\n super({\n className: 'metrics-country-map-view',\n ...options\n });\n\n this.endpoint = options.endpoint || '/api/metrics/fetch';\n this.account = options.account || 'global';\n this.category = options.category || null;\n this.slugs = options.slugs || null;\n this.granularity = options.granularity || 'days';\n this.maxCountries = options.maxCountries || 12;\n this.metricLabel = options.metricLabel || 'Events';\n this.height = mapHeight;\n this.mapStyle = options.mapStyle || 'dark';\n this.mapOptions = options.mapOptions || {};\n this.showRoutes = options.showRoutes !== false;\n this.routeOrigin = options.routeOrigin || { lng: -77.346, lat: 38.958, name: 'Reston, VA' };\n this._refreshing = false;\n }\n\n async getTemplate() {\n 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 `;\n }\n\n async onInit() {\n this.statusEl = document.createElement('div');\n this.statusEl.className = 'text-muted small px-3 pb-2';\n this.element.appendChild(this.statusEl);\n\n this.mapView = new MapLibreView({\n containerId: `${this.id}-map`,\n height: this.height,\n style: this.mapStyle,\n zoom: this.mapOptions.zoom ?? 1.3,\n center: this.mapOptions.center || [10, 20],\n pitch: this.mapOptions.pitch ?? 20,\n bearing: this.mapOptions.bearing ?? 0,\n showNavigationControl: this.mapOptions.showNavigationControl ?? true,\n autoFitBounds: this.mapOptions.autoFitBounds ?? false\n });\n this.addChild(this.mapView);\n await this.refresh();\n }\n\n async refresh() {\n if (this._refreshing) return;\n this._refreshing = true;\n this.setStatus('Loading hotspots…');\n try {\n const metrics = await this.fetchMetrics();\n await this.applyMetrics(metrics);\n this.setStatus('');\n } catch (error) {\n console.error('MetricsCountryMapView refresh error', error);\n this.setStatus('Unable to load country metrics.');\n } finally {\n this._refreshing = false;\n }\n }\n\n async fetchMetrics() {\n const rest = this.getApp()?.rest;\n if (!rest) {\n throw new Error('REST client unavailable');\n }\n const params = {\n account: this.account,\n granularity: this.granularity,\n with_labels: true\n };\n if (this.category) params.category = this.category;\n if (this.slugs) {\n const slugsArray = Array.isArray(this.slugs) ? this.slugs : [this.slugs];\n params['slugs[]'] = slugsArray;\n }\n\n const response = await rest.GET(this.endpoint, params);\n if (!response.success || !response.data?.status) {\n throw new Error(response.data?.error || 'Metrics API error');\n }\n return response.data.data;\n }\n\n async applyMetrics(data) {\n const metrics = data?.data || {};\n const labels = data?.labels || [];\n const entries = [];\n\n Object.entries(metrics).forEach(([iso, series]) => {\n const total = series.reduce((sum, value) => sum + (Number(value) || 0), 0);\n if (!total) return;\n const centroid = COUNTRY_CENTROIDS[iso.toUpperCase()];\n if (!centroid) return;\n entries.push({\n code: iso.toUpperCase(),\n total,\n values: series,\n centroid\n });\n });\n\n if (!entries.length) {\n this.mapView.updateMarkers([]);\n this.renderLegend([]);\n this.setStatus('No country data available for the selected range.');\n return;\n }\n\n entries.sort((a, b) => b.total - a.total);\n const topEntries = entries.slice(0, this.maxCountries);\n const maxValue = topEntries[0]?.total || 1;\n\n const markers = topEntries.map(entry => {\n const intensity = entry.total / maxValue;\n const markerSize = Math.round(18 + intensity * 24);\n return {\n lng: entry.centroid.lng,\n lat: entry.centroid.lat,\n size: markerSize,\n color: this.getMarkerColor(intensity),\n popup: `\n <div class=\"text-center\">\n <strong>${entry.centroid.name}</strong><br/>\n <span class=\"text-muted\">${entry.total.toLocaleString()} ${this.metricLabel}</span>\n </div>\n `\n };\n });\n\n if (this.showRoutes && this.routeOrigin?.lng && this.routeOrigin?.lat) {\n markers.push({\n lng: this.routeOrigin.lng,\n lat: this.routeOrigin.lat,\n size: 26,\n color: '#0d6efd',\n icon: 'bi bi-broadcast-pin',\n 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 `\n });\n }\n\n this.mapView.updateMarkers(markers);\n this.renderLegend(topEntries, labels);\n if (this.showRoutes) {\n this.renderRoutes(topEntries, maxValue);\n }\n }\n\n getMarkerColor(intensity) {\n const start = [32, 201, 151]; // teal\n const end = [255, 193, 7]; // amber\n const mix = start.map((value, idx) =>\n Math.round(value + (end[idx] - value) * intensity)\n );\n return `rgba(${mix[0]}, ${mix[1]}, ${mix[2]}, 0.9)`;\n }\n\n renderLegend(entries) {\n const legendEl = this.element.querySelector('[data-region=\"legend\"]');\n if (!legendEl) return;\n if (!entries.length) {\n legendEl.innerHTML = '';\n return;\n }\n\n const maxValue = entries[0]?.total || 1;\n const rows = entries.map(entry => {\n const percent = ((entry.total / maxValue) * 100).toFixed(0);\n return `\n <div class=\"d-flex justify-content-between align-items-center py-1 border-top\">\n <div>\n <span class=\"fw-semibold\">${entry.centroid.name}</span>\n <span class=\"text-muted ms-1\">(${entry.code})</span>\n </div>\n <div class=\"text-end\">\n <div class=\"fw-semibold\">${entry.total.toLocaleString()}</div>\n <small class=\"text-muted\">${percent}% of top</small>\n </div>\n </div>\n `;\n }).join('');\n\n legendEl.innerHTML = rows;\n }\n\n renderRoutes(entries, maxValue) {\n const origin = this.routeOrigin || null;\n if (!origin || !origin.lng || !origin.lat || !this.mapView) return;\n\n const features = entries.map(entry => ({\n type: 'Feature',\n geometry: {\n type: 'LineString',\n coordinates: [\n [origin.lng, origin.lat],\n [entry.centroid.lng, entry.centroid.lat]\n ]\n },\n properties: {\n total: entry.total,\n intensity: entry.total / maxValue\n }\n }));\n\n const geojson = {\n type: 'FeatureCollection',\n features\n };\n\n const paint = {\n 'line-color': [\n 'interpolate',\n ['linear'],\n ['get', 'intensity'],\n 0,\n 'rgba(32, 201, 151, 0.6)',\n 1,\n 'rgba(255, 193, 7, 0.95)'\n ],\n 'line-width': [\n 'interpolate',\n ['linear'],\n ['get', 'intensity'],\n 0,\n 1.75,\n 1,\n 6\n ],\n 'line-opacity': [\n 'interpolate',\n ['linear'],\n ['get', 'intensity'],\n 0,\n 0.45,\n 1,\n 0.95\n ]\n };\n\n this.mapView.lineSources = this.mapView.lineSources.filter(src => src.id !== `${this.id}-routes`);\n this.mapView.updateLineSource(`${this.id}-routes`, {\n data: geojson,\n paint\n });\n }\n\n setStatus(message) {\n if (!this.statusEl) return;\n this.statusEl.textContent = message || '';\n this.statusEl.style.display = message ? 'block' : 'none';\n }\n\n}\n\nexport default MetricsCountryMapView;\n"],"names":[],"mappings":";AAqBA,MAAM,gBAAgB,KAAK;AAAA,EACvB,YAAY,UAAU,IAAI;AACtB,UAAM;AAAA,MACF,WAAW;AAAA,MACX,GAAG;AAAA,IACf,CAAS;AAED,SAAK,UAAU,QAAQ,WAAW,CAAA;AAClC,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,kBAAkB,QAAQ,oBAAoB;AACnD,SAAK,YAAY,QAAQ,aAAa;AACtC,SAAK,sBAAsB,QAAQ,wBAAwB;AAC3D,SAAK,mBAAmB,QAAQ,qBAAqB;AACrD,SAAK,eAAe,QAAQ,gBAAgB;AAAA,MACxC,KAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,SAAS;AAAA,IACrB;AAEQ,SAAK,MAAM;AACX,SAAK,iBAAiB,CAAA;AACtB,SAAK,aAAa;AAElB,SAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB;AAAA,EAEA,MAAM,gBAAgB;AAClB,UAAM,KAAK,YAAW;AACtB,UAAM,KAAK,cAAa;AAAA,EAC5B;AAAA,EAEA,MAAM,cAAc;AAEhB,QAAI,OAAO,EAAG;AAGd,UAAM,YAAY,IAAI,QAAQ,CAAC,YAAY;AACvC,YAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,MAAM;AACX,WAAK,OAAO;AACZ,WAAK,SAAS;AACd,WAAK,UAAU;AACf,eAAS,KAAK,YAAY,IAAI;AAAA,IAClC,CAAC;AAGD,UAAM,WAAW,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9C,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,MAAM;AACb,aAAO,SAAS;AAChB,aAAO,UAAU;AACjB,eAAS,KAAK,YAAY,MAAM;AAAA,IACpC,CAAC;AAGD,UAAM,QAAQ,IAAI,CAAC,WAAW,QAAQ,CAAC;AAAA,EAC3C;AAAA,EAEA,kBAAkB;AACd,UAAM,aAAa;AAAA;AAAA,MAEf,KAAK;AAAA,QACD,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,WAAW;AAAA,QACP,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,SAAS;AAAA,QACL,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,MAAM;AAAA,QACF,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,OAAO;AAAA,QACH,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,YAAY;AAAA,QACR,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,IAAI;AAAA,QACA,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA;AAAA,MAGY,SAAS;AAAA,QACL,KAAK;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACzB;AAAA,IACA;AAEQ,WAAO,WAAW,KAAK,SAAS,KAAK,WAAW;AAAA,EACpD;AAAA,EAEA,MAAM,gBAAgB;AAClB,UAAM,aAAa,KAAK,QAAQ,cAAc,QAAQ,KAAK,EAAE,EAAE;AAC/D,QAAI,CAAC,cAAc,CAAC,OAAO,EAAG;AAG9B,QAAI,YAAY,KAAK;AACrB,QAAI,CAAC,aAAa,KAAK,QAAQ,SAAS,GAAG;AAEvC,kBAAY,CAAC,KAAK,QAAQ,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,EAAE,GAAG;AAAA,IACzD;AACA,QAAI,CAAC,WAAW;AAEZ,kBAAY,CAAC,GAAG,CAAC;AAAA,IACrB;AAGA,SAAK,MAAM,OAAO,EAAE,IAAI,YAAY;AAAA,MAChC,QAAQ;AAAA,MACR,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,IAC9B,CAAS;AAED,QAAI,KAAK,OAAO,KAAK,IAAI,sBAAsB,KAAK,wBAAwB,OAAO;AAC/E,UAAI;AAAE,aAAK,IAAI,mBAAmB,UAAU,EAAE;AAAA,MAAG,SAAS,GAAG;AAAA,MAAC;AAAA,IAClE;AAGA,UAAM,aAAa,KAAK,gBAAe;AACvC,SAAK,aAAa,OAAO,EAAE,UAAU,WAAW,KAAK;AAAA,MACjD,aAAa,WAAW;AAAA,MACxB,SAAS,WAAW;AAAA,IAChC,CAAS,EAAE,MAAM,KAAK,GAAG;AAGjB,QAAI,KAAK,kBAAkB;AACvB,YAAM,YAAY,WAAW,iBAAiB,KAAK,QAAQ,cAAc,gBAAgB;AACzF,UAAI,WAAW;AACX,kBAAU,MAAM,WAAW,UAAU,MAAM,YAAY;AACvD,cAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,iBAAS,YAAY;AACrB,iBAAS,MAAM,WAAW;AAC1B,iBAAS,MAAM,MAAM;AACrB,iBAAS,MAAM,QAAQ;AACvB,iBAAS,MAAM,SAAS;AACxB,iBAAS,MAAM,WAAW;AAC1B,iBAAS,aAAa,cAAc,gBAAgB;AAGpD,eAAO,QAAQ,KAAK,gBAAgB,CAAA,CAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC9D,gBAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,cAAI,QAAQ;AACZ,cAAI,cAAc;AAClB,cAAI,QAAQ,KAAK,UAAW,KAAI,WAAW;AAC3C,mBAAS,YAAY,GAAG;AAAA,QAC5B,CAAC;AAED,iBAAS,iBAAiB,UAAU,MAAM,KAAK,aAAa,SAAS,KAAK,CAAC;AAC3E,kBAAU,YAAY,QAAQ;AAAA,MAClC;AAAA,IACJ;AAGA,SAAK,WAAW,KAAK,OAAO;AAG5B,QAAI,KAAK,QAAQ,SAAS,GAAG;AACzB,WAAK,UAAS;AAAA,IAClB;AAIA,eAAW,MAAM;AACb,UAAI,KAAK,KAAK;AACV,aAAK,IAAI,eAAc;AAAA,MAC3B;AAAA,IACJ,GAAG,GAAG;AAAA,EACV;AAAA,EAEA,WAAW,SAAS;AAChB,QAAI,CAAC,KAAK,OAAO,CAAC,MAAM,QAAQ,OAAO,EAAG;AAE1C,YAAQ,QAAQ,gBAAc;AAC1B,YAAM,EAAE,KAAK,KAAK,OAAO,KAAI,IAAK;AAElC,UAAI,CAAC,OAAO,CAAC,IAAK;AAElB,YAAM,gBAAgB,CAAA;AAGtB,UAAI,MAAM;AACN,sBAAc,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,MAC3C;AAEA,YAAM,SAAS,OAAO,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG,aAAa,EAAE,MAAM,KAAK,GAAG;AAGxE,UAAI,OAAO;AACP,eAAO,UAAU,KAAK;AAAA,MAC1B;AAEA,WAAK,eAAe,KAAK,MAAM;AAAA,IACnC,CAAC;AAAA,EACL;AAAA,EAEA,YAAY;AACR,QAAI,CAAC,KAAK,OAAO,KAAK,eAAe,WAAW,EAAG;AAEnD,UAAM,QAAQ,IAAI,OAAO,EAAE,aAAa,KAAK,cAAc;AAC3D,SAAK,IAAI,UAAU,MAAM,YAAY,IAAI,GAAG,CAAC;AAAA,EACjD;AAAA,EAEA,cAAc,YAAY;AAEtB,SAAK,aAAY;AAGjB,SAAK,UAAU;AACf,SAAK,WAAW,UAAU;AAG1B,QAAI,WAAW,SAAS,GAAG;AACvB,WAAK,UAAS;AAAA,IAClB,WAAW,WAAW,WAAW,GAAG;AAChC,WAAK,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI;AAAA,IACtE;AAAA,EACJ;AAAA,EAEA,eAAe;AACX,SAAK,eAAe,QAAQ,YAAU;AAClC,WAAK,IAAI,YAAY,MAAM;AAAA,IAC/B,CAAC;AACD,SAAK,iBAAiB,CAAA;AAAA,EAC1B;AAAA,EAEA,QAAQ,KAAK,KAAK,OAAO,MAAM;AAC3B,QAAI,CAAC,KAAK,IAAK;AACf,SAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,GAAG,QAAQ,KAAK,IAAI;AAAA,EAClD;AAAA,EAEA,QAAQ,MAAM;AACV,QAAI,CAAC,KAAK,IAAK;AACf,SAAK,IAAI,QAAQ,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,KAAK;AACd,QAAI,CAAC,KAAK,IAAK;AAEf,UAAM,WAAW,KAAK;AACtB,SAAK,YAAY,OAAO,KAAK;AAC7B,UAAM,aAAa,KAAK,gBAAe;AACvC,QAAI;AACA,UAAI,KAAK,YAAY;AACjB,aAAK,IAAI,YAAY,KAAK,UAAU;AAAA,MACxC;AAAA,IACJ,SAAS,GAAG;AAAA,IAEZ;AACA,SAAK,aAAa,OAAO,EAAE,UAAU,WAAW,KAAK;AAAA,MACjD,aAAa,WAAW;AAAA,MACxB,SAAS,WAAW;AAAA,IAChC,CAAS,EAAE,MAAM,KAAK,GAAG;AAEjB,SAAK,YAAY,OAAO;AAGxB,eAAW,MAAM;AACb,UAAI;AAAE,aAAK,IAAI,eAAc;AAAA,MAAI,SAAS,GAAG;AAAA,MAAC;AAAA,IAClD,GAAG,GAAG;AAAA,EACV;AAAA,EAEA,MAAM,kBAAkB;AACpB,QAAI,KAAK,KAAK;AACV,WAAK,IAAI,OAAM;AACf,WAAK,MAAM;AAAA,IACf;AACA,UAAM,MAAM,gBAAe;AAAA,EAC/B;AAAA,EAEA,aAAa,aAAa,UAAU,IAAI;AACpC,UAAM,OAAO,IAAI,QAAQ,OAAO;AAChC,UAAM,QAAQ,QAAQ,iBAAiB,CAAA;AACvC,UAAM,gBAAgB;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,GAAG;AAAA,IACf;AACQ,UAAM,KAAK,KAAI;AACf,UAAM,KAAK,SAAS,WAAW,aAAa;AAAA,EAChD;AACJ;AC9TA,MAAM,qBAAqB,KAAK;AAAA,EAC5B,YAAY,UAAU,IAAI;AACtB,UAAM;AAAA,MACF,WAAW;AAAA,MACX,GAAG;AAAA,IACf,CAAS;AAED,SAAK,UAAU,QAAQ,WAAW,CAAA;AAClC,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,QAAQ,QAAQ,SAAS;AAC9B,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,WAAW,QAAQ,SAAS;AACjC,SAAK,wBAAwB,QAAQ,0BAA0B;AAC/D,SAAK,gBAAgB,QAAQ,kBAAkB;AAE/C,SAAK,MAAM;AACX,SAAK,aAAa,CAAA;AAClB,SAAK,iBAAiB,CAAC,GAAG,KAAK,OAAO;AACtC,SAAK,cAAc,QAAQ,eAAe,CAAA;AAC1C,SAAK,kBAAkB,oBAAI,IAAG;AAE9B,SAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB;AAAA,EAEA,MAAM,gBAAgB;AAClB,UAAM,KAAK,aAAY;AACvB,UAAM,KAAK,cAAa;AAAA,EAC5B;AAAA,EAEA,MAAM,eAAe;AAEjB,QAAI,OAAO,WAAY;AAGvB,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,aAAS,KAAK,YAAY,IAAI;AAG9B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,MAAM;AACb,aAAO,SAAS;AAChB,aAAO,UAAU;AACjB,eAAS,KAAK,YAAY,MAAM;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EAEA,cAAc;AACV,UAAM,SAAS;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,QACF,SAAS;AAAA,QACT,SAAS;AAAA,UACL,KAAK;AAAA,YACD,MAAM;AAAA,YACN,OAAO,CAAC,kDAAkD;AAAA,YAC1D,UAAU;AAAA,YACV,aAAa;AAAA,UACrC;AAAA,QACA;AAAA,QACgB,QAAQ,CAAC;AAAA,UACL,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,QAC5B,CAAiB;AAAA,QACD,QAAQ;AAAA,MACxB;AAAA,MACY,OAAO;AAAA,QACH,SAAS;AAAA,QACT,SAAS;AAAA,UACL,KAAK;AAAA,YACD,MAAM;AAAA,YACN,OAAO,CAAC,kDAAkD;AAAA,YAC1D,UAAU;AAAA,YACV,aAAa;AAAA,UACrC;AAAA,QACA;AAAA,QACgB,QAAQ,CAAC;AAAA,UACL,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,QAC5B,CAAiB;AAAA,QACD,QAAQ;AAAA,MACxB;AAAA,MACY,WAAW;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,UACL,WAAW;AAAA,YACP,MAAM;AAAA,YACN,OAAO,CAAC,+FAA+F;AAAA,YACvG,UAAU;AAAA,YACV,aAAa;AAAA,UACrC;AAAA,QACA;AAAA,QACgB,QAAQ,CAAC;AAAA,UACL,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,QAC5B,CAAiB;AAAA,QACD,QAAQ;AAAA,MACxB;AAAA,MACY,SAAS;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,UACL,SAAS;AAAA,YACL,MAAM;AAAA,YACN,OAAO,CAAC,gDAAgD;AAAA,YACxD,UAAU;AAAA,YACV,aAAa;AAAA,UACrC;AAAA,QACA;AAAA,QACgB,QAAQ,CAAC;AAAA,UACL,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,QAAQ;AAAA,QAC5B,CAAiB;AAAA,QACD,QAAQ;AAAA,MACxB;AAAA,IACA;AAEQ,WAAO,OAAO,KAAK,QAAQ,KAAK,OAAO;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB;AAClB,UAAM,aAAa,KAAK,QAAQ,cAAc,aAAa,KAAK,EAAE,EAAE;AACpE,QAAI,CAAC,cAAc,CAAC,OAAO,WAAY;AAGvC,QAAI,YAAY,KAAK;AACrB,QAAI,CAAC,aAAa,KAAK,QAAQ,SAAS,GAAG;AAEvC,kBAAY,CAAC,KAAK,QAAQ,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,EAAE,GAAG;AAAA,IACzD;AACA,QAAI,CAAC,WAAW;AAEZ,kBAAY,CAAC,GAAG,CAAC;AAAA,IACrB;AAGA,SAAK,MAAM,IAAI,OAAO,WAAW,IAAI;AAAA,MACjC,WAAW;AAAA,MACX,OAAO,KAAK,YAAW;AAAA,MACvB,QAAQ;AAAA,MACR,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAC1B,CAAS;AAGD,QAAI,KAAK,uBAAuB;AAC5B,WAAK,IAAI,WAAW,IAAI,OAAO,WAAW,kBAAiB,GAAI,WAAW;AAAA,IAC9E;AAGA,SAAK,IAAI,GAAG,QAAQ,MAAM;AACtB,YAAM,iBAAiB,KAAK,eAAe,SAAS,KAAK,iBAAiB,KAAK;AAC/E,WAAK,cAAc,cAAc;AACjC,WAAK,YAAY,QAAQ,YAAU,KAAK,cAAc,MAAM,CAAC;AAC7D,WAAK,gBAAgB,QAAQ,YAAU,KAAK,cAAc,MAAM,CAAC;AACjE,WAAK,gBAAgB,MAAK;AAAA,IAC9B,CAAC;AAAA,EACL;AAAA,EAEA,WAAW,SAAS;AAChB,QAAI,CAAC,KAAK,OAAO,CAAC,MAAM,QAAQ,OAAO,GAAG;AACtC,WAAK,iBAAiB,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAA;AACzD;AAAA,IACJ;AAEA,YAAQ,QAAQ,gBAAc;AAC1B,YAAM,EAAE,KAAK,KAAK,OAAO,OAAO,MAAM,KAAI,IAAK;AAE/C,UAAI,CAAC,OAAO,CAAC,IAAK;AAGlB,YAAM,KAAK,SAAS,cAAc,KAAK;AACvC,SAAG,YAAY;AACf,YAAM,aAAa,OAAO,IAAI,KAAK;AACnC,SAAG,MAAM,QAAQ,GAAG,UAAU;AAC9B,SAAG,MAAM,SAAS,GAAG,UAAU;AAC/B,SAAG,MAAM,eAAe;AACxB,SAAG,MAAM,kBAAkB,SAAS;AACpC,SAAG,MAAM,SAAS;AAClB,SAAG,MAAM,YAAY;AACrB,SAAG,MAAM,SAAS;AAClB,SAAG,MAAM,UAAU;AACnB,SAAG,MAAM,aAAa;AACtB,SAAG,MAAM,iBAAiB;AAG1B,UAAI,MAAM;AACN,WAAG,YAAY,aAAa,IAAI;AAAA,MACpC;AAGA,YAAM,SAAS,IAAI,OAAO,WAAW,OAAO,EAAE,SAAS,GAAE,CAAE,EACtD,UAAU,CAAC,KAAK,GAAG,CAAC,EACpB,MAAM,KAAK,GAAG;AAGnB,UAAI,OAAO;AACP,cAAM,WAAW,IAAI,OAAO,WAAW,MAAM,EAAE,QAAQ,GAAE,CAAE,EACtD,QAAQ,KAAK;AAClB,eAAO,SAAS,QAAQ;AAAA,MAC5B;AAEA,WAAK,WAAW,KAAK,MAAM;AAAA,IAC/B,CAAC;AAAA,EACL;AAAA,EAEA,YAAY;AACR,QAAI,CAAC,KAAK,OAAO,KAAK,QAAQ,WAAW,EAAG;AAE5C,UAAM,SAAS,IAAI,OAAO,WAAW,aAAY;AAEjD,SAAK,QAAQ,QAAQ,YAAU;AAC3B,aAAO,OAAO,CAAC,OAAO,KAAK,OAAO,GAAG,CAAC;AAAA,IAC1C,CAAC;AAED,SAAK,IAAI,UAAU,QAAQ;AAAA,MACvB,SAAS;AAAA,MACT,SAAS;AAAA,IACrB,CAAS;AAAA,EACL;AAAA,EAEA,cAAc,YAAY;AACtB,UAAM,UAAU,MAAM,QAAQ,UAAU,IAAI,aAAa,CAAA;AACzD,SAAK,UAAU;AACf,SAAK,iBAAiB;AACtB,QAAI,CAAC,KAAK,IAAK;AAEf,SAAK,aAAY;AACjB,SAAK,WAAW,OAAO;AAEvB,QAAI,KAAK,iBAAiB,QAAQ,SAAS,GAAG;AAC1C,WAAK,UAAS;AAAA,IAClB,WAAW,QAAQ,WAAW,KAAK,KAAK,KAAK;AACzC,WAAK,IAAI,MAAM;AAAA,QACX,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,GAAG;AAAA,QACvC,MAAM,KAAK;AAAA,MAC3B,CAAa;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,eAAe;AACX,SAAK,WAAW,QAAQ,YAAU;AAC9B,aAAO,OAAM;AAAA,IACjB,CAAC;AACD,SAAK,aAAa,CAAA;AAAA,EACtB;AAAA,EAEA,cAAc,EAAE,IAAI,MAAM,OAAO,OAAM,GAAI;AACvC,QAAI,CAAC,MAAM,CAAC,KAAM;AAElB,UAAM,WAAW,GAAG,EAAE;AAEtB,QAAI,CAAC,KAAK,KAAK;AACX,WAAK,gBAAgB,IAAI,IAAI,EAAE,IAAI,MAAM,OAAO,QAAQ;AACxD;AAAA,IACJ;AAEA,QAAI,KAAK,IAAI,SAAS,EAAE,GAAG;AACvB,WAAK,IAAI,YAAY,EAAE;AAAA,IAC3B;AACA,QAAI,KAAK,IAAI,UAAU,QAAQ,GAAG;AAC9B,WAAK,IAAI,aAAa,QAAQ;AAAA,IAClC;AAEA,SAAK,IAAI,UAAU,UAAU;AAAA,MACzB,MAAM;AAAA,MACN;AAAA,IACZ,CAAS;AAED,SAAK,IAAI,SAAS;AAAA,MACd;AAAA,MACA,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,QACH,cAAc;AAAA,QACd,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,GAAG;AAAA,MACnB;AAAA,MACY,QAAQ;AAAA,QACJ,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,GAAG;AAAA,MACnB;AAAA,IACA,CAAS;AAAA,EACL;AAAA,EAEA,iBAAiB,IAAI,EAAE,MAAM,OAAO,OAAM,IAAK,IAAI;AAC/C,QAAI,CAAC,MAAM,CAAC,KAAM;AAClB,UAAM,WAAW,GAAG,EAAE;AACtB,QAAI,CAAC,KAAK,KAAK;AACX,WAAK,gBAAgB,IAAI,IAAI,EAAE,IAAI,MAAM,OAAO,QAAQ;AACxD;AAAA,IACJ;AACA,QAAI,KAAK,IAAI,UAAU,QAAQ,GAAG;AAC9B,WAAK,IAAI,UAAU,QAAQ,EAAE,QAAQ,IAAI;AACzC,UAAI,SAAS,QAAQ;AACjB,YAAI,OAAO;AACP,iBAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC5C,iBAAK,IAAI,iBAAiB,IAAI,KAAK,KAAK;AAAA,UAC5C,CAAC;AAAA,QACL;AACA,YAAI,QAAQ;AACR,iBAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7C,iBAAK,IAAI,kBAAkB,IAAI,KAAK,KAAK;AAAA,UAC7C,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,WAAK,cAAc,EAAE,IAAI,MAAM,OAAO,QAAQ;AAAA,IAClD;AAAA,EACJ;AAAA,EAEA,QAAQ,KAAK,KAAK,OAAO,MAAM;AAC3B,QAAI,CAAC,KAAK,IAAK;AACf,SAAK,IAAI,MAAM;AAAA,MACX,QAAQ,CAAC,KAAK,GAAG;AAAA,MACjB,MAAM,QAAQ,KAAK;AAAA,IAC/B,CAAS;AAAA,EACL;AAAA,EAEA,QAAQ,MAAM;AACV,QAAI,CAAC,KAAK,IAAK;AACf,SAAK,IAAI,QAAQ,IAAI;AAAA,EACzB;AAAA,EAEA,SAAS,OAAO;AACZ,QAAI,CAAC,KAAK,IAAK;AACf,SAAK,IAAI,SAAS,KAAK;AAAA,EAC3B;AAAA,EAEA,WAAW,SAAS;AAChB,QAAI,CAAC,KAAK,IAAK;AACf,SAAK,IAAI,WAAW,OAAO;AAAA,EAC/B;AAAA,EAEA,MAAM,kBAAkB;AACpB,QAAI,KAAK,KAAK;AACV,WAAK,IAAI,OAAM;AACf,WAAK,MAAM;AAAA,IACf;AACA,UAAM,MAAM,gBAAe;AAAA,EAC/B;AACJ;AC5XO,MAAM,oBAAoB;AAAA,EAC/B,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,wBAAwB,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACpF,MAAM,EAAE,MAAM,eAAe,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC3E,MAAM,EAAE,MAAM,uBAAuB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACpF,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,UAAU,KAAK,qBAAqB,KAAK,gBAAe;AAAA,EACtE,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC7E,MAAM,EAAE,MAAM,aAAa,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,kBAAkB,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACjF,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,aAAa,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,cAAc,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,0BAA0B,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACtF,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC3E,MAAM,EAAE,MAAM,cAAc,KAAK,iBAAiB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,WAAW,KAAK,kBAAkB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,gBAAgB,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC/E,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACrE,MAAM,EAAE,MAAM,oBAAoB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACjF,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,qBAAqB,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACjF,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAkB,KAAK,oBAAmB;AAAA,EAChF,MAAM,EAAE,MAAM,UAAU,KAAK,qBAAqB,KAAK,oBAAmB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,iBAAiB,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC9E,MAAM,EAAE,MAAM,YAAY,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,iBAAiB,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EAC/E,MAAM,EAAE,MAAM,aAAa,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,4BAA4B,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzF,MAAM,EAAE,MAAM,SAAS,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,eAAe,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC3E,MAAM,EAAE,MAAM,iBAAiB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC9E,MAAM,EAAE,MAAM,gBAAgB,KAAK,qBAAqB,KAAK,oBAAmB;AAAA,EAChF,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,cAAc,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,oBAAoB,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACnF,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,kBAAkB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC/E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC3E,MAAM,EAAE,MAAM,sBAAsB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACnF,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,iBAAgB;AAAA,EACvE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACxE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,QAAQ,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,oBAAoB,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACnF,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC3E,MAAM,EAAE,MAAM,iBAAiB,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAChF,MAAM,EAAE,MAAM,UAAU,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,kBAAkB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC/E,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,iBAAiB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC9E,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,SAAS,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EACrE,MAAM,EAAE,MAAM,aAAa,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,aAAa,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACzE,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACzE,MAAM,EAAE,MAAM,cAAc,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,qBAAqB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACnF,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,4CAA4C,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1G,MAAM,EAAE,MAAM,aAAa,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,iBAAiB,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAChF,MAAM,EAAE,MAAM,UAAU,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,qCAAqC,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACnG,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,gBAAe;AAAA,EACpE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,aAAa,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,eAAe,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,kCAAkC,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC/F,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,cAAc,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC3E,MAAM,EAAE,MAAM,WAAW,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACzE,MAAM,EAAE,MAAM,yBAAyB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACvF,MAAM,EAAE,MAAM,eAAe,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC3E,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,kBAAkB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAChF,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,iBAAgB;AAAA,EAC1E,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC5E,MAAM,EAAE,MAAM,iBAAiB,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC7E,MAAM,EAAE,MAAM,aAAa,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,aAAa,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,cAAc,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,cAAc,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,gBAAgB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC9E,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC3E,MAAM,EAAE,MAAM,oBAAoB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACjF,MAAM,EAAE,MAAM,mBAAmB,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC/E,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,4BAA4B,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1F,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC7E,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,aAAa,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,YAAY,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,UAAU,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,oBAAmB;AAAA,EACxE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,cAAc,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,iBAAiB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC/E,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,iBAAgB;AAAA,EACpE,MAAM,EAAE,MAAM,kBAAkB,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACjF,MAAM,EAAE,MAAM,WAAW,KAAK,kBAAkB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,aAAa,KAAK,oBAAoB,KAAK,iBAAgB;AAAA,EACzE,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC5E,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,iBAAgB;AAAA,EACrE,MAAM,EAAE,MAAM,SAAS,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACvE,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,QAAQ,KAAK,kBAAkB,KAAK,gBAAe;AAAA,EACjE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,oBAAoB,KAAK,qBAAqB,KAAK,oBAAmB;AAAA,EACpF,MAAM,EAAE,MAAM,oBAAoB,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACjF,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACzE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,6BAA6B,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC1F,MAAM,EAAE,MAAM,YAAY,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,yBAAyB,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACtF,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,sBAAsB,KAAK,oBAAoB,KAAK,iBAAgB;AAAA,EAClF,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACxE,MAAM,EAAE,MAAM,gBAAgB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC9E,MAAM,EAAE,MAAM,mBAAmB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACjF,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC3E,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvE,MAAM,EAAE,MAAM,aAAa,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,gBAAgB,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC/E,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,gBAAgB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,cAAc,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC5E,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,oBAAmB;AAAA,EAC1E,MAAM,EAAE,MAAM,eAAe,KAAK,mBAAmB,KAAK,iBAAgB;AAAA,EAC1E,MAAM,EAAE,MAAM,yBAAyB,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACvF,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,gBAAgB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,SAAS,KAAK,mBAAmB,KAAK,iBAAgB;AAAA,EACpE,MAAM,EAAE,MAAM,YAAY,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC3E,MAAM,EAAE,MAAM,4BAA4B,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC1F,MAAM,EAAE,MAAM,QAAQ,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtE,MAAM,EAAE,MAAM,uBAAuB,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACpF,MAAM,EAAE,MAAM,+BAA+B,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC5F,MAAM,EAAE,MAAM,oBAAoB,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EACnF,MAAM,EAAE,MAAM,QAAQ,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACrE,MAAM,EAAE,MAAM,YAAY,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,cAAc,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EAC1E,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EAC1E,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,gBAAgB,KAAK,mBAAmB,KAAK,iBAAgB;AAAA,EAC3E,MAAM,EAAE,MAAM,WAAW,KAAK,mBAAmB,KAAK,iBAAgB;AAAA,EACtE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,mBAAmB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,uBAAuB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACrF,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,iBAAgB;AAAA,EACtE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,UAAU,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACvE,MAAM,EAAE,MAAM,wCAAwC,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACtG,MAAM,EAAE,MAAM,iBAAiB,KAAK,kBAAkB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,cAAc,KAAK,kBAAkB,KAAK,iBAAgB;AAAA,EACxE,MAAM,EAAE,MAAM,gBAAgB,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC7E,MAAM,EAAE,MAAM,oCAAoC,KAAK,oBAAoB,KAAK,oBAAmB;AAAA,EACnG,MAAM,EAAE,MAAM,aAAa,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,0BAA0B,KAAK,mBAAmB,KAAK,mBAAkB;AAAA,EACvF,MAAM,EAAE,MAAM,qBAAqB,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACnF,MAAM,EAAE,MAAM,WAAW,KAAK,oBAAoB,KAAK,mBAAkB;AAAA,EACzE,MAAM,EAAE,MAAM,WAAW,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,qBAAqB,KAAK,qBAAqB,KAAK,oBAAmB;AAAA,EACrF,MAAM,EAAE,MAAM,SAAS,KAAK,qBAAqB,KAAK,oBAAmB;AAAA,EACzE,MAAM,EAAE,MAAM,SAAS,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EACtE,MAAM,EAAE,MAAM,WAAW,KAAK,qBAAqB,KAAK,mBAAkB;AAAA,EAC1E,MAAM,EAAE,MAAM,gBAAgB,KAAK,oBAAoB,KAAK,kBAAiB;AAAA,EAC7E,MAAM,EAAE,MAAM,UAAU,KAAK,qBAAqB,KAAK,kBAAiB;AAAA,EACxE,MAAM,EAAE,MAAM,YAAY,KAAK,oBAAoB,KAAK,mBAAkB;AAC5E;ACvPA,MAAM,8BAA8B,KAAK;AAAA,EACrC,YAAY,UAAU,IAAI;AACtB,UAAM,YAAY,QAAQ,UAAU;AACpC,UAAM;AAAA,MACF,WAAW;AAAA,MACX,GAAG;AAAA,IACf,CAAS;AAED,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,QAAQ,QAAQ,SAAS;AAC9B,SAAK,cAAc,QAAQ,eAAe;AAC1C,SAAK,eAAe,QAAQ,gBAAgB;AAC5C,SAAK,cAAc,QAAQ,eAAe;AAC1C,SAAK,SAAS;AACd,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,aAAa,QAAQ,cAAc,CAAA;AACxC,SAAK,aAAa,QAAQ,eAAe;AACzC,SAAK,cAAc,QAAQ,eAAe,EAAE,KAAK,SAAS,KAAK,QAAQ,MAAM,aAAY;AACzF,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,MAAM,cAAc;AAChB,WAAO;AAAA;AAAA,kEAEmD,KAAK,EAAE,uBAAuB,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,EAIvG;AAAA,EAEA,MAAM,SAAS;AACX,SAAK,WAAW,SAAS,cAAc,KAAK;AAC5C,SAAK,SAAS,YAAY;AAC1B,SAAK,QAAQ,YAAY,KAAK,QAAQ;AAEtC,SAAK,UAAU,IAAI,aAAa;AAAA,MAC5B,aAAa,GAAG,KAAK,EAAE;AAAA,MACvB,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK,WAAW,QAAQ;AAAA,MAC9B,QAAQ,KAAK,WAAW,UAAU,CAAC,IAAI,EAAE;AAAA,MACzC,OAAO,KAAK,WAAW,SAAS;AAAA,MAChC,SAAS,KAAK,WAAW,WAAW;AAAA,MACpC,uBAAuB,KAAK,WAAW,yBAAyB;AAAA,MAChE,eAAe,KAAK,WAAW,iBAAiB;AAAA,IAC5D,CAAS;AACD,SAAK,SAAS,KAAK,OAAO;AAC1B,UAAM,KAAK,QAAO;AAAA,EACtB;AAAA,EAEA,MAAM,UAAU;AACZ,QAAI,KAAK,YAAa;AACtB,SAAK,cAAc;AACnB,SAAK,UAAU,mBAAmB;AAClC,QAAI;AACJ,YAAM,UAAU,MAAM,KAAK,aAAY;AACvC,YAAM,KAAK,aAAa,OAAO;AAC3B,WAAK,UAAU,EAAE;AAAA,IACrB,SAAS,OAAO;AACZ,cAAQ,MAAM,uCAAuC,KAAK;AAC1D,WAAK,UAAU,iCAAiC;AAAA,IACpD,UAAC;AACG,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,eAAe;AACjB,UAAM,OAAO,KAAK,OAAM,GAAI;AAC5B,QAAI,CAAC,MAAM;AACP,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC7C;AACA,UAAM,SAAS;AAAA,MACX,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,aAAa;AAAA,IACzB;AACQ,QAAI,KAAK,SAAU,QAAO,WAAW,KAAK;AAC1C,QAAI,KAAK,OAAO;AACZ,YAAM,aAAa,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;AACvE,aAAO,SAAS,IAAI;AAAA,IACxB;AAEA,UAAM,WAAW,MAAM,KAAK,IAAI,KAAK,UAAU,MAAM;AACrD,QAAI,CAAC,SAAS,WAAW,CAAC,SAAS,MAAM,QAAQ;AAC7C,YAAM,IAAI,MAAM,SAAS,MAAM,SAAS,mBAAmB;AAAA,IAC/D;AACA,WAAO,SAAS,KAAK;AAAA,EACzB;AAAA,EAEA,MAAM,aAAa,MAAM;AACrB,UAAM,UAAU,MAAM,QAAQ,CAAA;AAC9B,UAAM,SAAS,MAAM,UAAU,CAAA;AAC/B,UAAM,UAAU,CAAA;AAEhB,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,MAAM,MAAM;AAC/C,YAAM,QAAQ,OAAO,OAAO,CAAC,KAAK,UAAU,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC;AACzE,UAAI,CAAC,MAAO;AACZ,YAAM,WAAW,kBAAkB,IAAI,YAAW,CAAE;AACpD,UAAI,CAAC,SAAU;AACf,cAAQ,KAAK;AAAA,QACT,MAAM,IAAI,YAAW;AAAA,QACrB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAChB,CAAa;AAAA,IACL,CAAC;AAED,QAAI,CAAC,QAAQ,QAAQ;AACjB,WAAK,QAAQ,cAAc,EAAE;AAC7B,WAAK,aAAa,EAAE;AACpB,WAAK,UAAU,mDAAmD;AAClE;AAAA,IACJ;AAEA,YAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACxC,UAAM,aAAa,QAAQ,MAAM,GAAG,KAAK,YAAY;AACrD,UAAM,WAAW,WAAW,CAAC,GAAG,SAAS;AAEzC,UAAM,UAAU,WAAW,IAAI,WAAS;AACpC,YAAM,YAAY,MAAM,QAAQ;AAChC,YAAM,aAAa,KAAK,MAAM,KAAK,YAAY,EAAE;AACjD,aAAO;AAAA,QACH,KAAK,MAAM,SAAS;AAAA,QACpB,KAAK,MAAM,SAAS;AAAA,QACpB,MAAM;AAAA,QACN,OAAO,KAAK,eAAe,SAAS;AAAA,QACpC,OAAO;AAAA;AAAA,kCAEW,MAAM,SAAS,IAAI;AAAA,mDACF,MAAM,MAAM,eAAc,CAAE,IAAI,KAAK,WAAW;AAAA;AAAA;AAAA,MAGnG;AAAA,IACQ,CAAC;AAED,QAAI,KAAK,cAAc,KAAK,aAAa,OAAO,KAAK,aAAa,KAAK;AACnE,cAAQ,KAAK;AAAA,QACT,KAAK,KAAK,YAAY;AAAA,QACtB,KAAK,KAAK,YAAY;AAAA,QACtB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA;AAAA,kCAEW,KAAK,YAAY,QAAQ,gBAAgB;AAAA;AAAA;AAAA;AAAA,MAI3E,CAAa;AAAA,IACL;AAEA,SAAK,QAAQ,cAAc,OAAO;AAClC,SAAK,aAAa,YAAY,MAAM;AACpC,QAAI,KAAK,YAAY;AACjB,WAAK,aAAa,YAAY,QAAQ;AAAA,IAC1C;AAAA,EACJ;AAAA,EAEA,eAAe,WAAW;AACtB,UAAM,QAAQ,CAAC,IAAI,KAAK,GAAG;AAC3B,UAAM,MAAM,CAAC,KAAK,KAAK,CAAC;AACxB,UAAM,MAAM,MAAM;AAAA,MAAI,CAAC,OAAO,QAC1B,KAAK,MAAM,SAAS,IAAI,GAAG,IAAI,SAAS,SAAS;AAAA,IAC7D;AACQ,WAAO,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAAA,EAC/C;AAAA,EAEA,aAAa,SAAS;AAClB,UAAM,WAAW,KAAK,QAAQ,cAAc,wBAAwB;AACpE,QAAI,CAAC,SAAU;AACf,QAAI,CAAC,QAAQ,QAAQ;AACjB,eAAS,YAAY;AACrB;AAAA,IACJ;AAEA,UAAM,WAAW,QAAQ,CAAC,GAAG,SAAS;AACtC,UAAM,OAAO,QAAQ,IAAI,WAAS;AAC9B,YAAM,WAAY,MAAM,QAAQ,WAAY,KAAK,QAAQ,CAAC;AAC1D,aAAO;AAAA;AAAA;AAAA,oDAGiC,MAAM,SAAS,IAAI;AAAA,yDACd,MAAM,IAAI;AAAA;AAAA;AAAA,mDAGhB,MAAM,MAAM,gBAAgB;AAAA,oDAC3B,OAAO;AAAA;AAAA;AAAA;AAAA,IAInD,CAAC,EAAE,KAAK,EAAE;AAEV,aAAS,YAAY;AAAA,EACzB;AAAA,EAEA,aAAa,SAAS,UAAU;AAC5B,UAAM,SAAS,KAAK,eAAe;AACnC,QAAI,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,OAAO,OAAO,CAAC,KAAK,QAAS;AAE5D,UAAM,WAAW,QAAQ,IAAI,YAAU;AAAA,MACnC,MAAM;AAAA,MACN,UAAU;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,UACT,CAAC,OAAO,KAAK,OAAO,GAAG;AAAA,UACvB,CAAC,MAAM,SAAS,KAAK,MAAM,SAAS,GAAG;AAAA,QAC3D;AAAA,MACA;AAAA,MACY,YAAY;AAAA,QACR,OAAO,MAAM;AAAA,QACb,WAAW,MAAM,QAAQ;AAAA,MACzC;AAAA,IACA,EAAU;AAEF,UAAM,UAAU;AAAA,MACZ,MAAM;AAAA,MACN;AAAA,IACZ;AAEQ,UAAM,QAAQ;AAAA,MACV,cAAc;AAAA,QACV;AAAA,QACA,CAAC,QAAQ;AAAA,QACT,CAAC,OAAO,WAAW;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAChB;AAAA,MACY,cAAc;AAAA,QACV;AAAA,QACA,CAAC,QAAQ;AAAA,QACT,CAAC,OAAO,WAAW;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAChB;AAAA,MACY,gBAAgB;AAAA,QACZ;AAAA,QACA,CAAC,QAAQ;AAAA,QACT,CAAC,OAAO,WAAW;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAChB;AAAA,IACA;AAEQ,SAAK,QAAQ,cAAc,KAAK,QAAQ,YAAY,OAAO,SAAO,IAAI,OAAO,GAAG,KAAK,EAAE,SAAS;AAChG,SAAK,QAAQ,iBAAiB,GAAG,KAAK,EAAE,WAAW;AAAA,MAC/C,MAAM;AAAA,MACN;AAAA,IACZ,CAAS;AAAA,EACL;AAAA,EAEA,UAAU,SAAS;AACf,QAAI,CAAC,KAAK,SAAU;AACpB,SAAK,SAAS,cAAc,WAAW;AACvC,SAAK,SAAS,MAAM,UAAU,UAAU,UAAU;AAAA,EACtD;AAEJ;"}
1
+ {"version":3,"file":"MetricsCountryMapView-Pu1VZIJT.js","sources":["../../src/extensions/map/MapView.js","../../src/extensions/map/MapLibreView.js","../../src/extensions/map/countryCentroids.js","../../src/extensions/map/MetricsCountryMapView.js"],"sourcesContent":["/**\n * MapView - Interactive map component using Leaflet\n *\n * Features:\n * - Display single or multiple markers\n * - Auto-zoom to fit markers\n * - Customizable marker popups\n * - Support for different tile layers\n *\n * @example\n * const mapView = new MapView({\n * markers: [\n * { lat: 37.422, lng: -122.084, popup: 'Mountain View, CA' }\n * ],\n * zoom: 10,\n * height: 400\n * });\n */\n\nimport View from '@core/View.js';\n\nclass MapView extends View {\n constructor(options = {}) {\n super({\n className: 'map-view',\n ...options\n });\n\n this.markers = options.markers || [];\n this.center = options.center || null;\n this.zoom = options.zoom || 13;\n this.height = options.height || 400;\n this.showZoomControl = options.showZoomControl !== false;\n this.tileLayer = options.tileLayer || 'osm'; // 'osm', 'satellite', 'terrain'\n this.showLeafletBranding = options.showLeafletBranding === true;\n this.showLayerControl = options.showLayerControl === true;\n this.layerOptions = options.layerOptions || {\n osm: 'OSM',\n satellite: 'Satellite',\n terrain: 'Terrain',\n dark: 'Dark',\n light: 'Light',\n watercolor: 'Watercolor',\n bw: 'B/W',\n streets: 'Streets'\n };\n\n this.map = null;\n this.leafletMarkers = [];\n this._tileLayer = null;\n\n 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 `;\n }\n\n async onAfterRender() {\n await this.loadLeaflet();\n await this.initializeMap();\n }\n\n async loadLeaflet() {\n // Check if Leaflet is already loaded\n if (window.L) return;\n\n // Load Leaflet CSS and wait for it\n const cssLoaded = new Promise((resolve) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';\n link.onload = resolve;\n link.onerror = resolve; // Continue even if CSS fails\n document.head.appendChild(link);\n });\n\n // Load Leaflet JS\n const jsLoaded = new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';\n script.onload = resolve;\n script.onerror = reject;\n document.head.appendChild(script);\n });\n\n // Wait for both CSS and JS to load\n await Promise.all([cssLoaded, jsLoaded]);\n }\n\n getTileLayerUrl() {\n const tileLayers = {\n // Standard street maps\n osm: {\n url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution: '© OpenStreetMap contributors',\n maxZoom: 19\n },\n\n // Satellite imagery\n satellite: {\n url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n attribution: '© Esri',\n maxZoom: 19\n },\n\n // Terrain and topographic\n terrain: {\n url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n attribution: '© OpenTopoMap contributors',\n maxZoom: 17\n },\n\n // Dark mode styles\n dark: {\n url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n },\n\n // Light/minimal styles\n light: {\n url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n },\n\n // Watercolor artistic style\n watercolor: {\n url: 'https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg',\n attribution: '© Stadia Maps © Stamen Design © OpenStreetMap contributors',\n maxZoom: 16\n },\n\n // Black and white\n bw: {\n url: 'https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n },\n\n // Streets with labels\n streets: {\n url: 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png',\n attribution: '© OpenStreetMap contributors © CARTO',\n maxZoom: 20\n }\n };\n\n return tileLayers[this.tileLayer] || tileLayers.osm;\n }\n\n async initializeMap() {\n const mapElement = this.element.querySelector(`#map-${this.id}`);\n if (!mapElement || !window.L) return;\n\n // Determine map center\n let mapCenter = this.center;\n if (!mapCenter && this.markers.length > 0) {\n // Use first marker as center\n mapCenter = [this.markers[0].lat, this.markers[0].lng];\n }\n if (!mapCenter) {\n // Default to world view\n mapCenter = [0, 0];\n }\n\n // Create map\n this.map = window.L.map(mapElement, {\n center: mapCenter,\n zoom: this.zoom,\n zoomControl: this.showZoomControl\n });\n // Optionally hide Leaflet branding/prefix (removes Leaflet link/flag in attribution control)\n if (this.map && this.map.attributionControl && this.showLeafletBranding === false) {\n try { this.map.attributionControl.setPrefix(''); } catch (e) {}\n }\n\n // Add tile layer\n const tileConfig = this.getTileLayerUrl();\n this._tileLayer = window.L.tileLayer(tileConfig.url, {\n attribution: tileConfig.attribution,\n maxZoom: tileConfig.maxZoom\n }).addTo(this.map);\n\n // Optional built-in tile layer selector UI\n if (this.showLayerControl) {\n const container = mapElement.parentElement || this.element.querySelector('.map-container');\n if (container) {\n container.style.position = container.style.position || 'relative';\n const selector = document.createElement('select');\n selector.className = 'form-select form-select-sm';\n selector.style.position = 'absolute';\n selector.style.top = '8px';\n selector.style.right = '8px';\n selector.style.zIndex = '1000';\n selector.style.maxWidth = '180px';\n selector.setAttribute('aria-label', 'Map tile layer');\n\n // Populate options\n Object.entries(this.layerOptions || {}).forEach(([key, label]) => {\n const opt = document.createElement('option');\n opt.value = key;\n opt.textContent = label;\n if (key === this.tileLayer) opt.selected = true;\n selector.appendChild(opt);\n });\n\n selector.addEventListener('change', () => this.setTileLayer(selector.value));\n container.appendChild(selector);\n }\n }\n\n // Add markers\n this.addMarkers(this.markers);\n\n // Auto-fit bounds if multiple markers\n if (this.markers.length > 1) {\n this.fitBounds();\n }\n\n // Fix tile rendering issues by invalidating size after a delay\n // This ensures the container has proper dimensions and CSS is applied\n setTimeout(() => {\n if (this.map) {\n this.map.invalidateSize();\n }\n }, 300);\n }\n\n addMarkers(markers) {\n if (!this.map || !Array.isArray(markers)) return;\n\n markers.forEach(markerData => {\n const { lat, lng, popup, icon } = markerData;\n\n if (!lat || !lng) return;\n\n const markerOptions = {};\n\n // Custom icon if provided\n if (icon) {\n markerOptions.icon = window.L.icon(icon);\n }\n\n const marker = window.L.marker([lat, lng], markerOptions).addTo(this.map);\n\n // Add popup if provided\n if (popup) {\n marker.bindPopup(popup);\n }\n\n this.leafletMarkers.push(marker);\n });\n }\n\n fitBounds() {\n if (!this.map || this.leafletMarkers.length === 0) return;\n\n const group = new window.L.featureGroup(this.leafletMarkers);\n this.map.fitBounds(group.getBounds().pad(0.1));\n }\n\n updateMarkers(newMarkers) {\n // Clear existing markers\n this.clearMarkers();\n\n // Add new markers\n this.markers = newMarkers;\n this.addMarkers(newMarkers);\n\n // Fit bounds if multiple markers\n if (newMarkers.length > 1) {\n this.fitBounds();\n } else if (newMarkers.length === 1) {\n this.map.setView([newMarkers[0].lat, newMarkers[0].lng], this.zoom);\n }\n }\n\n clearMarkers() {\n this.leafletMarkers.forEach(marker => {\n this.map.removeLayer(marker);\n });\n this.leafletMarkers = [];\n }\n\n setView(lat, lng, zoom = null) {\n if (!this.map) return;\n this.map.setView([lat, lng], zoom || this.zoom);\n }\n\n setZoom(zoom) {\n if (!this.map) return;\n this.map.setZoom(zoom);\n }\n\n setTileLayer(key) {\n if (!this.map) return;\n // Resolve tile layer config using the same logic as getTileLayerUrl\n const original = this.tileLayer;\n this.tileLayer = key || this.tileLayer;\n const tileConfig = this.getTileLayerUrl();\n try {\n if (this._tileLayer) {\n this.map.removeLayer(this._tileLayer);\n }\n } catch (e) {\n // ignore if layer already removed\n }\n this._tileLayer = window.L.tileLayer(tileConfig.url, {\n attribution: tileConfig.attribution,\n maxZoom: tileConfig.maxZoom\n }).addTo(this.map);\n // Keep property in sync\n this.tileLayer = key || original;\n\n // Nudge map to ensure proper redraw\n setTimeout(() => {\n try { this.map.invalidateSize(); } catch (e) {}\n }, 150);\n }\n\n async onBeforeDestroy() {\n if (this.map) {\n this.map.remove();\n this.map = null;\n }\n await super.onBeforeDestroy();\n }\n\n static async showAsDialog(options = {}) {\n const view = new MapView(options);\n const dopts = options.dialogOptions || {};\n const dialogOptions = {\n title: \"Map View\",\n header: true,\n body: view,\n size: 'lg',\n centered: false,\n ...dopts\n }\n await view.init();\n await view.getApp().showDialog(dialogOptions);\n }\n}\n\nexport default MapView;\n","/**\n * MapLibreView - Interactive vector map component using MapLibre GL JS\n * \n * MapLibre GL is better for:\n * - Vector tiles and custom styling\n * - 3D terrain and buildings\n * - High-performance rendering\n * - Heat maps and data visualizations\n * - Complex animations\n * \n * Use MapView (Leaflet) for simple marker maps.\n * Use MapLibreView for advanced visualizations.\n * \n * @example\n * const mapView = new MapLibreView({\n * markers: [\n * { lng: -122.084, lat: 37.422, popup: 'Mountain View, CA' }\n * ],\n * style: 'streets', // 'streets', 'satellite', 'dark', 'light'\n * zoom: 10,\n * height: 400\n * });\n */\n\nimport View from '@core/View.js';\n\nclass MapLibreView extends View {\n constructor(options = {}) {\n super({\n className: 'maplibre-view',\n ...options\n });\n\n this.markers = options.markers || [];\n this.center = options.center || null;\n this.zoom = options.zoom || 13;\n this.height = options.height || 400;\n this.pitch = options.pitch || 0; // 0-60 degrees (3D tilt)\n this.bearing = options.bearing || 0; // 0-360 degrees (rotation)\n this.mapStyle = options.style || 'streets'; // 'streets', 'satellite', 'dark', 'light', 'terrain'\n this.showNavigationControl = options.showNavigationControl !== false;\n this.autoFitBounds = options.autoFitBounds !== false;\n \n this.map = null;\n this.mapMarkers = [];\n this.pendingMarkers = [...this.markers];\n this.lineSources = options.lineSources || [];\n this.pendingLineData = new Map();\n\n 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 `;\n }\n\n async onAfterRender() {\n await this.loadMapLibre();\n await this.initializeMap();\n }\n\n async loadMapLibre() {\n // Check if MapLibre is already loaded\n if (window.maplibregl) return;\n\n // Load MapLibre CSS\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css';\n document.head.appendChild(link);\n\n // Load MapLibre JS\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js';\n script.onload = resolve;\n script.onerror = reject;\n document.head.appendChild(script);\n });\n }\n\n getMapStyle() {\n const styles = {\n streets: 'https://demotiles.maplibre.org/style.json',\n dark: {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors'\n }\n },\n layers: [{\n id: 'osm',\n type: 'raster',\n source: 'osm'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n },\n light: {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors'\n }\n },\n layers: [{\n id: 'osm',\n type: 'raster',\n source: 'osm'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n },\n satellite: {\n version: 8,\n sources: {\n satellite: {\n type: 'raster',\n tiles: ['https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'],\n tileSize: 256,\n attribution: '© Esri'\n }\n },\n layers: [{\n id: 'satellite',\n type: 'raster',\n source: 'satellite'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n },\n terrain: {\n version: 8,\n sources: {\n terrain: {\n type: 'raster',\n tiles: ['https://a.tile.opentopomap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenTopoMap contributors'\n }\n },\n layers: [{\n id: 'terrain',\n type: 'raster',\n source: 'terrain'\n }],\n glyphs: 'https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf'\n }\n };\n\n return styles[this.mapStyle] || styles.streets;\n }\n\n async initializeMap() {\n const mapElement = this.element.querySelector(`#maplibre-${this.id}`);\n if (!mapElement || !window.maplibregl) return;\n\n // Determine map center\n let mapCenter = this.center;\n if (!mapCenter && this.markers.length > 0) {\n // Use first marker as center (MapLibre uses [lng, lat])\n mapCenter = [this.markers[0].lng, this.markers[0].lat];\n }\n if (!mapCenter) {\n // Default to world view\n mapCenter = [0, 0];\n }\n\n // Create map\n this.map = new window.maplibregl.Map({\n container: mapElement,\n style: this.getMapStyle(),\n center: mapCenter,\n zoom: this.zoom,\n pitch: this.pitch,\n bearing: this.bearing\n });\n\n // Add navigation control\n if (this.showNavigationControl) {\n this.map.addControl(new window.maplibregl.NavigationControl(), 'top-right');\n }\n\n // Wait for map to load before adding markers\n this.map.on('load', () => {\n const initialMarkers = this.pendingMarkers.length ? this.pendingMarkers : this.markers;\n this.updateMarkers(initialMarkers);\n this.lineSources.forEach(source => this.addLineSource(source));\n this.pendingLineData.forEach(source => this.addLineSource(source));\n this.pendingLineData.clear();\n });\n }\n\n addMarkers(markers) {\n if (!this.map || !Array.isArray(markers)) {\n this.pendingMarkers = Array.isArray(markers) ? markers : [];\n return;\n }\n\n markers.forEach(markerData => {\n const { lng, lat, popup, color, icon, size } = markerData;\n \n if (!lng || !lat) return;\n\n // Create marker element\n const el = document.createElement('div');\n el.className = 'maplibre-marker';\n const markerSize = Number(size) || 30;\n el.style.width = `${markerSize}px`;\n el.style.height = `${markerSize}px`;\n el.style.borderRadius = '50%';\n el.style.backgroundColor = color || '#3b82f6';\n el.style.border = '3px solid white';\n el.style.boxShadow = '0 2px 4px rgba(0,0,0,0.3)';\n el.style.cursor = 'pointer';\n el.style.display = 'flex';\n el.style.alignItems = 'center';\n el.style.justifyContent = 'center';\n\n // Optional icon\n if (icon) {\n el.innerHTML = `<i class=\"${icon}\" style=\"color: white;\"></i>`;\n }\n\n // Create marker\n const marker = new window.maplibregl.Marker({ element: el })\n .setLngLat([lng, lat])\n .addTo(this.map);\n\n // Add popup if provided\n if (popup) {\n const mapPopup = new window.maplibregl.Popup({ offset: 25 })\n .setHTML(popup);\n marker.setPopup(mapPopup);\n }\n\n this.mapMarkers.push(marker);\n });\n }\n\n fitBounds() {\n if (!this.map || this.markers.length === 0) return;\n\n const bounds = new window.maplibregl.LngLatBounds();\n \n this.markers.forEach(marker => {\n bounds.extend([marker.lng, marker.lat]);\n });\n\n this.map.fitBounds(bounds, {\n padding: 50,\n maxZoom: 15\n });\n }\n\n updateMarkers(newMarkers) {\n const markers = Array.isArray(newMarkers) ? newMarkers : [];\n this.markers = markers;\n this.pendingMarkers = markers;\n if (!this.map) return;\n\n this.clearMarkers();\n this.addMarkers(markers);\n\n if (this.autoFitBounds && markers.length > 1) {\n this.fitBounds();\n } else if (markers.length === 1 && this.map) {\n this.map.flyTo({\n center: [markers[0].lng, markers[0].lat],\n zoom: this.zoom\n });\n }\n }\n\n clearMarkers() {\n this.mapMarkers.forEach(marker => {\n marker.remove();\n });\n this.mapMarkers = [];\n }\n\n addLineSource({ id, data, paint, layout }) {\n if (!id || !data) return;\n\n const sourceId = `${id}-source`;\n\n if (!this.map) {\n this.pendingLineData.set(id, { id, data, paint, layout });\n return;\n }\n\n if (this.map.getLayer(id)) {\n this.map.removeLayer(id);\n }\n if (this.map.getSource(sourceId)) {\n this.map.removeSource(sourceId);\n }\n\n this.map.addSource(sourceId, {\n type: 'geojson',\n data\n });\n\n this.map.addLayer({\n id,\n type: 'line',\n source: sourceId,\n paint: {\n 'line-color': '#3b82f6',\n 'line-width': 2,\n 'line-opacity': 0.6,\n ...paint\n },\n layout: {\n 'line-cap': 'round',\n 'line-join': 'round',\n ...layout\n }\n });\n }\n\n updateLineSource(id, { data, paint, layout } = {}) {\n if (!id || !data) return;\n const sourceId = `${id}-source`;\n if (!this.map) {\n this.pendingLineData.set(id, { id, data, paint, layout });\n return;\n }\n if (this.map.getSource(sourceId)) {\n this.map.getSource(sourceId).setData(data);\n if (paint || layout) {\n if (paint) {\n Object.entries(paint).forEach(([key, value]) => {\n this.map.setPaintProperty(id, key, value);\n });\n }\n if (layout) {\n Object.entries(layout).forEach(([key, value]) => {\n this.map.setLayoutProperty(id, key, value);\n });\n }\n }\n } else {\n this.addLineSource({ id, data, paint, layout });\n }\n }\n\n setView(lng, lat, zoom = null) {\n if (!this.map) return;\n this.map.flyTo({\n center: [lng, lat],\n zoom: zoom || this.zoom\n });\n }\n\n setZoom(zoom) {\n if (!this.map) return;\n this.map.setZoom(zoom);\n }\n\n setPitch(pitch) {\n if (!this.map) return;\n this.map.setPitch(pitch);\n }\n\n setBearing(bearing) {\n if (!this.map) return;\n this.map.setBearing(bearing);\n }\n\n async onBeforeDestroy() {\n if (this.map) {\n this.map.remove();\n this.map = null;\n }\n await super.onBeforeDestroy();\n }\n}\n\nexport default MapLibreView;\n","// Auto-generated from countries.geojson - do not edit manually.\nexport const COUNTRY_CENTROIDS = {\n \"AD\": { name: \"Andorra\", lat: 42.54859834854764, lng: 1.5802243611232873 },\n \"AE\": { name: \"United Arab Emirates\", lat: 24.18250292309135, lng: 54.27920525789581 },\n \"AF\": { name: \"Afghanistan\", lat: 34.13402601376932, lng: 66.59216131095278 },\n \"AG\": { name: \"Antigua and Barbuda\", lat: 17.07146759372967, lng: -61.78530823226373 },\n \"AI\": { name: \"Anguilla\", lat: 18.222874004219086, lng: -63.06008343771806 },\n \"AL\": { name: \"Albania\", lat: 41.14165894891656, lng: 20.061082767269493 },\n \"AM\": { name: \"Armenia\", lat: 40.17841274230679, lng: 45.05490831965259 },\n \"AO\": { name: \"Angola\", lat: -12.167424062667942, lng: 17.651768783079 },\n \"AQ\": { name: \"Antarctica\", lat: -77.16987521415838, lng: -177.56451613408842 },\n \"AR\": { name: \"Argentina\", lat: -35.697270518120085, lng: -64.53238503843076 },\n \"AS\": { name: \"American Samoa\", lat: -14.305711987770538, lng: -170.7007316174498 },\n \"AT\": { name: \"Austria\", lat: 47.631858269895794, lng: 13.797778364631036 },\n \"AU\": { name: \"Australia\", lat: -25.697337673983082, lng: 134.02277170916162 },\n \"AW\": { name: \"Aruba\", lat: 12.515625722992898, lng: -69.97564014284046 },\n \"AZ\": { name: \"Azerbaijan\", lat: 40.3920509942049, lng: 48.634592670644324 },\n \"BA\": { name: \"Bosnia and Herzegovina\", lat: 44.14415356126429, lng: 17.83467240787538 },\n \"BB\": { name: \"Barbados\", lat: 13.183219369337529, lng: -59.557383949150285 },\n \"BD\": { name: \"Bangladesh\", lat: 23.673728665121, lng: 90.43212562608613 },\n \"BE\": { name: \"Belgium\", lat: 50.6182138854095, lng: 4.675010154696485 },\n \"BF\": { name: \"Burkina Faso\", lat: 12.108709036312737, lng: -1.6932816211842325 },\n \"BG\": { name: \"Bulgaria\", lat: 42.82043677302438, lng: 25.251739122561908 },\n \"BH\": { name: \"Bahrain\", lat: 26.04798501537066, lng: 50.540695402276775 },\n \"BI\": { name: \"Burundi\", lat: -3.261251993278643, lng: 29.88518227845293 },\n \"BJ\": { name: \"Benin\", lat: 9.503013199615893, lng: 2.305714528830206 },\n \"BL\": { name: \"Saint Barthelemy\", lat: 17.90561691241738, lng: -62.83051610005156 },\n \"BM\": { name: \"Bermuda\", lat: 32.315067430740726, lng: -64.7458500599169 },\n \"BN\": { name: \"Brunei Darussalam\", lat: 4.543205889917609, lng: 114.6430958360464 },\n \"BO\": { name: \"Bolivia\", lat: -16.7312488393574, lng: -64.45209597511206 },\n \"BQ\": { name: \"Bonaire\", lat: 12.180844982440338, lng: -68.29350445958761 },\n \"BQ\": { name: \"Saba\", lat: 17.632512616389718, lng: -63.23739481909494 },\n \"BQ\": { name: \"Saint Eustatius\", lat: 17.4919042294197, lng: -62.978230589445026 },\n \"BR\": { name: \"Brazil\", lat: -11.524630416426652, lng: -54.355206608256424 },\n \"BS\": { name: \"Bahamas\", lat: 24.72162633646784, lng: -78.07275370060313 },\n \"BT\": { name: \"Bhutan\", lat: 27.42163933959824, lng: 90.46716647173861 },\n \"BV\": { name: \"Bouvet Island\", lat: -54.42316679395248, lng: 3.411969465057627 },\n \"BW\": { name: \"Botswana\", lat: -22.236609002062902, lng: 23.85779956995608 },\n \"BY\": { name: \"Belarus\", lat: 53.46791374543163, lng: 27.964252054715104 },\n \"BZ\": { name: \"Belize\", lat: 17.24252476647155, lng: -88.68273510023441 },\n \"CA\": { name: \"Canada\", lat: 57.550480044655636, lng: -98.41680517868062 },\n \"CC\": { name: \"Cocos Islands\", lat: -12.171249450199545, lng: 96.83688767323002 },\n \"CD\": { name: \"Congo DRC\", lat: -3.338629596207896, lng: 23.419827574282188 },\n \"CF\": { name: \"Central African Republic\", lat: 6.331390033944319, lng: 20.520743419397256 },\n \"CG\": { name: \"Congo\", lat: -0.7294391595233845, lng: 14.879732849491393 },\n \"CH\": { name: \"Switzerland\", lat: 46.73678128684938, lng: 8.286928794895285 },\n \"CI\": { name: \"Côte d'Ivoire\", lat: 7.536779279421307, lng: -5.571710194917734 },\n \"CK\": { name: \"Cook Islands\", lat: -21.222613253399842, lng: -159.78768870952257 },\n \"CL\": { name: \"Chile\", lat: -37.82938283049967, lng: -70.76863431739216 },\n \"CM\": { name: \"Cameroon\", lat: 6.294168487480992, lng: 12.948474142398263 },\n \"CN\": { name: \"China\", lat: 38.07325481105728, lng: 104.69113855849604 },\n \"CO\": { name: \"Colombia\", lat: 4.187753877352739, lng: -72.6445066243485 },\n \"CR\": { name: \"Costa Rica\", lat: 9.863467407406214, lng: -84.14673625701816 },\n \"CU\": { name: \"Cuba\", lat: 21.476176522869448, lng: -79.69817857618705 },\n \"CV\": { name: \"Cabo Verde\", lat: 15.076411518651643, lng: -23.63401005900474 },\n \"CW\": { name: \"Curacao\", lat: 12.199996647939832, lng: -68.96939768599042 },\n \"CX\": { name: \"Christmas Island\", lat: -10.446440802183416, lng: 105.70209512200549 },\n \"CY\": { name: \"Cyprus\", lat: 35.11700416345239, lng: 33.375346009199205 },\n \"CZ\": { name: \"Czech Republic\", lat: 49.74917370930982, lng: 15.383273292023533 },\n \"DE\": { name: \"Germany\", lat: 51.08304539800482, lng: 10.426171427430804 },\n \"DJ\": { name: \"Djibouti\", lat: 11.750235727618804, lng: 42.613496898789506 },\n \"DK\": { name: \"Denmark\", lat: 56.00118817971057, lng: 9.378670542409406 },\n \"DM\": { name: \"Dominica\", lat: 15.429269860940513, lng: -61.360471946942994 },\n \"DO\": { name: \"Dominican Republic\", lat: 18.77954818522993, lng: -70.43495198520012 },\n \"DZ\": { name: \"Algeria\", lat: 28.350969744889056, lng: 2.6558464719769135 },\n \"EC\": { name: \"Ecuador\", lat: -1.5642721388853116, lng: -78.4630326109714 },\n \"EE\": { name: \"Estonia\", lat: 58.648108311231034, lng: 25.916870250633806 },\n \"EG\": { name: \"Egypt\", lat: 26.60517034450628, lng: 30.240135435012338 },\n \"ER\": { name: \"Eritrea\", lat: 15.005533147667684, lng: 39.2672401449901 },\n \"ES\": { name: \"Spain\", lat: 40.365008336683836, lng: -3.6516251409956983 },\n \"ES\": { name: \"Canarias\", lat: 28.297665106525546, lng: -16.53799441021647 },\n \"ET\": { name: \"Ethiopia\", lat: 8.729389557048396, lng: 39.914902886544276 },\n \"FI\": { name: \"Finland\", lat: 65.01578959749911, lng: 25.65738433454702 },\n \"FJ\": { name: \"Fiji\", lat: -17.822470952336204, lng: 177.98144613732626 },\n \"FK\": { name: \"Falkland Islands\", lat: -51.75901312766726, lng: -58.746646363799854 },\n \"FM\": { name: \"Micronesia\", lat: 6.8789448129255435, lng: 158.2291899444527 },\n \"FO\": { name: \"Faroe Islands\", lat: 62.130896281495346, lng: -6.9811060913122835 },\n \"FR\": { name: \"France\", lat: 46.6423682169416, lng: 2.1940236627886227 },\n \"GA\": { name: \"Gabon\", lat: -0.628448459921234, lng: 11.839410898545754 },\n \"GB\": { name: \"United Kingdom\", lat: 53.97844735080214, lng: -2.852943909329258 },\n \"GD\": { name: \"Grenada\", lat: 12.112926656338907, lng: -61.67937937204098 },\n \"GE\": { name: \"Georgia\", lat: 42.17986277737226, lng: 43.378866534112234 },\n \"GF\": { name: \"French Guiana\", lat: 3.857429742497078, lng: -53.32232307156624 },\n \"GG\": { name: \"Guernsey\", lat: 49.45870771378872, lng: -2.576392582891568 },\n \"GH\": { name: \"Ghana\", lat: 7.94530467243628, lng: -1.219233362526581 },\n \"GI\": { name: \"Gibraltar\", lat: 36.14022671336082, lng: -5.345549484594358 },\n \"GL\": { name: \"Greenland\", lat: 74.16847218965994, lng: -42.07567788066985 },\n \"GM\": { name: \"Gambia\", lat: 13.428617959189328, lng: -15.383380385869662 },\n \"GN\": { name: \"Guinea\", lat: 10.255986541378112, lng: -10.986948848040218 },\n \"GP\": { name: \"Guadeloupe\", lat: 16.24420002705553, lng: -61.54382262282755 },\n \"GQ\": { name: \"Equatorial Guinea\", lat: 1.5954643936590733, lng: 10.425456672353823 },\n \"GR\": { name: \"Greece\", lat: 39.42012261727978, lng: 23.110368936161876 },\n \"GS\": { name: \"South Georgia and South Sandwich Islands\", lat: -54.37666443862139, lng: -36.77509575898928 },\n \"GT\": { name: \"Guatemala\", lat: 15.820878515352684, lng: -90.31219349119617 },\n \"GU\": { name: \"Guam\", lat: 13.445430479945276, lng: 144.78024458298802 },\n \"GW\": { name: \"Guinea-Bissau\", lat: 11.980075324820504, lng: -14.980186756910847 },\n \"GY\": { name: \"Guyana\", lat: 4.68211981385056, lng: -58.91352612754667 },\n \"HM\": { name: \"Heard Island and McDonald Islands\", lat: -53.084170035513736, lng: 73.49298560844045 },\n \"HN\": { name: \"Honduras\", lat: 14.740370695750006, lng: -86.49251679006962 },\n \"HR\": { name: \"Croatia\", lat: 44.91192100856702, lng: 16.625761129583374 },\n \"HT\": { name: \"Haiti\", lat: 18.883520486983567, lng: -72.89291379842 },\n \"HU\": { name: \"Hungary\", lat: 47.22527332486294, lng: 19.39620048366142 },\n \"ID\": { name: \"Indonesia\", lat: 0.15591979959037652, lng: 113.96538246847302 },\n \"IE\": { name: \"Ireland\", lat: 53.30489539816495, lng: -8.241128545554096 },\n \"IL\": { name: \"Israel\", lat: 31.513542220043195, lng: 35.027923472437024 },\n \"IM\": { name: \"Isle of Man\", lat: 54.22855301008011, lng: -4.532995055468449 },\n \"IN\": { name: \"India\", lat: 23.586300567746722, lng: 81.17300408530181 },\n \"IO\": { name: \"British Indian Ocean Territory\", lat: -7.323548444385743, lng: 72.43501618476016 },\n \"IQ\": { name: \"Iraq\", lat: 33.105075667527906, lng: 43.832529181056884 },\n \"IR\": { name: \"Iran\", lat: 32.906023742890056, lng: 54.237077001065444 },\n \"IS\": { name: \"Iceland\", lat: 65.12360920205514, lng: -19.05682967106099 },\n \"IT\": { name: \"Italy\", lat: 42.98201127614267, lng: 12.763657166123137 },\n \"JE\": { name: \"Jersey\", lat: 49.215396925724306, lng: -2.1291601162653575 },\n \"JM\": { name: \"Jamaica\", lat: 18.12207889341651, lng: -77.30358894542778 },\n \"JO\": { name: \"Jordan\", lat: 31.387064884449156, lng: 36.95728884547246 },\n \"JP\": { name: \"Japan\", lat: 36.76738832597829, lng: 137.46934234351835 },\n \"KE\": { name: \"Kenya\", lat: 0.6899182318376179, lng: 37.95309411262371 },\n \"KG\": { name: \"Kyrgyzstan\", lat: 41.35698905438358, lng: 74.17532903468319 },\n \"KH\": { name: \"Cambodia\", lat: 12.699186865507775, lng: 105.03973078680701 },\n \"KI\": { name: \"Kiribati\", lat: 1.8676673749241066, lng: -157.39024189323504 },\n \"KM\": { name: \"Comoros\", lat: -11.658861474508491, lng: 43.34826587429403 },\n \"KN\": { name: \"Saint Kitts and Nevis\", lat: 17.314736299587768, lng: -62.74560385895787 },\n \"KP\": { name: \"North Korea\", lat: 40.19198091470839, lng: 127.3379805653744 },\n \"KR\": { name: \"South Korea\", lat: 36.402386712544114, lng: 127.76224551357649 },\n \"KW\": { name: \"Kuwait\", lat: 29.281360965443092, lng: 47.56311109320184 },\n \"KY\": { name: \"Cayman Islands\", lat: 19.311231805620288, lng: -81.25203208977878 },\n \"KZ\": { name: \"Kazakhstan\", lat: 47.641465195176835, lng: 66.3759193479301 },\n \"LA\": { name: \"Laos\", lat: 18.117282736873282, lng: 103.76375899026448 },\n \"LB\": { name: \"Lebanon\", lat: 33.91160170722086, lng: 35.89651946324749 },\n \"LC\": { name: \"Saint Lucia\", lat: 13.895749185129906, lng: -60.9689510935251 },\n \"LI\": { name: \"Liechtenstein\", lat: 47.14627562133036, lng: 9.547674672376376 },\n \"LK\": { name: \"Sri Lanka\", lat: 7.696630939329944, lng: 80.66931169770622 },\n \"LR\": { name: \"Liberia\", lat: 6.52012979398834, lng: -9.258988935497618 },\n \"LS\": { name: \"Lesotho\", lat: -29.60168116924817, lng: 28.24475317864227 },\n \"LT\": { name: \"Lithuania\", lat: 55.29437393417175, lng: 23.946021605013534 },\n \"LU\": { name: \"Luxembourg\", lat: 49.77523454542369, lng: 6.103230338458876 },\n \"LV\": { name: \"Latvia\", lat: 56.813853047554154, lng: 24.693671325654403 },\n \"LY\": { name: \"Libya\", lat: 27.202915771690794, lng: 17.91133392454237 },\n \"MA\": { name: \"Morocco\", lat: 28.687598134979325, lng: -8.817212587250811 },\n \"MC\": { name: \"Monaco\", lat: 43.74798224995656, lng: 7.412820873271196 },\n \"MD\": { name: \"Moldova\", lat: 47.0725674580696, lng: 28.391111865941348 },\n \"ME\": { name: \"Montenegro\", lat: 42.73694835210454, lng: 19.29505087156758 },\n \"MF\": { name: \"Saint Martin\", lat: 18.078012113224464, lng: -63.06678525361946 },\n \"MG\": { name: \"Madagascar\", lat: -19.04163612493041, lng: 46.68493466832544 },\n \"MH\": { name: \"Marshall Islands\", lat: 7.307929900994344, lng: 168.72016025351076 },\n \"MK\": { name: \"North Macedonia\", lat: 41.59402890143112, lng: 21.70998923872772 },\n \"ML\": { name: \"Mali\", lat: 17.168146208584837, lng: -4.346399841781153 },\n \"MM\": { name: \"Myanmar\", lat: 19.901227931399873, lng: 97.08892285397344 },\n \"MN\": { name: \"Mongolia\", lat: 47.08644454604851, lng: 103.3987360327455 },\n \"MP\": { name: \"Northern Mariana Islands\", lat: 15.178063516432115, lng: 145.74119737203134 },\n \"MQ\": { name: \"Martinique\", lat: 14.642697353597645, lng: -61.01432380875083 },\n \"MR\": { name: \"Mauritania\", lat: 20.466731212820022, lng: -10.495079045035716 },\n \"MS\": { name: \"Montserrat\", lat: 16.735363391460357, lng: -62.18693281256255 },\n \"MT\": { name: \"Malta\", lat: 35.890522650899314, lng: 14.441922442508494 },\n \"MU\": { name: \"Mauritius\", lat: -20.28142317475198, lng: 57.56415671066546 },\n \"MV\": { name: \"Maldives\", lat: -0.6065577168009924, lng: 73.10076245140479 },\n \"MW\": { name: \"Malawi\", lat: -13.128986464184024, lng: 34.23441182298881 },\n \"MX\": { name: \"Mexico\", lat: 23.87436068093592, lng: -101.55399731630118 },\n \"MY\": { name: \"Malaysia\", lat: 3.6716608556387857, lng: 114.63330303992869 },\n \"MZ\": { name: \"Mozambique\", lat: -17.525230309488748, lng: 35.208577031290176 },\n \"NA\": { name: \"Namibia\", lat: -21.90858163281473, lng: 18.16451345845268 },\n \"NC\": { name: \"New Caledonia\", lat: -21.33003372660827, lng: 165.50767040438612 },\n \"NE\": { name: \"Niger\", lat: 17.08105392407292, lng: 8.86863247002646 },\n \"NF\": { name: \"Norfolk Island\", lat: -29.037654445046282, lng: 167.95259597483337 },\n \"NG\": { name: \"Nigeria\", lat: 9.61029352034213, lng: 8.147714845256194 },\n \"NI\": { name: \"Nicaragua\", lat: 12.893566631930554, lng: -85.016088327669 },\n \"NL\": { name: \"Netherlands\", lat: 52.134054128923886, lng: 5.554136426128487 },\n \"NO\": { name: \"Norway\", lat: 64.97775882947745, lng: 16.670259272390894 },\n \"NP\": { name: \"Nepal\", lat: 28.300920699755657, lng: 84.1338898313567 },\n \"NR\": { name: \"Nauru\", lat: -0.5221021440668993, lng: 166.92937633139178 },\n \"NU\": { name: \"Niue\", lat: -19.05230921680393, lng: -169.86878106699083 },\n \"NZ\": { name: \"New Zealand\", lat: -43.82765432544426, lng: 170.69035541428696 },\n \"OM\": { name: \"Oman\", lat: 20.7242833183209, lng: 55.841088119829 },\n \"PA\": { name: \"Panama\", lat: 8.439536749576892, lng: -80.14428761482796 },\n \"PE\": { name: \"Peru\", lat: -8.522717984240291, lng: -74.11416196781884 },\n \"PF\": { name: \"French Polynesia\", lat: -17.674684080120677, lng: -149.40041671099763 },\n \"PG\": { name: \"Papua New Guinea\", lat: -7.156912819152135, lng: 144.8348942994695 },\n \"PH\": { name: \"Philippines\", lat: 15.586542251094242, lng: 121.82208941416745 },\n \"PK\": { name: \"Pakistan\", lat: 30.116188371410882, lng: 69.08835090769651 },\n \"PL\": { name: \"Poland\", lat: 52.06848055692473, lng: 19.43573279234468 },\n \"PM\": { name: \"Saint Pierre and Miquelon\", lat: 46.95153913615198, lng: -56.32465353437558 },\n \"PN\": { name: \"Pitcairn\", lat: -24.366121747565458, lng: -128.3149848627581 },\n \"PR\": { name: \"Puerto Rico\", lat: 18.216224086610914, lng: -66.49425339593509 },\n \"PS\": { name: \"Palestinian Territory\", lat: 31.930818736453883, lng: 35.24251184154588 },\n \"PT\": { name: \"Portugal\", lat: 39.67529214702138, lng: -7.933662183874006 },\n \"PW\": { name: \"Palau\", lat: 7.534775852547396, lng: 134.57965086721052 },\n \"PY\": { name: \"Paraguay\", lat: -23.42190559259428, lng: -58.38906357428651 },\n \"QA\": { name: \"Qatar\", lat: 25.318528486425386, lng: 51.19794918743203 },\n \"RE\": { name: \"Réunion\", lat: -21.119825460665105, lng: 55.54393506194689 },\n \"RO\": { name: \"Romania\", lat: 45.82454894397586, lng: 25.094158201563292 },\n \"RS\": { name: \"Serbia\", lat: 44.02679870131969, lng: 20.85677444395745 },\n \"RU\": { name: \"Russian Federation\", lat: 59.039434214106194, lng: 98.6704990698032 },\n \"RW\": { name: \"Rwanda\", lat: -2.014687460047154, lng: 29.919439681764082 },\n \"SA\": { name: \"Saudi Arabia\", lat: 24.136038144757897, lng: 44.600958178225596 },\n \"SB\": { name: \"Solomon Islands\", lat: -9.613104734596515, lng: 160.16475795033884 },\n \"SC\": { name: \"Seychelles\", lat: -4.660002318822744, lng: 55.47250789595527 },\n \"SD\": { name: \"Sudan\", lat: 15.67060230984256, lng: 29.951458283594064 },\n \"SE\": { name: \"Sweden\", lat: 62.73420986108448, lng: 17.062431988004956 },\n \"SG\": { name: \"Singapore\", lat: 1.3528251890006349, lng: 103.81025757634053 },\n \"SH\": { name: \"Saint Helena\", lat: -15.962963318340398, lng: -5.717391620813109 },\n \"SI\": { name: \"Slovenia\", lat: 46.13759229564504, lng: 14.890636899973781 },\n \"SJ\": { name: \"Svalbard\", lat: 78.57318936469626, lng: 16.036378851505283 },\n \"SK\": { name: \"Slovakia\", lat: 48.69808390520484, lng: 19.581015362490966 },\n \"SL\": { name: \"Sierra Leone\", lat: 8.561330384750587, lng: -11.78656695731115 },\n \"SM\": { name: \"San Marino\", lat: 43.942820729097896, lng: 12.461278349581722 },\n \"SN\": { name: \"Senegal\", lat: 14.228861491763402, lng: -14.610875368352305 },\n \"SO\": { name: \"Somalia\", lat: 6.524534573103924, lng: 45.40037867243972 },\n \"SR\": { name: \"Suriname\", lat: 4.098723595920171, lng: -55.855514311561286 },\n \"SS\": { name: \"South Sudan\", lat: 7.657782041763295, lng: 30.3851856901788 },\n \"ST\": { name: \"Sao Tome and Principe\", lat: 0.22744704294793774, lng: 6.606158796857607 },\n \"SV\": { name: \"El Salvador\", lat: 13.758041517055418, lng: -88.85911489238985 },\n \"SX\": { name: \"Sint Maarten\", lat: 18.03942608463078, lng: -63.06883135915303 },\n \"SY\": { name: \"Syria\", lat: 35.09751106058316, lng: 38.5117323139514 },\n \"SZ\": { name: \"Eswatini\", lat: -26.562540935608702, lng: 31.510685746082007 },\n \"TC\": { name: \"Turks and Caicos Islands\", lat: 21.799865427483745, lng: -71.74058946811508 },\n \"TD\": { name: \"Chad\", lat: 15.283493546654503, lng: 18.427113900363025 },\n \"TF\": { name: \"Juan De Nova Island\", lat: -17.06449193630804, lng: 42.74374761089645 },\n \"TF\": { name: \"French Southern Territories\", lat: -49.26329687105643, lng: 69.54686984724839 },\n \"TF\": { name: \"Glorioso Islands\", lat: -11.566224871643417, lng: 47.290948081543384 },\n \"TG\": { name: \"Togo\", lat: 8.660743037717811, lng: 0.8990857571109684 },\n \"TH\": { name: \"Thailand\", lat: 13.66222784745538, lng: 101.08675116214552 },\n \"TJ\": { name: \"Tajikistan\", lat: 38.56933138382972, lng: 70.94215281065698 },\n \"TK\": { name: \"Tokelau\", lat: -9.195174767256544, lng: -171.85265950722743 },\n \"TL\": { name: \"Timor-Leste\", lat: -8.809894630601962, lng: 125.95024049562659 },\n \"TM\": { name: \"Turkmenistan\", lat: 39.06069118001429, lng: 58.4577357627054 },\n \"TN\": { name: \"Tunisia\", lat: 34.08636179565723, lng: 9.65587551697984 },\n \"TO\": { name: \"Tonga\", lat: -21.15927212823853, lng: -175.20415878511247 },\n \"TR\": { name: \"Turkey\", lat: 38.93207363123396, lng: 35.56886764076691 },\n \"TT\": { name: \"Trinidad and Tobago\", lat: 10.415515638298093, lng: -61.37236579976247 },\n \"TV\": { name: \"Tuvalu\", lat: -8.514701506447222, lng: 179.217833977593 },\n \"TZ\": { name: \"Tanzania\", lat: -6.355794440041147, lng: 34.81832206060381 },\n \"UA\": { name: \"Ukraine\", lat: 48.657532515563794, lng: 31.27377208442636 },\n \"UG\": { name: \"Uganda\", lat: 1.2821729218416205, lng: 32.34371768463123 },\n \"UM\": { name: \"United States Minor Outlying Islands\", lat: 19.302045812215958, lng: 166.63800339749642 },\n \"US\": { name: \"United States\", lat: 38.8208089190304, lng: -96.33161660829639 },\n \"UY\": { name: \"Uruguay\", lat: -32.78195043831093, lng: -56.01919523458085 },\n \"UZ\": { name: \"Uzbekistan\", lat: 41.4879065244633, lng: 63.8548297593985 },\n \"VA\": { name: \"Vatican City\", lat: 41.90402351316735, lng: 12.451312917026133 },\n \"VC\": { name: \"Saint Vincent and the Grenadines\", lat: 13.254808122970651, lng: -61.193766354393034 },\n \"VE\": { name: \"Venezuela\", lat: 7.148324760507107, lng: -66.36492135985132 },\n \"VG\": { name: \"British Virgin Islands\", lat: 18.42195819619707, lng: -64.62406519257699 },\n \"VI\": { name: \"US Virgin Islands\", lat: 17.738009708772523, lng: -64.76155341409797 },\n \"VN\": { name: \"Vietnam\", lat: 16.517347170839393, lng: 105.91338832758704 },\n \"VU\": { name: \"Vanuatu\", lat: -15.189132121699332, lng: 166.84912735669738 },\n \"WF\": { name: \"Wallis and Futuna\", lat: -14.283442307826677, lng: -178.12735555777184 },\n \"WS\": { name: \"Samoa\", lat: -13.634252953274622, lng: -172.44107655740137 },\n \"YE\": { name: \"Yemen\", lat: 16.001392616307445, lng: 47.46815793206386 },\n \"YT\": { name: \"Mayotte\", lat: -12.824468416301052, lng: 45.128142327031064 },\n \"ZA\": { name: \"South Africa\", lat: -28.55361930679731, lng: 24.75252746489084 },\n \"ZM\": { name: \"Zambia\", lat: -13.162832953186246, lng: 27.75521363430896 },\n \"ZW\": { name: \"Zimbabwe\", lat: -18.92700121981475, lng: 29.717829640720844 },\n};\n\nexport function getCountryCentroid(code) {\n if (!code) return null;\n return COUNTRY_CENTROIDS[code.toUpperCase()] || null;\n}\n\nexport function getCountryCentroids() {\n return COUNTRY_CENTROIDS;\n}","import View from '@core/View.js';\nimport MapLibreView from './MapLibreView.js';\nimport { COUNTRY_CENTROIDS } from './countryCentroids.js';\n\nclass MetricsCountryMapView extends View {\n constructor(options = {}) {\n const mapHeight = options.height || 320;\n super({\n className: 'metrics-country-map-view',\n ...options\n });\n\n this.endpoint = options.endpoint || '/api/metrics/fetch';\n this.account = options.account || 'global';\n this.category = options.category || null;\n this.slugs = options.slugs || null;\n this.granularity = options.granularity || 'days';\n this.maxCountries = options.maxCountries || 12;\n this.metricLabel = options.metricLabel || 'Events';\n this.height = mapHeight;\n this.mapStyle = options.mapStyle || 'dark';\n this.mapOptions = options.mapOptions || {};\n this.showRoutes = options.showRoutes !== false;\n this.routeOrigin = options.routeOrigin || { lng: -77.346, lat: 38.958, name: 'Reston, VA' };\n this._refreshing = false;\n }\n\n async getTemplate() {\n 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 `;\n }\n\n async onInit() {\n this.statusEl = document.createElement('div');\n this.statusEl.className = 'text-muted small px-3 pb-2';\n this.element.appendChild(this.statusEl);\n\n this.mapView = new MapLibreView({\n containerId: `${this.id}-map`,\n height: this.height,\n style: this.mapStyle,\n zoom: this.mapOptions.zoom ?? 1.3,\n center: this.mapOptions.center || [10, 20],\n pitch: this.mapOptions.pitch ?? 20,\n bearing: this.mapOptions.bearing ?? 0,\n showNavigationControl: this.mapOptions.showNavigationControl ?? true,\n autoFitBounds: this.mapOptions.autoFitBounds ?? false\n });\n this.addChild(this.mapView);\n await this.refresh();\n }\n\n async refresh() {\n if (this._refreshing) return;\n this._refreshing = true;\n this.setStatus('Loading hotspots…');\n try {\n const metrics = await this.fetchMetrics();\n await this.applyMetrics(metrics);\n this.setStatus('');\n } catch (error) {\n console.error('MetricsCountryMapView refresh error', error);\n this.setStatus('Unable to load country metrics.');\n } finally {\n this._refreshing = false;\n }\n }\n\n async fetchMetrics() {\n const rest = this.getApp()?.rest;\n if (!rest) {\n throw new Error('REST client unavailable');\n }\n const params = {\n account: this.account,\n granularity: this.granularity,\n with_labels: true\n };\n if (this.category) params.category = this.category;\n if (this.slugs) {\n const slugsArray = Array.isArray(this.slugs) ? this.slugs : [this.slugs];\n params['slugs[]'] = slugsArray;\n }\n\n const response = await rest.GET(this.endpoint, params);\n if (!response.success || !response.data?.status) {\n throw new Error(response.data?.error || 'Metrics API error');\n }\n return response.data.data;\n }\n\n async applyMetrics(data) {\n const metrics = data?.data || {};\n const labels = data?.labels || [];\n const entries = [];\n\n Object.entries(metrics).forEach(([iso, series]) => {\n const total = series.reduce((sum, value) => sum + (Number(value) || 0), 0);\n if (!total) return;\n const centroid = COUNTRY_CENTROIDS[iso.toUpperCase()];\n if (!centroid) return;\n entries.push({\n code: iso.toUpperCase(),\n total,\n values: series,\n centroid\n });\n });\n\n if (!entries.length) {\n this.mapView.updateMarkers([]);\n this.renderLegend([]);\n this.setStatus('No country data available for the selected range.');\n return;\n }\n\n entries.sort((a, b) => b.total - a.total);\n const topEntries = entries.slice(0, this.maxCountries);\n const maxValue = topEntries[0]?.total || 1;\n\n const markers = topEntries.map(entry => {\n const intensity = entry.total / maxValue;\n const markerSize = Math.round(18 + intensity * 24);\n return {\n lng: entry.centroid.lng,\n lat: entry.centroid.lat,\n size: markerSize,\n color: this.getMarkerColor(intensity),\n popup: `\n <div class=\"text-center\">\n <strong>${entry.centroid.name}</strong><br/>\n <span class=\"text-muted\">${entry.total.toLocaleString()} ${this.metricLabel}</span>\n </div>\n `\n };\n });\n\n if (this.showRoutes && this.routeOrigin?.lng && this.routeOrigin?.lat) {\n markers.push({\n lng: this.routeOrigin.lng,\n lat: this.routeOrigin.lat,\n size: 26,\n color: '#0d6efd',\n icon: 'bi bi-broadcast-pin',\n 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 `\n });\n }\n\n this.mapView.updateMarkers(markers);\n this.renderLegend(topEntries, labels);\n if (this.showRoutes) {\n this.renderRoutes(topEntries, maxValue);\n }\n }\n\n getMarkerColor(intensity) {\n const start = [32, 201, 151]; // teal\n const end = [255, 193, 7]; // amber\n const mix = start.map((value, idx) =>\n Math.round(value + (end[idx] - value) * intensity)\n );\n return `rgba(${mix[0]}, ${mix[1]}, ${mix[2]}, 0.9)`;\n }\n\n renderLegend(entries) {\n const legendEl = this.element.querySelector('[data-region=\"legend\"]');\n if (!legendEl) return;\n if (!entries.length) {\n legendEl.innerHTML = '';\n return;\n }\n\n const maxValue = entries[0]?.total || 1;\n const rows = entries.map(entry => {\n const percent = ((entry.total / maxValue) * 100).toFixed(0);\n return `\n <div class=\"d-flex justify-content-between align-items-center py-1 border-top\">\n <div>\n <span class=\"fw-semibold\">${entry.centroid.name}</span>\n <span class=\"text-muted ms-1\">(${entry.code})</span>\n </div>\n <div class=\"text-end\">\n <div class=\"fw-semibold\">${entry.total.toLocaleString()}</div>\n <small class=\"text-muted\">${percent}% of top</small>\n </div>\n </div>\n `;\n }).join('');\n\n legendEl.innerHTML = rows;\n }\n\n renderRoutes(entries, maxValue) {\n const origin = this.routeOrigin || null;\n if (!origin || !origin.lng || !origin.lat || !this.mapView) return;\n\n const features = entries.map(entry => ({\n type: 'Feature',\n geometry: {\n type: 'LineString',\n coordinates: [\n [origin.lng, origin.lat],\n [entry.centroid.lng, entry.centroid.lat]\n ]\n },\n properties: {\n total: entry.total,\n intensity: entry.total / maxValue\n }\n }));\n\n const geojson = {\n type: 'FeatureCollection',\n features\n };\n\n const paint = {\n 'line-color': [\n 'interpolate',\n ['linear'],\n ['get', 'intensity'],\n 0,\n 'rgba(32, 201, 151, 0.6)',\n 1,\n 'rgba(255, 193, 7, 0.95)'\n ],\n 'line-width': [\n 'interpolate',\n ['linear'],\n ['get', 'intensity'],\n 0,\n 1.75,\n 1,\n 6\n ],\n 'line-opacity': [\n 'interpolate',\n ['linear'],\n ['get', 'intensity'],\n 0,\n 0.45,\n 1,\n 0.95\n ]\n };\n\n this.mapView.lineSources = this.mapView.lineSources.filter(src => src.id !== `${this.id}-routes`);\n this.mapView.updateLineSource(`${this.id}-routes`, {\n data: geojson,\n paint\n });\n }\n\n setStatus(message) {\n if (!this.statusEl) return;\n this.statusEl.textContent = message || '';\n this.statusEl.style.display = message ? 'block' : 'none';\n }\n\n}\n\nexport default MetricsCountryMapView;\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import Dialog from "./Dialog-G4K6rcmt.js";
2
- import { V as View, d as dataFormatter } from "./Rest-CtdC4cD9.js";
3
- import { W as WebSocketClient } from "./WebSocketClient-BGnzEIjP.js";
1
+ import Dialog from "./Dialog-BVDLaVFL.js";
2
+ import { V as View, d as dataFormatter } from "./Rest-DSzjaYYe.js";
3
+ import { W as WebSocketClient } from "./WebSocketClient-BlBSBvYP.js";
4
4
  class BaseChart extends View {
5
5
  constructor(options = {}) {
6
6
  super({
@@ -3280,4 +3280,4 @@ export {
3280
3280
  MetricsMiniChart as b,
3281
3281
  MetricsMiniChartWidget as c
3282
3282
  };
3283
- //# sourceMappingURL=MetricsMiniChartWidget-DLg1F5tP.js.map
3283
+ //# sourceMappingURL=MetricsMiniChartWidget-BVS-pJks.js.map