bruce-cesium 7.3.8 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/bruce-cesium.es5.js +2911 -626
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +2910 -623
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +8 -2
  6. package/dist/lib/bruce-cesium.js.map +1 -1
  7. package/dist/lib/rendering/entity-gatherer.js +249 -16
  8. package/dist/lib/rendering/entity-gatherer.js.map +1 -1
  9. package/dist/lib/rendering/render-managers/common/entity-label-group.js +482 -0
  10. package/dist/lib/rendering/render-managers/common/entity-label-group.js.map +1 -0
  11. package/dist/lib/rendering/render-managers/common/entity-label.js +1213 -155
  12. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
  13. package/dist/lib/rendering/render-managers/common/historic-utils.js +64 -7
  14. package/dist/lib/rendering/render-managers/common/historic-utils.js.map +1 -1
  15. package/dist/lib/rendering/render-managers/common/point-clustering-core.js +85 -0
  16. package/dist/lib/rendering/render-managers/common/point-clustering-core.js.map +1 -0
  17. package/dist/lib/rendering/render-managers/common/point-clustering.js +566 -419
  18. package/dist/lib/rendering/render-managers/common/point-clustering.js.map +1 -1
  19. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +1 -1
  20. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -1
  21. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +2 -2
  22. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
  23. package/dist/lib/rendering/visuals-register.js +273 -24
  24. package/dist/lib/rendering/visuals-register.js.map +1 -1
  25. package/dist/types/bruce-cesium.d.ts +4 -1
  26. package/dist/types/rendering/entity-gatherer.d.ts +27 -4
  27. package/dist/types/rendering/render-managers/common/entity-label-group.d.ts +104 -0
  28. package/dist/types/rendering/render-managers/common/entity-label.d.ts +138 -1
  29. package/dist/types/rendering/render-managers/common/historic-utils.d.ts +12 -4
  30. package/dist/types/rendering/render-managers/common/point-clustering-core.d.ts +17 -0
  31. package/dist/types/rendering/render-managers/common/point-clustering.d.ts +37 -72
  32. package/dist/types/rendering/visuals-register.d.ts +43 -2
  33. package/package.json +1 -1
@@ -7,6 +7,7 @@ const js_utils_1 = require("../internal/js-utils");
7
7
  const cesium_show_gate_1 = require("../internal/cesium-show-gate");
8
8
  const cesium_utils_1 = require("../internal/cesium-utils");
9
9
  const entity_label_1 = require("../rendering/render-managers/common/entity-label");
10
+ const entity_label_group_1 = require("./render-managers/common/entity-label-group");
10
11
  const cesium_entity_styler_1 = require("../utils/cesium-entity-styler");
11
12
  const entity_render_engine_1 = require("./entity-render-engine");
12
13
  const entity_utils_1 = require("../utils/entity-utils");
@@ -170,7 +171,7 @@ function updateEntityShow(viewer, rego, show) {
170
171
  }
171
172
  }
172
173
  function updateEntity(viewer, entityId, register, refresh, cache = {}) {
173
- var _a;
174
+ var _a, _b, _c;
174
175
  if (!entityId) {
175
176
  // What are we doing?
176
177
  return;
@@ -283,20 +284,25 @@ function updateEntity(viewer, entityId, register, refresh, cache = {}) {
283
284
  }
284
285
  }
285
286
  }
286
- if (state.labelled && visible) {
287
+ const labelGroup = register.GetLabelGroupFor(rego.entityId, rego.menuItemId);
288
+ if ((state.labelled || labelGroup) && visible) {
287
289
  entity_label_1.EntityLabel.Attach({
288
290
  rego,
289
291
  viewer,
290
- api: register.ApiGetters.GetBruceApi(),
291
- visualRegister: register
292
+ api: (_b = register.ApiGetters) === null || _b === void 0 ? void 0 : _b.GetBruceApi(),
293
+ visualRegister: register,
294
+ options: labelGroup === null || labelGroup === void 0 ? void 0 : labelGroup.options,
295
+ groupId: labelGroup === null || labelGroup === void 0 ? void 0 : labelGroup.groupId,
296
+ persistent: true
292
297
  });
293
298
  }
294
- else {
299
+ else if (!visible || ((_c = entity_label_1.EntityLabel.GetLabel({ rego })) === null || _c === void 0 ? void 0 : _c.Persistent)) {
295
300
  entity_label_1.EntityLabel.Detatch({
296
- rego
301
+ rego, force: true
297
302
  });
298
303
  }
299
304
  }
305
+ register.RefreshLabelGroupEntity(entityId);
300
306
  }
