@luxonis/visualizer-protobuf 2.54.1 → 2.56.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 (79) hide show
  1. package/dist/{tslib.es6-DRjIPBeG.js → depth-CJRDcPfJ.js} +606 -7
  2. package/dist/{deserialization.worker-Bpkjw7D9.js → deserialization.worker-CSrvuPJi.js} +3 -163
  3. package/dist/{index-CqIIFZlL.js → index-BNHKjcMm.js} +5 -5
  4. package/dist/{index-DofCpnXh.js → index-BVK70iCH.js} +5 -5
  5. package/dist/{index-C1ITCVFJ.js → index-Bn0Tak9t.js} +5 -5
  6. package/dist/{index-Dtc-xG9B.js → index-Bp2fW9nD.js} +5 -5
  7. package/dist/{index-Cha3fcte.js → index-BrolwJ2j.js} +5 -5
  8. package/dist/{index-DaLbB0Zv.js → index-CBAQP1IT.js} +5 -5
  9. package/dist/{index-H4PD4laM.js → index-CHSRc5Gu.js} +5 -5
  10. package/dist/{index-D-b31nsX.js → index-CLA1BzlL.js} +129 -13
  11. package/dist/{index-oOaZlrsK.js → index-CM5imVCh.js} +5 -5
  12. package/dist/{index-COpm762p.js → index-CN1Qa_CW.js} +5 -5
  13. package/dist/{index-BrRPCz-o.js → index-DN65j_zn.js} +5 -5
  14. package/dist/{index-CruHe06m.js → index-DO5kkDW9.js} +5 -5
  15. package/dist/{index-kutpugS9.js → index-DPKWgVvs.js} +131 -55
  16. package/dist/{index-BZ8mYnjR.js → index-DSdLdxLk.js} +5 -5
  17. package/dist/{index-BTMFONaj.js → index-D_a5hMKe.js} +5 -6
  18. package/dist/{index-C5GitdWB.js → index-EGVrBQAC.js} +5 -5
  19. package/dist/{index-uaYiziKD.js → index-fz5Wd5GH.js} +5 -5
  20. package/dist/{index-DvYSXyGY.js → index-wJdzpNZD.js} +5 -5
  21. package/dist/{index-H4vyx-di.js → index-yaio5kyg.js} +5 -5
  22. package/dist/index.js +8 -8
  23. package/dist/lib/src/components/Panel.d.ts +4 -0
  24. package/dist/lib/src/components/Panel.d.ts.map +1 -1
  25. package/dist/lib/src/components/Panel.js +2 -2
  26. package/dist/lib/src/components/Panel.js.map +1 -1
  27. package/dist/lib/src/components/PanelToolbar.d.ts +2 -1
  28. package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
  29. package/dist/lib/src/components/PanelToolbar.js +40 -20
  30. package/dist/lib/src/components/PanelToolbar.js.map +1 -1
  31. package/dist/lib/src/connection/foxglove-connection.d.ts +1 -1
  32. package/dist/lib/src/connection/foxglove-connection.d.ts.map +1 -1
  33. package/dist/lib/src/connection/foxglove-connection.js +9 -2
  34. package/dist/lib/src/connection/foxglove-connection.js.map +1 -1
  35. package/dist/lib/src/index.d.ts +2 -0
  36. package/dist/lib/src/index.d.ts.map +1 -1
  37. package/dist/lib/src/index.js +3 -0
  38. package/dist/lib/src/index.js.map +1 -1
  39. package/dist/lib/src/messaging/deserialization/video/depth.d.ts +1 -0
  40. package/dist/lib/src/messaging/deserialization/video/depth.d.ts.map +1 -1
  41. package/dist/lib/src/messaging/deserialization/video/depth.js +16 -0
  42. package/dist/lib/src/messaging/deserialization/video/depth.js.map +1 -1
  43. package/dist/lib/src/messaging/deserialization/video/h265.d.ts.map +1 -1
  44. package/dist/lib/src/messaging/deserialization/video/h265.js +0 -1
  45. package/dist/lib/src/messaging/deserialization/video/h265.js.map +1 -1
  46. package/dist/lib/src/output.css +5 -2
  47. package/dist/lib/src/panels/ImagePanel.d.ts +9 -0
  48. package/dist/lib/src/panels/ImagePanel.d.ts.map +1 -1
  49. package/dist/lib/src/panels/ImagePanel.js +5 -3
  50. package/dist/lib/src/panels/ImagePanel.js.map +1 -1
  51. package/dist/lib/src/panels/PointCloudPanel.d.ts +9 -0
  52. package/dist/lib/src/panels/PointCloudPanel.d.ts.map +1 -1
  53. package/dist/lib/src/panels/PointCloudPanel.js +6 -6
  54. package/dist/lib/src/panels/PointCloudPanel.js.map +1 -1
  55. package/dist/lib/src/utils/frame-store.d.ts +13 -0
  56. package/dist/lib/src/utils/frame-store.d.ts.map +1 -0
  57. package/dist/lib/src/utils/frame-store.js +28 -0
  58. package/dist/lib/src/utils/frame-store.js.map +1 -0
  59. package/dist/packages/studio-base/src/panels/ThreeDeeRender/IRenderer.d.ts +3 -0
  60. package/dist/packages/studio-base/src/panels/ThreeDeeRender/IRenderer.d.ts.map +1 -1
  61. package/dist/packages/studio-base/src/panels/ThreeDeeRender/IRenderer.js.map +1 -1
  62. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts +6 -0
  63. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts.map +1 -1
  64. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js +57 -3
  65. package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js.map +1 -1
  66. package/dist/packages/studio-base/src/panels/ThreeDeeRender/RendererOverlay.d.ts +1 -0
  67. package/dist/packages/studio-base/src/panels/ThreeDeeRender/RendererOverlay.d.ts.map +1 -1
  68. package/dist/packages/studio-base/src/panels/ThreeDeeRender/RendererOverlay.js +11 -11
  69. package/dist/packages/studio-base/src/panels/ThreeDeeRender/RendererOverlay.js.map +1 -1
  70. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts +9 -0
  71. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts.map +1 -1
  72. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js +36 -3
  73. package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js.map +1 -1
  74. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts +11 -2
  75. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts.map +1 -1
  76. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js +7 -2
  77. package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js.map +1 -1
  78. package/package.json +1 -1
  79. package/dist/useMessageReducer-DdY2kZpp.js +0 -422
