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}