diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/MarkdownView.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/MarkdownView.kt index 4ec01e3fa..bf0d32a2c 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/MarkdownView.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/MarkdownView.kt @@ -4,11 +4,8 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.text.input.rememberTextFieldState 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 org.jetbrains.jewel.foundation.modifier.trackActivation import org.jetbrains.jewel.foundation.theme.JewelTheme @@ -21,10 +18,9 @@ import org.jetbrains.jewel.ui.component.Divider @Composable fun MarkdownDemo() { Row(Modifier.trackActivation().fillMaxSize().background(JewelTheme.globalColors.panelBackground)) { - var currentMarkdown by remember { mutableStateOf(JewelReadme) } + val editorState = rememberTextFieldState(JewelReadme) MarkdownEditor( - currentMarkdown = currentMarkdown, - onMarkdownChange = { currentMarkdown = it }, + state = editorState, modifier = Modifier.fillMaxHeight().weight(1f), ) @@ -32,7 +28,7 @@ fun MarkdownDemo() { MarkdownPreview( modifier = Modifier.fillMaxHeight().weight(1f), - rawMarkdown = currentMarkdown, + rawMarkdown = editorState.text, ) } } diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownEditor.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownEditor.kt index 1bad3c9bb..51b83790d 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownEditor.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownEditor.kt @@ -11,21 +11,18 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.text.input.rememberTextFieldState +import androidx.compose.foundation.text.input.TextFieldState 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.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.darkrockstudios.libraries.mpfilepicker.FilePicker import com.darkrockstudios.libraries.mpfilepicker.JvmFile import org.jetbrains.jewel.foundation.theme.JewelTheme -import org.jetbrains.jewel.samples.standalone.StandaloneSampleIcons import org.jetbrains.jewel.ui.Orientation import org.jetbrains.jewel.ui.component.Divider import org.jetbrains.jewel.ui.component.Icon @@ -33,22 +30,21 @@ import org.jetbrains.jewel.ui.component.OutlinedButton import org.jetbrains.jewel.ui.component.PopupMenu import org.jetbrains.jewel.ui.component.Text import org.jetbrains.jewel.ui.component.TextArea +import org.jetbrains.jewel.ui.icons.AllIconsKeys @Composable internal fun MarkdownEditor( - currentMarkdown: String, - onMarkdownChange: (String) -> Unit, + state: TextFieldState, modifier: Modifier = Modifier, ) { Column(modifier) { ControlsRow( modifier = Modifier.fillMaxWidth().background(JewelTheme.globalColors.panelBackground).padding(8.dp), - onMarkdownChange = onMarkdownChange, + onLoadMarkdown = { state.edit { replace(0, length, it) } }, ) Divider(orientation = Orientation.Horizontal) Editor( - currentMarkdown = currentMarkdown, - onMarkdownChange = onMarkdownChange, + state = state, modifier = Modifier.fillMaxWidth().weight(1f), ) } @@ -57,7 +53,7 @@ internal fun MarkdownEditor( @Composable private fun ControlsRow( modifier: Modifier = Modifier, - onMarkdownChange: (String) -> Unit, + onLoadMarkdown: (String) -> Unit, ) { Row( modifier.horizontalScroll(rememberScrollState()), @@ -78,22 +74,18 @@ private fun ControlsRow( val jvmFile = platformFile as JvmFile val contents = jvmFile.platformFile.readText() - onMarkdownChange(contents) + onLoadMarkdown(contents) } } - OutlinedButton(onClick = { onMarkdownChange("") }) { Text("Clear") } + OutlinedButton(onClick = { onLoadMarkdown("") }) { Text("Clear") } Box { var showPresets by remember { mutableStateOf(false) } OutlinedButton(onClick = { showPresets = true }) { Text("Load preset") Spacer(Modifier.width(8.dp)) - Icon( - resource = "expui/general/chevronDown.svg", - contentDescription = null, - iconClass = StandaloneSampleIcons::class.java, - ) + Icon(AllIconsKeys.General.ChevronDown, contentDescription = null) } if (showPresets) { @@ -106,7 +98,7 @@ private fun ControlsRow( selected = selected == "Jewel readme", onClick = { selected = "Jewel readme" - onMarkdownChange(JewelReadme) + onLoadMarkdown(JewelReadme) }, ) { Text("Jewel readme") @@ -116,7 +108,7 @@ private fun ControlsRow( selected = selected == "Markdown catalog", onClick = { selected = "Markdown catalog" - onMarkdownChange(MarkdownCatalog) + onLoadMarkdown(MarkdownCatalog) }, ) { Text("Markdown catalog") @@ -129,16 +121,9 @@ private fun ControlsRow( @Composable private fun Editor( - currentMarkdown: String, - onMarkdownChange: (String) -> Unit, + state: TextFieldState, modifier: Modifier = Modifier, ) { - val state = rememberTextFieldState(currentMarkdown) - LaunchedEffect(state) { - snapshotFlow { state.text } - .collect { onMarkdownChange(it.toString()) } - } - Box(modifier.padding(16.dp)) { TextArea( state = state, diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownPreview.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownPreview.kt index 4207e6153..4194a58d8 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownPreview.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/markdown/MarkdownPreview.kt @@ -43,7 +43,7 @@ import java.net.URI @Composable internal fun MarkdownPreview( modifier: Modifier = Modifier, - rawMarkdown: String, + rawMarkdown: CharSequence, ) { val isDark = JewelTheme.isDark @@ -64,7 +64,7 @@ internal fun MarkdownPreview( @Suppress("InjectDispatcher") // This should never go in the composable IRL markdownBlocks = withContext(Dispatchers.Default) { - processor.processMarkdownDocument(rawMarkdown) + processor.processMarkdownDocument(rawMarkdown.toString()) } }