Renamed Position to DpOffset

Relnote: Renamed Position to DpOffset and removed getDistance()

Fixes: 175699319
Test: compiles -- only API rename
Change-Id: Ib2dfde4ceb450e417ff759bdabbc74d2506a44c9
diff --git a/compose/animation/animation-core/api/current.txt b/compose/animation/animation-core/api/current.txt
index 41d1e7f..21a45dc 100644
--- a/compose/animation/animation-core/api/current.txt
+++ b/compose/animation/animation-core/api/current.txt
@@ -568,7 +568,7 @@
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffset(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntOffset> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntSize> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffset(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Offset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Offset> targetValueByState);
-    method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.Position> animatePosition(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.Position>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.Position> targetValueByState);
+    method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.DpOffset> animatePosition(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.DpOffset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.DpOffset> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Rect>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Size>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Size> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
@@ -611,7 +611,7 @@
   public final class VectorConvertersKt {
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.Position.Companion);
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.unit.Bounds.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
@@ -705,7 +705,7 @@
     method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
     method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
     method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
-    method public static long getVisibilityThreshold(androidx.compose.ui.unit.Position.Companion);
+    method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
     method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
     method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
     method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
diff --git a/compose/animation/animation-core/api/public_plus_experimental_current.txt b/compose/animation/animation-core/api/public_plus_experimental_current.txt
index 41d1e7f..21a45dc 100644
--- a/compose/animation/animation-core/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation-core/api/public_plus_experimental_current.txt
@@ -568,7 +568,7 @@
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffset(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntOffset> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntSize> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffset(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Offset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Offset> targetValueByState);
-    method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.Position> animatePosition(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.Position>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.Position> targetValueByState);
+    method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.DpOffset> animatePosition(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.DpOffset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.DpOffset> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Rect>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Size>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Size> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
@@ -611,7 +611,7 @@
   public final class VectorConvertersKt {
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.Position.Companion);
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.unit.Bounds.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
@@ -705,7 +705,7 @@
     method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
     method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
     method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
-    method public static long getVisibilityThreshold(androidx.compose.ui.unit.Position.Companion);
+    method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
     method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
     method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
     method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
diff --git a/compose/animation/animation-core/api/restricted_current.txt b/compose/animation/animation-core/api/restricted_current.txt
index 1855bc4..4640820 100644
--- a/compose/animation/animation-core/api/restricted_current.txt
+++ b/compose/animation/animation-core/api/restricted_current.txt
@@ -586,7 +586,7 @@
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffset(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntOffset> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntSize> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffset(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Offset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Offset> targetValueByState);
-    method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.Position> animatePosition(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.Position>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.Position> targetValueByState);
+    method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.DpOffset> animatePosition(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.DpOffset>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.DpOffset> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Rect>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Size>> transitionSpec, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Size> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.States<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
@@ -629,7 +629,7 @@
   public final class VectorConvertersKt {
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.Position.Companion);
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.unit.Bounds.Companion);
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
@@ -723,7 +723,7 @@
     method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
     method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
     method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
-    method public static long getVisibilityThreshold(androidx.compose.ui.unit.Position.Companion);
+    method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
     method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
     method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
     method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
diff --git a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt
index 62fb0c0..2597aab 100644
--- a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt
+++ b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt
@@ -22,7 +22,7 @@
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.LinearOutSlowInEasing
 import androidx.compose.animation.core.keyframes
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 
 @Sampled
@@ -54,10 +54,10 @@
 fun KeyframesBuilderForPosition() {
     // Use FastOutSlowInEasing for the interval from 0 to 50 ms, and LinearOutSlowInEasing for the
     // time between 50 and 100ms
-    keyframes<Position> {
+    keyframes<DpOffset> {
         durationMillis = 200
-        Position(0.dp, 0.dp) at 0 with LinearEasing
-        Position(500.dp, 100.dp) at 100 with LinearOutSlowInEasing
-        Position(400.dp, 50.dp) at 150
+        DpOffset(0.dp, 0.dp) at 0 with LinearEasing
+        DpOffset(500.dp, 100.dp) at 100 with LinearOutSlowInEasing
+        DpOffset(400.dp, 50.dp) at 150
     }
 }
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
index c91c1dd..fa3482e 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
@@ -35,7 +35,7 @@
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.Uptime
 import androidx.compose.ui.util.annotation.VisibleForTesting
 
@@ -430,7 +430,7 @@
     animateValue(Offset.VectorConverter, transitionSpec, targetValueByState)
 
 /**
- * Creates a [Position] animation as a part of the given [Transition]. This means the states
+ * Creates a [DpOffset] animation as a part of the given [Transition]. This means the states
  * of this animation will be managed by the [Transition].
  *
  * [targetValueByState] is used as a mapping from a target state to the target value of this
@@ -450,12 +450,12 @@
  */
 @Composable
 inline fun <S> Transition<S>.animatePosition(
-    noinline transitionSpec: @Composable (Transition.States<S>) -> FiniteAnimationSpec<Position> = {
-        spring(visibilityThreshold = Position.VisibilityThreshold)
+    noinline transitionSpec: @Composable (Transition.States<S>) -> FiniteAnimationSpec<DpOffset> = {
+        spring(visibilityThreshold = DpOffset.VisibilityThreshold)
     },
-    targetValueByState: @Composable (state: S) -> Position
-): State<Position> =
-    animateValue(Position.VectorConverter, transitionSpec, targetValueByState)
+    targetValueByState: @Composable (state: S) -> DpOffset
+): State<DpOffset> =
+    animateValue(DpOffset.VectorConverter, transitionSpec, targetValueByState)
 
 /**
  * Creates a [Size] animation as a part of the given [Transition]. This means the states
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt
index 585df63..7bbc09f 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
@@ -40,10 +40,10 @@
     get() = DpToVector
 
 /**
- * A type converter that converts a [Position] to a [AnimationVector2D], and vice versa.
+ * A type converter that converts a [DpOffset] to a [AnimationVector2D], and vice versa.
  */
-val Position.Companion.VectorConverter: TwoWayConverter<Position, AnimationVector2D>
-    get() = PositionToVector
+val DpOffset.Companion.VectorConverter: TwoWayConverter<DpOffset, AnimationVector2D>
+    get() = DpOffsetToVector
 
 /**
  * A type converter that converts a [Size] to a [AnimationVector2D], and vice versa.
@@ -84,12 +84,12 @@
 )
 
 /**
- * A type converter that converts a [Position] to a [AnimationVector2D], and vice versa.
+ * A type converter that converts a [DpOffset] to a [AnimationVector2D], and vice versa.
  */
-private val PositionToVector: TwoWayConverter<Position, AnimationVector2D> =
+private val DpOffsetToVector: TwoWayConverter<DpOffset, AnimationVector2D> =
     TwoWayConverter(
         convertToVector = { AnimationVector2D(it.x.value, it.y.value) },
-        convertFromVector = { Position(it.v1.dp, it.v2.dp) }
+        convertFromVector = { DpOffset(it.v1.dp, it.v2.dp) }
     )
 
 /**
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt
index cc50e01..200c127 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 
 private const val DpVisibilityThreshold = 0.1f
@@ -76,12 +76,12 @@
     get() = DpVisibilityThreshold.dp
 
 /**
- * Visibility threshold for [Position]. This defines the amount of value change that is
+ * Visibility threshold for [DpOffset]. This defines the amount of value change that is
  * considered to be no longer visible. The animation system uses this to signal to some default
  * [spring] animations to stop when the value is close enough to the target.
  */
-val Position.Companion.VisibilityThreshold: Position
-    get() = Position(Dp.VisibilityThreshold, Dp.VisibilityThreshold)
+val DpOffset.Companion.VisibilityThreshold: DpOffset
+    get() = DpOffset(Dp.VisibilityThreshold, Dp.VisibilityThreshold)
 
 /**
  * Visibility threshold for [Size]. This defines the amount of value change that is
diff --git a/compose/animation/animation/api/current.txt b/compose/animation/animation/api/current.txt
index 3922f7a..e6e29ea 100644
--- a/compose/animation/animation/api/current.txt
+++ b/compose/animation/animation/api/current.txt
@@ -107,7 +107,7 @@
     method public static kotlin.jvm.functions.Function1<androidx.compose.ui.graphics.colorspace.ColorSpace,androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D>> getVectorConverter(androidx.compose.ui.graphics.Color.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
-    method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.Position.Companion);
+    method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.unit.Bounds.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
@@ -141,9 +141,9 @@
     method @androidx.compose.runtime.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, optional androidx.compose.animation.core.AnimationSpec<T> animSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, optional androidx.compose.animation.core.AnimationSpec<T> animSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-2AXSKHY(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener);
+    method @androidx.compose.runtime.Composable public static long animate-4E4yWWY(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.DpOffset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.DpOffset,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-Cmzki-s(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static float animate-Lz7ev7o(float target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener);
-    method @androidx.compose.runtime.Composable public static long animate-TEItX5s(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-m3E411Q(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-t81mtYE(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener);
diff --git a/compose/animation/animation/api/public_plus_experimental_current.txt b/compose/animation/animation/api/public_plus_experimental_current.txt
index 3922f7a..e6e29ea 100644
--- a/compose/animation/animation/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation/api/public_plus_experimental_current.txt
@@ -107,7 +107,7 @@
     method public static kotlin.jvm.functions.Function1<androidx.compose.ui.graphics.colorspace.ColorSpace,androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D>> getVectorConverter(androidx.compose.ui.graphics.Color.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
-    method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.Position.Companion);
+    method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.unit.Bounds.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
@@ -141,9 +141,9 @@
     method @androidx.compose.runtime.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, optional androidx.compose.animation.core.AnimationSpec<T> animSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, optional androidx.compose.animation.core.AnimationSpec<T> animSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-2AXSKHY(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener);
+    method @androidx.compose.runtime.Composable public static long animate-4E4yWWY(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.DpOffset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.DpOffset,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-Cmzki-s(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static float animate-Lz7ev7o(float target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener);
-    method @androidx.compose.runtime.Composable public static long animate-TEItX5s(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-m3E411Q(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-t81mtYE(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener);
diff --git a/compose/animation/animation/api/restricted_current.txt b/compose/animation/animation/api/restricted_current.txt
index 3922f7a..e6e29ea 100644
--- a/compose/animation/animation/api/restricted_current.txt
+++ b/compose/animation/animation/api/restricted_current.txt
@@ -107,7 +107,7 @@
     method public static kotlin.jvm.functions.Function1<androidx.compose.ui.graphics.colorspace.ColorSpace,androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D>> getVectorConverter(androidx.compose.ui.graphics.Color.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
-    method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.Position.Companion);
+    method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.unit.Bounds.Companion);
     method @Deprecated public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
@@ -141,9 +141,9 @@
     method @androidx.compose.runtime.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, optional androidx.compose.animation.core.AnimationSpec<T> animSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, optional androidx.compose.animation.core.AnimationSpec<T> animSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-2AXSKHY(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener);
+    method @androidx.compose.runtime.Composable public static long animate-4E4yWWY(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.DpOffset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.DpOffset,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-Cmzki-s(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static float animate-Lz7ev7o(float target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener);
-    method @androidx.compose.runtime.Composable public static long animate-TEItX5s(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-m3E411Q(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener);
     method @androidx.compose.runtime.Composable public static long animate-t81mtYE(long target, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener);
diff --git a/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt b/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
index e1e0cff..3b9d7c8 100644
--- a/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
+++ b/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
@@ -41,7 +41,7 @@
 import androidx.compose.ui.test.ExperimentalTesting
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.unit.Bounds
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.util.lerp
 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -135,7 +135,7 @@
         val endVal = AnimationVector(0f, 77f)
 
         var vectorValue = startVal
-        var positionValue = Position.VectorConverter.convertFromVector(startVal)
+        var positionValue = DpOffset.VectorConverter.convertFromVector(startVal)
         var sizeValue = Size.VectorConverter.convertFromVector(startVal)
         var pxPositionValue = Offset.VectorConverter.convertFromVector(startVal)
 
@@ -153,9 +153,9 @@
 
             positionValue = animate(
                 if (enabled)
-                    Position.VectorConverter.convertFromVector(endVal)
+                    DpOffset.VectorConverter.convertFromVector(endVal)
                 else
-                    Position.VectorConverter.convertFromVector(startVal),
+                    DpOffset.VectorConverter.convertFromVector(startVal),
                 tween()
             )
 
@@ -185,7 +185,7 @@
 
                 assertEquals(expect, vectorValue)
                 assertEquals(Size.VectorConverter.convertFromVector(expect), sizeValue)
-                assertEquals(Position.VectorConverter.convertFromVector(expect), positionValue)
+                assertEquals(DpOffset.VectorConverter.convertFromVector(expect), positionValue)
                 assertEquals(Offset.VectorConverter.convertFromVector(expect), pxPositionValue)
                 rule.clockTestRule.advanceClock(50)
                 rule.waitForIdle()
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
index 12cc147..58f27a6 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
@@ -32,7 +32,7 @@
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
@@ -137,12 +137,12 @@
 )
 
 /**
- * A type converter that converts a [Position] to a [AnimationVector2D], and vice versa.
+ * A type converter that converts a [DpOffset] to a [AnimationVector2D], and vice versa.
  */
-private val PositionToVector: TwoWayConverter<Position, AnimationVector2D> =
+private val DpOffsetToVector: TwoWayConverter<DpOffset, AnimationVector2D> =
     TwoWayConverter(
         convertToVector = { AnimationVector2D(it.x.value, it.y.value) },
-        convertFromVector = { Position(it.v1.dp, it.v2.dp) }
+        convertFromVector = { DpOffset(it.v1.dp, it.v2.dp) }
     )
 
 /**
@@ -216,11 +216,11 @@
     get() = DpToVector
 
 /**
- * A type converter that converts a [Position] to a [AnimationVector2D], and vice versa.
+ * A type converter that converts a [DpOffset] to a [AnimationVector2D], and vice versa.
  */
 @Deprecated("Position.VectorConverter has been moved to animation-core library")
-val Position.Companion.VectorConverter: TwoWayConverter<Position, AnimationVector2D>
-    get() = PositionToVector
+val DpOffset.Companion.VectorConverter: TwoWayConverter<DpOffset, AnimationVector2D>
+    get() = DpOffsetToVector
 
 /**
  * A type converter that converts a [Size] to a [AnimationVector2D], and vice versa.
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
index 84ae2d8..eb27870 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
@@ -44,7 +44,7 @@
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 
 private val defaultAnimation = SpringSpec<Float>()
 
@@ -147,15 +147,15 @@
 }
 
 /**
- * Fire-and-forget animation [Composable] for [Position]. Once such an animation is created, it will
+ * Fire-and-forget animation [Composable] for [DpOffset]. Once such an animation is created, it will
  * be positionally memoized, like other @[Composable]s. To trigger the animation, or alter the
  * course of the animation, simply supply a different [target] to the [Composable].
  *
  * Note, [animateTo] is for simple animations that cannot be canceled. For cancellable animations
  * see [animatedValue].
  *
- *     val position : Position = animate(
- *         if (selected) Position(0.dp, 0.dp) else Position(20.dp, 20.dp))
+ *     val position : DpOffset = animate(
+ *         if (selected) DpOffset(0.dp, 0.dp) else DpOffset(20.dp, 20.dp))
  *
  * @param target Target value of the animation
  * @param animSpec The animation that will be used to change the value through time. Physics
@@ -164,16 +164,16 @@
  */
 @Composable
 fun animate(
-    target: Position,
-    animSpec: AnimationSpec<Position> = remember {
+    target: DpOffset,
+    animSpec: AnimationSpec<DpOffset> = remember {
         SpringSpec(
-            visibilityThreshold = Position.VisibilityThreshold
+            visibilityThreshold = DpOffset.VisibilityThreshold
         )
     },
-    endListener: ((Position) -> Unit)? = null
-): Position {
+    endListener: ((DpOffset) -> Unit)? = null
+): DpOffset {
     return animate(
-        target, Position.VectorConverter, animSpec, endListener = endListener
+        target, DpOffset.VectorConverter, animSpec, endListener = endListener
     )
 }
 
diff --git a/compose/material/material/api/current.txt b/compose/material/material/api/current.txt
index 866aca3..b33ea77 100644
--- a/compose/material/material/api/current.txt
+++ b/compose/material/material/api/current.txt
@@ -481,7 +481,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.runtime.Composable public static void DropdownMenu-iBtHMRc(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier toggleModifier, optional long dropdownOffset, optional androidx.compose.ui.Modifier dropdownModifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.runtime.Composable public static void DropdownMenu-k5nJks8(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier toggleModifier, optional long dropdownOffset, optional androidx.compose.ui.Modifier dropdownModifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.InteractionState interactionState, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
diff --git a/compose/material/material/api/public_plus_experimental_current.txt b/compose/material/material/api/public_plus_experimental_current.txt
index 866aca3..b33ea77 100644
--- a/compose/material/material/api/public_plus_experimental_current.txt
+++ b/compose/material/material/api/public_plus_experimental_current.txt
@@ -481,7 +481,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.runtime.Composable public static void DropdownMenu-iBtHMRc(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier toggleModifier, optional long dropdownOffset, optional androidx.compose.ui.Modifier dropdownModifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.runtime.Composable public static void DropdownMenu-k5nJks8(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier toggleModifier, optional long dropdownOffset, optional androidx.compose.ui.Modifier dropdownModifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.InteractionState interactionState, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
diff --git a/compose/material/material/api/restricted_current.txt b/compose/material/material/api/restricted_current.txt
index 866aca3..b33ea77 100644
--- a/compose/material/material/api/restricted_current.txt
+++ b/compose/material/material/api/restricted_current.txt
@@ -481,7 +481,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.runtime.Composable public static void DropdownMenu-iBtHMRc(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier toggleModifier, optional long dropdownOffset, optional androidx.compose.ui.Modifier dropdownModifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.runtime.Composable public static void DropdownMenu-k5nJks8(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier toggleModifier, optional long dropdownOffset, optional androidx.compose.ui.Modifier dropdownModifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.InteractionState interactionState, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
index 0dcc59c..009a3b3e 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
@@ -36,7 +36,7 @@
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
@@ -85,7 +85,7 @@
         expanded = expanded,
         onDismissRequest = { expanded = false },
         toggle = iconButton,
-        dropdownOffset = Position(24.dp, 0.dp),
+        dropdownOffset = DpOffset(24.dp, 0.dp),
         toggleModifier = modifier
     ) {
         options.forEach {
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
index aff45d5..d048f77 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
@@ -40,7 +40,7 @@
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
@@ -134,7 +134,7 @@
         val popupSize = IntSize(50, 80)
 
         val ltrPosition = DropdownMenuPositionProvider(
-            Position(offsetX.dp, offsetY.dp),
+            DpOffset(offsetX.dp, offsetY.dp),
             density
         ).calculatePosition(
             IntBounds(anchorPosition, anchorSize),
@@ -151,7 +151,7 @@
         )
 
         val rtlPosition = DropdownMenuPositionProvider(
-            Position(offsetX.dp, offsetY.dp),
+            DpOffset(offsetX.dp, offsetY.dp),
             density
         ).calculatePosition(
             IntBounds(anchorPosition, anchorSize),
@@ -182,7 +182,7 @@
         val popupSize = IntSize(150, 80)
 
         val ltrPosition = DropdownMenuPositionProvider(
-            Position(offsetX.dp, offsetY.dp),
+            DpOffset(offsetX.dp, offsetY.dp),
             density
         ).calculatePosition(
             IntBounds(anchorPosition, anchorSize),
@@ -199,7 +199,7 @@
         )
 
         val rtlPosition = DropdownMenuPositionProvider(
-            Position(offsetX.dp, offsetY.dp),
+            DpOffset(offsetX.dp, offsetY.dp),
             density
         ).calculatePosition(
             IntBounds(anchorPositionRtl, anchorSize),
@@ -231,7 +231,7 @@
         val verticalMargin = with(density) { MenuVerticalMargin.toIntPx() }
 
         val position = DropdownMenuPositionProvider(
-            Position(0.dp, 0.dp),
+            DpOffset(0.dp, 0.dp),
             density
         ).calculatePosition(
             IntBounds(anchorPosition, anchorSize),
@@ -260,7 +260,7 @@
         var obtainedParentBounds = IntBounds(0, 0, 0, 0)
         var obtainedMenuBounds = IntBounds(0, 0, 0, 0)
         DropdownMenuPositionProvider(
-            Position(offsetX.dp, offsetY.dp),
+            DpOffset(offsetX.dp, offsetY.dp),
             density
         ) { parentBounds, menuBounds ->
             obtainedParentBounds = parentBounds
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Menu.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
index 30cbd64..c0ba658 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
@@ -51,7 +51,7 @@
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.height
 import androidx.compose.ui.unit.width
@@ -94,7 +94,7 @@
     expanded: Boolean,
     onDismissRequest: () -> Unit,
     toggleModifier: Modifier = Modifier,
-    dropdownOffset: Position = Position(0.dp, 0.dp),
+    dropdownOffset: DpOffset = DpOffset(0.dp, 0.dp),
     dropdownModifier: Modifier = Modifier,
     dropdownContent: @Composable ColumnScope.() -> Unit
 ) {
@@ -289,7 +289,7 @@
 // TODO(popam): Investigate if this can/should consider the app window size rather than screen size
 @Immutable
 internal data class DropdownMenuPositionProvider(
-    val contentOffset: Position,
+    val contentOffset: DpOffset,
     val density: Density,
     val onPositionCalculated: (IntBounds, IntBounds) -> Unit = { _, _ -> }
 ) : PopupPositionProvider {
diff --git a/compose/ui/ui-unit/api/current.txt b/compose/ui/ui-unit/api/current.txt
index 1a4ba07..4bcdad1 100644
--- a/compose/ui/ui-unit/api/current.txt
+++ b/compose/ui/ui-unit/api/current.txt
@@ -117,11 +117,11 @@
   }
 
   public final class DpKt {
-    method @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline long DpOffset-ioHfwGI(float x, float y);
+    method @Deprecated @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
     method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
     method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
     method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
@@ -130,8 +130,8 @@
     method public static inline boolean isFinite-0680j_4(float);
     method public static inline boolean isSpecified-0680j_4(float);
     method public static inline boolean isUnspecified-0680j_4(float);
-    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
     method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static long lerp-O0PuQT4(long start, long stop, float fraction);
     method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
     method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
     method public static inline float takeOrElse-RiydCdY(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
@@ -140,6 +140,26 @@
     method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
+  @androidx.compose.runtime.Immutable public final inline class DpOffset {
+    ctor public DpOffset();
+    method public static long constructor-impl(long packedValue);
+    method public static long copy-ioHfwGI(long $this, optional float x, optional float y);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method public static boolean equals-impl0(long p1, long p2);
+    method public static float getX-D9Ej5fM(long $this);
+    method public static float getY-D9Ej5fM(long $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-jo-Fl9I(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-jo-Fl9I(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
+    field public static final androidx.compose.ui.unit.DpOffset.Companion Companion;
+  }
+
+  public static final class DpOffset.Companion {
+    method public long getZero-RKDOV3M();
+    property public final long Zero;
+  }
+
   @androidx.compose.runtime.Immutable public final inline class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration();
     method @androidx.compose.runtime.Stable public int compareTo-WUeva1s(long p);
@@ -296,24 +316,6 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.runtime.Immutable public final inline class Position {
-    ctor public Position();
-    method public static long constructor-impl(long packedValue);
-    method public static long copy-ioHfwGI(long $this, optional float x, optional float y);
-    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
-    method public static boolean equals-impl0(long p1, long p2);
-    method public static float getX-D9Ej5fM(long $this);
-    method public static float getY-D9Ej5fM(long $this);
-    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
-    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
-    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
-    field public static final androidx.compose.ui.unit.Position.Companion Companion;
-  }
-
-  public static final class Position.Companion {
-  }
-
   @androidx.compose.runtime.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
     method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
diff --git a/compose/ui/ui-unit/api/public_plus_experimental_current.txt b/compose/ui/ui-unit/api/public_plus_experimental_current.txt
index 1a4ba07..4bcdad1 100644
--- a/compose/ui/ui-unit/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-unit/api/public_plus_experimental_current.txt
@@ -117,11 +117,11 @@
   }
 
   public final class DpKt {
-    method @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline long DpOffset-ioHfwGI(float x, float y);
+    method @Deprecated @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
     method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
     method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
     method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
@@ -130,8 +130,8 @@
     method public static inline boolean isFinite-0680j_4(float);
     method public static inline boolean isSpecified-0680j_4(float);
     method public static inline boolean isUnspecified-0680j_4(float);
-    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
     method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static long lerp-O0PuQT4(long start, long stop, float fraction);
     method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
     method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
     method public static inline float takeOrElse-RiydCdY(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
@@ -140,6 +140,26 @@
     method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
+  @androidx.compose.runtime.Immutable public final inline class DpOffset {
+    ctor public DpOffset();
+    method public static long constructor-impl(long packedValue);
+    method public static long copy-ioHfwGI(long $this, optional float x, optional float y);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method public static boolean equals-impl0(long p1, long p2);
+    method public static float getX-D9Ej5fM(long $this);
+    method public static float getY-D9Ej5fM(long $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-jo-Fl9I(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-jo-Fl9I(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
+    field public static final androidx.compose.ui.unit.DpOffset.Companion Companion;
+  }
+
+  public static final class DpOffset.Companion {
+    method public long getZero-RKDOV3M();
+    property public final long Zero;
+  }
+
   @androidx.compose.runtime.Immutable public final inline class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration();
     method @androidx.compose.runtime.Stable public int compareTo-WUeva1s(long p);
@@ -296,24 +316,6 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.runtime.Immutable public final inline class Position {
-    ctor public Position();
-    method public static long constructor-impl(long packedValue);
-    method public static long copy-ioHfwGI(long $this, optional float x, optional float y);
-    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
-    method public static boolean equals-impl0(long p1, long p2);
-    method public static float getX-D9Ej5fM(long $this);
-    method public static float getY-D9Ej5fM(long $this);
-    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
-    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
-    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
-    field public static final androidx.compose.ui.unit.Position.Companion Companion;
-  }
-
-  public static final class Position.Companion {
-  }
-
   @androidx.compose.runtime.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
     method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
diff --git a/compose/ui/ui-unit/api/restricted_current.txt b/compose/ui/ui-unit/api/restricted_current.txt
index 79c6020..62019ab 100644
--- a/compose/ui/ui-unit/api/restricted_current.txt
+++ b/compose/ui/ui-unit/api/restricted_current.txt
@@ -117,11 +117,11 @@
   }
 
   public final class DpKt {
-    method @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline long DpOffset-ioHfwGI(float x, float y);
+    method @Deprecated @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
     method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
     method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
     method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
@@ -130,8 +130,8 @@
     method public static inline boolean isFinite-0680j_4(float);
     method public static inline boolean isSpecified-0680j_4(float);
     method public static inline boolean isUnspecified-0680j_4(float);
-    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
     method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static long lerp-O0PuQT4(long start, long stop, float fraction);
     method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
     method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
     method public static inline float takeOrElse-RiydCdY(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
@@ -140,6 +140,26 @@
     method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
+  @androidx.compose.runtime.Immutable public final inline class DpOffset {
+    ctor public DpOffset();
+    method public static long constructor-impl(long packedValue);
+    method public static long copy-ioHfwGI(long $this, optional float x, optional float y);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method public static boolean equals-impl0(long p1, long p2);
+    method public static float getX-D9Ej5fM(long $this);
+    method public static float getY-D9Ej5fM(long $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-jo-Fl9I(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-jo-Fl9I(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
+    field public static final androidx.compose.ui.unit.DpOffset.Companion Companion;
+  }
+
+  public static final class DpOffset.Companion {
+    method public long getZero-RKDOV3M();
+    property public final long Zero;
+  }
+
   @androidx.compose.runtime.Immutable public final inline class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration();
     method @androidx.compose.runtime.Stable public int compareTo-WUeva1s(long p);
@@ -296,24 +316,6 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.runtime.Immutable public final inline class Position {
-    ctor public Position();
-    method public static long constructor-impl(long packedValue);
-    method public static long copy-ioHfwGI(long $this, optional float x, optional float y);
-    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
-    method public static boolean equals-impl0(long p1, long p2);
-    method public static float getX-D9Ej5fM(long $this);
-    method public static float getY-D9Ej5fM(long $this);
-    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
-    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
-    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
-    field public static final androidx.compose.ui.unit.Position.Companion Companion;
-  }
-
-  public static final class Position.Companion {
-  }
-
   @androidx.compose.runtime.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
     method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
diff --git a/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt b/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
index bb24b51..96e2908 100644
--- a/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
+++ b/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
@@ -27,7 +27,6 @@
 import androidx.compose.ui.util.unpackFloat2
 import kotlin.math.max
 import kotlin.math.min
-import kotlin.math.sqrt
 
 /**
  * Dimension value representing device-independent pixels (dp). Component APIs specify their
@@ -249,70 +248,81 @@
 // Structures using Dp
 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
+@Deprecated(
+    "Use DpOffset",
+    ReplaceWith("DpOffset", "androidx.compose.ui.unit.DpOffset")
+)
+typealias Position = DpOffset
+
 /**
- * A two-dimensional position using [Dp] for units
+ * A two-dimensional offset using [Dp] for units
  */
 @OptIn(ExperimentalUnsignedTypes::class)
 @Suppress("EXPERIMENTAL_FEATURE_WARNING")
 @Immutable
-inline class Position(@PublishedApi internal val packedValue: Long) {
+inline class DpOffset(@PublishedApi internal val packedValue: Long) {
     /**
-     * The horizontal aspect of the position in [Dp]
+     * The horizontal aspect of the offset in [Dp]
      */
     @Stable
     /*inline*/ val x: Dp
         get() = unpackFloat1(packedValue).dp
 
     /**
-     * The vertical aspect of the position in [Dp]
+     * The vertical aspect of the offset in [Dp]
      */
     @Stable
     /*inline*/ val y: Dp
         get() = unpackFloat2(packedValue).dp
 
     /**
-     * Returns a copy of this Position instance optionally overriding the
+     * Returns a copy of this [DpOffset] instance optionally overriding the
      * x or y parameter
      */
-    fun copy(x: Dp = this.x, y: Dp = this.y): Position = Position(x, y)
+    fun copy(x: Dp = this.x, y: Dp = this.y): DpOffset = DpOffset(x, y)
 
     /**
-     * Subtract a [Position] from another one.
+     * Subtract a [DpOffset] from another one.
      */
     @Stable
-    inline operator fun minus(other: Position) =
-        Position(x - other.x, y - other.y)
+    inline operator fun minus(other: DpOffset) =
+        DpOffset(x - other.x, y - other.y)
 
     /**
-     * Add a [Position] to another one.
+     * Add a [DpOffset] to another one.
      */
     @Stable
-    inline operator fun plus(other: Position) =
-        Position(x + other.x, y + other.y)
+    inline operator fun plus(other: DpOffset) =
+        DpOffset(x + other.x, y + other.y)
 
     @Stable
     override fun toString(): String = "($x, $y)"
 
-    companion object
+    companion object {
+        /**
+         * A [DpOffset] with 0 DP [x] and 0 DP [y] values.
+         */
+        val Zero = DpOffset(0.dp, 0.dp)
+    }
 }
 
 /**
- * Constructs a [Position] from [x] and [y] position [Dp] values.
+ * Constructs a [DpOffset] from [x] and [y] position [Dp] values.
  */
 @OptIn(ExperimentalUnsignedTypes::class)
 @Stable
-inline fun Position(x: Dp, y: Dp): Position = Position(packFloats(x.value, y.value))
+inline fun DpOffset(x: Dp, y: Dp): DpOffset = DpOffset(packFloats(x.value, y.value))
 
-/**
- * The magnitude of the offset represented by this [Position].
- */
+@Deprecated(
+    "Use DpOffset",
+    ReplaceWith("DpOffset(x, y)", "androidx.compose.ui.unit.DpOffset")
+)
+@OptIn(ExperimentalUnsignedTypes::class)
 @Stable
-fun Position.getDistance(): Dp {
-    return Dp(sqrt(x.value * x.value + y.value * y.value))
-}
+inline fun Position(x: Dp, y: Dp): DpOffset = DpOffset(packFloats(x.value, y.value))
 
 /**
- * Linearly interpolate between two [Position]s.
+ * Linearly interpolate between two [DpOffset]s.
  *
  * The [fraction] argument represents position on the timeline, with 0.0 meaning
  * that the interpolation has not started, returning [start] (or something
@@ -323,8 +333,8 @@
  * 1.0, so negative values and values greater than 1.0 are valid.
  */
 @Stable
-fun lerp(start: Position, stop: Position, fraction: Float): Position =
-    Position(lerp(start.x, stop.x, fraction), lerp(start.y, stop.y, fraction))
+fun lerp(start: DpOffset, stop: DpOffset, fraction: Float): DpOffset =
+    DpOffset(lerp(start.x, stop.x, fraction), lerp(start.y, stop.y, fraction))
 
 /**
  * A four dimensional bounds using [Dp] for units
diff --git a/compose/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt b/compose/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt
index 519afcb..1fac81c 100644
--- a/compose/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt
+++ b/compose/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt
@@ -162,34 +162,28 @@
     }
 
     @Test
-    fun positionDistance() {
-        val position = Position(3.dp, 4.dp)
-        assertEquals(5.dp, position.getDistance())
-    }
-
-    @Test
     fun lerpPosition() {
-        val a = Position(3.dp, 10.dp)
-        val b = Position(5.dp, 8.dp)
-        assertEquals(Position(4.dp, 9.dp), lerp(a, b, 0.5f))
-        assertEquals(Position(3.dp, 10.dp), lerp(a, b, 0f))
-        assertEquals(Position(5.dp, 8.dp), lerp(a, b, 1f))
+        val a = DpOffset(3.dp, 10.dp)
+        val b = DpOffset(5.dp, 8.dp)
+        assertEquals(DpOffset(4.dp, 9.dp), lerp(a, b, 0.5f))
+        assertEquals(DpOffset(3.dp, 10.dp), lerp(a, b, 0f))
+        assertEquals(DpOffset(5.dp, 8.dp), lerp(a, b, 1f))
     }
 
     @Test
     fun positionMinus() {
-        val a = Position(3.dp, 10.dp)
-        val b = Position(5.dp, 8.dp)
-        assertEquals(Position(-2.dp, 2.dp), a - b)
-        assertEquals(Position(2.dp, -2.dp), b - a)
+        val a = DpOffset(3.dp, 10.dp)
+        val b = DpOffset(5.dp, 8.dp)
+        assertEquals(DpOffset(-2.dp, 2.dp), a - b)
+        assertEquals(DpOffset(2.dp, -2.dp), b - a)
     }
 
     @Test
     fun positionPlus() {
-        val a = Position(3.dp, 10.dp)
-        val b = Position(5.dp, 8.dp)
-        assertEquals(Position(8.dp, 18.dp), a + b)
-        assertEquals(Position(8.dp, 18.dp), b + a)
+        val a = DpOffset(3.dp, 10.dp)
+        val b = DpOffset(5.dp, 8.dp)
+        assertEquals(DpOffset(8.dp, 18.dp), a + b)
+        assertEquals(DpOffset(8.dp, 18.dp), b + a)
     }
 
     @Test
@@ -206,13 +200,13 @@
 
     @Test
     fun testPositionCopy() {
-        val position = Position(12.dp, 27.dp)
+        val position = DpOffset(12.dp, 27.dp)
         assertEquals(position, position.copy())
     }
 
     @Test
     fun testPositionCopyOverwriteX() {
-        val position = Position(15.dp, 32.dp)
+        val position = DpOffset(15.dp, 32.dp)
         val copy = position.copy(x = 59.dp)
         assertEquals(59.dp, copy.x)
         assertEquals(32.dp, copy.y)
@@ -220,7 +214,7 @@
 
     @Test
     fun testPositionCopyOverwriteY() {
-        val position = Position(19.dp, 42.dp)
+        val position = DpOffset(19.dp, 42.dp)
         val copy = position.copy(y = 67.dp)
         assertEquals(19.dp, copy.x)
         assertEquals(67.dp, copy.y)