Hints
Hintsanimated

Reaction bar

A popover of emoji reactions that pop in one after another on open.

👍❤️😂😮😢

Installation

caveui components are copy-paste Jetpack Compose built entirely on Material 3 — there's no caveui dependency to add. Make sure Material 3 is on your classpath (it ships with the Compose BOM), then copy the Usage snippet below into your project.

kotlin
// build.gradle.kts (module)
dependencies {
    implementation(platform("androidx.compose:compose-bom:2025.06.00"))
    implementation("androidx.compose.material3:material3")
}

Usage

kotlin
@Composable
fun ReactionBar(onReact: (String) -> Unit) {
    val reactions = listOf("👍", "❤️", "😂", "😮", "😢")
    Surface(
        shape = CircleShape,
        color = MaterialTheme.colorScheme.surface,
        shadowElevation = 6.dp,
    ) {
        Row(
            Modifier.padding(horizontal = 8.dp, vertical = 6.dp),
            horizontalArrangement = Arrangement.spacedBy(6.dp),
        ) {
            reactions.forEachIndexed { i, emoji ->
                val scale = remember { Animatable(0f) }
                LaunchedEffect(Unit) {
                    delay(i * 60L)
                    scale.animateTo(1f, spring(Spring.DampingRatioMediumBouncy))
                }
                Text(
                    emoji,
                    Modifier
                        .graphicsLayer { scaleX = scale.value; scaleY = scale.value }
                        .clickable { onReact(emoji) },
                    fontSize = 22.sp,
                )
            }
        }
    }
}