@luxonis/visualizer-protobuf 2.66.9 → 2.67.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 (41) hide show
  1. package/dist/{deserialization.worker-CgJJ0wn7.js → deserialization.worker-CUQshOva.js} +4 -1
  2. package/dist/{index-BJslJPfz.js → index-3ExnAzAV.js} +1 -1
  3. package/dist/{index-Clq69yV3.js → index-B4xhG_lJ.js} +130 -31
  4. package/dist/{index-Ct1D6II_.js → index-BJDORwpv.js} +1 -1
  5. package/dist/{index-CyYbEgIe.js → index-BXE5U9N5.js} +1 -1
  6. package/dist/{index-D-mDIWK_.js → index-BimPKcrm.js} +1 -1
  7. package/dist/{index-CRGrBIhH.js → index-C4y1s0Nb.js} +1 -1
  8. package/dist/{index-DkTZCwWX.js → index-CAUP2iVN.js} +1 -1
  9. package/dist/{index-Cyl0afzE.js → index-CBOygVjC.js} +1 -1
  10. package/dist/{index-JFZDeEB8.js → index-CpgTEFvA.js} +1 -1
  11. package/dist/{index-nO2O7il5.js → index-CyTYlc8K.js} +1 -1
  12. package/dist/{index-BZBENqR3.js → index-DCjnDYdn.js} +1 -1
  13. package/dist/{index-0xvyd9_r.js → index-DEUT3mEo.js} +1 -1
  14. package/dist/{index-DuwwCf0Y.js → index-DNjRDu_i.js} +1 -1
  15. package/dist/{index-BWnke17_.js → index-DQP_BVHB.js} +1 -1
  16. package/dist/{index-AReJXz0b.js → index-DUXZHYX9.js} +1 -1
  17. package/dist/{index-DnFWiYGu.js → index-DfDFLVJw.js} +1 -1
  18. package/dist/{index-CAKA0YwJ.js → index-Dly2VJ2B.js} +2 -2
  19. package/dist/{index-Bb6PcuFb.js → index-FWDxRfR8.js} +1 -1
  20. package/dist/{index-C41fk9FJ.js → index-zO0AHCu7.js} +23 -23
  21. package/dist/index.js +1 -1
  22. package/dist/lib/src/messaging/deserialization/detections/detection.d.ts.map +1 -1
  23. package/dist/lib/src/messaging/deserialization/detections/detection.js +3 -0
  24. package/dist/lib/src/messaging/deserialization/detections/detection.js.map +1 -1
  25. package/dist/lib/src/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js +54 -39
  26. package/dist/lib/src/messaging/deserialization/pointcloud/pointcloudFromDepth.worker.js.map +1 -1
  27. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.d.ts +1 -1
  28. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.d.ts.map +1 -1
  29. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.js +1 -1
  30. package/dist/lib/src/messaging/deserialization/pointcloud/poitcloudPoolManager.js.map +1 -1
  31. package/dist/lib/src/messaging/deserialization/video/color.js +1 -1
  32. package/dist/lib/src/messaging/deserialization/video/color.js.map +1 -1
  33. package/dist/lib/src/messaging/deserialization.worker.js.map +1 -1
  34. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts +1 -0
  35. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.d.ts.map +1 -1
  36. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js +122 -28
  37. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/MessageHandler.js.map +1 -1
  38. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/annotations/ImageAnnotations.d.ts.map +1 -1
  39. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/annotations/ImageAnnotations.js.map +1 -1
  40. package/dist/{pointcloudFromDepth.worker-hil48rbC.js → pointcloudFromDepth.worker-CoUfUVnZ.js} +55 -40
  41. package/package.json +1 -1
