components

package
v0.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2022 License: MIT Imports: 24 Imported by: 9

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	InputDefaultRequired            = false
	InputDefaultRequiredMsg         = style.New().Fg(color.Red).Render("please input text!")
	InputDefaultRequiredMsgKeepTime = time.Second * 3
	InputDefaultStatus              = Focus
	InputDefaultPrompt              = "> "
	InputDefaultValue               = strx.Empty
	InputDefaultBlinkSpeed          = time.Millisecond * 530
	InputDefaultEchoMode            = EchoNormal
	InputDefaultEchoCharacter       = '*'
	InputDefaultCharLimit           = 0
	InputDefaultQuitKey             = key.NewBinding()
	InputDefaultPlaceholderStyle    = style.New().Fg(color.Gray)
	InputDefaultPromptStyle         = style.New()
	InputDefaultTextStyle           = style.New()
	InputDefaultBackgroundStyle     = style.New()
	InputDefaultCursorStyle         = style.New()
)
View Source
var (
	PrefixFatal = style.New().Fg(color.Red).Render("FATAL ")
	PrefixError = style.New().Fg(color.RedPink).Render("ERROR ")
	PrefixWarn  = style.New().Fg(color.Orange).Render("WARN ")
	PrefixInfo  = style.New().Fg(color.Special).Render("INFO ")
	PrefixDebug = style.New().Fg(color.Gray).Render("DEBUG ")

	PrefixSuccess = style.New().Fg(color.Special).Render("SUCCESS ")
	PrefixFailed  = style.New().Fg(color.Red).Render("FAILED ")
)

default prefix

View Source
var (
	Line = Shape{
		Frames: []string{"|", "/", "-", "\\"},
		FPS:    time.Second / 10,
	}
	Dot = Shape{
		Frames: []string{"⣾ ", "⣽ ", "⣻ ", "⢿ ", "⡿ ", "⣟ ", "⣯ ", "⣷ "},
		FPS:    time.Second / 10,
	}
	MiniDot = Shape{
		Frames: []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"},
		FPS:    time.Second / 12,
	}
	Jump = Shape{
		Frames: []string{"⢄", "⢂", "⢁", "⡁", "⡈", "⡐", "⡠"},
		FPS:    time.Second / 10,
	}
	Pulse = Shape{
		Frames: []string{"█", "▓", "▒", "░"},
		FPS:    time.Second / 8,
	}
	Points = Shape{
		Frames: []string{"∙∙∙", "●∙∙", "∙●∙", "∙∙●"},
		FPS:    time.Second / 7,
	}
	Globe = Shape{
		Frames: []string{"🌍", "🌎", "🌏"},
		FPS:    time.Second / 4,
	}
	Moon = Shape{
		Frames: []string{"🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘"},
		FPS:    time.Second / 8,
	}
	Monkey = Shape{
		Frames: []string{"🙈", "🙉", "🙊"},
		FPS:    time.Second / 3,
	}
	Meter = Shape{
		Frames: []string{
			"▱▱▱",
			"▰▱▱",
			"▰▰▱",
			"▰▰▰",
			"▰▰▱",
			"▰▱▱",
			"▱▱▱",
		},
		FPS: time.Second / 7,
	}
	Hamburger = Shape{
		Frames: []string{"☱", "☲", "☴", "☲"},
		FPS:    time.Second / 3,
	}
	Running = Shape{
		Frames: []string{emoji.Walking, emoji.Running},
		FPS:    time.Second / 6,
	}
)

Some spinners to choose from. You could also make your own.

