Documentation
¶
Overview ¶
Package selection implements a selection prompt that allows users to to select one of the pre-defined choices. It also offers customizable appreance and key map as well as optional support for pagination, filtering.
Index ¶
- Constants
- func DefaultFinalChoiceStyle(c *Choice) string
- func DefaultSelectedChoiceStyle(m *Model, obj *Choice, gdIndex int) string
- func DefaultUnselectedChoiceStyle(m *Model, obj *Choice, gdIndex int) string
- func FilterContainsCaseInsensitive(filter string, choice *Choice) bool
- func FilterContainsCaseSensitive(filter string, choice *Choice) bool
- type Choice
- type KeyMap
- type Model
- type Selection
Constants ¶
const ( // DefaultFilterPrompt is the default prompt for the filter input when // filtering is enabled. DefaultFilterPrompt = "Filter:" // DefaultFilterPlaceholder is printed by default when no filter text was // entered yet. DefaultFilterPlaceholder = "Type to filter choices" DefaultCursor = "»" )
const DefaultResultTemplate = `
{{- print .Prompt " " (Final .FinalChoice) "\n" -}}
`
DefaultResultTemplate defines the default appearance with which the finale result of the selection is presented.
const DefaultTemplate = `` /* 377-byte string literal not displayed */
DefaultTemplate defines the default appearance of the selection and can be copied as a starting point for a custom template. {{ .HeadPrompt | bold | cyan }}
Variables ¶
This section is empty.
Functions ¶
func DefaultFinalChoiceStyle ¶
DefaultFinalChoiceStyle is the default style for final choices.
func FilterContainsCaseInsensitive ¶
FilterContainsCaseInsensitive returns true if the string representation of the choice contains the filter string without regard for capitalization.
func FilterContainsCaseSensitive ¶
FilterContainsCaseSensitive returns true if the string representation of the choice contains the filter string respecting capitalization.
Types ¶
type Choice ¶
Choice represents a single choice. This type used as an input for the selection prompt, for filtering and as a result value. The index is populated by the prompt itself and is exported to be accessed when filtering.
type KeyMap ¶
type KeyMap struct {
Down []string
Up []string
Select []string
Abort []string
ClearFilter []string
ScrollDown []string
ScrollUp []string
Left []string
Right []string
}
KeyMap defines the keys that trigger certain actions.
func NewDefaultKeyMap ¶
func NewDefaultKeyMap() *KeyMap
NewDefaultKeyMap returns a KeyMap with sensible default key mappings that can also be used as a starting point for customization.
type Model ¶
type Model struct {
*Selection
// Err holds errors that may occur during the execution of
// the selection prompt.
Err error
// MaxWidth limits the width of the view using the Selection's WrapMode.
MaxWidth int
// contains filtered or unexported fields
}
Model implements the bubbletea.Model for a selection prompt. Model is a data container used to store TUI status information
type Selection ¶
type Selection struct {
// Choices represent all selectable choices of the selection. Slices of
// arbitrary types can be converted to a slice of choices using the helper
// selection.Choices.
Choices []*Choice
// Cursor cursor rendering style
Cursor string
// Prompt holds the the prompt text or question that is to be answered by
// one of the choices.
Prompt string
// FilterPrompt is the prompt for the filter if filtering is enabled.
FilterPrompt string
// Filter is a function that decides whether a given choice should be
// displayed based on the text entered by the user into the filter input
// field. If Filter is nil, filtering will be disabled. By default the
// filter FilterContainsCaseInsensitive is used.
Filter func(filterText string, choice *Choice) bool
// FilterPlaceholder holds the text that is displayed in the filter input
// field when no text was entered by the user yet. If empty, the
// DefaultFilterPlaceholder is used. If Filter is nil, filtering is disabled
// and FilterPlaceholder does nothing.
FilterPlaceholder string
// PageSize is the number of choices that are displayed at once. If PageSize
// is smaller than the number of choices, pagination is enabled. If PageSize
// is 0, pagenation is disabled. Regardless of the value of PageSize,
// pagination is always enabled when the prompt does not fit the terminal.
PageSize int
// Template holds the display template. A custom template can be used to
// completely customize the appearance of the selection prompt. If empty,
// the DefaultTemplate is used. The following variables and functions are
// available:
//
// * Prompt string: The configured prompt.
// * IsFiltered bool: Whether or not filtering is enabled.
// * FilterPrompt string: The configured filter prompt.
// * FilterInput string: The view of the filter input model.
// * Choices []*Choice: The choices on the current page.
// * NChoices int: The number of choices on the current page.
// * SelectedIndex int: The index that is currently selected.
// * PageSize int: The configured page size.
// * IsPaged bool: Whether pagination is currently active.
// * AllChoices []*Choice: All configured choices.
// * NAllChoices int: The number of configured choices.
// * TerminalWidth int: The width of the terminal.
// * Selected(*Choice) string: The configured SelectedChoiceStyle.
// * Unselected(*Choice) string: The configured UnselectedChoiceStyle.
// * IsScrollDownHintPosition(idx int) bool: Returns whether
// the scroll down hint shoud be displayed at the given index.
// * IsScrollUpHintPosition(idx int) bool: Returns whether the
// scroll up hint shoud be displayed at the given index).
// * promptkit.UtilFuncMap: Handy helper functions.
// * termenv TemplateFuncs (see https://github.com/muesli/termenv).
// * The functions specified in ExtendedTemplateFuncs.
Template string
// ResultTemplate is rendered as soon as a choice has been selected.
// It is intended to permanently indicate the result of the prompt when the
// selection itself has disappeared. This template is only rendered in the
// Run() method and NOT when the selection prompt is used as a model. The
// following variables and functions are available:
//
// * FinalChoice: The choice that was selected by the user.
// * Prompt string: The configured prompt.
// * AllChoices []*Choice: All configured choices.
// * NAllChoices int: The number of configured choices.
// * TerminalWidth int: The width of the terminal.
// * Final(*Choice) string: The configured FinalChoiceStyle.
// * promptkit.UtilFuncMap: Handy helper functions.
// * termenv TemplateFuncs (see https://github.com/muesli/termenv).
// * The functions specified in ExtendedTemplateFuncs.
ResultTemplate string
// ExtendedTemplateFuncs can be used to add additional functions to the
// evaluation scope of the templates.
ExtendedTemplateFuncs template.FuncMap
// Styles of the filter input field. These will be applied as inline styles.
//
// For an introduction to styling with Lip Gloss see:
// https://github.com/charmbracelet/lipgloss
FilterInputTextStyle lipgloss.Style
FilterInputBackgroundStyle lipgloss.Style
FilterInputPlaceholderStyle lipgloss.Style
FilterInputCursorStyle lipgloss.Style
// SelectedChoice style allows to customize the appearance of the currently
// selected choice. By default DefaultSelectedChoiceStyle is used. If it is
// nil, no style will be applied and the plain string representation of the
// choice will be used. This style will be available as the template
// function Selected. Custom templates may or may not use this function.
SelectedChoiceStyle func(m *Model, obj *Choice, gdIndex int) string
// SelectedChoiceStyle func(*Choice) string
// UnselectedChoiceStyle style allows to customize the appearance of the
// currently unselected choice. By default it is nil, such that no style
// will be applied and the plain string representation of the choice will be
// used.This style will be available as the template function Unselected.
// Custom templates may or may not use this function.
// UnselectedChoiceStyle func(*Choice) string
UnselectedChoiceStyle func(m *Model, obj *Choice, gdIndex int) string
FinalChoiceStyle func(*Choice) string
// KeyMap determines with which keys the selection prompt is controlled. By
// default, DefaultKeyMap is used.
KeyMap *KeyMap
// WrapMode decides which way the prompt view is wrapped if it does not fit
// the terminal. It can be a WrapMode provided by promptkit or a custom
// function. By default it is promptkit.WordWrap. It can also be nil which
// disables wrapping and likely causes output glitches.
WrapMode common.WrapMode
// Output is the output writer, by default os.Stdout is used.
Output io.Writer
// Input is the input reader, by default, os.Stdin is used.
Input io.Reader
}
Selection represents a configurable selection prompt.