tui

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2024 License: MPL-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Black           = lipgloss.Color("#000000")
	DarkRed         = lipgloss.Color("#FF0000")
	Red             = lipgloss.Color("#FF5353")
	Purple          = lipgloss.Color("135")
	Orange          = lipgloss.Color("214")
	Yellow          = lipgloss.Color("#DBBD70")
	Green           = lipgloss.Color("34")
	LightGreen      = lipgloss.Color("86")
	DarkGreen       = lipgloss.Color("#325451")
	GreenBlue       = lipgloss.Color("#00A095")
	DeepBlue        = lipgloss.Color("39")
	LightBlue       = lipgloss.Color("81")
	Blue            = lipgloss.Color("63")
	Violet          = lipgloss.Color("13")
	Grey            = lipgloss.Color("#737373")
	LightGrey       = lipgloss.Color("245")
	LighterGrey     = lipgloss.Color("250")
	EvenLighterGrey = lipgloss.Color("253")
	DarkGrey        = lipgloss.Color("#606362")
	White           = lipgloss.Color("#ffffff")
	OffWhite        = lipgloss.Color("#a8a7a5")
)
View Source
const PromptHeight = 3

Height of prompt including borders

Variables

View Source
var (
	DebugLogLevel = Blue
	InfoLogLevel  = lipgloss.AdaptiveColor{Dark: string(LightGreen), Light: string(Green)}
	ErrorLogLevel = Red
	WarnLogLevel  = Yellow

	LogRecordAttributeKey = lipgloss.AdaptiveColor{Dark: string(White), Light: string(Black)}

	HelpKey = lipgloss.AdaptiveColor{
		Dark:  "ff",
		Light: "",
	}
	HelpDesc = lipgloss.AdaptiveColor{
		Dark:  "248",
		Light: "246",
	}

	InactivePreviewBorder = lipgloss.AdaptiveColor{
		Dark:  "244",
		Light: "250",
	}

	CurrentBackground            = Grey
	CurrentForeground            = White
	SelectedBackground           = lipgloss.Color("110")
	SelectedForeground           = Black
	CurrentAndSelectedBackground = lipgloss.Color("117")
	CurrentAndSelectedForeground = Black

	TitleColor = lipgloss.AdaptiveColor{
		Dark:  "",
		Light: "",
	}

	GroupReportBackgroundColor = EvenLighterGrey
	TaskSummaryBackgroundColor = EvenLighterGrey

	ScrollPercentageBackground = lipgloss.AdaptiveColor{
		Dark:  string(DarkGrey),
		Light: string(EvenLighterGrey),
	}
)
View Source
var (
	Regular = lipgloss.NewStyle()
	Bold    = Regular.Bold(true)
	Padded  = Regular.Padding(0, 1)
	Faint   = Regular.Faint(true)

	Width  = lipgloss.Width
	Height = lipgloss.Height

	Border      = Regular.Border(lipgloss.NormalBorder())
	ThickBorder = Regular.Border(lipgloss.ThickBorder()).BorderForeground(Violet)

	Title          = Padded.Foreground(White).Background(Purple)
	TitleCommand   = Padded.Foreground(White).Background(Blue)
	TitlePath      = Padded.Foreground(White).Background(modulePathColor)
	TitleWorkspace = Padded.Foreground(White).Background(Green)
	TitleID        = Padded.Foreground(White).Background(Green)
	TitleAddress   = Padded.Foreground(White).Background(Blue)
	TitleSerial    = Padded.Foreground(White).Background(Orange)
	TitleTainted   = Padded.Foreground(White).Background(Red)
)

Functions

func Ago

func Ago(now, t time.Time) string
func Breadcrumbs(title string, res resource.Resource, crumbs ...string) string

func CmdHandler

func CmdHandler(msg tea.Msg) tea.Cmd
func NavigateTo(kind Kind, opts ...NavigateOption) tea.Cmd

NavigateTo sends an instruction to navigate to a page with the given model kind, and optionally parent resource.

func OpenEditor added in v0.2.0

func OpenEditor(path string) tea.Cmd

func ReportError

func ReportError(err error) tea.Cmd

func ReportInfo added in v0.1.4

func ReportInfo(msg string, args ...any) tea.Cmd

func YesNoPrompt added in v0.1.10

func YesNoPrompt(prompt string, action tea.Cmd) tea.Cmd

YesNoPrompt sends a message to enable the prompt widget, specifically asking the user for a yes/no answer. If yes is given then the action is invoked.

Types

type Cache added in v0.2.0

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

page Cache: not so much for performance but to retain memory of user actions, e.g. a user may select a particular row in a table, navigate away from the page and later return to the page, and they would expect the same row still to be selected.

func NewCache added in v0.2.0

func NewCache() *Cache

func (*Cache) Exists added in v0.2.0

func (c *Cache) Exists(page Page) bool

func (*Cache) Get added in v0.2.0

func (c *Cache) Get(page Page) tea.Model

