51 lines
1.6 KiB
Kotlin
51 lines
1.6 KiB
Kotlin
package core.presentation.components
|
|
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.Box
|
|
import androidx.compose.foundation.layout.size
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.draw.clip
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.layout.ContentScale
|
|
import androidx.compose.ui.unit.Dp
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.sp
|
|
import coil.compose.AsyncImage
|
|
import core.presentation.theme.SoftSquareShape
|
|
|
|
@Composable
|
|
fun AppAvatar(
|
|
url: String?,
|
|
name: String,
|
|
size: Dp = 48.dp,
|
|
modifier: Modifier = Modifier
|
|
) {
|
|
Box(
|
|
modifier = modifier
|
|
.size(size)
|
|
.clip(SoftSquareShape) // Тот самый "мягкий квадрат"
|
|
.background(MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)),
|
|
contentAlignment = Alignment.Center
|
|
) {
|
|
if (url != null) {
|
|
AsyncImage(
|
|
model = url,
|
|
contentDescription = name,
|
|
modifier = Modifier.size(size),
|
|
contentScale = ContentScale.Crop
|
|
)
|
|
} else {
|
|
// Заглушка, если нет аватара (первая буква имени)
|
|
Text(
|
|
text = name.take(1).uppercase(),
|
|
color = MaterialTheme.colorScheme.primary,
|
|
fontSize = (size.value * 0.4).sp,
|
|
style = MaterialTheme.typography.titleMedium
|
|
)
|
|
}
|
|
}
|
|
}
|