tie the tab label reveal to the swipe and rebalance the pill padding

This commit is contained in:
austinried
2026-10-04 00:29:56 +00:00
parent 0825b8411c
commit a780b4c2f4
2 changed files with 3252 additions and 5 deletions
File diff suppressed because one or more lines are too long
@@ -82,8 +82,10 @@ import androidx.compose.ui.graphics.lerp
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.layout.boundsInParent import androidx.compose.ui.layout.boundsInParent
import androidx.compose.ui.layout.layout
import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -672,7 +674,7 @@ private fun TabButton(
.clip(RoundedCornerShape(8.dp)) .clip(RoundedCornerShape(8.dp))
.background(container.copy(alpha = progress)) .background(container.copy(alpha = progress))
.clickable(onClick = onClick) .clickable(onClick = onClick)
.padding(horizontal = 10.dp, vertical = 6.dp), .padding(start = 8.dp, end = 12.dp, top = 6.dp, bottom = 6.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
@@ -681,10 +683,17 @@ private fun TabButton(
tint = content, tint = content,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
) )
AnimatedVisibility( Box(
visible = progress > 0.5f, modifier =
enter = expandHorizontally(expandFrom = Alignment.Start) + fadeIn(), Modifier
exit = shrinkHorizontally(shrinkTowards = Alignment.Start) + fadeOut(), .clipToBounds()
.layout { measurable, _ ->
val placeable = measurable.measure(Constraints())
val width = (placeable.width * progress).roundToInt()
layout(width, placeable.height) {
placeable.place(0, 0)
}
},
) { ) {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))