1package layout
2
3import (
4 "reflect"
5
6 "github.com/charmbracelet/bubbles/v2/help"
7 "github.com/charmbracelet/bubbles/v2/key"
8 tea "github.com/charmbracelet/bubbletea/v2"
9)
10
11type Focusable interface {
12 Focus() tea.Cmd
13 Blur() tea.Cmd
14 IsFocused() bool
15}
16
17type Sizeable interface {
18 SetSize(width, height int) tea.Cmd
19 GetSize() (int, int)
20}
21
22type Bindings interface {
23 BindingKeys() []key.Binding
24}
25
26type Positionable interface {
27 SetPosition(x, y int) tea.Cmd
28}
29
30type Help interface {
31 Help() help.KeyMap
32}
33
34func KeyMapToSlice(t any) (bindings []key.Binding) {
35 typ := reflect.TypeOf(t)
36 if typ.Kind() != reflect.Struct {
37 return nil
38 }
39 for i := range typ.NumField() {
40 v := reflect.ValueOf(t).Field(i)
41 bindings = append(bindings, v.Interface().(key.Binding))
42 }
43 return
44}