styles.go

 1package tui
 2
 3import (
 4	"fmt"
 5
 6	"github.com/charmbracelet/bubbles/spinner"
 7	tea "github.com/charmbracelet/bubbletea"
 8	"github.com/charmbracelet/lipgloss"
 9)
10
11// ASCII logo for Matcha displayed during loading screens
12const asciiLogo = `
13                 __       __
14   ____ ___  ____ _/ /______/ /_  ____ _
15  / __ '__ \/ __ '/ __/ ___/ __ \/ __ '/
16 / / / / / / /_/ / /_/ /__/ / / / /_/ /
17/_/ /_/ /_/\__,_/\__/\___/_/ /_/\__,_/
18`
19
20var (
21	DialogBoxStyle = lipgloss.NewStyle().
22			Border(lipgloss.RoundedBorder()).
23			BorderForeground(lipgloss.Color("#25A065")).
24			Padding(1, 0).
25			BorderTop(true).
26			BorderLeft(true).
27			BorderRight(true).
28			BorderBottom(true)
29
30	HelpStyle    = lipgloss.NewStyle().Foreground(lipgloss.Color("240"))
31	SuccessStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Bold(true)
32	InfoStyle    = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Bold(true)
33
34	H1Style = lipgloss.NewStyle().
35		Foreground(lipgloss.Color("42")).
36		Bold(true).
37		Align(lipgloss.Center)
38
39	H2Style = lipgloss.NewStyle().
40		Foreground(lipgloss.Color("42")).
41		Bold(false). // Less bold
42		Align(lipgloss.Center)
43
44	BodyStyle = lipgloss.NewStyle().
45			Bold(true) // A bit bold
46)
47
48var DocStyle = lipgloss.NewStyle().Margin(1, 2)
49
50// A simple model for showing a status message
51type Status struct {
52	spinner spinner.Model
53	message string
54}
55
56func NewStatus(msg string) Status {
57	s := spinner.New()
58	s.Spinner = spinner.Dot
59	s.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("42"))
60	return Status{spinner: s, message: msg}
61}
62
63func (m Status) Init() tea.Cmd { return m.spinner.Tick }
64
65func (m Status) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
66	var cmd tea.Cmd
67	m.spinner, cmd = m.spinner.Update(msg)
68	return m, cmd
69}
70
71func (m Status) View() string {
72	logoStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("42"))
73	styledLogo := logoStyle.Render(asciiLogo)
74
75	spinnerLine := fmt.Sprintf("   %s %s", m.spinner.View(), m.message)
76
77	return fmt.Sprintf("%s\n%s\n\n", styledLogo, spinnerLine)
78}