@luxonis/visualizer-protobuf 3.1.13 → 3.1.14

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 (68) hide show
  1. package/dist/{FoxgloveServer-Da9kV1cr.js → FoxgloveServer-CpnCBMeV.js} +1 -1
  2. package/dist/{communicator-Dh2aL-rj.js → communicator-DO6hmBxI.js} +1 -1
  3. package/dist/{depth-DiD1V2Sg.js → depth-Me_0Xnx6.js} +89 -2
  4. package/dist/{deserialization.worker-DU2Hs4UP.js → deserialization.worker-CUrCdjHf.js} +401 -137
  5. package/dist/{foxglove-protocol-BtLMVx24.js → foxglove-protocol-SrBOBs-8.js} +1 -1
  6. package/dist/{index-B5oN0fQm.js → index-5ZSfZI8d.js} +1 -1
  7. package/dist/{index-CNjpp5xs.js → index-B8aafdRQ.js} +5 -5
  8. package/dist/{index-B_3PleIH.js → index-BMew9qiQ.js} +57 -126
  9. package/dist/{index-D686pHc1.js → index-BsIRFSYD.js} +36 -9
  10. package/dist/{index-CqayH0_I.js → index-CIhAU5Cs.js} +5 -5
  11. package/dist/{index-DnhrXuH6.js → index-CN6tI-uI.js} +5 -5
  12. package/dist/{index--95nXh6E.js → index-CQtXiN8I.js} +5 -5
  13. package/dist/{index-DewnJOHY.js → index-CZGEFE1k.js} +5 -5
  14. package/dist/{index-CcWunxJv.js → index-CeRrHeG_.js} +5 -5
  15. package/dist/{index-BMp_L7Aa.js → index-CqH6rdRP.js} +5 -5
  16. package/dist/{index-JlGCfxtk.js → index-CrPun-aU.js} +5 -5
  17. package/dist/{index-B9-rLgJ9.js → index-Dc3rS1Cf.js} +7 -7
  18. package/dist/{index-CidrwlEk.js → index-DgNYLOM9.js} +5 -5
  19. package/dist/{index-DzOBiI2h.js → index-DjRF0u25.js} +5 -5
  20. package/dist/{index-CxKEiKY9.js → index-Dmc1065I.js} +5 -5
  21. package/dist/{index-BjiepKHF.js → index-Dn6pTTdu.js} +5 -5
  22. package/dist/{index-CCq5_y78.js → index-N2I7Bhtx.js} +5 -5
  23. package/dist/{index-X1k93Nku.js → index-_Z7btKy-.js} +5 -5
  24. package/dist/{index-C45UVGjk.js → index-_ggcs841.js} +5 -5
  25. package/dist/{index-DopAEQk2.js → index-svPKcEP3.js} +5 -5
  26. package/dist/{index-DWt4Nj5G.js → index-u1cGSF5c.js} +5 -5
  27. package/dist/index.js +5 -5
  28. package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
  29. package/dist/lib/src/components/PanelToolbar.js +2 -2
  30. package/dist/lib/src/components/PanelToolbar.js.map +1 -1
  31. package/dist/lib/src/connection/foxglove-connection.d.ts.map +1 -1
  32. package/dist/lib/src/connection/foxglove-connection.js +12 -2
  33. package/dist/lib/src/connection/foxglove-connection.js.map +1 -1
  34. package/dist/lib/src/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js +59 -20
  35. package/dist/lib/src/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js.map +1 -1
  36. package/dist/lib/src/messaging/deserialization/pointcloud/utils.d.ts.map +1 -1
  37. package/dist/lib/src/messaging/deserialization/pointcloud/utils.js.map +1 -1
  38. package/dist/lib/src/messaging/deserialization/video/h264.d.ts +2 -1
  39. package/dist/lib/src/messaging/deserialization/video/h264.d.ts.map +1 -1
  40. package/dist/lib/src/messaging/deserialization/video/h264.js +14 -10
  41. package/dist/lib/src/messaging/deserialization/video/h264.js.map +1 -1
  42. package/dist/lib/src/messaging/deserialization/video/h265.d.ts +1 -0
  43. package/dist/lib/src/messaging/deserialization/video/h265.d.ts.map +1 -1
  44. package/dist/lib/src/messaging/deserialization/video/h265.js +12 -6
  45. package/dist/lib/src/messaging/deserialization/video/h265.js.map +1 -1
  46. package/dist/lib/src/messaging/deserialization/video/rgbd-to-pointcloud.d.ts +4 -4
  47. package/dist/lib/src/messaging/deserialization/video/rgbd-to-pointcloud.d.ts.map +1 -1
  48. package/dist/lib/src/messaging/deserialization/video/rgbd-to-pointcloud.js +350 -84
  49. package/dist/lib/src/messaging/deserialization/video/rgbd-to-pointcloud.js.map +1 -1
  50. package/dist/lib/src/messaging/protobuf.d.ts +2 -2
  51. package/dist/lib/src/messaging/protobuf.d.ts.map +1 -1
  52. package/dist/lib/src/messaging/protobuf.js +3 -3
  53. package/dist/lib/src/messaging/protobuf.js.map +1 -1
  54. package/dist/lib/src/utils/poitcloud-sync.d.ts +7 -2
  55. package/dist/lib/src/utils/poitcloud-sync.d.ts.map +1 -1
  56. package/dist/lib/src/utils/poitcloud-sync.js +10 -6
  57. package/dist/lib/src/utils/poitcloud-sync.js.map +1 -1
  58. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts.map +1 -1
  59. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js +7 -2
  60. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js.map +1 -1
  61. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts.map +1 -1
  62. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js +33 -1
  63. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js.map +1 -1
  64. package/dist/{pointcloudFromDepth.worker-60RA4Ief.js → pointcloudFromDepth.worker-wzSOsJVb.js} +86 -47
  65. package/dist/{protobuf-OcbVtxg1.js → protobuf-CKMA2Rn8.js} +214 -214
  66. package/dist/{worker-C2MHIq3t.js → worker-Bhe7uYcO.js} +4 -4
  67. package/dist/{worker-Be-hru8f.js → worker-VIU0v1ZW.js} +3 -3
  68. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { C as ClientBinaryOpcode, B as BinaryOpcode } from './FoxgloveServer-Da9kV1cr.js';
2
+ import { C as ClientBinaryOpcode, B as BinaryOpcode } from './FoxgloveServer-CpnCBMeV.js';
3
3
 
4
4
  // This Source Code Form is subject to the terms of the Mozilla Public
5
5
  // License, v2.0. If a copy of the MPL was not distributed with this
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { i as getAugmentedNamespace } from './protobuf-OcbVtxg1.js';
2
+ import { i as getAugmentedNamespace } from './protobuf-CKMA2Rn8.js';
3
3
 
4
4
  var typescript = {};
5
5
 
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { U as styleTags, V as tags, W as LRLanguage, Q as indentNodeProp, R as continuedIndent, T as foldNodeProp, a5 as foldInside, ae as defineCSSCompletionSource, X as LanguageSupport, Z as LRParser, Y as ExternalTokenizer } from './index-B_3PleIH.js';
3
- import './protobuf-OcbVtxg1.js';
2
+ import { U as styleTags, V as tags, W as LRLanguage, Q as indentNodeProp, R as continuedIndent, T as foldNodeProp, a5 as foldInside, ae as defineCSSCompletionSource, X as LanguageSupport, Z as LRParser, Y as ExternalTokenizer } from './index-BMew9qiQ.js';
3
+ import './protobuf-CKMA2Rn8.js';
4
4
  import './logger-Bqy1nuLj.js';