func (*Cache) Put added in v0.2.0

func (c *Cache) Put(page Page, model tea.Model)

func (*Cache) Update added in v0.2.0

func (c *Cache) Update(key Page, msg tea.Msg) tea.Cmd

func (*Cache) UpdateAll added in v0.2.0

func (c *Cache) UpdateAll(msg tea.Msg) []tea.Cmd

type ErrorMsg

type ErrorMsg error

type FilterBlurMsg added in v0.1.9

type FilterBlurMsg struct{}

FilterBlurMsg is a request to unfocus the filter widget. It is not acknowledged.

type FilterCloseMsg added in v0.1.9

type FilterCloseMsg struct{}

FilterCloseMsg is a request to close the filter widget. It is not acknowledged.

type FilterFocusReqMsg added in v0.1.9

type FilterFocusReqMsg struct{}

FilterFocusReqMsg is a request to focus the filter widget.

type FilterKeyMsg added in v0.1.9

type FilterKeyMsg tea.KeyMsg

FilterKeyMsg is a key entered by the user into the filter widget

type Helpers

type Helpers struct {
	Modules    *module.Service
	Workspaces *workspace.Service
	Plans      *plan.Service
	Tasks      *task.Service
	States     *state.Service
	Logger     logging.Interface
}

Helper methods for easily surfacing info in the TUI.

TODO: leverage a cache to enhance performance, particularly if we introduce sqlite at some stage. These helpers are invoked on every render, which for a table with, say 40 visible rows, means they are invoked 40 times a render, which is 40 lookups.

func (*Helpers) CostSummary added in v0.5.0

func (h *Helpers) CostSummary(report workspace.CostSummary, inherit lipgloss.Style) string

CostSummary renders a summary of the costs for a workspace.

func (*Helpers) CreateTasks added in v0.2.0

func (h *Helpers) CreateTasks(fn task.SpecFunc, ids ...resource.ID) tea.Cmd

CreateTasks repeatedly invokes fn with each id in ids, creating a task for each invocation. If there is more than one id then a task group is created and the user sent to the task group's page; otherwise if only id is provided, the user is sent to the task's page.

func (*Helpers) CreateTasksWithSpecs added in v0.5.0

func (h *Helpers) CreateTasksWithSpecs(specs ...task.Spec) tea.Cmd

func (*Helpers) CurrentWorkspaceName

func (h *Helpers) CurrentWorkspaceName(workspaceID *resource.ID) string

func (*Helpers) GroupReport added in v0.2.0

func (h *Helpers) GroupReport(group *task.Group, table bool) string

GroupReport renders a colored summary of a task group's task statuses.

func (*Helpers) Module added in v0.2.0

func (h *Helpers) Module(res resource.Resource) *module.Module

func (*Helpers) ModuleCost added in v0.5.0

func (h *Helpers) ModuleCost(mod *module.Module) string

ModuleCost renders the cost of the module's current workspace, if it has one.

func (*Helpers) ModuleCurrentResourceCount added in v0.1.10

func (h *Helpers) ModuleCurrentResourceCount(mod *module.Module) string

func (*Helpers) ModuleCurrentWorkspace added in v0.2.0

func (h *Helpers) ModuleCurrentWorkspace(mod *module.Module) *workspace.Workspace

func (*Helpers) ModulePath

func (h *Helpers) ModulePath(res resource.Resource) string

func (*Helpers) Move added in v0.2.0

func (h *Helpers) Move(workspaceID resource.ID, from state.ResourceAddress) tea.Cmd

func (*Helpers) ResourceReport added in v0.5.0

func (h *Helpers) ResourceReport(report plan.Report, inherit lipgloss.Style) string

ResourceReport renders a colored summary of resource changes as a result of a plan or apply.

func (*Helpers) StateReloadReport added in v0.5.0

func (h *Helpers) StateReloadReport(report state.ReloadSummary, inherit lipgloss.Style) string

StateReloadReport renders a colored summary of changes resulting from a workspace reload.

func (*Helpers) TaskStatus added in v0.2.0

func (h *Helpers) TaskStatus(t *task.Task, background bool) string

TaskStatus provides a rendered colored task status.

func (*Helpers) TaskSummary added in v0.5.0

func (h *Helpers) TaskSummary(t *task.Task, table bool) string

TaskSummary renders a summary of the task's outcome.

func (*Helpers) TaskWorkspace added in v0.2.0

func (h *Helpers) TaskWorkspace(t *task.Task) (resource.Resource, bool)

TaskWorkspace retrieves either the task's workspace if it belongs to a workspace, or if it belongs to a module, then it retrieves the module's current workspace

func (*Helpers) WorkspaceCost added in v0.5.0

func (h *Helpers) WorkspaceCost(ws *workspace.Workspace) string

WorkspaceCost renders the cost of the given workspace.

func (*Helpers) WorkspaceCurrentCheckmark

func (h *Helpers) WorkspaceCurrentCheckmark(ws *workspace.Workspace) string

