diff options
author | T <t@tjp.lol> | 2025-09-04 09:13:34 -0600 |
---|---|---|
committer | T <t@tjp.lol> | 2025-09-04 09:22:49 -0600 |
commit | bce8dbb58165e443902d9dae3909225ef42630c4 (patch) | |
tree | 4fc293d46670ab1cb4bb625cc5f0c0859fb3e083 | |
parent | d73e6c488608ee8aea9bc8d025cca08f0834bb13 (diff) |
wrap form field error messages
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | internal/tui/form.go | 42 |
2 files changed, 31 insertions, 13 deletions
@@ -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 |