bruce-cesium 4.8.7 → 4.8.8

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.
@@ -1,6 +1,6 @@
1
- import { BruceEvent, Cartes, Entity as Entity$1, Carto, Geometry, MathUtils, LRUCache, Api, Calculator, ClientFile, EntityTag, EntityType, ObjectUtils, Style, ProjectViewTile, DelayQueue, EntityLod, Bounds, ZoomControl, EntityRelationType, ENVIRONMENT, EntityHistoricData, Tileset, EntityCoords, DataLab, EntitySource, MenuItem, EntityRelation, ProgramKey, ProjectView, ProjectViewBookmark, Camera, ProjectViewLegacyTile, AbstractApi, Session, EntityAttribute, EntityAttachment, EntityAttachmentType } from 'bruce-models';
1
+ import { BruceEvent, Cartes, Entity as Entity$1, Carto, Geometry, MathUtils, LRUCache, Api, Calculator, ClientFile, EntityTag, EntityType, ObjectUtils, Style, ProjectViewTile, DelayQueue, EntityLod, Bounds, ZoomControl, EntityRelationType, ENVIRONMENT, EntityHistoricData, Tileset, EntityCoords, DataLab, EntitySource, MenuItem, EntityRelation, ProgramKey, ProjectView, ProjectViewBookmark, Camera, ProjectViewLegacyTile, EntityAttribute, EntityAttachment, EntityAttachmentType, AbstractApi, Session } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, JulianDate, Entity, DistanceDisplayCondition, ClassificationType, ArcType, CornerType, ShadowMode, ConstantProperty, ConstantPositionProperty, ColorBlendMode, HeadingPitchRoll, Transforms, Model, PolygonHierarchy, PolylineGraphics, ColorMaterialProperty, HorizontalOrigin, VerticalOrigin, SceneMode, Primitive, Cesium3DTileFeature, GeoJsonDataSource, Cesium3DTileColorBlendMode, HeadingPitchRange, Cesium3DTileStyle, Ion, KmlDataSource, SceneTransforms, OrthographicFrustum, EasingFunction, NearFarScalar, EllipsoidTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, IonImageryProvider, CesiumTerrainProvider, CesiumInspector, defined, ClockRange, Cesium3DTileset, Matrix4, Matrix3, IonResource, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, BoundingSphere, GeometryInstance, Quaternion, ScreenSpaceEventHandler, ScreenSpaceEventType, CzmlDataSource, Intersect, Fullscreen } from 'cesium';
3
+ import { Cartographic, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, JulianDate, Entity, DistanceDisplayCondition, HorizontalOrigin, VerticalOrigin, ConstantProperty, ClassificationType, ConstantPositionProperty, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, ColorMaterialProperty, ColorBlendMode, HeadingPitchRoll, Transforms, Model, Primitive, Cesium3DTileFeature, SceneMode, GeoJsonDataSource, Cesium3DTileColorBlendMode, HeadingPitchRange, Cesium3DTileStyle, Ion, KmlDataSource, SceneTransforms, OrthographicFrustum, EasingFunction, NearFarScalar, EllipsoidTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, IonImageryProvider, CesiumTerrainProvider, Cesium3DTileset, Matrix4, Matrix3, IonResource, CesiumInspector, defined, ClockRange, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, BoundingSphere, GeometryInstance, Quaternion, ScreenSpaceEventHandler, ScreenSpaceEventType, CzmlDataSource, Intersect, Fullscreen } from 'cesium';
4
4
 
