@luxonis/visualizer-protobuf 2.13.0 → 2.14.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 (58) hide show
  1. package/dist/WorkerImageDecoder.worker-DCoSYoLL.js +31 -0
  2. package/dist/{decodeImage-BBqnjJjE.js → decodeImage-NYPkamnK.js} +29 -363
  3. package/dist/{index-4msm-wtA.js → index-BHzFgL5N.js} +1 -1
  4. package/dist/{index-CpLzYoX8.js → index-BJofTpil.js} +1 -1
  5. package/dist/{index-CE0akFDh.js → index-BPWE58mB.js} +85 -56
  6. package/dist/{index-DfgdvKhl.js → index-BTNGGXoa.js} +1 -1
  7. package/dist/{index-CbS2HMyR.js → index-BwoyZPjj.js} +1 -1
  8. package/dist/{index-DSIL_c41.js → index-C1eH0RCy.js} +1 -1
  9. package/dist/{index-PmNaQtc7.js → index-CIfIw1LQ.js} +1 -1
  10. package/dist/{index-nJgMRJTy.js → index-Cq7so9Q9.js} +1 -1
  11. package/dist/{index-CtKYoeeM.js → index-D7jNrXVP.js} +1 -1
  12. package/dist/{index-DFlpZwK1.js → index-D8jKQuGu.js} +22 -22
  13. package/dist/{index-BsQeBBzM.js → index-D9d5kqGf.js} +1 -1
  14. package/dist/{index-BWakrawk.js → index-DAXpEznJ.js} +3 -3
  15. package/dist/{index-BbAm1fKU.js → index-DCh-Eobo.js} +1 -1
  16. package/dist/{index-DyoCH5GH.js → index-DI5QHg2x.js} +1 -1
  17. package/dist/{index-fN8Tpgww.js → index-DM9oCkXH.js} +1 -1
  18. package/dist/{index-DFdQY59I.js → index-DY6zQP_F.js} +1 -1
  19. package/dist/{index-DTZuXJ1A.js → index-Di_-JfGf.js} +1 -1
  20. package/dist/{index-BK0O58zw.js → index-Zivk6fee.js} +1 -1
  21. package/dist/{index-Do7UsSft.js → index-d8vRrHr4.js} +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
  24. package/dist/lib/src/components/PanelToolbar.js +1 -1
  25. package/dist/lib/src/components/PanelToolbar.js.map +1 -1
  26. package/dist/lib/src/messaging/message-handler.d.ts.map +1 -1
  27. package/dist/lib/src/messaging/message-handler.js.map +1 -1
  28. package/dist/lib/src/protobuf.generated/IMUData.d.ts +122 -0
  29. package/dist/lib/src/protobuf.generated/IMUData.d.ts.map +1 -0
  30. package/dist/lib/src/protobuf.generated/IMUData.js +691 -0
  31. package/dist/lib/src/protobuf.generated/IMUData.js.map +1 -0
  32. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts +1 -1
  33. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts.map +1 -1
  34. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js +6 -7
  35. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js.map +1 -1
  36. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts.map +1 -1
  37. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js +2 -3
  38. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js.map +1 -1
  39. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.d.ts.map +1 -1
  40. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/ImageMode.js.map +1 -1
  41. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/ImageRenderable.d.ts +1 -1
  42. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/ImageRenderable.d.ts.map +1 -1
  43. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/ImageRenderable.js +8 -3
  44. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/ImageRenderable.js.map +1 -1
  45. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.d.ts +10 -2
  46. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.d.ts.map +1 -1
  47. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.js +69 -10
  48. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.js.map +1 -1
  49. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/decodeImage.d.ts +1 -1
  50. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/decodeImage.d.ts.map +1 -1
  51. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/decodeImage.js +29 -21
  52. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/decodeImage.js.map +1 -1
  53. package/package.json +3 -1
  54. package/dist/WorkerImageDecoder.worker-DjK2q36W.js +0 -18
  55. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.worker.d.ts +0 -9
  56. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.worker.d.ts.map +0 -1
  57. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.worker.js +0 -15
  58. package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/Images/WorkerImageDecoder.worker.js.map +0 -1
@@ -1,7 +1,7 @@
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-DFlpZwK1.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-D8jKQuGu.js';
5
5
  import { createStore, useStore } from 'zustand';
6
6
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
7
7
  import { a as getDefaultExportFromCjs, c as commonjsGlobal, g as getAugmentedNamespace, E as EventEmitter } from './FoxgloveServer-DiLI7KZU.js';
@@ -14,7 +14,7 @@ import MoreVertIcon from '@mui/icons-material/MoreVert';
14
14
  import CancelIcon from '@mui/icons-material/Cancel';
15
15
  import SearchIcon from '@mui/icons-material/Search';
16
16
  import { useDrag, useDrop } from 'react-dnd';
