Files
nib-v1/internal/tui/statusbar.go
T
lerko c2ea63dd16 feat(tui): add status bar, help overlay, tag filter, and entity actions
Status bar with entity count and context-sensitive key hints. Help
overlay via ? key. Tag filter via # with cursor-navigable tag list.
Todo toggle (x), pin (!), promote (p), demote (D), copy (c), edit (e)
via $EDITOR. Delete confirmation with 3s timeout. Date-grouped list
with completed todo and pinned indicators. Esc clears active tag filter.

Adds CompletedAt/ClearCompleted to EntityUpdate for todo toggling.
2026-05-17 20:33:34 -04:00

47 lines
1019 B
Go

package tui
import (
"fmt"
"github.com/charmbracelet/lipgloss"
)
func renderStatusBar(m model, width int) string {
left := countText(m)
right := contextHints(m)
leftRendered := statusStyle.Render(left)
rightRendered := helpStyle.Render(right)
gap := width - lipgloss.Width(leftRendered) - lipgloss.Width(rightRendered)
if gap < 0 {
gap = 0
}
pad := lipgloss.NewStyle().Width(gap).Render("")
return leftRendered + pad + rightRendered
}
func countText(m model) string {
total := len(m.list.entities)
if m.filterTag != "" {
return fmt.Sprintf("%d entities #%s", total, m.filterTag)
}
return fmt.Sprintf("%d entities", total)
}
func contextHints(m model) string {
switch m.state {
case stateDetail:
return "p:promote D:demote c:copy e:edit !:pin esc:back"
case stateInput:
return "enter:submit esc:cancel"
case stateTagFilter:
return "j/k:nav enter:select esc:cancel"
case stateConfirm:
return "y:confirm n:cancel"
default:
return "a:add d:del x:todo #:filter ?:help q:quit"
}
}