package style import ( "image/color" "charm.land/bubbles/v2/help" "charm.land/lipgloss/v2" "github.com/anotherhadi/spilltea/internal/config" ) type Styles struct { Primary color.Color Success color.Color Error color.Color Warning color.Color SubtleBg color.Color Selection color.Color Text color.Color MutedFg color.Color Subtle color.Color Bold lipgloss.Style Faint lipgloss.Style Panel lipgloss.Style PanelFocused lipgloss.Style PagerDotActive string PagerDotInactive string } var S *Styles func Init(cfg *config.Config) { c := cfg.TUI.Colors subtleBg := lipgloss.Color("#" + c.Base01) // Lighter Background (status bars) selection := lipgloss.Color("#" + c.Base02) // Selection Background subtle := lipgloss.Color("#" + c.Base03) // Faint text, borders mutedFg := lipgloss.Color("#" + c.Base04) // Muted foreground text := lipgloss.Color("#" + c.Base05) // Default Foreground errCol := lipgloss.Color("#" + c.Base08) // Red: errors warning := lipgloss.Color("#" + c.Base09) // Orange: warnings success := lipgloss.Color("#" + c.Base0B) // Green: success primary := lipgloss.Color("#" + c.Base0D) // Accent: primary S = &Styles{ Primary: primary, Success: success, Error: errCol, Warning: warning, SubtleBg: subtleBg, Selection: selection, MutedFg: mutedFg, Text: text, Subtle: subtle, Bold: lipgloss.NewStyle().Bold(true), Faint: lipgloss.NewStyle().Foreground(subtle).Faint(true), Panel: lipgloss.NewStyle(). Border(lipgloss.RoundedBorder()). BorderForeground(subtle), PanelFocused: lipgloss.NewStyle(). Border(lipgloss.RoundedBorder()). BorderForeground(primary), PagerDotActive: lipgloss.NewStyle().Foreground(primary).SetString("•").String(), PagerDotInactive: lipgloss.NewStyle().Foreground(subtle).SetString("•").String(), } } func NewHelp() help.Model { h := help.New() h.Styles.ShortKey = lipgloss.NewStyle().Foreground(S.Primary) h.Styles.ShortDesc = lipgloss.NewStyle().Foreground(S.MutedFg) h.Styles.ShortSeparator = lipgloss.NewStyle().Foreground(S.Subtle) h.Styles.FullKey = lipgloss.NewStyle().Foreground(S.Primary) h.Styles.FullDesc = lipgloss.NewStyle().Foreground(S.MutedFg) h.Styles.FullSeparator = lipgloss.NewStyle().Foreground(S.Subtle) h.Styles.Ellipsis = lipgloss.NewStyle().Foreground(S.Subtle) return h } func (s *Styles) Method(method string) lipgloss.Style { base := lipgloss.NewStyle().Bold(true).Width(7) switch method { case "GET": return base.Foreground(s.Success) case "POST": return base.Foreground(s.Warning) case "PUT", "PATCH": return base.Foreground(s.Primary) case "DELETE": return base.Foreground(s.Error) default: return base.Foreground(s.Text) } }