diff options
author | Benjamin Chausse <benjamin@chausse.xyz> | 2024-12-27 17:54:43 -0500 |
---|---|---|
committer | Benjamin Chausse <benjamin@chausse.xyz> | 2024-12-27 17:54:43 -0500 |
commit | 3b8fa0766a0050c0dd026be5d6a1ce2827956530 (patch) | |
tree | e6e6e0d05da592fe36aade35201a52898209ceb1 /internal/ui | |
parent | 858c07f0b805558b0961514200ffb822dd2248cf (diff) |
All ui info in one location
Diffstat (limited to 'internal/ui')
-rw-r--r-- | internal/ui/style.go | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/internal/ui/style.go b/internal/ui/style.go new file mode 100644 index 0000000..71bff48 --- /dev/null +++ b/internal/ui/style.go @@ -0,0 +1,123 @@ +package ui + +import ( + "github.com/ChausseBenjamin/termpicker/internal/progress" + lg "github.com/charmbracelet/lipgloss" +) + +const ( + // Colors: + textSel = "#F2F1F0" + textNorm = "#A7AFB1" + textFaint = "#6F797B" + geomFg = "#ACB3B5" + + TabSepLeft = "[" + TabSepMid = " | " + TabSepRight = "]" + + PickerSelRune = ">" + + PromptPrefix = "> " + PromptPlaceholder = "Enter a color (ex: #b7416e)" + + SliderMinWidth = 22 // 1 ASCII change every 2.05 deg. avg + SliderMaxWidth = 90 // 2 ASCII change per deg. + +) + +type sliderOpts struct { + R, G, B []progress.Option + C, M, Y, K []progress.Option + H, S, L []progress.Option +} + +type StyleSheet struct { + TabSel lg.Style + TabNorm lg.Style + TabGeom lg.Style + SliderVal lg.Style + SliderLabel lg.Style + PickerCursor lg.Style + Preview lg.Style + InputPrompt lg.Style + InputText lg.Style + Notice lg.Style + Quit lg.Style + Boxed lg.Style + Sliders sliderOpts +} + +var style StyleSheet + +func Style() StyleSheet { + return style +} + +func init() { + baseStyle := lg.NewStyle(). + Foreground(lg.Color(textNorm)) + + baseSliderOpts := []progress.Option{ + progress.WithColorProfile(ColorProfile()), + progress.WithoutPercentage(), + // progress.WithFillCharacters(" ", "█"), // for legacy look + } + + style = StyleSheet{ + TabSel: baseStyle.Inherit(lg.NewStyle(). + Foreground(lg.Color(textSel)). + Underline(true). + Bold(true)), + + TabNorm: baseStyle.Inherit(lg.NewStyle(). + Foreground(lg.Color(textFaint)). + Underline(false). + Bold(false)), + + TabGeom: baseStyle.Inherit(lg.NewStyle(). + Foreground(lg.Color(geomFg))), + + SliderVal: baseStyle, + + SliderLabel: baseStyle, + + PickerCursor: baseStyle.Inherit(lg.NewStyle(). + Bold(true)), + + Preview: baseStyle, + + InputPrompt: baseStyle.Inherit(lg.NewStyle(). + Bold(true)), + + InputText: baseStyle, + + Notice: baseStyle.Inherit(lg.NewStyle(). + Bold(true)), + + Quit: baseStyle.Inherit(lg.NewStyle(). + Foreground(lg.Color(textSel)). + Bold(true)), + + Boxed: baseStyle.Inherit(lg.NewStyle(). + Border(lg.RoundedBorder())), + + Sliders: sliderOpts{ + // RGB + R: append(baseSliderOpts, progress.WithGradient("#660000", "#ff0000")), + G: append(baseSliderOpts, progress.WithGradient("#006600", "#00ff00")), + B: append(baseSliderOpts, progress.WithGradient("#000066", "#0000ff")), + + // CMYK + C: append(baseSliderOpts, progress.WithGradient("#006666", "#00ffff")), + M: append(baseSliderOpts, progress.WithGradient("#660066", "#ff00ff")), + Y: append(baseSliderOpts, progress.WithGradient("#666600", "#ffff00")), + K: append(baseSliderOpts, progress.WithSolidFill("#000000")), + + // HSL + H: append(baseSliderOpts, progress.WithDefaultGradient()), + S: append(baseSliderOpts, progress.WithGradient("#a68e59", "#ffae00")), + L: append(baseSliderOpts, progress.WithGradient("#222222", "#ffffff")), + }, + } +} |