@@ -1,9 +1,8 @@
1
1
  import { e as expose } from './comlink-DHMAu6X7.js';
2
- import { t as typescript } from './useMessageReducer-DdY2kZpp.js';
3
- import { e as estimateObjectSize, d as dist } from './tslib.es6-DRjIPBeG.js';
4
- import { T as Type, P as PointsAnnotationType, p as protobufsBySchema, b as Profile } from './protobuf-B55JS-Px.js';
5
- import 'react';
2
+ import { U as parseMessage, V as typescript, e as estimateObjectSize, W as fromMillis, d as dist, X as parsePixelFormat, Y as deserializeDepthFrame } from './depth-CJRDcPfJ.js';
3
+ import { P as PointsAnnotationType, p as protobufsBySchema, T as Type, b as Profile } from './protobuf-B55JS-Px.js';
6
4
  import { i as isCapableOfEncodedStream } from './encoding-DqlhpFR2.js';
5
+ import 'react';
7
6
  import 'zustand';
8
7
  import 'react-mosaic-component';
9
8
  import '@mui/material';
@@ -315,91 +314,6 @@ const DEFAULT_BACKGROUND_COLOR = {
315
314
  a: 0
316
315
  };
317
316
 
318
- function fromMillis(value) {
319
- let sec = Math.trunc(value / 1000);
320
- let nsec = Math.round((value - sec * 1000) * 1e6);
321
- sec += Math.trunc(nsec / 1e9);
322
- nsec %= 1e9;
323
- return {
324
- sec,
325
- nsec
326
- };
327
- }
328
- function parsePixelFormat(format) {
329
- switch (format) {
330
- case "BGRA":
331
- return ["bgra8", 3];
332
- case "BGRX":
333
- return ["bgr8", 3];
334
- // Closest supported
335
- case "I420":
336
- case "I420A":
337
- return ['I420', 2];
338
- case "I422":
339
- case "I444":
340
- return ['yuv422', 2];
341
- case "RGBA":
342
- return ["rgba8", 1];
343
- case "RGBX":
344
- return ["rgb8", 1];
345
- // Closest supported
346
- case "NV12":
347
- return ["nv12", 1];
348
- default:
349
- // Unsupported
350
- return ["bgra8", 3];
351
- }
352
- }
353
- function parseMessageType(type) {
354
- switch (type) {
355
- case Type.YUV422i:
356
- case Type.YUV422p:
357
- return ["yuv422", 2];
358
- case Type.NV12:
359
- return ["nv12", 1];
360
- case Type.RGB888i:
361
- return ["rgb8", 3];
362
- case Type.RGB888p:
363
- return ["rgb8p", 1];
364
- case Type.RGBA8888:
365
- return ["rgba8", 1];
366
- case Type.BGR888i:
367
- return ["bgr8i", 3];
368
- case Type.BGR888p:
369
- return ["bgr8p", 3];
370
- case Type.RAW16:
371
- return ["mono16", 2];
372
- case Type.RAW8:
373
- return ["mono8", 2];
374
- default:
375
- throw new Error(`Unsupported encoding ${Type[type]}`);
376
- }
377
- }
378
- function parseMessage(message) {
379
- const width = Number(message.fb?.width ?? message.sourceFb?.width ?? 1920);
380
- const height = Number(message.fb?.height ?? message.sourceFb?.height ?? 1200);
381
- const stride = message.fb?.stride ?? message.sourceFb?.stride ?? null;
382
- const p2Offset = message.fb?.p2Offset ?? message.sourceFb?.p2Offset ?? null;
383
- const p1Offset = message.fb?.p1Offset ?? message.sourceFb?.p1Offset ?? null;
384
- let planeStride = p1Offset != null && p2Offset != null ? p2Offset - p1Offset : 0;
385
- if (planeStride <= 0) {
386
- planeStride = null;
387
- }
388
- const type = message.fb?.type ?? message.sourceFb?.type ?? Type.RGB888p;
389
- const [encoding, step] = parseMessageType(type);
390
- const receiveTime = message.ts ?? message.tsDevice ?? fromMillis(Date.now());
391
- return {
392
- encoding,
393
- step: stride ?? step,
394
- receiveTime,
395
- width,
396
- height,
397
- stride,
398
- planeStride,
399
- type
400
- };
401
- }
402
-
403
317
  // This Source Code Form is subject to the terms of the Mozilla Public
