diff --git a/examples/paginator/main.go b/examples/paginator/main.go new file mode 100644 index 0000000..53cece5 --- /dev/null +++ b/examples/paginator/main.go @@ -0,0 +1,76 @@ +package main + +// A simple program demonstrating the paginator component from the Bubbles +// component library. + +import ( + "fmt" + "log" + "strings" + + "github.com/charmbracelet/bubbles/paginator" + "github.com/charmbracelet/lipgloss" + + tea "github.com/charmbracelet/bubbletea" +) + +func newModel() model { + var items []string + for i := 1; i < 101; i++ { + text := fmt.Sprintf("Item %d", i) + items = append(items, text) + } + + p := paginator.NewModel() + p.Type = paginator.Dots + p.PerPage = 10 + p.ActiveDot = lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#847A85", Dark: "#979797"}).Render("•") + p.InactiveDot = lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#C2B8C2", Dark: "#4D4D4D"}).Render("•") + p.SetTotalPages(len(items)) + + return model{ + paginator: p, + items: items, + } +} + +type model struct { + items []string + paginator paginator.Model +} + +func (m model) Init() tea.Cmd { + return nil +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + switch msg := msg.(type) { + case tea.KeyMsg: + switch msg.String() { + case "q": + return m, tea.Quit + } + } + m.paginator, cmd = m.paginator.Update(msg) + return m, cmd +} + +func (m model) View() string { + var b strings.Builder + b.WriteString("\n Paginator Example\n\n") + start, end := m.paginator.GetSliceBounds(len(m.items)) + for _, item := range m.items[start:end] { + b.WriteString(" • " + item + "\n\n") + } + b.WriteString(" " + m.paginator.View()) + b.WriteString("\n\n h/l ←/→ page • q: quit\n") + return b.String() +} + +func main() { + p := tea.NewProgram(newModel()) + if err := p.Start(); err != nil { + log.Fatal(err) + } +}