layout.go

 1package layout
 2
 3import (
 4	"reflect"
 5
 6	"github.com/charmbracelet/bubbles/key"
 7	tea "github.com/charmbracelet/bubbletea"
 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 Bindings interface {
22	BindingKeys() []key.Binding
23}
24
25func KeyMapToSlice(t any) (bindings []key.Binding) {
26	typ := reflect.TypeOf(t)
27	if typ.Kind() != reflect.Struct {
28		return nil
29	}
30	for i := range typ.NumField() {
31		v := reflect.ValueOf(t).Field(i)
32		bindings = append(bindings, v.Interface().(key.Binding))
33	}
34	return
35}