WorkspaceCurrentCheckmark returns a check mark if the workspace is the current workspace for its module.

func (*Helpers) WorkspaceName

func (h *Helpers) WorkspaceName(res resource.Resource) string

func (*Helpers) WorkspaceReloadReport added in v0.5.0

func (h *Helpers) WorkspaceReloadReport(report workspace.ReloadSummary, inherit lipgloss.Style) string

WorkspaceReloadReport renders a colored summary of workspaces added or removed as a result of a workspace reload.

func (*Helpers) WorkspaceResourceCount

func (h *Helpers) WorkspaceResourceCount(ws *workspace.Workspace) string

type InfoMsg

type InfoMsg string

type Kind

type Kind int
const (
	ModuleListKind Kind = iota
	WorkspaceListKind
	TaskListKind
	TaskKind
	TaskGroupListKind
	TaskGroupKind
	ResourceListKind
	ResourceKind
	LogListKind
	LogKind
)

func FirstPageKind

func FirstPageKind(s string) (Kind, error)

FirstPageKind retrieves the model corresponding to the user requested first page.

func (Kind) String

func (i Kind) String() string

type Maker

type Maker interface {
	Make(id resource.ID, width, height int) (tea.Model, error)
}

Maker makes new models

type ModelHelpBindings

type ModelHelpBindings interface {
	HelpBindings() []key.Binding
}

ModelHelpBindings is implemented by models that surface further help bindings specific to the model.

type ModelStatus

type ModelStatus interface {
	Status() string
}

ModelID is implemented by models that are able to provide a unique identification string.

type ModelTitle

type ModelTitle interface {
	Title() string
}

ModelTitle is implemented by models that show a title

type NavigateOption func(msg *NavigationMsg)

func WithParent

func WithParent(parent resource.ID) NavigateOption
type NavigationMsg struct {
	Page Page
	Tag  int
}

NavigationMsg is an instruction to navigate to a page.

func NewNavigationMsg

func NewNavigationMsg(kind Kind, opts ...NavigateOption) NavigationMsg

type Page

type Page struct {
	// The model kind. Identifies the model maker to construct the page.
	Kind Kind
	// The ID of the resource for a model. In the case of global listings of
	// modules, workspaces, etc, this is the global resource.
	ID resource.ID
}

Page identifies an instance of a model

type Prompt added in v0.1.10

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

Prompt is a widget that prompts the user for input and triggers an action.

func NewPrompt added in v0.1.10

func NewPrompt(msg PromptMsg) (*Prompt, tea.Cmd)
func (p *Prompt) HandleBlink(msg tea.Msg) (cmd tea.Cmd)

HandleBlink handles the bubbletea blink message.

func (*Prompt) HandleKey added in v0.1.10

func (p *Prompt) HandleKey(msg tea.KeyMsg) (closePrompt bool, cmd tea.Cmd)

HandleKey handles the user key press, and returns a command to be run, and whether the prompt should be closed.

func (*Prompt) HelpBindings added in v0.1.10

func (p *Prompt) HelpBindings() []key.Binding

func (*Prompt) View added in v0.1.10

func (p *Prompt) View(width int) string

type PromptAction added in v0.1.10

type PromptAction func(text string) tea.Cmd

type PromptMsg added in v0.1.10

type PromptMsg struct {
	// Prompt to display to the user.
	Prompt string
	// Set initial value for the user to edit.
	InitialValue string
	// Action to carry out when key is pressed.
	Action PromptAction
	// Key that when pressed triggers the action and closes the prompt.
	Key key.Binding
	// Cancel is a key that when pressed skips the action and closes the prompt.
	Cancel key.Binding
	// CancelAnyOther, if true, checks if any key other than that specified in
	// Key is pressed. If so then the action is skipped and the prompt is
	// closed. Overrides Cancel key binding.
	CancelAnyOther bool
}

PromptMsg enables the prompt widget.

type Viewport added in v0.2.0

type Viewport struct {
	Autoscroll bool
	// contains filtered or unexported fields
}

Viewport is a wrapper of the upstream viewport bubble.

func NewViewport added in v0.2.0

func NewViewport(opts ViewportOptions) Viewport

func (*Viewport) AppendContent added in v0.2.0

func (m *Viewport) AppendContent(content string, finished bool) (err error)

func (Viewport) Init added in v0.2.0

func (m Viewport) Init() tea.Cmd

func (*Viewport) SetDimensions added in v0.2.0

func (m *Viewport) SetDimensions(width, height int)

func (Viewport) Update added in v0.2.0

func (m Viewport) Update(msg tea.Msg) (Viewport, tea.Cmd)

func (Viewport) View added in v0.2.0

func (m Viewport) View() string

type ViewportOptions added in v0.2.0

type ViewportOptions struct {
	Width      int
	Height     int
	JSON       bool
	Border     bool
	Autoscroll bool
	Spinner    *spinner.Model
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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