quickpassthrough/internal/ui_style.go
2023-12-26 19:20:28 +01:00

55 lines
1.3 KiB
Go

package internal
import (
"fmt"
"io"
"strings"
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
var (
titleStyle = lipgloss.NewStyle().
Background(lipgloss.Color("#5F5FD7")).
Foreground(lipgloss.Color("#FFFFFF")).
PaddingLeft(2).PaddingRight(2)
helpStyle = lipgloss.NewStyle().
Foreground(lipgloss.Color(241))
listStyle = lipgloss.NewStyle().
PaddingLeft(2).
PaddingRight(2)
choiceStyle = lipgloss.NewStyle().
PaddingLeft(4).
PaddingRight(4)
selectedChoiceStyle = lipgloss.NewStyle().
PaddingLeft(2).
Foreground(lipgloss.Color("170"))
dialogStyle = lipgloss.NewStyle().
PaddingLeft(2)
)
// Choice delegate (for our dialog boxes)
type choiceDelegate struct{}
func (d choiceDelegate) Height() int { return 1 }
func (d choiceDelegate) Spacing() int { return 0 }
func (d choiceDelegate) Update(msg tea.Msg, m *list.Model) tea.Cmd { return nil }
func (d choiceDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) {
i, ok := listItem.(item)
if !ok {
return
}
str := i.title
fn := choiceStyle.Render
if index == m.Index() {
fn = func(s ...string) string {
return selectedChoiceStyle.Render("| " + strings.Join(s, " "))
}
}
fmt.Fprint(w, fn(str))
}