5
5
  /*! *****************************************************************************
6
6
  Copyright (c) Microsoft Corporation. All rights reserved.
@@ -10322,11 +10322,18 @@ var VisualsRegister;
10322
10322
  var Register = /** @class */ (function () {
10323
10323
  function Register(params) {
10324
10324
  this.id = ObjectUtils.UId();
10325
+ this.disposed = false;
10325
10326
  this.rego = {};
10326
10327
  this.onUpdate = null;
10327
10328
  // Entity ID + Menu Item ID -> State.
10328
10329
  // If an Entity ID state is set without a Menu Item ID, then it acts as a default for all Menu Items.
10329
10330
  this.states = {};
10331
+ // Queue of Entity updates to process in batches to avoid overloading the render loop.
10332
+ this.updateQueue = [];
10333
+ // Settings related to those Entities in the queue.
10334
+ // This lets us modify the update without re-adding the item to the queue if it's already in it.
10335
+ this.updateQueueSettings = {};
10336
+ this.updateQueueInterval = null;
10330
10337
  this.viewer = params.viewer;
10331
10338
  this.apiGetters = params.apiGetters;
10332
10339
  this.cameraCullerDispose = VisualRegisterCuller.Monitor({
@@ -10340,6 +10347,13 @@ var VisualsRegister;
10340
10347
  enumerable: false,
10341
10348
  configurable: true
10342
10349
  });
10350
+ Object.defineProperty(Register.prototype, "Disposed", {
10351
+ get: function () {
10352
+ return this.disposed;
10353
+ },
10354
+ enumerable: false,
10355
+ configurable: true
10356
+ });
10343
10357
  Object.defineProperty(Register.prototype, "Viewer", {
10344
10358
  get: function () {
10345
10359
  return this.viewer;
@@ -10364,6 +10378,76 @@ var VisualsRegister;
10364
10378
  enumerable: false,
10365
10379
  configurable: true
10366
10380
  });
10381
+ Register.prototype.queueUpdate = function (update) {
10382
+ if (this.Disposed) {
10383
+ return;
10384
+ }
10385
+ // Merge settings from existing queued item.
10386
+ var settings = this.updateQueueSettings[update.entityId];
10387
+ if (settings !== true) {
10388
+ if (update.refresh === true) {
10389
+ settings = true;
10390
+ }
10391
+ else if (update.refresh === false) {
10392
+ if (!settings) {
10393
+ settings = false;
10394
+ }
10395
+ }
10396
+ else {
10397
+ if (!settings) {
10398
+ settings = {};
10399
+ }
10400
+ if (update.refresh.highlighted) {
10401
+ settings.highlighted = true;
10402
+ }
10403
+ if (update.refresh.selected) {
10404
+ settings.selected = true;
10405
+ }
10406
+ if (update.refresh.opacity) {
10407
+ settings.opacity = true;
10408
+ }
10409
+ }
10410
+ }
10411
+ this.updateQueueSettings[update.entityId] = settings;
10412
+ // Queue ID if it's not already in the queue.
10413
+ if (!this.updateQueue.includes(update.entityId)) {
10414
+ this.updateQueue.push(update.entityId);
10415
+ this.pingUpdateQueue();
10416
+ }
10417
+ };
10418
+ Register.prototype.pingUpdateQueue = function () {
10419
+ var _this = this;
10420
+ if (this.updateQueueInterval) {
10421
+ return;
10422
+ }
10423
+ var BATCH_SIZE = 300;
10424
+ if (this.updateQueue.length) {
10425
+ this.updateQueueInterval = setInterval(function () {
10426
+ if (_this.Disposed || (!_this.viewer || !_this.viewer.scene || _this.viewer.isDestroyed())) {
10427
+ clearInterval(_this.updateQueueInterval);
10428
+ _this.updateQueueInterval = null;
10429
+ return;
10430
+ }
10431
+ var batch = _this.updateQueue.splice(0, BATCH_SIZE);
10432
+ var cache = {};
10433
+ for (var i = 0; i < batch.length; i++) {
10434
+ var entityId = batch[i];
10435
+ // Check if still registered.
10436
+ if (!_this.rego[entityId] || !_this.rego[entityId].length) {
10437
+ continue;
10438
+ }
10439
+ updateEntity(_this.viewer, entityId, _this, _this.updateQueueSettings[entityId] == null ? false : _this.updateQueueSettings[entityId], cache);
10440
+ _this.updateQueueSettings[entityId] = null;
10441
+ delete _this.updateQueueSettings[entityId];
10442
+ }
10443
+ _this.viewer.scene.requestRender();
10444
+ if (!_this.updateQueue.length) {
10445
+ clearInterval(_this.updateQueueInterval);
10446
+ _this.updateQueueInterval = null;
10447
+ }
10448
+ }, 10);
10449
+ }
10450
+ };
10367
10451
  /**
10368
10452
  * Returns the applied visual state for a given Entity ID.
10369
10453
  * This is a combination of a Menu Item specific state and a general state.
@@ -10428,13 +10512,10 @@ var VisualsRegister;
10428
10512
  });
10429
10513
  }
10430
10514
  else {
10431
- var cache = {};
10432
- var regos = this.GetRegos({
10433
- entityId: state.entityId
10515
+ this.queueUpdate({
10516
+ entityId: state.entityId,
10517
+ refresh: refresh
10434
10518
  });
10435
- for (var i = 0; i < regos.length; i++) {
10436
- updateEntity(this.viewer, state.entityId, this, refresh, cache);
10437
- }
10438
10519
  }
10439
10520
  // Trigger update event.
10440
10521
  if (this.onUpdate) {
@@ -10503,15 +10584,16 @@ var VisualsRegister;
10503
10584
  if (changed) {
10504
10585
  if (updateAll) {
10505
10586
  this.updateAllEntities({
10506
- refresh: refresh
10587
+ refresh: __assign({}, refresh)
10507
10588
  });
10508
10589
  }
10509
10590
  else {
10510
- var cache = {};
10511
10591
  for (var i = 0; i < entityIds.length; i++) {
10512
- updateEntity(this.viewer, entityIds[i], this, refresh, cache);
10592
+ this.queueUpdate({
10593
+ entityId: entityIds[i],
10594
+ refresh: __assign({}, refresh)
10595
+ });
10513
10596
  }
10514
- this.viewer.scene.requestRender();
10515
10597
  }
10516
10598
  // Trigger update event.
10517
10599
  if (this.onUpdate) {
@@ -10710,22 +10792,24 @@ var VisualsRegister;
10710
10792
  uncull: false
10711
10793
  });
10712
10794
  this.cameraCullerDispose = null;
10795
+ clearInterval(this.updateQueueInterval);
10796
+ this.updateQueueInterval = null;
10797
+ this.disposed = true;
10713
10798
  };
10714
10799
  Register.prototype.ForceUpdate = function (params) {
10715
10800
  var _a;
10716
10801
  var entityIds = params.entityIds, requestRender = params.requestRender, refreshColors = params.refreshColors;
10717
- var cache = {};
10718
10802
  for (var i = 0; i < entityIds.length; i++) {
10719
10803
  var entityId = entityIds[i];
10720
- updateEntity(this.viewer, entityId, this, true, cache);
10804
+ this.queueUpdate({
10805
+ entityId: entityId,
10806
+ refresh: true
10807
+ });
10721
10808
  (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
10722
10809
  type: EVisualUpdateType.Update,
10723
10810
  entityId: entityId
10724
10811
  });
10725
10812
  }
10726
- if (requestRender != false) {
10727
- this.viewer.scene.requestRender();
10728
- }
10729
10813
  };
10730
10814
  /**
10731
10815
  * Marks given entityIds as either labelled or not labelled.
@@ -10734,7 +10818,6 @@ var VisualsRegister;
10734
10818
  */
10735
10819
  Register.prototype.SetLabelled = function (params) {
10736
10820
  var labelled = params.labelled, entityIds = params.entityIds, requestRender = params.requestRender, menuItemId = params.menuItemId;
10737
- var cache = {};
10738
10821
  for (var i = 0; i < entityIds.length; i++) {
10739
10822
  var id = entityIds[i];
10740
10823
  var state = this.GetState({
@@ -10749,12 +10832,12 @@ var VisualsRegister;
10749
10832
  labelled: labelled ? true : null
10750
10833
  });
10751
10834
  if (doLabel) {
10752
- updateEntity(this.viewer, id, this, false, cache);
10835
+ this.queueUpdate({
10836
+ entityId: id,
10837
+ refresh: false
10838
+ });
10753
10839
  }
10754
10840
  }
10755
- if (requestRender != false) {
10756
- this.viewer.scene.requestRender();
10757
- }
10758
10841
  };
10759
10842
  /**
10760
10843
  * Returns if given entity id is labelled.
@@ -10773,7 +10856,6 @@ var VisualsRegister;
10773
10856
  * @param params
10774
10857
  */
10775
10858
  Register.prototype.ClearLabelled = function (params) {
10776
- var cache = {};
10777
10859
  var toUpdateIds = [];
10778
10860
  this.ForEachState(function (state) {
10779
10861
  if (state.labelled == null || state.labelled === undefined) {
@@ -10786,10 +10868,10 @@ var VisualsRegister;
10786
10868
  });
10787
10869
  for (var i = 0; i < toUpdateIds.length; i++) {
10788
10870
  var id = toUpdateIds[i];
10789
- updateEntity(this.viewer, id, this, false, cache);
10790
- }
10791
- if ((params === null || params === void 0 ? void 0 : params.requestRender) != false) {
10792
- this.viewer.scene.requestRender();
10871
+ this.queueUpdate({
10872
+ entityId: id,
10873
+ refresh: false
10874
+ });
10793
10875
  }
10794
10876
  };
10795
10877
  /**
@@ -11208,7 +11290,10 @@ var VisualsRegister;
11208
11290
  markEntity(this, rego, rego.visual, false);
11209
11291
  // Run any updates on the visual based on the calculated state.
11210
11292
  // Eg: visibility, opacity, selection, etc.
11211
- updateEntity(this.viewer, entityId, this, true);
11293
+ this.queueUpdate({
11294
+ entityId: entityId,
11295
+ refresh: true
11296
+ });
11212
11297
  (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({
11213
11298
  rego: rego,
11214
11299
  type: EVisualUpdateType.Add,
@@ -11297,7 +11382,6 @@ var VisualsRegister;
11297
11382
  if (retainTagIds == null || retainTagIds === undefined) {
11298
11383
  retainTagIds = [];
11299
11384
  }
11300
- var cache = {};
11301
11385
  // TODO: refactor.
11302
11386
  // Currently this was made by merging two functions.
11303
11387
  if (menuItemId && !entityId) {
@@ -11330,7 +11414,10 @@ var VisualsRegister;
11330
11414
  rego: rego
11331
11415
  });
11332
11416
  if (doesInclude) {
11333
- updateEntity(this.viewer, entityId_4, this, false, cache);
11417
+ this.queueUpdate({
11418
+ entityId: entityId_4,
11419
+ refresh: false
11420
+ });
11334
11421
  }
11335
11422
  }
11336
11423
  }
@@ -11361,7 +11448,10 @@ var VisualsRegister;
11361
11448
  });
11362
11449
  this_1.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== menuItemId_2; });
11363
11450
  if (doUpdate && menuItemId_2) {
11364
- updateEntity(this_1.viewer, entityId, this_1, false, cache);
11451
+ this_1.queueUpdate({
11452
+ entityId: entityId,
11453
+ refresh: false
11454
+ });
11365
11455
  }
11366
11456
  };
11367
11457
  var this_1 = this;
@@ -11392,14 +11482,14 @@ var VisualsRegister;
11392
11482
  rego: rego
11393
11483
  });
11394
11484
  if (doUpdate && menuItemId) {
11395
- updateEntity(this.viewer, entityId_5, this, false, cache);
11485
+ this.queueUpdate({
11486
+ entityId: entityId_5,
11487
+ refresh: false
11488
+ });
11396
11489
  }
11397
11490
  }
11398
11491
  }
11399
11492
  }
11400
- if (requestRender != false) {
11401
- this.viewer.scene.requestRender();
11402
- }
11403
11493
  };
11404
11494
  /**
11405
11495
  * Returns an array of drilled visuals associated with this register.
@@ -11469,16 +11559,15 @@ var VisualsRegister;
11469
11559
  }
11470
11560
  };
11471
11561
  Register.prototype.updateAllEntities = function (params) {
11472
- var cache = {};
11473
11562
  for (var entityId in this.rego) {
11474
11563
  var regos = this.rego[entityId];
11475
11564
  if (regos && regos.length) {
11476
- updateEntity(this.viewer, entityId, this, (params === null || params === void 0 ? void 0 : params.refresh) == null ? true : params.refresh, cache);
11565
+ this.queueUpdate({
11566
+ entityId: entityId,
11567
+ refresh: (params === null || params === void 0 ? void 0 : params.refresh) == null ? true : params.refresh
11568
+ });
11477
11569
  }
11478
11570
  }
11479
- if ((params === null || params === void 0 ? void 0 : params.requestRender) != false) {
11480
- this.viewer.scene.requestRender();
11481
- }
11482
11571
  };
11483
11572
  /**
11484
11573
  * Sets opacity for given set of entities.
@@ -11490,54 +11579,23 @@ var VisualsRegister;
11490
11579
  var opacity = params.opacity, entityIds = params.entityIds, menuItemId = params.menuItemId, requestRender = params.requestRender;
11491
11580
  for (var _i = 0, entityIds_2 = entityIds; _i < entityIds_2.length; _i++) {
11492
11581
  var entityId = entityIds_2[_i];
11493
- if (!menuItemId) {
11494
- this.setStateValues({
11495
- entityId: entityId,
11496
- // Null means it will be deleted from the object.
11497
- opacity: opacity == 1 ? null : opacity
11498
- });
11499
- }
11500
- var regos = this.rego[entityId];
11501
- if (regos && regos.length) {
11502
- for (var _b = 0, regos_2 = regos; _b < regos_2.length; _b++) {
11503
- var rego = regos_2[_b];
11504
- if (rego.visual &&
11505
- (!menuItemId || menuItemId.includes(rego.menuItemId))) {
11506
- if (menuItemId) {
11507
- this.setStateValues({
11508
- entityId: entityId,
11509
- menuItemId: menuItemId,
11510
- // Null means it will be deleted from the object.
11511
- opacity: opacity == 1 ? null : opacity
11512
- });
11513
- }
11514
- if (opacity == 1 || opacity == null) {
11515
- EntityUtils.RevertOpacity({
11516
- entity: rego.visual,
11517
- viewer: this.viewer,
11518
- requestRender: false
11519
- });
11520
- }
11521
- else {
11522
- EntityUtils.SetOpacity({
11523
- entity: rego.visual,
11524
- opacity: opacity,
11525
- viewer: this.viewer,
11526
- requestRender: false
11527
- });
11528
- }
11529
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
11530
- rego: rego,
11531
- type: EVisualUpdateType.Update,
11532
- entityId: rego.entityId,
11533
- opacity: opacity
11534
- });
11535
- }
11582
+ this.setStateValues({
11583
+ entityId: entityId,
11584
+ menuItemId: menuItemId,
11585
+ // Null means it will be deleted from the object.
11586
+ opacity: opacity == 1 ? null : opacity
11587
+ });
11588
+ (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
11589
+ type: EVisualUpdateType.Update,
11590
+ entityId: entityId,
11591
+ opacity: opacity
11592
+ });
11593
+ this.queueUpdate({
11594
+ entityId: entityId,
11595
+ refresh: {
11596
+ opacity: true
11536
11597
  }
11537
- }
11538
- }
11539
- if (requestRender != false) {
11540
- this.viewer.scene.requestRender();
11598
+ });
11541
11599
  }
11542
11600
  };
11543
11601
  /**
@@ -11579,32 +11637,19 @@ var VisualsRegister;
11579
11637
  };
11580
11638
  Register.prototype.ClearOpacity = function (params) {
11581
11639
  var _this = this;
11582
- var changed = false;
11583
- var cleared = [];
11640
+ var clearedIds = [];
11584
11641
  this.ForEachState(function (state, key) {
11585
- var regos = _this.rego[state.entityId];
11586
- if (regos && regos.length) {
11587
- for (var _i = 0, regos_3 = regos; _i < regos_3.length; _i++) {
11588
- var rego = regos_3[_i];
11589
- if (state.menuItemId && rego.menuItemId !== state.menuItemId) {
11590
- continue;
11642
+ if (!clearedIds.includes(state.entityId) && state.opacity != null) {
11643
+ _this.queueUpdate({
11644
+ entityId: state.entityId,
11645
+ refresh: {
11646
+ opacity: true
11591
11647
  }
11592
- if ((rego === null || rego === void 0 ? void 0 : rego.visual) && !cleared.includes(rego)) {
11593
- EntityUtils.RevertOpacity({
11594
- entity: rego.visual,
11595
- viewer: _this.viewer,
11596
- requestRender: false
11597
- });
11598
- changed = true;
11599
- cleared.push(rego);
11600
- }
11601
- }
11648
+ });
11649
+ clearedIds.push(state.entityId);
11602
11650
  }
11603
11651
  delete state.opacity;
11604
11652
  });
11605
- if ((params === null || params === void 0 ? void 0 : params.requestRender) != false && changed) {
11606
- this.viewer.scene.requestRender();
11607
- }
11608
11653
  };
11609
11654
  /**
11610
11655
  * Returns a dictionary containing entityId -> opacity values.
@@ -29264,7 +29309,7 @@ var WidgetViewBar = /** @class */ (function (_super) {
29264
29309
  return WidgetViewBar;
29265
29310
  }(Widget.AWidget));
29266
29311
 
29267
- var VERSION = "4.8.7";
29312
+ var VERSION = "4.8.8";
29268
29313
 
29269
29314
  export { VERSION, CesiumViewMonitor, ViewerUtils, ViewerEventTracker, MenuItemManager, EntityRenderEngine, EntityRenderEnginePoint, EntityRenderEnginePolyline, EntityRenderEnginePolygon, EntityRenderEngineModel3d, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, DataLabRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, GoogleSearchRenderManager, RelationsRenderManager, SharedGetters, CesiumParabola, EntityLabel, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, CESIUM_TIMELINE_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, CesiumEntityStyler, CesiumAnimatedProperty, CesiumAnimatedInOut, Draw3dPolygon, Draw3dPolyline, MeasureCreator, Widget, VIEWER_BOOKMARKS_WIDGET_KEY, WidgetBookmarks, WidgetBranding, WidgetCursorBar, WidgetEmbeddedInfoView, WidgetInfoView, WidgetNavCompass$$1 as WidgetNavCompass, VIEWER_VIEW_BAR_WIDGET_KEY, WidgetViewBar, WidgetControlViewBar, WidgetControlViewBarSearch, VIEWER_LEFT_PANEL_WIDGET_KEY, VIEWER_LEFT_PANEL_CSS_VAR_LEFT, WidgetLeftPanel, WidgetLeftPanelTab, WidgetLeftPanelTabBookmarks };
29270
29315
  //# sourceMappingURL=bruce-cesium.es5.js.map