1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package tui
import (
"fmt"
"github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
// Run runs the TUI standalone, useful for development or local usage
func Run(repoDir string) error {
model := Model{
repoDir: repoDir,
help: help.New(),
keys: keys,
activeView: ViewList,
repoForm: newRepoForm(),
}
repos, err := loadRepos(repoDir)
if err != nil {
return fmt.Errorf("failed to load repos: %w", err)
}
model.repos = repos
items := make([]list.Item, len(repos))
for i, repo := range repos {
items[i] = repoItem{repo: repo}
}
delegate := list.NewDefaultDelegate()
delegate.Styles.SelectedTitle = delegate.Styles.SelectedTitle.Foreground(lipgloss.Color("170"))
delegate.Styles.SelectedDesc = delegate.Styles.SelectedDesc.Foreground(lipgloss.Color("244"))
repoList := list.New(items, delegate, 0, 0)
repoList.Title = "Git Repositories"
repoList.SetShowStatusBar(true)
repoList.SetFilteringEnabled(true)
repoList.Styles.Title = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("170")).Padding(0, 0, 0, 2)
repoList.StatusMessageLifetime = 3
model.repoList = repoList
p := tea.NewProgram(model, tea.WithAltScreen(), tea.WithMouseCellMotion())
_, err = p.Run()
return err
}
|