summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/components
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-06-17 07:09:04 -0500
committeradamdottv <[email protected]>2025-06-17 07:09:04 -0500
commita5da5127faffacd7703fc0dde061ef1f490d3dce (patch)
treeab9c65d0eb45ab9fdc326187ca5881dc9b10936e /packages/tui/internal/components
parentb5a4439704c70a17d661f1984bb030d5325d141a (diff)
downloadopencode-a5da5127faffacd7703fc0dde061ef1f490d3dce.tar.gz
opencode-a5da5127faffacd7703fc0dde061ef1f490d3dce.zip
chore: consolidate chat page into tui.go
Diffstat (limited to 'packages/tui/internal/components')
-rw-r--r--packages/tui/internal/components/chat/editor.go13
-rw-r--r--packages/tui/internal/components/chat/messages.go21
-rw-r--r--packages/tui/internal/components/dialog/complete.go4
-rw-r--r--packages/tui/internal/components/dialog/models.go3
-rw-r--r--packages/tui/internal/components/dialog/permission.go4
-rw-r--r--packages/tui/internal/components/dialog/session.go3
-rw-r--r--packages/tui/internal/components/dialog/theme.go6
-rw-r--r--packages/tui/internal/components/list/list.go4
-rw-r--r--packages/tui/internal/components/status/status.go (renamed from packages/tui/internal/components/core/status.go)6
9 files changed, 38 insertions, 26 deletions
diff --git a/packages/tui/internal/components/chat/editor.go b/packages/tui/internal/components/chat/editor.go
index 349087fbe..a2d33f172 100644
--- a/packages/tui/internal/components/chat/editor.go
+++ b/packages/tui/internal/components/chat/editor.go
@@ -16,12 +16,17 @@ import (
"github.com/sst/opencode/internal/commands"
"github.com/sst/opencode/internal/components/dialog"
"github.com/sst/opencode/internal/image"
- "github.com/sst/opencode/internal/layout"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
)
+type EditorComponent interface {
+ tea.Model
+ tea.ViewModel
+ Value() string
+}
+
type editorComponent struct {
width int
height int
@@ -99,7 +104,7 @@ func (m *editorComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmds []tea.Cmd
var cmd tea.Cmd
switch msg := msg.(type) {
- case dialog.ThemeChangedMsg:
+ case dialog.ThemeSelectedMsg:
m.textarea = createTextArea(&m.textarea)
m.spinner = createSpinner()
return m, m.spinner.Tick
@@ -434,11 +439,11 @@ func createSpinner() spinner.Model {
)
}
-func (m *editorComponent) GetValue() string {
+func (m *editorComponent) Value() string {
return m.textarea.Value()
}
-func NewEditorComponent(app *app.App) layout.ModelWithView {
+func NewEditorComponent(app *app.App) EditorComponent {
s := createSpinner()
ta := createTextArea(nil)
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go
index d0d839845..37e3380ca 100644
--- a/packages/tui/internal/components/chat/messages.go
+++ b/packages/tui/internal/components/chat/messages.go
@@ -12,12 +12,16 @@ import (
"github.com/sst/opencode/internal/app"
"github.com/sst/opencode/internal/components/dialog"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/state"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/pkg/client"
)
+type MessagesComponent interface {
+ tea.Model
+ tea.ViewModel
+}
+
type messagesComponent struct {
app *app.App
width, height int
@@ -69,7 +73,7 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.viewport.GotoBottom()
m.tail = true
return m, nil
- case dialog.ThemeChangedMsg:
+ case dialog.ThemeSelectedMsg:
m.cache.Clear()
m.renderView()
return m, nil
@@ -77,12 +81,12 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.showToolResults = !m.showToolResults
m.renderView()
return m, nil
- case state.SessionSelectedMsg:
+ case app.SessionSelectedMsg:
m.cache.Clear()
cmd := m.Reload()
m.viewport.GotoBottom()
return m, cmd
- case state.SessionClearedMsg:
+ case app.SessionClearedMsg:
m.cache.Clear()
cmd := m.Reload()
return m, cmd
@@ -101,7 +105,12 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if m.tail {
m.viewport.GotoBottom()
}
- case state.StateUpdatedMsg:
+ case client.EventSessionUpdated:
+ m.renderView()
+ if m.tail {
+ m.viewport.GotoBottom()
+ }
+ case client.EventMessageUpdated:
m.renderView()
if m.tail {
m.viewport.GotoBottom()
@@ -389,7 +398,7 @@ func (m *messagesComponent) Reload() tea.Cmd {
}
}
-func NewMessagesComponent(app *app.App) layout.ModelWithView {
+func NewMessagesComponent(app *app.App) MessagesComponent {
customSpinner := spinner.Spinner{
Frames: []string{" ", "┃", "┃"},
FPS: time.Second / 3,
diff --git a/packages/tui/internal/components/dialog/complete.go b/packages/tui/internal/components/dialog/complete.go
index d87a331cf..ca86b00e6 100644
--- a/packages/tui/internal/components/dialog/complete.go
+++ b/packages/tui/internal/components/dialog/complete.go
@@ -6,7 +6,6 @@ import (
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/lipgloss/v2"
"github.com/sst/opencode/internal/components/list"
- "github.com/sst/opencode/internal/layout"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -76,7 +75,8 @@ type CompletionDialogCompleteItemMsg struct {
type CompletionDialogCloseMsg struct{}
type CompletionDialog interface {
- layout.ModelWithView
+ tea.Model
+ tea.ViewModel
SetWidth(width int)
IsEmpty() bool
SetProvider(provider CompletionProvider)
diff --git a/packages/tui/internal/components/dialog/models.go b/packages/tui/internal/components/dialog/models.go
index 616347088..dfb11dffb 100644
--- a/packages/tui/internal/components/dialog/models.go
+++ b/packages/tui/internal/components/dialog/models.go
@@ -13,7 +13,6 @@ import (
"github.com/sst/opencode/internal/app"
"github.com/sst/opencode/internal/components/modal"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/state"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -115,7 +114,7 @@ func (m *modelDialog) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, tea.Sequence(
util.CmdHandler(modal.CloseModalMsg{}),
util.CmdHandler(
- state.ModelSelectedMsg{
+ app.ModelSelectedMsg{
Provider: m.provider,
Model: models[m.selectedIdx],
}),
diff --git a/packages/tui/internal/components/dialog/permission.go b/packages/tui/internal/components/dialog/permission.go
index ba82c876b..1f573e59d 100644
--- a/packages/tui/internal/components/dialog/permission.go
+++ b/packages/tui/internal/components/dialog/permission.go
@@ -6,7 +6,6 @@ import (
"github.com/charmbracelet/bubbles/v2/viewport"
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/lipgloss/v2"
- "github.com/sst/opencode/internal/layout"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -30,7 +29,8 @@ type PermissionResponseMsg struct {
// PermissionDialogComponent interface for permission dialog component
type PermissionDialogComponent interface {
- layout.ModelWithView
+ tea.Model
+ tea.ViewModel
// SetPermissions(permission permission.PermissionRequest) tea.Cmd
}
diff --git a/packages/tui/internal/components/dialog/session.go b/packages/tui/internal/components/dialog/session.go
index 48278d85e..b59ebe3d5 100644
--- a/packages/tui/internal/components/dialog/session.go
+++ b/packages/tui/internal/components/dialog/session.go
@@ -8,7 +8,6 @@ import (
"github.com/sst/opencode/internal/components/list"
"github.com/sst/opencode/internal/components/modal"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/state"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -69,7 +68,7 @@ func (s *sessionDialog) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
s.selectedSessionID = selectedSession.Id
return s, tea.Sequence(
util.CmdHandler(modal.CloseModalMsg{}),
- util.CmdHandler(state.SessionSelectedMsg(&selectedSession)),
+ util.CmdHandler(app.SessionSelectedMsg(&selectedSession)),
)
}
}
diff --git a/packages/tui/internal/components/dialog/theme.go b/packages/tui/internal/components/dialog/theme.go
index 50472428b..63135bc81 100644
--- a/packages/tui/internal/components/dialog/theme.go
+++ b/packages/tui/internal/components/dialog/theme.go
@@ -10,8 +10,8 @@ import (
"github.com/sst/opencode/internal/util"
)
-// ThemeChangedMsg is sent when the theme is changed
-type ThemeChangedMsg struct {
+// ThemeSelectedMsg is sent when the theme is changed
+type ThemeSelectedMsg struct {
ThemeName string
}
@@ -75,7 +75,7 @@ func (t *themeDialog) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
return t, tea.Sequence(
util.CmdHandler(modal.CloseModalMsg{}),
- util.CmdHandler(ThemeChangedMsg{ThemeName: selectedTheme}),
+ util.CmdHandler(ThemeSelectedMsg{ThemeName: selectedTheme}),
)
}
}
diff --git a/packages/tui/internal/components/list/list.go b/packages/tui/internal/components/list/list.go
index fea77e902..cefcaabef 100644
--- a/packages/tui/internal/components/list/list.go
+++ b/packages/tui/internal/components/list/list.go
@@ -4,7 +4,6 @@ import (
"github.com/charmbracelet/bubbles/v2/key"
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/lipgloss/v2"
- "github.com/sst/opencode/internal/layout"
)
type ListItem interface {
@@ -12,7 +11,8 @@ type ListItem interface {
}
type List[T ListItem] interface {
- layout.ModelWithView
+ tea.Model
+ tea.ViewModel
SetMaxWidth(maxWidth int)
GetSelectedItem() (item T, idx int)
SetItems(items []T)
diff --git a/packages/tui/internal/components/core/status.go b/packages/tui/internal/components/status/status.go
index 9540c6c2b..01a2659c6 100644
--- a/packages/tui/internal/components/core/status.go
+++ b/packages/tui/internal/components/status/status.go
@@ -1,4 +1,4 @@
-package core
+package status
import (
"fmt"
@@ -7,13 +7,13 @@ import (
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/lipgloss/v2"
"github.com/sst/opencode/internal/app"
- "github.com/sst/opencode/internal/layout"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
)
type StatusComponent interface {
- layout.ModelWithView
+ tea.Model
+ tea.ViewModel
}
type statusComponent struct {