1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package ui
import (
"strings"
"github.com/charmbracelet/lipgloss"
"github.com/humdrum-tiv/sportsball/internal/model"
)
// settingsView renders the leagues settings screen: a checklist of every
// league — enabled ones first in display order, then a hidden group — with the
// cursor row marked. Toggling and reordering happen in handleSettingsKey; this
// only draws current state. Flows through View()'s paintBackground like the
// other views.
func (a App) settingsView() string {
header := styleTitle.Render(" LEAGUES ") +
lipgloss.NewStyle().Foreground(colAccent2).Bold(true).Render(" show, hide & reorder ") +
styleSubtle.Render("(auto-hidden off-season · "+keys.ResetLeagues.Help().Key+" resets overrides)")
rows, enabled := a.settingsRows()
var lines []string
dividerShown := false
for i := range rows {
if !enabled[i] && !dividerShown {
lines = append(lines, styleFaint.Render(" ── hidden ──"))
dividerShown = true
}
lines = append(lines, a.settingsRow(rows[i], enabled[i], i == a.settingsCursor))
}
help := styleHelp.Render(strings.Join([]string{
keys.Up.Help().Key + "/" + keys.Down.Help().Key + " move",
keys.Toggle.Help().Key + " toggle",
keys.MoveUp.Help().Key + "/" + keys.MoveDown.Help().Key + " reorder",
keys.ResetLeagues.Help().Key + " auto",
keys.Back.Help().Key + " done",
}, styleFaint.Render(" · ")))
parts := []string{header, "", strings.Join(lines, "\n"), "", help}
return styleApp.Render(strings.Join(parts, "\n"))
}
// settingsRow renders one league line: cursor marker, checkbox, league glyph
// and name. Enabled rows get a green check; the cursor row gets an accent ▸.
func (a App) settingsRow(l model.League, on, selected bool) string {
box := styleSubtle.Render("[ ]")
if on {
box = lipgloss.NewStyle().Foreground(colWin).Bold(true).Render("[x]")
}
cursor := " "
if selected {
cursor = lipgloss.NewStyle().Foreground(colAccent).Bold(true).Render("▸ ")
}
name := lipgloss.NewStyle().Foreground(teamColor(l.Color)).Bold(true).Render(l.Icon + " " + l.Name)
return cursor + box + " " + name
}
|