fix(ui): format xhigh as XHigh (not Xhigh) (#2369)

Christian Rocha created

Change summary

internal/ui/common/elements.go  | 10 ++++++++++
internal/ui/dialog/reasoning.go |  5 +----
internal/ui/model/sidebar.go    |  5 +----
3 files changed, 12 insertions(+), 8 deletions(-)

Detailed changes

internal/ui/common/elements.go 🔗

@@ -10,6 +10,8 @@ import (
 	"github.com/charmbracelet/crush/internal/home"
 	"github.com/charmbracelet/crush/internal/ui/styles"
 	"github.com/charmbracelet/x/ansi"
+	"golang.org/x/text/cases"
+	"golang.org/x/text/language"
 )
 
 // PrettyPath formats a file path with home directory shortening and applies
@@ -19,6 +21,14 @@ func PrettyPath(t *styles.Styles, path string, width int) string {
 	return t.Muted.Width(width).Render(formatted)
 }
 
+// FormatReasoningEffort formats a reasoning effort level for display.
+func FormatReasoningEffort(effort string) string {
+	if effort == "xhigh" {
+		return "X-High"
+	}
+	return cases.Title(language.English).String(effort)
+}
+
 // ModelContextInfo contains token usage and cost information for a model.
 type ModelContextInfo struct {
 	ContextUsed  int64

internal/ui/dialog/reasoning.go 🔗

@@ -13,8 +13,6 @@ import (
 	"github.com/charmbracelet/crush/internal/ui/styles"
 	uv "github.com/charmbracelet/ultraviolet"
 	"github.com/sahilm/fuzzy"
-	"golang.org/x/text/cases"
-	"golang.org/x/text/language"
 )
 
 const (
@@ -241,13 +239,12 @@ func (r *Reasoning) setReasoningItems() error {
 		currentEffort = model.DefaultReasoningEffort
 	}
 
-	caser := cases.Title(language.English)
 	items := make([]list.FilterableItem, 0, len(model.ReasoningLevels))
 	selectedIndex := 0
 	for i, effort := range model.ReasoningLevels {
 		item := &ReasoningItem{
 			effort:    effort,
-			title:     caser.String(effort),
+			title:     common.FormatReasoningEffort(effort),
 			isCurrent: effort == currentEffort,
 			t:         r.com.Styles,
 		}

internal/ui/model/sidebar.go 🔗

@@ -9,8 +9,6 @@ import (
 	"github.com/charmbracelet/crush/internal/ui/logo"
 	uv "github.com/charmbracelet/ultraviolet"
 	"github.com/charmbracelet/ultraviolet/layout"
-	"golang.org/x/text/cases"
-	"golang.org/x/text/language"
 )
 
 // modelInfo renders the current model information including reasoning
@@ -35,9 +33,8 @@ func (m *UI) modelInfo(width int) string {
 						reasoningInfo = "Thinking Off"
 					}
 				} else {
-					formatter := cases.Title(language.English, cases.NoLower)
 					reasoningEffort := cmp.Or(model.ModelCfg.ReasoningEffort, model.CatwalkCfg.DefaultReasoningEffort)
-					reasoningInfo = formatter.String(fmt.Sprintf("Reasoning %s", reasoningEffort))
+					reasoningInfo = fmt.Sprintf("Reasoning %s", common.FormatReasoningEffort(reasoningEffort))
 				}
 			}
 		}