404
318
  // License, v2.0. If a copy of the MPL was not distributed with this
405
319
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
@@ -752,79 +666,6 @@ function deserializeColorFrame({
752
666
  // License, v2.0. If a copy of the MPL was not distributed with this
753
667
  // file, You can obtain one at http://mozilla.org/MPL/2.0/
754
668
 
755
- async function deserializeDepthFrame({
756
- topic,
757
- message,
758
- callback
759
- }) {
760
- const {
761
- receiveTime,
762
- width,
763
- height
764
- } = parseMessage(message);
765
- const foxgloveMessage = {
766
- timestamp: message.tsDevice ?? receiveTime,
767
- frame_id: `pointcloud-${topic}-frame`,
768
- point_stride: 16,
769
- pose: {
770
- position: {
771
- x: 0,
772
- y: 0,
773
- z: 0
774
- },
775
- orientation: {
776
- x: 0,
777
- y: 0,
778
- z: 1,
779
- w: 0
780
- }
781
- },
782
- width,
783
- height,
784
- fields: [{
785
- name: "x",
786
- offset: 0,
787
- type: typescript.NumericType.FLOAT32
788
- }, {
789
- name: "y",
790
- offset: 4,
791
- type: typescript.NumericType.FLOAT32
792
- }, {
793
- name: "z",
794
- offset: 8,
795
- type: typescript.NumericType.FLOAT32
796
- }, {
797
- name: "red",
798
- offset: 12,
799
- type: typescript.NumericType.UINT8
800
- }, {
801
- name: "green",
802
- offset: 13,
803
- type: typescript.NumericType.UINT8
804
- }, {
805
- name: "blue",
806
- offset: 14,
807
- type: typescript.NumericType.UINT8
808
- }, {
809
- name: "alpha",
810
- offset: 15,
811
- type: typescript.NumericType.UINT8
812
- }],
813
- data: message.data
814
- };
815
- callback({
816
- topic,
817
- receiveTime,
818
- message: foxgloveMessage,
819
- sizeInBytes: estimateObjectSize(foxgloveMessage),
820
- schemaName: "foxglove.PointCloud"
821
- });
822
- }
823
-
824
- // This Source Code Form is subject to the terms of the Mozilla Public
825
- // License, v2.0. If a copy of the MPL was not distributed with this
826
- // file, You can obtain one at http://mozilla.org/MPL/2.0/
827
-
828
669
  function ensureWebCodecsSupported(target) {
829
670
  const supported = typeof target !== "undefined";
830
671
  if (!supported) {
@@ -979,7 +820,6 @@ async function deserializeEncodedFrameH265({
979
820
  callback,
980
821
  topicDecoders
981
822
  });
982
- console.log("creating decoder", "hev1.1.6.L93.B0");
983
823
  decoder.configure({
984
824
  codec: "hev1.1.6.L93.B0",
985
825
  optimizeForLatency: true
@@ -1,9 +1,10 @@
1
- import { V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, a0 as flatIndent, a1 as delimitedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, a0 as flatIndent, a1 as delimitedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { a9 as EditorView, aa as EditorSelection, T as LRLanguage, O as styleTags, Q as tags, K as indentNodeProp, a1 as delimitedIndent, N as foldNodeProp, U as LanguageSupport, X as LRParser, $ as syntaxTree, ab as html, ac as parseMixed, V as ExternalTokenizer } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { a9 as EditorView, aa as EditorSelection, T as LRLanguage, O as styleTags, Q as tags, K as indentNodeProp, a1 as delimitedIndent, N as foldNodeProp, U as LanguageSupport, X as LRParser, $ as syntaxTree, ab as html, ac as parseMixed, V as ExternalTokenizer } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { O as styleTags, Q as tags, T as LRLanguage, U as LanguageSupport, X as LRParser, a4 as LocalTokenGroup, ab as html, ac as parseMixed, ae as javascriptLanguage } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { O as styleTags, Q as tags, T as LRLanguage, U as LanguageSupport, X as LRParser, a4 as LocalTokenGroup, ab as html, ac as parseMixed, ae as javascriptLanguage } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { a3 as ContextTracker, V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, N as foldNodeProp, ad as bracketMatchingHandle, U as LanguageSupport, a9 as EditorView, $ as syntaxTree, aa as EditorSelection } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { a3 as ContextTracker, V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, N as foldNodeProp, ad as bracketMatchingHandle, U as LanguageSupport, a9 as EditorView, $ as syntaxTree, aa as EditorSelection } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { V as ExternalTokenizer, a3 as ContextTracker, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, N as foldNodeProp, a2 as foldInside, K as indentNodeProp, M as continuedIndent, a8 as defineCSSCompletionSource, U as LanguageSupport } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { V as ExternalTokenizer, a3 as ContextTracker, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, N as foldNodeProp, a2 as foldInside, K as indentNodeProp, M as continuedIndent, a8 as defineCSSCompletionSource, U as LanguageSupport } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,11 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { useReducer, useRef, useCallback, useLayoutEffect, Component, useContext, useState, useEffect, createContext, forwardRef, createElement, cloneElement, useMemo, Profiler, StrictMode } from 'react';
3
3
  import ReactDOM__default from 'react-dom';
4
- import { S as isSymbol, U as toString, V as keys, W as getSymbols$1, X as stubArray, Y as arrayPush, Z as baseGetAllKeys, g as getTag, $ as getAllKeys, k as baseGet, c as baseIteratee, j as castPath, t as toKey, a0 as arrayMap$1, a1 as baseUniq, b as baseFlatten, a2 as useMustNotChange, a3 as useCurrentLayoutActions, a4 as useCurrentLayoutSelector, r as reportError, A as AppError, L as Logger, u as useGuaranteedContext, a5 as usePanelMosaicId, a6 as useSelectedPanels, a7 as PANEL_TITLE_CONFIG_KEY, a8 as noop$4, o as getPanelTypeFromId, M as useShallowMemo, T as TAB_PANEL_TYPE, J as filterMap, d as dist$2, a9 as useAppConfiguration, aa as useValueChangedDebugLog, ab as useJsonTreeTheme } from './tslib.es6-DRjIPBeG.js';
4
+ import { Z as isSymbol, $ as toString, a0 as keys, a1 as getSymbols$1, a2 as stubArray, a3 as arrayPush, a4 as baseGetAllKeys, g as getTag, a5 as getAllKeys, k as baseGet, c as baseIteratee, j as castPath, t as toKey, a6 as arrayMap$1, a7 as baseUniq, b as baseFlatten, a8 as useMustNotChange, a9 as useCurrentLayoutActions, aa as useCurrentLayoutSelector, r as reportError, A as AppError, L as Logger, u as useGuaranteedContext, ab as usePanelMosaicId, ac as useSelectedPanels, ad as PANEL_TITLE_CONFIG_KEY, ae as noop$4, o as getPanelTypeFromId, M as useShallowMemo, T as TAB_PANEL_TYPE, J as filterMap, d as dist$2, af as useAppConfiguration, ag as useValueChangedDebugLog, V as typescript, ah as useJsonTreeTheme } from './depth-CJRDcPfJ.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 } from './index-kutpugS9.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 } from './index-DPKWgVvs.js';
7
7
  import { MosaicDragType, MosaicContext, MosaicWindowContext, getOtherBranch, getNodeAtPath } from 'react-mosaic-component';
8
- import { t as typescript } from './useMessageReducer-DdY2kZpp.js';
9
8
  import { g as getDefaultExportFromCjs, c as commonjsGlobal, d as getAugmentedNamespace } from './protobuf-B55JS-Px.js';
10
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';
11
10
  import { c as copyObject, k as keysIn, g as getPrototype, d as cloneArrayBuffer, e as cloneTypedArray, f as copyArray, h as cloneBuffer, j as initCloneObject, a as assignValue, b as baseAssignValue, l as isPlainObject$1, t as tinycolor, n as t$1, m as merge$1, i as instance } from './i18next-IYI3-Nuv.js';
@@ -72606,7 +72605,7 @@ function RendererOverlay(props) {
72606
72605
  }
72607
72606
  }), /*#__PURE__*/React__default.createElement(HUD, {
72608
72607
  renderer: renderer
72609
- }), stats, resetViewButton);
72608
+ }), stats, resetViewButton, props.customOverlay);
72610
72609
  }
