summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/components
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-06-16 15:58:46 -0500
committeradamdottv <[email protected]>2025-06-16 15:58:52 -0500
commitd6d45bdc6388dcc7e5e5248c6b4645d90159bb18 (patch)
tree011b8409874bcda6d39ae10cfb3bdd2c0bbc956c /packages/tui/internal/components
parent13a83721b076a1201a049ca1e4cebae8896da55b (diff)
downloadopencode-d6d45bdc6388dcc7e5e5248c6b4645d90159bb18.tar.gz
opencode-d6d45bdc6388dcc7e5e5248c6b4645d90159bb18.zip
feat: share and init commands
Diffstat (limited to 'packages/tui/internal/components')
-rw-r--r--packages/tui/internal/components/chat/editor.go18
-rw-r--r--packages/tui/internal/components/dialog/complete.go8
-rw-r--r--packages/tui/internal/components/list/list.go5
3 files changed, 21 insertions, 10 deletions
diff --git a/packages/tui/internal/components/chat/editor.go b/packages/tui/internal/components/chat/editor.go
index 3c005a32e..349087fbe 100644
--- a/packages/tui/internal/components/chat/editor.go
+++ b/packages/tui/internal/components/chat/editor.go
@@ -101,6 +101,8 @@ func (m *editorComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case dialog.ThemeChangedMsg:
m.textarea = createTextArea(&m.textarea)
+ m.spinner = createSpinner()
+ return m, m.spinner.Tick
case dialog.CompletionSelectedMsg:
if msg.IsCommand {
// Execute the command directly
@@ -421,12 +423,8 @@ func createTextArea(existing *textarea.Model) textarea.Model {
return ta
}
-func (m *editorComponent) GetValue() string {
- return m.textarea.Value()
-}
-
-func NewEditorComponent(app *app.App) layout.ModelWithView {
- s := spinner.New(
+func createSpinner() spinner.Model {
+ return spinner.New(
spinner.WithSpinner(spinner.Ellipsis),
spinner.WithStyle(
styles.
@@ -434,6 +432,14 @@ func NewEditorComponent(app *app.App) layout.ModelWithView {
Background(theme.CurrentTheme().Background()).
Width(3)),
)
+}
+
+func (m *editorComponent) GetValue() string {
+ return m.textarea.Value()
+}
+
+func NewEditorComponent(app *app.App) layout.ModelWithView {
+ s := createSpinner()
ta := createTextArea(nil)
return &editorComponent{
diff --git a/packages/tui/internal/components/dialog/complete.go b/packages/tui/internal/components/dialog/complete.go
index 7a15c8c70..d87a331cf 100644
--- a/packages/tui/internal/components/dialog/complete.go
+++ b/packages/tui/internal/components/dialog/complete.go
@@ -13,7 +13,6 @@ import (
)
type CompletionItem struct {
- title string
Title string
Value string
}
@@ -35,8 +34,7 @@ func (ci *CompletionItem) Render(selected bool, width int) string {
if selected {
itemStyle = itemStyle.
- Foreground(t.Primary()).
- Bold(true)
+ Foreground(t.Primary())
}
title := itemStyle.Render(
@@ -62,6 +60,7 @@ type CompletionProvider interface {
GetId() string
GetEntry() CompletionItemI
GetChildEntries(query string) ([]CompletionItemI, error)
+ GetEmptyMessage() string
}
type CompletionSelectedMsg struct {
@@ -250,6 +249,7 @@ func (c *completionDialogComponent) IsEmpty() bool {
func (c *completionDialogComponent) SetProvider(provider CompletionProvider) {
if c.completionProvider.GetId() != provider.GetId() {
c.completionProvider = provider
+ c.list.SetEmptyMessage(" " + provider.GetEmptyMessage())
}
}
@@ -259,7 +259,7 @@ func NewCompletionDialogComponent(completionProvider CompletionProvider) Complet
li := list.NewListComponent(
[]CompletionItemI{},
7,
- "No matches",
+ completionProvider.GetEmptyMessage(),
false,
)
diff --git a/packages/tui/internal/components/list/list.go b/packages/tui/internal/components/list/list.go
index 8be3c7b01..fea77e902 100644
--- a/packages/tui/internal/components/list/list.go
+++ b/packages/tui/internal/components/list/list.go
@@ -18,6 +18,7 @@ type List[T ListItem] interface {
SetItems(items []T)
GetItems() []T
SetSelectedIndex(idx int)
+ SetEmptyMessage(msg string)
IsEmpty() bool
}
@@ -100,6 +101,10 @@ func (c *listComponent[T]) GetItems() []T {
return c.items
}
+func (c *listComponent[T]) SetEmptyMessage(msg string) {
+ c.fallbackMsg = msg
+}
+
func (c *listComponent[T]) IsEmpty() bool {
return len(c.items) == 0
}