From 292d5db692a21a7f7ccd1c59322d1d3b5052bcc1 Mon Sep 17 00:00:00 2001 From: Rafael Araujo Lehmkuhl Date: Fri, 29 Nov 2024 19:28:18 -0300 Subject: [PATCH] widgets: Add `Plotter` widget This is a plot widget that can be configured to consume from any data-lake variable of type `number`. --- src/assets/widgets/Plotter.png | Bin 0 -> 6790 bytes src/components/EditMenu.vue | 2 + src/components/widgets/Plotter.vue | 304 +++++++++++++++++++++++++++++ src/types/widgets.ts | 1 + 4 files changed, 307 insertions(+) create mode 100644 src/assets/widgets/Plotter.png create mode 100644 src/components/widgets/Plotter.vue diff --git a/src/assets/widgets/Plotter.png b/src/assets/widgets/Plotter.png new file mode 100644 index 0000000000000000000000000000000000000000..b27fb4814c093b0273c3984ef530e6edaadd2e73 GIT binary patch literal 6790 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 UskEQuA4>qBr)8*FrfwhkUvrdRaR2}S literal 0 HcmV?d00001 diff --git a/src/components/EditMenu.vue b/src/components/EditMenu.vue index d3c4d48eb..2b6025c24 100644 --- a/src/components/EditMenu.vue +++ b/src/components/EditMenu.vue @@ -654,6 +654,7 @@ import IFrameImg from '@/assets/widgets/IFrame.png' import ImageViewImg from '@/assets/widgets/ImageView.png' import MapImg from '@/assets/widgets/Map.png' import MiniWidgetsBarImg from '@/assets/widgets/MiniWidgetsBar.png' +import PlotterImg from '@/assets/widgets/Plotter.png' import URLVideoPlayerImg from '@/assets/widgets/URLVideoPlayer.png' import VideoPlayerImg from '@/assets/widgets/VideoPlayer.png' import VirtualHorizonImg from '@/assets/widgets/VirtualHorizon.png' @@ -743,6 +744,7 @@ const widgetImages = { ImageView: ImageViewImg, Map: MapImg, MiniWidgetsBar: MiniWidgetsBarImg, + Plotter: PlotterImg, URLVideoPlayer: URLVideoPlayerImg, VideoPlayer: VideoPlayerImg, VirtualHorizon: VirtualHorizonImg, diff --git a/src/components/widgets/Plotter.vue b/src/components/widgets/Plotter.vue new file mode 100644 index 000000000..88ef8d344 --- /dev/null +++ b/src/components/widgets/Plotter.vue @@ -0,0 +1,304 @@ + + + + + diff --git a/src/types/widgets.ts b/src/types/widgets.ts index 62da93c31..0924bd394 100644 --- a/src/types/widgets.ts +++ b/src/types/widgets.ts @@ -16,6 +16,7 @@ export enum WidgetType { ImageView = 'ImageView', Map = 'Map', MiniWidgetsBar = 'MiniWidgetsBar', + Plotter = 'Plotter', URLVideoPlayer = 'URLVideoPlayer', VideoPlayer = 'VideoPlayer', VirtualHorizon = 'VirtualHorizon',