@luxonis/visualizer-protobuf 1.8.8 → 1.10.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 (76) hide show
  1. package/dist/apps/depthai-visualizer/src/components/Panel.d.ts.map +1 -1
  2. package/dist/apps/depthai-visualizer/src/components/Panel.js.map +1 -1
  3. package/dist/apps/depthai-visualizer/src/components/PanelToolbar.d.ts.map +1 -1
  4. package/dist/apps/depthai-visualizer/src/components/PanelToolbar.js +14 -1
  5. package/dist/apps/depthai-visualizer/src/components/PanelToolbar.js.map +1 -1
  6. package/dist/apps/depthai-visualizer/src/connection/BaseConnection.d.ts +10 -3
  7. package/dist/apps/depthai-visualizer/src/connection/BaseConnection.d.ts.map +1 -1
  8. package/dist/apps/depthai-visualizer/src/connection/BaseConnection.js +23 -38
  9. package/dist/apps/depthai-visualizer/src/connection/BaseConnection.js.map +1 -1
  10. package/dist/apps/depthai-visualizer/src/connection/ws/Connection.d.ts.map +1 -1
  11. package/dist/apps/depthai-visualizer/src/connection/ws/Connection.js +1 -2
  12. package/dist/apps/depthai-visualizer/src/connection/ws/Connection.js.map +1 -1
  13. package/dist/apps/depthai-visualizer/src/context/ConnectionsProvider.d.ts +4 -0
  14. package/dist/apps/depthai-visualizer/src/context/ConnectionsProvider.d.ts.map +1 -0
  15. package/dist/apps/depthai-visualizer/src/context/ConnectionsProvider.js +4 -0
  16. package/dist/apps/depthai-visualizer/src/context/ConnectionsProvider.js.map +1 -0
  17. package/dist/apps/depthai-visualizer/src/context/MessagePipelineProvider.d.ts +1 -4
  18. package/dist/apps/depthai-visualizer/src/context/MessagePipelineProvider.d.ts.map +1 -1
  19. package/dist/apps/depthai-visualizer/src/context/MessagePipelineProvider.js +3 -2
  20. package/dist/apps/depthai-visualizer/src/context/MessagePipelineProvider.js.map +1 -1
  21. package/dist/apps/depthai-visualizer/src/context/VisualizerContext.d.ts.map +1 -1
  22. package/dist/apps/depthai-visualizer/src/context/VisualizerContext.js +3 -1
  23. package/dist/apps/depthai-visualizer/src/context/VisualizerContext.js.map +1 -1
  24. package/dist/apps/depthai-visualizer/src/messaging/deserialization/pointcloud/point-cloud.d.ts.map +1 -1
  25. package/dist/apps/depthai-visualizer/src/messaging/deserialization/pointcloud/point-cloud.js +5 -1
  26. package/dist/apps/depthai-visualizer/src/messaging/deserialization/pointcloud/point-cloud.js.map +1 -1
  27. package/dist/apps/depthai-visualizer/src/panels/ImagePanel.d.ts +4 -2
  28. package/dist/apps/depthai-visualizer/src/panels/ImagePanel.d.ts.map +1 -1
  29. package/dist/apps/depthai-visualizer/src/panels/ImagePanel.js.map +1 -1
  30. package/dist/apps/depthai-visualizer/src/protobuf.generated/EncodedFrame.d.ts +2 -1
  31. package/dist/apps/depthai-visualizer/src/protobuf.generated/EncodedFrame.d.ts.map +1 -1
  32. package/dist/apps/depthai-visualizer/src/protobuf.generated/EncodedFrame.js +19 -2
  33. package/dist/apps/depthai-visualizer/src/protobuf.generated/EncodedFrame.js.map +1 -1
  34. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgDetections.d.ts +2 -1
  35. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgDetections.d.ts.map +1 -1
  36. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgDetections.js +18 -2
  37. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgDetections.js.map +1 -1
  38. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgFrame.d.ts +2 -2
  39. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgFrame.d.ts.map +1 -1
  40. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgFrame.js +10 -10
  41. package/dist/apps/depthai-visualizer/src/protobuf.generated/ImgFrame.js.map +1 -1
  42. package/dist/apps/depthai-visualizer/src/protobuf.generated/SpatialImgDetections.d.ts +2 -1
  43. package/dist/apps/depthai-visualizer/src/protobuf.generated/SpatialImgDetections.d.ts.map +1 -1
  44. package/dist/apps/depthai-visualizer/src/protobuf.generated/SpatialImgDetections.js +18 -2
  45. package/dist/apps/depthai-visualizer/src/protobuf.generated/SpatialImgDetections.js.map +1 -1
  46. package/dist/apps/depthai-visualizer/src/protobuf.generated/common.d.ts +14 -36
  47. package/dist/apps/depthai-visualizer/src/protobuf.generated/common.d.ts.map +1 -1
  48. package/dist/apps/depthai-visualizer/src/protobuf.generated/common.js +100 -280
  49. package/dist/apps/depthai-visualizer/src/protobuf.generated/common.js.map +1 -1
  50. package/dist/apps/depthai-visualizer/src/utils/metrics-manager.d.ts +6 -0
  51. package/dist/apps/depthai-visualizer/src/utils/metrics-manager.d.ts.map +1 -0
  52. package/dist/apps/depthai-visualizer/src/utils/metrics-manager.js +25 -0
  53. package/dist/apps/depthai-visualizer/src/utils/metrics-manager.js.map +1 -0
  54. package/dist/{index-DAPJpbdc.js → index-B90SOlyW.js} +2 -2
  55. package/dist/{index-lDSplInz.js → index-BC0mvy9n.js} +2 -2
  56. package/dist/{index-DlKZDt0v.js → index-BHB02ggP.js} +2 -2
  57. package/dist/{index-ovt0UKFi.js → index-BKL2MC-f.js} +2 -2
  58. package/dist/{index-Bpjac43y.js → index-BiY9B9Hp.js} +2 -2
  59. package/dist/{index-CbLiW7lk.js → index-Bw-Q_7-v.js} +2 -2
  60. package/dist/{index-Cl5tDqdc.js → index-Bw8PEeXU.js} +2 -2
  61. package/dist/{index-BBXW7Wxj.js → index-C_gk0bw5.js} +112 -73
  62. package/dist/{index-DkQzCBNS.js → index-CgAqNIiJ.js} +2 -2
  63. package/dist/{index-zKmjws_7.js → index-Cngl5F-F.js} +2 -2
  64. package/dist/{index-DUnP2Xma.js → index-CuGn8iKw.js} +3 -3
  65. package/dist/{index-DCbNqqQc.js → index-DHbA32BQ.js} +2 -2
  66. package/dist/{index-QEJn3K9v.js → index-DMZhlvho.js} +2 -2
  67. package/dist/{index-0Q6EqxBW.js → index-DhuAGhcS.js} +2 -2
  68. package/dist/{index-CF21cEJo.js → index-DuGBc6J-.js} +2 -2
  69. package/dist/{index-W-M5T20d.js → index-EvfybjSU.js} +2 -2
  70. package/dist/{index-pNYe-U8V.js → index-LU4UNxxi.js} +2 -2
  71. package/dist/{index-H6bxF3CN.js → index-N0R0IEbS.js} +2 -2
  72. package/dist/{index-F8-9liAo.js → index-p-TovfmA.js} +2 -2
  73. package/dist/index.js +2 -2
  74. package/dist/{worker-D2k1TTky.js → worker-ChM3ax4q.js} +1 -1
  75. package/dist/{worker-utils-Jii8lIsy.js → worker-utils-wwKCGQOc.js} +149 -292
  76. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ export class MetricsManager {
2
+ metrics = {};
3
+ registerEvent(topic) {
4
+ const currentTime = performance.now();
5
+ this.metrics[topic] ??= [];
6
+ this.metrics[topic].unshift(currentTime);
7
+ this.metrics[topic].length = 100;
8
+ }
9
+ calculate(topic) {
10
+ const topicMetrics = this.metrics[topic];
11
+ if (!topicMetrics) {
12
+ return 0;
13
+ }
14
+ let totalInterval = 0;
15
+ for (let i = 1; i < topicMetrics.length; ++i) {
16
+ totalInterval += topicMetrics[i - 1] - topicMetrics[i];
17
+ }
18
+ if (isNaN(totalInterval)) {
19
+ return 0;
20
+ }
21
+ const fps = 1_000 / (totalInterval / (topicMetrics.length - 1));
22
+ return Math.round(fps);
23
+ }
24
+ }
25
+ //# sourceMappingURL=metrics-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-manager.js","sourceRoot":"","sources":["../../../../../src/utils/metrics-manager.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IAClB,OAAO,GAA6B,EAAE,CAAC;IAEvC,aAAa,CAAC,KAAa;QAChC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,MAAM,GAAG,GAAG,CAAC;IACpC,CAAC;IAEM,SAAS,CAAC,KAAa;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7C,aAAa,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;QAC3D,CAAC;QAED,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,aAAa,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import { au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, aK as html, at as LanguageSupport, aL as parseMixed } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, aK as html, at as LanguageSupport, aL as parseMixed } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { au as ExternalTokenizer, aC as ContextTracker, aq as styleTags, ar as tags, av as LRParser, ay as syntaxTree, aw as ifNotIn, as as LRLanguage, an as indentNodeProp, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport, aF as IterMode, ax as completeFromList, aG as NodeWeakMap, aE as snippetCompletion } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { au as ExternalTokenizer, aC as ContextTracker, aq as styleTags, ar as tags, av as LRParser, ay as syntaxTree, aw as ifNotIn, as as LRLanguage, an as indentNodeProp, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport, aF as IterMode, ax as completeFromList, aG as NodeWeakMap, aE as snippetCompletion } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aq as styleTags, ar as tags, aN as javascriptLanguage, as as LRLanguage, at as LanguageSupport, av as LRParser, aK as html, aL as parseMixed, au as ExternalTokenizer } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aq as styleTags, ar as tags, aN as javascriptLanguage, as as LRLanguage, at as LanguageSupport, av as LRParser, aK as html, aL as parseMixed, au as ExternalTokenizer } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aC as ContextTracker, au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ap as foldNodeProp, aM as bracketMatchingHandle, at as LanguageSupport, aI as EditorView, ay as syntaxTree, aJ as EditorSelection } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aC as ContextTracker, au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ap as foldNodeProp, aM as bracketMatchingHandle, at as LanguageSupport, aI as EditorView, ay as syntaxTree, aJ as EditorSelection } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aC as ContextTracker, au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport, aL as parseMixed } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aC as ContextTracker, au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport, aL as parseMixed } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, az as flatIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, az as flatIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,4 +1,4 @@
1
- import { c as commonjsGlobal, g as getAugmentedNamespace, a as getDefaultExportFromCjs, T as Type$1, P as PointsAnnotationType$2, b as Profile, p as protobufsBySchema } from './worker-utils-Jii8lIsy.js';
1
+ import { c as commonjsGlobal, g as getAugmentedNamespace, a as getDefaultExportFromCjs, T as Type$1, P as PointsAnnotationType$2, b as Profile, p as protobufsBySchema } from './worker-utils-wwKCGQOc.js';
2
2
  import * as React$1 from 'react';
