From 235eef7a7f036aaf2cdbf27509fb88e31250723b Mon Sep 17 00:00:00 2001
From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
Date: Tue, 16 Jun 2026 15:40:10 +0000
Subject: [PATCH] android, desktop, ios: document missing formatting in
markdown help (small text and links)
---
.../Views/UserSettings/MarkdownHelp.swift | 15 ++++---
apps/ios/en.lproj/Localizable.strings | 3 ++
.../views/usersettings/MarkdownHelpView.kt | 44 ++++++++++++++++---
.../commonMain/resources/MR/base/strings.xml | 2 +
4 files changed, 52 insertions(+), 12 deletions(-)
diff --git a/apps/ios/Shared/Views/UserSettings/MarkdownHelp.swift b/apps/ios/Shared/Views/UserSettings/MarkdownHelp.swift
index 71c284e9ab..19a2bd0852 100644
--- a/apps/ios/Shared/Views/UserSettings/MarkdownHelp.swift
+++ b/apps/ios/Shared/Views/UserSettings/MarkdownHelp.swift
@@ -10,6 +10,7 @@ import SwiftUI
struct MarkdownHelp: View {
@EnvironmentObject var theme: AppTheme
+ @State private var secretRevealed = false
var body: some View {
VStack(alignment: .leading, spacing: 8) {
@@ -19,13 +20,15 @@ struct MarkdownHelp: View {
mdFormat("_italic_", Text("italic").italic())
mdFormat("~strike~", Text("strike").strikethrough())
mdFormat("`a + b`", Text("`a + b`").font(.body.monospaced()))
+ mdFormat("!- small!", Text("small").font(.footnote).foregroundColor(.secondary))
mdFormat("!1 colored!", Text("colored").foregroundColor(.red) + Text(verbatim: " (") + color("1", .red) + color("2", .green) + color("3", .blue) + color("4", .yellow) + color("5", .cyan) + Text("6").foregroundColor(.purple) + Text(verbatim: ")"))
- (
- mdFormat("#secret#", Text("secret")
- .foregroundColor(.clear)
- .underline(color: theme.colors.onBackground) + Text(" (can be copied)"))
- )
- .textSelection(.enabled)
+ // matches how secret text works in chat: tap to reveal/hide
+ mdFormat("#secret#", secretRevealed
+ ? Text("secret")
+ : Text("secret").foregroundColor(.clear).underline(color: theme.colors.onBackground))
+ .onTapGesture { secretRevealed.toggle() }
+ mdFormat("[link](https://simplex.chat)", Text("link").foregroundColor(theme.colors.primary).underline())
+ .onTapGesture { if let url = URL(string: "https://simplex.chat") { openExternalLink(url) } }
}
.frame(maxWidth: .infinity, alignment: .leading)
}
diff --git a/apps/ios/en.lproj/Localizable.strings b/apps/ios/en.lproj/Localizable.strings
index cb83427195..96f66a62bd 100644
--- a/apps/ios/en.lproj/Localizable.strings
+++ b/apps/ios/en.lproj/Localizable.strings
@@ -24,3 +24,6 @@
/* No comment provided by engineer. */
"No group!" = "Group not found!";
+
+/* No comment provided by engineer. */
+"[link](https://simplex.chat)" = "\\[link](https://simplex.chat)";
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt
index ab2df2014c..2481e09e77 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/MarkdownHelpView.kt
@@ -1,11 +1,19 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
-import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.pointer.PointerIcon
+import androidx.compose.ui.input.pointer.pointerHoverIcon
+import androidx.compose.ui.platform.LocalUriHandler
import dev.icerock.moko.resources.compose.stringResource
import androidx.compose.ui.text.*
import androidx.compose.desktop.ui.tooling.preview.Preview
@@ -14,6 +22,7 @@ import chat.simplex.common.model.Format
import chat.simplex.common.model.FormatColor
import chat.simplex.common.ui.theme.DEFAULT_PADDING
import chat.simplex.common.ui.theme.SimpleXTheme
+import chat.simplex.common.views.helpers.openExternalLink
import chat.simplex.res.MR
@Composable
@@ -30,11 +39,15 @@ fun MarkdownHelpView() {
val equation = stringResource(MR.strings.a_plus_b)
val colored = stringResource(MR.strings.colored_text)
val secret = stringResource(MR.strings.secret_text)
+ val small = stringResource(MR.strings.small_text)
+ val link = stringResource(MR.strings.link_text)
+ val uriHandler = LocalUriHandler.current
MdFormat("*$bold*", bold, Format.Bold())
MdFormat("_${italic}_", italic, Format.Italic())
MdFormat("~$strikethrough~", strikethrough, Format.StrikeThrough())
MdFormat("`$equation`", equation, Format.Snippet())
+ MdFormat("!- $small!", small, Format.Small())
Row {
MdSyntax("!1 $colored!")
Text(buildAnnotatedString {
@@ -48,13 +61,25 @@ fun MarkdownHelpView() {
appendColor(this, "6", FormatColor.magenta, ")")
})
}
+ var secretRevealed by remember { mutableStateOf(false) }
Row {
MdSyntax("#$secret#")
- SelectionContainer {
- Text(buildAnnotatedString {
- withStyle(Format.Secret().style) { append(secret) }
- })
- }
+ Text(
+ buildAnnotatedString {
+ if (secretRevealed) append(secret)
+ else withStyle(Format.Secret().style) { append(secret) }
+ },
+ mdClickable { secretRevealed = !secretRevealed }
+ )
+ }
+ Row {
+ MdSyntax("[$link](https://simplex.chat)")
+ Text(
+ buildAnnotatedString {
+ withStyle(Format.HyperLink(link, "https://simplex.chat").style) { append(link) }
+ },
+ mdClickable { uriHandler.openExternalLink("https://simplex.chat") }
+ )
}
SectionBottomSpacer()
}
@@ -67,6 +92,13 @@ fun MdSyntax(markdown: String) {
.padding(bottom = 4.dp))
}
+// hand cursor on hover, no click highlight - matches how secret text and links behave in chat
+@Composable
+fun mdClickable(onClick: () -> Unit): Modifier =
+ Modifier
+ .pointerHoverIcon(PointerIcon.Hand)
+ .clickable(interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = onClick)
+
@Composable
fun MdFormat(markdown: String, example: String, format: Format) {
Row {
diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
index 9630c61004..01d8703e2c 100644
--- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
+++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
@@ -1252,6 +1252,8 @@
a + b
colored
secret
+ small
+ link
calling…