@@ -6,9 +6,16 @@ import (
7 "github.com/charmbracelet/bubbles/v2/textarea"
7 "github.com/charmbracelet/bubbles/v2/textarea"
8 tea "github.com/charmbracelet/bubbletea/v2"
8 tea "github.com/charmbracelet/bubbletea/v2"
9+ "github.com/charmbracelet/glamour/v2/ansi"
9 "github.com/charmbracelet/lipgloss/v2"
10 "github.com/charmbracelet/lipgloss/v2"
14+ defaultListIndent = 2
15+ defaultListLevelIndent = 4
12type Theme struct {
19type Theme struct {
13 Name string
20 Name string
14 IsDark bool
21 IsDark bool
@@ -56,6 +63,9 @@ type Styles struct {
56 Error lipgloss.Style
63 Error lipgloss.Style
57 Warning lipgloss.Style
64 Warning lipgloss.Style
58 Info lipgloss.Style
65 Info lipgloss.Style
68+ Markdown ansi.StyleConfig
61 TextArea textarea.Styles
71 TextArea textarea.Styles
@@ -70,7 +80,6 @@ func (t *Theme) S() *Styles {
71func (t *Theme) buildStyles() *Styles {
81func (t *Theme) buildStyles() *Styles {
72 base := lipgloss.NewStyle().
82 base := lipgloss.NewStyle().
73− Background(t.BgBase).
74 Foreground(t.FgBase)
83 Foreground(t.FgBase)
75 return &Styles{
84 return &Styles{
76 Base: base,
85 Base: base,
@@ -122,6 +131,216 @@ func (t *Theme) buildStyles() *Styles {
122 Blink: true,
131 Blink: true,
135+ // TODO: update using the colors and add colors if missing
136+ Markdown: ansi.StyleConfig{
137+ Document: ansi.StyleBlock{
138+ StylePrimitive: ansi.StylePrimitive{
141+ Color: stringPtr("252"),
143+ Margin: uintPtr(defaultMargin),
145+ BlockQuote: ansi.StyleBlock{
146+ StylePrimitive: ansi.StylePrimitive{},
148+ IndentToken: stringPtr("│ "),
150+ List: ansi.StyleList{
151+ LevelIndent: defaultListIndent,
153+ Heading: ansi.StyleBlock{
154+ StylePrimitive: ansi.StylePrimitive{
156+ Color: stringPtr("39"),
157+ Bold: boolPtr(true),
160+ H1: ansi.StyleBlock{
161+ StylePrimitive: ansi.StylePrimitive{
164+ Color: stringPtr("228"),
165+ BackgroundColor: stringPtr("63"),
166+ Bold: boolPtr(true),
169+ H2: ansi.StyleBlock{
170+ StylePrimitive: ansi.StylePrimitive{
174+ H3: ansi.StyleBlock{
175+ StylePrimitive: ansi.StylePrimitive{
179+ H4: ansi.StyleBlock{
180+ StylePrimitive: ansi.StylePrimitive{
184+ H5: ansi.StyleBlock{
185+ StylePrimitive: ansi.StylePrimitive{
189+ H6: ansi.StyleBlock{
190+ StylePrimitive: ansi.StylePrimitive{
192+ Color: stringPtr("35"),
193+ Bold: boolPtr(false),
196+ Strikethrough: ansi.StylePrimitive{
197+ CrossedOut: boolPtr(true),
199+ Emph: ansi.StylePrimitive{
200+ Italic: boolPtr(true),
202+ Strong: ansi.StylePrimitive{
203+ Bold: boolPtr(true),
205+ HorizontalRule: ansi.StylePrimitive{
206+ Color: stringPtr("240"),
207+ Format: "\n--------\n",
209+ Item: ansi.StylePrimitive{
212+ Enumeration: ansi.StylePrimitive{
215+ Task: ansi.StyleTask{
216+ StylePrimitive: ansi.StylePrimitive{},
220+ Link: ansi.StylePrimitive{
221+ Color: stringPtr("30"),
222+ Underline: boolPtr(true),
224+ LinkText: ansi.StylePrimitive{
225+ Color: stringPtr("35"),
226+ Bold: boolPtr(true),
228+ Image: ansi.StylePrimitive{
229+ Color: stringPtr("212"),
230+ Underline: boolPtr(true),
232+ ImageText: ansi.StylePrimitive{
233+ Color: stringPtr("243"),
234+ Format: "Image: {{.text}} →",
236+ Code: ansi.StyleBlock{
237+ StylePrimitive: ansi.StylePrimitive{
240+ Color: stringPtr("203"),
241+ BackgroundColor: stringPtr("236"),
244+ CodeBlock: ansi.StyleCodeBlock{
245+ StyleBlock: ansi.StyleBlock{
246+ StylePrimitive: ansi.StylePrimitive{
247+ Color: stringPtr("244"),
249+ Margin: uintPtr(defaultMargin),
251+ Chroma: &ansi.Chroma{
252+ Text: ansi.StylePrimitive{
253+ Color: stringPtr("#C4C4C4"),
255+ Error: ansi.StylePrimitive{
256+ Color: stringPtr("#F1F1F1"),
257+ BackgroundColor: stringPtr("#F05B5B"),
259+ Comment: ansi.StylePrimitive{
260+ Color: stringPtr("#676767"),
262+ CommentPreproc: ansi.StylePrimitive{
263+ Color: stringPtr("#FF875F"),
265+ Keyword: ansi.StylePrimitive{
266+ Color: stringPtr("#00AAFF"),
268+ KeywordReserved: ansi.StylePrimitive{
269+ Color: stringPtr("#FF5FD2"),
271+ KeywordNamespace: ansi.StylePrimitive{
272+ Color: stringPtr("#FF5F87"),
274+ KeywordType: ansi.StylePrimitive{
275+ Color: stringPtr("#6E6ED8"),
277+ Operator: ansi.StylePrimitive{
278+ Color: stringPtr("#EF8080"),
280+ Punctuation: ansi.StylePrimitive{
281+ Color: stringPtr("#E8E8A8"),
283+ Name: ansi.StylePrimitive{
284+ Color: stringPtr("#C4C4C4"),
286+ NameBuiltin: ansi.StylePrimitive{
287+ Color: stringPtr("#FF8EC7"),
289+ NameTag: ansi.StylePrimitive{
290+ Color: stringPtr("#B083EA"),
292+ NameAttribute: ansi.StylePrimitive{
293+ Color: stringPtr("#7A7AE6"),
295+ NameClass: ansi.StylePrimitive{
296+ Color: stringPtr("#F1F1F1"),
297+ Underline: boolPtr(true),
298+ Bold: boolPtr(true),
300+ NameDecorator: ansi.StylePrimitive{
301+ Color: stringPtr("#FFFF87"),
303+ NameFunction: ansi.StylePrimitive{
304+ Color: stringPtr("#00D787"),
306+ LiteralNumber: ansi.StylePrimitive{
307+ Color: stringPtr("#6EEFC0"),
309+ LiteralString: ansi.StylePrimitive{
310+ Color: stringPtr("#C69669"),
312+ LiteralStringEscape: ansi.StylePrimitive{
313+ Color: stringPtr("#AFFFD7"),
315+ GenericDeleted: ansi.StylePrimitive{
316+ Color: stringPtr("#FD5B5B"),
318+ GenericEmph: ansi.StylePrimitive{
319+ Italic: boolPtr(true),
321+ GenericInserted: ansi.StylePrimitive{
322+ Color: stringPtr("#00D787"),
324+ GenericStrong: ansi.StylePrimitive{
325+ Bold: boolPtr(true),
327+ GenericSubheading: ansi.StylePrimitive{
328+ Color: stringPtr("#777777"),
330+ Background: ansi.StylePrimitive{
331+ BackgroundColor: stringPtr("#373737"),
335+ Table: ansi.StyleTable{
336+ StyleBlock: ansi.StyleBlock{
337+ StylePrimitive: ansi.StylePrimitive{},
340+ DefinitionDescription: ansi.StylePrimitive{