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}