package com.suno.android.ui.screens.orpheus.components import androidx.compose.foundation.background 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.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.Text 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.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.suno.android.common_networking.remote.session.Model import com.suno.android.common_ui.R import com.suno.android.common_ui.components.menus.ModelDropdownMenu import com.suno.android.common_ui.theme.ExtendedTheme import com.suno.android.common_ui.theme.SunoTheme import com.suno.android.extensions.toModelSelectorDropdownStates import com.suno.android.common_res.R as CommonR @Composable fun ChatInputActionSheet( onDismiss: () -> Unit, onModelClick: (String) -> Unit, modifier: Modifier = Modifier, selectedModel: String? = null, availableModels: List = emptyList(), ) { var showModelSelector by remember { mutableStateOf(false) } Column( modifier = modifier .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, bottom = 16.dp), verticalArrangement = Arrangement.spacedBy(12.dp), ) { Column( modifier = Modifier .fillMaxWidth() .clip(RoundedCornerShape(16.dp)) .background(ExtendedTheme.colors.backgroundTertiary), ) { Box { ActionListItem( iconPainter = painterResource(R.drawable.sparkles), title = stringResource(CommonR.string.model), subtitle = selectedModel.orEmpty(), onClick = { if (availableModels.isNotEmpty()) { showModelSelector = true } else { onDismiss() } }, ) if (availableModels.isNotEmpty()) { ModelDropdownMenu( expanded = showModelSelector, onDismissRequest = { showModelSelector = false }, options = availableModels.toModelSelectorDropdownStates( selectedModelName = selectedModel, ), onOptionSelected = { selectedOption -> onModelClick(selectedOption.title) showModelSelector = false onDismiss() }, ) } } } } } @Composable private fun ActionListItem( iconPainter: Painter, title: String, subtitle: String, onClick: () -> Unit, modifier: Modifier = Modifier, ) { Row( modifier = modifier .fillMaxWidth() .clickable(onClick = onClick) .padding(16.dp), horizontalArrangement = Arrangement.spacedBy(10.dp), verticalAlignment = Alignment.CenterVertically, ) { Icon( painter = iconPainter, contentDescription = null, modifier = Modifier.size(24.dp), tint = ExtendedTheme.colors.textPrimary, ) Column( modifier = Modifier.weight(1f), verticalArrangement = Arrangement.Center, ) { Text( text = title, style = ExtendedTheme.typography.cardTitle.copy( fontWeight = FontWeight.Medium, fontSize = 16.sp, lineHeight = 24.sp, letterSpacing = 0.32.sp, ), color = ExtendedTheme.colors.textPrimary, ) Text( text = subtitle, style = ExtendedTheme.typography.smallSubtitle.copy( fontSize = 12.sp, lineHeight = 16.sp, letterSpacing = 0.24.sp, fontWeight = FontWeight.Normal, ), color = ExtendedTheme.colors.textTertiary, ) } Icon( painter = painterResource(id = R.drawable.chevron_right), contentDescription = null, modifier = Modifier.size(16.dp), tint = ExtendedTheme.colors.textPrimary, ) } } @PreviewLightDark @Composable private fun ChatInputActionSheetPreview() { SunoTheme { ChatInputActionSheet( onDismiss = {}, onModelClick = {}, ) } }