package eu.kanade.presentation.components import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.sizeIn import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ArrowLeft import androidx.compose.material.icons.outlined.ArrowRight import androidx.compose.material.icons.outlined.RadioButtonChecked import androidx.compose.material.icons.outlined.RadioButtonUnchecked import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.window.PopupProperties import eu.kanade.tachiyomi.R import androidx.compose.material3.DropdownMenu as ComposeDropdownMenu @Composable fun DropdownMenu( expanded: Boolean, onDismissRequest: () -> Unit, modifier: Modifier = Modifier, offset: DpOffset = DpOffset(8.dp, (-56).dp), properties: PopupProperties = PopupProperties(focusable = true), content: @Composable ColumnScope.() -> Unit, ) { ComposeDropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, modifier = modifier.sizeIn(minWidth = 196.dp, maxWidth = 196.dp), offset = offset, properties = properties, content = content, ) } @Composable fun RadioMenuItem( text: @Composable () -> Unit, isChecked: Boolean, onClick: () -> Unit, ) { DropdownMenuItem( text = text, onClick = onClick, trailingIcon = { if (isChecked) { Icon( imageVector = Icons.Outlined.RadioButtonChecked, contentDescription = stringResource(R.string.selected), tint = MaterialTheme.colorScheme.primary, ) } else { Icon( imageVector = Icons.Outlined.RadioButtonUnchecked, contentDescription = stringResource(R.string.not_selected), ) } }, ) } @Composable fun NestedMenuItem( text: @Composable () -> Unit, children: @Composable ColumnScope.(() -> Unit) -> Unit, ) { var nestedExpanded by remember { mutableStateOf(false) } val closeMenu = { nestedExpanded = false } val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr DropdownMenuItem( text = text, onClick = { nestedExpanded = true }, trailingIcon = { Icon( imageVector = if (isLtr) Icons.Outlined.ArrowRight else Icons.Outlined.ArrowLeft, contentDescription = null, ) }, ) DropdownMenu( expanded = nestedExpanded, onDismissRequest = closeMenu, ) { children(closeMenu) } }