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
10// Styles defines styles for the TUI.
11type Styles struct {
12 ActiveBorderColor lipgloss.Color
13 InactiveBorderColor lipgloss.Color
14
15 App lipgloss.Style
16 Header lipgloss.Style
17
18 Menu lipgloss.Style
19 MenuCursor lipgloss.Style
20 MenuItem lipgloss.Style
21 SelectedMenuItem lipgloss.Style
22
23 RepoTitleBorder lipgloss.Border
24 RepoNoteBorder lipgloss.Border
25 RepoBodyBorder lipgloss.Border
26
27 RepoTitle lipgloss.Style
28 RepoTitleBox lipgloss.Style
29 RepoNote lipgloss.Style
30 RepoNoteBox lipgloss.Style
31 RepoBody lipgloss.Style
32
33 Footer lipgloss.Style
34 HelpKey lipgloss.Style
35 HelpValue lipgloss.Style
36 HelpDivider lipgloss.Style
37
38 Error lipgloss.Style
39 ErrorTitle lipgloss.Style
40 ErrorBody lipgloss.Style
41}
42
43// DefaultStyles returns default styles for the TUI.
44func DefaultStyles() *Styles {
45 s := new(Styles)
46
47 s.ActiveBorderColor = lipgloss.Color("62")
48 s.InactiveBorderColor = lipgloss.Color("236")
49
50 s.App = lipgloss.NewStyle().
51 Margin(1, 2)
52
53 s.Header = lipgloss.NewStyle().
54 Foreground(lipgloss.Color("62")).
55 Align(lipgloss.Right).
56 Bold(true)
57
58 s.Menu = lipgloss.NewStyle().
59 BorderStyle(lipgloss.RoundedBorder()).
60 BorderForeground(s.InactiveBorderColor).
61 Padding(1, 2).
62 MarginRight(1).
63 Width(24)
64
65 s.MenuCursor = lipgloss.NewStyle().
66 Foreground(lipgloss.Color("213")).
67 SetString(">")
68
69 s.MenuItem = lipgloss.NewStyle().
70 PaddingLeft(2)
71
72 s.SelectedMenuItem = lipgloss.NewStyle().
73 Foreground(lipgloss.Color("207")).
74 PaddingLeft(1)
75
76 s.RepoTitleBorder = lipgloss.Border{
77 Top: "─",
78 Bottom: "─",
79 Left: "│",
80 Right: "│",
81 TopLeft: "╭",
82 TopRight: "┬",
83 BottomLeft: "├",
84 BottomRight: "┴",
85 }
86
87 s.RepoNoteBorder = lipgloss.Border{
88 Top: "─",
89 Bottom: "─",
90 Left: "│",
91 Right: "│",
92 TopLeft: "┬",
93 TopRight: "╮",
94 BottomLeft: "┴",
95 BottomRight: "┤",
96 }
97
98 s.RepoBodyBorder = lipgloss.Border{
99 Top: "",
100 Bottom: "─",
101 Left: "│",
102 Right: "│",
103 TopLeft: "",
104 TopRight: "",
105 BottomLeft: "╰",
106 BottomRight: "╯",
107 }
108
109 s.RepoTitle = lipgloss.NewStyle().
110 Padding(0, 2)
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}