package ui import "github.com/charmbracelet/lipgloss" var ( colorAccent = lipgloss.Color("75") colorBright = lipgloss.Color("81") colorGood = lipgloss.Color("114") colorWarn = lipgloss.Color("214") colorBad = lipgloss.Color("203") colorDim = lipgloss.Color("244") colorBorder = lipgloss.Color("240") focusedTitle = lipgloss.NewStyle().Bold(true).Foreground(colorBright) dimStyle = lipgloss.NewStyle().Foreground(colorDim) goodStyle = lipgloss.NewStyle().Foreground(colorGood) badStyle = lipgloss.NewStyle().Foreground(colorBad) warnStyle = lipgloss.NewStyle().Foreground(colorWarn) cursorStyle = lipgloss.NewStyle().Bold(true).Foreground(colorBright) helpStyle = lipgloss.NewStyle().Foreground(colorDim) ) // paneBox baut den Rahmen-Stil für ein Pane mit gegebener Außenbreite/-höhe. // lipgloss zählt Padding zur Breite, den Rahmen nicht – daher w-2/h-2. func paneBox(focused bool, w, h int) lipgloss.Style { s := lipgloss.NewStyle(). Border(lipgloss.RoundedBorder()). BorderForeground(colorBorder). PaddingLeft(1). PaddingRight(1) if focused { s = s.BorderForeground(colorAccent) } if w > 0 { s = s.Width(w - 2) } if h > 0 { s = s.Height(h - 2) } return s } // truncate schneidet s Anzeigebreite auf w und hängt … an. func truncate(s string, w int) string { if w <= 0 { return "" } r := []rune(s) if len(r) <= w { return s } if w == 1 { return "…" } return string(r[:w-1]) + "…" }