feat: Replace Material Icons with Tabler Icons across multiple screens

This commit is contained in:
2026-01-24 21:51:50 +05:00
parent 14628e11a2
commit 83531a5c57
15 changed files with 128 additions and 136 deletions

View File

@@ -82,6 +82,9 @@ dependencies {
// Icons extended
implementation("androidx.compose.material:material-icons-extended:1.5.4")
// Tabler Icons for Compose
implementation("br.com.devsrsouza.compose.icons:tabler-icons:1.1.0")
// Lottie for animations
implementation("com.airbnb.android:lottie-compose:6.1.0")

View File

@@ -6,9 +6,9 @@ import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -106,7 +106,7 @@ fun SetPasswordScreen(
) {
IconButton(onClick = onBack, enabled = !isCreating) {
Icon(
imageVector = Icons.Default.ArrowBack,
imageVector = TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = textColor.copy(alpha = 0.6f)
)
@@ -166,7 +166,7 @@ fun SetPasswordScreen(
contentAlignment = Alignment.Center
) {
Icon(
Icons.Default.Lock,
TablerIcons.Lock,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(iconInnerSize)
@@ -227,8 +227,8 @@ fun SetPasswordScreen(
IconButton(onClick = { passwordVisible = !passwordVisible }) {
Icon(
imageVector =
if (passwordVisible) Icons.Default.VisibilityOff
else Icons.Default.Visibility,
if (passwordVisible) TablerIcons.EyeOff
else TablerIcons.Eye,
contentDescription =
if (passwordVisible) "Hide" else "Show"
)
@@ -280,7 +280,7 @@ fun SetPasswordScreen(
else -> Color(0xFF4CAF50)
}
Icon(
imageVector = Icons.Default.Shield,
imageVector = TablerIcons.Shield,
contentDescription = null,
tint = strengthColor,
modifier = Modifier.size(16.dp)
@@ -306,7 +306,7 @@ fun SetPasswordScreen(
verticalAlignment = Alignment.Top
) {
Icon(
imageVector = Icons.Default.Warning,
imageVector = TablerIcons.AlertTriangle,
contentDescription = null,
tint = Color(0xFFE53935),
modifier = Modifier.size(16.dp)
@@ -353,8 +353,8 @@ fun SetPasswordScreen(
Icon(
imageVector =
if (confirmPasswordVisible)
Icons.Default.VisibilityOff
else Icons.Default.Visibility,
TablerIcons.EyeOff
else TablerIcons.Eye,
contentDescription =
if (confirmPasswordVisible) "Hide" else "Show"
)
@@ -394,7 +394,7 @@ fun SetPasswordScreen(
verticalAlignment = Alignment.CenterVertically
) {
val matchIcon =
if (passwordsMatch) Icons.Default.Check else Icons.Default.Close
if (passwordsMatch) TablerIcons.Check else TablerIcons.X
val matchColor =
if (passwordsMatch) Color(0xFF4CAF50) else Color(0xFFE53935)
val matchText =
@@ -446,7 +446,7 @@ fun SetPasswordScreen(
verticalAlignment = Alignment.Top
) {
Icon(
imageVector = Icons.Default.Info,
imageVector = TablerIcons.InfoCircle,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(20.dp)

View File

@@ -9,9 +9,10 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -430,7 +431,7 @@ fun UnlockScreen(
// Dropdown arrow with rotation (only show if multiple accounts)
if (accounts.size > 1) {
Icon(
imageVector = Icons.Default.KeyboardArrowDown,
imageVector = TablerIcons.ChevronDown,
contentDescription = null,
tint = secondaryTextColor.copy(alpha = 0.6f),
modifier =
@@ -488,7 +489,7 @@ fun UnlockScreen(
},
leadingIcon = {
Icon(
Icons.Default.Search,
TablerIcons.Search,
contentDescription = null,
tint = secondaryTextColor.copy(alpha = 0.6f)
)
@@ -606,7 +607,7 @@ fun UnlockScreen(
if (isSelected) {
Icon(
Icons.Default.Check,
TablerIcons.Check,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(20.dp)
@@ -657,8 +658,8 @@ fun UnlockScreen(
IconButton(onClick = { passwordVisible = !passwordVisible }) {
Icon(
imageVector =
if (passwordVisible) Icons.Default.VisibilityOff
else Icons.Default.Visibility,
if (passwordVisible) TablerIcons.EyeOff
else TablerIcons.Eye,
contentDescription = if (passwordVisible) "Hide" else "Show"
)
}
@@ -771,7 +772,7 @@ fun UnlockScreen(
)
} else {
Icon(
imageVector = Icons.Default.LockOpen,
imageVector = TablerIcons.LockOpen,
contentDescription = null,
modifier = Modifier.size(20.dp)
)
@@ -791,7 +792,7 @@ fun UnlockScreen(
) {
TextButton(onClick = onSwitchAccount) {
Icon(
imageVector = Icons.Default.PersonAdd,
imageVector = TablerIcons.UserPlus,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(20.dp)

View File

@@ -10,10 +10,9 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.outlined.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.saveable.rememberSaveable
@@ -493,7 +492,7 @@ fun ChatsListScreen(
// 👤 Profile Section
DrawerMenuItemEnhanced(
icon = Icons.Outlined.Person,
icon = TablerIcons.User,
text = "My Profile",
iconColor = menuIconColor,
textColor = textColor,
@@ -507,7 +506,7 @@ fun ChatsListScreen(
// 📖 Saved Messages
DrawerMenuItemEnhanced(
icon = Icons.Outlined.Bookmark,
icon = TablerIcons.Bookmark,
text = "Saved Messages",
iconColor = menuIconColor,
textColor = textColor,
@@ -528,7 +527,7 @@ fun ChatsListScreen(
// ⚙️ Settings
DrawerMenuItemEnhanced(
icon = Icons.Outlined.Settings,
icon = TablerIcons.Settings,
text = "Settings",
iconColor = menuIconColor,
textColor = textColor,
@@ -544,11 +543,9 @@ fun ChatsListScreen(
DrawerMenuItemEnhanced(
icon =
if (isDarkTheme)
Icons.Outlined
.LightMode
TablerIcons.Sun
else
Icons.Outlined
.DarkMode,
TablerIcons.Moon,
text =
if (isDarkTheme)
"Light Mode"
@@ -573,7 +570,7 @@ fun ChatsListScreen(
// Logout
DrawerMenuItemEnhanced(
icon = Icons.Outlined.Logout,
icon = TablerIcons.Logout,
text = "Log Out",
iconColor = Color(0xFFFF4444),
textColor = Color(0xFFFF4444),
@@ -654,8 +651,7 @@ fun ChatsListScreen(
}
) {
Icon(
Icons.Default
.ArrowBack,
TablerIcons.ArrowLeft,
contentDescription =
"Back",
tint =
@@ -675,8 +671,7 @@ fun ChatsListScreen(
}
) {
Icon(
Icons.Default
.Menu,
TablerIcons.Menu2,
contentDescription =
"Menu",
tint =
@@ -785,8 +780,7 @@ fun ChatsListScreen(
.AUTHENTICATED
) {
Icon(
Icons.Default
.Search,
TablerIcons.Search,
contentDescription =
"Search",
tint =
@@ -849,7 +843,7 @@ fun ChatsListScreen(
shape = CircleShape
) {
Icon(
Icons.Default.Edit,
TablerIcons.Edit,
contentDescription = "New Chat"
)
}
@@ -1290,7 +1284,7 @@ fun ChatItem(chat: Chat, isDarkTheme: Boolean, onClick: () -> Unit) {
Row(verticalAlignment = Alignment.CenterVertically) {
// Read status
Icon(
Icons.Default.DoneAll,
TablerIcons.Checks,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(16.dp)
@@ -1325,7 +1319,7 @@ fun ChatItem(chat: Chat, isDarkTheme: Boolean, onClick: () -> Unit) {
// Pin icon
if (chat.isPinned) {
Icon(
Icons.Default.PushPin,
TablerIcons.Pin,
contentDescription = "Pinned",
tint =
secondaryTextColor.copy(
@@ -1527,8 +1521,8 @@ fun SwipeableDialogItem(
Icon(
imageVector =
if (isBlocked)
Icons.Default.LockOpen
else Icons.Default.Block,
TablerIcons.LockOpen
else TablerIcons.Ban,
contentDescription =
if (isBlocked) "Unblock"
else "Block",
@@ -1566,7 +1560,7 @@ fun SwipeableDialogItem(
verticalArrangement = Arrangement.Center
) {
Icon(
imageVector = Icons.Default.Delete,
imageVector = TablerIcons.Trash,
contentDescription = "Delete",
tint = Color.White,
modifier = Modifier.size(22.dp)
@@ -1736,7 +1730,7 @@ fun DialogItemContent(
contentAlignment = Alignment.Center
) {
Icon(
Icons.Default.Bookmark,
TablerIcons.Bookmark,
contentDescription = null,
tint = Color.White,
modifier = Modifier.size(24.dp)
@@ -1799,7 +1793,7 @@ fun DialogItemContent(
// галочки (прочитано)
if (dialog.isSavedMessages) {
Icon(
imageVector = Icons.Default.DoneAll,
imageVector = TablerIcons.Checks,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(16.dp)
@@ -1822,8 +1816,7 @@ fun DialogItemContent(
// ERROR - показываем иконку ошибки
Icon(
imageVector =
Icons.Outlined
.ErrorOutline,
TablerIcons.AlertCircle,
contentDescription =
"Sending failed",
tint =
@@ -1843,8 +1836,7 @@ fun DialogItemContent(
// галочки
Icon(
imageVector =
Icons.Default
.DoneAll,
TablerIcons.Checks,
contentDescription = null,
tint = PrimaryBlue,
modifier =
@@ -1860,7 +1852,7 @@ fun DialogItemContent(
// одна серая галочка
Icon(
imageVector =
Icons.Default.Done,
TablerIcons.Check,
contentDescription = null,
tint =
secondaryTextColor
@@ -2025,7 +2017,7 @@ fun RequestsSection(count: Int, isDarkTheme: Boolean, onClick: () -> Unit) {
)
Icon(
imageVector = Icons.Default.ChevronRight,
imageVector = TablerIcons.ChevronRight,
contentDescription = "Open requests",
tint = arrowColor.copy(alpha = 0.6f),
modifier = Modifier.size(24.dp)
@@ -2168,8 +2160,8 @@ fun FcmLogsSection(logs: List<String>, isDarkTheme: Boolean, onClearLogs: () ->
) {
Icon(
imageVector =
if (expanded) Icons.Default.KeyboardArrowDown
else Icons.Default.KeyboardArrowRight,
if (expanded) TablerIcons.ChevronDown
else TablerIcons.ChevronRight,
contentDescription = null,
tint = accentColor,
modifier = Modifier.size(24.dp)

View File

@@ -11,8 +11,10 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import compose.icons.TablerIcons
import compose.icons.tablericons.ArrowLeft
import compose.icons.tablericons.X
import compose.icons.tablericons.CircleCheck
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
@@ -139,7 +141,7 @@ fun SearchScreen(
}
) {
Icon(
Icons.Default.ArrowBack,
TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = textColor.copy(alpha = 0.6f)
)
@@ -199,7 +201,7 @@ fun SearchScreen(
) {
IconButton(onClick = { searchViewModel.clearSearchQuery() }) {
Icon(
Icons.Default.Clear,
TablerIcons.X,
contentDescription = "Clear",
tint = secondaryTextColor.copy(alpha = 0.6f)
)
@@ -372,7 +374,7 @@ private fun RecentUserItem(
if (user.verified != 0) {
Spacer(modifier = Modifier.width(4.dp))
Icon(
Icons.Default.Verified,
TablerIcons.CircleCheck,
contentDescription = "Verified",
tint = PrimaryBlue,
modifier = Modifier.size(16.dp)
@@ -393,7 +395,7 @@ private fun RecentUserItem(
// Remove button
IconButton(onClick = onRemove, modifier = Modifier.size(40.dp)) {
Icon(
Icons.Default.Close,
TablerIcons.X,
contentDescription = "Remove",
tint = secondaryTextColor.copy(alpha = 0.6f),
modifier = Modifier.size(20.dp)

View File

@@ -13,9 +13,9 @@ import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -235,7 +235,7 @@ fun MessageBubble(
contentAlignment = Alignment.Center
) {
Icon(
Icons.Default.Reply,
TablerIcons.CornerUpLeft,
contentDescription = "Reply",
tint = if (swipeProgress >= 1f) Color.White
else if (isDarkTheme) Color.White.copy(alpha = 0.7f)
@@ -286,7 +286,7 @@ fun MessageBubble(
contentAlignment = Alignment.Center
) {
Icon(
Icons.Default.Check,
TablerIcons.Check,
contentDescription = "Selected",
tint = Color.White,
modifier = Modifier.size(16.dp)
@@ -492,11 +492,11 @@ fun AnimatedMessageStatus(
Icon(
imageVector = when (currentStatus) {
MessageStatus.SENDING -> Icons.Default.Schedule
MessageStatus.SENT -> Icons.Default.Done
MessageStatus.DELIVERED -> Icons.Default.Done
MessageStatus.READ -> Icons.Default.DoneAll
MessageStatus.ERROR -> Icons.Default.Error
MessageStatus.SENDING -> TablerIcons.Clock
MessageStatus.SENT -> TablerIcons.Check
MessageStatus.DELIVERED -> TablerIcons.Check
MessageStatus.READ -> TablerIcons.Checks
MessageStatus.ERROR -> TablerIcons.AlertCircle
},
contentDescription = null,
tint = animatedColor,
@@ -523,7 +523,7 @@ fun AnimatedMessageStatus(
},
leadingIcon = {
Icon(
Icons.Default.Refresh,
TablerIcons.Refresh,
contentDescription = null,
modifier = Modifier.size(18.dp)
)
@@ -537,7 +537,7 @@ fun AnimatedMessageStatus(
},
leadingIcon = {
Icon(
Icons.Default.Delete,
TablerIcons.Trash,
contentDescription = null,
tint = Color(0xFFE53935),
modifier = Modifier.size(18.dp)
@@ -695,7 +695,7 @@ fun KebabMenu(
) {
if (!isSavedMessages) {
KebabMenuItem(
icon = if (isBlocked) Icons.Default.CheckCircle else Icons.Default.Block,
icon = if (isBlocked) TablerIcons.CircleCheck else TablerIcons.Ban,
text = if (isBlocked) "Unblock User" else "Block User",
onClick = { if (isBlocked) onUnblockClick() else onBlockClick() },
tintColor = PrimaryBlue,
@@ -712,7 +712,7 @@ fun KebabMenu(
}
KebabMenuItem(
icon = Icons.Default.Delete,
icon = TablerIcons.Trash,
text = "Delete Chat",
onClick = onDeleteClick,
tintColor = Color(0xFFFF3B30),
@@ -778,7 +778,7 @@ fun ProfilePhotoMenu(
)
) {
ProfilePhotoMenuItem(
icon = Icons.Default.AddAPhoto,
icon = TablerIcons.CameraPlus,
text = "Set Profile Photo",
onClick = onSetPhotoClick,
tintColor = if (isDarkTheme) Color.White else Color.Black,
@@ -810,7 +810,7 @@ fun OtherProfileMenu(
)
) {
ProfilePhotoMenuItem(
icon = if (isBlocked) Icons.Default.CheckCircle else Icons.Default.Block,
icon = if (isBlocked) TablerIcons.CircleCheck else TablerIcons.Ban,
text = if (isBlocked) "Unblock User" else "Block User",
onClick = onBlockClick,
tintColor = PrimaryBlue,
@@ -826,7 +826,7 @@ fun OtherProfileMenu(
)
ProfilePhotoMenuItem(
icon = Icons.Default.Delete,
icon = TablerIcons.Trash,
text = "Clear Chat History",
onClick = onClearChatClick,
tintColor = Color(0xFFFF3B30),

View File

@@ -8,9 +8,9 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
@@ -230,7 +230,7 @@ fun MessageInputBar(
horizontalArrangement = Arrangement.Center
) {
Icon(
Icons.Default.Block,
TablerIcons.Ban,
contentDescription = null,
tint = Color(0xFFFF6B6B),
modifier = Modifier.size(20.dp)
@@ -341,7 +341,7 @@ fun MessageInputBar(
contentAlignment = Alignment.Center
) {
Icon(
Icons.Default.Close,
TablerIcons.X,
contentDescription = "Cancel",
tint = if (isDarkTheme) Color.White.copy(alpha = 0.5f)
else Color.Black.copy(alpha = 0.4f),
@@ -364,7 +364,7 @@ fun MessageInputBar(
modifier = Modifier.size(40.dp)
) {
Icon(
Icons.Default.AttachFile,
TablerIcons.Paperclip,
contentDescription = "Attach",
tint = if (isDarkTheme) Color(0xFF8E8E93).copy(alpha = 0.6f)
else Color(0xFF8E8E93).copy(alpha = 0.6f),
@@ -407,8 +407,8 @@ fun MessageInputBar(
modifier = Modifier.size(40.dp)
) {
Icon(
if (showEmojiPicker) Icons.Default.Keyboard
else Icons.Default.SentimentSatisfiedAlt,
if (showEmojiPicker) TablerIcons.Keyboard
else TablerIcons.MoodSmile,
contentDescription = "Emoji",
tint = if (isDarkTheme) Color(0xFF8E8E93).copy(alpha = 0.6f)
else Color(0xFF8E8E93).copy(alpha = 0.6f),

View File

@@ -15,9 +15,9 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -57,7 +57,7 @@ data class EmojiCategory(
// Порядок категорий согласно Unicode CLDR
val EMOJI_CATEGORIES = listOf(
// 😀 Smileys & Emotion (Unicode ordering)
EmojiCategory("Smileys", "Смайлы", Icons.Default.SentimentSatisfied, listOf(
EmojiCategory("Smileys", "Смайлы", TablerIcons.MoodSmile, listOf(
// Face-Smiling
0x1F600 to 0x1F60F, // 😀-😏
// Face-Affection
@@ -103,7 +103,7 @@ val EMOJI_CATEGORIES = listOf(
0x2639 to 0x2639 // ☹
)),
// 👋 People & Body (Hands, Body parts, Persons)
EmojiCategory("People", "Люди", Icons.Default.Person, listOf(
EmojiCategory("People", "Люди", TablerIcons.User, listOf(
// Hand-Fingers-Open
0x1F44B to 0x1F44D, // 👋-👍
0x1FAF0 to 0x1FAF8, // 🫰-🫸
@@ -137,7 +137,7 @@ val EMOJI_CATEGORIES = listOf(
0x1F9CE to 0x1F9CF // 🧎-🧏
)),
// 🐱 Animals & Nature
EmojiCategory("Animals", "Животные", Icons.Default.Pets, listOf(
EmojiCategory("Animals", "Животные", TablerIcons.Leaf, listOf(
// Animal-Mammal
0x1F435 to 0x1F43E, // 🐵-🐾
0x1F9A0 to 0x1F9AE, // 🦠-🦮
@@ -174,7 +174,7 @@ val EMOJI_CATEGORIES = listOf(
0x2618 to 0x2618 // ☘
)),
// 🍎 Food & Drink
EmojiCategory("Food", "Еда", Icons.Default.Restaurant, listOf(
EmojiCategory("Food", "Еда", TablerIcons.ToolsKitchen, listOf(
// Food-Fruit
0x1F347 to 0x1F353, // 🍇-🍓
0x1FAD0 to 0x1FAD4, // 🫐-🫔
@@ -195,7 +195,7 @@ val EMOJI_CATEGORIES = listOf(
0x1F9C3 to 0x1F9C9 // 🧃-🧉
)),
// ✈️ Travel & Places
EmojiCategory("Travel", "Места", Icons.Default.Flight, listOf(
EmojiCategory("Travel", "Места", TablerIcons.Plane, listOf(
// Place-Map
0x1F30D to 0x1F310, // 🌍-🌐
0x1F5FA to 0x1F5FA, // 🗺
@@ -221,7 +221,7 @@ val EMOJI_CATEGORIES = listOf(
0x2708 to 0x2708 // ✈
)),
// ⚽ Activities
EmojiCategory("Activities", "Спорт", Icons.Default.SportsSoccer, listOf(
EmojiCategory("Activities", "Спорт", TablerIcons.BallFootball, listOf(
// Event
0x1F380 to 0x1F393, // 🎀-🎓
0x1F9E7 to 0x1F9E7, // 🧧
@@ -247,7 +247,7 @@ val EMOJI_CATEGORIES = listOf(
0x1F9F6 to 0x1F9FF // 🧶-🧿
)),
// 💡 Objects
EmojiCategory("Objects", "Объекты", Icons.Default.Lightbulb, listOf(
EmojiCategory("Objects", "Объекты", TablerIcons.Bulb, listOf(
// Clothing
0x1F451 to 0x1F462, // 👑-👢
0x1F97B to 0x1F97F, // 🥻-🥿
@@ -302,7 +302,7 @@ val EMOJI_CATEGORIES = listOf(
0x1F4FF to 0x1F4FF // 📿
)),
// ❤️ Symbols
EmojiCategory("Symbols", "Символы", Icons.Default.Favorite, listOf(
EmojiCategory("Symbols", "Символы", TablerIcons.Heart, listOf(
// Heart
0x2764 to 0x2764, // ❤
0x1F493 to 0x1F49F, // 💓-💟
@@ -343,7 +343,7 @@ val EMOJI_CATEGORIES = listOf(
0x2753 to 0x2757 // ❓-❗
)),
// 🏳️ Flags
EmojiCategory("Flags", "Флаги", Icons.Default.Flag, listOf(
EmojiCategory("Flags", "Флаги", TablerIcons.Flag, listOf(
// Flag
0x1F3C1 to 0x1F3C1, // 🏁
0x1F6A9 to 0x1F6A9, // 🚩

View File

@@ -15,9 +15,9 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier

View File

@@ -4,8 +4,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Verified
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@@ -13,6 +11,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import compose.icons.TablerIcons
import compose.icons.tablericons.CircleCheck
/**
* Значок верификации пользователя
@@ -37,7 +37,7 @@ fun VerifiedBadge(
}
Icon(
Icons.Default.Verified,
TablerIcons.CircleCheck,
contentDescription = "Verified",
tint = badgeColor,
modifier = modifier.size(size.dp)

View File

@@ -14,10 +14,10 @@ import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.DarkMode
import androidx.compose.material.icons.filled.LightMode
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.Sun
import compose.icons.tablericons.Moon
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -379,8 +379,8 @@ fun ThemeToggleButton(
) {
Icon(
imageVector =
if (isDarkTheme) Icons.Default.LightMode
else Icons.Default.DarkMode,
if (isDarkTheme) TablerIcons.Sun
else TablerIcons.Moon,
contentDescription =
if (isDarkTheme) "Switch to Light Mode"
else "Switch to Dark Mode",

View File

@@ -6,10 +6,9 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -64,7 +63,7 @@ fun ProfileLogsScreen(
) {
IconButton(onClick = onBack) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = textColor
)
@@ -80,7 +79,7 @@ fun ProfileLogsScreen(
)
IconButton(onClick = onClearLogs) {
Icon(
imageVector = Icons.Filled.Delete,
imageVector = TablerIcons.Trash,
contentDescription = "Clear logs",
tint = secondaryTextColor
)

View File

@@ -19,10 +19,9 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.outlined.*
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -403,7 +402,7 @@ fun ProfileScreen(
TelegramSectionTitle(title = "Settings", isDarkTheme = isDarkTheme)
TelegramSettingsItem(
icon = Icons.Outlined.Palette,
icon = TablerIcons.Palette,
title = "Theme",
onClick = onNavigateToTheme,
isDarkTheme = isDarkTheme,
@@ -411,7 +410,7 @@ fun ProfileScreen(
)
TelegramSettingsItem(
icon = Icons.Outlined.Lock,
icon = TablerIcons.Lock,
title = "Safety",
onClick = onNavigateToSafety,
isDarkTheme = isDarkTheme,
@@ -586,7 +585,7 @@ private fun CollapsingProfileHeader(
modifier = Modifier.size(48.dp)
) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = Color.White,
modifier = Modifier.size(24.dp)
@@ -610,7 +609,7 @@ private fun CollapsingProfileHeader(
modifier = Modifier.size(48.dp)
) {
Icon(
imageVector = Icons.Default.MoreVert,
imageVector = TablerIcons.DotsVertical,
contentDescription = "Profile menu",
tint = Color.White,
modifier = Modifier.size(24.dp)
@@ -766,7 +765,7 @@ fun ProfileCard(
.padding(4.dp)
) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = Color.White
)
@@ -1058,7 +1057,7 @@ private fun TelegramBiometricItem(
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = Icons.Outlined.Fingerprint,
imageVector = TablerIcons.Fingerprint,
contentDescription = null,
tint = iconColor,
modifier = Modifier.size(24.dp)
@@ -1101,7 +1100,7 @@ private fun TelegramLogoutItem(
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = Icons.Outlined.Logout,
imageVector = TablerIcons.Logout,
contentDescription = null,
tint = redColor,
modifier = Modifier.size(24.dp)
@@ -1193,7 +1192,7 @@ fun ProfileNavigationItem(
if (!hideChevron) {
Icon(
imageVector = Icons.Default.ChevronRight,
imageVector = TablerIcons.ChevronRight,
contentDescription = null,
tint = iconTintColor.copy(alpha = 0.5f),
modifier = Modifier.size(20.dp)

View File

@@ -11,13 +11,9 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.DarkMode
import androidx.compose.material.icons.filled.DoneAll
import androidx.compose.material.icons.filled.LightMode
import androidx.compose.material.icons.filled.Smartphone
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
@@ -66,7 +62,7 @@ fun ThemeScreen(
) {
IconButton(onClick = onBack) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = textColor
)
@@ -103,7 +99,7 @@ fun ThemeScreen(
Column {
TelegramThemeOption(
icon = Icons.Filled.LightMode,
icon = TablerIcons.Sun,
title = "Light",
isSelected = themeMode == "light",
onClick = {
@@ -119,7 +115,7 @@ fun ThemeScreen(
)
TelegramThemeOption(
icon = Icons.Filled.DarkMode,
icon = TablerIcons.Moon,
title = "Dark",
isSelected = themeMode == "dark",
onClick = {
@@ -135,7 +131,7 @@ fun ThemeScreen(
)
TelegramThemeOption(
icon = Icons.Filled.Smartphone,
icon = TablerIcons.DeviceMobile,
title = "System",
isSelected = themeMode == "auto",
onClick = {
@@ -210,7 +206,7 @@ private fun TelegramThemeOption(
// Radio button
if (isSelected) {
Icon(
imageVector = Icons.Filled.Check,
imageVector = TablerIcons.Check,
contentDescription = null,
tint = Color(0xFF007AFF),
modifier = Modifier.size(20.dp)
@@ -359,7 +355,7 @@ private fun MessageBubble(
if (isMe) {
// Read checkmarks (DoneAll icon like in real chat)
Icon(
imageVector = Icons.Default.DoneAll,
imageVector = TablerIcons.Checks,
contentDescription = null,
tint = Color(0xFF4FC3F7), // Blue checkmarks for read messages
modifier = Modifier.size(14.dp)

View File

@@ -6,9 +6,9 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.*
import compose.icons.TablerIcons
import compose.icons.tablericons.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -48,7 +48,7 @@ fun UpdatesScreen(
) {
IconButton(onClick = onBack) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = TablerIcons.ArrowLeft,
contentDescription = "Back",
tint = if (isDarkTheme) Color.White else Color.Black
)