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}