A small one but UnboundedRippleIconButton use .background(color = animatedContainerColor.value, shape = shape), that is recomposing a lot during the animation from enabled / disabled.
This can be fully avoided by replacing with
.drawWithCache {
val outline = shape.createOutline(size, layoutDirection, this)
onDrawWithContent {
drawOutline(outline, color = animatedContainerColor.value)
drawContent()
}
}