fix(ui): preserve estimated usage percentage color

Greg Slepak created

Change summary

internal/ui/common/elements.go      | 2 +-
internal/ui/common/elements_test.go | 5 ++++-
internal/ui/model/header.go         | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)

Detailed changes

internal/ui/common/elements.go 🔗

@@ -118,7 +118,7 @@ func formatTokensAndCost(t *styles.Styles, tokens, contextWindow int64, cost flo
 	formattedTokens = t.ModelInfo.TokenCount.Render(fmt.Sprintf("(%s)", formattedTokens))
 	percentageText := fmt.Sprintf("%d%%", int(percentage))
 	if estimated {
-		percentageText = t.ModelInfo.EstimatedUsagePrefix.Render("~") + percentageText
+		percentageText = "~" + percentageText
 	}
 	formattedPercentage := t.ModelInfo.TokenPercentage.Render(percentageText)
 	formattedTokens = fmt.Sprintf("%s %s", formattedPercentage, formattedTokens)

internal/ui/common/elements_test.go 🔗

@@ -1,6 +1,7 @@
 package common
 
 import (
+	"strings"
 	"testing"
 
 	"github.com/charmbracelet/crush/internal/ui/styles"
@@ -13,11 +14,13 @@ func TestFormatTokensAndCostPrefixesEstimatedUsage(t *testing.T) {
 
 	sty := styles.CharmtonePantera()
 
-	actual := ansi.Strip(formatTokensAndCost(&sty, 120, 1000, 0, true))
+	rendered := formatTokensAndCost(&sty, 120, 1000, 0, true)
+	actual := ansi.Strip(rendered)
 
 	require.Contains(t, actual, "~12%")
 	require.Contains(t, actual, "(120)")
 	require.Contains(t, actual, "$0.00")
+	require.True(t, strings.Contains(rendered, sty.ModelInfo.TokenPercentage.Render("~12%")))
 }
 
 func TestFormatTokensAndCostOmitsEstimatedPrefix(t *testing.T) {

internal/ui/model/header.go 🔗

@@ -150,7 +150,7 @@ func renderHeaderDetails(
 		percentage := (float64(session.CompletionTokens+session.PromptTokens) / float64(model.ContextWindow)) * 100
 		percentageText := fmt.Sprintf("%d%%", int(percentage))
 		if session.EstimatedUsage {
-			percentageText = t.ModelInfo.EstimatedUsagePrefix.Render("~") + percentageText
+			percentageText = "~" + percentageText
 		}
 		formattedPercentage := t.Header.Percentage.Render(percentageText)
 		parts = append(parts, formattedPercentage)