@@ -3,14 +3,15 @@ package soy.iko.opencode.ui.components
3import androidx.compose.foundation.background
3import androidx.compose.foundation.background
4import androidx.compose.foundation.horizontalScroll
4import androidx.compose.foundation.horizontalScroll
5import androidx.compose.foundation.layout.Arrangement
5import androidx.compose.foundation.layout.Arrangement
6−import androidx.compose.foundation.layout.Column
7import androidx.compose.foundation.layout.Row
6import androidx.compose.foundation.layout.Row
7+import androidx.compose.foundation.layout.Spacer
8import androidx.compose.foundation.layout.fillMaxWidth
8import androidx.compose.foundation.layout.fillMaxWidth
9import androidx.compose.foundation.layout.padding
9import androidx.compose.foundation.layout.padding
10import androidx.compose.foundation.layout.width
10import androidx.compose.foundation.layout.width
11+import androidx.compose.foundation.lazy.LazyColumn
12+import androidx.compose.foundation.lazy.itemsIndexed
11import androidx.compose.foundation.rememberScrollState
13import androidx.compose.foundation.rememberScrollState
12import androidx.compose.foundation.shape.RoundedCornerShape
14import androidx.compose.foundation.shape.RoundedCornerShape
13−import androidx.compose.foundation.verticalScroll
14import androidx.compose.material.icons.Icons
15import androidx.compose.material.icons.Icons
15import androidx.compose.material.icons.filled.ContentCopy
16import androidx.compose.material.icons.filled.ContentCopy
16import androidx.compose.material3.Icon
17import androidx.compose.material3.Icon
@@ -82,28 +83,24 @@ fun DiffView(diff: String, modifier: Modifier = Modifier) {
82 val addText = MaterialTheme.colorScheme.primary
83 val addText = MaterialTheme.colorScheme.primary
83 val removeText = MaterialTheme.colorScheme.error
84 val removeText = MaterialTheme.colorScheme.error
84 val context = LocalContext.current
85 val context = LocalContext.current
86+ val hScrollState = rememberScrollState()
86− Column(
88+ LazyColumn(
87 modifier = modifier
89 modifier = modifier
88 .fillMaxWidth()
90 .fillMaxWidth()
89 .padding(vertical = 4.dp)
91 .padding(vertical = 4.dp)
90 .clip(RoundedCornerShape(8.dp))
92 .clip(RoundedCornerShape(8.dp))
91− .background(MaterialTheme.colorScheme.surfaceVariant)
93+ .background(MaterialTheme.colorScheme.surfaceVariant),
92− .padding(top = 2.dp, end = 4.dp),
95+ item(key = "__copy") {
94− Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.End) {
96+ Row(modifier = Modifier.fillMaxWidth().padding(top = 2.dp, end = 4.dp), horizontalArrangement = Arrangement.End) {
95− IconButton(onClick = { copyToClipboard(context, "diff", diff) }) {
97+ IconButton(onClick = { copyToClipboard(context, "diff", diff) }) {
96− Icon(Icons.Filled.ContentCopy, contentDescription = stringResource(R.string.copy), tint = MaterialTheme.colorScheme.onSurfaceVariant)
98+ Icon(Icons.Filled.ContentCopy, contentDescription = stringResource(R.string.copy), tint = MaterialTheme.colorScheme.onSurfaceVariant)
99− Column(
102+ itemsIndexed(lines, key = { index, _ -> index }) { _, line ->
101− .horizontalScroll(rememberScrollState())
102− .verticalScroll(rememberScrollState())
103− .padding(horizontal = 10.dp)
103+ Row(modifier = Modifier.horizontalScroll(hScrollState).padding(horizontal = 10.dp)) {
104− .padding(bottom = 10.dp),
106− for (line in lines) {
107 when (line) {
104 when (line) {
108 is DiffLine.Hunk -> Text(
105 is DiffLine.Hunk -> Text(
109 line.text,
106 line.text,
@@ -125,13 +122,14 @@ fun DiffView(diff: String, modifier: Modifier = Modifier) {
125+ item(key = "__spacer") { Spacer(Modifier.padding(bottom = 10.dp)) }
131@Composable
129@Composable
132private fun DiffRow(text: String, prefix: String, bg: Color, textColor: androidx.compose.ui.graphics.Color) {
130private fun DiffRow(text: String, prefix: String, bg: Color, textColor: androidx.compose.ui.graphics.Color) {
134− modifier = Modifier.fillMaxWidth().background(bg),
132+ modifier = Modifier.background(bg),