tron.go

  1package theme
  2
  3import (
  4	"github.com/charmbracelet/lipgloss/v2"
  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	theme := &TronTheme{}
 33
 34	// Base colors
 35	theme.PrimaryColor = lipgloss.Color(darkCyan)
 36	theme.SecondaryColor = lipgloss.Color(darkBlue)
 37	theme.AccentColor = lipgloss.Color(darkOrange)
 38
 39	// Status colors
 40	theme.ErrorColor = lipgloss.Color(darkRed)
 41	theme.WarningColor = lipgloss.Color(darkOrange)
 42	theme.SuccessColor = lipgloss.Color(darkGreen)
 43	theme.InfoColor = lipgloss.Color(darkCyan)
 44
 45	// Text colors
 46	theme.TextColor = lipgloss.Color(darkForeground)
 47	theme.TextMutedColor = lipgloss.Color(darkComment)
 48	theme.TextEmphasizedColor = lipgloss.Color(darkYellow)
 49
 50	// Background colors
 51	theme.BackgroundColor = lipgloss.Color(darkBackground)
 52	theme.BackgroundSecondaryColor = lipgloss.Color(darkCurrentLine)
 53	theme.BackgroundDarkerColor = lipgloss.Color("#070d14") // Slightly darker than background
 54
 55	// Border colors
 56	theme.BorderNormalColor = lipgloss.Color(darkBorder)
 57	theme.BorderFocusedColor = lipgloss.Color(darkCyan)
 58	theme.BorderDimColor = lipgloss.Color(darkSelection)
 59
 60	// Diff view colors
 61	theme.DiffAddedColor = lipgloss.Color(darkGreen)
 62	theme.DiffRemovedColor = lipgloss.Color(darkRed)
 63	theme.DiffContextColor = lipgloss.Color(darkComment)
 64	theme.DiffHunkHeaderColor = lipgloss.Color(darkBlue)
 65	theme.DiffHighlightAddedColor = lipgloss.Color("#00ff8f")
 66	theme.DiffHighlightRemovedColor = lipgloss.Color("#ff3333")
 67	theme.DiffAddedBgColor = lipgloss.Color("#0a2a1a")
 68	theme.DiffRemovedBgColor = lipgloss.Color("#2a0a0a")
 69	theme.DiffContextBgColor = lipgloss.Color(darkBackground)
 70	theme.DiffLineNumberColor = lipgloss.Color(darkComment)
 71	theme.DiffAddedLineNumberBgColor = lipgloss.Color("#082015")
 72	theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#200808")
 73
 74	// Markdown colors
 75	theme.MarkdownTextColor = lipgloss.Color(darkForeground)
 76	theme.MarkdownHeadingColor = lipgloss.Color(darkCyan)
 77	theme.MarkdownLinkColor = lipgloss.Color(darkBlue)
 78	theme.MarkdownLinkTextColor = lipgloss.Color(darkCyan)
 79	theme.MarkdownCodeColor = lipgloss.Color(darkGreen)
 80	theme.MarkdownBlockQuoteColor = lipgloss.Color(darkYellow)
 81	theme.MarkdownEmphColor = lipgloss.Color(darkYellow)
 82	theme.MarkdownStrongColor = lipgloss.Color(darkOrange)
 83	theme.MarkdownHorizontalRuleColor = lipgloss.Color(darkComment)
 84	theme.MarkdownListItemColor = lipgloss.Color(darkBlue)
 85	theme.MarkdownListEnumerationColor = lipgloss.Color(darkCyan)
 86	theme.MarkdownImageColor = lipgloss.Color(darkBlue)
 87	theme.MarkdownImageTextColor = lipgloss.Color(darkCyan)
 88	theme.MarkdownCodeBlockColor = lipgloss.Color(darkForeground)
 89
 90	// Syntax highlighting colors
 91	theme.SyntaxCommentColor = lipgloss.Color(darkComment)
 92	theme.SyntaxKeywordColor = lipgloss.Color(darkCyan)
 93	theme.SyntaxFunctionColor = lipgloss.Color(darkGreen)
 94	theme.SyntaxVariableColor = lipgloss.Color(darkOrange)
 95	theme.SyntaxStringColor = lipgloss.Color(darkYellow)
 96	theme.SyntaxNumberColor = lipgloss.Color(darkBlue)
 97	theme.SyntaxTypeColor = lipgloss.Color(darkPurple)
 98	theme.SyntaxOperatorColor = lipgloss.Color(darkPink)
 99	theme.SyntaxPunctuationColor = lipgloss.Color(darkForeground)
100
101	return theme
102}
103
104// NewTronLightTheme creates a new instance of the Tron Light theme.
105func NewTronLightTheme() *TronTheme {
106	// Light mode approximation
107	lightBackground := "#f0f8ff"
108	lightCurrentLine := "#e0f0ff"
109	lightSelection := "#d0e8ff"
110	lightForeground := "#0c141f"
111	lightComment := "#4d6b87"
112	lightCyan := "#0097b3"
113	lightBlue := "#0066cc"
114	lightOrange := "#cc7300"
115	lightPink := "#cc0080"
116	lightPurple := "#9932cc"
117	lightRed := "#cc2929"
118	lightYellow := "#cc9900"
119	lightGreen := "#00cc72"
120	lightBorder := "#d0e8ff"
121
122	theme := &TronTheme{}
123
124	// Base colors
125	theme.PrimaryColor = lipgloss.Color(lightCyan)
126	theme.SecondaryColor = lipgloss.Color(lightBlue)
127	theme.AccentColor = lipgloss.Color(lightOrange)
128
129	// Status colors
130	theme.ErrorColor = lipgloss.Color(lightRed)
131	theme.WarningColor = lipgloss.Color(lightOrange)
132	theme.SuccessColor = lipgloss.Color(lightGreen)
133	theme.InfoColor = lipgloss.Color(lightCyan)
134
135	// Text colors
136	theme.TextColor = lipgloss.Color(lightForeground)
137	theme.TextMutedColor = lipgloss.Color(lightComment)
138	theme.TextEmphasizedColor = lipgloss.Color(lightYellow)
139
140	// Background colors
141	theme.BackgroundColor = lipgloss.Color(lightBackground)
142	theme.BackgroundSecondaryColor = lipgloss.Color(lightCurrentLine)
143	theme.BackgroundDarkerColor = lipgloss.Color("#ffffff") // Slightly lighter than background
144
145	// Border colors
146	theme.BorderNormalColor = lipgloss.Color(lightBorder)
147	theme.BorderFocusedColor = lipgloss.Color(lightCyan)
148	theme.BorderDimColor = lipgloss.Color(lightSelection)
149
150	// Diff view colors
151	theme.DiffAddedColor = lipgloss.Color(lightGreen)
152	theme.DiffRemovedColor = lipgloss.Color(lightRed)
153	theme.DiffContextColor = lipgloss.Color(lightComment)
154	theme.DiffHunkHeaderColor = lipgloss.Color(lightBlue)
155	theme.DiffHighlightAddedColor = lipgloss.Color("#a5d6a7")
156	theme.DiffHighlightRemovedColor = lipgloss.Color("#ef9a9a")
157	theme.DiffAddedBgColor = lipgloss.Color("#e8f5e9")
158	theme.DiffRemovedBgColor = lipgloss.Color("#ffebee")
159	theme.DiffContextBgColor = lipgloss.Color(lightBackground)
160	theme.DiffLineNumberColor = lipgloss.Color(lightComment)
161	theme.DiffAddedLineNumberBgColor = lipgloss.Color("#c8e6c9")
162	theme.DiffRemovedLineNumberBgColor = lipgloss.Color("#ffcdd2")
163
164	// Markdown colors
165	theme.MarkdownTextColor = lipgloss.Color(lightForeground)
166	theme.MarkdownHeadingColor = lipgloss.Color(lightCyan)
167	theme.MarkdownLinkColor = lipgloss.Color(lightBlue)
168	theme.MarkdownLinkTextColor = lipgloss.Color(lightCyan)
169	theme.MarkdownCodeColor = lipgloss.Color(lightGreen)
170	theme.MarkdownBlockQuoteColor = lipgloss.Color(lightYellow)
171	theme.MarkdownEmphColor = lipgloss.Color(lightYellow)
172	theme.MarkdownStrongColor = lipgloss.Color(lightOrange)
173	theme.MarkdownHorizontalRuleColor = lipgloss.Color(lightComment)
174	theme.MarkdownListItemColor = lipgloss.Color(lightBlue)
175	theme.MarkdownListEnumerationColor = lipgloss.Color(lightCyan)
176	theme.MarkdownImageColor = lipgloss.Color(lightBlue)
177	theme.MarkdownImageTextColor = lipgloss.Color(lightCyan)
178	theme.MarkdownCodeBlockColor = lipgloss.Color(lightForeground)
179
180	// Syntax highlighting colors
181	theme.SyntaxCommentColor = lipgloss.Color(lightComment)
182	theme.SyntaxKeywordColor = lipgloss.Color(lightCyan)
183	theme.SyntaxFunctionColor = lipgloss.Color(lightGreen)
184	theme.SyntaxVariableColor = lipgloss.Color(lightOrange)
185	theme.SyntaxStringColor = lipgloss.Color(lightYellow)
186	theme.SyntaxNumberColor = lipgloss.Color(lightBlue)
187	theme.SyntaxTypeColor = lipgloss.Color(lightPurple)
188	theme.SyntaxOperatorColor = lipgloss.Color(lightPink)
189	theme.SyntaxPunctuationColor = lipgloss.Color(lightForeground)
190
191	return theme
192}
193
194func init() {
195	// Register the Tron themes with the theme manager
196	RegisterTheme("tron", NewTronTheme())
197	RegisterTheme("tron-light", NewTronLightTheme())
198}