styles.go

 1package tui
 2
 3import (
 4	"fmt"
 5
 6	"charm.land/bubbles/v2/spinner"
 7	tea "charm.land/bubbletea/v2"
 8	"charm.land/lipgloss/v2"
 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	TipStyle     = lipgloss.NewStyle().Foreground(lipgloss.Color("214")).Italic(true)
32	SuccessStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Bold(true)
33	InfoStyle    = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Bold(true)
34
35	H1Style = lipgloss.NewStyle().
36		Foreground(lipgloss.Color("42")).
37		Bold(true).
38		Align(lipgloss.Center)
39
40	H2Style = lipgloss.NewStyle().
41		Foreground(lipgloss.Color("42")).
42		Bold(false). // Less bold
43		Align(lipgloss.Center)
44
45	BodyStyle = lipgloss.NewStyle().
46			Bold(true) // A bit bold
47)
48
49var DocStyle = lipgloss.NewStyle().Margin(1, 2)
50
51// A simple model for showing a status message
52type Status struct {
53	spinner spinner.Model
54	message string
55}
56
57func NewStatus(msg string) Status {
58	s := spinner.New()
59	s.Spinner = spinner.Dot
60	s.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("42"))
61	return Status{spinner: s, message: msg}
62}
63
64func (m Status) Init() tea.Cmd { return m.spinner.Tick }
65
66func (m Status) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
67	var cmd tea.Cmd
68	m.spinner, cmd = m.spinner.Update(msg)
69	return m, cmd
70}
71
72func (m Status) View() tea.View {
73	logoStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("42"))
74	styledLogo := logoStyle.Render(asciiLogo)
75
76	spinnerLine := fmt.Sprintf("   %s %s", m.spinner.View(), m.message)
77
78	return tea.NewView(fmt.Sprintf("%s\n%s\n\n", styledLogo, spinnerLine))
79}