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