Improve the design

This commit is contained in:
2026-05-17 01:11:00 +03:00
Unverified
parent 963451d07d
commit 7ef89bd4e6
6 changed files with 131 additions and 128 deletions
@@ -27,7 +27,7 @@ import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AttachFile import androidx.compose.material.icons.rounded.AttachFile
import androidx.compose.material.icons.rounded.Download import androidx.compose.material.icons.rounded.Download
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.CircularWavyProgressIndicator import androidx.compose.material3.CircularWavyProgressIndicator
@@ -453,7 +453,7 @@ private fun PendingImageContent(
} }
} else { } else {
Icon( Icon(
imageVector = Icons.Default.AttachFile, imageVector = Icons.Rounded.AttachFile,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(48.dp), modifier = Modifier.size(48.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant tint = MaterialTheme.colorScheme.onSurfaceVariant
@@ -2,7 +2,9 @@ package ru.fromchat.ui.chat
import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.expandVertically import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
@@ -29,25 +31,22 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Reply import androidx.compose.material.icons.automirrored.rounded.Reply
import androidx.compose.material.icons.filled.ArrowUpward import androidx.compose.material.icons.rounded.ArrowUpward
import androidx.compose.material.icons.filled.AttachFile import androidx.compose.material.icons.rounded.AttachFile
import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.rounded.Close
import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.rounded.Edit
import androidx.compose.material.icons.filled.GraphicEq import androidx.compose.material.icons.rounded.GraphicEq
import androidx.compose.material.icons.outlined.AttachFile import androidx.compose.material.icons.rounded.Image
import androidx.compose.material.icons.outlined.Image import androidx.compose.material.icons.rounded.SentimentSatisfied
import androidx.compose.material.icons.outlined.SentimentSatisfied
import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -94,8 +93,6 @@ import kotlin.time.Clock
private val ChatInputChromeHeight = 54.dp private val ChatInputChromeHeight = 54.dp
private val ChatInputLineVerticalPadding = 12.dp private val ChatInputLineVerticalPadding = 12.dp
/** Vertical padding inside the text field decoration (keep total row height aligned with chrome). */
private val ChatInputDecorationVerticalPadding = 8.dp
private val ChatInputTextLineHeight = 22.sp private val ChatInputTextLineHeight = 22.sp
private val ChatInputIconSlotSize = 36.dp private val ChatInputIconSlotSize = 36.dp
@@ -167,7 +164,7 @@ private fun PreviewBar(
IconButton(onClick = onClose) { IconButton(onClick = onClose) {
Icon( Icon(
imageVector = Icons.Filled.Close, imageVector = Icons.Rounded.Close,
contentDescription = closeContentDescription, contentDescription = closeContentDescription,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -201,7 +198,7 @@ private fun AttachmentChip(
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Filled.AttachFile, imageVector = Icons.Rounded.AttachFile,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(16.dp), modifier = Modifier.size(16.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
@@ -217,7 +214,7 @@ private fun AttachmentChip(
) )
IconButton(onClick = onRemove, modifier = Modifier.size(24.dp)) { IconButton(onClick = onRemove, modifier = Modifier.size(24.dp)) {
Icon( Icon(
imageVector = Icons.Filled.Close, imageVector = Icons.Rounded.Close,
contentDescription = removeContentDescription, contentDescription = removeContentDescription,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
@@ -340,7 +337,6 @@ fun ChatInput(
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.animateContentSize()
.background(MaterialTheme.colorScheme.surfaceContainer, pillShape) .background(MaterialTheme.colorScheme.surfaceContainer, pillShape)
.clip(pillShape) .clip(pillShape)
.hazeEffect(state = hazeState, style = composerHazeStyle), .hazeEffect(state = hazeState, style = composerHazeStyle),
@@ -353,7 +349,7 @@ fun ChatInput(
} }
val replyName = messageDisplayUsername(reply, currentUserId) val replyName = messageDisplayUsername(reply, currentUserId)
PreviewBar( PreviewBar(
icon = Icons.AutoMirrored.Filled.Reply, icon = Icons.AutoMirrored.Rounded.Reply,
title = stringResource(Res.string.message_replying_to, replyName), title = stringResource(Res.string.message_replying_to, replyName),
subtitle = replySubtitle, subtitle = replySubtitle,
closeContentDescription = cdClose, closeContentDescription = cdClose,
@@ -368,7 +364,7 @@ fun ChatInput(
message.content.take(50) + if (message.content.length > 50) "..." else "" message.content.take(50) + if (message.content.length > 50) "..." else ""
} }
PreviewBar( PreviewBar(
icon = Icons.Filled.Edit, icon = Icons.Rounded.Edit,
title = editingTitle, title = editingTitle,
subtitle = subtitle, subtitle = subtitle,
closeContentDescription = cdClose, closeContentDescription = cdClose,
@@ -402,9 +398,8 @@ fun ChatInput(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.defaultMinSize(minHeight = ChatInputChromeHeight) .defaultMinSize(minHeight = ChatInputChromeHeight)
.wrapContentHeight()
.padding(horizontal = 6.dp, vertical = 0.dp), .padding(horizontal = 6.dp, vertical = 0.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.Bottom,
) { ) {
Box( Box(
modifier = Modifier modifier = Modifier
@@ -415,7 +410,7 @@ fun ChatInput(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.SentimentSatisfied, imageVector = Icons.Rounded.SentimentSatisfied,
contentDescription = cdEmoji, contentDescription = cdEmoji,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -434,7 +429,7 @@ fun ChatInput(
enabled = !isReadOnly, enabled = !isReadOnly,
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.animateContentSize(), .align(Alignment.Bottom),
textStyle = inputTextStyle, textStyle = inputTextStyle,
singleLine = false, singleLine = false,
maxLines = 5, maxLines = 5,
@@ -445,23 +440,34 @@ fun ChatInput(
.fillMaxWidth() .fillMaxWidth()
.padding( .padding(
horizontal = ChatInputLineVerticalPadding / 2, horizontal = ChatInputLineVerticalPadding / 2,
vertical = ChatInputDecorationVerticalPadding, vertical = ChatInputIconSlotVerticalInset,
), ),
contentAlignment = Alignment.CenterStart,
) { ) {
if (text.isEmpty()) { Box(
Text( modifier = Modifier
text = stringResource(Res.string.message_placeholder), .fillMaxWidth()
style = inputTextStyle.copy( .defaultMinSize(minHeight = ChatInputIconSlotSize)
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.6f), .align(Alignment.BottomStart),
), contentAlignment = Alignment.CenterStart,
maxLines = 1, ) {
overflow = TextOverflow.Ellipsis, if (text.isEmpty()) {
softWrap = false, Text(
modifier = Modifier.fillMaxWidth(), text = stringResource(Res.string.message_placeholder),
) style = inputTextStyle.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(
alpha = 0.6f,
),
),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
softWrap = false,
modifier = Modifier.fillMaxWidth(),
)
}
Box(modifier = Modifier.animateContentSize()) {
innerTextField()
}
} }
innerTextField()
} }
}, },
) )
@@ -476,7 +482,7 @@ fun ChatInput(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Image, imageVector = Icons.Rounded.Image,
contentDescription = cdPickImage, contentDescription = cdPickImage,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -490,7 +496,7 @@ fun ChatInput(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.AttachFile, imageVector = Icons.Rounded.AttachFile,
contentDescription = cdPickFile, contentDescription = cdPickFile,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -501,88 +507,85 @@ fun ChatInput(
} }
// Fixed slot next to the pill; width must stay non-zero (see Row + fillMaxWidth pitfall above). // Fixed slot next to the pill; width must stay non-zero (see Row + fillMaxWidth pitfall above).
val actionTransitionMs = 220
val hazeOverlayAlpha by animateFloatAsState(
targetValue = if (!canSend) 1f else 0f,
animationSpec = tween(durationMillis = actionTransitionMs),
label = "chat_input_action_haze_alpha",
)
val actionBackground by animateColorAsState(
targetValue = if (canSend) {
MaterialTheme.colorScheme.primary
} else {
MaterialTheme.colorScheme.surfaceContainer.copy(alpha = 0.91f)
},
animationSpec = tween(durationMillis = actionTransitionMs),
label = "chat_input_action_background",
)
Box( Box(
modifier = Modifier modifier = Modifier
.size(ChatInputChromeHeight) .size(ChatInputChromeHeight)
.clip(CircleShape), .clip(CircleShape)
.clickable {
if (canSend) {
val plaintext = text.trim().ifBlank { "" }
onSend(plaintext, attachments)
onTextChange("")
attachments = emptyList()
typingHandler.stopTyping()
} else {
scope.launch {
snackbarHostState?.showSnackbar(message = cdVoiceUnavailable)
}
}
},
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Box(
modifier = Modifier
.fillMaxSize()
.background(actionBackground)
.hazeEffect(state = hazeState, style = composerHazeStyle) {
// Keep the node in the tree in both directions; fading alpha avoids the
// frosted layer popping on over the color when send -> voice.
alpha = hazeOverlayAlpha
},
)
AnimatedContent( AnimatedContent(
targetState = canSend, targetState = canSend,
transitionSpec = { transitionSpec = {
val exitDuration = 140 val d = actionTransitionMs
val enterDuration = 160 val iconScale = 0.72f
val enterDelay = exitDuration // start after outbound scale+fade completes
val scaleFrom = 0.82f
// EnterTogetherWithExit: fading/scaling incoming content while outgoing runs.
( (
fadeIn( fadeIn(animationSpec = tween(d)) +
animationSpec = tween(enterDuration, delayMillis = enterDelay), scaleIn(
) + scaleIn( animationSpec = tween(d),
animationSpec = tween(enterDuration, delayMillis = enterDelay), initialScale = iconScale,
initialScale = scaleFrom, )
)
) togetherWith ( ) togetherWith (
fadeOut(animationSpec = tween(exitDuration)) + fadeOut(animationSpec = tween(d)) +
scaleOut( scaleOut(
animationSpec = tween(exitDuration), animationSpec = tween(d),
targetScale = scaleFrom, targetScale = iconScale,
) )
) )
}, },
modifier = Modifier.fillMaxSize(), modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center),
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
label = "chat_input_send_or_voice", label = "chat_input_send_or_voice_icon",
) { showSend -> ) { isSend ->
Box( Icon(
modifier = Modifier imageVector = if (isSend) Icons.Rounded.ArrowUpward else Icons.Rounded.GraphicEq,
.fillMaxSize() contentDescription = if (isSend) cdSend else cdVoiceUnavailable,
.background(MaterialTheme.colorScheme.surfaceContainer.copy(alpha = 0.91f)) modifier = Modifier.size(28.dp),
.hazeEffect(state = hazeState, style = composerHazeStyle), tint = if (isSend) {
contentAlignment = Alignment.Center, MaterialTheme.colorScheme.onPrimary
) {
if (showSend) {
FilledIconButton(
onClick = {
val plaintext = text.trim().ifBlank { "" }
onSend(plaintext, attachments)
onTextChange("")
attachments = emptyList()
typingHandler.stopTyping()
},
modifier = Modifier.fillMaxSize(),
shape = CircleShape,
colors = IconButtonDefaults.filledIconButtonColors(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.primary,
),
) {
Icon(
imageVector = Icons.Filled.ArrowUpward,
contentDescription = cdSend,
)
}
} else { } else {
IconButton( MaterialTheme.colorScheme.onSurfaceVariant
onClick = { },
scope.launch { )
snackbarHostState?.showSnackbar(message = cdVoiceUnavailable)
}
},
modifier = Modifier.fillMaxSize(),
shape = CircleShape,
colors = IconButtonDefaults.iconButtonColors(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onSurfaceVariant,
),
) {
Icon(
imageVector = Icons.Filled.GraphicEq,
contentDescription = cdVoiceUnavailable,
)
}
}
}
} }
} }
} }
@@ -24,7 +24,7 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.rounded.ArrowBack import androidx.compose.material.icons.automirrored.rounded.ArrowBack
import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.rounded.Call
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -328,7 +328,7 @@ fun ChatFloatingHeaderBox(
if (showCallButton) { if (showCallButton) {
IconButton(onClick = onCallClick) { IconButton(onClick = onCallClick) {
Icon( Icon(
imageVector = Icons.Default.Call, imageVector = Icons.Rounded.Call,
contentDescription = callContentDescription, contentDescription = callContentDescription,
tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
@@ -27,11 +27,11 @@ import androidx.compose.foundation.layout.systemGestures
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.rounded.ArrowBack
import androidx.compose.material.icons.automirrored.filled.Reply import androidx.compose.material.icons.automirrored.rounded.Reply
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.rounded.Delete
import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.rounded.MoreVert
import androidx.compose.material.icons.filled.SaveAlt import androidx.compose.material.icons.rounded.SaveAlt
import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -604,7 +604,7 @@ fun ImageFullscreenPreview(
) { ) {
IconButton(onClick = { dismissRequested = true }) { IconButton(onClick = { dismissRequested = true }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
contentDescription = cdBack, contentDescription = cdBack,
tint = Color.White tint = Color.White
) )
@@ -628,7 +628,7 @@ fun ImageFullscreenPreview(
Box { Box {
IconButton(onClick = { menuExpanded = true }) { IconButton(onClick = { menuExpanded = true }) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, imageVector = Icons.Rounded.MoreVert,
contentDescription = cdMenu, contentDescription = cdMenu,
tint = Color.White tint = Color.White
) )
@@ -641,7 +641,7 @@ fun ImageFullscreenPreview(
DropdownMenuItem( DropdownMenuItem(
text = { text = {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Icon(Icons.AutoMirrored.Filled.Reply, null, tint = Color.White) Icon(Icons.AutoMirrored.Rounded.Reply, null, tint = Color.White)
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))
Text(labelReply, color = Color.White) Text(labelReply, color = Color.White)
} }
@@ -655,7 +655,7 @@ fun ImageFullscreenPreview(
DropdownMenuItem( DropdownMenuItem(
text = { text = {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Icon(Icons.Default.SaveAlt, null, tint = Color.White) Icon(Icons.Rounded.SaveAlt, null, tint = Color.White)
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))
Text(labelSave, color = Color.White) Text(labelSave, color = Color.White)
} }
@@ -668,7 +668,7 @@ fun ImageFullscreenPreview(
DropdownMenuItem( DropdownMenuItem(
text = { text = {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Icon(Icons.Default.Delete, null, tint = Color.White) Icon(Icons.Rounded.Delete, null, tint = Color.White)
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))
Text(labelDelete, color = Color.White) Text(labelDelete, color = Color.White)
} }
@@ -18,9 +18,9 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Reply import androidx.compose.material.icons.automirrored.rounded.Reply
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.rounded.Delete
import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.rounded.Edit
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -287,21 +287,21 @@ private fun ContextMenuContent(
) { ) {
if (!isReadOnly) { if (!isReadOnly) {
ContextMenuItem( ContextMenuItem(
icon = Icons.AutoMirrored.Filled.Reply, icon = Icons.AutoMirrored.Rounded.Reply,
text = labelReply, text = labelReply,
onClick = { onReply(message) } onClick = { onReply(message) }
) )
} }
if (isAuthor && !isReadOnly) { if (isAuthor && !isReadOnly) {
ContextMenuItem( ContextMenuItem(
icon = Icons.Default.Edit, icon = Icons.Rounded.Edit,
text = labelEdit, text = labelEdit,
onClick = { onEdit(message) } onClick = { onEdit(message) }
) )
} }
if (isAuthor && !isReadOnly) { if (isAuthor && !isReadOnly) {
ContextMenuItem( ContextMenuItem(
icon = Icons.Default.Delete, icon = Icons.Rounded.Delete,
text = labelDelete, text = labelDelete,
onClick = { onDelete(message) }, onClick = { onDelete(message) },
isError = true isError = true
@@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Block import androidx.compose.material.icons.rounded.Block
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.BottomSheetDefaults import androidx.compose.material3.BottomSheetDefaults
import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.ModalBottomSheet
@@ -176,7 +176,7 @@ fun SuspendedAccountSupportSheet(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Icon( Icon(
imageVector = Icons.Default.Block, imageVector = Icons.Rounded.Block,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onErrorContainer, tint = MaterialTheme.colorScheme.onErrorContainer,
modifier = Modifier.size(40.dp) modifier = Modifier.size(40.dp)