From d76f1e1e088b84c1ef3742f8f9cc855a8433ed44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20B=C3=BCtow?= <1224732+snonux@users.noreply.github.com> Date: Thu, 19 Jun 2025 23:50:10 +0300 Subject: Add Charm bubble tea UI --- internal/ui/ui.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 internal/ui/ui.go (limited to 'internal') diff --git a/internal/ui/ui.go b/internal/ui/ui.go new file mode 100644 index 0000000..244c191 --- /dev/null +++ b/internal/ui/ui.go @@ -0,0 +1,47 @@ +package ui + +import ( + "github.com/charmbracelet/bubbles/list" + tea "github.com/charmbracelet/bubbletea" +) + +// Model wraps a Bubble Tea list.Model to display tasks. +type Model struct { + list list.Model +} + +// New creates a new UI model with the provided Bubble Tea list. +func New(l list.Model) Model { + return Model{list: l} +} + +// Init implements tea.Model. +func (m Model) Init() tea.Cmd { return nil } + +// Update handles key and window events. +func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + switch msg := msg.(type) { + case tea.KeyMsg: + switch msg.String() { + case "j": + msg = tea.KeyMsg{Type: tea.KeyDown} + case "k": + msg = tea.KeyMsg{Type: tea.KeyUp} + } + return m.updateList(msg) + case tea.WindowSizeMsg: + m.list.SetSize(msg.Width, msg.Height-2) + } + return m.updateList(msg) +} + +func (m *Model) updateList(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + m.list, cmd = m.list.Update(msg) + return m, cmd +} + +// View renders the list UI. +func (m Model) View() string { + return m.list.View() +} -- cgit v1.2.3