feat: the logo on top of the status pane's rows
CI / Checks (pull_request) Successful in 24s
PR title / Conventional title (pull_request) Failing after 1s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kebandClaude Opus 5.5 committed 2026-10-11 13:26:06 +02:00
1 parent c129f22f5b
commit 66faafb9b9
5 files changed
+49 -2

No files matched your search

+29
View File
@@ -34,6 +34,9 @@ type List[T any] struct {
Empty string // shown when loaded with no items
Loading bool
Err error
// Header lines (a logo) go above the items, when the pane has room
// for them and there's no filter.
Header []string
item Item[T]
items []T
@@ -159,9 +162,29 @@ func (l List[T]) rows() int {
if l.filtering {
r--
}
if l.headerShown() {
r -= len(l.Header) + 1
}
return max(0, r)
}
// headerMinRows is how many item rows the header leaves at least.
const headerMinRows = 5
// headerShown reports whether Header fits: as wide as the pane allows,
// leaving headerMinRows, a blank line under it, and no filter.
func (l List[T]) headerShown() bool {
if len(l.Header) == 0 || l.filtering || l.input.Value() != "" {
return false
}
for _, line := range l.Header {
if ansi.StringWidth(line) > l.w-3 {
return false
}
}
return l.h-2-len(l.Header)-1 >= headerMinRows
}
// Filtering reports whether the filter input has focus.
func (l List[T]) Filtering() bool { return l.filtering }
@@ -325,6 +348,12 @@ func (l List[T]) View(st styles.Styles, focused bool, spin string) string {
if l.filtering {
body = append(body, l.input.View())
}
if l.headerShown() {
for _, line := range l.Header {
body = append(body, st.Notice.Render(" "+line))
}
body = append(body, "")
}
switch {
case l.Loading && len(l.items) == 0: