style.go

  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		PaddingLeft(2)
 69
 70	s.SelectedMenuItem = lipgloss.NewStyle().
 71		Foreground(lipgloss.Color("207")).
 72		PaddingLeft(1)
 73
 74	s.RepoTitleBorder = lipgloss.Border{
 75		Top:         "─",
 76		Bottom:      "─",
 77		Left:        "│",
 78		Right:       "│",
 79		TopLeft:     "╭",
 80		TopRight:    "┬",
 81		BottomLeft:  "├",
 82		BottomRight: "┴",
 83	}
 84
 85	s.RepoNoteBorder = lipgloss.Border{
 86		Top:         "─",
 87		Bottom:      "─",
 88		Left:        "│",
 89		Right:       "│",
 90		TopLeft:     "┬",
 91		TopRight:    "╮",
 92		BottomLeft:  "┴",
 93		BottomRight: "┤",
 94	}
 95
 96	s.RepoBodyBorder = lipgloss.Border{
 97		Top:         "",
 98		Bottom:      "─",
 99		Left:        "│",
100		Right:       "│",
101		TopLeft:     "",
102		TopRight:    "",
103		BottomLeft:  "╰",
104		BottomRight: "╯",
105	}
106
107	s.RepoTitle = lipgloss.NewStyle().
108		Padding(0, 2)
109
110	s.RepoTitleBox = lipgloss.NewStyle().
111		BorderStyle(s.RepoTitleBorder).
112		BorderForeground(s.InactiveBorderColor)
113
114	s.RepoNote = lipgloss.NewStyle().
115		Padding(0, 2).
116		Foreground(lipgloss.Color("168"))
117
118	s.RepoNoteBox = lipgloss.NewStyle().
119		BorderStyle(s.RepoNoteBorder).
120		BorderForeground(s.InactiveBorderColor).
121		BorderTop(true).
122		BorderRight(true).
123		BorderBottom(true).
124		BorderLeft(false)
125
126	s.RepoBody = lipgloss.NewStyle().
127		BorderStyle(s.RepoBodyBorder).
128		BorderForeground(s.InactiveBorderColor).
129		PaddingRight(1)
130
131	s.Footer = lipgloss.NewStyle().
132		MarginTop(1)
133
134	s.HelpKey = lipgloss.NewStyle().
135		Foreground(lipgloss.Color("241"))
136
137	s.HelpValue = lipgloss.NewStyle().
138		Foreground(lipgloss.Color("239"))
139
140	s.HelpDivider = lipgloss.NewStyle().
141		Foreground(lipgloss.Color("237")).
142		SetString(" • ")
143
144	s.Error = lipgloss.NewStyle().
145		Padding(1)
146
147	s.ErrorTitle = lipgloss.NewStyle().
148		Foreground(lipgloss.Color("230")).
149		Background(lipgloss.Color("204")).
150		Bold(true).
151		Padding(0, 1)
152
153	s.ErrorBody = lipgloss.NewStyle().
154		Foreground(lipgloss.Color("252")).
155		MarginLeft(2).
156		Width(52) // for now
157
158	return s
159}