azure-maps-control 2.2.6 → 2.3.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/atlas.js CHANGED
@@ -77,7 +77,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
77
77
  }
78
78
 
79
79
  var azuremapsMaplibreGlUnminified = createCommonjsModule(function (module, exports) {
80
- /* The Azure Maps fork of MapLibre GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v1.15.0/LICENSE.txt */
80
+ /* The Azure Maps fork of MapLibre GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v1.16.0/LICENSE.txt */
81
81
  (function (global, factory) {
82
82
  module.exports = factory() ;
83
83
  }(commonjsGlobal, (function () {
@@ -109,7 +109,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
109
109
  return module = { exports: {} }, fn(module, module.exports), module.exports;
110
110
  }
111
111
 
112
- var version = "1.15.0";
112
+ var version = "1.16.0";
113
113
 
114
114
  var unitbezier = UnitBezier;
115
115
  function UnitBezier(p1x, p1y, p2x, p2y) {
@@ -33124,7 +33124,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33124
33124
  Style.__proto__ = Evented;
33125
33125
  Style.prototype = Object.create(Evented && Evented.prototype);
33126
33126
  Style.prototype.constructor = Style;
33127
- Style.prototype.loadURL = function loadURL(url, options) {
33127
+ Style.prototype.loadURL = function loadURL(url, options, previousStyle) {
33128
33128
  var this$1 = this;
33129
33129
  if (options === void 0)
33130
33130
  options = {};
@@ -33137,11 +33137,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33137
33137
  if (error) {
33138
33138
  this$1.fire(new performance.ErrorEvent(error));
33139
33139
  } else if (json) {
33140
- this$1._load(json, options);
33140
+ this$1._load(json, options, previousStyle);
33141
33141
  }
33142
33142
  });
33143
33143
  };
33144
- Style.prototype.loadJSON = function loadJSON(json, options) {
33144
+ Style.prototype.loadJSON = function loadJSON(json, options, previousStyle) {
33145
33145
  var this$1 = this;
33146
33146
  if (options === void 0)
33147
33147
  options = {};
@@ -33149,34 +33149,29 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33149
33149
  this._request = performance.browser.frame(function () {
33150
33150
  this$1._request = null;
33151
33151
  options.validate = options.validate !== false;
33152
- this$1._load(json, options);
33152
+ this$1._load(json, options, previousStyle);
33153
33153
  });
33154
33154
  };
33155
33155
  Style.prototype.loadEmpty = function loadEmpty() {
33156
33156
  this.fire(new performance.Event('dataloading', { dataType: 'style' }));
33157
33157
  this._load(empty, { validate: false });
33158
33158
  };
33159
- Style.prototype._load = function _load(json, options) {
33160
- var this$1 = this;
33161
- if (options.validate && emitValidationErrors(this, performance.validateStyle(json))) {
33159
+ Style.prototype._load = function _load(json, options, previousStyle) {
33160
+ var nextState = options.transformStyle ? options.transformStyle(previousStyle, json) : json;
33161
+ if (options.validate && emitValidationErrors(this, performance.validateStyle(nextState))) {
33162
33162
  return;
33163
33163
  }
33164
- var patchOperations = [];
33165
- if (options.stylePatch) {
33166
- patchOperations = this._buildStylePatch(json, options);
33167
- this.sourceCaches = {};
33168
- }
33169
33164
  this._loaded = true;
33170
- this.stylesheet = json;
33171
- for (var id in json.sources) {
33172
- this.addSource(id, json.sources[id], { validate: false });
33165
+ this.stylesheet = nextState;
33166
+ for (var id in nextState.sources) {
33167
+ this.addSource(id, nextState.sources[id], { validate: false });
33173
33168
  }
33174
- if (json.sprite) {
33175
- this._loadSprite(json.sprite);
33169
+ if (nextState.sprite) {
33170
+ this._loadSprite(nextState.sprite);
33176
33171
  } else {
33177
33172
  this.imageManager.setLoaded(true);
33178
33173
  }
33179
- this.glyphManager.setURL(json.glyphs);
33174
+ this.glyphManager.setURL(nextState.glyphs);
33180
33175
  var layers = derefLayers(this.stylesheet.layers);
33181
33176
  this._order = layers.map(function (layer) {
33182
33177
  return layer.id;
@@ -33192,11 +33187,6 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33192
33187
  }
33193
33188
  this.dispatcher.broadcast('setLayers', this._serializeLayers(this._order));
33194
33189
  this.light = new Light(this.stylesheet.light);
33195
- patchOperations.filter(function (op) {
33196
- return op.command !== operations.moveLayer;
33197
- }).forEach(function (op) {
33198
- this$1[op.command].apply(this$1, op.args);
33199
- });
33200
33190
  this.fire(new performance.Event('data', { dataType: 'style' }));
33201
33191
  this.fire(new performance.Event('style.load'));
33202
33192
  };
@@ -33371,33 +33361,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33371
33361
  if (emitValidationErrors(this, performance.validateStyle(nextState))) {
33372
33362
  return false;
33373
33363
  }
33374
- nextState = performance.clone$1(nextState);
33364
+ nextState = options.transformStyle ? options.transformStyle(this.serialize(), nextState) : nextState;
33375
33365
  nextState.layers = derefLayers(nextState.layers);
33376
- var patchOperations = [];
33377
- var preservedLayers = {};
33378
- var preservedSources = {};
33379
- if (options.stylePatch) {
33380
- patchOperations = this._buildStylePatch(nextState, options);
33381
- }
33382
- patchOperations = patchOperations.filter(function (op) {
33383
- if (op.command === operations.addLayer && this$1._serializedLayers.hasOwnProperty(op.args[0].id)) {
33384
- preservedLayers[op.args[0].id] = true;
33385
- return false;
33386
- }
33387
- if (op.command === operations.moveLayer && this$1._serializedLayers.hasOwnProperty(op.args[0])) {
33388
- preservedLayers[op.args[0]] = true;
33389
- return true;
33390
- }
33391
- if (op.command === operations.addSource && this$1.sourceCaches.hasOwnProperty(op.args[0])) {
33392
- preservedSources[op.args[0]] = true;
33393
- return false;
33394
- }
33395
- return true;
33396
- });
33397
33366
  var changes = diffStyles(this.serialize(), nextState).filter(function (op) {
33398
33367
  return !(op.command in ignoredDiffOperations);
33399
33368
  });
33400
- changes = changes.concat(patchOperations);
33401
33369
  if (changes.length === 0) {
33402
33370
  return false;
33403
33371
  }
@@ -33413,12 +33381,6 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33413
33381
  if (op.command === 'setTransition') {
33414
33382
  return;
33415
33383
  }
33416
- if (op.command === operations.removeLayer && preservedLayers.hasOwnProperty(op.args[0])) {
33417
- return;
33418
- }
33419
- if ((op.command === operations.addSource || op.command === operations.removeSource) && preservedSources.hasOwnProperty(op.args[0])) {
33420
- return;
33421
- }
33422
33384
  this$1[op.command].apply(this$1, op.args);
33423
33385
  });
33424
33386
  this.stylesheet = nextState;
@@ -33809,109 +33771,6 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
33809
33771
  return empty;
33810
33772
  }
33811
33773
  };
33812
- Style.prototype._buildStylePatch = function _buildStylePatch(next, options) {
33813
- var this$1 = this;
33814
- var patchOperations = [];
33815
- var preservedSources = [];
33816
- var preservedLayers = [];
33817
- var nextLayerIndex = next.layers.reduce(function (p, c) {
33818
- p[c.id] = c;
33819
- return p;
33820
- }, {});
33821
- var preserveLayer = function (layerId, before) {
33822
- if (this$1.hasLayer(layerId)) {
33823
- var preservedLayer = this$1._serializedLayers[layerId];
33824
- if (!next.sources.hasOwnProperty(preservedLayer.source) && !preservedSources.includes(preservedLayer.source)) {
33825
- patchOperations.push({
33826
- command: 'addSource',
33827
- args: [
33828
- preservedLayer.source,
33829
- this$1.sourceCaches[preservedLayer.source].serialize(),
33830
- { validate: false }
33831
- ]
33832
- });
33833
- preservedSources.push(preservedLayer.source);
33834
- }
33835
- if (nextLayerIndex.hasOwnProperty(layerId)) {
33836
- patchOperations.push({
33837
- command: 'removeLayer',
33838
- args: [layerId]
33839
- });
33840
- }
33841
- before = nextLayerIndex.hasOwnProperty(before) || preservedLayers.find(function (l) {
33842
- return l.id === before;
33843
- }) ? before : undefined;
33844
- patchOperations.push({
33845
- command: 'moveLayer',
33846
- args: [
33847
- preservedLayer.id,
33848
- before,
33849
- { validate: true }
33850
- ]
33851
- });
33852
- patchOperations.push({
33853
- command: 'addLayer',
33854
- args: [
33855
- preservedLayer,
33856
- before,
33857
- { validate: true }
33858
- ]
33859
- });
33860
- preservedLayers.push(layerId);
33861
- } else {
33862
- performance.warnOnce('Cannot preserve layer ' + layerId + ' that is not in the previous style.');
33863
- }
33864
- };
33865
- var updatePaintProperty = function (layerId, name, value) {
33866
- if (nextLayerIndex.hasOwnProperty(layerId) || preservedLayers.includes(layerId)) {
33867
- patchOperations.push({
33868
- command: 'setPaintProperty',
33869
- args: [
33870
- layerId,
33871
- name,
33872
- value,
33873
- { validate: true }
33874
- ]
33875
- });
33876
- } else {
33877
- performance.warnOnce('Cannot update paint property on layer ' + layerId + ' that is not in the next style.');
33878
- }
33879
- };
33880
- var updateLayoutProperty = function (layerId, name, value) {
33881
- if (nextLayerIndex.hasOwnProperty(layerId) || preservedLayers.includes(layerId)) {
33882
- patchOperations.push({
33883
- command: 'setLayoutProperty',
33884
- args: [
33885
- layerId,
33886
- name,
33887
- value,
33888
- { validate: true }
33889
- ]
33890
- });
33891
- } else {
33892
- performance.warnOnce('Cannot update layout property on layer ' + layerId + ' that is not in the next style.');
33893
- }
33894
- };
33895
- var updateFilter = function (layerId, name, value) {
33896
- if (nextLayerIndex.hasOwnProperty(layerId) || preservedLayers.includes(layerId)) {
33897
- patchOperations.push({
33898
- command: 'setFilter',
33899
- args: [
33900
- layerId,
33901
- name,
33902
- value,
33903
- { validate: true }
33904
- ]
33905
- });
33906
- } else {
33907
- performance.warnOnce('Cannot update filter on layer ' + layerId + ' that is not in the next style.');
33908
- }
33909
- };
33910
- if (options.stylePatch) {
33911
- options.stylePatch(this.serialize(), next, preserveLayer.bind(this), updatePaintProperty.bind(this), updateLayoutProperty.bind(this), updateFilter.bind(this));
33912
- }
33913
- return patchOperations;
33914
- };
33915
33774
  Style.prototype._updateLayer = function _updateLayer(layer) {
33916
33775
  this._updatedLayers[layer.id] = true;
33917
33776
  if (layer.source && !this._updatedSources[layer.source] && this.sourceCaches[layer.source].getSource().type !== 'raster') {
@@ -41194,33 +41053,31 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
41194
41053
  return str;
41195
41054
  };
41196
41055
  Map.prototype._updateStyle = function _updateStyle(style, options) {
41056
+ var this$1 = this;
41197
41057
  if (options === void 0)
41198
41058
  options = {};
41199
- if (!options.stylePatch) {
41200
- if (this.style) {
41201
- this.style.setEventedParent(null);
41202
- this.style._remove();
41203
- }
41204
- if (!style) {
41205
- delete this.style;
41206
- return this;
41207
- } else {
41208
- this.style = new Style(this, options);
41209
- }
41210
- this.style.setEventedParent(this, { style: this.style });
41211
- } else {
41212
- if (!style) {
41213
- style = emptyStyle();
41214
- }
41059
+ if (options.transformStyle && this.style && !this.style._loaded) {
41060
+ this.style.once('style.load', function () {
41061
+ return this$1._updateStyle(style, options);
41062
+ });
41063
+ return;
41215
41064
  }
41216
- if (!this.style) {
41065
+ var previousStyle = this.style && options.transformStyle ? this.style.serialize() : undefined;
41066
+ if (this.style) {
41067
+ this.style.setEventedParent(null);
41068
+ this.style._remove();
41069
+ }
41070
+ if (!style) {
41071
+ delete this.style;
41072
+ return this;
41073
+ } else {
41217
41074
  this.style = new Style(this, options);
41218
- this.style.setEventedParent(this, { style: this.style });
41219
41075
  }
41076
+ this.style.setEventedParent(this, { style: this.style });
41220
41077
  if (typeof style === 'string') {
41221
- this.style.loadURL(style, options);
41078
+ this.style.loadURL(style, options, previousStyle);
41222
41079
  } else {
41223
- this.style.loadJSON(style, options);
41080
+ this.style.loadJSON(style, options, previousStyle);
41224
41081
  }
41225
41082
  return this;
41226
41083
  };
@@ -43619,7 +43476,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
43619
43476
  return Url;
43620
43477
  }());
43621
43478
 
43622
- var version = "2.2.6";
43479
+ var version = "2.3.0";
43623
43480
 
43624
43481
  /**
43625
43482
  * A helper class that provides methods for getting various forms of the map controls current version.
@@ -43999,7 +43856,6 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
43999
43856
  * Build the outermost container for the control, applies styling including any listeners for auto styling.
44000
43857
  */
44001
43858
  ControlBase.prototype.buildContainer = function (map, style, ariaLabel, tagName) {
44002
- var _this = this;
44003
43859
  this._map = map;
44004
43860
  this._container = document.createElement(tagName || "div");
44005
43861
  this._container.classList.add("azure-maps-control-container");
@@ -44008,11 +43864,9 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
44008
43864
  }
44009
43865
  // Set the style or add the auto listener.
44010
43866
  if (style.toLowerCase() === exports.ControlStyle.auto) {
44011
- this._map.styles.definitions().then(function (definitions) {
44012
- if (_this._map) {
44013
- _this._map.events.add("stylechanged", _this._onStyleChange);
44014
- }
44015
- });
43867
+ if (this._map) {
43868
+ this._map.events.add("stylechanged", this._onStyleChange);
43869
+ }
44016
43870
  }
44017
43871
  else {
44018
43872
  this._container.classList.add(style);
@@ -47772,6 +47626,12 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
47772
47626
  _this.hasFocus = false;
47773
47627
  _this.styleButtons = new Dictionary();
47774
47628
  _this.styleIcons = new Dictionary();
47629
+ // we need to rely on this to avoid potentially redundant thumbnail requests and .blob calls
47630
+ _this.thumbnailCache = {
47631
+ assumedConfiguration: undefined,
47632
+ response: new Dictionary(),
47633
+ blob: new Dictionary()
47634
+ };
47775
47635
  /**
47776
47636
  * Callback handler for the style changing.
47777
47637
  */
@@ -47785,6 +47645,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
47785
47645
  if (!_this.styleOpsGrid) {
47786
47646
  return;
47787
47647
  }
47648
+ // do not recreate the styleOpsGrid if it is initialized and configuration object reference has not changed
47649
+ if (_this.styleOpsGrid.children.length > 0 && _this.thumbnailCache.assumedConfiguration === definitions) {
47650
+ return;
47651
+ }
47652
+ _this.thumbnailCache.assumedConfiguration = definitions;
47788
47653
  Array.from(_this.styleOpsGrid.children).forEach(function (element) { return element.remove(); });
47789
47654
  _this.styleButtons.clear();
47790
47655
  _this.populateOpsGridFromDefinitions(definitions);
@@ -47890,6 +47755,9 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
47890
47755
  _super.prototype.onRemove.call(this);
47891
47756
  this.styleOpsGrid = null;
47892
47757
  this.styleButtons.clear();
47758
+ this.thumbnailCache.response.clear();
47759
+ this.thumbnailCache.blob.clear();
47760
+ this.thumbnailCache.assumedConfiguration = undefined;
47893
47761
  this.map.events.remove("stylechanged", this.onStyleChange);
47894
47762
  this.map.events.remove("mapconfigurationchanged", this.onMapConfigurationChange);
47895
47763
  };
@@ -47949,7 +47817,18 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
47949
47817
  styleOptionButton.setAttribute("type", "button");
47950
47818
  var styleIconImage = new Image();
47951
47819
  fetchIconPromise
47952
- .then(function (response) { return response.blob(); })
47820
+ .then(function (response) {
47821
+ if (_this.thumbnailCache.blob.has(response.url)) {
47822
+ return _this.thumbnailCache.blob.get(response.url);
47823
+ }
47824
+ else {
47825
+ // we need the response.clone() to allow reading over body multiple times since response objects are cached
47826
+ // and can be reused across multiple invocations
47827
+ var blobPromise = response.clone().blob();
47828
+ _this.thumbnailCache.blob.set(response.url, blobPromise);
47829
+ return blobPromise;
47830
+ }
47831
+ })
47953
47832
  .then(function (blob) {
47954
47833
  var iconUrl = URL.createObjectURL(blob);
47955
47834
  styleIconImage.src = iconUrl;
@@ -48057,7 +47936,14 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
48057
47936
  if (mapServiceOptions.transformRequest) {
48058
47937
  merge_1(requestParams, mapServiceOptions.transformRequest(requestParams.url, "Thumbnail"));
48059
47938
  }
48060
- var fetchThumbnailPromise = fetch(requestParams.url, { headers: requestParams.headers });
47939
+ var fetchThumbnailPromise;
47940
+ if (_this.thumbnailCache.response.has(requestParams.url)) {
47941
+ fetchThumbnailPromise = Promise.resolve(_this.thumbnailCache.response.get(requestParams.url));
47942
+ }
47943
+ else {
47944
+ fetchThumbnailPromise = fetch(requestParams.url, { headers: requestParams.headers });
47945
+ _this.thumbnailCache.response.set(requestParams.url, fetchThumbnailPromise);
47946
+ }
48061
47947
  // Add button for each style
48062
47948
  var styleOptionButton = _this.buildSelectStyleBtn(style.name, definitions, fetchThumbnailPromise);
48063
47949
  _this.styleOpsGrid.appendChild(styleOptionButton);
@@ -53335,7 +53221,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
53335
53221
  };
53336
53222
  ZoomControl.prototype.updateZoomButtonsState = function () {
53337
53223
  var zoomInDisabled = this.map.getCamera().zoom >= this.map._getMap().getMaxZoom();
53338
- // small values need special handling, since depending on the height of the map view
53224
+ // small values need special handling, since depending on the height of the map view
53339
53225
  // the actual zoom we can zoom out to can be above or below 0 when the entire map fits the height into the view
53340
53226
  // use web mercator bounds to check if entire latitude range is visible
53341
53227
  var reachedLatitudeBoundaries = BoundingBox.getSouth(this.map.getCamera().bounds) <= -WEBMERCATOR_MAXLAT
@@ -53347,7 +53233,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
53347
53233
  }
53348
53234
  if (this.zoomOutButton && this.zoomOutButton.disabled != zoomOutDisabled) {
53349
53235
  this.zoomOutButton.disabled = zoomOutDisabled;
53350
- this.zoomInButton.setAttribute("aria-label", zoomInDisabled ? "Zoom Out disabled" : "Zoom Out");
53236
+ this.zoomOutButton.setAttribute("aria-label", zoomInDisabled ? "Zoom Out disabled" : "Zoom Out");
53351
53237
  }
53352
53238
  };
53353
53239
  ZoomControl.prototype.constructZoomInButton = function (map) {
@@ -53619,19 +53505,24 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
53619
53505
  * Get reference to Mapbox Map
53620
53506
  * @internal
53621
53507
  */
53622
- Source.prototype._setMap = function (map) {
53508
+ Source.prototype._setMap = function (map, shouldInvokeEvent) {
53509
+ if (shouldInvokeEvent === void 0) { shouldInvokeEvent = true; }
53623
53510
  if (map == null || map === undefined) {
53624
53511
  var temp = this.map;
53625
53512
  delete this.map;
53626
- this._invokeEvent("sourceremoved", this);
53627
- if (temp) {
53628
- temp.events.invoke("sourceremoved", this);
53513
+ if (shouldInvokeEvent) {
53514
+ this._invokeEvent("sourceremoved", this);
53515
+ if (temp) {
53516
+ temp.events.invoke("sourceremoved", this);
53517
+ }
53629
53518
  }
53630
53519
  }
53631
53520
  else {
53632
53521
  this.map = map;
53633
- this._invokeEvent("sourceadded", this);
53634
- this.map.events.invoke("sourceadded", this);
53522
+ if (shouldInvokeEvent) {
53523
+ this._invokeEvent("sourceadded", this);
53524
+ this.map.events.invoke("sourceadded", this);
53525
+ }
53635
53526
  }
53636
53527
  };
53637
53528
  return Source;
@@ -53952,6 +53843,27 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
53952
53843
  }
53953
53844
  return geoJsonSource;
53954
53845
  };
53846
+ DataSource.prototype._isDeepEqual = function (other) {
53847
+ if (this.constructor !== other.constructor) {
53848
+ return false;
53849
+ }
53850
+ var source = this._buildSource();
53851
+ var otherSource = other._buildSource();
53852
+ return source.type === otherSource.type &&
53853
+ // no data comparison since it is costly and not needed. If geojson data is different, but other source properties are same, we treat it as an update.
53854
+ //source.data === otherSource.data &&
53855
+ source.maxzoom === otherSource.maxzoom &&
53856
+ source.cluster === otherSource.cluster &&
53857
+ source.clusterRadius === otherSource.clusterRadius &&
53858
+ source.tolerance === otherSource.tolerance &&
53859
+ source.lineMetrics === otherSource.lineMetrics &&
53860
+ JSON.stringify(source.clusterProperties) === JSON.stringify(otherSource.clusterProperties) &&
53861
+ source.buffer === otherSource.buffer &&
53862
+ source.clusterMinPoints === otherSource.clusterMinPoints &&
53863
+ source.generateId === otherSource.generateId &&
53864
+ source.promoteId === otherSource.promoteId &&
53865
+ source.filter === otherSource.filter;
53866
+ };
53955
53867
  /**
53956
53868
  * @internal
53957
53869
  */
@@ -54233,6 +54145,26 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54233
54145
  }
54234
54146
  return vectorSource;
54235
54147
  };
54148
+ /**
54149
+ * @internal
54150
+ */
54151
+ VectorTileSource.prototype._isDeepEqual = function (other) {
54152
+ if (this.constructor !== other.constructor) {
54153
+ return false;
54154
+ }
54155
+ var source = this._buildSource();
54156
+ var otherSource = other._buildSource();
54157
+ return source.type === otherSource.type &&
54158
+ source.url === otherSource.url &&
54159
+ ((source.tiles === undefined && otherSource.tiles === undefined) ||
54160
+ (source.tiles && otherSource.tiles && source.tiles.length === otherSource.tiles.length && source.tiles.every(function (value, idx) { return value === otherSource.tiles[idx]; }))) &&
54161
+ source.minzoom === otherSource.minzoom &&
54162
+ source.maxzoom === otherSource.maxzoom &&
54163
+ source.bounds === otherSource.bounds &&
54164
+ source.attribution === otherSource.attribution &&
54165
+ source.promoteId === otherSource.promoteId &&
54166
+ source.scheme === otherSource.scheme;
54167
+ };
54236
54168
  return VectorTileSource;
54237
54169
  }(Source));
54238
54170
 
@@ -54524,11 +54456,41 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54524
54456
  /**
54525
54457
  * @internal
54526
54458
  * Specifies whether to create focusable indicators for the bubbles.
54459
+ * The default highlighting style is provided if the source is DataSource with Shape:
54460
+ * ```ts
54461
+ * const datasource = new DataSource('bubble-source');
54462
+ * datasource.setShapes([new Shape(new Point([-122.335, 47.62]))]);
54463
+ * this.map.sources.add(datasource);
54464
+ * const layer = new BubbleLayer(datasource, 'bubble', {
54465
+ * radius: 10,
54466
+ * color: 'cyan',
54467
+ * createIndicators: true,
54468
+ * });
54469
+ * ```
54470
+ *
54471
+ * For other sources, you can provide the accessibilityIdKey option to specify the property name of the feature to use as the accessibility id.
54472
+ * ```ts
54473
+ * const vtSource = new VectorTileSource("indoorTiles", { tiles, // provide your tile urls });
54474
+ * this.map.sources.add(vtSource);
54475
+ * const layer = new BubbleLayer(vtSource, 'bubble', {
54476
+ * createIndicators: true,
54477
+ * accessibilityIdKey: '{add your ID here}'
54478
+ * });
54479
+ * ```
54480
+ *
54481
+ * If you want to customize the highlighting style, you can use the focusin/focusout events to change the style of the bubble.
54482
+ * ```ts
54483
+ * this.map.events.add('focusin', 'bubble', (e) => { handle the style highlight });
54484
+ * ```
54527
54485
  *
54528
54486
  * Note: We treat this as an internal option for now because we hadn't fully decided the default styling for the indicators.
54529
54487
  * Once we decide, we will make this a public option or remove it.
54530
54488
  */
54531
54489
  _this.createIndicators = false;
54490
+ /**
54491
+ * @internal
54492
+ */
54493
+ _this.accessibilityIdKey = undefined;
54532
54494
  return _this;
54533
54495
  }
54534
54496
  return BubbleLayerOptions;
@@ -54601,6 +54563,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54601
54563
  }
54602
54564
  return ar;
54603
54565
  };
54566
+ var __spreadArray = (window && window.__spreadArray) || function (to, from) {
54567
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
54568
+ to[j] = from[i];
54569
+ return to;
54570
+ };
54604
54571
  /**
54605
54572
  * Renders Point objects as scalable circles (bubbles).
54606
54573
  */
@@ -54615,45 +54582,60 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54615
54582
  function BubbleLayer(source, id, options) {
54616
54583
  var _this = _super.call(this, id) || this;
54617
54584
  _this.accessibleIndicator = [];
54618
- _this.setAccessibleIndicator = function () { return __awaiter$1(_this, void 0, void 0, function () {
54619
- var features, createIndicator, insertHiddenBefore, attach;
54585
+ /** @internal */
54586
+ _this._setAccessibleIndicator = function () { return __awaiter$1(_this, void 0, void 0, function () {
54587
+ var renderedShapes, accessibilityIdKey, createIndicator, insertHiddenBefore, insertHiddenInFront, attach;
54620
54588
  var _this = this;
54621
54589
  return __generator$1(this, function (_a) {
54622
54590
  this.accessibleIndicator.forEach(function (indicator) { return indicator.remove(); });
54623
54591
  this.accessibleIndicator = [];
54624
- features = this.map.layers.getRenderedShapes(this.map.getCamera().bounds, this);
54625
- createIndicator = function (features, idx) {
54626
- var bubbleFeature = features[idx];
54627
- var indicator = new AccessibleIndicator({ positionInSet: idx + 1, setSize: features.length });
54592
+ renderedShapes = this.map.layers.getRenderedShapes(this.map.getCamera().bounds, this);
54593
+ accessibilityIdKey = this.options.accessibilityIdKey || (this._getDataSource() ? Shape._shapeIdPropName : undefined);
54594
+ createIndicator = function (renderedShapes, idx) {
54595
+ var curRenderedShape = renderedShapes[idx];
54596
+ var bubbleFeature = curRenderedShape instanceof Shape ? curRenderedShape.toJson() : curRenderedShape;
54597
+ var indicator = new AccessibleIndicator({ positionInSet: idx + 1, setSize: renderedShapes.length });
54628
54598
  var element = indicator.getElement();
54629
- var _a = __read$3(_this.map.positionsToPixels([bubbleFeature.data.geometry.coordinates]), 1), pixel = _a[0];
54599
+ var _a = __read$3(_this.map.positionsToPixels([_this.getFirstCoordinate(bubbleFeature.geometry.coordinates)]), 1), pixel = _a[0];
54630
54600
  element.addEventListener('focusin', function (event) {
54631
- _this.accessibleIndicator.filter(function (p) { return p !== indicator; }).forEach(function (popup) { return popup.remove(); });
54601
+ _this.accessibleIndicator.filter(function (i) { return i !== indicator; }).forEach(function (indicator) { return indicator.remove(); });
54632
54602
  // insert previous and next popups
54633
54603
  if (idx - 1 >= 0) {
54634
- insertHiddenBefore(indicator, createIndicator(features, idx - 1));
54604
+ insertHiddenBefore(indicator, createIndicator(renderedShapes, idx - 1));
54635
54605
  }
54636
- if (idx + 1 < features.length) {
54637
- attach(createIndicator(features, idx + 1));
54606
+ if (idx + 1 < renderedShapes.length) {
54607
+ attach(createIndicator(renderedShapes, idx + 1));
54608
+ }
54609
+ // if we are on boundaries: add the first / last indicator
54610
+ // to maintain indicators on full page navigation cycle
54611
+ if (idx >= 2 && idx == renderedShapes.length - 1) {
54612
+ insertHiddenInFront(createIndicator(renderedShapes, 0));
54613
+ }
54614
+ if (idx == 0 && renderedShapes.length >= 2) {
54615
+ attach(createIndicator(renderedShapes, renderedShapes.length - 1));
54616
+ }
54617
+ if (accessibilityIdKey !== undefined) {
54618
+ _this.map._getMap().setPaintProperty(_this.id, 'circle-stroke-color', ['case', ['==', ['get', accessibilityIdKey], bubbleFeature.properties[accessibilityIdKey]], '#000000', _this.options.strokeColor]);
54638
54619
  }
54639
- _this.map._getMap().setPaintProperty(_this.id, 'circle-stroke-color', ['case', ['==', ['get', '_azureMapsShapeId'], bubbleFeature.data.id], '#000000', _this.options.strokeColor]);
54640
54620
  var focusEvent = {
54641
54621
  target: element,
54642
54622
  type: 'focusin',
54643
54623
  map: _this.map,
54644
- shape: bubbleFeature,
54624
+ shape: curRenderedShape,
54645
54625
  originalEvent: event,
54646
54626
  pixel: pixel
54647
54627
  };
54648
54628
  _this._invokeEvent('focusin', focusEvent);
54649
54629
  });
54650
54630
  element.addEventListener('focusout', function (event) {
54651
- _this.map._getMap().setPaintProperty(_this.id, 'circle-stroke-color', ['case', ['==', ['get', '_azureMapsShapeId'], bubbleFeature.data.id], _this.options.strokeColor, _this.options.strokeColor]);
54631
+ if (accessibilityIdKey !== undefined) {
54632
+ _this.map._getMap().setPaintProperty(_this.id, 'circle-stroke-color', ['case', ['==', ['get', accessibilityIdKey], bubbleFeature.properties[accessibilityIdKey]], _this.options.strokeColor, _this.options.strokeColor]);
54633
+ }
54652
54634
  var focusEvent = {
54653
54635
  target: element,
54654
54636
  type: 'focusout',
54655
54637
  map: _this.map,
54656
- shape: bubbleFeature,
54638
+ shape: curRenderedShape,
54657
54639
  originalEvent: event,
54658
54640
  pixel: pixel
54659
54641
  };
@@ -54668,14 +54650,20 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54668
54650
  var baseElement = base.getElement();
54669
54651
  baseElement.parentElement.insertBefore(elementToSwapIn, baseElement);
54670
54652
  };
54653
+ insertHiddenInFront = function (toInsert) {
54654
+ toInsert.attach(_this.map);
54655
+ var elementToSwapIn = toInsert.getElement();
54656
+ var parent = elementToSwapIn.parentElement;
54657
+ parent.insertBefore(elementToSwapIn, parent.firstElementChild);
54658
+ };
54671
54659
  attach = function (popup) {
54672
54660
  popup.attach(_this.map);
54673
54661
  };
54674
- if (features.length > 0) {
54675
- attach(createIndicator(features, 0));
54662
+ if (renderedShapes.length > 0) {
54663
+ attach(createIndicator(renderedShapes, 0));
54676
54664
  }
54677
- if (features.length > 1) {
54678
- attach(createIndicator(features, features.length - 1));
54665
+ if (renderedShapes.length > 1) {
54666
+ attach(createIndicator(renderedShapes, renderedShapes.length - 1));
54679
54667
  }
54680
54668
  return [2 /*return*/];
54681
54669
  });
@@ -54728,18 +54716,71 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54728
54716
  this.options = newOptions;
54729
54717
  };
54730
54718
  BubbleLayer.prototype.onAdd = function (map) {
54719
+ var _this = this;
54731
54720
  _super.prototype.onAdd.call(this, map);
54732
54721
  if (this.options.createIndicators) {
54733
- map.events.addOnce('idle', this.setAccessibleIndicator);
54734
- map.events.add('moveend', this.setAccessibleIndicator);
54722
+ // Wait for map idle for the first time to ensure `layer.getRenderedShapes` return correct shapes.
54723
+ map.events.addOnce('idle', this._setAccessibleIndicator);
54724
+ // The rendered shapes may be changed when map is moved. Update the indicators when map is moved.
54725
+ map.events.add('moveend', this._setAccessibleIndicator);
54726
+ var dataSource = this._getDataSource();
54727
+ if (dataSource) {
54728
+ // The rendered shapes may be changed when data is added. Update the indicators when data is added.
54729
+ map.events.add('dataadded', dataSource, function () {
54730
+ // Wait for map idle to ensure `layer.getRenderedShapes` return correct shapes.
54731
+ map.events.addOnce('idle', _this._setAccessibleIndicator);
54732
+ });
54733
+ }
54734
+ else {
54735
+ var sourceId_1 = typeof this.options.source === 'string' ? this.options.source : this.options.source.getId();
54736
+ map.events.add('sourcedata', function (mapDataEvent) {
54737
+ var _a;
54738
+ // There's chances that mapDataEvent.isSourceLoaded doesn't update correctly when using flyTo, thus we check by using map.isSourceLoaded.
54739
+ if (((_a = mapDataEvent.source) === null || _a === void 0 ? void 0 : _a.getId()) === sourceId_1 && map._getMap().isSourceLoaded(sourceId_1)) {
54740
+ // Source event will be fired multiple times, and we are only interested when the source is loaded.
54741
+ // Thus design a cache key that only changed when camera & style properties are changed.
54742
+ var curCacheKey = _this._getSourceDataEventCacheKey();
54743
+ if (curCacheKey !== _this.sourceDataEventCacheKey) {
54744
+ _this._setAccessibleIndicator();
54745
+ _this.sourceDataEventCacheKey = curCacheKey;
54746
+ }
54747
+ }
54748
+ });
54749
+ }
54735
54750
  }
54736
54751
  };
54737
54752
  BubbleLayer.prototype.onRemove = function () {
54738
- _super.prototype.onRemove.call(this);
54739
54753
  if (this.options.createIndicators) {
54740
- this.map.events.remove('idle', this.setAccessibleIndicator);
54741
- this.map.events.remove('moveend', this.setAccessibleIndicator);
54754
+ this.map.events.remove('idle', this._setAccessibleIndicator);
54755
+ this.map.events.remove('moveend', this._setAccessibleIndicator);
54756
+ var dataSource = this._getDataSource();
54757
+ if (dataSource) {
54758
+ this.map.events.remove('dataadded', dataSource, this._setAccessibleIndicator);
54759
+ }
54760
+ else {
54761
+ this.map.events.remove('sourcedata', this._setAccessibleIndicator);
54762
+ }
54763
+ }
54764
+ _super.prototype.onRemove.call(this);
54765
+ };
54766
+ BubbleLayer.prototype._getSourceDataEventCacheKey = function () {
54767
+ if (!this.map) {
54768
+ return undefined;
54742
54769
  }
54770
+ var mapConfiguration = this.map.getServiceOptions().mapConfiguration;
54771
+ return __spreadArray(__spreadArray([], __read$3(this.map.getCamera().bounds)), [
54772
+ this.map.getCamera().zoom,
54773
+ this.map.getCamera().pitch,
54774
+ this.map.getStyle().style,
54775
+ mapConfiguration instanceof Object ? mapConfiguration.id : mapConfiguration
54776
+ ]).join(',');
54777
+ };
54778
+ BubbleLayer.prototype._getDataSource = function () {
54779
+ var source = typeof this.options.source === 'string' ? this.map.sources.getById(this.options.source) : this.options.source;
54780
+ if (source instanceof DataSource) {
54781
+ return source;
54782
+ }
54783
+ return undefined;
54743
54784
  };
54744
54785
  /**
54745
54786
  * @internal
@@ -54792,6 +54833,17 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
54792
54833
  ids.add(this.options.source);
54793
54834
  return ids;
54794
54835
  };
54836
+ /**
54837
+ * The coordinates can be nested, so we need to get the first coordinate.
54838
+ * @param coordinates The property from the Geometry. Can be Position, Position[], Position[][], etc.
54839
+ * @returns
54840
+ */
54841
+ BubbleLayer.prototype.getFirstCoordinate = function (coordinates) {
54842
+ if (!Array.isArray(coordinates[0])) {
54843
+ return coordinates;
54844
+ }
54845
+ return this.getFirstCoordinate(coordinates[0]);
54846
+ };
54795
54847
  return BubbleLayer;
54796
54848
  }(Layer));
54797
54849
 
@@ -55875,7 +55927,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
55875
55927
  }
55876
55928
  return ar;
55877
55929
  };
55878
- var __spreadArray = (window && window.__spreadArray) || function (to, from) {
55930
+ var __spreadArray$1 = (window && window.__spreadArray) || function (to, from) {
55879
55931
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
55880
55932
  to[j] = from[i];
55881
55933
  return to;
@@ -55950,7 +56002,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
55950
56002
  finally { if (e_1) throw e_1.error; }
55951
56003
  }
55952
56004
  // Then execute the standard merge behavior.
55953
- var merged = _super.prototype.merge.apply(this, __spreadArray([], __read$4(valueList)));
56005
+ var merged = _super.prototype.merge.apply(this, __spreadArray$1([], __read$4(valueList)));
55954
56006
  if (isNewColorSet) {
55955
56007
  merged.fillPattern = undefined;
55956
56008
  }
@@ -58644,7 +58696,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
58644
58696
  }
58645
58697
  return ar;
58646
58698
  };
58647
- var __spreadArray$1 = (window && window.__spreadArray) || function (to, from) {
58699
+ var __spreadArray$2 = (window && window.__spreadArray) || function (to, from) {
58648
58700
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
58649
58701
  to[j] = from[i];
58650
58702
  return to;
@@ -58781,7 +58833,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
58781
58833
  for (var _i = 0; _i < arguments.length; _i++) {
58782
58834
  valueList[_i] = arguments[_i];
58783
58835
  }
58784
- var merged = _super.prototype.merge.apply(this, __spreadArray$1([], __read$6(valueList)));
58836
+ var merged = _super.prototype.merge.apply(this, __spreadArray$2([], __read$6(valueList)));
58785
58837
  if (merged.authType === exports.AuthenticationType.subscriptionKey) {
58786
58838
  merged.authContext = merged.aadAppId = merged.getToken = undefined;
58787
58839
  }
@@ -69633,10 +69685,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
69633
69685
  if (add) {
69634
69686
  this.logoAnchor = document.createElement("a");
69635
69687
  this.logoAnchor.className = "azure-map-logo";
69636
- this.logoAnchor.href = "https://microsoft.com";
69688
+ this.logoAnchor.href = "https://aka.ms/azuremaps";
69637
69689
  this.logoAnchor.setAttribute("aria-label", "Microsoft");
69690
+ this.logoAnchor.setAttribute("target", "_blank");
69638
69691
  this.container.appendChild(this.logoAnchor);
69639
- this.logoTooltip = buildAccessibleTooltip("Visit microsoft.com");
69692
+ this.logoTooltip = buildAccessibleTooltip("Visit azure.microsoft.com");
69640
69693
  this.container.appendChild(this.logoTooltip);
69641
69694
  positionTooltip(this.logoTooltip, this.logoAnchor);
69642
69695
  }
@@ -69918,7 +69971,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
69918
69971
  }
69919
69972
  return ar;
69920
69973
  };
69921
- var __spreadArray$2 = (window && window.__spreadArray) || function (to, from) {
69974
+ var __spreadArray$3 = (window && window.__spreadArray) || function (to, from) {
69922
69975
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
69923
69976
  to[j] = from[i];
69924
69977
  return to;
@@ -70386,7 +70439,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
70386
70439
  // Derive polygon layers from the label config.
70387
70440
  _this._polygonStyleLayer = _this._labelConfig.reduce(function (acc, cur) {
70388
70441
  if (cur.polygonSources) {
70389
- acc.push.apply(acc, __spreadArray$2([], __read$7(cur.polygonSources)));
70442
+ acc.push.apply(acc, __spreadArray$3([], __read$7(cur.polygonSources)));
70390
70443
  }
70391
70444
  return acc;
70392
70445
  }, []);
@@ -74871,7 +74924,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
74871
74924
  }
74872
74925
  return ar;
74873
74926
  };
74874
- var __spreadArray$3 = (window && window.__spreadArray) || function (to, from) {
74927
+ var __spreadArray$4 = (window && window.__spreadArray) || function (to, from) {
74875
74928
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
74876
74929
  to[j] = from[i];
74877
74930
  return to;
@@ -74889,7 +74942,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
74889
74942
  'data-azure-maps-attribution-order',
74890
74943
  'data-azure-maps-attribution-dynamic'
74891
74944
  ];
74892
- var allowedAttributionAttributes = __spreadArray$3([
74945
+ var allowedAttributionAttributes = __spreadArray$4([
74893
74946
  'href'
74894
74947
  ], __read$8(attributionRuleAttributes));
74895
74948
  var AttributionRuleProxy = /** @class */ (function () {
@@ -75114,7 +75167,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
75114
75167
  };
75115
75168
  AttributionRuleProxy.prototype.applyAttributionResponse = function (attributions) {
75116
75169
  var _this = this;
75117
- var copyrights = attributions.map(function (resp) { return resp.copyrights || []; }).reduce(function (flat, copyrights) { return __spreadArray$3(__spreadArray$3([], __read$8(flat)), __read$8(copyrights)); }, []);
75170
+ var copyrights = attributions.map(function (resp) { return resp.copyrights || []; }).reduce(function (flat, copyrights) { return __spreadArray$4(__spreadArray$4([], __read$8(flat)), __read$8(copyrights)); }, []);
75118
75171
  if (copyrights.length == 0) {
75119
75172
  // no attribution for a provided tileset/bbox/z
75120
75173
  return;
@@ -75179,7 +75232,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
75179
75232
  }
75180
75233
  return ar;
75181
75234
  };
75182
- var __spreadArray$4 = (window && window.__spreadArray) || function (to, from) {
75235
+ var __spreadArray$5 = (window && window.__spreadArray) || function (to, from) {
75183
75236
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
75184
75237
  to[j] = from[i];
75185
75238
  return to;
@@ -75298,10 +75351,10 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
75298
75351
  }, function () { return document.createElement('span'); });
75299
75352
  });
75300
75353
  var registeredRuleSet = new Set(Object.values(registeredRules));
75301
- var redundantRules = new Set(__spreadArray$4([], __read$9(allRules)).filter(function (rule) { return !registeredRuleSet.has(rule); }));
75302
- var redundantElements = new Set(__spreadArray$4([], __read$9(redundantRules)).map(function (rule) { return rule.getElement(); }));
75354
+ var redundantRules = new Set(__spreadArray$5([], __read$9(allRules)).filter(function (rule) { return !registeredRuleSet.has(rule); }));
75355
+ var redundantElements = new Set(__spreadArray$5([], __read$9(redundantRules)).map(function (rule) { return rule.getElement(); }));
75303
75356
  // eject redundant rules associated elements altogether
75304
- __spreadArray$4([], __read$9(redundantElements)).filter(function (elem) { return elem.parentElement !== null; })
75357
+ __spreadArray$5([], __read$9(redundantElements)).filter(function (elem) { return elem.parentElement !== null; })
75305
75358
  .forEach(function (elem) { return elem.parentElement.removeChild(elem); });
75306
75359
  _this.rules = Object.values(registeredRules);
75307
75360
  var attributionsToApply = attributions
@@ -75337,7 +75390,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
75337
75390
  var visibleTextNodes = function (elem) {
75338
75391
  return Array.from(elem.style.display != 'none' ? elem.children : [])
75339
75392
  .map(function (elem) { return visibleTextNodes(elem); })
75340
- .reduce(function (flattened, nodes) { return __spreadArray$4(__spreadArray$4([], __read$9(flattened)), __read$9(nodes)); }, Array.from(elem.style.display != 'none' ? elem.childNodes : []).filter(function (node) { return node.nodeType == node.TEXT_NODE; }));
75393
+ .reduce(function (flattened, nodes) { return __spreadArray$5(__spreadArray$5([], __read$9(flattened)), __read$9(nodes)); }, Array.from(elem.style.display != 'none' ? elem.childNodes : []).filter(function (node) { return node.nodeType == node.TEXT_NODE; }));
75341
75394
  };
75342
75395
  var newRenderContext = _this.virtualContext.cloneNode(true);
75343
75396
  var visibleNodes = visibleTextNodes(newRenderContext);
@@ -75352,7 +75405,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
75352
75405
  // }
75353
75406
  // });
75354
75407
  // strip all predefined keywords
75355
- visibleNodes.forEach(function (node) { return node.textContent = __spreadArray$4([], __read$9(attributionFilters)).reduce(function (target, filter) { return target.replace(filter, '').trim(); }, node.textContent); });
75408
+ visibleNodes.forEach(function (node) { return node.textContent = __spreadArray$5([], __read$9(attributionFilters)).reduce(function (target, filter) { return target.replace(filter, '').trim(); }, node.textContent); });
75356
75409
  // strip year from each node
75357
75410
  // visibleNodes.forEach(node => node.textContent = node.textContent.replace(copyrightYearPattern, '').trim());
75358
75411
  // deduplicate attribution text
@@ -78544,7 +78597,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
78544
78597
  this._removeListener(eventType, target, callback);
78545
78598
  }
78546
78599
  else {
78547
- target._removeEventListener(eventType, callback);
78600
+ target === null || target === void 0 ? void 0 : target._removeEventListener(eventType, callback);
78548
78601
  }
78549
78602
  }
78550
78603
  }
@@ -79034,10 +79087,15 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79034
79087
  return ids;
79035
79088
  };
79036
79089
  FundamentalMapLayer.prototype._updateLayoutProperty = function (name, newValue, oldValue, subValue) {
79037
- var _this = this;
79090
+ if (isEqual_1(newValue, oldValue))
79091
+ return;
79092
+ var map = this.map._getMap();
79038
79093
  this.layers.forEach(function (layer) {
79039
- if (!(isEqual_1(newValue, oldValue))) {
79040
- _this.map._getMap().setLayoutProperty(layer.id, name, subValue || newValue);
79094
+ if (map.getLayer(layer.id)) {
79095
+ map.setLayoutProperty(layer.id, name, subValue || newValue);
79096
+ }
79097
+ else {
79098
+ console.warn("Could not update layout property " + name + " for layer " + layer.id + " to " + (subValue || newValue));
79041
79099
  }
79042
79100
  });
79043
79101
  };
@@ -79071,7 +79129,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79071
79129
  }
79072
79130
  return ar;
79073
79131
  };
79074
- var __spreadArray$5 = (window && window.__spreadArray) || function (to, from) {
79132
+ var __spreadArray$6 = (window && window.__spreadArray) || function (to, from) {
79075
79133
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
79076
79134
  to[j] = from[i];
79077
79135
  return to;
@@ -79132,10 +79190,12 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79132
79190
  // Place the new layer behind the specified before layer.
79133
79191
  var layerIndex = this.layerIndex.findIndex(function (l) { return l.getId() === layer.getId(); });
79134
79192
  var userLayerIndex = this.userLayers.findIndex(function (ul) { return ul.layer.getId() === layer.getId(); });
79135
- var tempLayer = this.layerIndex[layerIndex];
79136
79193
  this._removeMapboxLayers(layer);
79137
79194
  this._addMapboxLayers(layer, before);
79138
- this.map.events._disableLayerEvents(tempLayer);
79195
+ var tempLayer = this.layerIndex[layerIndex];
79196
+ if (tempLayer) {
79197
+ this.map.events._disableLayerEvents(tempLayer);
79198
+ }
79139
79199
  this.map.events._enableLayerEvents(layer);
79140
79200
  this.layerIndex.splice(layerIndex, 1);
79141
79201
  var beforeIndex = this.layerIndex.findIndex(function (l) { return l.getId() === before; });
@@ -79143,7 +79203,9 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79143
79203
  if (!(layer instanceof FundamentalMapLayer)) {
79144
79204
  this.userLayers[userLayerIndex] = { layer: layer, before: before };
79145
79205
  }
79146
- tempLayer.onRemove();
79206
+ if (tempLayer) {
79207
+ tempLayer.onRemove();
79208
+ }
79147
79209
  layer.onAdd(this.map);
79148
79210
  }
79149
79211
  else {
@@ -79354,9 +79416,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79354
79416
  LayerManager.prototype.clear = function () {
79355
79417
  for (var layerIndexIndex = this.layerIndex.length - 1; layerIndexIndex >= 0; layerIndexIndex--) {
79356
79418
  var tempLayer = this.layerIndex[layerIndexIndex];
79357
- this._removeMapboxLayers(tempLayer, true);
79358
- this.layerIndex.splice(layerIndexIndex, 1);
79359
- tempLayer.onRemove();
79419
+ if (tempLayer) {
79420
+ this._removeMapboxLayers(tempLayer, true);
79421
+ this.layerIndex.splice(layerIndexIndex, 1);
79422
+ tempLayer.onRemove();
79423
+ }
79360
79424
  }
79361
79425
  this.userLayers = [];
79362
79426
  };
@@ -79507,7 +79571,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79507
79571
  // If a specified layer hasn't been added to the map throw an error.
79508
79572
  var index = this_1.layerIndex.findIndex(function (l) { return l.getId() === layerId; });
79509
79573
  if (index > -1) {
79510
- layerIds.push.apply(layerIds, __spreadArray$5([], __read$b(this_1.layerIndex[index]._getLayerIds()
79574
+ layerIds.push.apply(layerIds, __spreadArray$6([], __read$b(this_1.layerIndex[index]._getLayerIds()
79511
79575
  .filter(function (id) { return !!_this.map._getMap().getLayer(id); }))));
79512
79576
  }
79513
79577
  else {
@@ -79796,6 +79860,37 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
79796
79860
  FundamentalMapSource.prototype._buildSource = function () {
79797
79861
  return this.source;
79798
79862
  };
79863
+ /**
79864
+ * @internal
79865
+ */
79866
+ FundamentalMapSource.prototype._isDeepEqual = function (other) {
79867
+ if (this.constructor !== other.constructor) {
79868
+ return false;
79869
+ }
79870
+ var source = this.source;
79871
+ var otherSource = other.source;
79872
+ var baseEqual = source.type === otherSource.type &&
79873
+ source.url === otherSource.url
79874
+ && ((source.tiles === undefined && otherSource.tiles === undefined) ||
79875
+ (source.tiles && otherSource.tiles && source.tiles.length === otherSource.tiles.length && source.tiles.every(function (value, idx) { return value === otherSource.tiles[idx]; })))
79876
+ && source.minzoom === otherSource.minzoom
79877
+ && source.maxzoom === otherSource.maxzoom
79878
+ && source.bounds === otherSource.bounds
79879
+ && source.attribution === otherSource.attribution;
79880
+ var rasterEqual = source.type !== "raster" || (source.type === "raster"
79881
+ && source.type === otherSource.type
79882
+ && source.tileSize === otherSource.tileSize
79883
+ && source.scheme === otherSource.scheme);
79884
+ var rasterDemEqual = source.type !== "raster-dem" || (source.type === "raster-dem"
79885
+ && source.type === otherSource.type
79886
+ && source.tileSize === otherSource.tileSize
79887
+ && source.encoding === otherSource.encoding);
79888
+ var vectorEqual = source.type !== "vector" || (source.type === "vector"
79889
+ && source.type === otherSource.type
79890
+ && source.promoteId === otherSource.promoteId
79891
+ && source.scheme === otherSource.scheme);
79892
+ return baseEqual && rasterEqual && rasterDemEqual && vectorEqual;
79893
+ };
79799
79894
  /**
79800
79895
  * Updates the source info to convert the tiles to url strings.
79801
79896
  * @param sourceDef The original source info.
@@ -80092,39 +80187,52 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
80092
80187
  var _this = this;
80093
80188
  if (sources) {
80094
80189
  Object.keys(sources).forEach(function (sourceId) {
80190
+ var sourceToAdd = sources[sourceId];
80191
+ var newSource;
80192
+ if (sourceToAdd.type === "vector") {
80193
+ newSource = new FundamentalMapSource(sourceId, {
80194
+ name: sourceId,
80195
+ tiles: sourceToAdd.tiles,
80196
+ type: "vector",
80197
+ url: sourceToAdd.url
80198
+ });
80199
+ }
80200
+ else if (sourceToAdd.type === "raster") {
80201
+ newSource = new FundamentalMapSource(sourceId, {
80202
+ name: sourceId,
80203
+ tiles: sourceToAdd.tiles,
80204
+ type: "raster",
80205
+ url: sourceToAdd.url
80206
+ });
80207
+ }
80208
+ else {
80209
+ // Do not throw for the source of unknown type.
80210
+ // throw new Error(`Unable to construct source with ID ${sourceId}.`);
80211
+ // no other handling for the source we don't sync into the state here
80212
+ return;
80213
+ }
80095
80214
  if (!_this.sources.has(sourceId)) {
80096
- var sourceToAdd = sources[sourceId];
80097
- if (sourceToAdd.type === "vector") {
80098
- var newSource = new FundamentalMapSource(sourceId, {
80099
- name: sourceId,
80100
- tiles: sourceToAdd.tiles,
80101
- type: "vector",
80102
- url: sourceToAdd.url
80103
- });
80104
- _this.sources.set(sourceId, newSource);
80105
- newSource._setMap(_this.map);
80106
- }
80107
- else if (sourceToAdd.type === "raster") {
80108
- var newSource = new FundamentalMapSource(sourceId, {
80109
- name: sourceId,
80110
- tiles: sourceToAdd.tiles,
80111
- type: "raster",
80112
- url: sourceToAdd.url
80113
- });
80114
- _this.sources.set(sourceId, newSource);
80115
- newSource._setMap(_this.map);
80116
- }
80117
- else {
80118
- throw new Error("Unable to construct source with ID " + sourceId + ".");
80119
- }
80215
+ _this.sources.set(sourceId, newSource);
80216
+ newSource._setMap(_this.map);
80120
80217
  }
80121
- });
80122
- Object.keys(this.sources).forEach(function (sourceId) {
80123
- if (!sources.hasOwnProperty(sourceId)) {
80124
- _this.sources.get(sourceId)._setMap(null);
80125
- _this.sources.delete(sourceId);
80218
+ else if (_this.sources.has(sourceId) && !_this.sources.get(sourceId)._isDeepEqual(newSource)) {
80219
+ // source with same id but different properties: update
80220
+ _this.sources.set(sourceId, newSource);
80221
+ newSource._setMap(_this.map, false);
80126
80222
  }
80127
80223
  });
80224
+ // counter-intuitive: below is a bug and will do nothing since Object.keys(this.sources) will always return [], it should rather be:
80225
+ // Array.from(this.sources.keys()).forEach(sourceId => {
80226
+ // however, we have seen the first party users are compensating for this with their code containing explicit azm.sources.remove but not containing the check for existing
80227
+ // such removal will cause the exception, since the source would already be removed
80228
+ //
80229
+ // given this bug was here historically, we keep the removal unfixed here (already fixed in v3) to make sure we don't cause any unintented side effects for existing users
80230
+ // Object.keys(this.sources).forEach(sourceId => {
80231
+ // if (!sources.hasOwnProperty(sourceId)) {
80232
+ // this.sources.get(sourceId)._setMap(null);
80233
+ // this.sources.delete(sourceId);
80234
+ // }
80235
+ // });
80128
80236
  }
80129
80237
  };
80130
80238
  return SourceManager;
@@ -80266,7 +80374,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
80266
80374
  }
80267
80375
  return ar;
80268
80376
  };
80269
- var __spreadArray$6 = (window && window.__spreadArray) || function (to, from) {
80377
+ var __spreadArray$7 = (window && window.__spreadArray) || function (to, from) {
80270
80378
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
80271
80379
  to[j] = from[i];
80272
80380
  return to;
@@ -80341,7 +80449,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
80341
80449
  }
80342
80450
  finally { if (e_1) throw e_1.error; }
80343
80451
  }
80344
- return _super.prototype.merge.apply(this, __spreadArray$6([], __read$c(valuesList)));
80452
+ return _super.prototype.merge.apply(this, __spreadArray$7([], __read$c(valuesList)));
80345
80453
  };
80346
80454
  return CameraBoundsOptions;
80347
80455
  }(Options));
@@ -80830,7 +80938,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
80830
80938
  }
80831
80939
  return ar;
80832
80940
  };
80833
- var __spreadArray$7 = (window && window.__spreadArray) || function (to, from) {
80941
+ var __spreadArray$8 = (window && window.__spreadArray) || function (to, from) {
80834
80942
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
80835
80943
  to[j] = from[i];
80836
80944
  return to;
@@ -80950,6 +81058,13 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
80950
81058
  * @deprecated use `view` instead.
80951
81059
  */
80952
81060
  _this.userRegion = _this.view;
81061
+ /**
81062
+ * allows substituting a default MapControl's style transformer with custom one
81063
+ * Default style transformer is meant to update the incoming fetched style to desired state, as well as to synchronize the SDK state with style state
81064
+ * and move additional layers over
81065
+ * @internal
81066
+ */
81067
+ _this.customStyleTransform = undefined;
80953
81068
  return _this;
80954
81069
  }
80955
81070
  /**
@@ -80989,7 +81104,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
80989
81104
  finally { if (e_1) throw e_1.error; }
80990
81105
  }
80991
81106
  // Then execute the standard merge behavior.
80992
- return _super.prototype.merge.apply(this, __spreadArray$7([], __read$d(valueList)));
81107
+ return _super.prototype.merge.apply(this, __spreadArray$8([], __read$d(valueList)));
80993
81108
  };
80994
81109
  return StyleOptions;
80995
81110
  }(Options));
@@ -81047,7 +81162,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81047
81162
  }
81048
81163
  return ar;
81049
81164
  };
81050
- var __spreadArray$8 = (window && window.__spreadArray) || function (to, from) {
81165
+ var __spreadArray$9 = (window && window.__spreadArray) || function (to, from) {
81051
81166
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
81052
81167
  to[j] = from[i];
81053
81168
  return to;
@@ -81282,10 +81397,10 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81282
81397
  // won't change default behavior in Options as usually that's what desired
81283
81398
  // instead capture it here and reassign.
81284
81399
  var currentTransforms = this._transformers;
81285
- var transformersToMerge = valueList ? valueList.filter(function (value) { return value !== undefined; }).reduce(function (flattened, value) { return __spreadArray$8(__spreadArray$8([], __read$e(flattened)), __read$e(value._transformers || [])); }, []) : [];
81400
+ var transformersToMerge = valueList ? valueList.filter(function (value) { return value !== undefined; }).reduce(function (flattened, value) { return __spreadArray$9(__spreadArray$9([], __read$e(flattened)), __read$e(value._transformers || [])); }, []) : [];
81286
81401
  // Then execute the standard merge behavior.
81287
81402
  // If subscription key auth method isn't being used then the subscription key property should be undefined.
81288
- var merged = _super.prototype.merge.apply(this, __spreadArray$8([], __read$e(valueList)));
81403
+ var merged = _super.prototype.merge.apply(this, __spreadArray$9([], __read$e(valueList)));
81289
81404
  if (merged.authOptions.authType !== exports.AuthenticationType.subscriptionKey) {
81290
81405
  merged["subscription-key"] = merged.subscriptionKey = undefined;
81291
81406
  }
@@ -81297,7 +81412,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81297
81412
  if (merged.mapConfiguration && typeof merged.mapConfiguration !== 'string') {
81298
81413
  merged.mapConfiguration = __assign$7(__assign$7({}, merged.mapConfiguration), { defaultConfiguration: merged.mapConfiguration.defaultConfiguration || merged.mapConfiguration['defaultStyle'], configurations: merged.mapConfiguration.configurations || merged.mapConfiguration['styles'] });
81299
81414
  }
81300
- this._transformers = __spreadArray$8(__spreadArray$8([], __read$e(currentTransforms || [])), __read$e(transformersToMerge.filter(function (toMerge) { return !currentTransforms.includes(toMerge); })));
81415
+ this._transformers = __spreadArray$9(__spreadArray$9([], __read$e(currentTransforms || [])), __read$e(transformersToMerge.filter(function (toMerge) { return !currentTransforms.includes(toMerge); })));
81301
81416
  if (this.transformRequest && !this._transformers.includes(this.transformRequest)) {
81302
81417
  this._transformers.push(this.transformRequest);
81303
81418
  }
@@ -81545,7 +81660,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81545
81660
  }
81546
81661
  return ar;
81547
81662
  };
81548
- var __spreadArray$9 = (window && window.__spreadArray) || function (to, from) {
81663
+ var __spreadArray$a = (window && window.__spreadArray) || function (to, from) {
81549
81664
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
81550
81665
  to[j] = from[i];
81551
81666
  return to;
@@ -81598,7 +81713,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81598
81713
  var deferredLayers = Object.entries(layerGroupLayers).reduce(function (deferred, _a) {
81599
81714
  var _b = __read$f(_a, 2), groupName = _b[0], layers = _b[1];
81600
81715
  var isInInitialLayerGroup = validInitLayerGroups.includes(groupName);
81601
- return __spreadArray$9(__spreadArray$9([], __read$f(deferred)), __read$f(layers.filter(function (layer) {
81716
+ return __spreadArray$a(__spreadArray$a([], __read$f(deferred)), __read$f(layers.filter(function (layer) {
81602
81717
  var _a;
81603
81718
  // Exclude custom layers
81604
81719
  if (layer.type === 'custom')
@@ -81650,13 +81765,11 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81650
81765
  };
81651
81766
  _this.map.events.addOnce('load', _this._progressiveLoadingState.pendingVisibilityChange);
81652
81767
  };
81653
- this._onStyleData = function () {
81654
- _this._lookUpAsync(_this.map.getStyle()).then(function (style) {
81655
- _this.map.events.invoke("stylechanged", {
81656
- style: style.name,
81657
- map: _this.map,
81658
- type: "stylechanged"
81659
- });
81768
+ this._onStyleData = function (definition) {
81769
+ _this.map.events.invoke("stylechanged", {
81770
+ style: definition.name,
81771
+ map: _this.map,
81772
+ type: "stylechanged"
81660
81773
  });
81661
81774
  };
81662
81775
  /**
@@ -81763,7 +81876,8 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81763
81876
  return baseName in styleNamesMap ? styleNamesMap[baseName] : baseName;
81764
81877
  };
81765
81878
  if (!this.serviceOptions.mapConfiguration) {
81766
- newPromise = new HijackablePromise(this._request(this.serviceOptions.staticAssetsDomain, constants.stylePath + "/" + constants.styleResourcePath, "StyleDefinitions", { version: this.serviceOptions.styleDefinitionsVersion }).then(function (definitions) { return ({
81879
+ var ensureAuthentication = this.map.authentication ? this.map.authentication.initialize() : Promise.resolve();
81880
+ newPromise = new HijackablePromise(ensureAuthentication.then(function () { return _this._request(_this.serviceOptions.staticAssetsDomain, constants.stylePath + "/" + constants.styleResourcePath, "StyleDefinitions", { version: _this.serviceOptions.styleDefinitionsVersion }).then(function (definitions) { return ({
81767
81881
  version: isNaN(definitions.version) ? 0 : parseFloat(definitions.version),
81768
81882
  defaultConfiguration: definitions.defaultStyle,
81769
81883
  configurations: definitions.styles
@@ -81802,12 +81916,13 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81802
81916
  protocol: "https"
81803
81917
  }).toString(),
81804
81918
  }); })
81805
- }); }));
81919
+ }); }); }));
81806
81920
  }
81807
81921
  else if (typeof this.serviceOptions.mapConfiguration === 'string') {
81808
- newPromise = new HijackablePromise(this._request(this.serviceOptions.domain, constants.styleResourcePath + "/mapconfigurations/metadata/" + this.serviceOptions.mapConfiguration, "StyleDefinitions"
81922
+ var ensureAuthentication = this.map.authentication ? this.map.authentication.initialize() : Promise.resolve();
81923
+ newPromise = new HijackablePromise(ensureAuthentication.then(function () { return _this._request(_this.serviceOptions.domain, constants.styleResourcePath + "/mapconfigurations/metadata/" + _this.serviceOptions.mapConfiguration, "StyleDefinitions"
81809
81924
  // reassign properties from legacy mapConfiguration to new structure if needed
81810
- ).then(function (definitions) { return (__assign$8(__assign$8({}, definitions), { defaultConfiguration: definitions.defaultConfiguration || definitions['defaultStyle'], configurations: definitions.configurations || definitions['styles'] })); }));
81925
+ ).then(function (definitions) { return (__assign$8(__assign$8({}, definitions), { defaultConfiguration: definitions.defaultConfiguration || definitions['defaultStyle'], configurations: definitions.configurations || definitions['styles'] })); }); }));
81811
81926
  }
81812
81927
  else {
81813
81928
  newPromise = HijackablePromise.resolve(this.serviceOptions.mapConfiguration);
@@ -81838,23 +81953,183 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81838
81953
  if (styleDefinition.style) {
81839
81954
  return styleDefinition.style;
81840
81955
  }
81841
- throw Error("Style definition does not contain neither URL nor style object.");
81956
+ throw Error("Style definition neither contains URL nor style object.");
81957
+ };
81958
+ StyleManager.prototype.deriveNewStyleAndLayerGroups = function (previousStyle, nextStyle) {
81959
+ var _a, _b, _c, _d, _e, _f;
81960
+ // Layers in the next style with default properties that do not align with current StyleOptions
81961
+ // should be modified before they are applied to the map.
81962
+ var styleOptions = this.map.getStyle();
81963
+ var trafficOptions = this.map.getTraffic();
81964
+ var layersGroups = {};
81965
+ for (var i = 0; i < nextStyle.layers.length; i++) {
81966
+ var nextLayer = nextStyle.layers[i];
81967
+ var layerGroup = LayerGroupComparator.getLayerGroup(nextLayer);
81968
+ if (!layerGroup) {
81969
+ layersGroups[nextLayer.id] = [nextLayer];
81970
+ continue;
81971
+ }
81972
+ if (!layersGroups[layerGroup]) {
81973
+ layersGroups[layerGroup] = [];
81974
+ }
81975
+ var layerGroupLayers = layersGroups[layerGroup];
81976
+ layerGroupLayers.push(nextLayer);
81977
+ // 1. Set visiblity of fill-extrusion layers according to StyleOptions.showBuildingModels
81978
+ if (!styleOptions.showBuildingModels && nextLayer.type === "fill-extrusion") {
81979
+ nextLayer.layout = (_a = nextLayer.layout) !== null && _a !== void 0 ? _a : {};
81980
+ nextLayer.layout.visibility = "none";
81981
+ }
81982
+ else if (nextLayer.type === "fill-extrusion") {
81983
+ nextLayer.layout = (_b = nextLayer.layout) !== null && _b !== void 0 ? _b : {};
81984
+ nextLayer.layout.visibility = "visible";
81985
+ }
81986
+ // 2. Set visibility of traffic layers depending on traffic settings.
81987
+ if (trafficOptions.flow !== "none" && layerGroup) {
81988
+ if (layerGroup === "traffic_" + trafficOptions.flow && nextLayer.type == "line") {
81989
+ nextLayer.layout = (_c = nextLayer.layout) !== null && _c !== void 0 ? _c : {};
81990
+ nextLayer.layout.visibility = "visible";
81991
+ }
81992
+ }
81993
+ // 3. Set visibility of labels
81994
+ var isLabelLayerGroup = layerGroup === 'labels' || layerGroup === 'labels_places' || layerGroup === 'labels_indoor';
81995
+ if (isLabelLayerGroup && nextLayer.type === 'symbol') {
81996
+ if (styleOptions.showLabels && ((_d = nextLayer.layout) === null || _d === void 0 ? void 0 : _d.visibility) !== "none") {
81997
+ nextLayer.layout = (_e = nextLayer.layout) !== null && _e !== void 0 ? _e : {};
81998
+ nextLayer.layout.visibility = "visible";
81999
+ }
82000
+ else {
82001
+ nextLayer.layout = (_f = nextLayer.layout) !== null && _f !== void 0 ? _f : {};
82002
+ nextLayer.layout.visibility = "none";
82003
+ }
82004
+ }
82005
+ }
82006
+ return [nextStyle, layersGroups];
82007
+ };
82008
+ StyleManager.prototype.injectUserLayersIntoStyle = function (previousStyle, nextStyle, layerGroupLayers) {
82009
+ // Custom layers added to mapbox through this SDK should be carried over to the next style.
82010
+ return !previousStyle
82011
+ ? nextStyle
82012
+ : this.map.layers._getUserLayers().reduce(function (style, userLayer) {
82013
+ if (userLayer.layer instanceof WebGLLayer) {
82014
+ // mapbox custom layers cannot be serialized and preserved,
82015
+ // return to continue to the next user layer.
82016
+ return style;
82017
+ }
82018
+ var before = layerGroupLayers[userLayer.before] && layerGroupLayers[userLayer.before].length > 0
82019
+ ? layerGroupLayers[userLayer.before][0]
82020
+ : undefined;
82021
+ var layer = previousStyle.layers.find(function (layer) { return layer.id === userLayer.layer.getId(); });
82022
+ // when setStyle diff attempt is unsuccesful, _load will be called on the style that may have already injected user layers -> clean it up
82023
+ var existingLayerIdx = nextStyle.layers.findIndex(function (layer) { return layer.id === userLayer.layer.getId(); });
82024
+ if (existingLayerIdx > -1) {
82025
+ nextStyle.layers.splice(existingLayerIdx, 1);
82026
+ }
82027
+ if (layer) {
82028
+ var sourcesToCopy = new Set(Array.from(userLayer.layer._getSourceIds())
82029
+ .map(function (sourceId) { return previousStyle.sources[sourceId] ? { source: previousStyle.sources[sourceId], id: sourceId } : undefined; })
82030
+ .filter(function (source) { return source !== undefined; }));
82031
+ var insertIdx = before ? style.layers.findIndex(function (layer) { return layer.id === before.id; }) : -1;
82032
+ if (insertIdx > -1) {
82033
+ style.layers.splice(insertIdx, 0, layer);
82034
+ }
82035
+ else {
82036
+ style.layers.push(layer);
82037
+ }
82038
+ sourcesToCopy.forEach(function (_a) {
82039
+ var source = _a.source, id = _a.id;
82040
+ style.sources[id] = source;
82041
+ });
82042
+ }
82043
+ return style;
82044
+ }, __assign$8({}, nextStyle));
81842
82045
  };
81843
82046
  /**
81844
82047
  * @internal
81845
82048
  */
81846
82049
  StyleManager.prototype.setStyle = function (styleOptions, diff) {
82050
+ var _this = this;
81847
82051
  if (diff === void 0) { diff = true; }
81848
- try {
81849
- this.map._getMap().setStyle(this.getStyle(styleOptions), {
81850
- diff: diff,
81851
- stylePatch: this._stylePatch.bind(this),
81852
- validate: this.serviceOptions.validateStyle
81853
- });
82052
+ var transformStyleFunc;
82053
+ var targetDefinition = this._lookUp(styleOptions);
82054
+ if (!targetDefinition) {
82055
+ throw Error("Style definition " + styleOptions.style + " is not available.");
82056
+ }
82057
+ if (!targetDefinition.url && !targetDefinition.style) {
82058
+ throw Error("Style definition neither contains URL nor style object.");
82059
+ }
82060
+ var styleDataCallback = function () { return _this._onStyleData(targetDefinition); };
82061
+ var patchStyleEvent = function () {
82062
+ // FIXME: below diffing will be soon fixed on the maplibre side
82063
+ // If there was a previous styledata change event attached, remove it.
82064
+ // When the sprite url changes between style changes then maplibre can't perform the diff
82065
+ // In such cases it recalculate the style again. Removing previous attached
82066
+ // event listener makes sure that style changed event is not fired twice in these cases.
82067
+ _this.map.events.remove("styledata", styleDataCallback);
82068
+ _this.map.events.addOnce("styledata", styleDataCallback);
82069
+ };
82070
+ if (styleOptions && styleOptions.customStyleTransform) {
82071
+ transformStyleFunc = function (prev, next) {
82072
+ var target = styleOptions.customStyleTransform(prev, next);
82073
+ patchStyleEvent();
82074
+ return target;
82075
+ };
81854
82076
  }
81855
- catch (e) {
81856
- throw e;
82077
+ else {
82078
+ transformStyleFunc = function (previousStyle, style) {
82079
+ // make sure we always have a shallow clone to prevent mutating explicit json(rather then url) styles being set
82080
+ var nextStyle = __assign$8(__assign$8({}, style), { layers: __spreadArray$a([], __read$f(style.layers)), sources: __assign$8({}, style.sources) });
82081
+ var shouldProgressiveLoading = (styleOptions.progressiveLoading &&
82082
+ // The feature only effective at the initial load.
82083
+ !_this.map._isLoaded());
82084
+ // Shallow-clone the style object and duplicate layer.layout properties to avoid side-effects.
82085
+ if (shouldProgressiveLoading && Array.isArray(style === null || style === void 0 ? void 0 : style.layers)) {
82086
+ nextStyle = __assign$8({}, style);
82087
+ nextStyle.layers = nextStyle.layers.map(function (layer) {
82088
+ var nextLayer = __assign$8({}, layer);
82089
+ if (layer.layout) {
82090
+ nextLayer.layout = __assign$8({}, layer.layout);
82091
+ }
82092
+ return nextLayer;
82093
+ });
82094
+ }
82095
+ // 1. derive the base new style (without user layers) and layer groups
82096
+ var _a = __read$f(_this.deriveNewStyleAndLayerGroups(previousStyle, nextStyle), 2), targetStyle = _a[0], layerGroupLayers = _a[1];
82097
+ // 2. side effect: progressively render map layers to the canvas to shorten the time to the first meaningful render.
82098
+ if (shouldProgressiveLoading) {
82099
+ var initLayerGroups = styleOptions.progressiveLoadingInitialLayerGroups;
82100
+ if (Array.isArray(initLayerGroups) && initLayerGroups.length > 0) {
82101
+ _this._deferLayerGroupVisibilities(layerGroupLayers, initLayerGroups);
82102
+ }
82103
+ }
82104
+ // 3. copy user layers and sources from previous style into new one
82105
+ var targetStyleWithUserLayers = _this.injectUserLayersIntoStyle(previousStyle, targetStyle, layerGroupLayers);
82106
+ // 4. side effects: sync our control's LayerManager and SourceManager
82107
+ var nextFundamentalLayers = Object.entries(layerGroupLayers).map(function (_a) {
82108
+ var _b = __read$f(_a, 2), layerGroupId = _b[0], layers = _b[1];
82109
+ return _this._buildFundamentalLayerFrom(layers, layerGroupId);
82110
+ });
82111
+ var layerIndex = _this.map.layers._getUserLayers().reduce(function (layerIndex, userLayer) {
82112
+ var layerInsertIndex = userLayer.before ? layerIndex.findIndex(function (layer) { return layer.getId() === userLayer.before; }) : -1;
82113
+ if (layerInsertIndex > -1) {
82114
+ layerIndex.splice(layerInsertIndex, 0, userLayer.layer);
82115
+ }
82116
+ else {
82117
+ layerIndex.push(userLayer.layer);
82118
+ }
82119
+ return layerIndex;
82120
+ }, nextFundamentalLayers);
82121
+ _this.map.layers['layerIndex'] = layerIndex;
82122
+ _this.map.sources._syncSources(targetStyleWithUserLayers.sources);
82123
+ // 5. temporarily patch style data event
82124
+ patchStyleEvent();
82125
+ return targetStyleWithUserLayers;
82126
+ };
81857
82127
  }
82128
+ this.map._getMap().setStyle(targetDefinition.url || targetDefinition.style, {
82129
+ diff: diff,
82130
+ validate: this.serviceOptions.validateStyle,
82131
+ transformStyle: transformStyleFunc
82132
+ });
81858
82133
  };
81859
82134
  /**
81860
82135
  * Gets the color theme (light/dark) for the style type specified by the style options.
@@ -81919,135 +82194,6 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
81919
82194
  StyleManager.prototype.clearStyleSet = function () {
81920
82195
  this.unsetIndoorState();
81921
82196
  };
81922
- /**
81923
- * Function invoked by mapbox after a style is fetched but before it is committed to the map state.
81924
- *
81925
- * @param previousStyle The current style.
81926
- * @param nextStyle The next style which is to be applied.
81927
- * @param preserveLayer Preserve a layer from the previous style in the next style.
81928
- * @param updatePaintProperty Modify paint properties of a layer in the next style before the style is applied.
81929
- * @param updateLayoutProperty Modify layout properties of a layer in the next style before the style is applied.
81930
- * @param updateFilter Modify filter property of a layer in the next style before the style is applied.
81931
- */
81932
- StyleManager.prototype._stylePatch = function (previousStyle, nextStyle, preserveLayer, updatePaintProperty, updateLayoutProperty, updateFilter) {
81933
- var _this = this;
81934
- // Layers in the next style with default properties that do not align with current StyleOptions
81935
- // should be modified before they are applied to the map.
81936
- var styleOptions = this.map.getStyle();
81937
- var trafficOptions = this.map.getTraffic();
81938
- var shouldProgressiveLoading = (styleOptions.progressiveLoading &&
81939
- // The feature only effective at the initial load.
81940
- !this.map._isLoaded());
81941
- var setLayerVisibility = function (layer, visibility) {
81942
- var _a;
81943
- if (!shouldProgressiveLoading) {
81944
- // No need to apply the visibility change to maplibre while progressive loading is enabled.
81945
- // This can save a lot of CPU time.
81946
- updateLayoutProperty(layer.id, 'visibility', visibility);
81947
- }
81948
- layer.layout = (_a = layer.layout) !== null && _a !== void 0 ? _a : {};
81949
- layer.layout.visibility = visibility;
81950
- };
81951
- var layerGroupLayers = {};
81952
- nextStyle.layers.forEach(function (nextLayer) {
81953
- var _a;
81954
- var layerGroup = LayerGroupComparator.getLayerGroup(nextLayer);
81955
- if (layerGroup) {
81956
- // Set visibility of fill-extrusion layers according to StyleOptions.showBuildingModels
81957
- if (nextLayer.type === 'fill-extrusion') {
81958
- setLayerVisibility(nextLayer, styleOptions.showBuildingModels ? 'visible' : 'none');
81959
- }
81960
- // Set visibility of traffic layers depending on traffic settings.
81961
- if (trafficOptions.flow !== 'none' && nextLayer.type == 'line' &&
81962
- (layerGroup === "traffic_" + trafficOptions.flow ||
81963
- // Check if deprecated flow types are used and the layer is a bing-traffic layer.
81964
- // Needed for backwards compatibility in Bing styles to support deprecated flow types.
81965
- (['absolute', 'relative-delay'].includes(trafficOptions.flow) && nextLayer['source'] === "bing-traffic"))) {
81966
- setLayerVisibility(nextLayer, 'visible');
81967
- }
81968
- // Set visibility of labels
81969
- var isLabelLayerGroup = layerGroup === 'labels' || layerGroup === 'labels_places' || layerGroup === 'labels_indoor';
81970
- if (isLabelLayerGroup && nextLayer.type === 'symbol') {
81971
- var isLayerVisible = ((_a = nextLayer.layout) === null || _a === void 0 ? void 0 : _a.visibility) !== 'none';
81972
- setLayerVisibility(nextLayer, isLayerVisible && styleOptions.showLabels ? 'visible' : 'none');
81973
- }
81974
- // Once this _stylePatch returns control to maplibre the next style will be applied immediately in the same context.
81975
- // To avoid potential data races update LayerManager with new a new set of FundamentalMapLayers from here instead of
81976
- // waiting for a styledata.load event to trigger a sync in a different context.
81977
- if (layerGroupLayers[layerGroup]) {
81978
- layerGroupLayers[layerGroup].push(nextLayer);
81979
- }
81980
- else {
81981
- layerGroupLayers[layerGroup] = [nextLayer];
81982
- }
81983
- }
81984
- });
81985
- if (shouldProgressiveLoading) {
81986
- var initLayerGroups = styleOptions.progressiveLoadingInitialLayerGroups;
81987
- if (Array.isArray(initLayerGroups) && initLayerGroups.length > 0) {
81988
- this._deferLayerGroupVisibilities(layerGroupLayers, initLayerGroups);
81989
- }
81990
- }
81991
- // A FundamentalMapLayer (grouped layer) representation of the next style must be built.
81992
- var previousLayers = this.map.layers.getLayers();
81993
- var nextLayers = Object.entries(layerGroupLayers).map(function (_a) {
81994
- var _b = __read$f(_a, 2), layerGroupName = _b[0], layerGroupMapboxLayers = _b[1];
81995
- return _this._buildFundamentalLayerFrom(layerGroupMapboxLayers, layerGroupName);
81996
- });
81997
- // Update FundamentalMapLayers in LayerManager
81998
- var userLayers = this.map.layers._getUserLayers();
81999
- var layersToRemove = previousLayers.filter(function (c) {
82000
- return (nextLayers.findIndex(function (n) { return c.getId() === n.getId(); }) < 0 &&
82001
- userLayers.findIndex(function (n) { return c.getId() === n.layer.getId(); }) < 0);
82002
- });
82003
- var prevNextIntersection = nextLayers.filter(function (n) { return previousLayers.find(function (c) { return c.getId() === n.getId(); }); });
82004
- var ePrevNextIntersection = prevNextIntersection.entries();
82005
- var replace = ePrevNextIntersection.next();
82006
- nextLayers.forEach(function (newFundamentalLayer) {
82007
- if (replace.value && replace.value[1].getId() === newFundamentalLayer.getId()) {
82008
- // Replace the existing layer with this ID with the new one.
82009
- var insertBefore = previousLayers.findIndex(function (l) { return l.getId() === newFundamentalLayer.getId(); });
82010
- _this.map.layers.remove(newFundamentalLayer.getId());
82011
- _this.map.layers.add(newFundamentalLayer, previousLayers[insertBefore].getId());
82012
- replace = ePrevNextIntersection.next();
82013
- }
82014
- else {
82015
- if (replace.value) {
82016
- // Insert new layer before the next common layer.
82017
- _this.map.layers.add(newFundamentalLayer, replace.value[1]);
82018
- }
82019
- else {
82020
- _this.map.layers.add(newFundamentalLayer);
82021
- }
82022
- }
82023
- });
82024
- layersToRemove.forEach(function (layer) {
82025
- _this.map.layers.remove(layer);
82026
- });
82027
- // Layers added to mapbox through this SDK since loading the last style should be
82028
- // carried over to the next style.
82029
- userLayers.forEach(function (userLayer) {
82030
- if (userLayer.layer instanceof WebGLLayer) {
82031
- // mapbox custom layers cannot be serialized and preserved,
82032
- // return to continue to the next user layer.
82033
- return;
82034
- }
82035
- var before = undefined;
82036
- if (_this.map.layers.getLayerById(userLayer.before)) {
82037
- var beforeCandidates = _this.map.layers.getLayerById(userLayer.before)._buildLayers();
82038
- before = (beforeCandidates.length > 0) ? beforeCandidates[0] : undefined;
82039
- }
82040
- preserveLayer(userLayer.layer.getId(), before === null || before === void 0 ? void 0 : before.id);
82041
- _this.map.layers.move(userLayer.layer, userLayer.before);
82042
- });
82043
- this.map.sources._syncSources(nextStyle.sources);
82044
- // If there was a previous styledata change event attached, remove it.
82045
- // When the sprite url changes between style changes then mapbox can't perform the diff
82046
- // In such cases it recalculate the style again. Removing previous attached
82047
- // event listener makes sure that style changed event is not fired twice in these cases.
82048
- this.map.events.remove("styledata", this._onStyleData);
82049
- this.map.events.addOnce("styledata", this._onStyleData);
82050
- };
82051
82197
  StyleManager.prototype._buildFundamentalLayerFrom = function (layers, id) {
82052
82198
  if (layers && layers.length > 0) {
82053
82199
  var newLayer = new FundamentalMapLayer(layers, id);
@@ -82351,7 +82497,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
82351
82497
  }
82352
82498
  return ar;
82353
82499
  };
82354
- var __spreadArray$a = (window && window.__spreadArray) || function (to, from) {
82500
+ var __spreadArray$b = (window && window.__spreadArray) || function (to, from) {
82355
82501
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
82356
82502
  to[j] = from[i];
82357
82503
  return to;
@@ -82481,6 +82627,9 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
82481
82627
  showLogo: _this.styleOptions.showLogo,
82482
82628
  customAttribution: _this.styleOptions.customAttribution
82483
82629
  });
82630
+ _this.controls.add(_this.copyrightControl, {
82631
+ position: exports.ControlPosition.NonFixed
82632
+ });
82484
82633
  // Initialize state of map
82485
82634
  // --> Initialize the authentication manager
82486
82635
  var authManInit = _this.authentication ?
@@ -82508,17 +82657,14 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
82508
82657
  _this.map.showTileBoundaries = _this.styleOptions.showTileBoundaries;
82509
82658
  _this.localizedStringsPromise = Localizer.getStrings(_this.styleOptions.language);
82510
82659
  authManInit
82511
- .then(function () { return _this.styles.initStyleset(); })
82660
+ // reuses this.styles.initPromise if initStyleset is already called
82661
+ .then(function () { return _this.styles.definitions(); })
82512
82662
  .then(function (definitions) {
82513
82663
  // Check that the map hasn't been removed for any reason.
82514
82664
  // If so no need to finish styling the map.
82515
82665
  if (_this.removed) {
82516
82666
  return;
82517
82667
  }
82518
- // Add controls after initStyleset to prevent redundant initStyleset calls
82519
- _this.controls.add(_this.copyrightControl, {
82520
- position: exports.ControlPosition.NonFixed
82521
- });
82522
82668
  if (_this.authentication && !_this.authentication.getToken()) {
82523
82669
  throw new Error("AuthenticationManager finished initializing, but no token is available");
82524
82670
  }
@@ -82578,6 +82724,16 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
82578
82724
  }
82579
82725
  return _this;
82580
82726
  }
82727
+ Object.defineProperty(Map.prototype, "isDisposed", {
82728
+ /**
82729
+ * Returns true if the map has been disposed.
82730
+ */
82731
+ get: function () {
82732
+ return this.removed;
82733
+ },
82734
+ enumerable: false,
82735
+ configurable: true
82736
+ });
82581
82737
  /**
82582
82738
  * Returns the HTMLCanvasElement that the map is drawn to.
82583
82739
  */
@@ -82614,9 +82770,17 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
82614
82770
  else {
82615
82771
  this.accessibleMapDelegate.removeFromMap();
82616
82772
  }
82617
- if (this.styles.serviceOptions.mapConfiguration !== this.serviceOptions.mapConfiguration) {
82773
+ var shouldReloadStyle = this.styles.serviceOptions.mapConfiguration !== this.serviceOptions.mapConfiguration
82774
+ || this.styles.serviceOptions.staticAssetsDomain !== this.serviceOptions.staticAssetsDomain
82775
+ || this.styles.serviceOptions.styleDefinitionsVersion !== this.serviceOptions.styleDefinitionsVersion
82776
+ || this.styles.serviceOptions.domain !== this.serviceOptions.domain
82777
+ || this.styles.serviceOptions.styleAPIVersion !== this.serviceOptions.styleAPIVersion;
82778
+ // NOTE: only perform a reload when the style dependent properties are changed
82779
+ //|| this.styles.serviceOptions.validateStyle !== this.serviceOptions.validateStyle
82780
+ //|| this.styles.serviceOptions.transformRequest !== this.serviceOptions.transformRequest
82781
+ this.styles.serviceOptions = this.serviceOptions;
82782
+ if (shouldReloadStyle) {
82618
82783
  this.styles.initPromise = null;
82619
- this.styles.serviceOptions.mapConfiguration = this.serviceOptions.mapConfiguration;
82620
82784
  this.setStyle({});
82621
82785
  }
82622
82786
  };
@@ -83168,7 +83332,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
83168
83332
  urls = layer.getOptions().subdomains || [];
83169
83333
  }
83170
83334
  // Add the tile urls to the layer, but don't update the map yet.
83171
- urls.push.apply(urls, __spreadArray$a([], __read$g(tileSources)));
83335
+ urls.push.apply(urls, __spreadArray$b([], __read$g(tileSources)));
83172
83336
  layer._setOptionsNoUpdate({
83173
83337
  subdomains: urls
83174
83338
  });
@@ -83689,7 +83853,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
83689
83853
  }
83690
83854
  return ar;
83691
83855
  };
83692
- var __spreadArray$b = (window && window.__spreadArray) || function (to, from) {
83856
+ var __spreadArray$c = (window && window.__spreadArray) || function (to, from) {
83693
83857
  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
83694
83858
  to[j] = from[i];
83695
83859
  return to;
@@ -83835,7 +83999,7 @@ EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous po
83835
83999
  lineLength = 50;
83836
84000
  }
83837
84001
  var lines = c.split(/<(tr|div|br|li|h[0-9]|p>)/);
83838
- longestStringLength = Math.max.apply(Math, __spreadArray$b([], __read$h((lines.map(function (el) { return el.replace(/<[a-zA-Z0-9\s=\/]+>/g, "").length; }))))) - 1;
84002
+ longestStringLength = Math.max.apply(Math, __spreadArray$c([], __read$h((lines.map(function (el) { return el.replace(/<[a-zA-Z0-9\s=\/]+>/g, "").length; }))))) - 1;
83839
84003
  var w = Math.ceil(longestStringLength * 3.5);
83840
84004
  if (w < width) {
83841
84005
  width = w;