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 /internal/tui | |
parent | d73e6c488608ee8aea9bc8d025cca08f0834bb13 (diff) |
wrap form field error messages
Diffstat (limited to 'internal/tui')
-rw-r--r-- | internal/tui/form.go | 42 |
1 files changed, 30 insertions, 12 deletions
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 |