summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorT <t@tjp.lol>2025-09-04 09:13:34 -0600
committerT <t@tjp.lol>2025-09-04 09:22:49 -0600
commitbce8dbb58165e443902d9dae3909225ef42630c4 (patch)
tree4fc293d46670ab1cb4bb625cc5f0c0859fb3e083
parentd73e6c488608ee8aea9bc8d025cca08f0834bb13 (diff)
wrap form field error messages
-rw-r--r--go.mod2
-rw-r--r--internal/tui/form.go42
2 files changed, 31 insertions, 13 deletions
diff --git a/go.mod b/go.mod
index 3b14e71..8224bda 100644
--- a/go.mod
+++ b/go.mod
@@ -7,6 +7,7 @@ require (
github.com/charmbracelet/bubbletea v1.3.6
github.com/charmbracelet/lipgloss v1.1.0
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3
+ github.com/charmbracelet/x/ansi v0.9.3
github.com/spf13/cobra v1.9.1
modernc.org/sqlite v1.38.2
)
@@ -15,7 +16,6 @@ require (
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/charmbracelet/colorprofile v0.3.1 // indirect
- github.com/charmbracelet/x/ansi v0.9.3 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
diff --git a/internal/tui/form.go b/internal/tui/form.go
index b0ac18d..7f49659 100644
--- a/internal/tui/form.go
+++ b/internal/tui/form.go
@@ -12,6 +12,7 @@ import (
"github.com/charmbracelet/bubbles/textinput"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
+ "github.com/charmbracelet/x/ansi"
)
type suggestionType int
@@ -245,10 +246,35 @@ func (f Form) Update(msg tea.Msg) (Form, tea.Cmd) {
}
func (f Form) View() string {
+ renderedFields := make([]string, len(f.fields))
+ maxFieldWidth := 0
+
+ for i, field := range f.fields {
+ style := f.UnselectedStyle
+ if i == f.selIdx {
+ style = f.SelectedStyle
+ }
+
+ var fieldView string
+ if style != nil {
+ fieldView = style.Render(field.View())
+ } else {
+ fieldView = field.View()
+ }
+ renderedFields[i] = fieldView
+
+ fieldWidth := lipgloss.Width(fieldView)
+ if fieldWidth > maxFieldWidth {
+ maxFieldWidth = fieldWidth
+ }
+ }
+ constraintWidth := max(72, maxFieldWidth)
+
content := ""
if f.err != nil {
- content += errorStyle.Render(f.err.Error()) + "\n\n"
+ wrappedError := ansi.WordwrapWc(f.err.Error(), constraintWidth, " ")
+ content += errorStyle.Render(wrappedError) + "\n\n"
}
for i, field := range f.fields {
@@ -256,19 +282,11 @@ func (f Form) View() string {
content += "\n\n"
}
content += field.label + ":\n"
-
- style := f.UnselectedStyle
- if i == f.selIdx {
- style = f.SelectedStyle
- }
- if style != nil {
- content += style.Render(field.View())
- } else {
- content += field.View()
- }
+ content += renderedFields[i]
if field.Err != nil {
- content += "\n" + errorStyle.Render(field.Err.Error())
+ wrappedError := ansi.WordwrapWc(field.Err.Error(), constraintWidth, " ")
+ content += "\n" + errorStyle.Render(wrappedError)
}
}
return content