package eu.kanade.presentation.browse.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowForward import androidx.compose.material.icons.outlined.Error import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.util.padding import eu.kanade.tachiyomi.R @Composable fun GlobalSearchResultItem( title: String, subtitle: String, onClick: () -> Unit, content: @Composable () -> Unit, ) { Column { Row( modifier = Modifier .padding( start = MaterialTheme.padding.medium, end = MaterialTheme.padding.tiny, ) .fillMaxWidth() .clickable(onClick = onClick), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { Column { Text( text = title, style = MaterialTheme.typography.titleMedium, ) Text(text = subtitle) } IconButton(onClick = onClick) { Icon(imageVector = Icons.Outlined.ArrowForward, contentDescription = null) } } content() } } @Composable fun GlobalSearchEmptyResultItem() { Text( text = stringResource(id = R.string.no_results_found), modifier = Modifier .padding( horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small, ), ) } @Composable fun GlobalSearchLoadingResultItem() { Box( modifier = Modifier .fillMaxWidth() .padding(vertical = MaterialTheme.padding.medium), ) { CircularProgressIndicator( modifier = Modifier .size(16.dp) .align(Alignment.Center), strokeWidth = 2.dp, ) } } @Composable fun GlobalSearchErrorResultItem(message: String?) { Column( modifier = Modifier .padding(vertical = MaterialTheme.padding.medium) .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, ) { Icon(imageVector = Icons.Outlined.Error, contentDescription = null) Text(text = message ?: stringResource(id = R.string.unknown_error)) } }