17
- import { B as Box3, V as Vector3, I as InstancedBufferGeometry, F as Float32BufferAttribute, a as InstancedInterleavedBuffer, b as InterleavedBufferAttribute, W as WireframeGeometry, S as Sphere, U as UniformsLib, c as Vector2, f as ShaderLib, g as UniformsUtils, h as ShaderMaterial, i as Vector4, M as Matrix4, L as Line3, j as Mesh, k as MathUtils, O as Object3D, C as Color, r as rgbToThreeColor, s as stringToRgba, m as makeRgba, l as MeshStandardMaterial, R as ReplaceStencilOp, N as NotEqualStencilFunc, D as DoubleSide, P as PointsMaterial, n as rgbaToCssString, o as colorModeSettingsFields, p as autoSelectColorSettings, q as PlaneGeometry, u as DataTexture, v as UVMapping, w as ClampToEdgeWrapping, x as NearestFilter, y as LinearFilter, z as FS_SRGB_TO_LINEAR, A as SRGBColorSpace, E as LinearSRGBColorSpace, G as rgbaToLinear, H as RedFormat, J as RGBAFormat, K as getColorConverter, Q as FloatType, T as UnsignedByteType, X as NEEDS_MIN_MAX$1, Y as InstancedMesh, Z as CylinderGeometry, _ as ConeGeometry, $ as DataTextureLoader, a0 as LinearMipmapLinearFilter, a1 as Loader, a2 as LoaderUtils, a3 as FileLoader, a4 as MeshBasicMaterial, a5 as Scene, a6 as TextureLoader, a7 as AnimationClip, a8 as VectorKeyframeTrack, a9 as QuaternionKeyframeTrack, aa as MeshLambertMaterial, ab as MeshPhongMaterial, ac as FrontSide, ad as PerspectiveCamera, ae as OrthographicCamera, af as AmbientLight, ag as SpotLight, ah as PointLight, ai as DirectionalLight, aj as BufferGeometry, ak as Group, al as Quaternion, am as Bone, an as LineBasicMaterial, ao as SkinnedMesh, ap as Line, aq as LineSegments, ar as RepeatWrapping, as as Skeleton, at as BufferAttribute, au as TrianglesDrawMode, av as TriangleFanDrawMode, aw as TriangleStripDrawMode, ax as MeshPhysicalMaterial, ay as ImageBitmapLoader, az as InterleavedBuffer, aA as Material, aB as PropertyBinding, aC as LineLoop, aD as Points, aE as InterpolateLinear, aF as ColorManagement, aG as NearestMipmapNearestFilter, aH as LinearMipmapNearestFilter, aI as NearestMipmapLinearFilter, aJ as MirroredRepeatWrapping, aK as InterpolateDiscrete, aL as Texture, aM as NumberKeyframeTrack, aN as Interpolant, aO as EdgesGeometry, aP as LoadingManager, aQ as stringToRgb, aR as getLuminance, aS as Euler, aT as vec3TupleApproxEquals, aU as wrap, aV as releaseProxy, aW as decodeCompressedImageToBitmap, aX as CanvasTexture, aY as Shape, aZ as SRGBToLinear, a_ as ShapeGeometry, a$ as DynamicDrawUsage, b0 as ShaderChunk, b1 as IMAGE_DEFAULT_COLOR_MODE_SETTINGS, b2 as colorHasTransparency, b3 as StaticDrawUsage, b4 as RawShaderMaterial, b5 as GLSL3, b6 as colorFieldComputedPrefix, b7 as getRotationTo, b8 as SphereGeometry, b9 as rgbaGradient, ba as InstancedBufferAttribute, bb as BoxGeometry, bc as DARK_OUTLINE, bd as LIGHT_OUTLINE, be as CircleGeometry, bf as LineDashedMaterial, bg as GreaterDepth, bh as EventDispatcher, bi as Plane, bj as Raycaster, bk as WebGLRenderTarget, bl as Ray, bm as MOUSE, bn as TOUCH, bo as Spherical, bp as WebGLRenderer, bq as NoToneMapping, br as VSMShadowMap, bs as HemisphereLight } from './decodeImage-BBqnjJjE.js';
17
+ import { B as Box3, V as Vector3, I as InstancedBufferGeometry, F as Float32BufferAttribute, a as InstancedInterleavedBuffer, b as InterleavedBufferAttribute, W as WireframeGeometry, S as Sphere, U as UniformsLib, c as Vector2, e as ShaderLib, f as UniformsUtils, g as ShaderMaterial, h as Vector4, M as Matrix4, L as Line3, i as Mesh, j as MathUtils, O as Object3D, C as Color, r as rgbToThreeColor, s as stringToRgba, m as makeRgba, k as MeshStandardMaterial, R as ReplaceStencilOp, N as NotEqualStencilFunc, D as DoubleSide, P as PointsMaterial, l as rgbaToCssString, n as colorModeSettingsFields, o as autoSelectColorSettings, p as PlaneGeometry, q as DataTexture, t as UVMapping, u as ClampToEdgeWrapping, v as NearestFilter, w as LinearFilter, x as FS_SRGB_TO_LINEAR, y as SRGBColorSpace, z as LinearSRGBColorSpace, A as rgbaToLinear, E as RedFormat, G as RGBAFormat, H as getColorConverter, J as FloatType, K as UnsignedByteType, Q as NEEDS_MIN_MAX$1, T as InstancedMesh, X as CylinderGeometry, Y as ConeGeometry, Z as DataTextureLoader, _ as LinearMipmapLinearFilter, $ as Loader, a0 as LoaderUtils, a1 as FileLoader, a2 as MeshBasicMaterial, a3 as Scene, a4 as TextureLoader, a5 as AnimationClip, a6 as VectorKeyframeTrack, a7 as QuaternionKeyframeTrack, a8 as MeshLambertMaterial, a9 as MeshPhongMaterial, aa as FrontSide, ab as PerspectiveCamera, ac as OrthographicCamera, ad as AmbientLight, ae as SpotLight, af as PointLight, ag as DirectionalLight, ah as BufferGeometry, ai as Group, aj as Quaternion, ak as Bone, al as LineBasicMaterial, am as SkinnedMesh, an as Line, ao as LineSegments, ap as RepeatWrapping, aq as Skeleton, ar as BufferAttribute, as as TrianglesDrawMode, at as TriangleFanDrawMode, au as TriangleStripDrawMode, av as MeshPhysicalMaterial, aw as ImageBitmapLoader, ax as InterleavedBuffer, ay as Material, az as PropertyBinding, aA as LineLoop, aB as Points, aC as InterpolateLinear, aD as ColorManagement, aE as NearestMipmapNearestFilter, aF as LinearMipmapNearestFilter, aG as NearestMipmapLinearFilter, aH as MirroredRepeatWrapping, aI as InterpolateDiscrete, aJ as Texture, aK as NumberKeyframeTrack, aL as Interpolant, aM as EdgesGeometry, aN as LoadingManager, aO as stringToRgb, aP as getLuminance, aQ as Euler, aR as vec3TupleApproxEquals, aS as decodeCompressedImageToBitmap, aT as CanvasTexture, aU as Shape, aV as SRGBToLinear, aW as ShapeGeometry, aX as DynamicDrawUsage, aY as ShaderChunk, aZ as IMAGE_DEFAULT_COLOR_MODE_SETTINGS, a_ as colorHasTransparency, a$ as StaticDrawUsage, b0 as RawShaderMaterial, b1 as GLSL3, b2 as colorFieldComputedPrefix, b3 as getRotationTo, b4 as SphereGeometry, b5 as rgbaGradient, b6 as InstancedBufferAttribute, b7 as BoxGeometry, b8 as DARK_OUTLINE, b9 as LIGHT_OUTLINE, ba as CircleGeometry, bb as LineDashedMaterial, bc as GreaterDepth, bd as EventDispatcher, be as Plane, bf as Raycaster, bg as WebGLRenderTarget, bh as Ray, bi as MOUSE, bj as TOUCH, bk as Spherical, bl as WebGLRenderer, bm as NoToneMapping, bn as VSMShadowMap, bo as HemisphereLight } from './decodeImage-NYPkamnK.js';
18
18
  import { CacheProvider } from '@emotion/react';