3
3
  import React__default, { useContext, useRef, useLayoutEffect, createContext, useReducer, useState, useCallback, useMemo, forwardRef, createElement, Component, useEffect, Children, isValidElement, cloneElement, Fragment, useImperativeHandle, Suspense } from 'react';
4
4
  import { createStore, useStore } from 'zustand';
@@ -182,7 +182,7 @@ class Adapter extends EventTarget {
182
182
  constructor(wsUrl, worker) {
183
183
  super();
184
184
  this.url = wsUrl;
185
- this.#worker = worker ?? new Worker(new URL("worker-D2k1TTky.js", import.meta.url), {
185
+ this.#worker = worker ?? new Worker(new URL("worker-ChM3ax4q.js", import.meta.url), {
186
186
  type: "module"
187
187
  });
188
188
  this.#handleMessageEvents();
@@ -11395,6 +11395,22 @@ function deserializePointCloudData({
11395
11395
  }],
11396
11396
  data: message.data
11397
11397
  };
11398
+ if (message.color) {
11399
+ foxgloveMessage.fields.push({
11400
+ name: "red",
11401
+ offset: 12,
11402
+ type: typescript$1.NumericType.UINT8
11403
+ }, {
11404
+ name: "green",
11405
+ offset: 13,
11406
+ type: typescript$1.NumericType.UINT8
11407
+ }, {
11408
+ name: "blue",
11409
+ offset: 14,
11410
+ type: typescript$1.NumericType.UINT8
11411
+ });
11412
+ foxgloveMessage.point_stride = 15;
11413
+ }
11398
11414
  callback({
11399
11415
  topic,
11400
11416
  receiveTime,
@@ -11632,11 +11648,35 @@ function createMessageHandler(callback) {
11632
11648
  };
11633
11649
  }
11634
11650
 
11651
+ class MetricsManager {
11652
+ metrics = {};
11653
+ registerEvent(topic) {
11654
+ const currentTime = performance.now();
11655
+ this.metrics[topic] ??= [];
11656
+ this.metrics[topic].unshift(currentTime);
11657
+ this.metrics[topic].length = 100;
11658
+ }
11659
+ calculate(topic) {
11660
+ const topicMetrics = this.metrics[topic];
11661
+ if (!topicMetrics) {
11662
+ return 0;
11663
+ }
11664
+ let totalInterval = 0;
11665
+ for (let i = 1; i < topicMetrics.length; ++i) {
11666
+ totalInterval += topicMetrics[i - 1] - topicMetrics[i];
11667
+ }
11668
+ if (isNaN(totalInterval)) {
11669
+ return 0;
11670
+ }
11671
+ const fps = 1_000 / (totalInterval / (topicMetrics.length - 1));
11672
+ return Math.round(fps);
11673
+ }
11674
+ }
11675
+
11635
11676
  // This Source Code Form is subject to the terms of the Mozilla Public
11636
11677
  // License, v2.0. If a copy of the MPL was not distributed with this
11637
11678
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
11638
11679
 
11639
- const CURRENT_FRAME_MAXIMUM_SIZE_BYTES = 100 * 1024 * 1024;
11640
11680
  class ProblemManager {
11641
11681
  problems = [];
11642
11682
  addProblem(problem) {
@@ -11655,65 +11695,51 @@ class FoxgloveConnection {
11655
11695
  playerCapabilities = [PlayerCapabilities.playbackControl];
11656
11696
 
11657
11697
  // state options
11658
- parsedMessages = [];
11659
- parsedMessagesBytes = 0;
11698
+ messageEvent = null;
11660
11699
  receivedBytes = 0;
11661
11700
  parameters = new Map();
11662
11701
  publishedTopics = new Map();
11663
11702
  subscribedTopics = new Map();
11664
11703
  advertisedServices = new Map();
11665
11704
  problems = new ProblemManager();
11705
+ inputMetrics = new MetricsManager();
11706
+ decodeMetrics = new MetricsManager();
11666
11707
 
11667
11708
  // message handler
11668
11709
 
11669
11710
  topics = {};
11670
11711
  constructor(id) {
11671
11712
  this.id = id;
11672
- this.messageHandler = createMessageHandler(this.handleMessageEvents.bind(this));
11713
+ this.messageHandler = createMessageHandler(this.handleParsedMessage.bind(this));
11673
11714
  }
11674
11715
  setListener(listener) {
11675
11716
  this.listener = listener;
11676
11717
  this.emitState();
11677
11718
  }
11719
+ getTopicMetrics(topic) {
11720
+ return {
11721
+ inputFPS: this.inputMetrics.calculate(topic),
11722
+ postDecodeFPS: this.decodeMetrics.calculate(topic)
11723
+ };
11724
+ }
11678
11725
  getCurrentTime() {
11679
11726
  return dist$1.fromMillis(Date.now());
11680
11727
  }
11681
11728
  onMessagePacket(event) {
11729
+ this.inputMetrics.registerEvent(event.data.topic);
11682
11730
  this.messageHandler.handle(event.data);
11683
11731
  }
11684
- handleMessageEvents(event) {
11732
+ handleParsedMessage(event) {
11733
+ this.decodeMetrics.registerEvent(event.topic);
11685
11734
  const messageSize = estimateObjectSize(event.message);
11686
11735
  event.sizeInBytes = messageSize;
11687
- this.parsedMessagesBytes += messageSize;
11688
- this.parsedMessages.push(event);
11689
- if (this.parsedMessagesBytes > CURRENT_FRAME_MAXIMUM_SIZE_BYTES) {
11690
- // console.debug(
11691
- // `WebSocketPlayer maximum frame size (${(
11692
- // CURRENT_FRAME_MAXIMUM_SIZE_BYTES / 1024 / 1024
11693
- // ).toFixed(
11694
- // 2,
11695
- // )}MB) reached. Dropping old messages. This accumulation can occur if the browser tab has been inactive.`,
11696
- // );
11697
-
11698
- // Amortize cost of dropping messages by dropping parsedMessages size to
11699
- // 80% so that it doesn't happen for every message after reaching the limit
11700
- const evictUntilSize = 0.8 * CURRENT_FRAME_MAXIMUM_SIZE_BYTES;
11701
- let droppedBytes = 0;
11702
- let indexToCutBefore = 0;
11703
- while (this.parsedMessagesBytes - droppedBytes > evictUntilSize) {
11704
- droppedBytes += this.parsedMessages[indexToCutBefore].sizeInBytes;
11705
- indexToCutBefore++;
11706
- }
11707
- this.parsedMessages.splice(0, indexToCutBefore);
11708
- this.parsedMessagesBytes -= droppedBytes;
11709
- }
11736
+ this.messageEvent = event;
11710
11737
  this.emitState();
11711
11738
  }
11712
11739
  emitState = debouncePromise(async () => {
11713
- const messages = this.parsedMessages;
11714
- this.parsedMessages = [];
11715
- this.parsedMessagesBytes = 0;
11716
- if (!this.listener) {
11740
+ const message = this.messageEvent;
11741
+ this.messageEvent = null;
11742
+ if (!this.listener || !message) {
11717
11743
  await Promise.resolve();
11718
11744
  return;
11719
11745
  }
@@ -11726,12 +11752,10 @@ class FoxgloveConnection {
11726
11752
  }
11727
11753
  const problems = this.problems.getProblems();
11728
11754
  this.problems.clearProblems();
11729
- for (const message of messages) {
11730
- this.topics[message.topic] = {
11731
- name: message.topic,
11732
- schemaName: message.schemaName
11733
- };
11734
- }
11755
+ this.topics[message.topic] = {
11756
+ name: message.topic,
11757
+ schemaName: message.schemaName
11758
+ };
11735
11759
  const newPlayerState = {
11736
11760
  name: this.id,
11737
11761
  presence: this.playerPresence,
@@ -11742,7 +11766,7 @@ class FoxgloveConnection {
11742
11766
  problems,
11743
11767
  urlState: undefined,
11744
11768
  activeData: {
11745
- messages,
11769
+ messages: [message],
11746
11770
  totalBytesReceived: this.receivedBytes,
11747
11771
  startTime: this.startTime,
11748
11772
  endTime: this.endTime,
@@ -11802,8 +11826,7 @@ class WebSocketConnection extends BaseConnection {
11802
11826
  this.emitState();
11803
11827
  };
11804
11828
  #onError = _event => {
11805
- this.parsedMessages = [];
11806
- this.parsedMessagesBytes = 0;
11829
+ this.messageEvent = null;
11807
11830
  this.playerPresence = PlayerPresence.ERROR;
11808
11831
  this.emitState();
11809
11832
  };
@@ -19177,13 +19200,14 @@ function WorkspaceContextProvider(props) {
19177
19200
  }, children);
19178
19201
  }
19179
19202
 
19203
+ const Context$2 = React__default.createContext([]);
19204
+ const ConnectionsProvider = Context$2.Provider;
19205
+ const useConnections = () => React__default.useContext(Context$2);
19206
+
19180
19207
  const selectRenderDone = state => state.renderDone;
19181
19208
  function MessagePipelineProvider(props) {
19209
+ const connections = useConnections();
19182
19210
  const promisesToWaitForRef = useRef([]);
19183
- const {
19184
- children,
19185
- connections
19186
- } = props;
19187
19211
  const store = useMemo(() => {
19188
19212
  return createMessagePipelineStore({
19189
19213
  promisesToWaitForRef,
@@ -19221,7 +19245,7 @@ function MessagePipelineProvider(props) {
19221
19245
  }, [connections, store]);
19222
19246
  return /*#__PURE__*/React__default.createElement(ContextInternal.Provider, {
19223
19247
  value: store
19224
- }, children);
19248
+ }, props.children);
19225
19249
  }
19226
19250
  function createMessageListener(args) {
19227
19251
  const {
@@ -19374,19 +19398,21 @@ const VisualizerContext = /*#__PURE__*/React__default.memo(function VisualizerCo
19374
19398
  return undefined;
19375
19399
  }
19376
19400
  };
19401
+
19402
+ // TODO: Simplify
19377
19403
  return /*#__PURE__*/React__default.createElement(AppConfigurationContext.Provider, {
19378
19404
  value: appConfiguration
19379
19405
  }, /*#__PURE__*/React__default.createElement(DndProvider, {
19380
19406
  backend: HTML5Backend
19381
- }, /*#__PURE__*/React__default.createElement(WorkspaceContextProvider, null, /*#__PURE__*/React__default.createElement(GlobalCss, null), /*#__PURE__*/React__default.createElement(CssBaseline, null, /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(TimelineInteractionStateProvider, null, /*#__PURE__*/React__default.createElement(CurrentLayoutProvider, null, /*#__PURE__*/React__default.createElement(MessagePipelineProvider, {
19382
- connections: connections
19383
- }, /*#__PURE__*/React__default.createElement(EventsProvider, null, /*#__PURE__*/React__default.createElement(MosaicContext.Provider, {
19407
+ }, /*#__PURE__*/React__default.createElement(WorkspaceContextProvider, null, /*#__PURE__*/React__default.createElement(GlobalCss, null), /*#__PURE__*/React__default.createElement(CssBaseline, null, /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(TimelineInteractionStateProvider, null, /*#__PURE__*/React__default.createElement(CurrentLayoutProvider, null, /*#__PURE__*/React__default.createElement(ConnectionsProvider, {
19408
+ value: connections
19409
+ }, /*#__PURE__*/React__default.createElement(MessagePipelineProvider, null, /*#__PURE__*/React__default.createElement(EventsProvider, null, /*#__PURE__*/React__default.createElement(MosaicContext.Provider, {
19384
19410
  value: mosaicContext
19385
19411
  }, /*#__PURE__*/React__default.createElement(MosaicWindowContext.Provider, {
19386
19412
  value: mosaicWindowContext
19387
19413
  }, /*#__PURE__*/React__default.createElement(PanelCatalogContext.Provider, {
19388
19414
  value: panelCatalog
19389
- }, /*#__PURE__*/React__default.createElement(PanelStateContextProvider, null, children)))))))))))));
19415
+ }, /*#__PURE__*/React__default.createElement(PanelStateContextProvider, null, children))))))))))))));
19390
19416
  });
19391
19417
 
19392
19418
  function _classCallCheck(instance, Constructor) {
@@ -82973,7 +82999,7 @@ function legacy(parser) {
82973
82999
  return new LanguageSupport(StreamLanguage.define(parser));
82974
83000
  }
82975
83001
  function sql$1(dialectName) {
82976
- return import('./index-pNYe-U8V.js').then(m => m.sql({ dialect: m[dialectName] }));
83002
+ return import('./index-LU4UNxxi.js').then(m => m.sql({ dialect: m[dialectName] }));
82977
83003
  }
82978
83004
  /**
82979
83005
  An array of language descriptions for known language packages.
@@ -82984,7 +83010,7 @@ const languages = [
82984
83010
  name: "C",
82985
83011
  extensions: ["c", "h", "ino"],
82986
83012
  load() {
82987
- return import('./index-DkQzCBNS.js').then(m => m.cpp());
83013
+ return import('./index-CgAqNIiJ.js').then(m => m.cpp());
82988
83014
  }
82989
83015
  }),
82990
83016
  /*@__PURE__*/LanguageDescription.of({
@@ -82992,7 +83018,7 @@ const languages = [
82992
83018
  alias: ["cpp"],
82993
83019
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
82994
83020
  load() {
82995
- return import('./index-DkQzCBNS.js').then(m => m.cpp());
83021
+ return import('./index-CgAqNIiJ.js').then(m => m.cpp());
82996
83022
  }
82997
83023
  }),
82998
83024
  /*@__PURE__*/LanguageDescription.of({
@@ -83012,7 +83038,7 @@ const languages = [
83012
83038
  name: "Go",
83013
83039
  extensions: ["go"],
83014
83040
  load() {
83015
- return import('./index-zKmjws_7.js').then(m => m.go());
83041
+ return import('./index-Cngl5F-F.js').then(m => m.go());
83016
83042
  }
83017
83043
  }),
83018
83044
  /*@__PURE__*/LanguageDescription.of({
@@ -83027,7 +83053,7 @@ const languages = [
83027
83053
  name: "Java",
83028
83054
  extensions: ["java"],
83029
83055
  load() {
83030
- return import('./index-Cl5tDqdc.js').then(m => m.java());
83056
+ return import('./index-Bw8PEeXU.js').then(m => m.java());
83031
83057
  }
83032
83058
  }),
83033
83059
  /*@__PURE__*/LanguageDescription.of({
@@ -83043,7 +83069,7 @@ const languages = [
83043
83069
  alias: ["json5"],
83044
83070
  extensions: ["json", "map"],
83045
83071
  load() {
83046
- return import('./index-H6bxF3CN.js').then(m => m.json());
83072
+ return import('./index-N0R0IEbS.js').then(m => m.json());
83047
83073
  }
83048
83074
  }),
83049
83075
  /*@__PURE__*/LanguageDescription.of({
@@ -83057,14 +83083,14 @@ const languages = [
83057
83083
  name: "LESS",
83058
83084
  extensions: ["less"],
83059
83085
  load() {
83060
- return import('./index-W-M5T20d.js').then(m => m.less());
83086
+ return import('./index-EvfybjSU.js').then(m => m.less());
83061
83087
  }
83062
83088
  }),
83063
83089
  /*@__PURE__*/LanguageDescription.of({
83064
83090
  name: "Liquid",
83065
83091
  extensions: ["liquid"],
83066
83092
  load() {
83067
- return import('./index-DCbNqqQc.js').then(m => m.liquid());
83093
+ return import('./index-DHbA32BQ.js').then(m => m.liquid());
83068
83094
  }
83069
83095
  }),
83070
83096
  /*@__PURE__*/LanguageDescription.of({
@@ -83090,7 +83116,7 @@ const languages = [
83090
83116
  name: "PHP",
83091
83117
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
83092
83118
  load() {
83093
- return import('./index-DAPJpbdc.js').then(m => m.php());
83119
+ return import('./index-B90SOlyW.js').then(m => m.php());
83094
83120
  }
83095
83121
  }),
83096
83122
  /*@__PURE__*/LanguageDescription.of({
@@ -83107,28 +83133,28 @@ const languages = [
83107
83133
  extensions: ["BUILD", "bzl", "py", "pyw"],
83108
83134
  filename: /^(BUCK|BUILD)$/,
83109
83135
  load() {
83110
- return import('./index-lDSplInz.js').then(m => m.python());
83136
+ return import('./index-BC0mvy9n.js').then(m => m.python());
83111
83137
  }
83112
83138
  }),
83113
83139
  /*@__PURE__*/LanguageDescription.of({
83114
83140
  name: "Rust",
83115
83141
  extensions: ["rs"],
83116
83142
  load() {
83117
- return import('./index-Bpjac43y.js').then(m => m.rust());
83143
+ return import('./index-BiY9B9Hp.js').then(m => m.rust());
83118
83144
  }
83119
83145
  }),
83120
83146
  /*@__PURE__*/LanguageDescription.of({
83121
83147
  name: "Sass",
83122
83148
  extensions: ["sass"],
83123
83149
  load() {
83124
- return import('./index-CF21cEJo.js').then(m => m.sass({ indented: true }));
83150
+ return import('./index-DuGBc6J-.js').then(m => m.sass({ indented: true }));
83125
83151
  }
83126
83152
  }),
83127
83153
  /*@__PURE__*/LanguageDescription.of({
83128
83154
  name: "SCSS",
83129
83155
  extensions: ["scss"],
83130
83156
  load() {
83131
- return import('./index-CF21cEJo.js').then(m => m.sass());
83157
+ return import('./index-DuGBc6J-.js').then(m => m.sass());
83132
83158
  }
83133
83159
  }),
83134
83160
  /*@__PURE__*/LanguageDescription.of({
@@ -83159,7 +83185,7 @@ const languages = [
83159
83185
  name: "WebAssembly",
83160
83186
  extensions: ["wat", "wast"],
83161
83187
  load() {
83162
- return import('./index-F8-9liAo.js').then(m => m.wast());
83188
+ return import('./index-p-TovfmA.js').then(m => m.wast());
83163
83189
  }
83164
83190
  }),
83165
83191
  /*@__PURE__*/LanguageDescription.of({
@@ -83167,7 +83193,7 @@ const languages = [
83167
83193
  alias: ["rss", "wsdl", "xsd"],
83168
83194
  extensions: ["xml", "xsl", "xsd", "svg"],
83169
83195
  load() {
83170
- return import('./index-ovt0UKFi.js').then(m => m.xml());
83196
+ return import('./index-BKL2MC-f.js').then(m => m.xml());
83171
83197
  }
83172
83198
  }),
83173
83199
  /*@__PURE__*/LanguageDescription.of({
@@ -83175,7 +83201,7 @@ const languages = [
83175
83201
  alias: ["yml"],
83176
83202
  extensions: ["yaml", "yml"],
83177
83203
  load() {
83178
- return import('./index-CbLiW7lk.js').then(m => m.yaml());
83204
+ return import('./index-Bw-Q_7-v.js').then(m => m.yaml());
83179
83205
  }
83180
83206
  }),
83181
83207
  // Legacy modes ported from CodeMirror 5
@@ -83971,13 +83997,13 @@ const languages = [
83971
83997
  name: "Vue",
83972
83998
  extensions: ["vue"],
83973
83999
  load() {
83974
- return import('./index-QEJn3K9v.js').then(m => m.vue());
84000
+ return import('./index-DMZhlvho.js').then(m => m.vue());
83975
84001
  }
83976
84002
  }),
83977
84003
  /*@__PURE__*/LanguageDescription.of({
83978
84004
  name: "Angular Template",
83979
84005
  load() {
83980
- return import('./index-DlKZDt0v.js').then(m => m.angular());
84006
+ return import('./index-BHB02ggP.js').then(m => m.angular());
83981
84007
  }
83982
84008
  })
83983
84009
  ];
@@ -154040,6 +154066,14 @@ const PanelToolbar = ({
154040
154066
  const {
154041
154067
  detections
154042
154068
  } = useDetections();
154069
+ const connections = useConnections();
154070
+ const [metrics, setMetrics] = React__default.useState();
154071
+ React__default.useEffect(() => {
154072
+ const interval = setInterval(() => {
154073
+ setMetrics(connections[0]?.getTopicMetrics(topic));
154074
+ }, 500);
154075
+ return () => clearInterval(interval);
154076
+ }, []);
154043
154077
  const [annotationsOpened, setAnnotationsOpened] = React__default.useState(false);
154044
154078
  const hasExtra = React__default.useMemo(() => detections.some(topic => topic.extra && !topic.enabled), [detections]);
154045
154079
  const [extraVisible, setExtraVisible] = React__default.useState(false);
@@ -154051,6 +154085,11 @@ const PanelToolbar = ({
154051
154085
  })
154052
154086
  })));
154053
154087
  }, [detections, setDetections]);
154088
+
154089
+ // TODO: show only when debug mode is ON
154090
+ const name = React__default.useMemo(() => {
154091
+ return `${topic} - ${metrics?.inputFPS || 0}/${metrics?.postDecodeFPS || 0} FPS`;
154092
+ }, [topic, metrics]);
154054
154093
  return /*#__PURE__*/React__default.createElement(Flex, {
154055
154094
  direction: "row",
154056
154095
  gap: "sm",
@@ -154060,7 +154099,7 @@ const PanelToolbar = ({
154060
154099
  paddingLeft: 16
154061
154100
  }
154062
154101
  }, /*#__PURE__*/React__default.createElement(SubHeader, {
154063
- text: topic
154102
+ text: name
154064
154103
  }), !disableAnnotations && kind === 'image' && /*#__PURE__*/React__default.createElement(DropdownMenu, {
154065
154104
  onOpenChange: setAnnotationsOpened
154066
154105
  }, /*#__PURE__*/React__default.createElement(DropdownMenuTrigger, {
@@ -154167,7 +154206,7 @@ const Panel = ({
154167
154206
  }, children))))));
154168
154207
  };
154169
154208
 
154170
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-DUnP2Xma.js'));
154209
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CuGn8iKw.js'));
154171
154210
  const ImagePanelBody = ({
154172
154211
  topic
154173
154212
  }) => {
@@ -154202,7 +154241,7 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
154202
154241
  // License, v2.0. If a copy of the MPL was not distributed with this
154203
154242
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
154204
154243
 
154205
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-0Q6EqxBW.js'));
154244
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-DhuAGhcS.js'));
154206
154245
  const PointCloudPanelBody = ({
154207
154246
  topic
154208
154247
  }) => {
@@ -1,5 +1,5 @@
1
- import { au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, az as flatIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { au as ExternalTokenizer, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, az as flatIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { au as ExternalTokenizer, aC as ContextTracker, aq as styleTags, ar as tags, av as LRParser, aD as LocalTokenGroup, aE as snippetCompletion, ay as syntaxTree, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, az as flatIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport, aw as ifNotIn, ax as completeFromList, aF as IterMode, aG as NodeWeakMap } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { au as ExternalTokenizer, aC as ContextTracker, aq as styleTags, ar as tags, av as LRParser, aD as LocalTokenGroup, aE as snippetCompletion, ay as syntaxTree, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, az as flatIndent, aA as delimitedIndent, ap as foldNodeProp, aB as foldInside, at as LanguageSupport, aw as ifNotIn, ax as completeFromList, aF as IterMode, aG as NodeWeakMap } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,8 +1,8 @@
1
- import { ImagePanel } from './index-0Q6EqxBW.js';
1
+ import { ImagePanel } from './index-DhuAGhcS.js';
2
2
  import 'react';
3
3
  import 'react-dom';
4
- import './index-BBXW7Wxj.js';
5
- import './worker-utils-Jii8lIsy.js';
4
+ import './index-C_gk0bw5.js';
5
+ import './worker-utils-wwKCGQOc.js';
6
6
  import 'hydrated-ws';
7
7
  import 'ms';
8
8
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aI as EditorView, aJ as EditorSelection, as as LRLanguage, aq as styleTags, ar as tags, an as indentNodeProp, aA as delimitedIndent, ap as foldNodeProp, at as LanguageSupport, av as LRParser, ay as syntaxTree, aK as html, aL as parseMixed, au as ExternalTokenizer } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aI as EditorView, aJ as EditorSelection, as as LRLanguage, aq as styleTags, ar as tags, an as indentNodeProp, aA as delimitedIndent, ap as foldNodeProp, at as LanguageSupport, av as LRParser, ay as syntaxTree, aK as html, aL as parseMixed, au as ExternalTokenizer } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aq as styleTags, ar as tags, as as LRLanguage, at as LanguageSupport, av as LRParser, aD as LocalTokenGroup, aK as html, aL as parseMixed, aN as javascriptLanguage } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aq as styleTags, ar as tags, as as LRLanguage, at as LanguageSupport, av as LRParser, aD as LocalTokenGroup, aK as html, aL as parseMixed, aN as javascriptLanguage } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,10 +1,10 @@
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 { i as isSymbol, t as toString, k as keys, g as getSymbols$1, s as stubArray, a as arrayPush, b as baseGetAllKeys, c as getTag, d as getAllKeys, e as createAggregator, f as baseGet, h as baseIteratee, j as castPath, l as toKey, m as flatRest, n as arrayMap$1, o as baseSet, p as baseUniq, q as baseFlatten, r as generateUtilityClass, A as AnalyticsContext, u as useMustNotChange, P as PropTypes, v as useCurrentLayoutActions, w as useCurrentLayoutSelector, x as reportError, y as AppError, E as ErrorDisplay, S as Stack$1, z as makeStyles$1, _ as _extends$1, L as Logger, B as useGuaranteedContext, W as WorkspaceContext, C as useAnalytics, D as AppEvent, F as LeftSidebarItemKeys, R as RightSidebarItemKeys, G as usePanelMosaicId, H as useTranslation, I as usePanelCatalog, J as EmptyState, K as isEmpty, M as PanelContext, N as PanelCatalogContext, O as useSelectedPanels, Q as usePanelStateStore, T as useDefaultPanelTitle, U as PANEL_TITLE_CONFIG_KEY, V as noop$4, X as getPanelTypeFromId, Y as useWorkspaceStore, Z as useShallowMemo, $ as TAB_PANEL_TYPE, a0 as WorkspaceStoreSelectors, a1 as difference, a2 as filterMap, a3 as dist$3, a4 as usePanelContext, a5 as useMessagePipeline, a6 as v4, a7 as useHoverValue, a8 as useSetHoverValue, a9 as useClearHoverValue, aa as useAppConfiguration, ab as useMessagePipelineGetter, ac as usePanelSettingsTreeUpdate, ad as PlayerCapabilities, ae as useValueChangedDebugLog, af as assertNever, ag as PlayerPresence, ah as typescript, ai as isEqual, aj as isDesktopApp, ak as createTheme, al as propTypesExports, am as useJsonTreeTheme } from './index-BBXW7Wxj.js';
4
+ import { i as isSymbol, t as toString, k as keys, g as getSymbols$1, s as stubArray, a as arrayPush, b as baseGetAllKeys, c as getTag, d as getAllKeys, e as createAggregator, f as baseGet, h as baseIteratee, j as castPath, l as toKey, m as flatRest, n as arrayMap$1, o as baseSet, p as baseUniq, q as baseFlatten, r as generateUtilityClass, A as AnalyticsContext, u as useMustNotChange, P as PropTypes, v as useCurrentLayoutActions, w as useCurrentLayoutSelector, x as reportError, y as AppError, E as ErrorDisplay, S as Stack$1, z as makeStyles$1, _ as _extends$1, L as Logger, B as useGuaranteedContext, W as WorkspaceContext, C as useAnalytics, D as AppEvent, F as LeftSidebarItemKeys, R as RightSidebarItemKeys, G as usePanelMosaicId, H as useTranslation, I as usePanelCatalog, J as EmptyState, K as isEmpty, M as PanelContext, N as PanelCatalogContext, O as useSelectedPanels, Q as usePanelStateStore, T as useDefaultPanelTitle, U as PANEL_TITLE_CONFIG_KEY, V as noop$4, X as getPanelTypeFromId, Y as useWorkspaceStore, Z as useShallowMemo, $ as TAB_PANEL_TYPE, a0 as WorkspaceStoreSelectors, a1 as difference, a2 as filterMap, a3 as dist$3, a4 as usePanelContext, a5 as useMessagePipeline, a6 as v4, a7 as useHoverValue, a8 as useSetHoverValue, a9 as useClearHoverValue, aa as useAppConfiguration, ab as useMessagePipelineGetter, ac as usePanelSettingsTreeUpdate, ad as PlayerCapabilities, ae as useValueChangedDebugLog, af as assertNever, ag as PlayerPresence, ah as typescript, ai as isEqual, aj as isDesktopApp, ak as createTheme, al as propTypesExports, am as useJsonTreeTheme } from './index-C_gk0bw5.js';
5
5
  import { createStore, useStore } from 'zustand';
6
6
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
7
- import { a as getDefaultExportFromCjs, c as commonjsGlobal, g as getAugmentedNamespace, E as EventEmitter } from './worker-utils-Jii8lIsy.js';
7
+ import { a as getDefaultExportFromCjs, c as commonjsGlobal, g as getAugmentedNamespace, E as EventEmitter } from './worker-utils-wwKCGQOc.js';
8
8
  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';
9
9
  import { p as isObject, r as root, E as copyObject, F as keysIn, G as getPrototype, H as cloneArrayBuffer, S as Symbol$1, I as cloneTypedArray, i as isObjectLike, J as nodeUtil, K as baseUnary, L as copyArray, l as isBuffer, N as cloneBuffer, O as initCloneObject, m as Stack, a as isArray, A as assignValue, z as baseAssignValue, x as baseRest, P as isPlainObject$1, y as isArrayLikeObject, B as tinycolor, Q as t$1, C as merge$1, D as instance } from './i18next-C5Qe4-E1.js';
10
10
  import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
@@ -1,5 +1,5 @@
1
- import { au as ExternalTokenizer, aC as ContextTracker, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, ap as foldNodeProp, aB as foldInside, an as indentNodeProp, ao as continuedIndent, aH as defineCSSCompletionSource, at as LanguageSupport } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { au as ExternalTokenizer, aC as ContextTracker, aq as styleTags, ar as tags, av as LRParser, as as LRLanguage, ap as foldNodeProp, aB as foldInside, an as indentNodeProp, ao as continuedIndent, aH as defineCSSCompletionSource, at as LanguageSupport } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';
@@ -1,5 +1,5 @@
1
- import { aq as styleTags, ar as tags, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, ap as foldNodeProp, aB as foldInside, aH as defineCSSCompletionSource, at as LanguageSupport, av as LRParser, au as ExternalTokenizer } from './index-BBXW7Wxj.js';
2
- import './worker-utils-Jii8lIsy.js';
1
+ import { aq as styleTags, ar as tags, as as LRLanguage, an as indentNodeProp, ao as continuedIndent, ap as foldNodeProp, aB as foldInside, aH as defineCSSCompletionSource, at as LanguageSupport, av as LRParser, au as ExternalTokenizer } from './index-C_gk0bw5.js';
2
+ import './worker-utils-wwKCGQOc.js';
3
3
  import 'hydrated-ws';
4
4
  import 'ms';
5
5
  import 'protobufjs/minimal';