@luxonis/visualizer-protobuf 2.38.0 → 2.40.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 (62) hide show
  1. package/dist/{communicator-BjQGdkEF.js → communicator-Rs8pk0Io.js} +1 -1
  2. package/dist/{deserialization.worker-B4mbcVaD.js → deserialization.worker-BKq1x9xw.js} +16 -2
  3. package/dist/{encoding-BaoHXAPX.js → encoding-D95pQf33.js} +25 -10
  4. package/dist/{index-wJ2ZczEf.js → index--iQfQ_BM.js} +1 -1
  5. package/dist/{index-CVyLuyd1.js → index-9Tyh0kLM.js} +1 -1
  6. package/dist/{index-BXVV46N_.js → index-B6HlbGsq.js} +1 -1
  7. package/dist/{index-B0a8Fcsq.js → index-BF8y50SS.js} +145 -1093
  8. package/dist/{index-BtiKczUb.js → index-BVjYgfIS.js} +1 -1
  9. package/dist/{index-DV2Nx63w.js → index-BXw9XAtq.js} +1 -1
  10. package/dist/{index-B_YpX6mQ.js → index-CGKMb8B_.js} +1 -1
  11. package/dist/{index-Bju8N8aL.js → index-CVcETMbV.js} +1 -1
  12. package/dist/{index-FFoDQ871.js → index-CphhTBOZ.js} +1 -1
  13. package/dist/{index-CfastwMS.js → index-DCAb3slV.js} +1 -1
  14. package/dist/{index-Dss-letG.js → index-DGOR7UPX.js} +1 -1
  15. package/dist/{index-C4J2Ez3Z.js → index-DIvlB71Y.js} +1 -1
  16. package/dist/{index-CW07jSZd.js → index-DKBjhfFf.js} +1 -1
  17. package/dist/{index-BJQvzWXZ.js → index-DMwj27wf.js} +1 -1
  18. package/dist/{index-fCPVXmPm.js → index-DarWKW89.js} +1 -1
  19. package/dist/{index-CHQ8c72c.js → index-MXZP0RG4.js} +1 -1
  20. package/dist/{index-D4iLc9pG.js → index-Zf_aqI9D.js} +1 -1
  21. package/dist/{index-Dzy9H4eN.js → index-ok4WDE4X.js} +2 -2
  22. package/dist/{index-MWcjCcp7.js → index-xjxIYb7x.js} +25 -24
  23. package/dist/index.js +1 -1
  24. package/dist/lib/src/connection/connection.d.ts +2 -2
  25. package/dist/lib/src/connection/connection.d.ts.map +1 -1
  26. package/dist/lib/src/connection/connection.js.map +1 -1
  27. package/dist/lib/src/connection/foxglove-connection.d.ts +2 -2
  28. package/dist/lib/src/connection/foxglove-connection.d.ts.map +1 -1
  29. package/dist/lib/src/connection/foxglove-connection.js.map +1 -1
  30. package/dist/lib/src/messaging/deserialization.worker.d.ts +5 -2
  31. package/dist/lib/src/messaging/deserialization.worker.d.ts.map +1 -1
  32. package/dist/lib/src/messaging/deserialization.worker.js +10 -1
  33. package/dist/lib/src/messaging/deserialization.worker.js.map +1 -1
  34. package/dist/lib/src/messaging/message-handler.d.ts +2 -2
  35. package/dist/lib/src/messaging/message-handler.d.ts.map +1 -1
  36. package/dist/lib/src/messaging/message-handler.js +2 -1
  37. package/dist/lib/src/messaging/message-handler.js.map +1 -1
  38. package/dist/lib/src/protobuf.generated/EncodedFrame.js +1 -1
  39. package/dist/lib/src/protobuf.generated/Event.js +1 -1
  40. package/dist/lib/src/protobuf.generated/IMUData.js +1 -1
  41. package/dist/lib/src/protobuf.generated/ImageAnnotations.js +1 -1
  42. package/dist/lib/src/protobuf.generated/ImgDetections.d.ts +1 -0
  43. package/dist/lib/src/protobuf.generated/ImgDetections.d.ts.map +1 -1
  44. package/dist/lib/src/protobuf.generated/ImgDetections.js +16 -2
  45. package/dist/lib/src/protobuf.generated/ImgDetections.js.map +1 -1
  46. package/dist/lib/src/protobuf.generated/ImgFrame.js +1 -1
  47. package/dist/lib/src/protobuf.generated/PointCloudData.js +1 -1
  48. package/dist/lib/src/protobuf.generated/SpatialImgDetections.js +1 -1
  49. package/dist/lib/src/protobuf.generated/common.js +1 -1
  50. package/dist/lib/src/utils/encoding.js +1 -1
  51. package/dist/lib/src/utils/encoding.js.map +1 -1
  52. package/dist/lib/src/utils/error.d.ts +2 -0
  53. package/dist/lib/src/utils/error.d.ts.map +1 -1
  54. package/dist/lib/src/utils/error.js +3 -0
  55. package/dist/lib/src/utils/error.js.map +1 -1
  56. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts +6 -0
  57. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts.map +1 -1
  58. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js +52 -233
  59. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js.map +1 -1
  60. package/dist/{worker-5EVhuR0-.js → worker-BCJnECSn.js} +2 -2
  61. package/dist/{worker-4R8nuLc9.js → worker-ChOPGWcQ.js} +2 -2
  62. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { useReducer, useRef, useCallback, useLayoutEffect, Component, useContext, useState, useEffect, createContext, forwardRef, createElement, cloneElement, useMemo, Profiler, StrictMode } from 'react';
3
3
  import ReactDOM__default from 'react-dom';
4
- import { S as isSymbol, U as toString, V as keys, W as getSymbols$1, X as stubArray, Y as arrayPush, Z as baseGetAllKeys, g as getTag, $ as getAllKeys, k as baseGet, c as baseIteratee, j as castPath, t as toKey, a0 as arrayMap$1, a1 as baseUniq, b as baseFlatten, a2 as useMustNotChange, a3 as useCurrentLayoutActions, a4 as useCurrentLayoutSelector, r as reportError, A as AppError, L as Logger, u as useGuaranteedContext, a5 as usePanelMosaicId, a6 as useSelectedPanels, a7 as PANEL_TITLE_CONFIG_KEY, a8 as noop$4, o as getPanelTypeFromId, M as useShallowMemo, T as TAB_PANEL_TYPE, J as filterMap, d as dist$3, a9 as useAppConfiguration, aa as useValueChangedDebugLog, ab as useJsonTreeTheme } from './tslib.es6-C73eoP_E.js';
4
+ import { S as isSymbol, U as toString, V as keys, W as getSymbols$1, X as stubArray, Y as arrayPush, Z as baseGetAllKeys, g as getTag, $ as getAllKeys, k as baseGet, c as baseIteratee, j as castPath, t as toKey, a0 as arrayMap$1, a1 as baseUniq, b as baseFlatten, a2 as useMustNotChange, a3 as useCurrentLayoutActions, a4 as useCurrentLayoutSelector, r as reportError, A as AppError, L as Logger, u as useGuaranteedContext, a5 as usePanelMosaicId, a6 as useSelectedPanels, a7 as PANEL_TITLE_CONFIG_KEY, a8 as noop$4, o as getPanelTypeFromId, M as useShallowMemo, T as TAB_PANEL_TYPE, J as filterMap, d as dist$2, a9 as useAppConfiguration, aa as useValueChangedDebugLog, ab as useJsonTreeTheme } from './tslib.es6-C73eoP_E.js';
5
5
  import { createStore, useStore } from 'zustand';
6
- import { g as generateUtilityClass, c as createAggregator, f as flatRest, b as baseSet, A as AnalyticsContext, P as PropTypes, E as ErrorDisplay, S as Stack$1, m as makeStyles$1, _ as _extends$1, W as WorkspaceContext, u as useAnalytics, a as AppEvent, L as LeftSidebarItemKeys, R as RightSidebarItemKeys, d as useTranslation, e as usePanelCatalog, h as EmptyState, i as isEmpty, j as PanelContext, k as PanelCatalogContext, l as usePanelStateStore, n as useDefaultPanelTitle, o as useWorkspaceStore, p as WorkspaceStoreSelectors, q as difference, r as usePanelContext, s as useMessagePipeline, v as v4, t as useHoverValue, w as useSetHoverValue, x as useClearHoverValue, y as useMessagePipelineGetter, z as usePanelSettingsTreeUpdate, B as PlayerCapabilities, C as assertNever, D as PlayerPresence, F as isEqual, G as isDesktopApp, H as createTheme, I as propTypesExports, J as DEFAULT_CAMERA_STATE$1 } from './index-MWcjCcp7.js';
6
+ import { g as generateUtilityClass, c as createAggregator, f as flatRest, b as baseSet, A as AnalyticsContext, P as PropTypes, E as ErrorDisplay, S as Stack$1, m as makeStyles$1, _ as _extends$1, W as WorkspaceContext, u as useAnalytics, a as AppEvent, L as LeftSidebarItemKeys, R as RightSidebarItemKeys, d as useTranslation, e as usePanelCatalog, h as EmptyState, i as isEmpty, j as PanelContext, k as PanelCatalogContext, l as usePanelStateStore, n as useDefaultPanelTitle, o as useWorkspaceStore, p as WorkspaceStoreSelectors, q as difference, r as usePanelContext, s as useMessagePipeline, v as v4, t as useHoverValue, w as useSetHoverValue, x as useClearHoverValue, y as useMessagePipelineGetter, z as usePanelSettingsTreeUpdate, B as PlayerCapabilities, C as assertNever, D as PlayerPresence, F as isEqual, G as isDesktopApp, H as createTheme, I as propTypesExports, J as DEFAULT_CAMERA_STATE$1 } from './index-xjxIYb7x.js';
7
7
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
8
8
  import { t as typescript } from './useMessageReducer-jNx5e6JW.js';
9
9
  import { g as getDefaultExportFromCjs, c as commonjsGlobal, a as getAugmentedNamespace } from './_commonjsHelpers-E-ZsRS8r.js';