19
19
  import '@mui/material/styles/createTypography';
20
20
  import require$$1$3 from 'color';
@@ -31455,34 +31455,7 @@ Object.defineProperty(awaited, "__esModule", { value: true });
31455
31455
  // License, v2.0. If a copy of the MPL was not distributed with this
31456
31456
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
31457
31457
 
31458
-
31459
- /**
31460
- * Wraps an instantiated `Worker` and exposes its API in the same way that `Comlink.wrap` does
31461
- * but it also provides a `dispose` function to terminate the worker and release the comlink proxy.
31462
- * This can help prevent memory leaks when the comlink proxy is unable to garbage collect itself due to
31463
- * unresolved promises which can occur if the worker is terminated while processing a request.
31464
- * This should be used instead of `Comlink.wrap` where possible.
31465
- *
31466
- * @param worker - worker to be wrapped by comlink
31467
- * @returns remote - API for worker wrapped by comlink. What is normally received from Comlink.wrap
31468
- * @returns dispose - function to release the comlink proxy and to terminate the worker
31469
- */
31470
- function ComlinkWrap(worker) {
31471
- const remote = wrap(worker);
31472
- const dispose = () => {
31473
- remote[releaseProxy]();
31474
- worker.terminate();
31475
- };
31476
- return {
31477
- remote,
31478
- dispose
31479
- };
31480
- }
31481
-
31482
- // This Source Code Form is subject to the terms of the Mozilla Public
31483
- // License, v2.0. If a copy of the MPL was not distributed with this
31484
- // file, You can obtain one at http://mozilla.org/MPL/2.0/
31485
-
31458
+ //import init, { decode_i420_simd } from "./pkg/viewer_rust_decoder.js";
31486
31459
 
31487
31460
  /**
31488
31461
  * Provides a worker that can process RawImages on a background thread.
@@ -31494,27 +31467,82 @@ function ComlinkWrap(worker) {
31494
31467
  */
31495
31468
 
31496
31469
  class WorkerImageDecoder {
31497
- #remote;
31498
- #dispose;
31470
+ //#wasmInitialized = false;
31471
+ #worker; // have more workers
31472
+ //#reusableBuffer: SharedArrayBuffer | null = null;
31473
+
31499
31474
  constructor() {
31500
- const {
31501
- remote,
31502
- dispose
31503
- } = ComlinkWrap(new Worker(new URL("WorkerImageDecoder.worker-DjK2q36W.js", import.meta.url), {
31504
- type: 'module'
31505
- }));
31506
- this.#remote = remote;
31507
- this.#dispose = dispose;
31475
+ this.#worker = new Worker(new URL("WorkerImageDecoder.worker-DCoSYoLL.js", import.meta.url), {
31476
+ type: "module"
31477
+ });
31508
31478
  }
