1package anim
2
3import (
4 "cmp"
5 "image/color"
6
7 tea "github.com/charmbracelet/bubbletea/v2"
8 "github.com/charmbracelet/lipgloss/v2"
9)
10
11type noAnim struct {
12 Color color.Color
13 rendered string
14 id int
15}
16
17func newStatic(label string, foreground color.Color) Spinner {
18 a := &noAnim{Color: foreground}
19 a.SetLabel(label)
20 a.id = nextID()
21 return a
22}
23
24func (s *noAnim) SetLabel(label string) {
25 s.rendered = lipgloss.NewStyle().
26 Foreground(s.Color).
27 Render(cmp.Or(label, "Working") + ellipsisFrames[2])
28}
29
30func (s noAnim) Init() tea.Cmd { return stepCmd(s.id) }
31func (s *noAnim) View() string { return s.rendered }
32func (s *noAnim) Update(msg tea.Msg) (Spinner, tea.Cmd) {
33 switch msg := msg.(type) {
34 case StepMsg:
35 if msg.id != s.id {
36 // Reject messages that are not for this instance.
37 return s, nil
38 }
39 return s, stepCmd(s.id)
40 default:
41 return s, nil
42 }
43}