diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt index 3f8e5922..89642d30 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/comments/CommentEntry.kt @@ -13,14 +13,11 @@ 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.LocalContentColor -import androidx.compose.material.LocalTextStyle import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -29,30 +26,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import com.halilibo.richtext.markdown.Markdown -import com.halilibo.richtext.ui.RichTextScope -import com.halilibo.richtext.ui.material3.Material3RichText import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.PostTitle import dev.msfjarvis.claw.common.posts.Submitter import dev.msfjarvis.claw.common.posts.TagRow import dev.msfjarvis.claw.common.res.ClawIcons +import dev.msfjarvis.claw.common.ui.ThemedRichText import dev.msfjarvis.claw.model.Comment import dev.msfjarvis.claw.model.LobstersPostDetails -@Composable -fun ThemedRichText( - modifier: Modifier = Modifier, - content: @Composable RichTextScope.() -> Unit, -) { - CompositionLocalProvider( - LocalTextStyle provides MaterialTheme.typography.bodyLarge, - LocalContentColor provides MaterialTheme.colorScheme.onBackground, - ) { - Material3RichText(modifier) { content() } - } -} - @Composable fun CommentsHeader( postDetails: LobstersPostDetails, @@ -80,7 +62,7 @@ fun CommentsHeader( } if (postDetails.description.isNotBlank()) { - ThemedRichText { Markdown(htmlConverter.convertHTMLToMarkdown(postDetails.description)) } + ThemedRichText(htmlConverter.convertHTMLToMarkdown(postDetails.description)) Spacer(Modifier.height(4.dp)) } Submitter( @@ -149,9 +131,10 @@ fun CommentEntry( ) AnimatedContent(targetState = expanded) { expandedState -> if (expandedState) { - ThemedRichText(modifier = Modifier.padding(top = 8.dp)) { - Markdown(htmlConverter.convertHTMLToMarkdown(comment.comment)) - } + ThemedRichText( + text = htmlConverter.convertHTMLToMarkdown(comment.comment), + modifier = Modifier.padding(top = 8.dp) + ) } } } diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/ui/Markdown.kt b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/ui/Markdown.kt new file mode 100644 index 00000000..0ed32d63 --- /dev/null +++ b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/ui/Markdown.kt @@ -0,0 +1,23 @@ +package dev.msfjarvis.claw.common.ui + +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import com.halilibo.richtext.markdown.Markdown +import com.halilibo.richtext.ui.material3.Material3RichText + +@Composable +fun ThemedRichText( + text: String, + modifier: Modifier = Modifier, +) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.bodyLarge, + LocalContentColor provides MaterialTheme.colorScheme.onBackground, + ) { + Material3RichText(modifier) { Markdown(text) } + } +} diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/user/UserProfile.kt b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/user/UserProfile.kt index e96345a6..a11ebe21 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/user/UserProfile.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/claw/common/user/UserProfile.kt @@ -15,10 +15,6 @@ import androidx.compose.runtime.produceState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.buildAnnotatedString -import androidx.compose.ui.text.style.TextDecoration -import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import dev.msfjarvis.claw.common.NetworkState import dev.msfjarvis.claw.common.NetworkState.Loading @@ -26,6 +22,7 @@ import dev.msfjarvis.claw.common.NetworkState.Success import dev.msfjarvis.claw.common.ui.NetworkError import dev.msfjarvis.claw.common.ui.NetworkImage import dev.msfjarvis.claw.common.ui.ProgressBar +import dev.msfjarvis.claw.common.ui.ThemedRichText import dev.msfjarvis.claw.model.User @Suppress("UNCHECKED_CAST") @@ -67,19 +64,11 @@ private fun UserProfileInternal( text = user.username, style = MaterialTheme.typography.displaySmall, ) - Text( + ThemedRichText( text = user.about, - style = MaterialTheme.typography.bodyLarge, ) - Text( - text = - buildAnnotatedString { - append("Invited by ") - withStyle(style = SpanStyle(textDecoration = TextDecoration.Underline)) { - append(user.invitedBy) - } - }, - style = MaterialTheme.typography.bodyLarge, + ThemedRichText( + text = "Invited by [${user.invitedBy}](https://lobste.rs/u/${user.invitedBy})", ) } }