fix(desktop): remove ID footer/divider, whole-card hover on NoteCard

- Dropped the "ID: <hex>…" debug footer and the HorizontalDivider that
  sat above it. Cards read as finished content now, not dev output.
- The previous design had an inner header+text Column carrying the
  clickable modifier, which meant the hover ring only covered part of
  the card (a rectangle inside). Switched to Material3 Card(onClick =
  onClick, …) so the whole card is the click-surface and the ripple is
  clipped to the card's rounded shape by M3 itself.
  - Content moved into a `cardBody` lambda reused by both branches of
    the `if (onClick != null)` check — non-clickable fallback exists
    for in-thread quoted note wrappers.
  - Action buttons inside NoteActionsRow have their own clickables that
    consume taps before they reach the Card's handler, so tapping
    reply / repost / zap still fires only that action, not the Card.

https://claude.ai/code/session_01NufduPfZvYQVYwLkbCjCUo
This commit is contained in:
Claude
2026-04-24 16:06:08 +00:00
parent bbe84c2bb0
commit fc9eb833ac
@@ -24,6 +24,7 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
@@ -34,7 +35,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -156,27 +156,16 @@ fun NoteCard(
400.dp
}
Card(
modifier = modifier.fillMaxWidth(),
colors =
CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surface,
),
elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
) {
// Whole-card hover/ripple: pass onClick to M3 Card so the click-surface is
// the entire card (M3 handles shape clipping for us). Action buttons inside
// the NoteActionsRow have their own clickables that consume the click before
// it reaches the Card's handler, so tapping an action still fires only that
// action.
val cardColors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
val cardElevation = CardDefaults.cardElevation(defaultElevation = 1.dp)
val cardBody: @Composable ColumnScope.() -> Unit = {
Column(modifier = Modifier.padding(12.dp)) {
// Header + text area — clickable to navigate to thread. Clip BEFORE
// clickable so the ripple/hover fill is rounded, not a hard rectangle.
Column(
modifier =
if (onClick != null) {
Modifier
.clip(RoundedCornerShape(8.dp))
.clickable { onClick() }
} else {
Modifier
},
) {
Column {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
@@ -312,21 +301,25 @@ fun NoteCard(
}
}
}
Spacer(Modifier.height(8.dp))
HorizontalDivider(color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f))
Spacer(Modifier.height(4.dp))
// Event ID (truncated)
Text(
text = "ID: ${note.id.take(12)}...",
style = MaterialTheme.typography.labelSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.6f),
)
}
}
if (onClick != null) {
Card(
onClick = onClick,
modifier = modifier.fillMaxWidth(),
colors = cardColors,
elevation = cardElevation,
content = cardBody,
)
} else {
Card(
modifier = modifier.fillMaxWidth(),
colors = cardColors,
elevation = cardElevation,
content = cardBody,
)
}
}
/**