mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
By caching the terminal's color profile, we avoid myriad round trips during command execution.
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
package cliui
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/charmbracelet/charm/ui/common"
|
|
"github.com/charmbracelet/lipgloss"
|
|
"github.com/muesli/termenv"
|
|
"golang.org/x/xerrors"
|
|
)
|
|
|
|
var Canceled = xerrors.New("canceled")
|
|
|
|
// DefaultStyles compose visual elements of the UI.
|
|
var DefaultStyles Styles
|
|
|
|
type Styles struct {
|
|
Bold,
|
|
Checkmark,
|
|
Code,
|
|
Crossmark,
|
|
DateTimeStamp,
|
|
Error,
|
|
Field,
|
|
Keyword,
|
|
Paragraph,
|
|
Placeholder,
|
|
Prompt,
|
|
FocusedPrompt,
|
|
Fuchsia,
|
|
Logo,
|
|
Warn,
|
|
Wrap lipgloss.Style
|
|
}
|
|
|
|
func init() {
|
|
lipgloss.SetDefaultRenderer(
|
|
lipgloss.NewRenderer(os.Stdout, termenv.WithColorCache(true)),
|
|
)
|
|
|
|
// All Styles are set after we change the DefaultRenderer so that the ColorCache
|
|
// is in effect, mitigating the severe performance issue seen here:
|
|
// https://github.com/coder/coder/issues/7884.
|
|
|
|
charmStyles := common.DefaultStyles()
|
|
|
|
DefaultStyles = Styles{
|
|
Bold: lipgloss.NewStyle().Bold(true),
|
|
Checkmark: charmStyles.Checkmark,
|
|
Code: charmStyles.Code,
|
|
Crossmark: charmStyles.Error.Copy().SetString("✘"),
|
|
DateTimeStamp: charmStyles.LabelDim,
|
|
Error: charmStyles.Error,
|
|
Field: charmStyles.Code.Copy().Foreground(lipgloss.AdaptiveColor{Light: "#000000", Dark: "#FFFFFF"}),
|
|
Keyword: charmStyles.Keyword,
|
|
Paragraph: charmStyles.Paragraph,
|
|
Placeholder: lipgloss.NewStyle().Foreground(lipgloss.AdaptiveColor{Light: "#585858", Dark: "#4d46b3"}),
|
|
Prompt: charmStyles.Prompt.Copy().Foreground(lipgloss.AdaptiveColor{Light: "#9B9B9B", Dark: "#5C5C5C"}),
|
|
FocusedPrompt: charmStyles.FocusedPrompt.Copy().Foreground(lipgloss.Color("#651fff")),
|
|
Fuchsia: charmStyles.SelectedMenuItem.Copy(),
|
|
Logo: charmStyles.Logo.Copy().SetString("Coder"),
|
|
Warn: lipgloss.NewStyle().Foreground(
|
|
lipgloss.AdaptiveColor{Light: "#04B575", Dark: "#ECFD65"},
|
|
),
|
|
Wrap: lipgloss.NewStyle().Width(80),
|
|
}
|
|
}
|
|
|
|
// ValidateNotEmpty is a helper function to disallow empty inputs!
|
|
func ValidateNotEmpty(s string) error {
|
|
if s == "" {
|
|
return xerrors.New("Must be provided!")
|
|
}
|
|
return nil
|
|
}
|