- ContextMenu: remove unused cleanup variable (never assigned, TS 6 infer as never)
- GlobalVariableManager: add explicit boolean type to event handler param
- LogPanel: use openPath instead of deprecated open from @tauri-apps/plugin-opener
- Optional: only presets you pin appear as tabs (click + 添加)
- Pinable: + button opens dropdown to select which presets to pin
- Draggable: drag grip (⠿) to reorder tabs via HTML5 drag & drop
- Unpin: hover tab shows × button to remove it
- Independent editor state per pinned preset
- Drag visual feedback: opacity, border highlight
- Replace dropdown with tab bar: each preset is a tab
- Click a tab to load that preset's topic/payload/QoS/Retain
- Per-preset independent editor state (variables, v5 props preserved)
- Variables and v5 properties are maintained per-tab, not shared
- Close button on active tab to deselect (when multiple presets)
- Auto-select first preset on load
- Send button shows current preset name
- Toggle between single and batch mode with a button
- Batch mode: multi-select presets, shows selected preset list
- Batch send: sends all selected presets sequentially with progress
- Progress indicators: pending → sending (spinner) → success (✓) / error (✗)
- Single mode: unchanged UX with topic/payload/QoS/Retain editors
- Both modes share variable bindings and v5 properties
- Override --el-color-white to dark bg to prevent white text on colored backgrounds
- Add comprehensive Element Plus dark mode variables (input, table, tag, dialog, select, checkbox, switch, etc.)
- Fix hardcoded color: #fff in SendPanel toggle-badge to use CSS variable
- Add missing --el-bg-color-page, --el-fill-color-dark, --el-fill-color-blank
- No saved preference → use prefers-color-scheme media query
- User clicks toggle → save explicit preference to localStorage
- Listen for system theme changes (OS-level toggle) when no explicit preference
- applyTheme() helper to keep isDark ref and DOM in sync
- Fixed Chinese variable name that caused JS runtime error (预估Width → estimatedWidth-like logic)
- Proper viewport boundary detection with flip-to-left and flip-to-top
- Uses maxHeight prop instead of hardcoded 360
- Cleaner position calculation with Math.min/Math.max clamping
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.
- Soft color palette with warm earth tones (green-primary, warm neutrals)
- Dark mode support with theme toggle in header (persisted in localStorage)
- Reduced contrast: softer borders, subtle shadows, muted colors
- Custom scrollbar, focus rings, button/input/dialog styling
- Better typography: line-height 1.6, optimized font stack
- ELement Plus theme overrides for consistent comfort styling
- All styles in src/styles/comfort.css with CSS custom properties
Change toggle logic from 'expanded set' (collapsed by default)
to 'collapsed set' (expanded by default). Users can collapse
individual messages with the toggle button.