feat: add api_input LED interpolation; fix LED preview, FPS charts, dashboard layout
Lint & Test / test (push) Successful in 1m26s

API Input:
- Add interpolation mode (linear/nearest/none) for LED count mismatch
  between incoming data and device LED count
- New IconSelect in editor, i18n for en/ru/zh
- Mark crossfade as won't-do (client owns temporal transitions)
- Mark last-write-wins as already implemented

LED Preview:
- Fix zone-mode preview parsing composite wire format (0xFE header
  bytes were rendered as color data, garbling multi-zone previews)
- Fix _restoreLedPreviewState to handle zone-mode panels

FPS Charts:
- Seed target card charts from server metrics-history on first load
- Add fetchMetricsHistory() with 5s TTL cache shared across
  dashboard, targets, perf-charts, and graph-editor
- Fix chart padding: pass maxSamples per caller (120 for dashboard,
  30 for target cards) instead of hardcoded 120
- Fix dashboard chart empty on tab switch (always fetch server history)
- Left-pad with nulls for consistent chart width across targets

Dashboard:
- Fix metrics row alignment (grid layout with fixed column widths)
- Fix FPS label overflow into uptime column
This commit is contained in:
2026-03-26 02:06:49 +03:00
parent be4c98b543
commit 3e0bf8538c
17 changed files with 248 additions and 67 deletions
@@ -158,14 +158,15 @@
}
.dashboard-target-metrics {
display: flex;
gap: 12px;
display: grid;
grid-template-columns: auto 72px 36px;
gap: 8px;
align-items: center;
}
.dashboard-metric {
text-align: center;
min-width: 48px;
overflow: hidden;
}
.dashboard-metric-value {
@@ -174,6 +175,7 @@
color: var(--primary-text-color);
line-height: 1.2;
font-family: var(--font-mono, monospace);
white-space: nowrap;
}
.dashboard-metric-label {
@@ -187,7 +189,7 @@
display: flex;
align-items: center;
gap: 6px;
min-width: auto;
overflow: hidden;
}
.dashboard-fps-sparkline {
@@ -200,7 +202,8 @@
display: flex;
flex-direction: column;
align-items: center;
min-width: 36px;
width: 44px;
flex-shrink: 0;
line-height: 1.1;
}