1package style
  2
  3import (
  4	"github.com/charmbracelet/lipgloss"
  5)
  6
  7// XXX: For now, this is in its own package so that it can be shared between
  8// different packages without incurring an illegal import cycle.
  9
 10type Styles struct {
 11	ActiveBorderColor   lipgloss.Color
 12	InactiveBorderColor lipgloss.Color
 13
 14	App    lipgloss.Style
 15	Header lipgloss.Style
 16
 17	Menu             lipgloss.Style
 18	MenuCursor       lipgloss.Style
 19	MenuItem         lipgloss.Style
 20	SelectedMenuItem lipgloss.Style
 21
 22	RepoTitleBorder lipgloss.Border
 23	RepoNoteBorder  lipgloss.Border
 24	RepoBodyBorder  lipgloss.Border
 25
 26	RepoTitle lipgloss.Style
 27	RepoNote  lipgloss.Style
 28	RepoBody  lipgloss.Style
 29
 30	Footer      lipgloss.Style
 31	HelpKey     lipgloss.Style
 32	HelpValue   lipgloss.Style
 33	HelpDivider lipgloss.Style
 34
 35	Error      lipgloss.Style
 36	ErrorTitle lipgloss.Style
 37	ErrorBody  lipgloss.Style
 38
 39	Command lipgloss.Style
 40}
 41
 42func DefaultStyles() *Styles {
 43	s := new(Styles)
 44
 45	s.ActiveBorderColor = lipgloss.Color("62")
 46	s.InactiveBorderColor = lipgloss.Color("236")
 47
 48	s.App = lipgloss.NewStyle().
 49		Margin(1, 2)
 50
 51	s.Header = lipgloss.NewStyle().
 52		Foreground(lipgloss.Color("62")).
 53		Align(lipgloss.Right).
 54		Bold(true)
 55
 56	s.Menu = lipgloss.NewStyle().
 57		BorderStyle(lipgloss.RoundedBorder()).
 58		BorderForeground(s.InactiveBorderColor).
 59		Padding(1, 2).
 60		MarginRight(1).
 61		Width(24)
 62
 63	s.MenuCursor = lipgloss.NewStyle().
 64		Foreground(lipgloss.Color("213")).
 65		SetString(">")
 66
 67	s.MenuItem = lipgloss.NewStyle().
 68		Foreground(lipgloss.Color("252")).
 69		PaddingLeft(2)
 70
 71	s.SelectedMenuItem = lipgloss.NewStyle().
 72		Foreground(lipgloss.Color("207")).
 73		PaddingLeft(1)
 74
 75	s.RepoTitleBorder = lipgloss.Border{
 76		Top:         "─",
 77		Bottom:      "─",
 78		Left:        "│",
 79		Right:       "│",
 80		TopLeft:     "╭",
 81		TopRight:    "┬",
 82		BottomLeft:  "├",
 83		BottomRight: "┴",
 84	}
 85
 86	s.RepoNoteBorder = lipgloss.Border{
 87		Top:         "─",
 88		Bottom:      "─",
 89		Left:        "",
 90		Right:       "│",
 91		TopLeft:     "",
 92		TopRight:    "╮",
 93		BottomLeft:  "",
 94		BottomRight: "┤",
 95	}
 96
 97	s.RepoBodyBorder = lipgloss.Border{
 98		Top:         "",
 99		Bottom:      "─",
100		Left:        "│",
101		Right:       "│",
102		TopLeft:     "",
103		TopRight:    "",
104		BottomLeft:  "╰",
105		BottomRight: "╯",
106	}
107
108	s.RepoTitle = lipgloss.NewStyle().
109		Border(s.RepoTitleBorder).
110		BorderForeground(s.InactiveBorderColor).
111		Padding(0, 2)
112
113	s.RepoNote = lipgloss.NewStyle().
114		Border(s.RepoNoteBorder, true, true, true, false).
115		BorderForeground(s.InactiveBorderColor).
116		Padding(0, 2)
117
118	s.RepoBody = lipgloss.NewStyle().
119		BorderStyle(s.RepoBodyBorder).
120		BorderForeground(s.InactiveBorderColor).
121		PaddingRight(1)
122
123	s.Footer = lipgloss.NewStyle().
124		MarginTop(1)
125
126	s.HelpKey = lipgloss.NewStyle().
127		Foreground(lipgloss.Color("241"))
128
129	s.HelpValue = lipgloss.NewStyle().
130		Foreground(lipgloss.Color("239"))
131
132	s.HelpDivider = lipgloss.NewStyle().
133		Foreground(lipgloss.Color("237")).
134		SetString(" • ")
135
136	s.Error = lipgloss.NewStyle().
137		Padding(1)
138
139	s.ErrorTitle = lipgloss.NewStyle().
140		Foreground(lipgloss.Color("230")).
141		Background(lipgloss.Color("204")).
142		Bold(true).
143		Padding(0, 1)
144
145	s.ErrorBody = lipgloss.NewStyle().
146		Foreground(lipgloss.Color("252")).
147		MarginLeft(2).
148		Width(52) // for now
149
150	s.Command = lipgloss.NewStyle().
151		Background(lipgloss.Color("237")).
152		Foreground(lipgloss.Color("204"))
153
154	return s
155}