maplibre-gl-basemap-control 0.9.0 → 0.11.0
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/{BasemapControl-Cu8agB-D.cjs → BasemapControl-CDGZrQ2Y.cjs} +242 -25
- package/dist/BasemapControl-CDGZrQ2Y.cjs.map +1 -0
- package/dist/{BasemapControl-DjBg1WYY.js → BasemapControl-Cya-U1Q7.js} +242 -25
- package/dist/BasemapControl-Cya-U1Q7.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.mjs +1 -1
- package/dist/types/lib/core/BasemapControl.d.ts +4 -0
- package/dist/types/lib/core/BasemapControl.d.ts.map +1 -1
- package/dist/types/lib/core/catalog.d.ts.map +1 -1
- package/dist/types/lib/core/types.d.ts +17 -0
- package/dist/types/lib/core/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/BasemapControl-Cu8agB-D.cjs.map +0 -1
- package/dist/BasemapControl-DjBg1WYY.js.map +0 -1
|
@@ -151,8 +151,43 @@ const OPENFREEMAP_ATTRIBUTION = "OpenFreeMap © OpenMapTiles Data from OpenS
|
|
|
151
151
|
const TOMTOM_ATTRIBUTION = "© TomTom";
|
|
152
152
|
const HERE_ATTRIBUTION = "© HERE";
|
|
153
153
|
const GOOGLE_ATTRIBUTION = "© Google";
|
|
154
|
-
const
|
|
154
|
+
const eoxS2CloudlessAttribution = (year) => `Sentinel-2 cloudless <a href="https://cloudless.eox.at" target="_blank" rel="noopener">EOxCloudless</a> by EOX IT Services GmbH (Contains modified Copernicus Sentinel data ${year})`;
|
|
155
|
+
const EOX_S2CLOUDLESS_YEARS = [
|
|
156
|
+
2018,
|
|
157
|
+
2019,
|
|
158
|
+
2020,
|
|
159
|
+
2021,
|
|
160
|
+
2022,
|
|
161
|
+
2023,
|
|
162
|
+
2024,
|
|
163
|
+
2025
|
|
164
|
+
];
|
|
165
|
+
function eoxS2CloudlessBasemap(year) {
|
|
166
|
+
return rasterBasemap({
|
|
167
|
+
id: `eox-s2cloudless-${year}`,
|
|
168
|
+
name: `EOX Sentinel-2 cloudless ${year}`,
|
|
169
|
+
provider: "eox",
|
|
170
|
+
category: "Imagery",
|
|
171
|
+
description: `Cloudless Sentinel-2 satellite mosaic for ${year} (non-commercial use).`,
|
|
172
|
+
attribution: eoxS2CloudlessAttribution(year),
|
|
173
|
+
tiles: [
|
|
174
|
+
`https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-${year}_3857/default/GoogleMapsCompatible/{z}/{y}/{x}.jpg`
|
|
175
|
+
],
|
|
176
|
+
maxzoom: 16,
|
|
177
|
+
tags: [
|
|
178
|
+
"eox",
|
|
179
|
+
"sentinel",
|
|
180
|
+
"satellite",
|
|
181
|
+
"imagery",
|
|
182
|
+
"cloudless",
|
|
183
|
+
"copernicus",
|
|
184
|
+
String(year)
|
|
185
|
+
]
|
|
186
|
+
});
|
|
187
|
+
}
|
|
155
188
|
const EOX_TERRAIN_LIGHT_ATTRIBUTION = 'Terrain Light <a href="https://maps.eox.at" target="_blank" rel="noopener">EOX</a> (Data © OpenStreetMap contributors and others, Rendering © EOX)';
|
|
189
|
+
const EOX_TERRAIN_ATTRIBUTION = 'Terrain <a href="https://maps.eox.at" target="_blank" rel="noopener">EOX</a> (Data © OpenStreetMap contributors and others, Rendering © EOX)';
|
|
190
|
+
const EOX_OVERLAY_ATTRIBUTION = 'Overlay <a href="https://maps.eox.at" target="_blank" rel="noopener">EOX</a> (Data © OpenStreetMap contributors and others, Rendering © EOX)';
|
|
156
191
|
const MAPBOX_TRAFFIC_CONGESTION_COLORS = [
|
|
157
192
|
"match",
|
|
158
193
|
["get", "congestion"],
|
|
@@ -738,26 +773,7 @@ const DEFAULT_BASEMAPS = [
|
|
|
738
773
|
],
|
|
739
774
|
tags: ["esri", "terrain"]
|
|
740
775
|
}),
|
|
741
|
-
|
|
742
|
-
id: "eox-s2cloudless-2025",
|
|
743
|
-
name: "EOX Sentinel-2 cloudless 2025",
|
|
744
|
-
provider: "eox",
|
|
745
|
-
category: "Imagery",
|
|
746
|
-
description: "Cloudless Sentinel-2 satellite mosaic for 2025 (non-commercial use).",
|
|
747
|
-
attribution: EOX_S2CLOUDLESS_ATTRIBUTION,
|
|
748
|
-
tiles: [
|
|
749
|
-
"https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2025_3857/default/GoogleMapsCompatible/{z}/{y}/{x}.jpg"
|
|
750
|
-
],
|
|
751
|
-
maxzoom: 16,
|
|
752
|
-
tags: [
|
|
753
|
-
"eox",
|
|
754
|
-
"sentinel",
|
|
755
|
-
"satellite",
|
|
756
|
-
"imagery",
|
|
757
|
-
"cloudless",
|
|
758
|
-
"copernicus"
|
|
759
|
-
]
|
|
760
|
-
}),
|
|
776
|
+
...EOX_S2CLOUDLESS_YEARS.map(eoxS2CloudlessBasemap),
|
|
761
777
|
rasterBasemap({
|
|
762
778
|
id: "eox-terrain-light",
|
|
763
779
|
name: "EOX Terrain Light",
|
|
@@ -771,6 +787,47 @@ const DEFAULT_BASEMAPS = [
|
|
|
771
787
|
maxzoom: 14,
|
|
772
788
|
tags: ["eox", "terrain", "light", "hillshade"]
|
|
773
789
|
}),
|
|
790
|
+
rasterBasemap({
|
|
791
|
+
id: "eox-terrain",
|
|
792
|
+
name: "EOX Terrain",
|
|
793
|
+
provider: "eox",
|
|
794
|
+
category: "Terrain",
|
|
795
|
+
description: "Natural-like terrain basemap from EOX Maps (non-commercial use).",
|
|
796
|
+
attribution: EOX_TERRAIN_ATTRIBUTION,
|
|
797
|
+
// terrain_3857 is only published on EOX's "g" tile matrix set, which is the
|
|
798
|
+
// Web Mercator (GoogleMapsCompatible) grid under a different identifier.
|
|
799
|
+
tiles: [
|
|
800
|
+
"https://tiles.maps.eox.at/wmts/1.0.0/terrain_3857/default/g/{z}/{y}/{x}.jpg"
|
|
801
|
+
],
|
|
802
|
+
maxzoom: 14,
|
|
803
|
+
tags: ["eox", "terrain", "hillshade"]
|
|
804
|
+
}),
|
|
805
|
+
rasterBasemap({
|
|
806
|
+
id: "eox-overlay",
|
|
807
|
+
name: "EOX Overlay",
|
|
808
|
+
provider: "eox",
|
|
809
|
+
category: "Labels",
|
|
810
|
+
description: "Transparent overlay with borders and points of interest from EOX Maps (non-commercial use).",
|
|
811
|
+
attribution: EOX_OVERLAY_ATTRIBUTION,
|
|
812
|
+
tiles: [
|
|
813
|
+
"https://tiles.maps.eox.at/wmts/1.0.0/overlay_3857/default/GoogleMapsCompatible/{z}/{y}/{x}.png"
|
|
814
|
+
],
|
|
815
|
+
maxzoom: 14,
|
|
816
|
+
tags: ["eox", "overlay", "labels", "borders", "reference"]
|
|
817
|
+
}),
|
|
818
|
+
rasterBasemap({
|
|
819
|
+
id: "eox-overlay-bright",
|
|
820
|
+
name: "EOX Overlay Bright",
|
|
821
|
+
provider: "eox",
|
|
822
|
+
category: "Labels",
|
|
823
|
+
description: "Bright transparent overlay with borders and points of interest from EOX Maps (non-commercial use).",
|
|
824
|
+
attribution: EOX_OVERLAY_ATTRIBUTION,
|
|
825
|
+
tiles: [
|
|
826
|
+
"https://tiles.maps.eox.at/wmts/1.0.0/overlay_bright_3857/default/GoogleMapsCompatible/{z}/{y}/{x}.png"
|
|
827
|
+
],
|
|
828
|
+
maxzoom: 14,
|
|
829
|
+
tags: ["eox", "overlay", "labels", "borders", "reference", "bright"]
|
|
830
|
+
}),
|
|
774
831
|
rasterBasemap({
|
|
775
832
|
id: "nasa-gibs-blue-marble",
|
|
776
833
|
name: "Blue Marble",
|
|
@@ -1350,6 +1407,7 @@ const PROVIDER_CREDENTIAL_HELP = {
|
|
|
1350
1407
|
label: "Get a Google Maps API key"
|
|
1351
1408
|
}
|
|
1352
1409
|
};
|
|
1410
|
+
const STYLE_AUTH_GRACE_MS = 2500;
|
|
1353
1411
|
const MIN_PANEL_WIDTH = 240;
|
|
1354
1412
|
const MIN_PANEL_HEIGHT = 200;
|
|
1355
1413
|
const PANEL_VIEWPORT_MARGIN = 12;
|
|
@@ -1361,6 +1419,30 @@ class MissingCredentialError extends Error {
|
|
|
1361
1419
|
this.provider = provider;
|
|
1362
1420
|
}
|
|
1363
1421
|
}
|
|
1422
|
+
class BasemapLoadError extends Error {
|
|
1423
|
+
constructor(message, provider, status) {
|
|
1424
|
+
super(message);
|
|
1425
|
+
__publicField(this, "provider");
|
|
1426
|
+
__publicField(this, "status");
|
|
1427
|
+
this.name = "BasemapLoadError";
|
|
1428
|
+
this.provider = provider;
|
|
1429
|
+
this.status = status;
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
function extractErrorUrl(error) {
|
|
1433
|
+
if (error && typeof error === "object" && "url" in error) {
|
|
1434
|
+
const url = error.url;
|
|
1435
|
+
if (typeof url === "string") return url;
|
|
1436
|
+
}
|
|
1437
|
+
return void 0;
|
|
1438
|
+
}
|
|
1439
|
+
function extractErrorStatus(error) {
|
|
1440
|
+
if (error && typeof error === "object" && "status" in error) {
|
|
1441
|
+
const status = error.status;
|
|
1442
|
+
if (typeof status === "number" && status > 0) return status;
|
|
1443
|
+
}
|
|
1444
|
+
return void 0;
|
|
1445
|
+
}
|
|
1364
1446
|
class BasemapControl {
|
|
1365
1447
|
constructor(options) {
|
|
1366
1448
|
__publicField(this, "_map");
|
|
@@ -1400,6 +1482,10 @@ class BasemapControl {
|
|
|
1400
1482
|
// The basemap whose application last failed for a missing credential, so the
|
|
1401
1483
|
// inline credential field's Enter key can re-attempt it (#837).
|
|
1402
1484
|
__publicField(this, "_lastFailedBasemapId");
|
|
1485
|
+
// Detaches the listeners watching the in-flight style load (see
|
|
1486
|
+
// _watchStyleLoad). Set while a style swap is settling, cleared once it
|
|
1487
|
+
// succeeds, fails, or is superseded by a newer swap.
|
|
1488
|
+
__publicField(this, "_cancelStyleWatch");
|
|
1403
1489
|
__publicField(this, "_resizeHandler", null);
|
|
1404
1490
|
__publicField(this, "_mapResizeHandler", null);
|
|
1405
1491
|
__publicField(this, "_resizeAnchor", null);
|
|
@@ -1478,7 +1564,7 @@ class BasemapControl {
|
|
|
1478
1564
|
return this._container;
|
|
1479
1565
|
}
|
|
1480
1566
|
onRemove() {
|
|
1481
|
-
var _a, _b, _c, _d;
|
|
1567
|
+
var _a, _b, _c, _d, _e;
|
|
1482
1568
|
if (this._resizeHandler) {
|
|
1483
1569
|
window.removeEventListener("resize", this._resizeHandler);
|
|
1484
1570
|
this._resizeHandler = null;
|
|
@@ -1490,10 +1576,11 @@ class BasemapControl {
|
|
|
1490
1576
|
window.removeEventListener("pointermove", this._onResizeMove);
|
|
1491
1577
|
window.removeEventListener("pointerup", this._onResizeEnd);
|
|
1492
1578
|
window.removeEventListener("pointercancel", this._onResizeEnd);
|
|
1579
|
+
(_a = this._cancelStyleWatch) == null ? void 0 : _a.call(this);
|
|
1493
1580
|
this._resizeAnchor = null;
|
|
1494
1581
|
this._resizeHandleEl = null;
|
|
1495
|
-
(
|
|
1496
|
-
(
|
|
1582
|
+
(_c = (_b = this._panel) == null ? void 0 : _b.parentNode) == null ? void 0 : _c.removeChild(this._panel);
|
|
1583
|
+
(_e = (_d = this._container) == null ? void 0 : _d.parentNode) == null ? void 0 : _e.removeChild(this._container);
|
|
1497
1584
|
this._map = void 0;
|
|
1498
1585
|
this._mapContainer = void 0;
|
|
1499
1586
|
this._container = void 0;
|
|
@@ -1670,8 +1757,10 @@ class BasemapControl {
|
|
|
1670
1757
|
this._state = { ...this._state, loading: true, error: void 0 };
|
|
1671
1758
|
this._renderContent(true);
|
|
1672
1759
|
this._emit({ type: "statechange", state: this.getState() });
|
|
1760
|
+
const previousActiveBasemapId = this._state.activeBasemapId;
|
|
1673
1761
|
try {
|
|
1674
1762
|
let managedRaster;
|
|
1763
|
+
let resolvedStyleUrl;
|
|
1675
1764
|
if (isOverlay) {
|
|
1676
1765
|
await this._waitForStyleReady();
|
|
1677
1766
|
if (effectiveMode === "replace") {
|
|
@@ -1682,6 +1771,7 @@ class BasemapControl {
|
|
|
1682
1771
|
managedRaster = await this._addOverlay(basemap);
|
|
1683
1772
|
} else {
|
|
1684
1773
|
const styleUrl = this._resolveStyleUrl(basemap);
|
|
1774
|
+
resolvedStyleUrl = styleUrl;
|
|
1685
1775
|
const styleOptions = this._getStyleOptions(basemap);
|
|
1686
1776
|
this._removeManagedBasemap();
|
|
1687
1777
|
if (styleOptions) {
|
|
@@ -1689,6 +1779,7 @@ class BasemapControl {
|
|
|
1689
1779
|
} else {
|
|
1690
1780
|
this._map.setStyle(styleUrl);
|
|
1691
1781
|
}
|
|
1782
|
+
this._watchStyleLoad(styleUrl, basemap, previousActiveBasemapId);
|
|
1692
1783
|
}
|
|
1693
1784
|
this._applyBasemapView(basemap);
|
|
1694
1785
|
const activeBasemapIds = effectiveMode === "add" ? [...this._state.activeBasemapIds.filter((value) => value !== basemap.id), basemap.id] : [basemap.id];
|
|
@@ -1705,6 +1796,7 @@ class BasemapControl {
|
|
|
1705
1796
|
state: this.getState(),
|
|
1706
1797
|
basemap,
|
|
1707
1798
|
managedRaster,
|
|
1799
|
+
resolvedStyleUrl,
|
|
1708
1800
|
mode: effectiveMode
|
|
1709
1801
|
});
|
|
1710
1802
|
this._emit({ type: "statechange", state: this.getState() });
|
|
@@ -1721,6 +1813,131 @@ class BasemapControl {
|
|
|
1721
1813
|
throw error;
|
|
1722
1814
|
}
|
|
1723
1815
|
}
|
|
1816
|
+
// Watches the asynchronous style load that `setStyle` kicked off for a style
|
|
1817
|
+
// basemap, and rolls back to the previous basemap (reporting the failure
|
|
1818
|
+
// through the `error` event) when the new style cannot actually render. Two
|
|
1819
|
+
// failure modes are caught so a broken provider basemap never leaves a blank
|
|
1820
|
+
// map:
|
|
1821
|
+
//
|
|
1822
|
+
// 1. The style *document* request fails outright (matched by URL), e.g. an
|
|
1823
|
+
// unreachable host or a descriptor that 404s. Detected whether or not
|
|
1824
|
+
// `style.load` ever fires.
|
|
1825
|
+
// 2. The descriptor loads but the provider rejects the credentials when the
|
|
1826
|
+
// first tiles are fetched (401/403). Amazon Location, for instance,
|
|
1827
|
+
// serves the style JSON publicly but 403s every tile for a bad API key,
|
|
1828
|
+
// so the descriptor "loads" while the map stays empty. This is only
|
|
1829
|
+
// treated as fatal for credentialed providers, and only briefly after
|
|
1830
|
+
// the descriptor loads, so an isolated transient tile error on a healthy
|
|
1831
|
+
// basemap is ignored.
|
|
1832
|
+
_watchStyleLoad(styleUrl, basemap, previousActiveBasemapId) {
|
|
1833
|
+
var _a;
|
|
1834
|
+
const map = this._map;
|
|
1835
|
+
if (!map) return;
|
|
1836
|
+
(_a = this._cancelStyleWatch) == null ? void 0 : _a.call(this);
|
|
1837
|
+
const isCredentialed = basemap.provider in PROVIDER_CREDENTIAL_HELP;
|
|
1838
|
+
let settled = false;
|
|
1839
|
+
let graceTimer;
|
|
1840
|
+
const cleanup = () => {
|
|
1841
|
+
if (settled) return;
|
|
1842
|
+
settled = true;
|
|
1843
|
+
if (graceTimer !== void 0) clearTimeout(graceTimer);
|
|
1844
|
+
map.off("style.load", onLoad);
|
|
1845
|
+
map.off("error", onError);
|
|
1846
|
+
if (this._cancelStyleWatch === cleanup) this._cancelStyleWatch = void 0;
|
|
1847
|
+
};
|
|
1848
|
+
const fail = (cause) => {
|
|
1849
|
+
cleanup();
|
|
1850
|
+
this._handleStyleLoadFailure(basemap, previousActiveBasemapId, cause);
|
|
1851
|
+
};
|
|
1852
|
+
const onLoad = () => {
|
|
1853
|
+
if (!isCredentialed) {
|
|
1854
|
+
cleanup();
|
|
1855
|
+
} else if (graceTimer === void 0) {
|
|
1856
|
+
graceTimer = setTimeout(cleanup, STYLE_AUTH_GRACE_MS);
|
|
1857
|
+
}
|
|
1858
|
+
};
|
|
1859
|
+
const onError = (event) => {
|
|
1860
|
+
const error = event == null ? void 0 : event.error;
|
|
1861
|
+
if (extractErrorUrl(error) === styleUrl) {
|
|
1862
|
+
fail(error);
|
|
1863
|
+
return;
|
|
1864
|
+
}
|
|
1865
|
+
if (isCredentialed) {
|
|
1866
|
+
const status = extractErrorStatus(error);
|
|
1867
|
+
if (status === 401 || status === 403) fail(error);
|
|
1868
|
+
}
|
|
1869
|
+
};
|
|
1870
|
+
this._cancelStyleWatch = cleanup;
|
|
1871
|
+
map.once("style.load", onLoad);
|
|
1872
|
+
map.on("error", onError);
|
|
1873
|
+
}
|
|
1874
|
+
// Rolls back a failed style swap: restores the previously active basemap (when
|
|
1875
|
+
// it is a style basemap the control owns), then reports the failure inline and
|
|
1876
|
+
// through the `error` event. When the failing provider needs an API key, the
|
|
1877
|
+
// inline credential field is revealed so the user can correct the key and
|
|
1878
|
+
// retry without losing their map.
|
|
1879
|
+
_handleStyleLoadFailure(failedBasemap, previousActiveBasemapId, cause) {
|
|
1880
|
+
this._restorePreviousBasemap(previousActiveBasemapId, failedBasemap.id);
|
|
1881
|
+
const status = extractErrorStatus(cause);
|
|
1882
|
+
const credentialProvider = failedBasemap.provider in PROVIDER_CREDENTIAL_HELP ? failedBasemap.provider : void 0;
|
|
1883
|
+
const hint = credentialProvider ? " Check the API key and try again." : " Check your connection and try again.";
|
|
1884
|
+
const error = new BasemapLoadError(
|
|
1885
|
+
`Could not load the "${failedBasemap.name}" basemap${status ? ` (HTTP ${status})` : ""}.${hint}`,
|
|
1886
|
+
failedBasemap.provider,
|
|
1887
|
+
status
|
|
1888
|
+
);
|
|
1889
|
+
this._state = { ...this._state, loading: false, error: error.message };
|
|
1890
|
+
this._missingCredentialProvider = credentialProvider;
|
|
1891
|
+
this._lastFailedBasemapId = credentialProvider ? failedBasemap.id : void 0;
|
|
1892
|
+
this._activeView = "basemaps";
|
|
1893
|
+
this._renderContent(true);
|
|
1894
|
+
this._handleError(error, failedBasemap);
|
|
1895
|
+
}
|
|
1896
|
+
// Reapplies the previously active style basemap after a failed swap. Only a
|
|
1897
|
+
// control-owned style/vector-style basemap can be reapplied; when the previous
|
|
1898
|
+
// basemap is unknown, a raster overlay, or a style the host owns, the panel
|
|
1899
|
+
// state is pointed back at it (so the failed basemap is not highlighted) and
|
|
1900
|
+
// the host is left to restore its own style from the emitted `error` event.
|
|
1901
|
+
_restorePreviousBasemap(previousActiveBasemapId, failedBasemapId) {
|
|
1902
|
+
const map = this._map;
|
|
1903
|
+
const previous = previousActiveBasemapId && previousActiveBasemapId !== failedBasemapId ? this._basemaps.find((candidate) => candidate.id === previousActiveBasemapId) : void 0;
|
|
1904
|
+
const pointStateAtPrevious = () => {
|
|
1905
|
+
this._state = {
|
|
1906
|
+
...this._state,
|
|
1907
|
+
activeBasemapId: previousActiveBasemapId,
|
|
1908
|
+
activeBasemapIds: previousActiveBasemapId ? [previousActiveBasemapId] : []
|
|
1909
|
+
};
|
|
1910
|
+
};
|
|
1911
|
+
if (!map || !previous || previous.source.type !== "style" && previous.source.type !== "vector-style") {
|
|
1912
|
+
pointStateAtPrevious();
|
|
1913
|
+
return;
|
|
1914
|
+
}
|
|
1915
|
+
try {
|
|
1916
|
+
const styleUrl = this._resolveStyleUrl(previous);
|
|
1917
|
+
const styleOptions = this._getStyleOptions(previous);
|
|
1918
|
+
this._removeManagedBasemap();
|
|
1919
|
+
if (styleOptions) {
|
|
1920
|
+
map.setStyle(styleUrl, styleOptions);
|
|
1921
|
+
} else {
|
|
1922
|
+
map.setStyle(styleUrl);
|
|
1923
|
+
}
|
|
1924
|
+
this._state = {
|
|
1925
|
+
...this._state,
|
|
1926
|
+
activeBasemapId: previous.id,
|
|
1927
|
+
activeBasemapIds: [previous.id]
|
|
1928
|
+
};
|
|
1929
|
+
this._emit({
|
|
1930
|
+
type: "basemapchange",
|
|
1931
|
+
state: this.getState(),
|
|
1932
|
+
basemap: previous,
|
|
1933
|
+
resolvedStyleUrl: styleUrl,
|
|
1934
|
+
restored: true,
|
|
1935
|
+
mode: "replace"
|
|
1936
|
+
});
|
|
1937
|
+
} catch {
|
|
1938
|
+
pointStateAtPrevious();
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1724
1941
|
// The public mutators rethrow after emitting the error event so callers that
|
|
1725
1942
|
// await them can react. The panel's click handler uses this instead to avoid
|
|
1726
1943
|
// unhandled promise rejections; the failure is still reported via `error`.
|
|
@@ -2891,4 +3108,4 @@ exports.createBasemapCatalog = createBasemapCatalog;
|
|
|
2891
3108
|
exports.filterBasemaps = filterBasemaps;
|
|
2892
3109
|
exports.getBasemapCategories = getBasemapCategories;
|
|
2893
3110
|
exports.resolveBasemapProviders = resolveBasemapProviders;
|
|
2894
|
-
//# sourceMappingURL=BasemapControl-
|
|
3111
|
+
//# sourceMappingURL=BasemapControl-CDGZrQ2Y.cjs.map
|