Documentation
¶
Index ¶
- Constants
- type ConfirmModel
- type LoginFlowModel
- type LoginFlowOptions
- type LoginMethod
- type LoginResult
- type MarkdownViewportModel
- type OrbInitCategory
- type OrbInitFlowModel
- type OrbInitFlowOptions
- type OrbInitResult
- type PreambleModel
- type PromptModel
- type RunCreatedFilter
- type RunGetAction
- type RunGetError
- type RunGetExecution
- type RunGetFlowModel
- type RunGetFlowOptions
- type RunGetItem
- type RunGetResult
- type RunGetStepItem
- type RunGetTestItem
- type RunScopeKind
- type RunStatusFilter
- type SecretModel
- type SelectModel
- type SpinnerModel
- type ThemePickerModel
Constants ¶
MarkdownViewportFooterHeight is the number of rows reserved below the viewport for the footer (one blank separator row + the help line). Callers use it to decide whether content fits on one screen.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ConfirmModel ¶
type ConfirmModel struct {
// contains filtered or unexported fields
}
ConfirmModel is a bubbletea model for a y/N confirmation prompt. Press y/Y to confirm, n/N/esc/ctrl+c to decline.
func NewConfirmModel ¶
func NewConfirmModel(prompt string) ConfirmModel
func (ConfirmModel) Confirmed ¶
func (m ConfirmModel) Confirmed() bool
func (ConfirmModel) Done ¶
func (m ConfirmModel) Done() bool
func (ConfirmModel) Init ¶
func (m ConfirmModel) Init() tea.Cmd
func (ConfirmModel) View ¶
func (m ConfirmModel) View() tea.View
type LoginFlowModel ¶
type LoginFlowModel struct {
// contains filtered or unexported fields
}
LoginFlowModel is a multi-stage bubbletea model that walks the user through CircleCI authentication:
- Pick a CircleCI host (circleci.com or a custom URL).
- Pick an auth method (browser OAuth or paste a token). 3a. For browser OAuth: press Enter → open browser → wait for callback. 3b. For token: type/paste the personal access token.
After tea.Program.Run() returns, call Result() to read the outcome and Close() to release the OAuth server if one was started.
func NewLoginFlow ¶
func NewLoginFlow(ctx context.Context, opts LoginFlowOptions) LoginFlowModel
NewLoginFlow returns a LoginFlowModel ready to pass to tea.NewProgram.
func (LoginFlowModel) Close ¶
func (m LoginFlowModel) Close()
Close shuts down the OAuth callback server if one was started.
func (LoginFlowModel) Init ¶
func (m LoginFlowModel) Init() tea.Cmd
func (LoginFlowModel) Result ¶
func (m LoginFlowModel) Result() LoginResult
Result returns the final login outcome. Only valid after tea.Program.Run() returns.
func (LoginFlowModel) View ¶
func (m LoginFlowModel) View() tea.View
type LoginFlowOptions ¶
type LoginFlowOptions struct {
DeviceID string
OSInfo string
Signup bool
CallbackTimeout time.Duration
// GetUser, if non-nil, is called after token exchange to display
// the authenticated user's login name.
GetUser func(ctx context.Context, host, token string) (id uuid.UUID, username string, err error)
Color bool
}
LoginFlowOptions configures a LoginFlowModel.
type LoginMethod ¶
type LoginMethod int
LoginMethod indicates which authentication path the user selected.
const (
LoginMethodBrowser LoginMethod = iota
)
LoginMethodBrowser selects the browser-based OAuth PKCE flow.
type LoginResult ¶
type LoginResult struct {
Cancelled bool
Host string // resolved base URL
Token string // set when auth succeeds (either method)
UserID uuid.UUID // set when GetUser is provided and succeeds
Username string // set when GetUser is provided and succeeds
Err error
}
LoginResult is the outcome of a completed LoginFlowModel run.
type MarkdownViewportModel ¶
type MarkdownViewportModel struct {
// contains filtered or unexported fields
}
MarkdownViewportModel is a full-screen pager for rendered markdown. It is a thin host around components.PagerModel (which provides the scrollable viewport, less-style "/" search and footer), adding the markdown-specific bindings: q and esc quit, and esc first dismisses an active search.
Content is produced by a render callback so the markdown can be re-wrapped to the live terminal width whenever the window is resized.
func NewMarkdownViewportModel ¶
func NewMarkdownViewportModel(render func(width int) string) MarkdownViewportModel
NewMarkdownViewportModel returns a pager that displays the markdown produced by render. render is given the column width the content must fit into and is re-invoked on every resize so the markdown re-wraps.
func (MarkdownViewportModel) Init ¶
func (m MarkdownViewportModel) Init() tea.Cmd
func (MarkdownViewportModel) View ¶
func (m MarkdownViewportModel) View() tea.View
type OrbInitCategory ¶
OrbInitCategory is one selectable orb category. The flow keeps this decoupled from the API client's own category type (like RunGetItem for the run flow).
type OrbInitFlowModel ¶
type OrbInitFlowModel struct {
// contains filtered or unexported fields
}
OrbInitFlowModel is a multi-stage bubbletea model that walks the user through scaffolding a new orb: pick public/private, choose automated setup or a bare template download, then (for automated setup) gather the org, namespace, orb name, categories, publishing-context and git choices. It performs the three gating operations (template download, orb-existence check, category list) via injected callbacks and reports every decision through Result().
func NewOrbInitFlow ¶
func NewOrbInitFlow(ctx context.Context, opts OrbInitFlowOptions) OrbInitFlowModel
NewOrbInitFlow returns an OrbInitFlowModel ready to pass to tea.NewProgram. The initial stage honors any flags supplied in opts.
func (OrbInitFlowModel) Init ¶
func (m OrbInitFlowModel) Init() tea.Cmd
func (OrbInitFlowModel) Result ¶
func (m OrbInitFlowModel) Result() OrbInitResult
Result returns the final outcome. Only valid after tea.Program.Run() returns.
func (OrbInitFlowModel) View ¶
func (m OrbInitFlowModel) View() tea.View
type OrbInitFlowOptions ¶
type OrbInitFlowOptions struct {
// Path is the target directory. It seeds the default orb name (its final
// segment) and the default remote URL.
Path string
// Private / TemplateOnly / OrgSlug / SkipGit mirror the command flags. A
// non-zero value skips the matching prompt: --private skips the visibility
// picker, --template-only skips the mode picker, --org skips the org prompt,
// and --skip-git skips the git-setup confirm (forcing GitSetup off).
Private bool
TemplateOnly bool
OrgSlug string
SkipGit bool
// Branch is the default primary branch (the --branch flag, default "main").
Branch string
// Remote is the --remote flag; unused by the interactive flow (which always
// prompts for it) but carried for symmetry.
Remote string
// ExistingRemote and ExistingBranch are what the git repository already at
// Path has configured, empty when there is no repository or the value is not
// set there yet. When a value is present its prompt is skipped: asking for a
// remote URL that is sitting in .git/config is asking the author to retype
// something the CLI can read, and lets them mistype it.
ExistingRemote string
ExistingBranch string
// Download fetches and extracts the orb template into Path, removing the
// template LICENSE when private is true. Shown behind a spinner.
Download func(ctx context.Context, private bool) error
// GetOrb reports whether an orb already exists under the given full name
// ("namespace/orb"). Shown behind a spinner.
GetOrb func(ctx context.Context, fullName string) (exists bool, err error)
// ListCategories lists the assignable orb categories. Shown behind a spinner;
// an empty list skips the category picker entirely.
ListCategories func(ctx context.Context) ([]OrbInitCategory, error)
Color bool
// Animate reports whether the loading spinner should animate. Pass false when
// CIRCLE_SPINNER_DISABLED is set so the loading line stays static.
Animate bool
}
OrbInitFlowOptions configures an OrbInitFlowModel. The callbacks keep the program decoupled from the API client and filesystem: the caller supplies closures for the three operations the wizard has to run between prompts.
type OrbInitResult ¶
type OrbInitResult struct {
Cancelled bool
// Err is set when a download / orb-lookup / category-list callback failed.
Err error
Private bool
TemplateOnly bool
OrgSlug string
Namespace string
OrbName string
Categories []OrbInitCategory
SetupContext bool
GitSetup bool
Branch string
Remote string
}
OrbInitResult is the outcome of a completed OrbInitFlowModel run, read via Result() after tea.Program.Run() returns. When Cancelled or Err is set the remaining fields are not meaningful; otherwise they carry every decision the caller needs to apply the setup (create the namespace/orb, assign categories, set up git, and so on).
type PreambleModel ¶
type PreambleModel struct {
// contains filtered or unexported fields
}
PreambleModel is a bubbletea model for an "Enter to continue · Esc to cancel" gate shown before a multi-step orchestrator runs. Default is opt-in: Enter proceeds, Esc/Ctrl+C cancels.
func NewPreambleModel ¶
func NewPreambleModel(title, dir string, bullets []string) PreambleModel
NewPreambleModel returns a PreambleModel rendering the given title, bullet lines, and directory context.
func (PreambleModel) Done ¶
func (m PreambleModel) Done() bool
Done reports whether the user has made a choice.
func (PreambleModel) Init ¶
func (m PreambleModel) Init() tea.Cmd
func (PreambleModel) Proceed ¶
func (m PreambleModel) Proceed() bool
Proceed reports whether the user pressed Enter to continue. False when cancelled via Esc or Ctrl+C.
func (PreambleModel) View ¶
func (m PreambleModel) View() tea.View
type PromptModel ¶
type PromptModel struct {
// contains filtered or unexported fields
}
PromptModel is a bubbletea model for prompting a single line of plain (non-secret) text. Esc / Ctrl+C cancel. Enter confirms.
func NewPromptModel ¶
func NewPromptModel(header, placeholder, defaultVal string) PromptModel
NewPromptModel creates a PromptModel with the given header, an optional placeholder shown inside the empty input field, and an optional default value accepted when the user presses Enter with an empty field.
func (PromptModel) Init ¶
func (m PromptModel) Init() tea.Cmd
func (PromptModel) Quitting ¶
func (m PromptModel) Quitting() bool
Quitting reports whether the user pressed Esc or Ctrl+C without confirming.
func (PromptModel) View ¶
func (m PromptModel) View() tea.View
type RunCreatedFilter ¶
RunCreatedFilter narrows runs by creation time relative to now, as chosen on the filter dialog's "Created" tab. Duration is the relative window (e.g. 24h); a zero Duration means no created filter is active. Newer keeps runs created within the window (newer than now-Duration); when false — the default — it keeps runs older than now-Duration. Label is the human wording of the window (e.g. "24 Hours") for the picker title.
func (RunCreatedFilter) Active ¶
func (f RunCreatedFilter) Active() bool
Active reports whether a created filter is set (a duration was chosen). The caller resolves the actual [from, to] window it requests (an "older than" query needs an explicit lower bound so the API does not apply its short default; see RUN_DATE_RANGES.md and createdWindow in internal/cmd/run).
type RunGetAction ¶
type RunGetAction int
RunGetAction is the terminal choice the user reached in the run-get flow.
const ( // RunGetActionCancel means the user quit (esc on the first picker, ctrl+c // anywhere) without choosing what to display. RunGetActionCancel RunGetAction = iota // RunGetActionShowRun displays the whole run (all its workflows). RunGetActionShowRun // RunGetActionShowWorkflow displays a single workflow (all its jobs). RunGetActionShowWorkflow // RunGetActionShowJob displays a single job. RunGetActionShowJob // RunGetActionShowJobOutput displays the full per-step output report for a // job (the equivalent of "circleci job output list"). RunGetActionShowJobOutput )
type RunGetError ¶
RunGetError is a single run-level error (type + message) surfaced under the workflow picker title.
type RunGetExecution ¶
type RunGetExecution struct {
Label string
Icon string
Index int
Steps []RunGetStepItem
}
RunGetExecution is one parallel execution of a job, carrying its steps. When a job's parallelism is greater than one the flow inserts an execution picker before the step picker; with a single execution that picker is skipped.
type RunGetFlowModel ¶
type RunGetFlowModel struct {
// contains filtered or unexported fields
}
RunGetFlowModel is a single multi-stage bubbletea program that drives the interactive "circleci run get" flow by composing components.SelectModel and a spinner:
- Pick a run from the recent list.
- Pick a workflow, or "see all workflows" (→ RunGetActionShowRun).
- Pick a job, or "all jobs in workflow" (→ RunGetActionShowWorkflow).
- For a job with parallelism > 1, pick an execution (skipped otherwise).
- Pick a step, or one of three summaries — "job report" (→ RunGetActionShowJob), the full per-step output report (→ RunGetActionShowJobOutput), or "failed tests", which opens a further picker of the job's failed tests. The cursor starts on the first failed step. Picking a step opens its output in an in-flow pager (r refreshes, esc returns to the step picker) rather than ending the program.
- From the failed-tests picker, picking a test opens its message in the same pager (esc returns to the test picker).
Between selections the next level's items are fetched off the Update loop via a tea.Cmd, with a spinner shown meanwhile. esc moves back one step (on the first picker it quits); ctrl+c quits anywhere. After Run() returns, read the outcome with Result(); the caller then prints the corresponding summary.
func NewRunGetFlow ¶
func NewRunGetFlow(ctx context.Context, opts RunGetFlowOptions) RunGetFlowModel
NewRunGetFlow returns a RunGetFlowModel ready to pass to tea.NewProgram.
func (RunGetFlowModel) Init ¶
func (m RunGetFlowModel) Init() tea.Cmd
func (RunGetFlowModel) Result ¶
func (m RunGetFlowModel) Result() RunGetResult
Result returns the final outcome. Only valid after tea.Program.Run() returns.
func (RunGetFlowModel) View ¶
func (m RunGetFlowModel) View() tea.View
type RunGetFlowOptions ¶
type RunGetFlowOptions struct {
// Runs is an optional pre-loaded run list. When non-nil the model skips the
// initial fetch and opens the picker immediately. When nil, Init() fetches
// runs for the InitialScope asynchronously.
Runs []RunGetItem
FetchWorkflows func(ctx context.Context, runID uuid.UUID) ([]RunGetItem, error)
FetchJobs func(ctx context.Context, workflowID uuid.UUID) ([]RunGetItem, error)
FetchExecutions func(ctx context.Context, jobID uuid.UUID) ([]RunGetExecution, error)
// FetchStepStdout reads a step's stdout from byte offset, returning the new
// bytes (raw, ANSI intact) and whether stdout has finished. The pager polls
// this until terminal. FetchStepStderr reads the step's full stderr once
// stdout terminates (stdout always completes first).
FetchStepStdout func(ctx context.Context, jobID uuid.UUID, execution, stepNum int, offset int64) (data []byte, terminal bool, err error)
FetchStepStderr func(ctx context.Context, jobID uuid.UUID, execution, stepNum int) ([]byte, error)
// FetchFailedTests lists a job's failed tests for the "failed tests" picker.
// Each item carries the message shown in the pager when the test is picked.
FetchFailedTests func(ctx context.Context, jobID uuid.UUID) ([]RunGetTestItem, error)
// RenderRunSummary returns the run summary (all workflows) as markdown, shown
// in an in-flow pager when "see all workflows" is chosen so esc returns to the
// workflow picker rather than quitting the flow. When nil (or RenderMarkdown is
// nil) the option instead quits with RunGetActionShowRun and the caller prints
// the summary itself. RenderMarkdown renders the returned markdown.
RenderRunSummary func(ctx context.Context, runID uuid.UUID) (string, error)
// RenderWorkflowSummary is the counterpart for the "all jobs in workflow"
// option: it returns the workflow summary (all jobs) as markdown, shown in an
// in-flow pager whose esc returns to the job picker. When nil the option quits
// with RunGetActionShowWorkflow instead.
RenderWorkflowSummary func(ctx context.Context, workflowID uuid.UUID) (string, error)
// RenderJobSummary returns the job report (the short per-job summary) as
// markdown for the "job report" option, and RenderJobOutput the full per-step
// output report for the "full job report" option. Both are shown in an in-flow
// pager whose esc returns to whichever picker offered them (the execution
// picker for a parallel job, else the step picker). When nil the option quits
// with RunGetActionShowJob / RunGetActionShowJobOutput instead.
RenderJobSummary func(ctx context.Context, jobID uuid.UUID) (string, error)
RenderJobOutput func(ctx context.Context, jobID uuid.UUID) (string, error)
Color bool
// Animate reports whether the loading spinner should animate. Pass false when
// CIRCLE_SPINNER_DISABLED is set (or the session is non-interactive) so the
// loading line stays static instead of repainting.
Animate bool
// CurrentBranch is the branch the initial Runs were fetched for (or that
// the initial scope-based fetch will target). When FetchRuns is non-nil
// (project available), the picker offers branch scopes and optionally "my
// runs". When FetchRuns is nil (no project), only the "my runs" scope is
// available.
CurrentBranch string
// DefaultBranch is the project's default branch. When it differs from
// CurrentBranch a second branch scope is added to the toggle cycle. When
// empty or equal to CurrentBranch the extra scope is omitted.
DefaultBranch string
// FetchRuns lists runs for a branch. The status argument is the active
// status filter ("" = every status). The created argument is the active
// "Created" filter from the filter dialog.
FetchRuns func(ctx context.Context, branch, status string, created RunCreatedFilter) ([]RunGetItem, error)
// FetchMyRuns lists the authenticated user's recent runs across all projects
// (the counterpart to "circleci my runs"). When set, the run picker's
// shift+tab cycle gains a "my runs" scope that fetches via this callback
// rather than by branch; when nil the scope is omitted. status and created are
// the active status and created filters, as for FetchRuns.
FetchMyRuns func(ctx context.Context, status string, created RunCreatedFilter) ([]RunGetItem, error)
// InitialScope selects which scope the picker opens on. The default
// (ScopeCurrentBranch) starts on the current branch. Use ScopeMyRuns to
// open on the user's runs. When FetchRuns is nil, InitialScope is ignored
// and "my runs" is the only available scope.
InitialScope RunScopeKind
// StatusFilters are the pipeline statuses the "s" key cycles through, in
// order. The picker prepends an "all statuses" (no filter) entry, so pressing
// "s" cycles no-filter → each status → back. When empty, the "s" action is
// omitted.
StatusFilters []RunStatusFilter
// RenderMarkdown renders markdown as styled text wrapped to width columns,
// backing the "?" keyboard-shortcut help overlay the pickers offer. The flow
// supplies its own help markdown; the caller only provides the renderer (which
// keeps the ui package decoupled from glamour). When nil, the "?" key is inert
// and no help hint is shown.
RenderMarkdown func(md string, width int) string
}
RunGetFlowOptions configures a RunGetFlowModel. The fetch callbacks keep this program decoupled from the API client: the caller supplies closures that return each level's items on demand. When Runs is nil the model fetches its own initial data on Init() based on InitialScope; when Runs is pre-populated the model starts directly on the run picker (useful for tests).
type RunGetItem ¶
type RunGetItem struct {
Label string
Icon string
ID uuid.UUID
// Errors, set only for run rows, are the run's config/setup errors. When the
// run is selected they are shown beneath the workflow picker's title so a run
// that produced no workflows (e.g. a config that failed to compile) explains
// itself rather than presenting an empty list.
Errors []RunGetError
}
RunGetItem is one selectable row: a display label, an optional status symbol (uncolored — the flow colors it when color is enabled), and the UUID it maps to.
type RunGetResult ¶
type RunGetResult struct {
Action RunGetAction
RunID uuid.UUID
WorkflowID uuid.UUID
JobID uuid.UUID
// Err is set when a mid-flow fetch (workflows, jobs or steps) failed; Action
// is RunGetActionCancel in that case.
Err error
}
RunGetResult is the outcome of a completed RunGetFlowModel run, read via Result() after tea.Program.Run() returns.
type RunGetStepItem ¶
RunGetStepItem is one selectable job step. Steps have no UUID; they are addressed by their parallel-execution index and step number.
type RunGetTestItem ¶
RunGetTestItem is one selectable failed test: a display label, a status symbol, and the test's message shown in the pager when the row is picked.
type RunScopeKind ¶
type RunScopeKind int
RunScopeKind identifies a scope for the run picker's initial selection.
const ( // ScopeCurrentBranch starts the picker on the current branch (default). ScopeCurrentBranch RunScopeKind = iota // ScopeDefaultBranch starts the picker on the default branch. ScopeDefaultBranch // ScopeAllBranches starts the picker on the "all branches" scope. ScopeAllBranches // ScopeMyRuns starts the picker on the cross-project "my runs" scope. ScopeMyRuns )
type RunStatusFilter ¶
type RunStatusFilter struct {
Value string // pipeline.status value
Label string // title/footer wording, e.g. "failed", "needs approval"
Icon string // status glyph shown in the filter dialog's status list
}
RunStatusFilter is one selectable pipeline-status filter offered by the run picker's "s" key: the API pipeline.status value and the label shown to the user. The caller supplies the list (from apiclient status constants) so the ui package stays decoupled from the API client.
type SecretModel ¶
type SecretModel struct {
// contains filtered or unexported fields
}
SecretModel is a bubbletea model for prompting a secret value. Input is masked (echo password mode). The prompt header is configurable so callers can name the specific secret being requested.
func NewSecretModel ¶
func NewSecretModel(header string) SecretModel
NewSecretModel creates a SecretModel with the given header text.
func (SecretModel) Init ¶
func (m SecretModel) Init() tea.Cmd
func (SecretModel) Quitting ¶
func (m SecretModel) Quitting() bool
Quitting reports whether the user pressed Esc or Ctrl+C.
func (SecretModel) Value ¶
func (m SecretModel) Value() string
Value returns the entered secret value.
func (SecretModel) View ¶
func (m SecretModel) View() tea.View
type SelectModel ¶
type SelectModel struct {
// contains filtered or unexported fields
}
SelectModel is a top-level bubbletea model that wraps components.SelectModel and quits the program on selection or cancellation.
func NewSelectModel ¶
func NewSelectModel(prompt string, options []string) SelectModel
NewSelectModel creates a standalone select prompt. options is the list of choices to display.
func (SelectModel) Cancelled ¶
func (m SelectModel) Cancelled() bool
Cancelled reports whether the user quit without selecting.
func (SelectModel) Init ¶
func (m SelectModel) Init() tea.Cmd
func (SelectModel) Selected ¶
func (m SelectModel) Selected() int
Selected returns the index of the chosen option. Only valid when !Cancelled().
func (SelectModel) View ¶
func (m SelectModel) View() tea.View
func (SelectModel) WithCursor ¶
func (m SelectModel) WithCursor(i int) SelectModel
WithCursor returns a copy of the model with the initial highlighted option set to index i. Use this to pre-select a default choice.
type SpinnerModel ¶
type SpinnerModel struct {
// contains filtered or unexported fields
}
SpinnerModel is a bubbletea model that displays an animated spinner with a message. Run it in a goroutine via tea.NewProgram; call p.Quit() to stop it.
func NewSpinnerModel ¶
func NewSpinnerModel(msg string, color bool) SpinnerModel
func (SpinnerModel) Init ¶
func (m SpinnerModel) Init() tea.Cmd
func (SpinnerModel) View ¶
func (m SpinnerModel) View() tea.View
type ThemePickerModel ¶
type ThemePickerModel struct {
// contains filtered or unexported fields
}
ThemePickerModel is a top-level bubbletea program that splits the screen horizontally: the left pane is the standard select list of theme names, and the right pane shows sample markdown rendered in the currently-highlighted theme. Moving the cursor re-renders the preview, so the user sees each theme applied live before committing. Enter confirms; Esc/Ctrl+C cancels.
The markdown is produced by a render callback so the program stays decoupled from glamour: the caller (iostream) supplies a closure that renders the sample in a given theme, wrapped to a given width.
func NewThemePickerModel ¶
func NewThemePickerModel(prompt string, labels, themes []string, render func(theme string, width int) string, color, animate bool) ThemePickerModel
NewThemePickerModel builds a theme picker. labels are the display strings for the list (e.g. with a "(default)" marker); themes are the matching raw theme names, same length and order. render produces the preview markdown for a theme at a given width. animate reports whether the loading spinner should be animated. Pass false when CIRCLE_SPINNER_DISABLED is set or output is non-interactive, so the placeholder stays static.
func (ThemePickerModel) Cancelled ¶
func (m ThemePickerModel) Cancelled() bool
Cancelled reports whether the user quit without selecting.
func (ThemePickerModel) Init ¶
func (m ThemePickerModel) Init() tea.Cmd
Init starts the spinner ticking so the loading placeholder animates. The spinner self-schedules its next tick, so a single Tick here keeps it running for the lifetime of the program. When animation is disabled it stays still, so scripted or non-TTY sessions see a stable screen.
func (ThemePickerModel) Selected ¶
func (m ThemePickerModel) Selected() int
Selected returns the index of the chosen theme. Only valid when !Cancelled().
func (ThemePickerModel) View ¶
func (m ThemePickerModel) View() tea.View
func (ThemePickerModel) WithCursor ¶
func (m ThemePickerModel) WithCursor(i int) ThemePickerModel
WithCursor returns a copy with the initial highlighted option at index i. Use this to start on the current theme.