feat: Replace Telegram-style emoji picker with Apple-style emoji picker for enhanced user experience
This commit is contained in:
@@ -1761,95 +1761,25 @@ private fun MessageInputBar(
|
||||
}
|
||||
} // End of else (not blocked)
|
||||
|
||||
// 🔥 TELEGRAM-STYLE EMOJI PICKER - фиксированная высота как у клавиатуры
|
||||
// 🔥 APPLE EMOJI PICKER - с категориями и фоновой загрузкой
|
||||
if (!isBlocked) {
|
||||
// Показываем когда showEmojiPicker = true ИЛИ когда клавиатура закрывается
|
||||
// Это предотвращает прыжок инпута
|
||||
val shouldShowEmojiSpace = showEmojiPicker || (isKeyboardVisible && showEmojiPicker)
|
||||
|
||||
AnimatedVisibility(
|
||||
visible = showEmojiPicker,
|
||||
enter = fadeIn(tween(150)),
|
||||
exit = fadeOut(tween(100))
|
||||
) {
|
||||
// Telegram-style simple emoji grid - высота = высота клавиатуры
|
||||
Column(
|
||||
AppleEmojiPickerPanel(
|
||||
isDarkTheme = isDarkTheme,
|
||||
onEmojiSelected = { emoji ->
|
||||
onValueChange(value + emoji)
|
||||
},
|
||||
onClose = {
|
||||
showEmojiPicker = false
|
||||
},
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(emojiPanelHeight) // 🔥 Динамическая высота
|
||||
.background(if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFF2F2F7))
|
||||
) {
|
||||
// Топ бар с кнопкой закрытия (как в Telegram)
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 8.dp, vertical = 4.dp),
|
||||
horizontalArrangement = Arrangement.End
|
||||
) {
|
||||
IconButton(
|
||||
onClick = {
|
||||
showEmojiPicker = false
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.KeyboardArrowDown,
|
||||
contentDescription = "Close",
|
||||
tint = if (isDarkTheme) Color(0xFF8E8E93) else Color(0xFF8E8E93)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Простая сетка эмодзи (самые популярные)
|
||||
val emojis = remember {
|
||||
listOf(
|
||||
"😀", "😃", "😄", "😁", "😆", "😅", "🤣", "😂",
|
||||
"🙂", "🙃", "😉", "😊", "😇", "🥰", "😍", "🤩",
|
||||
"😘", "😗", "😚", "😙", "😋", "😛", "😜", "🤪",
|
||||
"😝", "🤑", "🤗", "🤭", "🤫", "🤔", "🤐", "🤨",
|
||||
"😐", "😑", "😶", "😏", "😒", "🙄", "😬", "🤥",
|
||||
"😌", "😔", "😪", "🤤", "😴", "😷", "🤒", "🤕",
|
||||
"🤢", "🤮", "🤧", "🥵", "🥶", "😶", "😵", "🤯",
|
||||
"🤠", "🥳", "😎", "🤓", "🧐", "😕", "😟", "🙁",
|
||||
"☹️", "😮", "😯", "😲", "😳", "🥺", "😦", "😧",
|
||||
"😨", "😰", "😥", "😢", "😭", "😱", "😖", "😣",
|
||||
"😞", "😓", "😩", "😫", "🥱", "😤", "😡", "😠",
|
||||
"🤬", "😈", "👿", "💀", "☠️", "💩", "🤡", "👹",
|
||||
"👺", "👻", "👽", "👾", "🤖", "😺", "😸", "😹",
|
||||
"😻", "😼", "😽", "🙀", "😿", "😾", "❤️", "🧡",
|
||||
"💛", "💚", "💙", "💜", "🖤", "🤍", "🤎", "💔",
|
||||
"❣️", "💕", "💞", "💓", "💗", "💖", "💘", "💝",
|
||||
"👋", "🤚", "🖐", "✋", "🖖", "👌", "🤏", "✌️",
|
||||
"🤞", "🤟", "🤘", "🤙", "👈", "👉", "👆", "🖕",
|
||||
"👇", "☝️", "👍", "👎", "✊", "👊", "🤛", "🤜",
|
||||
"👏", "🙌", "👐", "🤲", "🤝", "🙏", "✍️", "💅"
|
||||
)
|
||||
}
|
||||
|
||||
LazyVerticalGrid(
|
||||
columns = GridCells.Fixed(8),
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(horizontal = 4.dp),
|
||||
contentPadding = PaddingValues(vertical = 8.dp)
|
||||
) {
|
||||
items(emojis) { emoji ->
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.aspectRatio(1f)
|
||||
.clickable {
|
||||
onValueChange(value + emoji)
|
||||
}
|
||||
.padding(2.dp),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Text(
|
||||
text = emoji,
|
||||
fontSize = 28.sp
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.height(emojiPanelHeight)
|
||||
)
|
||||
}
|
||||
} // End of if (!isBlocked) for emoji picker
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user