1package sessions
 2
 3import (
 4	"github.com/charmbracelet/bubbles/v2/key"
 5)
 6
 7type KeyMap struct {
 8	Select,
 9	Next,
10	Previous,
11	Close key.Binding
12}
13
14func DefaultKeyMap() KeyMap {
15	return KeyMap{
16		Select: key.NewBinding(
17			key.WithKeys("enter", "tab", "ctrl+y"),
18			key.WithHelp("enter", "choose"),
19		),
20		Next: key.NewBinding(
21			key.WithKeys("down", "ctrl+n"),
22			key.WithHelp("↓", "next item"),
23		),
24		Previous: key.NewBinding(
25			key.WithKeys("up", "ctrl+p"),
26			key.WithHelp("↑", "previous item"),
27		),
28		Close: key.NewBinding(
29			key.WithKeys("esc", "alt+esc"),
30			key.WithHelp("esc", "exit"),
31		),
32	}
33}
34
35// KeyBindings implements layout.KeyMapProvider
36func (k KeyMap) KeyBindings() []key.Binding {
37	return []key.Binding{
38		k.Select,
39		k.Next,
40		k.Previous,
41		k.Close,
42	}
43}
44
45// FullHelp implements help.KeyMap.
46func (k KeyMap) FullHelp() [][]key.Binding {
47	m := [][]key.Binding{}
48	slice := k.KeyBindings()
49	for i := 0; i < len(slice); i += 4 {
50		end := min(i+4, len(slice))
51		m = append(m, slice[i:end])
52	}
53	return m
54}
55
56// ShortHelp implements help.KeyMap.
57func (k KeyMap) ShortHelp() []key.Binding {
58	return []key.Binding{
59		key.NewBinding(
60
61			key.WithKeys("down", "up"),
62			key.WithHelp("↑↓", "choose"),
63		),
64		k.Select,
65		k.Close,
66	}
67}