Preserve full line boxes in library recovery panels

This commit is contained in:
justinzeus 2026-11-05 16:05:25 +01:00
parent 380c423376
commit 27fd174aed

View file

@ -194,19 +194,24 @@ private fun LibraryToolbar(grid: LibraryGridState, active: Boolean) {
@Composable
private fun LibraryRecovery(grid: LibraryGridState, focused: Boolean) {
val lineBoxes = androidx.compose.ui.text.style.LineHeightStyle(
androidx.compose.ui.text.style.LineHeightStyle.Alignment.Center,
androidx.compose.ui.text.style.LineHeightStyle.Trim.None,
)
val unavailable = grid.status == LibraryStatus.Unavailable
val title = if (unavailable) "Couldn’t reach your library" else if (grid.unwatched) "Nothing unwatched in ${grid.title}" else "Nothing in ${grid.title} yet"
val text = if (unavailable) "Jellyfin isn’t answering. Nothing here is lost; try again in a moment." else if (grid.unwatched) "Everything here has been watched." else "Titles you or others request for you land here."
val button = if (unavailable) "Try again" else if (grid.unwatched) "Show all" else "Open Discover"
Box(Modifier.fillMaxWidth().height(L.row_state).padding(start = L.safeSide, top = G.panelTop)) {
Column(Modifier.width(L.stateWidth).background(C.surface, RoundedCornerShape(WolfskinTokens.Radius.panel))
.border(G.borderWidth, C.border, RoundedCornerShape(WolfskinTokens.Radius.panel)).padding(horizontal = G.panelPaddingX, vertical = G.panelPaddingY)) {
.border(G.borderWidth, C.border, RoundedCornerShape(WolfskinTokens.Radius.panel)).padding(G.borderWidth)
.padding(horizontal = G.panelPaddingX, vertical = G.panelPaddingY)) {
Row(horizontalArrangement = Arrangement.spacedBy(G.panelIconGap), verticalAlignment = Alignment.CenterVertically) {
Glyph(if (unavailable) "alert" else if (grid.title == "Movies") "film" else "nextup", if (unavailable) C.warn else C.accentText, Modifier.size(WolfskinTokens.Shell.panelIcon))
Text(title, color = C.fg, style = WolfskinTokens.Type.stateTitle.copy(fontWeight = FontWeight.Bold))
Text(title, color = C.fg, style = WolfskinTokens.Type.stateTitle.copy(fontWeight = FontWeight.Bold, lineHeightStyle = lineBoxes))
}
Spacer(Modifier.height(G.panelTitleGap))
Text(text, color = C.muted, style = WolfskinTokens.Type.body)
Text(text, color = C.muted, style = WolfskinTokens.Type.body.copy(lineHeightStyle = lineBoxes))
Spacer(Modifier.height(G.panelTextGap))
PickerButton(button, focused, !unavailable) { grid.key(ShellKey.Ok) }
}