|
@@ -2,9 +2,7 @@ package chat
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"strings"
|
|
"strings"
|
|
|
- "time"
|
|
|
|
|
|
|
|
|
|
- "github.com/charmbracelet/bubbles/v2/spinner"
|
|
|
|
|
"github.com/charmbracelet/bubbles/v2/viewport"
|
|
"github.com/charmbracelet/bubbles/v2/viewport"
|
|
|
tea "github.com/charmbracelet/bubbletea/v2"
|
|
tea "github.com/charmbracelet/bubbletea/v2"
|
|
|
"github.com/charmbracelet/lipgloss/v2"
|
|
"github.com/charmbracelet/lipgloss/v2"
|
|
@@ -20,6 +18,7 @@ import (
|
|
|
type MessagesComponent interface {
|
|
type MessagesComponent interface {
|
|
|
tea.Model
|
|
tea.Model
|
|
|
tea.ViewModel
|
|
tea.ViewModel
|
|
|
|
|
+ // View(width int) string
|
|
|
SetSize(width, height int) tea.Cmd
|
|
SetSize(width, height int) tea.Cmd
|
|
|
PageUp() (tea.Model, tea.Cmd)
|
|
PageUp() (tea.Model, tea.Cmd)
|
|
|
PageDown() (tea.Model, tea.Cmd)
|
|
PageDown() (tea.Model, tea.Cmd)
|
|
@@ -36,7 +35,6 @@ type messagesComponent struct {
|
|
|
width, height int
|
|
width, height int
|
|
|
app *app.App
|
|
app *app.App
|
|
|
viewport viewport.Model
|
|
viewport viewport.Model
|
|
|
- spinner spinner.Model
|
|
|
|
|
attachments viewport.Model
|
|
attachments viewport.Model
|
|
|
cache *MessageCache
|
|
cache *MessageCache
|
|
|
rendering bool
|
|
rendering bool
|
|
@@ -47,7 +45,7 @@ type renderFinishedMsg struct{}
|
|
|
type ToggleToolDetailsMsg struct{}
|
|
type ToggleToolDetailsMsg struct{}
|
|
|
|
|
|
|
|
func (m *messagesComponent) Init() tea.Cmd {
|
|
func (m *messagesComponent) Init() tea.Cmd {
|
|
|
- return tea.Batch(m.viewport.Init(), m.spinner.Tick)
|
|
|
|
|
|
|
+ return tea.Batch(m.viewport.Init())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
@@ -94,10 +92,6 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
|
m.tail = m.viewport.AtBottom()
|
|
m.tail = m.viewport.AtBottom()
|
|
|
cmds = append(cmds, cmd)
|
|
cmds = append(cmds, cmd)
|
|
|
|
|
|
|
|
- spinner, cmd := m.spinner.Update(msg)
|
|
|
|
|
- m.spinner = spinner
|
|
|
|
|
- cmds = append(cmds, cmd)
|
|
|
|
|
-
|
|
|
|
|
return m, tea.Batch(cmds...)
|
|
return m, tea.Batch(cmds...)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -307,10 +301,10 @@ func (m *messagesComponent) View() string {
|
|
|
if m.rendering {
|
|
if m.rendering {
|
|
|
return lipgloss.Place(
|
|
return lipgloss.Place(
|
|
|
m.width,
|
|
m.width,
|
|
|
- m.height,
|
|
|
|
|
|
|
+ m.height+1,
|
|
|
lipgloss.Center,
|
|
lipgloss.Center,
|
|
|
lipgloss.Center,
|
|
lipgloss.Center,
|
|
|
- "Loading session...",
|
|
|
|
|
|
|
+ styles.NewStyle().Background(t.Background()).Render("Loading session..."),
|
|
|
styles.WhitespaceStyle(t.Background()),
|
|
styles.WhitespaceStyle(t.Background()),
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
@@ -392,12 +386,6 @@ func (m *messagesComponent) ToolDetailsVisible() bool {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func NewMessagesComponent(app *app.App) MessagesComponent {
|
|
func NewMessagesComponent(app *app.App) MessagesComponent {
|
|
|
- customSpinner := spinner.Spinner{
|
|
|
|
|
- Frames: []string{" ", "┃", "┃"},
|
|
|
|
|
- FPS: time.Second / 3,
|
|
|
|
|
- }
|
|
|
|
|
- s := spinner.New(spinner.WithSpinner(customSpinner))
|
|
|
|
|
-
|
|
|
|
|
vp := viewport.New()
|
|
vp := viewport.New()
|
|
|
attachments := viewport.New()
|
|
attachments := viewport.New()
|
|
|
vp.KeyMap = viewport.KeyMap{}
|
|
vp.KeyMap = viewport.KeyMap{}
|
|
@@ -405,7 +393,6 @@ func NewMessagesComponent(app *app.App) MessagesComponent {
|
|
|
return &messagesComponent{
|
|
return &messagesComponent{
|
|
|
app: app,
|
|
app: app,
|
|
|
viewport: vp,
|
|
viewport: vp,
|
|
|
- spinner: s,
|
|
|
|
|
attachments: attachments,
|
|
attachments: attachments,
|
|
|
showToolDetails: true,
|
|
showToolDetails: true,
|
|
|
cache: NewMessageCache(),
|
|
cache: NewMessageCache(),
|