bruce-cesium 2.2.6 → 2.2.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.
Files changed (52) hide show
  1. package/dist/bruce-cesium.es5.js +3294 -107
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +3293 -104
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +3 -1
  6. package/dist/lib/bruce-cesium.js.map +1 -1
  7. package/dist/lib/rendering/view-render-engine.js +24 -16
  8. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  9. package/dist/lib/rendering/visuals-register.js +5 -0
  10. package/dist/lib/rendering/visuals-register.js.map +1 -1
  11. package/dist/lib/utils/drawing-utils.js +86 -0
  12. package/dist/lib/utils/drawing-utils.js.map +1 -1
  13. package/dist/lib/utils/view-utils.js +37 -0
  14. package/dist/lib/utils/view-utils.js.map +1 -1
  15. package/dist/lib/viewer/viewer-utils.js +76 -1
  16. package/dist/lib/viewer/viewer-utils.js.map +1 -1
  17. package/dist/lib/widgets/common/draw-3d-polygon.js +466 -0
  18. package/dist/lib/widgets/common/draw-3d-polygon.js.map +1 -0
  19. package/dist/lib/widgets/common/draw-3d-polyline.js +405 -0
  20. package/dist/lib/widgets/common/draw-3d-polyline.js.map +1 -0
  21. package/dist/lib/widgets/common/measure-creator.js +418 -0
  22. package/dist/lib/widgets/common/measure-creator.js.map +1 -0
  23. package/dist/lib/widgets/widget-bookmarks.js +346 -0
  24. package/dist/lib/widgets/widget-bookmarks.js.map +1 -0
  25. package/dist/lib/widgets/widget-branding.js +176 -0
  26. package/dist/lib/widgets/widget-branding.js.map +1 -0
  27. package/dist/lib/widgets/widget-cursorbar.js +291 -0
  28. package/dist/lib/widgets/widget-cursorbar.js.map +1 -0
  29. package/dist/lib/widgets/widget-info-view.js +476 -0
  30. package/dist/lib/widgets/widget-info-view.js.map +1 -0
  31. package/dist/lib/widgets/widget-nav-compass.js +250 -0
  32. package/dist/lib/widgets/widget-nav-compass.js.map +1 -0
  33. package/dist/lib/widgets/widget-searchbar.js +409 -0
  34. package/dist/lib/widgets/widget-searchbar.js.map +1 -0
  35. package/dist/lib/widgets/widget.js +50 -0
  36. package/dist/lib/widgets/widget.js.map +1 -0
  37. package/dist/types/bruce-cesium.d.ts +3 -1
  38. package/dist/types/rendering/visuals-register.d.ts +2 -1
  39. package/dist/types/utils/drawing-utils.d.ts +13 -0
  40. package/dist/types/utils/view-utils.d.ts +7 -0
  41. package/dist/types/viewer/viewer-utils.d.ts +25 -1
  42. package/dist/types/widgets/common/draw-3d-polygon.d.ts +62 -0
  43. package/dist/types/widgets/common/draw-3d-polyline.d.ts +47 -0
  44. package/dist/types/widgets/common/measure-creator.d.ts +60 -0
  45. package/dist/types/widgets/widget-bookmarks.d.ts +39 -0
  46. package/dist/types/widgets/widget-branding.d.ts +14 -0
  47. package/dist/types/widgets/widget-cursorbar.d.ts +27 -0
  48. package/dist/types/widgets/widget-info-view.d.ts +21 -0
  49. package/dist/types/widgets/widget-nav-compass.d.ts +27 -0
  50. package/dist/types/widgets/widget-searchbar.d.ts +17 -0
  51. package/dist/types/widgets/widget.d.ts +26 -0
  52. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
- import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
1
+ import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera, AbstractApi, EntityAttachment, EntityAttachmentType, EntityAttribute } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, HeightReference, DistanceDisplayCondition, NearFarScalar, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, SceneMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, PolygonPipeline, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, OrthographicFrustum, JulianDate, CesiumInspector, defined, EllipsoidGeodesic, sampleTerrainMostDetailed, Cesium3DTileset, Model, ColorMaterialProperty, Matrix3, Matrix4, EasingFunction, GeometryInstance, IonResource } from 'cesium';
3
+ import { Cartographic, Cartesian3, SceneMode, Math as Math$1, Cartesian2, CallbackProperty, Color, Rectangle, HeightReference, DistanceDisplayCondition, NearFarScalar, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, Cesium3DTileStyle, OrthographicFrustum, JulianDate, KmlDataSource, createOsmBuildings, EllipsoidGeodesic, EllipsoidTerrainProvider, sampleTerrainMostDetailed, defined, Cesium3DTileset, Model, Matrix4, Matrix3, IonResource, ScreenSpaceEventHandler, ScreenSpaceEventType, PolygonPipeline, CesiumInspector, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, ColorMaterialProperty, EasingFunction, GeometryInstance, Ion, BoundingSphere } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -273,6 +273,20 @@ MERCHANTABLITY OR NON-INFRINGEMENT.
273
273
  See the Apache Version 2.0 License for specific language governing permissions
274
274
  and limitations under the License.
275
275
  ***************************************************************************** */
276
+ /* global Reflect, Promise */
277
+
278
+ var extendStatics = function(d, b) {
279
+ extendStatics = Object.setPrototypeOf ||
280
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
281
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
282
+ return extendStatics(d, b);
283
+ };
284
+
285
+ function __extends(d, b) {
286
+ extendStatics(d, b);
287
+ function __() { this.constructor = d; }
288
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
289
+ }
276
290
 
277
291
  var __assign = function() {
278
292
  __assign = Object.assign || function __assign(t) {
@@ -408,6 +422,28 @@ var MeasureUtils;
408
422
  MeasureUtils.MeasurePolygon = MeasurePolygon;
409
423
  })(MeasureUtils || (MeasureUtils = {}));
410
424
 
425
+ var C3 = [Cartesian3][0];
426
+ function getT(t, alpha, p0, p1) {
427
+ var d = C3.subtract(p1, p0, new C3);
428
+ var a = C3.dot(d, d);
429
+ var b = Math.pow(a, alpha * 0.5);
430
+ return b + t;
431
+ }
432
+ function catmullRom(p0, p1, p2, p3, t) {
433
+ var t0 = 0;
434
+ var t1 = getT(t0, 0.5, p0, p1);
435
+ var t2 = getT(t1, 0.5, p1, p2);
436
+ var t3 = getT(t2, 0.5, p2, p3);
437
+ t = Math$1.lerp(t1, t2, t);
438
+ var _a = [function (l, r) { return C3.add(l, r, new C3); }, function (l, r) { return C3.multiplyByScalar(l, r, new C3); }], add = _a[0], mul = _a[1];
439
+ var A1 = add(mul(p0, (t1 - t) / (t1 - t0)), mul(p1, (t - t0) / (t1 - t0)));
440
+ var A2 = add(mul(p1, (t2 - t) / (t2 - t1)), mul(p2, (t - t1) / (t2 - t1)));
441
+ var A3 = add(mul(p2, (t3 - t) / (t3 - t2)), mul(p3, (t - t2) / (t3 - t2)));
442
+ var B1 = add(mul(A1, (t2 - t) / (t2 - t0)), mul(A2, (t - t0) / (t2 - t0)));
443
+ var B2 = add(mul(A2, (t3 - t) / (t3 - t1)), mul(A3, (t - t1) / (t3 - t1)));
444
+ var C = add(mul(B1, (t2 - t) / (t2 - t1)), mul(B2, (t - t1) / (t2 - t1)));
445
+ return C;
446
+ }
411
447
  var DrawingUtils;
412
448
  (function (DrawingUtils) {
413
449
  /**
@@ -625,6 +661,70 @@ var DrawingUtils;
625
661
  return pos3d;
626
662
  };
627
663
  })();
664
+ /**
665
+ * Smooths a given set of points.
666
+ * @param points
667
+ * @param multiplier
668
+ * @param closed: true if this is a closed shape. Eg: polygon.
669
+ * @returns
670
+ */
671
+ function SmoothPoints(points, multiplier, closed) {
672
+ if (points.length < 4 || multiplier < 2) {
673
+ return points;
674
+ }
675
+ if (!closed) {
676
+ points.unshift(C3.subtract(points[0], points[1], new C3));
677
+ points.push(C3.subtract(points[points.length - 1], points[points.length - 2], new C3));
678
+ }
679
+ else {
680
+ points.unshift(points[points.length - 1]);
681
+ points.unshift(points[points.length - 2]);
682
+ points.push(points[2]);
683
+ }
684
+ var splinePoints = [];
685
+ var _loop_1 = function (i) {
686
+ var _a = [0, 1, 2, 3].map(function (n) { return points[i + n]; }), P0 = _a[0], P1 = _a[1], P2 = _a[2], P3 = _a[3];
687
+ for (var j = 0; j <= multiplier; j++) {
688
+ splinePoints.push(catmullRom(P0, P1, P2, P3, j / multiplier));
689
+ }
690
+ };
691
+ for (var i = 0; i < points.length - 3; i++) {
692
+ _loop_1(i);
693
+ }
694
+ return splinePoints;
695
+ }
696
+ DrawingUtils.SmoothPoints = SmoothPoints;
697
+ /**
698
+ * @param pos3d
699
+ * @param minimumHeight height relative to ground
700
+ */
701
+ function RaisePos3d(viewer, pos3d, minimumHeight) {
702
+ if (minimumHeight === void 0) { minimumHeight = 0; }
703
+ return __awaiter(this, void 0, void 0, function () {
704
+ var carto, terrainCarto, sample, terrainHeight;
705
+ return __generator(this, function (_a) {
706
+ switch (_a.label) {
707
+ case 0:
708
+ carto = Cartographic.fromCartesian(pos3d);
709
+ terrainCarto = carto.clone();
710
+ terrainCarto.height = 0;
711
+ if (!(viewer.scene.terrainProvider instanceof EllipsoidTerrainProvider)) return [3 /*break*/, 1];
712
+ carto.height = Math.max(carto.height, minimumHeight);
713
+ return [3 /*break*/, 3];
714
+ case 1: return [4 /*yield*/, sampleTerrainMostDetailed(viewer.scene.terrainProvider, [terrainCarto])];
715
+ case 2:
716
+ sample = _a.sent();
717
+ terrainHeight = (sample === null || sample === void 0 ? void 0 : sample.length) ? sample[0].height : null;
718
+ if (terrainHeight != null) {
719
+ carto.height = Math.max(carto.height, terrainHeight + minimumHeight);
720
+ }
721
+ _a.label = 3;
722
+ case 3: return [2 /*return*/, Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height)];
723
+ }
724
+ });
725
+ });
726
+ }
727
+ DrawingUtils.RaisePos3d = RaisePos3d;
628
728
  })(DrawingUtils || (DrawingUtils = {}));
629
729
 
630
730
  /**
@@ -4843,6 +4943,7 @@ var VisualsRegister;
4843
4943
  EVisualUpdateType["Add"] = "ADD";
4844
4944
  EVisualUpdateType["Remove"] = "REMOVE";
4845
4945
  EVisualUpdateType["Update"] = "UPDATE";
4946
+ EVisualUpdateType["DeselectAll"] = "DESELECT_ALL";
4846
4947
  })(EVisualUpdateType = VisualsRegister.EVisualUpdateType || (VisualsRegister.EVisualUpdateType = {}));
4847
4948
  var Register = /** @class */ (function () {
4848
4949
  function Register(viewer) {
@@ -4943,6 +5044,7 @@ var VisualsRegister;
4943
5044
  return this.selectedIds.indexOf(id) !== -1;
4944
5045
  };
4945
5046
  Register.prototype.ClearSelected = function () {
5047
+ var _a;
4946
5048
  for (var i = 0; i < this.selectedIds.length; i++) {
4947
5049
  var id = this.selectedIds[i];
4948
5050
  var regos = this.rego[id];
@@ -4954,6 +5056,9 @@ var VisualsRegister;
4954
5056
  }
4955
5057
  }
4956
5058
  this.selectedIds = [];
5059
+ (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
5060
+ type: EVisualUpdateType.DeselectAll
5061
+ });
4957
5062
  };
4958
5063
  Register.prototype.GetSelected = function () {
4959
5064
  return this.selectedIds;
@@ -8641,94 +8746,52 @@ var MenuItemManager;
8641
8746
  MenuItemManager.Manager = Manager;
8642
8747
  })(MenuItemManager || (MenuItemManager = {}));
8643
8748
 
