@luxonis/visualizer-protobuf 2.26.0 → 2.27.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 (70) hide show
  1. package/dist/{index-Zijk5SvX.js → index-B1pNpslP.js} +1 -1
  2. package/dist/{index-CkN9fMlH.js → index-B4d7dS8a.js} +1 -1
  3. package/dist/{index-CP4Zviq2.js → index-B5_Aa-W3.js} +1 -1
  4. package/dist/{index-BTdZSETz.js → index-BNXdmaeO.js} +1 -1
  5. package/dist/{index-DMzCNF_e.js → index-BZ8z044k.js} +1 -1
  6. package/dist/{index-CPTbtbj3.js → index-BuRQ7ljn.js} +133 -105
  7. package/dist/{index-cLRC4uIT.js → index-CGXxFWjz.js} +1 -1
  8. package/dist/{index-DcFvTNvR.js → index-CIHmVsn2.js} +1 -1
  9. package/dist/{index-NiMrvEhw.js → index-CJSOG1CX.js} +2 -2
  10. package/dist/{index-BQnK1LTP.js → index-CLPc3bUH.js} +1 -1
  11. package/dist/{index-DFHs4aUN.js → index-CXdNn-IZ.js} +1 -1
  12. package/dist/{index-Cia95HmM.js → index-CdXrBVPC.js} +177 -36
  13. package/dist/{index-CqMDGXcF.js → index-DE0_tKGA.js} +1 -1
  14. package/dist/{index-ttl4cqP0.js → index-DZgY6A3h.js} +1 -1
  15. package/dist/{index-B2-O30qH.js → index-DbT8vr6l.js} +1 -1
  16. package/dist/{index-DLRgXO8y.js → index-DsO3GPWF.js} +1 -1
  17. package/dist/{index-i-2ofHyT.js → index-I0XgHBlj.js} +1 -1
  18. package/dist/{index-BGrTBljs.js → index-LmBY2nOo.js} +1 -1
  19. package/dist/{index-AHg_yzKN.js → index-pwNtzQuf.js} +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/lib/src/components/Panel.d.ts +2 -1
  22. package/dist/lib/src/components/Panel.d.ts.map +1 -1
  23. package/dist/lib/src/components/Panel.js +8 -8
  24. package/dist/lib/src/components/Panel.js.map +1 -1
  25. package/dist/lib/src/components/PanelToolbar.d.ts +1 -0
  26. package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
  27. package/dist/lib/src/components/PanelToolbar.js +9 -4
  28. package/dist/lib/src/components/PanelToolbar.js.map +1 -1
  29. package/dist/lib/src/index.d.ts +1 -0
  30. package/dist/lib/src/index.d.ts.map +1 -1
  31. package/dist/lib/src/index.js +1 -0
  32. package/dist/lib/src/index.js.map +1 -1
  33. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.d.ts.map +1 -1
  34. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.js +19 -8
  35. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.js.map +1 -1
  36. package/dist/lib/src/panels/ImagePanel.d.ts +1 -0
  37. package/dist/lib/src/panels/ImagePanel.d.ts.map +1 -1
  38. package/dist/lib/src/panels/ImagePanel.js +7 -3
  39. package/dist/lib/src/panels/ImagePanel.js.map +1 -1
  40. package/dist/lib/src/panels/PointCloudPanel.js +1 -1
  41. package/dist/lib/src/utils/metrics-manager.d.ts.map +1 -1
  42. package/dist/lib/src/utils/metrics-manager.js +6 -2
  43. package/dist/lib/src/utils/metrics-manager.js.map +1 -1
  44. package/dist/packages/studio-base/src/panels/ThreeDeeRender/IRenderer.d.ts +2 -0
  45. package/dist/packages/studio-base/src/panels/ThreeDeeRender/IRenderer.d.ts.map +1 -1
  46. package/dist/packages/studio-base/src/panels/ThreeDeeRender/IRenderer.js.map +1 -1
  47. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts +1 -0
  48. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts.map +1 -1
  49. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js +3 -0
  50. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js.map +1 -1
  51. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts +1 -0
  52. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts.map +1 -1
  53. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js +4 -3
  54. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js.map +1 -1
  55. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts +1 -0
  56. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts.map +1 -1
  57. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js +5 -3
  58. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js.map +1 -1
  59. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/CameraStateSettings.d.ts.map +1 -1
  60. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/CameraStateSettings.js +2 -1
  61. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/CameraStateSettings.js.map +1 -1
  62. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.d.ts +1 -0
  63. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.d.ts.map +1 -1
  64. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.js +4 -0
  65. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.js.map +1 -1
  66. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts +6 -2
  67. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts.map +1 -1
  68. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js +141 -25
  69. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js.map +1 -1
  70. package/package.json +1 -1
