in tui/text_input.go [140:198]
func (p textInput) View() string {
if p.preViewFunc != nil {
p.preViewFunc(p.queue)
}
doc := strings.Builder{}
doc.WriteString(p.queue.header.render())
if p.showProgress {
doc.WriteString(drawProgress(p.queue.calcPercent()))
doc.WriteString("\n\n")
}
doc.WriteString(bodyStyle.Render(titleStyle.Render(fmt.Sprintf("%s: ", p.label))))
doc.WriteString("\n")
inst := strings.Builder{}
for _, v := range p.content {
inst.WriteString(v.render())
}
height := (len(inst.String()) / hardWidthLimit) + 1
content := instructionStyle.
Width(hardWidthLimit).
Height(height).
Render(inst.String())
doc.WriteString(content)
doc.WriteString("\n")
doc.WriteString(inputText.Render(p.ti.View()))
doc.WriteString("\n")
if p.err != nil {
height := len(p.err.Error()) / width
doc.WriteString("\n")
doc.WriteString(alertStyle.Width(width).Height(height).Render(fmt.Sprintf("Error: %s", p.err)))
doc.WriteString("\n")
}
if p.state == "querying" && p.err == nil {
spinnerSB := strings.Builder{}
spinnerSB.WriteString(textStyle.Render(fmt.Sprintf("%s ", p.spinnerLabel)))
spinnerSB.WriteString(spinnerStyle.Render(fmt.Sprintf("%s", p.spinner.View())))
doc.WriteString(bodyStyle.Render(spinnerSB.String()))
doc.WriteString("\n")
}
if p.state != "querying" {
if p.ti.Placeholder != "" {
styledPlaceHolder := textInputDefaultStyle.Render(p.ti.Placeholder)
doc.WriteString(textInputPrompt.Render(fmt.Sprintf("Type a value or hit enter for '%s'", styledPlaceHolder)))
} else {
doc.WriteString(textInputPrompt.Render("Type a value and hit enter to continue"))
}
}
return docStyle.Render(doc.String())
}