fix(tui): quick wins batch — version footer, column widths, zebra, sparkline
CI / test (pull_request) Successful in 2m34s
CI / lint (pull_request) Successful in 57s
CI / vulncheck (pull_request) Successful in 51s

- Show version in dashboard footer (wired from goreleaser ldflags)
- Cap name column at 35, raise sparkline minimum to 15 chars
- Preserve zebra background on group rows (was lost by style override)
- Group sparkline uses bullet • instead of heavy circle ●
This commit was merged in pull request #60.
This commit is contained in:
2026-06-04 14:56:01 -04:00
parent 60592ef810
commit e0cb0adebd
6 changed files with 17 additions and 11 deletions
+2 -2
View File
@@ -131,9 +131,9 @@ func (m Model) groupSparkline(groupID int, width int) string {
}
for _, up := range aggregated {
if up {
sb.WriteString(specialStyle.Render(""))
sb.WriteString(specialStyle.Render(""))
} else {
sb.WriteString(dangerStyle.Render(""))
sb.WriteString(dangerStyle.Render(""))
}
}
return sb.String()
+4 -4
View File
@@ -78,13 +78,13 @@ func (m Model) computeLayout() tableLayout {
if nameW < 13 {
nameW = 13
}
if nameW > 40 {
nameW = 40
if nameW > 35 {
nameW = 35
}
sparkW := avail - nameW
if sparkW < 10 {
sparkW = 10
if sparkW < 15 {
sparkW = 15
}
widths[1] = nameW
+3
View File
@@ -66,6 +66,9 @@ func (m Model) renderTable(headers []string, items int, buildRows func(start, en
if styleOverride != nil {
if s := styleOverride(row, col); s != nil {
style := *s
if row%2 == 1 {
style = style.Background(tableZebraStyle.GetBackground())
}
if isSelected {
style = tableSelectedStyle.Foreground(s.GetForeground())
}
+3 -1
View File
@@ -138,9 +138,10 @@ type Model struct {
// demoMode renders a stable status dot instead of the animated pulse so
// screenshots/recordings don't capture the spinner mid-frame. Set via UPTOP_DEMO=1.
demoMode bool
version string
}
func InitialModel(isAdmin bool, s store.Store, eng *monitor.Engine) Model {
func InitialModel(isAdmin bool, s store.Store, eng *monitor.Engine, version string) Model {
vpLogs := viewport.New(100, 20)
vpLogs.SetContent("Waiting for logs...")
z := zone.New()
@@ -172,6 +173,7 @@ func InitialModel(isAdmin bool, s store.Store, eng *monitor.Engine) Model {
theme: theme,
themeIndex: themeIdx,
demoMode: os.Getenv("UPTOP_DEMO") == "1",
version: version,
}
}
+3 -2
View File
@@ -275,9 +275,10 @@ func (m Model) renderFooter(stats dashboardStats) string {
keys = "[T]Theme [Tab]Switch [q]Quit"
}
footer := "\n" + statusLine + " " + subtleStyle.Render(keys)
ver := subtleStyle.Render("v" + m.version)
footer := "\n" + statusLine + " " + subtleStyle.Render(keys) + " " + ver
if m.filterText != "" && m.currentTab == 0 {
footer = "\n" + subtleStyle.Render(fmt.Sprintf("filter: %s", m.filterText)) + " " + statusLine + " " + subtleStyle.Render(keys)
footer = "\n" + subtleStyle.Render(fmt.Sprintf("filter: %s", m.filterText)) + " " + statusLine + " " + subtleStyle.Render(keys) + " " + ver
}
return footer
}