internal/ui/text.go (74 lines of code) (raw):

package ui import ( "strings" "github.com/charmbracelet/lipgloss" ) // Styles used for rendering output to the terminal. var ( ScenarioTitleStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#6CB6FF")). Align(lipgloss.Center). Bold(true). Underline(true) StepTitleStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#518BAD")). Align(lipgloss.Left). Bold(true) SpinnerStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#518BAD")) VerboseStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#437684")). Align(lipgloss.Left) CheckStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#32CD32")) ErrorStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#FF0000")) ErrorMessageStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#FF5733")) OcdStatusUpdateStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#000000")) ) var ( InteractiveModeCodeBlockDescriptionStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#ffffff")) InteractiveModeCodeBlockStyle = lipgloss.NewStyle(). Foreground(lipgloss.Color("#fff")) InteractiveModeStepTitleStyle = func() lipgloss.Style { b := lipgloss.RoundedBorder() b.Right = "├" return lipgloss.NewStyle().BorderStyle(b).Padding(0, 1) }().Foreground(lipgloss.Color("#518BAD")).Bold(true) InteractiveModeStepFooterStyle = func() lipgloss.Style { b := lipgloss.RoundedBorder() b.Left = "┤" return InteractiveModeStepTitleStyle.Copy().BorderStyle(b) }().Foreground(lipgloss.Color("#fff")) promptTextStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#6CB6FF")) promptDollarStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#32CD32")) ) // Command prompt for interactive environments func CommandPrompt(language string) string { promptText := promptTextStyle.Render(language) promptDollar := promptDollarStyle.Render("$") return promptText + ":" + promptDollar + " " } // Indents a multi-line command to be nested under the first line of the // command. func IndentMultiLineCommand(content string, indentation int) string { lines := strings.Split(content, "\n") for i := 1; i < len(lines); i++ { if strings.HasSuffix(strings.TrimSpace(lines[i-1]), "\\") { lines[i] = strings.Repeat(" ", indentation) + lines[i] } else if strings.TrimSpace(lines[i]) != "" { lines[i] = strings.Repeat(" ", indentation) + lines[i] } } return strings.Join(lines, "\n") } func RemoveHorizontalAlign(s string) string { return strings.Join( mapSliceString( strings.Split(s, "\n"), func(s string) string { return strings.TrimRight(s, " ") }, ), "\n", ) } func mapSliceString(slice []string, apply func(string) string) []string { var result []string for _, s := range slice { result = append(result, apply(s)) } return result }