1package stats23const (4 CardInnerWidth = 305 CardHeight = 96)78const (9 panelChrome = 810 bannerHeight = 511 CardFullWidth = CardInnerWidth + 412)1314const (15 cardColumnGap = 216)1718func StaticHeight(cards []Card) int {19 if len(cards) == 0 {20 return panelChrome21 }22 return panelChrome + bannerHeight23}2425func ContentWidth(termWidth int) int {26 available := max(termWidth-6, CardFullWidth)27 cols := cardColumnCount(available)28 width := cardGridWidth(cols)29 if width > available {30 return available31 }32 return width33}3435func ViewportHeight(availableHeight int) int {36 maxRows := CardHeight*2 + CardHeight/237 minRows := CardHeight38 h := min(availableHeight, maxRows)39 return max(h, minRows)40}4142func cardColumnCount(width int) int {43 if width <= CardFullWidth {44 return 145 }46 cols := (width + cardColumnGap) / (CardFullWidth + cardColumnGap)47 return max(cols, 1)48}4950func cardGridWidth(cols int) int {51 if cols < 1 {52 cols = 153 }54 return cols*CardFullWidth + (cols-1)*cardColumnGap55}