tron.go

  1package theme
  2
  3import (
  4	"github.com/charmbracelet/lipgloss"
  5)
  6
  7// TronTheme implements the Theme interface with Tron-inspired colors.
  8// It provides both dark and light variants, though Tron is primarily a dark theme.
  9type TronTheme struct {
 10	BaseTheme
 11}
 12
 13// NewTronTheme creates a new instance of the Tron theme.
 14func NewTronTheme() *TronTheme {
 15	// Tron color palette
 16	// Inspired by the Tron movie's neon aesthetic
 17	darkBackground := "#0c141f"
 18	darkCurrentLine := "#1a2633"
 19	darkSelection := "#1a2633"
 20	darkForeground := "#caf0ff"
 21	darkComment := "#4d6b87"
 22	darkCyan := "#00d9ff"
 23	darkBlue := "#007fff"
 24	darkOrange := "#ff9000"
 25	darkPink := "#ff00a0"
 26	darkPurple := "#b73fff"
 27	darkRed := "#ff3333"
 28	darkYellow := "#ffcc00"
 29	darkGreen := "#00ff8f"
 30	darkBorder := "#1a2633"
 31
 32	// Light mode approximation
 33	lightBackground := "#f0f8ff"
 34	lightCurrentLine := "#e0f0ff"
 35	lightSelection := "#d0e8ff"
 36	lightForeground := "#0c141f"
 37	lightComment := "#4d6b87"
 38	lightCyan := "#0097b3"
 39	lightBlue := "#0066cc"
 40	lightOrange := "#cc7300"
 41	lightPink := "#cc0080"
 42	lightPurple := "#9932cc"
 43	lightRed := "#cc2929"
 44	lightYellow := "#cc9900"
 45	lightGreen := "#00cc72"
 46	lightBorder := "#d0e8ff"
 47
 48	theme := &TronTheme{}
 49
 50	// Base colors
 51	theme.PrimaryColor = lipgloss.AdaptiveColor{
 52		Dark:  darkCyan,
 53		Light: lightCyan,
 54	}
 55	theme.SecondaryColor = lipgloss.AdaptiveColor{
 56		Dark:  darkBlue,
 57		Light: lightBlue,
 58	}
 59	theme.AccentColor = lipgloss.AdaptiveColor{
 60		Dark:  darkOrange,
 61		Light: lightOrange,
 62	}
 63
 64	// Status colors
 65	theme.ErrorColor = lipgloss.AdaptiveColor{
 66		Dark:  darkRed,
 67		Light: lightRed,
 68	}
 69	theme.WarningColor = lipgloss.AdaptiveColor{
 70		Dark:  darkOrange,
 71		Light: lightOrange,
 72	}
 73	theme.SuccessColor = lipgloss.AdaptiveColor{
 74		Dark:  darkGreen,
 75		Light: lightGreen,
 76	}
 77	theme.InfoColor = lipgloss.AdaptiveColor{
 78		Dark:  darkCyan,
 79		Light: lightCyan,
 80	}
 81
 82	// Text colors
 83	theme.TextColor = lipgloss.AdaptiveColor{
 84		Dark:  darkForeground,
 85		Light: lightForeground,
 86	}
 87	theme.TextMutedColor = lipgloss.AdaptiveColor{
 88		Dark:  darkComment,
 89		Light: lightComment,
 90	}
 91	theme.TextEmphasizedColor = lipgloss.AdaptiveColor{
 92		Dark:  darkYellow,
 93		Light: lightYellow,
 94	}
 95
 96	// Background colors
 97	theme.BackgroundColor = lipgloss.AdaptiveColor{
 98		Dark:  darkBackground,
 99		Light: lightBackground,
100	}
101	theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{
102		Dark:  darkCurrentLine,
103		Light: lightCurrentLine,
104	}
105	theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{
106		Dark:  "#070d14", // Slightly darker than background
107		Light: "#ffffff", // Slightly lighter than background
108	}
109
110	// Border colors
111	theme.BorderNormalColor = lipgloss.AdaptiveColor{
112		Dark:  darkBorder,
113		Light: lightBorder,
114	}
115	theme.BorderFocusedColor = lipgloss.AdaptiveColor{
116		Dark:  darkCyan,
117		Light: lightCyan,
118	}
119	theme.BorderDimColor = lipgloss.AdaptiveColor{
120		Dark:  darkSelection,
121		Light: lightSelection,
122	}
123
124	// Diff view colors
125	theme.DiffAddedColor = lipgloss.AdaptiveColor{
126		Dark:  darkGreen,
127		Light: lightGreen,
128	}
129	theme.DiffRemovedColor = lipgloss.AdaptiveColor{
130		Dark:  darkRed,
131		Light: lightRed,
132	}
133	theme.DiffContextColor = lipgloss.AdaptiveColor{
134		Dark:  darkComment,
135		Light: lightComment,
136	}
137	theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{
138		Dark:  darkBlue,
139		Light: lightBlue,
140	}
141	theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{
142		Dark:  "#00ff8f",
143		Light: "#a5d6a7",
144	}
145	theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{
146		Dark:  "#ff3333",
147		Light: "#ef9a9a",
148	}
149	theme.DiffAddedBgColor = lipgloss.AdaptiveColor{
150		Dark:  "#0a2a1a",
151		Light: "#e8f5e9",
152	}
153	theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{
154		Dark:  "#2a0a0a",
155		Light: "#ffebee",
156	}
157	theme.DiffContextBgColor = lipgloss.AdaptiveColor{
158		Dark:  darkBackground,
159		Light: lightBackground,
160	}
161	theme.DiffLineNumberColor = lipgloss.AdaptiveColor{
162		Dark:  darkComment,
163		Light: lightComment,
164	}
165	theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{
166		Dark:  "#082015",
167		Light: "#c8e6c9",
168	}
169	theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{
170		Dark:  "#200808",
171		Light: "#ffcdd2",
172	}
173
174	// Markdown colors
175	theme.MarkdownTextColor = lipgloss.AdaptiveColor{
176		Dark:  darkForeground,
177		Light: lightForeground,
178	}
179	theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{
180		Dark:  darkCyan,
181		Light: lightCyan,
182	}
183	theme.MarkdownLinkColor = lipgloss.AdaptiveColor{
184		Dark:  darkBlue,
185		Light: lightBlue,
186	}
187	theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{
188		Dark:  darkCyan,
189		Light: lightCyan,
190	}
191	theme.MarkdownCodeColor = lipgloss.AdaptiveColor{
192		Dark:  darkGreen,
193		Light: lightGreen,
194	}
195	theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{
196		Dark:  darkYellow,
197		Light: lightYellow,
198	}
199	theme.MarkdownEmphColor = lipgloss.AdaptiveColor{
200		Dark:  darkYellow,
201		Light: lightYellow,
202	}
203	theme.MarkdownStrongColor = lipgloss.AdaptiveColor{
204		Dark:  darkOrange,
205		Light: lightOrange,
206	}
207	theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{
208		Dark:  darkComment,
209		Light: lightComment,
210	}
211	theme.MarkdownListItemColor = lipgloss.AdaptiveColor{
212		Dark:  darkBlue,
213		Light: lightBlue,
214	}
215	theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{
216		Dark:  darkCyan,
217		Light: lightCyan,
218	}
219	theme.MarkdownImageColor = lipgloss.AdaptiveColor{
220		Dark:  darkBlue,
221		Light: lightBlue,
222	}
223	theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{
224		Dark:  darkCyan,
225		Light: lightCyan,
226	}
227	theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{
228		Dark:  darkForeground,
229		Light: lightForeground,
230	}
231
232	// Syntax highlighting colors
233	theme.SyntaxCommentColor = lipgloss.AdaptiveColor{
234		Dark:  darkComment,
235		Light: lightComment,
236	}
237	theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{
238		Dark:  darkCyan,
239		Light: lightCyan,
240	}
241	theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{
242		Dark:  darkGreen,
243		Light: lightGreen,
244	}
245	theme.SyntaxVariableColor = lipgloss.AdaptiveColor{
246		Dark:  darkOrange,
247		Light: lightOrange,
248	}
249	theme.SyntaxStringColor = lipgloss.AdaptiveColor{
250		Dark:  darkYellow,
251		Light: lightYellow,
252	}
253	theme.SyntaxNumberColor = lipgloss.AdaptiveColor{
254		Dark:  darkBlue,
255		Light: lightBlue,
256	}
257	theme.SyntaxTypeColor = lipgloss.AdaptiveColor{
258		Dark:  darkPurple,
259		Light: lightPurple,
260	}
261	theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{
262		Dark:  darkPink,
263		Light: lightPink,
264	}
265	theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{
266		Dark:  darkForeground,
267		Light: lightForeground,
268	}
269
270	return theme
271}
272
273func init() {
274	// Register the Tron theme with the theme manager
275	RegisterTheme("tron", NewTronTheme())
276}