@@ -1,4 +1,4 @@
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-CPTbtbj3.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-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
1
- import { a2 as ContextTracker, U as ExternalTokenizer, N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, M as foldNodeProp, ac as bracketMatchingHandle, T as LanguageSupport, a8 as EditorView, Z as syntaxTree, a9 as EditorSelection } from './index-CPTbtbj3.js';
1
+ import { a2 as ContextTracker, U as ExternalTokenizer, N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, M as foldNodeProp, ac as bracketMatchingHandle, T as LanguageSupport, a8 as EditorView, Z as syntaxTree, a9 as EditorSelection } from './index-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
1
- import { U as ExternalTokenizer, N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport } from './index-CPTbtbj3.js';
1
+ import { U as ExternalTokenizer, N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport } from './index-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
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-CPTbtbj3.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-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
1
- import { N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport } from './index-CPTbtbj3.js';
1
+ import { N as styleTags, O as tags, V as LRParser, Q as LRLanguage, J as indentNodeProp, K as continuedIndent, M as foldNodeProp, a1 as foldInside, T as LanguageSupport } from './index-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -444,18 +444,92 @@ class Condvar {
444
444
  }
445
445
  }
446
446
 
447
+ // This Source Code Form is subject to the terms of the Mozilla Public
448
+ // License, v2.0. If a copy of the MPL was not distributed with this
449
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/
450
+
451
+ const MAX_SAMPLE_SIZE = 100;
452
+ function bytesToMegabits(bytes) {
453
+ return bytes / (1024 * 1024) * 8;
454
+ }
455
+ class EventMetricsManager {
456
+ metrics = {};
457
+ registerEvent(topic) {
458
+ const currentTime = performance.now();
459
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
460
+ this.metrics[topic] ??= [];
461
+ this.metrics[topic].unshift(currentTime);
462
+ if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
463
+ this.metrics[topic].length = MAX_SAMPLE_SIZE;
464
+ }
465
+ }
466
+ calculate(topic) {
467
+ const topicMetrics = this.metrics[topic];
468
+ if (!topicMetrics) {
469
+ return 0;
470
+ }
471
+ let totalInterval = 0;
472
+ for (let i = 1; i < topicMetrics.length; ++i) {
473
+ totalInterval += topicMetrics[i - 1] - topicMetrics[i];
474
+ }
475
+ if (isNaN(totalInterval)) {
476
+ return 0;
477
+ }
478
+ const fps = 1_000 / (totalInterval / (topicMetrics.length - 1));
479
+ return Math.round(fps);
480
+ }
481
+ }
482
+ class ThroughputMetricsManager {
483
+ metrics = {};
484
+ registerEvent(topic, value) {
485
+ const timestamp = performance.now();
486
+ this.metrics[topic] ??= [];
487
+ this.metrics[topic].unshift({
488
+ timestamp,
489
+ value
490
+ });
491
+ if (this.metrics[topic].length > MAX_SAMPLE_SIZE) {
492
+ this.metrics[topic].length = MAX_SAMPLE_SIZE;
493
+ }
494
+ }
495
+ calculate(topic) {
496
+ const topicMetrics = this.metrics[topic];
497
+ if (!topicMetrics || topicMetrics.length < 2 || !topicMetrics.at(0) || !topicMetrics.at(-1)) {
498
+ return 0;
499
+ }
500
+
501
+ // Get time span in seconds
502
+ // biome-ignore lint/style/noNonNullAssertion: <explanation>
503
+ const timeSpanMs = topicMetrics.at(0).timestamp - topicMetrics.at(-1).timestamp;
504
+ const timeSpanSec = timeSpanMs / 1000;
505
+ if (timeSpanSec === 0) {
506
+ return 0;
507
+ }
508
+
509
+ // Sum up all values (bytes)
510
+ const totalBytes = topicMetrics.reduce((sum, metric) => sum + metric.value, 0);
511
+
512
+ // Calculate bytes per second
513
+ const bytesPerSecond = totalBytes / timeSpanSec;
514
+
515
+ // Return rounded value
516
+ return Number(bytesToMegabits(bytesPerSecond).toFixed(2));
517
+ }
518
+ }
519
+
447
520
  // This Source Code Form is subject to the terms of the Mozilla Public
448
521
  // License, v2.0. If a copy of the MPL was not distributed with this
449
522
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
450
523
  /* eslint-disable @foxglove/strict-equality */
451
524
  const WORKER_COUNT = 4;
