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
11var (
12	DialogBoxStyle = lipgloss.NewStyle().
13			Border(lipgloss.RoundedBorder()).
14			BorderForeground(lipgloss.Color("#874BFD")).
15			Padding(1, 0).
16			BorderTop(true).
17			BorderLeft(true).
18			BorderRight(true).
19			BorderBottom(true)
20
21	HelpStyle    = lipgloss.NewStyle().Foreground(lipgloss.Color("240"))
22	SuccessStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Bold(true)
23	InfoStyle    = lipgloss.NewStyle().Foreground(lipgloss.Color("205")).Bold(true)
24
25	H1Style = lipgloss.NewStyle().
26		Foreground(lipgloss.Color("205")).
27		Bold(true).
28		Align(lipgloss.Center)
29
30	H2Style = lipgloss.NewStyle().
31		Foreground(lipgloss.Color("205")).
32		Bold(false). // Less bold
33		Align(lipgloss.Center)
34
35	BodyStyle = lipgloss.NewStyle().
36		Bold(true) // A bit bold
37)
38
39var DocStyle = lipgloss.NewStyle().Margin(1, 2)
40
41// A simple model for showing a status message
42type Status struct {
43	spinner spinner.Model
44	message string
45}
46
47func NewStatus(msg string) Status {
48	s := spinner.New()
49	s.Spinner = spinner.Dot
50	s.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("205"))
51	return Status{spinner: s, message: msg}
52}
53
54func (m Status) Init() tea.Cmd { return m.spinner.Tick }
55
56func (m Status) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
57	var cmd tea.Cmd
58	m.spinner, cmd = m.spinner.Update(msg)
59	return m, cmd
60}
61
62func (m Status) View() string {
63	return fmt.Sprintf("\n\n   %s %s\n\n", m.spinner.View(), m.message)
64}