Documentation
¶
Overview ¶
Package ui provides reusable interactive terminal UI components, standardized theming, and wrappers around the "charmbracelet/huh" and "charmbracelet/bubbles" libraries.
This package centralizes all interactive CLI components ensuring a consistent user experience and visual identity across the entire eng CLI application. It abstract away the complexity of managing terminal prompts and concurrent spinners.
Available Features ¶
- **Theming**: The `theme.EngTheme()` function supplies a consistent, adaptive light/dark mode HSL color palette across all interactive prompts.
- **Prompts**: Standardized functions for user interaction:
- `Confirm(message string, defaultVal bool)`: Yes/No prompts.
- `Input(message string, defaultVal string)`: Text input.
- `Select(message string, options []string, defaultVal string)`: Single selection.
- `MultiSelect(message string, options []string)`: Multiple selection.
- `Password(message string)`: Secret text input.
- **Spinners**: Beautiful and thread-safe progress spinners.
- `Spinner`: Single operation status and progress.
- `MultiSpinner`: For displaying multiple concurrent operations (e.g., parallel git pulls, downloading files, system updates).
Testing ¶
The prompt functions within this package are exposed as variables (e.g., `var Confirm = ConfirmImpl`) to allow them to be easily mocked during unit testing.
Index ¶
- Variables
- func ConfirmImpl(message string, defaultVal bool) (bool, error)
- func GetTerminalWidth() int
- func HelpFunc(c *cobra.Command, args []string)
- func InputImpl(message, defaultVal string) (string, error)
- func MultiSelectImpl(message string, options, defaultSelected []string) ([]string, error)
- func PasswordImpl(message string) (string, error)
- func RenderContainerTable(stackName string, containerList []containers.ContainerDetail, termWidth int) string
- func RenderStackTable(stacks []containers.Stack, termWidth int) string
- func RunContainersPager(content string) error
- func SelectImpl(message string, options []string, defaultVal string) (string, error)
- func UsageFunc(c *cobra.Command) error
- type MultiSpinner
- type ProgressSpinner
- type Spinner
Constants ¶
This section is empty.
Variables ¶
var ( Confirm = ConfirmImpl Input = InputImpl Select = SelectImpl MultiSelect = MultiSelectImpl Password = PasswordImpl )
Wrapper functions for testing.
var DisableProgress = false
DisableProgress can be set to true in tests to prevent progress goroutines from spawning.
var Out io.Writer = os.Stderr
Out is the writer used for spinner output. Tests may replace it.
Functions ¶
func ConfirmImpl ¶ added in v1.14.0
ConfirmImpl prompts the user with a yes/no question using the default theme.
func GetTerminalWidth ¶ added in v1.29.0
func GetTerminalWidth() int
GetTerminalWidth returns the current terminal width in columns, defaulting to 100 if unparseable.
func HelpFunc ¶ added in v1.27.0
HelpFunc returns a Cobra help function that formats help output using Lip Gloss styles.
func InputImpl ¶ added in v1.14.0
InputImpl prompts the user for text input using the default theme.
func MultiSelectImpl ¶ added in v1.14.0
MultiSelectImpl prompts the user to select multiple options from a list using the default theme.
func PasswordImpl ¶ added in v1.14.0
PasswordImpl prompts the user for a secret text input using the default theme.
func RenderContainerTable ¶ added in v1.28.0
func RenderContainerTable(stackName string, containerList []containers.ContainerDetail, termWidth int) string
RenderContainerTable renders a detailed Lip Gloss table for containers in a specific stack.
func RenderStackTable ¶ added in v1.28.0
func RenderStackTable(stacks []containers.Stack, termWidth int) string
RenderStackTable renders a Lip Gloss table showing high-level status for Compose stacks.
func RunContainersPager ¶ added in v1.29.0
RunContainersPager launches an interactive scrollable viewport displaying rendered container status content.
func SelectImpl ¶ added in v1.14.0
SelectImpl prompts the user to select an option from a list using the default theme.
Types ¶
type MultiSpinner ¶
type MultiSpinner struct {
// contains filtered or unexported fields
}
MultiSpinner manages multiple concurrent progress indicators.
func NewMultiSpinner ¶
func NewMultiSpinner() (*MultiSpinner, error)
NewMultiSpinner creates a new multi-spinner manager.
func (*MultiSpinner) AddSpinner ¶
func (m *MultiSpinner) AddSpinner(text string) ProgressSpinner
AddSpinner adds a new spinner to the display.
type ProgressSpinner ¶ added in v1.14.0
type ProgressSpinner interface {
UpdateText(text string)
Success(text ...interface{})
Fail(text ...interface{})
Warning(text ...interface{})
Info(text ...interface{})
}
ProgressSpinner defines the interface for spinner operations.
type Spinner ¶
type Spinner struct {
// contains filtered or unexported fields
}
Spinner manages progress bars and status updates using Lip Gloss and Bubbles.
func NewProgressSpinner ¶
NewProgressSpinner creates a spinner that displays progress as a bar.
func NewSpinner ¶
NewSpinner creates a new spinner with default theme styling.
func (*Spinner) SetProgressBar ¶
SetProgressBar sets the progress of the bar (0.0 to 1.0).
func (*Spinner) Stop ¶
func (s *Spinner) Stop()
Stop completes progress output and clears active indicator.
func (*Spinner) UpdateMessage ¶
UpdateMessage updates the message displayed next to the progress bar.