8644
- var CESIUM_VIEWER_MANAGER_KEY = "_cesiumViewerManager";
8645
- var ViewerUtils;
8646
- (function (ViewerUtils) {
8647
- /**
8648
- * Destroys all the junk that cesium viewer ships with.
8649
- * @param viewer
8650
- */
8651
- function InitViewer(params) {
8652
- var viewer = params.viewer, destroyWidgets = params.destroyWidgets, styleContainer = params.styleContainer;
8653
- if (destroyWidgets != false) {
8654
- ViewerUtils.DestroyWidget(viewer.timeline);
8655
- ViewerUtils.DestroyWidget(viewer.vrButton);
8656
- ViewerUtils.DestroyWidget(viewer.sceneModePicker);
8657
- ViewerUtils.DestroyWidget(viewer.homeButton);
8658
- ViewerUtils.DestroyWidget(viewer.fullscreenButton);
8659
- ViewerUtils.DestroyWidget(viewer.baseLayerPicker);
8660
- }
8661
- if (styleContainer != false) {
8662
- ViewerUtils.StyleContainer({ viewer: viewer });
8663
- }
8664
- }
8665
- ViewerUtils.InitViewer = InitViewer;
8666
- function DestroyWidget(widget) {
8667
- if (widget && !widget.isDestroyed()) {
8668
- widget.destroy();
8669
- }
8670
- }
8671
- ViewerUtils.DestroyWidget = DestroyWidget;
8672
- /**
8673
- * Hides all unnecessary elements from the Cesium viewer container.
8674
- * @param viewer
8675
- */
8676
- function StyleContainer(params) {
8677
- var _a;
8678
- var viewer = params.viewer;
8679
- var container = viewer.container;
8680
- var genContainer = (_a = container.getElementsByClassName("cesium-viewer")) === null || _a === void 0 ? void 0 : _a[0];
8681
- if (genContainer) {
8682
- var children = genContainer.children;
8683
- for (var i = 0; i < children.length; i++) {
8684
- var child = children[i];
8685
- if (!child.classList.contains("cesium-viewer-cesiumWidgetContainer")) {
8686
- child.style.display = "none";
8687
- }
8749
+ /**
8750
+ * Describes a Nextspace provided UI widget.
8751
+ */
8752
+ var Widget;
8753
+ (function (Widget) {
8754
+ var AWidget = /** @class */ (function () {
8755
+ function AWidget(params) {
8756
+ var viewer = params.viewer, container = params.container, manager = params.manager;
8757
+ if (!container) {
8758
+ container = viewer.container;
8759
+ }
8760
+ this._viewer = viewer;
8761
+ this._manager = manager;
8762
+ this._container = container;
8763
+ this._apiGetters = params.apiGetters;
8764
+ }
8765
+ Object.defineProperty(AWidget.prototype, "Viewer", {
8766
+ get: function () {
8767
+ return this._viewer;
8768
+ },
8769
+ enumerable: false,
8770
+ configurable: true
8771
+ });
8772
+ Object.defineProperty(AWidget.prototype, "Container", {
8773
+ get: function () {
8774
+ return this._container;
8775
+ },
8776
+ enumerable: false,
8777
+ configurable: true
8778
+ });
8779
+ Object.defineProperty(AWidget.prototype, "Element", {
8780
+ get: function () {
8781
+ return this._element;
8782
+ },
8783
+ enumerable: false,
8784
+ configurable: true
8785
+ });
8786
+ AWidget.prototype.Dispose = function () {
8787
+ if (this._element && this._element.parentElement) {
8788
+ this._element.parentElement.removeChild(this._element);
8688
8789
  }
8689
- }
8690
- var canvas = viewer.canvas;
8691
- canvas.style.width = "100%";
8692
- canvas.style.height = "100%";
8693
- var widget = canvas.parentElement;
8694
- widget.style.width = "100%";
8695
- widget.style.height = "100%";
8696
- widget.style.touchAction = "none";
8697
- var widgetContainer = widget.parentElement;
8698
- widgetContainer.style.width = "100%";
8699
- widgetContainer.style.height = "100%";
8700
- var viewerContainer = widgetContainer.parentElement;
8701
- viewerContainer.style.fontFamily = "sans-serif";
8702
- viewerContainer.style.fontSize = "16px";
8703
- viewerContainer.style.overflow = "hidden";
8704
- viewerContainer.style.display = "block";
8705
- viewerContainer.style.position = "relative";
8706
- viewerContainer.style.top = "0";
8707
- viewerContainer.style.left = "0";
8708
- viewerContainer.style.width = "100%";
8709
- viewerContainer.style.height = "100%";
8710
- }
8711
- ViewerUtils.StyleContainer = StyleContainer;
8712
- /**
8713
- * Returns a given Cesium viewer's menu item manager.
8714
- * If one is missing then it'll optionally create one before returning it.
8715
- * @param params
8716
- * @returns
8717
- */
8718
- function GetManager(params) {
8719
- var viewer = params.viewer, createIfMissing = params.createIfMissing;
8720
- if (viewer[CESIUM_VIEWER_MANAGER_KEY]) {
8721
- return viewer[CESIUM_VIEWER_MANAGER_KEY];
8722
- }
8723
- else if (createIfMissing != false) {
8724
- var manager = new MenuItemManager.Manager({ viewer: viewer });
8725
- viewer[CESIUM_VIEWER_MANAGER_KEY] = manager;
8726
- return manager;
8727
- }
8728
- return null;
8729
- }
8730
- ViewerUtils.GetManager = GetManager;
8731
- })(ViewerUtils || (ViewerUtils = {}));
8790
+ };
8791
+ return AWidget;
8792
+ }());
8793
+ Widget.AWidget = AWidget;
8794
+ })(Widget || (Widget = {}));
8732
8795
 
8733
8796
  /**
8734
8797
  * Utility to help generate menu items for rendering various data.
@@ -10448,8 +10511,333 @@ var ViewUtils;
10448
10511
  return viewer.camera.frustum instanceof OrthographicFrustum;
10449
10512
  }
10450
10513
  ViewUtils.Get2dStatus = Get2dStatus;
10514
+ function SetLockedCameraStatus(params) {
10515
+ var viewer = params.viewer, status = params.status;
10516
+ var scene = viewer === null || viewer === void 0 ? void 0 : viewer.scene;
10517
+ if (!scene) {
10518
+ return;
10519
+ }
10520
+ if (status) {
10521
+ scene.screenSpaceCameraController.enableRotate = false;
10522
+ scene.screenSpaceCameraController.enableTranslate = false;
10523
+ scene.screenSpaceCameraController.enableTilt = false;
10524
+ scene.screenSpaceCameraController.enableLook = false;
10525
+ scene.screenSpaceCameraController.enableRotate = false;
10526
+ scene.screenSpaceCameraController.maximumMovementRatio = 0.3;
10527
+ scene.screenSpaceCameraController.minimumCollisionTerrainHeight = 1000;
10528
+ }
10529
+ else {
10530
+ scene.screenSpaceCameraController.maximumMovementRatio = 0.1;
10531
+ scene.screenSpaceCameraController.minimumCollisionTerrainHeight = 1000;
10532
+ scene.screenSpaceCameraController.enableRotate = true;
10533
+ scene.screenSpaceCameraController.enableTranslate = true;
10534
+ if (!ViewUtils.Get2dStatus({ viewer: viewer })) {
10535
+ scene.screenSpaceCameraController.enableTilt = true;
10536
+ }
10537
+ scene.screenSpaceCameraController.enableLook = true;
10538
+ scene.screenSpaceCameraController.enableRotate = true;
10539
+ }
10540
+ }
10541
+ ViewUtils.SetLockedCameraStatus = SetLockedCameraStatus;
10542
+ function GetLockedCameraStatus(params) {
10543
+ var _a;
10544
+ var scene = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a.scene;
10545
+ if (!scene) {
10546
+ return false;
10547
+ }
10548
+ return !scene.screenSpaceCameraController.enableTranslate;
10549
+ }
10550
+ ViewUtils.GetLockedCameraStatus = GetLockedCameraStatus;
10451
10551
  })(ViewUtils || (ViewUtils = {}));
10452
10552
 
10553
+ var VIEWER_BOOKMARKS_WIDGET_KEY = "_viewerBookmarksWidget";
10554
+ var WidgetBookmarks = /** @class */ (function (_super) {
10555
+ __extends(WidgetBookmarks, _super);
10556
+ function WidgetBookmarks(params) {
10557
+ var _this = _super.call(this, params) || this;
10558
+ _this.STYLESHEET_ID = "nextspace-bookmarks-stylesheet";
10559
+ _this.bookmarks = [];
10560
+ _this.reloadCounter = 0;
10561
+ _this._lastEnabledBookmarkId = null;
10562
+ _this._autoplayInterval = null;
10563
+ _this._viewId = params.viewId;
10564
+ _this._generateStyles();
10565
+ _this._generateElement();
10566
+ _this.loadBookmarks().then(function () {
10567
+ _this._updateBookmarks();
10568
+ });
10569
+ _this._viewer[VIEWER_BOOKMARKS_WIDGET_KEY] = _this;
10570
+ return _this;
10571
+ }
10572
+ Object.defineProperty(WidgetBookmarks.prototype, "ViewId", {
10573
+ get: function () {
10574
+ return this._viewId;
10575
+ },
10576
+ set: function (value) {
10577
+ var _this = this;
10578
+ var isChanged = this._viewId != value;
10579
+ if (isChanged) {
10580
+ this._viewId = value;
10581
+ this._lastEnabledBookmarkId = null;
10582
+ this.loadBookmarks().then(function () {
10583
+ _this._updateBookmarks();
10584
+ });
10585
+ }
10586
+ },
10587
+ enumerable: false,
10588
+ configurable: true
10589
+ });
10590
+ Object.defineProperty(WidgetBookmarks.prototype, "LastEnabledBookmarkId", {
10591
+ get: function () {
10592
+ return this._lastEnabledBookmarkId;
10593
+ },
10594
+ set: function (value) {
10595
+ this._lastEnabledBookmarkId = value;
10596
+ this._updateBookmark();
10597
+ },
10598
+ enumerable: false,
10599
+ configurable: true
10600
+ });
10601
+ WidgetBookmarks.prototype.LoadViewId = function (params) {
10602
+ var _this = this;
10603
+ var viewId = params.viewId, runFirstBookmark = params.runFirstBookmark, autoPlay = params.autoPlay, bookmarkId = params.bookmarkId;
10604
+ if (runFirstBookmark == null) {
10605
+ runFirstBookmark = true;
10606
+ }
10607
+ if (autoPlay == null) {
10608
+ autoPlay = false;
10609
+ }
10610
+ this._viewId = viewId;
10611
+ this.loadBookmarks().then(function () {
10612
+ _this._updateBookmarks();
10613
+ var bookmark = null;
10614
+ if (bookmarkId) {
10615
+ bookmark = _this.bookmarks.find(function (b) { return b.ID == bookmarkId; });
10616
+ }
10617
+ if (!bookmark && runFirstBookmark && _this.bookmarks.length) {
10618
+ bookmark = _this.bookmarks[0];
10619
+ }
10620
+ if (bookmark) {
10621
+ _this._selectBookmark(bookmark);
10622
+ }
10623
+ if (autoPlay) {
10624
+ _this._toggleOnAutoPlay();
10625
+ }
10626
+ });
10627
+ this._lastEnabledBookmarkId = null;
10628
+ };
10629
+ WidgetBookmarks.prototype.loadBookmarks = function () {
10630
+ return __awaiter(this, void 0, void 0, function () {
10631
+ var counter, api, viewId, data, e_1;
10632
+ return __generator(this, function (_a) {
10633
+ switch (_a.label) {
10634
+ case 0:
10635
+ this.reloadCounter += 1;
10636
+ counter = this.reloadCounter;
10637
+ _a.label = 1;
10638
+ case 1:
10639
+ _a.trys.push([1, 3, , 4]);
10640
+ api = this._apiGetters.GetBruceApi();
10641
+ viewId = this._viewId;
10642
+ if (!viewId) {
10643
+ this.bookmarks = [];
10644
+ return [2 /*return*/];
10645
+ }
10646
+ return [4 /*yield*/, ProjectViewBookmark.GetList({
10647
+ viewId: viewId,
10648
+ api: api
10649
+ })];
10650
+ case 2:
10651
+ data = _a.sent();
10652
+ if (counter != this.reloadCounter) {
10653
+ return [2 /*return*/];
10654
+ }
10655
+ this.bookmarks = data.bookmarks;
10656
+ return [3 /*break*/, 4];
10657
+ case 3:
10658
+ e_1 = _a.sent();
10659
+ console.error(e_1);
10660
+ this.bookmarks = [];
10661
+ return [3 /*break*/, 4];
10662
+ case 4: return [2 /*return*/];
10663
+ }
10664
+ });
10665
+ });
10666
+ };
10667
+ WidgetBookmarks.prototype.Dispose = function () {
10668
+ _super.prototype.Dispose.call(this);
10669
+ this._toggleOffAutoPlay();
10670
+ };
10671
+ WidgetBookmarks.prototype._generateStyles = function () {
10672
+ if (document.getElementById(this.STYLESHEET_ID)) {
10673
+ return;
10674
+ }
10675
+ var style = document.createElement("style");
10676
+ style.id = this.STYLESHEET_ID;
10677
+ style.innerHTML = "\n .NextspaceBookmarks {\n pointer-events: none !important;\n position: absolute;\n bottom: 10px;\n left: 0;\n width: 100%;\n height: 120px;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n z-index: 1;\n }\n\n .NextspaceBookmarks * {\n box-sizing: border-box;\n }\n\n .NextspaceBookmarksContainer {\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n height: 132px;\n max-width: calc(100% - 40px);\n max-width: min(600px, calc(100% - 40px));\n overflow: visible;\n padding: 4px;\n width: -webkit-max-content;\n width: max-content;\n pointer-events: auto;\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n background: rgba(33,39,42,.8);\n border-radius: 9px;\n box-shadow: 0 0 1px rgba(18,22,25,.36),0 18px 36px -4px rgba(18,22,25,.36);\n }\n\n .NextspaceBookmarksRow {\n display: flex;\n flex-direction: row;\n height: 80px;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 5px;\n margin-bottom: 4px;\n padding-bottom: 8px;\n }\n\n .NextspaceBookmarksRowItem {\n background-color: #fff;\n background-position: 50%;\n background-repeat: no-repeat;\n background-size: cover;\n border-radius: 6px;\n cursor: pointer;\n margin-right: 8px;\n min-width: 70px;\n outline: 3px solid transparent;\n transition: .3s ease;\n width: 110px;\n }\n \n .NextspaceBookmarksRowItem:last-of-type {\n margin-right: 0;\n }\n\n .NextspaceBookmarksRowItem[is-selected=\"true\"] {\n outline: 3px solid #0072c3;\n }\n\n .NextspaceBookmarksRowItem:hover {\n filter: grayscale(.5);\n }\n\n .NextspaceBookmarksToolbar {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding-left: 4px;\n padding-right: 4px;\n }\n\n .NextspaceBookmarksToolbarLeft {\n align-items: center;\n display: flex;\n min-width: 150px;\n }\n\n .NextspaceBookmarksToolbarBreaker {\n background: hsla(0,0%,100%,.12);\n border-radius: 2px;\n flex-shrink: 0;\n height: 32px;\n margin-left: 6px;\n margin-right: 14px;\n width: 2px;\n }\n\n .NextspaceBookmarksToolbarName {\n color: #fff;\n display: block;\n font-size: 15px;\n font-family: sans-serif;\n letter-spacing: .5px;\n max-width: 250px;\n overflow: hidden;\n text-overflow: clip;\n white-space: nowrap;\n }\n\n .NextspaceBookmarksToolbarButt {\n align-items: center;\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n height: 30px;\n justify-content: center;\n margin-right: 8px;\n min-height: 0;\n min-width: 0;\n position: relative;\n width: 30px;\n font-size: 1.5rem;\n padding: 8px;\n border-radius: 50%;\n overflow: visible;\n color: rgba(0, 0, 0, 0.54);\n transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n appearance: none;\n text-decoration: none;\n text-align: center;\n background-color: transparent;\n outline: 0px;\n border: 0px none;\n margin: 0px;\n margin-right: 0px;\n cursor: pointer;\n user-select: none;\n -moz-box-pack: center;\n -moz-box-align: center;\n }\n\n .NextspaceBookmarksToolbarButt:hover {\n opacity: .9;\n transition: opacity .3s ease;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n .NextspaceBookmarksToolbarButt svg {\n max-height: 24px;\n max-width: 24px;\n flex-shrink: 0;\n }\n\n .NextspaceBookmarksAutoplayCounter {\n padding: 4px 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n box-shadow: 0px 0px 12px 1px rgba(0,0,0,0.27);\n -webkit-box-shadow: 0px 0px 12px 1px rgba(0,0,0,0.27);\n -moz-box-shadow: 0px 0px 12px 1px rgba(0,0,0,0.27);\n right: 100%;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n color: white;\n background-color: #21272a;\n position: absolute;\n z-index: 2;\n pointer-events: none;\n opacity: 0.8;\n }\n\n .NextspaceBookmarksToolbarChip {\n background: rgba(0,175,250,.2);\n border-radius: 11px;\n color: #18ffff;\n letter-spacing: 1px;\n margin-right: 3px;\n font-size: 13px;\n min-width: 50px;\n padding: 5px 8px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n box-shadow: 0 0 12px 1px rgba(0,0,0,.27);\n -webkit-box-shadow: 0 0 12px 1px rgba(0,0,0,.27);\n -moz-box-shadow: 0 0 12px 1px rgba(0,0,0,.27);\n font-family: sans-serif;\n }\n ";
10678
+ document.head.appendChild(style);
10679
+ };
10680
+ WidgetBookmarks.prototype._generateElement = function () {
10681
+ var _this = this;
10682
+ var element = document.createElement("div");
10683
+ element.style.display = "none";
10684
+ element.className = "NextspaceBookmarks";
10685
+ var container = document.createElement("div");
10686
+ container.className = "NextspaceBookmarksContainer";
10687
+ element.appendChild(container);
10688
+ var row = document.createElement("div");
10689
+ row.className = "NextspaceBookmarksRow";
10690
+ container.appendChild(row);
10691
+ this._row = row;
10692
+ var toolbar = document.createElement("div");
10693
+ toolbar.className = "NextspaceBookmarksToolbar";
10694
+ toolbar.innerHTML = "\n <div class=\"NextspaceBookmarksToolbarLeft\">\n <button title=\"Autoplay\" class=\"NextspaceBookmarksToolbarButt\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8 6.81976V17.1798C8 17.9698 8.87 18.4498 9.54 18.0198L17.68 12.8398C18.3 12.4498 18.3 11.5498 17.68 11.1498L9.54 5.97976C8.87 5.54976 8 6.02976 8 6.81976Z\" fill=\"white\"></path></svg>\n <div class=\"NextspaceBookmarksAutoplayCounter\" style=\"display: none;\">5</div>\n </button>\n <button title=\"Back\" class=\"NextspaceBookmarksToolbarButt\">\n <svg width=\"10\" height=\"17\" viewBox=\"0 0 10 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 15.5L1.5 8.5L8.5 1.5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\n </button>\n <div class=\"NextspaceBookmarksToolbarChip\">\n </div>\n <button title=\"Next\" class=\"NextspaceBookmarksToolbarButt\">\n <svg width=\"10\" height=\"17\" viewBox=\"0 0 10 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.5 1.5L8.5 8.5L1.5 15.5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\n </button>\n </div>\n <div class=\"NextspaceBookmarksToolbarBreaker\"></div>\n <div class=\"NextspaceBookmarksToolbarName\"></div>\n ";
10695
+ container.appendChild(toolbar);
10696
+ this._name = toolbar.querySelector(".NextspaceBookmarksToolbarName");
10697
+ this._chip = toolbar.querySelector(".NextspaceBookmarksToolbarChip");
10698
+ this._autoplayCounter = toolbar.querySelector(".NextspaceBookmarksAutoplayCounter");
10699
+ var autoPlay = toolbar.querySelector(".NextspaceBookmarksToolbarButt:nth-child(1)");
10700
+ this._autoplayButtSvg = autoPlay.querySelector("svg");
10701
+ var back = toolbar.querySelector(".NextspaceBookmarksToolbarButt:nth-child(2)");
10702
+ var next = toolbar.querySelector(".NextspaceBookmarksToolbarButt:nth-child(4)");
10703
+ autoPlay.addEventListener("click", function () {
10704
+ if (_this._autoplayInterval) {
10705
+ _this._toggleOffAutoPlay();
10706
+ }
10707
+ else {
10708
+ _this._toggleOnAutoPlay();
10709
+ }
10710
+ });
10711
+ back.addEventListener("click", function () {
10712
+ var index = _this.bookmarks.findIndex(function (b) { return b.ID == _this._lastEnabledBookmarkId; });
10713
+ if (index < 0) {
10714
+ index = 0;
10715
+ }
10716
+ else if (index > 0) {
10717
+ index--;
10718
+ }
10719
+ else {
10720
+ index = _this.bookmarks.length - 1;
10721
+ }
10722
+ _this._selectBookmark(_this.bookmarks[index]);
10723
+ });
10724
+ next.addEventListener("click", function () {
10725
+ var index = _this.bookmarks.findIndex(function (b) { return b.ID == _this._lastEnabledBookmarkId; });
10726
+ if (index < 0) {
10727
+ index = 0;
10728
+ }
10729
+ else if (index < _this.bookmarks.length - 1) {
10730
+ index++;
10731
+ }
10732
+ else {
10733
+ index = 0;
10734
+ }
10735
+ _this._selectBookmark(_this.bookmarks[index]);
10736
+ });
10737
+ this.Container.appendChild(element);
10738
+ this._element = element;
10739
+ this._updateBookmarks();
10740
+ };
10741
+ WidgetBookmarks.prototype._toggleOnAutoPlay = function () {
10742
+ var _this = this;
10743
+ this._toggleOffAutoPlay();
10744
+ this._autoplayCounter.style.display = "block";
10745
+ this._autoplayCounter.innerText = "5";
10746
+ var counter = 5;
10747
+ this._autoplayInterval = setInterval(function () {
10748
+ counter--;
10749
+ _this._autoplayCounter.innerText = counter.toString();
10750
+ if (counter <= 0) {
10751
+ var index = _this.bookmarks.findIndex(function (b) { return b.ID == _this._lastEnabledBookmarkId; });
10752
+ if (index < 0) {
10753
+ index = 0;
10754
+ }
10755
+ else if (index < _this.bookmarks.length - 1) {
10756
+ index++;
10757
+ }
10758
+ else {
10759
+ index = 0;
10760
+ }
10761
+ _this._selectBookmark(_this.bookmarks[index]);
10762
+ counter = 5;
10763
+ }
10764
+ }, 1000);
10765
+ this._autoplayButtSvg.innerHTML = "\n <path d=\"M8 19C9.1 19 10 18.1 10 17V7C10 5.9 9.1 5 8 5C6.9 5 6 5.9 6 7V17C6 18.1 6.9 19 8 19ZM14 7V17C14 18.1 14.9 19 16 19C17.1 19 18 18.1 18 17V7C18 5.9 17.1 5 16 5C14.9 5 14 5.9 14 7Z\" fill=\"white\"></path>\n ";
10766
+ };
10767
+ WidgetBookmarks.prototype._toggleOffAutoPlay = function () {
10768
+ clearInterval(this._autoplayInterval);
10769
+ this._autoplayInterval = null;
10770
+ this._autoplayCounter.style.display = "none";
10771
+ this._autoplayButtSvg.innerHTML = "\n <path d=\"M8 6.81976V17.1798C8 17.9698 8.87 18.4498 9.54 18.0198L17.68 12.8398C18.3 12.4498 18.3 11.5498 17.68 11.1498L9.54 5.97976C8.87 5.54976 8 6.02976 8 6.81976Z\" fill=\"white\"></path>\n ";
10772
+ };
10773
+ WidgetBookmarks.prototype._updateBookmarks = function () {
10774
+ var _this = this;
10775
+ var bookmarks = this.bookmarks;
10776
+ this._element.style.display = bookmarks.length ? "flex" : "none";
10777
+ var api = this._apiGetters.GetBruceApi();
10778
+ var row = this._row;
10779
+ row.innerHTML = "";
10780
+ var _loop_1 = function (bookmark) {
10781
+ var item = document.createElement("div");
10782
+ item.className = "NextspaceBookmarksRowItem";
10783
+ var previewUrl = "";
10784
+ if (bookmark["Screenshot.ClientFile.ID"]) {
10785
+ previewUrl = ClientFile.GetUrl({
10786
+ fileId: bookmark["Screenshot.ClientFile.ID"],
10787
+ api: api
10788
+ });
10789
+ }
10790
+ // TODO: Some nice empty image.
10791
+ item.style.backgroundImage = previewUrl ? "url(".concat(previewUrl, ")") : "";
10792
+ item.setAttribute("is-selected", this_1._lastEnabledBookmarkId == bookmark.ID ? "true" : "false");
10793
+ item.addEventListener("click", function () {
10794
+ _this._selectBookmark(bookmark);
10795
+ });
10796
+ item.setAttribute("title", bookmark.Title);
10797
+ item.setAttribute("bookmark-id", bookmark.ID);
10798
+ row.appendChild(item);
10799
+ };
10800
+ var this_1 = this;
10801
+ for (var _i = 0, bookmarks_1 = bookmarks; _i < bookmarks_1.length; _i++) {
10802
+ var bookmark = bookmarks_1[_i];
10803
+ _loop_1(bookmark);
10804
+ }
10805
+ this._updateBookmark();
10806
+ };
10807
+ WidgetBookmarks.prototype._selectBookmark = function (bookmark) {
10808
+ var isFirstEnabled = !this._lastEnabledBookmarkId;
10809
+ this._lastEnabledBookmarkId = bookmark.ID;
10810
+ this._updateBookmark();
10811
+ ViewRenderEngine.Render({
10812
+ apiGetter: this._apiGetters.GetBruceGetter(),
10813
+ bookmark: bookmark,
10814
+ bookmarkId: bookmark.ID,
10815
+ manager: this._manager,
10816
+ skipTransition: isFirstEnabled,
10817
+ viewId: this._viewId,
10818
+ viewer: this._viewer
10819
+ });
10820
+ };
10821
+ WidgetBookmarks.prototype._updateBookmark = function () {
10822
+ var _this = this;
10823
+ var allBookmarks = this._row.querySelectorAll(".NextspaceBookmarksRowItem");
10824
+ for (var _i = 0, _a = Array.from(allBookmarks); _i < _a.length; _i++) {
10825
+ var item = _a[_i];
10826
+ if (item.getAttribute("bookmark-id") == this._lastEnabledBookmarkId) {
10827
+ item.setAttribute("is-selected", "true");
10828
+ }
10829
+ else {
10830
+ item.setAttribute("is-selected", "false");
10831
+ }
10832
+ }
10833
+ var index = this.bookmarks.findIndex(function (b) { return b.ID == _this._lastEnabledBookmarkId; });
10834
+ var record = index > -1 ? this.bookmarks[index] : null;
10835
+ this._name.innerText = record ? record.Title ? record.Title : "Unnamed bookmark" : "Unknown bookmark";
10836
+ this._chip.innerText = "".concat(index > -1 ? (index + 1) + "/" : "").concat(this.bookmarks.length);
10837
+ };
10838
+ return WidgetBookmarks;
10839
+ }(Widget.AWidget));
10840
+
10453
10841
  // TODO: Move these to the data model.
10454
10842
  var MIN_SHADOW_SIZE = 2048;
10455
10843
  var MAX_SHADOW_SIZE = 32768;
@@ -10931,10 +11319,11 @@ function renderNavigator(params, bookmark, view) {
10931
11319
  var ViewRenderEngine;
10932
11320
  (function (ViewRenderEngine) {
10933
11321
  function Render(params) {
11322
+ var _a;
10934
11323
  return __awaiter(this, void 0, void 0, function () {
10935
- var api, view, _a, bookmark, bookmarkId, _b, version;
10936
- return __generator(this, function (_c) {
10937
- switch (_c.label) {
11324
+ var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11325
+ return __generator(this, function (_d) {
11326
+ switch (_d.label) {
10938
11327
  case 0:
10939
11328
  if (!params.manager && params.viewer) {
10940
11329
  params.manager = ViewerUtils.GetManager({
@@ -10950,17 +11339,17 @@ var ViewRenderEngine;
10950
11339
  }
10951
11340
  api = params.apiGetter.getApi();
10952
11341
  if (!params.view) return [3 /*break*/, 1];
10953
- _a = params.view;
11342
+ _b = params.view;
10954
11343
  return [3 /*break*/, 3];
10955
11344
  case 1: return [4 /*yield*/, ProjectView.Get({
10956
11345
  api: api,
10957
11346
  viewId: params.viewId
10958
11347
  })];
10959
11348
  case 2:
10960
- _a = (_c.sent()).view;
10961
- _c.label = 3;
11349
+ _b = (_d.sent()).view;
11350
+ _d.label = 3;
10962
11351
  case 3:
10963
- view = _a;
11352
+ view = _b;
10964
11353
  bookmark = params.bookmark;
10965
11354
  if (!!bookmark) return [3 /*break*/, 7];
10966
11355
  bookmarkId = params.bookmarkId;
@@ -10974,26 +11363,32 @@ var ViewRenderEngine;
10974
11363
  bookmarkId: bookmarkId
10975
11364
  })];
10976
11365
  case 4:
10977
- _b = (_c.sent()).bookmark;
11366
+ _c = (_d.sent()).bookmark;
10978
11367
  return [3 /*break*/, 6];
10979
11368
  case 5:
10980
- _b = null;
10981
- _c.label = 6;
11369
+ _c = null;
11370
+ _d.label = 6;
10982
11371
  case 6:
10983
- bookmark = _b;
10984
- _c.label = 7;
11372
+ bookmark = _c;
11373
+ _d.label = 7;
10985
11374
  case 7:
10986
11375
  version = view.DataVersion;
10987
11376
  if (!(version == 1)) return [3 /*break*/, 9];
10988
11377
  return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
10989
11378
  case 8:
10990
- _c.sent();
11379
+ _d.sent();
10991
11380
  return [3 /*break*/, 11];
10992
11381
  case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
10993
11382
  case 10:
10994
- _c.sent();
10995
- _c.label = 11;
10996
- case 11: return [2 /*return*/];
11383
+ _d.sent();
11384
+ _d.label = 11;
11385
+ case 11:
11386
+ bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11387
+ if (bWidget) {
11388
+ bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
11389
+ bWidget.LastEnabledBookmarkId = params.bookmarkId ? params.bookmarkId : bookmark === null || bookmark === void 0 ? void 0 : bookmark.ID;
11390
+ }
11391
+ return [2 /*return*/];
10997
11392
  }
10998
11393
  });
10999
11394
  });
@@ -11001,7 +11396,2799 @@ var ViewRenderEngine;
11001
11396
  ViewRenderEngine.Render = Render;
11002
11397
  })(ViewRenderEngine || (ViewRenderEngine = {}));
11003
11398
 
11004
- var VERSION = "2.2.6";
11399
+ var DEFAULT_SMOOTH_MULTIPLIER = 0;
11400
+ function avgDistanceFromPointPair(refPoint, pos1, pos2) {
11401
+ var carto1 = Cartographic.fromCartesian(refPoint);
11402
+ var carto2 = Cartographic.fromCartesian(pos1);
11403
+ var carto3 = Cartographic.fromCartesian(pos2);
11404
+ var x1 = carto1.longitude;
11405
+ var y1 = carto1.latitude;
11406
+ var x2 = carto2.longitude;
11407
+ var y2 = carto2.latitude;
11408
+ var x3 = carto3.longitude;
11409
+ var y3 = carto3.latitude;
11410
+ var A = x1 - x2;
11411
+ var B = y1 - y2;
11412
+ var C = x3 - x2;
11413
+ var D = y3 - y2;
11414
+ var dot = A * C + B * D;
11415
+ var lenSq = C * C + D * D;
11416
+ var param = dot / lenSq;
11417
+ var xx;
11418
+ var yy;
11419
+ if (param < 0 || x2 == x3 && y2 == y3) {
11420
+ xx = x2;
11421
+ yy = y2;
11422
+ }
11423
+ else if (param > 1) {
11424
+ xx = x3;
11425
+ yy = y3;
11426
+ }
11427
+ else {
11428
+ xx = x2 + param * C;
11429
+ yy = y2 + param * D;
11430
+ }
11431
+ var dx = x1 - xx;
11432
+ var dy = y1 - yy;
11433
+ return Math.sqrt(dx * dx + dy * dy);
11434
+ }
11435
+ function getInsertIndex(positions, pos3d) {
11436
+ if (positions.length < 2) {
11437
+ return 0;
11438
+ }
11439
+ var index = -1;
11440
+ if (positions) {
11441
+ var distance = void 0;
11442
+ for (var j = 0; j < positions.length; j++) {
11443
+ var pos1 = positions[j];
11444
+ var pos2 = void 0;
11445
+ var pos2Index = -1;
11446
+ if (j >= positions.length - 1) {
11447
+ pos2 = positions[0];
11448
+ pos2Index = 0;
11449
+ }
11450
+ else {
11451
+ pos2 = positions[j + 1];
11452
+ pos2Index = j + 1;
11453
+ }
11454
+ if (Cartes.ValidateCartes3(pos1), Cartes.ValidateCartes3(pos2)) {
11455
+ var length_1 = avgDistanceFromPointPair(pos3d, pos1, pos2);
11456
+ if (index == -1 || length_1 < distance) {
11457
+ var insertIndex = pos2Index == 0 ? 0 : j > pos2Index ? j : pos2Index;
11458
+ index = insertIndex;
11459
+ distance = length_1;
11460
+ }
11461
+ }
11462
+ }
11463
+ }
11464
+ return index == -1 ? 0 : index;
11465
+ }
11466
+ var OUTLINE_COLOR = "rgba(51, 177, 255, 0.2)";
11467
+ var FILL_COLOR = "#33B1FF";
11468
+ var POINT_SIZE = 25;
11469
+ var PolygonPoint = /** @class */ (function () {
11470
+ function PolygonPoint(viewer, position, perPositionHeight) {
11471
+ this.id = ObjectUtils.UId();
11472
+ this.viewer = viewer;
11473
+ this.position = position;
11474
+ this.perPositionHeight = perPositionHeight;
11475
+ }
11476
+ Object.defineProperty(PolygonPoint.prototype, "Id", {
11477
+ get: function () {
11478
+ return this.id;
11479
+ },
11480
+ enumerable: false,
11481
+ configurable: true
11482
+ });
11483
+ PolygonPoint.prototype.GetPosition = function () {
11484
+ return this.position.clone();
11485
+ };
11486
+ PolygonPoint.prototype.SetPosition = function (value) {
11487
+ this.position = value;
11488
+ };
11489
+ PolygonPoint.prototype.createEntity = function () {
11490
+ var _this = this;
11491
+ this.destroyEntity();
11492
+ this.point = this.viewer.entities.add({
11493
+ id: this.id,
11494
+ point: {
11495
+ pixelSize: POINT_SIZE,
11496
+ color: Color.fromCssColorString(FILL_COLOR),
11497
+ outlineColor: Color.WHITE,
11498
+ outlineWidth: 2,
11499
+ heightReference: this.perPositionHeight ? HeightReference.NONE : HeightReference.CLAMP_TO_GROUND
11500
+ },
11501
+ position: new CallbackProperty(function () { return _this.position; }, false)
11502
+ });
11503
+ };
11504
+ PolygonPoint.prototype.destroyEntity = function () {
11505
+ if (this.point && this.viewer.entities.contains(this.point)) {
11506
+ this.viewer.entities.remove(this.point);
11507
+ }
11508
+ this.point = null;
11509
+ };
11510
+ PolygonPoint.prototype.Dispose = function () {
11511
+ this.destroyEntity();
11512
+ };
11513
+ PolygonPoint.prototype.Create = function () {
11514
+ this.createEntity();
11515
+ };
11516
+ PolygonPoint.prototype.Remove = function () {
11517
+ this.destroyEntity();
11518
+ };
11519
+ return PolygonPoint;
11520
+ }());
11521
+ var Draw3dPolygon = /** @class */ (function () {
11522
+ function Draw3dPolygon(params) {
11523
+ var _this = this;
11524
+ this.points = [];
11525
+ this.changed = false;
11526
+ this.hidePolygon = false;
11527
+ this.perPositionHeight = false;
11528
+ this.smoothing = false;
11529
+ this.maxPoints = -1;
11530
+ this.viewer = params.viewer;
11531
+ this.onFinish = params.onFinish;
11532
+ this.onChange = params.onChange;
11533
+ this.maxPoints = isNaN(+params.maxPoints) ? -1 : +params.maxPoints;
11534
+ this.perPositionHeight = Boolean(params.perPositionHeight);
11535
+ if (params.hierarchy) {
11536
+ params.hierarchy.positions.forEach(function (pos3d) {
11537
+ _this.points.push(new PolygonPoint(_this.viewer, pos3d, _this.perPositionHeight));
11538
+ });
11539
+ }
11540
+ if (params.hidePolygon) {
11541
+ this.hidePolygon = params.hidePolygon;
11542
+ }
11543
+ if (params.smoothing) {
11544
+ this.smoothing = params.smoothing;
11545
+ }
11546
+ }
11547
+ Object.defineProperty(Draw3dPolygon.prototype, "hasReachedMax", {
11548
+ get: function () {
11549
+ return this.maxPoints > 0 && this.points.length >= this.maxPoints;
11550
+ },
11551
+ enumerable: false,
11552
+ configurable: true
11553
+ });
11554
+ /**
11555
+ * Starts or resumes the tool.
11556
+ */
11557
+ Draw3dPolygon.prototype.Start = function () {
11558
+ this.createCursor();
11559
+ this.createEntity();
11560
+ this.points.forEach(function (x) {
11561
+ x.Create();
11562
+ });
11563
+ this.startEvents();
11564
+ if (this.points.length > 2) {
11565
+ this.createFinishButton();
11566
+ }
11567
+ };
11568
+ /**
11569
+ * Stops events without removing the entity.
11570
+ */
11571
+ Draw3dPolygon.prototype.Pause = function () {
11572
+ this.destroyEvents();
11573
+ this.points.forEach(function (point) {
11574
+ point.Remove();
11575
+ });
11576
+ this.destroyFinishButton();
11577
+ this.destroyCursor();
11578
+ if (this.draggingPoint) {
11579
+ this.draggingPoint.Dispose();
11580
+ this.draggingPoint = null;
11581
+ ViewUtils.SetLockedCameraStatus({
11582
+ status: false,
11583
+ viewer: this.viewer
11584
+ });
11585
+ }
11586
+ };
11587
+ /**
11588
+ * Disposes of the tool. Removes events and entity.
11589
+ */
11590
+ Draw3dPolygon.prototype.Dispose = function () {
11591
+ this.destroyFinishButton();
11592
+ this.destroyEvents();
11593
+ this.destroyEntity();
11594
+ this.destroyCursor();
11595
+ this.points.forEach(function (point) {
11596
+ point.Dispose();
11597
+ });
11598
+ this.points = [];
11599
+ if (this.draggingPoint) {
11600
+ this.draggingPoint.Dispose();
11601
+ this.draggingPoint = null;
11602
+ ViewUtils.SetLockedCameraStatus({
11603
+ status: false,
11604
+ viewer: this.viewer
11605
+ });
11606
+ }
11607
+ };
11608
+ Draw3dPolygon.prototype.GetHierarchy = function (smooth) {
11609
+ if (smooth === void 0) { smooth = false; }
11610
+ if (smooth) {
11611
+ if (!this.changed && this.cachedHierarchy) {
11612
+ return this.cachedHierarchy;
11613
+ }
11614
+ var posses = this.points.map(function (x) { return x.GetPosition(); });
11615
+ if (smooth) {
11616
+ posses = DrawingUtils.SmoothPoints(posses, this.smoothing ? DEFAULT_SMOOTH_MULTIPLIER : 0, true);
11617
+ }
11618
+ this.cachedHierarchy = new PolygonHierarchy(posses, []);
11619
+ this.changed = false;
11620
+ return this.cachedHierarchy;
11621
+ }
11622
+ return new PolygonHierarchy(this.points.map(function (x) { return x.GetPosition(); }), []);
11623
+ };
11624
+ Draw3dPolygon.prototype.getOutlinePosses = function (smooth) {
11625
+ if (smooth === void 0) { smooth = false; }
11626
+ var hierarchy = this.GetHierarchy(smooth);
11627
+ var posses = hierarchy.positions.map(function (x) { return x.clone(); });
11628
+ if (posses.length > 2 && !Cartes.IsRing3Closed(posses)) {
11629
+ posses.push(posses[0]);
11630
+ }
11631
+ return posses;
11632
+ };
11633
+ Draw3dPolygon.prototype.startEvents = function () {
11634
+ var _this = this;
11635
+ this.destroyEvents();
11636
+ this.events = new ScreenSpaceEventHandler(this.viewer.canvas);
11637
+ this.events.setInputAction(function (e) {
11638
+ var pos2d = e.position;
11639
+ if (Cartes.ValidateCartes2(pos2d)) {
11640
+ _this.onMouseClick(pos2d);
11641
+ }
11642
+ }, ScreenSpaceEventType.LEFT_CLICK);
11643
+ this.events.setInputAction(function (e) {
11644
+ var pos2d = e.position;
11645
+ if (Cartes.ValidateCartes2(pos2d)) {
11646
+ _this.onMouseUp(pos2d);
11647
+ }
11648
+ }, ScreenSpaceEventType.LEFT_UP);
11649
+ this.events.setInputAction(function (e) {
11650
+ var pos2d = e.endPosition;
11651
+ if (Cartes.ValidateCartes2(pos2d)) {
11652
+ _this.onMouseMove(pos2d);
11653
+ }
11654
+ }, ScreenSpaceEventType.MOUSE_MOVE);
11655
+ this.events.setInputAction(function (e) {
11656
+ var pos2d = e.position;
11657
+ if (Cartes.ValidateCartes2(pos2d)) {
11658
+ _this.onMouseDown(pos2d);
11659
+ }
11660
+ }, ScreenSpaceEventType.LEFT_DOWN);
11661
+ this.events.setInputAction(function (e) {
11662
+ var pos2d = e.position;
11663
+ if (Cartes.ValidateCartes2(pos2d)) {
11664
+ _this.onMouseRightClick(pos2d);
11665
+ }
11666
+ }, ScreenSpaceEventType.RIGHT_CLICK);
11667
+ this.renderEventRemoval = this.viewer.scene.postRender.addEventListener(function () {
11668
+ _this.updateFinishButton();
11669
+ });
11670
+ };
11671
+ Draw3dPolygon.prototype.onMouseUp = function (pos2d) {
11672
+ if (this.draggingPoint) {
11673
+ this.draggingPoint = null;
11674
+ ViewUtils.SetLockedCameraStatus({
11675
+ status: false,
11676
+ viewer: this.viewer
11677
+ });
11678
+ }
11679
+ };
11680
+ Draw3dPolygon.prototype.onMouseClick = function (pos2d) {
11681
+ var _a;
11682
+ if (!this.draggingPoint && !this.hasReachedMax) {
11683
+ var pos3d = DrawingUtils.GetAccuratePosition(this.viewer, pos2d);
11684
+ if (Cartes.ValidateCartes3(pos3d)) {
11685
+ var positions = this.GetHierarchy().positions;
11686
+ var index = getInsertIndex(positions, pos3d);
11687
+ var point = new PolygonPoint(this.viewer, pos3d, this.perPositionHeight);
11688
+ point.Create();
11689
+ this.points.splice(index, 0, point);
11690
+ this.changed = true;
11691
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, this.GetHierarchy());
11692
+ if (!this.finishElement && this.points.length > 2) {
11693
+ this.createFinishButton();
11694
+ }
11695
+ }
11696
+ }
11697
+ };
11698
+ Draw3dPolygon.prototype.onMouseDown = function (pos2d) {
11699
+ var point = this.getPointFrom2dPos(pos2d);
11700
+ if (point) {
11701
+ this.draggingPoint = point;
11702
+ ViewUtils.SetLockedCameraStatus({
11703
+ status: true,
11704
+ viewer: this.viewer
11705
+ });
11706
+ }
11707
+ };
11708
+ Draw3dPolygon.prototype.onMouseRightClick = function (pos2d) {
11709
+ var _a;
11710
+ var point = this.getPointFrom2dPos(pos2d);
11711
+ if (point) {
11712
+ var index = this.points.findIndex(function (x) { return x.Id == point.Id; });
11713
+ if (index >= 0) {
11714
+ this.points.splice(index, 1);
11715
+ point.Dispose();
11716
+ this.changed = true;
11717
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, this.GetHierarchy());
11718
+ if (this.points.length < 3) {
11719
+ this.destroyFinishButton();
11720
+ }
11721
+ }
11722
+ }
11723
+ };
11724
+ Draw3dPolygon.prototype.onMouseMove = function (pos2d) {
11725
+ var _a;
11726
+ var pos3d = DrawingUtils.GetAccuratePosition(this.viewer, pos2d);
11727
+ if (Cartes.ValidateCartes3(pos3d)) {
11728
+ this.cursorPos = pos3d;
11729
+ if (this.draggingPoint) {
11730
+ this.draggingPoint.SetPosition(pos3d);
11731
+ this.changed = true;
11732
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, this.GetHierarchy());
11733
+ }
11734
+ }
11735
+ };
11736
+ Draw3dPolygon.prototype.destroyEvents = function () {
11737
+ var _a, _b;
11738
+ (_a = this.events) === null || _a === void 0 ? void 0 : _a.destroy();
11739
+ this.events = null;
11740
+ (_b = this.renderEventRemoval) === null || _b === void 0 ? void 0 : _b.call(this);
11741
+ this.renderEventRemoval = null;
11742
+ };
11743
+ Draw3dPolygon.prototype.createEntity = function () {
11744
+ var _this = this;
11745
+ this.destroyEntity();
11746
+ this.polygon = this.viewer.entities.add({
11747
+ polygon: {
11748
+ hierarchy: new CallbackProperty(function () { return _this.GetHierarchy(true); }, false),
11749
+ material: Color.fromCssColorString(OUTLINE_COLOR),
11750
+ heightReference: this.perPositionHeight ? HeightReference.NONE : HeightReference.CLAMP_TO_GROUND,
11751
+ perPositionHeight: this.perPositionHeight ? true : undefined,
11752
+ shadows: ShadowMode.ENABLED,
11753
+ classificationType: ClassificationType.TERRAIN
11754
+ },
11755
+ polyline: {
11756
+ positions: new CallbackProperty(function () { return _this.getOutlinePosses(true); }, false),
11757
+ width: 6,
11758
+ material: Color.fromCssColorString(FILL_COLOR),
11759
+ clampToGround: !this.perPositionHeight
11760
+ },
11761
+ show: !this.hidePolygon
11762
+ });
11763
+ };
11764
+ Draw3dPolygon.prototype.destroyEntity = function () {
11765
+ if (this.polygon && this.viewer.entities.contains(this.polygon)) {
11766
+ this.viewer.entities.remove(this.polygon);
11767
+ }
11768
+ this.polygon = null;
11769
+ };
11770
+ Draw3dPolygon.prototype.createCursor = function () {
11771
+ var _this = this;
11772
+ this.destroyCursor();
11773
+ this.cursor = this.viewer.entities.add({
11774
+ point: {
11775
+ pixelSize: 10,
11776
+ color: Color.fromCssColorString(FILL_COLOR),
11777
+ outlineColor: Color.WHITE,
11778
+ outlineWidth: 2,
11779
+ heightReference: this.perPositionHeight ? HeightReference.NONE : HeightReference.CLAMP_TO_GROUND
11780
+ },
11781
+ position: new CallbackProperty(function () { return _this.cursorPos; }, false)
11782
+ });
11783
+ };
11784
+ Draw3dPolygon.prototype.destroyCursor = function () {
11785
+ if (this.cursor && this.viewer.entities.contains(this.cursor)) {
11786
+ this.viewer.entities.remove(this.cursor);
11787
+ }
11788
+ this.cursor = null;
11789
+ };
11790
+ Draw3dPolygon.prototype.getPointFrom2dPos = function (pos2d) {
11791
+ var drill = this.viewer.scene.drillPick(pos2d, 3, 5, 5);
11792
+ if (drill && drill.length > 0) {
11793
+ var _loop_1 = function (i) {
11794
+ var entity = drill[i].id;
11795
+ if (entity instanceof Entity) {
11796
+ var id_1 = entity.id;
11797
+ var point = this_1.points.find(function (x) { return x.Id == id_1; });
11798
+ if (point) {
11799
+ return { value: point };
11800
+ }
11801
+ }
11802
+ };
11803
+ var this_1 = this;
11804
+ for (var i = 0; i < drill.length; i++) {
11805
+ var state_1 = _loop_1(i);
11806
+ if (typeof state_1 === "object")
11807
+ return state_1.value;
11808
+ }
11809
+ }
11810
+ return null;
11811
+ };
11812
+ Draw3dPolygon.prototype.createFinishButton = function () {
11813
+ var _this = this;
11814
+ this.destroyFinishButton();
11815
+ if (!this.onFinish) {
11816
+ return;
11817
+ }
11818
+ var ele = document.createElement("div");
11819
+ ele.setAttribute("style", "\n left: 0px;\n top: 0px;\n position: absolute;\n z-index: 3;\n border-radius: 5px;\n background-color: white;\n display: flex;\n align-items: center;\n padding: 3px 4px;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n box-shadow: 0px 0px 1px rgba(18, 22, 25, 0.24), 0px 18px 36px -4px rgba(18, 22, 25, 0.6);\n ");
11820
+ var butt = document.createElement("button");
11821
+ butt.setAttribute("style", "\n cursor: pointer;\n border-radius: .375rem;\n padding: 4px 9px;\n transition: opacity 0.3s ease;\n width: 100px;\n width: min-content;\n white-space: nowrap;\n background-color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-grow: 1;\n flex-shrink: 1;\n height: 100%; \n background-color: #0072c3;\n border: 1px solid #0072c3;\n color: white;\n ");
11822
+ butt.innerText = "Finish?";
11823
+ butt.onclick = function () {
11824
+ _this.onFinish(_this.GetHierarchy());
11825
+ };
11826
+ ele.appendChild(butt);
11827
+ ele.style.display = "none";
11828
+ this.viewer.canvas.parentElement.appendChild(ele);
11829
+ this.finishElement = ele;
11830
+ this.updateFinishButton();
11831
+ };
11832
+ Draw3dPolygon.prototype.destroyFinishButton = function () {
11833
+ if (this.finishElement && this.finishElement.parentElement) {
11834
+ this.finishElement.remove();
11835
+ }
11836
+ this.finishElement = null;
11837
+ };
11838
+ Draw3dPolygon.prototype.updateFinishButton = function () {
11839
+ if (this.finishElement) {
11840
+ var point = this.points.length ? this.points[0] : null;
11841
+ if (point) {
11842
+ var pos3d = point.GetPosition();
11843
+ if (Cartes.ValidateCartes3(pos3d)) {
11844
+ var pos2d = this.viewer.scene.cartesianToCanvasCoordinates(pos3d);
11845
+ if (Cartes.ValidateCartes2(pos2d)) {
11846
+ this.finishElement.style.left = "".concat(pos2d.x + 10, "px");
11847
+ this.finishElement.style.top = "".concat(pos2d.y - 20, "px");
11848
+ this.finishElement.style.display = "flex";
11849
+ }
11850
+ }
11851
+ }
11852
+ }
11853
+ };
11854
+ return Draw3dPolygon;
11855
+ }());
11856
+
11857
+ var DEFAULT_SMOOTH_MULTIPLIER$1 = 0;
11858
+ function avgDistanceFromPointPair$1(refPoint, pos1, pos2) {
11859
+ var carto1 = Cartographic.fromCartesian(refPoint);
11860
+ var carto2 = Cartographic.fromCartesian(pos1);
11861
+ var carto3 = Cartographic.fromCartesian(pos2);
11862
+ var x1 = carto1.longitude;
11863
+ var y1 = carto1.latitude;
11864
+ var x2 = carto2.longitude;
11865
+ var y2 = carto2.latitude;
11866
+ var x3 = carto3.longitude;
11867
+ var y3 = carto3.latitude;
11868
+ var A = x1 - x2;
11869
+ var B = y1 - y2;
11870
+ var C = x3 - x2;
11871
+ var D = y3 - y2;
11872
+ var dot = A * C + B * D;
11873
+ var lenSq = C * C + D * D;
11874
+ var param = dot / lenSq;
11875
+ var xx;
11876
+ var yy;
11877
+ if (param < 0 || x2 == x3 && y2 == y3) {
11878
+ xx = x2;
11879
+ yy = y2;
11880
+ }
11881
+ else if (param > 1) {
11882
+ xx = x3;
11883
+ yy = y3;
11884
+ }
11885
+ else {
11886
+ xx = x2 + param * C;
11887
+ yy = y2 + param * D;
11888
+ }
11889
+ var dx = x1 - xx;
11890
+ var dy = y1 - yy;
11891
+ return Math.sqrt(dx * dx + dy * dy);
11892
+ }
11893
+ function getInsertIndex$1(positions, pos3d) {
11894
+ if (positions.length < 2) {
11895
+ return 0;
11896
+ }
11897
+ var index = 0;
11898
+ if (positions) {
11899
+ var marginalShift = function (pos) {
11900
+ var SHIFT = 0.001;
11901
+ pos = pos.clone();
11902
+ return new Cartesian3(pos.x + SHIFT, pos.y + SHIFT, pos.z + SHIFT);
11903
+ };
11904
+ var distance = avgDistanceFromPointPair$1(pos3d, positions[0], marginalShift(positions[0]));
11905
+ var endDistance = avgDistanceFromPointPair$1(pos3d, positions[positions.length - 1], marginalShift(positions[positions.length - 1]));
11906
+ if (endDistance < distance) {
11907
+ index = positions.length;
11908
+ distance = endDistance;
11909
+ }
11910
+ for (var j = 0; j < positions.length; j++) {
11911
+ var pos1 = positions[j];
11912
+ var pos2 = positions[j + 1];
11913
+ var pos2Index = j + 1;
11914
+ if (Cartes.ValidateCartes3(pos1), Cartes.ValidateCartes3(pos2)) {
11915
+ var length_1 = avgDistanceFromPointPair$1(pos3d, pos1, pos2);
11916
+ if (length_1 < distance) {
11917
+ var insertIndex = pos2Index == 0 ? 0 : j > pos2Index ? j : pos2Index;
11918
+ index = insertIndex;
11919
+ distance = length_1;
11920
+ }
11921
+ }
11922
+ }
11923
+ }
11924
+ return index;
11925
+ }
11926
+ var FILL_COLOR$1 = "#33B1FF";
11927
+ var POINT_SIZE$1 = 25;
11928
+ var PolylinePoint = /** @class */ (function () {
11929
+ function PolylinePoint(viewer, position, perPositionHeight) {
11930
+ this.id = ObjectUtils.UId();
11931
+ this.viewer = viewer;
11932
+ this.position = position;
11933
+ this.perPositionHeight = perPositionHeight;
11934
+ }
11935
+ Object.defineProperty(PolylinePoint.prototype, "Id", {
11936
+ get: function () {
11937
+ return this.id;
11938
+ },
11939
+ enumerable: false,
11940
+ configurable: true
11941
+ });
11942
+ PolylinePoint.prototype.GetPosition = function () {
11943
+ return this.position.clone();
11944
+ };
11945
+ PolylinePoint.prototype.SetPosition = function (value) {
11946
+ this.position = value;
11947
+ };
11948
+ PolylinePoint.prototype.createEntity = function () {
11949
+ var _this = this;
11950
+ this.destroyEntity();
11951
+ this.point = this.viewer.entities.add({
11952
+ id: this.id,
11953
+ point: {
11954
+ pixelSize: POINT_SIZE$1,
11955
+ color: Color.fromCssColorString(FILL_COLOR$1),
11956
+ outlineColor: Color.WHITE,
11957
+ outlineWidth: 2,
11958
+ heightReference: this.perPositionHeight ? HeightReference.NONE : HeightReference.CLAMP_TO_GROUND
11959
+ },
11960
+ position: new CallbackProperty(function () { return _this.position; }, false)
11961
+ });
11962
+ };
11963
+ PolylinePoint.prototype.destroyEntity = function () {
11964
+ if (this.point && this.viewer.entities.contains(this.point)) {
11965
+ this.viewer.entities.remove(this.point);
11966
+ }
11967
+ this.point = null;
11968
+ };
11969
+ PolylinePoint.prototype.Dispose = function () {
11970
+ this.destroyEntity();
11971
+ };
11972
+ PolylinePoint.prototype.Create = function () {
11973
+ this.createEntity();
11974
+ };
11975
+ PolylinePoint.prototype.Remove = function () {
11976
+ this.destroyEntity();
11977
+ };
11978
+ return PolylinePoint;
11979
+ }());
11980
+ var Draw3dPolyline = /** @class */ (function () {
11981
+ function Draw3dPolyline(params) {
11982
+ this.points = [];
11983
+ this.hideLine = false;
11984
+ this.perPositionHeight = false;
11985
+ this.smoothing = false;
11986
+ this.viewer = params.viewer;
11987
+ this.onFinish = params.onFinish;
11988
+ this.onChange = params.onChange;
11989
+ if (params.perPositionHeight) {
11990
+ this.perPositionHeight = params.perPositionHeight;
11991
+ }
11992
+ if (params.posses) {
11993
+ for (var _i = 0, _a = params.posses; _i < _a.length; _i++) {
11994
+ var pos = _a[_i];
11995
+ this.points.push(new PolylinePoint(this.viewer, pos, this.perPositionHeight));
11996
+ }
11997
+ }
11998
+ if (params.hideLine) {
11999
+ this.hideLine = params.hideLine;
12000
+ }
12001
+ if (params.smoothing) {
12002
+ this.smoothing = params.smoothing;
12003
+ }
12004
+ }
12005
+ Draw3dPolyline.prototype.Start = function () {
12006
+ this.createEntity();
12007
+ this.points.forEach(function (x) {
12008
+ x.Create();
12009
+ });
12010
+ this.createCursor();
12011
+ this.startEvents();
12012
+ if (this.points.length > 1) {
12013
+ this.createFinishButton();
12014
+ }
12015
+ };
12016
+ Draw3dPolyline.prototype.Pause = function () {
12017
+ this.points.forEach(function (x) {
12018
+ x.Remove();
12019
+ });
12020
+ this.destroyFinishButton();
12021
+ this.destroyCursor();
12022
+ this.destroyEvents();
12023
+ };
12024
+ Draw3dPolyline.prototype.Dispose = function () {
12025
+ this.destroyEntity();
12026
+ this.points.forEach(function (x) {
12027
+ x.Dispose();
12028
+ });
12029
+ this.destroyCursor();
12030
+ this.destroyEvents();
12031
+ this.destroyFinishButton();
12032
+ };
12033
+ Draw3dPolyline.prototype.GetPositions = function (smooth) {
12034
+ if (smooth === void 0) { smooth = false; }
12035
+ var points = this.points.map(function (x) { return x.GetPosition(); });
12036
+ if (smooth) {
12037
+ points = DrawingUtils.SmoothPoints(points, this.smoothing ? DEFAULT_SMOOTH_MULTIPLIER$1 : 0, false);
12038
+ }
12039
+ return points;
12040
+ };
12041
+ Draw3dPolyline.prototype.startEvents = function () {
12042
+ var _this = this;
12043
+ this.destroyEvents();
12044
+ this.events = new ScreenSpaceEventHandler(this.viewer.canvas);
12045
+ this.events.setInputAction(function (e) {
12046
+ var pos2d = e.position;
12047
+ if (Cartes.ValidateCartes2(pos2d)) {
12048
+ _this.onMouseClick(pos2d);
12049
+ }
12050
+ }, ScreenSpaceEventType.LEFT_CLICK);
12051
+ this.events.setInputAction(function (e) {
12052
+ var pos2d = e.position;
12053
+ if (Cartes.ValidateCartes2(pos2d)) {
12054
+ _this.onMouseUp(pos2d);
12055
+ }
12056
+ }, ScreenSpaceEventType.LEFT_UP);
12057
+ this.events.setInputAction(function (e) {
12058
+ var pos2d = e.endPosition;
12059
+ if (Cartes.ValidateCartes2(pos2d)) {
12060
+ _this.onMouseMove(pos2d);
12061
+ }
12062
+ }, ScreenSpaceEventType.MOUSE_MOVE);
12063
+ this.events.setInputAction(function (e) {
12064
+ var pos2d = e.position;
12065
+ if (Cartes.ValidateCartes2(pos2d)) {
12066
+ _this.onMouseDown(pos2d);
12067
+ }
12068
+ }, ScreenSpaceEventType.LEFT_DOWN);
12069
+ this.events.setInputAction(function (e) {
12070
+ var pos2d = e.position;
12071
+ if (Cartes.ValidateCartes2(pos2d)) {
12072
+ _this.onMouseRightClick(pos2d);
12073
+ }
12074
+ }, ScreenSpaceEventType.RIGHT_CLICK);
12075
+ this.renderEventRemoval = this.viewer.scene.postRender.addEventListener(function () {
12076
+ _this.updateFinishButton();
12077
+ });
12078
+ };
12079
+ Draw3dPolyline.prototype.onMouseUp = function (pos2d) {
12080
+ if (this.draggingPoint) {
12081
+ this.draggingPoint = null;
12082
+ ViewUtils.SetLockedCameraStatus({
12083
+ status: false,
12084
+ viewer: this.viewer
12085
+ });
12086
+ }
12087
+ };
12088
+ Draw3dPolyline.prototype.onMouseClick = function (pos2d) {
12089
+ var _a;
12090
+ if (!this.draggingPoint) {
12091
+ var pos3d = DrawingUtils.GetAccuratePosition(this.viewer, pos2d);
12092
+ if (Cartes.ValidateCartes3(pos3d)) {
12093
+ var positions = this.GetPositions();
12094
+ var index = getInsertIndex$1(positions, pos3d);
12095
+ var point = new PolylinePoint(this.viewer, pos3d, this.perPositionHeight);
12096
+ point.Create();
12097
+ this.points.splice(index, 0, point);
12098
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, this.GetPositions());
12099
+ if (!this.finishElement && this.points.length > 1) {
12100
+ this.createFinishButton();
12101
+ }
12102
+ }
12103
+ }
12104
+ };
12105
+ Draw3dPolyline.prototype.onMouseDown = function (pos2d) {
12106
+ var point = this.getPointFrom2dPos(pos2d);
12107
+ if (point) {
12108
+ this.draggingPoint = point;
12109
+ ViewUtils.SetLockedCameraStatus({
12110
+ status: true,
12111
+ viewer: this.viewer
12112
+ });
12113
+ }
12114
+ };
12115
+ Draw3dPolyline.prototype.onMouseRightClick = function (pos2d) {
12116
+ var _a;
12117
+ var point = this.getPointFrom2dPos(pos2d);
12118
+ if (point) {
12119
+ var index = this.points.findIndex(function (x) { return x.Id == point.Id; });
12120
+ if (index >= 0) {
12121
+ this.points.splice(index, 1);
12122
+ point.Dispose();
12123
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, this.GetPositions());
12124
+ if (this.points.length < 2) {
12125
+ this.destroyFinishButton();
12126
+ }
12127
+ }
12128
+ }
12129
+ };
12130
+ Draw3dPolyline.prototype.onMouseMove = function (pos2d) {
12131
+ var _a;
12132
+ var pos3d = DrawingUtils.GetAccuratePosition(this.viewer, pos2d);
12133
+ if (Cartes.ValidateCartes3(pos3d)) {
12134
+ this.cursorPos = pos3d;
12135
+ if (this.draggingPoint) {
12136
+ this.draggingPoint.SetPosition(pos3d);
12137
+ (_a = this.onChange) === null || _a === void 0 ? void 0 : _a.call(this, this.GetPositions());
12138
+ }
12139
+ }
12140
+ };
12141
+ Draw3dPolyline.prototype.destroyEvents = function () {
12142
+ var _a, _b;
12143
+ (_a = this.events) === null || _a === void 0 ? void 0 : _a.destroy();
12144
+ this.events = null;
12145
+ (_b = this.renderEventRemoval) === null || _b === void 0 ? void 0 : _b.call(this);
12146
+ this.renderEventRemoval = null;
12147
+ };
12148
+ Draw3dPolyline.prototype.createEntity = function () {
12149
+ var _this = this;
12150
+ this.destroyEntity();
12151
+ this.polyline = this.viewer.entities.add({
12152
+ polyline: {
12153
+ positions: new CallbackProperty(function () { return _this.GetPositions(true); }, false),
12154
+ width: 6,
12155
+ material: Color.fromCssColorString(FILL_COLOR$1),
12156
+ clampToGround: !this.perPositionHeight
12157
+ },
12158
+ show: !this.hideLine
12159
+ });
12160
+ };
12161
+ Draw3dPolyline.prototype.destroyEntity = function () {
12162
+ if (this.polyline && this.viewer.entities.contains(this.polyline)) {
12163
+ this.viewer.entities.remove(this.polyline);
12164
+ }
12165
+ this.polyline = null;
12166
+ };
12167
+ Draw3dPolyline.prototype.createCursor = function () {
12168
+ var _this = this;
12169
+ this.destroyCursor();
12170
+ this.cursor = this.viewer.entities.add({
12171
+ point: {
12172
+ pixelSize: 10,
12173
+ color: Color.fromCssColorString(FILL_COLOR$1),
12174
+ outlineColor: Color.WHITE,
12175
+ outlineWidth: 2,
12176
+ heightReference: this.perPositionHeight ? HeightReference.NONE : HeightReference.CLAMP_TO_GROUND
12177
+ },
12178
+ position: new CallbackProperty(function () { return _this.cursorPos; }, false)
12179
+ });
12180
+ };
12181
+ Draw3dPolyline.prototype.destroyCursor = function () {
12182
+ if (this.cursor && this.viewer.entities.contains(this.cursor)) {
12183
+ this.viewer.entities.remove(this.cursor);
12184
+ }
12185
+ this.cursor = null;
12186
+ };
12187
+ Draw3dPolyline.prototype.getPointFrom2dPos = function (pos2d) {
12188
+ var drill = this.viewer.scene.drillPick(pos2d, 3, 5, 5);
12189
+ if (drill && drill.length > 0) {
12190
+ var _loop_1 = function (i) {
12191
+ var entity = drill[i].id;
12192
+ if (entity instanceof Entity) {
12193
+ var id_1 = entity.id;
12194
+ var point = this_1.points.find(function (x) { return x.Id == id_1; });
12195
+ if (point) {
12196
+ return { value: point };
12197
+ }
12198
+ }
12199
+ };
12200
+ var this_1 = this;
12201
+ for (var i = 0; i < drill.length; i++) {
12202
+ var state_1 = _loop_1(i);
12203
+ if (typeof state_1 === "object")
12204
+ return state_1.value;
12205
+ }
12206
+ }
12207
+ return null;
12208
+ };
12209
+ Draw3dPolyline.prototype.createFinishButton = function () {
12210
+ var _this = this;
12211
+ this.destroyFinishButton();
12212
+ if (!this.onFinish) {
12213
+ return;
12214
+ }
12215
+ var ele = document.createElement("div");
12216
+ ele.setAttribute("style", "\n left: 0px;\n top: 0px;\n position: absolute;\n z-index: 3;\n border-radius: 5px;\n background-color: white;\n display: flex;\n align-items: center;\n padding: 3px 4px;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n box-shadow: 0px 0px 1px rgba(18, 22, 25, 0.24), 0px 18px 36px -4px rgba(18, 22, 25, 0.6);\n ");
12217
+ var butt = document.createElement("button");
12218
+ butt.setAttribute("style", "\n cursor: pointer;\n border-radius: .375rem;\n padding: 4px 9px;\n transition: opacity 0.3s ease;\n width: 100px;\n width: min-content;\n white-space: nowrap;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-grow: 1;\n flex-shrink: 1;\n height: 100%;\n background-color: #0072c3;\n border: 1px solid #0072c3;\n color: white;\n ");
12219
+ butt.innerText = "Finish?";
12220
+ butt.onclick = function () {
12221
+ _this.onFinish(_this.GetPositions());
12222
+ };
12223
+ ele.appendChild(butt);
12224
+ ele.style.display = "none";
12225
+ this.viewer.canvas.parentElement.appendChild(ele);
12226
+ this.finishElement = ele;
12227
+ this.updateFinishButton();
12228
+ };
12229
+ Draw3dPolyline.prototype.destroyFinishButton = function () {
12230
+ if (this.finishElement && this.finishElement.parentElement) {
12231
+ this.finishElement.remove();
12232
+ }
12233
+ this.finishElement = null;
12234
+ };
12235
+ Draw3dPolyline.prototype.updateFinishButton = function () {
12236
+ if (this.finishElement) {
12237
+ var point = this.points.length ? this.points[0] : null;
12238
+ if (point) {
12239
+ var pos3d = point.GetPosition();
12240
+ if (Cartes.ValidateCartes3(pos3d)) {
12241
+ var pos2d = this.viewer.scene.cartesianToCanvasCoordinates(pos3d);
12242
+ if (Cartes.ValidateCartes2(pos2d)) {
12243
+ this.finishElement.style.left = "".concat(pos2d.x + 10, "px");
12244
+ this.finishElement.style.top = "".concat(pos2d.y - 20, "px");
12245
+ this.finishElement.style.display = "flex";
12246
+ }
12247
+ }
12248
+ }
12249
+ }
12250
+ };
12251
+ return Draw3dPolyline;
12252
+ }());
12253
+
12254
+ var WidgetNavCompass = /** @class */ (function (_super) {
12255
+ __extends(WidgetNavCompass, _super);
12256
+ function WidgetNavCompass(params) {
12257
+ var _this = _super.call(this, params) || this;
12258
+ _this.ZOOM_DISTANCE = 0.85;
12259
+ _this.ZOOM_TIME = 0.2;
12260
+ _this.TURN_SPEED = 0.04;
12261
+ _this.MIN_ZOOM_DISTANCE = 0.3;
12262
+ _this.STYLESHEET_ID = "nextspace-nav-compass-stylesheet";
12263
+ _this._generateStyles();
12264
+ _this._generateElement();
12265
+ _this._listenToRenders();
12266
+ return _this;
12267
+ }
12268
+ WidgetNavCompass.prototype._getIs2d = function () {
12269
+ return this._viewer.camera.frustum instanceof OrthographicFrustum;
12270
+ };
12271
+ WidgetNavCompass.prototype._listenToRenders = function () {
12272
+ var _this = this;
12273
+ if (this._renderRemoval) {
12274
+ return;
12275
+ }
12276
+ this._renderRemoval = this._viewer.scene.postRender.addEventListener(function () {
12277
+ _this._updateAxis();
12278
+ _this._update2d3d();
12279
+ });
12280
+ };
12281
+ WidgetNavCompass.prototype.Dispose = function () {
12282
+ if (this._renderRemoval) {
12283
+ this._renderRemoval();
12284
+ this._renderRemoval = null;
12285
+ }
12286
+ _super.prototype.Dispose.call(this);
12287
+ };
12288
+ WidgetNavCompass.prototype._generateStyles = function () {
12289
+ if (document.getElementById(this.STYLESHEET_ID)) {
12290
+ return;
12291
+ }
12292
+ var style = document.createElement("style");
12293
+ style.id = this.STYLESHEET_ID;
12294
+ style.innerHTML = "\n .NextspaceNavCompass {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 85px;\n min-height: 150px;\n background: rgba(33, 39, 42, 0.75);\n box-shadow: 0px 0px 1px rgba(18, 22, 25, 0.18), 0px 18px 36px -4px rgba(18, 22, 25, 0.36);\n backdrop-filter: blur(20px);\n border-radius: 102px 102px 9px 9px;\n overflow: hidden;\n padding-top: 85px;\n padding-bottom: 5px;\n position: absolute;\n bottom: 10px;\n right: 10px;\n box-sizing: border-box;\n }\n\n .NextspaceNavCompass * {\n box-sizing: border-box;\n }\n\n .NextspaceNavCompassTop {\n position: absolute;\n height: 85px;\n width: 85px;\n top: -2px;\n border-radius: 50%;\n border: 1px solid #4D5358;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .NextspaceNavCompassAxis {\n background: #181d20;\n border: 1px solid rgba(255, 255, 255, 0.15);\n width: 60px;\n height: 60px;\n border-radius: 50%;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n\n .NextspaceNavCompassAxis >svg {\n transition: 0.3s ease;\n opacity: 0.9;\n position: absolute;\n }\n\n .NextspaceNavCompassArrow {\n margin-bottom: 6px;\n }\n\n .NextspaceNavCompassAxis:hover .NextspaceNavCompassArrow {\n opacity: 1;\n transform: scale(1.1);\n }\n\n .NextspaceNavCompassRow {\n display: flex;\n align-items: center;\n }\n\n .NextspaceNavCompassCol {\n display: flex;\n flex-direction: column;\n }\n\n .NextspaceNavCompassButt {\n width: 40px;\n height: 35px;\n flex-shrink: 1;\n flex-grow: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: 0.3s ease;\n }\n\n .NextspaceNavCompassButt[is-disabled=\"true\"] {\n opacity: 0.4;\n cursor: default;\n pointer-events: none;\n }\n\n .NextspaceNavCompassButt:hover {\n transform: scale(1.2);\n }\n\n .NextspaceNavCompassHorDash {\n background-color: rgba(255, 255, 255, 0.12);\n width: calc(100% - 10px);\n height: 1px;\n flex-shrink: 0;\n flex-grow: 0;\n margin-top: 5px;\n margin-bottom: 5px;\n }\n\n .NextspaceNavCompassVerDash {\n background-color: rgba(255, 255, 255, 0.12);\n width: 1px;\n height: 50px;\n flex-shrink: 0;\n flex-grow: 0;\n margin-top: 5px;\n margin-bottom: 5px;\n margin-left: 1px;\n margin-right: 1px;\n }\n\n .NextspaceNavCompassDimToggle {\n background: #121619;\n border-radius: 6px;\n width: calc(100% - 10px);\n height: 24px;\n flex-grow: 0;\n flex-shrink: 1;\n padding: 2px;\n display: flex;\n }\n\n .NextspaceNavCompassDimToggleButt {\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n flex-grow: 1;\n flex-shrink: 1;\n width: 100%;\n transition: 0.3s ease;\n cursor: pointer;\n opacity: 0.4;\n color: white;\n font-size: 12px;\n font-family: Arial, Helvetica, sans-serif;\n }\n\n .NextspaceNavCompassDimToggleButt[is-selected=\"true\"] {\n opacity: 1;\n background-color: #4D5358;\n box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.12);\n }\n ";
12295
+ document.head.appendChild(style);
12296
+ };
12297
+ WidgetNavCompass.prototype._generateElement = function () {
12298
+ var _this = this;
12299
+ var element = document.createElement("div");
12300
+ element.className = "NextspaceNavCompass";
12301
+ var top = document.createElement("div");
12302
+ top.className = "NextspaceNavCompassTop";
12303
+ element.appendChild(top);
12304
+ var axis = document.createElement("div");
12305
+ axis.className = "NextspaceNavCompassAxis";
12306
+ axis.setAttribute("title", "Click to reset north");
12307
+ top.appendChild(axis);
12308
+ axis.addEventListener("click", function () {
12309
+ _this._clickResetNorth();
12310
+ });
12311
+ axis.innerHTML = "\n <svg width=\"72\" height=\"72\" viewBox=\"0 0 94 94\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"46\" width=\"2\" height=\"8\" rx=\"1\" fill=\"#FF3D00\"/>\n <rect x=\"46\" y=\"86\" width=\"2\" height=\"8\" rx=\"1\" fill=\"#4D5254\"/>\n <rect x=\"94\" y=\"46\" width=\"2\" height=\"8\" rx=\"1\" transform=\"rotate(90 94 46)\" fill=\"#4D5254\"/>\n <rect x=\"8\" y=\"46\" width=\"2\" height=\"8\" rx=\"1\" transform=\"rotate(90 8 46)\" fill=\"#4D5254\"/>\n <rect x=\"79.5269\" y=\"13.0589\" width=\"2\" height=\"8\" rx=\"1\" transform=\"rotate(45 79.5269 13.0589)\" fill=\"#4D5254\"/>\n <rect x=\"18.7157\" y=\"73.8701\" width=\"2\" height=\"8\" rx=\"1\" transform=\"rotate(45 18.7157 73.8701)\" fill=\"#4D5254\"/>\n <rect x=\"80.9412\" y=\"79.5269\" width=\"2\" height=\"8\" rx=\"1\" transform=\"rotate(135 80.9412 79.5269)\" fill=\"#4D5254\"/>\n <rect x=\"20.1299\" y=\"18.7157\" width=\"2\" height=\"8\" rx=\"1\" transform=\"rotate(135 20.1299 18.7157)\" fill=\"#4D5254\"/>\n <rect x=\"28.8555\" y=\"5.80811\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(-22.5 28.8555 5.80811)\" fill=\"#505456\"/>\n <rect x=\"61.7662\" y=\"85.2617\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(-22.5 61.7662 85.2617)\" fill=\"#505456\"/>\n <rect x=\"88.1919\" y=\"28.8553\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(67.5 88.1919 28.8553)\" fill=\"#505456\"/>\n <rect x=\"8.73828\" y=\"61.7661\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(67.5 8.73828 61.7661)\" fill=\"#505456\"/>\n <rect x=\"63.2969\" y=\"5.04272\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(22.5 63.2969 5.04272)\" fill=\"#505456\"/>\n <rect x=\"30.386\" y=\"84.4963\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(22.5 30.386 84.4963)\" fill=\"#505456\"/>\n <rect x=\"88.9572\" y=\"63.2969\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(112.5 88.9572 63.2969)\" fill=\"#505456\"/>\n <rect x=\"9.50354\" y=\"30.3861\" width=\"2\" height=\"4\" rx=\"1\" transform=\"rotate(112.5 9.50354 30.3861)\" fill=\"#505456\"/>\n </svg>\n\n <svg class=\"NextspaceNavCompassArrow\" width=\"28\" height=\"35\" viewBox=\"0 0 32 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M31.544 39.666C31.969 39.29 32.114 38.682 31.905 38.15L17.229 0.845C17.028 0.334 16.542 0 16.001 0C15.46 0 14.974 0.335 14.773 0.846L0.0950303 38.155C-0.11397 38.687 0.0310303 39.295 0.45603 39.67C0.88103 40.046 1.49303 40.106 1.98203 39.821L14.699 32.401C15.515 31.925 16.518 31.925 17.333 32.401L30.019 39.816C30.507 40.101 31.12 40.041 31.545 39.665L31.544 39.666Z\" fill=\"url(#paint0_linear_363_9865)\"/>\n <path d=\"M16.001 0C15.46 0 14.974 0.335 14.773 0.846L0.0950303 38.155C-0.11397 38.687 0.0310303 39.295 0.45603 39.67C0.88103 40.046 1.49303 40.106 1.98203 39.821L14.699 32.401C15.103 32.165 15.552 32.047 16.002 32.045V0H16.001Z\" fill=\"#1192E8\"/>\n <path d=\"M0.454956 39.67C0.879956 40.046 1.49196 40.106 1.98096 39.821L14.698 32.401C15.102 32.165 15.551 32.047 16.001 32.045V24.844L0.454956 39.67Z\" fill=\"url(#paint1_linear_363_9865)\"/>\n <path d=\"M31.546 39.67C31.121 40.046 30.509 40.106 30.02 39.821L17.303 32.401C16.899 32.165 16.45 32.047 16 32.045V24.844L31.546 39.67Z\" fill=\"url(#paint2_linear_363_9865)\"/>\n <defs>\n <linearGradient id=\"paint0_linear_363_9865\" x1=\"16\" y1=\"0\" x2=\"16\" y2=\"39.9997\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#0072C3\"/>\n <stop offset=\"1\" stop-color=\"#00539A\"/>\n </linearGradient>\n <linearGradient id=\"paint1_linear_363_9865\" x1=\"8.22796\" y1=\"24.844\" x2=\"8.22796\" y2=\"39.9997\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#0072C3\"/>\n <stop offset=\"1\" stop-color=\"#00539A\"/>\n </linearGradient>\n <linearGradient id=\"paint2_linear_363_9865\" x1=\"23.773\" y1=\"24.844\" x2=\"23.773\" y2=\"39.9997\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#00539A\"/>\n <stop offset=\"1\" stop-color=\"#003A6D\"/>\n </linearGradient>\n </defs>\n </svg>\n ";
12312
+ this._axis = axis;
12313
+ var rotateRow = document.createElement("div");
12314
+ rotateRow.className = "NextspaceNavCompassRow";
12315
+ rotateRow.innerHTML = "\n <div class=\"NextspaceNavCompassButt\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 12.5C8 16.743 10.5205 20.389 14.1445 22.043C14.6875 22.291 15.3286 22.0152 15.5176 21.4492C15.6776 20.9702 15.4522 20.4473 14.9922 20.2383C12.0482 18.9023 10 15.943 10 12.5C10 10.3219 10.8297 8.34307 12.1777 6.83983L15.1465 9.80858C15.3415 10.0036 15.6585 10.0036 15.8535 9.80858C15.9505 9.71058 16 9.58306 16 9.45506L16 2.95506C16 2.68985 15.8946 2.43549 15.7071 2.24795C15.5196 2.06042 15.2652 1.95506 15 1.95506L8.5 1.95506C8.372 1.95506 8.24348 2.00355 8.14648 2.10155C7.95148 2.29655 7.95148 2.61358 8.14648 2.80858L10.7695 5.43163C9.05703 7.29483 8 9.76796 8 12.5Z\" fill=\"#A2A9B0\"/>\n </svg>\n </div>\n\n <div class=\"NextspaceNavCompassButt\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 12.5C16 16.743 13.4795 20.389 9.85547 22.043C9.31247 22.291 8.67142 22.0152 8.48242 21.4492C8.32242 20.9702 8.54781 20.4473 9.00781 20.2383C11.9518 18.9023 14 15.943 14 12.5C14 10.3219 13.1703 8.34307 11.8223 6.83983L8.85352 9.80858C8.65852 10.0036 8.34149 10.0036 8.14648 9.80858C8.04948 9.71058 8 9.58306 8 9.45506L8 2.95506C8 2.68985 8.10536 2.43549 8.29289 2.24795C8.48043 2.06042 8.73478 1.95506 9 1.95506L15.5 1.95506C15.628 1.95506 15.7565 2.00355 15.8535 2.10155C16.0485 2.29655 16.0485 2.61358 15.8535 2.80858L13.2305 5.43163C14.943 7.29483 16 9.76796 16 12.5Z\" fill=\"#A2A9B0\"/>\n </svg>\n </div>\n ";
12316
+ element.appendChild(rotateRow);
12317
+ var rotateLeft = rotateRow.children[0];
12318
+ var rotateRight = rotateRow.children[1];
12319
+ rotateLeft.addEventListener("click", function () {
12320
+ _this._doRotate(-Math.PI * 0.25);
12321
+ });
12322
+ rotateRight.addEventListener("click", function () {
12323
+ _this._doRotate(Math.PI * 0.25);
12324
+ });
12325
+ var horDash = document.createElement("div");
12326
+ horDash.className = "NextspaceNavCompassHorDash";
12327
+ element.appendChild(horDash);
12328
+ var etcRow = document.createElement("div");
12329
+ etcRow.className = "NextspaceNavCompassRow";
12330
+ etcRow.innerHTML = "\n <div class=\"NextspaceNavCompassCol\">\n <div class=\"NextspaceNavCompassButt\">\n <svg width=\"16\" height=\"9\" viewBox=\"0 0 16 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 8L8 1L15 8\" stroke=\"#A2A9B0\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n\n <div class=\"NextspaceNavCompassButt\">\n <svg width=\"16\" height=\"9\" viewBox=\"0 0 16 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 1L8 8L1 1\" stroke=\"#A2A9B0\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div class=\"NextspaceNavCompassVerDash\"></div>\n <div class=\"NextspaceNavCompassCol\">\n <div class=\"NextspaceNavCompassButt\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 1V15\" stroke=\"#A2A9B0\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M15 8L1 8\" stroke=\"#A2A9B0\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n\n <div class=\"NextspaceNavCompassButt\">\n <svg width=\"16\" height=\"2\" viewBox=\"0 0 16 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 1L1 0.999999\" stroke=\"#A2A9B0\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n </div>\n ";
12331
+ element.appendChild(etcRow);
12332
+ var lookUp = etcRow.children[0].children[0];
12333
+ this._up = lookUp;
12334
+ var lookDown = etcRow.children[0].children[1];
12335
+ lookUp.addEventListener("click", function () {
12336
+ _this._doLook(true);
12337
+ });
12338
+ this._down = lookDown;
12339
+ lookDown.addEventListener("click", function () {
12340
+ _this._doLook(false);
12341
+ });
12342
+ var zoomIn = etcRow.children[2].children[0];
12343
+ var zoomOut = etcRow.children[2].children[1];
12344
+ zoomIn.addEventListener("click", function () {
12345
+ _this._doZoom(true);
12346
+ });
12347
+ zoomOut.addEventListener("click", function () {
12348
+ _this._doZoom(false);
12349
+ });
12350
+ var dimToggle = document.createElement("div");
12351
+ dimToggle.className = "NextspaceNavCompassDimToggle";
12352
+ dimToggle.innerHTML = "\n <div class=\"NextspaceNavCompassDimToggleButt\" is-selected=\"false\">\n 3D\n </div>\n\n <div class=\"NextspaceNavCompassDimToggleButt\" is-selected=\"false\">\n 2D\n </div>\n ";
12353
+ element.appendChild(dimToggle);
12354
+ var butt2d = dimToggle.children[1];
12355
+ this._2d = butt2d;
12356
+ butt2d.addEventListener("click", function () {
12357
+ _this._toggle2d3d();
12358
+ });
12359
+ var butt3d = dimToggle.children[0];
12360
+ this._3d = butt3d;
12361
+ butt3d.addEventListener("click", function () {
12362
+ _this._toggle2d3d();
12363
+ });
12364
+ this.Container.appendChild(element);
12365
+ this._element = element;
12366
+ this._update2d3d();
12367
+ };
12368
+ WidgetNavCompass.prototype._updateAxis = function () {
12369
+ var heading = this._viewer.camera.heading;
12370
+ var axis = this._axis;
12371
+ axis.style.transform = "rotate(".concat(heading, "rad)");
12372
+ };
12373
+ WidgetNavCompass.prototype._clickResetNorth = function () {
12374
+ var viewer = this._viewer;
12375
+ var h = viewer.camera.heading;
12376
+ var north = h < Math.PI ? h : h - Math.PI * 2;
12377
+ this._doRotate(north);
12378
+ };
12379
+ WidgetNavCompass.prototype._doRotate = function (radians) {
12380
+ var viewer = this._viewer;
12381
+ var TURN_SPEED = this.TURN_SPEED;
12382
+ var left = radians < 0;
12383
+ radians = Math.abs(radians);
12384
+ var camera = viewer.camera;
12385
+ var is2d = this._getIs2d();
12386
+ var isLookingStraightDown = camera.pitch === -Math.PI / 2;
12387
+ if (is2d || isLookingStraightDown) {
12388
+ camera.flyTo({
12389
+ destination: camera.position,
12390
+ orientation: {
12391
+ heading: camera.heading + (left ? radians : -radians),
12392
+ pitch: camera.pitch,
12393
+ roll: camera.roll
12394
+ },
12395
+ duration: 0.2
12396
+ });
12397
+ }
12398
+ else {
12399
+ var c = viewer.canvas;
12400
+ var center = new Cartesian2(c.width / 2, c.height / 2);
12401
+ var ground_1 = DrawingUtils.GetAccuratePosition(viewer, center);
12402
+ if (!(ground_1 === null || ground_1 === void 0 ? void 0 : ground_1.x)) {
12403
+ return;
12404
+ }
12405
+ var offset_1 = Cartesian3.distance(camera.position, ground_1);
12406
+ var r_1 = 0;
12407
+ var unsub_1 = viewer.clock.onTick.addEventListener(function () {
12408
+ var inc = Math.PI * TURN_SPEED;
12409
+ if (r_1 + inc >= radians) {
12410
+ unsub_1();
12411
+ inc = radians - r_1;
12412
+ }
12413
+ camera.lookAt(ground_1, new HeadingPitchRange(camera.heading, camera.pitch, offset_1));
12414
+ left ? camera.rotateLeft(inc) : camera.rotateRight(inc);
12415
+ camera.lookAtTransform(Matrix4.IDENTITY);
12416
+ r_1 += inc;
12417
+ });
12418
+ }
12419
+ };
12420
+ WidgetNavCompass.prototype._doZoom = function (zoomIn) {
12421
+ var viewer = this._viewer;
12422
+ var c = viewer.canvas;
12423
+ var center = new Cartesian2(c.width / 2, c.height / 2);
12424
+ var camera = viewer.camera;
12425
+ var ground = DrawingUtils.GetAccuratePosition(viewer, center);
12426
+ if (!(ground === null || ground === void 0 ? void 0 : ground.x)) {
12427
+ return;
12428
+ }
12429
+ var p = camera.position;
12430
+ var height = Cartesian3.distance(p, ground);
12431
+ var mag = this.ZOOM_DISTANCE / Math.max(1, 4 - Math.log10(height));
12432
+ var zoom = zoomIn ? 1 - mag : 1 + mag;
12433
+ var offset = Cartesian3.multiplyByScalar(Cartesian3.subtract(p, ground, new Cartesian3), zoom, new Cartesian3);
12434
+ if (zoomIn && Cartesian3.magnitude(offset) <= this.MIN_ZOOM_DISTANCE) {
12435
+ return;
12436
+ }
12437
+ var to = Cartesian3.add(ground, offset, new Cartesian3);
12438
+ camera.flyTo({
12439
+ destination: to,
12440
+ orientation: { heading: camera.heading, pitch: camera.pitch, roll: camera.roll },
12441
+ duration: this.ZOOM_TIME,
12442
+ easingFunction: EasingFunction.QUADRATIC_IN_OUT
12443
+ });
12444
+ };
12445
+ WidgetNavCompass.prototype._doLook = function (tiltUp) {
12446
+ var viewer = this._viewer;
12447
+ var diff = 6.26 / 32;
12448
+ if (!tiltUp) {
12449
+ diff *= -1;
12450
+ }
12451
+ var current = viewer.camera.pitch;
12452
+ current += diff;
12453
+ viewer.camera.flyTo({
12454
+ destination: viewer.camera.position,
12455
+ orientation: {
12456
+ heading: viewer.camera.heading,
12457
+ pitch: current,
12458
+ roll: viewer.camera.roll
12459
+ },
12460
+ duration: 0.2
12461
+ });
12462
+ };
12463
+ WidgetNavCompass.prototype._update2d3d = function () {
12464
+ var is2d = this._getIs2d();
12465
+ this._2d.setAttribute("is-selected", is2d ? "true" : "false");
12466
+ this._3d.setAttribute("is-selected", is2d ? "false" : "true");
12467
+ this._up.setAttribute("is-disabled", is2d ? "true" : "false");
12468
+ this._down.setAttribute("is-disabled", is2d ? "true" : "false");
12469
+ };
12470
+ WidgetNavCompass.prototype._toggle2d3d = function () {
12471
+ var shouldBe2d = !this._getIs2d();
12472
+ ViewUtils.Set2dStatus({
12473
+ status: shouldBe2d,
12474
+ viewer: this._viewer,
12475
+ moveCamera: true
12476
+ });
12477
+ this._update2d3d();
12478
+ };
12479
+ return WidgetNavCompass;
12480
+ }(Widget.AWidget));
12481
+
12482
+ var WidgetBranding = /** @class */ (function (_super) {
12483
+ __extends(WidgetBranding, _super);
12484
+ function WidgetBranding(params) {
12485
+ var _this = _super.call(this, params) || this;
12486
+ _this.STYLESHEET_ID = "nextspace-branding-stylesheet";
12487
+ _this._generateStyles();
12488
+ _this._generateElement();
12489
+ _this._listenToRenders();
12490
+ return _this;
12491
+ }
12492
+ WidgetBranding.prototype._listenToRenders = function () {
12493
+ var _this = this;
12494
+ var _a, _b;
12495
+ if (this._terrainListenRemoval) {
12496
+ return;
12497
+ }
12498
+ this._terrainListenRemoval = (_b = (_a = this._viewer.scene) === null || _a === void 0 ? void 0 : _a.terrainProviderChanged) === null || _b === void 0 ? void 0 : _b.addEventListener(function () {
12499
+ _this._updateIon();
12500
+ });
12501
+ };
12502
+ WidgetBranding.prototype.Dispose = function () {
12503
+ if (this._terrainListenRemoval) {
12504
+ this._terrainListenRemoval();
12505
+ this._terrainListenRemoval = null;
12506
+ }
12507
+ _super.prototype.Dispose.call(this);
12508
+ };
12509
+ WidgetBranding.prototype._generateStyles = function () {
12510
+ if (document.getElementById(this.STYLESHEET_ID)) {
12511
+ return;
12512
+ }
12513
+ var style = document.createElement("style");
12514
+ style.id = this.STYLESHEET_ID;
12515
+ style.innerHTML = "\n .NextspaceBranding {\n position: absolute;\n z-index: 1;\n bottom: 10px;\n left: 10px;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n\n .NextspaceBranding * {\n box-sizing: border-box;\n }\n\n .NextspaceBrandingLogo {\n width: 24px;\n height: 24px;\n cursor: pointer;\n -webkit-animation-name: NextspaceBrandingLogoFadeIn;\n animation-name: NextspaceBrandingLogoFadeIn;\n animation-duration: 0.3s;\n opacity: 1;\n margin-top: 8px;\n }\n\n @keyframes NextspaceBrandingLogoFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n ";
12516
+ document.head.appendChild(style);
12517
+ };
12518
+ WidgetBranding.prototype._generateElement = function () {
12519
+ var element = document.createElement("div");
12520
+ element.className = "NextspaceBranding";
12521
+ var ionLogo = document.createElement("div");
12522
+ ionLogo.className = "NextspaceBrandingLogo";
12523
+ ionLogo.innerHTML = "\n <div className=\"NextspaceBrandingLogo\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37259 18.6274 0 12 0C5.37258 0 0 5.37259 0 12C0 18.6274 5.37258 24 12 24Z\" fill=\"white\"/>\n <path d=\"M21.6985 10.4272C21.3489 10.4272 20.9994 10.631 20.7373 10.9806L17.4169 15.3786C16.8635 16.1068 16.0771 16.5145 15.2616 16.5145C14.446 16.5145 13.6596 16.1068 13.1062 15.3786L9.78584 10.9806C9.5237 10.631 9.17419 10.4272 8.82467 10.4272C8.47516 10.4272 8.12564 10.631 7.86351 10.9806L4.54312 15.3786C3.98972 16.1068 3.23244 16.5145 2.4169 16.5145C4.10623 20.0971 7.747 22.5728 11.9703 22.5728C17.7955 22.5728 22.5431 17.8543 22.5431 12C22.5431 11.5922 22.514 11.1844 22.4557 10.7767C22.2519 10.5437 21.9897 10.4272 21.6985 10.4272Z\" fill=\"#7A9C49\"/>\n <path d=\"M11.9996 1.42718C6.1744 1.42718 1.42683 6.14562 1.42683 12C1.42683 12.932 1.57246 13.8349 1.77634 14.6796C1.98022 14.8252 2.18411 14.9126 2.41712 14.9126C2.76663 14.9126 3.11615 14.7087 3.37828 14.3592L6.69867 9.96116C7.25207 9.233 8.03848 8.82523 8.85401 8.82523C9.66955 8.82523 10.456 9.233 11.0094 9.96116L14.2132 14.1845L14.3589 14.3592C14.621 14.7087 14.9705 14.8835 15.2909 14.9126C15.6404 14.9126 15.9608 14.7087 16.2229 14.3592L16.3686 14.1845L19.5725 9.96116C20.1259 9.233 20.9123 8.82523 21.7278 8.82523C21.8443 8.82523 21.9899 8.82524 22.1064 8.85436C20.7666 4.54368 16.7472 1.42718 11.9996 1.42718V1.42718ZM15.5239 8.12621C14.9123 8.12621 14.4171 7.63105 14.4171 7.0194C14.4171 6.40775 14.9123 5.91261 15.5239 5.91261C16.1356 5.91261 16.6307 6.40775 16.6307 7.0194C16.6307 7.63105 16.1356 8.12621 15.5239 8.12621Z\" fill=\"#6DABE4\"/>\n </svg>\n </div>\n ";
12524
+ ionLogo.title = "Cesium World Terrain provided by Cesium Ion";
12525
+ ionLogo.addEventListener("click", function () {
12526
+ window.open("https://cesium.com/ion/", "_blank");
12527
+ });
12528
+ this.ion = ionLogo;
12529
+ var nextspaceLogo = document.createElement("div");
12530
+ nextspaceLogo.className = "NextspaceBrandingLogo";
12531
+ nextspaceLogo.innerHTML = "\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12,0L2,6v12l10,6,10-6V6L12,0Zm0,19.6l-6-3.6,1.667-1,4.333,2.6,4.333-2.6,1.667,1-6,3.6Zm0-4l-6-3.6,1.667-1,4.333,2.6,4.333-2.6,1.667,1-6,3.6Zm0-4l-6-3.6,6-3.6,6,3.6-6,3.6Z\" fill=\"#fff\"></path><path d=\"M18,8l-6,3.6-6-3.6,6-3.6,6,3.6Zm-6,9.6l-4.333-2.6-1.667,1,6,3.6,6-3.6-1.667-1-4.333,2.6Zm0-4l-4.333-2.6-1.667,1,6,3.6,6-3.6-1.667-1-4.333,2.6Z\" fill=\"#141414\" opacity=\".85\"></path></svg>\n ";
12532
+ nextspaceLogo.title = "Nextspace";
12533
+ nextspaceLogo.addEventListener("click", function () {
12534
+ window.open("https://nextspace.com/", "_blank");
12535
+ });
12536
+ element.appendChild(nextspaceLogo);
12537
+ this.Container.appendChild(element);
12538
+ this._element = element;
12539
+ this._updateIon();
12540
+ };
12541
+ WidgetBranding.prototype._shouldShowIonLogo = function () {
12542
+ var _a, _b;
12543
+ return __awaiter(this, void 0, void 0, function () {
12544
+ var viewer, provider, credits;
12545
+ return __generator(this, function (_c) {
12546
+ switch (_c.label) {
12547
+ case 0:
12548
+ viewer = this._viewer;
12549
+ if (!((_a = viewer === null || viewer === void 0 ? void 0 : viewer.scene) === null || _a === void 0 ? void 0 : _a.terrainProvider)) {
12550
+ return [2 /*return*/, false];
12551
+ }
12552
+ provider = viewer.scene.terrainProvider;
12553
+ return [4 /*yield*/, provider.readyPromise];
12554
+ case 1:
12555
+ _c.sent();
12556
+ if (provider != viewer.scene.terrainProvider) {
12557
+ return [2 /*return*/];
12558
+ }
12559
+ credits = provider === null || provider === void 0 ? void 0 : provider._tileCredits;
12560
+ return [2 /*return*/, credits && credits.length > 0 && credits[0]._html && ((_b = credits[0]._html) === null || _b === void 0 ? void 0 : _b.includes("ion-credit.png"))];
12561
+ }
12562
+ });
12563
+ });
12564
+ };
12565
+ WidgetBranding.prototype._updateIon = function () {
12566
+ return __awaiter(this, void 0, void 0, function () {
12567
+ var shouldShow, e_1;
12568
+ return __generator(this, function (_a) {
12569
+ switch (_a.label) {
12570
+ case 0:
12571
+ if (this.updatingIon) {
12572
+ return [2 /*return*/];
12573
+ }
12574
+ this.updatingIon = true;
12575
+ _a.label = 1;
12576
+ case 1:
12577
+ _a.trys.push([1, 3, , 4]);
12578
+ return [4 /*yield*/, this._shouldShowIonLogo()];
12579
+ case 2:
12580
+ shouldShow = _a.sent();
12581
+ if (shouldShow && !this.ion.parentElement) {
12582
+ this._element.insertBefore(this.ion, this._element.firstChild);
12583
+ }
12584
+ else if (!shouldShow && this.ion.parentElement) {
12585
+ this.ion.parentElement.removeChild(this.ion);
12586
+ }
12587
+ return [3 /*break*/, 4];
12588
+ case 3:
12589
+ e_1 = _a.sent();
12590
+ console.error(e_1);
12591
+ return [3 /*break*/, 4];
12592
+ case 4:
12593
+ this.updatingIon = false;
12594
+ return [2 /*return*/];
12595
+ }
12596
+ });
12597
+ });
12598
+ };
12599
+ return WidgetBranding;
12600
+ }(Widget.AWidget));
12601
+
12602
+ var MARKER_ICON_SVG = "\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.2292 21.5965C5.55352 13.3684 4.5 12.5239 4.5 9.5C4.5 5.35785 7.85785 2 12 2C16.1421 2 19.5 5.35785 19.5 9.5C19.5 12.5239 18.4465 13.3684 12.7708 21.5965C12.3983 22.1345 11.6016 22.1345 11.2292 21.5965ZM12 12.625C13.7259 12.625 15.125 11.2259 15.125 9.5C15.125 7.7741 13.7259 6.375 12 6.375C10.2741 6.375 8.875 7.7741 8.875 9.5C8.875 11.2259 10.2741 12.625 12 12.625Z\" fill=\"black\"/>\n </svg>\n";
12603
+ var CLOSE_ICON_SVG = "\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.7909 12L21.4767 6.3142C22.1744 5.61648 22.1744 4.48523 21.4767 3.78693L20.2131 2.5233C19.5153 1.82557 18.3841 1.82557 17.6858 2.5233L12 8.20909L6.3142 2.5233C5.61648 1.82557 4.48523 1.82557 3.78693 2.5233L2.5233 3.78693C1.82557 4.48466 1.82557 5.61591 2.5233 6.3142L8.20909 12L2.5233 17.6858C1.82557 18.3835 1.82557 19.5148 2.5233 20.2131L3.78693 21.4767C4.48466 22.1744 5.61648 22.1744 6.3142 21.4767L12 15.7909L17.6858 21.4767C18.3835 22.1744 19.5153 22.1744 20.2131 21.4767L21.4767 20.2131C22.1744 19.5153 22.1744 18.3841 21.4767 17.6858L15.7909 12Z\" fill=\"black\"/>\n </svg>\n";
12604
+ function generateEle() {
12605
+ var ele = document.createElement("div");
12606
+ ele.setAttribute("style", "\n left: 0px;\n top: 0px;\n position: absolute;\n z-index: 3;\n border-radius: 18px;\n background-color: white;\n display: flex;\n align-items: center;\n padding: 3px 4px;\n padding-right: 10px;\n font-size: 15px;\n pointer-events: none;\n box-shadow: 0px 0px 1px rgba(18, 22, 25, 0.24), 0px 18px 36px -4px rgba(18, 22, 25, 0.6);\n ");
12607
+ var icon = document.createElement("div");
12608
+ icon.innerHTML = MARKER_ICON_SVG;
12609
+ icon.setAttribute("style", "\n margin-right: 2px;\n height: 30px;\n width: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n ");
12610
+ ele.appendChild(icon);
12611
+ var span = document.createElement("span");
12612
+ span.setAttribute("style", "\n flex-grow: 1;\n flex-shrink: 1;\n height: 100%;\n ");
12613
+ span.innerText = "";
12614
+ ele.appendChild(span);
12615
+ return ele;
12616
+ }
12617
+ var FILL_COLOR$2 = "#33B1FF";
12618
+ var POINT_SIZE$2 = 10;
12619
+ /**
12620
+ * Metric to imperial "nice looking" string.
12621
+ * @param length
12622
+ * @returns
12623
+ */
12624
+ function metricToImperialLenStr(length) {
12625
+ // Convert meters to feet.
12626
+ if (length < 500) {
12627
+ return "".concat(MathUtils.Round(length * 3.2808, 2).toLocaleString(), "ft");
12628
+ }
12629
+ // Convert meters to miles.
12630
+ else {
12631
+ return "".concat(MathUtils.Round(length * 0.00062137, 4).toLocaleString(), "mi");
12632
+ }
12633
+ }
12634
+ /**
12635
+ * Metric to imperial "nice looking" string.
12636
+ * @param area in meters squared.
12637
+ * @returns
12638
+ */
12639
+ function metricToImperialAreaStr(area) {
12640
+ // Convert meters squared to feet squared.
12641
+ if (area < 250000) {
12642
+ return "".concat(MathUtils.Round(area / 0.09290304, 2).toLocaleString(), "ft\u00B2");
12643
+ }
12644
+ // Convert meters squared to miles squared.
12645
+ else {
12646
+ return "".concat(MathUtils.Round((area / 2589988.11), 4).toLocaleString(), "mi\u00B2");
12647
+ }
12648
+ }
12649
+ /**
12650
+ * Metric "nice looking" string.
12651
+ * @param length
12652
+ */
12653
+ function metricLenStr(length) {
12654
+ if (length < 1000) {
12655
+ return "".concat(MathUtils.Round(length, 2).toLocaleString(), "m");
12656
+ }
12657
+ else {
12658
+ return "".concat(MathUtils.Round(length / 1000, 2).toLocaleString(), "km");
12659
+ }
12660
+ }
12661
+ /**
12662
+ * Metric "nice looking" string.
12663
+ * @param length
12664
+ */
12665
+ function metricAreaStr(area) {
12666
+ if (area < 1000000) {
12667
+ return "".concat(MathUtils.Round(area, 2).toLocaleString(), "m\u00B2");
12668
+ }
12669
+ else {
12670
+ return "".concat(MathUtils.Round(area / 1000000, 2).toLocaleString(), "km\u00B2");
12671
+ }
12672
+ }
12673
+ /**
12674
+ * DO NOT USE THIS CLASS DIRECTLY.
12675
+ * Use only through the cursor-bar widget as this is at high risk of change.
12676
+ */
12677
+ var MeasureCreator;
12678
+ (function (MeasureCreator) {
12679
+ var Point = /** @class */ (function () {
12680
+ function Point(viewer, isMetric) {
12681
+ this.viewer = viewer;
12682
+ this.isMetric = isMetric;
12683
+ }
12684
+ Point.prototype.Start = function () {
12685
+ var _this = this;
12686
+ var _a, _b;
12687
+ this.Stop();
12688
+ var updateMarker = function () {
12689
+ if (!_this.marker) {
12690
+ _this.generateMarker();
12691
+ }
12692
+ var pos2d = _this.viewer.scene.cartesianToCanvasCoordinates(_this.pos3d);
12693
+ if (Cartes.ValidateCartes2(pos2d) && _this.element) {
12694
+ _this.element.style.left = "".concat(pos2d.x + 10, "px");
12695
+ _this.element.style.top = "".concat(pos2d.y - 20, "px");
12696
+ }
12697
+ };
12698
+ this.renderEventRemoval = (_b = (_a = this.viewer.scene) === null || _a === void 0 ? void 0 : _a.postRender) === null || _b === void 0 ? void 0 : _b.addEventListener(function () {
12699
+ if (Cartes.ValidateCartes3(_this.pos3d)) {
12700
+ updateMarker();
12701
+ }
12702
+ });
12703
+ var processPos2d = function (pos2d) {
12704
+ if (Cartes.ValidateCartes2(pos2d)) {
12705
+ var pos3d = DrawingUtils.GetAccuratePosition(_this.viewer, pos2d);
12706
+ if (Cartes.ValidateCartes3(pos3d)) {
12707
+ _this.pos3d = pos3d;
12708
+ var carto = Cartographic.fromCartesian(_this.pos3d);
12709
+ var lat = Math$1.toDegrees(carto.latitude);
12710
+ var lng = Math$1.toDegrees(carto.longitude);
12711
+ var heightStr = carto.height.toFixed(2);
12712
+ if (!_this.isMetric) {
12713
+ heightStr = metricToImperialLenStr(carto.height);
12714
+ }
12715
+ _this.updateText("".concat(lat.toFixed(6), ", ").concat(lng.toFixed(6), ", ").concat(heightStr));
12716
+ updateMarker();
12717
+ }
12718
+ }
12719
+ };
12720
+ this.events = new ScreenSpaceEventHandler(this.viewer.scene.canvas);
12721
+ this.events.setInputAction(function (e) {
12722
+ var pos2d = e.endPosition;
12723
+ processPos2d(pos2d);
12724
+ }, ScreenSpaceEventType.MOUSE_MOVE);
12725
+ this.events.setInputAction(function (e) {
12726
+ var _a;
12727
+ console.log(e);
12728
+ processPos2d(e.position);
12729
+ (_a = _this.events) === null || _a === void 0 ? void 0 : _a.destroy();
12730
+ _this.events = null;
12731
+ if (_this.element) {
12732
+ _this.element.style.removeProperty("pointer-events");
12733
+ _this.appendCloseButton();
12734
+ }
12735
+ }, ScreenSpaceEventType.LEFT_CLICK);
12736
+ };
12737
+ Point.prototype.Stop = function () {
12738
+ var _a, _b;
12739
+ this.pos3d = null;
12740
+ if (this.element && this.element.parentElement) {
12741
+ this.element.remove();
12742
+ }
12743
+ this.element = null;
12744
+ if (this.marker && this.viewer.entities.contains(this.marker)) {
12745
+ this.viewer.entities.remove(this.marker);
12746
+ }
12747
+ this.marker = null;
12748
+ (_a = this.renderEventRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
12749
+ this.renderEventRemoval = null;
12750
+ (_b = this.events) === null || _b === void 0 ? void 0 : _b.destroy();
12751
+ this.events = null;
12752
+ };
12753
+ Point.prototype.updateText = function (text) {
12754
+ if (!this.element) {
12755
+ this.generateElement();
12756
+ }
12757
+ this.element.querySelector("span").innerText = text;
12758
+ };
12759
+ Point.prototype.generateElement = function () {
12760
+ var ele = generateEle();
12761
+ this.element = ele;
12762
+ this.viewer.canvas.parentElement.appendChild(ele);
12763
+ };
12764
+ Point.prototype.appendCloseButton = function () {
12765
+ var _this = this;
12766
+ var btn = document.createElement("div");
12767
+ btn.setAttribute("style", "\n height: 30px;\n width: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n margin-left: 5px;\n ");
12768
+ btn.setAttribute("title", "Close measurement");
12769
+ btn.innerHTML = CLOSE_ICON_SVG;
12770
+ btn.addEventListener("click", function () {
12771
+ _this.Start();
12772
+ });
12773
+ this.element.appendChild(btn);
12774
+ this.element.style.paddingRight = "5px";
12775
+ };
12776
+ Point.prototype.generateMarker = function () {
12777
+ var _this = this;
12778
+ this.marker = this.viewer.entities.add({
12779
+ position: new CallbackProperty(function () { return _this.pos3d; }, false),
12780
+ point: {
12781
+ pixelSize: POINT_SIZE$2,
12782
+ color: Color.fromCssColorString(FILL_COLOR$2),
12783
+ outlineColor: Color.WHITE,
12784
+ outlineWidth: 2
12785
+ }
12786
+ });
12787
+ };
12788
+ return Point;
12789
+ }());
12790
+ MeasureCreator.Point = Point;
12791
+ var Polyline = /** @class */ (function () {
12792
+ function Polyline(viewer, isMetric) {
12793
+ this.posses3d = [];
12794
+ this.viewer = viewer;
12795
+ this.isMetric = isMetric;
12796
+ }
12797
+ Polyline.prototype.Start = function () {
12798
+ var _this = this;
12799
+ var _a, _b;
12800
+ this.Stop();
12801
+ this.renderEventRemoval = (_b = (_a = this.viewer.scene) === null || _a === void 0 ? void 0 : _a.postRender) === null || _b === void 0 ? void 0 : _b.addEventListener(function () {
12802
+ var pos3d = _this.posses3d.length > 0 ? _this.posses3d[_this.posses3d.length - 1] : null;
12803
+ if (Cartes.ValidateCartes3(pos3d)) {
12804
+ var pos2d = _this.viewer.scene.cartesianToCanvasCoordinates(pos3d);
12805
+ if (Cartes.ValidateCartes2(pos2d) && _this.element) {
12806
+ _this.element.style.left = "".concat(pos2d.x + 10, "px");
12807
+ _this.element.style.top = "".concat(pos2d.y - 20, "px");
12808
+ _this.element.style.display = "flex";
12809
+ }
12810
+ }
12811
+ });
12812
+ this.drawingTool = new Draw3dPolyline({
12813
+ viewer: this.viewer,
12814
+ onFinish: function (posses3d) {
12815
+ var _a;
12816
+ _this.posses3d = posses3d;
12817
+ _this.onDone();
12818
+ _this.drawingTool.Pause();
12819
+ (_a = _this.onFinish) === null || _a === void 0 ? void 0 : _a.call(_this);
12820
+ },
12821
+ onChange: function (posses3d) {
12822
+ _this.posses3d = posses3d;
12823
+ _this.updateText();
12824
+ },
12825
+ perPositionHeight: true
12826
+ });
12827
+ this.drawingTool.Start();
12828
+ };
12829
+ Polyline.prototype.Stop = function () {
12830
+ var _a, _b;
12831
+ if (this.element && this.element.parentElement) {
12832
+ this.element.remove();
12833
+ }
12834
+ this.element = null;
12835
+ (_a = this.renderEventRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
12836
+ this.renderEventRemoval = null;
12837
+ this.posses3d = [];
12838
+ (_b = this.drawingTool) === null || _b === void 0 ? void 0 : _b.Dispose();
12839
+ this.drawingTool = null;
12840
+ };
12841
+ Polyline.prototype.updateText = function () {
12842
+ var length = 0;
12843
+ var posses = [].concat(this.posses3d);
12844
+ for (var i = 0; i < posses.length - 1; i++) {
12845
+ var pos1 = posses[i];
12846
+ var pos2 = posses[i + 1];
12847
+ if (Cartes.ValidateCartes3(pos1) && Cartes.ValidateCartes3(pos2)) {
12848
+ length += Cartesian3.distance(pos1, pos2);
12849
+ }
12850
+ }
12851
+ if (!length && !this.element) {
12852
+ return;
12853
+ }
12854
+ if (!this.element) {
12855
+ this.generateElement();
12856
+ }
12857
+ var lengthStr;
12858
+ if (!this.isMetric) {
12859
+ lengthStr = metricToImperialLenStr(length);
12860
+ }
12861
+ else {
12862
+ lengthStr = metricLenStr(length);
12863
+ }
12864
+ this.element.querySelector("span").innerText = lengthStr;
12865
+ };
12866
+ Polyline.prototype.generateElement = function () {
12867
+ var ele = generateEle();
12868
+ ele.style.display = "none";
12869
+ this.element = ele;
12870
+ this.viewer.canvas.parentElement.appendChild(ele);
12871
+ };
12872
+ Polyline.prototype.appendCloseButton = function () {
12873
+ var _this = this;
12874
+ var btn = document.createElement("div");
12875
+ btn.setAttribute("style", "\n height: 30px;\n width: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n margin-left: 5px;\n font-size: 18px;\n ");
12876
+ btn.setAttribute("title", "Close measurement");
12877
+ btn.innerHTML = CLOSE_ICON_SVG;
12878
+ btn.addEventListener("click", function () {
12879
+ _this.Start();
12880
+ });
12881
+ this.element.appendChild(btn);
12882
+ this.element.style.paddingRight = "5px";
12883
+ };
12884
+ Polyline.prototype.onDone = function () {
12885
+ if (this.element) {
12886
+ this.element.style.removeProperty("pointer-events");
12887
+ this.appendCloseButton();
12888
+ }
12889
+ this.updateText();
12890
+ };
12891
+ return Polyline;
12892
+ }());
12893
+ MeasureCreator.Polyline = Polyline;
12894
+ var Polygon = /** @class */ (function () {
12895
+ function Polygon(viewer, isMetric, onFinish) {
12896
+ this.posses3d = [];
12897
+ this.viewer = viewer;
12898
+ this.onFinish = onFinish;
12899
+ this.isMetric = isMetric;
12900
+ }
12901
+ Polygon.prototype.Start = function () {
12902
+ var _this = this;
12903
+ var _a, _b;
12904
+ this.Stop();
12905
+ this.renderEventRemoval = (_b = (_a = this.viewer.scene) === null || _a === void 0 ? void 0 : _a.postRender) === null || _b === void 0 ? void 0 : _b.addEventListener(function () {
12906
+ var pos3d = _this.posses3d.length > 0 ? _this.posses3d[_this.posses3d.length - 1] : null;
12907
+ if (Cartes.ValidateCartes3(pos3d)) {
12908
+ var pos2d = _this.viewer.scene.cartesianToCanvasCoordinates(pos3d);
12909
+ if (Cartes.ValidateCartes2(pos2d) && _this.element) {
12910
+ _this.element.style.left = "".concat(pos2d.x + 10, "px");
12911
+ _this.element.style.top = "".concat(pos2d.y - 20, "px");
12912
+ _this.element.style.display = "flex";
12913
+ }
12914
+ }
12915
+ });
12916
+ this.drawingTool = new Draw3dPolygon({
12917
+ viewer: this.viewer,
12918
+ onChange: function (hierarchy) {
12919
+ _this.posses3d = hierarchy === null || hierarchy === void 0 ? void 0 : hierarchy.positions;
12920
+ _this.updateText();
12921
+ },
12922
+ onFinish: function (hierarchy) {
12923
+ var _a;
12924
+ _this.posses3d = hierarchy === null || hierarchy === void 0 ? void 0 : hierarchy.positions;
12925
+ _this.drawingTool.Pause();
12926
+ _this.onDone();
12927
+ (_a = _this.onFinish) === null || _a === void 0 ? void 0 : _a.call(_this);
12928
+ },
12929
+ perPositionHeight: true
12930
+ });
12931
+ this.drawingTool.Start();
12932
+ };
12933
+ Polygon.prototype.Stop = function () {
12934
+ var _a, _b, _c;
12935
+ if (this.element && this.element.parentElement) {
12936
+ this.element.remove();
12937
+ }
12938
+ this.element = null;
12939
+ (_a = this.renderEventRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
12940
+ this.renderEventRemoval = null;
12941
+ (_b = this.events) === null || _b === void 0 ? void 0 : _b.destroy();
12942
+ this.events = null;
12943
+ this.posses3d = [];
12944
+ (_c = this.drawingTool) === null || _c === void 0 ? void 0 : _c.Dispose();
12945
+ this.drawingTool = null;
12946
+ };
12947
+ Polygon.prototype.updateText = function () {
12948
+ var posses = [].concat(this.posses3d);
12949
+ if (!Cartes.IsRing3Closed(posses)) {
12950
+ posses.push(posses[0].clone());
12951
+ }
12952
+ if (posses.length < 3) {
12953
+ return;
12954
+ }
12955
+ var measure = MeasureUtils.MeasurePolygon({
12956
+ posses: posses
12957
+ });
12958
+ if (!measure.area && !measure.perimeter && !this.element) {
12959
+ return;
12960
+ }
12961
+ if (!this.element) {
12962
+ this.generateElement();
12963
+ }
12964
+ var lengthStr;
12965
+ var areaStr;
12966
+ if (!this.isMetric) {
12967
+ lengthStr = metricToImperialLenStr(measure.perimeter);
12968
+ areaStr = metricToImperialAreaStr(measure.area);
12969
+ }
12970
+ else {
12971
+ lengthStr = metricLenStr(measure.perimeter);
12972
+ areaStr = metricAreaStr(measure.area);
12973
+ }
12974
+ var text = "".concat(lengthStr, ", ").concat(areaStr);
12975
+ this.element.querySelector("span").innerText = text;
12976
+ };
12977
+ Polygon.prototype.generateElement = function () {
12978
+ var ele = generateEle();
12979
+ ele.style.display = "none";
12980
+ this.element = ele;
12981
+ this.viewer.canvas.parentElement.appendChild(ele);
12982
+ };
12983
+ Polygon.prototype.appendCloseButton = function () {
12984
+ var _this = this;
12985
+ var btn = document.createElement("div");
12986
+ btn.setAttribute("style", "\n height: 30px;\n width: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n margin-left: 5px;\n font-size: 18px;\n ");
12987
+ btn.setAttribute("title", "Close measurement");
12988
+ btn.innerHTML = CLOSE_ICON_SVG;
12989
+ btn.addEventListener("click", function () {
12990
+ _this.Start();
12991
+ });
12992
+ this.element.appendChild(btn);
12993
+ this.element.style.paddingRight = "5px";
12994
+ };
12995
+ Polygon.prototype.onDone = function () {
12996
+ var _a;
12997
+ (_a = this.events) === null || _a === void 0 ? void 0 : _a.destroy();
12998
+ this.events = null;
12999
+ if (this.element) {
13000
+ this.element.style.removeProperty("pointer-events");
13001
+ this.appendCloseButton();
13002
+ }
13003
+ this.updateText();
13004
+ };
13005
+ return Polygon;
13006
+ }());
13007
+ MeasureCreator.Polygon = Polygon;
13008
+ })(MeasureCreator || (MeasureCreator = {}));
13009
+
13010
+ var ECursor;
13011
+ (function (ECursor) {
13012
+ ECursor["Select"] = "select";
13013
+ ECursor["Pan"] = "pan";
13014
+ ECursor["Measure"] = "measure";
13015
+ })(ECursor || (ECursor = {}));
13016
+ var ESecondaryCursor;
13017
+ (function (ESecondaryCursor) {
13018
+ ESecondaryCursor["None"] = "none";
13019
+ ESecondaryCursor["Pan"] = "pan";
13020
+ ESecondaryCursor["MeasurePoint"] = "measure-point";
13021
+ ESecondaryCursor["MeasurePolyline"] = "measure-polyline";
13022
+ ESecondaryCursor["MeasurePolygon"] = "measure-polygon";
13023
+ })(ESecondaryCursor || (ESecondaryCursor = {}));
13024
+ var WidgetCursorBar = /** @class */ (function (_super) {
13025
+ __extends(WidgetCursorBar, _super);
13026
+ function WidgetCursorBar(params) {
13027
+ var _this = _super.call(this, params) || this;
13028
+ _this.STYLESHEET_ID = "nextspace-cursorbar-stylesheet";
13029
+ _this._selectedCursor = ECursor.Select;
13030
+ _this._selectedSecondaryCursor = ESecondaryCursor.None;
13031
+ _this._generateStyles();
13032
+ _this._generateElement();
13033
+ if (_this._selectedCursor == ECursor.Select) {
13034
+ _this._listenSelection();
13035
+ }
13036
+ return _this;
13037
+ }
13038
+ WidgetCursorBar.prototype.Dispose = function () {
13039
+ var _a, _b;
13040
+ _super.prototype.Dispose.call(this);
13041
+ this._disposeMeasureTool();
13042
+ this._disposeCesiumEvent();
13043
+ if ((_b = (_a = this._viewer) === null || _a === void 0 ? void 0 : _a.canvas) === null || _b === void 0 ? void 0 : _b.style.cursor) {
13044
+ this._viewer.canvas.style.removeProperty("cursor");
13045
+ }
13046
+ };
13047
+ WidgetCursorBar.prototype._generateStyles = function () {
13048
+ if (document.getElementById(this.STYLESHEET_ID)) {
13049
+ return;
13050
+ }
13051
+ var style = document.createElement("style");
13052
+ style.id = this.STYLESHEET_ID;
13053
+ style.innerHTML = "\n .NextspaceCursorBar {\n position: absolute;\n z-index: 1;\n top: 10px;\n left: 10px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n pointer-events: none;\n }\n\n .NextspaceCursorBar * {\n box-sizing: border-box;\n }\n\n .NextspaceCursorBarPrim {\n pointer-events: auto;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n user-select: none;\n }\n\n .NextspaceCursorBarPrimContent {\n align-items: center;\n background-color: #21272a;\n border-radius: 9px;\n display: flex;\n pointer-events: auto;\n width: -webkit-max-content;\n width: max-content;\n margin-bottom: 8px;\n }\n\n .NextspaceCursorBarPrimControl {\n width: 48px;\n }\n\n .NextspaceCursorBarPrimControlInner {\n align-items: center;\n border-radius: 0;\n display: flex;\n height: 100%;\n height: -webkit-max-content;\n height: max-content;\n justify-content: center;\n padding: 8px;\n padding-left: 8px;\n }\n\n .NextspaceCursorBarPrimControl:first-of-type .NextspaceCursorBarPrimControlInner {\n border-radius: 9px 0 0 9px;\n padding-left: 8px;\n }\n\n .NextspaceCursorBarPrimControl:last-of-type .NextspaceCursorBarPrimControlInner {\n border-radius: 0 9px 9px 0;\n padding-right: 8px;\n }\n\n .NextspaceCursorBarPrimControl:first-of-type:last-of-type .NextspaceCursorBarPrimControlInner {\n border-radius: 9px;\n }\n\n .NextspaceCursorBarPrimControlInnerIcon {\n align-items: center;\n border-radius: 6px;\n color: #fff;\n cursor: pointer;\n display: flex;\n font-size: 18px;\n height: 32px;\n justify-content: center;\n transition: .3s ease;\n width: 32px;\n }\n\n .NextspaceCursorBarPrimControlInnerIcon:hover {\n transform: scale(1.2);\n }\n\n .NextspaceCursorBarPrimControlInner[is-selected=\"true\"] {\n background: #33b1ff;\n }\n\n .NextspaceCursorBarSec {\n pointer-events: auto;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n user-select: none;\n }\n\n .NextspaceCursorBarSecContent {\n align-items: center;\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n background: rgba(33,39,42,.8);\n border-radius: 9px;\n box-shadow: 0 0 1px rgba(18,22,25,.36),0 18px 36px -4px rgba(18,22,25,.36);\n display: flex;\n pointer-events: auto;\n width: -webkit-max-content;\n width: max-content;\n }\n \n .NextspaceCursorBarSecControl {\n align-items: center;\n border-radius: 0;\n display: flex;\n height: 100%;\n height: -webkit-max-content;\n height: max-content;\n justify-content: center;\n padding: 8px;\n padding-left: 8px;\n border: 2px solid transparent;\n flex-shrink: 0;\n margin: 6px 0 6px 6px;\n margin-right: 0px;\n }\n\n .NextspaceCursorBarSecControl[is-selected=\"true\"] {\n background-color: transparent;\n border: 2px solid #33b1ff;\n border-radius: 6px;\n }\n\n .NextspaceCursorBarSecControl:last-of-type {\n margin-right: 6px;\n }\n\n .NextspaceCursorBarSecControl:first-of-type {\n padding-left: 8px;\n }\n \n .NextspaceCursorBarSecControlIcon {\n align-items: center;\n border-radius: 6px;\n color: #fff;\n cursor: pointer;\n display: flex;\n font-size: 18px;\n height: 32px;\n justify-content: center;\n transition: .3s ease;\n width: 32px;\n }\n\n .NextspaceCursorBarSecControlIcon:hover {\n -webkit-transform: scale(1.2);\n transform: scale(1.2);\n }\n ";
13054
+ document.head.appendChild(style);
13055
+ };
13056
+ WidgetCursorBar.prototype._generateElement = function () {
13057
+ var element = document.createElement("div");
13058
+ element.className = "NextspaceCursorBar";
13059
+ var prim = document.createElement("div");
13060
+ prim.className = "NextspaceCursorBarPrim";
13061
+ this._primary = prim;
13062
+ var primContent = document.createElement("div");
13063
+ primContent.className = "NextspaceCursorBarPrimContent";
13064
+ prim.appendChild(primContent);
13065
+ element.appendChild(prim);
13066
+ this._primaryContent = primContent;
13067
+ var sec = document.createElement("div");
13068
+ sec.className = "NextspaceCursorBarSec";
13069
+ this._secondary = sec;
13070
+ var secContent = document.createElement("div");
13071
+ secContent.className = "NextspaceCursorBarSecContent";
13072
+ sec.appendChild(secContent);
13073
+ element.appendChild(sec);
13074
+ this._secondaryContent = secContent;
13075
+ this._generateSelect();
13076
+ this._generatePan();
13077
+ this._generateMeasure();
13078
+ this._updateControls();
13079
+ this.Container.appendChild(element);
13080
+ this._element = element;
13081
+ };
13082
+ WidgetCursorBar.prototype._generateControl = function (title, cursor, onClick, iconHtml) {
13083
+ var _this = this;
13084
+ var div = document.createElement("div");
13085
+ div.className = "NextspaceCursorBarPrimControl";
13086
+ var inner = document.createElement("div");
13087
+ inner.setAttribute("title", title);
13088
+ inner.setAttribute("control", cursor);
13089
+ inner.className = "NextspaceCursorBarPrimControlInner";
13090
+ inner.innerHTML = "\n <div class=\"NextspaceCursorBarPrimControlInnerIcon\">\n ".concat(iconHtml, "\n </div>\n ");
13091
+ div.appendChild(inner);
13092
+ inner.addEventListener("click", function () {
13093
+ _this._disposeMeasureTool();
13094
+ _this._disposeCesiumEvent();
13095
+ onClick();
13096
+ _this._updateControls();
13097
+ });
13098
+ this._primaryContent.appendChild(div);
13099
+ };
13100
+ WidgetCursorBar.prototype._generateSecondaryControl = function (title, cursor, onClick, iconHTML) {
13101
+ var _this = this;
13102
+ var div = document.createElement("div");
13103
+ div.className = "NextspaceCursorBarSecControl";
13104
+ div.setAttribute("title", title);
13105
+ div.setAttribute("control", cursor);
13106
+ div.innerHTML = "\n <div class=\"NextspaceCursorBarSecControlIcon\">\n ".concat(iconHTML, "\n </div>\n ");
13107
+ div.addEventListener("click", function () {
13108
+ _this._disposeMeasureTool();
13109
+ _this._disposeCesiumEvent();
13110
+ onClick();
13111
+ _this._updateSecondary();
13112
+ });
13113
+ this._secondaryContent.appendChild(div);
13114
+ };
13115
+ WidgetCursorBar.prototype._generateSelect = function () {
13116
+ var _this = this;
13117
+ var svg = "\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.0706 25L9 7L23 17.8592L15.3135 18.3375L11.0706 25Z\" fill=\"white\" stroke=\"white\" strokeLinejoin=\"round\"/>\n </svg>\n ";
13118
+ this._generateControl("Select", ECursor.Select, function () {
13119
+ _this._selectedCursor = ECursor.Select;
13120
+ _this._secondary.style.display = "none";
13121
+ _this._listenSelection();
13122
+ }, svg);
13123
+ };
13124
+ WidgetCursorBar.prototype._generatePan = function () {
13125
+ var _this = this;
13126
+ var svg = "\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.5652 6C14.9172 6 14.3913 6.51692 14.3913 7.15385V14.4615H13.6087V8.69231C13.6087 8.05538 13.0828 7.53846 12.4348 7.53846C11.7868 7.53846 11.2609 8.05538 11.2609 8.69231V14.4615V16.7692V19.6734C11.2609 19.6734 9.0069 18.2402 7.87211 17.7548C7.55594 17.6194 7.22575 17.5385 6.89079 17.5385C5.1401 17.5385 5 19.0769 5 19.0769L8.13043 21.3846L10.6357 24.3398C11.5279 25.3922 12.85 26 14.243 26H19.8696C21.5983 26 23 24.6223 23 22.9231V14.4615V11C23 10.3631 22.4741 9.84615 21.8261 9.84615C21.1781 9.84615 20.6522 10.3631 20.6522 11V14.4615H19.8696V8.69231C19.8696 8.05538 19.3437 7.53846 18.6957 7.53846C18.0477 7.53846 17.5217 8.05538 17.5217 8.69231V14.4615H16.7391V7.15385C16.7391 6.51692 16.2132 6 15.5652 6Z\" fill=\"white\"/>\n </svg>\n ";
13127
+ this._generateControl("Pan", ECursor.Pan, function () {
13128
+ _this._selectedCursor = _this._selectedCursor == ECursor.Pan ? ECursor.Select : ECursor.Pan;
13129
+ _this._secondary.style.display = "none";
13130
+ if (_this._selectedCursor == ECursor.Select) {
13131
+ _this._listenSelection();
13132
+ }
13133
+ }, svg);
13134
+ };
13135
+ WidgetCursorBar.prototype._generateMeasure = function () {
13136
+ var _this = this;
13137
+ var svg = "\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M26.5044 8.88032C26.1735 8.54947 23.4505 5.8265 23.1197 5.49564C22.4588 4.83479 21.3876 4.83479 20.7267 5.49564C20.6878 5.53457 20.4449 5.77742 20.0557 6.16666L21.6753 7.78623C22.0061 8.11708 22.0061 8.65186 21.6753 8.98271C21.5103 9.14771 21.2936 9.23064 21.077 9.23064C20.8604 9.23064 20.6438 9.14771 20.4788 8.98271L18.8592 7.36314C18.4581 7.76423 18.0063 8.21608 17.5172 8.70517L18.2906 9.47857C18.6214 9.80942 18.6214 10.3442 18.2906 10.6751C18.1256 10.8401 17.909 10.923 17.6923 10.923C17.4757 10.923 17.2591 10.8401 17.0941 10.6751L16.3207 9.90165C15.8875 10.3349 15.4381 10.7842 14.9787 11.2437L16.5982 12.8632C16.9291 13.1941 16.9291 13.7289 16.5982 14.0597C16.4332 14.2247 16.2166 14.3077 16 14.3077C15.7834 14.3077 15.5668 14.2247 15.4018 14.0597L13.7822 12.4402C13.3363 12.8861 12.8869 13.3354 12.4402 13.7822L13.2136 14.5556C13.5444 14.8864 13.5444 15.4212 13.2136 15.7521C13.0486 15.9171 12.8319 16 12.6153 16C12.3987 16 12.1821 15.9171 12.0171 15.7521L11.2437 14.9787C10.7842 15.4381 10.3349 15.8875 9.90165 16.3207L11.5212 17.9403C11.8521 18.2711 11.8521 18.8059 11.5212 19.1368C11.3562 19.3018 11.1396 19.3847 10.923 19.3847C10.7064 19.3847 10.4897 19.3018 10.3247 19.1368L8.70517 17.5172C8.21608 18.0063 7.76423 18.4581 7.36314 18.8592L8.13654 19.6326C8.46739 19.9635 8.46739 20.4982 8.13654 20.8291C7.97154 20.9941 7.75492 21.077 7.5383 21.077C7.32168 21.077 7.10506 20.9941 6.94006 20.8291L6.16666 20.0557C5.77742 20.4449 5.53457 20.6878 5.49564 20.7267C4.83479 21.3876 4.83479 22.4588 5.49564 23.1197C5.8265 23.4505 8.54947 26.1735 8.88032 26.5044C9.54118 27.1652 10.6124 27.1652 11.2733 26.5044C11.6041 26.1735 26.1735 11.6041 26.5044 11.2733C27.1652 10.6124 27.1652 9.54118 26.5044 8.88032Z\" fill=\"white\"/>\n </svg>\n ";
13138
+ this._generateControl("Measure", ECursor.Measure, function () {
13139
+ _this._selectedSecondaryCursor = ESecondaryCursor.Pan;
13140
+ _this._selectedCursor = _this._selectedCursor == ECursor.Measure ? ECursor.Select : ECursor.Measure;
13141
+ if (_this._selectedCursor == ECursor.Measure) {
13142
+ _this._generateMeasureSecondary();
13143
+ _this._updateSecondary();
13144
+ }
13145
+ else {
13146
+ _this._secondary.style.display = "none";
13147
+ }
13148
+ if (_this._selectedCursor == ECursor.Select) {
13149
+ _this._listenSelection();
13150
+ }
13151
+ }, svg);
13152
+ };
13153
+ WidgetCursorBar.prototype._generateMeasureSecondary = function () {
13154
+ var _this = this;
13155
+ this._secondaryContent.innerHTML = "";
13156
+ this._secondary.style.display = "flex";
13157
+ var panSvg = "\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.5652 6C14.9172 6 14.3913 6.51692 14.3913 7.15385V14.4615H13.6087V8.69231C13.6087 8.05538 13.0828 7.53846 12.4348 7.53846C11.7868 7.53846 11.2609 8.05538 11.2609 8.69231V14.4615V16.7692V19.6734C11.2609 19.6734 9.0069 18.2402 7.87211 17.7548C7.55594 17.6194 7.22575 17.5385 6.89079 17.5385C5.1401 17.5385 5 19.0769 5 19.0769L8.13043 21.3846L10.6357 24.3398C11.5279 25.3922 12.85 26 14.243 26H19.8696C21.5983 26 23 24.6223 23 22.9231V14.4615V11C23 10.3631 22.4741 9.84615 21.8261 9.84615C21.1781 9.84615 20.6522 10.3631 20.6522 11V14.4615H19.8696V8.69231C19.8696 8.05538 19.3437 7.53846 18.6957 7.53846C18.0477 7.53846 17.5217 8.05538 17.5217 8.69231V14.4615H16.7391V7.15385C16.7391 6.51692 16.2132 6 15.5652 6Z\" fill=\"white\"/>\n </svg>\n ";
13158
+ this._generateSecondaryControl("Pan", ESecondaryCursor.Pan, function () {
13159
+ _this._selectedSecondaryCursor = ESecondaryCursor.Pan;
13160
+ _this._updateSecondary();
13161
+ }, panSvg);
13162
+ var pointSvg = "\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 20H18C18.55 20 19 20.45 19 21C19 21.55 18.55 22 18 22H6C5.45 22 5 21.55 5 21C5 20.45 5.45 20 6 20ZM12 7C10.9 7 10 7.9 10 9C10 10.1 10.9 11 12 11C13.1 11 14 10.1 14 9C14 7.9 13.1 7 12 7ZM12 2C15.27 2 19 4.46 19 9.15C19 12.13 16.87 15.27 12.61 18.54C12.25 18.82 11.75 18.82 11.39 18.54C7.13 15.26 5 12.13 5 9.15C5 4.46 8.73 2 12 2Z\" fill=\"white\"/>\n </svg>\n ";
13163
+ this._generateSecondaryControl("Measure point", ESecondaryCursor.MeasurePoint, function () {
13164
+ _this._selectedSecondaryCursor = _this._selectedSecondaryCursor == ESecondaryCursor.MeasurePoint ? ESecondaryCursor.Pan : ESecondaryCursor.MeasurePoint;
13165
+ _this._updateSecondary();
13166
+ _this._enabledMeasureTool = new MeasureCreator.Point(_this._viewer, true);
13167
+ _this._enabledMeasureTool.Start();
13168
+ }, pointSvg);
13169
+ var polylineSvg = "\n <svg width=\"24\" height=\"20\" viewBox=\"0 0 24 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 4L18 8\" stroke=\"white\" stroke-width=\"3\"/>\n <path d=\"M4 6L5.12233 15\" stroke=\"white\" stroke-width=\"3\"/>\n <circle cx=\"3.5\" cy=\"3.5\" r=\"2.5\" stroke=\"white\" stroke-width=\"2\"/>\n <circle cx=\"20.1223\" cy=\"9\" r=\"2\" stroke=\"white\" stroke-width=\"2\"/>\n <circle cx=\"6\" cy=\"17\" r=\"2\" stroke=\"white\" stroke-width=\"2\"/>\n </svg>\n ";
13170
+ this._generateSecondaryControl("Measure polyline", ESecondaryCursor.MeasurePolyline, function () {
13171
+ _this._selectedSecondaryCursor = _this._selectedSecondaryCursor == ESecondaryCursor.MeasurePolyline ? ESecondaryCursor.Pan : ESecondaryCursor.MeasurePolyline;
13172
+ _this._updateSecondary();
13173
+ _this._enabledMeasureTool = new MeasureCreator.Polyline(_this._viewer, true);
13174
+ _this._enabledMeasureTool.Start();
13175
+ }, polylineSvg);
13176
+ var polygonSvg = "\n <svg width=\"24\" height=\"20\" viewBox=\"0 0 24 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.5 15.5L5 5L18 9L6.5 15.5Z\" fill=\"white\" fill-opacity=\"0.4\"/>\n <path d=\"M6 4L18 8\" stroke=\"white\" stroke-width=\"3\"/>\n <path d=\"M4 6L5.12233 15\" stroke=\"white\" stroke-width=\"3\"/>\n <path d=\"M18.9518 9.82404L8 16.2072\" stroke=\"white\" stroke-width=\"3\"/>\n <circle cx=\"3.5\" cy=\"3.5\" r=\"2.5\" stroke=\"white\" stroke-width=\"2\"/>\n <circle cx=\"20.1223\" cy=\"9\" r=\"2\" stroke=\"white\" stroke-width=\"2\"/>\n <circle cx=\"6\" cy=\"17\" r=\"2\" stroke=\"white\" stroke-width=\"2\"/>\n </svg>\n ";
13177
+ this._generateSecondaryControl("Measure polygon", ESecondaryCursor.MeasurePolygon, function () {
13178
+ _this._selectedSecondaryCursor = _this._selectedSecondaryCursor == ESecondaryCursor.MeasurePolygon ? ESecondaryCursor.Pan : ESecondaryCursor.MeasurePolygon;
13179
+ _this._updateSecondary();
13180
+ _this._enabledMeasureTool = new MeasureCreator.Polygon(_this._viewer, true);
13181
+ _this._enabledMeasureTool.Start();
13182
+ }, polygonSvg);
13183
+ };
13184
+ WidgetCursorBar.prototype._updateControls = function () {
13185
+ var controls = this._primaryContent.querySelectorAll(".NextspaceCursorBarPrimControlInner");
13186
+ controls.forEach(function (control) {
13187
+ control.setAttribute("is-selected", "false");
13188
+ });
13189
+ var selected = this._primaryContent.querySelector(".NextspaceCursorBarPrimControlInner[control=\"".concat(this._selectedCursor, "\"]"));
13190
+ if (selected) {
13191
+ selected.setAttribute("is-selected", "true");
13192
+ }
13193
+ };
13194
+ WidgetCursorBar.prototype._updateSecondary = function () {
13195
+ var secondary = this._secondary.querySelectorAll(".NextspaceCursorBarSecControl");
13196
+ secondary.forEach(function (control) {
13197
+ control.setAttribute("is-selected", "false");
13198
+ });
13199
+ var selected = this._secondary.querySelector(".NextspaceCursorBarSecControl[control=\"".concat(this._selectedSecondaryCursor, "\"]"));
13200
+ if (selected) {
13201
+ selected.setAttribute("is-selected", "true");
13202
+ }
13203
+ };
13204
+ WidgetCursorBar.prototype._disposeMeasureTool = function () {
13205
+ if (this._enabledMeasureTool) {
13206
+ this._enabledMeasureTool.Stop();
13207
+ this._enabledMeasureTool = null;
13208
+ }
13209
+ };
13210
+ WidgetCursorBar.prototype._disposeCesiumEvent = function () {
13211
+ if (this._cesiumEventRemoval) {
13212
+ this._cesiumEventRemoval();
13213
+ }
13214
+ this._cesiumEventRemoval = null;
13215
+ };
13216
+ WidgetCursorBar.prototype._listenSelection = function () {
13217
+ var _this = this;
13218
+ this._disposeCesiumEvent();
13219
+ var events = new ScreenSpaceEventHandler(this._viewer.scene.canvas);
13220
+ var lastHoverPos = null;
13221
+ var process2dCursor = function (pos2d, isHover) {
13222
+ try {
13223
+ var regos = _this._manager.VisualsRegister.GetRegosFromCursor({
13224
+ cursor: pos2d
13225
+ }).regos;
13226
+ if (isHover) {
13227
+ if (regos.length) {
13228
+ _this._viewer.canvas.style.cursor = "pointer";
13229
+ }
13230
+ else if (_this._viewer.canvas.style.cursor) {
13231
+ _this._viewer.canvas.style.removeProperty("cursor");
13232
+ }
13233
+ }
13234
+ else {
13235
+ var first = regos.length ? regos[0] : null;
13236
+ _this._manager.VisualsRegister.ClearSelected();
13237
+ if (first) {
13238
+ _this._manager.VisualsRegister.SetSelected({
13239
+ entityIds: [first.entityId],
13240
+ selected: true
13241
+ });
13242
+ }
13243
+ }
13244
+ }
13245
+ catch (e) {
13246
+ console.error(e);
13247
+ }
13248
+ };
13249
+ var hoverDelayQueue = new DelayQueue(function () {
13250
+ process2dCursor(lastHoverPos, true);
13251
+ }, 80);
13252
+ events.setInputAction(function (e) {
13253
+ var _a;
13254
+ if (!((_a = e === null || e === void 0 ? void 0 : e.position) === null || _a === void 0 ? void 0 : _a.x)) {
13255
+ return;
13256
+ }
13257
+ process2dCursor(e.position, false);
13258
+ }, ScreenSpaceEventType.LEFT_CLICK);
13259
+ events.setInputAction(function (e) {
13260
+ var _a;
13261
+ if (!((_a = e === null || e === void 0 ? void 0 : e.endPosition) === null || _a === void 0 ? void 0 : _a.x)) {
13262
+ return;
13263
+ }
13264
+ lastHoverPos = e.endPosition;
13265
+ hoverDelayQueue.Call();
13266
+ }, ScreenSpaceEventType.MOUSE_MOVE);
13267
+ this._cesiumEventRemoval = function () {
13268
+ hoverDelayQueue.Dispose();
13269
+ if (!events || events.isDestroyed()) {
13270
+ return;
13271
+ }
13272
+ events.destroy();
13273
+ };
13274
+ };
13275
+ return WidgetCursorBar;
13276
+ }(Widget.AWidget));
13277
+
13278
+ var ESearchType;
13279
+ (function (ESearchType) {
13280
+ ESearchType["CesiumAddress"] = "CESIUM_ADDRESS";
13281
+ ESearchType["LatLon"] = "LATLON";
13282
+ })(ESearchType || (ESearchType = {}));
13283
+ function isLatLon(text) {
13284
+ var parts = text.split(",");
13285
+ if (parts.length !== 2 && parts.length !== 3) {
13286
+ return false;
13287
+ }
13288
+ var lat = parseFloat(parts[0]);
13289
+ var lon = parseFloat(parts[1]);
13290
+ if (isNaN(lat) || isNaN(lon)) {
13291
+ return false;
13292
+ }
13293
+ return true;
13294
+ }
13295
+ var WidgetSearchBar = /** @class */ (function (_super) {
13296
+ __extends(WidgetSearchBar, _super);
13297
+ function WidgetSearchBar(params) {
13298
+ var _this = _super.call(this, params) || this;
13299
+ _this.STYLESHEET_ID = "nextspace-searchbar-stylesheet";
13300
+ _this._cApi = new AbstractApi({});
13301
+ _this._generateStyles();
13302
+ _this._generateElement();
13303
+ return _this;
13304
+ }
13305
+ WidgetSearchBar.prototype.Dispose = function () {
13306
+ _super.prototype.Dispose.call(this);
13307
+ };
13308
+ WidgetSearchBar.prototype._generateStyles = function () {
13309
+ if (document.getElementById(this.STYLESHEET_ID)) {
13310
+ return;
13311
+ }
13312
+ var style = document.createElement("style");
13313
+ style.id = this.STYLESHEET_ID;
13314
+ style.innerHTML = "\n .NextspaceSearchBar {\n position: absolute;\n z-index: 1;\n top: 10px;\n right: 10px;\n display: flex;\n box-sizing: border-box;\n box-shadow: 0 0 1px rgba(18,22,25,.24),0 18px 36px -4px rgba(18,22,25,.6);\n background: #21272a;\n border-radius: 9px;\n height: 48px;\n padding-left: 2px;\n padding-right: 2px;\n font-family: sans-serif;\n }\n\n .NextspaceSearchBar * {\n box-sizing: border-box;\n }\n\n .NextspaceSearchBar[is-opened=\"true\"] .NextspaceSearchBarContent {\n display: flex;\n overflow: visible;\n width: 260px;\n }\n\n .NextspaceSearchBarToggle {\n align-items: center;\n border-radius: 0;\n border-radius: 9px 0 0 9px;\n color: #fff;\n cursor: pointer;\n display: flex;\n flex-shrink: 0;\n font-size: 18px;\n height: 100%;\n justify-content: center;\n transition: .3s ease;\n width: 46px;\n }\n\n .NextspaceSearchBarToggle >svg {\n transition: .3s ease;\n }\n\n .NextspaceSearchBarToggle >svg:hover {\n -webkit-transform: scale(1.2);\n transform: scale(1.2);\n }\n\n .NextspaceSearchBarContent {\n flex-grow: 0;\n flex-shrink: 0;\n overflow: hidden;\n transition: .3s ease;\n width: 0;\n }\n\n .NextspaceSearchBarContent >input {\n background: transparent;\n border: none;\n color: #fff;\n font-size: 15px;\n height: 100%;\n outline: none;\n padding: 0 8px;\n width: 100%;\n }\n\n .NextspaceSearchBarResults {\n background-color: #21272a;\n border-radius: 0 0 6px 6px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 12px 8px 8px;\n position: absolute;\n top: calc(100% - 4px);\n width: 100%;\n left: 0;\n z-index: 1;\n }\n\n .NextspaceSearchBarResultsItem {\n align-items: center;\n color: #fff;\n cursor: pointer;\n display: flex;\n height: 30px;\n transition: .3s ease;\n font-size: 13px;\n }\n\n .NextspaceSearchBarResultsItem:hover .NextspaceSearchBarResultsItemIcon {\n -webkit-transform: scale(1.05);\n transform: scale(1.05);\n }\n\n .NextspaceSearchBarResultsItemIcon {\n align-items: center;\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n justify-content: center;\n margin-right: 5px;\n width: 25px;\n }\n\n .NextspaceSearchBarResultsItemTip {\n flex-grow: 1;\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 50px;\n font-size: 15px;\n }\n\n .NextspaceSearchBarResultsWarning {\n height: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 15px;\n }\n ";
13315
+ document.head.appendChild(style);
13316
+ };
13317
+ WidgetSearchBar.prototype._generateElement = function () {
13318
+ var _this = this;
13319
+ var element = document.createElement("div");
13320
+ element.className = "NextspaceSearchBar";
13321
+ element.setAttribute("is-opened", "false");
13322
+ var toggle = document.createElement("div");
13323
+ toggle.className = "NextspaceSearchBarToggle";
13324
+ toggle.innerHTML = "\n <svg class=\"\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.3283 6C9.73857 6 6 9.73857 6 14.3283C6 18.918 9.73857 22.6566 14.3283 22.6566C16.3242 22.6566 18.1571 21.9479 19.5937 20.7714L24.5663 25.7439C24.643 25.8239 24.7349 25.8877 24.8366 25.9316C24.9383 25.9756 25.0478 25.9988 25.1586 26C25.2694 26.0011 25.3793 25.9801 25.4819 25.9382C25.5845 25.8963 25.6777 25.8344 25.756 25.756C25.8344 25.6777 25.8963 25.5845 25.9382 25.4819C25.9801 25.3793 26.0011 25.2694 26 25.1586C25.9988 25.0478 25.9756 24.9383 25.9316 24.8366C25.8877 24.7349 25.8239 24.643 25.7439 24.5663L20.7714 19.5937C21.9479 18.1571 22.6566 16.3242 22.6566 14.3283C22.6566 9.73857 18.918 6 14.3283 6ZM14.3283 7.66566C18.0178 7.66566 20.9909 10.6388 20.9909 14.3283C20.9909 18.0178 18.0178 20.9909 14.3283 20.9909C10.6388 20.9909 7.66566 18.0178 7.66566 14.3283C7.66566 10.6388 10.6388 7.66566 14.3283 7.66566Z\" fill=\"white\"></path></svg>\n ";
13325
+ toggle.onclick = function () {
13326
+ var _a, _b;
13327
+ if (element.getAttribute("is-opened") === "true") {
13328
+ element.setAttribute("is-opened", "false");
13329
+ _this._hideResults();
13330
+ }
13331
+ else {
13332
+ element.setAttribute("is-opened", "true");
13333
+ // Show prior results.
13334
+ if (_this._results.innerHTML) {
13335
+ element.style.borderRadius = "9px 9px 0 0";
13336
+ _this._results.style.display = "flex";
13337
+ }
13338
+ // Focus input.
13339
+ (_b = (_a = content.querySelector("input")) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
13340
+ }
13341
+ };
13342
+ element.appendChild(toggle);
13343
+ var content = document.createElement("div");
13344
+ content.className = "NextspaceSearchBarContent";
13345
+ content.innerHTML = "\n <input placeholder=\"address\"/>\n ";
13346
+ element.appendChild(content);
13347
+ var input = content.querySelector("input");
13348
+ var searchTimeout = null;
13349
+ var counter = 0;
13350
+ input.onkeyup = function (e) {
13351
+ var _a;
13352
+ var value = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
13353
+ if (!value || value.length < 3) {
13354
+ return;
13355
+ }
13356
+ counter += 1;
13357
+ var curCounter = counter;
13358
+ _this._displayLoading();
13359
+ clearTimeout(searchTimeout);
13360
+ searchTimeout = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
13361
+ var searchData, e_1;
13362
+ return __generator(this, function (_a) {
13363
+ switch (_a.label) {
13364
+ case 0:
13365
+ _a.trys.push([0, 2, , 3]);
13366
+ return [4 /*yield*/, this._doSearch(value)];
13367
+ case 1:
13368
+ searchData = _a.sent();
13369
+ if (curCounter !== counter) {
13370
+ return [2 /*return*/];
13371
+ }
13372
+ this._displayResults(searchData);
13373
+ return [3 /*break*/, 3];
13374
+ case 2:
13375
+ e_1 = _a.sent();
13376
+ console.error(e_1);
13377
+ return [3 /*break*/, 3];
13378
+ case 3: return [2 /*return*/];
13379
+ }
13380
+ });
13381
+ }); }, 200);
13382
+ };
13383
+ var results = document.createElement("div");
13384
+ results.className = "NextspaceSearchBarResults";
13385
+ element.appendChild(results);
13386
+ results.style.display = "none";
13387
+ this._results = results;
13388
+ this.Container.appendChild(element);
13389
+ this._element = element;
13390
+ };
13391
+ WidgetSearchBar.prototype._displayResults = function (results) {
13392
+ var _this = this;
13393
+ this._element.style.borderRadius = "9px 9px 0 0";
13394
+ this._results.style.display = "flex";
13395
+ if (results === null || results === void 0 ? void 0 : results.length) {
13396
+ this._results.innerHTML = "";
13397
+ var getIcon_1 = function (result) {
13398
+ if (result.type == ESearchType.CesiumAddress) {
13399
+ return "\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37259 18.6274 0 12 0C5.37258 0 0 5.37259 0 12C0 18.6274 5.37258 24 12 24Z\" fill=\"white\"/>\n <path d=\"M21.6985 10.4272C21.3489 10.4272 20.9994 10.631 20.7373 10.9806L17.4169 15.3786C16.8635 16.1068 16.0771 16.5145 15.2616 16.5145C14.446 16.5145 13.6596 16.1068 13.1062 15.3786L9.78584 10.9806C9.5237 10.631 9.17419 10.4272 8.82467 10.4272C8.47516 10.4272 8.12564 10.631 7.86351 10.9806L4.54312 15.3786C3.98972 16.1068 3.23244 16.5145 2.4169 16.5145C4.10623 20.0971 7.747 22.5728 11.9703 22.5728C17.7955 22.5728 22.5431 17.8543 22.5431 12C22.5431 11.5922 22.514 11.1844 22.4557 10.7767C22.2519 10.5437 21.9897 10.4272 21.6985 10.4272Z\" fill=\"#7A9C49\"/>\n <path d=\"M11.9996 1.42718C6.1744 1.42718 1.42683 6.14562 1.42683 12C1.42683 12.932 1.57246 13.8349 1.77634 14.6796C1.98022 14.8252 2.18411 14.9126 2.41712 14.9126C2.76663 14.9126 3.11615 14.7087 3.37828 14.3592L6.69867 9.96116C7.25207 9.233 8.03848 8.82523 8.85401 8.82523C9.66955 8.82523 10.456 9.233 11.0094 9.96116L14.2132 14.1845L14.3589 14.3592C14.621 14.7087 14.9705 14.8835 15.2909 14.9126C15.6404 14.9126 15.9608 14.7087 16.2229 14.3592L16.3686 14.1845L19.5725 9.96116C20.1259 9.233 20.9123 8.82523 21.7278 8.82523C21.8443 8.82523 21.9899 8.82524 22.1064 8.85436C20.7666 4.54368 16.7472 1.42718 11.9996 1.42718V1.42718ZM15.5239 8.12621C14.9123 8.12621 14.4171 7.63105 14.4171 7.0194C14.4171 6.40775 14.9123 5.91261 15.5239 5.91261C16.1356 5.91261 16.6307 6.40775 16.6307 7.0194C16.6307 7.63105 16.1356 8.12621 15.5239 8.12621Z\" fill=\"#6DABE4\"/>\n </svg>\n ";
13400
+ }
13401
+ return "\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 20H18C18.55 20 19 20.45 19 21C19 21.55 18.55 22 18 22H6C5.45 22 5 21.55 5 21C5 20.45 5.45 20 6 20ZM12 7C10.9 7 10 7.9 10 9C10 10.1 10.9 11 12 11C13.1 11 14 10.1 14 9C14 7.9 13.1 7 12 7ZM12 2C15.27 2 19 4.46 19 9.15C19 12.13 16.87 15.27 12.61 18.54C12.25 18.82 11.75 18.82 11.39 18.54C7.13 15.26 5 12.13 5 9.15C5 4.46 8.73 2 12 2Z\" fill=\"white\"/>\n </svg>\n ";
13402
+ };
13403
+ results.forEach(function (result) {
13404
+ var resultElement = document.createElement("div");
13405
+ resultElement.className = "NextspaceSearchBarResultsItem";
13406
+ resultElement.innerHTML = "\n <div class=\"NextspaceSearchBarResultsItemIcon\">\n ".concat(getIcon_1(result), "\n </div>\n <div class=\"NextspaceSearchBarResultsItemTip\">\n ").concat(result.tip, "\n </div>\n ");
13407
+ resultElement.onclick = function () {
13408
+ _this._clickResult(result);
13409
+ };
13410
+ _this._results.appendChild(resultElement);
13411
+ });
13412
+ }
13413
+ else {
13414
+ this._results.innerHTML = "\n <div class=\"NextspaceSearchBarResultsWarning\">No results found...</div>\n ";
13415
+ }
13416
+ };
13417
+ WidgetSearchBar.prototype._displayLoading = function () {
13418
+ this._element.style.borderRadius = "9px 9px 0 0";
13419
+ this._results.style.display = "flex";
13420
+ this._results.innerHTML = "\n <div class=\"NextspaceSearchBarResultsWarning\">Loading...</div>\n ";
13421
+ };
13422
+ WidgetSearchBar.prototype._hideResults = function () {
13423
+ this._element.style.borderRadius = "9px";
13424
+ this._results.style.display = "none";
13425
+ };
13426
+ WidgetSearchBar.prototype._cesiumAutoComplete = function (text) {
13427
+ return __awaiter(this, void 0, void 0, function () {
13428
+ var token;
13429
+ return __generator(this, function (_a) {
13430
+ token = Ion.defaultAccessToken;
13431
+ return [2 /*return*/, this._cApi.get("https://api.cesium.com/v1/geocode/autocomplete?text=".concat(encodeURI(text), "&access_token=").concat(token))];
13432
+ });
13433
+ });
13434
+ };
13435
+ WidgetSearchBar.prototype._doSearch = function (text) {
13436
+ var _a;
13437
+ return __awaiter(this, void 0, void 0, function () {
13438
+ var result, parts, lat, lon, alt, res, MAX_ITEMS, added, _loop_1, i, state_1, e_2;
13439
+ return __generator(this, function (_b) {
13440
+ switch (_b.label) {
13441
+ case 0:
13442
+ if (!text || text.length < 3) {
13443
+ return [2 /*return*/, []];
13444
+ }
13445
+ result = [];
13446
+ if (isLatLon(text)) {
13447
+ parts = text.split(",");
13448
+ lat = parseFloat(parts[0]);
13449
+ lon = parseFloat(parts[1]);
13450
+ alt = parts.length > 2 ? parseFloat(parts[2]) : null;
13451
+ result.push({
13452
+ type: ESearchType.LatLon,
13453
+ tip: "Lat Lon Location",
13454
+ data: {
13455
+ altitude: alt,
13456
+ latitude: lat,
13457
+ longitude: lon
13458
+ }
13459
+ });
13460
+ return [2 /*return*/, result];
13461
+ }
13462
+ if (!Ion.defaultAccessToken) return [3 /*break*/, 5];
13463
+ _b.label = 1;
13464
+ case 1:
13465
+ _b.trys.push([1, 3, , 4]);
13466
+ return [4 /*yield*/, this._cesiumAutoComplete(text)];
13467
+ case 2:
13468
+ res = _b.sent();
13469
+ console.log("Cesium search result", res);
13470
+ MAX_ITEMS = 5;
13471
+ added = 0;
13472
+ if (res && res.features) {
13473
+ _loop_1 = function (i) {
13474
+ var feature = res.features[i];
13475
+ if (feature.bbox || feature.geometry) {
13476
+ var name_1 = feature.properties.name;
13477
+ if (!name_1) {
13478
+ name_1 = feature.properties.label;
13479
+ }
13480
+ if (!name_1) {
13481
+ return "continue";
13482
+ }
13483
+ // We don't want results with the same visual name, even if they have different coordinate data.
13484
+ if (result.find(function (x) { return x.type == ESearchType.CesiumAddress && x.tip == name_1; })) {
13485
+ return "continue";
13486
+ }
13487
+ var coords = (_a = feature.geometry) === null || _a === void 0 ? void 0 : _a.coordinates;
13488
+ var bbox = feature.bbox;
13489
+ if (!coords && !bbox) {
13490
+ return "continue";
13491
+ }
13492
+ result.push({
13493
+ type: ESearchType.CesiumAddress,
13494
+ tip: name_1,
13495
+ data: {
13496
+ bbox: bbox,
13497
+ location: coords ? {
13498
+ altitude: coords[2],
13499
+ latitude: coords[1],
13500
+ longitude: coords[0]
13501
+ } : null
13502
+ }
13503
+ });
13504
+ added += 1;
13505
+ if (added >= MAX_ITEMS) {
13506
+ return "break";
13507
+ }
13508
+ }
13509
+ };
13510
+ for (i = 0; i < res.features.length; i++) {
13511
+ state_1 = _loop_1(i);
13512
+ if (state_1 === "break")
13513
+ break;
13514
+ }
13515
+ }
13516
+ return [3 /*break*/, 4];
13517
+ case 3:
13518
+ e_2 = _b.sent();
13519
+ console.error(e_2);
13520
+ return [3 /*break*/, 4];
13521
+ case 4: return [3 /*break*/, 6];
13522
+ case 5:
13523
+ console.warn("No Cesium token set, skipping Cesium address search.");
13524
+ _b.label = 6;
13525
+ case 6: return [2 /*return*/, result];
13526
+ }
13527
+ });
13528
+ });
13529
+ };
13530
+ WidgetSearchBar.prototype._clickResult = function (item) {
13531
+ return __awaiter(this, void 0, void 0, function () {
13532
+ function zoomToCarto(points) {
13533
+ var cartes = points.map(function (x) { var _a; return Cartesian3.fromDegrees(x.longitude, x.latitude, (_a = x.altitude) !== null && _a !== void 0 ? _a : 0); });
13534
+ zoomToCartes(cartes);
13535
+ }
13536
+ var deduplicatePoints, raiseCartesToHeight, zoomToCartes, bbox, point;
13537
+ var _this = this;
13538
+ return __generator(this, function (_a) {
13539
+ deduplicatePoints = function (points) {
13540
+ var DIS_TOLERANCE = 0.001;
13541
+ var result = [];
13542
+ var _loop_2 = function (i) {
13543
+ var point_1 = points[i];
13544
+ if (result.find(function (x) { return Cartesian3.distance(x, point_1) < DIS_TOLERANCE; })) {
13545
+ return "continue";
13546
+ }
13547
+ result.push(point_1);
13548
+ };
13549
+ for (var i = 0; i < points.length; i++) {
13550
+ _loop_2(i);
13551
+ }
13552
+ return result;
13553
+ };
13554
+ raiseCartesToHeight = function (points, minHeight) {
13555
+ for (var i = 0; i < points.length; i++) {
13556
+ var carto = Cartographic.fromCartesian(points[i]);
13557
+ carto.height = Math.max(carto.height, minHeight);
13558
+ points[i] = Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height);
13559
+ }
13560
+ };
13561
+ zoomToCartes = function (points) {
13562
+ points = deduplicatePoints(points);
13563
+ raiseCartesToHeight(points, 2500);
13564
+ var viewer = _this._viewer;
13565
+ var orient = {
13566
+ heading: Math$1.toRadians(0),
13567
+ pitch: Math$1.toRadians(-90),
13568
+ roll: 0
13569
+ };
13570
+ var onComplete = function () {
13571
+ viewer.camera.lookAtTransform(Matrix4.IDENTITY);
13572
+ };
13573
+ if (points.length > 1) {
13574
+ var rectangle = Rectangle.fromCartesianArray(points);
13575
+ viewer.camera.flyTo({
13576
+ destination: rectangle,
13577
+ orientation: orient,
13578
+ duration: 1,
13579
+ complete: onComplete
13580
+ });
13581
+ }
13582
+ else {
13583
+ var carto = BoundingSphere.fromPoints(points).center;
13584
+ viewer.camera.flyTo({
13585
+ destination: carto,
13586
+ orientation: orient,
13587
+ duration: 1,
13588
+ complete: onComplete
13589
+ });
13590
+ }
13591
+ };
13592
+ switch (item.type) {
13593
+ case ESearchType.CesiumAddress:
13594
+ bbox = item.data.bbox;
13595
+ if (bbox) {
13596
+ zoomToCarto([
13597
+ {
13598
+ altitude: null,
13599
+ latitude: bbox[1],
13600
+ longitude: bbox[0]
13601
+ },
13602
+ {
13603
+ altitude: null,
13604
+ latitude: bbox[3],
13605
+ longitude: bbox[2]
13606
+ }
13607
+ ]);
13608
+ break;
13609
+ }
13610
+ point = item.data.location;
13611
+ if (point) {
13612
+ zoomToCarto([point]);
13613
+ break;
13614
+ }
13615
+ break;
13616
+ case ESearchType.LatLon:
13617
+ zoomToCarto([item.data]);
13618
+ break;
13619
+ }
13620
+ this._element.setAttribute("is-opened", "false");
13621
+ this._hideResults();
13622
+ return [2 /*return*/];
13623
+ });
13624
+ });
13625
+ };
13626
+ return WidgetSearchBar;
13627
+ }(Widget.AWidget));
13628
+
13629
+ var EMode;
13630
+ (function (EMode) {
13631
+ EMode["ShowImportant"] = "IMP";
13632
+ EMode["ShowAll"] = "ALL";
13633
+ EMode["ShowAvailable"] = "AV";
13634
+ EMode["ShowImportantAndAvailable"] = "IMP_AV";
13635
+ })(EMode || (EMode = {}));
13636
+ var OPEN_STORAGE_KEY = "EntityViewSummary_open_";
13637
+ var EXCLUDED_PROPERTIES = ["Bruce", "geometry", "position", "boundaries"];
13638
+ function isAttributeImportant(mode, entity, path, field) {
13639
+ if (path.length && EXCLUDED_PROPERTIES.includes(path[0])) {
13640
+ return false;
13641
+ }
13642
+ if (mode === EMode.ShowAvailable || mode === EMode.ShowImportantAndAvailable) {
13643
+ var value = Entity$1.GetValue({
13644
+ entity: entity,
13645
+ path: path
13646
+ });
13647
+ var hasValue = value || value == 0;
13648
+ if (mode === EMode.ShowAvailable) {
13649
+ return hasValue;
13650
+ }
13651
+ if (!hasValue) {
13652
+ return false;
13653
+ }
13654
+ }
13655
+ if (field.IsImportant || mode === EMode.ShowAll) {
13656
+ return true;
13657
+ }
13658
+ if (field.Type === EntityAttribute.EType.Structure) {
13659
+ return field.Structure.some(function (field) { return isAttributeImportant(mode, entity, path, field); });
13660
+ }
13661
+ return false;
13662
+ }
13663
+ function digAttributes(mode, entity, structure, path) {
13664
+ var attributes = [];
13665
+ for (var i = 0; i < structure.length; i++) {
13666
+ var field = structure[i];
13667
+ var fieldPath = [].concat(path);
13668
+ fieldPath.push(field.Key);
13669
+ if (!isAttributeImportant(mode, entity, fieldPath, field)) {
13670
+ continue;
13671
+ }
13672
+ if (field.Type === EntityAttribute.EType.Structure) {
13673
+ var dug = digAttributes(mode, entity, field.Structure, fieldPath);
13674
+ attributes = attributes.concat(dug);
13675
+ }
13676
+ else {
13677
+ attributes.push(fieldPath);
13678
+ }
13679
+ }
13680
+ return attributes;
13681
+ }
13682
+ function gatherAttributes(mode, entity, type) {
13683
+ var _a, _b;
13684
+ var schema = (_b = (_a = type.DataSchema) === null || _a === void 0 ? void 0 : _a.Structure) !== null && _b !== void 0 ? _b : [];
13685
+ schema = [].concat(schema);
13686
+ Object.keys(entity).forEach(function (key) {
13687
+ if (!schema.find(function (field) { return (field === null || field === void 0 ? void 0 : field.Key) == key; })) {
13688
+ schema.push({
13689
+ Key: key,
13690
+ Name: key,
13691
+ Type: EntityAttribute.EType.String,
13692
+ IsImportant: false,
13693
+ IsIndexed: false,
13694
+ Structure: []
13695
+ });
13696
+ }
13697
+ });
13698
+ return digAttributes(mode, entity, schema, []);
13699
+ }
13700
+ function digTypeItem(path, structure) {
13701
+ var key = path[0];
13702
+ var field = structure.find(function (field) { return field.Key === key; });
13703
+ if (!field) {
13704
+ return null;
13705
+ }
13706
+ if (path.length === 1) {
13707
+ return field;
13708
+ }
13709
+ if (field.Type === EntityAttribute.EType.Structure) {
13710
+ return digTypeItem(path.slice(1), field.Structure);
13711
+ }
13712
+ return null;
13713
+ }
13714
+ function groupAttributes(paths, attributes) {
13715
+ var groups = [];
13716
+ var _loop_1 = function (i) {
13717
+ var path = paths[i];
13718
+ var groupPath = path.slice(0, path.length - 1);
13719
+ var groupAttr = digTypeItem(groupPath, attributes);
13720
+ if (!groupAttr) {
13721
+ groupAttr = {
13722
+ Key: "ROOT"
13723
+ };
13724
+ }
13725
+ var group = groups.find(function (group) { return group.group.Key === groupAttr.Key; });
13726
+ if (group) {
13727
+ group.attributes.push(path);
13728
+ }
13729
+ else {
13730
+ var isOpen = localStorage.getItem(OPEN_STORAGE_KEY + groupAttr.Key);
13731
+ if (isOpen == null) {
13732
+ var DEFAULT_CLOSED = [
13733
+ "Bruce",
13734
+ "location",
13735
+ "boundaries",
13736
+ "transform"
13737
+ ];
13738
+ isOpen = path.length ? DEFAULT_CLOSED.includes(path[0]) ? "false" : "true" : "true";
13739
+ }
13740
+ groups.push({
13741
+ group: groupAttr,
13742
+ attributes: [path],
13743
+ open: isOpen != "false"
13744
+ });
13745
+ }
13746
+ };
13747
+ for (var i = 0; i < paths.length; i++) {
13748
+ _loop_1(i);
13749
+ }
13750
+ return groups;
13751
+ }
13752
+ var WidgetInfoView = /** @class */ (function (_super) {
13753
+ __extends(WidgetInfoView, _super);
13754
+ function WidgetInfoView(params) {
13755
+ var _this = _super.call(this, params) || this;
13756
+ _this.STYLESHEET_ID = "nextspace-info-view-stylesheet";
13757
+ _this._generateStyles();
13758
+ _this._generateElement();
13759
+ _this._updateRemoval = _this._manager.VisualsRegister.OnUpdate.Subscribe(function (data) {
13760
+ if (data.type == "UPDATE" || data.type == "DESELECT_ALL") {
13761
+ _this._updateInfoView();
13762
+ }
13763
+ });
13764
+ return _this;
13765
+ }
13766
+ WidgetInfoView.prototype.Dispose = function () {
13767
+ _super.prototype.Dispose.call(this);
13768
+ this._updateRemoval();
13769
+ };
13770
+ WidgetInfoView.prototype._generateStyles = function () {
13771
+ if (document.getElementById(this.STYLESHEET_ID)) {
13772
+ return;
13773
+ }
13774
+ var style = document.createElement("style");
13775
+ style.id = this.STYLESHEET_ID;
13776
+ style.innerHTML = "\n .NextspaceInfoView {\n width: 430px;\n right: 10px;\n top: 66px;\n height: max-content;\n max-height: calc(100% - 320px);\n min-height: 50px;\n align-items: center;\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n background: rgba(33,39,42,.8);\n border-radius: 9px;\n box-shadow: 0 0 1px rgba(18,22,25,.36),0 18px 36px -4px rgba(18,22,25,.36);\n display: flex;\n flex-direction: column;\n flex-shrink: 1;\n opacity: 0;\n position: absolute;\n z-index: 1;\n transition: opacity .3s ease,-webkit-transform .1s;\n transition: opacity .3s ease,transform .1s;\n transition: opacity .3s ease,transform .1s,-webkit-transform .1s;\n font-family: Arial;\n }\n\n .NextspaceInfoView * {\n box-sizing: border-box;\n }\n\n .NextspaceInfoViewTopLeftButtons {\n left: 12px;\n top: 5px;\n align-items: center;\n display: flex;\n position: absolute;\n z-index: 1;\n }\n\n .NextspaceInfoViewTopRightButtons {\n right: 12px;\n top: 5px;\n align-items: center;\n display: flex;\n position: absolute;\n z-index: 1;\n }\n\n .NextspaceInfoViewIconButton {\n align-items: center;\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n height: 30px;\n justify-content: center;\n margin-right: 8px;\n min-height: 0;\n min-width: 0;\n position: relative;\n width: 30px;\n font-size: 1.5rem;\n padding: 8px;\n border-radius: 50%;\n overflow: visible;\n color: rgba(0, 0, 0, 0.54);\n transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n appearance: none;\n text-decoration: none;\n text-align: center;\n background-color: transparent;\n outline: 0px;\n border: 0px none;\n margin: 0px;\n margin-right: 0px;\n cursor: pointer;\n user-select: none;\n -moz-box-pack: center;\n -moz-box-align: center;\n }\n\n .NextspaceInfoViewIconButton:hover {\n opacity: .9;\n transition: opacity .3s ease;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n .NextspaceInfoViewIconButton svg {\n max-height: 24px;\n max-width: 24px;\n flex-shrink: 0;\n }\n\n .NextspaceInfoViewContent {\n align-items: flex-start;\n color: #fff;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-shrink: 1;\n margin-top: 12px;\n overflow: auto;\n padding: 25px;\n width: 100%;\n }\n\n .NextspaceInfoViewScrollBox {\n flex-grow: 1;\n flex-shrink: 1;\n overflow-y: auto;\n width: 100%;\n }\n\n .NextspaceInfoViewName {\n font-family: Arial;\n font-style: normal;\n font-weight: 400;\n text-align: center;\n width: 100%;\n color: #40c4ff;\n font-size: 13px;\n letter-spacing: .01em;\n line-height: 16px;\n margin-bottom: 5px;\n }\n\n .NextspaceInfoViewType {\n font-family: Arial;\n font-style: normal;\n font-weight: 400;\n text-align: center;\n width: 100%;\n color: #c1c7cd;\n font-size: 10px;\n letter-spacing: .05em;\n line-height: 10px;\n margin-bottom: 12px;\n -webkit-user-select: none;\n user-select: none;\n }\n\n .NextspaceInfoViewTitle {\n color: #f2f4f8;\n font-family: Arial;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n margin-right: auto;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n user-select: none;\n margin-top: 20px;\n margin-bottom: 10px;\n }\n\n .NextspaceInfoViewSummary {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-shrink: 1;\n }\n\n .NextspaceAttributesGroup {\n display: flex;\n flex-direction: column;\n }\n\n .NextspaceAttributesGroup[is-opened=\"false\"] .NextspaceAttribute {\n display: none;\n }\n\n .NextspaceAttributesGroupToggle {\n align-items: center;\n background-color: #343a3f;\n border: 1px solid #343a3f;\n border-radius: 5px;\n cursor: pointer;\n display: flex;\n height: 35px;\n margin-bottom: 3px;\n overflow: hidden;\n padding-left: 12px;\n text-overflow: ellipsis;\n white-space: nowrap;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n user-select: none;\n font-size: 12px;\n }\n\n .NextspaceAttributesGroupToggleIcon {\n align-items: center;\n display: flex;\n height: 20px;\n justify-content: center;\n margin-left: auto;\n margin-right: 8px;\n width: 20px;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .NextspaceAttributesGroup[is-opened=\"false\"] .NextspaceAttributesGroupToggleIconOpened {\n display: none;\n }\n\n .NextspaceAttributesGroup[is-opened=\"true\"] .NextspaceAttributesGroupToggleIconOpened {\n display: block;\n }\n\n .NextspaceAttributesGroup[is-opened=\"false\"] .NextspaceAttributesGroupToggleIconClosed {\n display: block;\n }\n\n .NextspaceAttributesGroup[is-opened=\"true\"] .NextspaceAttributesGroupToggleIconClosed {\n display: none;\n }\n\n .NextspaceAttribute {\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n }\n\n .NextspaceAttributeInput {\n align-items: center;\n background-color: #121619;\n border: 1px solid #434343;\n border-radius: 5px;\n display: flex;\n height: 35px;\n margin-bottom: 3px;\n width: 100%;\n }\n\n .NextspaceAttributeInputLabel {\n border-right: 1px solid #434343;\n flex-grow: .8;\n flex-shrink: 1;\n margin-right: 8px;\n overflow: hidden;\n padding-left: 8px;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 90px;\n font-size: 12px;\n }\n\n .NextspaceAttributeInputValue {\n background-color: transparent;\n border: 1px solid transparent;\n color: #fff;\n flex-grow: 1;\n flex-shrink: 1;\n height: 100%;\n padding-left: 2px;\n text-align: left;\n width: 120px;\n cursor: default;\n opacity: .6;\n outline: none;\n padding: .5rem .75rem;\n border-radius: .375rem;\n font-size: 12px;\n }\n\n .NextspaceDefaultImageContainer {\n align-items: center;\n border-radius: 5px;\n display: flex;\n flex-direction: column;\n flex-grow: 0;\n flex-shrink: 1;\n height: 170px;\n overflow: hidden;\n position: relative;\n width: 100%;\n background-color: rgba(33, 39, 42, 0.8);\n margin-bottom: 20px;\n }\n\n .NextspaceDefaultImage {\n background-position: 50%;\n background-repeat: no-repeat;\n background-size: cover;\n height: 100%;\n width: 100%;\n user-select: none;\n }\n ";
13777
+ document.head.appendChild(style);
13778
+ };
13779
+ WidgetInfoView.prototype._generateElement = function () {
13780
+ var _this = this;
13781
+ var element = document.createElement("div");
13782
+ element.className = "NextspaceInfoView";
13783
+ element.style.display = "none";
13784
+ var topLeftButtons = document.createElement("div");
13785
+ topLeftButtons.className = "NextspaceInfoViewTopLeftButtons";
13786
+ topLeftButtons.innerHTML = "\n <button title=\"Fly to entity\" class=\"NextspaceInfoViewIconButton\">\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M20.5926 2.12617L2.49072 12.5694C1.78383 12.9756 1.87366 13.9597 2.57664 14.2566L6.72815 15.9984L17.9486 6.10975C18.1634 5.91838 18.468 6.21129 18.2844 6.4339L8.87616 17.8964V21.0403C8.87616 21.962 9.98921 22.3252 10.536 21.6574L13.016 18.6385L17.8822 20.6771C18.4367 20.9115 19.0694 20.5639 19.171 19.9663L21.9829 3.09473C22.1157 2.30583 21.2682 1.73563 20.5926 2.12617Z\" fill=\"white\"></path></svg>\n </button>\n ";
13787
+ element.appendChild(topLeftButtons);
13788
+ var topRightButtons = document.createElement("div");
13789
+ topRightButtons.className = "NextspaceInfoViewTopRightButtons";
13790
+ topRightButtons.innerHTML = "\n <button title=\"Close\" class=\"NextspaceInfoViewIconButton\">\n <svg class=\"\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.3002 5.70973C17.9102 5.31973 17.2802 5.31973 16.8902 5.70973L12.0002 10.5897L7.11022 5.69973C6.72022 5.30973 6.09021 5.30973 5.70021 5.69973C5.31021 6.08973 5.31021 6.71973 5.70021 7.10973L10.5902 11.9997L5.70021 16.8897C5.31021 17.2797 5.31021 17.9097 5.70021 18.2997C6.09021 18.6897 6.72022 18.6897 7.11022 18.2997L12.0002 13.4097L16.8902 18.2997C17.2802 18.6897 17.9102 18.6897 18.3002 18.2997C18.6902 17.9097 18.6902 17.2797 18.3002 16.8897L13.4102 11.9997L18.3002 7.10973C18.6802 6.72973 18.6802 6.08973 18.3002 5.70973Z\" fill=\"white\"></path></svg>\n </button>\n ";
13791
+ element.appendChild(topRightButtons);
13792
+ var flyToButt = topLeftButtons.querySelector("button");
13793
+ flyToButt.addEventListener("click", function () {
13794
+ _this._clickFlyTo();
13795
+ });
13796
+ this._flyTo = flyToButt;
13797
+ var closeButt = topRightButtons.querySelector("button");
13798
+ closeButt.addEventListener("click", function () {
13799
+ _this._manager.VisualsRegister.ClearSelected();
13800
+ });
13801
+ var content = document.createElement("div");
13802
+ content.className = "NextspaceInfoViewContent";
13803
+ element.appendChild(content);
13804
+ var scrollBox = document.createElement("div");
13805
+ scrollBox.className = "NextspaceInfoViewScrollBox";
13806
+ content.appendChild(scrollBox);
13807
+ var name = document.createElement("div");
13808
+ name.className = "NextspaceInfoViewName";
13809
+ scrollBox.appendChild(name);
13810
+ this._name = name;
13811
+ var type = document.createElement("div");
13812
+ type.className = "NextspaceInfoViewType";
13813
+ scrollBox.appendChild(type);
13814
+ this._type = type;
13815
+ var imageContainer = document.createElement("div");
13816
+ imageContainer.className = "NextspaceDefaultImageContainer";
13817
+ var image = document.createElement("div");
13818
+ image.classList.add("NextspaceDefaultImage");
13819
+ imageContainer.appendChild(image);
13820
+ scrollBox.appendChild(imageContainer);
13821
+ this._imageContainer = imageContainer;
13822
+ this._image = image;
13823
+ var title = document.createElement("div");
13824
+ title.className = "NextspaceInfoViewTitle";
13825
+ title.innerText = "Details";
13826
+ scrollBox.appendChild(title);
13827
+ this._title = title;
13828
+ var summary = document.createElement("div");
13829
+ summary.className = "NextspaceInfoViewSummary";
13830
+ scrollBox.appendChild(summary);
13831
+ this._summary = summary;
13832
+ this.Container.appendChild(element);
13833
+ this._element = element;
13834
+ this._updateInfoView();
13835
+ };
13836
+ WidgetInfoView.prototype._clickFlyTo = function () {
13837
+ return __awaiter(this, void 0, void 0, function () {
13838
+ var entityId, pos3d;
13839
+ return __generator(this, function (_a) {
13840
+ switch (_a.label) {
13841
+ case 0:
13842
+ entityId = this._lastSelectedId;
13843
+ if (!entityId) {
13844
+ return [2 /*return*/];
13845
+ }
13846
+ return [4 /*yield*/, EntityUtils.GetPosAsync({
13847
+ api: this._apiGetters.GetBruceApi(),
13848
+ entityId: entityId,
13849
+ viewer: this._viewer,
13850
+ returnHeightRef: HeightReference.NONE,
13851
+ recordHeightRef: HeightReference.NONE,
13852
+ visualRegister: this._manager.VisualsRegister
13853
+ })];
13854
+ case 1:
13855
+ pos3d = _a.sent();
13856
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) return [3 /*break*/, 3];
13857
+ return [4 /*yield*/, DrawingUtils.RaisePos3d(this._viewer, pos3d, 15)];
13858
+ case 2:
13859
+ pos3d = _a.sent();
13860
+ this._viewer.camera.flyTo({
13861
+ destination: pos3d,
13862
+ duration: 1,
13863
+ orientation: {
13864
+ heading: 0,
13865
+ pitch: -Math$1.PI_OVER_TWO,
13866
+ roll: 0
13867
+ }
13868
+ });
13869
+ return [3 /*break*/, 4];
13870
+ case 3:
13871
+ alert("Could not get position of entity.");
13872
+ _a.label = 4;
13873
+ case 4: return [2 /*return*/];
13874
+ }
13875
+ });
13876
+ });
13877
+ };
13878
+ WidgetInfoView.prototype._updateInfoView = function () {
13879
+ var _a, _b, _c;
13880
+ return __awaiter(this, void 0, void 0, function () {
13881
+ var selectedIds, firstId, api, entity, entityType, name_1, data, items, images, defaultImage, url, attributes, groups, _i, groups_1, group, e_1;
13882
+ return __generator(this, function (_d) {
13883
+ switch (_d.label) {
13884
+ case 0:
13885
+ selectedIds = this._manager.VisualsRegister.GetSelected();
13886
+ if (selectedIds.length <= 0) {
13887
+ this._element.style.display = "none";
13888
+ this._element.style.opacity = "0";
13889
+ return [2 /*return*/];
13890
+ }
13891
+ this._element.style.display = "flex";
13892
+ this._element.style.opacity = "1";
13893
+ firstId = selectedIds[0];
13894
+ if (this._lastSelectedId == firstId) {
13895
+ return [2 /*return*/];
13896
+ }
13897
+ this._lastSelectedId = firstId;
13898
+ _d.label = 1;
13899
+ case 1:
13900
+ _d.trys.push([1, 5, , 6]);
13901
+ this._title.style.display = "none";
13902
+ this._flyTo.style.display = "none";
13903
+ this._name.innerText = "Loading...";
13904
+ this._type.innerText = "";
13905
+ this._summary.innerHTML = "";
13906
+ this._imageContainer.style.display = "none";
13907
+ api = this._apiGetters.GetBruceApi();
13908
+ return [4 /*yield*/, Entity$1.Get({
13909
+ entityId: firstId,
13910
+ api: api
13911
+ })];
13912
+ case 2:
13913
+ entity = (_d.sent()).entity;
13914
+ if (!entity) {
13915
+ throw (new Error("Could not get entity."));
13916
+ }
13917
+ return [4 /*yield*/, EntityType.Get({
13918
+ entityTypeId: (_a = entity.Bruce) === null || _a === void 0 ? void 0 : _a["EntityType.ID"],
13919
+ api: api
13920
+ })];
13921
+ case 3:
13922
+ entityType = (_d.sent()).entityType;
13923
+ name_1 = Entity$1.CalculateName({
13924
+ entity: entity,
13925
+ type: entityType,
13926
+ defaultToId: false
13927
+ });
13928
+ if (!name_1) {
13929
+ name_1 = "Unnamed entity";
13930
+ }
13931
+ this._title.style.display = "block";
13932
+ this._flyTo.style.display = "flex";
13933
+ this._name.innerText = name_1;
13934
+ this._type.innerText = (entityType === null || entityType === void 0 ? void 0 : entityType.Name) ? entityType.Name : "Unknown type";
13935
+ return [4 /*yield*/, EntityAttachment.GetListByEntityId({
13936
+ entityId: firstId,
13937
+ api: api
13938
+ })];
13939
+ case 4:
13940
+ data = _d.sent();
13941
+ items = data.attachments;
13942
+ images = [].concat(items).sort(function (a, b) { return b.DisplayOrder - a.DisplayOrder; }).filter(function (x) { return x["EntityAttachmentType.ID"] == EntityAttachmentType.EType.Photo; }).reverse();
13943
+ defaultImage = images.length ? images[0] : null;
13944
+ if (defaultImage) {
13945
+ this._imageContainer.style.display = "flex";
13946
+ url = ClientFile.GetUrl({
13947
+ fileId: defaultImage["ClientFile.ID"],
13948
+ api: api
13949
+ });
13950
+ this._image.style.backgroundImage = "url(".concat(url, ")");
13951
+ }
13952
+ attributes = gatherAttributes(EMode.ShowAll, entity, entityType);
13953
+ groups = groupAttributes(attributes, (_c = (_b = entityType.DataSchema) === null || _b === void 0 ? void 0 : _b.Structure) !== null && _c !== void 0 ? _c : []);
13954
+ for (_i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
13955
+ group = groups_1[_i];
13956
+ this._generateAttrGroup(entityType, entity, group);
13957
+ }
13958
+ return [3 /*break*/, 6];
13959
+ case 5:
13960
+ e_1 = _d.sent();
13961
+ console.error(e_1);
13962
+ this._name.innerText = "";
13963
+ this._summary.innerHTML = "<p>Could not read entity information</p>";
13964
+ return [3 /*break*/, 6];
13965
+ case 6: return [2 /*return*/];
13966
+ }
13967
+ });
13968
+ });
13969
+ };
13970
+ WidgetInfoView.prototype._generateAttrGroup = function (type, entity, group) {
13971
+ var groupDiv = document.createElement("div");
13972
+ groupDiv.className = "NextspaceAttributesGroup";
13973
+ groupDiv.setAttribute("is-opened", group.open ? "true" : "false");
13974
+ if (group.group.Key != "ROOT") {
13975
+ var toggle = document.createElement("div");
13976
+ toggle.className = "NextspaceAttributesGroupToggle";
13977
+ toggle.innerHTML = "\n ".concat(group.group.Key, "\n <div class=\"NextspaceAttributesGroupToggleIcon\">\n <svg class=\"NextspaceAttributesGroupToggleIconOpened\" width=\"16\" height=\"9\" viewBox=\"0 0 16 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15 1L8 8L1 1\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\n <svg class=\"NextspaceAttributesGroupToggleIconClosed\" width=\"10\" height=\"17\" viewBox=\"0 0 10 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 15.5L1.5 8.5L8.5 1.5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\n </div>\n ");
13978
+ toggle.addEventListener("click", function () {
13979
+ var isOpened = groupDiv.getAttribute("is-opened") == "true";
13980
+ groupDiv.setAttribute("is-opened", isOpened ? "false" : "true");
13981
+ localStorage.setItem("".concat(OPEN_STORAGE_KEY).concat(group.group.Key), isOpened ? "false" : "true");
13982
+ });
13983
+ groupDiv.appendChild(toggle);
13984
+ }
13985
+ for (var _i = 0, _a = group.attributes; _i < _a.length; _i++) {
13986
+ var attr = _a[_i];
13987
+ var attrDiv = this._generateAttr(groupDiv, type, entity, attr);
13988
+ if (group.group.Key != "ROOT") {
13989
+ attrDiv.style.marginLeft = "12px";
13990
+ }
13991
+ }
13992
+ this._summary.appendChild(groupDiv);
13993
+ };
13994
+ WidgetInfoView.prototype._generateAttr = function (container, type, entity, path) {
13995
+ var _a, _b, _c;
13996
+ var attrDiv = document.createElement("div");
13997
+ attrDiv.className = "NextspaceAttribute";
13998
+ var typeItem = digTypeItem(path, (_b = (_a = type.DataSchema) === null || _a === void 0 ? void 0 : _a.Structure) !== null && _b !== void 0 ? _b : []);
13999
+ var attrType = (_c = typeItem === null || typeItem === void 0 ? void 0 : typeItem.Type) !== null && _c !== void 0 ? _c : EntityAttribute.EType.String;
14000
+ var input = document.createElement("div");
14001
+ input.className = "NextspaceAttributeInput";
14002
+ attrDiv.appendChild(input);
14003
+ var attrName = document.createElement("div");
14004
+ attrName.className = "NextspaceAttributeInputLabel";
14005
+ attrName.innerText = typeItem ? typeItem.Name ? typeItem.Name : typeItem.Key : path[path.length - 1];
14006
+ input.appendChild(attrName);
14007
+ var value = Entity$1.GetValue({
14008
+ entity: entity,
14009
+ path: path
14010
+ });
14011
+ var valueStr = "";
14012
+ if (attrType == EntityAttribute.EType.Boolean) {
14013
+ valueStr = value ? "Yes" : "No";
14014
+ }
14015
+ else if (attrType == EntityAttribute.EType.Integer || attrType == EntityAttribute.EType.Double) {
14016
+ valueStr = +value;
14017
+ if (isNaN(valueStr)) {
14018
+ valueStr = 0;
14019
+ }
14020
+ }
14021
+ else if (attrType == EntityAttribute.EType.Structure) {
14022
+ valueStr = "<Multiple values>";
14023
+ }
14024
+ else if (attrType == EntityAttribute.EType.Geometry) {
14025
+ valueStr = "<Multiple values>";
14026
+ }
14027
+ else {
14028
+ if (value && typeof value == "object") {
14029
+ valueStr = "<Multiple values>";
14030
+ }
14031
+ else {
14032
+ valueStr = value ? String(value) : "<No value>";
14033
+ }
14034
+ }
14035
+ var attrValue = document.createElement("input");
14036
+ attrValue.className = "NextspaceAttributeInputValue";
14037
+ attrValue.value = String(valueStr);
14038
+ input.appendChild(attrValue);
14039
+ container.appendChild(attrDiv);
14040
+ return attrDiv;
14041
+ };
14042
+ return WidgetInfoView;
14043
+ }(Widget.AWidget));
14044
+
14045
+ var CESIUM_VIEWER_MANAGER_KEY = "_cesiumViewerManager";
14046
+ var ViewerUtils;
14047
+ (function (ViewerUtils) {
14048
+ /**
14049
+ * Destroys all the junk that cesium viewer ships with.
14050
+ * @param viewer
14051
+ */
14052
+ function InitViewer(params) {
14053
+ var viewer = params.viewer, destroyWidgets = params.destroyWidgets, styleContainer = params.styleContainer, nextspaceWidgets = params.nextspaceWidgets;
14054
+ var data = { widgets: {} };
14055
+ if (destroyWidgets != false) {
14056
+ ViewerUtils.DestroyWidget(viewer.timeline);
14057
+ ViewerUtils.DestroyWidget(viewer.vrButton);
14058
+ ViewerUtils.DestroyWidget(viewer.sceneModePicker);
14059
+ ViewerUtils.DestroyWidget(viewer.homeButton);
14060
+ ViewerUtils.DestroyWidget(viewer.fullscreenButton);
14061
+ ViewerUtils.DestroyWidget(viewer.baseLayerPicker);
14062
+ }
14063
+ if (styleContainer != false) {
14064
+ ViewerUtils.StyleContainer({ viewer: viewer });
14065
+ }
14066
+ if (nextspaceWidgets != false) {
14067
+ data.widgets = ViewerUtils.CreateWidgets({
14068
+ viewer: viewer
14069
+ });
14070
+ }
14071
+ return data;
14072
+ }
14073
+ ViewerUtils.InitViewer = InitViewer;
14074
+ function DestroyWidget(widget) {
14075
+ if (widget && !widget.isDestroyed()) {
14076
+ widget.destroy();
14077
+ }
14078
+ }
14079
+ ViewerUtils.DestroyWidget = DestroyWidget;
14080
+ /**
14081
+ * Hides all unnecessary elements from the Cesium viewer container.
14082
+ * @param viewer
14083
+ */
14084
+ function StyleContainer(params) {
14085
+ var _a;
14086
+ var viewer = params.viewer;
14087
+ var container = viewer.container;
14088
+ var genContainer = (_a = container.getElementsByClassName("cesium-viewer")) === null || _a === void 0 ? void 0 : _a[0];
14089
+ if (genContainer) {
14090
+ var children = genContainer.children;
14091
+ for (var i = 0; i < children.length; i++) {
14092
+ var child = children[i];
14093
+ if (!child.classList.contains("cesium-viewer-cesiumWidgetContainer")) {
14094
+ child.style.display = "none";
14095
+ }
14096
+ }
14097
+ }
14098
+ var canvas = viewer.canvas;
14099
+ canvas.style.width = "100%";
14100
+ canvas.style.height = "100%";
14101
+ var widget = canvas.parentElement;
14102
+ widget.style.width = "100%";
14103
+ widget.style.height = "100%";
14104
+ widget.style.touchAction = "none";
14105
+ var widgetContainer = widget.parentElement;
14106
+ widgetContainer.style.width = "100%";
14107
+ widgetContainer.style.height = "100%";
14108
+ var viewerContainer = widgetContainer.parentElement;
14109
+ viewerContainer.style.fontFamily = "sans-serif";
14110
+ viewerContainer.style.fontSize = "16px";
14111
+ viewerContainer.style.overflow = "hidden";
14112
+ viewerContainer.style.display = "block";
14113
+ viewerContainer.style.position = "relative";
14114
+ viewerContainer.style.top = "0";
14115
+ viewerContainer.style.left = "0";
14116
+ viewerContainer.style.width = "100%";
14117
+ viewerContainer.style.height = "100%";
14118
+ }
14119
+ ViewerUtils.StyleContainer = StyleContainer;
14120
+ /**
14121
+ * Returns a given Cesium viewer's menu item manager.
14122
+ * If one is missing then it'll optionally create one before returning it.
14123
+ * @param params
14124
+ * @returns
14125
+ */
14126
+ function GetManager(params) {
14127
+ var viewer = params.viewer, createIfMissing = params.createIfMissing;
14128
+ if (viewer[CESIUM_VIEWER_MANAGER_KEY]) {
14129
+ return viewer[CESIUM_VIEWER_MANAGER_KEY];
14130
+ }
14131
+ else if (createIfMissing != false) {
14132
+ var manager = new MenuItemManager.Manager({ viewer: viewer });
14133
+ viewer[CESIUM_VIEWER_MANAGER_KEY] = manager;
14134
+ return manager;
14135
+ }
14136
+ return null;
14137
+ }
14138
+ ViewerUtils.GetManager = GetManager;
14139
+ /**
14140
+ * Creates Nextspace default widgets.
14141
+ * Returns key/value pairs for created widgets. Key is widget name.
14142
+ * @param params
14143
+ */
14144
+ function CreateWidgets(params) {
14145
+ var viewer = params.viewer, manager = params.manager, container = params.container, apiGetters = params.apiGetters, navCompass = params.navCompass, defaultState = params.defaultState, branding = params.branding, cursorBar = params.cursorBar, searchBar = params.searchBar, bookmarks = params.bookmarks, infoView = params.infoView;
14146
+ var widgets = {};
14147
+ if (!viewer && manager) {
14148
+ viewer = manager.Viewer;
14149
+ }
14150
+ if (viewer && !manager) {
14151
+ manager = ViewerUtils.GetManager({ viewer: viewer });
14152
+ }
14153
+ if (!container && viewer) {
14154
+ container = viewer.container;
14155
+ }
14156
+ if (!apiGetters) {
14157
+ apiGetters = ENVIRONMENT.Api();
14158
+ }
14159
+ if (defaultState == null) {
14160
+ defaultState = true;
14161
+ }
14162
+ var widgetParams = {
14163
+ viewer: viewer,
14164
+ container: container,
14165
+ apiGetters: apiGetters,
14166
+ manager: manager
14167
+ };
14168
+ if (navCompass || defaultState) {
14169
+ widgets["navCompass"] = new WidgetNavCompass(widgetParams);
14170
+ }
14171
+ if (branding || defaultState) {
14172
+ widgets["navBranding"] = new WidgetBranding(widgetParams);
14173
+ }
14174
+ if (cursorBar || defaultState) {
14175
+ widgets["cursorBar"] = new WidgetCursorBar(widgetParams);
14176
+ }
14177
+ if (searchBar || defaultState) {
14178
+ widgets["searchBar"] = new WidgetSearchBar(widgetParams);
14179
+ }
14180
+ if (bookmarks || defaultState) {
14181
+ widgets["bookmarks"] = new WidgetBookmarks(__assign(__assign({}, widgetParams), { viewId: params.viewId }));
14182
+ }
14183
+ if (infoView || defaultState) {
14184
+ widgets["infoView"] = new WidgetInfoView(widgetParams);
14185
+ }
14186
+ return widgets;
14187
+ }
14188
+ ViewerUtils.CreateWidgets = CreateWidgets;
14189
+ })(ViewerUtils || (ViewerUtils = {}));
14190
+
14191
+ var VERSION$1 = "2.2.8";
11005
14192
 
11006
- export { VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils };
14193
+ export { VERSION$1 as VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
11007
14194
  //# sourceMappingURL=bruce-cesium.es5.js.map