Deepen theme semantic color coverage

This commit is contained in:
vrubelroman 2026-04-23 21:18:15 +03:00
parent 60e3a9c0f8
commit ce84789edb
3 changed files with 94 additions and 22 deletions

View file

@ -13,14 +13,29 @@ type Palette struct {
Panel lipgloss.Color
PanelInactive lipgloss.Color
PanelElevated lipgloss.Color
StatusBar lipgloss.Color
Footer lipgloss.Color
Border lipgloss.Color
BorderActive lipgloss.Color
Text lipgloss.Color
Muted lipgloss.Color
Accent lipgloss.Color
Info lipgloss.Color
Success lipgloss.Color
Selection lipgloss.Color
Hover lipgloss.Color
Marked lipgloss.Color
Warning lipgloss.Color
Danger lipgloss.Color
ActivePath lipgloss.Color
ConfirmButton lipgloss.Color
CancelButton lipgloss.Color
ProgressFill lipgloss.Color
ProgressEmpty lipgloss.Color
HelpNav lipgloss.Color
HelpPanels lipgloss.Color
HelpDialogs lipgloss.Color
HelpMouse lipgloss.Color
Folder lipgloss.Color
TextFile lipgloss.Color
ConfigFile lipgloss.Color
@ -66,14 +81,29 @@ func Resolve(name string) (Palette, error) {
Panel: lipgloss.Color("#181825"),
PanelInactive: lipgloss.Color("#1E1E2E"),
PanelElevated: lipgloss.Color("#24273A"),
StatusBar: lipgloss.Color("#1E1E2E"),
Footer: lipgloss.Color("#11111B"),
Border: lipgloss.Color("#45475A"),
BorderActive: lipgloss.Color("#89B4FA"),
Text: lipgloss.Color("#CDD6F4"),
Muted: lipgloss.Color("#A6ADC8"),
Accent: lipgloss.Color("#F5C2E7"),
Info: lipgloss.Color("#89DCEB"),
Success: lipgloss.Color("#A6E3A1"),
Selection: lipgloss.Color("#313244"),
Hover: lipgloss.Color("#2A2B3C"),
Marked: lipgloss.Color("#F38BA8"),
Warning: lipgloss.Color("#F9E2AF"),
Danger: lipgloss.Color("#F38BA8"),
ActivePath: lipgloss.Color("#89DCEB"),
ConfirmButton: lipgloss.Color("#A6E3A1"),
CancelButton: lipgloss.Color("#F38BA8"),
ProgressFill: lipgloss.Color("#89B4FA"),
ProgressEmpty: lipgloss.Color("#45475A"),
HelpNav: lipgloss.Color("#89B4FA"),
HelpPanels: lipgloss.Color("#F9E2AF"),
HelpDialogs: lipgloss.Color("#CBA6F7"),
HelpMouse: lipgloss.Color("#F38BA8"),
Folder: lipgloss.Color("#89B4FA"),
TextFile: lipgloss.Color("#A6E3A1"),
ConfigFile: lipgloss.Color("#F9E2AF"),
@ -89,14 +119,29 @@ func Resolve(name string) (Palette, error) {
Panel: lipgloss.Color("#1A1B26"),
PanelInactive: lipgloss.Color("#24283B"),
PanelElevated: lipgloss.Color("#2A2F44"),
StatusBar: lipgloss.Color("#24283B"),
Footer: lipgloss.Color("#16161E"),
Border: lipgloss.Color("#3B4261"),
BorderActive: lipgloss.Color("#7AA2F7"),
Text: lipgloss.Color("#C0CAF5"),
Muted: lipgloss.Color("#9AA5CE"),
Accent: lipgloss.Color("#BB9AF7"),
Info: lipgloss.Color("#73DACA"),
Success: lipgloss.Color("#9ECE6A"),
Selection: lipgloss.Color("#292E42"),
Hover: lipgloss.Color("#252A3D"),
Marked: lipgloss.Color("#F7768E"),
Warning: lipgloss.Color("#E0AF68"),
Danger: lipgloss.Color("#F7768E"),
ActivePath: lipgloss.Color("#73DACA"),
ConfirmButton: lipgloss.Color("#9ECE6A"),
CancelButton: lipgloss.Color("#F7768E"),
ProgressFill: lipgloss.Color("#7AA2F7"),
ProgressEmpty: lipgloss.Color("#3B4261"),
HelpNav: lipgloss.Color("#7AA2F7"),
HelpPanels: lipgloss.Color("#E0AF68"),
HelpDialogs: lipgloss.Color("#BB9AF7"),
HelpMouse: lipgloss.Color("#F7768E"),
Folder: lipgloss.Color("#7AA2F7"),
TextFile: lipgloss.Color("#9ECE6A"),
ConfigFile: lipgloss.Color("#E0AF68"),
@ -112,14 +157,29 @@ func Resolve(name string) (Palette, error) {
Panel: lipgloss.Color("#282828"),
PanelInactive: lipgloss.Color("#32302F"),
PanelElevated: lipgloss.Color("#3C3836"),
StatusBar: lipgloss.Color("#32302F"),
Footer: lipgloss.Color("#1D2021"),
Border: lipgloss.Color("#504945"),
BorderActive: lipgloss.Color("#FABD2F"),
Text: lipgloss.Color("#EBDBB2"),
Muted: lipgloss.Color("#BDAE93"),
Accent: lipgloss.Color("#83A598"),
Info: lipgloss.Color("#8EC07C"),
Success: lipgloss.Color("#B8BB26"),
Selection: lipgloss.Color("#3C3836"),
Hover: lipgloss.Color("#45403D"),
Marked: lipgloss.Color("#FB4934"),
Warning: lipgloss.Color("#FE8019"),
Danger: lipgloss.Color("#FB4934"),
ActivePath: lipgloss.Color("#8EC07C"),
ConfirmButton: lipgloss.Color("#B8BB26"),
CancelButton: lipgloss.Color("#FB4934"),
ProgressFill: lipgloss.Color("#FABD2F"),
ProgressEmpty: lipgloss.Color("#504945"),
HelpNav: lipgloss.Color("#83A598"),
HelpPanels: lipgloss.Color("#FABD2F"),
HelpDialogs: lipgloss.Color("#D3869B"),
HelpMouse: lipgloss.Color("#FB4934"),
Folder: lipgloss.Color("#83A598"),
TextFile: lipgloss.Color("#B8BB26"),
ConfigFile: lipgloss.Color("#FABD2F"),
@ -135,14 +195,29 @@ func Resolve(name string) (Palette, error) {
Panel: lipgloss.Color("#3B4252"),
PanelInactive: lipgloss.Color("#434C5E"),
PanelElevated: lipgloss.Color("#4C566A"),
StatusBar: lipgloss.Color("#434C5E"),
Footer: lipgloss.Color("#2E3440"),
Border: lipgloss.Color("#4C566A"),
BorderActive: lipgloss.Color("#88C0D0"),
Text: lipgloss.Color("#ECEFF4"),
Muted: lipgloss.Color("#D8DEE9"),
Accent: lipgloss.Color("#81A1C1"),
Info: lipgloss.Color("#8FBCBB"),
Success: lipgloss.Color("#A3BE8C"),
Selection: lipgloss.Color("#434C5E"),
Hover: lipgloss.Color("#505A70"),
Marked: lipgloss.Color("#BF616A"),
Warning: lipgloss.Color("#EBCB8B"),
Danger: lipgloss.Color("#BF616A"),
ActivePath: lipgloss.Color("#8FBCBB"),
ConfirmButton: lipgloss.Color("#A3BE8C"),
CancelButton: lipgloss.Color("#BF616A"),
ProgressFill: lipgloss.Color("#88C0D0"),
ProgressEmpty: lipgloss.Color("#4C566A"),
HelpNav: lipgloss.Color("#81A1C1"),
HelpPanels: lipgloss.Color("#EBCB8B"),
HelpDialogs: lipgloss.Color("#B48EAD"),
HelpMouse: lipgloss.Color("#BF616A"),
Folder: lipgloss.Color("#81A1C1"),
TextFile: lipgloss.Color("#A3BE8C"),
ConfigFile: lipgloss.Color("#EBCB8B"),

View file

@ -1390,7 +1390,7 @@ func renderStatus(m Model) string {
return lipgloss.NewStyle().
Width(m.width).
Padding(0, 1).
Background(m.palette.PanelInactive).
Background(m.palette.StatusBar).
Foreground(m.palette.Text).
Render(summary + " :: " + m.status)
}
@ -1403,12 +1403,12 @@ func renderFooter(m Model) string {
continue
}
keyView := lipgloss.NewStyle().
Background(m.palette.Background).
Background(m.palette.Footer).
Foreground(m.palette.FooterKey).
Bold(true).
Render(help.Key)
descView := lipgloss.NewStyle().
Background(m.palette.Background).
Background(m.palette.Footer).
Foreground(m.palette.Text).
Render(" " + help.Desc)
parts = append(parts, keyView+descView)
@ -1416,7 +1416,7 @@ func renderFooter(m Model) string {
line := strings.Join(parts, " ")
if m.selectMode {
modeLabel := lipgloss.NewStyle().
Foreground(m.palette.Accent).
Foreground(m.palette.Info).
Bold(true).
Render("SELECT TEXT MODE")
if line != "" {
@ -1429,7 +1429,7 @@ func renderFooter(m Model) string {
m.width,
lipgloss.Left,
line,
lipgloss.WithWhitespaceBackground(m.palette.Background),
lipgloss.WithWhitespaceBackground(m.palette.Footer),
)
}
@ -1557,7 +1557,7 @@ func renderConfirmActions(width int, palette theme.Palette) string {
confirm := lipgloss.NewStyle().
Width(buttonWidth).
Align(lipgloss.Center).
Background(palette.TextFile).
Background(palette.ConfirmButton).
Foreground(palette.Background).
Bold(true).
Render("Enter / y")
@ -1565,7 +1565,7 @@ func renderConfirmActions(width int, palette theme.Palette) string {
cancel := lipgloss.NewStyle().
Width(buttonWidth).
Align(lipgloss.Center).
Background(palette.Danger).
Background(palette.CancelButton).
Foreground(palette.Background).
Bold(true).
Render("Esc / n")
@ -1604,7 +1604,6 @@ func renderHelpModal(modal modalState, palette theme.Palette, width int) string
noteStyle := lipgloss.NewStyle().Width(contentWidth).Background(palette.Panel).Foreground(palette.FooterKey).Bold(true)
spacer := lipgloss.NewStyle().Width(contentWidth).Background(palette.Panel).Render(" ")
sectionColors := []lipgloss.Color{palette.Accent, palette.Warning, palette.FooterKey, palette.Danger}
keyColStyle := lipgloss.NewStyle().Width(24).Background(palette.Panel).Foreground(palette.FooterKey).Bold(true)
descColStyle := lipgloss.NewStyle().Background(palette.Panel).Foreground(palette.Text)
@ -1618,7 +1617,6 @@ func renderHelpModal(modal modalState, palette theme.Palette, width int) string
BorderBackground(palette.Panel)
lines := []string{titleStyle.Render(modal.title), spacer}
sectionIdx := 0
for _, raw := range strings.Split(modal.body, "\n") {
trimmed := strings.TrimSpace(raw)
if trimmed == "" {
@ -1642,8 +1640,7 @@ func renderHelpModal(modal modalState, palette theme.Palette, width int) string
continue
}
sectionColor := sectionColorForHeader(trimmed, sectionIdx, sectionColors, palette)
sectionIdx++
sectionColor := sectionColorForHeader(trimmed, palette)
header := lipgloss.NewStyle().
Width(contentWidth).
Background(palette.Panel).
@ -1674,18 +1671,18 @@ func splitHelpItem(raw string) (string, string) {
return value, ""
}
func sectionColorForHeader(header string, idx int, fallback []lipgloss.Color, palette theme.Palette) lipgloss.Color {
func sectionColorForHeader(header string, palette theme.Palette) lipgloss.Color {
switch header {
case "Navigation":
return palette.Folder
return palette.HelpNav
case "View and Panels":
return fallback[1]
return palette.HelpPanels
case "Dialogs and Transfers":
return palette.BinaryFile
return palette.HelpDialogs
case "Mouse":
return fallback[3]
return palette.HelpMouse
default:
return fallback[idx%len(fallback)]
return palette.Accent
}
}
@ -1749,8 +1746,8 @@ func renderProgressBar(ratio float64, width int, palette theme.Palette) string {
filled = 0
}
bar := lipgloss.NewStyle().Foreground(palette.Accent).Render(strings.Repeat("█", filled))
rest := lipgloss.NewStyle().Foreground(palette.Border).Render(strings.Repeat("░", width-filled))
bar := lipgloss.NewStyle().Foreground(palette.ProgressFill).Render(strings.Repeat("█", filled))
rest := lipgloss.NewStyle().Foreground(palette.ProgressEmpty).Render(strings.Repeat("░", width-filled))
percent := fmt.Sprintf(" %3.0f%%", ratio*100)
return bar + rest + percent
}

View file

@ -222,7 +222,7 @@ func renderPaneHeader(pane BrowserPane, cfg config.Config, palette theme.Palette
Foreground(palette.Text).
Bold(active)
if active {
pathStyle = pathStyle.Foreground(palette.TextFile)
pathStyle = pathStyle.Foreground(palette.ActivePath)
}
return lipgloss.NewStyle().
@ -292,11 +292,11 @@ func renderEntryRow(entry vfs.Entry, cfg config.Config, width int, selected bool
rowBackground := baseBackground
switch {
case marked:
rowBackground = palette.Danger
rowBackground = palette.Marked
case selected:
rowBackground = palette.Selection
case hovered:
rowBackground = palette.PanelElevated
rowBackground = palette.Hover
}
parts := make([]string, 0, len(columns))