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	RepoTitleBox lipgloss.Style
 28	RepoNote     lipgloss.Style
 29	RepoNoteBox  lipgloss.Style
 30	RepoBody     lipgloss.Style
 31
 32	Footer      lipgloss.Style
 33	HelpKey     lipgloss.Style
 34	HelpValue   lipgloss.Style
 35	HelpDivider lipgloss.Style
 36
 37	Error      lipgloss.Style
 38	ErrorTitle lipgloss.Style
 39	ErrorBody  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		Padding(0, 2).
110		Foreground(lipgloss.Color("252"))
111
112	s.RepoTitleBox = lipgloss.NewStyle().
113		BorderStyle(s.RepoTitleBorder).
114		BorderForeground(s.InactiveBorderColor)
115
116	s.RepoNote = lipgloss.NewStyle().
117		Padding(0, 2).
118		Foreground(lipgloss.Color("168"))
119
120	s.RepoNoteBox = lipgloss.NewStyle().
121		BorderStyle(s.RepoNoteBorder).
122		BorderForeground(s.InactiveBorderColor).
123		BorderTop(true).
124		BorderRight(true).
125		BorderBottom(true).
126		BorderLeft(false)
127
128	s.RepoBody = lipgloss.NewStyle().
129		BorderStyle(s.RepoBodyBorder).
130		BorderForeground(s.InactiveBorderColor).
131		PaddingRight(1)
132
133	s.Footer = lipgloss.NewStyle().
134		MarginTop(1)
135
136	s.HelpKey = lipgloss.NewStyle().
137		Foreground(lipgloss.Color("241"))
138
139	s.HelpValue = lipgloss.NewStyle().
140		Foreground(lipgloss.Color("239"))
141
142	s.HelpDivider = lipgloss.NewStyle().
143		Foreground(lipgloss.Color("237")).
144		SetString(" • ")
145
146	s.Error = lipgloss.NewStyle().
147		Padding(1)
148
149	s.ErrorTitle = lipgloss.NewStyle().
150		Foreground(lipgloss.Color("230")).
151		Background(lipgloss.Color("204")).
152		Bold(true).
153		Padding(0, 1)
154
155	s.ErrorBody = lipgloss.NewStyle().
156		Foreground(lipgloss.Color("252")).
157		MarginLeft(2).
158		Width(52) // for now
159
160	return s
161}