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}