From 14353c7f7c2d734c241d4c350f67d69466b50f7a Mon Sep 17 00:00:00 2001 From: Infi Date: Sun, 24 Aug 2025 04:16:57 +0200 Subject: [PATCH] feat(labs): fm test screen/-s Signed-off-by: Infi --- .../java/chat/revolt/ndk/FinalMarkdown.kt | 2 +- .../java/chat/revolt/ndk/NativeLibraries.kt | 4 +- .../revolt/screens/labs/LabsHomeScreen.kt | 9 ++ .../revolt/screens/labs/LabsRootScreen.kt | 5 +- .../labs/ui/sandbox/FinalMarkdownSandbox.kt | 87 +++++++++++++++++++ 5 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/chat/revolt/screens/labs/ui/sandbox/FinalMarkdownSandbox.kt diff --git a/app/src/main/java/chat/revolt/ndk/FinalMarkdown.kt b/app/src/main/java/chat/revolt/ndk/FinalMarkdown.kt index e80247dc..6931380d 100644 --- a/app/src/main/java/chat/revolt/ndk/FinalMarkdown.kt +++ b/app/src/main/java/chat/revolt/ndk/FinalMarkdown.kt @@ -9,6 +9,6 @@ data class FinalMarkdownNodeTest( @Suppress("KotlinJniMissingFunction") object FinalMarkdown { - external fun init() + external fun init(debug: Boolean) external fun process(input: String): FinalMarkdownNodeTest } \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/ndk/NativeLibraries.kt b/app/src/main/java/chat/revolt/ndk/NativeLibraries.kt index e8bc19dd..f475e2f6 100644 --- a/app/src/main/java/chat/revolt/ndk/NativeLibraries.kt +++ b/app/src/main/java/chat/revolt/ndk/NativeLibraries.kt @@ -1,5 +1,7 @@ package chat.revolt.ndk +import chat.revolt.BuildConfig + annotation class NativeLibrary(val name: String) { companion object { const val LIB_NAME_NATIVE_MARKDOWN = "stendal" @@ -12,6 +14,6 @@ object NativeLibraries { System.loadLibrary(NativeLibrary.LIB_NAME_NATIVE_MARKDOWN) System.loadLibrary(NativeLibrary.LIB_NAME_NATIVE_MARKDOWN_V2) Stendal.init() - FinalMarkdown.init() + FinalMarkdown.init(BuildConfig.DEBUG) } } diff --git a/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt b/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt index 3fe5cd85..2f2db7aa 100644 --- a/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt +++ b/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt @@ -178,6 +178,15 @@ fun LabsHomeScreen(navController: NavController, topNav: NavController) { } ) HorizontalDivider() + ListItem( + headlineContent = { + Text("Final Markdown") + }, + modifier = Modifier.clickable { + navController.navigate("sandboxes/finalmarkdown") + } + ) + HorizontalDivider() ListItem( headlineContent = { Text("Gradient Editor") diff --git a/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt b/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt index 2f6288eb..bb6ccd13 100644 --- a/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt +++ b/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt @@ -14,6 +14,7 @@ import androidx.navigation.compose.rememberNavController import chat.revolt.api.settings.FeatureFlags import chat.revolt.screens.labs.ui.mockups.NewLoginExperienceMockup import chat.revolt.screens.labs.ui.sandbox.CoreLibSandbox +import chat.revolt.screens.labs.ui.sandbox.FinalMarkdownSandbox import chat.revolt.screens.labs.ui.sandbox.GradientEditorSandbox import chat.revolt.screens.labs.ui.sandbox.JBMSandbox import chat.revolt.screens.labs.ui.sandbox.NewCardSandboxScreen @@ -74,13 +75,15 @@ fun LabsRootScreen(topNav: NavController) { composable("sandboxes/jbm") { JBMSandbox(labsNav) } + composable("sandboxes/finalmarkdown") { + FinalMarkdownSandbox(labsNav) + } composable("sandboxes/gradienteditor") { GradientEditorSandbox(labsNav) } composable("sandboxes/librevolt") { CoreLibSandbox(labsNav) } - composable("sandboxes/newcard") { NewCardSandboxScreen(labsNav) } diff --git a/app/src/main/java/chat/revolt/screens/labs/ui/sandbox/FinalMarkdownSandbox.kt b/app/src/main/java/chat/revolt/screens/labs/ui/sandbox/FinalMarkdownSandbox.kt new file mode 100644 index 00000000..55e47ac1 --- /dev/null +++ b/app/src/main/java/chat/revolt/screens/labs/ui/sandbox/FinalMarkdownSandbox.kt @@ -0,0 +1,87 @@ +package chat.revolt.screens.labs.ui.sandbox + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TextField +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +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.text.style.TextOverflow +import androidx.navigation.NavController +import chat.revolt.ndk.FinalMarkdown +import chat.revolt.settings.dsl.SettingsPage + +@Composable +fun FinalMarkdownSandbox(navController: NavController) { + var mdSource by remember { mutableStateOf("") } + var submitMdSource by remember { mutableStateOf(null) } + + LaunchedEffect(submitMdSource) { + submitMdSource?.let { + FinalMarkdown.process(it) + } + } + + SettingsPage( + navController = navController, + title = { + Text( + text = "Final Markdown Sandbox", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + } + ) { + Subcategory( + title = { Text("Source", maxLines = 1, overflow = TextOverflow.Ellipsis) }, + ) { + TextField( + value = mdSource, + onValueChange = { mdSource = it }, + label = { Text("Markdown source") }, + modifier = Modifier.fillMaxWidth() + ) + + TextButton(onClick = { + submitMdSource = mdSource + }) { + Text("Submit") + } + TextButton(onClick = { + submitMdSource = """# Full range of MD now supported! +1. Text with **bold**, *italics*, and ***both***! +2. You ~~can't see me~~. +3. [I'm a link to another website.]() +4. I'm a spoiler with ||**bold text inside it**|| + - I'm a sub-item on this list... + - Let's go even deeper... + +`Inline code` + +```js +let x = "I'm a multi-line code block!"; +``` + +> > ${'$'}${'$'}E = mc^2${'$'}${'$'} +> +> — Albert Einstein + +| Timestamp | Mention | Channel Link | Message Link | +|:-:|:-:|:-:|:-:| +| | <@01EX2NCWQ0CHS3QJF0FEQS1GR4> | <#01H73F4RAHTPBHKJ1XBQDXK3NQ> | https://revolt.chat/server/01F7ZSBSFHQ8TA81725KQCSDDP/channel/01F92C5ZXBQWQ8KY7J8KY917NM/01J25XZM9JXVVJDDKFPB7Q48HZ |""" + }) { + Text("Submit test document") + } + Subcategory( + title = { Text("Output", maxLines = 1, overflow = TextOverflow.Ellipsis) }, + ) { + Text("TBD!") + } + } + } +} \ No newline at end of file