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}