79 lines
3.0 KiB
Go
79 lines
3.0 KiB
Go
package ui
|
|
|
|
import (
|
|
"termdoku/internal/theme"
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
type UIStyles struct {
|
|
App lipgloss.Style
|
|
Panel lipgloss.Style
|
|
Banner lipgloss.Style
|
|
MenuItem lipgloss.Style
|
|
MenuItemSelected lipgloss.Style
|
|
Hint lipgloss.Style
|
|
|
|
BoolTrue lipgloss.Style
|
|
BoolFalse lipgloss.Style
|
|
|
|
Board lipgloss.Style
|
|
RowSep lipgloss.Style
|
|
ColSep lipgloss.Style
|
|
Cell lipgloss.Style
|
|
CellFixed lipgloss.Style
|
|
CellSelected lipgloss.Style
|
|
CellDuplicate lipgloss.Style
|
|
CellConflict lipgloss.Style
|
|
Status lipgloss.Style
|
|
StatusError lipgloss.Style
|
|
|
|
DiffBox lipgloss.Style
|
|
}
|
|
|
|
func BuildStyles(t theme.Theme) UIStyles {
|
|
gridColor := lipgloss.Color(t.Palette.GridLine)
|
|
accent := lipgloss.Color(t.Palette.Accent)
|
|
|
|
// Adaptive colors
|
|
adaptiveColors := theme.NewAdaptiveColors(t)
|
|
accentColors := adaptiveColors.GetAccentColors()
|
|
|
|
gray := lipgloss.Color("#9ca3af")
|
|
if t.Name == "light" {
|
|
gray = lipgloss.Color("#6b7280") // darker gray for light theme
|
|
}
|
|
|
|
menuItemColor := lipgloss.Color(t.Palette.Foreground)
|
|
statusColor := gray
|
|
if t.Name == "light" {
|
|
menuItemColor = lipgloss.Color("#000000")
|
|
statusColor = menuItemColor
|
|
}
|
|
|
|
return UIStyles{
|
|
App: lipgloss.NewStyle().Foreground(lipgloss.Color(t.Palette.Foreground)),
|
|
Panel: lipgloss.NewStyle().Padding(0, 4).Margin(1, 4).Border(lipgloss.RoundedBorder()).BorderForeground(lipgloss.Color(accentColors["panel"])),
|
|
Banner: lipgloss.NewStyle().Foreground(accent).Bold(true),
|
|
MenuItem: lipgloss.NewStyle().Foreground(menuItemColor),
|
|
MenuItemSelected: lipgloss.NewStyle().Foreground(accent).Bold(true),
|
|
Hint: lipgloss.NewStyle().Foreground(accent),
|
|
|
|
BoolTrue: lipgloss.NewStyle().Foreground(lipgloss.Color("#16a34a")).Bold(true),
|
|
BoolFalse: lipgloss.NewStyle().Foreground(gray),
|
|
|
|
Board: lipgloss.NewStyle(),
|
|
RowSep: lipgloss.NewStyle().Foreground(gridColor),
|
|
ColSep: lipgloss.NewStyle().Foreground(gridColor),
|
|
Cell: lipgloss.NewStyle().Background(lipgloss.Color(t.Palette.CellBaseBG)).Foreground(lipgloss.Color(t.Palette.CellBaseFG)).Padding(0, 1),
|
|
CellFixed: lipgloss.NewStyle().Background(lipgloss.Color(t.Palette.CellFixedBG)).Foreground(lipgloss.Color(t.Palette.CellFixedFG)).Padding(0, 1).Bold(true),
|
|
CellSelected: lipgloss.NewStyle().Background(lipgloss.Color(t.Palette.CellSelectedBG)).Foreground(lipgloss.Color(t.Palette.CellSelectedFG)).Padding(0, 1).Bold(true),
|
|
CellDuplicate: lipgloss.NewStyle().Background(lipgloss.Color(t.Palette.CellDuplicateBG)).Padding(0, 1),
|
|
CellConflict: lipgloss.NewStyle().Background(lipgloss.Color(t.Palette.CellConflictBG)).Padding(0, 1).Bold(true),
|
|
Status: lipgloss.NewStyle().Foreground(statusColor),
|
|
StatusError: lipgloss.NewStyle().Foreground(lipgloss.Color(accentColors["error"])).Bold(true),
|
|
|
|
DiffBox: lipgloss.NewStyle().Border(lipgloss.RoundedBorder()).BorderForeground(accent).Padding(1, 4),
|
|
}
|
|
}
|