@@ -422,6 +422,9 @@ function deserializeImgDetections({
422
422
  const highlightSizeX = Math.min(highligtLength, detectionWidth);
423
423
  const highlightSizeY = Math.min(highligtLength * ratio, detection.ymax - detection.ymin);
424
424
  const style = DETECTION_STYLE[detection.label] ?? DEFAULT_STYLE;
425
+ if (detection.labelName) {
426
+ style.label = detection.labelName;
427
+ }
425
428
  foxgloveMessage.points.push({
426
429
  timestamp: receiveTime,
427
430
  points: [{
@@ -644,7 +647,7 @@ function deserializeColorFrame({
644
647
  planeStride
645
648
  } = parseMessage(message);
646
649
  const foxgloveMessage = {
647
- timestamp: message.tsDevice ?? receiveTime,
650
+ timestamp: receiveTime,
648
651
  frame_id: `color-${topic}-frame`,
649
652
  width,
650
653
  height,
@@ -1,4 +1,4 @@
1
- import { a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, ah as html, a0 as LanguageSupport, ai as parseMixed } from './index-C41fk9FJ.js';
1
+ import { a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, ah as html, a0 as LanguageSupport, ai as parseMixed } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -3,7 +3,7 @@ import React__default, { useReducer, useRef, useCallback, useLayoutEffect, Compo
3
3
  import ReactDOM__default from 'react-dom';
4
4
  import { Y as isSymbol, Z as toString, $ as keys, a0 as getSymbols$1, a1 as stubArray, a2 as arrayPush, a3 as baseGetAllKeys, g as getTag, a4 as getAllKeys, k as baseGet, c as baseIteratee, j as castPath, t as toKey, a5 as arrayMap$1, a6 as baseUniq, b as baseFlatten, a7 as useMustNotChange, a8 as useCurrentLayoutActions, a9 as useCurrentLayoutSelector, r as reportError, A as AppError, L as Logger, u as useGuaranteedContext, aa as usePanelMosaicId, ab as useSelectedPanels, ac as PANEL_TITLE_CONFIG_KEY, ad as noop$4, o as getPanelTypeFromId, M as useShallowMemo, T as TAB_PANEL_TYPE, J as filterMap, d as dist$2, ae as useAppConfiguration, af as useValueChangedDebugLog, ag as useJsonTreeTheme } from './depth-BGin0LSZ.js';
5
5
  import { createStore, useStore } from 'zustand';
6
- import { g as generateUtilityClass, c as createAggregator, f as flatRest, b as baseSet, A as AnalyticsContext, P as PropTypes, E as ErrorDisplay, S as Stack$1, m as makeStyles$1, _ as _extends$1, W as WorkspaceContext, u as useAnalytics, a as AppEvent, L as LeftSidebarItemKeys, R as RightSidebarItemKeys, d as useTranslation, e as usePanelCatalog, h as EmptyState, i as isEmpty, j as PanelContext, k as PanelCatalogContext, l as usePanelStateStore, n as useDefaultPanelTitle, o as useWorkspaceStore, p as WorkspaceStoreSelectors, q as difference, r as usePanelContext, s as useMessagePipeline, v as v4, t as useHoverValue, w as useSetHoverValue, x as useClearHoverValue, y as useMessagePipelineGetter, z as usePanelSettingsTreeUpdate, B as PlayerCapabilities, C as assertNever, D as PlayerPresence, F as isEqual, G as isDesktopApp, H as createTheme, I as propTypesExports, J as DEFAULT_CAMERA_STATE$1, K as format$1, M as z, N as serializeError, O as stringify$1, Q as createIntl, T as createIntlCache } from './index-C41fk9FJ.js';
6
+ import { g as generateUtilityClass, c as createAggregator, f as flatRest, b as baseSet, A as AnalyticsContext, P as PropTypes, E as ErrorDisplay, S as Stack$1, m as makeStyles$1, _ as _extends$1, W as WorkspaceContext, u as useAnalytics, a as AppEvent, L as LeftSidebarItemKeys, R as RightSidebarItemKeys, d as useTranslation, e as usePanelCatalog, h as EmptyState, i as isEmpty, j as PanelContext, k as PanelCatalogContext, l as usePanelStateStore, n as useDefaultPanelTitle, o as useWorkspaceStore, p as WorkspaceStoreSelectors, q as difference, r as usePanelContext, s as useMessagePipeline, v as v4, t as useHoverValue, w as useSetHoverValue, x as useClearHoverValue, y as useMessagePipelineGetter, z as usePanelSettingsTreeUpdate, B as PlayerCapabilities, C as assertNever, D as PlayerPresence, F as isEqual, G as isDesktopApp, H as createTheme, I as propTypesExports, J as DEFAULT_CAMERA_STATE$1, K as format$1, M as z, N as serializeError, O as stringify$1, Q as createIntl, T as createIntlCache } from './index-zO0AHCu7.js';
7
7
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
8
8
  import { g as getDefaultExportFromCjs, c as commonjsGlobal, d as getAugmentedNamespace } from './protobuf-BFCtaU7c.js';
9
9
  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';
@@ -32507,6 +32507,8 @@ function getAnnotationAtPath(message, path) {
32507
32507
  const syncToleranceSec = 0.15; // maximum acceptable time difference for selecting a “closest” annotation.
32508
32508
  const maxStalenessSec = 1.1; // how long we can hold the last older annotation if no better match is available. 1s corresponds to 1 FPS + 100ms window for jitter.
32509
32509
  const hysteresisSec = 0.1; // how much “stickiness” we allow before switching candidates.
32510
+ const imageRetentionSec = 5; // keep small window of recent images
32511
+ const maxImageBuffer = 150; // cap number of stored images
32510
32512
 
32511
32513
  // Have constants for the HUD items so that they don't need to be recreated and GCed every message
32512
32514
  const WAITING_FOR_BOTH_HUD_ITEM = {
@@ -32564,6 +32566,8 @@ class MessageHandler {
32564
32566
 
32565
32567
  #onAnnotationReceivedEvent;
32566
32568
  #annotationsFpsRefreshInterval = null;
32569
+ // New: keep a buffer of recent images for annotation-prioritized synchronization
32570
+ imagesBuffer = [];
32567
32571
  // Store a small buffer of recent annotations per topic with computed seconds timestamps
32568
32572
  annotationsMap = new Map();
32569
32573
  // Track last selected annotation per topic to add hysteresis and reduce flicker
@@ -32612,6 +32616,35 @@ class MessageHandler {
32612
32616
  ...message,
32613
32617
  message: image
32614
32618
  };
32619
+
32620
+ // Compute timestamp seconds for buffer storage (prefer image stamp, then receiveTime, then wall clock)
32621
+ const stamp = getTimestampFromImage(image);
32622
+ let stampTimeSec;
32623
+ const stampSec = stamp?.sec;
32624
+ const stampNsec = stamp?.nsec;
32625
+ if (typeof stampSec === "number" && typeof stampNsec === "number") {
32626
+ stampTimeSec = stampSec + stampNsec / 1e9;
32627
+ } else {
32628
+ const recv = message.receiveTime;
32629
+ const recvSec = recv?.sec;
32630
+ const recvNsec = recv?.nsec;
32631
+ if (typeof recvSec === "number" && typeof recvNsec === "number") {
32632
+ stampTimeSec = recvSec + recvNsec / 1e9;
32633
+ }
32634
+ }
32635
+ const arrivalSec = performance.now() / 1000;
32636
+ this.imagesBuffer.push({
32637
+ image: this.lastImage,
32638
+ stampTimeSec,
32639
+ arrivalSec
32640
+ });
32641
+ // Trim by arrival time and length (do not use stamped time for retention)
32642
+ const nowSec = performance.now() / 1000;
32643
+ const cutoffArrival = nowSec - imageRetentionSec;
32644
+ this.imagesBuffer = this.imagesBuffer.filter(e => e.arrivalSec >= cutoffArrival);
32645
+ if (this.imagesBuffer.length > maxImageBuffer) {
32646
+ this.imagesBuffer.splice(0, this.imagesBuffer.length - maxImageBuffer);
32647
+ }
32615
32648
  this.#emitState();
32616
32649
  }
32617
32650
  handleCameraInfo = message => {
@@ -32706,6 +32739,7 @@ class MessageHandler {
32706
32739
  this.annotationsMap.clear();
32707
32740
  this.lastSelectedByTopic.clear();
32708
32741
  this.lastImage = undefined;
32742
+ this.imagesBuffer = [];
32709
32743
  this.#oldRenderState = undefined;
32710
32744
  this.#emitState();
32711
32745
  }
@@ -32734,30 +32768,75 @@ class MessageHandler {
32734
32768
  this.#hud.displayIfTrue(waitingForImage && calibrationRequired, WAITING_FOR_IMAGE_NOTICE_HUD_ITEM);
32735
32769
  }
32736
32770
  #getRenderState() {
32737
- if (!this.lastImage) {
32771
+ if (this.imagesBuffer.length === 0) {
32738
32772
  return {
32739
32773
  annotationsByTopic: new Map(),
32740
32774
  presentAnnotationTopics: undefined,
32741
32775
  missingAnnotationTopics: undefined
32742
32776
  };
32743
32777
  }
32744
- const state = {
32745
- image: this.lastImage,
32746
- annotationsByTopic: new Map()
32747
- };
32748
- const imageTimestampSec = (() => {
32749
- const stamp = getTimestampFromImage(this.lastImage.message);
32750
- const sec = stamp?.sec;
32751
- const nsec = stamp?.nsec;
32752
- if (typeof sec === "number" && typeof nsec === "number") {
32753
- return sec + nsec / 1e9;
32754
- }
32755
- return performance.now() / 1000;
32756
- })();
32757
- for (const [topic, buffer] of this.annotationsMap.entries()) {
32758
- if (buffer.length === 0) continue;
32759
-
32760
- // Prefer newest annotation older than the image within staleness window
32778
+
32779
+ // Visible topics
32780
+ const visibleTopics = new Set();
32781
+ if (this.#config.annotations) {
32782
+ for (const [topic, settings] of Object.entries(this.#config.annotations)) {
32783
+ if (settings?.visible) visibleTopics.add(topic);
32784
+ }
32785
+ }
32786
+
32787
+ // If there are no visible annotation topics, just render the latest image
32788
+ if (visibleTopics.size === 0) {
32789
+ const newestImageEntry = this.imagesBuffer[this.imagesBuffer.length - 1];
32790
+ return {
32791
+ image: newestImageEntry.image,
32792
+ annotationsByTopic: new Map(),
32793
+ presentAnnotationTopics: undefined,
32794
+ missingAnnotationTopics: undefined
32795
+ };
32796
+ }
32797
+
32798
+ // Fast-path: if none of the visible topics has any annotation data yet, render image only
32799
+ let hasAnyAnnotationForVisible = false;
32800
+ for (const t of visibleTopics) {
32801
+ const buf = this.annotationsMap.get(t);
32802
+ if (buf && buf.length > 0) {
32803
+ hasAnyAnnotationForVisible = true;
32804
+ break;
32805
+ }
32806
+ }
32807
+ if (!hasAnyAnnotationForVisible) {
32808
+ const newestImageEntry = this.imagesBuffer[this.imagesBuffer.length - 1];
32809
+ return {
32810
+ image: newestImageEntry.image,
32811
+ annotationsByTopic: new Map(),
32812
+ presentAnnotationTopics: undefined,
32813
+ missingAnnotationTopics: undefined
32814
+ };
32815
+ }
32816
+
32817
+ // Required topics (available & visible)
32818
+ const requiredTopics = [];
32819
+ for (const t of visibleTopics) {
32820
+ if (this.availableAnnotationTopics.size === 0 || this.availableAnnotationTopics.has(t)) {
32821
+ requiredTopics.push(t);
32822
+ }
32823
+ }
32824
+
32825
+ // New policy: always start from newest image by arrival (do not freeze on older frame).
32826
+ const newestImageEntry = this.imagesBuffer[this.imagesBuffer.length - 1];
32827
+ const imageTimestampSec = typeof newestImageEntry.stampTimeSec === "number" ? newestImageEntry.stampTimeSec : newestImageEntry.arrivalSec;
32828
+ const selectedAnnotations = new Map();
32829
+ const presentTopics = [];
32830
+ const missingTopics = [];
32831
+ for (const topic of visibleTopics) {
32832
+ const buffer = this.annotationsMap.get(topic);
32833
+ if (!buffer || buffer.length === 0) {
32834
+ // No annotations yet for this topic
32835
+ if (requiredTopics.includes(topic)) ;
32836
+ continue;
32837
+ }
32838
+
32839
+ // Find preferred (newest <= image time within staleness)
32761
32840
  let preferred;
32762
32841
  for (let i = buffer.length - 1; i >= 0; i--) {
32763
32842
  const entry = buffer[i];
@@ -32768,28 +32847,28 @@ class MessageHandler {
32768
32847
  }
32769
32848
  }
32770
32849
 
32771
- // If none older within staleness, fall back to closest within tolerance
32772
- let fallback = buffer[0];
32773
- let fallbackDelta = Math.abs(fallback.timeSec - imageTimestampSec);
32850
+ // Fallback: closest within tolerance window
32851
+ let closest = buffer[0];
32852
+ let closestDelta = Math.abs(closest.timeSec - imageTimestampSec);
32774
32853
  for (let i = 1; i < buffer.length; i++) {
32775
32854
  const entry = buffer[i];
32776
32855
  const delta = Math.abs(entry.timeSec - imageTimestampSec);
32777
- if (delta < fallbackDelta) {
32778
- fallback = entry;
32779
- fallbackDelta = delta;
32856
+ if (delta < closestDelta) {
32857
+ closest = entry;
32858
+ closestDelta = delta;
32780
32859
  }
32781
32860
  }
32782
- let candidate = preferred ?? fallback;
32861
+ let candidate = preferred ?? closest;
32783
32862
  if (!candidate) continue;
32784
32863
  const candidateDelta = Math.abs(candidate.timeSec - imageTimestampSec);
32785
32864
  const candidateAge = imageTimestampSec - candidate.timeSec;
32786
- const acceptable = preferred != undefined && candidateAge >= 0 && candidateAge <= maxStalenessSec || preferred == undefined && candidateDelta <= syncToleranceSec;
32865
+ const acceptable = preferred && candidateAge >= 0 && candidateAge <= maxStalenessSec || !preferred && candidateDelta <= syncToleranceSec;
32787
32866
  const notFutureFar = candidate.timeSec <= imageTimestampSec + syncToleranceSec;
32788
32867
  if (!acceptable || !notFutureFar) {
32868
+ // can't use for now
32789
32869
  continue;
32790
32870
  }
32791
-
32792
- // Hysteresis: if previous selection is very close and still valid, keep it to avoid flicker
32871
+ // Hysteresis: keep previous if close
32793
32872
  const prevTime = this.lastSelectedByTopic.get(topic);
32794
32873
  if (prevTime != undefined) {
32795
32874
  const prevEntry = buffer.find(e => Math.abs(e.timeSec - prevTime) < 1e-6);
@@ -32802,10 +32881,30 @@ class MessageHandler {
32802
32881
  }
32803
32882
  }
32804
32883
  }
32805
- state.annotationsByTopic.set(topic, candidate.annotation);
32884
+ selectedAnnotations.set(topic, candidate.annotation);
32885
+ presentTopics.push(topic);
32806
32886
  this.lastSelectedByTopic.set(topic, candidate.timeSec);
32807
32887
  }
32808
- return state;
32888
+
32889
+ // Determine missing topics (we have at least some annotation messages for them but could not align one this frame)
32890
+ for (const t of requiredTopics) {
32891
+ if (!presentTopics.includes(t)) {
32892
+ const buf = this.annotationsMap.get(t);
32893
+ if (buf && buf.length > 0) {
32894
+ // We received data but could not synchronize within tolerance -> mark missing
32895
+ missingTopics.push(t);
32896
+ }
32897
+ }
32898
+ }
32899
+
32900
+ // Always return newest image; do not block rendering if annotations incomplete
32901
+ return {
32902
+ image: newestImageEntry.image,
32903
+ annotationsByTopic: selectedAnnotations,
32904
+ // Provide mismatch info only if we have both present and missing; otherwise undefined to reduce HUD noise
32905
+ presentAnnotationTopics: presentTopics.length > 0 && missingTopics.length > 0 ? presentTopics.sort() : undefined,
32906
+ missingAnnotationTopics: presentTopics.length > 0 && missingTopics.length > 0 ? missingTopics.sort() : undefined
32907
+ };
32809
32908
  }
32810
32909
  }
32811
32910
 
@@ -1,4 +1,4 @@
1
- import { a1 as ExternalTokenizer, a9 as ContextTracker, Y as styleTags, Z as tags, a2 as LRParser, a5 as syntaxTree, a3 as ifNotIn, $ as LRLanguage, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport, ac as IterMode, a4 as completeFromList, ad as NodeWeakMap, ab as snippetCompletion } from './index-C41fk9FJ.js';
1
+ import { a1 as ExternalTokenizer, a9 as ContextTracker, Y as styleTags, Z as tags, a2 as LRParser, a5 as syntaxTree, a3 as ifNotIn, $ as LRLanguage, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport, ac as IterMode, a4 as completeFromList, ad as NodeWeakMap, ab as snippetCompletion } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-C41fk9FJ.js';
1
+ import { a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { a1 as ExternalTokenizer, a9 as ContextTracker, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, X as foldNodeProp, a8 as foldInside, U as indentNodeProp, V as continuedIndent, ae as defineCSSCompletionSource, a0 as LanguageSupport } from './index-C41fk9FJ.js';
1
+ import { a1 as ExternalTokenizer, a9 as ContextTracker, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, X as foldNodeProp, a8 as foldInside, U as indentNodeProp, V as continuedIndent, ae as defineCSSCompletionSource, a0 as LanguageSupport } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { Y as styleTags, Z as tags, ak as javascriptLanguage, $ as LRLanguage, a0 as LanguageSupport, a2 as LRParser, ah as html, ai as parseMixed, a1 as ExternalTokenizer } from './index-C41fk9FJ.js';
1
+ import { Y as styleTags, Z as tags, ak as javascriptLanguage, $ as LRLanguage, a0 as LanguageSupport, a2 as LRParser, ah as html, ai as parseMixed, a1 as ExternalTokenizer } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { af as EditorView, ag as EditorSelection, $ as LRLanguage, Y as styleTags, Z as tags, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a0 as LanguageSupport, a2 as LRParser, a5 as syntaxTree, ah as html, ai as parseMixed, a1 as ExternalTokenizer } from './index-C41fk9FJ.js';
1
+ import { af as EditorView, ag as EditorSelection, $ as LRLanguage, Y as styleTags, Z as tags, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a0 as LanguageSupport, a2 as LRParser, a5 as syntaxTree, ah as html, ai as parseMixed, a1 as ExternalTokenizer } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { U as indentNodeProp, V as continuedIndent, X as foldNodeProp, Y as styleTags, Z as tags, $ as LRLanguage, a0 as LanguageSupport, a1 as ExternalTokenizer, a2 as LRParser, a3 as ifNotIn, a4 as completeFromList, a5 as syntaxTree } from './index-C41fk9FJ.js';
1
+ import { U as indentNodeProp, V as continuedIndent, X as foldNodeProp, Y as styleTags, Z as tags, $ as LRLanguage, a0 as LanguageSupport, a1 as ExternalTokenizer, a2 as LRParser, a3 as ifNotIn, a4 as completeFromList, a5 as syntaxTree } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { Y as styleTags, Z as tags, $ as LRLanguage, a0 as LanguageSupport, a2 as LRParser, aa as LocalTokenGroup, ah as html, ai as parseMixed, ak as javascriptLanguage } from './index-C41fk9FJ.js';
1
+ import { Y as styleTags, Z as tags, $ as LRLanguage, a0 as LanguageSupport, a2 as LRParser, aa as LocalTokenGroup, ah as html, ai as parseMixed, ak as javascriptLanguage } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { a9 as ContextTracker, a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, X as foldNodeProp, aj as bracketMatchingHandle, a0 as LanguageSupport, af as EditorView, a5 as syntaxTree, ag as EditorSelection } from './index-C41fk9FJ.js';
1
+ import { a9 as ContextTracker, a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, X as foldNodeProp, aj as bracketMatchingHandle, a0 as LanguageSupport, af as EditorView, a5 as syntaxTree, ag as EditorSelection } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { a1 as ExternalTokenizer, a9 as ContextTracker, Y as styleTags, Z as tags, a2 as LRParser, aa as LocalTokenGroup, ab as snippetCompletion, a5 as syntaxTree, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a6 as flatIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport, a3 as ifNotIn, a4 as completeFromList, ac as IterMode, ad as NodeWeakMap } from './index-C41fk9FJ.js';
1
+ import { a1 as ExternalTokenizer, a9 as ContextTracker, Y as styleTags, Z as tags, a2 as LRParser, aa as LocalTokenGroup, ab as snippetCompletion, a5 as syntaxTree, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a6 as flatIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport, a3 as ifNotIn, a4 as completeFromList, ac as IterMode, ad as NodeWeakMap } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a6 as flatIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-C41fk9FJ.js';
1
+ import { Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a6 as flatIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { $ as LRLanguage, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, Y as styleTags, Z as tags, a0 as LanguageSupport, a2 as LRParser } from './index-C41fk9FJ.js';
1
+ import { $ as LRLanguage, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, Y as styleTags, Z as tags, a0 as LanguageSupport, a2 as LRParser } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { Y as styleTags, Z as tags, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, X as foldNodeProp, a8 as foldInside, ae as defineCSSCompletionSource, a0 as LanguageSupport, a2 as LRParser, a1 as ExternalTokenizer } from './index-C41fk9FJ.js';
1
+ import { Y as styleTags, Z as tags, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, X as foldNodeProp, a8 as foldInside, ae as defineCSSCompletionSource, a0 as LanguageSupport, a2 as LRParser, a1 as ExternalTokenizer } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-C41fk9FJ.js';
1
+ import { Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a6 as flatIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-C41fk9FJ.js';
1
+ import { a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, V as continuedIndent, a6 as flatIndent, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- import { ImagePanel } from './index-Clq69yV3.js';
1
+ import { ImagePanel } from './index-B4xhG_lJ.js';
2
2
  import 'react';
3
3
  import 'react-dom';
4
4
  import './depth-BGin0LSZ.js';
@@ -9,7 +9,7 @@ import './protobuf-BFCtaU7c.js';
9
9
  import 'protobufjs/minimal';
10
10
  import '@mui/material';
11
11
  import './isArrayLikeObject-Bytw9p-q.js';
12
- import './index-C41fk9FJ.js';
12
+ import './index-zO0AHCu7.js';
13
13
  import './utils-Hzt3wxhG.js';
14
14
  import './FoxgloveServer-h5m-pXp3.js';
15
15
  import 'ms';
@@ -1,4 +1,4 @@
1
- import { a9 as ContextTracker, a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport, ai as parseMixed } from './index-C41fk9FJ.js';
1
+ import { a9 as ContextTracker, a1 as ExternalTokenizer, Y as styleTags, Z as tags, a2 as LRParser, $ as LRLanguage, U as indentNodeProp, a7 as delimitedIndent, X as foldNodeProp, a8 as foldInside, a0 as LanguageSupport, ai as parseMixed } from './index-zO0AHCu7.js';
2
2
  import './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import 'react';
@@ -575,7 +575,7 @@ class DepthToPointcloudWorkerPool {
575
575
  this.#FRAME_BATCH_SIZE = Math.max(1, batchSize);
576
576
  this.#targetDispatchIntervalMs = DISPATCH_INTERVAL_MS / Math.max(1, Math.round(targetFps / DISPATCH_INTERVAL_FRACTION)) * this.#calculateBatchMultiplier();
577
577
  this.#maxProcessedQueueSize = Math.max(1, maxProcessedQueueSize);
578
- this.workerApis = new Array(WORKER_COUNT).fill(undefined).map(() => wrap$3(new Worker(new URL("pointcloudFromDepth.worker-hil48rbC.js", import.meta.url), {
578
+ this.workerApis = new Array(WORKER_COUNT).fill(undefined).map(() => wrap$3(new Worker(new URL("pointcloudFromDepth.worker-CoUfUVnZ.js", import.meta.url), {
579
579
  type: "module"
580
580
  })));
581
581
  this.#metrics = globalInputEventMetricsManager;
@@ -653,7 +653,7 @@ class DepthToPointcloudWorkerPool {
653
653
  // biome-ignore lint/style/noNonNullAssertion: <explanation>
654
654
  const workerApi = this.workerApis[workerIndex];
655
655
  this.lastUsedWorkerIndex = (this.lastUsedWorkerIndex + 1) % WORKER_COUNT;
656
- workerApi.depthToPointcloudGPU(depthDataArray, width, height, fx, fy, cx, cy, i420DataArray, i420Width, i420Height, {
656
+ workerApi.depthToPointcloudGPU(depthDataArray, width, height, fx, fy, cx, cy, i420DataArray, i420Width, i420Height, Number(localStorage.getItem("stereoDepthMaxValue") ?? "5.0"), {
657
657
  hasGPU: this.#isWebGpuSupported
658
658
  }).then(results => {
659
659
  if (results.length === batchToProcess.length) {
@@ -790,7 +790,7 @@ class ConfigStore {
790
790
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
791
791
 
792
792
  function initWorker(callback) {
793
- const workerWrap = wrap$3(new Worker(new URL("deserialization.worker-CgJJ0wn7.js", import.meta.url), {
793
+ const workerWrap = wrap$3(new Worker(new URL("deserialization.worker-CUQshOva.js", import.meta.url), {
794
794
  type: "module",
795
795
  name: `message-decoder`
796
796
  }));
@@ -86841,7 +86841,7 @@ function legacy(parser) {
86841
86841
  return new LanguageSupport(StreamLanguage.define(parser));
86842
86842
  }
86843
86843
  function sql$1(dialectName) {
86844
- return import('./index-Cyl0afzE.js').then(m => m.sql({ dialect: m[dialectName] }));
86844
+ return import('./index-CBOygVjC.js').then(m => m.sql({ dialect: m[dialectName] }));
86845
86845
  }
86846
86846
  /**
86847
86847
  An array of language descriptions for known language packages.
@@ -86852,7 +86852,7 @@ const languages = [
86852
86852
  name: "C",
86853
86853
  extensions: ["c", "h", "ino"],
86854
86854
  load() {
86855
- return import('./index-DnFWiYGu.js').then(m => m.cpp());
86855
+ return import('./index-DfDFLVJw.js').then(m => m.cpp());
86856
86856
  }
86857
86857
  }),
86858
86858
  /*@__PURE__*/LanguageDescription.of({
@@ -86860,7 +86860,7 @@ const languages = [
86860
86860
  alias: ["cpp"],
86861
86861
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
86862
86862
  load() {
86863
- return import('./index-DnFWiYGu.js').then(m => m.cpp());
86863
+ return import('./index-DfDFLVJw.js').then(m => m.cpp());
86864
86864
  }
86865
86865
  }),
86866
86866
  /*@__PURE__*/LanguageDescription.of({
@@ -86880,7 +86880,7 @@ const languages = [
86880
86880
  name: "Go",
86881
86881
  extensions: ["go"],
86882
86882
  load() {
86883
- return import('./index-BZBENqR3.js').then(m => m.go());
86883
+ return import('./index-DCjnDYdn.js').then(m => m.go());
86884
86884
  }
86885
86885
  }),
86886
86886
  /*@__PURE__*/LanguageDescription.of({
@@ -86895,7 +86895,7 @@ const languages = [
86895
86895
  name: "Java",
86896
86896
  extensions: ["java"],
86897
86897
  load() {
86898
- return import('./index-0xvyd9_r.js').then(m => m.java());
86898
+ return import('./index-DEUT3mEo.js').then(m => m.java());
86899
86899
  }
86900
86900
  }),
86901
86901
  /*@__PURE__*/LanguageDescription.of({
@@ -86911,7 +86911,7 @@ const languages = [
86911
86911
  alias: ["json5"],
86912
86912
  extensions: ["json", "map"],
86913
86913
  load() {
86914
- return import('./index-AReJXz0b.js').then(m => m.json());
86914
+ return import('./index-DUXZHYX9.js').then(m => m.json());
86915
86915
  }
86916
86916
  }),
86917
86917
  /*@__PURE__*/LanguageDescription.of({
@@ -86925,14 +86925,14 @@ const languages = [
86925
86925
  name: "LESS",
86926
86926
  extensions: ["less"],
86927
86927
  load() {
86928
- return import('./index-BWnke17_.js').then(m => m.less());
86928
+ return import('./index-DQP_BVHB.js').then(m => m.less());
86929
86929
  }
86930
86930
  }),
86931
86931
  /*@__PURE__*/LanguageDescription.of({
86932
86932
  name: "Liquid",
86933
86933
  extensions: ["liquid"],
86934
86934
  load() {
86935
- return import('./index-DkTZCwWX.js').then(m => m.liquid());
86935
+ return import('./index-CAUP2iVN.js').then(m => m.liquid());
86936
86936
  }
86937
86937
  }),
86938
86938
  /*@__PURE__*/LanguageDescription.of({
@@ -86958,7 +86958,7 @@ const languages = [
86958
86958
  name: "PHP",
86959
86959
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
86960
86960
  load() {
86961
- return import('./index-BJslJPfz.js').then(m => m.php());
86961
+ return import('./index-3ExnAzAV.js').then(m => m.php());
86962
86962
  }
86963
86963
  }),
86964
86964
  /*@__PURE__*/LanguageDescription.of({
@@ -86975,28 +86975,28 @@ const languages = [
86975
86975
  extensions: ["BUILD", "bzl", "py", "pyw"],
86976
86976
  filename: /^(BUCK|BUILD)$/,
86977
86977
  load() {
86978
- return import('./index-Ct1D6II_.js').then(m => m.python());
86978
+ return import('./index-BJDORwpv.js').then(m => m.python());
86979
86979
  }
86980
86980
  }),
86981
86981
  /*@__PURE__*/LanguageDescription.of({
86982
86982
  name: "Rust",
86983
86983
  extensions: ["rs"],
86984
86984
  load() {
86985
- return import('./index-CyYbEgIe.js').then(m => m.rust());
86985
+ return import('./index-BXE5U9N5.js').then(m => m.rust());
86986
86986
  }
86987
86987
  }),
86988
86988
  /*@__PURE__*/LanguageDescription.of({
86989
86989
  name: "Sass",
86990
86990
  extensions: ["sass"],
86991
86991
  load() {
86992
- return import('./index-D-mDIWK_.js').then(m => m.sass({ indented: true }));
86992
+ return import('./index-BimPKcrm.js').then(m => m.sass({ indented: true }));
86993
86993
  }
86994
86994
  }),
86995
86995
  /*@__PURE__*/LanguageDescription.of({
86996
86996
  name: "SCSS",
86997
86997
  extensions: ["scss"],
86998
86998
  load() {
86999
- return import('./index-D-mDIWK_.js').then(m => m.sass());
86999
+ return import('./index-BimPKcrm.js').then(m => m.sass());
87000
87000
  }
87001
87001
  }),
87002
87002
  /*@__PURE__*/LanguageDescription.of({
@@ -87027,7 +87027,7 @@ const languages = [
87027
87027
  name: "WebAssembly",
87028
87028
  extensions: ["wat", "wast"],
87029
87029
  load() {
87030
- return import('./index-DuwwCf0Y.js').then(m => m.wast());
87030
+ return import('./index-DNjRDu_i.js').then(m => m.wast());
87031
87031
  }
87032
87032
  }),
87033
87033
  /*@__PURE__*/LanguageDescription.of({
@@ -87035,7 +87035,7 @@ const languages = [
87035
87035
  alias: ["rss", "wsdl", "xsd"],
87036
87036
  extensions: ["xml", "xsl", "xsd", "svg"],
87037
87037
  load() {
87038
- return import('./index-nO2O7il5.js').then(m => m.xml());
87038
+ return import('./index-CyTYlc8K.js').then(m => m.xml());
87039
87039
  }
87040
87040
  }),
87041
87041
  /*@__PURE__*/LanguageDescription.of({
@@ -87043,7 +87043,7 @@ const languages = [
87043
87043
  alias: ["yml"],
87044
87044
  extensions: ["yaml", "yml"],
87045
87045
  load() {
87046
- return import('./index-Bb6PcuFb.js').then(m => m.yaml());
87046
+ return import('./index-FWDxRfR8.js').then(m => m.yaml());
87047
87047
  }
87048
87048
  }),
87049
87049
  // Legacy modes ported from CodeMirror 5
@@ -87839,13 +87839,13 @@ const languages = [
87839
87839
  name: "Vue",
87840
87840
  extensions: ["vue"],
87841
87841
  load() {
87842
- return import('./index-JFZDeEB8.js').then(m => m.vue());
87842
+ return import('./index-CpgTEFvA.js').then(m => m.vue());
87843
87843
  }
87844
87844
  }),
87845
87845
  /*@__PURE__*/LanguageDescription.of({
87846
87846
  name: "Angular Template",
87847
87847
  load() {
87848
- return import('./index-CRGrBIhH.js').then(m => m.angular());
87848
+ return import('./index-C4y1s0Nb.js').then(m => m.angular());
87849
87849
  }
87850
87850
  })
87851
87851
  ];
@@ -166554,7 +166554,7 @@ function createRenderDelaySampler() {
166554
166554
  };
166555
166555
  }
166556
166556
 
166557
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CAKA0YwJ.js'));
166557
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-Dly2VJ2B.js'));
166558
166558
  const ImagePanelBody = ({
166559
166559
  topic,
166560
166560
  frameRenderedEvent,
@@ -166649,7 +166649,7 @@ const DEFAULT_CAMERA_STATE = {
166649
166649
  // License, v2.0. If a copy of the MPL was not distributed with this
166650
166650
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
166651
166651
 
166652
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-Clq69yV3.js'));
166652
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-B4xhG_lJ.js'));
166653
166653
  const PointCloudPanelBody = ({
166654
166654
  topic,
166655
166655
  frameRenderedEvent,
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { av as FrameStore, ao as ImagePanel, an as PanelLayout, ap as PointCloudPanel, al as VisualizerConnection, am as VisualizerContext, aq as constructKeyForTopicRenderMetrics, aw as getIMUEventEmitter, as as globalDecodeMetricsManager, ar as globalInputEventMetricsManager, at as globalRenderMetricsManager, au as globalThroughputMetricsManager } from './index-C41fk9FJ.js';
1
+ export { av as FrameStore, ao as ImagePanel, an as PanelLayout, ap as PointCloudPanel, al as VisualizerConnection, am as VisualizerContext, aq as constructKeyForTopicRenderMetrics, aw as getIMUEventEmitter, as as globalDecodeMetricsManager, ar as globalInputEventMetricsManager, at as globalRenderMetricsManager, au as globalThroughputMetricsManager } from './index-zO0AHCu7.js';
2
2
  export { S as getDistanceFromDepthDataForOffset } from './depth-BGin0LSZ.js';
3
3
  import './comlink-DHMAu6X7.js';
4
4
  import './utils-Hzt3wxhG.js';
@@ -1 +1 @@
1
- {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../../../../../src/messaging/deserialization/detections/detection.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAInE,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAG7E,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,4BAA4B,GAAG,IAAI,CAsIrH"}
1
+ {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../../../../../src/messaging/deserialization/detections/detection.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAInE,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAG7E,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,4BAA4B,GAAG,IAAI,CA0IrH"}
@@ -24,6 +24,9 @@ export function deserializeImgDetections({ topic, message, callback, topicSizes
24
24
  const highlightSizeX = Math.min(highligtLength, detectionWidth);
25
25
  const highlightSizeY = Math.min(highligtLength * ratio, detection.ymax - detection.ymin);
26
26
  const style = DETECTION_STYLE[detection.label] ?? DEFAULT_STYLE;
27
+ if (detection.labelName) {
28
+ style.label = detection.labelName;
29
+ }
27
30
  foxgloveMessage.points.push({
28
31
  timestamp: receiveTime,
29
32
  points: [