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	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
 40func DefaultStyles() *Styles {
 41	s := new(Styles)
 42
 43	s.ActiveBorderColor = lipgloss.Color("62")
 44	s.InactiveBorderColor = lipgloss.Color("236")
 45
 46	s.App = lipgloss.NewStyle().
 47		Margin(1, 2)
 48
 49	s.Header = lipgloss.NewStyle().
 50		Foreground(lipgloss.Color("62")).
 51		Align(lipgloss.Right).
 52		Bold(true)
 53
 54	s.Menu = lipgloss.NewStyle().
 55		BorderStyle(lipgloss.RoundedBorder()).
 56		BorderForeground(s.InactiveBorderColor).
 57		Padding(1, 2).
 58		MarginRight(1).
 59		Width(24)
 60
 61	s.MenuCursor = lipgloss.NewStyle().
 62		Foreground(lipgloss.Color("213")).
 63		SetString(">")
 64
 65	s.MenuItem = lipgloss.NewStyle().
 66		Foreground(lipgloss.Color("252")).
 67		PaddingLeft(2)
 68
 69	s.SelectedMenuItem = lipgloss.NewStyle().
 70		Foreground(lipgloss.Color("207")).
 71		PaddingLeft(1)
 72
 73	s.RepoTitleBorder = lipgloss.Border{
 74		Top:         "─",
 75		Bottom:      "─",
 76		Left:        "│",
 77		Right:       "│",
 78		TopLeft:     "╭",
 79		TopRight:    "┬",
 80		BottomLeft:  "├",
 81		BottomRight: "┴",
 82	}
 83
 84	s.RepoNoteBorder = lipgloss.Border{
 85		Top:         "─",
 86		Bottom:      "─",
 87		Left:        "",
 88		Right:       "│",
 89		TopLeft:     "",
 90		TopRight:    "╮",
 91		BottomLeft:  "",
 92		BottomRight: "┤",
 93	}
 94
 95	s.RepoBodyBorder = lipgloss.Border{
 96		Top:         "",
 97		Bottom:      "─",
 98		Left:        "│",
 99		Right:       "│",
100		TopLeft:     "",
101		TopRight:    "",
102		BottomLeft:  "╰",
103		BottomRight: "╯",
104	}
105
106	s.RepoTitle = lipgloss.NewStyle().
107		Border(s.RepoTitleBorder).
108		BorderForeground(s.InactiveBorderColor).
109		Padding(0, 2).
110		Foreground(lipgloss.Color("252"))
111
112	s.RepoNote = lipgloss.NewStyle().
113		Border(s.RepoNoteBorder, true, true, true, false).
114		BorderForeground(s.InactiveBorderColor).
115		Foreground(lipgloss.Color("168")).
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	return s
151}