datastake-daf 0.6.293 → 0.6.295
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.js +15 -453
- package/dist/style/datastake/_index.css +2 -2
- package/dist/utils/index.js +9 -0
- package/package.json +1 -1
- package/src/@daf/core/components/Dashboard/Globe/SimpleGlobe.jsx +40 -108
- package/src/@daf/core/components/Dashboard/Globe/SimpleGlobe.stories.js +0 -32
- package/src/@daf/core/components/EditForm/storyConfig.js +1 -1
- package/src/@daf/core/components/EditForm/storyConfig2.js +12945 -114
- package/src/constants/locales/en/translation.js +3 -0
- package/src/constants/locales/fr/translation.js +3 -0
- package/src/constants/locales/sp/translation.js +3 -0
- package/src/index.js +0 -2
- package/src/styles/datastake/_index.css +2 -2
- package/dist/style/datastake/mapbox-gl.css +0 -330
- package/src/@daf/core/components/Dashboard/Globe/CSSInJSGlobe.jsx +0 -415
- package/src/@daf/core/components/Dashboard/Globe/IsolatedGlobe.jsx +0 -345
- package/src/@daf/core/components/Dashboard/Globe/NoConflictGlobe.jsx +0 -488
- package/src/styles/datastake/mapbox-gl.css +0 -330
package/dist/components/index.js
CHANGED
|
@@ -20959,26 +20959,27 @@ const SimpleGlobe = _ref => {
|
|
|
20959
20959
|
// Set Mapbox access token
|
|
20960
20960
|
mapboxgl.accessToken = 'pk.eyJ1IjoicmVkaXM5OTkiLCJhIjoiY2x4YWV5MzA5MmtuZzJpcXM5Y201Z2E2YiJ9.m5bwPg-Tj4Akesl1yQUa3w';
|
|
20961
20961
|
|
|
20962
|
-
// Create map with custom Straatos style
|
|
20962
|
+
// Create map with custom Straatos style
|
|
20963
20963
|
map.current = new mapboxgl.Map({
|
|
20964
20964
|
container: mapContainer.current,
|
|
20965
20965
|
style: 'mapbox://styles/pietragottardo/cm9tt9zfi00d101pg1vdx26si',
|
|
20966
20966
|
center: [0, 0],
|
|
20967
20967
|
zoom: mapConfig.maxZoom || 3,
|
|
20968
20968
|
projection: 'globe',
|
|
20969
|
-
// 3D globe settings for proper rendering
|
|
20970
|
-
pitch: 0,
|
|
20971
|
-
bearing: 0,
|
|
20972
|
-
antialias: true,
|
|
20973
|
-
fadeDuration: 0,
|
|
20974
20969
|
attributionControl: false
|
|
20975
20970
|
});
|
|
20976
20971
|
|
|
20977
|
-
//
|
|
20978
|
-
map.current.on('
|
|
20979
|
-
console.log('
|
|
20972
|
+
// Add markers when map loads
|
|
20973
|
+
map.current.on('load', () => {
|
|
20974
|
+
console.log('🗺️ [SIMPLE GLOBE] Map loaded, adding markers...');
|
|
20975
|
+
|
|
20976
|
+
// Hide Mapbox logo and attribution completely
|
|
20977
|
+
map.current.getContainer();
|
|
20978
|
+
const style = document.createElement('style');
|
|
20979
|
+
style.textContent = "\n .mapboxgl-ctrl-logo,\n .mapboxgl-ctrl-attrib,\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right {\n display: none !important;\n }\n .mapboxgl-canvas-container {\n overflow: hidden !important;\n }\n .mapboxgl-canvas {\n overflow: hidden !important;\n }\n /* CRITICAL: Override Leaflet CSS interference with Mapbox */\n .daf-simple-globe-container .mapboxgl-canvas-container {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n }\n .daf-simple-globe-container .mapboxgl-canvas-container canvas {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n /* Prevent Leaflet styles from affecting Mapbox markers */\n .daf-simple-globe-container .daf-globe-marker {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n }\n ";
|
|
20980
|
+
document.head.appendChild(style);
|
|
20980
20981
|
|
|
20981
|
-
// Set
|
|
20982
|
+
// Set the space background with stars
|
|
20982
20983
|
try {
|
|
20983
20984
|
map.current.setFog({
|
|
20984
20985
|
'color': 'rgb(0, 0, 0)',
|
|
@@ -21003,29 +21004,6 @@ const SimpleGlobe = _ref => {
|
|
|
21003
21004
|
}
|
|
21004
21005
|
}
|
|
21005
21006
|
|
|
21006
|
-
// Set lighting for better 3D globe visibility
|
|
21007
|
-
try {
|
|
21008
|
-
map.current.setLight({
|
|
21009
|
-
'anchor': 'viewport',
|
|
21010
|
-
'color': 'white',
|
|
21011
|
-
'intensity': 0.4
|
|
21012
|
-
});
|
|
21013
|
-
console.log('💡 [SIMPLE GLOBE] Lighting configured for 3D globe');
|
|
21014
|
-
} catch (e) {
|
|
21015
|
-
console.log('⚠️ [SIMPLE GLOBE] Could not set lighting');
|
|
21016
|
-
}
|
|
21017
|
-
});
|
|
21018
|
-
|
|
21019
|
-
// Add markers when map loads
|
|
21020
|
-
map.current.on('load', () => {
|
|
21021
|
-
console.log('🗺️ [SIMPLE GLOBE] Map loaded, adding markers...');
|
|
21022
|
-
|
|
21023
|
-
// Hide Mapbox logo and attribution completely
|
|
21024
|
-
map.current.getContainer();
|
|
21025
|
-
const style = document.createElement('style');
|
|
21026
|
-
style.textContent = "\n .mapboxgl-ctrl-logo,\n .mapboxgl-ctrl-attrib,\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right {\n display: none !important;\n }\n .mapboxgl-canvas-container {\n overflow: hidden !important;\n }\n .mapboxgl-canvas {\n overflow: hidden !important;\n }\n \n /* Namespace Mapbox styles to avoid Leaflet interference */\n .daf-simple-globe-container .mapboxgl-marker {\n position: absolute !important; /* let Mapbox control positioning */\n transform: none !important; /* let Mapbox handle positioning for 3D globe */\n left: auto !important;\n top: auto !important;\n z-index: 1000 !important; /* ensure markers are visible */\n }\n \n .daf-simple-globe-container .mapboxgl-marker-pane {\n position: absolute !important;\n z-index: 1000 !important;\n }\n \n .daf-simple-globe-container .mapboxgl-canvas {\n position: absolute !important;\n top: 0;\n left: 0;\n }\n \n .daf-simple-globe-container .mapboxgl-canvas-container {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n }\n \n .daf-simple-globe-container .mapboxgl-canvas-container canvas {\n position: absolute !important;\n top: 0;\n left: 0;\n transform: none !important;\n }\n ";
|
|
21027
|
-
document.head.appendChild(style);
|
|
21028
|
-
|
|
21029
21007
|
// Calculate bounds to fit all markers
|
|
21030
21008
|
const bounds = new mapboxgl.LngLatBounds();
|
|
21031
21009
|
let hasValidCoordinates = false;
|
|
@@ -21101,50 +21079,30 @@ const SimpleGlobe = _ref => {
|
|
|
21101
21079
|
const lat = Number(project.latitude);
|
|
21102
21080
|
console.log("\uD83D\uDCCD [SIMPLE GLOBE] Marker ".concat(index, " coordinates:"), {
|
|
21103
21081
|
lng,
|
|
21104
|
-
lat
|
|
21105
|
-
project: project.name
|
|
21082
|
+
lat
|
|
21106
21083
|
});
|
|
21107
21084
|
|
|
21108
21085
|
// Validate coordinates
|
|
21109
21086
|
if (isNaN(lng) || isNaN(lat) || lng < -180 || lng > 180 || lat < -90 || lat > 90) {
|
|
21110
21087
|
console.error("\u274C [SIMPLE GLOBE] Invalid coordinates for project ".concat(index, ":"), {
|
|
21111
21088
|
lng,
|
|
21112
|
-
lat
|
|
21113
|
-
project: project.name
|
|
21089
|
+
lat
|
|
21114
21090
|
});
|
|
21115
21091
|
return;
|
|
21116
21092
|
}
|
|
21117
|
-
console.log("\uD83D\uDCCD Marker ".concat(index, " coordinates:"), {
|
|
21118
|
-
lng,
|
|
21119
|
-
lat
|
|
21120
|
-
});
|
|
21121
21093
|
|
|
21122
21094
|
// Add coordinates to bounds
|
|
21123
21095
|
bounds.extend([lng, lat]);
|
|
21124
21096
|
hasValidCoordinates = true;
|
|
21125
21097
|
|
|
21126
|
-
//
|
|
21127
|
-
|
|
21128
|
-
element: el,
|
|
21129
|
-
anchor: 'center' // Use center anchor for 3D globe positioning
|
|
21130
|
-
}).setLngLat([lng, lat]).setPopup(popup).addTo(map.current);
|
|
21098
|
+
// Add marker to map with proper coordinate order [lng, lat]
|
|
21099
|
+
new mapboxgl.Marker(el).setLngLat([lng, lat]).setPopup(popup).addTo(map.current);
|
|
21131
21100
|
|
|
21132
21101
|
// Add click handler
|
|
21133
21102
|
el.addEventListener('click', () => {
|
|
21134
21103
|
console.log('📍 [SIMPLE GLOBE] Marker clicked:', project);
|
|
21135
21104
|
onProjectClick(project);
|
|
21136
21105
|
});
|
|
21137
|
-
|
|
21138
|
-
// Verify marker position after a short delay (like other Globe components)
|
|
21139
|
-
setTimeout(() => {
|
|
21140
|
-
const markerLngLat = marker.getLngLat();
|
|
21141
|
-
console.log("\uD83D\uDD0D [SIMPLE GLOBE] Marker ".concat(index, " position verification:"), {
|
|
21142
|
-
expected: [lng, lat],
|
|
21143
|
-
actual: [markerLngLat.lng, markerLngLat.lat],
|
|
21144
|
-
project: project.name,
|
|
21145
|
-
match: Math.abs(markerLngLat.lng - lng) < 0.0001 && Math.abs(markerLngLat.lat - lat) < 0.0001
|
|
21146
|
-
});
|
|
21147
|
-
}, 100);
|
|
21148
21106
|
console.log("\u2705 [SIMPLE GLOBE] Marker ".concat(index, " added at:"), [lng, lat]);
|
|
21149
21107
|
});
|
|
21150
21108
|
|
|
@@ -21165,14 +21123,6 @@ const SimpleGlobe = _ref => {
|
|
|
21165
21123
|
} else {
|
|
21166
21124
|
boundsRef.current = null;
|
|
21167
21125
|
}
|
|
21168
|
-
|
|
21169
|
-
// Force resize for 3D globe rendering
|
|
21170
|
-
setTimeout(() => {
|
|
21171
|
-
if (map.current && map.current.resize) {
|
|
21172
|
-
map.current.resize();
|
|
21173
|
-
console.log('🔄 [SIMPLE GLOBE] Map resized for 3D globe rendering');
|
|
21174
|
-
}
|
|
21175
|
-
}, 100);
|
|
21176
21126
|
});
|
|
21177
21127
|
return () => {
|
|
21178
21128
|
if (map.current) {
|
|
@@ -21267,392 +21217,6 @@ const SimpleGlobe = _ref => {
|
|
|
21267
21217
|
});
|
|
21268
21218
|
};
|
|
21269
21219
|
|
|
21270
|
-
const IsolatedGlobe = _ref => {
|
|
21271
|
-
let {
|
|
21272
|
-
projects = [],
|
|
21273
|
-
mapConfig = {},
|
|
21274
|
-
onProjectClick = () => {},
|
|
21275
|
-
type = "default",
|
|
21276
|
-
color = "#00809E"
|
|
21277
|
-
} = _ref;
|
|
21278
|
-
const mapContainer = React.useRef(null);
|
|
21279
|
-
const map = React.useRef(null);
|
|
21280
|
-
const shadowRoot = React.useRef(null);
|
|
21281
|
-
const boundsRef = React.useRef(null);
|
|
21282
|
-
React.useEffect(() => {
|
|
21283
|
-
if (map.current) return;
|
|
21284
|
-
console.log('🗺️ [ISOLATED GLOBE] Creating isolated map...');
|
|
21285
|
-
|
|
21286
|
-
// Set Mapbox access token
|
|
21287
|
-
mapboxgl.accessToken = 'pk.eyJ1IjoicmVkaXM5OTkiLCJhIjoiY2x4YWV5MzA5MmtuZzJpcXM5Y201Z2E2YiJ9.m5bwPg-Tj4Akesl1yQUa3w';
|
|
21288
|
-
|
|
21289
|
-
// Create shadow DOM for complete isolation
|
|
21290
|
-
const container = mapContainer.current;
|
|
21291
|
-
shadowRoot.current = container.attachShadow({
|
|
21292
|
-
mode: 'open'
|
|
21293
|
-
});
|
|
21294
|
-
|
|
21295
|
-
// Create isolated styles
|
|
21296
|
-
const style = document.createElement('style');
|
|
21297
|
-
style.textContent = "\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n }\n \n .mapboxgl-map {\n font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 100%;\n -webkit-tap-highlight-color: rgb(0 0 0/0);\n }\n \n .mapboxgl-canvas {\n left: 0;\n position: absolute;\n top: 0;\n }\n \n .mapboxgl-canvas-container {\n position: relative;\n width: 100%;\n height: 100%;\n }\n \n .mapboxgl-marker {\n position: absolute;\n z-index: 1;\n }\n \n .mapboxgl-marker svg {\n display: block;\n }\n \n .mapboxgl-popup {\n position: absolute;\n text-align: center;\n margin-bottom: 20px;\n }\n \n .mapboxgl-popup-content-wrapper {\n padding: 1px;\n text-align: left;\n border-radius: 12px;\n background: white;\n color: #333;\n box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);\n }\n \n .mapboxgl-popup-content {\n margin: 13px 24px 13px 20px;\n line-height: 1.3;\n font-size: 13px;\n min-height: 1px;\n }\n \n .mapboxgl-popup-tip-container {\n width: 40px;\n height: 20px;\n position: absolute;\n left: 50%;\n margin-top: -1px;\n margin-left: -20px;\n overflow: hidden;\n pointer-events: none;\n }\n \n .mapboxgl-popup-tip {\n width: 17px;\n height: 17px;\n padding: 1px;\n margin: -10px auto 0;\n pointer-events: auto;\n transform: rotate(45deg);\n background: white;\n box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);\n }\n \n .mapboxgl-popup-close-button {\n position: absolute;\n top: 0;\n right: 0;\n border: none;\n text-align: center;\n width: 24px;\n height: 24px;\n font: 16px/24px Tahoma, Verdana, sans-serif;\n color: #757575;\n text-decoration: none;\n background: transparent;\n cursor: pointer;\n }\n \n .mapboxgl-popup-close-button:hover {\n color: #585858;\n }\n \n .mapboxgl-ctrl-attribution,\n .mapboxgl-ctrl-logo {\n display: none !important;\n }\n ";
|
|
21298
|
-
shadowRoot.current.appendChild(style);
|
|
21299
|
-
|
|
21300
|
-
// Create map container inside shadow DOM
|
|
21301
|
-
const mapDiv = document.createElement('div');
|
|
21302
|
-
mapDiv.style.width = '100%';
|
|
21303
|
-
mapDiv.style.height = '100%';
|
|
21304
|
-
shadowRoot.current.appendChild(mapDiv);
|
|
21305
|
-
|
|
21306
|
-
// Create map
|
|
21307
|
-
map.current = new mapboxgl.Map({
|
|
21308
|
-
container: mapDiv,
|
|
21309
|
-
style: 'mapbox://styles/mapbox/satellite-v9',
|
|
21310
|
-
center: [0, 0],
|
|
21311
|
-
zoom: mapConfig.maxZoom || 3,
|
|
21312
|
-
projection: 'globe',
|
|
21313
|
-
attributionControl: false
|
|
21314
|
-
});
|
|
21315
|
-
|
|
21316
|
-
// Add markers when map loads
|
|
21317
|
-
map.current.on('load', () => {
|
|
21318
|
-
console.log('🗺️ [ISOLATED GLOBE] Map loaded, adding markers...');
|
|
21319
|
-
|
|
21320
|
-
// Calculate bounds to fit all markers
|
|
21321
|
-
const bounds = new mapboxgl.LngLatBounds();
|
|
21322
|
-
let hasValidCoordinates = false;
|
|
21323
|
-
projects.forEach((project, index) => {
|
|
21324
|
-
console.log("\uD83D\uDCCD [ISOLATED GLOBE] Adding marker ".concat(index, ":"), project);
|
|
21325
|
-
|
|
21326
|
-
// Create marker element
|
|
21327
|
-
const el = document.createElement('div');
|
|
21328
|
-
el.style.cursor = 'pointer';
|
|
21329
|
-
el.style.boxShadow = '0px 3.45px 3.45px 0px #00000029';
|
|
21330
|
-
el.style.display = 'flex';
|
|
21331
|
-
el.style.alignItems = 'center';
|
|
21332
|
-
el.style.justifyContent = 'center';
|
|
21333
|
-
el.style.position = 'relative';
|
|
21334
|
-
el.style.left = 'auto';
|
|
21335
|
-
el.style.top = 'auto';
|
|
21336
|
-
el.style.transform = 'none';
|
|
21337
|
-
el.style.zIndex = '1000';
|
|
21338
|
-
if (type === "location") {
|
|
21339
|
-
// Location marker - SVG map pin style
|
|
21340
|
-
el.style.width = '28px';
|
|
21341
|
-
el.style.height = '33px';
|
|
21342
|
-
el.innerHTML = "\n <svg\n width=\"28\"\n height=\"33\"\n viewBox=\"0 0 28 33\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.14346 4.87419C10.0688 -0.15896 18.0528 -0.162058 22.9757 4.86861C27.6563 9.65161 27.8841 17.2616 23.6622 22.3255H23.6608C23.427 22.6141 23.1808 22.894 22.9211 23.1623L14.0671 32.2101L5.44057 23.3948L5.13868 23.096C0.215857 18.0655 0.218422 9.90737 5.14346 4.87419Z\"\n fill=\"".concat(color, "\"\n stroke=\"white\"\n />\n </svg>\n ");
|
|
21343
|
-
} else {
|
|
21344
|
-
// Default circular marker style
|
|
21345
|
-
el.style.width = '30px';
|
|
21346
|
-
el.style.height = '30px';
|
|
21347
|
-
el.style.backgroundColor = color;
|
|
21348
|
-
el.style.borderRadius = '50%';
|
|
21349
|
-
el.style.border = '2px solid white';
|
|
21350
|
-
el.style.color = 'white';
|
|
21351
|
-
el.style.fontWeight = 'bold';
|
|
21352
|
-
el.style.fontSize = '14px';
|
|
21353
|
-
el.style.textAlign = 'center';
|
|
21354
|
-
el.style.lineHeight = '1';
|
|
21355
|
-
el.innerHTML = "<span style=\"display: block; line-height: 1;\">".concat(project.percentageCompletion || 0, "</span>");
|
|
21356
|
-
}
|
|
21357
|
-
|
|
21358
|
-
// Create popup content
|
|
21359
|
-
const popupContent = "\n <div style=\"padding: 12px; min-width: 200px;\">\n <h3 style=\"margin: 0 0 8px 0; font-size: 16px; color: #333;\">".concat(project.name, "</h3>\n <p style=\"margin: 0 0 4px 0; font-size: 12px; color: #666;\">\n <strong>Country:</strong> ").concat(project.country || 'N/A', "\n </p>\n <p style=\"margin: 0 0 4px 0; font-size: 12px; color: #666;\">\n <strong>Sector:</strong> ").concat(project.sectoralScope || 'Project', "\n </p>\n <p style=\"margin: 0 0 4px 0; font-size: 12px; color: #666;\">\n <strong>Completion:</strong> ").concat(project.percentageCompletion || 0, "%\n </p>\n <p style=\"margin: 4px 0 0 0; font-size: 12px; color: #666;\">\n <strong>Coordinates:</strong> ").concat(Number(project.latitude).toFixed(4), ", ").concat(Number(project.longitude).toFixed(4), "\n </p>\n </div>\n ");
|
|
21360
|
-
|
|
21361
|
-
// Create popup
|
|
21362
|
-
const popup = new mapboxgl.Popup({
|
|
21363
|
-
offset: 25,
|
|
21364
|
-
closeButton: true,
|
|
21365
|
-
closeOnClick: false
|
|
21366
|
-
}).setHTML(popupContent);
|
|
21367
|
-
|
|
21368
|
-
// Ensure coordinates are valid numbers
|
|
21369
|
-
const lng = Number(project.longitude);
|
|
21370
|
-
const lat = Number(project.latitude);
|
|
21371
|
-
console.log("\uD83D\uDCCD [ISOLATED GLOBE] Marker ".concat(index, " coordinates:"), {
|
|
21372
|
-
original: {
|
|
21373
|
-
longitude: project.longitude,
|
|
21374
|
-
latitude: project.latitude
|
|
21375
|
-
},
|
|
21376
|
-
processed: {
|
|
21377
|
-
lng,
|
|
21378
|
-
lat
|
|
21379
|
-
},
|
|
21380
|
-
project: project.name
|
|
21381
|
-
});
|
|
21382
|
-
|
|
21383
|
-
// Validate coordinates
|
|
21384
|
-
if (isNaN(lng) || isNaN(lat) || lng < -180 || lng > 180 || lat < -90 || lat > 90) {
|
|
21385
|
-
console.error("\u274C [ISOLATED GLOBE] Invalid coordinates for project ".concat(index, ":"), {
|
|
21386
|
-
lng,
|
|
21387
|
-
lat,
|
|
21388
|
-
original: {
|
|
21389
|
-
longitude: project.longitude,
|
|
21390
|
-
latitude: project.latitude
|
|
21391
|
-
},
|
|
21392
|
-
project: project.name
|
|
21393
|
-
});
|
|
21394
|
-
return;
|
|
21395
|
-
}
|
|
21396
|
-
|
|
21397
|
-
// Add coordinates to bounds
|
|
21398
|
-
bounds.extend([lng, lat]);
|
|
21399
|
-
hasValidCoordinates = true;
|
|
21400
|
-
|
|
21401
|
-
// Create marker with explicit positioning
|
|
21402
|
-
const marker = new mapboxgl.Marker({
|
|
21403
|
-
element: el,
|
|
21404
|
-
anchor: 'center'
|
|
21405
|
-
}).setLngLat([lng, lat]).setPopup(popup).addTo(map.current);
|
|
21406
|
-
|
|
21407
|
-
// Add click handler
|
|
21408
|
-
el.addEventListener('click', () => {
|
|
21409
|
-
console.log('📍 [ISOLATED GLOBE] Marker clicked:', project);
|
|
21410
|
-
onProjectClick(project);
|
|
21411
|
-
});
|
|
21412
|
-
|
|
21413
|
-
// Verify marker position after a short delay
|
|
21414
|
-
setTimeout(() => {
|
|
21415
|
-
const markerLngLat = marker.getLngLat();
|
|
21416
|
-
console.log("\uD83D\uDD0D [ISOLATED GLOBE] Marker ".concat(index, " position verification:"), {
|
|
21417
|
-
expected: [lng, lat],
|
|
21418
|
-
actual: [markerLngLat.lng, markerLngLat.lat],
|
|
21419
|
-
project: project.name,
|
|
21420
|
-
match: Math.abs(markerLngLat.lng - lng) < 0.0001 && Math.abs(markerLngLat.lat - lat) < 0.0001
|
|
21421
|
-
});
|
|
21422
|
-
}, 100);
|
|
21423
|
-
console.log("\u2705 [ISOLATED GLOBE] Marker ".concat(index, " added at:"), [lng, lat]);
|
|
21424
|
-
});
|
|
21425
|
-
|
|
21426
|
-
// Fit map to show all markers if we have valid coordinates
|
|
21427
|
-
if (hasValidCoordinates && !bounds.isEmpty()) {
|
|
21428
|
-
console.log('🗺️ [ISOLATED GLOBE] Fitting map to bounds:', bounds);
|
|
21429
|
-
map.current.fitBounds(bounds, {
|
|
21430
|
-
padding: {
|
|
21431
|
-
top: 20,
|
|
21432
|
-
bottom: 20,
|
|
21433
|
-
left: 20,
|
|
21434
|
-
right: 20
|
|
21435
|
-
},
|
|
21436
|
-
maxZoom: 6,
|
|
21437
|
-
duration: 1000
|
|
21438
|
-
});
|
|
21439
|
-
boundsRef.current = bounds;
|
|
21440
|
-
} else {
|
|
21441
|
-
boundsRef.current = null;
|
|
21442
|
-
}
|
|
21443
|
-
});
|
|
21444
|
-
return () => {
|
|
21445
|
-
if (map.current) {
|
|
21446
|
-
map.current.remove();
|
|
21447
|
-
map.current = null;
|
|
21448
|
-
}
|
|
21449
|
-
};
|
|
21450
|
-
}, [projects, onProjectClick, mapConfig]);
|
|
21451
|
-
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
21452
|
-
ref: mapContainer,
|
|
21453
|
-
style: {
|
|
21454
|
-
width: '100%',
|
|
21455
|
-
height: '100%',
|
|
21456
|
-
position: 'relative'
|
|
21457
|
-
}
|
|
21458
|
-
});
|
|
21459
|
-
};
|
|
21460
|
-
|
|
21461
|
-
const NoConflictGlobe = _ref => {
|
|
21462
|
-
let {
|
|
21463
|
-
projects = [],
|
|
21464
|
-
mapConfig = {},
|
|
21465
|
-
onProjectClick = () => {},
|
|
21466
|
-
type = "default",
|
|
21467
|
-
color = "#00809E"
|
|
21468
|
-
} = _ref;
|
|
21469
|
-
const mapContainer = React.useRef(null);
|
|
21470
|
-
const map = React.useRef(null);
|
|
21471
|
-
const boundsRef = React.useRef(null);
|
|
21472
|
-
React.useEffect(() => {
|
|
21473
|
-
if (map.current) return;
|
|
21474
|
-
console.log('🗺️ [NO CONFLICT GLOBE] Creating map with aggressive isolation...');
|
|
21475
|
-
|
|
21476
|
-
// Set Mapbox access token
|
|
21477
|
-
mapboxgl.accessToken = 'pk.eyJ1IjoicmVkaXM5OTkiLCJhIjoiY2x4YWV5MzA5MmtuZzJpcXM5Y201Z2E2YiJ9.m5bwPg-Tj4Akesl1yQUa3w';
|
|
21478
|
-
|
|
21479
|
-
// Create map
|
|
21480
|
-
map.current = new mapboxgl.Map({
|
|
21481
|
-
container: mapContainer.current,
|
|
21482
|
-
style: 'mapbox://styles/mapbox/satellite-v9',
|
|
21483
|
-
center: [0, 0],
|
|
21484
|
-
zoom: mapConfig.maxZoom || 3,
|
|
21485
|
-
projection: 'globe',
|
|
21486
|
-
attributionControl: false
|
|
21487
|
-
});
|
|
21488
|
-
|
|
21489
|
-
// Add markers when map loads
|
|
21490
|
-
map.current.on('load', () => {
|
|
21491
|
-
console.log('🗺️ [NO CONFLICT GLOBE] Map loaded, adding markers...');
|
|
21492
|
-
|
|
21493
|
-
// Inject aggressive CSS isolation
|
|
21494
|
-
const styleId = 'no-conflict-globe-styles';
|
|
21495
|
-
let existingStyle = document.getElementById(styleId);
|
|
21496
|
-
if (!existingStyle) {
|
|
21497
|
-
const style = document.createElement('style');
|
|
21498
|
-
style.id = styleId;
|
|
21499
|
-
style.textContent = "\n /* NO CONFLICT GLOBE - Aggressive CSS Isolation */\n .no-conflict-globe-container {\n position: relative !important;\n width: 100% !important;\n height: 100% !important;\n overflow: hidden !important;\n font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif !important;\n -webkit-tap-highlight-color: rgb(0 0 0/0) !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-canvas-container {\n position: relative !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n width: 100% !important;\n height: 100% !important;\n overflow: hidden !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-canvas-container canvas {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n width: 100% !important;\n height: 100% !important;\n isolation: isolate !important;\n }\n \n /* Override ALL possible Leaflet CSS interference */\n .no-conflict-globe-container .mapboxgl-marker {\n position: absolute !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n pointer-events: auto !important;\n z-index: 1000 !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-marker .no-conflict-marker {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n pointer-events: auto !important;\n cursor: pointer !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n isolation: isolate !important;\n }\n \n /* Override Leaflet pane positioning */\n .no-conflict-globe-container .mapboxgl-marker-pane {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n z-index: 600 !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-tile-container {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-zoom-animated {\n transform-origin: 0 0 !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-marker.leaflet-interactive {\n cursor: pointer !important;\n }\n \n /* Popup styles with isolation */\n .no-conflict-globe-container .mapboxgl-popup {\n position: absolute !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n z-index: 700 !important;\n text-align: center !important;\n margin-bottom: 20px !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-content-wrapper {\n padding: 1px !important;\n text-align: left !important;\n border-radius: 12px !important;\n background: white !important;\n color: #333 !important;\n box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4) !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-content {\n margin: 13px 24px 13px 20px !important;\n line-height: 1.3 !important;\n font-size: 13px !important;\n min-height: 1px !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-content p {\n margin: 17px 0 !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-tip-container {\n width: 40px !important;\n height: 20px !important;\n position: absolute !important;\n left: 50% !important;\n margin-top: -1px !important;\n margin-left: -20px !important;\n overflow: hidden !important;\n pointer-events: none !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-tip {\n width: 17px !important;\n height: 17px !important;\n padding: 1px !important;\n margin: -10px auto 0 !important;\n pointer-events: auto !important;\n transform: rotate(45deg) !important;\n background: white !important;\n box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4) !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-close-button {\n position: absolute !important;\n top: 0 !important;\n right: 0 !important;\n border: none !important;\n text-align: center !important;\n width: 24px !important;\n height: 24px !important;\n font: 16px/24px Tahoma, Verdana, sans-serif !important;\n color: #757575 !important;\n text-decoration: none !important;\n background: transparent !important;\n cursor: pointer !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-close-button:hover {\n color: #585858 !important;\n }\n \n /* Hide Mapbox attribution completely */\n .no-conflict-globe-container .mapboxgl-ctrl-attribution {\n display: none !important;\n }\n \n .no-conflict-globe-container .mapboxgl-ctrl-logo {\n display: none !important;\n }\n \n /* Override any Leaflet pane positioning */\n .no-conflict-globe-container .mapboxgl-overlay-pane {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n z-index: 400 !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-shadow-pane {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n z-index: 500 !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-tooltip-pane {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n z-index: 650 !important;\n isolation: isolate !important;\n }\n \n .no-conflict-globe-container .mapboxgl-popup-pane {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n z-index: 700 !important;\n isolation: isolate !important;\n }\n \n /* Override any Leaflet div icon styles */\n .no-conflict-globe-container .mapboxgl-marker .leaflet-div-icon {\n background: none !important;\n border: none !important;\n position: relative !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n \n /* Override any Leaflet marker icon styles */\n .no-conflict-globe-container .mapboxgl-marker .leaflet-marker-icon {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n \n /* Override any Leaflet marker shadow styles */\n .no-conflict-globe-container .mapboxgl-marker .leaflet-marker-shadow {\n display: none !important;\n }\n \n /* Override any Leaflet interactive styles */\n .no-conflict-globe-container .mapboxgl-marker.leaflet-interactive {\n cursor: pointer !important;\n pointer-events: auto !important;\n }\n \n /* Override any Leaflet zoom animations */\n .no-conflict-globe-container .mapboxgl-zoom-animated {\n transform-origin: 0 0 !important;\n }\n \n /* Override any Leaflet tile styles */\n .no-conflict-globe-container .mapboxgl-tile {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n }\n \n /* Override any Leaflet image layer styles */\n .no-conflict-globe-container .mapboxgl-image-layer {\n position: absolute !important;\n left: 0 !important;\n top: 0 !important;\n transform: none !important;\n }\n ";
|
|
21500
|
-
document.head.appendChild(style);
|
|
21501
|
-
}
|
|
21502
|
-
|
|
21503
|
-
// Calculate bounds to fit all markers
|
|
21504
|
-
const bounds = new mapboxgl.LngLatBounds();
|
|
21505
|
-
let hasValidCoordinates = false;
|
|
21506
|
-
projects.forEach((project, index) => {
|
|
21507
|
-
console.log("\uD83D\uDCCD [NO CONFLICT GLOBE] Adding marker ".concat(index, ":"), project);
|
|
21508
|
-
|
|
21509
|
-
// Create marker element with unique class
|
|
21510
|
-
const el = document.createElement('div');
|
|
21511
|
-
el.className = 'no-conflict-marker';
|
|
21512
|
-
el.style.cursor = 'pointer';
|
|
21513
|
-
el.style.boxShadow = '0px 3.45px 3.45px 0px #00000029';
|
|
21514
|
-
el.style.display = 'flex';
|
|
21515
|
-
el.style.alignItems = 'center';
|
|
21516
|
-
el.style.justifyContent = 'center';
|
|
21517
|
-
el.style.position = 'relative';
|
|
21518
|
-
el.style.left = 'auto';
|
|
21519
|
-
el.style.top = 'auto';
|
|
21520
|
-
el.style.transform = 'none';
|
|
21521
|
-
el.style.zIndex = '1000';
|
|
21522
|
-
el.style.isolation = 'isolate';
|
|
21523
|
-
if (type === "location") {
|
|
21524
|
-
// Location marker - SVG map pin style
|
|
21525
|
-
el.style.width = '28px';
|
|
21526
|
-
el.style.height = '33px';
|
|
21527
|
-
el.innerHTML = "\n <svg\n width=\"28\"\n height=\"33\"\n viewBox=\"0 0 28 33\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.14346 4.87419C10.0688 -0.15896 18.0528 -0.162058 22.9757 4.86861C27.6563 9.65161 27.8841 17.2616 23.6622 22.3255H23.6608C23.427 22.6141 23.1808 22.894 22.9211 23.1623L14.0671 32.2101L5.44057 23.3948L5.13868 23.096C0.215857 18.0655 0.218422 9.90737 5.14346 4.87419Z\"\n fill=\"".concat(color, "\"\n stroke=\"white\"\n />\n </svg>\n ");
|
|
21528
|
-
} else {
|
|
21529
|
-
// Default circular marker style
|
|
21530
|
-
el.style.width = '30px';
|
|
21531
|
-
el.style.height = '30px';
|
|
21532
|
-
el.style.backgroundColor = color;
|
|
21533
|
-
el.style.borderRadius = '50%';
|
|
21534
|
-
el.style.border = '2px solid white';
|
|
21535
|
-
el.style.color = 'white';
|
|
21536
|
-
el.style.fontWeight = 'bold';
|
|
21537
|
-
el.style.fontSize = '14px';
|
|
21538
|
-
el.style.textAlign = 'center';
|
|
21539
|
-
el.style.lineHeight = '1';
|
|
21540
|
-
el.innerHTML = "<span style=\"display: block; line-height: 1;\">".concat(project.percentageCompletion || 0, "</span>");
|
|
21541
|
-
}
|
|
21542
|
-
|
|
21543
|
-
// Create popup content
|
|
21544
|
-
const popupContent = "\n <div style=\"padding: 12px; min-width: 200px;\">\n <h3 style=\"margin: 0 0 8px 0; font-size: 16px; color: #333;\">".concat(project.name, "</h3>\n <p style=\"margin: 0 0 4px 0; font-size: 12px; color: #666;\">\n <strong>Country:</strong> ").concat(project.country || 'N/A', "\n </p>\n <p style=\"margin: 0 0 4px 0; font-size: 12px; color: #666;\">\n <strong>Sector:</strong> ").concat(project.sectoralScope || 'Project', "\n </p>\n <p style=\"margin: 0 0 4px 0; font-size: 12px; color: #666;\">\n <strong>Completion:</strong> ").concat(project.percentageCompletion || 0, "%\n </p>\n <p style=\"margin: 4px 0 0 0; font-size: 12px; color: #666;\">\n <strong>Coordinates:</strong> ").concat(Number(project.latitude).toFixed(4), ", ").concat(Number(project.longitude).toFixed(4), "\n </p>\n </div>\n ");
|
|
21545
|
-
|
|
21546
|
-
// Create popup
|
|
21547
|
-
const popup = new mapboxgl.Popup({
|
|
21548
|
-
offset: 25,
|
|
21549
|
-
closeButton: true,
|
|
21550
|
-
closeOnClick: false
|
|
21551
|
-
}).setHTML(popupContent);
|
|
21552
|
-
|
|
21553
|
-
// Ensure coordinates are valid numbers
|
|
21554
|
-
const lng = Number(project.longitude);
|
|
21555
|
-
const lat = Number(project.latitude);
|
|
21556
|
-
console.log("\uD83D\uDCCD [NO CONFLICT GLOBE] Marker ".concat(index, " coordinates:"), {
|
|
21557
|
-
original: {
|
|
21558
|
-
longitude: project.longitude,
|
|
21559
|
-
latitude: project.latitude
|
|
21560
|
-
},
|
|
21561
|
-
processed: {
|
|
21562
|
-
lng,
|
|
21563
|
-
lat
|
|
21564
|
-
},
|
|
21565
|
-
project: project.name
|
|
21566
|
-
});
|
|
21567
|
-
|
|
21568
|
-
// Validate coordinates
|
|
21569
|
-
if (isNaN(lng) || isNaN(lat) || lng < -180 || lng > 180 || lat < -90 || lat > 90) {
|
|
21570
|
-
console.error("\u274C [NO CONFLICT GLOBE] Invalid coordinates for project ".concat(index, ":"), {
|
|
21571
|
-
lng,
|
|
21572
|
-
lat,
|
|
21573
|
-
original: {
|
|
21574
|
-
longitude: project.longitude,
|
|
21575
|
-
latitude: project.latitude
|
|
21576
|
-
},
|
|
21577
|
-
project: project.name
|
|
21578
|
-
});
|
|
21579
|
-
return;
|
|
21580
|
-
}
|
|
21581
|
-
|
|
21582
|
-
// Add coordinates to bounds
|
|
21583
|
-
bounds.extend([lng, lat]);
|
|
21584
|
-
hasValidCoordinates = true;
|
|
21585
|
-
|
|
21586
|
-
// Create marker with explicit positioning
|
|
21587
|
-
const marker = new mapboxgl.Marker({
|
|
21588
|
-
element: el,
|
|
21589
|
-
anchor: 'center'
|
|
21590
|
-
}).setLngLat([lng, lat]).setPopup(popup).addTo(map.current);
|
|
21591
|
-
|
|
21592
|
-
// Add click handler
|
|
21593
|
-
el.addEventListener('click', () => {
|
|
21594
|
-
console.log('📍 [NO CONFLICT GLOBE] Marker clicked:', project);
|
|
21595
|
-
onProjectClick(project);
|
|
21596
|
-
});
|
|
21597
|
-
|
|
21598
|
-
// Verify marker position after a short delay
|
|
21599
|
-
setTimeout(() => {
|
|
21600
|
-
const markerLngLat = marker.getLngLat();
|
|
21601
|
-
console.log("\uD83D\uDD0D [NO CONFLICT GLOBE] Marker ".concat(index, " position verification:"), {
|
|
21602
|
-
expected: [lng, lat],
|
|
21603
|
-
actual: [markerLngLat.lng, markerLngLat.lat],
|
|
21604
|
-
project: project.name,
|
|
21605
|
-
match: Math.abs(markerLngLat.lng - lng) < 0.0001 && Math.abs(markerLngLat.lat - lat) < 0.0001
|
|
21606
|
-
});
|
|
21607
|
-
}, 100);
|
|
21608
|
-
console.log("\u2705 [NO CONFLICT GLOBE] Marker ".concat(index, " added at:"), [lng, lat]);
|
|
21609
|
-
});
|
|
21610
|
-
|
|
21611
|
-
// Fit map to show all markers if we have valid coordinates
|
|
21612
|
-
if (hasValidCoordinates && !bounds.isEmpty()) {
|
|
21613
|
-
console.log('🗺️ [NO CONFLICT GLOBE] Fitting map to bounds:', bounds);
|
|
21614
|
-
map.current.fitBounds(bounds, {
|
|
21615
|
-
padding: {
|
|
21616
|
-
top: 20,
|
|
21617
|
-
bottom: 20,
|
|
21618
|
-
left: 20,
|
|
21619
|
-
right: 20
|
|
21620
|
-
},
|
|
21621
|
-
maxZoom: 6,
|
|
21622
|
-
duration: 1000
|
|
21623
|
-
});
|
|
21624
|
-
boundsRef.current = bounds;
|
|
21625
|
-
} else {
|
|
21626
|
-
boundsRef.current = null;
|
|
21627
|
-
}
|
|
21628
|
-
});
|
|
21629
|
-
return () => {
|
|
21630
|
-
if (map.current) {
|
|
21631
|
-
map.current.remove();
|
|
21632
|
-
map.current = null;
|
|
21633
|
-
}
|
|
21634
|
-
};
|
|
21635
|
-
}, [projects, onProjectClick, mapConfig]);
|
|
21636
|
-
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
21637
|
-
className: "no-conflict-globe-container",
|
|
21638
|
-
style: {
|
|
21639
|
-
width: '100%',
|
|
21640
|
-
height: '100%',
|
|
21641
|
-
position: 'relative',
|
|
21642
|
-
isolation: 'isolate'
|
|
21643
|
-
},
|
|
21644
|
-
children: /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
21645
|
-
ref: mapContainer,
|
|
21646
|
-
style: {
|
|
21647
|
-
width: '100%',
|
|
21648
|
-
height: '100%',
|
|
21649
|
-
position: 'relative',
|
|
21650
|
-
isolation: 'isolate'
|
|
21651
|
-
}
|
|
21652
|
-
})
|
|
21653
|
-
});
|
|
21654
|
-
};
|
|
21655
|
-
|
|
21656
21220
|
function WidgetPlaceholder(_ref) {
|
|
21657
21221
|
let {
|
|
21658
21222
|
icon = "",
|
|
@@ -62433,7 +61997,6 @@ exports.InformationChannelsDataPoint = DataPoint;
|
|
|
62433
61997
|
exports.InformationChannelsSubject = Subject;
|
|
62434
61998
|
exports.InformationChannelsView = InformationChannel;
|
|
62435
61999
|
exports.InformationUnavailable = InformationUnavailable;
|
|
62436
|
-
exports.IsolatedGlobe = IsolatedGlobe;
|
|
62437
62000
|
exports.KeyIndicators = KeyIndicatorsWidget$1;
|
|
62438
62001
|
exports.KeyIndicatorsDetails = KeyIndicatorsDetails;
|
|
62439
62002
|
exports.LineChart = LineChart;
|
|
@@ -62448,7 +62011,6 @@ exports.MoreTags = MoreTags;
|
|
|
62448
62011
|
exports.MultiBarProgress = MultiBarProgress;
|
|
62449
62012
|
exports.MultiColorProgressBar = MultiColorProgressBar;
|
|
62450
62013
|
exports.Multiselect = Multiselect;
|
|
62451
|
-
exports.NoConflictGlobe = NoConflictGlobe;
|
|
62452
62014
|
exports.NotFound = NotFound;
|
|
62453
62015
|
exports.Pagination = Pagination;
|
|
62454
62016
|
exports.PdfForm = PdfForm;
|
package/dist/utils/index.js
CHANGED
|
@@ -6273,6 +6273,9 @@ const userHasInterface = (user, app, intf) => {
|
|
|
6273
6273
|
};
|
|
6274
6274
|
|
|
6275
6275
|
const en = {
|
|
6276
|
+
"No planning required": "No planning required",
|
|
6277
|
+
"No evaluation required": "No evaluation required",
|
|
6278
|
+
"No improvement required": "No improvement required",
|
|
6276
6279
|
"Currently unavailable": "Currently unavailable",
|
|
6277
6280
|
Description: "Description",
|
|
6278
6281
|
"missing-inputs": "Missing Inputs",
|
|
@@ -7466,6 +7469,9 @@ const en = {
|
|
|
7466
7469
|
};
|
|
7467
7470
|
|
|
7468
7471
|
const fr = {
|
|
7472
|
+
"No planning required": "Pas de planification requise",
|
|
7473
|
+
"No evaluation required": "Pas d'évaluation requise",
|
|
7474
|
+
"No improvement required": "Pas d'amélioration requise",
|
|
7469
7475
|
"Currently unavailable": "Actuellement indisponible",
|
|
7470
7476
|
"Description": "Description",
|
|
7471
7477
|
"missing-inputs": "Données Manquantes",
|
|
@@ -9299,6 +9305,9 @@ const fr = {
|
|
|
9299
9305
|
};
|
|
9300
9306
|
|
|
9301
9307
|
const sp = {
|
|
9308
|
+
"No planning required": "No se requiere planeación",
|
|
9309
|
+
"No evaluation required": "No se requiere evaluación",
|
|
9310
|
+
"No improvement required": "No se requiere mejora",
|
|
9302
9311
|
"Currently unavailable": "Actualmente no disponible",
|
|
9303
9312
|
"Description": "Descripción",
|
|
9304
9313
|
"missing-inputs": "Datos que Faltan",
|