55 lines
1.3 KiB
Go
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))
|
|
}
|