View Source
var DefaultMultiKeyMap = SelectionKeyMap{
	Up: key.NewBinding(
		key.WithKeys("up"),
		key.WithHelp("↑", "move up"),
	),
	Down: key.NewBinding(
		key.WithKeys("down"),
		key.WithHelp("↓", "move down"),
	),
	Choice: key.NewBinding(
		key.WithKeys("tab"),
		key.WithHelp("tab", "choice it"),
	),
	Confirm: key.NewBinding(
		key.WithKeys("enter"),
		key.WithHelp("enter", "confirm and quit"),
	),
}
View Source
var DefaultSingleKeyMap = SelectionKeyMap{
	Up: key.NewBinding(
		key.WithKeys("up"),
		key.WithHelp("↑", "move up"),
	),
	Down: key.NewBinding(
		key.WithKeys("down"),
		key.WithHelp("↓", "move down"),
	),
	Choice: key.NewBinding(
		key.WithKeys("tab"),
		key.WithHelp("tab", "choice it"),
	),
	Confirm: key.NewBinding(
		key.WithKeys("ctrl+c", "tab"),
		key.WithHelp("ctrl+c/tab", "quit"),
	),
}

Functions

func BlurCmd

func BlurCmd() tea.Msg

func DefaultCostView added in v0.5.1

func DefaultCostView(cost time.Duration, total, current, prevAmount int64) string

func DefaultPercentAgeFunc

func DefaultPercentAgeFunc(total, current int64, percent float64) string

func DefaultRowRender

func DefaultRowRender(cursorSymbol string, hintSymbol string, choice string) string

func FocusCmd

func FocusCmd() tea.Msg

func NewLineSuggestionRender added in v0.6.1

func NewLineSuggestionRender(suggestionItems []string, a *Autocomplete) string

func QuitCmd

func QuitCmd() tea.Msg

func TabSuggestionRender added in v0.6.1

func TabSuggestionRender(suggestionItems []string, a *Autocomplete) string

Types

type Autocomplete added in v0.5.1

type Autocomplete struct {
	/* custom */
	Input                *Input
	Suggester            Suggester
	Completer            Completer
	KeyMap               AutocompleteKeyMap
	SelectionCreator     func(options []string, a *Autocomplete) *Selection
	SuggestionViewRender func(suggestionItems []string, a *Autocomplete) string

	Padding int
	Program *tea.Program
	*PrintHelper
	Selection          *Selection
	ShowSelection      bool
	ShouldNewSelection bool
}

func NewAutocomplete added in v0.5.1

func NewAutocomplete(suggester Suggester) *Autocomplete

NewAutocomplete constructor

func (*Autocomplete) Init added in v0.5.1

func (a *Autocomplete) Init() tea.Cmd

func (*Autocomplete) SetProgram added in v0.5.1

func (a *Autocomplete) SetProgram(program *tea.Program)

func (*Autocomplete) Update added in v0.5.1

func (a *Autocomplete) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Autocomplete) Value added in v0.5.1

func (a *Autocomplete) Value() string

Value get user Input

func (*Autocomplete) View added in v0.5.1

func (a *Autocomplete) View() string

func (*Autocomplete) WithCompleter added in v0.5.2

func (a *Autocomplete) WithCompleter(completer Completer) *Autocomplete

WithCompleter DefaultCompleter

func (*Autocomplete) WithInput added in v0.5.1

func (a *Autocomplete) WithInput(input *Input) *Autocomplete

func (*Autocomplete) WithKeyMap added in v0.5.1

func (a *Autocomplete) WithKeyMap(keyMap AutocompleteKeyMap) *Autocomplete

WithKeyMap DefaultAutocompleteKeyMap

func (*Autocomplete) WithSelectionCreator added in v0.5.1

func (a *Autocomplete) WithSelectionCreator(f func(suggester []string, a *Autocomplete) *Selection) *Autocomplete

WithSelectionCreator DefaultSelectionCreator

func (*Autocomplete) WithSuggestionViewRender added in v0.6.1

func (a *Autocomplete) WithSuggestionViewRender(f func(suggestionItems []string, a *Autocomplete) string) *Autocomplete

WithSuggestionViewRender Two implementations are provided by default: NewLineSuggestionRender or TabSuggestionRender, of course you can also choose to implement your own `render`

type AutocompleteKeyMap added in v0.5.1

type AutocompleteKeyMap struct {
	Quit           key.Binding
	CloseSelection key.Binding
	Up             key.Binding
	Down           key.Binding
	Complete       key.Binding
	GotoEnd        key.Binding
}

