add custom help bar

This commit is contained in:
Robin Olsen
2026-02-10 17:49:53 +01:00
parent 4129cfacb4
commit 815977a208

View File

@@ -0,0 +1,94 @@
package dashboard
import (
"github.com/LazyBachelor/LazyPM/pkg/tui/styles"
"github.com/charmbracelet/lipgloss"
)
type HelpBar struct {
keyMap DashboardKeyMap
showAll bool
width int
}
func NewHelpBar(keyMap DashboardKeyMap) HelpBar {
return HelpBar{keyMap: keyMap}
}
func (h *HelpBar) SetWidth(width int) {
h.width = width
}
func (h HelpBar) View() string {
if h.width == 0 {
return ""
}
if h.showAll {
return h.fullHelp()
}
return h.shortHelp()
}
func (h HelpBar) shortHelp() string {
keys := []string{
styles.HighlightKey("↑/k") + " up",
styles.HighlightKey("↓/j") + " down",
styles.HighlightKey("q") + " quit",
styles.HighlightKey("?") + " help",
}
content := lipgloss.JoinHorizontal(lipgloss.Left, keys...)
return lipgloss.NewStyle().
Border(lipgloss.Border{Top: "─"}, true, false, false, false).
BorderForeground(styles.SecondaryBorder).
Padding(0, 1).
Width(h.width).
Render(content)
}
func (h HelpBar) fullHelp() string {
keyStyle := lipgloss.NewStyle().Width(8).Align(lipgloss.Right)
descStyle := lipgloss.NewStyle().Width(12)
renderHelpItem := func(key, desc string) string {
return lipgloss.JoinHorizontal(
lipgloss.Left,
keyStyle.Render(styles.HighlightKey(key)),
" ",
descStyle.Render(desc),
)
}
renderRow := func(leftKey, leftDesc, rightKey, rightDesc string) string {
leftItem := renderHelpItem(leftKey, leftDesc)
rightItem := renderHelpItem(rightKey, rightDesc)
return lipgloss.JoinHorizontal(lipgloss.Left, leftItem, " ", rightItem)
}
rows := []string{
renderRow("↑/k", "up", "enter", "view issue"),
renderRow("↓/j", "down", "b", "back to list"),
renderRow("?", "help", "q", "quit"),
}
content := lipgloss.JoinVertical(lipgloss.Left, rows...)
return lipgloss.NewStyle().
Border(lipgloss.Border{Top: "─"}, true, false, false, false).
BorderForeground(styles.SecondaryBorder).
Padding(0, 1).
Width(h.width).
Render(content)
}
func (h HelpBar) Height() int {
if h.showAll {
return 3
}
return 1
}
func (h HelpBar) IsExpanded() bool {
return h.showAll
}
func (h *HelpBar) ToggleHelp() {
h.showAll = !h.showAll
}