Add visual pizzazz with loading spinners from Bubbles!

package main
import (
"fmt"
"os"
"github.com/charmbracelet/bubbles/v2/spinner"
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/lipgloss/v2"
)
type model struct {
spinner spinner.Model
quitting bool
}
func initialModel() model {
s := spinner.New()
s.Spinner = spinner.Dot
s.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("205"))
return model{spinner: s}
}
func (m model) Init() tea.Cmd {
return m.spinner.Tick
}
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyPressMsg:
if msg.String() == "q" {
m.quitting = true
return m, tea.Quit
}
default:
var cmd tea.Cmd
m.spinner, cmd = m.spinner.Update(msg)
return m, cmd
}
return m, nil
}
func (m model) View() string {
return fmt.Sprintf("\n %s Loading...\n\n", m.spinner.View())
}
func main() {
p := tea.NewProgram(initialModel())
if _, err := p.Run(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
spinner.Line spinner.Dot spinner.MiniDot
spinner.Jump spinner.Pulse spinner.Points
spinner.Globe spinner.Moon spinner.Monkey