31509
31479
 
31510
31480
  /**
31511
31481
  * Copies `image` to the worker, and transfers the decoded result back to the main thread.
31512
31482
  */
31513
- async decode(image, options) {
31514
- return await this.#remote.decode(image, options);
31483
+ decode(image, options) {
31484
+ return new Promise((resolve, reject) => {
31485
+ image.width * image.height * 4;
31486
+
31487
+ // Create or resize buffer if needed
31488
+ //if (!this.#reusableBuffer || this.#reusableBuffer.byteLength !== requiredSize) {
31489
+ // console.log("Resizing buffer", this.#reusableBuffer?.byteLength);
31490
+ // this.#reusableBuffer = new SharedArrayBuffer(requiredSize);
31491
+ //}
31492
+
31493
+ this.#worker.onmessage = event => {
31494
+ if (event.data.error) {
31495
+ reject(new Error(event.data.error));
31496
+ } else {
31497
+ resolve(new ImageData(event.data.result, image.width, image.height));
31498
+ }
31499
+ };
31500
+
31501
+ // TODO: Try using shared buffer for input data as well
31502
+ this.#worker.postMessage({
31503
+ image,
31504
+ options
31505
+ }, [image.data.buffer]);
31506
+ });
31515
31507
  }
31508
+
31509
+ //public async decodeOnMain(image: RosImage | RawImage, options: Partial<RawImageOptions>): Promise<ImageData | ImageBitmap> {
31510
+ // const requiredSize = image.width * image.height * 4;
31511
+ //
31512
+ // // Create or resize buffer if needed
31513
+ // if (!this.#reusableBuffer || this.#reusableBuffer.length < requiredSize) {
31514
+ // console.log('Resizing buffer', this.#reusableBuffer?.length);
31515
+ // this.#reusableBuffer = new Uint8ClampedArray(requiredSize);
31516
+ // }
31517
+ //
31518
+ // return decodeRawImage(image, options, this.#reusableBuffer).then(() => {
31519
+ // return new ImageData(this.#reusableBuffer!, image.width, image.height);
31520
+ // });
31521
+ //}
31522
+
31523
+ //public async decodeRust(
31524
+ // image: RosImage | RawImage,
31525
+ // options: Partial<RawImageOptions>,
31526
+ //): Promise<ImageData> {
31527
+ // if (!this.#wasmInitialized) {
31528
+ // console.log("Initializing wasm decoder");
31529
+ // await init();
31530
+ // this.#wasmInitialized = true;
31531
+ // }
31532
+ //
31533
+ // // TODO: Potentially use async rs function to improve performance
31534
+ // const decodedBuffer: Uint8Array = decode_i420_simd(
31535
+ // image.data as Uint8Array,
31536
+ // image.width,
31537
+ // image.height,
31538
+ // 0,
31539
+ // );
31540
+ //
31541
+ // return new ImageData(new Uint8ClampedArray(decodedBuffer), image.width, image.height);
31542
+ //}
31543
+
31516
31544
  terminate() {
31517
- this.#dispose();
31545
+ this.#worker.terminate();
31518
31546
  }
31519
31547
  }
31520
31548
 
