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}