5
- import './depth-DiD1V2Sg.js';
5
+ import './depth-Me_0Xnx6.js';
6
6
  import './comlink-jf8bdrAf.js';
7
7
  import 'react';
8
8
  import 'zustand';
@@ -10,9 +10,9 @@ import 'react-mosaic-component';
10
10
  import '@mui/material';
11
11
  import './isArrayLikeObject-n9ytTioB.js';
12
12
  import './utils-DmlHZWuo.js';
13
- import './FoxgloveServer-Da9kV1cr.js';
13
+ import './FoxgloveServer-CpnCBMeV.js';
14
14
  import 'ms';
15
- import './foxglove-protocol-BtLMVx24.js';
15
+ import './foxglove-protocol-SrBOBs-8.js';
16
16
  import 'react-dnd';
17
17
  import 'react-dnd-html5-backend';
18
18
  import './i18next-17tp0Ngf.js';
@@ -1,13 +1,13 @@
1
1
  'use client';
2
- import { _ as _classPrivateFieldLooseBase, a as _classPrivateFieldLooseKey, b as _objectSpread2, p as protobufsBySchema, c as protobufSchemaNameToType, g as getDefaultExportFromCjs, d as _objectWithoutProperties$2, e as _extends$2, f as commonjsGlobal } from './protobuf-OcbVtxg1.js';
2
+ import { _ as _classPrivateFieldLooseBase, a as _classPrivateFieldLooseKey, b as _objectSpread2, p as protobufsBySchema, c as protobufSchemaNameToType, g as getDefaultExportFromCjs, d as _objectWithoutProperties$2, e as _extends$2, f as commonjsGlobal } from './protobuf-CKMA2Rn8.js';
3
3
  import { L as Logger } from './logger-Bqy1nuLj.js';
4
- import { d as dist$1, e as estimateObjectSize, c as createDecodingError, r as reportError, A as AppError, b as baseFlatten, a as baseEach, f as baseIteratee, g as baseDifference, h as getTag, i as baseKeys, j as baseIsEqual, k as castPath, t as toKey, l as baseGet, m as hasIn, s as sendNotification, n as shallowequal, u as useGuaranteedContext, o as getPanelIdsInsideTabPanels, p as getPanelTypeFromId, T as TAB_PANEL_TYPE, q as removePanelFromTabPanel, v as getPanelIdForType, w as getPathFromNode, x as updateTabPanelLayout, y as getSaveConfigsPayloadForAddedPanel, z as replaceAndRemovePanels, B as inlineTabPanelLayouts, C as getAllPanelIds, D as DEFAULT_TAB_PANEL_CONFIG, E as getConfigsForNestedPanelsInsideTab, F as reorderTabWithinTabPanel, G as moveTabBetweenTabPanels, H as isTabPanelConfig, I as addPanelToTab, J as createAddUpdates, K as filterMap, L as Logger$1, M as uniq$2, N as useShallowMemo, O as CurrentLayoutContext, P as MessageOrderTracker, Q as AppConfigurationContext, R as DecodingError } from './depth-DiD1V2Sg.js';
4
+ import { g as globalInputEventMetricsManager, a as globalDecodeMetricsManager, b as globalThroughputMetricsManager, c as constructKeyForTopicRenderMetrics, d as dist$1, e as estimateObjectSize, f as globalRenderMetricsManager, h as createDecodingError, r as reportError, A as AppError, i as baseFlatten, j as baseEach, k as baseIteratee, l as baseDifference, m as getTag, n as baseKeys, o as baseIsEqual, p as castPath, t as toKey, q as baseGet, s as hasIn, u as sendNotification, v as shallowequal, w as useGuaranteedContext, x as getPanelIdsInsideTabPanels, y as getPanelTypeFromId, T as TAB_PANEL_TYPE, z as removePanelFromTabPanel, B as getPanelIdForType, C as getPathFromNode, D as updateTabPanelLayout, E as getSaveConfigsPayloadForAddedPanel, F as replaceAndRemovePanels, G as inlineTabPanelLayouts, H as getAllPanelIds, I as DEFAULT_TAB_PANEL_CONFIG, J as getConfigsForNestedPanelsInsideTab, K as reorderTabWithinTabPanel, L as moveTabBetweenTabPanels, M as isTabPanelConfig, N as addPanelToTab, O as createAddUpdates, P as filterMap, Q as Logger$1, R as uniq$2, S as useShallowMemo, U as CurrentLayoutContext, V as MessageOrderTracker, W as AppConfigurationContext, X as DecodingError } from './depth-Me_0Xnx6.js';
5
5
  import { w as wrap$3, r as releaseProxy, p as proxy } from './comlink-jf8bdrAf.js';
6
6
  import { u as uint8ArrayToUint16Array } from './utils-DmlHZWuo.js';
7
- import { B as BinaryOpcode } from './FoxgloveServer-Da9kV1cr.js';
7
+ import { B as BinaryOpcode } from './FoxgloveServer-CpnCBMeV.js';
8
8
  import * as React$1 from 'react';
9
9
  import React__default, { useRef, useMemo, createContext, useContext, forwardRef, createElement, useState, Component, useCallback, useEffect, useLayoutEffect, useReducer, useImperativeHandle, Fragment as Fragment$1, Suspense } from 'react';
10
- import { p as parseFoxgloveMessage } from './foxglove-protocol-BtLMVx24.js';
10
+ import { p as parseFoxgloveMessage } from './foxglove-protocol-SrBOBs-8.js';
11
11
  import { DndProvider } from 'react-dnd';
12
12
  import { HTML5Backend } from 'react-dnd-html5-backend';
13
13
  import { getLeaves, createRemoveUpdate, updateTree, createHideUpdate, createDragToUpdates, getNodeAtPath, MosaicContext, MosaicWindowContext } from 'react-mosaic-component';
@@ -537,93 +537,6 @@ function ComlinkWrap(worker) {
537
537
  };
538
538
  }
539
539
 
