Use the locked Home See all spacing

This commit is contained in:
justinzeus 2026-11-05 19:53:51 +01:00
parent 9c8fceb18c
commit e99ed2d394
3 changed files with 5 additions and 3 deletions

View file

@ -180,6 +180,8 @@ own geometry; the Discover section uses a warning pill. Caption separators multi
the existing muted colour alpha by the shared 40% token. Home-only untrimmed styles
and `exactLineBox` honor the declared CSS line boxes despite Android's intrinsic
paragraph minimums; shell and library typography retain their existing defaults.
Home See all supplies its locked 8px column gap; the shared Library tail retains
its existing 10px default rather than leaking that measurement into Home.
Vertical moves clamp to short target rows, including a final See all card.
`make test` includes `HomeCaptureTest` (23 native acceptance states) and the

View file

@ -65,7 +65,7 @@ fun HomeShelf(row: HomeRow, memory: HomeViewMemory, focused: Boolean, column: In
val cardModifier = Modifier.zIndex(if (selected) 2f else 0f).testTag("home-card:${row.id}:$index")
.then(if (!row.skeleton) Modifier.focusOnPointerEnter { onHover(index) } else Modifier)
if (title == null && !row.skeleton) {
LibrarySeeAllCard(row.total, selected, { onCard(index) }, cardModifier, width, height, T.listTitle, T.label, lift = true)
LibrarySeeAllCard(row.total, selected, { onCard(index) }, cardModifier, width, height, T.listTitle, T.label, lift = true, gap = H.seeAllGap)
} else TitleCard(selected, cardModifier.then(if (!row.skeleton) Modifier.clickable { onCard(index) } else Modifier), width, height, lift = true) {
if (title == null) Box(Modifier.fillMaxSize().background(C.surface)) else {
TitleArtwork(title.title, title.type, title.poster, width, height, Modifier.fillMaxSize(), backdrop = title.backdrop, posterOnly = title.posterOnly, landscape = row.cardKind != HomeCardKind.Poster)

View file

@ -17,12 +17,12 @@ import androidx.tv.material3.Text
fun LibrarySeeAllCard(count: Int, focused: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier,
width: Dp = WolfskinTokens.Card.posterW, height: Dp = WolfskinTokens.Card.posterH,
titleStyle: TextStyle = WolfskinTokens.Type.listTitle, countStyle: TextStyle = WolfskinTokens.Type.label,
lift: Boolean = false) {
lift: Boolean = false, gap: Dp = WolfskinTokens.Library.tailGap) {
val shape = RoundedCornerShape(WolfskinTokens.Radius.card)
TitleCard(focused, modifier.clickable(onClick = onClick), width, height, lift) {
Column(Modifier.fillMaxSize().background(WolfskinTokens.Color.surface, shape)
.border(WolfskinTokens.Library.borderWidth, WolfskinTokens.Color.border, shape),
verticalArrangement = Arrangement.spacedBy(WolfskinTokens.Library.tailGap, Alignment.CenterVertically), horizontalAlignment = Alignment.CenterHorizontally) {
verticalArrangement = Arrangement.spacedBy(gap, Alignment.CenterVertically), horizontalAlignment = Alignment.CenterHorizontally) {
Glyph("interface", WolfskinTokens.Color.accent, Modifier.size(WolfskinTokens.Layout.badge))
Text("See all", modifier = Modifier.exactLineBox(titleStyle), color = WolfskinTokens.Color.fg, style = titleStyle)
Text(count.toString(), modifier = Modifier.exactLineBox(countStyle), color = WolfskinTokens.Color.muted, style = countStyle)