From 04f290dbeeee8a6fcbc70fed253a968336bcb2ab Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 6 Sep 2025 13:19:01 +0300 Subject: more tests --- internal/hexaiaction/tui_delegate.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 internal/hexaiaction/tui_delegate.go (limited to 'internal/hexaiaction/tui_delegate.go') diff --git a/internal/hexaiaction/tui_delegate.go b/internal/hexaiaction/tui_delegate.go new file mode 100644 index 0000000..0e5a68c --- /dev/null +++ b/internal/hexaiaction/tui_delegate.go @@ -0,0 +1,35 @@ +package hexaiaction + +import ( + "fmt" + "io" + + "github.com/charmbracelet/bubbles/list" + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" +) + +// oneLineDelegate renders a single compact line per item, no spacing. +type oneLineDelegate struct{} + +var ( + hotStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("205")) + cursorStyle = lipgloss.NewStyle().Bold(true) +) + +func (oneLineDelegate) Height() int { return 1 } +func (oneLineDelegate) Spacing() int { return 0 } +func (oneLineDelegate) Update(tea.Msg, *list.Model) tea.Cmd { return nil } +func (oneLineDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) { + title := listItem.FilterValue() + hk := '?' + if it, ok := listItem.(item); ok { + hk = it.hotkey + } + hot := hotStyle.Render(fmt.Sprintf(" (%c)", hk)) + cursor := " " + if index == m.Index() { + cursor = cursorStyle.Render("> ") + } + fmt.Fprintf(w, "%s%s%s", cursor, title, hot) +} -- cgit v1.2.3