Loaders
Loadersanimated

Spinner bars

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
val t = rememberInfiniteTransition(label = "bars")
val head by t.animateFloat(
    initialValue = 0f,
    targetValue = 12f,
    animationSpec = infiniteRepeatable(tween(1000, easing = LinearEasing)),
    label = "head",
)
val color = MaterialTheme.colorScheme.onSurface
Canvas(Modifier.size(32.dp)) {
    val count = 12
    repeat(count) { i ->
        rotate(degrees = i * 30f) {
            val fade = ((i + head.toInt()) % count) / count.toFloat()
            drawRoundRect(
                color = color.copy(alpha = 0.2f + 0.8f * fade),
                topLeft = Offset(size.width / 2f - 1.5.dp.toPx(), 2.dp.toPx()),
                size = Size(3.dp.toPx(), 8.dp.toPx()),
                cornerRadius = CornerRadius(2.dp.toPx()),
            )
        }
    }
}