Files
terminalShop/pkg/tui/help.go

106 lines
2.2 KiB
Go

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,
)
}