Merge feat/grouped-row-rich-text for Calendula's pin

This commit is contained in:
2026-08-08 16:24:39 +02:00
2 changed files with 43 additions and 1 deletions
+5
View File
@@ -12,6 +12,11 @@ are no binary releases; "version" tracks the shared `version` in the root build
### Added
- **`components`** — `GroupedRow` takes an `AnnotatedString` title and summary
as well as plain `String`s, so a row can carry its own emphasis: marking the
run a search matched, without every caller having to rebuild the row. The
`String` overload delegates to it, so existing callers are unchanged.
- **`components`** — `SnackChip`, the family's compact confirmation: a
content-sized pill sliding up from the bottom with an optional trailing action,
for the case where the surface behind the confirmation *is* the confirmation
@@ -24,6 +24,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
@@ -130,7 +131,6 @@ fun GroupedSurface(
* gap for a caller that owns its own uniform spacing, e.g. [ReorderableColumn].
* [onLongClick] (see [GroupedSurface]) adds a long-press to the row.
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun GroupedRow(
title: String,
@@ -146,6 +146,43 @@ fun GroupedRow(
trailing: @Composable (() -> Unit)? = null,
onClick: (() -> Unit)? = null,
onLongClick: (() -> Unit)? = null,
) = GroupedRow(
title = AnnotatedString(title),
position = position,
modifier = modifier,
summary = summary?.let { AnnotatedString(it) },
selected = selected,
dimmed = dimmed,
container = container,
minHeight = minHeight,
gapBelow = gapBelow,
leading = leading,
trailing = trailing,
onClick = onClick,
onLongClick = onLongClick,
)
/**
* [GroupedRow] with styled text, for a row whose title or summary carries its own
* emphasis — a search hit marking the run that matched, say. Identical otherwise;
* the plain-[String] overload delegates here.
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun GroupedRow(
title: AnnotatedString,
position: Position,
modifier: Modifier = Modifier,
summary: AnnotatedString? = null,
selected: Boolean = false,
dimmed: Boolean = false,
container: Color? = null,
minHeight: Dp = 72.dp,
gapBelow: Boolean = true,
leading: @Composable (() -> Unit)? = null,
trailing: @Composable (() -> Unit)? = null,
onClick: (() -> Unit)? = null,
onLongClick: (() -> Unit)? = null,
) {
val itemColors = if (selected) {
ListItemDefaults.colors(