package tui import ( "github.com/charmbracelet/lipgloss" ) func (m Model) BuildHelpView() string { bold := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFFFFF")).Bold(true) base := lipgloss.NewStyle().Foreground(lipgloss.Color("#AAAAAA")) header := lipgloss.NewStyle().Foreground(lipgloss.Color("#4682B4")).Bold(true) rowStyle := lipgloss.NewStyle().Padding(0, 1) sections := []struct { title string keys []struct{ key, desc string } }{ { title: "navigation", keys: []struct{ key, desc string }{ {"s", "shop"}, {"c", "cart"}, {"a", "account"}, {"m", "menu"}, }, }, { title: "browsing", keys: []struct{ key, desc string }{ {"j/k", "move cursor down/up"}, {"+/-", "adjust quantity"}, {"pgup/pgdn", "scroll content"}, }, }, { title: "cart & checkout", keys: []struct{ key, desc string }{ {"p/enter", "proceed to checkout"}, {"d/x", "delete address or card"}, {"esc", "go back one step"}, }, }, { title: "account", keys: []struct{ key, desc string }{ {"enter", "select / drill in"}, {"esc", "go back"}, }, }, { title: "forms", keys: []struct{ key, desc string }{ {"tab", "next field"}, {"enter", "submit form"}, {"esc", "cancel"}, }, }, { title: "general", keys: []struct{ key, desc string }{ {"?", "toggle help page"}, {"q", "quit"}, {"ctrl+c", "force quit"}, }, }, } content := "" for i, section := range sections { if i > 0 { content += "\n" } content += rowStyle.Render(header.Render(section.title)) + "\n" for _, k := range section.keys { content += rowStyle.Render(bold.Render(k.key)+" "+base.Render(k.desc)) + "\n" } } logoStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFFFFF")).Bold(true) logo := logoStyle.Render("keybindings") modal := lipgloss.NewStyle(). Border(lipgloss.NormalBorder()). BorderForeground(lipgloss.Color("#666666")). Padding(1, 2). Render(content) hint := base.Render("press esc or ? to close") assembled := lipgloss.JoinVertical( lipgloss.Center, logo, "", modal, "", hint, ) return lipgloss.Place( m.viewportWidth, m.viewportHeight, lipgloss.Center, lipgloss.Center, assembled, ) }