feat(icons): migrate Material Icons → Material Symbols (thin weight)
Replace the `material-icons-extended` library with Google's Material Symbols
variable font, rendered via a new `commons/icons/symbols/` package. Weight is
set to 100 (Thin) via a single tunable default (MaterialSymbolsDefaults.WEIGHT),
so we can re-tune line thickness globally in one line without regenerating
assets.
Key changes:
- commons/composeResources/font/material_symbols_outlined.ttf: Material Symbols
Outlined variable font (all 3600+ glyphs, 4 design axes: wght/FILL/GRAD/opsz).
- commons/icons/symbols/: MaterialSymbol data class, 219 codepoint constants,
variable-font FontFamily helper, Canvas-backed Icon composable (overload that
accepts MaterialSymbol and supports auto-mirror for RTL), and a Painter
wrapper for use with Image / AsyncImage.
- Bulk-rewrote 250+ call sites across amethyst/, commons/, desktopApp/:
Icons.{Default,Outlined,Filled,Rounded,AutoMirrored.*}.X → MaterialSymbols.X
or MaterialSymbols.AutoMirrored.X. `imageVector =` renamed to `symbol =`
inside Icon() calls; Image(imageVector = MS.X) converted to
Image(painter = rememberMaterialSymbolPainter(MS.X)).
- Dropped material-icons-extended dependency from commons, desktopApp,
amethyst build files.
Hand-drawn custom icons (Bookmark, Like, Reply, Zap, chess pieces, robohash)
remain as ImageVector and are untouched.
https://claude.ai/code/session_016gV9gEaSud6kDMdcaqy8ti
This commit is contained in:
@@ -33,8 +33,6 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Refresh
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -71,6 +69,8 @@ import androidx.compose.ui.window.Window
|
||||
import androidx.compose.ui.window.WindowPosition
|
||||
import androidx.compose.ui.window.application
|
||||
import androidx.compose.ui.window.rememberWindowState
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.account.AccountManager
|
||||
import com.vitorpamplona.amethyst.desktop.account.AccountState
|
||||
import com.vitorpamplona.amethyst.desktop.cache.DesktopLocalCache
|
||||
@@ -1394,7 +1394,7 @@ fun RelaySettingsScreen(
|
||||
)
|
||||
IconButton(onClick = { relayManager.connect() }) {
|
||||
Icon(
|
||||
Icons.Default.Refresh,
|
||||
MaterialSymbols.Refresh,
|
||||
contentDescription = "Reconnect",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
|
||||
+8
-13
@@ -38,13 +38,6 @@ import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft
|
||||
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Refresh
|
||||
import androidx.compose.material.icons.filled.Visibility
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
@@ -84,6 +77,8 @@ import com.vitorpamplona.amethyst.commons.chess.PublicGame
|
||||
import com.vitorpamplona.amethyst.commons.chess.PublicGameCard
|
||||
import com.vitorpamplona.amethyst.commons.chess.SpectatingGameCard
|
||||
import com.vitorpamplona.amethyst.commons.data.UserMetadataCache
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.UserAvatar
|
||||
import com.vitorpamplona.amethyst.desktop.account.AccountState
|
||||
import com.vitorpamplona.amethyst.desktop.network.DesktopRelayConnectionManager
|
||||
@@ -193,7 +188,7 @@ fun ChessScreen(
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
if (selectedGameId != null) {
|
||||
IconButton(onClick = { viewModel.selectGame(null) }) {
|
||||
Icon(Icons.AutoMirrored.Default.ArrowBack, "Back to list")
|
||||
Icon(MaterialSymbols.AutoMirrored.ArrowBack, "Back to list")
|
||||
}
|
||||
Spacer(Modifier.width(8.dp))
|
||||
}
|
||||
@@ -211,13 +206,13 @@ fun ChessScreen(
|
||||
) {
|
||||
// Refresh button
|
||||
IconButton(onClick = { viewModel.forceRefresh() }) {
|
||||
Icon(Icons.Default.Refresh, "Refresh")
|
||||
Icon(MaterialSymbols.Refresh, "Refresh")
|
||||
}
|
||||
|
||||
// New Game button
|
||||
if (!account.isReadOnly) {
|
||||
Button(onClick = { showNewGameDialog = true }) {
|
||||
Icon(Icons.Default.Add, "New Game")
|
||||
Icon(MaterialSymbols.Add, "New Game")
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Text("New Game")
|
||||
}
|
||||
@@ -728,9 +723,9 @@ private fun DesktopChessGameLayout(
|
||||
) {
|
||||
Icon(
|
||||
if (showInfoPanel) {
|
||||
Icons.AutoMirrored.Filled.KeyboardArrowRight
|
||||
MaterialSymbols.AutoMirrored.KeyboardArrowRight
|
||||
} else {
|
||||
Icons.AutoMirrored.Filled.KeyboardArrowLeft
|
||||
MaterialSymbols.AutoMirrored.KeyboardArrowLeft
|
||||
},
|
||||
contentDescription = if (showInfoPanel) "Hide info panel" else "Show info panel",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -907,7 +902,7 @@ private fun DesktopChessGameLayout(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Icon(Icons.Default.Visibility, contentDescription = null)
|
||||
Icon(MaterialSymbols.Visibility, contentDescription = null)
|
||||
Text(
|
||||
"Watching game - spectator mode",
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
|
||||
+5
-7
@@ -41,10 +41,6 @@ import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.text.selection.SelectionContainer
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
|
||||
import androidx.compose.material.icons.filled.KeyboardArrowDown
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -75,6 +71,8 @@ import com.vitorpamplona.amethyst.commons.compose.article.ArticleHeader
|
||||
import com.vitorpamplona.amethyst.commons.compose.article.TableOfContents
|
||||
import com.vitorpamplona.amethyst.commons.compose.article.extractTableOfContents
|
||||
import com.vitorpamplona.amethyst.commons.compose.markdown.RenderMarkdown
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.nip23LongContent.ReadingTimeCalculator
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.EmptyState
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.LoadingState
|
||||
@@ -415,7 +413,7 @@ fun ArticleReaderScreen(
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
IconButton(onClick = onBack) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowBack,
|
||||
MaterialSymbols.AutoMirrored.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
modifier = Modifier.size(24.dp),
|
||||
)
|
||||
@@ -531,9 +529,9 @@ fun ArticleReaderScreen(
|
||||
) {
|
||||
Icon(
|
||||
if (showHighlightsPanel) {
|
||||
Icons.Default.KeyboardArrowDown
|
||||
MaterialSymbols.KeyboardArrowDown
|
||||
} else {
|
||||
Icons.AutoMirrored.Filled.KeyboardArrowRight
|
||||
MaterialSymbols.AutoMirrored.KeyboardArrowRight
|
||||
},
|
||||
contentDescription = "Toggle highlights",
|
||||
modifier = Modifier.size(20.dp),
|
||||
|
||||
+4
-5
@@ -30,9 +30,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.ContentCopy
|
||||
import androidx.compose.material.icons.filled.Warning
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -51,6 +48,8 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.account.AccountState
|
||||
import java.awt.Toolkit
|
||||
import java.awt.datatransfer.StringSelection
|
||||
@@ -85,7 +84,7 @@ fun DevSettingsSection(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Warning,
|
||||
MaterialSymbols.Warning,
|
||||
contentDescription = "Warning",
|
||||
tint = Color(0xFFFF9800),
|
||||
)
|
||||
@@ -205,7 +204,7 @@ private fun KeyRow(
|
||||
),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.ContentCopy,
|
||||
MaterialSymbols.ContentCopy,
|
||||
contentDescription = "Copy",
|
||||
modifier = Modifier.padding(end = 4.dp),
|
||||
)
|
||||
|
||||
@@ -31,9 +31,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
@@ -54,6 +51,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.service.drafts.DesktopDraftStore
|
||||
import com.vitorpamplona.amethyst.desktop.service.drafts.DraftEntry
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -79,7 +78,7 @@ fun DraftsScreen(
|
||||
color = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
Button(onClick = { onOpenEditor(null) }) {
|
||||
Icon(Icons.Default.Add, contentDescription = null)
|
||||
Icon(MaterialSymbols.Add, contentDescription = null)
|
||||
Text("New Draft", modifier = Modifier.padding(start = 4.dp))
|
||||
}
|
||||
}
|
||||
@@ -178,7 +177,7 @@ private fun DraftCard(
|
||||
}
|
||||
IconButton(onClick = onDelete) {
|
||||
Icon(
|
||||
Icons.Default.Delete,
|
||||
MaterialSymbols.Delete,
|
||||
contentDescription = "Delete draft",
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
)
|
||||
|
||||
@@ -36,10 +36,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Dns
|
||||
import androidx.compose.material.icons.filled.Refresh
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.FilterChip
|
||||
@@ -61,6 +57,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.compose.elements.BoostedMark
|
||||
import com.vitorpamplona.amethyst.commons.compose.layouts.GenericRepostLayout
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.Note
|
||||
import com.vitorpamplona.amethyst.commons.richtext.UrlParser
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.EmptyState
|
||||
@@ -701,7 +699,7 @@ private fun FeedHeader(
|
||||
modifier = Modifier.size(24.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Dns,
|
||||
MaterialSymbols.Dns,
|
||||
contentDescription = "Edit Feed Relays",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(18.dp),
|
||||
@@ -714,7 +712,7 @@ private fun FeedHeader(
|
||||
modifier = Modifier.size(24.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Refresh,
|
||||
MaterialSymbols.Refresh,
|
||||
contentDescription = "Refresh",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(18.dp),
|
||||
@@ -727,7 +725,7 @@ private fun FeedHeader(
|
||||
onClick = onCompose,
|
||||
enabled = account != null && !account.isReadOnly,
|
||||
) {
|
||||
Icon(Icons.Default.Add, "New Post", Modifier.size(18.dp))
|
||||
Icon(MaterialSymbols.Add, "New Post", Modifier.size(18.dp))
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Text("New Post")
|
||||
}
|
||||
|
||||
@@ -32,9 +32,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.LinearProgressIndicator
|
||||
@@ -51,6 +48,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.login_subtitle_desktop
|
||||
import com.vitorpamplona.amethyst.commons.resources.login_title
|
||||
@@ -213,7 +212,7 @@ fun ConnectingRelaysScreen(
|
||||
when {
|
||||
status.connected -> {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
contentDescription = null,
|
||||
tint = Color(0xFF4CAF50),
|
||||
modifier = Modifier.size(14.dp),
|
||||
@@ -222,7 +221,7 @@ fun ConnectingRelaysScreen(
|
||||
|
||||
status.error != null -> {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.size(14.dp),
|
||||
|
||||
@@ -29,10 +29,6 @@ import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Favorite
|
||||
import androidx.compose.material.icons.filled.MoreVert
|
||||
import androidx.compose.material.icons.outlined.FavoriteBorder
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
@@ -60,6 +56,8 @@ import com.vitorpamplona.amethyst.commons.icons.BookmarkFilled
|
||||
import com.vitorpamplona.amethyst.commons.icons.Reply
|
||||
import com.vitorpamplona.amethyst.commons.icons.Repost
|
||||
import com.vitorpamplona.amethyst.commons.icons.Zap
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.nip18Reposts.RepostAction
|
||||
import com.vitorpamplona.amethyst.commons.model.nip25Reactions.ReactionAction
|
||||
import com.vitorpamplona.amethyst.commons.model.nip51Bookmarks.BookmarkAction
|
||||
@@ -552,7 +550,7 @@ fun NoteActionsRow(
|
||||
modifier = Modifier.size(32.dp),
|
||||
) {
|
||||
Icon(
|
||||
if (isLiked) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder,
|
||||
if (isLiked) MaterialSymbols.Favorite else MaterialSymbols.FavoriteBorder,
|
||||
contentDescription = if (isLiked) "Unlike" else "Like",
|
||||
tint =
|
||||
if (isLiked) {
|
||||
@@ -731,7 +729,7 @@ fun NoteActionsRow(
|
||||
modifier = Modifier.size(32.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.MoreVert,
|
||||
MaterialSymbols.MoreVert,
|
||||
contentDescription = "More options",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.size(18.dp),
|
||||
|
||||
+12
-7
@@ -31,8 +31,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Favorite
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -48,10 +46,13 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.Reply
|
||||
import com.vitorpamplona.amethyst.commons.icons.Repost
|
||||
import com.vitorpamplona.amethyst.commons.icons.Zap
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.rememberMaterialSymbolPainter
|
||||
import com.vitorpamplona.amethyst.commons.state.EventCollectionState
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.EmptyState
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.LoadingState
|
||||
@@ -273,28 +274,32 @@ fun NotificationCard(notification: NotificationItem) {
|
||||
val (icon, label, color) =
|
||||
when (notification) {
|
||||
is NotificationItem.Mention -> {
|
||||
Triple(Icons.Default.Favorite, "mentioned you", MaterialTheme.colorScheme.primary)
|
||||
Triple(
|
||||
rememberMaterialSymbolPainter(MaterialSymbols.Favorite),
|
||||
"mentioned you",
|
||||
MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
}
|
||||
|
||||
is NotificationItem.Reply -> {
|
||||
Triple(Reply, "replied", MaterialTheme.colorScheme.secondary)
|
||||
Triple(rememberVectorPainter(Reply), "replied", MaterialTheme.colorScheme.secondary)
|
||||
}
|
||||
|
||||
is NotificationItem.Reaction -> {
|
||||
Triple(
|
||||
Icons.Default.Favorite,
|
||||
rememberMaterialSymbolPainter(MaterialSymbols.Favorite),
|
||||
"reacted ${notification.content}",
|
||||
MaterialTheme.colorScheme.tertiary,
|
||||
)
|
||||
}
|
||||
|
||||
is NotificationItem.Repost -> {
|
||||
Triple(Repost, "reposted", MaterialTheme.colorScheme.primary)
|
||||
Triple(rememberVectorPainter(Repost), "reposted", MaterialTheme.colorScheme.primary)
|
||||
}
|
||||
|
||||
is NotificationItem.Zap -> {
|
||||
val amountText = notification.amount?.let { " ${it / 1000} sats" } ?: ""
|
||||
Triple(Zap, "zapped$amountText", MaterialTheme.colorScheme.primary)
|
||||
Triple(rememberVectorPainter(Zap), "zapped$amountText", MaterialTheme.colorScheme.primary)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,8 +35,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Refresh
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.FilterChip
|
||||
@@ -57,6 +55,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.state.EventCollectionState
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.EmptyState
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.LoadingState
|
||||
@@ -339,7 +339,7 @@ fun ReadsScreen(
|
||||
modifier = Modifier.size(24.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Refresh,
|
||||
MaterialSymbols.Refresh,
|
||||
contentDescription = "Refresh",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(18.dp),
|
||||
|
||||
+15
-25
@@ -39,18 +39,6 @@ import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowForward
|
||||
import androidx.compose.material.icons.filled.Clear
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.Description
|
||||
import androidx.compose.material.icons.filled.Dns
|
||||
import androidx.compose.material.icons.filled.History
|
||||
import androidx.compose.material.icons.filled.Person
|
||||
import androidx.compose.material.icons.filled.Search
|
||||
import androidx.compose.material.icons.filled.Star
|
||||
import androidx.compose.material.icons.filled.Tag
|
||||
import androidx.compose.material.icons.filled.Tune
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
@@ -86,6 +74,8 @@ import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.chess.RelaySyncStatus
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.search.AdvancedSearchBarState
|
||||
import com.vitorpamplona.amethyst.commons.search.QuerySerializer
|
||||
import com.vitorpamplona.amethyst.commons.search.SavedSearch
|
||||
@@ -375,7 +365,7 @@ fun SearchScreen(
|
||||
placeholder = { Text("Search notes, people, tags... or use operators") },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Default.Search,
|
||||
MaterialSymbols.Search,
|
||||
contentDescription = "Search",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -384,7 +374,7 @@ fun SearchScreen(
|
||||
if (displayText.isNotEmpty()) {
|
||||
IconButton(onClick = { state.clearSearch() }) {
|
||||
Icon(
|
||||
Icons.Default.Clear,
|
||||
MaterialSymbols.Clear,
|
||||
contentDescription = "Clear",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -397,7 +387,7 @@ fun SearchScreen(
|
||||
if (account != null && !account.isReadOnly) {
|
||||
IconButton(onClick = { showRelayPicker = true }) {
|
||||
Icon(
|
||||
Icons.Default.Dns,
|
||||
MaterialSymbols.Dns,
|
||||
contentDescription = "Search Relays",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -405,7 +395,7 @@ fun SearchScreen(
|
||||
}
|
||||
IconButton(onClick = { state.togglePanel() }) {
|
||||
Icon(
|
||||
Icons.Default.Tune,
|
||||
MaterialSymbols.Tune,
|
||||
contentDescription = "Advanced Search",
|
||||
tint =
|
||||
if (panelExpanded) {
|
||||
@@ -553,7 +543,7 @@ private fun SearchEmptyState(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Star,
|
||||
MaterialSymbols.Star,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
@@ -573,7 +563,7 @@ private fun SearchEmptyState(
|
||||
}
|
||||
IconButton(onClick = { onDeleteSaved(saved.id) }) {
|
||||
Icon(
|
||||
Icons.Default.Delete,
|
||||
MaterialSymbols.Delete,
|
||||
contentDescription = "Delete",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -613,7 +603,7 @@ private fun SearchEmptyState(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.History,
|
||||
MaterialSymbols.History,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -709,12 +699,12 @@ private fun SearchResultCard(
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||
) {
|
||||
Icon(
|
||||
imageVector =
|
||||
symbol =
|
||||
when (result) {
|
||||
is SearchResult.UserResult -> Icons.Default.Person
|
||||
is SearchResult.NoteResult -> Icons.Default.Description
|
||||
is SearchResult.AddressResult -> Icons.Default.Description
|
||||
is SearchResult.HashtagResult -> Icons.Default.Tag
|
||||
is SearchResult.UserResult -> MaterialSymbols.Person
|
||||
is SearchResult.NoteResult -> MaterialSymbols.Description
|
||||
is SearchResult.AddressResult -> MaterialSymbols.Description
|
||||
is SearchResult.HashtagResult -> MaterialSymbols.Tag
|
||||
},
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(24.dp),
|
||||
@@ -746,7 +736,7 @@ private fun SearchResultCard(
|
||||
}
|
||||
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowForward,
|
||||
MaterialSymbols.AutoMirrored.ArrowForward,
|
||||
contentDescription = "Navigate",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
|
||||
@@ -34,8 +34,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -52,6 +50,8 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.Note
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.EmptyState
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.LoadingState
|
||||
@@ -205,7 +205,7 @@ fun ThreadScreen(
|
||||
) {
|
||||
IconButton(onClick = onBack) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowBack,
|
||||
MaterialSymbols.AutoMirrored.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
modifier = Modifier.size(24.dp),
|
||||
)
|
||||
|
||||
+7
-12
@@ -38,13 +38,6 @@ import androidx.compose.foundation.layout.width
|
||||
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.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.ContentCopy
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.PersonAdd
|
||||
import androidx.compose.material.icons.filled.PersonRemove
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
@@ -72,6 +65,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.nip02FollowList.FollowAction
|
||||
import com.vitorpamplona.amethyst.commons.profile.ProfileBroadcastBanner
|
||||
import com.vitorpamplona.amethyst.commons.profile.ProfileBroadcastStatus
|
||||
@@ -472,7 +467,7 @@ fun UserProfileScreen(
|
||||
) {
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
IconButton(onClick = onBack) {
|
||||
Icon(Icons.AutoMirrored.Filled.ArrowBack, "Back")
|
||||
Icon(MaterialSymbols.AutoMirrored.ArrowBack, "Back")
|
||||
}
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Text(
|
||||
@@ -490,7 +485,7 @@ fun UserProfileScreen(
|
||||
},
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Edit,
|
||||
MaterialSymbols.Edit,
|
||||
contentDescription = "Edit profile",
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
@@ -554,7 +549,7 @@ fun UserProfileScreen(
|
||||
|
||||
else -> {
|
||||
Icon(
|
||||
if (isFollowing) Icons.Default.PersonRemove else Icons.Default.PersonAdd,
|
||||
if (isFollowing) MaterialSymbols.PersonRemove else MaterialSymbols.PersonAdd,
|
||||
contentDescription = if (isFollowing) "Unfollow" else "Follow",
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
@@ -639,7 +634,7 @@ fun UserProfileScreen(
|
||||
modifier = Modifier.size(20.dp),
|
||||
) {
|
||||
Icon(
|
||||
if (copied) Icons.Default.Check else Icons.Default.ContentCopy,
|
||||
if (copied) MaterialSymbols.Check else MaterialSymbols.ContentCopy,
|
||||
contentDescription = if (copied) "Copied" else "Copy npub",
|
||||
modifier = Modifier.size(14.dp),
|
||||
tint =
|
||||
@@ -901,7 +896,7 @@ fun UserProfileScreen(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
IconButton(onClick = onBack) {
|
||||
Icon(Icons.AutoMirrored.Filled.ArrowBack, "Back")
|
||||
Icon(MaterialSymbols.AutoMirrored.ArrowBack, "Back")
|
||||
}
|
||||
Spacer(Modifier.width(8.dp))
|
||||
UserAvatar(
|
||||
|
||||
+3
-4
@@ -22,9 +22,6 @@ package com.vitorpamplona.amethyst.desktop.ui.auth
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Visibility
|
||||
import androidx.compose.material.icons.filled.VisibilityOff
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -42,6 +39,8 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.login_hide_key
|
||||
import com.vitorpamplona.amethyst.commons.resources.login_key_label
|
||||
@@ -79,7 +78,7 @@ fun KeyInputField(
|
||||
trailingIcon = {
|
||||
IconButton(onClick = { showKey = !showKey }) {
|
||||
Icon(
|
||||
if (showKey) Icons.Default.VisibilityOff else Icons.Default.Visibility,
|
||||
if (showKey) MaterialSymbols.VisibilityOff else MaterialSymbols.Visibility,
|
||||
contentDescription = if (showKey) stringResource(Res.string.login_hide_key) else stringResource(Res.string.login_show_key),
|
||||
)
|
||||
}
|
||||
|
||||
+6
-7
@@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -40,6 +37,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.account.LoginProgress
|
||||
import com.vitorpamplona.amethyst.desktop.account.RelayLoginStatus
|
||||
|
||||
@@ -111,7 +110,7 @@ private fun StepRow(step: StepInfo) {
|
||||
when (step.state) {
|
||||
StepState.DONE -> {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
contentDescription = null,
|
||||
tint = Color(0xFF4CAF50),
|
||||
modifier = Modifier.size(16.dp),
|
||||
@@ -155,7 +154,7 @@ private fun RelayRow(
|
||||
when (status) {
|
||||
RelayLoginStatus.EVENT_SENT -> {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
contentDescription = null,
|
||||
tint = Color(0xFF2196F3),
|
||||
modifier = Modifier.size(12.dp),
|
||||
@@ -164,7 +163,7 @@ private fun RelayRow(
|
||||
|
||||
RelayLoginStatus.CONNECTED -> {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
contentDescription = null,
|
||||
tint = Color(0xFF4CAF50),
|
||||
modifier = Modifier.size(12.dp),
|
||||
@@ -175,7 +174,7 @@ private fun RelayRow(
|
||||
RelayLoginStatus.SEND_FAILED,
|
||||
-> {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.size(12.dp),
|
||||
|
||||
+6
-9
@@ -32,11 +32,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.Forward
|
||||
import androidx.compose.material.icons.automirrored.filled.InsertDriveFile
|
||||
import androidx.compose.material.icons.filled.Download
|
||||
import androidx.compose.material.icons.filled.Lock
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
@@ -61,6 +56,8 @@ import androidx.compose.ui.input.pointer.isSecondaryPressed
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.service.media.EncryptedMediaService
|
||||
import com.vitorpamplona.quartz.nip17Dm.files.ChatMessageEncryptedFileHeaderEvent
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -144,7 +141,7 @@ fun ChatFileAttachment(
|
||||
// Encryption indicator
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Icon(
|
||||
Icons.Default.Lock,
|
||||
MaterialSymbols.Lock,
|
||||
contentDescription = "Encrypted",
|
||||
modifier = Modifier.size(14.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
@@ -191,7 +188,7 @@ fun ChatFileAttachment(
|
||||
// Non-image file
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.InsertDriveFile,
|
||||
MaterialSymbols.AutoMirrored.InsertDriveFile,
|
||||
contentDescription = "File",
|
||||
modifier = Modifier.size(32.dp),
|
||||
)
|
||||
@@ -223,7 +220,7 @@ fun ChatFileAttachment(
|
||||
DropdownMenuItem(
|
||||
text = { Text("Save to disk") },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Default.Download, contentDescription = null, modifier = Modifier.size(18.dp))
|
||||
Icon(MaterialSymbols.Download, contentDescription = null, modifier = Modifier.size(18.dp))
|
||||
},
|
||||
enabled = decryptedBytes != null,
|
||||
onClick = {
|
||||
@@ -237,7 +234,7 @@ fun ChatFileAttachment(
|
||||
DropdownMenuItem(
|
||||
text = { Text("Forward") },
|
||||
leadingIcon = {
|
||||
Icon(Icons.AutoMirrored.Filled.Forward, contentDescription = null, modifier = Modifier.size(18.dp))
|
||||
Icon(MaterialSymbols.AutoMirrored.Forward, contentDescription = null, modifier = Modifier.size(18.dp))
|
||||
},
|
||||
onClick = {
|
||||
showContextMenu = false
|
||||
|
||||
+9
-14
@@ -38,13 +38,6 @@ import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.selection.SelectionContainer
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.Send
|
||||
import androidx.compose.material.icons.filled.AttachFile
|
||||
import androidx.compose.material.icons.filled.Lock
|
||||
import androidx.compose.material.icons.filled.LockOpen
|
||||
import androidx.compose.material.icons.outlined.AddReaction
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -83,6 +76,8 @@ import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Popup
|
||||
import androidx.compose.ui.window.PopupProperties
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.IAccount
|
||||
import com.vitorpamplona.amethyst.commons.model.Note
|
||||
import com.vitorpamplona.amethyst.commons.model.cache.ICacheProvider
|
||||
@@ -230,7 +225,7 @@ fun ChatPane(
|
||||
modifier = Modifier.size(40.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowBack,
|
||||
MaterialSymbols.AutoMirrored.ArrowBack,
|
||||
contentDescription = "Back to conversations",
|
||||
)
|
||||
}
|
||||
@@ -517,7 +512,7 @@ private fun MessageWithReactions(
|
||||
when (event) {
|
||||
is PrivateDmEvent -> {
|
||||
Icon(
|
||||
Icons.Default.LockOpen,
|
||||
MaterialSymbols.LockOpen,
|
||||
contentDescription = "NIP-04 (legacy)",
|
||||
modifier = Modifier.size(12.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.4f),
|
||||
@@ -528,7 +523,7 @@ private fun MessageWithReactions(
|
||||
is ChatMessageEncryptedFileHeaderEvent,
|
||||
-> {
|
||||
Icon(
|
||||
Icons.Default.Lock,
|
||||
MaterialSymbols.Lock,
|
||||
contentDescription = "NIP-17 (encrypted)",
|
||||
modifier = Modifier.size(12.dp),
|
||||
tint = MaterialTheme.colorScheme.primary.copy(alpha = 0.6f),
|
||||
@@ -572,7 +567,7 @@ private fun MessageWithReactions(
|
||||
modifier = Modifier.size(20.dp),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Outlined.AddReaction,
|
||||
symbol = MaterialSymbols.AddReaction,
|
||||
contentDescription = "React",
|
||||
modifier = Modifier.size(14.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -709,7 +704,7 @@ private fun MessageInput(
|
||||
modifier = Modifier.size(40.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.AttachFile,
|
||||
MaterialSymbols.AttachFile,
|
||||
contentDescription = "Attach file",
|
||||
tint =
|
||||
if (isUploading) {
|
||||
@@ -749,7 +744,7 @@ private fun MessageInput(
|
||||
modifier = Modifier.size(40.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.Send,
|
||||
MaterialSymbols.AutoMirrored.Send,
|
||||
contentDescription = "Send",
|
||||
tint =
|
||||
if (canSend && !isUploading) {
|
||||
@@ -768,7 +763,7 @@ private fun MessageInput(
|
||||
modifier = Modifier.padding(start = 4.dp),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Default.Lock,
|
||||
symbol = MaterialSymbols.Lock,
|
||||
contentDescription = "NIP-17 (encrypted)",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
|
||||
+5
-7
@@ -38,10 +38,6 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Dns
|
||||
import androidx.compose.material.icons.filled.Group
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -67,6 +63,8 @@ import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.UserAvatar
|
||||
import com.vitorpamplona.amethyst.commons.util.toTimeAgo
|
||||
import com.vitorpamplona.quartz.nip17Dm.base.ChatroomKey
|
||||
@@ -186,7 +184,7 @@ fun ConversationListPane(
|
||||
modifier = Modifier.size(32.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Dns,
|
||||
MaterialSymbols.Dns,
|
||||
contentDescription = "DM Relays",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(20.dp),
|
||||
@@ -197,7 +195,7 @@ fun ConversationListPane(
|
||||
modifier = Modifier.size(32.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Add,
|
||||
MaterialSymbols.Add,
|
||||
contentDescription = "New conversation",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier.size(20.dp),
|
||||
@@ -324,7 +322,7 @@ private fun ConversationCard(
|
||||
)
|
||||
} else if (item.isGroup) {
|
||||
Icon(
|
||||
Icons.Default.Group,
|
||||
MaterialSymbols.Group,
|
||||
contentDescription = "Group",
|
||||
modifier = Modifier.size(40.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
|
||||
+3
-3
@@ -28,8 +28,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Email
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -53,6 +51,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.IAccount
|
||||
import com.vitorpamplona.amethyst.commons.model.cache.ICacheProvider
|
||||
import com.vitorpamplona.amethyst.commons.ui.chat.DmBroadcastStatus
|
||||
@@ -335,7 +335,7 @@ private fun EmptyConversationState() {
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Email,
|
||||
MaterialSymbols.Email,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.3f),
|
||||
modifier = Modifier.size(48.dp),
|
||||
|
||||
+4
-5
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Clear
|
||||
import androidx.compose.material.icons.filled.Search
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -51,6 +48,8 @@ import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.cache.ICacheProvider
|
||||
import com.vitorpamplona.amethyst.commons.search.SearchResult
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.UserSearchCard
|
||||
@@ -161,12 +160,12 @@ fun NewDmDialog(
|
||||
.focusRequester(focusRequester),
|
||||
placeholder = { Text("Search users by name or npub...") },
|
||||
leadingIcon = {
|
||||
Icon(Icons.Default.Search, contentDescription = null)
|
||||
Icon(MaterialSymbols.Search, contentDescription = null)
|
||||
},
|
||||
trailingIcon = {
|
||||
if (searchText.isNotEmpty()) {
|
||||
IconButton(onClick = { searchState.clearSearch() }) {
|
||||
Icon(Icons.Default.Clear, contentDescription = "Clear")
|
||||
Icon(MaterialSymbols.Clear, contentDescription = "Clear")
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+3
-4
@@ -33,9 +33,6 @@ import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyRow
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.ChevronRight
|
||||
import androidx.compose.material.icons.filled.ExpandMore
|
||||
import androidx.compose.material3.AssistChip
|
||||
import androidx.compose.material3.Checkbox
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -51,6 +48,8 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
|
||||
|
||||
@@ -80,7 +79,7 @@ fun ComposeRelayPicker(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(
|
||||
if (expanded) Icons.Default.ExpandMore else Icons.Default.ChevronRight,
|
||||
if (expanded) MaterialSymbols.ExpandMore else MaterialSymbols.ChevronRight,
|
||||
contentDescription = null,
|
||||
)
|
||||
Spacer(Modifier.width(4.dp))
|
||||
|
||||
+19
-32
@@ -42,21 +42,6 @@ import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.Article
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.Dns
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.Explore
|
||||
import androidx.compose.material.icons.filled.Groups
|
||||
import androidx.compose.material.icons.filled.Person
|
||||
import androidx.compose.material.icons.filled.PushPin
|
||||
import androidx.compose.material.icons.filled.Search
|
||||
import androidx.compose.material.icons.filled.SportsEsports
|
||||
import androidx.compose.material.icons.filled.Star
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@@ -90,7 +75,6 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.input.key.Key
|
||||
import androidx.compose.ui.input.key.KeyEventType
|
||||
import androidx.compose.ui.input.key.key
|
||||
@@ -101,6 +85,9 @@ import androidx.compose.ui.input.pointer.isSecondaryPressed
|
||||
import androidx.compose.ui.input.pointer.onPointerEvent
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.LayoutMode
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
@@ -108,14 +95,14 @@ import kotlinx.coroutines.delay
|
||||
|
||||
enum class ScreenCategory(
|
||||
val title: String,
|
||||
val icon: ImageVector,
|
||||
val icon: MaterialSymbol,
|
||||
) {
|
||||
SOCIAL("Social", Icons.Default.Groups),
|
||||
LONG_FORM("Long-Form", Icons.AutoMirrored.Filled.Article),
|
||||
DISCOVERY("Discovery", Icons.Default.Explore),
|
||||
IDENTITY("Identity", Icons.Default.Person),
|
||||
PLAY("Play", Icons.Default.SportsEsports),
|
||||
NETWORK("Network", Icons.Default.Dns),
|
||||
SOCIAL("Social", MaterialSymbols.Groups),
|
||||
LONG_FORM("Long-Form", MaterialSymbols.AutoMirrored.Article),
|
||||
DISCOVERY("Discovery", MaterialSymbols.Explore),
|
||||
IDENTITY("Identity", MaterialSymbols.Person),
|
||||
PLAY("Play", MaterialSymbols.SportsEsports),
|
||||
NETWORK("Network", MaterialSymbols.Dns),
|
||||
}
|
||||
|
||||
// -- Extensions on DeckColumnType --
|
||||
@@ -412,7 +399,7 @@ fun AppDrawer(
|
||||
.focusRequester(searchFocusRequester),
|
||||
placeholder = { Text("Search screens and workspaces...") },
|
||||
singleLine = true,
|
||||
leadingIcon = { Icon(Icons.Default.Search, "Search") },
|
||||
leadingIcon = { Icon(MaterialSymbols.Search, "Search") },
|
||||
)
|
||||
|
||||
if (state.awaitingHashtag) {
|
||||
@@ -623,7 +610,7 @@ private fun DrawerScreenCard(
|
||||
},
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Default.PushPin,
|
||||
MaterialSymbols.PushPin,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
@@ -824,17 +811,17 @@ private fun WorkspaceCard(
|
||||
if (isActive) {
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
"Active",
|
||||
Modifier.size(18.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
}
|
||||
IconButton(onClick = onEdit) {
|
||||
Icon(Icons.Default.Edit, "Edit", Modifier.size(18.dp))
|
||||
Icon(MaterialSymbols.Edit, "Edit", Modifier.size(18.dp))
|
||||
}
|
||||
IconButton(onClick = onDelete, enabled = canDelete) {
|
||||
Icon(Icons.Default.Delete, "Delete", Modifier.size(18.dp))
|
||||
Icon(MaterialSymbols.Delete, "Delete", Modifier.size(18.dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -859,7 +846,7 @@ private fun AddWorkspaceCard(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.Center,
|
||||
) {
|
||||
Icon(Icons.Default.Add, "Add workspace", Modifier.size(24.dp))
|
||||
Icon(MaterialSymbols.Add, "Add workspace", Modifier.size(24.dp))
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Text(
|
||||
"New Workspace",
|
||||
@@ -1025,7 +1012,7 @@ private fun DeckColumnEditor(
|
||||
},
|
||||
enabled = columns.size > 1,
|
||||
) {
|
||||
Icon(Icons.Default.Close, "Remove")
|
||||
Icon(MaterialSymbols.Close, "Remove")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1064,7 +1051,7 @@ private fun SinglePaneScreensEditor(
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
if (idx == 0) {
|
||||
Icon(
|
||||
Icons.Default.Star,
|
||||
MaterialSymbols.Star,
|
||||
"Default",
|
||||
Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
@@ -1074,7 +1061,7 @@ private fun SinglePaneScreensEditor(
|
||||
Text(displayName, Modifier.weight(1f))
|
||||
IconButton(onClick = {
|
||||
onScreensChange(screens.toMutableList().apply { removeAt(idx) })
|
||||
}) { Icon(Icons.Default.Close, "Remove", Modifier.size(16.dp)) }
|
||||
}) { Icon(MaterialSymbols.Close, "Remove", Modifier.size(16.dp)) }
|
||||
}
|
||||
}
|
||||
// Add screen dropdown
|
||||
|
||||
+25
-37
@@ -29,20 +29,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.Article
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material.icons.filled.Dns
|
||||
import androidx.compose.material.icons.filled.Email
|
||||
import androidx.compose.material.icons.filled.Extension
|
||||
import androidx.compose.material.icons.filled.Home
|
||||
import androidx.compose.material.icons.filled.Notifications
|
||||
import androidx.compose.material.icons.filled.Person
|
||||
import androidx.compose.material.icons.filled.Public
|
||||
import androidx.compose.material.icons.filled.Search
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.material.icons.filled.Tag
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -50,10 +36,12 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
|
||||
@Composable
|
||||
fun ColumnHeader(
|
||||
@@ -81,7 +69,7 @@ fun ColumnHeader(
|
||||
if (hasBackStack) {
|
||||
IconButton(onClick = onBack, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowBack,
|
||||
MaterialSymbols.AutoMirrored.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -91,7 +79,7 @@ fun ColumnHeader(
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = column.type.icon(),
|
||||
symbol = column.type.icon(),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -111,7 +99,7 @@ fun ColumnHeader(
|
||||
if (canClose) {
|
||||
IconButton(onClick = onClose, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Close column",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -121,24 +109,24 @@ fun ColumnHeader(
|
||||
}
|
||||
}
|
||||
|
||||
fun DeckColumnType.icon(): ImageVector =
|
||||
fun DeckColumnType.icon(): MaterialSymbol =
|
||||
when (this) {
|
||||
DeckColumnType.HomeFeed -> Icons.Default.Home
|
||||
DeckColumnType.Notifications -> Icons.Default.Notifications
|
||||
DeckColumnType.Messages -> Icons.Default.Email
|
||||
DeckColumnType.Search -> Icons.Default.Search
|
||||
DeckColumnType.Reads -> Icons.AutoMirrored.Filled.Article
|
||||
DeckColumnType.Bookmarks -> com.vitorpamplona.amethyst.commons.icons.Bookmark
|
||||
DeckColumnType.GlobalFeed -> Icons.Default.Public
|
||||
DeckColumnType.MyProfile -> Icons.Default.Person
|
||||
DeckColumnType.Chess -> Icons.Default.Extension
|
||||
DeckColumnType.Settings -> Icons.Default.Settings
|
||||
DeckColumnType.Relays -> Icons.Default.Dns
|
||||
is DeckColumnType.Article -> Icons.AutoMirrored.Filled.Article
|
||||
is DeckColumnType.Editor -> Icons.AutoMirrored.Filled.Article
|
||||
DeckColumnType.Drafts -> Icons.AutoMirrored.Filled.Article
|
||||
DeckColumnType.MyHighlights -> Icons.AutoMirrored.Filled.Article
|
||||
is DeckColumnType.Profile -> Icons.Default.Person
|
||||
is DeckColumnType.Thread -> Icons.AutoMirrored.Filled.Article
|
||||
is DeckColumnType.Hashtag -> Icons.Default.Tag
|
||||
DeckColumnType.HomeFeed -> MaterialSymbols.Home
|
||||
DeckColumnType.Notifications -> MaterialSymbols.Notifications
|
||||
DeckColumnType.Messages -> MaterialSymbols.Email
|
||||
DeckColumnType.Search -> MaterialSymbols.Search
|
||||
DeckColumnType.Reads -> MaterialSymbols.AutoMirrored.Article
|
||||
DeckColumnType.Bookmarks -> MaterialSymbols.Bookmark
|
||||
DeckColumnType.GlobalFeed -> MaterialSymbols.Public
|
||||
DeckColumnType.MyProfile -> MaterialSymbols.Person
|
||||
DeckColumnType.Chess -> MaterialSymbols.Extension
|
||||
DeckColumnType.Settings -> MaterialSymbols.Settings
|
||||
DeckColumnType.Relays -> MaterialSymbols.Dns
|
||||
is DeckColumnType.Article -> MaterialSymbols.AutoMirrored.Article
|
||||
is DeckColumnType.Editor -> MaterialSymbols.AutoMirrored.Article
|
||||
DeckColumnType.Drafts -> MaterialSymbols.AutoMirrored.Article
|
||||
DeckColumnType.MyHighlights -> MaterialSymbols.AutoMirrored.Article
|
||||
is DeckColumnType.Profile -> MaterialSymbols.Person
|
||||
is DeckColumnType.Thread -> MaterialSymbols.AutoMirrored.Article
|
||||
is DeckColumnType.Hashtag -> MaterialSymbols.Tag
|
||||
}
|
||||
|
||||
+4
-5
@@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -42,6 +39,8 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.vitorpamplona.amethyst.commons.domain.nip46.SignerConnectionState
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.tor.TorServiceStatus
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.BunkerHeartbeatIndicator
|
||||
import com.vitorpamplona.amethyst.desktop.ui.tor.TorStatusIndicator
|
||||
@@ -77,7 +76,7 @@ fun DeckSidebar(
|
||||
|
||||
IconButton(onClick = onAddColumn) {
|
||||
Icon(
|
||||
Icons.Default.Add,
|
||||
MaterialSymbols.Add,
|
||||
contentDescription = "Add Column",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
@@ -97,7 +96,7 @@ fun DeckSidebar(
|
||||
|
||||
IconButton(onClick = onOpenSettings) {
|
||||
Icon(
|
||||
Icons.Default.Settings,
|
||||
MaterialSymbols.Settings,
|
||||
contentDescription = "Settings",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
|
||||
+3
-3
@@ -29,8 +29,6 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Apps
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.NavigationRail
|
||||
@@ -46,6 +44,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.domain.nip46.SignerConnectionState
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.BunkerHeartbeatIndicator
|
||||
import com.vitorpamplona.amethyst.desktop.DesktopScreen
|
||||
import com.vitorpamplona.amethyst.desktop.account.AccountManager
|
||||
@@ -131,7 +131,7 @@ fun SinglePaneLayout(
|
||||
onClick = onOpenAppDrawer,
|
||||
icon = {
|
||||
Icon(
|
||||
Icons.Default.Apps,
|
||||
MaterialSymbols.Apps,
|
||||
contentDescription = "App Drawer",
|
||||
modifier = Modifier.size(22.dp),
|
||||
)
|
||||
|
||||
+18
-32
@@ -20,22 +20,8 @@
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.desktop.ui.deck
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Bookmark
|
||||
import androidx.compose.material.icons.filled.Chat
|
||||
import androidx.compose.material.icons.filled.Code
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.Explore
|
||||
import androidx.compose.material.icons.filled.Favorite
|
||||
import androidx.compose.material.icons.filled.Groups
|
||||
import androidx.compose.material.icons.filled.Home
|
||||
import androidx.compose.material.icons.filled.MenuBook
|
||||
import androidx.compose.material.icons.filled.Person
|
||||
import androidx.compose.material.icons.filled.Search
|
||||
import androidx.compose.material.icons.filled.SportsEsports
|
||||
import androidx.compose.material.icons.filled.Star
|
||||
import androidx.compose.material.icons.filled.Work
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.LayoutMode
|
||||
|
||||
data class Workspace(
|
||||
@@ -57,25 +43,25 @@ data class Workspace(
|
||||
}
|
||||
|
||||
object WorkspaceIcons {
|
||||
private val icons: Map<String, ImageVector> =
|
||||
private val icons: Map<String, MaterialSymbol> =
|
||||
mapOf(
|
||||
"Groups" to Icons.Default.Groups,
|
||||
"Edit" to Icons.Default.Edit,
|
||||
"MenuBook" to Icons.Default.MenuBook,
|
||||
"Home" to Icons.Default.Home,
|
||||
"Chat" to Icons.Default.Chat,
|
||||
"Search" to Icons.Default.Search,
|
||||
"SportsEsports" to Icons.Default.SportsEsports,
|
||||
"Bookmark" to Icons.Default.Bookmark,
|
||||
"Explore" to Icons.Default.Explore,
|
||||
"Person" to Icons.Default.Person,
|
||||
"Star" to Icons.Default.Star,
|
||||
"Favorite" to Icons.Default.Favorite,
|
||||
"Work" to Icons.Default.Work,
|
||||
"Code" to Icons.Default.Code,
|
||||
"Groups" to MaterialSymbols.Groups,
|
||||
"Edit" to MaterialSymbols.Edit,
|
||||
"MenuBook" to MaterialSymbols.MenuBook,
|
||||
"Home" to MaterialSymbols.Home,
|
||||
"Chat" to MaterialSymbols.Chat,
|
||||
"Search" to MaterialSymbols.Search,
|
||||
"SportsEsports" to MaterialSymbols.SportsEsports,
|
||||
"Bookmark" to MaterialSymbols.Bookmark,
|
||||
"Explore" to MaterialSymbols.Explore,
|
||||
"Person" to MaterialSymbols.Person,
|
||||
"Star" to MaterialSymbols.Star,
|
||||
"Favorite" to MaterialSymbols.Favorite,
|
||||
"Work" to MaterialSymbols.Work,
|
||||
"Code" to MaterialSymbols.Code,
|
||||
)
|
||||
|
||||
val availableNames: List<String> = icons.keys.sorted()
|
||||
|
||||
fun resolve(name: String): ImageVector = icons[name] ?: Icons.Default.Home
|
||||
fun resolve(name: String): MaterialSymbol = icons[name] ?: MaterialSymbols.Home
|
||||
}
|
||||
|
||||
+6
-9
@@ -28,11 +28,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.Lock
|
||||
import androidx.compose.material.icons.filled.Public
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -49,6 +44,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontStyle
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.highlights.HighlightData
|
||||
import com.vitorpamplona.amethyst.desktop.network.DesktopRelayConnectionManager
|
||||
import com.vitorpamplona.amethyst.desktop.service.highlights.DesktopHighlightStore
|
||||
@@ -160,7 +157,7 @@ private fun HighlightPanelCard(
|
||||
) {
|
||||
// Published status
|
||||
Icon(
|
||||
imageVector = if (highlight.published) Icons.Default.Public else Icons.Default.Lock,
|
||||
symbol = if (highlight.published) MaterialSymbols.Public else MaterialSymbols.Lock,
|
||||
contentDescription = if (highlight.published) "Published" else "Private",
|
||||
modifier = Modifier.size(14.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -178,7 +175,7 @@ private fun HighlightPanelCard(
|
||||
if (onPublish != null) {
|
||||
IconButton(onClick = onPublish, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Public,
|
||||
MaterialSymbols.Public,
|
||||
contentDescription = "Publish to relays",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
@@ -188,7 +185,7 @@ private fun HighlightPanelCard(
|
||||
|
||||
IconButton(onClick = onEditNote, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Edit,
|
||||
MaterialSymbols.Edit,
|
||||
contentDescription = "Edit note",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -196,7 +193,7 @@ private fun HighlightPanelCard(
|
||||
}
|
||||
IconButton(onClick = onDelete, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Delete,
|
||||
MaterialSymbols.Delete,
|
||||
contentDescription = "Delete",
|
||||
modifier = Modifier.size(16.dp),
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
|
||||
+4
-6
@@ -32,10 +32,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.Lock
|
||||
import androidx.compose.material.icons.filled.Public
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
@@ -56,6 +52,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontStyle
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.highlights.HighlightData
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.EmptyState
|
||||
import com.vitorpamplona.amethyst.desktop.service.highlights.DesktopHighlightStore
|
||||
@@ -208,7 +206,7 @@ private fun HighlightCard(
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
Icon(
|
||||
imageVector = if (highlight.published) Icons.Default.Public else Icons.Default.Lock,
|
||||
symbol = if (highlight.published) MaterialSymbols.Public else MaterialSymbols.Lock,
|
||||
contentDescription = if (highlight.published) "Published" else "Private",
|
||||
modifier = Modifier.size(14.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -218,7 +216,7 @@ private fun HighlightCard(
|
||||
|
||||
IconButton(onClick = onDelete) {
|
||||
Icon(
|
||||
Icons.Default.Delete,
|
||||
MaterialSymbols.Delete,
|
||||
contentDescription = "Delete highlight",
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
)
|
||||
|
||||
+4
-6
@@ -27,10 +27,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.MusicNote
|
||||
import androidx.compose.material.icons.filled.Pause
|
||||
import androidx.compose.material.icons.filled.PlayArrow
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -43,6 +39,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.service.media.GlobalMediaPlayer
|
||||
|
||||
@Composable
|
||||
@@ -69,7 +67,7 @@ fun AudioPlayer(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.MusicNote,
|
||||
MaterialSymbols.MusicNote,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(20.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
@@ -86,7 +84,7 @@ fun AudioPlayer(
|
||||
modifier = Modifier.size(32.dp),
|
||||
) {
|
||||
Icon(
|
||||
if (isPlaying) Icons.Default.Pause else Icons.Default.PlayArrow,
|
||||
if (isPlaying) MaterialSymbols.Pause else MaterialSymbols.PlayArrow,
|
||||
contentDescription = if (isPlaying) "Pause" else "Play",
|
||||
modifier = Modifier.size(20.dp),
|
||||
)
|
||||
|
||||
+11
-19
@@ -38,16 +38,6 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowForward
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material.icons.filled.ContentCopy
|
||||
import androidx.compose.material.icons.filled.Error
|
||||
import androidx.compose.material.icons.filled.MoreVert
|
||||
import androidx.compose.material.icons.filled.OpenInBrowser
|
||||
import androidx.compose.material.icons.filled.Save
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -78,6 +68,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.richtext.RichTextParser
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -350,7 +342,7 @@ fun LightboxOverlay(
|
||||
|
||||
is DownloadState.Done -> {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
contentDescription = null,
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(16.dp),
|
||||
@@ -365,7 +357,7 @@ fun LightboxOverlay(
|
||||
|
||||
is DownloadState.Failed -> {
|
||||
Icon(
|
||||
Icons.Default.Error,
|
||||
MaterialSymbols.Error,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onErrorContainer,
|
||||
modifier = Modifier.size(16.dp),
|
||||
@@ -412,7 +404,7 @@ fun LightboxOverlay(
|
||||
modifier = Modifier.align(Alignment.TopStart).padding(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Close",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(32.dp),
|
||||
@@ -443,7 +435,7 @@ fun LightboxOverlay(
|
||||
modifier = Modifier.align(Alignment.CenterStart).padding(16.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowBack,
|
||||
MaterialSymbols.AutoMirrored.ArrowBack,
|
||||
contentDescription = "Previous",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(48.dp),
|
||||
@@ -457,7 +449,7 @@ fun LightboxOverlay(
|
||||
modifier = Modifier.align(Alignment.CenterEnd).padding(16.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowForward,
|
||||
MaterialSymbols.AutoMirrored.ArrowForward,
|
||||
contentDescription = "Next",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(48.dp),
|
||||
@@ -480,7 +472,7 @@ private fun MoreOptionsMenu(
|
||||
Box {
|
||||
IconButton(onClick = onExpandMenu, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
Icons.Default.MoreVert,
|
||||
MaterialSymbols.MoreVert,
|
||||
contentDescription = "More options",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(20.dp),
|
||||
@@ -493,7 +485,7 @@ private fun MoreOptionsMenu(
|
||||
) {
|
||||
DropdownMenuItem(
|
||||
text = { Text("Save") },
|
||||
leadingIcon = { Icon(Icons.Default.Save, contentDescription = null) },
|
||||
leadingIcon = { Icon(MaterialSymbols.Save, contentDescription = null) },
|
||||
onClick = {
|
||||
onDismissMenu()
|
||||
onSave()
|
||||
@@ -501,7 +493,7 @@ private fun MoreOptionsMenu(
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text("Copy URL") },
|
||||
leadingIcon = { Icon(Icons.Default.ContentCopy, contentDescription = null) },
|
||||
leadingIcon = { Icon(MaterialSymbols.ContentCopy, contentDescription = null) },
|
||||
onClick = {
|
||||
onDismissMenu()
|
||||
onCopyUrl()
|
||||
@@ -509,7 +501,7 @@ private fun MoreOptionsMenu(
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text("Open in Browser") },
|
||||
leadingIcon = { Icon(Icons.Default.OpenInBrowser, contentDescription = null) },
|
||||
leadingIcon = { Icon(MaterialSymbols.OpenInBrowser, contentDescription = null) },
|
||||
onClick = {
|
||||
onDismissMenu()
|
||||
onOpenInBrowser()
|
||||
|
||||
+5
-7
@@ -30,10 +30,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.AttachFile
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material.icons.filled.ContentPaste
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.LinearProgressIndicator
|
||||
@@ -46,6 +42,8 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.unit.dp
|
||||
import coil3.compose.AsyncImage
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import java.io.File
|
||||
|
||||
@Composable
|
||||
@@ -63,14 +61,14 @@ fun MediaAttachmentRow(
|
||||
) {
|
||||
IconButton(onClick = onAttach) {
|
||||
Icon(
|
||||
Icons.Default.AttachFile,
|
||||
MaterialSymbols.AttachFile,
|
||||
contentDescription = "Attach media",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
}
|
||||
IconButton(onClick = onPaste) {
|
||||
Icon(
|
||||
Icons.Default.ContentPaste,
|
||||
MaterialSymbols.ContentPaste,
|
||||
contentDescription = "Paste from clipboard",
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
@@ -113,7 +111,7 @@ private fun AttachedFileThumbnail(
|
||||
)
|
||||
IconButton(onClick = onRemove, modifier = Modifier.size(20.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove",
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.size(16.dp),
|
||||
|
||||
+9
-16
@@ -33,15 +33,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.VolumeOff
|
||||
import androidx.compose.material.icons.automirrored.filled.VolumeUp
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material.icons.filled.Fullscreen
|
||||
import androidx.compose.material.icons.filled.MusicNote
|
||||
import androidx.compose.material.icons.filled.Pause
|
||||
import androidx.compose.material.icons.filled.PlayArrow
|
||||
import androidx.compose.material.icons.filled.Save
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -58,6 +49,8 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.service.media.GlobalMediaPlayer
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@@ -107,7 +100,7 @@ fun NowPlayingBar(modifier: Modifier = Modifier) {
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
Icons.Default.MusicNote,
|
||||
MaterialSymbols.MusicNote,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(20.dp),
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
@@ -126,7 +119,7 @@ fun NowPlayingBar(modifier: Modifier = Modifier) {
|
||||
modifier = Modifier.size(32.dp),
|
||||
) {
|
||||
Icon(
|
||||
if (activeState.isPlaying) Icons.Default.Pause else Icons.Default.PlayArrow,
|
||||
if (activeState.isPlaying) MaterialSymbols.Pause else MaterialSymbols.PlayArrow,
|
||||
contentDescription = if (activeState.isPlaying) "Pause" else "Play",
|
||||
modifier = Modifier.size(20.dp),
|
||||
)
|
||||
@@ -185,9 +178,9 @@ fun NowPlayingBar(modifier: Modifier = Modifier) {
|
||||
) {
|
||||
Icon(
|
||||
if (activeState.isMuted) {
|
||||
Icons.AutoMirrored.Filled.VolumeOff
|
||||
MaterialSymbols.AutoMirrored.VolumeOff
|
||||
} else {
|
||||
Icons.AutoMirrored.Filled.VolumeUp
|
||||
MaterialSymbols.AutoMirrored.VolumeUp
|
||||
},
|
||||
contentDescription = if (activeState.isMuted) "Unmute" else "Mute",
|
||||
modifier = Modifier.size(16.dp),
|
||||
@@ -225,7 +218,7 @@ fun NowPlayingBar(modifier: Modifier = Modifier) {
|
||||
modifier = Modifier.size(24.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Save,
|
||||
MaterialSymbols.Save,
|
||||
contentDescription = "Save",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
@@ -238,7 +231,7 @@ fun NowPlayingBar(modifier: Modifier = Modifier) {
|
||||
modifier = Modifier.size(24.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Fullscreen,
|
||||
MaterialSymbols.Fullscreen,
|
||||
contentDescription = "Fullscreen",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
@@ -259,7 +252,7 @@ fun NowPlayingBar(modifier: Modifier = Modifier) {
|
||||
modifier = Modifier.size(24.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Stop",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
|
||||
+9
-14
@@ -34,13 +34,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.VolumeOff
|
||||
import androidx.compose.material.icons.automirrored.filled.VolumeUp
|
||||
import androidx.compose.material.icons.filled.Fullscreen
|
||||
import androidx.compose.material.icons.filled.FullscreenExit
|
||||
import androidx.compose.material.icons.filled.Pause
|
||||
import androidx.compose.material.icons.filled.PlayArrow
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -59,6 +52,8 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.input.pointer.PointerEventType
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
|
||||
@Composable
|
||||
fun VideoControls(
|
||||
@@ -112,7 +107,7 @@ fun VideoControls(
|
||||
modifier = Modifier.align(Alignment.Center).size(64.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.PlayArrow,
|
||||
MaterialSymbols.PlayArrow,
|
||||
contentDescription = "Play",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(48.dp),
|
||||
@@ -158,7 +153,7 @@ fun VideoControls(
|
||||
) {
|
||||
IconButton(onClick = onPlayPause, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
if (isPlaying) Icons.Default.Pause else Icons.Default.PlayArrow,
|
||||
if (isPlaying) MaterialSymbols.Pause else MaterialSymbols.PlayArrow,
|
||||
contentDescription = if (isPlaying) "Pause" else "Play",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(20.dp),
|
||||
@@ -179,9 +174,9 @@ fun VideoControls(
|
||||
IconButton(onClick = onMuteToggle, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
if (isMuted) {
|
||||
Icons.AutoMirrored.Filled.VolumeOff
|
||||
MaterialSymbols.AutoMirrored.VolumeOff
|
||||
} else {
|
||||
Icons.AutoMirrored.Filled.VolumeUp
|
||||
MaterialSymbols.AutoMirrored.VolumeUp
|
||||
},
|
||||
contentDescription = if (isMuted) "Unmute" else "Mute",
|
||||
tint = Color.White,
|
||||
@@ -216,9 +211,9 @@ fun VideoControls(
|
||||
) {
|
||||
Icon(
|
||||
if (viewMode == ViewMode.FULLSCREEN) {
|
||||
Icons.Default.FullscreenExit
|
||||
MaterialSymbols.FullscreenExit
|
||||
} else {
|
||||
Icons.Default.Fullscreen
|
||||
MaterialSymbols.Fullscreen
|
||||
},
|
||||
contentDescription =
|
||||
if (viewMode == ViewMode.FULLSCREEN) "Exit fullscreen" else "Fullscreen",
|
||||
@@ -229,7 +224,7 @@ fun VideoControls(
|
||||
} else if (onFullscreen != null) {
|
||||
IconButton(onClick = onFullscreen, modifier = Modifier.size(32.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Fullscreen,
|
||||
MaterialSymbols.Fullscreen,
|
||||
contentDescription = "Fullscreen",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(20.dp),
|
||||
|
||||
+4
-5
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -53,6 +50,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
|
||||
@@ -117,7 +116,7 @@ fun BlockedRelayEditor(
|
||||
if (error == null) newRelayUrl = ""
|
||||
},
|
||||
) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add relay")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add relay")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +141,7 @@ fun BlockedRelayEditor(
|
||||
)
|
||||
IconButton(onClick = { localRelays.remove(url) }, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
|
||||
+4
-5
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -55,6 +52,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
|
||||
@@ -139,7 +138,7 @@ fun DmRelayEditor(
|
||||
if (error == null) newRelayUrl = ""
|
||||
},
|
||||
) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add relay")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add relay")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,7 +155,7 @@ fun DmRelayEditor(
|
||||
)
|
||||
IconButton(onClick = { localRelays.remove(url) }, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
|
||||
+4
-5
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -57,6 +54,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.nip65RelayList.Nip65RelayListState
|
||||
import com.vitorpamplona.amethyst.desktop.network.DefaultRelays
|
||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||
@@ -163,7 +162,7 @@ fun Nip65RelayEditor(
|
||||
if (error == null) newRelayUrl = ""
|
||||
},
|
||||
) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add relay")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add relay")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,7 +205,7 @@ fun Nip65RelayEditor(
|
||||
|
||||
IconButton(onClick = { localRelays.remove(relay) }, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
|
||||
+3
-4
@@ -31,9 +31,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.ChevronRight
|
||||
import androidx.compose.material.icons.filled.ExpandMore
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -47,6 +44,8 @@ import androidx.compose.runtime.snapshots.SnapshotStateList
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.nip65RelayList.Nip65RelayListState
|
||||
import com.vitorpamplona.amethyst.desktop.model.DesktopAccountRelays
|
||||
import com.vitorpamplona.amethyst.desktop.network.DesktopRelayConnectionManager
|
||||
@@ -185,7 +184,7 @@ private fun CollapsibleSection(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Icon(
|
||||
if (expanded) Icons.Default.ExpandMore else Icons.Default.ChevronRight,
|
||||
if (expanded) MaterialSymbols.ExpandMore else MaterialSymbols.ChevronRight,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
|
||||
+5
-7
@@ -28,10 +28,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Circle
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -50,6 +46,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
|
||||
@@ -104,7 +102,7 @@ fun RelayListEditor(
|
||||
if (error == null) newRelayUrl = ""
|
||||
},
|
||||
) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add relay")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add relay")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +116,7 @@ fun RelayListEditor(
|
||||
) {
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Icon(
|
||||
Icons.Default.Circle,
|
||||
MaterialSymbols.Circle,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(8.dp),
|
||||
tint =
|
||||
@@ -144,7 +142,7 @@ fun RelayListEditor(
|
||||
}
|
||||
IconButton(onClick = { onRemove(url) }, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
|
||||
+3
-3
@@ -30,8 +30,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Circle
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -42,6 +40,8 @@ import androidx.compose.runtime.produceState
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.network.Nip11Fetcher
|
||||
import com.vitorpamplona.amethyst.desktop.network.RelayMetrics
|
||||
import com.vitorpamplona.amethyst.desktop.network.RelayStatus
|
||||
@@ -75,7 +75,7 @@ fun RelayMetricCard(
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
// Status indicator
|
||||
Icon(
|
||||
Icons.Default.Circle,
|
||||
MaterialSymbols.Circle,
|
||||
contentDescription = if (status.connected) "Connected" else "Disconnected",
|
||||
modifier = Modifier.size(10.dp),
|
||||
tint =
|
||||
|
||||
+3
-3
@@ -30,8 +30,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Refresh
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -45,6 +43,8 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.network.DesktopRelayConnectionManager
|
||||
import com.vitorpamplona.amethyst.desktop.network.Nip11Fetcher
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
@@ -84,7 +84,7 @@ fun RelayMetricsTab(
|
||||
relayManager.disconnect()
|
||||
relayManager.connect()
|
||||
}) {
|
||||
Icon(Icons.Default.Refresh, contentDescription = "Reconnect all")
|
||||
Icon(MaterialSymbols.Refresh, contentDescription = "Reconnect all")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-6
@@ -26,9 +26,6 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
@@ -41,6 +38,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.tor.TorServiceStatus
|
||||
import com.vitorpamplona.amethyst.desktop.network.RelayStatus
|
||||
import com.vitorpamplona.amethyst.desktop.ui.tor.LocalTorState
|
||||
@@ -82,14 +81,14 @@ fun RelayStatusCard(
|
||||
|
||||
if (status.connected) {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
MaterialSymbols.Check,
|
||||
contentDescription = "Connected",
|
||||
tint = statusColor,
|
||||
modifier = Modifier.size(20.dp),
|
||||
)
|
||||
} else if (status.error != null) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Error",
|
||||
tint = statusColor,
|
||||
modifier = Modifier.size(20.dp),
|
||||
@@ -148,7 +147,7 @@ fun RelayStatusCard(
|
||||
|
||||
IconButton(onClick = onRemove) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove relay",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
|
||||
+4
-5
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -54,6 +51,8 @@ import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||
import androidx.compose.ui.input.key.type
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
|
||||
@@ -118,7 +117,7 @@ fun SearchRelayEditor(
|
||||
if (error == null) newRelayUrl = ""
|
||||
},
|
||||
) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add relay")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add relay")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +142,7 @@ fun SearchRelayEditor(
|
||||
)
|
||||
IconButton(onClick = { localRelays.remove(url) }, modifier = Modifier.size(28.dp)) {
|
||||
Icon(
|
||||
Icons.Default.Close,
|
||||
MaterialSymbols.Close,
|
||||
contentDescription = "Remove",
|
||||
modifier = Modifier.size(16.dp),
|
||||
)
|
||||
|
||||
+5
-6
@@ -31,9 +31,6 @@ 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.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.AssistChip
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
@@ -56,6 +53,8 @@ import androidx.compose.ui.input.key.Key
|
||||
import androidx.compose.ui.input.key.key
|
||||
import androidx.compose.ui.input.key.onKeyEvent
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.search.ContentPreset
|
||||
import com.vitorpamplona.amethyst.commons.search.DateUtils
|
||||
import com.vitorpamplona.amethyst.commons.search.KindRegistry
|
||||
@@ -215,7 +214,7 @@ private fun AuthorInputField(
|
||||
)
|
||||
},
|
||||
trailingIcon = {
|
||||
Icon(Icons.Default.Close, contentDescription = "Remove", modifier = Modifier.size(14.dp))
|
||||
Icon(MaterialSymbols.Close, contentDescription = "Remove", modifier = Modifier.size(14.dp))
|
||||
},
|
||||
)
|
||||
}
|
||||
@@ -244,7 +243,7 @@ private fun AuthorInputField(
|
||||
onAuthorAdded(authorInput.trim())
|
||||
authorInput = ""
|
||||
}) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add author")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add author")
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -349,7 +348,7 @@ private fun ChipGroupWithInput(
|
||||
onClick = { onRemove(item) },
|
||||
label = { Text("$prefix$item", style = MaterialTheme.typography.bodySmall) },
|
||||
trailingIcon = {
|
||||
Icon(Icons.Default.Close, contentDescription = "Remove", modifier = Modifier.size(14.dp))
|
||||
Icon(MaterialSymbols.Close, contentDescription = "Remove", modifier = Modifier.size(14.dp))
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
+10
-14
@@ -34,12 +34,6 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.Article
|
||||
import androidx.compose.material.icons.filled.Description
|
||||
import androidx.compose.material.icons.filled.ExpandMore
|
||||
import androidx.compose.material.icons.filled.Forum
|
||||
import androidx.compose.material.icons.filled.Person
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.FilterChipDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -58,8 +52,10 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.search.AdvancedSearchBarState
|
||||
import com.vitorpamplona.amethyst.commons.search.SearchSortOrder
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.UserSearchCard
|
||||
@@ -106,7 +102,7 @@ fun SearchResultsList(
|
||||
SortableHeader(
|
||||
title = "People",
|
||||
count = people.size,
|
||||
icon = Icons.Default.Person,
|
||||
icon = MaterialSymbols.Person,
|
||||
options = SearchSortOrder.PEOPLE_OPTIONS,
|
||||
selected = peopleSortOrder,
|
||||
onSelect = { state.updatePeopleSortOrder(it) },
|
||||
@@ -147,7 +143,7 @@ fun SearchResultsList(
|
||||
SortableHeader(
|
||||
title = "Notes",
|
||||
count = textNotes.size,
|
||||
icon = Icons.Default.Description,
|
||||
icon = MaterialSymbols.Description,
|
||||
options = SearchSortOrder.EVENT_OPTIONS,
|
||||
selected = eventSortOrder,
|
||||
onSelect = { state.updateEventSortOrder(it) },
|
||||
@@ -192,7 +188,7 @@ fun SearchResultsList(
|
||||
SortableHeader(
|
||||
title = "Articles",
|
||||
count = articles.size,
|
||||
icon = Icons.AutoMirrored.Default.Article,
|
||||
icon = MaterialSymbols.AutoMirrored.Article,
|
||||
options = SearchSortOrder.EVENT_OPTIONS,
|
||||
selected = eventSortOrder,
|
||||
onSelect = { state.updateEventSortOrder(it) },
|
||||
@@ -234,7 +230,7 @@ fun SearchResultsList(
|
||||
SortableHeader(
|
||||
title = "Other",
|
||||
count = otherNotes.size,
|
||||
icon = Icons.Default.Forum,
|
||||
icon = MaterialSymbols.Forum,
|
||||
options = SearchSortOrder.EVENT_OPTIONS,
|
||||
selected = eventSortOrder,
|
||||
onSelect = { state.updateEventSortOrder(it) },
|
||||
@@ -264,7 +260,7 @@ fun SearchResultsList(
|
||||
private fun SortableHeader(
|
||||
title: String,
|
||||
count: Int,
|
||||
icon: ImageVector,
|
||||
icon: MaterialSymbol,
|
||||
options: List<SearchSortOrder>,
|
||||
selected: SearchSortOrder,
|
||||
onSelect: (SearchSortOrder) -> Unit,
|
||||
@@ -282,7 +278,7 @@ private fun SortableHeader(
|
||||
modifier = Modifier.clickable(onClick = onToggleCollapse).padding(vertical = 4.dp),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.ExpandMore,
|
||||
MaterialSymbols.ExpandMore,
|
||||
contentDescription = if (collapsed) "Expand $title" else "Collapse $title",
|
||||
modifier = Modifier.size(18.dp).rotate(chevronRotation),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
@@ -343,7 +339,7 @@ private fun <T> ExpandableSection(
|
||||
onClick = { expanded = true },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
Icon(Icons.Default.ExpandMore, contentDescription = null, modifier = Modifier.size(16.dp))
|
||||
Icon(MaterialSymbols.ExpandMore, contentDescription = null, modifier = Modifier.size(16.dp))
|
||||
Text("Show all ${remaining.size} more")
|
||||
}
|
||||
}
|
||||
|
||||
+11
-16
@@ -32,13 +32,6 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.CheckCircle
|
||||
import androidx.compose.material.icons.filled.CloudDownload
|
||||
import androidx.compose.material.icons.filled.Error
|
||||
import androidx.compose.material.icons.filled.ExpandLess
|
||||
import androidx.compose.material.icons.filled.ExpandMore
|
||||
import androidx.compose.material.icons.filled.HourglassEmpty
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -51,11 +44,13 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.chess.RelaySyncState
|
||||
import com.vitorpamplona.amethyst.commons.chess.RelaySyncStatus
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
@Composable
|
||||
@@ -103,7 +98,7 @@ fun SearchSyncBanner(
|
||||
)
|
||||
|
||||
Icon(
|
||||
imageVector = if (isExpanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore,
|
||||
symbol = if (isExpanded) MaterialSymbols.ExpandLess else MaterialSymbols.ExpandMore,
|
||||
contentDescription = if (isExpanded) "Collapse" else "Expand",
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.size(16.dp),
|
||||
@@ -132,7 +127,7 @@ fun SearchSyncBanner(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = relayStatusIcon(relay.status),
|
||||
symbol = relayStatusIcon(relay.status),
|
||||
contentDescription = null,
|
||||
tint = relayStatusColor(relay.status),
|
||||
modifier = Modifier.size(14.dp),
|
||||
@@ -159,13 +154,13 @@ fun SearchSyncBanner(
|
||||
}
|
||||
}
|
||||
|
||||
private fun relayStatusIcon(status: RelaySyncStatus): ImageVector =
|
||||
private fun relayStatusIcon(status: RelaySyncStatus): MaterialSymbol =
|
||||
when (status) {
|
||||
RelaySyncStatus.CONNECTING -> Icons.Default.HourglassEmpty
|
||||
RelaySyncStatus.WAITING -> Icons.Default.HourglassEmpty
|
||||
RelaySyncStatus.RECEIVING -> Icons.Default.CloudDownload
|
||||
RelaySyncStatus.EOSE_RECEIVED -> Icons.Default.CheckCircle
|
||||
RelaySyncStatus.FAILED -> Icons.Default.Error
|
||||
RelaySyncStatus.CONNECTING -> MaterialSymbols.HourglassEmpty
|
||||
RelaySyncStatus.WAITING -> MaterialSymbols.HourglassEmpty
|
||||
RelaySyncStatus.RECEIVING -> MaterialSymbols.CloudDownload
|
||||
RelaySyncStatus.EOSE_RECEIVED -> MaterialSymbols.CheckCircle
|
||||
RelaySyncStatus.FAILED -> MaterialSymbols.Error
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
+6
-8
@@ -31,10 +31,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Add
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.filled.Refresh
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
@@ -64,6 +60,8 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.desktop.service.media.ServerHealthCheck
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -173,7 +171,7 @@ fun MediaServerSettings(
|
||||
},
|
||||
enabled = newServerUrl.isNotBlank() && isValidServerUrl(newServerUrl.trim()),
|
||||
) {
|
||||
Icon(Icons.Default.Add, contentDescription = "Add")
|
||||
Icon(MaterialSymbols.Add, contentDescription = "Add")
|
||||
Spacer(Modifier.width(4.dp))
|
||||
Text("Add")
|
||||
}
|
||||
@@ -203,7 +201,7 @@ fun MediaServerSettings(
|
||||
if (isChecking) {
|
||||
CircularProgressIndicator(modifier = Modifier.size(16.dp))
|
||||
} else {
|
||||
Icon(Icons.Default.Refresh, contentDescription = "Refresh")
|
||||
Icon(MaterialSymbols.Refresh, contentDescription = "Refresh")
|
||||
}
|
||||
Spacer(Modifier.width(4.dp))
|
||||
Text("Check All")
|
||||
@@ -295,7 +293,7 @@ private fun ServerRow(
|
||||
|
||||
IconButton(onClick = onRefresh) {
|
||||
Icon(
|
||||
Icons.Default.Refresh,
|
||||
MaterialSymbols.Refresh,
|
||||
contentDescription = "Refresh",
|
||||
modifier = Modifier.size(18.dp),
|
||||
)
|
||||
@@ -303,7 +301,7 @@ private fun ServerRow(
|
||||
|
||||
IconButton(onClick = onRemove) {
|
||||
Icon(
|
||||
Icons.Default.Delete,
|
||||
MaterialSymbols.Delete,
|
||||
contentDescription = "Remove",
|
||||
modifier = Modifier.size(18.dp),
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
|
||||
+8
-9
@@ -26,9 +26,6 @@ import androidx.compose.foundation.TooltipPlacement
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Shield
|
||||
import androidx.compose.material.icons.outlined.Shield
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -40,6 +37,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.DpOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.tor.TorServiceStatus
|
||||
|
||||
/**
|
||||
@@ -56,19 +55,19 @@ fun TorStatusIndicator(
|
||||
val (icon, tint, tooltip) =
|
||||
when (status) {
|
||||
is TorServiceStatus.Off -> {
|
||||
Triple(Icons.Outlined.Shield, Color.Gray, "Tor: Off")
|
||||
Triple(MaterialSymbols.Shield, Color.Gray, "Tor: Off")
|
||||
}
|
||||
|
||||
is TorServiceStatus.Connecting -> {
|
||||
Triple(Icons.Filled.Shield, Color(0xFFFFB300), "Tor: Connecting...")
|
||||
Triple(MaterialSymbols.Shield, Color(0xFFFFB300), "Tor: Connecting...")
|
||||
}
|
||||
|
||||
is TorServiceStatus.Active -> {
|
||||
Triple(Icons.Filled.Shield, Color(0xFF4CAF50), "Tor: Connected")
|
||||
Triple(MaterialSymbols.Shield, Color(0xFF4CAF50), "Tor: Connected")
|
||||
}
|
||||
|
||||
is TorServiceStatus.Error -> {
|
||||
Triple(Icons.Outlined.Shield, Color(0xFFF44336), "Tor: ${status.message}")
|
||||
Triple(MaterialSymbols.Shield, Color(0xFFF44336), "Tor: ${status.message}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +90,7 @@ fun TorStatusIndicator(
|
||||
if (onClick != null) {
|
||||
IconButton(onClick = onClick, modifier = modifier.size(28.dp)) {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
symbol = icon,
|
||||
contentDescription = tooltip,
|
||||
tint = tint,
|
||||
modifier = Modifier.size(20.dp),
|
||||
@@ -99,7 +98,7 @@ fun TorStatusIndicator(
|
||||
}
|
||||
} else {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
symbol = icon,
|
||||
contentDescription = tooltip,
|
||||
tint = tint,
|
||||
modifier = modifier.size(20.dp),
|
||||
|
||||
Reference in New Issue
Block a user