package com.suno.android.common_ui.components import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape 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.pluralStringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.suno.android.common_ui.components.loading.SunoSpinner import com.suno.android.common_ui.theme.ExtendedTheme import com.suno.android.common_ui.theme.SunoTheme import com.suno.android.common_res.R as CommonResR @Composable fun SongGeneratingSpinnerBanner( modifier: Modifier = Modifier, isGenerating: Boolean = false, numberOfSongsGenerating: Int = 0, numberOfSongsReady: Int = 0, ) { Row( modifier = Modifier .height(56.dp) .background( color = ExtendedTheme.colors.backgroundTertiary, shape = RoundedCornerShape(8.dp), ), verticalAlignment = Alignment.CenterVertically, ) { AnimatedVisibility( visible = isGenerating, ) { SunoSpinner( modifier = Modifier .padding(horizontal = 8.dp) .size(24.dp), ) } Column( modifier = Modifier .fillMaxHeight() .padding(horizontal = 8.dp), verticalArrangement = Arrangement.Center, ) { AnimatedVisibility( visible = numberOfSongsGenerating > 0, ) { val songsGeneratingString = pluralStringResource( CommonResR.plurals.songs_generatingVARIABLE, numberOfSongsGenerating, numberOfSongsGenerating, ) Text( modifier = Modifier.padding(horizontal = 8.dp), text = songsGeneratingString, style = ExtendedTheme.typography.smallBody, ) } AnimatedVisibility( visible = numberOfSongsReady > 0, ) { val songsReadyString = pluralStringResource( CommonResR.plurals.songs_readyVARIABLE, numberOfSongsReady, numberOfSongsReady, ) Text( modifier = Modifier.padding(horizontal = 8.dp), text = songsReadyString, style = ExtendedTheme.typography.smallBody, ) } } } } @Preview @Composable private fun SongGeneratingSpinnerBanner_Preview() { SunoTheme { SongGeneratingSpinnerBanner( isGenerating = true, numberOfSongsGenerating = 2, numberOfSongsReady = 2, ) } }