func DefaultAutocompleteKeyMap added in v0.5.1

func DefaultAutocompleteKeyMap() AutocompleteKeyMap

type AutocompleteValCtx added in v0.5.2

type AutocompleteValCtx struct {
	Cursor int
	Value  string
	// contains filtered or unexported fields
}

func (AutocompleteValCtx) CursorVal added in v0.5.2

func (a AutocompleteValCtx) CursorVal() string

CursorVal a.Value[:a.Cursor]

func (AutocompleteValCtx) CursorWord added in v0.5.2

func (a AutocompleteValCtx) CursorWord() string

CursorWord current word

type Completer added in v0.5.2

type Completer func(valCtx AutocompleteValCtx, choiceWord string) (newVal string, newCursor int)

Completer result (newValue,newCursor) DefaultCompleter

func DefaultCompleter added in v0.5.2

func DefaultCompleter() Completer

type Components

type Components interface {
	tea.Model

	// SetProgram this method will be called back when the tea.Program starts.
	// please keep passing this method
	SetProgram(program *tea.Program)
}

Components, You can use these components directly:

  1. Input
  2. Selection
  3. Spinner
  4. Autocomplete
  5. Progress

Or use them inline in your custom component, for how to embed them, you can refer to the implementation of `Confirm`.

type CursorMode

type CursorMode int

CursorMode describes the behavior of the cursor.

const (
	CursorBlink CursorMode = iota
	CursorStatic
	CursorHide
)

func (CursorMode) Map

func (CursorMode) String

func (c CursorMode) String() string

String returns the cursor mode in a human-readable format. This method is provisional and for informational purposes only.

type EchoMode

type EchoMode int

EchoMode sets the Input behavior of the text Input field.

const (
	// EchoNormal displays text as is. This is the default behavior.
	EchoNormal EchoMode = iota
	// EchoPassword displays the EchoCharacter mask instead of actual
	// characters.  This is commonly used for password fields.
	EchoPassword
	// EchoNone displays nothing as characters are entered. This is commonly
	// seen for password fields on the command line.
	EchoNone
)

type Input

type Input struct {
	Model textinput.Model

	Required                 bool
	RequiredMsg              string
	RequiredMsgKeepAliveTime time.Duration
	Status                   Status
	Prompt                   string
	DefaultValue             string
	BlinkSpeed               time.Duration
	EchoMode                 EchoMode
	EchoCharacter            rune
	PromptStyle              *style.Style
	TextStyle                *style.Style
	BackgroundStyle          *style.Style
	PlaceholderStyle         *style.Style
	CursorStyle              *style.Style
	// default is disable
	QuitKey key.Binding
	// CharLimit is the maximum amount of characters this Input element will
	// accept. If 0 or less, there's no limit.
	CharLimit int
	// contains filtered or unexported fields
}

Input the Input component.

func NewInput

func NewInput() *Input

NewInput constructor

func (in *Input) Blink() bool

Blink returns whether or not to draw the cursor.

func (*Input) Blur

func (in *Input) Blur()

Blur removes the Focus state on the model. When the model is blurred it can not receive keyboard Input and the cursor will be hidden.

func (*Input) Cursor

func (in *Input) Cursor() int

Cursor returns the cursor position.

func (*Input) CursorEnd

func (in *Input) CursorEnd()

CursorEnd moves the cursor to the end of the Input field.

func (*Input) CursorMode

func (in *Input) CursorMode() CursorMode

CursorMode returns the model's cursor mode. For available cursor modes, see type CursorMode.

func (*Input) CursorStart

func (in *Input) CursorStart()

CursorStart moves the cursor to the start of the Input field.

func (*Input) Focus

func (in *Input) Focus()

Focus sets the Focus state on the model. When the model is in Focus it can receive keyboard Input and the cursor will be hidden.

func (*Input) Focused

func (in *Input) Focused() bool

Focused returns the focus state on the model.

func (*Input) Init