@@ -10899,7 +10899,7 @@ function initRenderStateBuilder() {
10899
10899
 
10900
10900
  // Given that messagesByTopic should be in order by receiveTime, we need to
10901
10901
  // combine all of the messages into a single array and sorted by receive time.
10902
- forEachSortedArrays(topicsToPreloadForPanel.map(topic => block.messagesByTopic[topic] ?? []), (a, b) => dist$3.compare(a.receiveTime, b.receiveTime), messageEvent => {
10902
+ forEachSortedArrays(topicsToPreloadForPanel.map(topic => block.messagesByTopic[topic] ?? []), (a, b) => dist$2.compare(a.receiveTime, b.receiveTime), messageEvent => {
10903
10903
  // Message blocks may contain topics that we are not subscribed to so we
10904
10904
  // need to filter those out. We use unconvertedSubscriptionTopics to
10905
10905
  // determine if we should include the message event. Clients expect
@@ -10936,7 +10936,7 @@ function initRenderStateBuilder() {
10936
10936
  if (watchedFields.has("previewTime")) {
10937
10937
  const startTime = activeData?.startTime;
10938
10938
  if (startTime != undefined && hoverValue != undefined) {
10939
- const stamp = dist$3.toSec(startTime) + hoverValue.value;
10939
+ const stamp = dist$2.toSec(startTime) + hoverValue.value;
10940
10940
  if (stamp !== renderState.previewTime) {
10941
10941
  shouldRender = true;
10942
10942
  }
@@ -11212,7 +11212,7 @@ function PanelExtensionAdapter(props) {
11212
11212
  if (!isMounted()) {
11213
11213
  return;
11214
11214
  }
11215
- const seekTarget = typeof stamp === "object" ? stamp : dist$3.fromSec(stamp);
11215
+ const seekTarget = typeof stamp === "object" ? stamp : dist$2.fromSec(stamp);
11216
11216
  seekPlayback(seekTarget);
11217
11217
  } : undefined,
11218
11218
  dataSourceProfile,
@@ -11244,7 +11244,7 @@ function PanelExtensionAdapter(props) {
11244
11244
  if (!startTime) {
11245
11245
  return;
11246
11246
  }
11247
- const secondsFromStart = stamp - dist$3.toSec(startTime);
11247
+ const secondsFromStart = stamp - dist$2.toSec(startTime);
11248
11248
  setHoverValue({
11249
11249
  type: "PLAYBACK_SECONDS",
11250
11250
  componentId: "PanelExtensionAdatper",
@@ -12841,7 +12841,7 @@ class RenderableMarker extends Renderable {
12841
12841
  const hasLifetime = marker.lifetime.sec !== 0 || marker.lifetime.nsec !== 0;
12842
12842
  super(name, renderer, {
12843
12843
  receiveTime: receiveTime ?? 0n,
12844
- messageTime: dist$3.toNanoSec(marker.header.stamp),
12844
+ messageTime: dist$2.toNanoSec(marker.header.stamp),
12845
12845
  frameId: renderer.normalizeFrameId(marker.header.frame_id),
12846
12846
  pose: marker.pose,
12847
12847
  settingsPath: ["topics", topic],
@@ -12852,7 +12852,7 @@ class RenderableMarker extends Renderable {
12852
12852
  topic,
12853
12853
  marker,
12854
12854
  originalMarker: marker,
12855
- expiresIn: hasLifetime ? dist$3.toNanoSec(marker.lifetime) : undefined
12855
+ expiresIn: hasLifetime ? dist$2.toNanoSec(marker.lifetime) : undefined
12856
12856
  });
12857
12857
  }
12858
12858
  idFromMessage() {
@@ -12873,12 +12873,12 @@ class RenderableMarker extends Renderable {
12873
12873
  if (receiveTime != undefined) {
12874
12874
  this.userData.receiveTime = receiveTime;
12875
12875
  }
12876
- this.userData.messageTime = dist$3.toNanoSec(marker.header.stamp);
12876
+ this.userData.messageTime = dist$2.toNanoSec(marker.header.stamp);
12877
12877
  this.userData.frameId = this.renderer.normalizeFrameId(marker.header.frame_id);
12878
12878
  this.userData.pose = marker.pose;
12879
12879
  this.userData.marker = this.#renderMarker(marker);
12880
12880
  this.userData.originalMarker = marker;
12881
- this.userData.expiresIn = hasLifetime ? dist$3.toNanoSec(marker.lifetime) : undefined;
12881
+ this.userData.expiresIn = hasLifetime ? dist$2.toNanoSec(marker.lifetime) : undefined;
12882
12882
  }
12883
12883
 
12884
12884
  // Convert sRGB values to linear
@@ -16607,10 +16607,10 @@ class Cameras extends SceneExtension {
16607
16607
  #handleCameraInfo = messageEvent => {
16608
16608
  const topic = messageEvent.topic;
16609
16609
  const cameraInfo = normalizeCameraInfo(messageEvent.message);
16610
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
16610
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
16611
16611
  let renderable = this.renderables.get(topic);
16612
16612
  if (!renderable) {
16613
- const messageTime = dist$3.toNanoSec(cameraInfo.header.stamp);
16613
+ const messageTime = dist$2.toNanoSec(cameraInfo.header.stamp);
16614
16614
  const frameId = this.renderer.normalizeFrameId(cameraInfo.header.frame_id);
16615
16615
 
16616
16616
  // Set the initial settings from default values merged with any user settings
@@ -16646,7 +16646,7 @@ class Cameras extends SceneExtension {
16646
16646
  const settingsEqual = newSettings.color === prevSettings.color && newSettings.distance === prevSettings.distance && newSettings.planarProjectionFactor === prevSettings.planarProjectionFactor && newSettings.width === prevSettings.width;
16647
16647
  const topic = renderable.userData.topic;
16648
16648
  renderable.userData.receiveTime = receiveTime;
16649
- renderable.userData.messageTime = dist$3.toNanoSec(cameraInfo.header.stamp);
16649
+ renderable.userData.messageTime = dist$2.toNanoSec(cameraInfo.header.stamp);
16650
16650
  renderable.userData.frameId = this.renderer.normalizeFrameId(cameraInfo.header.frame_id);
16651
16651
  renderable.userData.settings = newSettings;
16652
16652
 
@@ -17311,7 +17311,7 @@ class FoxgloveGrid extends SceneExtension {
17311
17311
  #handleFoxgloveGrid = messageEvent => {
17312
17312
  const topic = messageEvent.topic;
17313
17313
  const foxgloveGrid = normalizeFoxgloveGrid(messageEvent.message);
17314
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
17314
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
17315
17315
  let renderable = this.renderables.get(topic);
17316
17316
  if (!this.#validateFoxgloveGrid(foxgloveGrid, messageEvent.topic)) {
17317
17317
  if (renderable) {
@@ -17365,7 +17365,7 @@ class FoxgloveGrid extends SceneExtension {
17365
17365
  // Create the renderable
17366
17366
  renderable = new FoxgloveGridRenderable(topic, this.renderer, {
17367
17367
  receiveTime,
17368
- messageTime: dist$3.toNanoSec(foxgloveGrid.timestamp),
17368
+ messageTime: dist$2.toNanoSec(foxgloveGrid.timestamp),
17369
17369
  frameId: this.renderer.normalizeFrameId(foxgloveGrid.frame_id),
17370
17370
  pose: foxgloveGrid.pose,
17371
17371
  settingsPath: ["topics", topic],
@@ -17432,7 +17432,7 @@ class FoxgloveGrid extends SceneExtension {
17432
17432
  renderable.userData.foxgloveGrid = foxgloveGrid;
17433
17433
  renderable.userData.pose = foxgloveGrid.pose;
17434
17434
  renderable.userData.receiveTime = receiveTime;
17435
- renderable.userData.messageTime = dist$3.toNanoSec(foxgloveGrid.timestamp);
17435
+ renderable.userData.messageTime = dist$2.toNanoSec(foxgloveGrid.timestamp);
17436
17436
  renderable.userData.frameId = this.renderer.normalizeFrameId(foxgloveGrid.frame_id);
17437
17437
  const {
17438
17438
  row_stride,
@@ -31073,7 +31073,7 @@ const WAITING_FOR_BOTH_MESSAGES_HUD_ID = "WAITING_FOR_BOTH_MESSAGES";
31073
31073
  const WAITING_FOR_CALIBRATION_HUD_ID = "WAITING_FOR_CALIBRATION";
31074
31074
  const WAITING_FOR_IMAGES_NOTICE_ID = "WAITING_FOR_IMAGES_NOTICE";
31075
31075
 
31076
- var dist$2 = {};
31076
+ var dist$1 = {};
31077
31077
 
31078
31078
  var primitive = {};
31079
31079
 
@@ -31458,7 +31458,7 @@ Object.defineProperty(awaited, "__esModule", { value: true });
31458
31458
  // Build-in types
31459
31459
  __exportStar(awaited, exports);
31460
31460
 
31461
- } (dist$2));
31461
+ } (dist$1));
31462
31462
 
31463
31463
  // This Source Code Form is subject to the terms of the Mozilla Public
31464
31464
  // License, v2.0. If a copy of the MPL was not distributed with this
@@ -31606,7 +31606,7 @@ class ImageRenderable extends Renderable {
31606
31606
  super.dispose();
31607
31607
  }
31608
31608
  updateHeaderInfo() {
31609
- dist$2.assert(this.userData.image, "updateHeaderInfo called without image");
31609
+ dist$1.assert(this.userData.image, "updateHeaderInfo called without image");
31610
31610
 
31611
31611
  // If there is camera info, the frameId comes from the camera info since the user may have
31612
31612
  // selected camera info with a different frame than our image frame.
@@ -31615,7 +31615,7 @@ class ImageRenderable extends Renderable {
31615
31615
  const image = this.userData.image;
31616
31616
  const rawFrameId = this.userData.cameraInfo?.header.frame_id ?? ("header" in image ? image.header.frame_id : image.frame_id);
31617
31617
  this.userData.frameId = typeof rawFrameId === "string" ? this.renderer.normalizeFrameId(rawFrameId) : rawFrameId;
31618
- this.userData.messageTime = dist$3.toNanoSec("header" in image ? image.header.stamp : image.timestamp);
31618
+ this.userData.messageTime = dist$2.toNanoSec("header" in image ? image.header.stamp : image.timestamp);
31619
31619
  }
31620
31620
  details() {
31621
31621
  return {
@@ -31744,7 +31744,7 @@ class ImageRenderable extends Renderable {
31744
31744
  this.#isUpdating = false;
31745
31745
  }
31746
31746
  #rebuildGeometry() {
31747
- dist$2.assert(this.userData.cameraModel, "Camera model must be set before geometry can be updated");
31747
+ dist$1.assert(this.userData.cameraModel, "Camera model must be set before geometry can be updated");
31748
31748
  // Dispose of the current geometry if the settings have changed
31749
31749
  this.userData.geometry?.dispose();
31750
31750
  this.userData.geometry = undefined;
@@ -31753,7 +31753,7 @@ class ImageRenderable extends Renderable {
31753
31753
  this.#meshNeedsUpdate = true;
31754
31754
  }
31755
31755
  #updateTexture() {
31756
- dist$2.assert(this.#decodedImage, "Decoded image must be set before texture can be updated or created");
31756
+ dist$1.assert(this.#decodedImage, "Decoded image must be set before texture can be updated or created");
31757
31757
  const decodedImage = this.#decodedImage;
31758
31758
  // Create or update the bitmap texture
31759
31759
  if (decodedImage instanceof ImageBitmap) {
@@ -31825,8 +31825,8 @@ class ImageRenderable extends Renderable {
31825
31825
  });
31826
31826
  }
31827
31827
  #updateMesh() {
31828
- dist$2.assert(this.userData.geometry, "Geometry must be set before mesh can be updated or created");
31829
- dist$2.assert(this.userData.material, "Material must be set before mesh can be updated or created");
31828
+ dist$1.assert(this.userData.geometry, "Geometry must be set before mesh can be updated or created");
31829
+ dist$1.assert(this.userData.material, "Material must be set before mesh can be updated or created");
31830
31830
  if (!this.userData.mesh) {
31831
31831
  this.userData.mesh = new Mesh(this.userData.geometry, this.userData.material);
31832
31832
  this.add(this.userData.mesh);
@@ -32212,750 +32212,6 @@ class ImageModeCamera extends PerspectiveCamera {
32212
32212
  }
32213
32213
  }
32214
32214
 
32215
- var dist$1 = {};
32216
-
32217
- var AVLTree$1 = {};
32218
-
32219
- var AVLNode = {};
32220
-
32221
- Object.defineProperty(AVLNode, "__esModule", { value: true });
32222
- AVLNode.printNodes = AVLNode.prevNode = AVLNode.nextNode = AVLNode.rotateRight = AVLNode.rotateLeft = void 0;
32223
- /**
32224
- * Single left rotation
32225
- */
32226
- function rotateLeft(node) {
32227
- const rightNode = node.right;
32228
- node.right = rightNode.left;
32229
- if (rightNode.left) {
32230
- rightNode.left.parent = node;
32231
- }
32232
- rightNode.parent = node.parent;
32233
- if (rightNode.parent) {
32234
- if (rightNode.parent.left === node) {
32235
- rightNode.parent.left = rightNode;
32236
- }
32237
- else {
32238
- rightNode.parent.right = rightNode;
32239
- }
32240
- }
32241
- node.parent = rightNode;
32242
- rightNode.left = node;
32243
- node.balanceFactor += 1;
32244
- if (rightNode.balanceFactor < 0) {
32245
- node.balanceFactor -= rightNode.balanceFactor;
32246
- }
32247
- rightNode.balanceFactor += 1;
32248
- if (node.balanceFactor > 0) {
32249
- rightNode.balanceFactor += node.balanceFactor;
32250
- }
32251
- return rightNode;
32252
- }
32253
- AVLNode.rotateLeft = rotateLeft;
32254
- /**
32255
- * Single right rotation
32256
- */
32257
- function rotateRight(node) {
32258
- const leftNode = node.left;
32259
- node.left = leftNode.right;
32260
- if (node.left) {
32261
- node.left.parent = node;
32262
- }
32263
- leftNode.parent = node.parent;
32264
- if (leftNode.parent) {
32265
- if (leftNode.parent.left === node) {
32266
- leftNode.parent.left = leftNode;
32267
- }
32268
- else {
32269
- leftNode.parent.right = leftNode;
32270
- }
32271
- }
32272
- node.parent = leftNode;
32273
- leftNode.right = node;
32274
- node.balanceFactor -= 1;
32275
- if (leftNode.balanceFactor > 0) {
32276
- node.balanceFactor -= leftNode.balanceFactor;
32277
- }
32278
- leftNode.balanceFactor -= 1;
32279
- if (node.balanceFactor < 0) {
32280
- leftNode.balanceFactor += node.balanceFactor;
32281
- }
32282
- return leftNode;
32283
- }
32284
- AVLNode.rotateRight = rotateRight;
32285
- /**
32286
- * Return the node immediately after the given node in the in-order traversal
32287
- */
32288
- function nextNode(node) {
32289
- let curNode = node;
32290
- let successor = node;
32291
- if (successor.right) {
32292
- successor = successor.right;
32293
- while (successor.left) {
32294
- successor = successor.left;
32295
- }
32296
- }
32297
- else {
32298
- successor = curNode.parent;
32299
- while (successor && successor.right === curNode) {
32300
- curNode = successor;
32301
- successor = successor.parent;
32302
- }
32303
- }
32304
- return successor;
32305
- }
32306
- AVLNode.nextNode = nextNode;
32307
- /**
32308
- * Return the node immediately before the given node in the in-order traversal
32309
- */
32310
- function prevNode(node) {
32311
- let curNode = node;
32312
- let predecessor = node;
32313
- if (predecessor.left) {
32314
- predecessor = predecessor.left;
32315
- while (predecessor.right) {
32316
- predecessor = predecessor.right;
32317
- }
32318
- }
32319
- else {
32320
- predecessor = curNode.parent;
32321
- while (predecessor && predecessor.left === curNode) {
32322
- curNode = predecessor;
32323
- predecessor = predecessor.parent;
32324
- }
32325
- }
32326
- return predecessor;
32327
- }
32328
- AVLNode.prevNode = prevNode;
32329
- /**
32330
- * Prints tree horizontally
32331
- */
32332
- function printNodes(root, printEntry = (n) => String(n[0])) {
32333
- const out = [];
32334
- row(root, "", true, (v) => out.push(v), printEntry);
32335
- return out.join("");
32336
- }
32337
- AVLNode.printNodes = printNodes;
32338
- /**
32339
- * Prints a level of the tree
32340
- */
32341
- function row(root, prefix, isTail, callback, printEntry) {
32342
- if (root) {
32343
- callback(`${prefix}${isTail ? "└── " : "├── "}${printEntry([root.key, root.value])}\n`);
32344
- const indent = prefix + (isTail ? " " : "│ ");
32345
- if (root.left) {
32346
- row(root.left, indent, false, callback, printEntry);
32347
- }
32348
- if (root.right) {
32349
- row(root.right, indent, true, callback, printEntry);
32350
- }
32351
- }
32352
- }
32353
-
32354
- Object.defineProperty(AVLTree$1, "__esModule", { value: true });
32355
- AVLTree$1.AVLTree = void 0;
32356
- const AVLNode_1 = AVLNode;
32357
- function DEFAULT_COMPARE(a, b) {
32358
- return a > b ? 1 : a < b ? -1 : 0;
32359
- }
32360
- /**
32361
- * Implements a Adelson-Velsky-Landis (AVL) tree, a self-balancing binary tree.
32362
- * Lookup, insertion, and deletion all take O(log n) time in both the average
32363
- * and worst cases, where n is the number of nodes in the tree prior to the
32364
- * operation.
32365
- */
32366
- class AVLTree {
32367
- constructor(comparator) {
32368
- this._comparator = comparator ?? DEFAULT_COMPARE;
32369
- this._size = 0;
32370
- }
32371
- /**
32372
- * Number of nodes
32373
- */
32374
- get size() {
32375
- return this._size;
32376
- }
32377
- /**
32378
- * Clear the tree
32379
- * @return {AVLTree}
32380
- */
32381
- clear() {
32382
- this._root = undefined;
32383
- this._size = 0;
32384
- return this;
32385
- }
32386
- /**
32387
- * Whether the tree contains a node with the given key
32388
- */
32389
- has(key) {
32390
- if (this._root) {
32391
- let node = this._root;
32392
- const comparator = this._comparator;
32393
- while (node) {
32394
- const cmp = comparator(key, node.key);
32395
- if (cmp === 0) {
32396
- return true;
32397
- }
32398
- else if (cmp < 0) {
32399
- node = node.left;
32400
- }
32401
- else {
32402
- node = node.right;
32403
- }
32404
- }
32405
- }
32406
- return false;
32407
- }
32408
- /**
32409
- * Returns all keys in order
32410
- */
32411
- *keys() {
32412
- let current = this._root;
32413
- const s = [];
32414
- let done = false;
32415
- while (!done) {
32416
- if (current) {
32417
- s.push(current);
32418
- current = current.left;
32419
- }
32420
- else {
32421
- if (s.length > 0) {
32422
- current = s.pop();
32423
- yield current.key;
32424
- current = current.right;
32425
- }
32426
- else {
32427
- done = true;
32428
- }
32429
- }
32430
- }
32431
- }
32432
- /**
32433
- * Returns all values in order
32434
- */
32435
- *values() {
32436
- let current = this._root;
32437
- const s = [];
32438
- let done = false;
32439
- while (!done) {
32440
- if (current) {
32441
- s.push(current);
32442
- current = current.left;
32443
- }
32444
- else {
32445
- if (s.length > 0) {
32446
- current = s.pop();
32447
- yield current.value;
32448
- current = current.right;
32449
- }
32450
- else {
32451
- done = true;
32452
- }
32453
- }
32454
- }
32455
- }
32456
- /**
32457
- * Returns all key/value pairs in order
32458
- */
32459
- *entries() {
32460
- let current = this._root;
32461
- const s = [];
32462
- let done = false;
32463
- while (!done) {
32464
- if (current) {
32465
- s.push(current);
32466
- current = current.left;
32467
- }
32468
- else {
32469
- if (s.length > 0) {
32470
- current = s.pop();
32471
- yield [current.key, current.value];
32472
- current = current.right;
32473
- }
32474
- else {
32475
- done = true;
32476
- }
32477
- }
32478
- }
32479
- }
32480
- /**
32481
- * Returns the entry with the minimum key
32482
- */
32483
- minEntry() {
32484
- let node = this._root;
32485
- if (!node) {
32486
- return undefined;
32487
- }
32488
- while (node.left) {
32489
- node = node.left;
32490
- }
32491
- return [node.key, node.value];
32492
- }
32493
- /**
32494
- * Returns the entry with the maximum key
32495
- */
32496
- maxEntry() {
32497
- let node = this._root;
32498
- if (!node) {
32499
- return undefined;
32500
- }
32501
- while (node.right) {
32502
- node = node.right;
32503
- }
32504
- return [node.key, node.value];
32505
- }
32506
- /**
32507
- * Minimum key
32508
- */
32509
- minKey() {
32510
- let node = this._root;
32511
- if (!node) {
32512
- return undefined;
32513
- }
32514
- while (node.left) {
32515
- node = node.left;
32516
- }
32517
- return node.key;
32518
- }
32519
- /**
32520
- * Maximum key
32521
- */
32522
- maxKey() {
32523
- let node = this._root;
32524
- if (!node) {
32525
- return undefined;
32526
- }
32527
- while (node.right) {
32528
- node = node.right;
32529
- }
32530
- return node.key;
32531
- }
32532
- /**
32533
- * Removes and returns the entry with smallest key
32534
- */
32535
- shift() {
32536
- let node = this._root;
32537
- let returnValue;
32538
- if (node) {
32539
- while (node.left) {
32540
- node = node.left;
32541
- }
32542
- returnValue = [node.key, node.value];
32543
- this.delete(node.key);
32544
- }
32545
- return returnValue;
32546
- }
32547
- /**
32548
- * Removes and returns the entry with largest key
32549
- */
32550
- pop() {
32551
- let node = this._root;
32552
- let returnValue;
32553
- if (node) {
32554
- while (node.right) {
32555
- node = node.right;
32556
- }
32557
- returnValue = [node.key, node.value];
32558
- this.delete(node.key);
32559
- }
32560
- return returnValue;
32561
- }
32562
- /**
32563
- * Search for an entry by key
32564
- */
32565
- get(key) {
32566
- const compare = this._comparator;
32567
- let node = this._root;
32568
- while (node) {
32569
- const cmp = compare(key, node.key);
32570
- if (cmp === 0) {
32571
- return node.value;
32572
- }
32573
- else if (cmp < 0) {
32574
- node = node.left;
32575
- }
32576
- else {
32577
- node = node.right;
32578
- }
32579
- }
32580
- return undefined;
32581
- }
32582
- /**
32583
- * Execute a callback for each key/value entry in order
32584
- */
32585
- forEach(callbackfn) {
32586
- let current = this._root;
32587
- const s = [];
32588
- let done = false;
32589
- while (!done) {
32590
- // Reach the left most Node of the current Node
32591
- if (current) {
32592
- // Place pointer to a tree node on the stack
32593
- // before traversing the node's left subtree
32594
- s.push(current);
32595
- current = current.left;
32596
- }
32597
- else {
32598
- // BackTrack from the empty subtree and visit the Node
32599
- // at the top of the stack; however, if the stack is
32600
- // empty you are done
32601
- if (s.length > 0) {
32602
- current = s.pop();
32603
- callbackfn(current.value, current.key, this);
32604
- // We have visited the node and its left
32605
- // subtree. Now, it's right subtree's turn
32606
- current = current.right;
32607
- }
32608
- else {
32609
- done = true;
32610
- }
32611
- }
32612
- }
32613
- return this;
32614
- }
32615
- /**
32616
- * Walk key range from `low` to `high` in order
32617
- */
32618
- range(low, high, callbackfn) {
32619
- const Q = [];
32620
- const compare = this._comparator;
32621
- let node = this._root;
32622
- while (Q.length !== 0 || node) {
32623
- if (node) {
32624
- Q.push(node);
32625
- if (compare(node.key, low) <= 0) {
32626
- node = undefined;
32627
- }
32628
- else {
32629
- node = node.left;
32630
- }
32631
- }
32632
- else {
32633
- node = Q.pop();
32634
- if (compare(node.key, high) > 0) {
32635
- break;
32636
- }
32637
- else if (compare(node.key, low) >= 0) {
32638
- callbackfn(node.value, node.key, this);
32639
- }
32640
- node = node.right;
32641
- }
32642
- }
32643
- return this;
32644
- }
32645
- findLessThan(key) {
32646
- let node = this.findGreaterThanOrEqualNode(key);
32647
- if (!node) {
32648
- // Check if there is any key less than `key`
32649
- node = this._root;
32650
- if (!node) {
32651
- return undefined;
32652
- }
32653
- while (node.right) {
32654
- node = node.right;
32655
- }
32656
- return this._comparator(node.key, key) < 0 ? [node.key, node.value] : undefined;
32657
- }
32658
- // Return the node just before the first node with key greater than or equal to `key`, if any
32659
- const lt = (0, AVLNode_1.prevNode)(node);
32660
- return lt ? [lt.key, lt.value] : undefined;
32661
- }
32662
- findLessThanOrEqual(key) {
32663
- let node = this.findGreaterThanOrEqualNode(key);
32664
- if (!node) {
32665
- // Check if there is any key less than `key`
32666
- node = this._root;
32667
- if (!node) {
32668
- return undefined;
32669
- }
32670
- while (node.right) {
32671
- node = node.right;
32672
- }
32673
- return this._comparator(node.key, key) < 0 ? [node.key, node.value] : undefined;
32674
- }
32675
- // Check if the found node is an exact match
32676
- if (this._comparator(node.key, key) === 0) {
32677
- return [node.key, node.value];
32678
- }
32679
- // Return the node just before the first node with key greater than or equal to `key`, if any
32680
- const lt = (0, AVLNode_1.prevNode)(node);
32681
- return lt ? [lt.key, lt.value] : undefined;
32682
- }
32683
- findGreaterThan(key) {
32684
- const Q = [];
32685
- const compare = this._comparator;
32686
- let node = this._root;
32687
- while (Q.length !== 0 || node) {
32688
- if (node) {
32689
- Q.push(node);
32690
- if (compare(node.key, key) <= 0) {
32691
- node = undefined;
32692
- }
32693
- else {
32694
- node = node.left;
32695
- }
32696
- }
32697
- else {
32698
- node = Q.pop();
32699
- if (compare(node.key, key) > 0) {
32700
- return [node.key, node.value];
32701
- }
32702
- node = node.right;
32703
- }
32704
- }
32705
- return undefined;
32706
- }
32707
- findGreaterThanOrEqual(key) {
32708
- const node = this.findGreaterThanOrEqualNode(key);
32709
- return node ? [node.key, node.value] : undefined;
32710
- }
32711
- findGreaterThanOrEqualNode(key) {
32712
- const Q = [];
32713
- const compare = this._comparator;
32714
- let node = this._root;
32715
- while (Q.length !== 0 || node) {
32716
- if (node) {
32717
- Q.push(node);
32718
- if (compare(node.key, key) <= 0) {
32719
- node = undefined;
32720
- }
32721
- else {
32722
- node = node.left;
32723
- }
32724
- }
32725
- else {
32726
- node = Q.pop();
32727
- if (compare(node.key, key) >= 0) {
32728
- return node;
32729
- }
32730
- node = node.right;
32731
- }
32732
- }
32733
- return undefined;
32734
- }
32735
- /**
32736
- * Insert a new key/value pair into the tree or update an existing entry
32737
- */
32738
- set(key, value) {
32739
- if (!this._root) {
32740
- this._root = {
32741
- parent: undefined,
32742
- left: undefined,
32743
- right: undefined,
32744
- balanceFactor: 0,
32745
- key,
32746
- value,
32747
- };
32748
- this._size++;
32749
- return this;
32750
- }
32751
- const compare = this._comparator;
32752
- let node = this._root;
32753
- let parent;
32754
- let cmp = 0;
32755
- while (node) {
32756
- cmp = compare(key, node.key);
32757
- parent = node;
32758
- if (cmp === 0) {
32759
- node.value = value;
32760
- return this;
32761
- }
32762
- else if (cmp < 0) {
32763
- node = node.left;
32764
- }
32765
- else {
32766
- node = node.right;
32767
- }
32768
- }
32769
- if (parent == undefined) {
32770
- throw new Error(`failed to find parent node for insert`);
32771
- }
32772
- const newNode = {
32773
- left: undefined,
32774
- right: undefined,
32775
- balanceFactor: 0,
32776
- parent,
32777
- key,
32778
- value,
32779
- };
32780
- if (cmp <= 0) {
32781
- parent.left = newNode;
32782
- }
32783
- else {
32784
- parent.right = newNode;
32785
- }
32786
- let newRoot;
32787
- while (parent) {
32788
- cmp = compare(parent.key, key);
32789
- if (cmp < 0) {
32790
- parent.balanceFactor -= 1;
32791
- }
32792
- else {
32793
- parent.balanceFactor += 1;
32794
- }
32795
- if (parent.balanceFactor === 0) {
32796
- break;
32797
- }
32798
- else if (parent.balanceFactor < -1) {
32799
- if (parent.right?.balanceFactor === 1) {
32800
- (0, AVLNode_1.rotateRight)(parent.right);
32801
- }
32802
- newRoot = (0, AVLNode_1.rotateLeft)(parent);
32803
- if (parent === this._root) {
32804
- this._root = newRoot;
32805
- }
32806
- break;
32807
- }
32808
- else if (parent.balanceFactor > 1) {
32809
- if (parent.left?.balanceFactor === -1) {
32810
- (0, AVLNode_1.rotateLeft)(parent.left);
32811
- }
32812
- newRoot = (0, AVLNode_1.rotateRight)(parent);
32813
- if (parent === this._root) {
32814
- this._root = newRoot;
32815
- }
32816
- break;
32817
- }
32818
- parent = parent.parent;
32819
- }
32820
- this._size++;
32821
- return this;
32822
- }
32823
- /**
32824
- * Finds the first matching node by key and removes it
32825
- */
32826
- delete(key) {
32827
- if (!this._root) {
32828
- return false;
32829
- }
32830
- let node = this._root;
32831
- const compare = this._comparator;
32832
- let cmp = 0;
32833
- while (node) {
32834
- cmp = compare(key, node.key);
32835
- if (cmp === 0) {
32836
- break;
32837
- }
32838
- else if (cmp < 0) {
32839
- node = node.left;
32840
- }
32841
- else {
32842
- node = node.right;
32843
- }
32844
- }
32845
- if (!node) {
32846
- return false;
32847
- }
32848
- let max, min;
32849
- if (node.left) {
32850
- max = node.left;
32851
- while (max.left || max.right) {
32852
- while (max.right) {
32853
- max = max.right;
32854
- }
32855
- node.key = max.key;
32856
- node.value = max.value;
32857
- if (max.left) {
32858
- node = max;
32859
- max = max.left;
32860
- }
32861
- }
32862
- node.key = max.key;
32863
- node.value = max.value;
32864
- node = max;
32865
- }
32866
- if (node.right) {
32867
- min = node.right;
32868
- while (min.left || min.right) {
32869
- while (min.left) {
32870
- min = min.left;
32871
- }
32872
- node.key = min.key;
32873
- node.value = min.value;
32874
- if (min.right) {
32875
- node = min;
32876
- min = min.right;
32877
- }
32878
- }
32879
- node.key = min.key;
32880
- node.value = min.value;
32881
- node = min;
32882
- }
32883
- let parent = node.parent;
32884
- let pp = node;
32885
- let newRoot;
32886
- while (parent) {
32887
- if (parent.left === pp) {
32888
- parent.balanceFactor -= 1;
32889
- }
32890
- else {
32891
- parent.balanceFactor += 1;
32892
- }
32893
- if (parent.balanceFactor < -1) {
32894
- if (parent.right?.balanceFactor === 1) {
32895
- (0, AVLNode_1.rotateRight)(parent.right);
32896
- }
32897
- newRoot = (0, AVLNode_1.rotateLeft)(parent);
32898
- if (parent === this._root) {
32899
- this._root = newRoot;
32900
- }
32901
- parent = newRoot;
32902
- }
32903
- else if (parent.balanceFactor > 1) {
32904
- if (parent.left?.balanceFactor === -1) {
32905
- (0, AVLNode_1.rotateLeft)(parent.left);
32906
- }
32907
- newRoot = (0, AVLNode_1.rotateRight)(parent);
32908
- if (parent === this._root) {
32909
- this._root = newRoot;
32910
- }
32911
- parent = newRoot;
32912
- }
32913
- const parentBalanceFactor = parent?.balanceFactor;
32914
- if (parentBalanceFactor === -1 || parentBalanceFactor === 1) {
32915
- break;
32916
- }
32917
- pp = parent;
32918
- parent = parent?.parent;
32919
- }
32920
- if (node.parent) {
32921
- if (node.parent.left === node) {
32922
- node.parent.left = undefined;
32923
- }
32924
- else {
32925
- node.parent.right = undefined;
32926
- }
32927
- }
32928
- if (node === this._root) {
32929
- this._root = undefined;
32930
- }
32931
- this._size--;
32932
- return true;
32933
- }
32934
- /**
32935
- * Returns a string representation of the tree - primitive horizontal print-out
32936
- */
32937
- toString(printEntry) {
32938
- return (0, AVLNode_1.printNodes)(this._root, printEntry).trimEnd();
32939
- }
32940
- }
32941
- AVLTree$1.AVLTree = AVLTree;
32942
-
32943
- (function (exports) {
32944
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
32945
- if (k2 === undefined) k2 = k;
32946
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
32947
- }) : (function(o, m, k, k2) {
32948
- if (k2 === undefined) k2 = k;
32949
- o[k2] = m[k];
32950
- }));
32951
- var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
32952
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
32953
- };
32954
- Object.defineProperty(exports, "__esModule", { value: true });
32955
- __exportStar(AVLTree$1, exports);
32956
-
32957
- } (dist$1));
32958
-
32959
32215
  // This Source Code Form is subject to the terms of the Mozilla Public
32960
32216
  // License, v2.0. If a copy of the MPL was not distributed with this
32961
32217
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
@@ -33119,7 +32375,7 @@ function normalizeFoxgloveImageAnnotations(message) {
33119
32375
  return annotations;
33120
32376
  }
33121
32377
  function normalizeTimestamp(stamp) {
33122
- return typeof stamp === "bigint" ? dist$3.fromNanoSec(stamp) : stamp;
32378
+ return typeof stamp === "bigint" ? dist$2.fromNanoSec(stamp) : stamp;
33123
32379
  }
33124
32380
  function normalizeRosImageMarkerArray(message) {
33125
32381
  return filterMap(message.markers, (marker, i) => normalizeRosImageMarker(marker, ["markers", i]));
@@ -33275,8 +32531,6 @@ class EventMetricsManager {
33275
32531
  const fps = 1_000 / (totalInterval / (topicMetrics.length - 1));
33276
32532
  return Math.round(fps);
33277
32533
  }
33278
-
33279
- // Remove events which are older than CLEANUP_EVENTS_OLDER_THAN_MS
33280
32534
  removeOldEvents(topic) {
33281
32535
  const now = performance.now();
33282
32536
  if (this.metrics[topic]) {
@@ -33288,26 +32542,6 @@ class EventMetricsManager {
33288
32542
  }
33289
32543
  }
33290
32544
  }
33291
- const TIMESTAMP_ERROR_NS = 100_000_000n; // 0.1 seconds
33292
-
33293
- function timeEqualWithError(left, right) {
33294
- // Convert both timestamps to nanoseconds
33295
- const leftNs = dist$3.toNanoSec({
33296
- sec: left.sec,
33297
- nsec: left.nsec
33298
- });
33299
- const rightNs = dist$3.toNanoSec({
33300
- sec: right.sec,
33301
- nsec: right.nsec
33302
- });
33303
-
33304
- // Get absolute difference while staying in bigint
33305
- const diffNs = leftNs > rightNs ? leftNs - rightNs : rightNs - leftNs;
33306
-
33307
- // Convert TIMESTAMP_ERROR_NS to bigint for comparison
33308
- return diffNs <= TIMESTAMP_ERROR_NS;
33309
- }
33310
-
33311
32545
  // Have constants for the HUD items so that they don't need to be recreated and GCed every message
33312
32546
  const WAITING_FOR_BOTH_HUD_ITEM = {
33313
32547
  id: WAITING_FOR_BOTH_MESSAGES_HUD_ID,
@@ -33353,9 +32587,6 @@ class MessageHandler {
33353
32587
  /** internal state of last received messages */
33354
32588
  #lastReceivedMessages;
33355
32589
 
33356
- /** sorted tree that holds state for synchronized messages. Used to find most recent synchronized set of image and annotations. */
33357
- #tree;
33358
-
33359
32590
  /** listener functions that are called when the state changes. */
33360
32591
  #listeners = [];
33361
32592
 
@@ -33364,13 +32595,14 @@ class MessageHandler {
33364
32595
  * This can cause synchronized annotations to never resolve if the source does not have the annotation topic
33365
32596
  * with no indication to the user that the annotation is not available.
33366
32597
  */
33367
- #availableAnnotationTopics;
32598
+
33368
32599
  #onAnnotationsFpsUpdate;
33369
32600
  #annotationsFpsMetrics = new EventMetricsManager();
33370
32601
  #annotationsFpsRefreshInterval = null;
33371
- #averageAnnotationsFps = 0;
33372
- #ghostAnnotation = undefined;
33373
-
32602
+ annotationsMap = new Map();
32603
+ ghostAnnotationsMap = new Map();
32604
+ syncToleranceMs = 150;
32605
+ ghostTimeoutMs = 1000;
33374
32606
  /**
33375
32607
  *
33376
32608
  * @param config - subset of ImageMode settings required for message handling
@@ -33381,11 +32613,9 @@ class MessageHandler {
33381
32613
  this.#lastReceivedMessages = {
33382
32614
  annotationsByTopic: new Map()
33383
32615
  };
33384
- this.#tree = new dist$1.AVLTree(dist$3.compare);
33385
- this.#availableAnnotationTopics = new Set();
32616
+ this.availableAnnotationTopics = new Set();
33386
32617
  this.#annotationsFpsRefreshInterval = setInterval(() => {
33387
32618
  const newAverageAnnotationsFps = this.#annotationsFpsMetrics.calculate(ANNOTATIONS_METRICS_KEY);
33388
- this.#averageAnnotationsFps = newAverageAnnotationsFps;
33389
32619
  if (this.#onAnnotationsFpsUpdate) {
33390
32620
  this.#onAnnotationsFpsUpdate(newAverageAnnotationsFps);
33391
32621
  }
@@ -33418,125 +32648,62 @@ class MessageHandler {
33418
32648
  this.handleImage(messageEvent, normalizeCompressedImage(messageEvent.message));
33419
32649
  };
33420
32650
  handleImage(message, image) {
33421
- const normalizedImageMessage = {
32651
+ const normalized = {
33422
32652
  ...message,
33423
32653
  message: image
33424
32654
  };
33425
- this.#lastReceivedMessages.image = normalizedImageMessage;
33426
- if (this.#config.synchronize !== true) {
33427
- this.#emitState();
33428
- return;
33429
- }
33430
- // Update the image at the stamp time
33431
- this.#addImageToTree(normalizedImageMessage);
32655
+ this.lastImage = normalized;
33432
32656
  this.#emitState();
33433
32657
  }
33434
- #normalizeTimestamp(stamp) {
33435
- if (this.#tree.has(stamp)) {
33436
- return [stamp];
33437
- }
33438
- const matches = [];
33439
- for (const [time] of this.#tree.entries()) {
33440
- if (timeEqualWithError(stamp, time)) {
33441
- matches.push(time);
33442
- }
33443
- }
33444
- return matches.length > 0 ? matches : [stamp];
33445
- }
33446
- #addImageToTree(message) {
33447
- const timestamps = this.#normalizeTimestamp(message.receiveTime);
33448
- for (const stamp of timestamps) {
33449
- const item = this.#tree.get(stamp);
33450
- if (item) {
33451
- item.image = message;
33452
- } else {
33453
- this.#tree.set(stamp, {
33454
- image: message,
33455
- annotationsByTopic: new Map()
33456
- });
33457
- }
33458
- }
33459
- }
33460
- #visibleAnnotations() {
33461
- const visibleAnnotations = new Set();
33462
- for (const [topic, settings] of Object.entries(this.#config.annotations ?? {})) {
33463
- if (settings?.visible === true && this.#availableAnnotationTopics.has(topic)) {
33464
- visibleAnnotations.add(topic);
33465
- }
33466
- }
33467
- return visibleAnnotations;
33468
- }
33469
32658
  handleCameraInfo = message => {
33470
32659
  const cameraInfo = normalizeCameraInfo(message.message);
33471
32660
  this.#lastReceivedMessages.cameraInfo = cameraInfo;
33472
32661
  this.#emitState();
33473
32662
  };
33474
32663
  handleAnnotations = messageEvent => {
33475
- const annotations = normalizeAnnotations(messageEvent.message, messageEvent.schemaName);
33476
-
33477
- // We only want to log Annotations event if the array is not empty
33478
- if (annotations.length > 0) {
32664
+ const list = normalizeAnnotations(messageEvent.message, messageEvent.schemaName);
32665
+ const timestamp = performance.now();
32666
+ if (list.length > 0 && messageEvent.topic) {
33479
32667
  this.#annotationsFpsMetrics.registerEvent(ANNOTATIONS_METRICS_KEY);
33480
- }
33481
- const {
33482
- topic
33483
- } = messageEvent;
33484
- if (this.#config.synchronize !== true) {
33485
- this.#lastReceivedMessages.annotationsByTopic.set(topic, {
33486
- originalMessage: messageEvent,
33487
- annotations
32668
+ this.annotationsMap.set(messageEvent.topic, {
32669
+ annotation: {
32670
+ originalMessage: messageEvent,
32671
+ annotations: list
32672
+ },
32673
+ timestamp: timestamp
33488
32674
  });
32675
+ this.ghostAnnotationsMap.set(messageEvent.topic, {
32676
+ annotation: {
32677
+ originalMessage: messageEvent,
32678
+ annotations: list
32679
+ },
32680
+ timestamp: timestamp
32681
+ });
32682
+ }
32683
+ if (this.#config.synchronize === false) {
33489
32684
  this.#emitState();
33490
32685
  return;
33491
32686
  }
33492
- const groups = new Map();
33493
-
33494
- // Group annotation by timestamp
33495
- for (const annotation of annotations) {
33496
- const key = dist$3.toNanoSec(annotation.stamp);
33497
- const arr = groups.get(key);
33498
- if (arr) {
33499
- arr.push(annotation);
33500
- continue;
33501
- }
33502
- groups.set(key, [annotation]);
33503
- }
33504
- for (const [stampNsec, group] of groups) {
33505
- const timestamps = this.#normalizeTimestamp(dist$3.fromNanoSec(stampNsec));
33506
- for (const stamp of timestamps) {
33507
- let item = this.#tree.get(stamp);
33508
- if (!item) {
33509
- item = {
33510
- image: undefined,
33511
- annotationsByTopic: new Map()
33512
- };
33513
- this.#tree.set(stamp, item);
32687
+ if (list.length === 0 && messageEvent.topic) {
32688
+ for (const [topic, data] of this.ghostAnnotationsMap.entries()) {
32689
+ if (Math.abs(timestamp - data.timestamp) <= this.syncToleranceMs) {
32690
+ this.annotationsMap.set(topic, {
32691
+ annotation: data.annotation,
32692
+ timestamp
32693
+ });
33514
32694
  }
33515
- item.annotationsByTopic.set(topic, {
33516
- originalMessage: messageEvent,
33517
- annotations: group
33518
- });
33519
32695
  }
32696
+ this.#emitState();
32697
+ return;
33520
32698
  }
33521
-
33522
- //console.error("Tree after adding annotations", [...this.#tree.entries()]);
33523
-
33524
- this.#emitState();
33525
32699
  };
33526
32700
  setConfig(newConfig) {
33527
32701
  let changed = false;
33528
32702
  if (newConfig.synchronize != undefined && newConfig.synchronize !== this.#config.synchronize) {
33529
32703
  this.#oldRenderState = undefined;
33530
- this.#tree.clear();
33531
- if (newConfig.synchronize && this.#lastReceivedMessages.image != undefined) {
33532
- this.#addImageToTree(this.#lastReceivedMessages.image);
33533
- }
33534
32704
  changed = true;
33535
32705
  }
33536
32706
  if ("imageTopic" in newConfig && this.#config.imageTopic !== newConfig.imageTopic) {
33537
- for (const item of this.#tree.values()) {
33538
- item.image = undefined;
33539
- }
33540
32707
  this.#lastReceivedMessages.image = undefined;
33541
32708
  changed = true;
33542
32709
  }
@@ -33557,14 +32724,6 @@ class MessageHandler {
33557
32724
  changed = true;
33558
32725
  }
33559
32726
  }
33560
- for (const syncEntry of this.#tree.values()) {
33561
- for (const topic of syncEntry.annotationsByTopic.keys()) {
33562
- if (!newVisibleTopics.has(topic)) {
33563
- syncEntry.annotationsByTopic.delete(topic);
33564
- changed = true;
33565
- }
33566
- }
33567
- }
33568
32727
  }
33569
32728
  this.#config = newConfig;
33570
32729
  if (changed) {
@@ -33572,14 +32731,13 @@ class MessageHandler {
33572
32731
  }
33573
32732
  }
33574
32733
  setAvailableAnnotationTopics(topicNames) {
33575
- this.#availableAnnotationTopics = new Set(topicNames);
32734
+ this.availableAnnotationTopics = new Set(topicNames);
33576
32735
  this.#emitState();
33577
32736
  }
33578
32737
  clear() {
33579
32738
  this.#lastReceivedMessages = {
33580
32739
  annotationsByTopic: new Map()
33581
32740
  };
33582
- this.#tree.clear();
33583
32741
  this.#oldRenderState = undefined;
33584
32742
  this.#emitState();
33585
32743
  }
@@ -33603,137 +32761,31 @@ class MessageHandler {
33603
32761
  const waitingForCalibration = calibrationRequired && state.cameraInfo == undefined;
33604
32762
  const waitingForBoth = waitingForImage && waitingForCalibration;
33605
32763
  this.#hud.displayIfTrue(waitingForBoth, WAITING_FOR_BOTH_HUD_ITEM);
33606
-
33607
- // don't show other empty states when waiting for both to reduce noise
33608
32764
  this.#hud.displayIfTrue(waitingForCalibration && !waitingForBoth, WAITING_FOR_CALIBRATION_HUD_ITEM);
33609
32765
  this.#hud.displayIfTrue(waitingForImage && !calibrationRequired && !waitingForBoth, WAITING_FOR_IMAGE_EMPTY_HUD_ITEM);
33610
32766
  this.#hud.displayIfTrue(waitingForImage && calibrationRequired, WAITING_FOR_IMAGE_NOTICE_HUD_ITEM);
33611
32767
  }
33612
32768
  #getRenderState() {
33613
- if (this.#config.synchronize !== true) {
32769
+ if (!this.lastImage) {
33614
32770
  return {
33615
- ...this.#lastReceivedMessages
32771
+ annotationsByTopic: new Map(),
32772
+ presentAnnotationTopics: undefined,
32773
+ missingAnnotationTopics: undefined
33616
32774
  };
33617
32775
  }
33618
- const result = findSynchronizedSetAndRemoveOlderItems(this.#tree, this.#visibleAnnotations());
33619
-
33620
- // If there were matching annotations we want to update Ghost annotation to last known annotations
33621
- const now = performance.now();
33622
- if (result.found && result.messages.annotationsByTopic.size > 0) {
33623
- //console.warn("Registering ghost annotation", result.messages.annotationsByTopic);
33624
- this.#ghostAnnotation = {
33625
- annotations: result.messages.annotationsByTopic,
33626
- createdAtMs: now
33627
- };
33628
- }
33629
- const renderState = result.found ? {
33630
- cameraInfo: this.#lastReceivedMessages.cameraInfo,
33631
- image: result.messages.image,
33632
- annotationsByTopic: result.messages.annotationsByTopic
33633
- } : {
33634
- cameraInfo: this.#lastReceivedMessages.cameraInfo,
33635
- presentAnnotationTopics: result.presentAnnotationTopics,
33636
- missingAnnotationTopics: result.missingAnnotationTopics
32776
+ const state = {
32777
+ image: this.lastImage,
32778
+ annotationsByTopic: new Map()
33637
32779
  };
33638
- const ghostTimeMs = annoationsFpsToGhostTimeMs(this.#averageAnnotationsFps);
33639
- if (result.found && [...result.messages.annotationsByTopic.values()].length === 0 && this.#ghostAnnotation && now - this.#ghostAnnotation.createdAtMs < ghostTimeMs) {
33640
- //console.warn(
33641
- // `No annotations found for this frame but still in ghost period (diff = ${
33642
- // now - this.#ghostAnnotation.createdAtMs
33643
- // } ms, ghostTimeMs = ${ghostTimeMs} ms) - returning ghost annotation`,
33644
- //);
33645
- renderState.annotationsByTopic = this.#ghostAnnotation.annotations;
33646
- }
33647
- return renderState;
33648
- }
33649
- }
33650
- const ACCEPT_LAST_INDEX = 5;
33651
-
33652
- /**
33653
- * Find the newest entry where we have everything synchronized and remove all older entries from tree.
33654
- * @param tree - AVL tree that stores a [image?, annotations?] in sorted order by timestamp.
33655
- * @param visibleAnnotations - visible annotation topics
33656
- * @returns - the newest synchronized item with all active annotations and image, or set of missing annotations if synchronization failed
33657
- */
33658
- function findSynchronizedSetAndRemoveOlderItems(tree, visibleAnnotations) {
33659
- let lastEntry = undefined;
33660
- let lastAnnotationsOrphanEntry = undefined;
33661
- let validEntry = undefined;
33662
- let imageEntries = 0;
33663
-
33664
- // Calculate number of entries that have images
33665
- for (const entry of tree.entries()) {
33666
- if (entry[1].image) {
33667
- imageEntries += 1;
33668
- lastEntry = entry;
33669
- } else if (entry[1].annotationsByTopic.size > 0) {
33670
- // If there are annotations we want to use the last entry with annotations
33671
- lastAnnotationsOrphanEntry = entry;
33672
- }
33673
- }
33674
-
33675
- // If there are no annotations active we use the newest entry with image
33676
- if (visibleAnnotations.size === 0) {
33677
- validEntry = lastEntry;
33678
- } else {
33679
- // Else we try to find first
33680
- let acceptableIndex = imageEntries - ACCEPT_LAST_INDEX + 1;
33681
- // console.warn("acceptableIndex", acceptableIndex);
33682
-
33683
- if (acceptableIndex < 0) {
33684
- acceptableIndex = 0;
33685
- }
33686
- let index = 0;
33687
-
33688
- // Go throught the tree in order and find first entry that has image and all annotations
33689
- for (const entry of tree.entries()) {
33690
- // Skip entries with no images
33691
- if (!entry[1].image) {
33692
- continue;
33693
- }
33694
-
33695
- // When we encounter the first acceptable index we use that as the entry
33696
- if (index === acceptableIndex) {
33697
- validEntry = entry;
33698
- } else if (index > acceptableIndex) {
33699
- // Any bigger index with all annotations which is newer than already used index is the better option
33700
- const hasAllAnnotations = Array.from(visibleAnnotations).every(topic => entry[1].annotationsByTopic.has(topic));
33701
- if (hasAllAnnotations) {
33702
- validEntry = entry;
33703
- }
32780
+ const imageTimestamp = this.lastImage.receiveTime ? Number(this.lastImage.receiveTime) : performance.now();
32781
+ const now = performance.now();
32782
+ for (const [topic, data] of this.annotationsMap.entries()) {
32783
+ if (Math.abs(imageTimestamp - data.timestamp) <= this.syncToleranceMs || now - data.timestamp < this.ghostTimeoutMs) {
32784
+ state.annotationsByTopic.set(topic, data.annotation);
33704
32785
  }
33705
- index += 1;
33706
32786
  }
32787
+ return state;
33707
32788
  }
33708
- if (validEntry) {
33709
- if (validEntry[1].annotationsByTopic.size === 0 && lastAnnotationsOrphanEntry) {
33710
- // console.warn("Using annotationsByTopic from lastAnnotationsEntry orphan");
33711
- validEntry[1].annotationsByTopic = lastAnnotationsOrphanEntry[1].annotationsByTopic;
33712
- }
33713
-
33714
- // Drop older messages
33715
- let minKey = tree.minKey();
33716
- while (minKey && dist$3.isLessThan(minKey, validEntry[0])) {
33717
- tree.shift();
33718
- minKey = tree.minKey();
33719
- }
33720
- return {
33721
- found: true,
33722
- messages: validEntry[1]
33723
- };
33724
- }
33725
- return {
33726
- found: false,
33727
- missingAnnotationTopics: [],
33728
- presentAnnotationTopics: []
33729
- };
33730
- }
33731
- function annoationsFpsToGhostTimeMs(annotationsFps) {
33732
- if (annotationsFps === undefined || annotationsFps === 0 || !Number.isFinite(annotationsFps)) {
33733
- return 1_000; // If there is no annotations fps, we want set the ghost time to 1 second
33734
- }
33735
- const period = 1 / annotationsFps;
33736
- return period * 1_000 * 2; // To miliseconds times two
33737
32789
  }
33738
32790
 
33739
32791
  // This Source Code Form is subject to the terms of the Mozilla Public
@@ -35419,7 +34471,7 @@ class ImageMode extends SceneExtension {
35419
34471
  };
35420
34472
  #handleImageChange = (messageEvent, image) => {
35421
34473
  const topic = messageEvent.topic;
35422
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
34474
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
35423
34475
  const frameId = "header" in image ? image.header.frame_id : image.frame_id;
35424
34476
  if ("width" in image) {
35425
34477
  this.#imageSize.width = image.width;
@@ -35497,7 +34549,7 @@ class ImageMode extends SceneExtension {
35497
34549
  };
35498
34550
  renderable = this.initRenderable(topicName, {
35499
34551
  receiveTime,
35500
- messageTime: image ? dist$3.toNanoSec("header" in image ? image.header.stamp : image.timestamp) : 0n,
34552
+ messageTime: image ? dist$2.toNanoSec("header" in image ? image.header.stamp : image.timestamp) : 0n,
35501
34553
  frameId: this.renderer.normalizeFrameId(frameId),
35502
34554
  pose: makePose(),
35503
34555
  settingsPath: IMAGE_TOPIC_PATH,
@@ -35985,7 +35037,7 @@ class Images extends SceneExtension {
35985
35037
  };
35986
35038
  handleImage = (messageEvent, image) => {
35987
35039
  const imageTopic = messageEvent.topic;
35988
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
35040
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
35989
35041
  const frameId = "header" in image ? image.header.frame_id : image.frame_id;
35990
35042
  const renderable = this.#getImageRenderable(imageTopic, receiveTime, image, frameId);
35991
35043
  renderable.userData.receiveTime = receiveTime;
@@ -36019,7 +35071,7 @@ class Images extends SceneExtension {
36019
35071
  });
36020
35072
  this.updateSettingsTree();
36021
35073
  }
36022
- dist$2.assert(settings.cameraInfoTopic != undefined);
35074
+ dist$1.assert(settings.cameraInfoTopic != undefined);
36023
35075
  this.#cameraInfoToImageTopics.set(settings.cameraInfoTopic, imageTopic);
36024
35076
 
36025
35077
  // Look up the camera info for our renderable
@@ -36092,7 +35144,7 @@ class Images extends SceneExtension {
36092
35144
  const userSettings = this.renderer.config.topics[imageTopic];
36093
35145
  renderable = this.initRenderable(imageTopic, {
36094
35146
  receiveTime,
36095
- messageTime: image ? dist$3.toNanoSec("header" in image ? image.header.stamp : image.timestamp) : 0n,
35147
+ messageTime: image ? dist$2.toNanoSec("header" in image ? image.header.stamp : image.timestamp) : 0n,
36096
35148
  frameId: this.renderer.normalizeFrameId(frameId),
36097
35149
  pose: makePose(),
36098
35150
  settingsPath: ["topics", imageTopic],
@@ -36593,7 +35645,7 @@ class LaserScanHistoryRenderable extends Renderable {
36593
35645
  super.dispose();
36594
35646
  }
36595
35647
  updateLaserScan(laserScan, originalMessage, settings, receiveTime) {
36596
- const messageTime = dist$3.toNanoSec(laserScan.timestamp);
35648
+ const messageTime = dist$2.toNanoSec(laserScan.timestamp);
36597
35649
  this.userData.receiveTime = receiveTime;
36598
35650
  this.userData.messageTime = messageTime;
36599
35651
  this.userData.frameId = this.renderer.normalizeFrameId(laserScan.frame_id);
@@ -36821,7 +35873,7 @@ class LaserScans extends SceneExtension {
36821
35873
  #handleLaserScan = messageEvent => {
36822
35874
  const topic = messageEvent.topic;
36823
35875
  const laserScan = "header" in messageEvent.message ? normalizeRosLaserScan(messageEvent.message) : normalizeFoxgloveLaserScan(messageEvent.message);
36824
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
35876
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
36825
35877
  let renderable = this.renderables.get(topic);
36826
35878
  if (!renderable) {
36827
35879
  // Set the initial settings from default values merged with any user settings
@@ -36846,7 +35898,7 @@ class LaserScans extends SceneExtension {
36846
35898
  draft.topics[topic] = updatedUserSettings;
36847
35899
  });
36848
35900
  }
36849
- const messageTime = dist$3.toNanoSec(laserScan.timestamp);
35901
+ const messageTime = dist$2.toNanoSec(laserScan.timestamp);
36850
35902
  renderable = new LaserScanHistoryRenderable(topic, this.renderer, {
36851
35903
  receiveTime,
36852
35904
  messageTime,
@@ -37482,7 +36534,7 @@ class Markers extends SceneExtension {
37482
36534
  #handleMarkerArray = messageEvent => {
37483
36535
  const topic = messageEvent.topic;
37484
36536
  const markerArray = messageEvent.message;
37485
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
36537
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
37486
36538
  for (const markerMsg of markerArray.markers ?? []) {
37487
36539
  if (markerMsg) {
37488
36540
  const marker = normalizeMarker(markerMsg);
@@ -37493,7 +36545,7 @@ class Markers extends SceneExtension {
37493
36545
  #handleMarker = messageEvent => {
37494
36546
  const topic = messageEvent.topic;
37495
36547
  const marker = normalizeMarker(messageEvent.message);
37496
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
36548
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
37497
36549
  this.#addMarker(topic, marker, receiveTime);
37498
36550
  };
37499
36551
  #addMarker(topic, marker, receiveTime) {
@@ -37528,7 +36580,7 @@ class Markers extends SceneExtension {
37528
36580
  const userSettings = this.renderer.config.topics[topic];
37529
36581
  topicMarkers = new TopicMarkers(topic, this.renderer, {
37530
36582
  receiveTime,
37531
- messageTime: dist$3.toNanoSec(marker.header.stamp),
36583
+ messageTime: dist$2.toNanoSec(marker.header.stamp),
37532
36584
  frameId: this.renderer.normalizeFrameId(marker.header.frame_id),
37533
36585
  pose: makePose(),
37534
36586
  settingsPath: ["topics", topic],
@@ -37759,7 +36811,7 @@ class OccupancyGrids extends SceneExtension {
37759
36811
  #handleOccupancyGrid = messageEvent => {
37760
36812
  const topic = messageEvent.topic;
37761
36813
  const occupancyGrid = normalizeOccupancyGrid(messageEvent.message);
37762
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
36814
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
37763
36815
  let renderable = this.renderables.get(topic);
37764
36816
  if (!renderable) {
37765
36817
  // Set the initial settings from default values merged with any user settings
@@ -37777,7 +36829,7 @@ class OccupancyGrids extends SceneExtension {
37777
36829
  // Create the renderable
37778
36830
  renderable = new OccupancyGridRenderable(topic, this.renderer, {
37779
36831
  receiveTime,
37780
- messageTime: dist$3.toNanoSec(occupancyGrid.header.stamp),
36832
+ messageTime: dist$2.toNanoSec(occupancyGrid.header.stamp),
37781
36833
  frameId: this.renderer.normalizeFrameId(occupancyGrid.header.frame_id),
37782
36834
  pose: occupancyGrid.info.origin,
37783
36835
  settingsPath: ["topics", topic],
@@ -37799,7 +36851,7 @@ class OccupancyGrids extends SceneExtension {
37799
36851
  renderable.userData.occupancyGrid = occupancyGrid;
37800
36852
  renderable.userData.pose = occupancyGrid.info.origin;
37801
36853
  renderable.userData.receiveTime = receiveTime;
37802
- renderable.userData.messageTime = dist$3.toNanoSec(occupancyGrid.header.stamp);
36854
+ renderable.userData.messageTime = dist$2.toNanoSec(occupancyGrid.header.stamp);
37803
36855
  renderable.userData.frameId = this.renderer.normalizeFrameId(occupancyGrid.header.frame_id);
37804
36856
  const size = occupancyGrid.info.width * occupancyGrid.info.height;
37805
36857
  if (occupancyGrid.data.length !== size) {
@@ -38257,7 +37309,7 @@ class PointCloudHistoryRenderable extends Renderable {
38257
37309
  super.dispose();
38258
37310
  }
38259
37311
  updatePointCloud(pointCloud, originalMessage, settings, receiveTime) {
38260
- const messageTime = dist$3.toNanoSec(getTimestamp(pointCloud));
37312
+ const messageTime = dist$2.toNanoSec(getTimestamp(pointCloud));
38261
37313
  this.userData.receiveTime = receiveTime;
38262
37314
  this.userData.messageTime = messageTime;
38263
37315
  this.userData.frameId = this.renderer.normalizeFrameId(getFrameId(pointCloud));
@@ -38344,7 +37396,7 @@ class PointCloudHistoryRenderable extends Renderable {
38344
37396
  }
38345
37397
  }
38346
37398
  pushHistory(pointCloud, originalMessage, settings, receiveTime) {
38347
- const messageTime = dist$3.toNanoSec(getTimestamp(pointCloud));
37399
+ const messageTime = dist$2.toNanoSec(getTimestamp(pointCloud));
38348
37400
  const pointsHistory = this.#pointsHistory;
38349
37401
  const stixelsHistory = this.#stixelsHistory;
38350
37402
  const material = this.userData.material;
@@ -38750,8 +37802,8 @@ class PointClouds extends SceneExtension {
38750
37802
  schemaName
38751
37803
  } = messageEvent;
38752
37804
  const pointCloud = normalizePointCloud(messageEvent.message);
38753
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
38754
- const messageTime = dist$3.toNanoSec(pointCloud.timestamp);
37805
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
37806
+ const messageTime = dist$2.toNanoSec(pointCloud.timestamp);
38755
37807
  const frameId = pointCloud.frame_id;
38756
37808
  this.#handlePointCloud(topic, schemaName, pointCloud, receiveTime, messageTime, messageEvent.message, frameId);
38757
37809
  };
@@ -38761,8 +37813,8 @@ class PointClouds extends SceneExtension {
38761
37813
  schemaName
38762
37814
  } = messageEvent;
38763
37815
  const pointCloud = normalizePointCloud2(messageEvent.message);
38764
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
38765
- const messageTime = dist$3.toNanoSec(pointCloud.header.stamp);
37816
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
37817
+ const messageTime = dist$2.toNanoSec(pointCloud.header.stamp);
38766
37818
  const frameId = pointCloud.header.frame_id;
38767
37819
  this.#handlePointCloud(topic, schemaName, pointCloud, receiveTime, messageTime, messageEvent.message, frameId);
38768
37820
  };
@@ -39215,7 +38267,7 @@ class Polygons extends SceneExtension {
39215
38267
  #handlePolygon = messageEvent => {
39216
38268
  const topic = messageEvent.topic;
39217
38269
  const polygonStamped = normalizePolygonStamped(messageEvent.message);
39218
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
38270
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
39219
38271
  let renderable = this.renderables.get(topic);
39220
38272
  if (!renderable) {
39221
38273
  // Set the initial settings from default values merged with any user settings
@@ -39226,7 +38278,7 @@ class Polygons extends SceneExtension {
39226
38278
  };
39227
38279
  renderable = new PolygonRenderable(topic, this.renderer, {
39228
38280
  receiveTime,
39229
- messageTime: dist$3.toNanoSec(polygonStamped.header.stamp),
38281
+ messageTime: dist$2.toNanoSec(polygonStamped.header.stamp),
39230
38282
  frameId: this.renderer.normalizeFrameId(polygonStamped.header.frame_id),
39231
38283
  pose: makePose(),
39232
38284
  settingsPath: ["topics", topic],
@@ -39243,7 +38295,7 @@ class Polygons extends SceneExtension {
39243
38295
  #updatePolygonRenderable(renderable, polygonStamped, receiveTime) {
39244
38296
  const settings = renderable.userData.settings;
39245
38297
  renderable.userData.receiveTime = receiveTime;
39246
- renderable.userData.messageTime = dist$3.toNanoSec(polygonStamped.header.stamp);
38298
+ renderable.userData.messageTime = dist$2.toNanoSec(polygonStamped.header.stamp);
39247
38299
  renderable.userData.frameId = this.renderer.normalizeFrameId(polygonStamped.header.frame_id);
39248
38300
  renderable.userData.polygonStamped = polygonStamped;
39249
38301
  const topic = renderable.userData.topic;
@@ -39659,17 +38711,17 @@ class Poses extends SceneExtension {
39659
38711
  };
39660
38712
  #handlePoseStamped = messageEvent => {
39661
38713
  const poseMessage = normalizePoseStamped(messageEvent.message);
39662
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
38714
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
39663
38715
  this.#addPose(messageEvent.topic, poseMessage, messageEvent.message, receiveTime);
39664
38716
  };
39665
38717
  #handlePoseInFrame = messageEvent => {
39666
38718
  const poseMessage = normalizePoseInFrameToPoseStamped(messageEvent.message);
39667
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
38719
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
39668
38720
  this.#addPose(messageEvent.topic, poseMessage, messageEvent.message, receiveTime);
39669
38721
  };
39670
38722
  #handlePoseWithCovariance = messageEvent => {
39671
38723
  const poseMessage = normalizePoseWithCovarianceStamped(messageEvent.message);
39672
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
38724
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
39673
38725
  this.#addPose(messageEvent.topic, poseMessage, messageEvent.message, receiveTime);
39674
38726
  };
39675
38727
  #addPose(topic, poseMessage, originalMessage, receiveTime) {
@@ -39683,7 +38735,7 @@ class Poses extends SceneExtension {
39683
38735
  };
39684
38736
  renderable = new PoseRenderable(topic, this.renderer, {
39685
38737
  receiveTime,
39686
- messageTime: dist$3.toNanoSec(poseMessage.header.stamp),
38738
+ messageTime: dist$2.toNanoSec(poseMessage.header.stamp),
39687
38739
  frameId: this.renderer.normalizeFrameId(poseMessage.header.frame_id),
39688
38740
  pose: makePose(),
39689
38741
  settingsPath: ["topics", topic],
@@ -39702,7 +38754,7 @@ class Poses extends SceneExtension {
39702
38754
  }
39703
38755
  #updatePoseRenderable(renderable, poseMessage, originalMessage, receiveTime, settings) {
39704
38756
  renderable.userData.receiveTime = receiveTime;
39705
- renderable.userData.messageTime = dist$3.toNanoSec(poseMessage.header.stamp);
38757
+ renderable.userData.messageTime = dist$2.toNanoSec(poseMessage.header.stamp);
39706
38758
  renderable.userData.frameId = this.renderer.normalizeFrameId(poseMessage.header.frame_id);
39707
38759
  renderable.userData.poseMessage = poseMessage;
39708
38760
  renderable.userData.originalMessage = originalMessage;
@@ -40057,7 +39109,7 @@ class PoseArrays extends SceneExtension {
40057
39109
  };
40058
39110
  #handlePoseArray = messageEvent => {
40059
39111
  const poseArrayMessage = normalizePoseArray(messageEvent.message);
40060
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
39112
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
40061
39113
  this.#addPoseArray(messageEvent.topic, poseArrayMessage, messageEvent.message, receiveTime);
40062
39114
  };
40063
39115
  #handleNavPath = messageEvent => {
@@ -40065,12 +39117,12 @@ class PoseArrays extends SceneExtension {
40065
39117
  return;
40066
39118
  }
40067
39119
  const poseArrayMessage = normalizeNavPathToPoseArray(messageEvent.message);
40068
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
39120
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
40069
39121
  this.#addPoseArray(messageEvent.topic, poseArrayMessage, messageEvent.message, receiveTime);
40070
39122
  };
40071
39123
  #handlePosesInFrame = messageEvent => {
40072
39124
  const poseArrayMessage = normalizePosesInFrameToPoseArray(messageEvent.message);
40073
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
39125
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
40074
39126
  this.#addPoseArray(messageEvent.topic, poseArrayMessage, messageEvent.message, receiveTime);
40075
39127
  };
40076
39128
  #addPoseArray(topic, poseArrayMessage, originalMessage, receiveTime) {
@@ -40088,7 +39140,7 @@ class PoseArrays extends SceneExtension {
40088
39140
  };
40089
39141
  renderable = new PoseArrayRenderable(topic, this.renderer, {
40090
39142
  receiveTime,
40091
- messageTime: dist$3.toNanoSec(poseArrayMessage.header.stamp),
39143
+ messageTime: dist$2.toNanoSec(poseArrayMessage.header.stamp),
40092
39144
  frameId: this.renderer.normalizeFrameId(poseArrayMessage.header.frame_id),
40093
39145
  pose: makePose(),
40094
39146
  settingsPath: ["topics", topic],
@@ -40163,7 +39215,7 @@ class PoseArrays extends SceneExtension {
40163
39215
  }
40164
39216
  #updatePoseArrayRenderable(renderable, poseArrayMessage, originalMessage, receiveTime, settings) {
40165
39217
  renderable.userData.receiveTime = receiveTime;
40166
- renderable.userData.messageTime = dist$3.toNanoSec(poseArrayMessage.header.stamp);
39218
+ renderable.userData.messageTime = dist$2.toNanoSec(poseArrayMessage.header.stamp);
40167
39219
  renderable.userData.frameId = this.renderer.normalizeFrameId(poseArrayMessage.header.frame_id);
40168
39220
  renderable.userData.poseArrayMessage = poseArrayMessage;
40169
39221
  renderable.userData.originalMessage = originalMessage;
@@ -40515,7 +39567,7 @@ class TopicEntities extends Renderable {
40515
39567
  break;
40516
39568
  }
40517
39569
  const frameId = this.renderer.normalizeFrameId(entity.frame_id);
40518
- const srcTime = entity.frame_locked ? currentTime : dist$3.toNanoSec(entity.timestamp);
39570
+ const srcTime = entity.frame_locked ? currentTime : dist$2.toNanoSec(entity.timestamp);
40519
39571
  const updated = updatePose(renderable, this.renderer.transformTree, renderFrameId, fixedFrameId, frameId, currentTime, srcTime);
40520
39572
  renderable.visible = updated;
40521
39573
  const topic = this.userData.topic;
@@ -40842,7 +39894,7 @@ class RenderableArrows extends RenderablePrimitive {
40842
39894
  update(topic, entity, settings, receiveTime) {
40843
39895
  super.update(topic, entity, settings, receiveTime);
40844
39896
  if (entity) {
40845
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
39897
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
40846
39898
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
40847
39899
  this.#updateMesh(entity.arrows);
40848
39900
  this.#headOutline.visible = settings.showOutlines ?? true;
@@ -40998,7 +40050,7 @@ class RenderableCubes extends RenderablePrimitive {
40998
40050
  update(topic, entity, settings, receiveTime) {
40999
40051
  super.update(topic, entity, settings, receiveTime);
41000
40052
  if (entity) {
41001
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
40053
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
41002
40054
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
41003
40055
  this.#updateMesh(entity.cubes);
41004
40056
  this.#outline.visible = settings.showOutlines ?? true;
@@ -41158,7 +40210,7 @@ class RenderableCylinders extends RenderablePrimitive {
41158
40210
  update(topic, entity, settings, receiveTime) {
41159
40211
  super.update(topic, entity, settings, receiveTime);
41160
40212
  if (entity) {
41161
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
40213
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
41162
40214
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
41163
40215
  this.#updateMesh(entity.cylinders);
41164
40216
  this.#outline.visible = settings.showOutlines ?? true;
@@ -41275,7 +40327,7 @@ class RenderableLines extends RenderablePrimitive {
41275
40327
  update(topic, entity, settings, receiveTime) {
41276
40328
  super.update(topic, entity, settings, receiveTime);
41277
40329
  if (entity) {
41278
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
40330
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
41279
40331
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
41280
40332
  this.#updateLines(entity.lines);
41281
40333
  }
@@ -41371,8 +40423,8 @@ class LinePrimitiveRenderable extends Object3D {
41371
40423
  this.userData.pickingMaterial = this.#pickingMaterial;
41372
40424
  this.add(this.#line);
41373
40425
  }
41374
- dist$2.assert(this.#positionBuffer, "Position buffer must be initialized");
41375
- dist$2.assert(this.#geometry, "Geometry must be initialized");
40426
+ dist$1.assert(this.#positionBuffer, "Position buffer must be initialized");
40427
+ dist$1.assert(this.#geometry, "Geometry must be initialized");
41376
40428
 
41377
40429
  // Set an explicit instance count, because three.js ignores attribute offsets when
41378
40430
  // automatically computing the instance count (and results differ across browsers because they
@@ -41393,7 +40445,7 @@ class LinePrimitiveRenderable extends Object3D {
41393
40445
  if (this.#colorChanged || this.#primitiveChanged) {
41394
40446
  const singleColor = this.#color ? stringToRgba(tempRgba$4, this.#color) : this.#primitive.colors.length === 0 ? this.#primitive.color : undefined;
41395
40447
  if (singleColor == undefined) {
41396
- dist$2.assert(this.#geometry, "Line Group geometry must exist");
40448
+ dist$1.assert(this.#geometry, "Line Group geometry must exist");
41397
40449
  this.#material.color.setRGB(1, 1, 1);
41398
40450
  const necessaryColorBufferSize = numVertices * 4;
41399
40451
  if (this.#colorBuffer == undefined || this.#colorBuffer.length < necessaryColorBufferSize) {
@@ -41445,7 +40497,7 @@ class LinePrimitiveRenderable extends Object3D {
41445
40497
  }
41446
40498
  function serializePositions(positionsOut, primitive) {
41447
40499
  let i = 0;
41448
- dist$2.assert(positionsOut.length >= primitive.points.length * 3, `positionsOut must have a length (${positionsOut.length}) >= to primitive.points.length (${primitive.points.length}) * 3`);
40500
+ dist$1.assert(positionsOut.length >= primitive.points.length * 3, `positionsOut must have a length (${positionsOut.length}) >= to primitive.points.length (${primitive.points.length}) * 3`);
41449
40501
  for (const {
41450
40502
  x,
41451
40503
  y,
@@ -41462,7 +40514,7 @@ function serializePositions(positionsOut, primitive) {
41462
40514
  }
41463
40515
  function serializePositionsWithIndices(positionsOut, primitive) {
41464
40516
  const indices = primitive.indices;
41465
- dist$2.assert(positionsOut.length >= primitive.indices.length * 3, `positionsOut must have a length (${positionsOut.length}) >= to primitive.indices.length (${primitive.indices.length}) * 3`);
40517
+ dist$1.assert(positionsOut.length >= primitive.indices.length * 3, `positionsOut must have a length (${positionsOut.length}) >= to primitive.indices.length (${primitive.indices.length}) * 3`);
41466
40518
  let i = 0;
41467
40519
  for (const idx of indices) {
41468
40520
  const {
@@ -41480,8 +40532,8 @@ function serializePositionsWithIndices(positionsOut, primitive) {
41480
40532
  }
41481
40533
  }
41482
40534
  function serializeColors(colorsOut, primitive) {
41483
- dist$2.assert(colorsOut.length >= primitive.colors.length * 4, `colorsOut buffer must have a length (${colorsOut.length}) >= to the primitive.colors.length (${primitive.colors.length}) * 4`);
41484
- dist$2.assert(primitive.colors.length > 0, "invariant: expected not to be using vertex colors");
40535
+ dist$1.assert(colorsOut.length >= primitive.colors.length * 4, `colorsOut buffer must have a length (${colorsOut.length}) >= to the primitive.colors.length (${primitive.colors.length}) * 4`);
40536
+ dist$1.assert(primitive.colors.length > 0, "invariant: expected not to be using vertex colors");
41485
40537
  let i = 0;
41486
40538
  for (const {
41487
40539
  r,
@@ -41501,9 +40553,9 @@ function serializeColors(colorsOut, primitive) {
41501
40553
  }
41502
40554
  function serializeColorsWithIndices(colorsOut, primitive) {
41503
40555
  const indices = primitive.indices;
41504
- dist$2.assert(indices.length > 0, "Indices must have length");
41505
- dist$2.assert(colorsOut.length >= indices.length * 4, `colorsOut buffer must have a length (${colorsOut.length}) >= to primitive.indices.length (${primitive.indices.length}) * 4`);
41506
- dist$2.assert(primitive.colors.length > 0, "Invariant: expected not to be using vertex colors");
40556
+ dist$1.assert(indices.length > 0, "Indices must have length");
40557
+ dist$1.assert(colorsOut.length >= indices.length * 4, `colorsOut buffer must have a length (${colorsOut.length}) >= to primitive.indices.length (${primitive.indices.length}) * 4`);
40558
+ dist$1.assert(primitive.colors.length > 0, "Invariant: expected not to be using vertex colors");
41507
40559
  let i = 0;
41508
40560
  for (const idx of indices) {
41509
40561
  const {
@@ -41938,7 +40990,7 @@ class RenderableModels extends RenderablePrimitive {
41938
40990
  update(topic, entity, settings, receiveTime) {
41939
40991
  super.update(topic, entity, settings, receiveTime);
41940
40992
  if (entity) {
41941
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
40993
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
41942
40994
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
41943
40995
  this.#updateModels(entity.models);
41944
40996
  }
@@ -42106,7 +41158,7 @@ class RenderableSpheres extends RenderablePrimitive {
42106
41158
  update(topic, entity, settings, receiveTime) {
42107
41159
  super.update(topic, entity, settings, receiveTime);
42108
41160
  if (entity) {
42109
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
41161
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
42110
41162
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
42111
41163
  this.#updateMesh(entity.spheres);
42112
41164
  }
@@ -42187,7 +41239,7 @@ class RenderableTexts extends RenderablePrimitive {
42187
41239
  update(topic, entity, settings, receiveTime) {
42188
41240
  super.update(topic, entity, settings, receiveTime);
42189
41241
  if (entity) {
42190
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
41242
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
42191
41243
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
42192
41244
  this.#updateTexts(entity.texts);
42193
41245
  }
@@ -42363,7 +41415,7 @@ class RenderableTriangles extends RenderablePrimitive {
42363
41415
  update(topic, entity, settings, receiveTime) {
42364
41416
  super.update(topic, entity, settings, receiveTime);
42365
41417
  if (entity) {
42366
- const lifetimeNs = dist$3.toNanoSec(entity.lifetime);
41418
+ const lifetimeNs = dist$2.toNanoSec(entity.lifetime);
42367
41419
  this.userData.expiresAt = lifetimeNs === 0n ? undefined : receiveTime + lifetimeNs;
42368
41420
  this.#updateTriangleMeshes(entity.triangles);
42369
41421
  }
@@ -42561,7 +41613,7 @@ class FoxgloveSceneEntities extends SceneExtension {
42561
41613
  for (const entityMsg of sceneUpdates.entities ?? []) {
42562
41614
  if (entityMsg) {
42563
41615
  const entity = normalizeSceneEntity(entityMsg);
42564
- this.#getTopicEntities(topic).addOrUpdateEntity(entity, dist$3.toNanoSec(messageEvent.receiveTime));
41616
+ this.#getTopicEntities(topic).addOrUpdateEntity(entity, dist$2.toNanoSec(messageEvent.receiveTime));
42565
41617
  }
42566
41618
  }
42567
41619
  };
@@ -46535,7 +45587,7 @@ class Urdfs extends SceneExtension {
46535
45587
  const msg = messageEvent.message;
46536
45588
  const names = msg.name ?? [];
46537
45589
  const positions = msg.position ?? [];
46538
- const timestamp = dist$3.toNanoSec(messageEvent.receiveTime);
45590
+ const timestamp = dist$2.toNanoSec(messageEvent.receiveTime);
46539
45591
  for (let i = 0; i < names.length; i++) {
46540
45592
  const name = names[i];
46541
45593
  const position = positions[i] ?? 0;
@@ -53454,7 +52506,7 @@ class VelodyneCloudConverter {
53454
52506
  if (model == undefined) {
53455
52507
  return undefined;
53456
52508
  }
53457
- const stamp = dist$3.toSec(scan.header.stamp);
52509
+ const stamp = dist$2.toSec(scan.header.stamp);
53458
52510
  const maxPoints = dist.RawPacket.MAX_POINTS_PER_PACKET * scan.packets.length;
53459
52511
  const cloud = new dist.PointCloud({
53460
52512
  stamp,
@@ -53462,7 +52514,7 @@ class VelodyneCloudConverter {
53462
52514
  });
53463
52515
  const transformer = this.getTransformer(model);
53464
52516
  for (const packet of scan.packets) {
53465
- transformer.unpack(new dist.RawPacket(packet.data), stamp, dist$3.toSec(packet.stamp), cloud);
52517
+ transformer.unpack(new dist.RawPacket(packet.data), stamp, dist$2.toSec(packet.stamp), cloud);
53466
52518
  }
53467
52519
  cloud.trim();
53468
52520
  if (cloud.width === 0 || cloud.height === 0) {
@@ -53587,7 +52639,7 @@ class VelodyneScans extends SceneExtension {
53587
52639
  const {
53588
52640
  topic
53589
52641
  } = messageEvent;
53590
- const receiveTime = dist$3.toNanoSec(messageEvent.receiveTime);
52642
+ const receiveTime = dist$2.toNanoSec(messageEvent.receiveTime);
53591
52643
  const pointCloud = this.#velodyneCloudConverter.decode(messageEvent.message);
53592
52644
  if (!pointCloud) {
53593
52645
  return;
@@ -53630,7 +52682,7 @@ class VelodyneScans extends SceneExtension {
53630
52682
  const pickingMaterial = createPickingMaterial$1(settings);
53631
52683
  const instancePickingMaterial = createInstancePickingMaterial(settings);
53632
52684
  const stixelMaterial = createStixelMaterial(settings);
53633
- const messageTime = dist$3.toNanoSec(pointCloud.timestamp);
52685
+ const messageTime = dist$2.toNanoSec(pointCloud.timestamp);
53634
52686
  renderable = new PointCloudHistoryRenderable(topic, this.renderer, {
53635
52687
  receiveTime,
53636
52688
  messageTime,
@@ -56912,7 +55964,7 @@ class Picker {
56912
55964
  return (this.#pixelBuffer[0] << 24) + (this.#pixelBuffer[1] << 16) + (this.#pixelBuffer[2] << 8) + this.#pixelBuffer[3];
56913
55965
  }
56914
55966
  #updateCameraForPickAndGetPickCoordsInView(x, y, options) {
56915
- dist$2.assert(this.#camera, "camera must be set before updating for pick");
55967
+ dist$1.assert(this.#camera, "camera must be set before updating for pick");
56916
55968
  const w = this.#gl.domElement.width;
56917
55969
  const h = this.#gl.domElement.height;
56918
55970
  const pixelRatio = this.#gl.getPixelRatio();
@@ -56940,7 +55992,7 @@ class Picker {
56940
55992
  }
56941
55993
  }
56942
55994
  #resetCameraFromPick(options) {
56943
- dist$2.assert(this.#camera, "camera must be set before resetting from pick");
55995
+ dist$1.assert(this.#camera, "camera must be set before resetting from pick");
56944
55996
  if (options.disableSetViewOffset !== true) {
56945
55997
  this.#camera.clearViewOffset();
56946
55998
  }
@@ -72793,14 +71845,14 @@ function formatDate(stamp, timezone) {
72793
71845
  console.error("Times are not allowed to be negative");
72794
71846
  return "(invalid negative time)";
72795
71847
  }
72796
- return moment$1.tz(dist$3.toDate(stamp), timezone ?? moment$1.tz.guess()).format("YYYY-MM-DD");
71848
+ return moment$1.tz(dist$2.toDate(stamp), timezone ?? moment$1.tz.guess()).format("YYYY-MM-DD");
72797
71849
  }
72798
71850
  function formatTime(stamp, timezone) {
72799
71851
  if (stamp.sec < 0 || stamp.nsec < 0) {
72800
71852
  console.error("Times are not allowed to be negative");
72801
71853
  return "(invalid negative time)";
72802
71854
  }
72803
- return moment$1.tz(dist$3.toDate(stamp), timezone ?? moment$1.tz.guess()).format("h:mm:ss.SSS A z");
71855
+ return moment$1.tz(dist$2.toDate(stamp), timezone ?? moment$1.tz.guess()).format("h:mm:ss.SSS A z");
72804
71856
  }
72805
71857
  function formatDuration(stamp) {
72806
71858
  return moment$1.duration(Math.round(stamp.sec * 1000 + stamp.nsec / 1e6)).format("h:mm:ss.SSS", {
@@ -75016,7 +74068,7 @@ class Renderer extends EventEmitter {
75016
74068
  if (!allFrames || allFrames.length === 0) {
75017
74069
  return false;
75018
74070
  }
75019
- const currentTime = dist$3.fromNanoSec(this.currentTime);
74071
+ const currentTime = dist$2.fromNanoSec(this.currentTime);
75020
74072
 
75021
74073
  /**
75022
74074
  * Assumptions about allFrames needed by allFramesCursor:
@@ -75045,7 +74097,7 @@ class Renderer extends EventEmitter {
75045
74097
  cursor++;
75046
74098
  message = allFrames[cursor];
75047
74099
  // read messages until we reach the current time
75048
- if (dist$3.isLessThan(currentTime, message.receiveTime)) {
74100
+ if (dist$2.isLessThan(currentTime, message.receiveTime)) {
75049
74101
  cursorTimeReached = currentTime;
75050
74102
  // reset cursor to last read message index
75051
74103
  cursor--;
@@ -75168,7 +74220,7 @@ class Renderer extends EventEmitter {
75168
74220
  * prevents the 3D aspects of the scene from being rendered from an insufficient camera info.
75169
74221
  */
75170
74222
  enableImageOnlySubscriptionMode = () => {
75171
- dist$2.assert(this.#imageModeExtension, "Image mode extension should be defined when calling enable Image only mode");
74223
+ dist$1.assert(this.#imageModeExtension, "Image mode extension should be defined when calling enable Image only mode");
75172
74224
  this.clear({
75173
74225
  clearTransforms: true,
75174
74226
  resetAllFramesCursor: true,
@@ -75421,7 +74473,7 @@ class Renderer extends EventEmitter {
75421
74473
  const parentId = transform.parent_frame_id;
75422
74474
  const childId = transform.child_frame_id;
75423
74475
  try {
75424
- const stamp = dist$3.toNanoSec(transform.timestamp);
74476
+ const stamp = dist$2.toNanoSec(transform.timestamp);
75425
74477
  const t = transform.translation;
75426
74478
  const q = transform.rotation;
75427
74479
  this.addTransform(parentId, childId, stamp, t, q);
@@ -75433,7 +74485,7 @@ class Renderer extends EventEmitter {
75433
74485
  const normalizedParentId = this.normalizeFrameId(tf.header.frame_id);
75434
74486
  const normalizedChildId = this.normalizeFrameId(tf.child_frame_id);
75435
74487
  try {
75436
- const stamp = dist$3.toNanoSec(tf.header.stamp);
74488
+ const stamp = dist$2.toNanoSec(tf.header.stamp);
75437
74489
  const t = tf.transform.translation;
75438
74490
  const q = tf.transform.rotation;
75439
74491
  this.addTransform(normalizedParentId, normalizedChildId, stamp, t, q);
@@ -79027,7 +78079,7 @@ const ros2galacticDefinitions = {
79027
78079
  const PublishRos1Datatypes = new Map(["geometry_msgs/Point", "geometry_msgs/PointStamped", "geometry_msgs/Pose", "geometry_msgs/PoseStamped", "geometry_msgs/PoseWithCovariance", "geometry_msgs/PoseWithCovarianceStamped", "geometry_msgs/Quaternion", "std_msgs/Header"].map(type => [type, ros1Definitions[type]]));
79028
78080
  const PublishRos2Datatypes = new Map(["geometry_msgs/Point", "geometry_msgs/PointStamped", "geometry_msgs/Pose", "geometry_msgs/PoseStamped", "geometry_msgs/PoseWithCovariance", "geometry_msgs/PoseWithCovarianceStamped", "geometry_msgs/Quaternion", "std_msgs/Header"].map(type => [type, ros2galacticDefinitions[type]]));
79029
78081
  function makePointMessage(point, frameId) {
79030
- const time = dist$3.fromDate(new Date());
78082
+ const time = dist$2.fromDate(new Date());
79031
78083
  return {
79032
78084
  // seq is omitted since it is not present in ros2
79033
78085
  header: {
@@ -79042,7 +78094,7 @@ function makePointMessage(point, frameId) {
79042
78094
  };
79043
78095
  }
79044
78096
  function makePoseMessage(pose, frameId) {
79045
- const time = dist$3.fromDate(new Date());
78097
+ const time = dist$2.fromDate(new Date());
79046
78098
  return {
79047
78099
  // seq is omitted since it is not present in ros2
79048
78100
  header: {
@@ -79053,7 +78105,7 @@ function makePoseMessage(pose, frameId) {
79053
78105
  };
79054
78106
  }
79055
78107
  function makePoseEstimateMessage(pose, frameId, xDev, yDev, thetaDev) {
79056
- const time = dist$3.fromDate(new Date());
78108
+ const time = dist$2.fromDate(new Date());
79057
78109
  return {
79058
78110
  // seq is omitted since it is not present in ros2
79059
78111
  header: {
@@ -79440,7 +78492,7 @@ function ThreeDeeRender(props) {
79440
78492
 
79441
78493
  // Keep the renderer currentTime up to date and handle seeking
79442
78494
  useEffect(() => {
79443
- const newTimeNs = currentTime ? dist$3.toNanoSec(currentTime) : undefined;
78495
+ const newTimeNs = currentTime ? dist$2.toNanoSec(currentTime) : undefined;
79444
78496
 
79445
78497
  /*
79446
78498
  * NOTE AROUND SEEK HANDLING