feat(tui): add 13 preloaded themes matching web design system
Port all web CSS token themes to TUI via shared vocabulary (accent, dim, muted, ok, todo, event, remind, danger). Styles rebuild from active theme on switch. Press T to cycle, persists to ~/.nib/theme. Glamour markdown renderer respects light/dark per theme.
This commit is contained in:
+93
-143
@@ -3,147 +3,97 @@ package tui
|
||||
import "github.com/charmbracelet/lipgloss"
|
||||
|
||||
var (
|
||||
subtle = lipgloss.AdaptiveColor{Light: "#D9DCCF", Dark: "#383838"}
|
||||
highlight = lipgloss.AdaptiveColor{Light: "#874BFD", Dark: "#7D56F4"}
|
||||
dim = lipgloss.AdaptiveColor{Light: "#A49FA5", Dark: "#777777"}
|
||||
|
||||
titleStyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(highlight).
|
||||
PaddingLeft(1)
|
||||
|
||||
statusStyle = lipgloss.NewStyle().
|
||||
Foreground(dim).
|
||||
PaddingLeft(1)
|
||||
|
||||
listItemStyle = lipgloss.NewStyle().
|
||||
PaddingLeft(4)
|
||||
|
||||
selectedItemStyle = lipgloss.NewStyle().
|
||||
PaddingLeft(1).
|
||||
Bold(true).
|
||||
Foreground(highlight).
|
||||
SetString("›")
|
||||
|
||||
glyphStyle = lipgloss.NewStyle().
|
||||
Width(2)
|
||||
|
||||
completedGlyphStyle = lipgloss.NewStyle().
|
||||
Width(2).
|
||||
Foreground(dim)
|
||||
|
||||
tagStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#43BF6D", Dark: "#73F59F"})
|
||||
|
||||
idStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
inputPromptStyle = lipgloss.NewStyle().
|
||||
Foreground(highlight).
|
||||
Bold(true)
|
||||
|
||||
detailHeaderStyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(highlight).
|
||||
MarginBottom(1)
|
||||
|
||||
detailBodyStyle = lipgloss.NewStyle().
|
||||
PaddingLeft(2).
|
||||
PaddingTop(1)
|
||||
|
||||
helpStyle = lipgloss.NewStyle().
|
||||
Foreground(dim).
|
||||
PaddingLeft(1)
|
||||
|
||||
errorStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.Color("#FF0000")).
|
||||
PaddingLeft(1)
|
||||
|
||||
dateHeaderStyle = lipgloss.NewStyle().
|
||||
Foreground(dim).
|
||||
PaddingLeft(1)
|
||||
|
||||
pinnedStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#D4A017", Dark: "#FFD700"})
|
||||
|
||||
filterPillStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#43BF6D", Dark: "#73F59F"}).
|
||||
Bold(true)
|
||||
|
||||
helpKeyStyle = lipgloss.NewStyle().
|
||||
Foreground(highlight).
|
||||
Bold(true).
|
||||
Width(18)
|
||||
|
||||
helpDescStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
affordanceStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#5B8EF0", Dark: "#7AAFFF"}).
|
||||
Bold(true)
|
||||
|
||||
useCountStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#B07D3A", Dark: "#D4A54A"})
|
||||
|
||||
modeStyle = lipgloss.NewStyle().
|
||||
Foreground(dim).
|
||||
Bold(true)
|
||||
|
||||
detailLabelStyle = lipgloss.NewStyle().
|
||||
Foreground(highlight).
|
||||
Bold(true)
|
||||
|
||||
detailValueStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#555555", Dark: "#BBBBBB"})
|
||||
|
||||
checkDoneStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#43BF6D", Dark: "#73F59F"})
|
||||
|
||||
checkPendingStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
searchPillStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#E06C75", Dark: "#E06C75"}).
|
||||
Bold(true)
|
||||
|
||||
gutterStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
drawerBorderStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
drawerHintsStyle = lipgloss.NewStyle().
|
||||
Foreground(dim).
|
||||
PaddingLeft(2)
|
||||
|
||||
drawerPreviewStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#555555", Dark: "#AAAAAA"}).
|
||||
PaddingLeft(2)
|
||||
|
||||
separatorStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
hintKeyStyle = lipgloss.NewStyle().
|
||||
Foreground(highlight).
|
||||
Bold(true)
|
||||
|
||||
hintDescStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
railHeaderStyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(dim)
|
||||
|
||||
railTagStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#43BF6D", Dark: "#73F59F"})
|
||||
|
||||
railActiveTagStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#43BF6D", Dark: "#73F59F"}).
|
||||
Bold(true)
|
||||
|
||||
railCountStyle = lipgloss.NewStyle().
|
||||
Foreground(dim)
|
||||
|
||||
stumbleAgeStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.AdaptiveColor{Light: "#cc4400", Dark: "#fab387"})
|
||||
titleStyle lipgloss.Style
|
||||
statusStyle lipgloss.Style
|
||||
listItemStyle lipgloss.Style
|
||||
selectedItemStyle lipgloss.Style
|
||||
glyphStyle lipgloss.Style
|
||||
completedGlyphStyle lipgloss.Style
|
||||
tagStyle lipgloss.Style
|
||||
idStyle lipgloss.Style
|
||||
inputPromptStyle lipgloss.Style
|
||||
detailHeaderStyle lipgloss.Style
|
||||
detailBodyStyle lipgloss.Style
|
||||
helpStyle lipgloss.Style
|
||||
errorStyle lipgloss.Style
|
||||
dateHeaderStyle lipgloss.Style
|
||||
pinnedStyle lipgloss.Style
|
||||
filterPillStyle lipgloss.Style
|
||||
helpKeyStyle lipgloss.Style
|
||||
helpDescStyle lipgloss.Style
|
||||
affordanceStyle lipgloss.Style
|
||||
useCountStyle lipgloss.Style
|
||||
modeStyle lipgloss.Style
|
||||
detailLabelStyle lipgloss.Style
|
||||
detailValueStyle lipgloss.Style
|
||||
checkDoneStyle lipgloss.Style
|
||||
checkPendingStyle lipgloss.Style
|
||||
searchPillStyle lipgloss.Style
|
||||
gutterStyle lipgloss.Style
|
||||
drawerBorderStyle lipgloss.Style
|
||||
drawerHintsStyle lipgloss.Style
|
||||
drawerPreviewStyle lipgloss.Style
|
||||
separatorStyle lipgloss.Style
|
||||
hintKeyStyle lipgloss.Style
|
||||
hintDescStyle lipgloss.Style
|
||||
railHeaderStyle lipgloss.Style
|
||||
railTagStyle lipgloss.Style
|
||||
railActiveTagStyle lipgloss.Style
|
||||
railCountStyle lipgloss.Style
|
||||
stumbleAgeStyle lipgloss.Style
|
||||
)
|
||||
|
||||
func init() {
|
||||
applyTheme()
|
||||
}
|
||||
|
||||
func applyTheme() {
|
||||
t := activeTheme()
|
||||
accent := lipgloss.Color(t.Accent)
|
||||
dim := lipgloss.Color(t.Dim)
|
||||
muted := lipgloss.Color(t.Muted)
|
||||
ok := lipgloss.Color(t.Ok)
|
||||
todo := lipgloss.Color(t.Todo)
|
||||
event := lipgloss.Color(t.Event)
|
||||
remind := lipgloss.Color(t.Remind)
|
||||
danger := lipgloss.Color(t.Danger)
|
||||
|
||||
titleStyle = lipgloss.NewStyle().Bold(true).Foreground(accent).PaddingLeft(1)
|
||||
statusStyle = lipgloss.NewStyle().Foreground(dim).PaddingLeft(1)
|
||||
listItemStyle = lipgloss.NewStyle().PaddingLeft(4)
|
||||
selectedItemStyle = lipgloss.NewStyle().PaddingLeft(1).Bold(true).Foreground(accent).SetString("›")
|
||||
glyphStyle = lipgloss.NewStyle().Width(2)
|
||||
completedGlyphStyle = lipgloss.NewStyle().Width(2).Foreground(dim)
|
||||
tagStyle = lipgloss.NewStyle().Foreground(ok)
|
||||
idStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
inputPromptStyle = lipgloss.NewStyle().Foreground(accent).Bold(true)
|
||||
detailHeaderStyle = lipgloss.NewStyle().Bold(true).Foreground(accent).MarginBottom(1)
|
||||
detailBodyStyle = lipgloss.NewStyle().PaddingLeft(2).PaddingTop(1)
|
||||
helpStyle = lipgloss.NewStyle().Foreground(dim).PaddingLeft(1)
|
||||
errorStyle = lipgloss.NewStyle().Foreground(danger).PaddingLeft(1)
|
||||
dateHeaderStyle = lipgloss.NewStyle().Foreground(dim).PaddingLeft(1)
|
||||
pinnedStyle = lipgloss.NewStyle().Foreground(todo)
|
||||
filterPillStyle = lipgloss.NewStyle().Foreground(ok).Bold(true)
|
||||
helpKeyStyle = lipgloss.NewStyle().Foreground(accent).Bold(true).Width(18)
|
||||
helpDescStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
affordanceStyle = lipgloss.NewStyle().Foreground(event).Bold(true)
|
||||
useCountStyle = lipgloss.NewStyle().Foreground(remind)
|
||||
modeStyle = lipgloss.NewStyle().Foreground(dim).Bold(true)
|
||||
detailLabelStyle = lipgloss.NewStyle().Foreground(accent).Bold(true)
|
||||
detailValueStyle = lipgloss.NewStyle().Foreground(muted)
|
||||
checkDoneStyle = lipgloss.NewStyle().Foreground(ok)
|
||||
checkPendingStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
searchPillStyle = lipgloss.NewStyle().Foreground(danger).Bold(true)
|
||||
gutterStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
drawerBorderStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
drawerHintsStyle = lipgloss.NewStyle().Foreground(dim).PaddingLeft(2)
|
||||
drawerPreviewStyle = lipgloss.NewStyle().Foreground(muted).PaddingLeft(2)
|
||||
separatorStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
hintKeyStyle = lipgloss.NewStyle().Foreground(accent).Bold(true)
|
||||
hintDescStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
railHeaderStyle = lipgloss.NewStyle().Bold(true).Foreground(dim)
|
||||
railTagStyle = lipgloss.NewStyle().Foreground(ok)
|
||||
railActiveTagStyle = lipgloss.NewStyle().Foreground(ok).Bold(true)
|
||||
railCountStyle = lipgloss.NewStyle().Foreground(dim)
|
||||
stumbleAgeStyle = lipgloss.NewStyle().Foreground(remind)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user