452
- const DEFAULT_TARGET_FPS = 25;
453
- const DEFAULT_MAX_PROCESSED_QUEUE_SIZE = 60;
525
+ const DEFAULT_TARGET_FPS = 9;
526
+ const DEFAULT_MAX_PROCESSED_QUEUE_SIZE = 100;
454
527
  class DepthToPointcloudWorkerPool {
455
528
  lastUsedWorkerIndex = 0;
456
529
  #frameQueue = [];
457
530
  #processedFrameQueue = [];
458
531
  #isWebGpuSupported = false;
532
+ #metrics;
459
533
  #FRAME_BATCH_SIZE;
460
534
  #targetDispatchIntervalMs;
461
535
  #maxProcessedQueueSize;
@@ -470,7 +544,7 @@ class DepthToPointcloudWorkerPool {
470
544
  console.warn("WebGPU adapter not found. Falling back to CPU for all frames.");
471
545
  } else {
472
546
  this.#isWebGpuSupported = true;
473
- // console.info("WebGPU potentially supported. Will attempt GPU processing."); // Console log removed as per no-comment request style
547
+ console.info("WebGPU potentially supported. Will attempt GPU processing.");
474
548
  }
475
549
  }).catch(err => {
476
550
  console.warn("Error requesting WebGPU adapter. Falling back to CPU.", err);
@@ -487,9 +561,11 @@ class DepthToPointcloudWorkerPool {
487
561
  this.workerApis = new Array(WORKER_COUNT).fill(undefined).map(() => wrap$3(new Worker(new URL("pointcloudFromDepth.worker-JVTJ-r5q.js", import.meta.url), {
488
562
  type: "module"
489
563
  })));
564
+ this.#metrics = new EventMetricsManager();
565
+ this.#metrics.registerEvent("pcl-pool.frameInput");
490
566
  }
491
567
  async queueDepthFrame(data) {
492
- // @ts-expect-error - message structure not fully typed here
568
+ // @ts-expect-error
493
569
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
494
570
  if (!(data.colorFrame.message?.data instanceof Uint8Array)) {
495
571
  console.warn("Skipping frame: colorFrame.message.data is not a Uint8Array", data.colorFrame);
@@ -499,6 +575,11 @@ class DepthToPointcloudWorkerPool {
499
575
  this.tryProcessBatch();
500
576
  }
501
577
  tryProcessBatch() {
578
+ this.#metrics?.registerEvent("pcl-pool.batchSent");
579
+ const fps = this.#metrics?.calculate("pcl-pool.batchSent");
580
+ if (fps && fps > 0) {
581
+ this.#targetDispatchIntervalMs = 1000 / Math.max(4, fps);
582
+ }
502
583
  if (this.#isProcessing || this.#frameQueue.length < this.#FRAME_BATCH_SIZE) {
503
584
  return;
504
585
  }
@@ -521,7 +602,7 @@ class DepthToPointcloudWorkerPool {
521
602
  const i420Height = firstFrame.i420Height;
522
603
  try {
523
604
  const depthDataArray = batchToProcess.map(f => uint8ArrayToUint16Array(f.depthFrame.data));
524
- // @ts-expect-error - message structure not fully typed here - ITS UNKNOWN
605
+ // @ts-expect-error
525
606
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
526
607
  const i420DataArray = batchToProcess.map(f => f.colorFrame.message.data);
527
608
  const workerIndex = this.lastUsedWorkerIndex;
@@ -537,7 +618,7 @@ class DepthToPointcloudWorkerPool {
537
618
  const originalFrame = batchToProcess[i];
538
619
  const pointCloudResult = results[i];
539
620
  if (!pointCloudResult) {
540
- // console.warn(`Worker ${workerIndex}: Result ${i} is null or undefined. Passing null to callback.`); // Console log removed
621
+ console.warn(`Worker ${workerIndex}: Result ${i} is null or undefined. Passing null to callback.`);
541
622
  this.#addToProcessedQueue({
542
623
  originalColorEvent: originalFrame.colorFrame,
543
624
  originalDepthFrame: originalFrame.depthFrame,
@@ -615,6 +696,8 @@ class DepthToPointcloudWorkerPool {
615
696
  } catch (error) {
616
697
  console.error("Error in dispatchCallback:", error);
617
698
  }
699
+ } else {
700
+ console.warn("Dispatch timer fired but processed queue was empty.");
618
701
  }
619
702
  this.#scheduleNextDispatch();
620
703
  };
@@ -625,7 +708,6 @@ class DepthToPointcloudWorkerPool {
625
708
  }
626
709
  this.#frameQueue = [];
627
710
  this.#processedFrameQueue = [];
628
- // biome-ignore lint/complexity/noForEach: Simple cleanup loop
629
711
  this.workerApis = [];
630
712
  }
631
713
  }
@@ -671,75 +753,6 @@ function createMessageHandler(callback) {
671
753
  // License, v2.0. If a copy of the MPL was not distributed with this
672
754
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
673
755
 
674
- const MAX_SAMPLE_SIZE = 100;
675
- function bytesToMegabits(bytes) {
676
- return bytes / (1024 * 1024) * 8;
677
- }
678
- class EventMetricsManager {
679
- metrics = {};
680
- registerEvent(topic) {
681
- const currentTime = performance.now();
682
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
683
- this.metrics[topic] ??= [];
684
- this.metrics[topic].unshift(currentTime);
685
- this.metrics[topic].length = MAX_SAMPLE_SIZE;
686
- }
687
- calculate(topic) {
688
- const topicMetrics = this.metrics[topic];
689
- if (!topicMetrics) {
690
- return 0;
691
- }
692
- let totalInterval = 0;
693
- for (let i = 1; i < topicMetrics.length; ++i) {
694
- totalInterval += topicMetrics[i - 1] - topicMetrics[i];
695
- }
696
- if (isNaN(totalInterval)) {
697
- return 0;
698
- }
699
- const fps = 1_000 / (totalInterval / (topicMetrics.length - 1));
700
- return Math.round(fps);
701
- }
702
- }
703
- class ThroughputMetricsManager {
704
- metrics = {};
705
- registerEvent(topic, value) {
706
- const timestamp = performance.now();
707
- this.metrics[topic] ??= [];
708
- this.metrics[topic].unshift({
709
- timestamp,
710
- value
711
- });
712
- this.metrics[topic].length = MAX_SAMPLE_SIZE;
713
- }
714
- calculate(topic) {
715
- const topicMetrics = this.metrics[topic];
716
- if (!topicMetrics || topicMetrics.length < 2 || !topicMetrics.at(0) || !topicMetrics.at(-1)) {
717
- return 0;
718
- }
719
-
720
- // Get time span in seconds
721
- // biome-ignore lint/style/noNonNullAssertion: <explanation>
722
- const timeSpanMs = topicMetrics.at(0).timestamp - topicMetrics.at(-1).timestamp;
723
- const timeSpanSec = timeSpanMs / 1000;
724
- if (timeSpanSec === 0) {
725
- return 0;
726
- }
727
-
728
- // Sum up all values (bytes)
729
- const totalBytes = topicMetrics.reduce((sum, metric) => sum + metric.value, 0);
730
-
731
- // Calculate bytes per second
732
- const bytesPerSecond = totalBytes / timeSpanSec;
733
-
734
- // Return rounded value
735
- return Number(bytesToMegabits(bytesPerSecond).toFixed(2));
736
- }
737
- }
738
-
739
- // This Source Code Form is subject to the terms of the Mozilla Public
740
- // License, v2.0. If a copy of the MPL was not distributed with this
741
- // file, You can obtain one at http://mozilla.org/MPL/2.0/
742
-
743
756
  class PoitCloudSyncFramework {
744
757
  #binarySearch(arr, targetKey) {
745
758
  let left = 0;
@@ -85397,7 +85410,7 @@ function legacy(parser) {
85397
85410
  return new LanguageSupport(StreamLanguage.define(parser));
85398
85411
  }
85399
85412
  function sql$1(dialectName) {
85400
- return import('./index-ttl4cqP0.js').then(m => m.sql({ dialect: m[dialectName] }));
85413
+ return import('./index-DZgY6A3h.js').then(m => m.sql({ dialect: m[dialectName] }));
85401
85414
  }
85402
85415
  /**
85403
85416
  An array of language descriptions for known language packages.
@@ -85408,7 +85421,7 @@ const languages = [
85408
85421
  name: "C",
85409
85422
  extensions: ["c", "h", "ino"],
85410
85423
  load() {
85411
- return import('./index-i-2ofHyT.js').then(m => m.cpp());
85424
+ return import('./index-I0XgHBlj.js').then(m => m.cpp());
85412
85425
  }
85413
85426
  }),
85414
85427
  /*@__PURE__*/LanguageDescription.of({
@@ -85416,7 +85429,7 @@ const languages = [
85416
85429
  alias: ["cpp"],
85417
85430
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
85418
85431
  load() {
85419
- return import('./index-i-2ofHyT.js').then(m => m.cpp());
85432
+ return import('./index-I0XgHBlj.js').then(m => m.cpp());
85420
85433
  }
85421
85434
  }),
85422
85435
  /*@__PURE__*/LanguageDescription.of({
@@ -85436,7 +85449,7 @@ const languages = [
85436
85449
  name: "Go",
85437
85450
  extensions: ["go"],
85438
85451
  load() {
85439
- return import('./index-AHg_yzKN.js').then(m => m.go());
85452
+ return import('./index-pwNtzQuf.js').then(m => m.go());
85440
85453
  }
85441
85454
  }),
85442
85455
  /*@__PURE__*/LanguageDescription.of({
@@ -85451,7 +85464,7 @@ const languages = [
85451
85464
  name: "Java",
85452
85465
  extensions: ["java"],
85453
85466
  load() {
85454
- return import('./index-CqMDGXcF.js').then(m => m.java());
85467
+ return import('./index-DE0_tKGA.js').then(m => m.java());
85455
85468
  }
85456
85469
  }),
85457
85470
  /*@__PURE__*/LanguageDescription.of({
@@ -85467,7 +85480,7 @@ const languages = [
85467
85480
  alias: ["json5"],
85468
85481
  extensions: ["json", "map"],
85469
85482
  load() {
85470
- return import('./index-DMzCNF_e.js').then(m => m.json());
85483
+ return import('./index-BZ8z044k.js').then(m => m.json());
85471
85484
  }
85472
85485
  }),
85473
85486
  /*@__PURE__*/LanguageDescription.of({
@@ -85481,14 +85494,14 @@ const languages = [
85481
85494
  name: "LESS",
85482
85495
  extensions: ["less"],
85483
85496
  load() {
85484
- return import('./index-Zijk5SvX.js').then(m => m.less());
85497
+ return import('./index-B1pNpslP.js').then(m => m.less());
85485
85498
  }
85486
85499
  }),
85487
85500
  /*@__PURE__*/LanguageDescription.of({
85488
85501
  name: "Liquid",
85489
85502
  extensions: ["liquid"],
85490
85503
  load() {
85491
- return import('./index-BQnK1LTP.js').then(m => m.liquid());
85504
+ return import('./index-CLPc3bUH.js').then(m => m.liquid());
85492
85505
  }
85493
85506
  }),
85494
85507
  /*@__PURE__*/LanguageDescription.of({
@@ -85514,7 +85527,7 @@ const languages = [
85514
85527
  name: "PHP",
85515
85528
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
85516
85529
  load() {
85517
- return import('./index-DLRgXO8y.js').then(m => m.php());
85530
+ return import('./index-DsO3GPWF.js').then(m => m.php());
85518
85531
  }
85519
85532
  }),
85520
85533
  /*@__PURE__*/LanguageDescription.of({
@@ -85531,28 +85544,28 @@ const languages = [
85531
85544
  extensions: ["BUILD", "bzl", "py", "pyw"],
85532
85545
  filename: /^(BUCK|BUILD)$/,
85533
85546
  load() {
85534
- return import('./index-BTdZSETz.js').then(m => m.python());
85547
+ return import('./index-BNXdmaeO.js').then(m => m.python());
85535
85548
  }
85536
85549
  }),
85537
85550
  /*@__PURE__*/LanguageDescription.of({
85538
85551
  name: "Rust",
85539
85552
  extensions: ["rs"],
85540
85553
  load() {
85541
- return import('./index-CP4Zviq2.js').then(m => m.rust());
85554
+ return import('./index-B5_Aa-W3.js').then(m => m.rust());
85542
85555
  }
85543
85556
  }),
85544
85557
  /*@__PURE__*/LanguageDescription.of({
85545
85558
  name: "Sass",
85546
85559
  extensions: ["sass"],
85547
85560
  load() {
85548
- return import('./index-cLRC4uIT.js').then(m => m.sass({ indented: true }));
85561
+ return import('./index-CGXxFWjz.js').then(m => m.sass({ indented: true }));
85549
85562
  }
85550
85563
  }),
85551
85564
  /*@__PURE__*/LanguageDescription.of({
85552
85565
  name: "SCSS",
85553
85566
  extensions: ["scss"],
85554
85567
  load() {
85555
- return import('./index-cLRC4uIT.js').then(m => m.sass());
85568
+ return import('./index-CGXxFWjz.js').then(m => m.sass());
85556
85569
  }
85557
85570
  }),
85558
85571
  /*@__PURE__*/LanguageDescription.of({
@@ -85583,7 +85596,7 @@ const languages = [
85583
85596
  name: "WebAssembly",
85584
85597
  extensions: ["wat", "wast"],
85585
85598
  load() {
85586
- return import('./index-DcFvTNvR.js').then(m => m.wast());
85599
+ return import('./index-CIHmVsn2.js').then(m => m.wast());
85587
85600
  }
85588
85601
  }),
85589
85602
  /*@__PURE__*/LanguageDescription.of({
@@ -85591,7 +85604,7 @@ const languages = [
85591
85604
  alias: ["rss", "wsdl", "xsd"],
85592
85605
  extensions: ["xml", "xsl", "xsd", "svg"],
85593
85606
  load() {
85594
- return import('./index-CkN9fMlH.js').then(m => m.xml());
85607
+ return import('./index-B4d7dS8a.js').then(m => m.xml());
85595
85608
  }
85596
85609
  }),
85597
85610
  /*@__PURE__*/LanguageDescription.of({
@@ -85599,7 +85612,7 @@ const languages = [
85599
85612
  alias: ["yml"],
85600
85613
  extensions: ["yaml", "yml"],
85601
85614
  load() {
85602
- return import('./index-B2-O30qH.js').then(m => m.yaml());
85615
+ return import('./index-DbT8vr6l.js').then(m => m.yaml());
85603
85616
  }
85604
85617
  }),
85605
85618
  // Legacy modes ported from CodeMirror 5
@@ -86395,13 +86408,13 @@ const languages = [
86395
86408
  name: "Vue",
86396
86409
  extensions: ["vue"],
86397
86410
  load() {
86398
- return import('./index-DFHs4aUN.js').then(m => m.vue());
86411
+ return import('./index-CXdNn-IZ.js').then(m => m.vue());
86399
86412
  }
86400
86413
  }),
86401
86414
  /*@__PURE__*/LanguageDescription.of({
86402
86415
  name: "Angular Template",
86403
86416
  load() {
86404
- return import('./index-BGrTBljs.js').then(m => m.angular());
86417
+ return import('./index-LmBY2nOo.js').then(m => m.angular());
86405
86418
  }
86406
86419
  })
86407
86420
  ];
@@ -162171,6 +162184,7 @@ function RiNumbersFill (props) {
162171
162184
 
162172
162185
  function PanelToolbarMetrics({
162173
162186
  renderedFps,
162187
+ annotationsFps,
162174
162188
  targetFps,
162175
162189
  metrics
162176
162190
  }) {
@@ -162192,7 +162206,7 @@ function PanelToolbarMetrics({
162192
162206
  ref: descriptionRef,
162193
162207
  width: "full"
162194
162208
  }, variant === "compact" ? /*#__PURE__*/React__default.createElement(Tooltip, {
162195
- content: /*#__PURE__*/React__default.createElement("ul", null, /*#__PURE__*/React__default.createElement("li", null, "Camera: ", targetFps === 0 ? "-" : targetFps, " FPS"), /*#__PURE__*/React__default.createElement("li", null, "Network:", " ", !metrics || metrics?.incomingMessagesFps === 0 ? "-" : metrics.incomingMessagesFps, " ", "FPS"), /*#__PURE__*/React__default.createElement("li", null, "Decoding:", " ", !metrics || metrics?.decodedMessagesFps === 0 ? "-" : metrics.decodedMessagesFps, " ", "FPS"), /*#__PURE__*/React__default.createElement("li", null, "Rendering: ", renderedFps === 0 ? "-" : renderedFps, " FPS"), /*#__PURE__*/React__default.createElement("li", null, "Throughput:", " ", !metrics || metrics?.messageThroughput === 0 ? "-" : metrics.messageThroughput, " ", "Mbps"), /*#__PURE__*/React__default.createElement("li", null, "Frontend Delay: ", eventLoopDelay.toFixed(2), " ms")),
162209
+ content: /*#__PURE__*/React__default.createElement("ul", null, /*#__PURE__*/React__default.createElement("li", null, "Camera: ", !targetFps || targetFps === 0 ? "-" : targetFps, " FPS"), /*#__PURE__*/React__default.createElement("li", null, "Network:", " ", !metrics || metrics?.incomingMessagesFps === 0 ? "-" : metrics.incomingMessagesFps, " ", "FPS"), /*#__PURE__*/React__default.createElement("li", null, "Decoding:", " ", !metrics || metrics?.decodedMessagesFps === 0 ? "-" : metrics.decodedMessagesFps, " ", "FPS"), /*#__PURE__*/React__default.createElement("li", null, "Rendering: ", !renderedFps || renderedFps === 0 ? "-" : renderedFps, " FPS"), /*#__PURE__*/React__default.createElement("li", null, "Annotations:", " ", !annotationsFps || annotationsFps === 0 || !Number.isFinite(annotationsFps) ? "-" : annotationsFps, " ", "FPS"), /*#__PURE__*/React__default.createElement("li", null, "Throughput:", " ", !metrics || metrics?.messageThroughput === 0 ? "-" : metrics.messageThroughput, " ", "Mbps"), /*#__PURE__*/React__default.createElement("li", null, "Frontend Delay: ", eventLoopDelay.toFixed(2), " ms")),
162196
162210
  direction: "bottom",
162197
162211
  className: "ml-auto"
162198
162212
  }, /*#__PURE__*/React__default.createElement(Button, {
@@ -162209,6 +162223,8 @@ function PanelToolbarMetrics({
162209
162223
  text: `Decoding: ${metrics.decodedMessagesFps === 0 ? "-" : metrics.decodedMessagesFps} FPS`
162210
162224
  }), renderedFps !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
162211
162225
  text: `Rendering: ${renderedFps === 0 ? "-" : renderedFps} FPS`
162226
+ }), annotationsFps !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
162227
+ text: `Annotations: ${annotationsFps === 0 || !Number.isFinite(annotationsFps) ? "-" : annotationsFps} FPS`
162212
162228
  }), metrics?.messageThroughput !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
162213
162229
  text: `Throughput: ${metrics.messageThroughput === 0 ? "-" : metrics.messageThroughput} Mbps`
162214
162230
  }), eventLoopDelay !== undefined && /*#__PURE__*/React__default.createElement(Label$3, {
@@ -162243,6 +162259,7 @@ const PanelToolbar = ({
162243
162259
  targetFps,
162244
162260
  triggerToast,
162245
162261
  renderedFps,
162262
+ annotationsFps,
162246
162263
  toggleTopic
162247
162264
  }) => {
162248
162265
  const [metrics, setMetrics] = React__default.useState();
@@ -162322,6 +162339,7 @@ const PanelToolbar = ({
162322
162339
  className: "text-[14px]/[14px] xl:pb-[2px]"
162323
162340
  })), /*#__PURE__*/React__default.createElement(PanelToolbarMetrics, {
162324
162341
  renderedFps: renderedFps,
162342
+ annotationsFps: annotationsFps,
162325
162343
  targetFps: targetFps,
162326
162344
  metrics: metrics
162327
162345
  }), /*#__PURE__*/React__default.createElement(Flex, {
@@ -162390,10 +162408,10 @@ const useDetections = () => {
162390
162408
  };
162391
162409
  const rawToAnnotations = (rawAnnotations, kind, current) => rawAnnotations.map(annotationTopic => ({
162392
162410
  name: annotationTopic,
162393
- extra: kind === 'extra',
162411
+ extra: kind === "extra",
162394
162412
  enabled: current.find(({
162395
162413
  name
162396
- }) => name === annotationTopic)?.enabled ?? kind === 'main'
162414
+ }) => name === annotationTopic)?.enabled ?? kind === "main"
162397
162415
  }));
162398
162416
  const Panel = ({
162399
162417
  children,
@@ -162404,6 +162422,7 @@ const Panel = ({
162404
162422
  extraAnnotationTopics = [],
162405
162423
  targetFps,
162406
162424
  renderedFps,
162425
+ annotationsFps,
162407
162426
  renderDelay,
162408
162427
  toggleTopic,
162409
162428
  triggerToast
@@ -162411,7 +162430,7 @@ const Panel = ({
162411
162430
  const [detections, setDetections] = React__default.useState([]);
162412
162431
  React__default.useEffect(() => {
162413
162432
  if (!disableAnnotations) {
162414
- setDetections(current => [...rawToAnnotations(annotationTopics, 'main', current), ...rawToAnnotations(extraAnnotationTopics, 'extra', current)]);
162433
+ setDetections(current => [...rawToAnnotations(annotationTopics, "main", current), ...rawToAnnotations(extraAnnotationTopics, "extra", current)]);
162415
162434
  }
162416
162435
  // eslint-disable-next-line react-hooks/exhaustive-deps
162417
162436
  }, [JSON.stringify(annotationTopics), JSON.stringify(extraAnnotationTopics)]);
@@ -162435,6 +162454,7 @@ const Panel = ({
162435
162454
  disableAnnotations: disableAnnotations,
162436
162455
  targetFps: targetFps,
162437
162456
  renderedFps: renderedFps,
162457
+ annotationsFps: annotationsFps,
162438
162458
  renderDelay: renderDelay,
162439
162459
  toggleTopic: toggleTopic,
162440
162460
  triggerToast: triggerToast
@@ -162471,10 +162491,11 @@ function createRenderDelaySampler() {
162471
162491
  };
162472
162492
  }
162473
162493
 
162474
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-NiMrvEhw.js'));
162494
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CJSOG1CX.js'));
162475
162495
  const ImagePanelBody = ({
162476
162496
  topic,
162477
- frameRenderedEvent
162497
+ frameRenderedEvent,
162498
+ annotationsFpsUpdateHandler
162478
162499
  }) => {
162479
162500
  const {
162480
162501
  detections
@@ -162493,12 +162514,14 @@ const ImagePanelBody = ({
162493
162514
  }), [detections, topic]);
162494
162515
  return /*#__PURE__*/React__default.createElement(ImagePanelComponent, {
162495
162516
  overrideConfig: defaultConfig,
162496
- frameRenderedEvent: frameRenderedEvent
162517
+ frameRenderedEvent: frameRenderedEvent,
162518
+ annotationsFpsUpdateHandler: annotationsFpsUpdateHandler
162497
162519
  });
162498
162520
  };
162499
162521
  const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
162500
162522
  const renderedFpsMetricsManagerRef = React__default.useRef(null);
162501
162523
  const [renderedFps, setRenderedFps] = React__default.useState(undefined);
162524
+ const [annotationsFps, setAnnotationsFps] = React__default.useState(undefined);
162502
162525
  const {
162503
162526
  averageFrameDelay,
162504
162527
  addFrameTime
@@ -162524,15 +162547,20 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
162524
162547
  renderedFpsMetricsManagerRef.current?.registerEvent('render');
162525
162548
  addFrameTime(frameTime);
162526
162549
  }, [addFrameTime]);
162550
+ const handleAnnotationsFpsUpdate = React__default.useCallback(fps => {
162551
+ setAnnotationsFps(fps);
162552
+ }, []);
162527
162553
  return /*#__PURE__*/React__default.createElement(Panel, _extends$3({
162528
162554
  kind: "image"
162529
162555
  }, props, {
162530
162556
  toggleTopic: props.toggleTopic,
162531
162557
  renderedFps: renderedFps,
162558
+ annotationsFps: annotationsFps,
162532
162559
  renderDelay: averageFrameDelay
162533
162560
  }), /*#__PURE__*/React__default.createElement(ImagePanelBody, {
162534
162561
  topic: props.topic,
162535
- frameRenderedEvent: handleFrameRendered
162562
+ frameRenderedEvent: handleFrameRendered,
162563
+ annotationsFpsUpdateHandler: handleAnnotationsFpsUpdate
162536
162564
  }));
162537
162565
  });
162538
162566
 
@@ -162540,7 +162568,7 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
162540
162568
  // License, v2.0. If a copy of the MPL was not distributed with this
162541
162569
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
162542
162570
 
162543
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-Cia95HmM.js'));
162571
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CdXrBVPC.js'));
162544
162572
  const PointCloudPanelBody = ({
162545
162573
  topic,
162546
162574
  frameRenderedEvent
@@ -162578,7 +162606,7 @@ const PointCloudPanelBody = ({
162578
162606
  thetaOffset: 180,
162579
162607
  fovy: getFovy(),
162580
162608
  near: 5,
162581
- far: 10000
162609
+ far: 20000
162582
162610
  },
162583
162611
  imageMode: {
162584
162612
  colorMode: "rgba-fields"
@@ -162635,4 +162663,4 @@ const PointCloudPanel = /*#__PURE__*/React__default.memo(function PointCloudPane
162635
162663
  }));
162636
162664
  });
162637
162665
 
162638
- export { flatIndent as $, AnalyticsContext as A, PlayerCapabilities as B, assertNever as C, PlayerPresence as D, ErrorDisplay as E, isEqual as F, isDesktopApp as G, createTheme$1 as H, propTypesExports as I, indentNodeProp as J, continuedIndent as K, LeftSidebarItemKeys as L, foldNodeProp as M, styleTags as N, tags$1 as O, PropTypes as P, LRLanguage as Q, RightSidebarItemKeys as R, Stack$1 as S, LanguageSupport as T, ExternalTokenizer as U, LRParser as V, WorkspaceContext as W, ifNotIn as X, completeFromList as Y, syntaxTree as Z, _extends$3 as _, AppEvent as a, delimitedIndent as a0, foldInside as a1, ContextTracker as a2, LocalTokenGroup as a3, snippetCompletion as a4, IterMode as a5, NodeWeakMap as a6, defineCSSCompletionSource as a7, EditorView as a8, EditorSelection as a9, html$4 as aa, parseMixed as ab, bracketMatchingHandle as ac, javascriptLanguage as ad, VisualizerConnection as ae, VisualizerContext as af, PanelLayout as ag, ImagePanel as ah, PointCloudPanel as ai, baseSet as b, createAggregator as c, useTranslation as d, usePanelCatalog as e, flatRest as f, generateUtilityClass as g, EmptyState as h, isEmpty as i, PanelContext as j, PanelCatalogContext as k, usePanelStateStore as l, makeStyles as m, useDefaultPanelTitle as n, useWorkspaceStore as o, WorkspaceStoreSelectors as p, difference as q, usePanelContext as r, useMessagePipeline as s, useHoverValue as t, useAnalytics as u, v4 as v, useSetHoverValue as w, useClearHoverValue as x, useMessagePipelineGetter as y, usePanelSettingsTreeUpdate as z };
162666
+ export { flatIndent as $, AnalyticsContext as A, PlayerCapabilities as B, assertNever as C, PlayerPresence as D, ErrorDisplay as E, isEqual as F, isDesktopApp as G, createTheme$1 as H, propTypesExports as I, indentNodeProp as J, continuedIndent as K, LeftSidebarItemKeys as L, foldNodeProp as M, styleTags as N, tags$1 as O, PropTypes as P, LRLanguage as Q, RightSidebarItemKeys as R, Stack$1 as S, LanguageSupport as T, ExternalTokenizer as U, LRParser as V, WorkspaceContext as W, ifNotIn as X, completeFromList as Y, syntaxTree as Z, _extends$3 as _, AppEvent as a, delimitedIndent as a0, foldInside as a1, ContextTracker as a2, LocalTokenGroup as a3, snippetCompletion as a4, IterMode as a5, NodeWeakMap as a6, defineCSSCompletionSource as a7, EditorView as a8, EditorSelection as a9, html$4 as aa, parseMixed as ab, bracketMatchingHandle as ac, javascriptLanguage as ad, VisualizerConnection as ae, VisualizerContext as af, PanelLayout as ag, ImagePanel as ah, PointCloudPanel as ai, EventMetricsManager as aj, ThroughputMetricsManager as ak, baseSet as b, createAggregator as c, useTranslation as d, usePanelCatalog as e, flatRest as f, generateUtilityClass as g, EmptyState as h, isEmpty as i, PanelContext as j, PanelCatalogContext as k, usePanelStateStore as l, makeStyles as m, useDefaultPanelTitle as n, useWorkspaceStore as o, WorkspaceStoreSelectors as p, difference as q, usePanelContext as r, useMessagePipeline as s, useHoverValue as t, useAnalytics as u, v4 as v, useSetHoverValue as w, useClearHoverValue as x, useMessagePipelineGetter as y, usePanelSettingsTreeUpdate as z };
@@ -1,4 +1,4 @@
1
- import { U as ExternalTokenizer, a2 as ContextTracker, N as styleTags, O as tags, V as LRParser, Q as LRLanguage, M as foldNodeProp, a1 as foldInside, J as indentNodeProp, K as continuedIndent, a7 as defineCSSCompletionSource, T as LanguageSupport } from './index-CPTbtbj3.js';
1
+ import { U as ExternalTokenizer, a2 as ContextTracker, N as styleTags, O as tags, V as LRParser, Q as LRLanguage, M as foldNodeProp, a1 as foldInside, J as indentNodeProp, K as continuedIndent, a7 as defineCSSCompletionSource, T as LanguageSupport } from './index-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
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-CPTbtbj3.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-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
1
- import { ImagePanel } from './index-Cia95HmM.js';
1
+ import { ImagePanel } from './index-CdXrBVPC.js';
2
2
  import 'react';
3
3
  import 'react-dom';
4
4
  import './tslib.es6-C73eoP_E.js';
@@ -7,7 +7,7 @@ import './_commonjsHelpers-E-ZsRS8r.js';
7
7
  import '@mui/material';
8
8
  import './isArrayLikeObject-Bytw9p-q.js';
9
9
  import 'zustand';
10
- import './index-CPTbtbj3.js';
10
+ import './index-BuRQ7ljn.js';
11
11
  import './comlink-DHMAu6X7.js';
12
12
  import './utils-Hzt3wxhG.js';
13
13
  import './FoxgloveServer-C39Uooyk.js';
@@ -1,4 +1,4 @@
1
- import { a8 as EditorView, a9 as EditorSelection, Q as LRLanguage, N as styleTags, O as tags, J as indentNodeProp, a0 as delimitedIndent, M as foldNodeProp, T as LanguageSupport, V as LRParser, Z as syntaxTree, aa as html, ab as parseMixed, U as ExternalTokenizer } from './index-CPTbtbj3.js';
1
+ import { a8 as EditorView, a9 as EditorSelection, Q as LRLanguage, N as styleTags, O as tags, J as indentNodeProp, a0 as delimitedIndent, M as foldNodeProp, T as LanguageSupport, V as LRParser, Z as syntaxTree, aa as html, ab as parseMixed, U as ExternalTokenizer } from './index-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';
@@ -1,4 +1,4 @@
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-CPTbtbj3.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-BuRQ7ljn.js';
2
2
  import './tslib.es6-C73eoP_E.js';
3
3
  import 'react';
4
4
  import 'react-mosaic-component';