540
- // This Source Code Form is subject to the terms of the Mozilla Public
541
- // License, v2.0. If a copy of the MPL was not distributed with this
542
- // file, You can obtain one at http://mozilla.org/MPL/2.0/
543
-
544
- const MAX_SAMPLE_SIZE = 100;
545
- function constructKeyForTopicRenderMetrics(key, topic) {
546
- return `${key}:${topic}`;
547
- }
548
- function bytesToMegabits(bytes) {
549
- return bytes / (1024 * 1024) * 8;
550
- }
551
- class MetricsManager {
552
- constructor() {
553
- this.metrics = {};
554
- }
555
- getMetrics() {
556
- return this.metrics;
557
- }
558
- }
559
- class EventMetricsManager extends MetricsManager {
560
- ensureTopic(topic) {
561
- var _this$metrics, _this$metrics$topic;
562
- (_this$metrics$topic = (_this$metrics = this.metrics)[topic]) !== null && _this$metrics$topic !== void 0 ? _this$metrics$topic : _this$metrics[topic] = [];
563
- }
564
- calculate(topic) {
565
- const topicMetrics = this.metrics[topic];
566
- if (!topicMetrics) {
567
- return undefined;
568
- }
569
- let totalInterval = 0;
570
- for (let i = 1; i < topicMetrics.length; ++i) {
571
- totalInterval += topicMetrics[i - 1] - topicMetrics[i];
572
- }
573
- if (isNaN(totalInterval)) {
574
- return undefined;
575
- }
576
- const fps = 1000 / (totalInterval / (topicMetrics.length - 1));
577
- return Math.round(fps);
578
- }
579
- registerEvent(topic) {
580
- const currentTime = performance.now();
581
- this.ensureTopic(topic);
582
- this.metrics[topic].unshift(currentTime);
583
- if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
584
- this.metrics[topic].length = MAX_SAMPLE_SIZE;
585
- }
586
- }
587
- }
588
- class ThroughputMetricsManager extends MetricsManager {
589
- calculate(topic) {
590
- const topicMetrics = this.metrics[topic];
591
- if (!topicMetrics || topicMetrics.length < 2 || !topicMetrics.at(0) || !topicMetrics.at(-1)) {
592
- return undefined;
593
- }
594
-
595
- // Get time span in seconds
596
- // biome-ignore lint/style/noNonNullAssertion: <explanation>
597
- const timeSpanMs = topicMetrics.at(0).timestamp - topicMetrics.at(-1).timestamp;
598
- const timeSpanSec = timeSpanMs / 1000;
599
- if (timeSpanSec === 0) {
600
- return undefined;
601
- }
602
-
603
- // Sum up all values (bytes)
604
- const totalBytes = topicMetrics.reduce((sum, metric) => sum + metric.value, 0);
605
-
606
- // Calculate bytes per second
607
- const bytesPerSecond = totalBytes / timeSpanSec;
608
-
609
- // Return rounded value
610
- return Number(bytesToMegabits(bytesPerSecond).toFixed(2));
611
- }
612
- registerEvent(topic, value) {
613
- var _this$metrics2, _this$metrics2$topic;
614
- const timestamp = performance.now();
615
- (_this$metrics2$topic = (_this$metrics2 = this.metrics)[topic]) !== null && _this$metrics2$topic !== void 0 ? _this$metrics2$topic : _this$metrics2[topic] = [];
616
- this.metrics[topic].unshift({
617
- timestamp,
618
- value
619
- });
620
- if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
621
- this.metrics[topic].length = MAX_SAMPLE_SIZE;
622
- }
623
- }
624
- }
625
- const [globalInputEventMetricsManager, globalDecodeMetricsManager, globalRenderMetricsManager, globalThroughputMetricsManager] = [new EventMetricsManager(), new EventMetricsManager(), new EventMetricsManager(), new ThroughputMetricsManager()];
626
-
627
540
  const logger$6 = Logger.getLogger();
628
541
  const WORKER_COUNT = 4;
629
542
  const DEFAULT_TARGET_FPS = 9;
