package com.suno.android.common_ui.components.menus 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.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem 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.vector.ImageVector import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.suno.android.common_ui.R import com.suno.android.common_ui.theme.ExtendedTheme import com.suno.android.common_ui.theme.SunoTheme @Composable fun BasicDropdownMenu( modifier: Modifier = Modifier, selectedItem: String, options: Map, onOptionSelected: (T) -> Unit, isExpanded: Boolean = false, ) { var expanded by remember { mutableStateOf(isExpanded) } Box( modifier = modifier.padding(16.dp), contentAlignment = Alignment.Center, ) { Row( modifier = modifier .clip(shape = RoundedCornerShape(16.dp)) .clickable { expanded = !expanded } .background(ExtendedTheme.colors.backgroundSecondary) .padding(horizontal = 12.dp, vertical = 4.dp), horizontalArrangement = Arrangement.spacedBy(4.dp), verticalAlignment = Alignment.CenterVertically, ) { Icon( modifier = Modifier.size(16.dp), imageVector = ImageVector.vectorResource( id = R.drawable.chevron_down, ), contentDescription = "Close", ) Text( text = selectedItem, style = ExtendedTheme.typography.introCopy, ) } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, ) { options.entries.forEach { optionItem -> DropdownMenuItem( text = { Text( text = optionItem.key, ) }, onClick = { onOptionSelected.invoke(optionItem.value) expanded = false }, ) } } } } @Preview @Composable private fun BasicMenu_Preview() { SunoTheme { BasicDropdownMenu( selectedItem = "A", options = mapOf("A" to 1, "B" to 2, "C" to 3), onOptionSelected = {}, ) } }