@@ -31522,6 +31550,7 @@ class WorkerImageDecoder {
31522
31550
  // License, v2.0. If a copy of the MPL was not distributed with this
31523
31551
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
31524
31552
 
31553
+ const WORKER_COUNT = 4;
31525
31554
  const log$4 = Logger.getLogger("src/index.ts");
31526
31555
  const DEFAULT_DISTANCE = 1;
31527
31556
  const DEFAULT_PLANAR_PROJECTION_FACTOR = 0;
@@ -31546,12 +31575,14 @@ class ImageRenderable extends Renderable {
31546
31575
  #renderBehindScene = false;
31547
31576
  #isUpdating = false;
31548
31577
  #decodedImage;
31578
+ #lastUsedDecoderIndex = 0;
31549
31579
  #receivedImageSequenceNumber = 0;
31550
31580
  #displayedImageSequenceNumber = 0;
31551
31581
  #showingErrorImage = false;
31552
31582
  #disposed = false;
31553
31583
  constructor(topicName, renderer, userData) {
31554
31584
  super(topicName, renderer, userData);
31585
+ this.decoderPool = new Array(WORKER_COUNT).fill(undefined).map(() => new WorkerImageDecoder());
31555
31586
  }
31556
31587
  isDisposed() {
31557
31588
  return this.#disposed;
@@ -31564,7 +31595,7 @@ class ImageRenderable extends Renderable {
31564
31595
  this.userData.texture?.dispose();
31565
31596
  this.userData.material?.dispose();
31566
31597
  this.userData.geometry?.dispose();
31567
- this.decoder?.terminate();
31598
+ this.decoderPool?.forEach(decoder => decoder.terminate());
31568
31599
  super.dispose();
31569
31600
  }
31570
31601
  updateHeaderInfo() {
@@ -31675,7 +31706,9 @@ class ImageRenderable extends Renderable {
31675
31706
  if ("format" in image) {
31676
31707
  return await decodeCompressedImageToBitmap(image, resizeWidth);
31677
31708
  }
31678
- return await (this.decoder ??= new WorkerImageDecoder()).decode(image, this.userData.settings);
31709
+ const decoder = this.decoderPool?.at(this.#lastUsedDecoderIndex);
31710
+ this.#lastUsedDecoderIndex = (this.#lastUsedDecoderIndex + 1) % this.decoderPool.length;
31711
+ return await decoder.decode(image, this.userData.settings);
31679
31712
  }
31680
31713
  update() {
31681
31714
  if (this.#isUpdating) {
@@ -59810,7 +59843,8 @@ class Renderer extends EventEmitter {
59810
59843
  this.gl = new WebGLRenderer({
59811
59844
  canvas,
59812
59845
  alpha: true,
59813
- antialias: true
59846
+ antialias: true,
59847
+ powerPreference: 'high-performance'
59814
59848
  });
59815
59849
  if (!this.gl.capabilities.isWebGL2) {
59816
59850
  throw new Error("WebGL2 is not supported");
@@ -59874,8 +59908,7 @@ class Renderer extends EventEmitter {
59874
59908
  switch (interfaceMode) {
59875
59909
  case "image":
59876
59910
  {
59877
- const imageMode = reserved.imageMode.init(this);
59878
- this.#imageModeExtension = imageMode;
59911
+ this.#imageModeExtension = reserved.imageMode.init(this);
59879
59912
  this.cameraHandler = this.#imageModeExtension;
59880
59913
  this.#imageModeExtension.addEventListener("hasModifiedViewChanged", () => {
59881
59914
  this.emit("resetViewChanged", this);
@@ -59894,9 +59927,7 @@ class Renderer extends EventEmitter {
59894
59927
  extensionsById
59895
59928
  } = args.sceneExtensionConfig;
59896
59929
  for (const extensionItem of Object.values(extensionsById)) {
59897
- if (extensionItem.supportedInterfaceModes == undefined || extensionItem.supportedInterfaceModes.includes(interfaceMode)) {
59898
- this.#addSceneExtension(extensionItem.init(this));
59899
- }
59930
+ if (extensionItem.supportedInterfaceModes == undefined || extensionItem.supportedInterfaceModes.includes(interfaceMode)) ;
59900
59931
  }
59901
59932
  log$1.debug(`Renderer initialized with scene extensions ${Array.from(this.sceneExtensions.keys()).join(", ")}`);
59902
59933
  if (interfaceMode === "image" && config.imageMode.calibrationTopic == undefined) {
@@ -59962,6 +59993,7 @@ class Renderer extends EventEmitter {
59962
59993
  setCurrentTime(newTimeNs) {
59963
59994
  this.currentTime = newTimeNs;
59964
59995
  }
59996
+
59965
59997
  /**
59966
59998
  * Updates renderer state according to seek delta. Handles clearing of future state and resetting of allFrames cursor if seeked backwards
59967
59999
  * Should be called after `setCurrentTime` as been called
@@ -60561,8 +60593,6 @@ class Renderer extends EventEmitter {
60561
60593
  camera.layers.set(LAYER_SELECTED);
60562
60594
  this.gl.render(this.#scene, camera);
60563
60595
  }
60564
-
60565
- // TODO - check that this isn't causing a memory leak!
60566
60596
  this.emit("endFrame", currentTime, this);
60567
60597
  this.gl.info.reset();
60568
60598
  };
@@ -77644,7 +77674,6 @@ function ThreeDeeRender(props) {
77644
77674
  displayTemporaryError,
77645
77675
  testOptions
77646
77676
  }) : undefined;
77647
- console.log('interface mode', merge$1({}, DEFAULT_SCENE_EXTENSION_CONFIG, customSceneExtensions ?? {}));
77648
77677
  setRenderer(newRenderer);
77649
77678
  rendererRef.current = newRenderer;
77650
77679
  return () => {
@@ -78023,8 +78052,8 @@ function ThreeDeeRender(props) {
78023
78052
  // Invoke the done callback once the render is complete
78024
78053
  useEffect(() => {
78025
78054
  renderDone?.();
78026
- if (currentFrameMessages?.at(0)?.publishTime?.nsec && props.frameRenderedEvent) {
78027
- props.frameRenderedEvent(currentFrameMessages.at(0).publishTime.nsec);
78055
+ if (props.frameRenderedEvent) {
78056
+ props.frameRenderedEvent(0);
78028
78057
  }
78029
78058
  }, [renderDone]);
78030
78059
 
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
1
- import { an as indentNodeProp, ao as continuedIndent, ap as foldNodeProp, aq as styleTags, ar as tags, as as LRLanguage, at as LanguageSupport, au as ExternalTokenizer, av as LRParser, aw as ifNotIn, ax as completeFromList, ay as syntaxTree } from './index-DFlpZwK1.js';
1
+ import { an as indentNodeProp, ao as continuedIndent, ap as foldNodeProp, aq as styleTags, ar as tags, as as LRLanguage, at as LanguageSupport, au as ExternalTokenizer, av as LRParser, aw as ifNotIn, ax as completeFromList, ay as syntaxTree } from './index-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
1
- import { 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-DFlpZwK1.js';
1
+ import { 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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -90568,7 +90568,7 @@ function legacy(parser) {
90568
90568
  return new LanguageSupport(StreamLanguage.define(parser));
90569
90569
  }
90570
90570
  function sql$1(dialectName) {
90571
- return import('./index-nJgMRJTy.js').then(m => m.sql({ dialect: m[dialectName] }));
90571
+ return import('./index-Cq7so9Q9.js').then(m => m.sql({ dialect: m[dialectName] }));
90572
90572
  }
90573
90573
  /**
90574
90574
  An array of language descriptions for known language packages.
@@ -90579,7 +90579,7 @@ const languages = [
90579
90579
  name: "C",
90580
90580
  extensions: ["c", "h", "ino"],
90581
90581
  load() {
90582
- return import('./index-DyoCH5GH.js').then(m => m.cpp());
90582
+ return import('./index-DI5QHg2x.js').then(m => m.cpp());
90583
90583
  }
90584
90584
  }),
90585
90585
  /*@__PURE__*/LanguageDescription.of({
@@ -90587,7 +90587,7 @@ const languages = [
90587
90587
  alias: ["cpp"],
90588
90588
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
90589
90589
  load() {
90590
- return import('./index-DyoCH5GH.js').then(m => m.cpp());
90590
+ return import('./index-DI5QHg2x.js').then(m => m.cpp());
90591
90591
  }
90592
90592
  }),
90593
90593
  /*@__PURE__*/LanguageDescription.of({
@@ -90607,7 +90607,7 @@ const languages = [
90607
90607
  name: "Go",
90608
90608
  extensions: ["go"],
90609
90609
  load() {
90610
- return import('./index-fN8Tpgww.js').then(m => m.go());
90610
+ return import('./index-DM9oCkXH.js').then(m => m.go());
90611
90611
  }
90612
90612
  }),
90613
90613
  /*@__PURE__*/LanguageDescription.of({
@@ -90622,7 +90622,7 @@ const languages = [
90622
90622
  name: "Java",
90623
90623
  extensions: ["java"],
90624
90624
  load() {
90625
- return import('./index-PmNaQtc7.js').then(m => m.java());
90625
+ return import('./index-CIfIw1LQ.js').then(m => m.java());
90626
90626
  }
90627
90627
  }),
90628
90628
  /*@__PURE__*/LanguageDescription.of({
@@ -90638,7 +90638,7 @@ const languages = [
90638
90638
  alias: ["json5"],
90639
90639
  extensions: ["json", "map"],
90640
90640
  load() {
90641
- return import('./index-CtKYoeeM.js').then(m => m.json());
90641
+ return import('./index-D7jNrXVP.js').then(m => m.json());
90642
90642
  }
90643
90643
  }),
90644
90644
  /*@__PURE__*/LanguageDescription.of({
@@ -90652,14 +90652,14 @@ const languages = [
90652
90652
  name: "LESS",
90653
90653
  extensions: ["less"],
90654
90654
  load() {
90655
- return import('./index-Do7UsSft.js').then(m => m.less());
90655
+ return import('./index-d8vRrHr4.js').then(m => m.less());
90656
90656
  }
90657
90657
  }),
90658
90658
  /*@__PURE__*/LanguageDescription.of({
90659
90659
  name: "Liquid",
90660
90660
  extensions: ["liquid"],
90661
90661
  load() {
90662
- return import('./index-BbAm1fKU.js').then(m => m.liquid());
90662
+ return import('./index-DCh-Eobo.js').then(m => m.liquid());
90663
90663
  }
90664
90664
  }),
90665
90665
  /*@__PURE__*/LanguageDescription.of({
@@ -90685,7 +90685,7 @@ const languages = [
90685
90685
  name: "PHP",
90686
90686
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
90687
90687
  load() {
90688
- return import('./index-CpLzYoX8.js').then(m => m.php());
90688
+ return import('./index-BJofTpil.js').then(m => m.php());
90689
90689
  }
90690
90690
  }),
90691
90691
  /*@__PURE__*/LanguageDescription.of({
@@ -90702,28 +90702,28 @@ const languages = [
90702
90702
  extensions: ["BUILD", "bzl", "py", "pyw"],
90703
90703
  filename: /^(BUCK|BUILD)$/,
90704
90704
  load() {
90705
- return import('./index-BK0O58zw.js').then(m => m.python());
90705
+ return import('./index-Zivk6fee.js').then(m => m.python());
90706
90706
  }
90707
90707
  }),
90708
90708
  /*@__PURE__*/LanguageDescription.of({
90709
90709
  name: "Rust",
90710
90710
  extensions: ["rs"],
90711
90711
  load() {
90712
- return import('./index-CbS2HMyR.js').then(m => m.rust());
90712
+ return import('./index-BwoyZPjj.js').then(m => m.rust());
90713
90713
  }
90714
90714
  }),
90715
90715
  /*@__PURE__*/LanguageDescription.of({
90716
90716
  name: "Sass",
90717
90717
  extensions: ["sass"],
90718
90718
  load() {
90719
- return import('./index-DTZuXJ1A.js').then(m => m.sass({ indented: true }));
90719
+ return import('./index-Di_-JfGf.js').then(m => m.sass({ indented: true }));
90720
90720
  }
90721
90721
  }),
90722
90722
  /*@__PURE__*/LanguageDescription.of({
90723
90723
  name: "SCSS",
90724
90724
  extensions: ["scss"],
90725
90725
  load() {
90726
- return import('./index-DTZuXJ1A.js').then(m => m.sass());
90726
+ return import('./index-Di_-JfGf.js').then(m => m.sass());
90727
90727
  }
90728
90728
  }),
90729
90729
  /*@__PURE__*/LanguageDescription.of({
@@ -90754,7 +90754,7 @@ const languages = [
90754
90754
  name: "WebAssembly",
90755
90755
  extensions: ["wat", "wast"],
90756
90756
  load() {
90757
- return import('./index-4msm-wtA.js').then(m => m.wast());
90757
+ return import('./index-BHzFgL5N.js').then(m => m.wast());
90758
90758
  }
90759
90759
  }),
90760
90760
  /*@__PURE__*/LanguageDescription.of({
@@ -90762,7 +90762,7 @@ const languages = [
90762
90762
  alias: ["rss", "wsdl", "xsd"],
90763
90763
  extensions: ["xml", "xsl", "xsd", "svg"],
90764
90764
  load() {
90765
- return import('./index-DSIL_c41.js').then(m => m.xml());
90765
+ return import('./index-C1eH0RCy.js').then(m => m.xml());
90766
90766
  }
90767
90767
  }),
90768
90768
  /*@__PURE__*/LanguageDescription.of({
@@ -90770,7 +90770,7 @@ const languages = [
90770
90770
  alias: ["yml"],
90771
90771
  extensions: ["yaml", "yml"],
90772
90772
  load() {
90773
- return import('./index-DFdQY59I.js').then(m => m.yaml());
90773
+ return import('./index-DY6zQP_F.js').then(m => m.yaml());
90774
90774
  }
90775
90775
  }),
90776
90776
  // Legacy modes ported from CodeMirror 5
@@ -91566,13 +91566,13 @@ const languages = [
91566
91566
  name: "Vue",
91567
91567
  extensions: ["vue"],
91568
91568
  load() {
91569
- return import('./index-DfgdvKhl.js').then(m => m.vue());
91569
+ return import('./index-BTNGGXoa.js').then(m => m.vue());
91570
91570
  }
91571
91571
  }),
91572
91572
  /*@__PURE__*/LanguageDescription.of({
91573
91573
  name: "Angular Template",
91574
91574
  load() {
91575
- return import('./index-BsQeBBzM.js').then(m => m.angular());
91575
+ return import('./index-D9d5kqGf.js').then(m => m.angular());
91576
91576
  }
91577
91577
  })
91578
91578
  ];
@@ -162499,13 +162499,13 @@ const PanelToolbar = ({
162499
162499
  align: "start",
162500
162500
  justify: "start"
162501
162501
  }, /*#__PURE__*/React__default.createElement(Label$3, {
162502
+ text: `Camera: ${targetFps ? `${targetFps} FPS` : "-"}`
162503
+ }), /*#__PURE__*/React__default.createElement(Label$3, {
162502
162504
  text: `Network: ${metrics?.incomingMessagesFps ? `${metrics.incomingMessagesFps} FPS` : "-"}`
162503
162505
  }), /*#__PURE__*/React__default.createElement(Label$3, {
162504
162506
  text: `Decoding: ${metrics?.decodedMessagesFps ? `${metrics.decodedMessagesFps} FPS` : "-"}`
162505
162507
  }), /*#__PURE__*/React__default.createElement(Label$3, {
162506
162508
  text: `Rendering: ${renderedFps ? `${Math.round(renderedFps / 2)} FPS` : "-"}`
162507
- }), /*#__PURE__*/React__default.createElement(Label$3, {
162508
- text: `Camera: ${targetFps ? `${targetFps} FPS` : "-"}`
162509
162509
  }), /*#__PURE__*/React__default.createElement(Label$3, {
162510
162510
  text: `Frontend Delay: ${eventLoopDelay ? `${Math.ceil(eventLoopDelay)} ms` : "-"}`
162511
162511
  }))), !disableAnnotations && kind === "image" && /*#__PURE__*/React__default.createElement(DropdownMenu, {
@@ -162644,7 +162644,7 @@ function createRenderDelaySampler() {
162644
162644
  };
162645
162645
  }
162646
162646
 
162647
- const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-BWakrawk.js'));
162647
+ const ImagePanelComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-DAXpEznJ.js'));
162648
162648
  const ImagePanelBody = ({
162649
162649
  topic,
162650
162650
  frameRenderedEvent
@@ -162710,7 +162710,7 @@ const ImagePanel = /*#__PURE__*/React__default.memo(function ImagePanel(props) {
162710
162710
  // License, v2.0. If a copy of the MPL was not distributed with this
162711
162711
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
162712
162712
 
162713
- const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-CE0akFDh.js'));
162713
+ const ThreeDeeRenderComponent = /*#__PURE__*/React__default.lazy(async () => await import('./index-BPWE58mB.js'));
162714
162714
  const PointCloudPanelBody = ({
162715
162715
  topic
162716
162716
  }) => {
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,7 +1,7 @@
1
- import { ImagePanel } from './index-CE0akFDh.js';
1
+ import { ImagePanel } from './index-BPWE58mB.js';
2
2
  import 'react';
3
3
  import 'react-dom';
4
- import './index-DFlpZwK1.js';
4
+ import './index-D8jKQuGu.js';
5
5
  import './FoxgloveServer-DiLI7KZU.js';
6
6
  import 'protobufjs/minimal';
7
7
  import 'ms';
@@ -27,7 +27,7 @@ import '@mui/icons-material/ChevronRight';
27
27
  import '@mui/icons-material/MoreVert';
28
28
  import '@mui/icons-material/Cancel';
29
29
  import '@mui/icons-material/Search';
30
- import './decodeImage-BBqnjJjE.js';
30
+ import './decodeImage-NYPkamnK.js';
31
31
  import '@mui/material/styles/createTypography';
32
32
  import 'color';
33
33
  import 'lodash.curry';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1,4 +1,4 @@
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-DFlpZwK1.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-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { aR as ImagePanel, aQ as PanelLayout, aS as PointCloudPanel, aO as VisualizerConnection, aP as VisualizerContext } from './index-DFlpZwK1.js';
1
+ export { aR as ImagePanel, aQ as PanelLayout, aS as PointCloudPanel, aO as VisualizerConnection, aP as VisualizerContext } from './index-D8jKQuGu.js';
2
2
  import './FoxgloveServer-DiLI7KZU.js';
3
3
  import 'protobufjs/minimal';
4
4
  import 'ms';
@@ -1 +1 @@
1
- {"version":3,"file":"PanelToolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelToolbar.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,sCAAsC,CAAC;AA2B9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,CAAC;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA6LpD,CAAC"}
1
+ {"version":3,"file":"PanelToolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelToolbar.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,sCAAsC,CAAC;AA2B9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,CAAC;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAiMpD,CAAC"}
@@ -62,7 +62,7 @@ export const PanelToolbar = ({ topic, kind, setDetections, disableAnnotations =
62
62
  } }, detection.name)), [onToggleTopic]);
63
63
  return (_jsxs(Flex, { direction: "row", gap: "sm", align: "center", justify: "space-between", style: {
64
64
  paddingLeft: 16,
65
- }, children: [_jsxs(Flex, { direction: "column", gap: "xxs", align: "start", justify: "start", paddingY: "xs", children: [_jsx(SubHeader, { text: name }), _jsxs(Flex, { direction: "row", gap: "sm", align: "start", justify: "start", children: [_jsx(Label, { text: `Network: ${metrics?.incomingMessagesFps ? `${metrics.incomingMessagesFps} FPS` : "-"}` }), _jsx(Label, { text: `Decoding: ${metrics?.decodedMessagesFps ? `${metrics.decodedMessagesFps} FPS` : "-"}` }), _jsx(Label, { text: `Rendering: ${renderedFps ? `${Math.round(renderedFps / 2)} FPS` : "-"}` }), _jsx(Label, { text: `Camera: ${targetFps ? `${targetFps} FPS` : "-"}` }), _jsx(Label, { text: `Frontend Delay: ${eventLoopDelay ? `${Math.ceil(eventLoopDelay)} ms` : "-"}` })] })] }), !disableAnnotations && kind === "image" && (_jsxs(DropdownMenu, { onOpenChange: setAnnotationsOpened, children: [_jsx(DropdownMenuTrigger, { asChild: true, disabled: detections.length === 0, children: _jsx(Button, { variant: "outline", label: "Annotations", "aria-controls": annotationsOpened ? "basic-menu" : undefined, "aria-haspopup": "true", "aria-expanded": annotationsOpened ? "true" : undefined, icon: annotationsOpened ? ArrowUpIcon : ArrowDownIcon, disabled: detections.length === 0, style: {
65
+ }, children: [_jsxs(Flex, { direction: "column", gap: "xxs", align: "start", justify: "start", paddingY: "xs", children: [_jsx(SubHeader, { text: name }), _jsxs(Flex, { direction: "row", gap: "sm", align: "start", justify: "start", children: [_jsx(Label, { text: `Camera: ${targetFps ? `${targetFps} FPS` : "-"}` }), _jsx(Label, { text: `Network: ${metrics?.incomingMessagesFps ? `${metrics.incomingMessagesFps} FPS` : "-"}` }), _jsx(Label, { text: `Decoding: ${metrics?.decodedMessagesFps ? `${metrics.decodedMessagesFps} FPS` : "-"}` }), _jsx(Label, { text: `Rendering: ${renderedFps ? `${Math.round(renderedFps / 2)} FPS` : "-"}` }), _jsx(Label, { text: `Frontend Delay: ${eventLoopDelay ? `${Math.ceil(eventLoopDelay)} ms` : "-"}` })] })] }), !disableAnnotations && kind === "image" && (_jsxs(DropdownMenu, { onOpenChange: setAnnotationsOpened, children: [_jsx(DropdownMenuTrigger, { asChild: true, disabled: detections.length === 0, children: _jsx(Button, { variant: "outline", label: "Annotations", "aria-controls": annotationsOpened ? "basic-menu" : undefined, "aria-haspopup": "true", "aria-expanded": annotationsOpened ? "true" : undefined, icon: annotationsOpened ? ArrowUpIcon : ArrowDownIcon, disabled: detections.length === 0, style: {
66
66
  borderRadius: 0,
67
67
  borderTopRightRadius: 8,
68
68
  height: "100%",