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