in hot-reload-devtools/src/main/kotlin/org/jetbrains/compose/devtools/widgets/DtStatusColor.kt [51:86]
fun animateReloadStatusColor(
idleColor: Color = Color.LightGray,
reloadingColor: Color = DtColors.statusColorOrange2,
okColor: Color = DtColors.statusColorOk,
errorColor: Color = DtColors.statusColorError,
): State<Color> {
val initialColor = when (ReloadUIState.composeValue()) {
is ReloadUIState.Reloading -> reloadingColor
is ReloadUIState.Failed -> errorColor
else -> idleColor
}
val color = remember { Animatable(initialColor) }
val state = ReloadUIState.composeFlow()
LaunchedEffect(idleColor, reloadingColor, okColor, errorColor) {
state.changes().collectLatest { (_, state) ->
when (state) {
is ReloadUIState.Reloading -> {
color.animateTo(reloadingColor, colorChange())
}
is ReloadUIState.Failed -> {
color.animateTo(errorColor, colorChange())
}
is ReloadUIState.Ok -> {
color.animateTo(okColor, colorChange())
delay(ReloadAnimationSpec.okStatusRetention)
color.animateTo(idleColor, fadeOut())
}
}
}
}
return color.asState()
}