72611
72610
 
72612
72611
  // This Source Code Form is subject to the terms of the Mozilla Public
@@ -74636,6 +74635,31 @@ class Renderer extends EventEmitter {
74636
74635
  log$1.debug(`Clicked ${selections.length} renderable(s)`);
74637
74636
  this.emit("renderablesClicked", selections, cursorCoords, this);
74638
74637
  };
74638
+ handleClickEvent = cursorCoords => {
74639
+ // Pick a single renderable, hide it, re-render, and run picking again until
74640
+ // the backdrop is hit or we exceed MAX_SELECTIONS
74641
+ const camera = this.cameraHandler.getActiveCamera();
74642
+ const selections = [];
74643
+ let curSelection;
74644
+ while ((curSelection = this.#pickSingleObject(cursorCoords)) && selections.length < MAX_SELECTIONS) {
74645
+ selections.push(curSelection);
74646
+ // If debugPicking is on, we don't want to overwrite the hitmap by doing more iterations
74647
+ if (this.debugPicking) {
74648
+ break;
74649
+ }
74650
+ curSelection.renderable.visible = false;
74651
+ this.gl.render(this.#scene, camera);
74652
+ }
74653
+
74654
+ // Put everything back to normal and render one last frame
74655
+ for (const selection of selections) {
74656
+ selection.renderable.visible = true;
74657
+ }
74658
+ if (!this.debugPicking) {
74659
+ this.animationFrame();
74660
+ }
74661
+ return selections;
74662
+ };
74639
74663
  #handleFrameTransform = ({
74640
74664
  message
74641
74665
  }) => {
@@ -74743,7 +74767,7 @@ class Renderer extends EventEmitter {
74743
74767
  disableSetViewOffset: this.interfaceMode === "image"
74744
74768
  });
74745
74769
  if (objectId === -1) {
74746
- log$1.debug("Picking did not return an object");
74770
+ // log.debug("Picking did not return an object");
74747
74771
  return undefined;
74748
74772
  }
74749
74773
 
@@ -74763,7 +74787,9 @@ class Renderer extends EventEmitter {
74763
74787
  log$1.warn(`No Renderable found for objectId ${objectId} (name="${pickedObject?.name}" uuid=${pickedObject?.uuid})`);
74764
74788
  return undefined;
74765
74789
  }
74766
- log$1.debug(`Picking pass returned ${renderable.id} (${renderable.name})`, renderable);
74790
+
74791
+ // log.debug(`Picking pass returned ${renderable.id} (${renderable.name})`, renderable);
74792
+
74767
74793
  let instanceIndex;
74768
74794
  if (renderable.pickableInstances) {
74769
74795
  instanceIndex = this.#picker.pickInstance(cursorCoords.x, cursorCoords.y, this.cameraHandler.getActiveCamera(), renderable, {
@@ -74771,7 +74797,7 @@ class Renderer extends EventEmitter {
74771
74797
  disableSetViewOffset: this.interfaceMode === "image"
74772
74798
  });
74773
74799
  instanceIndex = instanceIndex === -1 ? undefined : instanceIndex;
74774
- log$1.debug("Instance picking pass on", renderable, "returned", instanceIndex);
74800
+ //log.debug("Instance picking pass on", renderable, "returned", instanceIndex);
74775
74801
  }
74776
74802
  return {
74777
74803
  renderable,
@@ -74858,6 +74884,40 @@ class Renderer extends EventEmitter {
74858
74884
  setAnalytics(analytics) {
74859
74885
  this.analytics = analytics;
74860
74886
  }
74887
+ getLocalClickCoords(event, picked) {
74888
+ // 1. Get canvas-relative coordinates
74889
+ const rect = this.#canvas.getBoundingClientRect();
74890
+ const x = (event.clientX - rect.left) / rect.width * 2 - 1;
74891
+ const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
74892
+
74893
+ // 2. Create a ray from the camera through the click point
74894
+ const ndc = new Vector2(x, y);
74895
+ const raycaster = new Raycaster();
74896
+ raycaster.setFromCamera(ndc, this.cameraHandler.getActiveCamera());
74897
+
74898
+ // 3. Intersect with the picked object
74899
+ const intersects = raycaster.intersectObject(picked, true);
74900
+ if (intersects.length === 0) {
74901
+ return null;
74902
+ }
74903
+
74904
+ // 4. Get the intersection point in local space
74905
+ const intersection = intersects[0];
74906
+ const localPoint = picked.worldToLocal(intersection.point.clone());
74907
+
74908
+ // 5. Normalize localPoint to [0, 1] based on the bounding box
74909
+ const box = new Box3().setFromObject(picked);
74910
+ const size = new Vector3();
74911
+ box.getSize(size);
74912
+
74913
+ // Avoid division by zero
74914
+ const norm = (val, min, max) => max - min === 0 ? 0.5 : (val - min) / (max - min);
74915
+ return {
74916
+ x: norm(localPoint.x, box.min.x, box.max.x),
74917
+ y: norm(localPoint.y, box.min.y, box.max.y),
74918
+ z: norm(localPoint.z, box.min.z, box.max.z)
74919
+ };
74920
+ }
74861
74921
  }
74862
74922
  function queueMessage(messageEvent, subscriptions) {
74863
74923
  if (subscriptions) {
@@ -78089,7 +78149,8 @@ function ThreeDeeRender(props) {
78089
78149
  testOptions,
78090
78150
  customSceneExtensions,
78091
78151
  frameRenderedEvent,
78092
- annotationReceivedEventHandler
78152
+ annotationReceivedEventHandler,
78153
+ customOverlay
78093
78154
  } = props;
78094
78155
  const {
78095
78156
  initialState,
@@ -78157,10 +78218,14 @@ function ThreeDeeRender(props) {
78157
78218
  annotationReceivedEventHandler
78158
78219
  }) : undefined;
78159
78220
  setRenderer(newRenderer);
78221
+ props.registerRendered?.(newRenderer);
78160
78222
  rendererRef.current = newRenderer;
78161
78223
  return () => {
78162
78224
  rendererRef.current?.dispose();
78163
78225
  rendererRef.current = undefined;
78226
+ if (props.unregisterRendered) {
78227
+ props.unregisterRendered();
78228
+ }
78164
78229
  };
78165
78230
  }, [canvas, configRef, config.scene.transforms?.enablePreloading, customSceneExtensions, interfaceMode, fetchAsset, testOptions, displayTemporaryError]);
78166
78231
  useEffect(() => {
@@ -78688,12 +78753,41 @@ function ThreeDeeRender(props) {
78688
78753
  // The 3d panel only supports publishing to ros1 and ros2 data sources
78689
78754
  const isRosDataSource = context.dataSourceProfile === "ros1" || context.dataSourceProfile === "ros2";
78690
78755
  const canPublish = context.publish != undefined && isRosDataSource;
78756
+ const getClickOffsetCoords = useCallback(event => {
78757
+ if (!canvas || !renderer) return;
78758
+
78759
+ // Get the canvas bounding rectangle
78760
+ const canvasRect = canvas.getBoundingClientRect();
78761
+
78762
+ // Convert click position to canvas-relative coordinates
78763
+ const offsetX = event.clientX - canvasRect.left;
78764
+ const offsetY = event.clientY - canvasRect.top;
78765
+
78766
+ // Get Three.js clicked object (This should be the background for depth stream)
78767
+ const selectedObject = renderer.handleClickEvent(new Vector2(offsetX, offsetY)).at(0);
78768
+ if (!selectedObject) {
78769
+ console.warn("No renderable found at click position");
78770
+ return;
78771
+ }
78772
+
78773
+ // Calculate the percentage offset coordinates relative to the renderable
78774
+ // This is number from <0, 1> range and can be used to map click position to depth data
78775
+ const percentageOffsetCoordinates = renderer.getLocalClickCoords(event, selectedObject.renderable);
78776
+ if (!percentageOffsetCoordinates) {
78777
+ console.error("Failed to calculate relative click coordinates");
78778
+ return;
78779
+ }
78780
+ return {
78781
+ offsetX: percentageOffsetCoordinates.x,
78782
+ offsetY: percentageOffsetCoordinates.y
78783
+ };
78784
+ }, [canvas, renderer]);
78691
78785
  return /*#__PURE__*/React__default.createElement(ThemeProvider, {
78692
78786
  isDark: colorScheme === "dark"
78693
78787
  }, /*#__PURE__*/React__default.createElement("div", {
78694
78788
  style: PANEL_STYLE,
78695
78789
  onKeyDown: onKeyDown
78696
- }, /*#__PURE__*/React__default.createElement("canvas", {
78790
+ }, customOverlay, /*#__PURE__*/React__default.createElement("canvas", {
78697
78791
  ref: setCanvas,
78698
78792
  style: {
78699
78793
  position: "absolute",
@@ -78702,6 +78796,12 @@ function ThreeDeeRender(props) {
78702
78796
  ...((measureActive || publishActive) && {
78703
78797
  cursor: "crosshair"
78704
78798
  })
78799
+ },
78800
+ onClick: event => {
78801
+ if (props.handleOnClick) {
78802
+ const clickOffsetCoords = getClickOffsetCoords(event);
78803
+ props.handleOnClick(event, clickOffsetCoords);
78804
+ }
78705
78805
  }
78706
78806
  }), /*#__PURE__*/React__default.createElement(RendererContext.Provider, {
78707
78807
  value: renderer
@@ -78727,6 +78827,10 @@ function ThreeDeeRender(props) {
78727
78827
  }))));
78728
78828
  }
78729
78829
 
78830
+ // This Source Code Form is subject to the terms of the Mozilla Public
78831
+ // License, v2.0. If a copy of the MPL was not distributed with this
78832
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/
78833
+
78730
78834
  function initPanel(args, context) {
78731
78835
  const {
78732
78836
  crash,
@@ -78735,7 +78839,11 @@ function initPanel(args, context) {
78735
78839
  testOptions,
78736
78840
  customSceneExtensions,
78737
78841
  frameRenderedEvent,
78738
- annotationReceivedEventHandler
78842
+ annotationReceivedEventHandler,
78843
+ handleOnClick,
78844
+ registerRendered,
78845
+ unregisterRendered,
78846
+ customOverlay
78739
78847
  } = args;
78740
78848
  // eslint-disable-next-line react/no-deprecated
78741
78849
  ReactDOM__default.render( /*#__PURE__*/React__default.createElement(StrictMode, null, /*#__PURE__*/React__default.createElement(CaptureErrorBoundary, {
@@ -78748,7 +78856,11 @@ function initPanel(args, context) {
78748
78856
  testOptions: testOptions,
78749
78857
  customSceneExtensions: customSceneExtensions,
78750
78858
  frameRenderedEvent: frameRenderedEvent ? () => frameRenderedEvent(0) : undefined,
78751
- annotationReceivedEventHandler: annotationReceivedEventHandler
78859
+ annotationReceivedEventHandler: annotationReceivedEventHandler,
78860
+ handleOnClick: handleOnClick,
78861
+ registerRendered: registerRendered,
78862
+ unregisterRendered: unregisterRendered,
78863
+ customOverlay: customOverlay
78752
78864
  })))), context.panelElement);
78753
78865
  return () => {
78754
78866
  // eslint-disable-next-line react/no-deprecated
@@ -78778,8 +78890,12 @@ function ThreeDeeRenderAdapter(interfaceMode, props) {
78778
78890
  },
78779
78891
  customSceneExtensions,
78780
78892
  frameRenderedEvent: props.frameRenderedEvent,
78781
- annotationReceivedEventHandler: props.annotationReceivedEventHandler
78782
- }), [crash, forwardedAnalytics, interfaceMode, props.onDownloadImage, props.debugPicking, props.frameRenderedEvent, props.annotationReceivedEventHandler, customSceneExtensions]);
78893
+ annotationReceivedEventHandler: props.annotationReceivedEventHandler,
78894
+ handleOnClick: props.handleOnClick,
78895
+ registerRendered: props.registerRendered,
78896
+ unregisterRendered: props.unregisterRendered,
78897
+ customOverlay: props.customOverlay
78898
+ }), [crash, forwardedAnalytics, interfaceMode, props.onDownloadImage, props.debugPicking, props.frameRenderedEvent, props.annotationReceivedEventHandler, props.handleOnClick, customSceneExtensions]);
78783
78899
  return /*#__PURE__*/React__default.createElement(PanelExtensionAdapter, {
78784
78900
  config: props.config,
78785
78901
  highestSupportedConfigVersion: 1,
@@ -1,9 +1,10 @@
1
- import { V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, a1 as delimitedIndent, N as foldNodeProp, a2 as foldInside, ab as html, U as LanguageSupport, ac as parseMixed } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { V as ExternalTokenizer, O as styleTags, Q as tags, X as LRParser, T as LRLanguage, K as indentNodeProp, M as continuedIndent, a1 as delimitedIndent, N as foldNodeProp, a2 as foldInside, ab as html, U as LanguageSupport, ac as parseMixed } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';
@@ -1,9 +1,10 @@
1
- import { V as ExternalTokenizer, a3 as ContextTracker, O as styleTags, Q as tags, X as LRParser, $ as syntaxTree, Y as ifNotIn, T as LRLanguage, K as indentNodeProp, a1 as delimitedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport, a6 as IterMode, Z as completeFromList, a7 as NodeWeakMap, a5 as snippetCompletion } from './index-kutpugS9.js';
2
- import './tslib.es6-DRjIPBeG.js';
3
- import 'react';
4
- import 'react-mosaic-component';
1
+ import { V as ExternalTokenizer, a3 as ContextTracker, O as styleTags, Q as tags, X as LRParser, $ as syntaxTree, Y as ifNotIn, T as LRLanguage, K as indentNodeProp, a1 as delimitedIndent, N as foldNodeProp, a2 as foldInside, U as LanguageSupport, a6 as IterMode, Z as completeFromList, a7 as NodeWeakMap, a5 as snippetCompletion } from './index-DPKWgVvs.js';
2
+ import './depth-CJRDcPfJ.js';
5
3
  import './protobuf-B55JS-Px.js';
6
4
  import 'protobufjs/minimal';
5
+ import 'react';
6
+ import 'zustand';
7
+ import 'react-mosaic-component';
7
8
  import '@mui/material';
8
9
  import './isArrayLikeObject-Bytw9p-q.js';
9
10
  import './comlink-DHMAu6X7.js';
@@ -16,7 +17,6 @@ import 'react-dnd-html5-backend';
16
17
  import './i18next-IYI3-Nuv.js';
17
18
  import '@emotion/react';
18
19
  import 'object-assign';
19
- import 'zustand';
20
20
  import 'react/jsx-runtime';
21
21
  import 'react-dom';
22
22
  import 'react-syntax-highlighter/dist/esm/styles/prism';