@@ -753,7 +666,7 @@ class DepthToPointcloudWorkerPool {
753
666
  _classPrivateFieldLooseBase(this, _targetDispatchIntervalMs)[_targetDispatchIntervalMs] = DISPATCH_INTERVAL_MS / Math.max(1, Math.round(targetFps / DISPATCH_INTERVAL_FRACTION)) * _classPrivateFieldLooseBase(this, _calculateBatchMultiplier)[_calculateBatchMultiplier]();
754
667
  _classPrivateFieldLooseBase(this, _maxProcessedQueueSize)[_maxProcessedQueueSize] = Math.max(1, maxProcessedQueueSize);
755
668
  this.workerApis = new Array(WORKER_COUNT).fill(undefined).map(() => {
756
- const worker = new Worker(new URL("pointcloudFromDepth.worker-60RA4Ief.js", import.meta.url), {
669
+ const worker = new Worker(new URL("pointcloudFromDepth.worker-wzSOsJVb.js", import.meta.url), {
757
670
  type: "module"
758
671
  });
759
672
  return ComlinkWrap(worker);
@@ -977,7 +890,7 @@ ConfigStore.instance = void 0;
977
890
 
978
891
  var _localStorage$getItem;
979
892
  function initWorker(callback) {
980
- const worker = new Worker(new URL("deserialization.worker-DU2Hs4UP.js", import.meta.url), {
893
+ const worker = new Worker(new URL("deserialization.worker-CUrCdjHf.js", import.meta.url), {
981
894
  type: "module",
982
895
  name: `message-decoder`
983
896
  });
@@ -1177,6 +1090,7 @@ function getIMUEventEmitter() {
1177
1090
  return imuEvent;
1178
1091
  }
1179
1092
 
1093
+ var _toTimestampKey = /*#__PURE__*/_classPrivateFieldLooseKey("toTimestampKey");
1180
1094
  var _binarySearch = /*#__PURE__*/_classPrivateFieldLooseKey("binarySearch");
1181
1095
  var _MAX_DELAY_SEC = /*#__PURE__*/_classPrivateFieldLooseKey("MAX_DELAY_SEC");
1182
1096
  var _MAX_STORED_FRAMES = /*#__PURE__*/_classPrivateFieldLooseKey("MAX_STORED_FRAMES");
@@ -1189,6 +1103,9 @@ class PoitCloudSyncFramework {
1189
1103
  Object.defineProperty(this, _binarySearch, {
1190
1104
  value: _binarySearch2
1191
1105
  });
1106
+ Object.defineProperty(this, _toTimestampKey, {
1107
+ value: _toTimestampKey2
1108
+ });
1192
1109
  this.storedFrames = [];
1193
1110
  Object.defineProperty(this, _MAX_DELAY_SEC, {
1194
1111
  writable: true,
@@ -1199,11 +1116,12 @@ class PoitCloudSyncFramework {
1199
1116
  value: 100
1200
1117
  });
1201
1118
  }
1202
- getFrame(nsec) {
1119
+ getFrame(timestamp) {
1120
+ const targetKey = _classPrivateFieldLooseBase(this, _toTimestampKey)[_toTimestampKey](timestamp);
1203
1121
  const {
1204
1122
  res,
1205
1123
  index = 0
1206
- } = _classPrivateFieldLooseBase(this, _binarySearch)[_binarySearch](this.storedFrames, nsec);
1124
+ } = _classPrivateFieldLooseBase(this, _binarySearch)[_binarySearch](this.storedFrames, targetKey);
1207
1125
  // cleans the array
1208
1126
  for (let i = 0; i < index; i++) {
1209
1127
  Array.prototype.shift.call(this.storedFrames);
@@ -1213,7 +1131,7 @@ class PoitCloudSyncFramework {
1213
1131
  }
1214
1132
  const popedFrame = this.storedFrames.pop();
1215
1133
  if (popedFrame) {
1216
- if (Math.abs(popedFrame.timestamp.nsec - nsec) / 10 ** 9 < _classPrivateFieldLooseBase(this, _MAX_DELAY_SEC)[_MAX_DELAY_SEC]) {
1134
+ if (Math.abs(_classPrivateFieldLooseBase(this, _toTimestampKey)[_toTimestampKey](popedFrame.timestamp) - targetKey) / 10 ** 9 < _classPrivateFieldLooseBase(this, _MAX_DELAY_SEC)[_MAX_DELAY_SEC]) {
1217
1135
  return popedFrame;
1218
1136
  }
1219
1137
  //@ts-ignore
@@ -1229,6 +1147,9 @@ class PoitCloudSyncFramework {
1229
1147
  this.storedFrames.push(frame);
1230
1148
  }
1231
1149
  }
1150
+ function _toTimestampKey2(timestamp) {
1151
+ return timestamp.sec * 1000000000 + timestamp.nsec;
1152
+ }
1232
1153
  function _binarySearch2(arr, targetKey) {
1233
1154
  let left = 0;
1234
1155
  let right = arr.length;
@@ -1240,7 +1161,7 @@ function _binarySearch2(arr, targetKey) {
1240
1161
  index: 0
1241
1162
  };
1242
1163
  }
1243
- if (element.timestamp.nsec < targetKey) {
1164
+ if (_classPrivateFieldLooseBase(this, _toTimestampKey)[_toTimestampKey](element.timestamp) < targetKey) {
1244
1165
  return {
1245
1166
  res: arr[arr.length - 1],
1246
1167
  index: arr.length
@@ -1249,7 +1170,7 @@ function _binarySearch2(arr, targetKey) {
1249
1170
  while (left <= right) {
1250
1171
  const mid = Math.floor((left + right) / 2);
1251
1172
  // biome-ignore lint/style/noNonNullAssertion:
1252
- const midKey = arr[mid].timestamp.nsec;
1173
+ const midKey = _classPrivateFieldLooseBase(this, _toTimestampKey)[_toTimestampKey](arr[mid].timestamp);
1253
1174
  if (midKey === targetKey) {
1254
1175
  if (Math.abs(midKey - targetKey) / 10 ** 9 < _classPrivateFieldLooseBase(this, _MAX_DELAY_SEC)[_MAX_DELAY_SEC]) {
1255
1176
  return {
@@ -1269,7 +1190,7 @@ function _binarySearch2(arr, targetKey) {
1269
1190
  right = mid - 1;
1270
1191
  }
1271
1192
  }
1272
- if (bestMatch && Math.abs(bestMatch.timestamp.nsec - targetKey) / 10 ** 9 < _classPrivateFieldLooseBase(this, _MAX_DELAY_SEC)[_MAX_DELAY_SEC]) {
1193
+ if (bestMatch && Math.abs(_classPrivateFieldLooseBase(this, _toTimestampKey)[_toTimestampKey](bestMatch.timestamp) - targetKey) / 10 ** 9 < _classPrivateFieldLooseBase(this, _MAX_DELAY_SEC)[_MAX_DELAY_SEC]) {
1273
1194
  return {
1274
1195
  res: bestMatch,
1275
1196
  index: left
@@ -1473,12 +1394,14 @@ class FoxgloveConnection {
1473
1394
  this.decodeMetrics.registerEvent("Point Cloud");
1474
1395
  this.throughputMetrics.registerEvent("Point Cloud", messageSize);
1475
1396
  this.parseResolutionFromMessage(coloredEvent.message, "Point Cloud");
1476
- FrameStore.getInstance().registerFrame("Point Cloud", coloredEvent);
1397
+ for (const topic of ["Point Cloud", "PointCloud", "pointCloud"]) {
1398
+ FrameStore.getInstance().registerFrame(topic, coloredEvent);
1399
+ }
1477
1400
  this.messageEvents.push(coloredEvent);
1478
1401
  this.emitState();
1479
1402
  }
1480
1403
  async handleParsePointcloudMessage(coloredEvent) {
1481
- const poitcloudFrame = this.PoitCloudSyncFramework.getFrame(coloredEvent.receiveTime.nsec);
1404
+ const poitcloudFrame = this.PoitCloudSyncFramework.getFrame(coloredEvent.receiveTime);
1482
1405
  const {
1483
1406
  width: colorWith,
1484
1407
  height: colorHeight
@@ -1535,9 +1458,17 @@ class FoxgloveConnection {
1535
1458
  }
1536
1459
  this.parseResolutionFromMessage(event.message, event.topic);
1537
1460
  if (event.schemaName === "foxglove.PointCloud") {
1461
+ for (const topic of ["Point Cloud", "PointCloud", "pointCloud"]) {
1462
+ FrameStore.getInstance().registerFrame(topic, event);
1463
+ }
1538
1464
  this.PoitCloudSyncFramework.addFrame(event.message);
1539
1465
  return;
1540
1466
  }
1467
+ if (event.schemaName === "foxglove.PointCloud.Colored") {
1468
+ for (const topic of ["Point Cloud", "PointCloud", "pointCloud"]) {
1469
+ FrameStore.getInstance().registerFrame(topic, event);
1470
+ }
1471
+ }
1541
1472
  if (event.schemaName === "foxglove.PointClouds.Colored") {
1542
1473
  event.schemaName = "foxglove.PointClouds";
1543
1474
  }
@@ -22321,7 +22252,7 @@ class WebRtcBridge extends ArtificialWorker {
22321
22252
  writable: true,
22322
22253
  value: null
22323
22254
  });
22324
- _classPrivateFieldLooseBase(this, _worker)[_worker] = new Worker(new URL("worker-C2MHIq3t.js", import.meta.url), {
22255
+ _classPrivateFieldLooseBase(this, _worker)[_worker] = new Worker(new URL("worker-Bhe7uYcO.js", import.meta.url), {
22325
22256
  type: "module"
22326
22257
  });
22327
22258
  _classPrivateFieldLooseBase(this, _setupArtificialWorker)[_setupArtificialWorker]();
@@ -22642,7 +22573,7 @@ class VisualizerConnection extends FoxgloveConnection {
22642
22573
  let _worker;
22643
22574
  if (type === "ws") {
22644
22575
  _classPrivateFieldLooseBase(this, _url)[_url] = data.connectionUrl;
22645
- _worker = new Worker(new URL("worker-Be-hru8f.js", import.meta.url), {
22576
+ _worker = new Worker(new URL("worker-VIU0v1ZW.js", import.meta.url), {
22646
22577
  type: "module"
22647
22578
  });
22648
22579
  } else {
@@ -88712,7 +88643,7 @@ function legacy(parser) {
88712
88643
  return new LanguageSupport(StreamLanguage.define(parser));
88713
88644
  }
88714
88645
  function sql$1(dialectName) {
88715
- return import('./index-CcWunxJv.js').then(m => m.sql({ dialect: m[dialectName] }));
88646
+ return import('./index-CeRrHeG_.js').then(m => m.sql({ dialect: m[dialectName] }));
88716
88647
  }
88717
88648
  /**
88718
88649
  An array of language descriptions for known language packages.
@@ -88723,7 +88654,7 @@ const languages = [
88723
88654
  name: "C",
88724
88655
  extensions: ["c", "h", "ino"],
88725
88656
  load() {
88726
- return import('./index-CCq5_y78.js').then(m => m.cpp());
88657
+ return import('./index-N2I7Bhtx.js').then(m => m.cpp());
88727
88658
  }
88728
88659
  }),
88729
88660
  /*@__PURE__*/LanguageDescription.of({
@@ -88731,7 +88662,7 @@ const languages = [
88731
88662
  alias: ["cpp"],
88732
88663
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
88733
88664
  load() {
88734
- return import('./index-CCq5_y78.js').then(m => m.cpp());
88665
+ return import('./index-N2I7Bhtx.js').then(m => m.cpp());
88735
88666
  }
88736
88667
  }),
88737
88668
  /*@__PURE__*/LanguageDescription.of({
@@ -88751,7 +88682,7 @@ const languages = [
88751
88682
  name: "Go",
88752
88683
  extensions: ["go"],
88753
88684
  load() {
88754
- return import('./index-DopAEQk2.js').then(m => m.go());
88685
+ return import('./index-svPKcEP3.js').then(m => m.go());
88755
88686
  }
88756
88687
  }),
88757
88688
  /*@__PURE__*/LanguageDescription.of({
@@ -88766,7 +88697,7 @@ const languages = [
88766
88697
  name: "Java",
88767
88698
  extensions: ["java"],
88768
88699
  load() {
88769
- return import('./index-DnhrXuH6.js').then(m => m.java());
88700
+ return import('./index-CN6tI-uI.js').then(m => m.java());
88770
88701
  }
88771
88702
  }),
88772
88703
  /*@__PURE__*/LanguageDescription.of({
@@ -88781,7 +88712,7 @@ const languages = [
88781
88712
  name: "Jinja",
88782
88713
  extensions: ["j2", "jinja", "jinja2"],
88783
88714
  load() {
88784
- return import('./index-DewnJOHY.js').then(m => m.jinja());
88715
+ return import('./index-CZGEFE1k.js').then(m => m.jinja());
88785
88716
  }
88786
88717
  }),
88787
88718
  /*@__PURE__*/LanguageDescription.of({
@@ -88789,7 +88720,7 @@ const languages = [
88789
88720
  alias: ["json5"],
88790
88721
  extensions: ["json", "map"],
88791
88722
  load() {
88792
- return import('./index-BjiepKHF.js').then(m => m.json());
88723
+ return import('./index-Dn6pTTdu.js').then(m => m.json());
88793
88724
  }
88794
88725
  }),
88795
88726
  /*@__PURE__*/LanguageDescription.of({
@@ -88803,14 +88734,14 @@ const languages = [
88803
88734
  name: "LESS",
88804
88735
  extensions: ["less"],
88805
88736
  load() {
88806
- return import('./index-CNjpp5xs.js').then(m => m.less());
88737
+ return import('./index-B8aafdRQ.js').then(m => m.less());
88807
88738
  }
88808
88739
  }),
88809
88740
  /*@__PURE__*/LanguageDescription.of({
88810
88741
  name: "Liquid",
88811
88742
  extensions: ["liquid"],
88812
88743
  load() {
88813
- return import('./index-DzOBiI2h.js').then(m => m.liquid());
88744
+ return import('./index-DjRF0u25.js').then(m => m.liquid());
88814
88745
  }
88815
88746
  }),
88816
88747
  /*@__PURE__*/LanguageDescription.of({
@@ -88836,7 +88767,7 @@ const languages = [
88836
88767
  name: "PHP",
88837
88768
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
88838
88769
  load() {
88839
- return import('./index-C45UVGjk.js').then(m => m.php());
88770
+ return import('./index-_ggcs841.js').then(m => m.php());
88840
88771
  }
88841
88772
  }),
88842
88773
  /*@__PURE__*/LanguageDescription.of({
@@ -88853,28 +88784,28 @@ const languages = [
88853
88784
  extensions: ["BUILD", "bzl", "py", "pyw"],
88854
88785
  filename: /^(BUCK|BUILD)$/,
88855
88786
  load() {
88856
- return import('./index--95nXh6E.js').then(m => m.python());
88787
+ return import('./index-CQtXiN8I.js').then(m => m.python());
88857
88788
  }
88858
88789
  }),
88859
88790
  /*@__PURE__*/LanguageDescription.of({
88860
88791
  name: "Rust",
88861
88792
  extensions: ["rs"],
88862
88793
  load() {
88863
- return import('./index-X1k93Nku.js').then(m => m.rust());
88794
+ return import('./index-_Z7btKy-.js').then(m => m.rust());
88864
88795
  }
88865
88796
  }),
88866
88797
  /*@__PURE__*/LanguageDescription.of({
88867
88798
  name: "Sass",
88868
88799
  extensions: ["sass"],
88869
88800
  load() {
88870
- return import('./index-CxKEiKY9.js').then(m => m.sass({ indented: true }));
88801
+ return import('./index-Dmc1065I.js').then(m => m.sass({ indented: true }));
88871
88802
  }
88872
88803
  }),
88873
88804
  /*@__PURE__*/LanguageDescription.of({
88874
88805
  name: "SCSS",
88875
88806
  extensions: ["scss"],
88876
88807
  load() {
88877
- return import('./index-CxKEiKY9.js').then(m => m.sass());
88808
+ return import('./index-Dmc1065I.js').then(m => m.sass());
88878
88809
  }
88879
88810
  }),
88880
88811
  /*@__PURE__*/LanguageDescription.of({
@@ -88905,7 +88836,7 @@ const languages = [
88905
88836
  name: "WebAssembly",
88906
88837
  extensions: ["wat", "wast"],
88907
88838
  load() {
88908
- return import('./index-DWt4Nj5G.js').then(m => m.wast());
88839
+ return import('./index-u1cGSF5c.js').then(m => m.wast());
88909
88840
  }
88910
88841
  }),
88911
88842
  /*@__PURE__*/LanguageDescription.of({
@@ -88913,7 +88844,7 @@ const languages = [
88913
88844
  alias: ["rss", "wsdl", "xsd"],
88914
88845
  extensions: ["xml", "xsl", "xsd", "svg"],
88915
88846
  load() {
88916
- return import('./index-CidrwlEk.js').then(m => m.xml());
88847
+ return import('./index-DgNYLOM9.js').then(m => m.xml());
88917
88848
  }
88918
88849
  }),
88919
88850
  /*@__PURE__*/LanguageDescription.of({
@@ -88921,7 +88852,7 @@ const languages = [
88921
88852
  alias: ["yml"],
88922
88853
  extensions: ["yaml", "yml"],
88923
88854
  load() {
88924
- return import('./index-CqayH0_I.js').then(m => m.yaml());
88855
+ return import('./index-CIhAU5Cs.js').then(m => m.yaml());
88925
88856
  }
88926
88857
  }),
88927
88858
  // Legacy modes ported from CodeMirror 5
@@ -89710,13 +89641,13 @@ const languages = [
89710
89641
  name: "Vue",
89711
89642
  extensions: ["vue"],
89712
89643
  load() {
89713
- return import('./index-JlGCfxtk.js').then(m => m.vue());
89644
+ return import('./index-CrPun-aU.js').then(m => m.vue());
89714
89645
  }
89715
89646
  }),
89716
89647
  /*@__PURE__*/LanguageDescription.of({
89717
89648
  name: "Angular Template",
89718
89649
  load() {
89719
- return import('./index-BMp_L7Aa.js').then(m => m.angular());
89650
+ return import('./index-CqH6rdRP.js').then(m => m.angular());
89720
89651
  }
89721
89652
  })
89722
89653
  ];
@@ -174274,7 +174205,7 @@ function PanelToolbarMetrics({
174274
174205
  React__default.useEffect(() => {
174275
174206
  const interval = setInterval(() => {
174276
174207
  setRenderedFps(globalRenderMetricsManager.calculate(renderMetricsKey));
174277
- setAnnotationsFps(globalInputEventMetricsManager.calculate(annotationsMetricsKey));
174208
+ setAnnotationsFps(globalRenderMetricsManager.calculate(annotationsMetricsKey));
174278
174209
  }, METRICS_UPDATE_INTERVAL);
174279
174210
  return () => {
174280
174211
  clearInterval(interval);
@@ -174770,7 +174701,7 @@ function createRenderDelaySampler() {
174770
174701
  };
174771
174702
  }
174772
174703
 
174773
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-B9-rLgJ9.js'));
174704
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-Dc3rS1Cf.js'));
174774
174705
  const ImagePanelBody = ({
174775
174706
  topic,
174776
174707
  frameRenderedEvent,
@@ -174865,7 +174796,7 @@ const DEFAULT_CAMERA_STATE = {
174865
174796
  // License, v2.0. If a copy of the MPL was not distributed with this
174866
174797
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
174867
174798
 
174868
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-D686pHc1.js'));
174799
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-BsIRFSYD.js'));
174869
174800
  const PointCloudPanelBody = ({
174870
174801
  topic,
174871
174802
  frameRenderedEvent,
@@ -174978,4 +174909,4 @@ const PointCloudPanel = /*#__PURE__*/React__default.memo(function PointCloudPane
174978
174909
  }));
174979
174910
  });
174980
174911
 
174981
- export { ifNotIn as $, AnalyticsContext as A, isEqual as B, AppEvent as C, isDesktopApp as D, ErrorDisplay as E, createTheme$1 as F, propTypesExports as G, DEFAULT_CAMERA_STATE as H, format as I, stringType as J, serializeError as K, stringify$3 as L, createIntl as M, createIntlCache as N, useAnalytics as O, PropTypes as P, indentNodeProp as Q, continuedIndent as R, Stack$1 as S, foldNodeProp as T, styleTags as U, tags$1 as V, LRLanguage as W, LanguageSupport as X, ExternalTokenizer as Y, LRParser as Z, _objectWithoutPropertiesLoose$2 as _, makeStyles as a, completeFromList as a0, syntaxTree as a1, LocalTokenGroup as a2, flatIndent as a3, delimitedIndent as a4, foldInside as a5, ContextTracker as a6, snippetCompletion as a7, IterMode as a8, NodeWeakMap as a9, EditorView as aa, EditorSelection as ab, html$6 as ac, parseMixed as ad, defineCSSCompletionSource as ae, bracketMatchingHandle as af, javascriptLanguage as ag, VisualizerConnection as ah, VisualizerContext as ai, PanelLayout as aj, ImagePanel as ak, PointCloudPanel as al, constructKeyForTopicRenderMetrics as am, globalInputEventMetricsManager as an, globalDecodeMetricsManager as ao, globalRenderMetricsManager as ap, globalThroughputMetricsManager as aq, FrameStore as ar, getIMUEventEmitter as as, baseSet as b, createAggregator as c, usePanelCatalog as d, EmptyState as e, flatRest as f, generateUtilityClass as g, PanelContext as h, isEmpty as i, PanelCatalogContext as j, usePanelStateStore as k, difference as l, murmur2 as m, usePanelContext as n, useMessagePipeline as o, useDefaultPanelTitle as p, useHoverValue as q, useSetHoverValue as r, useClearHoverValue as s, useMessagePipelineGetter as t, useTranslation as u, v4$1 as v, usePanelSettingsTreeUpdate as w, PlayerCapabilities as x, assertNever as y, PlayerPresence as z };
174912
+ export { ifNotIn as $, AnalyticsContext as A, isEqual as B, AppEvent as C, isDesktopApp as D, ErrorDisplay as E, createTheme$1 as F, propTypesExports as G, DEFAULT_CAMERA_STATE as H, format as I, stringType as J, serializeError as K, stringify$3 as L, createIntl as M, createIntlCache as N, useAnalytics as O, PropTypes as P, indentNodeProp as Q, continuedIndent as R, Stack$1 as S, foldNodeProp as T, styleTags as U, tags$1 as V, LRLanguage as W, LanguageSupport as X, ExternalTokenizer as Y, LRParser as Z, _objectWithoutPropertiesLoose$2 as _, makeStyles as a, completeFromList as a0, syntaxTree as a1, LocalTokenGroup as a2, flatIndent as a3, delimitedIndent as a4, foldInside as a5, ContextTracker as a6, snippetCompletion as a7, IterMode as a8, NodeWeakMap as a9, EditorView as aa, EditorSelection as ab, html$6 as ac, parseMixed as ad, defineCSSCompletionSource as ae, bracketMatchingHandle as af, javascriptLanguage as ag, VisualizerConnection as ah, VisualizerContext as ai, PanelLayout as aj, ImagePanel as ak, PointCloudPanel as al, FrameStore as am, getIMUEventEmitter as an, baseSet as b, createAggregator as c, usePanelCatalog as d, EmptyState as e, flatRest as f, generateUtilityClass as g, PanelContext as h, isEmpty as i, PanelCatalogContext as j, usePanelStateStore as k, difference as l, murmur2 as m, usePanelContext as n, useMessagePipeline as o, useDefaultPanelTitle as p, useHoverValue as q, useSetHoverValue as r, useClearHoverValue as s, useMessagePipelineGetter as t, useTranslation as u, v4$1 as v, usePanelSettingsTreeUpdate as w, PlayerCapabilities as x, assertNever as y, PlayerPresence as z };
@@ -2,10 +2,10 @@
2
2
  import * as React from 'react';
3
3
  import React__default, { useReducer, useRef, useCallback, useLayoutEffect, Component, useContext, useState, useEffect, createContext, forwardRef, useMemo, Profiler, createElement, cloneElement, memo, StrictMode } from 'react';
4
4
  import { createRoot } from 'react-dom/client';
5
- import { $ as isSymbol, a0 as toString, a1 as keys, a2 as getSymbols$1, a3 as stubArray, a4 as arrayPush, a5 as baseGetAllKeys, h as getTag, a6 as getAllKeys, l as baseGet, f as baseIteratee, k as castPath, t as toKey, a7 as arrayMap$1, a8 as useCurrentLayoutActions, a9 as useCurrentLayoutSelector, r as reportError, A as AppError, aa as usePanelMosaicId, ab as noop$4, L as Logger, ac as useSelectedPanels, p as getPanelTypeFromId, N as useShallowMemo, T as TAB_PANEL_TYPE, K as filterMap, d as dist$2, ad as useAppConfiguration, ae as useJsonTreeTheme } from './depth-DiD1V2Sg.js';
5
+ import { a4 as isSymbol, a5 as toString, a6 as keys, a7 as getSymbols$1, a8 as stubArray, a9 as arrayPush, aa as baseGetAllKeys, m as getTag, ab as getAllKeys, q as baseGet, k as baseIteratee, p as castPath, t as toKey, ac as arrayMap$1, ad as useCurrentLayoutActions, ae as useCurrentLayoutSelector, r as reportError, A as AppError, af as usePanelMosaicId, ag as noop$4, Q as Logger, ah as useSelectedPanels, y as getPanelTypeFromId, S as useShallowMemo, T as TAB_PANEL_TYPE, P as filterMap, d as dist$2, ai as useAppConfiguration, aj as useJsonTreeTheme } from './depth-Me_0Xnx6.js';
6
6
  import { createStore, useStore } from 'zustand';
7
- import { g as generateUtilityClass, c as createAggregator, f as flatRest, b as baseSet, A as AnalyticsContext, m as murmur2, P as PropTypes, _ as _objectWithoutPropertiesLoose$1, E as ErrorDisplay, S as Stack$1, a as makeStyles$1, u as useTranslation, d as usePanelCatalog, e as EmptyState, i as isEmpty, h as PanelContext, j as PanelCatalogContext, k as usePanelStateStore, l as difference, n as usePanelContext, o as useMessagePipeline, v as v4, p as useDefaultPanelTitle, q as useHoverValue, r as useSetHoverValue, s as useClearHoverValue, t as useMessagePipelineGetter, w as usePanelSettingsTreeUpdate, x as PlayerCapabilities, y as assertNever, z as PlayerPresence, B as isEqual, C as AppEvent, D as isDesktopApp, F as createTheme, G as propTypesExports, H as DEFAULT_CAMERA_STATE$1, I as format$1, J as stringType, K as serializeError, L as stringify$1, M as createIntl, N as createIntlCache, O as useAnalytics } from './index-B_3PleIH.js';
8
- import { _ as _classPrivateFieldLooseBase, a as _classPrivateFieldLooseKey, d as _objectWithoutProperties, e as _extends$1, f as commonjsGlobal, g as getDefaultExportFromCjs, b as _objectSpread2, i as getAugmentedNamespace, j as _asyncIterator } from './protobuf-OcbVtxg1.js';
7
+ import { g as generateUtilityClass, c as createAggregator, f as flatRest, b as baseSet, A as AnalyticsContext, m as murmur2, P as PropTypes, _ as _objectWithoutPropertiesLoose$1, E as ErrorDisplay, S as Stack$1, a as makeStyles$1, u as useTranslation, d as usePanelCatalog, e as EmptyState, i as isEmpty, h as PanelContext, j as PanelCatalogContext, k as usePanelStateStore, l as difference, n as usePanelContext, o as useMessagePipeline, v as v4, p as useDefaultPanelTitle, q as useHoverValue, r as useSetHoverValue, s as useClearHoverValue, t as useMessagePipelineGetter, w as usePanelSettingsTreeUpdate, x as PlayerCapabilities, y as assertNever, z as PlayerPresence, B as isEqual, C as AppEvent, D as isDesktopApp, F as createTheme, G as propTypesExports, H as DEFAULT_CAMERA_STATE$1, I as format$1, J as stringType, K as serializeError, L as stringify$1, M as createIntl, N as createIntlCache, O as useAnalytics } from './index-BMew9qiQ.js';
8
+ import { _ as _classPrivateFieldLooseBase, a as _classPrivateFieldLooseKey, d as _objectWithoutProperties, e as _extends$1, f as commonjsGlobal, g as getDefaultExportFromCjs, b as _objectSpread2, i as getAugmentedNamespace, j as _asyncIterator } from './protobuf-CKMA2Rn8.js';
9
9
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
10
10
  import { Link, Button, alpha, IconButton, Card, CardActionArea, CardMedia, CardContent, Typography, Container, Tooltip, Fade, ListItem, ListItemButton, ListItemText, List, TextField, InputAdornment, Popper, Grow, Paper, ClickAwayListener, Menu, MenuItem, Divider, buttonClasses, Backdrop, Chip, useTheme, inputBaseClasses, autocompleteClasses, inputClasses, Checkbox, dialogActionsClasses, filledInputClasses, inputAdornmentClasses, listSubheaderClasses, selectClasses, tableCellClasses, ThemeProvider as ThemeProvider$1, tabsClasses as tabsClasses$1, tabClasses, Tabs, Tab, ListItemIcon } from '@mui/material';
11
11
  import { a as assignValue, b as baseAssignValue, t as tinycolor, c as t$1, i as instance } from './i18next-17tp0Ngf.js';
@@ -18,10 +18,10 @@ import { useDrag, useDrop } from 'react-dnd';
18
18
  import { h as isObject, r as root, S as Symbol$1, k as isObjectLike, A as nodeUtil, B as baseUnary, d as isBuffer, v as Stack, i as isArray, b as baseRest } from './isArrayLikeObject-n9ytTioB.js';
19
19
  import ReactDOM__default from 'react-dom';
20
20
  import { c as copyObject, k as keysIn, g as getPrototype, a as cloneArrayBuffer, b as cloneTypedArray, e as copyArray, f as cloneBuffer, i as initCloneObject, h as isPlainObject$1, B as Box3, V as Vector3, I as InstancedBufferGeometry, F as Float32BufferAttribute, j as InstancedInterleavedBuffer, l as InterleavedBufferAttribute, W as WireframeGeometry, S as Sphere, U as UniformsLib, m as Vector2, n as ShaderLib, o as UniformsUtils, p as ShaderMaterial, q as Vector4, M as Matrix4, L as Line3, r as Mesh, s as MathUtils, O as Object3D, C as Color, t as rgbToThreeColor, u as stringToRgba, v as makeRgba, w as MeshStandardMaterial, R as ReplaceStencilOp, N as NotEqualStencilFunc, D as DoubleSide, P as PointsMaterial, x as rgbaToCssString, y as autoSelectColorSettings, z as colorModeSettingsFields, A as PlaneGeometry, E as DataTexture, G as UVMapping, H as ClampToEdgeWrapping, J as NearestFilter, K as LinearFilter, Q as FS_SRGB_TO_LINEAR, T as SRGBColorSpace, X as LinearSRGBColorSpace, Y as rgbaToLinear, Z as RedFormat, _ as RGBAFormat, $ as getColorConverter, a0 as FloatType, a1 as UnsignedByteType, a2 as NEEDS_MIN_MAX$1, a3 as InstancedMesh, a4 as CylinderGeometry, a5 as ConeGeometry, a6 as DataTextureLoader, a7 as LinearMipmapLinearFilter, a8 as Loader, a9 as LoaderUtils, aa as FileLoader, ab as MeshBasicMaterial, ac as Scene, ad as TextureLoader, ae as AnimationClip, af as VectorKeyframeTrack, ag as QuaternionKeyframeTrack, ah as MeshLambertMaterial, ai as MeshPhongMaterial, aj as FrontSide, ak as PerspectiveCamera, al as OrthographicCamera, am as AmbientLight, an as SpotLight, ao as PointLight, ap as DirectionalLight, aq as BufferGeometry, ar as Group, as as Quaternion, at as Bone, au as LineBasicMaterial, av as SkinnedMesh, aw as Line, ax as LineSegments, ay as RepeatWrapping, az as Skeleton, aA as BufferAttribute, aB as TrianglesDrawMode, aC as TriangleFanDrawMode, aD as TriangleStripDrawMode, aE as MeshPhysicalMaterial, aF as ImageBitmapLoader, aG as InterleavedBuffer, aH as Material, aI as PropertyBinding, aJ as LineLoop, aK as Points, aL as InterpolateLinear, aM as ColorManagement, aN as NearestMipmapNearestFilter, aO as LinearMipmapNearestFilter, aP as NearestMipmapLinearFilter, aQ as MirroredRepeatWrapping, aR as InterpolateDiscrete, aS as Texture, aT as NumberKeyframeTrack, aU as Interpolant, aV as EdgesGeometry, aW as LoadingManager, aX as stringToRgb, aY as getLuminance, aZ as Euler, a_ as vec3TupleApproxEquals, a$ as decodeCompressedImageToBitmap, b0 as CanvasTexture, b1 as Shape, b2 as SRGBToLinear, b3 as ShapeGeometry, b4 as DynamicDrawUsage, b5 as ShaderChunk, b6 as IMAGE_DEFAULT_COLOR_MODE_SETTINGS, b7 as merge$1, b8 as colorHasTransparency, b9 as StaticDrawUsage, ba as RawShaderMaterial, bb as GLSL3, bc as colorFieldComputedPrefix, bd as getRotationTo, be as SphereGeometry, bf as rgbaGradient, bg as InstancedBufferAttribute, bh as BoxGeometry, bi as DARK_OUTLINE, bj as LIGHT_OUTLINE, bk as CircleGeometry, bl as LineDashedMaterial, bm as GreaterDepth, bn as EventDispatcher$1, bo as Plane, bp as Raycaster, bq as WebGLRenderTarget, br as THREE$1, bs as Spherical, bt as WebGLRenderer, bu as NoToneMapping, bv as VSMShadowMap, bw as HemisphereLight } from './decodeImage-DseBx4N0.js';
21
- import { t as typescript } from './index-B5oN0fQm.js';
21
+ import { t as typescript } from './index-5ZSfZI8d.js';
22
22
  import { CacheProvider } from '@emotion/react';
23
23
  import '@mui/material/styles/createTypography';
24
- import { E as EventEmitter } from './FoxgloveServer-Da9kV1cr.js';
24
+ import { E as EventEmitter } from './FoxgloveServer-CpnCBMeV.js';
25
25
  import require$$1$3 from 'color';
26
26
  import require$$2$1 from 'lodash.curry';
27
27
  import OpenInNewIcon from '@mui/icons-material/OpenInNew';
@@ -29,7 +29,7 @@ import SettingsIcon from '@mui/icons-material/Settings';
29
29
  import './comlink-jf8bdrAf.js';
30
30
  import './logger-Bqy1nuLj.js';
31
31
  import './utils-DmlHZWuo.js';
32
- import './foxglove-protocol-BtLMVx24.js';
32
+ import './foxglove-protocol-SrBOBs-8.js';
33
33
  import 'react-dnd-html5-backend';
34
34
  import '@mui/system/colorManipulator';
35
35
  import 'object-assign';
@@ -77539,10 +77539,15 @@ class Renderer extends EventEmitter {
77539
77539
 
77540
77540
  // 4. Get the intersection point in local space
77541
77541
  const intersection = intersects[0];
77542
+ if (!intersection) {
77543
+ return null;
77544
+ }
77542
77545
  const localPoint = picked.worldToLocal(intersection.point.clone());
77543
77546
 
77544
- // 5. Normalize localPoint to [0, 1] based on the bounding box
77545
- const box = new Box3().setFromObject(picked);
77547
+ // 5. Normalize localPoint to [0, 1] based on the object's local-space bounding box.
77548
+ picked.updateWorldMatrix(true, true);
77549
+ const inverseMatrix = picked.matrixWorld.clone().invert();
77550
+ const box = new Box3().setFromObject(picked).applyMatrix4(inverseMatrix);
77546
77551
  const size = new Vector3();
77547
77552
  box.getSize(size);
77548
77553
 
@@ -81882,6 +81887,24 @@ const PANEL_STYLE = {
81882
81887
  display: "flex",
81883
81888
  position: "relative"
81884
81889
  };
81890
+ const POINT_CLOUD_RENDER_SCHEMAS = new Set(["foxglove.PointCloud", "foxglove.PointClouds", "foxglove.PointCloud.Colored", "foxglove.PointClouds.Colored"]);
81891
+ function getOffsetCoordsFromPickedInstance(selection) {
81892
+ if (!selection || selection.instanceIndex == undefined) {
81893
+ return undefined;
81894
+ }
81895
+ const pointCloud = selection.renderable.userData.pointCloud;
81896
+ const width = pointCloud === null || pointCloud === void 0 ? void 0 : pointCloud.width;
81897
+ const height = pointCloud === null || pointCloud === void 0 ? void 0 : pointCloud.height;
81898
+ if (width == undefined || height == undefined || width <= 0 || height <= 0 || selection.instanceIndex < 0 || selection.instanceIndex >= width * height) {
81899
+ return undefined;
81900
+ }
81901
+ const pixelX = selection.instanceIndex % width;
81902
+ const pixelY = Math.floor(selection.instanceIndex / width);
81903
+ return {
81904
+ offsetX: (pixelX + 0.5) / width,
81905
+ offsetY: (pixelY + 0.5) / height
81906
+ };
81907
+ }
81885
81908
 
81886
81909
  /**
81887
81910
  * A panel that renders a 3D scene. This is a thin wrapper around a `Renderer` instance.
@@ -82188,7 +82211,7 @@ function ThreeDeeRender(props) {
82188
82211
 
82189
82212
  // allFrames has messages on preloaded topics across all frames (as they are loaded)
82190
82213
  setAllFrames(renderState.allFrames);
82191
- if (props.frameRenderedEvent !== undefined && (_renderState$currentF = renderState.currentFrame) !== null && _renderState$currentF !== void 0 && _renderState$currentF.find(m => m.schemaName === "foxglove.PointCloud")) {
82214
+ if (props.frameRenderedEvent !== undefined && (_renderState$currentF = renderState.currentFrame) !== null && _renderState$currentF !== void 0 && _renderState$currentF.find(m => POINT_CLOUD_RENDER_SCHEMAS.has(m.schemaName))) {
82192
82215
  props.frameRenderedEvent();
82193
82216
  }
82194
82217
  });
@@ -82542,6 +82565,10 @@ function ThreeDeeRender(props) {
82542
82565
  if (!selectedObject) {
82543
82566
  return;
82544
82567
  }
82568
+ const pointCloudOffsetCoords = getOffsetCoordsFromPickedInstance(selectedObject);
82569
+ if (pointCloudOffsetCoords) {
82570
+ return pointCloudOffsetCoords;
82571
+ }
82545
82572
 
82546
82573
  // Calculate the percentage offset coordinates relative to the renderable
82547
82574
  // This is number from <0, 1> range and can be used to map click position to depth data
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { a6 as ContextTracker, Y as ExternalTokenizer, U as styleTags, V as tags, Z as LRParser, W as LRLanguage, Q as indentNodeProp, a4 as delimitedIndent, T as foldNodeProp, a5 as foldInside, X as LanguageSupport, ad as parseMixed } from './index-B_3PleIH.js';
3
- import './protobuf-OcbVtxg1.js';
2
+ import { a6 as ContextTracker, Y as ExternalTokenizer, U as styleTags, V as tags, Z as LRParser, W as LRLanguage, Q as indentNodeProp, a4 as delimitedIndent, T as foldNodeProp, a5 as foldInside, X as LanguageSupport, ad as parseMixed } from './index-BMew9qiQ.js';
3
+ import './protobuf-CKMA2Rn8.js';
4
4
  import './logger-Bqy1nuLj.js';
5
- import './depth-DiD1V2Sg.js';
5
+ import './depth-Me_0Xnx6.js';
6
6
  import './comlink-jf8bdrAf.js';
7
7
  import 'react';
8
8
  import 'zustand';
@@ -10,9 +10,9 @@ import 'react-mosaic-component';
10
10
  import '@mui/material';
11
11
  import './isArrayLikeObject-n9ytTioB.js';
12
12
  import './utils-DmlHZWuo.js';
13
- import './FoxgloveServer-Da9kV1cr.js';
13
+ import './FoxgloveServer-CpnCBMeV.js';
14
14
  import 'ms';
15
- import './foxglove-protocol-BtLMVx24.js';
15
+ import './foxglove-protocol-SrBOBs-8.js';
16
16
  import 'react-dnd';
17
17
  import 'react-dnd-html5-backend';
18
18
  import './i18next-17tp0Ngf.js';