From 3c04af9532c267de78f1946e6298394883cb8a21 Mon Sep 17 00:00:00 2001
From: Joe Allen <49467845+LiJoeAllen@users.noreply.github.com>
Date: Tue, 18 Aug 2026 19:29:12 +0800
Subject: [PATCH] feat: hover preview for truncated JSON content
New HoverPreview component shows a floating tooltip with full
content on mouse hover (400ms delay). Applied to:
- MessageStream: collapsed + expanded payload views
- PresetList: payload preview in table
- LogPanel: details section
The popup follows the mouse cursor, auto-positions within viewport,
and supports monospace code formatting with scroll for long content.
---
src/components/common/HoverPreview.vue | 119 +++++++++++++++++++++
src/components/dashboard/LogPanel.vue | 3 +-
src/components/dashboard/MessageStream.vue | 7 +-
src/components/presets/PresetList.vue | 5 +-
4 files changed, 130 insertions(+), 4 deletions(-)
create mode 100644 src/components/common/HoverPreview.vue
diff --git a/src/components/common/HoverPreview.vue b/src/components/common/HoverPreview.vue
new file mode 100644
index 0000000..480820c
--- /dev/null
+++ b/src/components/common/HoverPreview.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+ {{ text }}
{{ formatPayload(msg) }}
- {{ truncate(prettyJson(msg.payload), 200) }}
+ >+diff --git a/src/components/presets/PresetList.vue b/src/components/presets/PresetList.vue index a1bcd55..616e39f 100644 --- a/src/components/presets/PresetList.vue +++ b/src/components/presets/PresetList.vue @@ -4,6 +4,7 @@ import { ElMessage, ElMessageBox } from 'element-plus' import type { Preset } from '../../types/mqtt' import { usePresets } from '../../stores/usePresets' import { prettyJson, truncate } from '../../utils/format' +import HoverPreview from '../common/HoverPreview.vue' import PresetForm from './PresetForm.vue' // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -77,7 +78,9 @@ const qosLabel = (qos: number) => `QoS ${qos}`{{ truncate(prettyJson(msg.payload), 200) }} +