Help us shape the future of Go! Take the 2026 Go Developer Survey

tui

package
v0.38.0 Latest Latest
Warning

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

Go to latest
Published: Oct 13, 2026 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Title/Header style - bright cyan, bold
	TitleStyle = renderer.NewStyle().
				Bold(true).
				Foreground(lipgloss.Color("14"))

	// Label style - white (terminal's default light color)
	LabelStyle = renderer.NewStyle().
				Foreground(lipgloss.Color("7"))

	// Value style - bright white
	ValueStyle = renderer.NewStyle().
				Foreground(lipgloss.Color("15"))

	// Command style - bright green, bold (for SSH commands)
	CommandStyle = renderer.NewStyle().
					Foreground(lipgloss.Color("10")).
					Bold(true)

	// Footer style - dark gray
	FooterStyle = renderer.NewStyle().
				Foreground(lipgloss.Color("8"))

	// Empty/placeholder style - dark gray, italic
	EmptyStyle = renderer.NewStyle().
				Foreground(lipgloss.Color("8")).
				Italic(true)
)

Common styles used across TUI components Using basic ANSI colors (0-15) which adapt to terminal themes, ensuring readability on both light and dark backgrounds.

Functions

func FormatSessionDetail added in v0.21.0

func FormatSessionDetail(detail SessionDetail) string

FormatSessionDetail renders a SessionDetail to a string using terminal width

func IsTTY added in v0.21.0

func IsTTY() bool

IsTTY returns whether stdout is a terminal

func PrintSessionDetail added in v0.21.0

func PrintSessionDetail(detail SessionDetail)

PrintSessionDetail prints session detail to stdout

func ReconnectNote added in v0.35.0

func ReconnectNote(detail SessionDetail) string

ReconnectNote says the relay can't bring a dropped session back, from the first connection on and at every status, since it stays true until the session ends. Empty when the relay can, or isn't known to yet.

func RunModel added in v0.21.0

func RunModel(model tea.Model) (tea.Model, error)

RunModel runs a bubbletea model with automatic TTY detection. For non-TTY environments, just prints View() once and returns.

func StatusHint added in v0.35.0

func StatusHint(detail SessionDetail) string

StatusHint is what the user can do about the outage, for the statuses that have one: a reconnecting session, and a disconnected one, whose reason says why it will not come back. Empty for every other status and for a reason without a hint.

func StatusText added in v0.35.0

func StatusText(detail SessionDetail) string

StatusText is the status row's value. A reconnecting session says why it is down, since when, and when it tries next; every other status is its plain word. A disconnected session's hint row says why, and the outage an ended session's record keeps is not something to act on. Times are local, to the second.

Each piece is left out when it isn't known. A next attempt that is not ahead of the clock is left out too: it is stamped as each wait starts, so it is already past during every attempt and after a sleeping machine wakes mid-wait, and printing it would promise a retry that has already happened.

func TermWidth added in v0.35.0

func TermWidth() int

TermWidth returns the terminal width, defaulting to 80 if unavailable

func WrapProse added in v0.35.0

func WrapProse(text string, width int) []string

WrapProse wraps a sentence to width at spaces, as the detail view does for its status and hint rows. Unlike the view it does not look at the terminal: the caller decides whether to wrap at all. Empty text comes back as one empty line, so a row with no value still has a line to print.

Types

type HostSessionConfirmResult

type HostSessionConfirmResult int

HostSessionConfirmResult represents the outcome of a confirmation prompt

const (
	// HostSessionConfirmAccepted indicates the user accepted (pressed 'y')
	HostSessionConfirmAccepted HostSessionConfirmResult = iota
	// HostSessionConfirmRejected indicates the user rejected (pressed 'n')
	HostSessionConfirmRejected
	// HostSessionConfirmInterrupted indicates the user interrupted (pressed Ctrl+C)
	HostSessionConfirmInterrupted
)

type HostSessionModel

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

HostSessionModel handles both session display and confirmation for the host command. It renders the session information and waits for user confirmation (y/n/Ctrl+C) unless auto-accept is enabled.

func NewHostSessionModel

func NewHostSessionModel(detail SessionDetail, autoAccept bool) HostSessionModel

NewHostSessionModel creates a model for displaying session and getting confirmation

func (HostSessionModel) Init

func (m HostSessionModel) Init() tea.Cmd

func (HostSessionModel) Result

Result returns the confirmation result

func (HostSessionModel) Update

func (m HostSessionModel) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (HostSessionModel) View

func (m HostSessionModel) View() string

type SessionDetail added in v0.21.0

type SessionDetail struct {
	IsCurrent        bool
	AdminSocket      string
	Name             string
	Status           string
	SessionID        string
	Command          string
	ForceCommand     string
	Host             string
	JoinCommand      string // upterm join, for guests who have upterm
	SSHCommand       string
	SFTPEnabled      bool   // Whether SFTP/SCP is enabled
	SFTPCommand      string // SFTP command
	SCPUpload        string // SCP upload example
	SCPDownload      string // SCP download example
	AuthorizedKeys   string
	ConnectedClients []string
	// Open is true when anyone with the session ID can join and nobody was
	// asked: no allowlist, and started with --accept.
	Open bool

	// Reconnect is "supported" or "unsupported" once the first connection has
	// shown whether the relay lets a dropped session come back under the same
	// connect string. The tunnel fields describe the latest outage: why the
	// latest attempt failed (one of sessiondir's TunnelReason values), when
	// the outage began, and when the next attempt is due. A live session
	// clears them when its tunnel comes back; only an ended session's record
	// keeps its last outage. They are zero when there has been none or the
	// caller has no record to read them from.
	Reconnect     string
	TunnelReason  string
	TunnelLostAt  time.Time
	NextAttemptAt time.Time
}

SessionDetail holds session information for display

type SessionListModel added in v0.21.0

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

SessionListModel provides an interactive session list using bubbles/table

func NewSessionListModel added in v0.21.0

func NewSessionListModel(sessions []SessionDetail) SessionListModel

NewSessionListModel creates a new interactive session list

func (SessionListModel) Init added in v0.21.0

func (m SessionListModel) Init() tea.Cmd

func (SessionListModel) Update added in v0.21.0

func (m SessionListModel) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (SessionListModel) View added in v0.21.0

func (m SessionListModel) View() string

Jump to

Keyboard shortcuts

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