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 Help interface {
23 Help() help.KeyMap
24}
25
26type Positionable interface {
27 SetPosition(x, y int) tea.Cmd
28}
29
30func KeyMapToSlice(t any) (bindings []key.Binding) {
31 typ := reflect.TypeOf(t)
32 if typ.Kind() != reflect.Struct {
33 return nil
34 }
35 for i := range typ.NumField() {
36 v := reflect.ValueOf(t).Field(i)
37 bindings = append(bindings, v.Interface().(key.Binding))
38 }
39 return
40}