func (in *Input) Init() tea.Cmd

func (*Input) Quit

func (in *Input) Quit()

Quit Input

func (*Input) Reset

func (in *Input) Reset() bool

Reset sets the Input to its default state with no Input. Returns whether or not the cursor blink should reset.

func (*Input) SetCursor

func (in *Input) SetCursor(pos int)

SetCursor moves the cursor to the given position. If the position is out of bounds the cursor will be moved to the start or end accordingly.

func (*Input) SetCursorMode

func (in *Input) SetCursorMode(model CursorMode)

SetCursorMode sets the model's cursor mode. This method returns a command.

For available cursor modes, see type CursorMode.

func (*Input) SetProgram

func (in *Input) SetProgram(program *tea.Program)

func (*Input) Update

func (in *Input) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Input) Value

func (in *Input) Value() string

Value returns the value of the text Input.

func (*Input) View

func (in *Input) View() string

type PrintHelper added in v0.5.4

type PrintHelper struct {
	// contains filtered or unexported fields
}

PrintHelper Used for thread-safe output when running the Components

func NewPrintHelper added in v0.5.4

func NewPrintHelper(program *tea.Program) *PrintHelper

NewPrintHelper constructor

func (PrintHelper) Center added in v0.5.4

func (p PrintHelper) Center(str string)

func (PrintHelper) Debug added in v0.5.4

func (p PrintHelper) Debug(format string, a ...any)

func (PrintHelper) Error added in v0.5.4

func (p PrintHelper) Error(format string, a ...any)

func (PrintHelper) Failed added in v0.5.4

func (p PrintHelper) Failed(format string, a ...any)

func (PrintHelper) Fatal added in v0.5.4

func (p PrintHelper) Fatal(format string, a ...any)

func (PrintHelper) Info added in v0.5.4

func (p PrintHelper) Info(format string, a ...any)

func (PrintHelper) Print added in v0.5.4

func (p PrintHelper) Print(str string)

func (PrintHelper) PrintWithPrefix added in v0.5.4

func (p PrintHelper) PrintWithPrefix(prefix, format string, a ...any)

func (PrintHelper) Success added in v0.5.4

func (p PrintHelper) Success(format string, a ...any)

func (PrintHelper) Warn added in v0.5.4

func (p PrintHelper) Warn(format string, a ...any)

type Progress

type Progress struct {
	*PrintHelper
	Id int
	// the progress total
	Total int64
	// Current amount
	Current int64

	// Total width of the progress bar, including percentage, if set.
	Width int

	// "Filled" sections of the progress bar.
	Full      rune
	FullColor string

	// "Empty" sections of progress bar.
	Empty      rune
	EmptyColor string

	ShowPercentage  bool
	PercentAgeFunc  func(total, current int64, percent float64) string
	PercentAgeStyle *style.Style

	ShowCost bool
	CostView func(cost time.Duration, total, current, prevAmount int64) string

	TickCostDelay time.Duration

	DoneView func() string

	TitleView func() string
	// contains filtered or unexported fields
}

func NewProgress

func NewProgress() *Progress

NewProgress constructor

func (*Progress) Change

func (pro *Progress) Change(amount int64)

Change current val, add or sub.

func (*Progress) Cost added in v0.4.1

func (pro *Progress) Cost() time.Duration

Cost the progress cost. plz make sure Progress.end and Progress.start are not null

func (*Progress) Decr

func (pro *Progress) Decr(amount int64)

Decr current val

func (*Progress) DecrOne

func (pro *Progress) DecrOne()

DecrOne decr one

func (*Progress) Done added in v0.4.1

func (pro *Progress) Done()

Done progress, will output DoneView

func (*Progress) Incr

func (pro *Progress) Incr(amount int64)

Incr current val

func (*Progress) IncrOne

func (pro *Progress) IncrOne()

IncrOne incr one

func (*Progress) Init

func (pro *Progress) Init() tea.Cmd

func (*Progress) Println added in v0.4.2

func (pro *Progress) Println(args ...interface{})

