1package permissions
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5)
6
7type KeyMap struct {
8 Left,
9 Right,
10 Tab,
11 Select,
12 Allow,
13 AllowSession,
14 Deny key.Binding
15}
16
17func DefaultKeyMap() KeyMap {
18 return KeyMap{
19 Left: key.NewBinding(
20 key.WithKeys("left", "h"),
21 key.WithHelp("←", "previous"),
22 ),
23 Right: key.NewBinding(
24 key.WithKeys("right", "l"),
25 key.WithHelp("→", "next"),
26 ),
27 Tab: key.NewBinding(
28 key.WithKeys("tab"),
29 key.WithHelp("tab", "switch"),
30 ),
31 Allow: key.NewBinding(
32 key.WithKeys("a", "ctrl+a"),
33 key.WithHelp("a", "allow"),
34 ),
35 AllowSession: key.NewBinding(
36 key.WithKeys("s", "ctrl+s"),
37 key.WithHelp("s", "allow session"),
38 ),
39 Deny: key.NewBinding(
40 key.WithKeys("d", "ctrl+d"),
41 key.WithHelp("d", "deny"),
42 ),
43 Select: key.NewBinding(
44 key.WithKeys("enter", "tab", "ctrl+y"),
45 key.WithHelp("enter", "confirm"),
46 ),
47 }
48}
49
50// KeyBindings implements layout.KeyMapProvider
51func (k KeyMap) KeyBindings() []key.Binding {
52 return []key.Binding{
53 k.Left,
54 k.Right,
55 k.Tab,
56 k.Select,
57 k.Allow,
58 k.AllowSession,
59 k.Deny,
60 }
61}
62
63// FullHelp implements help.KeyMap.
64func (k KeyMap) FullHelp() [][]key.Binding {
65 m := [][]key.Binding{}
66 slice := k.KeyBindings()
67 for i := 0; i < len(slice); i += 4 {
68 end := min(i+4, len(slice))
69 m = append(m, slice[i:end])
70 }
71 return m
72}
73
74// ShortHelp implements help.KeyMap.
75func (k KeyMap) ShortHelp() []key.Binding {
76 return []key.Binding{
77 k.Allow,
78 k.AllowSession,
79 k.Deny,
80 k.Select,
81 }
82}