1package diffview
  2
  3import (
  4	"github.com/charmbracelet/lipgloss/v2"
  5	"github.com/charmbracelet/x/exp/charmtone"
  6)
  7
  8// LineStyle defines the styles for a given line type in the diff view.
  9type LineStyle struct {
 10	LineNumber lipgloss.Style
 11	Symbol     lipgloss.Style
 12	Code       lipgloss.Style
 13}
 14
 15// Style defines the overall style for the diff view, including styles for
 16// different line types such as divider, missing, equal, insert, and delete
 17// lines.
 18type Style struct {
 19	DividerLine LineStyle
 20	MissingLine LineStyle
 21	EqualLine   LineStyle
 22	InsertLine  LineStyle
 23	DeleteLine  LineStyle
 24}
 25
 26// DefaultLightStyle provides a default light theme style for the diff view.
 27func DefaultLightStyle() Style {
 28	return Style{
 29		DividerLine: LineStyle{
 30			LineNumber: lipgloss.NewStyle().
 31				Foreground(charmtone.Iron).
 32				Background(charmtone.Thunder),
 33			Code: lipgloss.NewStyle().
 34				Foreground(charmtone.Oyster).
 35				Background(charmtone.Anchovy),
 36		},
 37		MissingLine: LineStyle{
 38			LineNumber: lipgloss.NewStyle().
 39				Background(charmtone.Ash),
 40			Code: lipgloss.NewStyle().
 41				Background(charmtone.Ash),
 42		},
 43		EqualLine: LineStyle{
 44			LineNumber: lipgloss.NewStyle().
 45				Foreground(charmtone.Charcoal).
 46				Background(charmtone.Ash),
 47			Code: lipgloss.NewStyle().
 48				Foreground(charmtone.Pepper).
 49				Background(charmtone.Salt),
 50		},
 51		InsertLine: LineStyle{
 52			LineNumber: lipgloss.NewStyle().
 53				Foreground(charmtone.Turtle).
 54				Background(lipgloss.Color("#c8e6c9")),
 55			Symbol: lipgloss.NewStyle().
 56				Foreground(charmtone.Turtle).
 57				Background(lipgloss.Color("#e8f5e9")),
 58			Code: lipgloss.NewStyle().
 59				Foreground(charmtone.Pepper).
 60				Background(lipgloss.Color("#e8f5e9")),
 61		},
 62		DeleteLine: LineStyle{
 63			LineNumber: lipgloss.NewStyle().
 64				Foreground(charmtone.Cherry).
 65				Background(lipgloss.Color("#ffcdd2")),
 66			Symbol: lipgloss.NewStyle().
 67				Foreground(charmtone.Cherry).
 68				Background(lipgloss.Color("#ffebee")),
 69			Code: lipgloss.NewStyle().
 70				Foreground(charmtone.Pepper).
 71				Background(lipgloss.Color("#ffebee")),
 72		},
 73	}
 74}
 75
 76// DefaultDarkStyle provides a default dark theme style for the diff view.
 77func DefaultDarkStyle() Style {
 78	return Style{
 79		DividerLine: LineStyle{
 80			LineNumber: lipgloss.NewStyle().
 81				Foreground(charmtone.Smoke).
 82				Background(charmtone.Sapphire),
 83			Code: lipgloss.NewStyle().
 84				Foreground(charmtone.Smoke).
 85				Background(charmtone.Ox),
 86		},
 87		MissingLine: LineStyle{
 88			LineNumber: lipgloss.NewStyle().
 89				Background(charmtone.Charcoal),
 90			Code: lipgloss.NewStyle().
 91				Background(charmtone.Charcoal),
 92		},
 93		EqualLine: LineStyle{
 94			LineNumber: lipgloss.NewStyle().
 95				Foreground(charmtone.Ash).
 96				Background(charmtone.Charcoal),
 97			Code: lipgloss.NewStyle().
 98				Foreground(charmtone.Salt).
 99				Background(charmtone.Pepper),
100		},
101		InsertLine: LineStyle{
102			LineNumber: lipgloss.NewStyle().
103				Foreground(charmtone.Turtle).
104				Background(lipgloss.Color("#293229")),
105			Symbol: lipgloss.NewStyle().
106				Foreground(charmtone.Turtle).
107				Background(lipgloss.Color("#303a30")),
108			Code: lipgloss.NewStyle().
109				Foreground(charmtone.Salt).
110				Background(lipgloss.Color("#303a30")),
111		},
112		DeleteLine: LineStyle{
113			LineNumber: lipgloss.NewStyle().
114				Foreground(charmtone.Cherry).
115				Background(lipgloss.Color("#332929")),
116			Symbol: lipgloss.NewStyle().
117				Foreground(charmtone.Cherry).
118				Background(lipgloss.Color("#3a3030")),
119			Code: lipgloss.NewStyle().
120				Foreground(charmtone.Salt).
121				Background(lipgloss.Color("#3a3030")),
122		},
123	}
124}