301
307
  function markEntity(register, rego, visual, ignoreParent) {
302
308
  const vis = visual;
@@ -411,6 +417,7 @@ var VisualsRegister;
411
417
  }
412
418
  return this.onUpdate;
413
419
  }
420
+ get OnLabelGroupsChanged() { return this.labelGroupsChanged; }
414
421
  constructor(params) {
415
422
  this.id = bruce_models_1.ObjectUtils.UId();
416
423
  this.disposed = false;
@@ -449,10 +456,35 @@ var VisualsRegister;
449
456
  this.menuItemSources = new Map();
450
457
  // Set when the data source order no longer matches the zIndexes seen, so it is re-applied once.
451
458
  this.sourceOrderDirty = false;
459
+ this.labelGroupsChanged = new bruce_models_1.BruceEvent();
460
+ this.hoverRingState = {};
461
+ this.retiringHoverLabels = new Map();
452
462
  /*
453
463
  * Tilesets in the scene, keyed by the tileset itself.
454
464
  */
455
465
  this.tilesets = new Map();
466
+ this.ClearLabelHover = () => {
467
+ if (!this.labelHover && !this.hoverLabel) {
468
+ return;
469
+ }
470
+ this.ReleaseHoverLabel();
471
+ this.labelHover = undefined;
472
+ clearTimeout(this.hoverRingReset);
473
+ this.hoverRingReset = setTimeout(() => { this.hoverRingState = {}; }, 400);
474
+ const doc = this.viewer.container.ownerDocument;
475
+ doc.removeEventListener("pointermove", this.CheckLabelHoverBounds, true);
476
+ this.viewer.container.removeEventListener("pointerleave", this.CheckLabelHoverBounds);
477
+ doc.defaultView.removeEventListener("blur", this.ClearLabelHover);
478
+ if (!this.viewer.isDestroyed()) {
479
+ this.viewer.scene.requestRender();
480
+ }
481
+ };
482
+ this.CheckLabelHoverBounds = (event) => {
483
+ const bounds = this.viewer.canvas.getBoundingClientRect();
484
+ if (event.clientX < bounds.left || event.clientX >= bounds.right || event.clientY < bounds.top || event.clientY >= bounds.bottom) {
485
+ this.ClearLabelHover();
486
+ }
487
+ };
456
488
  this.viewer = params.viewer;
457
489
  this.apiGetters = params.apiGetters;
458
490
  this.cameraCullerDispose = visual_register_culler_1.VisualRegisterCuller.Monitor({
@@ -648,6 +680,7 @@ var VisualsRegister;
648
680
  const BATCH_SIZE = 300;
649
681
  if (this.updateQueue.length) {
650
682
  this.updateQueueInterval = setInterval(() => {
683
+ var _a;
651
684
  if (this.Disposed || (!this.viewer || !this.viewer.scene || this.viewer.isDestroyed())) {
652
685
  clearInterval(this.updateQueueInterval);
653
686
  this.updateQueueInterval = null;
@@ -660,6 +693,8 @@ var VisualsRegister;
660
693
  this.updateQueueIds.delete(entityId);
661
694
  // Check if still registered.
662
695
  if (entityId && (!this.rego[entityId] || !this.rego[entityId].length)) {
696
+ (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.RefreshEntity(entityId);
697
+ delete this.updateQueueSettings[entityId];
663
698
  continue;
664
699
  }
665
700
  updateEntity(this.viewer, entityId, this, this.updateQueueSettings[entityId] == null ? false : this.updateQueueSettings[entityId], cache);
@@ -1317,8 +1352,23 @@ var VisualsRegister;
1317
1352
  markEntity(this, rego, rego.visual, false);
1318
1353
  }
1319
1354
  Dispose() {
1320
- var _a, _b, _c, _d;
1321
- (_a = this.cameraCullerDispose) === null || _a === void 0 ? void 0 : _a.call(this, {
1355
+ var _a, _b, _c, _d, _e;
1356
+ this.ClearLabelHover();
1357
+ clearTimeout(this.hoverRingReset);
1358
+ this.hoverRingState = {};
1359
+ for (const { label, timer } of this.retiringHoverLabels.values()) {
1360
+ clearTimeout(timer);
1361
+ entity_label_1.EntityLabel.Detatch({ label });
1362
+ }
1363
+ this.retiringHoverLabels.clear();
1364
+ (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Dispose();
1365
+ this.labelGroupsChanged.Clear();
1366
+ for (const regos of Object.values(this.rego)) {
1367
+ for (const rego of regos)
1368
+ entity_label_1.EntityLabel.Detatch({ rego, force: true });
1369
+ }
1370
+ entity_label_1.EntityLabel.SetContainer(this.viewer);
1371
+ (_b = this.cameraCullerDispose) === null || _b === void 0 ? void 0 : _b.call(this, {
1322
1372
  uncull: false
1323
1373
  });
1324
1374
  this.cameraCullerDispose = null;
@@ -1334,7 +1384,7 @@ var VisualsRegister;
1334
1384
  this.disposed = true;
1335
1385
  for (const record of Array.from(this.menuItemSources.values())) {
1336
1386
  try {
1337
- (_c = (_b = this.viewer) === null || _b === void 0 ? void 0 : _b.dataSources) === null || _c === void 0 ? void 0 : _c.remove(record.source, true);
1387
+ (_d = (_c = this.viewer) === null || _c === void 0 ? void 0 : _c.dataSources) === null || _d === void 0 ? void 0 : _d.remove(record.source, true);
1338
1388
  }
1339
1389
  catch (e) {
1340
1390
  console.error(e);
@@ -1343,7 +1393,7 @@ var VisualsRegister;
1343
1393
  this.menuItemSources.clear();
1344
1394
  // Hand every tileset's show flag back to its owner, holding whatever the owner last asked for.
1345
1395
  for (const rego of Array.from(this.tilesets.values())) {
1346
- (_d = rego.gate) === null || _d === void 0 ? void 0 : _d.Release();
1396
+ (_e = rego.gate) === null || _e === void 0 ? void 0 : _e.Release();
1347
1397
  }
1348
1398
  this.tilesets.clear();
1349
1399
  }
@@ -2297,7 +2347,7 @@ var VisualsRegister;
2297
2347
  * @returns
2298
2348
  */
2299
2349
  RemoveRegos(params) {
2300
- var _a, _b, _c;
2350
+ var _a, _b, _c, _d, _e;
2301
2351
  let { entityId, menuItemId, doUpdate, relation, retainTagIds, requestRender, doRemove, source, lazy, onComplete } = params;
2302
2352
  if (doUpdate == null || doUpdate === undefined) {
2303
2353
  doUpdate = true;
@@ -2318,7 +2368,7 @@ var VisualsRegister;
2318
2368
  }
2319
2369
  }
2320
2370
  const removeOne = (entityId) => {
2321
- var _a, _b;
2371
+ var _a, _b, _c;
2322
2372
  const entityRegos = this.rego[entityId];
2323
2373
  if (!entityRegos) {
2324
2374
  return;
@@ -2333,7 +2383,7 @@ var VisualsRegister;
2333
2383
  return;
2334
2384
  }
2335
2385
  entity_label_1.EntityLabel.Detatch({
2336
- rego
2386
+ rego, force: true
2337
2387
  });
2338
2388
  // Never tear down the graphic the caller is registering: the renderers hand back
2339
2389
  // the same object when they reuse it, so removing it here destroys what replaces it.
@@ -2358,15 +2408,14 @@ var VisualsRegister;
2358
2408
  (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger(update);
2359
2409
  }
2360
2410
  // Only worth refreshing while the Entity is still drawn by something else, since
2361
- // losing this rego can change which of the survivors wins. With none left there is
2362
- // nothing to restyle, and queueing one per removed Entity is what turns disabling a
2363
- // large menu item into minutes of scheduled work.
2411
+ // losing this rego can change which of the survivors wins.
2364
2412
  if (doesInclude && ((_b = this.rego[entityId]) === null || _b === void 0 ? void 0 : _b.length)) {
2365
2413
  this.queueUpdate({
2366
2414
  entityId: entityId,
2367
2415
  refresh: false
2368
2416
  });
2369
2417
  }
2418
+ (_c = this.labelGroups) === null || _c === void 0 ? void 0 : _c.RefreshEntity(entityId);
2370
2419
  };
2371
2420
  const finish = () => {
2372
2421
  this.releaseMenuItemCollection(menuItemId);
@@ -2397,7 +2446,7 @@ var VisualsRegister;
2397
2446
  return;
2398
2447
  }
2399
2448
  entity_label_1.EntityLabel.Detatch({
2400
- rego
2449
+ rego, force: true
2401
2450
  });
2402
2451
  // Never tear down the graphic the caller is registering: the renderers hand back
2403
2452
  // the same object when they reuse it, so removing it here destroys what replaces it.
@@ -2416,7 +2465,7 @@ var VisualsRegister;
2416
2465
  if (source !== EUpdateSource.TREE_CASCADE) {
2417
2466
  (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger(update);
2418
2467
  }
2419
- this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);
2468
+ this.rego[entityId] = this.rego[entityId].filter(r => r.menuItemId !== menuItemId);
2420
2469
  this.unindexMenuItemEntityIfAbsent(menuItemId, entityId);
2421
2470
  if (doUpdate && menuItemId) {
2422
2471
  this.queueUpdate({
@@ -2425,6 +2474,7 @@ var VisualsRegister;
2425
2474
  });
2426
2475
  }
2427
2476
  }
2477
+ (_c = this.labelGroups) === null || _c === void 0 ? void 0 : _c.RefreshEntity(entityId);
2428
2478
  }
2429
2479
  else if (relation) {
2430
2480
  const relationKey = relation_render_engine_1.RelationRenderEngine.GetRenderGroupId(relation);
@@ -2436,7 +2486,7 @@ var VisualsRegister;
2436
2486
  continue;
2437
2487
  }
2438
2488
  entity_label_1.EntityLabel.Detatch({
2439
- rego
2489
+ rego, force: true
2440
2490
  });
2441
2491
  removeEntity(this.viewer, rego.visual);
2442
2492
  rego.visual = null;
@@ -2445,6 +2495,7 @@ var VisualsRegister;
2445
2495
  delete this.rego[entityId];
2446
2496
  }
2447
2497
  this.unindexMenuItemEntityIfAbsent(rego.menuItemId, entityId);
2498
+ (_d = this.labelGroups) === null || _d === void 0 ? void 0 : _d.RefreshEntity(entityId);
2448
2499
  const update = {
2449
2500
  type: EVisualUpdateType.Remove,
2450
2501
  entityId: rego.entityId,
@@ -2454,7 +2505,7 @@ var VisualsRegister;
2454
2505
  update.source = source;
2455
2506
  }
2456
2507
  if (source !== EUpdateSource.TREE_CASCADE) {
2457
- (_c = this.onUpdate) === null || _c === void 0 ? void 0 : _c.Trigger(update);
2508
+ (_e = this.onUpdate) === null || _e === void 0 ? void 0 : _e.Trigger(update);
2458
2509
  }
2459
2510
  if (doUpdate) {
2460
2511
  this.queueUpdate({
@@ -2473,7 +2524,7 @@ var VisualsRegister;
2473
2524
  * @param params
2474
2525
  */
2475
2526
  RemoveRegosByVisuals(params) {
2476
- var _a, _b;
2527
+ var _a, _b, _c;
2477
2528
  const { doRemove = true, requestRender = true, source, doUpdate, menuItemId } = params;
2478
2529
  const removedEntityIds = new Set();
2479
2530
  for (const visual of params.visuals) {
@@ -2488,9 +2539,8 @@ var VisualsRegister;
2488
2539
  continue;
2489
2540
  }
2490
2541
  if (rego.visual === visual) {
2491
- // The primary graphic for this rego - remove the rego entirely.
2492
2542
  entity_label_1.EntityLabel.Detatch({
2493
- rego
2543
+ rego, force: true
2494
2544
  });
2495
2545
  if (doRemove != false) {
2496
2546
  removeEntity(this.viewer, rego.visual);
@@ -2519,9 +2569,10 @@ var VisualsRegister;
2519
2569
  });
2520
2570
  }
2521
2571
  removedEntityIds.add(entityId);
2572
+ (_b = this.labelGroups) === null || _b === void 0 ? void 0 : _b.RefreshEntity(entityId);
2522
2573
  }
2523
2574
  else {
2524
- const siblings = (_b = rego.visual) === null || _b === void 0 ? void 0 : _b["_siblingGraphics"];
2575
+ const siblings = (_c = rego.visual) === null || _c === void 0 ? void 0 : _c["_siblingGraphics"];
2525
2576
  if (siblings === null || siblings === void 0 ? void 0 : siblings.length) {
2526
2577
  if (doRemove != false && siblings.includes(visual)) {
2527
2578
  removeEntity(this.viewer, visual);
@@ -2788,6 +2839,204 @@ var VisualsRegister;
2788
2839
  }
2789
2840
  return map;
2790
2841
  }
2842
+ ReleaseHoverLabel(immediate = false) {
2843
+ const label = this.hoverLabel;
2844
+ this.hoverLabel = undefined;
2845
+ if (!label || label.Disposed || label.Persistent) {
2846
+ return;
2847
+ }
2848
+ if (immediate) {
2849
+ entity_label_1.EntityLabel.Detatch({ label });
2850
+ return;
2851
+ }
2852
+ label.SetHoverVisible(false);
2853
+ const key = JSON.stringify([label.Rego.entityId, label.Rego.menuItemId || ""]);
2854
+ const previous = this.retiringHoverLabels.get(key);
2855
+ if (previous) {
2856
+ clearTimeout(previous.timer);
2857
+ entity_label_1.EntityLabel.Detatch({ label: previous.label });
2858
+ }
2859
+ // Retain briefly beyond the fade to bridge debounced same-target hover updates.
2860
+ const timer = setTimeout(() => {
2861
+ this.retiringHoverLabels.delete(key);
2862
+ entity_label_1.EntityLabel.Detatch({ label });
2863
+ }, 240);
2864
+ this.retiringHoverLabels.set(key, { label, timer });
2865
+ }
2866
+ /*
2867
+ * Owns temporary positioning separately from persistent label membership and world anchors.
2868
+ */
2869
+ SetLabelHover(params) {
2870
+ var _a, _b;
2871
+ if (this.disposed) {
2872
+ return;
2873
+ }
2874
+ if (!(params === null || params === void 0 ? void 0 : params.entityId)) {
2875
+ this.ClearLabelHover();
2876
+ return;
2877
+ }
2878
+ if (params.position && (!Number.isFinite(params.position.x) || !Number.isFinite(params.position.y) ||
2879
+ params.position.x < 0 || params.position.y < 0 ||
2880
+ params.position.x >= this.viewer.canvas.clientWidth || params.position.y >= this.viewer.canvas.clientHeight)) {
2881
+ this.ClearLabelHover();
2882
+ return;
2883
+ }
2884
+ const changed = ((_a = this.labelHover) === null || _a === void 0 ? void 0 : _a.entityId) !== params.entityId || ((_b = this.labelHover) === null || _b === void 0 ? void 0 : _b.menuItemId) !== params.menuItemId;
2885
+ if (changed) {
2886
+ this.ClearLabelHover();
2887
+ }
2888
+ clearTimeout(this.hoverRingReset);
2889
+ this.labelHover = {
2890
+ entityId: params.entityId,
2891
+ menuItemId: params.menuItemId,
2892
+ position: params.position ? { ...params.position } : undefined,
2893
+ createIfMissing: params.createIfMissing !== false
2894
+ };
2895
+ const doc = this.viewer.container.ownerDocument;
2896
+ doc.addEventListener("pointermove", this.CheckLabelHoverBounds, true);
2897
+ this.viewer.container.addEventListener("pointerleave", this.CheckLabelHoverBounds);
2898
+ doc.defaultView.addEventListener("blur", this.ClearLabelHover);
2899
+ this.SyncLabelHover();
2900
+ this.viewer.scene.requestRender();
2901
+ }
2902
+ GetLabelHoverPosition(entityId, menuItemId) {
2903
+ const hover = this.labelHover;
2904
+ return (hover === null || hover === void 0 ? void 0 : hover.entityId) === entityId && (hover.menuItemId == null || hover.menuItemId === menuItemId) ? hover.position : undefined;
2905
+ }
2906
+ SyncLabelHover() {
2907
+ var _a, _b, _c, _d;
2908
+ const hover = this.labelHover;
2909
+ if (!hover || this.disposed) {
2910
+ return;
2911
+ }
2912
+ if ((_a = this.hoverLabel) === null || _a === void 0 ? void 0 : _a.Disposed) {
2913
+ this.hoverLabel = undefined;
2914
+ }
2915
+ if (!hover.createIfMissing) {
2916
+ this.ReleaseHoverLabel(true);
2917
+ return;
2918
+ }
2919
+ const group = this.GetLabelGroupFor(hover.entityId, hover.menuItemId);
2920
+ let rego = this.GetRego(hover);
2921
+ const key = JSON.stringify([hover.entityId, hover.menuItemId || ""]);
2922
+ const retiring = this.retiringHoverLabels.get(key);
2923
+ if (retiring) {
2924
+ clearTimeout(retiring.timer);
2925
+ this.retiringHoverLabels.delete(key);
2926
+ if (!retiring.label.Disposed) {
2927
+ this.hoverLabel = retiring.label;
2928
+ }
2929
+ }
2930
+ const existing = rego && entity_label_1.EntityLabel.GetLabel({ rego });
2931
+ const state = this.GetState(hover);
2932
+ if ((!rego && !group) || state.hidden || ((_b = rego === null || rego === void 0 ? void 0 : rego.visual) === null || _b === void 0 ? void 0 : _b.show) === false ||
2933
+ (this.GetIsIsolatedAny() && !state.isolated && this.GetIsolationOpacity() == null) ||
2934
+ (existing && existing !== this.hoverLabel && existing.HasText) ||
2935
+ (group && group.options.presentation !== "icon")) {
2936
+ this.ReleaseHoverLabel(true);
2937
+ return;
2938
+ }
2939
+ if (this.hoverLabel && !this.hoverLabel.Disposed) {
2940
+ this.hoverLabel.SetHoverVisible(true);
2941
+ return;
2942
+ }
2943
+ // Query-only icon groups have coordinates but no registered scene visual to attach to.
2944
+ if (!rego && group && [group.item.longitude, group.item.latitude, (_c = group.item.altitude) !== null && _c !== void 0 ? _c : 0].every(Number.isFinite)) {
2945
+ rego = {
2946
+ entityId: hover.entityId,
2947
+ menuItemId: hover.menuItemId,
2948
+ name: group.options.text,
2949
+ priority: 0,
2950
+ visual: new Cesium.Entity({
2951
+ position: Cesium.Cartesian3.fromDegrees(group.item.longitude, group.item.latitude, group.item.altitude || 0),
2952
+ point: {
2953
+ pixelSize: 0,
2954
+ heightReference: Cesium.HeightReference.NONE
2955
+ }
2956
+ })
2957
+ };
2958
+ }
2959
+ if (!rego) {
2960
+ return;
2961
+ }
2962
+ const params = {
2963
+ rego,
2964
+ viewer: this.viewer,
2965
+ visualRegister: this,
2966
+ api: (_d = this.ApiGetters) === null || _d === void 0 ? void 0 : _d.GetBruceApi(),
2967
+ persistent: false,
2968
+ transient: true,
2969
+ hoverRingState: this.hoverRingState,
2970
+ options: {
2971
+ presentation: "text",
2972
+ text: group === null || group === void 0 ? void 0 : group.options.text,
2973
+ selectOnClick: false
2974
+ },
2975
+ visible: () => {
2976
+ var _a, _b;
2977
+ const current = this.GetState(hover);
2978
+ return (!this.disposed && !current.hidden && ((_a = rego.visual) === null || _a === void 0 ? void 0 : _a.show) !== false &&
2979
+ Boolean(this.GetRego(hover) || ((_b = this.labelGroups) === null || _b === void 0 ? void 0 : _b.Has(hover.entityId, hover.menuItemId))) &&
2980
+ (!this.GetIsIsolatedAny() || current.isolated || this.GetIsolationOpacity() != null));
2981
+ }
2982
+ };
2983
+ this.hoverLabel = existing || group ? new entity_label_1.EntityLabel.Label(params) : entity_label_1.EntityLabel.Attach(params);
2984
+ }
2985
+ SetLabelContainer(container) {
2986
+ if (this.disposed) {
2987
+ return;
2988
+ }
2989
+ entity_label_1.EntityLabel.SetContainer(this.viewer, container);
2990
+ }
2991
+ ClearLabelContainer() {
2992
+ this.SetLabelContainer();
2993
+ }
2994
+ /*
2995
+ * Adds source-driven membership without changing manual labelled state or legacy bookmark snapshots.
2996
+ */
2997
+ SetLabelGroup(group) {
2998
+ if (this.disposed) {
2999
+ return Promise.reject(new Error("Visual register is disposed"));
3000
+ }
3001
+ if (!this.labelGroups) {
3002
+ this.labelGroups = new entity_label_group_1.EntityLabelGroup.Manager(this, () => this.labelGroupsChanged.Trigger(undefined));
3003
+ }
3004
+ return this.labelGroups.Set(group);
3005
+ }
3006
+ RemoveLabelGroup(id) {
3007
+ var _a;
3008
+ (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Remove(id);
3009
+ }
3010
+ RefreshLabelGroup(id) {
3011
+ var _a, _b;
3012
+ if (this.disposed) {
3013
+ return Promise.reject(new Error("Visual register is disposed"));
3014
+ }
3015
+ return (_b = (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Refresh(id)) !== null && _b !== void 0 ? _b : Promise.reject(new Error(`Unknown label group: ${id}`));
3016
+ }
3017
+ SetLabelGroupVisible(id, visible) {
3018
+ var _a, _b;
3019
+ return (_b = (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.SetVisible(id, visible)) !== null && _b !== void 0 ? _b : false;
3020
+ }
3021
+ ClearLabelGroups() {
3022
+ var _a;
3023
+ (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Clear();
3024
+ }
3025
+ GetLabelGroups() {
3026
+ var _a;
3027
+ return ((_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Get()) || [];
3028
+ }
3029
+ GetLabelGroupFor(entityId, menuItemId) {
3030
+ var _a;
3031
+ return (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Resolve(entityId, menuItemId);
3032
+ }
3033
+ RefreshLabelGroupEntity(entityId) {
3034
+ var _a, _b;
3035
+ (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.RefreshEntity(entityId);
3036
+ if (((_b = this.labelHover) === null || _b === void 0 ? void 0 : _b.entityId) === entityId) {
3037
+ this.SyncLabelHover();
3038
+ }
3039
+ }
2791
3040
  }
2792
3041
  VisualsRegister.Register = Register;
2793
3042
  })(VisualsRegister = exports.VisualsRegister || (exports.VisualsRegister = {}));