@luxonis/visualizer-protobuf 2.18.1 → 2.20.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 (55) hide show
  1. package/dist/{deserialization.worker-C9dXbAlS.js → deserialization.worker-BDgy77kA.js} +10 -37
  2. package/dist/{index-hGphzS2C.js → index-B5bnTrz3.js} +6 -5
  3. package/dist/{index-CWyWOStx.js → index-B7_AQKK_.js} +4 -3
  4. package/dist/{index-ClVSD2eR.js → index-BYimCKrW.js} +4 -3
  5. package/dist/{index-B_wE-TAZ.js → index-BfRMsy3f.js} +4 -3
  6. package/dist/{index-DD1GBu5y.js → index-BpeL_ibo.js} +4 -3
  7. package/dist/{index-CZ83vGC_.js → index-Bph0s4yC.js} +4 -3
  8. package/dist/{index-DHft_1uY.js → index-C4JrCXqa.js} +103 -44
  9. package/dist/{index-BRTt63KE.js → index-CZSuxibZ.js} +4 -3
  10. package/dist/{index-C1DjWsph.js → index-CmON-FIE.js} +4 -3
  11. package/dist/{index-B-Q9SHDe.js → index-CwDMLOCh.js} +4 -3
  12. package/dist/{index-IroDl_1U.js → index-D6Dyzzev.js} +4 -3
  13. package/dist/{index-WMQ28NAM.js → index-DLQIVtvt.js} +4 -3
  14. package/dist/{index-lMTiVIpT.js → index-DNFBslJY.js} +4 -3
  15. package/dist/{index-Cn-9uas1.js → index-DNybfi0p.js} +4 -3
  16. package/dist/{index-hFI4BOol.js → index-DklUsnK1.js} +4 -3
  17. package/dist/{index-BY93INKj.js → index-Dr1IjG1N.js} +4 -3
  18. package/dist/{index-DuOl-R4e.js → index-Eif4QzE4.js} +4 -3
  19. package/dist/{index-Bw0wb_7x.js → index-XP-Bj_XI.js} +4 -3
  20. package/dist/{index-DQCgeYB2.js → index-hDQVp6bN.js} +4 -3
  21. package/dist/index.js +4 -3
  22. package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
  23. package/dist/lib/src/components/PanelToolbar.js +2 -4
  24. package/dist/lib/src/components/PanelToolbar.js.map +1 -1
  25. package/dist/lib/src/connection/foxglove-connection.d.ts +7 -5
  26. package/dist/lib/src/connection/foxglove-connection.d.ts.map +1 -1
  27. package/dist/lib/src/connection/foxglove-connection.js +19 -7
  28. package/dist/lib/src/connection/foxglove-connection.js.map +1 -1
  29. package/dist/lib/src/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js +189 -67
  30. package/dist/lib/src/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js.map +1 -1
  31. package/dist/lib/src/messaging/deserialization/pointcloud/utils.d.ts +3 -4
  32. package/dist/lib/src/messaging/deserialization/pointcloud/utils.d.ts.map +1 -1
  33. package/dist/lib/src/messaging/deserialization/pointcloud/utils.js +5 -41
  34. package/dist/lib/src/messaging/deserialization/pointcloud/utils.js.map +1 -1
  35. package/dist/lib/src/messaging/deserialization/video/depth.d.ts +1 -12
  36. package/dist/lib/src/messaging/deserialization/video/depth.d.ts.map +1 -1
  37. package/dist/lib/src/messaging/deserialization/video/depth.js +2 -26
  38. package/dist/lib/src/messaging/deserialization/video/depth.js.map +1 -1
  39. package/dist/lib/src/messaging/deserialization.worker.js +4 -4
  40. package/dist/lib/src/messaging/deserialization.worker.js.map +1 -1
  41. package/dist/lib/src/panels/ImagePanel.js +2 -2
  42. package/dist/lib/src/panels/ImagePanel.js.map +1 -1
  43. package/dist/lib/src/panels/PointCloudPanel.d.ts.map +1 -1
  44. package/dist/lib/src/panels/PointCloudPanel.js +18 -7
  45. package/dist/lib/src/panels/PointCloudPanel.js.map +1 -1
  46. package/dist/lib/src/utils/metrics-manager.d.ts +9 -1
  47. package/dist/lib/src/utils/metrics-manager.d.ts.map +1 -1
  48. package/dist/lib/src/utils/metrics-manager.js +33 -2
  49. package/dist/lib/src/utils/metrics-manager.js.map +1 -1
  50. package/dist/pointcloudFromDepth.worker-CNKyMUU-.js +326 -0
  51. package/dist/{tslib.es6-D1dICxG6.js → tslib.es6-C73eoP_E.js} +6 -43
  52. package/dist/{useMessageReducer--GRvgQq6.js → useMessageReducer-jNx5e6JW.js} +1 -1
  53. package/dist/{i420ToRgbaToPoitcloud.worker-CzFC0VI1.js → utils-Cmsz3FxA.js} +37 -5
  54. package/package.json +1 -1
  55. package/dist/pointcloudFromDepth.worker-CnEm_1b0.js +0 -199
@@ -1,6 +1,6 @@
1
- import { w as wrap, e as expose } from './comlink-DHMAu6X7.js';
2
- import { t as typescript } from './useMessageReducer--GRvgQq6.js';
3
- import { e as estimateObjectSize, U as uint8ArrayToUint16Array, d as dist } from './tslib.es6-D1dICxG6.js';
1
+ import { e as expose } from './comlink-DHMAu6X7.js';
2
+ import { t as typescript } from './useMessageReducer-jNx5e6JW.js';
3
+ import { e as estimateObjectSize, d as dist } from './tslib.es6-C73eoP_E.js';
4
4
  import { T as Type, P as PointsAnnotationType, p as protobufsBySchema, a as Profile } from './protobuf-Cr0sn6Ua.js';
