feat!: use pure lipgloss and drop adaptive colors

This commit is contained in:
Ayman Bagabas
2024-07-22 15:24:24 -04:00
parent e6e18e5012
commit f677949ded
8 changed files with 132 additions and 78 deletions
+11 -17
View File
@@ -113,24 +113,18 @@ type Styles struct {
// DefaultStyles defines the default styling for the file picker.
func DefaultStyles() Styles {
return DefaultStylesWithRenderer(lipgloss.DefaultRenderer())
}
// DefaultStylesWithRenderer defines the default styling for the file picker,
// with a given Lip Gloss renderer.
func DefaultStylesWithRenderer(r *lipgloss.Renderer) Styles {
return Styles{
DisabledCursor: r.NewStyle().Foreground(lipgloss.Color("247")),
Cursor: r.NewStyle().Foreground(lipgloss.Color("212")),
Symlink: r.NewStyle().Foreground(lipgloss.Color("36")),
Directory: r.NewStyle().Foreground(lipgloss.Color("99")),
File: r.NewStyle(),
DisabledFile: r.NewStyle().Foreground(lipgloss.Color("243")),
DisabledSelected: r.NewStyle().Foreground(lipgloss.Color("247")),
Permission: r.NewStyle().Foreground(lipgloss.Color("244")),
Selected: r.NewStyle().Foreground(lipgloss.Color("212")).Bold(true),
FileSize: r.NewStyle().Foreground(lipgloss.Color("240")).Width(fileSizeWidth).Align(lipgloss.Right),
EmptyDirectory: r.NewStyle().Foreground(lipgloss.Color("240")).PaddingLeft(paddingLeft).SetString("Bummer. No Files Found."),
DisabledCursor: lipgloss.NewStyle().Foreground(lipgloss.Color("247")),
Cursor: lipgloss.NewStyle().Foreground(lipgloss.Color("212")),
Symlink: lipgloss.NewStyle().Foreground(lipgloss.Color("36")),
Directory: lipgloss.NewStyle().Foreground(lipgloss.Color("99")),
File: lipgloss.NewStyle(),
DisabledFile: lipgloss.NewStyle().Foreground(lipgloss.Color("243")),
DisabledSelected: lipgloss.NewStyle().Foreground(lipgloss.Color("247")),
Permission: lipgloss.NewStyle().Foreground(lipgloss.Color("244")),
Selected: lipgloss.NewStyle().Foreground(lipgloss.Color("212")).Bold(true),
FileSize: lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Width(fileSizeWidth).Align(lipgloss.Right),
EmptyDirectory: lipgloss.NewStyle().Foreground(lipgloss.Color("240")).PaddingLeft(paddingLeft).SetString("Bummer. No Files Found."),
}
}
+1 -1
View File
@@ -7,7 +7,7 @@ require (
github.com/atotto/clipboard v0.1.4
github.com/charmbracelet/bubbletea v0.26.7-0.20240722185632-e15f5e8453c6
github.com/charmbracelet/harmonica v0.2.0
github.com/charmbracelet/lipgloss v0.12.1
github.com/charmbracelet/lipgloss v0.12.2-0.20240722162534-2390dea254e8
github.com/charmbracelet/x/ansi v0.1.4
github.com/dustin/go-humanize v1.0.1
github.com/lucasb-eyer/go-colorful v1.2.0
+2
View File
@@ -20,6 +20,8 @@ github.com/charmbracelet/lipgloss v0.11.0 h1:UoAcbQ6Qml8hDwSWs0Y1cB5TEQuZkDPH/Zq
github.com/charmbracelet/lipgloss v0.11.0/go.mod h1:1UdRTH9gYgpcdNN5oBtjbu/IzNKtzVtb7sqN1t9LNn8=
github.com/charmbracelet/lipgloss v0.12.1 h1:/gmzszl+pedQpjCOH+wFkZr/N90Snz40J/NR7A0zQcs=
github.com/charmbracelet/lipgloss v0.12.1/go.mod h1:V2CiwIuhx9S1S1ZlADfOj9HmxeMAORuz5izHb0zGbB8=
github.com/charmbracelet/lipgloss v0.12.2-0.20240722162534-2390dea254e8 h1:7SMpm8y17K515kM1Q/tiOrSm1jb3hJh94W+LXHWKv+U=
github.com/charmbracelet/lipgloss v0.12.2-0.20240722162534-2390dea254e8/go.mod h1:LCQCsVTQm+lcQLFSiHwSvQUqRXtry1v/2KCfKxdsCeY=
github.com/charmbracelet/x/ansi v0.1.2 h1:6+LR39uG8DE6zAmbu023YlqjJHkYXDF1z36ZwzO4xZY=
github.com/charmbracelet/x/ansi v0.1.2/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831KfiLM=
+27 -24
View File
@@ -41,6 +41,32 @@ type Styles struct {
FullSeparator lipgloss.Style
}
// DefaultStyles returns a set of default styles for the help bubble.
func DefaultStyles(isDark bool) Styles {
keyColor := "#909090"
descColor := "#B2B2B2"
sepColor := "#DDDADA"
if isDark {
keyColor = "#626262"
descColor = "#4A4A4A"
sepColor = "#3C3C3C"
}
keyStyle := lipgloss.NewStyle().Foreground(lipgloss.Color(keyColor))
descStyle := lipgloss.NewStyle().Foreground(lipgloss.Color(descColor))
sepStyle := lipgloss.NewStyle().Foreground(lipgloss.Color(sepColor))
return Styles{
ShortKey: keyStyle,
ShortDesc: descStyle,
ShortSeparator: sepStyle,
Ellipsis: sepStyle,
FullKey: keyStyle,
FullDesc: descStyle,
FullSeparator: sepStyle,
}
}
// Model contains the state of the help view.
type Model struct {
Width int
@@ -58,34 +84,11 @@ type Model struct {
// New creates a new help view with some useful defaults.
func New() Model {
keyStyle := lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{
Light: "#909090",
Dark: "#626262",
})
descStyle := lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{
Light: "#B2B2B2",
Dark: "#4A4A4A",
})
sepStyle := lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{
Light: "#DDDADA",
Dark: "#3C3C3C",
})
return Model{
ShortSeparator: " • ",
FullSeparator: " ",
Ellipsis: "…",
Styles: Styles{
ShortKey: keyStyle,
ShortDesc: descStyle,
ShortSeparator: sepStyle,
Ellipsis: sepStyle,
FullKey: keyStyle,
FullDesc: descStyle,
FullSeparator: sepStyle,
},
Styles: DefaultStyles(true),
}
}
+25 -9
View File
@@ -32,29 +32,45 @@ type DefaultItemStyles struct {
// NewDefaultItemStyles returns style definitions for a default item. See
// DefaultItemView for when these come into play.
func NewDefaultItemStyles() (s DefaultItemStyles) {
func NewDefaultItemStyles(isDark bool) (s DefaultItemStyles) {
normalTitleColor := "#1a1a1a"
normalDescColor := "#A49FA5"
selectedTitleBorderFgColor := "#F793FF"
selectedTitleFgColor := "#EE6FF8"
selectedDescColor := "#F793FF"
dimmedTitleColor := "#A49FA5"
dimmedDescColor := "#C2B8C2"
if isDark {
normalTitleColor = "#dddddd"
normalDescColor = "#777777"
selectedTitleBorderFgColor = "#AD58B4"
selectedTitleFgColor = "#EE6FF8"
selectedDescColor = "#AD58B4"
dimmedTitleColor = "#777777"
dimmedDescColor = "#4D4D4D"
}
s.NormalTitle = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#1a1a1a", Dark: "#dddddd"}).
Foreground(lipgloss.Color(normalTitleColor)).
Padding(0, 0, 0, 2)
s.NormalDesc = s.NormalTitle.
Foreground(lipgloss.AdaptiveColor{Light: "#A49FA5", Dark: "#777777"})
Foreground(lipgloss.Color(normalDescColor))
s.SelectedTitle = lipgloss.NewStyle().
Border(lipgloss.NormalBorder(), false, false, false, true).
BorderForeground(lipgloss.AdaptiveColor{Light: "#F793FF", Dark: "#AD58B4"}).
Foreground(lipgloss.AdaptiveColor{Light: "#EE6FF8", Dark: "#EE6FF8"}).
BorderForeground(lipgloss.Color(selectedTitleBorderFgColor)).
Foreground(lipgloss.Color(selectedTitleFgColor)).
Padding(0, 0, 0, 1)
s.SelectedDesc = s.SelectedTitle.
Foreground(lipgloss.AdaptiveColor{Light: "#F793FF", Dark: "#AD58B4"})
Foreground(lipgloss.Color(selectedDescColor))
s.DimmedTitle = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#A49FA5", Dark: "#777777"}).
Foreground(lipgloss.Color(dimmedTitleColor)).
Padding(0, 0, 0, 2)
s.DimmedDesc = s.DimmedTitle.
Foreground(lipgloss.AdaptiveColor{Light: "#C2B8C2", Dark: "#4D4D4D"})
Foreground(lipgloss.Color(dimmedDescColor))
s.FilterMatch = lipgloss.NewStyle().Underline(true)
@@ -95,7 +111,7 @@ type DefaultDelegate struct {
func NewDefaultDelegate() DefaultDelegate {
return DefaultDelegate{
ShowDescription: true,
Styles: NewDefaultItemStyles(),
Styles: NewDefaultItemStyles(true),
height: 2,
spacing: 1,
}
+1 -1
View File
@@ -195,7 +195,7 @@ type Model struct {
// New returns a new model with sensible defaults.
func New(items []Item, delegate ItemDelegate, width, height int) Model {
styles := DefaultStyles()
styles := DefaultStyles(true)
sp := spinner.New()
sp.Spinner = spinner.Line
+33 -15
View File
@@ -41,9 +41,27 @@ type Styles struct {
// DefaultStyles returns a set of default style definitions for this list
// component.
func DefaultStyles() (s Styles) {
verySubduedColor := lipgloss.AdaptiveColor{Light: "#DDDADA", Dark: "#3C3C3C"}
subduedColor := lipgloss.AdaptiveColor{Light: "#9B9B9B", Dark: "#5C5C5C"}
func DefaultStyles(isDark bool) (s Styles) {
verySubduedColor := "#DDDADA"
subduedColor := "#9B9B9B"
spinnerColor := "#8E8E8E"
filterPromptColor := "#04B575"
filterCursorColor := "#EE6FF8"
statusBarColor := "#A49FA5"
statusBarActiveFilterColor := "#1a1a1a"
noItemsColor := "#909090"
activePaginationColor := "#847A85"
if isDark {
verySubduedColor = "#3C3C3C"
subduedColor = "#5C5C5C"
spinnerColor = "#747373"
filterPromptColor = "#ECFD65"
filterCursorColor = "#EE6FF8"
statusBarColor = "#777777"
statusBarActiveFilterColor = "#dddddd"
noItemsColor = "#626262"
activePaginationColor = "#979797"
}
s.TitleBar = lipgloss.NewStyle().Padding(0, 0, 1, 2)
@@ -53,46 +71,46 @@ func DefaultStyles() (s Styles) {
Padding(0, 1)
s.Spinner = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#8E8E8E", Dark: "#747373"})
Foreground(lipgloss.Color(spinnerColor))
s.FilterPrompt = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#04B575", Dark: "#ECFD65"})
Foreground(lipgloss.Color(filterPromptColor))
s.FilterCursor = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#EE6FF8", Dark: "#EE6FF8"})
Foreground(lipgloss.Color(filterCursorColor))
s.DefaultFilterCharacterMatch = lipgloss.NewStyle().Underline(true)
s.StatusBar = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#A49FA5", Dark: "#777777"}).
Foreground(lipgloss.Color(statusBarColor)).
Padding(0, 0, 1, 2)
s.StatusEmpty = lipgloss.NewStyle().Foreground(subduedColor)
s.StatusEmpty = lipgloss.NewStyle().Foreground(lipgloss.Color(subduedColor))
s.StatusBarActiveFilter = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#1a1a1a", Dark: "#dddddd"})
Foreground(lipgloss.Color(statusBarActiveFilterColor))
s.StatusBarFilterCount = lipgloss.NewStyle().Foreground(verySubduedColor)
s.StatusBarFilterCount = lipgloss.NewStyle().Foreground(lipgloss.Color(verySubduedColor))
s.NoItems = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#909090", Dark: "#626262"})
Foreground(lipgloss.Color(noItemsColor))
s.ArabicPagination = lipgloss.NewStyle().Foreground(subduedColor)
s.ArabicPagination = lipgloss.NewStyle().Foreground(lipgloss.Color(subduedColor))
s.PaginationStyle = lipgloss.NewStyle().PaddingLeft(2) //nolint:gomnd
s.HelpStyle = lipgloss.NewStyle().Padding(1, 0, 0, 2)
s.ActivePaginationDot = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#847A85", Dark: "#979797"}).
Foreground(lipgloss.Color(activePaginationColor)).
SetString(bullet)
s.InactivePaginationDot = lipgloss.NewStyle().
Foreground(verySubduedColor).
Foreground(lipgloss.Color(verySubduedColor)).
SetString(bullet)
s.DividerDot = lipgloss.NewStyle().
Foreground(verySubduedColor).
Foreground(lipgloss.Color(verySubduedColor)).
SetString(" " + bullet + " ")
return s
+32 -11
View File
@@ -280,7 +280,7 @@ func New() Model {
vp.KeyMap = viewport.KeyMap{}
cur := cursor.New()
focusedStyle, blurredStyle := DefaultStyles()
focusedStyle, blurredStyle := DefaultStyles(true)
m := Model{
CharLimit: defaultCharLimit,
@@ -312,26 +312,47 @@ func New() Model {
// DefaultStyles returns the default styles for focused and blurred states for
// the textarea.
func DefaultStyles() (Style, Style) {
func DefaultStyles(isDark bool) (Style, Style) {
focusedCursorLineColor := 255
focusedCursorLineNrColor := 240
focusedEobColor := 254
focusedLineNrColor := 249
blurredCursorLineColor := 245
blurredCursorLineNrColor := 249
blurredEobColor := 254
blurredLineNrColor := 249
blurredTextColor := 245
if isDark {
focusedCursorLineColor = 0
focusedCursorLineNrColor = 0
focusedEobColor = 0
focusedLineNrColor = 7
blurredCursorLineColor = 7
blurredCursorLineNrColor = 7
blurredEobColor = 0
blurredLineNrColor = 7
blurredTextColor = 7
}
focused := Style{
Base: lipgloss.NewStyle(),
CursorLine: lipgloss.NewStyle().Background(lipgloss.AdaptiveColor{Light: "255", Dark: "0"}),
CursorLineNumber: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "240"}),
EndOfBuffer: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "254", Dark: "0"}),
LineNumber: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "249", Dark: "7"}),
CursorLine: lipgloss.NewStyle().Background(lipgloss.Color(focusedCursorLineColor)),
CursorLineNumber: lipgloss.NewStyle().Foreground(lipgloss.Color(focusedCursorLineNrColor)),
EndOfBuffer: lipgloss.NewStyle().Foreground(lipgloss.Color(focusedEobColor)),
LineNumber: lipgloss.NewStyle().Foreground(lipgloss.Color(focusedLineNrColor)),
Placeholder: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
Prompt: lipgloss.NewStyle().Foreground(lipgloss.Color("7")),
Text: lipgloss.NewStyle(),
}
blurred := Style{
Base: lipgloss.NewStyle(),
CursorLine: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "245", Dark: "7"}),
CursorLineNumber: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "249", Dark: "7"}),
EndOfBuffer: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "254", Dark: "0"}),
LineNumber: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "249", Dark: "7"}),
CursorLine: lipgloss.NewStyle().Foreground(lipgloss.Color(blurredCursorLineColor)),
CursorLineNumber: lipgloss.NewStyle().Foreground(lipgloss.Color(blurredCursorLineNrColor)),
EndOfBuffer: lipgloss.NewStyle().Foreground(lipgloss.Color(blurredEobColor)),
LineNumber: lipgloss.NewStyle().Foreground(lipgloss.Color(blurredLineNrColor)),
Placeholder: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
Prompt: lipgloss.NewStyle().Foreground(lipgloss.Color("7")),
Text: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "245", Dark: "7"}),
Text: lipgloss.NewStyle().Foreground(lipgloss.Color(blurredTextColor)),
}
return focused, blurred