@@ -9,6 +9,7 @@ import (
11 "log/slog"
11 "log/slog"
@@ -27,7 +28,11 @@ import (
27 "github.com/charmbracelet/crush/internal/permission"
28 "github.com/charmbracelet/crush/internal/permission"
28 "github.com/charmbracelet/crush/internal/pubsub"
29 "github.com/charmbracelet/crush/internal/pubsub"
29 "github.com/charmbracelet/crush/internal/session"
30 "github.com/charmbracelet/crush/internal/session"
31+ "github.com/charmbracelet/crush/internal/tui/components/anim"
32+ "github.com/charmbracelet/crush/internal/tui/styles"
33+ "github.com/charmbracelet/lipgloss/v2"
30 "github.com/charmbracelet/x/ansi"
34 "github.com/charmbracelet/x/ansi"
35+ "github.com/charmbracelet/x/exp/charmtone"
33type App struct {
38type App struct {
@@ -114,7 +119,25 @@ func (app *App) RunNonInteractive(ctx context.Context, output io.Writer, prompt
115 var spinner *format.Spinner
120 var spinner *format.Spinner
116 if !quiet {
121 if !quiet {
122+ t := styles.CurrentTheme()
124+ // Detect background color to set the appropriate color for the
125+ // spinner's 'Generating...' text. Without this, that text would be
126+ // unreadable in light terminals.
128+ if f, ok := output.(*os.File); ok {
129+ hasDarkBG = lipgloss.HasDarkBackground(os.Stdin, f)
131+ defaultFG := lipgloss.LightDark(hasDarkBG)(charmtone.Pepper, t.FgBase)
117− spinner = format.NewSpinner(ctx, cancel, "Generating")
133+ spinner = format.NewSpinner(ctx, cancel, anim.Settings{
135+ Label: "Generating",
136+ LabelColor: defaultFG,
137+ GradColorA: t.Primary,
138+ GradColorB: t.Secondary,
118 spinner.Start()
141 spinner.Start()