5
5
  import 'react';
6
6
  import './_commonjsHelpers-E-ZsRS8r.js';
@@ -751,41 +751,17 @@ function deserializeColorFrame({
751
751
  // This Source Code Form is subject to the terms of the Mozilla Public
752
752
  // License, v2.0. If a copy of the MPL was not distributed with this
753
753
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
754
- /* eslint-disable no-underscore-dangle */
755
754
 
756
- const WORKER_COUNT = 3;
757
- class depthToPointcloudWorkerPool {
758
- lastUsedWorkerIndex = 0;
759
- constructor() {
760
- this.workerApis = new Array(WORKER_COUNT).fill(undefined).map(() => wrap(new Worker(new URL("pointcloudFromDepth.worker-CnEm_1b0.js", import.meta.url), {
761
- type: "module"
762
- })));
763
- }
764
- async depthToPointcloudGPU(depthArray, width, height, fx, fy, cx, cy) {
765
- // biome-ignore lint/style/noNonNullAssertion: This should work
766
- const workerApi = this.workerApis[this.lastUsedWorkerIndex];
767
- this.lastUsedWorkerIndex = (this.lastUsedWorkerIndex + 1) % WORKER_COUNT;
768
- return await workerApi.depthToPointcloudGPU(depthArray, width, height, fx, fy, cx, cy);
769
- }
770
- }
771
- const workerPool = new depthToPointcloudWorkerPool();
772
755
  async function deserializeDepthFrame({
773
756
  topic,
774
757
  message,
775
- callback,
776
- neuralCameraIntrinsics
758
+ callback
777
759
  }) {
778
760
  const {
779
761
  receiveTime,
780
762
  width,
781
763
  height
782
764
  } = parseMessage(message);
783
- const uint16Array = uint8ArrayToUint16Array(message.data);
784
- const fx = neuralCameraIntrinsics.right.focalLenght.x;
785
- const fy = neuralCameraIntrinsics.right.focalLenght.y;
786
- const cx = neuralCameraIntrinsics.right.principalPoint.x;
787
- const cy = neuralCameraIntrinsics.right.principalPoint.y;
788
- const pointCloudBufferGPU = workerPool.depthToPointcloudGPU(uint16Array, width, height, fx, fy, cx, cy);
789
765
  const foxgloveMessage = {
790
766
  timestamp: message.tsDevice ?? receiveTime,
791
767
  frame_id: `pointcloud-${topic}-frame`,
@@ -834,7 +810,7 @@ async function deserializeDepthFrame({
834
810
  offset: 15,
835
811
  type: typescript.NumericType.UINT8
836
812
  }],
837
- data: await pointCloudBufferGPU
813
+ data: message.data
838
814
  };
839
815
  callback({
840
816
  topic,
@@ -1005,8 +981,7 @@ function initCallback(cb) {
1005
981
  function handleMessageToDecode({
1006
982
  schema,
1007
983
  buffer,
1008
- topic,
1009
- neuralCameraIntrinsics
984
+ topic
1010
985
  }) {
1011
986
  const protobufSchema = protobufsBySchema[schema];
1012
987
  if (!protobufSchema) {
@@ -1021,8 +996,7 @@ function handleMessageToDecode({
1021
996
  topicDecoders,
1022
997
  message,
1023
998
  callback,
1024
- type: protobufSchema.type,
1025
- neuralCameraIntrinsics
999
+ type: protobufSchema.type
1026
1000
  });
1027
1001
  }
1028
1002
  async function deserializeDepthAiMessage(args) {
@@ -1032,8 +1006,7 @@ async function deserializeDepthAiMessage(args) {
1032
1006
  type,
1033
1007
  message,
1034
1008
  callback,
1035
- topic,
1036
- neuralCameraIntrinsics
1009
+ topic
1037
1010
  } = args;
1038
1011
  switch (type) {
1039
1012
  case "encodedFrame":
@@ -1082,11 +1055,11 @@ async function deserializeDepthAiMessage(args) {
1082
1055
  }
1083
1056
  case Type.RAW16:
1084
1057
  {
1058
+ // Used for point cloud
1085
1059
  await deserializeDepthFrame({
1086
1060
  topic,
1087
1061
  message,
1088
- callback,
1089
- neuralCameraIntrinsics
1062
+ callback
1090
1063
  });
1091
1064
  break;
1092
1065
  }
@@ -1,14 +1,15 @@
1
- import { ImagePanel } from './index-C1DjWsph.js';
1
+ import { ImagePanel } from './index-CmON-FIE.js';
2
2
  import 'react';
3
3
  import 'react-dom';
4
- import './tslib.es6-D1dICxG6.js';
5
- import './comlink-DHMAu6X7.js';
4
+ import './tslib.es6-C73eoP_E.js';
6
5
  import 'react-mosaic-component';
7
6
  import './_commonjsHelpers-E-ZsRS8r.js';
8
7
  import '@mui/material';
9
8
  import './isArrayLikeObject-Bytw9p-q.js';
10
9
  import 'zustand';
11
- import './index-DHft_1uY.js';
10
+ import './index-C4JrCXqa.js';
11
+ import './utils-Cmsz3FxA.js';
12
+ import './comlink-DHMAu6X7.js';
12
13
  import './FoxgloveServer-C39Uooyk.js';
13
14
  import 'ms';
14
15
  import './foxglove-protocol-CYoMweAY.js';
@@ -24,7 +25,7 @@ import 'rehype-sanitize';
24
25
  import 'extend';
25
26
  import 'react-icons';
26
27
  import '@pandacss/dev';
27
- import './useMessageReducer--GRvgQq6.js';
28
+ import './useMessageReducer-jNx5e6JW.js';
28
29
  import '@mui/icons-material/FullscreenExit';
29
30
  import '@mui/icons-material/Settings';
30
31
  import '@mui/icons-material/ChevronRight';
@@ -1,11 +1,12 @@
1
- import { N as styleTags, O as tags, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, M as foldNodeProp, a1 as foldInside, a7 as defineCSSCompletionSource, T as LanguageSupport, V as LRParser, U as ExternalTokenizer } from './index-DHft_1uY.js';
2
- import './tslib.es6-D1dICxG6.js';
3
- import './comlink-DHMAu6X7.js';
1
+ import { N as styleTags, O as tags, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, M as foldNodeProp, a1 as foldInside, a7 as defineCSSCompletionSource, T as LanguageSupport, V as LRParser, U as ExternalTokenizer } from './index-C4JrCXqa.js';
2
+ import './tslib.es6-C73eoP_E.js';
4
3
  import 'react';
5
4
  import 'react-mosaic-component';
6
5
  import './_commonjsHelpers-E-ZsRS8r.js';
7
6
  import '@mui/material';
8
7
  import './isArrayLikeObject-Bytw9p-q.js';
8
+ import './utils-Cmsz3FxA.js';
9
+ import './comlink-DHMAu6X7.js';
9
10
  import './FoxgloveServer-C39Uooyk.js';
10
11
  import 'ms';
11
12
  import './foxglove-protocol-CYoMweAY.js';
@@ -1,11 +1,12 @@
1
- import { Q as LRLanguage, J as indentNodeProp, a0 as delimitedIndent, M as foldNodeProp, a1 as foldInside, N as styleTags, O as tags, T as LanguageSupport, V as LRParser } from './index-DHft_1uY.js';
2
- import './tslib.es6-D1dICxG6.js';
3
- import './comlink-DHMAu6X7.js';
1
+ import { Q as LRLanguage, J as indentNodeProp, a0 as delimitedIndent, M as foldNodeProp, a1 as foldInside, N as styleTags, O as tags, T as LanguageSupport, V as LRParser } from './index-C4JrCXqa.js';
2
+ import './tslib.es6-C73eoP_E.js';
4
3
  import 'react';
5
4
  import 'react-mosaic-component';
6
5
  import './_commonjsHelpers-E-ZsRS8r.js';
7
6
  import '@mui/material';
8
7
  import './isArrayLikeObject-Bytw9p-q.js';
8
+ import './utils-Cmsz3FxA.js';
9
+ import './comlink-DHMAu6X7.js';
9
10
  import './FoxgloveServer-C39Uooyk.js';
10
11
  import 'ms';
11
12
  import './foxglove-protocol-CYoMweAY.js';
@@ -1,11 +1,12 @@
1
- import { N as styleTags, O as tags, Q as LRLanguage, T as LanguageSupport, V as LRParser, a3 as LocalTokenGroup, aa as html, ab as parseMixed, ad as javascriptLanguage } from './index-DHft_1uY.js';
2
- import './tslib.es6-D1dICxG6.js';
3
- import './comlink-DHMAu6X7.js';
1
+ import { N as styleTags, O as tags, Q as LRLanguage, T as LanguageSupport, V as LRParser, a3 as LocalTokenGroup, aa as html, ab as parseMixed, ad as javascriptLanguage } from './index-C4JrCXqa.js';
2
+ import './tslib.es6-C73eoP_E.js';
4
3
  import 'react';
5
4
  import 'react-mosaic-component';
6
5
  import './_commonjsHelpers-E-ZsRS8r.js';
7
6
  import '@mui/material';
8
7
  import './isArrayLikeObject-Bytw9p-q.js';
8
+ import './utils-Cmsz3FxA.js';
9
+ import './comlink-DHMAu6X7.js';
9
10
  import './FoxgloveServer-C39Uooyk.js';
10
11
  import 'ms';
11
12
  import './foxglove-protocol-CYoMweAY.js';
@@ -1,11 +1,12 @@
1
- import { U as ExternalTokenizer, a2 as ContextTracker, N as styleTags, O as tags, V as LRParser, Z as syntaxTree, X as ifNotIn, Q as LRLanguage, J as indentNodeProp, a0 as delimitedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport, a5 as IterMode, Y as completeFromList, a6 as NodeWeakMap, a4 as snippetCompletion } from './index-DHft_1uY.js';
2
- import './tslib.es6-D1dICxG6.js';
3
- import './comlink-DHMAu6X7.js';
1
+ import { U as ExternalTokenizer, a2 as ContextTracker, N as styleTags, O as tags, V as LRParser, Z as syntaxTree, X as ifNotIn, Q as LRLanguage, J as indentNodeProp, a0 as delimitedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport, a5 as IterMode, Y as completeFromList, a6 as NodeWeakMap, a4 as snippetCompletion } from './index-C4JrCXqa.js';
2
+ import './tslib.es6-C73eoP_E.js';
4
3
  import 'react';
5
4
  import 'react-mosaic-component';
6
5
  import './_commonjsHelpers-E-ZsRS8r.js';
7
6
  import '@mui/material';
8
7
  import './isArrayLikeObject-Bytw9p-q.js';
8
+ import './utils-Cmsz3FxA.js';
9
+ import './comlink-DHMAu6X7.js';
9
10
  import './FoxgloveServer-C39Uooyk.js';
10
11
  import 'ms';
11
12
  import './foxglove-protocol-CYoMweAY.js';
@@ -1,11 +1,12 @@
1
- import { N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, $ as flatIndent, a0 as delimitedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport } from './index-DHft_1uY.js';
2
- import './tslib.es6-D1dICxG6.js';
3
- import './comlink-DHMAu6X7.js';
1
+ import { N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, $ as flatIndent, a0 as delimitedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport } from './index-C4JrCXqa.js';
2
+ import './tslib.es6-C73eoP_E.js';
4
3
  import 'react';
5
4
  import 'react-mosaic-component';
6
5
  import './_commonjsHelpers-E-ZsRS8r.js';
7
6
  import '@mui/material';
8
7
  import './isArrayLikeObject-Bytw9p-q.js';
8
+ import './utils-Cmsz3FxA.js';
9
+ import './comlink-DHMAu6X7.js';
9
10
  import './FoxgloveServer-C39Uooyk.js';
10
11
  import 'ms';
11
12
  import './foxglove-protocol-CYoMweAY.js';
@@ -1,4 +1,5 @@
1
- import { i as i420ToRgbaToPoitcloudWorker, d as dist$1, e as estimateObjectSize, r as reportError, A as AppError, b as baseFlatten, a as baseEach, c as baseIteratee, f as baseDifference, g as getTag, h 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 getConfigsForNestedPanelsInsideTab, E as reorderTabWithinTabPanel, F as moveTabBetweenTabPanels, G as isTabPanelConfig, H as DEFAULT_TAB_PANEL_CONFIG, I as addPanelToTab, J as createAddUpdates, K as filterMap, L as Logger, M as uniq$2, N as useShallowMemo, O as CurrentLayoutContext, P as MessageOrderTracker, Q as AppConfigurationContext, _ as __assign$7, R as __rest$4, S as __spreadArray$4 } from './tslib.es6-D1dICxG6.js';
1
+ import { d as dist$1, e as estimateObjectSize, r as reportError, A as AppError, b as baseFlatten, a as baseEach, c as baseIteratee, f as baseDifference, g as getTag, h as baseKeys, i as baseIsEqual, j as castPath, t as toKey, k as baseGet, l as hasIn, s as sendNotification, m as shallowequal, u as useGuaranteedContext, n as getPanelIdsInsideTabPanels, o as getPanelTypeFromId, T as TAB_PANEL_TYPE, p as removePanelFromTabPanel, q as getPanelIdForType, v as getPathFromNode, w as updateTabPanelLayout, x as getSaveConfigsPayloadForAddedPanel, y as replaceAndRemovePanels, z as inlineTabPanelLayouts, B as getAllPanelIds, C as getConfigsForNestedPanelsInsideTab, D as reorderTabWithinTabPanel, E as moveTabBetweenTabPanels, F as isTabPanelConfig, G as DEFAULT_TAB_PANEL_CONFIG, H as addPanelToTab, I as createAddUpdates, J as filterMap, L as Logger, K as uniq$2, M as useShallowMemo, N as CurrentLayoutContext, O as MessageOrderTracker, P as AppConfigurationContext, _ as __assign$7, Q as __rest$4, R as __spreadArray$4 } from './tslib.es6-C73eoP_E.js';
2
+ import { d as depthToPointcloudWorkerPool, u as uint8ArrayToUint16Array } from './utils-Cmsz3FxA.js';
2
3
  import { w as wrap$3, p as proxy } from './comlink-DHMAu6X7.js';
3
4
  import { B as BinaryOpcode } from './FoxgloveServer-C39Uooyk.js';
4
5
  import { g as getDefaultExportFromCjs, c as commonjsGlobal } from './_commonjsHelpers-E-ZsRS8r.js';
@@ -443,7 +444,7 @@ class Condvar {
443
444
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
444
445
 
445
446
  function initWorker(callback) {
446
- const workerWrap = wrap$3(new Worker(new URL("deserialization.worker-C9dXbAlS.js", import.meta.url), {
447
+ const workerWrap = wrap$3(new Worker(new URL("deserialization.worker-BDgy77kA.js", import.meta.url), {
447
448
  type: "module",
448
449
  name: `message-decoder`
449
450
  }));
@@ -479,14 +480,18 @@ function createMessageHandler(callback) {
479
480
  // License, v2.0. If a copy of the MPL was not distributed with this
480
481
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
481
482
 
482
- class MetricsManager {
483
+ const MAX_SAMPLE_SIZE = 100;
484
+ function bytesToMegabytes(bytes) {
485
+ return bytes / (1024 * 1024);
486
+ }
487
+ class EventMetricsManager {
483
488
  metrics = {};
484
489
  registerEvent(topic) {
485
490
  const currentTime = performance.now();
486
491
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
487
492
  this.metrics[topic] ??= [];
488
493
  this.metrics[topic].unshift(currentTime);
489
- this.metrics[topic].length = 100;
494
+ this.metrics[topic].length = MAX_SAMPLE_SIZE;
490
495
  }
491
496
  calculate(topic) {
492
497
  const topicMetrics = this.metrics[topic];
@@ -504,6 +509,40 @@ class MetricsManager {
504
509
  return Math.round(fps);
505
510
  }
506
511
  }
512
+ class ThroughputMetricsManager {
513
+ metrics = {};
514
+ registerEvent(topic, value) {
515
+ const timestamp = performance.now();
516
+ this.metrics[topic] ??= [];
517
+ this.metrics[topic].unshift({
518
+ timestamp,
519
+ value
520
+ });
521
+ this.metrics[topic].length = MAX_SAMPLE_SIZE;
522
+ }
523
+ calculate(topic) {
524
+ const topicMetrics = this.metrics[topic];
525
+ if (!topicMetrics || topicMetrics.length < 2) {
526
+ return 0;
527
+ }
528
+
529
+ // Get time span in seconds
530
+ const timeSpanMs = topicMetrics[0].timestamp - topicMetrics[topicMetrics.length - 1].timestamp;
531
+ const timeSpanSec = timeSpanMs / 1000;
532
+ if (timeSpanSec === 0) {
533
+ return 0;
534
+ }
535
+
536
+ // Sum up all values (bytes)
537
+ const totalBytes = topicMetrics.reduce((sum, metric) => sum + metric.value, 0);
538
+
539
+ // Calculate bytes per second
540
+ const bytesPerSecond = totalBytes / timeSpanSec;
541
+
542
+ // Return rounded value
543
+ return Number(bytesToMegabytes(bytesPerSecond).toFixed(2));
544
+ }
545
+ }
507
546
 
508
547
  // This Source Code Form is subject to the terms of the Mozilla Public
509
548
  // License, v2.0. If a copy of the MPL was not distributed with this
@@ -623,10 +662,11 @@ class FoxgloveConnection {
623
662
  advertisedServices = new Map();
624
663
  skipPoitcloud = false;
625
664
  problems = new ProblemManager();
626
- inputMetrics = new MetricsManager();
627
- decodeMetrics = new MetricsManager();
665
+ inputMetrics = new EventMetricsManager();
666
+ throughputMetrics = new ThroughputMetricsManager();
667
+ decodeMetrics = new EventMetricsManager();
628
668
  PoitCloudSyncFramework = new PoitCloudSyncFramework();
629
- i420ToRgbaToPoitcloudWorkerPool = new i420ToRgbaToPoitcloudWorker();
669
+ depthToPointcloudWorkerPool = new depthToPointcloudWorkerPool();
630
670
  // message handler
631
671
 
632
672
  topics = {};
@@ -641,7 +681,8 @@ class FoxgloveConnection {
641
681
  getTopicMetrics(topic) {
642
682
  return {
643
683
  incomingMessagesFps: this.inputMetrics.calculate(topic),
644
- decodedMessagesFps: this.decodeMetrics.calculate(topic)
684
+ decodedMessagesFps: this.decodeMetrics.calculate(topic),
685
+ messageThroughput: this.throughputMetrics.calculate(topic)
645
686
  };
646
687
  }
647
688
  getCurrentTime() {
@@ -649,10 +690,18 @@ class FoxgloveConnection {
649
690
  }
650
691
  onMessagePacket(event) {
651
692
  this.inputMetrics.registerEvent(event.data.topic);
693
+ this.throughputMetrics.registerEvent(event.data.topic, event.data.buffer.byteLength);
652
694
  this.messageHandler.handle(event.data);
653
695
  }
654
696
  async handleParsePoitcloudMessage(coloredEvent) {
655
697
  const poitcloudFrame = this.PoitCloudSyncFramework.getFrame(coloredEvent.receiveTime.nsec);
698
+ const getNeuralCameraIntrinsics = () => {
699
+ const neuralCameraIntrinsicsData = localStorage.getItem("neuralCameraIntrinsics");
700
+ if (neuralCameraIntrinsicsData) {
701
+ return JSON.parse(neuralCameraIntrinsicsData);
702
+ }
703
+ return null;
704
+ };
656
705
  if (poitcloudFrame) {
657
706
  /* Useful for debugging
658
707
  if (Math.abs(coloredEvent.receiveTime.nsec- poitcloudFrame.timestamp.nsec)/10 ** 9) {
@@ -663,9 +712,10 @@ class FoxgloveConnection {
663
712
  }
664
713
  */
665
714
 
715
+ const neuralCameraIntrinsics = getNeuralCameraIntrinsics();
666
716
  // @ts-expect-error - ITS unknow
667
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
668
- const message = await this.i420ToRgbaToPoitcloudWorkerPool.i420ToRgbaToPointcloudWorker(coloredEvent.message.data, coloredEvent.message.width, coloredEvent.message.height, poitcloudFrame.width, poitcloudFrame.height, poitcloudFrame.data);
717
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
718
+ const message = await this.depthToPointcloudWorkerPool.depthToPointcloudGPU(uint8ArrayToUint16Array(poitcloudFrame.data), poitcloudFrame.width ?? 0, poitcloudFrame.height, neuralCameraIntrinsics.right.focalLenght.x, neuralCameraIntrinsics.right.focalLenght.y, neuralCameraIntrinsics.right.principalPoint.x, neuralCameraIntrinsics.right.principalPoint.y, coloredEvent.message.data, poitcloudFrame.width ?? 0, poitcloudFrame.height ?? 0);
669
719
  coloredEvent.topic = "Point Cloud";
670
720
  coloredEvent.schemaName = "foxglove.PointCloud";
671
721
  coloredEvent.message = poitcloudFrame;
@@ -84844,7 +84894,7 @@ function legacy(parser) {
84844
84894
  return new LanguageSupport(StreamLanguage.define(parser));
84845
84895
  }
84846
84896
  function sql$1(dialectName) {
84847
- return import('./index-BRTt63KE.js').then(m => m.sql({ dialect: m[dialectName] }));
84897
+ return import('./index-CZSuxibZ.js').then(m => m.sql({ dialect: m[dialectName] }));
84848
84898
  }
84849
84899
  /**
84850
84900
  An array of language descriptions for known language packages.
@@ -84855,7 +84905,7 @@ const languages = [
84855
84905
  name: "C",
84856
84906
  extensions: ["c", "h", "ino"],
84857
84907
  load() {
84858
- return import('./index-WMQ28NAM.js').then(m => m.cpp());
84908
+ return import('./index-DLQIVtvt.js').then(m => m.cpp());
84859
84909
  }
84860
84910
  }),
84861
84911
  /*@__PURE__*/LanguageDescription.of({
@@ -84863,7 +84913,7 @@ const languages = [
84863
84913
  alias: ["cpp"],
84864
84914
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
84865
84915
  load() {
84866
- return import('./index-WMQ28NAM.js').then(m => m.cpp());
84916
+ return import('./index-DLQIVtvt.js').then(m => m.cpp());
84867
84917
  }
84868
84918
  }),
84869
84919
  /*@__PURE__*/LanguageDescription.of({
@@ -84883,7 +84933,7 @@ const languages = [
84883
84933
  name: "Go",
84884
84934
  extensions: ["go"],
84885
84935
  load() {
84886
- return import('./index-hFI4BOol.js').then(m => m.go());
84936
+ return import('./index-DklUsnK1.js').then(m => m.go());
84887
84937
  }
84888
84938
  }),
84889
84939
  /*@__PURE__*/LanguageDescription.of({
@@ -84898,7 +84948,7 @@ const languages = [
84898
84948
  name: "Java",
84899
84949
  extensions: ["java"],
84900
84950
  load() {
84901
- return import('./index-CZ83vGC_.js').then(m => m.java());
84951
+ return import('./index-Bph0s4yC.js').then(m => m.java());
84902
84952
  }
84903
84953
  }),
84904
84954
  /*@__PURE__*/LanguageDescription.of({
@@ -84914,7 +84964,7 @@ const languages = [
84914
84964
  alias: ["json5"],
84915
84965
  extensions: ["json", "map"],
84916
84966
  load() {
84917
- return import('./index-Cn-9uas1.js').then(m => m.json());
84967
+ return import('./index-DNybfi0p.js').then(m => m.json());
84918
84968
  }
84919
84969
  }),
84920
84970
  /*@__PURE__*/LanguageDescription.of({
@@ -84928,14 +84978,14 @@ const languages = [
84928
84978
  name: "LESS",
84929
84979
  extensions: ["less"],
84930
84980
  load() {
84931
- return import('./index-CWyWOStx.js').then(m => m.less());
84981
+ return import('./index-B7_AQKK_.js').then(m => m.less());
84932
84982
  }
84933
84983
  }),
84934
84984
  /*@__PURE__*/LanguageDescription.of({
84935
84985
  name: "Liquid",
84936
84986
  extensions: ["liquid"],
84937
84987
  load() {
84938
- return import('./index-B-Q9SHDe.js').then(m => m.liquid());
84988
+ return import('./index-CwDMLOCh.js').then(m => m.liquid());
84939
84989
  }
84940
84990
  }),
84941
84991
  /*@__PURE__*/LanguageDescription.of({
@@ -84961,7 +85011,7 @@ const languages = [
84961
85011
  name: "PHP",
84962
85012
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
84963
85013
  load() {
84964
- return import('./index-BY93INKj.js').then(m => m.php());
85014
+ return import('./index-Dr1IjG1N.js').then(m => m.php());
84965
85015
  }
84966
85016
  }),
84967
85017
  /*@__PURE__*/LanguageDescription.of({
@@ -84978,28 +85028,28 @@ const languages = [
84978
85028
  extensions: ["BUILD", "bzl", "py", "pyw"],
84979
85029
  filename: /^(BUCK|BUILD)$/,
84980
85030
  load() {
84981
- return import('./index-DD1GBu5y.js').then(m => m.python());
85031
+ return import('./index-BpeL_ibo.js').then(m => m.python());
84982
85032
  }
84983
85033
  }),
84984
85034
  /*@__PURE__*/LanguageDescription.of({
84985
85035
  name: "Rust",
84986
85036
  extensions: ["rs"],
84987
85037
  load() {
84988
- return import('./index-DQCgeYB2.js').then(m => m.rust());
85038
+ return import('./index-hDQVp6bN.js').then(m => m.rust());
84989
85039
  }
84990
85040
  }),
84991
85041
  /*@__PURE__*/LanguageDescription.of({
84992
85042
  name: "Sass",
84993
85043
  extensions: ["sass"],
84994
85044
  load() {
84995
- return import('./index-Bw0wb_7x.js').then(m => m.sass({ indented: true }));
85045
+ return import('./index-XP-Bj_XI.js').then(m => m.sass({ indented: true }));
84996
85046
  }
84997
85047
  }),
84998
85048
  /*@__PURE__*/LanguageDescription.of({
84999
85049
  name: "SCSS",
85000
85050
  extensions: ["scss"],
85001
85051
  load() {
85002
- return import('./index-Bw0wb_7x.js').then(m => m.sass());
85052
+ return import('./index-XP-Bj_XI.js').then(m => m.sass());
85003
85053
  }
85004
85054
  }),
85005
85055
  /*@__PURE__*/LanguageDescription.of({
@@ -85030,7 +85080,7 @@ const languages = [
85030
85080
  name: "WebAssembly",
85031
85081
  extensions: ["wat", "wast"],
85032
85082
  load() {
85033
- return import('./index-ClVSD2eR.js').then(m => m.wast());
85083
+ return import('./index-BYimCKrW.js').then(m => m.wast());
85034
85084
  }
85035
85085
  }),
85036
85086
  /*@__PURE__*/LanguageDescription.of({
@@ -85038,7 +85088,7 @@ const languages = [
85038
85088
  alias: ["rss", "wsdl", "xsd"],
85039
85089
  extensions: ["xml", "xsl", "xsd", "svg"],
85040
85090
  load() {
85041
- return import('./index-DuOl-R4e.js').then(m => m.xml());
85091
+ return import('./index-Eif4QzE4.js').then(m => m.xml());
85042
85092
  }
85043
85093
  }),
85044
85094
  /*@__PURE__*/LanguageDescription.of({
@@ -85046,7 +85096,7 @@ const languages = [
85046
85096
  alias: ["yml"],
85047
85097
  extensions: ["yaml", "yml"],
85048
85098
  load() {
85049
- return import('./index-lMTiVIpT.js').then(m => m.yaml());
85099
+ return import('./index-DNFBslJY.js').then(m => m.yaml());
85050
85100
  }
85051
85101
  }),
85052
85102
  // Legacy modes ported from CodeMirror 5
@@ -85842,13 +85892,13 @@ const languages = [
85842
85892
  name: "Vue",
85843
85893
  extensions: ["vue"],
85844
85894
  load() {
85845
- return import('./index-B_wE-TAZ.js').then(m => m.vue());
85895
+ return import('./index-BfRMsy3f.js').then(m => m.vue());
85846
85896
  }
85847
85897
  }),
85848
85898
  /*@__PURE__*/LanguageDescription.of({
85849
85899
  name: "Angular Template",
85850
85900
  load() {
85851
- return import('./index-IroDl_1U.js').then(m => m.angular());
85901
+ return import('./index-D6Dyzzev.js').then(m => m.angular());
85852
85902
  }
85853
85903
  })
85854
85904
  ];
@@ -156780,14 +156830,11 @@ const PanelToolbar = ({
156780
156830
  }, /*#__PURE__*/React__default.createElement(SubHeader, {
156781
156831
  text: nameWithResolution
156782
156832
  }), /*#__PURE__*/React__default.createElement(Button, {
156783
- variant: "outline",
156784
- colorVariant: "white",
156785
- size: "xs",
156786
- p: "2",
156787
156833
  icon: MdClose,
156788
- onClick: () => {
156789
- toggleTopic?.(name);
156790
- }
156834
+ variant: "ghost",
156835
+ colorVariant: "white",
156836
+ size: "sm",
156837
+ onClick: () => toggleTopic?.(name)
156791
156838
  })), /*#__PURE__*/React__default.createElement(Flex, {
156792
156839
  direction: "row",
156793
156840
  gap: "sm",
@@ -156805,6 +156852,8 @@ const PanelToolbar = ({
156805
156852
  text: `Network: ${metrics.incomingMessagesFps === 0 ? '-' : metrics.incomingMessagesFps} FPS`
156806
156853
  }), metrics?.decodedMessagesFps !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
156807
156854
  text: `Decoding: ${metrics.decodedMessagesFps === 0 ? '-' : metrics.decodedMessagesFps} FPS`
156855
+ }), metrics?.messageThroughput !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
156856
+ text: `Throughput: ${metrics.messageThroughput === 0 ? '-' : metrics.messageThroughput} MB`
156808
156857
  }), renderedFps !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
156809
156858
  text: `Rendering: ${renderedFps === 0 ? '-' : renderedFps} FPS`
156810
156859
  }), eventLoopDelay !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
@@ -156953,7 +157002,7 @@ function createRenderDelaySampler() {
156953
157002
  };
156954
157003
  }
156955
157004
 
156956
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-hGphzS2C.js'));
157005
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-B5bnTrz3.js'));
156957
157006
  const ImagePanelBody = ({
156958
157007
  topic,
156959
157008
  frameRenderedEvent
@@ -156986,7 +157035,7 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
156986
157035
  addFrameTime
156987
157036
  } = createRenderDelaySampler();
156988
157037
  React__default.useEffect(() => {
156989
- renderedFpsMetricsManagerRef.current = new MetricsManager();
157038
+ renderedFpsMetricsManagerRef.current = new EventMetricsManager();
156990
157039
  }, []);
156991
157040
 
156992
157041
  // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
@@ -157022,13 +157071,24 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
157022
157071
  // License, v2.0. If a copy of the MPL was not distributed with this
157023
157072
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
157024
157073
 
157025
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-C1DjWsph.js'));
157074
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CmON-FIE.js'));
157026
157075
  const PointCloudPanelBody = ({
157027
157076
  topic,
157028
157077
  frameRenderedEvent
157029
157078
  }) => {
157030
- const neuralCameraIntrinsics = JSON.parse(localStorage.getItem("neuralCameraIntrinsics") ?? "{}");
157031
- const fovy = 2 * Math.atan(neuralCameraIntrinsics.right.principalPoint.y / neuralCameraIntrinsics.right.focalLenght.y) * (180 / Math.PI);
157079
+ const neuralCameraIntrinsicsData = localStorage.getItem("neuralCameraIntrinsics");
157080
+ const getFovy = React__default.useCallback(() => {
157081
+ try {
157082
+ const neuralCameraIntrinsics = JSON.parse(neuralCameraIntrinsicsData ?? "");
157083
+ if (neuralCameraIntrinsics) {
157084
+ const fovy = 2 * Math.atan(neuralCameraIntrinsics.right.principalPoint.y / neuralCameraIntrinsics.right.focalLenght.y) * (180 / Math.PI);
157085
+ return fovy;
157086
+ }
157087
+ return 45;
157088
+ } catch (error) {
157089
+ return 45;
157090
+ }
157091
+ }, [neuralCameraIntrinsicsData]);
157032
157092
  const defaultConfig = React__default.useMemo(() => ({
157033
157093
  topics: {
157034
157094
  [topic]: {
@@ -157047,15 +157107,14 @@ const PointCloudPanelBody = ({
157047
157107
  targetOffset: [0, 0, 0],
157048
157108
  targetOrientation: [0, 0, 0, 1],
157049
157109
  thetaOffset: 0,
157050
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
157051
- fovy: fovy ?? 45,
157110
+ fovy: getFovy(),
157052
157111
  near: 100,
157053
157112
  far: 10000
157054
157113
  },
157055
157114
  imageMode: {
157056
157115
  colorMode: "rgba-fields"
157057
157116
  }
157058
- }), [fovy, topic]);
157117
+ }), [getFovy, topic]);
157059
157118
  return /*#__PURE__*/React__default.createElement(ThreeDeeRenderComponent, {
157060
157119
  overrideConfig: defaultConfig,
157061
157120
  frameRenderedEvent: frameRenderedEvent
@@ -157074,7 +157133,7 @@ const PointCloudPanel = /*#__PURE__*/React__default.memo(function PointCloudPane
157074
157133
  addFrameTime
157075
157134
  } = createRenderDelaySampler();
157076
157135
  React__default.useEffect(() => {
157077
- renderedFpsMetricsManagerRef.current = new MetricsManager();
157136
+ renderedFpsMetricsManagerRef.current = new EventMetricsManager();
157078
157137
  }, []);
157079
157138
 
157080
157139
  // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
@@ -1,11 +1,12 @@
1
- import { J as indentNodeProp, K as continuedIndent, M as foldNodeProp, N as styleTags, O as tags, Q as LRLanguage, T as LanguageSupport, U as ExternalTokenizer, V as LRParser, X as ifNotIn, Y as completeFromList, Z as syntaxTree } from './index-DHft_1uY.js';
2
- import './tslib.es6-D1dICxG6.js';
3
- import './comlink-DHMAu6X7.js';
1
+ import { J as indentNodeProp, K as continuedIndent, M as foldNodeProp, N as styleTags, O as tags, Q as LRLanguage, T as LanguageSupport, U as ExternalTokenizer, V as LRParser, X as ifNotIn, Y as completeFromList, Z as syntaxTree } from './index-C4JrCXqa.js';
2
+ import './tslib.es6-C73eoP_E.js';
4
3
  import 'react';
5
4
  import 'react-mosaic-component';
6
5
  import './_commonjsHelpers-E-ZsRS8r.js';
7
6
  import '@mui/material';
8
7
  import './isArrayLikeObject-Bytw9p-q.js';
8
+ import './utils-Cmsz3FxA.js';
9
+ import './comlink-DHMAu6X7.js';
9
10
  import './FoxgloveServer-C39Uooyk.js';
10
11
  import 'ms';
11
12
  import './foxglove-protocol-CYoMweAY.js';
@@ -1,11 +1,11 @@
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 { V as isSymbol, W as toString, X as keys, Y as getSymbols$1, Z as stubArray, $ as arrayPush, a0 as baseGetAllKeys, g as getTag, a1 as getAllKeys, l as baseGet, c as baseIteratee, k as castPath, t as toKey, a2 as arrayMap$1, a3 as baseUniq, b as baseFlatten, a4 as useMustNotChange, a5 as useCurrentLayoutActions, a6 as useCurrentLayoutSelector, r as reportError, A as AppError, L as Logger, u as useGuaranteedContext, a7 as usePanelMosaicId, a8 as useSelectedPanels, a9 as PANEL_TITLE_CONFIG_KEY, aa as noop$4, p as getPanelTypeFromId, N as useShallowMemo, T as TAB_PANEL_TYPE, K as filterMap, d as dist$3, ab as useAppConfiguration, ac as useValueChangedDebugLog, ad as useJsonTreeTheme } from './tslib.es6-D1dICxG6.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$3, 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 } from './index-DHft_1uY.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 } from './index-C4JrCXqa.js';
7
7
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
8
- import { t as typescript } from './useMessageReducer--GRvgQq6.js';
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';
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, alertClasses, darken, lighten, inputBaseClasses, autocompleteClasses, inputClasses, Checkbox, dialogActionsClasses, filledInputClasses, inputAdornmentClasses, listSubheaderClasses, selectClasses, tableCellClasses, ThemeProvider as ThemeProvider$1, SvgIcon, tabsClasses as tabsClasses$1, tabClasses, Tabs, Tab, ListItemIcon } from '@mui/material';
11
11
  import { c as copyObject, k as keysIn, g as getPrototype, d as cloneArrayBuffer, e as cloneTypedArray, f as copyArray, h as cloneBuffer, j as initCloneObject, a as assignValue, b as baseAssignValue, l as isPlainObject$1, t as tinycolor, n as t$1, m as merge$1, i as instance } from './i18next-IYI3-Nuv.js';
@@ -24,6 +24,7 @@ import { E as EventEmitter } from './FoxgloveServer-C39Uooyk.js';
24
24
  import require$$1$3 from 'color';
25
25
  import require$$2$1 from 'lodash.curry';
26
26
  import OpenInNewIcon from '@mui/icons-material/OpenInNew';
27
+ import './utils-Cmsz3FxA.js';
27
28
  import './comlink-DHMAu6X7.js';
28
29
  import './foxglove-protocol-CYoMweAY.js';
29
30
  import 'react-dnd-html5-backend';