func (*Progress) SetProgram

func (pro *Progress) SetProgram(program *tea.Program)

func (*Progress) Update

func (pro *Progress) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Progress) View

func (pro *Progress) View() string

func (*Progress) ViewAs

func (pro *Progress) ViewAs(percent float64, now time.Time) string

func (*Progress) WithCostView added in v0.4.1

func (pro *Progress) WithCostView(f func(cost time.Duration, total, current, prevAmount int64) string) *Progress

WithCostView append cost view.

func (*Progress) WithDefaultGradient

func (pro *Progress) WithDefaultGradient() *Progress

WithDefaultGradient sets a gradient fill with default colors.

func (*Progress) WithDefaultScaledGradient

func (pro *Progress) WithDefaultScaledGradient() *Progress

WithDefaultScaledGradient sets a gradient with default colors, and scales the gradient to fit the filled portion of the ramp.

func (*Progress) WithDisableCostView added in v0.4.1

func (pro *Progress) WithDisableCostView() *Progress

WithDisableCostView disable cost view

func (*Progress) WithDisablePercentage

func (pro *Progress) WithDisablePercentage() *Progress

WithDisablePercentage disable output percentage.

func (*Progress) WithDoneView added in v0.4.1

func (pro *Progress) WithDoneView(f func() string) *Progress

WithDoneView when Group is done, will callback this func.

func (*Progress) WithEmpty

func (pro *Progress) WithEmpty(empty rune) *Progress

WithEmpty default '░'

func (*Progress) WithEmptyColor

func (pro *Progress) WithEmptyColor(empty string) *Progress

WithEmptyColor default "#606060"

func (*Progress) WithFull

func (pro *Progress) WithFull(full rune) *Progress

WithFull default '█'

func (*Progress) WithFullColor

func (pro *Progress) WithFullColor(full string) *Progress

WithFullColor default "#7571F9"

func (*Progress) WithGradient

func (pro *Progress) WithGradient(colorA, colorB string) *Progress

WithGradient sets a gradient fill blending between two colors.

func (*Progress) WithPercentAgeFunc

func (pro *Progress) WithPercentAgeFunc(f func(total int64, current int64, percent float64) string) *Progress

WithPercentAgeFunc default DefaultPercentAgeFunc

func (*Progress) WithPercentAgeStyle

func (pro *Progress) WithPercentAgeStyle(sty *style.Style) *Progress

WithPercentAgeStyle replace percentage style

func (*Progress) WithScaledGradient

func (pro *Progress) WithScaledGradient(colorA, colorB string) *Progress

WithScaledGradient scales the gradient to fit the width of the filled portion of the progress bar.

func (*Progress) WithSolidFill

func (pro *Progress) WithSolidFill(color string) *Progress

WithSolidFill sets the progress to use a solid fill with the given color.

func (*Progress) WithTickCostDelay added in v0.6.1

func (pro *Progress) WithTickCostDelay(delay time.Duration) *Progress

WithTickCostDelay defaultTicKCostDelay the interval time between each refresh cost time

func (*Progress) WithTitleView added in v0.4.1

func (pro *Progress) WithTitleView(f func() string) *Progress

WithTitleView append title view.

func (*Progress) WithTotal

func (pro *Progress) WithTotal(total int64) *Progress

WithTotal default 100

func (*Progress) WithWidth

func (pro *Progress) WithWidth(w int) *Progress

WithWidth sets the initial width of the progress bar. Note that you can also set the width via the Width property, which can come in handy if you're waiting for a tea.WindowSizeMsg.

type ProgressMsg

type ProgressMsg struct {
	Id     int
	Amount int64
}

type RefreshPromptMsg

type RefreshPromptMsg string

type Selection

