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}