summaryrefslogtreecommitdiff
path: root/internal/ui
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ui')
-rw-r--r--internal/ui/style.go123
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")),
+ },
+ }
+}