1package compact
2
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
5)
6
7// KeyMap defines the key bindings for the compact dialog.
8type KeyMap struct {
9 ChangeSelection key.Binding
10 Select key.Binding
11 Y key.Binding
12 N key.Binding
13 Close key.Binding
14}
15
16// DefaultKeyMap returns the default key bindings for the compact dialog.
17func DefaultKeyMap() KeyMap {
18 return KeyMap{
19 ChangeSelection: key.NewBinding(
20 key.WithKeys("tab", "left", "right", "h", "l"),
21 key.WithHelp("tab/←/→", "toggle selection"),
22 ),
23 Select: key.NewBinding(
24 key.WithKeys("enter"),
25 key.WithHelp("enter", "confirm"),
26 ),
27 Y: key.NewBinding(
28 key.WithKeys("y"),
29 key.WithHelp("y", "yes"),
30 ),
31 N: key.NewBinding(
32 key.WithKeys("n"),
33 key.WithHelp("n", "no"),
34 ),
35 Close: key.NewBinding(
36 key.WithKeys("esc", "alt+esc"),
37 key.WithHelp("esc", "cancel"),
38 ),
39 }
40}
41
42// KeyBindings implements layout.KeyMapProvider
43func (k KeyMap) KeyBindings() []key.Binding {
44 return []key.Binding{
45 k.ChangeSelection,
46 k.Select,
47 k.Y,
48 k.N,
49 k.Close,
50 }
51}
52
53// FullHelp implements help.KeyMap.
54func (k KeyMap) FullHelp() [][]key.Binding {
55 m := [][]key.Binding{}
56 slice := k.KeyBindings()
57 for i := 0; i < len(slice); i += 4 {
58 end := min(i+4, len(slice))
59 m = append(m, slice[i:end])
60 }
61 return m
62}
63
64// ShortHelp implements help.KeyMap.
65func (k KeyMap) ShortHelp() []key.Binding {
66 return []key.Binding{
67 k.ChangeSelection,
68 k.Select,
69 k.Close,
70 }
71}