1package util
2
3import (
4 "time"
5
6 tea "github.com/charmbracelet/bubbletea/v2"
7)
8
9type Cursor interface {
10 Cursor() *tea.Cursor
11}
12
13type Model interface {
14 tea.Model
15 tea.ViewModel
16}
17
18func CmdHandler(msg tea.Msg) tea.Cmd {
19 return func() tea.Msg {
20 return msg
21 }
22}
23
24func ReportError(err error) tea.Cmd {
25 return CmdHandler(InfoMsg{
26 Type: InfoTypeError,
27 Msg: err.Error(),
28 })
29}
30
31type InfoType int
32
33const (
34 InfoTypeInfo InfoType = iota
35 InfoTypeWarn
36 InfoTypeError
37)
38
39func ReportInfo(info string) tea.Cmd {
40 return CmdHandler(InfoMsg{
41 Type: InfoTypeInfo,
42 Msg: info,
43 })
44}
45
46func ReportWarn(warn string) tea.Cmd {
47 return CmdHandler(InfoMsg{
48 Type: InfoTypeWarn,
49 Msg: warn,
50 })
51}
52
53type (
54 InfoMsg struct {
55 Type InfoType
56 Msg string
57 TTL time.Duration
58 }
59 ClearStatusMsg struct{}
60)
61
62func Clamp(v, low, high int) int {
63 if high < low {
64 low, high = high, low
65 }
66 return min(high, max(low, v))
67}