type Selection struct {
	// result
	Selected map[int]struct{}

	/* options start */
	Choices []SelectionItem
	// how many options to display at a time
	PageSize            int
	DisableOutPutResult bool

	// key binding
	Keymap SelectionKeyMap
	// key Help text
	Help     help.Model
	ShowHelp bool

	Prompt         string
	CursorSymbol   string
	UnCursorSymbol string
	HintSymbol     string
	UnHintSymbol   string

	PromptStyle       *style.Style
	CursorSymbolStyle *style.Style
	HintSymbolStyle   *style.Style
	UnHintSymbolStyle *style.Style
	ChoiceTextStyle   *style.Style

	// RowRender output options
	// CursorSymbol,HintSymbol,choice
	RowRender func(CursorSymbol string, HintSymbol string, choice string) string

	EnableFilter bool
	FilterInput  *Input
	FilterFunc   func(input string, items []SelectionItem) []SelectionItem
	// contains filtered or unexported fields
}

func DefaultSelectionCreator added in v0.5.1

func DefaultSelectionCreator(suggester []string, a *Autocomplete) *Selection

func NewSelection

func NewSelection(choices []string) *Selection

NewSelection constructor

func (*Selection) Init

func (s *Selection) Init() tea.Cmd

func (*Selection) RenderColor

func (s *Selection) RenderColor()

RenderColor set color to text

func (*Selection) SetProgram

func (s *Selection) SetProgram(program *tea.Program)

func (*Selection) Update

func (s *Selection) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Selection) Value

func (s *Selection) Value() []int

Value get all Selected

func (*Selection) View

func (s *Selection) View() string

type SelectionItem

type SelectionItem struct {
	// contains filtered or unexported fields
}

func DefaultFilterFunc

func DefaultFilterFunc(input string, items []SelectionItem) []SelectionItem

type SelectionKeyMap added in v0.5.1

type SelectionKeyMap struct {
	Up      key.Binding
	Down    key.Binding
	Choice  key.Binding
	Confirm key.Binding
}

func (SelectionKeyMap) FullHelp added in v0.5.1

func (k SelectionKeyMap) FullHelp() [][]key.Binding

func (SelectionKeyMap) ShortHelp added in v0.5.1

func (k SelectionKeyMap) ShortHelp() []key.Binding

type Shape

type Shape struct {
	Frames []string
	FPS    time.Duration
}

Shape the Spinner Shape

type Spinner

type Spinner struct {
	*PrintHelper

	Model spinner.Model

	/* options start */
	Shape               Shape
	ShapeStyle          *style.Style
	Prompt              string
	DisableOutPutResult bool

	Status Status
	// contains filtered or unexported fields
}

func NewSpinner

func NewSpinner() *Spinner

NewSpinner constructor

func (*Spinner) Init

func (s *Spinner) Init() tea.Cmd

func (*Spinner) Quit

func (s *Spinner) Quit()

Quit Spinner

func (*Spinner) Quited

func (s *Spinner) Quited() bool

Quited get quit state.

func (*Spinner) RefreshPrompt

func (s *Spinner) RefreshPrompt(str string)

RefreshPrompt refresh prompt.

func (*Spinner) SetProgram

func (s *Spinner) SetProgram(program *tea.Program)

func (*Spinner) Update

func (s *Spinner) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (*Spinner) View

func (s *Spinner) View() string

type StartUp

type StartUp struct {
	P *tea.Program
	// contains filtered or unexported fields
}

func NewStartUp

func NewStartUp(c Components, ops ...tea.ProgramOption) *StartUp

NewStartUp new StartUp

func (*StartUp) Kill

func (s *StartUp) Kill()

Kill Components

func (*StartUp) Quit added in v0.5.1

func (s *StartUp) Quit()

func (*StartUp) Send

func (s *StartUp) Send(msg tea.Msg)

Send message to component

func (*StartUp) Start

func (s *StartUp) Start() error

type Status

type Status int

Status About the state of the Component

const (
	// Focus only use Input
	Focus Status = iota
	// Blur only use Input
	Blur
	// Quit component
	Quit
	// Normal ignore it
	Normal
)

type Suggester added in v0.5.1

type Suggester func(valCtx AutocompleteValCtx) ([]string, bool)

Suggester get suggest options

Directories

Path Synopsis
input
selection

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL