@luxonis/visualizer-protobuf 2.11.1 → 2.12.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.
- package/dist/{index-BE1L_NCe.js → index-BND59L-_.js} +2 -2
- package/dist/{index-Bvs-BMp8.js → index-BNgQTecN.js} +1 -1
- package/dist/{index-Cp6ZYoMV.js → index-BPvLkg91.js} +1 -1
- package/dist/{index-BhQuyb2K.js → index-BQ-DVAKf.js} +16 -8
- package/dist/{index-C_A5YeIr.js → index-Bm-sfjxA.js} +1 -1
- package/dist/{index-FVcm2y4R.js → index-CnJXVxDI.js} +1 -1
- package/dist/{index-AMEVAc6S.js → index-CzaJSWor.js} +1 -1
- package/dist/{index-DKXWc_8d.js → index-DBIBZoxL.js} +1 -1
- package/dist/{index-BwzUy66A.js → index-DQBNcZG9.js} +1 -1
- package/dist/{index-DJDXFtf-.js → index-DXqNhUgR.js} +1 -1
- package/dist/{index-BWATx4ca.js → index-DZWFfAzL.js} +1 -1
- package/dist/{index-qiTiEjsz.js → index-Daz5hiMP.js} +147 -152
- package/dist/{index-Cp-FF-6x.js → index-DeuAC1JS.js} +1 -1
- package/dist/{index-CWb-vek3.js → index-DlZBtd34.js} +1 -1
- package/dist/{index-MYsqvOP8.js → index-DujAeBia.js} +1 -1
- package/dist/{index-CH33Ln3e.js → index-IH42B4Mg.js} +1 -1
- package/dist/{index-SINYYQjK.js → index-WQ5HqEqM.js} +1 -1
- package/dist/{index-BZLR8Zi4.js → index-Wtqlsb8j.js} +1 -1
- package/dist/{index-CEwpGvK4.js → index-qgG8SIsl.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/src/components/Panel.d.ts +2 -0
- package/dist/lib/src/components/Panel.d.ts.map +1 -1
- package/dist/lib/src/components/Panel.js +2 -2
- package/dist/lib/src/components/Panel.js.map +1 -1
- package/dist/lib/src/components/PanelToolbar.d.ts +3 -1
- package/dist/lib/src/components/PanelToolbar.d.ts.map +1 -1
- package/dist/lib/src/components/PanelToolbar.js +32 -20
- package/dist/lib/src/components/PanelToolbar.js.map +1 -1
- package/dist/lib/src/components/measure-event-loop-delay.d.ts +2 -0
- package/dist/lib/src/components/measure-event-loop-delay.d.ts.map +1 -0
- package/dist/lib/src/components/measure-event-loop-delay.js +18 -0
- package/dist/lib/src/components/measure-event-loop-delay.js.map +1 -0
- package/dist/lib/src/components/measure-render-delay.d.ts +5 -0
- package/dist/lib/src/components/measure-render-delay.d.ts.map +1 -0
- package/dist/lib/src/components/measure-render-delay.js +19 -0
- package/dist/lib/src/components/measure-render-delay.js.map +1 -0
- package/dist/lib/src/connection/foxglove-connection.d.ts +2 -2
- package/dist/lib/src/connection/foxglove-connection.d.ts.map +1 -1
- package/dist/lib/src/connection/foxglove-connection.js +2 -2
- package/dist/lib/src/connection/foxglove-connection.js.map +1 -1
- package/dist/lib/src/messaging/deserialization/detections/custom.d.ts +3 -3
- package/dist/lib/src/messaging/deserialization/detections/custom.d.ts.map +1 -1
- package/dist/lib/src/messaging/deserialization/detections/custom.js +9 -88
- package/dist/lib/src/messaging/deserialization/detections/custom.js.map +1 -1
- package/dist/lib/src/messaging/deserialization.js +1 -1
- package/dist/lib/src/messaging/deserialization.js.map +1 -1
- package/dist/lib/src/panels/ImagePanel.d.ts +1 -0
- package/dist/lib/src/panels/ImagePanel.d.ts.map +1 -1
- package/dist/lib/src/panels/ImagePanel.js +27 -3
- package/dist/lib/src/panels/ImagePanel.js.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.d.ts.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js +1 -0
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/Renderer.js.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts +1 -0
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.d.ts.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js +4 -0
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/ThreeDeeRender.js.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts +1 -0
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.d.ts.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js +4 -2
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/index.js.map +1 -1
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/annotations/normalizeAnnotations.js +2 -2
- package/dist/packages/studio-base/src/panels/ThreeDeeRender/renderables/ImageMode/annotations/normalizeAnnotations.js.map +1 -1
- package/package.json +1 -1
|
@@ -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-
|
|
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-Daz5hiMP.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, at as LanguageSupport, av as LRParser, aD as LocalTokenGroup, aK as html, aL as parseMixed, aN as javascriptLanguage } from './index-
|
|
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-Daz5hiMP.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-
|
|
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-Daz5hiMP.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-
|
|
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-Daz5hiMP.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-
|
|
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-Daz5hiMP.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-
|
|
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-Daz5hiMP.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-
|
|
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-Daz5hiMP.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-
|
|
1
|
+
export { aR as ImagePanel, aQ as PanelLayout, aS as PointCloudPanel, aO as VisualizerConnection, aP as VisualizerContext } from './index-Daz5hiMP.js';
|
|
2
2
|
import './FoxgloveServer-DiLI7KZU.js';
|
|
3
3
|
import 'protobufjs/minimal';
|
|
4
4
|
import 'ms';
|
|
@@ -13,6 +13,8 @@ export type PanelProps = React.PropsWithChildren<{
|
|
|
13
13
|
extraAnnotationTopics?: string[];
|
|
14
14
|
targetFps?: number;
|
|
15
15
|
triggerToast?: () => void;
|
|
16
|
+
renderedFps?: number;
|
|
17
|
+
renderDelay?: number;
|
|
16
18
|
}>;
|
|
17
19
|
export type PanelDetections = Record<string, boolean>;
|
|
18
20
|
export type AllDetections = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/components/Panel.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,oBAAoB,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/components/Panel.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,oBAAoB,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B,CAAC;AAIF,eAAO,MAAM,aAAa,QAAO,aAEhC,CAAC;AASF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA0DtC,CAAC"}
|
|
@@ -18,7 +18,7 @@ const rawToAnnotations = (rawAnnotations, kind, current) => rawAnnotations.map((
|
|
|
18
18
|
extra: kind === 'extra',
|
|
19
19
|
enabled: current.find(({ name }) => name === annotationTopic)?.enabled ?? kind === 'main'
|
|
20
20
|
}));
|
|
21
|
-
export const Panel = ({ children, kind, topic, disableAnnotations = false, annotationTopics = [], extraAnnotationTopics = [], targetFps, triggerToast }) => {
|
|
21
|
+
export const Panel = ({ children, kind, topic, disableAnnotations = false, annotationTopics = [], extraAnnotationTopics = [], targetFps, renderedFps, renderDelay, triggerToast }) => {
|
|
22
22
|
const [detections, setDetections] = React.useState([]);
|
|
23
23
|
React.useEffect(() => {
|
|
24
24
|
if (!disableAnnotations) {
|
|
@@ -29,6 +29,6 @@ export const Panel = ({ children, kind, topic, disableAnnotations = false, annot
|
|
|
29
29
|
}
|
|
30
30
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31
31
|
}, [JSON.stringify(annotationTopics), JSON.stringify(extraAnnotationTopics)]);
|
|
32
|
-
return (_jsx(RemountOnValueChange, { value: "internal-player", children: _jsx(ErrorBoundary, { children: _jsx(DetectionContext.Provider, { value: { detections }, children: _jsxs(Stack, { flexGrow: 1, overflow: "hidden", border: "1px solid #d3d3d3d9", style: { borderRadius: "8px" }, children: [_jsx(PanelToolbar, { kind: kind, topic: topic, setDetections: setDetections, disableAnnotations: disableAnnotations, targetFps: targetFps, triggerToast: triggerToast }), _jsx(Suspense, { fallback: _jsx(EmptyState, { children: _jsx("div", { children: "Loading..." }) }), children: _jsx(RemountOnValueChange, { value: detections, children: children }) })] }) }) }) }));
|
|
32
|
+
return (_jsx(RemountOnValueChange, { value: "internal-player", children: _jsx(ErrorBoundary, { children: _jsx(DetectionContext.Provider, { value: { detections }, children: _jsxs(Stack, { flexGrow: 1, overflow: "hidden", border: "1px solid #d3d3d3d9", style: { borderRadius: "8px" }, children: [_jsx(PanelToolbar, { kind: kind, topic: topic, setDetections: setDetections, disableAnnotations: disableAnnotations, targetFps: targetFps, renderedFps: renderedFps, renderDelay: renderDelay, triggerToast: triggerToast }), _jsx(Suspense, { fallback: _jsx(EmptyState, { children: _jsx("div", { children: "Loading..." }) }), children: _jsx(RemountOnValueChange, { value: detections, children: children }) })] }) }) }) }));
|
|
33
33
|
};
|
|
34
34
|
//# sourceMappingURL=Panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../../../src/components/Panel.tsx"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,oEAAoE;AACpE,0DAA0D;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,UAAU,MAAM,gDAAgD,CAAC;AACxE,OAAO,aAAa,MAAM,mDAAmD,CAAC;AAC9E,OAAO,oBAAoB,MAAM,0DAA0D,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../../../src/components/Panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { type PanelTopic } from "./Panel.js";
|
|
2
2
|
import { ProtobufKind } from "../messaging/protobuf.js";
|
|
3
|
-
import
|
|
3
|
+
import "@luxonis/common-fe-components/styles";
|
|
4
4
|
export type PanelToolbarProps = {
|
|
5
5
|
topic: string;
|
|
6
6
|
kind: ProtobufKind;
|
|
7
7
|
disableAnnotations?: boolean;
|
|
8
8
|
setDetections?: (cb: (topics: PanelTopic[]) => PanelTopic[]) => void;
|
|
9
9
|
targetFps?: number;
|
|
10
|
+
renderedFps?: number;
|
|
11
|
+
renderDelay?: number;
|
|
10
12
|
triggerToast?: () => void;
|
|
11
13
|
};
|
|
12
14
|
export declare const PanelToolbar: React.FC<PanelToolbarProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelToolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelToolbar.tsx"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -2,27 +2,31 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
3
|
// License, v2.0. If a copy of the MPL was not distributed with this
|
|
4
4
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/
|
|
5
|
-
import { ArrowDownIcon, ArrowUpIcon, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Flex, HelpIcon, Icon, Label, NormalText, SubHeader, Tooltip } from "@luxonis/common-fe-components";
|
|
5
|
+
import { ArrowDownIcon, ArrowUpIcon, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Flex, HelpIcon, Icon, Label, NormalText, SubHeader, Tooltip, } from "@luxonis/common-fe-components";
|
|
6
6
|
import { ImCheckboxChecked, ImCheckboxUnchecked } from "react-icons/im";
|
|
7
7
|
import { useDetections } from "./Panel.js";
|
|
8
8
|
import { useConnections } from "../context/ConnectionsProvider.js";
|
|
9
|
-
import
|
|
9
|
+
import "@luxonis/common-fe-components/styles";
|
|
10
|
+
import { createEventLoopDelaySampler } from "./measure-event-loop-delay";
|
|
10
11
|
const PanelAnnotationButton = ({ topic, onClick }) => {
|
|
11
|
-
const handleClick = React.useCallback(event => {
|
|
12
|
+
const handleClick = React.useCallback((event) => {
|
|
12
13
|
event.preventDefault();
|
|
13
14
|
onClick();
|
|
14
15
|
}, [onClick]);
|
|
15
16
|
return (_jsx(DropdownMenuItem, { onClick: handleClick, children: _jsxs(Flex, { align: "center", gap: "sm", children: [_jsx(Icon, { color: "active", icon: topic.enabled ? ImCheckboxChecked : ImCheckboxUnchecked }), _jsx(NormalText, { text: topic.name })] }) }));
|
|
16
17
|
};
|
|
17
|
-
export const PanelToolbar = ({ topic, kind, setDetections, disableAnnotations = false, targetFps, triggerToast }) => {
|
|
18
|
+
export const PanelToolbar = ({ topic, kind, setDetections, disableAnnotations = false, targetFps, triggerToast, renderedFps, renderDelay }) => {
|
|
19
|
+
const [metrics, setMetrics] = React.useState();
|
|
18
20
|
const { detections } = useDetections();
|
|
19
21
|
const connections = useConnections();
|
|
20
|
-
const
|
|
22
|
+
const eventLoopDelay = createEventLoopDelaySampler();
|
|
21
23
|
React.useEffect(() => {
|
|
22
24
|
const interval = setInterval(() => {
|
|
23
25
|
setMetrics(connections[0]?.getTopicMetrics(topic));
|
|
24
26
|
}, 500);
|
|
25
|
-
return () => {
|
|
27
|
+
return () => {
|
|
28
|
+
clearInterval(interval);
|
|
29
|
+
};
|
|
26
30
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
27
31
|
}, []);
|
|
28
32
|
const [annotationsOpened, setAnnotationsOpened] = React.useState(false);
|
|
@@ -32,36 +36,44 @@ export const PanelToolbar = ({ topic, kind, setDetections, disableAnnotations =
|
|
|
32
36
|
setDetections?.((current) => current.map((detection) => ({
|
|
33
37
|
...detection,
|
|
34
38
|
...(toggleTopicName === detection.name && {
|
|
35
|
-
enabled: !detection.enabled
|
|
36
|
-
})
|
|
39
|
+
enabled: !detection.enabled,
|
|
40
|
+
}),
|
|
37
41
|
})));
|
|
38
42
|
}, [setDetections]);
|
|
39
43
|
// TODO: show only when debug mode is ON
|
|
40
44
|
const name = React.useMemo(() => {
|
|
41
|
-
return
|
|
42
|
-
}, [topic
|
|
45
|
+
return topic;
|
|
46
|
+
}, [topic]);
|
|
43
47
|
React.useEffect(() => {
|
|
44
|
-
if (targetFps && metrics?.
|
|
48
|
+
if (targetFps && metrics?.incomingMessagesFps && targetFps > metrics.incomingMessagesFps) {
|
|
45
49
|
const timeout = setTimeout(() => {
|
|
46
|
-
if (targetFps * 0.8 > metrics.
|
|
50
|
+
if (targetFps * 0.8 > metrics.incomingMessagesFps) {
|
|
47
51
|
triggerToast?.();
|
|
48
52
|
}
|
|
49
53
|
}, 10_000);
|
|
50
|
-
return () => {
|
|
54
|
+
return () => {
|
|
55
|
+
clearTimeout(timeout);
|
|
56
|
+
};
|
|
51
57
|
}
|
|
52
58
|
return;
|
|
53
|
-
}, [targetFps, metrics?.
|
|
54
|
-
const makeDetection = React.useCallback((detection, { extra }) => (extra ?
|
|
59
|
+
}, [targetFps, metrics?.incomingMessagesFps]);
|
|
60
|
+
const makeDetection = React.useCallback((detection, { extra }) => (extra ? detection.extra && !detection.enabled : !detection.extra || detection.enabled) && (_jsx(PanelAnnotationButton, { topic: detection, onClick: () => {
|
|
61
|
+
onToggleTopic(detection.name);
|
|
62
|
+
} }, detection.name)), [onToggleTopic]);
|
|
55
63
|
return (_jsxs(Flex, { direction: "row", gap: "sm", align: "center", justify: "space-between", style: {
|
|
56
|
-
paddingLeft: 16
|
|
57
|
-
}, children: [_jsx(
|
|
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: {
|
|
58
66
|
borderRadius: 0,
|
|
59
67
|
borderTopRightRadius: 8,
|
|
60
|
-
|
|
68
|
+
height: "100%",
|
|
69
|
+
} }) }), _jsxs(DropdownMenuContent, { children: [detections.map((detection) => makeDetection(detection, { extra: false })), hasExtra && (_jsx(Button, { width: "full", paddingY: "xs", variant: "ghost", "aria-expanded": extraVisible ? "true" : undefined, onClick: () => {
|
|
70
|
+
setExtraVisible((current) => !current);
|
|
71
|
+
}, icon: extraVisible ? ArrowUpIcon : ArrowDownIcon, style: {
|
|
61
72
|
borderRadius: 4,
|
|
62
|
-
}, children: extraVisible ? "Less" : "More" })), extraVisible &&
|
|
73
|
+
}, children: extraVisible ? "Less" : "More" })), extraVisible &&
|
|
74
|
+
detections.map((detection) => makeDetection(detection, { extra: true }))] })] })), kind === "pointCloud" && (_jsx(Tooltip, { content: _jsxs(_Fragment, { children: [_jsx(Label, { text: "To move camera:" }), _jsxs("ul", { children: [_jsx("li", { children: "w - Move camera forward" }), _jsx("li", { children: "a - Move camera backward" }), _jsx("li", { children: "s - Move camera to the left" }), _jsx("li", { children: "d - Move camera to the right" }), _jsx("li", { children: "Scroll \u2013 Zoom in and out" }), _jsx("li", { children: "Drag \u2013 Move camera parallel to the ground" }), _jsx("li", { children: `Right-click + Drag horizontally – Rotate the camera around the world's z-axis` }), _jsx("li", { children: `Right-click + Drag vertically – Pan the camera around the world's x- and y- axes` })] })] }), children: _jsx(Button, { variant: "ghost", colorVariant: "white", cursor: "help", icon: HelpIcon, style: {
|
|
63
75
|
borderRadius: 0,
|
|
64
|
-
borderTopRightRadius: 8
|
|
76
|
+
borderTopRightRadius: 8,
|
|
65
77
|
} }) }))] }));
|
|
66
78
|
};
|
|
67
79
|
//# sourceMappingURL=PanelToolbar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelToolbar.js","sourceRoot":"","sources":["../../../../src/components/PanelToolbar.tsx"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,oEAAoE;AACpE,0DAA0D;
|
|
1
|
+
{"version":3,"file":"PanelToolbar.js","sourceRoot":"","sources":["../../../../src/components/PanelToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure-event-loop-delay.d.ts","sourceRoot":"","sources":["../../../../src/components/measure-event-loop-delay.tsx"],"names":[],"mappings":"AAEA,wBAAgB,2BAA2B,WAmB1C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const refreshInterval = 500;
|
|
2
|
+
export function createEventLoopDelaySampler() {
|
|
3
|
+
const [lastKnownTime, setLastKnownTime] = React.useState(performance.now());
|
|
4
|
+
const [delay, setDelay] = React.useState(0);
|
|
5
|
+
React.useEffect(() => {
|
|
6
|
+
const interval = setInterval(() => {
|
|
7
|
+
const now = performance.now();
|
|
8
|
+
const delay = now - lastKnownTime - refreshInterval;
|
|
9
|
+
setLastKnownTime(now);
|
|
10
|
+
setDelay(delay);
|
|
11
|
+
}, refreshInterval);
|
|
12
|
+
return () => {
|
|
13
|
+
clearInterval(interval);
|
|
14
|
+
};
|
|
15
|
+
}, [lastKnownTime]);
|
|
16
|
+
return delay;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=measure-event-loop-delay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure-event-loop-delay.js","sourceRoot":"","sources":["../../../../src/components/measure-event-loop-delay.tsx"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,GAAY,CAAC;AAErC,MAAM,UAAU,2BAA2B;IACzC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,aAAa,GAAG,eAAe,CAAC;YAEpD,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,EAAE,eAAe,CAAC,CAAC;QAEpB,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure-render-delay.d.ts","sourceRoot":"","sources":["../../../../src/components/measure-render-delay.tsx"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB;;8BAeL,MAAM;EAKxC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const refreshInterval = 500;
|
|
2
|
+
export function createRenderDelaySampler() {
|
|
3
|
+
const [frameDelays, setFrameDelays] = React.useState([]);
|
|
4
|
+
const [averageFrameDelay, setAverageFrameDelay] = React.useState(0);
|
|
5
|
+
React.useEffect(() => {
|
|
6
|
+
const interval = setInterval(() => {
|
|
7
|
+
setAverageFrameDelay(frameDelays.reduce((a, b) => a + b, 0) / frameDelays.length);
|
|
8
|
+
setFrameDelays([]);
|
|
9
|
+
}, refreshInterval);
|
|
10
|
+
return () => {
|
|
11
|
+
clearInterval(interval);
|
|
12
|
+
};
|
|
13
|
+
}, [frameDelays]);
|
|
14
|
+
const addFrameTime = (frameTime) => {
|
|
15
|
+
setFrameDelays(currentFrameDelays => [...currentFrameDelays, performance.now() - frameTime]);
|
|
16
|
+
};
|
|
17
|
+
return { averageFrameDelay, addFrameTime };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=measure-render-delay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure-render-delay.js","sourceRoot":"","sources":["../../../../src/components/measure-render-delay.tsx"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,GAAY,CAAC;AAErC,MAAM,UAAU,wBAAwB;IACtC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAW,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IAE5E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAClF,cAAc,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,EAAE,eAAe,CAAC,CAAC;QAEpB,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE;QACzC,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC;IAEF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -4,8 +4,8 @@ import { FoxgloveMessage } from "./communicator.js";
|
|
|
4
4
|
import { MessageHandler } from "../messaging/message-handler.js";
|
|
5
5
|
import { MetricsManager } from "../utils/metrics-manager.js";
|
|
6
6
|
export type Metrics = {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
incomingMessagesFps: number;
|
|
8
|
+
decodedMessagesFps: number;
|
|
9
9
|
};
|
|
10
10
|
declare class ProblemManager {
|
|
11
11
|
protected problems: PlayerProblem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foxglove-connection.d.ts","sourceRoot":"","sources":["../../../../src/connection/foxglove-connection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAyC,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EAEd,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAwB,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG;IACpB,
|
|
1
|
+
{"version":3,"file":"foxglove-connection.d.ts","sourceRoot":"","sources":["../../../../src/connection/foxglove-connection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAyC,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EAEd,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAwB,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,cAAM,cAAc;IAClB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAM;IAElC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,WAAW,IAAI,aAAa,EAAE;CAGtC;AAED,8BAAsB,kBAAkB;IACtC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC;IAGrB,SAAS,CAAC,cAAc,EAAE,cAAc,CAA8B;IACtE,SAAS,CAAC,kBAAkB,WAAwC;IAGpE,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,CAAM;IAE7C,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IAEpC,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC3B,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IAEzB,SAAS,CAAC,UAAU,gBAAa;IACjC,SAAS,CAAC,eAAe,gBAAa;IACtC,SAAS,CAAC,gBAAgB,gBAAa;IACvC,SAAS,CAAC,kBAAkB,gBAAa;IAEzC,SAAS,CAAC,QAAQ,iBAAwB;IAC1C,SAAS,CAAC,YAAY,iBAAwB;IAC9C,SAAS,CAAC,aAAa,iBAAwB;IAG/C,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAS,CAAC,MAAM,EAAE;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAM;gBAEY,EAAE,EAAE,MAAM;IAKtB,WAAW,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKxE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAO9C,SAAS,CAAC,cAAc,IAAI,IAAI;IAIhC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,IAAI;IAKhF,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IASxD,SAAS,CAAC,SAAS;;MA0DhB;CACJ"}
|
|
@@ -50,8 +50,8 @@ export class FoxgloveConnection {
|
|
|
50
50
|
}
|
|
51
51
|
getTopicMetrics(topic) {
|
|
52
52
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
incomingMessagesFps: this.inputMetrics.calculate(topic),
|
|
54
|
+
decodedMessagesFps: this.decodeMetrics.calculate(topic),
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
getCurrentTime() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foxglove-connection.js","sourceRoot":"","sources":["../../../../src/connection/foxglove-connection.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,oEAAoE;AACpE,0DAA0D;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAQ,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAGL,cAAc,EAEd,kBAAkB,EACnB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAkB,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAO7D,MAAM,cAAc;IACR,QAAQ,GAAoB,EAAE,CAAC;IAElC,UAAU,CAAC,OAAsB;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAgB,kBAAkB;IAC5B,QAAQ,CAA+C;IAEvD,EAAE,CAAS;IAErB,iBAAiB;IACP,cAAc,GAAmB,cAAc,CAAC,WAAW,CAAC;IAC5D,kBAAkB,GAAG,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAEpE,gBAAgB;IACN,aAAa,GAAmB,EAAE,CAAC;IAEnC,aAAa,GAAW,CAAC,CAAC;IAE1B,SAAS,CAAQ;IACjB,OAAO,CAAQ;IAEf,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;IAE/B,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IAChC,YAAY,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,aAAa,GAAG,IAAI,cAAc,EAAE,CAAC;IAE/C,kBAAkB;IACR,cAAc,CAAiB;IAE/B,MAAM,GAKZ,EAAE,CAAC;IAEP,YAAmB,EAAU;QAC3B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAEM,WAAW,CAAC,QAAqD;QACtE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEM,eAAe,CAAC,KAAa;QAClC,OAAO;YACL,
|
|
1
|
+
{"version":3,"file":"foxglove-connection.js","sourceRoot":"","sources":["../../../../src/connection/foxglove-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { MessageEvent } from "@foxglove/studio-base/players/types";
|
|
2
|
+
import { TopicSizes } from "./detection.js";
|
|
3
|
+
import { ImageAnnotations } from "../../../protobuf.generated/ImageAnnotations.js";
|
|
4
4
|
export type DeserializeImgDetectionsArgs = {
|
|
5
5
|
topic: string;
|
|
6
6
|
message: ImageAnnotations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../../../src/messaging/deserialization/detections/custom.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../../../src/messaging/deserialization/detections/custom.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAwB,MAAM,iDAAiD,CAAC;AAGzG,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,4BAA4B,GAAG,IAAI,CA2D3H"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/
|
|
4
4
|
import { PointsAnnotationType as FoxglovePointsAnnotationType } from "@foxglove/schemas";
|
|
5
5
|
import { estimateObjectSize } from "@foxglove/studio-base/players/messageMemoryEstimation.js";
|
|
6
|
-
import {
|
|
7
|
-
import { DEFAULT_HEIGHT, DEFAULT_WIDTH,
|
|
6
|
+
import { DEFAULT_BACKGROUND_COLOR, DEFAULT_STYLE, DEFAULT_TEXT_COLOR } from "./constants.js";
|
|
7
|
+
import { DEFAULT_HEIGHT, DEFAULT_WIDTH, getTextSize } from "./utils.js";
|
|
8
8
|
import { PointsAnnotationType } from "../../../protobuf.generated/ImageAnnotations.js";
|
|
9
9
|
import { parseMessage } from "../../utils.js";
|
|
10
10
|
export function deserializeImgDetectionsCustom({ topic, message, callback, topicSizes }) {
|
|
@@ -17,104 +17,25 @@ export function deserializeImgDetectionsCustom({ topic, message, callback, topic
|
|
|
17
17
|
const points = [];
|
|
18
18
|
const texts = [];
|
|
19
19
|
const circles = [];
|
|
20
|
-
const baseHighlightConfigNoType = {
|
|
21
|
-
timestamp: receiveTime,
|
|
22
|
-
outline_colors: [],
|
|
23
|
-
thickness: getBorderThickness(width, height),
|
|
24
|
-
outline_color: DEBUG_COLOR,
|
|
25
|
-
fill_color: TRANSPARENT_COLOR,
|
|
26
|
-
};
|
|
27
|
-
const baseHighlightConfig = {
|
|
28
|
-
...baseHighlightConfigNoType,
|
|
29
|
-
type: FoxglovePointsAnnotationType.LINE_LIST,
|
|
30
|
-
};
|
|
31
20
|
for (const annotations of message.annotations) {
|
|
32
|
-
// We assume that the annotation is a rectangle with 4 points (0 - bottom left corner, 3 - top right corner)
|
|
33
|
-
for (const point of annotations.points) {
|
|
34
|
-
const annotationWidth = (point.points[2]?.x ?? 0) - (point.points[0]?.x ?? 0);
|
|
35
|
-
const annotationHeight = (point.points[3]?.y ?? 0) - (point.points[0]?.y ?? 0);
|
|
36
|
-
const highligtLength = 0.035;
|
|
37
|
-
const highlightSizeX = Math.min(highligtLength, annotationWidth);
|
|
38
|
-
const highlightSizeY = Math.min(highligtLength, annotationHeight);
|
|
39
|
-
// If the annotation isn't a rectangle, we skip drawing borders on it
|
|
40
|
-
if (!point.points[0] || !point.points[1] || !point.points[2] || !point.points[3]) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
points.push({
|
|
44
|
-
...baseHighlightConfig,
|
|
45
|
-
points: [
|
|
46
|
-
{ ...point.points[0] },
|
|
47
|
-
{ x: (point.points[0].x + highlightSizeX), y: point.points[0].y },
|
|
48
|
-
],
|
|
49
|
-
});
|
|
50
|
-
points.push({
|
|
51
|
-
...baseHighlightConfig,
|
|
52
|
-
points: [
|
|
53
|
-
{ ...point.points[0] },
|
|
54
|
-
{ x: point.points[0].x, y: (point.points[0].y + highlightSizeY) },
|
|
55
|
-
],
|
|
56
|
-
});
|
|
57
|
-
points.push({
|
|
58
|
-
...baseHighlightConfig,
|
|
59
|
-
points: [
|
|
60
|
-
{ ...point.points[1] },
|
|
61
|
-
{ x: (point.points[1].x - highlightSizeX), y: point.points[1].y },
|
|
62
|
-
],
|
|
63
|
-
});
|
|
64
|
-
points.push({
|
|
65
|
-
...baseHighlightConfig,
|
|
66
|
-
points: [
|
|
67
|
-
{ ...point.points[1] },
|
|
68
|
-
{ x: point.points[1].x, y: (point.points[1].y + highlightSizeY) },
|
|
69
|
-
],
|
|
70
|
-
});
|
|
71
|
-
points.push({
|
|
72
|
-
...baseHighlightConfig,
|
|
73
|
-
points: [
|
|
74
|
-
{ ...point.points[2] },
|
|
75
|
-
{ x: (point.points[2].x - highlightSizeX), y: point.points[2].y },
|
|
76
|
-
],
|
|
77
|
-
});
|
|
78
|
-
points.push({
|
|
79
|
-
...baseHighlightConfig,
|
|
80
|
-
points: [
|
|
81
|
-
{ ...point.points[2] },
|
|
82
|
-
{ x: point.points[2].x, y: (point.points[2].y - highlightSizeY) },
|
|
83
|
-
],
|
|
84
|
-
});
|
|
85
|
-
points.push({
|
|
86
|
-
...baseHighlightConfig,
|
|
87
|
-
points: [
|
|
88
|
-
{ ...point.points[3] },
|
|
89
|
-
{ x: (point.points[3].x + highlightSizeX), y: point.points[3].y },
|
|
90
|
-
],
|
|
91
|
-
});
|
|
92
|
-
points.push({
|
|
93
|
-
...baseHighlightConfig,
|
|
94
|
-
points: [
|
|
95
|
-
{ ...point.points[3] },
|
|
96
|
-
{ x: point.points[3].x, y: (point.points[3].y - highlightSizeY) },
|
|
97
|
-
],
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
21
|
points.push(...annotations.points.map(annotation => ({
|
|
101
22
|
timestamp: receiveTime,
|
|
102
|
-
outline_colors: [],
|
|
103
|
-
thickness: getBorderThickness(width, height),
|
|
104
|
-
outline_color: TRANSPARENT_COLOR,
|
|
105
|
-
fill_color: DEFAULT_STYLE.fill,
|
|
106
23
|
type: annotation.type === PointsAnnotationType.UNRECOGNIZED
|
|
107
24
|
? FoxglovePointsAnnotationType.UNKNOWN
|
|
108
25
|
: Number(annotation.type),
|
|
109
26
|
points: annotation.points,
|
|
27
|
+
outline_color: annotation.outlineColor ?? DEFAULT_STYLE.outline,
|
|
28
|
+
outline_colors: [],
|
|
29
|
+
fill_color: annotation.fillColor ?? DEFAULT_STYLE.fill,
|
|
30
|
+
thickness: annotation.thickness
|
|
110
31
|
})));
|
|
111
32
|
texts.push(...annotations.texts.map(annotation => ({
|
|
112
33
|
timestamp: receiveTime,
|
|
113
|
-
position: annotation.position
|
|
34
|
+
position: annotation.position ?? { x: 0, y: 0 },
|
|
114
35
|
text: annotation.text,
|
|
115
36
|
font_size: annotation.fontSize ?? getTextSize(width, height),
|
|
116
|
-
text_color: DEFAULT_TEXT_COLOR,
|
|
117
|
-
background_color:
|
|
37
|
+
text_color: annotation.textColor ?? DEFAULT_TEXT_COLOR,
|
|
38
|
+
background_color: annotation.backgroundColor ?? DEFAULT_BACKGROUND_COLOR
|
|
118
39
|
})));
|
|
119
40
|
circles.push(...annotations.circles.map(annotation => ({
|
|
120
41
|
timestamp: receiveTime,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../../../src/messaging/deserialization/detections/custom.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,oEAAoE;AACpE,0DAA0D;AAE1D,OAAO,
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../../../src/messaging/deserialization/detections/custom.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import { Profile } from "../protobuf.generated/EncodedFrame.js";
|
|
|
13
13
|
import { Type } from "../protobuf.generated/ImgFrame.js";
|
|
14
14
|
export async function deserializeDepthAiMessage(args) {
|
|
15
15
|
const { topicDecoders, topicSizes, type, message, callback, topic } = args;
|
|
16
|
-
console.log(`Encoded "${type}" message at ${new Date().toLocaleString()}`, message);
|
|
16
|
+
//console.log(`Encoded "${type}" message at ${new Date().toLocaleString()}`, message);
|
|
17
17
|
switch (type) {
|
|
18
18
|
case "encodedFrame": {
|
|
19
19
|
topicSizes.set(topic, { width: message.width, height: message.height });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserialization.js","sourceRoot":"","sources":["../../../../src/messaging/deserialization.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,oEAAoE;AACpE,0DAA0D;AAI1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAc,MAAM,2CAA2C,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAiB,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAgB,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAG9E,OAAO,EAAY,IAAI,EAAE,MAAM,mCAAmC,CAAC;AAkBnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAmC;IAEnC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAE3E,
|
|
1
|
+
{"version":3,"file":"deserialization.js","sourceRoot":"","sources":["../../../../src/messaging/deserialization.ts"],"names":[],"mappings":"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"}
|