main.go

 1package main
 2
 3import (
 4	"fmt"
 5	"image/color"
 6	"os"
 7
 8	tea "github.com/charmbracelet/bubbletea/v2"
 9	anim "github.com/charmbracelet/crush/internal/tui/components/anim"
10	"github.com/charmbracelet/crush/internal/tui/styles"
11)
12
13type model struct {
14	anim     tea.Model
15	bgColor  color.Color
16	quitting bool
17}
18
19func (m model) Init() tea.Cmd {
20	return m.anim.Init()
21}
22
23func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
24	switch msg := msg.(type) {
25	case tea.KeyMsg:
26		switch msg.String() {
27		case "q", "ctrl+c":
28			m.quitting = true
29			return m, tea.Quit
30		default:
31			return m, nil
32		}
33	case anim.StepMsg:
34		var cmd tea.Cmd
35		m.anim, cmd = m.anim.Update(msg)
36		return m, cmd
37	default:
38		return m, nil
39	}
40}
41
42func (m model) View() tea.View {
43	// XXX tea.View() needs a content setter.
44	v := tea.NewView("")
45	v.BackgroundColor = m.bgColor
46	if m.quitting {
47		return v
48	}
49	if a, ok := m.anim.(anim.Anim); ok {
50		v = tea.NewView(a.View() + "\n")
51		v.BackgroundColor = m.bgColor
52		return v
53	}
54	return v
55}
56
57func main() {
58	t := styles.CurrentTheme()
59	p := tea.NewProgram(model{
60		bgColor: t.BgBase,
61		anim:    anim.New(50, "Hello", t),
62	})
63
64	if _, err := p.Run(); err != nil {
65		fmt.Fprintf(os.Stderr, "Uh oh: %v\n", err)
66		os.Exit(1)
67	}
68}